{"version":3,"sources":["webpack:///./node_modules/@syncfusion/ej2-popups/src/tooltip/tooltip.js","webpack:///./node_modules/@syncfusion/ej2-calendars/src/datepicker/datepicker.js","webpack:///./node_modules/@syncfusion/ej2-data/src/adaptors.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/spinner/spinner.js","webpack:///./node_modules/@syncfusion/ej2-dropdowns/src/multi-select/float-label.js","webpack:///./node_modules/@syncfusion/ej2-dropdowns/src/multi-select/multi-select.js","webpack:///./node_modules/@syncfusion/ej2-data/src/query.js","webpack:///./node_modules/@syncfusion/ej2-calendars/src/calendar/calendar.js","webpack:///./node_modules/@syncfusion/ej2-dropdowns/src/drop-down-base/drop-down-base.js","webpack:///./node_modules/@syncfusion/ej2-dropdowns/src/common/incremental-search.js","webpack:///./node_modules/@syncfusion/ej2-buttons/src/radio-button/radio-button.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/toolbar/toolbar.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/input/input.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/common/h-scroll.js","webpack:///./node_modules/@syncfusion/ej2-data/src/manager.js","webpack:///./node_modules/@syncfusion/ej2-dropdowns/src/drop-down-list/drop-down-list.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/common/collision.js","webpack:///./src/utils/LICIENSE.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/common/position.js","webpack:///./node_modules/@syncfusion/ej2-calendars/src/timepicker/timepicker.js","webpack:///./node_modules/@syncfusion/ej2-calendars/src/datetimepicker/datetimepicker.js","webpack:///./node_modules/@syncfusion/ej2-base/src/util.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/parser-base.js","webpack:///./node_modules/@syncfusion/ej2-base/src/hijri-parser.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/date-formatter.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/number-formatter.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/date-parser.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/number-parser.js","webpack:///./node_modules/@syncfusion/ej2-base/src/observer.js","webpack:///./node_modules/@syncfusion/ej2-base/src/internationalization.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/intl-base.js","webpack:///./node_modules/@syncfusion/ej2-base/src/ajax.js","webpack:///./node_modules/@syncfusion/ej2-base/src/browser.js","webpack:///./node_modules/@syncfusion/ej2-base/src/fetch.js","webpack:///./node_modules/@syncfusion/ej2-base/src/event-handler.js","webpack:///./node_modules/@syncfusion/ej2-base/src/dom.js","webpack:///./node_modules/@syncfusion/ej2-base/src/base.js","webpack:///./node_modules/@syncfusion/ej2-base/src/notify-property-change.js","webpack:///./node_modules/@syncfusion/ej2-base/src/animation.js","webpack:///./node_modules/@syncfusion/ej2-base/src/module-loader.js","webpack:///./node_modules/@syncfusion/ej2-base/src/validate-lic.js","webpack:///./node_modules/@syncfusion/ej2-base/src/child-property.js","webpack:///./node_modules/@syncfusion/ej2-base/src/component.js","webpack:///./node_modules/@syncfusion/ej2-base/src/draggable.js","webpack:///./node_modules/@syncfusion/ej2-base/src/droppable.js","webpack:///./node_modules/@syncfusion/ej2-base/src/keyboard.js","webpack:///./node_modules/@syncfusion/ej2-base/src/l10n.js","webpack:///./node_modules/@syncfusion/ej2-base/src/touch.js","webpack:///./node_modules/@syncfusion/ej2-base/src/template.js","webpack:///./node_modules/@syncfusion/ej2-base/src/template-engine.js","webpack:///./node_modules/@syncfusion/ej2-base/src/sanitize-helper.js","webpack:///./node_modules/@syncfusion/ej2-lists/src/common/list-base.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/common/v-scroll.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/form-validator/form-validator.js","webpack:///./node_modules/@syncfusion/ej2-buttons/src/common/common.js","webpack:///./node_modules/@syncfusion/ej2-buttons/src/check-box/check-box.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/numerictextbox/numerictextbox.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/popup/popup.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/common/resize.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/dialog/dialog.js","webpack:///./node_modules/@syncfusion/ej2-data/src/util.js","webpack:///./node_modules/@syncfusion/ej2-vue-base/src/component-base.js","webpack:///./node_modules/@syncfusion/ej2-vue-base/src/template.js","webpack:///./src/utils/DecodeJWT.js","webpack:///./node_modules/@syncfusion/ej2-buttons/src/button/button.js"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","TOUCHEND_HIDE_DELAY","TAPHOLD_THRESHOLD","SHOW_POINTER_TIP_GAP","HIDE_POINTER_TIP_GAP","MOUSE_TRAIL_GAP","POINTER_ADJUST","ROOT","RTL","DEVICE","ICON","CLOSE","TOOLTIP_WRAP","CONTENT","ARROW_TIP","ARROW_TIP_OUTER","ARROW_TIP_INNER","TIP_BOTTOM","TIP_TOP","TIP_LEFT","TIP_RIGHT","POPUP_ROOT","POPUP_OPEN","POPUP_CLOSE","POPUP_LIB","HIDE_POPUP","POPUP_CONTAINER","Animation","_super","apply","effect","duration","delay","Tooltip","options","element","_this","call","mouseMoveEvent","mouseMoveTarget","containerElement","isBodyContainer","initialize","formatPosition","_a","_b","position","indexOf","split","tooltipPositionY","tooltipPositionX","renderArrow","setTipClass","tip","createElement","className","tipClass","appendChild","tooltipEle","renderPopup","elePos","mouseTrail","top","left","getTooltipPosition","classList","remove","popupObj","height","width","X","Y","enableRtl","open","openPopupHandler","bind","close","closePopupHandler","getScalingFactor","eleRect","getBoundingClientRect","xScalingFactor","Math","round","offsetWidth","yScalingFactor","offsetHeight","x","isFinite","y","style","display","parentWithZoomStyle","closest","contains","zoom","getComputedStyle","pos","scalingFactors","offsetPos","calculateTooltipOffset","collisionPosition","calculateElementPosition","collisionLeft","collisionTop","collisionFlipFit","windowResize","reposition","findTarget","dataBind","needTemplateReposition","trigger","tooltipEventArgs","isReact","opensOn","clearTemplate","clear","tipWidth","tipHeight","tooltipEleWidth","tooltipEleHeight","arrowEle","tipAdjust","tipHeightAdjust","tipWidthAdjust","tooltipEleRect","arrowEleRect","showTipPointer","clientHeight","clientWidth","offsetX","offsetY","updateTipPosition","selEle","removeList","adjustArrow","leftValue","topValue","tooltipWidth","tooltipHeight","arrowInnerELe","tipPosExclude","tipPointerPosition","renderContent","tooltipContent","cssClass","getAttribute","setAttribute","removeAttribute","content","innerHTML","HTMLElement","enableHtmlSanitizer","setProperties","sanitize","tempFunction","tempArr","id","undefined","enableHtmlParse","nodeList","templateFunction","renderReactTemplates","renderCloseIcon","isSticky","tipClose","add","touchStartEvent","onStickyClose","addDataTooltipId","removeDataTooltipId","tapHoldHandler","evt","clearTimeout","autoCloseTimer","targetHover","originalEvent","touchEndHandler","e","setTimeout","targetClick","hideTooltip","animation","closeDelay","targetList","slice","ctrlId","document","_i","targetList_1","target_1","restoreElement","showTooltip","mouseMoveBeforeOpen","mouseMoveBeforeRemove","showAnimation","showTimer","hideTimer","openDelay","type","cancel","event","isInteracted","observeCallback","beforeRenderArgs","beforeRenderCallback","isHidden","attrs","role","styles","keys","htmlAttributes","attr","tooltipBeforeRender","tooltipAfterRender","stop","appendContainer","ctrlObj","container","body","tagName","isDevice","maxWidth","observedArgs","beforeOpenCallback","openAnimation_1","name","timingFunction","show","onMouseMove","wireMouseEvents","tooltip","viewContainerRef","checkCollision","horizontal","vertical","affectedPos","checkCollideTarget","offsetLeft","window","pageXOffset","scrollLeft","offsetTop","pageYOffset","scrollTop","newpos","collidedPosition","elePosVertical","elePosHorizontal","getOffSetPosition","elePosition","eleOffset","windowCollision","arrowleft","parseInt","toString","positionString","newPos","offsetType","hideAnimation","targetElement","hide","isTooltipOpen","tooltipHide","popupHide","closeAnimation","unwireMouseEvents","destroy","tooltipHover","tooltipMouseOut","onMouseOut","enteredElement","relatedTarget","checkForTooltipElement","tooltipElementMouseOut","eventPageX","eventPageY","preventDefault","touches","pageX","pageY","colpos","keyDown","targetsList","unwireEvents","wireEvents","keyCode","touchEnd","scrollHandler","render","renderComplete","preRender","triggerList","getTriggerList","triggerList_1","wireFocusEvents","touchModule","tapHoldThreshold","tapHold","touchEndEvent","nodeName","targetList_2","triggerList_2","unwireFocusEvents","targetList_3","triggerList_3","getModuleName","getPersistData","addOnPersist","onPropertyChanged","newProp","oldProp","prop","refresh","currentTarget","currentTarget_1","DATEWRAPPER","LIBRARY","CONTROL","POPUPWRAPPER","INPUTWRAPPER","POPUP","INPUTCONTAINER","INPUTFOCUS","INPUTROOT","ERROR","ACTIVE","OVERFLOW","DATEICON","ICONS","OPENDURATION","OFFSETVALUE","SELECTED","FOCUSEDDATE","NONEDIT","containerAttr","DatePicker","isDateIconClicked","isAltKeyPressed","invalidValueString","checkPreviousValue","maskedDateValue","isAngular","preventChange","isIconClicked","isDynamicValueChanged","moduleName","isFocused","isBlur","isKeyAction","datepickerOptions","bindEvents","floatLabelType","calculateWidth","inputElement","inputWrapper","buttons","getElementsByClassName","disabled","enabled","setTimeZone","serverTimezoneOffset","offsetValue","value","clientTimeZoneDiff","Date","getTimezoneOffset","serverTimezoneDiff","timeZoneDiff","isDayLightSaving","getTime","updateInput","firstOffset","getFullYear","secondOffset","max","setAllowEdit","allowEdit","readonly","updateIconState","checkInvalidValue","enableMask","notify","module","createInput","updateHtmlAttributeToWrapper","placeholder","updateInputValue","previousElementValue","previousDate","inputValueCopy","ariaAttrs","l10nLocale","globalize","locale","l10n","getConstant","fullScreenMode","updatedCssClassValues","replace","trim","isBindClearAction","bindClearAction","properties","showClearButton","setWidth","tabIndex","addAttributes","isDynamic","formatOptions","isCalendar","disabledDates","isNaN","checkValue","strictMode","validateDate","minMaxUpdates","minMaxUpdate","dateValue","dateString","tempFormat","formatString","dateTimeFormat","calendarMode","formatDate","format","skeleton","calendar","min","changedArgs","errorClass","checkStringValue","val","returnDate","formatDateTime","culture","getDatePattern","checkDateValue","parseDate","valueDate","valueString","invalid","extISOString","basicISOString","test","bindInputEvent","inputHandler","dateIconHandler","mouseUpHandler","inputFocusHandler","inputBlurHandler","keyupHandler","keydownHandler","inputChangeHandler","clearButton","resetHandler","formElement","resetFormHandler","defaultKeyConfigs","keyConfigs","keyboardModules","eventName","keyAction","inputKeyActionHandle","code","unBindEvents","restoreValue","currentDate","stopPropagation","bindClearEvent","clearedArgs","popupUpdate","changeEvent","keyupEvent","createEvent","initEvent","dispatchEvent","preventEventBubbling","interopAdaptor","invokeMethodAsync","setValue","blur","focus","updatedClassValues","setStyle","charAt","updateHtmlAttributeToElement","updateCssClass","newCssClass","oldCssClass","setCssClass","popupWrapper","calendarKeyActionHandle","action","children","index","selectionStart","selectionEnd","focusArguments","model","openOnFocus","isPopupClicked","strictModeUpdate","changeTrigger","activeElement","blurArguments","calendarKeyboardModules","calendarElement","firstElementChild","documentHandler","parentElement","depth","toLowerCase","generateTodayVal","focusOut","clickedView","currentView","start","end","length_1","defaultAction","keyActionHandle","setActiveDescendant","querySelectorAll","targetdate","navigateTo","dateOptions","date","pattern","charPattern","len","toLocaleUpperCase","setFullYear","setHours","getHours","getMinutes","getSeconds","getMilliseconds","createCalendar","modelHeader","modal","querySelector","relateTo","targetType","zIndex","collision","iconRight","marginRight","swipe","CalendarSwipeHandler","TouchStartHandler","resetCalendar","preventArgs","setAriaAttributes","targetExitViewport","direction","swipeDirection","touchStart","navigateNext","navigatePrevious","setAriaDisabled","yearHeading","h2","daySpan","monthSpan","textContent","modelCloseIcon","modelCloseHandler","modelTodayButton","insertBefore","valueOf","navigatedEvent","navigatedArgs","selectCalendar","requiredModules","modules","push","args","member","match","prevent_1","outOfRange","mobilePopupWrapper","popup","appendTo","eventArgs","refreshPosition","openAnimation","setOverlayIndex","tableBodyElement","prevent_2","closeEventCallback","prevent","keyboardModule","outerHTML","focusIn","triggerEvent","view","removeAttributes","inputElementCopy","ensureInputAttribute","ngTag","insertAdjacentElement","attributes","cloneNode","validationAttribute","getDefaultKeyConfig","checkHtmlAttributes","hasAttribute","altUpArrow","altDownArrow","escape","enter","controlUp","controlDown","moveDown","moveUp","moveLeft","moveRight","select","home","pageUp","pageDown","shiftPageUp","shiftPageDown","controlHome","controlEnd","shiftTab","tab","nameAttribute","attribute","checkFormat","skeletonString","dynamic","checkView","attributes_1","valueCopy","previousValCopy","renderDayCell","inputVal","dateIdString","isDisabledDate","setMilliseconds","setPlaceholder","setReadonly","setEnabled","setLocale","setEnableRtl","setClearButton","removeFloating","addFloating","day","month","year","hour","minute","second","dayOfTheWeek","consts","GroupGuid","Adaptor","ds","from","requestType","sortBy","skip","group","take","search","count","where","aggregates","expand","dataSource","pvt","processResponse","data","query","xhr","JsonAdaptor","processQuery","dataManager","ret","page","result","json","countFlg","lazyLoad","keyCount","agg","queries","fn","field","lazyLoadData","lazyLoadGroup","isCountRequired","getAggregate","onDemandGroupInfo","fieldName","comparer","onPage","formGroupResult","req","onWhere","level","uid","childLevel","records","aggQuery","filterQueries","tmp","getValue","batchRequest","dm","changes","deletedRecordsLen","deletedRecords","addedRecords","insert","changedRecords","update","filter","obj","validate","onAggregates","onSearch","fieldNames","getFieldList","j","getObject","searchKey","ignoreCase","ignoreAccent","onSortBy","fnCompare","sort","endsWith","fnSort","onGroup","size","pageSize","pageIndex","onRange","onTake","nos","onSkip","onSelect","tableName","splice","keyField","UrlAdaptor","hierarchyFilters","temp","getQueryRequest","singles","filterQueryLists","params","url","request","sorts","groups","filters","searches","callAdaptorFunction","getFiltersFrom","toJson","res","keys_3","keys_1","isNull","fields","operator","getRequestQuery","reqParams","keys_2","JSON","stringify","parse","jsonDateReplacer","pvtData","contentType","convertToQueryString","request1","param","fromTable","distincts","selects","expands","getResponseHeader","handleTimeZone","timeZoneHandling","parseJson","requests","groupDs","isExpand","isArray","formRemoteGroupedData","getAggregateResult","items","childLvl","lvl","getGroupedRecords","hasRecords","childGroupedRecords","concat","original","batchUrl","crudUrl","removeUrl","dataType","changed","added","deleted","table","getAddParams","beforeSend","insertUrl","keyColumn","updateUrl","fKey","pKey","predicats","or","pData","aggregateData","aggregate","isServerGrouping","groupQuery","addParams","Error","ODataAdaptor","props","accept","multipartAccept","batch","changeSet","batchPre","contentId","batchContent","changeSetContent","batchChangeSetContentType","updateType","onPredicate","predicate","requiresCast","guid","returnValue","getField","replacer","encodeURIComponent","isGuid","odBiOperator","odUniOperator","odv4UniOperator","lastIndexOf","substring","splittedStringValue","splittedValue","join","onComplexPredicate","predicates","onEachWhere","condition","isComplex","onEachSearch","throwError","onEachSort","reverse","onCount","settings","setRequestHeader","overrideMimeType","metaCheck","rootUrl","dataUrls","resourceTableName","dataCopy","results","metaData","emptyAndBatch","processBatchResponse","versionCheck","version","oDataCount","requiresFormat","keys_4","localTimeReplacer","convertObj","dateParse","toLocalTime","localTime","compareAndRemove","initialGuid","getGuid","cid","cSet","generateInsertRequest","generateUpdateRequest","generateDeleteRequest","arr","stat","dateTime","toJSON","generateBodyContent","org","forEach","change","o","method","cIdx","jsonObj","exVal","exec","changeGuid","isPlainObject","final","ODataV4Adaptor","isDate","onExpand","selected","expanded","exArr","item","splits","sel","exp","close_1","combineVal","expandQueryIndex","idx","ex","onDistinct","distinctFields","map","metaName","metaV4Name","dataUrl","dataCount","dataV4Count","WebApiAdaptor","_loop_1","location","host","_loop_2","_loop_3","state","datTime","Count","Items","WebMethodAdaptor","getData","RemoteSaveAdaptor","updateKey","newData","urlParams","CustomDataAdaptor","addRecord","updateRecord","deleteRecord","batchUpdate","CacheAdaptor","GraphQLAdaptor","opt","schema","response","getVariables","getQuery","datamanager","urlQuery","str","vars","variables","resData","inserted","generateCrudData","bData","crudData","parsed","getMutation","adaptor","timeStamp","isCrudAction","isInsertAction","cacheAdaptor","guidId","localStorage","setItem","setInterval","getItem","forDel","currentTime","requestTime","removeItem","generateKey","currentFilter","newQuery","clone","cachedItems","crossDomain","globalTimeOut","DEFT_MAT_WIDTH","DEFT_MAT3_WIDTH","DEFT_FAB_WIDTH","DEFT_FLUENT_WIDTH","DEFT_BOOT_WIDTH","DEFT_BOOT4_WIDTH","DEFT_BOOT5_WIDTH","CLS_SHOWSPIN","CLS_HIDESPIN","CLS_MATERIALSPIN","CLS_MATERIAL3SPIN","CLS_FABRICSPIN","CLS_FLUENTSPIN","CLS_TAILWINDSPIN","CLS_BOOTSPIN","CLS_BOOT4SPIN","CLS_BOOT5SPIN","CLS_HIGHCONTRASTSPIN","CLS_SPINWRAP","CLS_SPININWRAP","CLS_SPINCIRCLE","CLS_SPINARC","CLS_SPINLABEL","CLS_SPINTEMPLATE","spinTemplate","spinCSSClass","createSpinner","internalCreateElement","radius","makeElement","create_spinner_container","classNames","wrap","template","theme","getTheme","calculateRadius","setTheme","label","createLabel","inner_wrap","replaceContent","labelEle","createMaterialSpinner","uniqueID","random_generator","timeOut","create_material_element","mat_calculate_attributes","createMaterial3Spinner","createBootstrap4Spinner","createBootstrap5Spinner","startMatAnimate","globalObject","timeOutVar","globalVariables","spinnerInfo","globalInfo","animateMaterial","createFabricSpinner","create_fabric_element","fb_calculate_attributes","createFluentSinner","createTailwindSpinner","createHighContrastSpinner","getPropertyValue","innerContainer","svg","removeChild","createBootstrapSpinner","create_bootstrap_element","boot_calculate_attributes","svgBoot","createElementNS","viewBoxValue","trans","defaultRadius","firstChild","bootCircle","rad","startArc","defineArcPoints","circleEle","generateSeries","begin","series","increment","formSeries","parseFloat","toFixed","animateBootstrap","rotation","circle","boot_animate","isAnimate","inner","defaultSize","previousId","random","combine","floor","innerCon","themeClass","svgFabric","fabricCirclePath","fabricCircleArc","cls","svgMaterial","matCirclePath","spinnerContainer","spinnerInnerContainer","createCircle","easeAnimation","easing","startTime","diameter","getSize","strokeSize","getStrokeSize","rotate","mat_animation","updatePath","path","getDashOffset","transformOrigin","drawArc","PI","offset","current","timestamp","timecount","innerConainer","trgClass","centerX","centerY","endArc","defineCircle","defineArc","angle","radians","cos","sin","showSpinner","showHideSpinner","isHide","spinnerWrap","spinWrapCollection","isIE","find","spinCheck","svgEle","hideSpinner","FLOATLINE","FLOATTEXT","LABELTOP","LABELBOTTOM","createFloatLabel","overAllWrapper","searchWrapper","floatLinelement","floatLabelElement","innerText","encodePlaceholder","updateFloatLabelState","componentWrapper","placeholderText","placeholderElement","floatLine","setPlaceHolder","floatLabelFocus","floatLabelBlur","spanElement","hiddenInput","FOCUS","DISABLED","OVER_ALL_WRAPPER","ELEMENT_WRAPPER","ELEMENT_MOBILE_WRAPPER","HIDE_LIST","DELIMITER_VIEW","CHIP_WRAPPER","CHIP","CHIP_CONTENT","CHIP_CLOSE","CHIP_SELECTED","SEARCHBOX_WRAPPER","DELIMITER_VIEW_WRAPPER","ZERO_SIZE","REMAIN_WRAPPER","CLOSEICON_CLASS","DELIMITER_WRAPPER","POPUP_WRAPPER","INPUT_ELEMENT","RTL_CLASS","CLOSE_ICON_HIDE","MOBILE_CHIP","FOOTER","HEADER","DISABLE_ICON","SPINNER_CLASS","HIDDEN_ELEMENT","dropdownIcon","iconAnimation","TOTAL_COUNT_WRAPPER","BOX_ELEMENT","FILTERPARENT","CUSTOM_WIDTH","FILTERINPUT","MultiSelect","option","clearIconWidth","previousFilterText","isValidKey","selectAllEventData","selectAllEventEle","resetMainList","resetFilteredData","scrollFocusStatus","keyDownStatus","enableRTL","mode","isGroupChecking","enableGroupCheckBox","prevOnChange","isProtectedOnChange","enableSelectionOrder","allowCustomValue","hideSelectedItem","closePopupOnSelect","updateHTMLAttribute","htmlAttr","updatedClassValue","enable","refreshPlaceHolder","defaultAttr","validateAttr","hiddenElement","updateReadonly","updateClearButton","overAllClear","parentNode","updateOldPropCssClass","oldClass","onPopupShown","allowFiltering","proxy_1","onpopstate","hidePopup","history","pushState","animModel","focusAtFirstListItem","groupBy","updateListItems","list","mainList","showDropDownIcon","refreshPopup","updateAriaActiveDescendant","isFirstClick","loadTemplate","listItems","mainListItems","findGroupStart","deselectHeader","refreshListItems","removeFocus","setScrollPosition","valueEle","findListElement","ulElement","scrollBottom","li","addListFocus","focusAtLastListItem","liCollections","getAriaAttributes","ariaAttributes","updateListARIA","disableStatus","isPopupOpen","ensureAriaDisabled","status","removelastSelection","elements","chipCollectionWrapper","tempValues","customValue","getFormattedValue","removeValue","removeChipSelection","updateDelimeter","delimiterChar","makeTextBoxEmpty","listData","refreshSelection","checkPlaceholderSize","onActionFailure","targetInputElement","getForQuery","valuecheck","text","onActionComplete","isUpdated","updateSelectElementData","proxy","checkEle","presentItemValue","addNonPresentItems","updateActionList","showSelectAll","mainData","mainListCollection","remoteCustomValue","inputFocus","checkForCustomValue","tempQuery","unwireListEvents","wireListEvents","setInitialValue","selectAllAction","setDynValue","initialTextUpdate","initialValueUpdate","initialUpdate","changeOnBlur","updateValueState","beforePopupOpen","previousSibling","previousElementSibling","nextElementSibling","hideGroupItem","listEle","l10nUpdate","noData","ariaValue","checkSelectAll","checkMaxSelection","element1","temp1","getValidLi","liElement","groupItemLength","listItem","searchCount","searchActiveCount","maximumSelectionLength","openClick","openOnClick","showPopup","keyUp","char","String","fromCharCode","isWordCharacter","ctrlKey","expandTextbox","showOverAllClear","isFiltered","remoteFilterAction","dataUpdater","filterQuery","filterAction","typeOfData","typeof","filterType","isDataFetched","backCommand","resetList","dataChecks","getValueByText","customData","dataItem","tempData","getNgDirective","wrapperClick","onBlurHandler","eve","isDocClickFromCheck","addTagOnBlur","listLiElement","allowChipAddition","updateListSelection","updateDataList","updateDelimView","focused","removeChipFocus","refreshInputHight","createSpanElement","elementWidth","paddingRight","downIconWidth","dropIcon","setPlaceholderSize","validateValues","newValue","oldValue","newVal","oldVal","initStatus","updateTempValue","getPagingCount","getItems","pageUpSelection","steps","collection","previousItem","getIndexByValue","pageDownSelection","focusInHandler","showDelimWrapper","viewWrapper","delimiterWrapper","hideDelimWrapper","mobFilter","calcPopupWidth","resolveCollision","checkTextLength","popupKeyActions","updateAriaAttribute","focusedItem","filterInput","homeNavigation","isHome","scrollEle","onKeyDown","altKey","activeIndex","arrowUp","arrowDown","selectByKey","spaceKeySelection","escapeAction","keyNavigation","checkBackCommand","moveByList","focuseElem","focusFirstListItem","moveBy","removeSelectedChip","selectListByKey","hideOverAllClear","selectedLI","currentOffset","nextBottom","nextOffset","boxRange","fixedHeaderElement","limit","isValidLI","lastElementChild","selectAllItem","selectAllParent","selectAllCheckBox","childNodes","selectedElem","addChipSelection","moveByTop","updateCheck","checkElement","chipClick","elem","onChipRemove","which","button","customVal","setFloatLabelType","removeAllItems","isClearAll","mainElement","removeVal","invokeCheckboxSelection","updateMainList","updateChipStatus","isSelectAll","targetEle","element_1","val_1","getDataByValue","itemData","removeIndex","hideElement","scrollStop","removeChip","targetEle_1","isChecked","clearAllCallback","element2","addValue","addListSelection","addChip","dispatchSelect","isNotTrigger","val_2","isServerRendered","updateListSelectEventCallback","getChip","closeElements","onMobileChipInteraction","chipElem","chipClose","multiCompiler","multiselectTemplate","checkTemplate","exception","encodeHtmlEntities","input","charCodeAt","compiledString","chip","chipContent","valueTemplate","valueCompTemp","valueTemplateId","isStringTemplate","setClass","classes","isPreventChange","popupWidth","inputWidth","mouseIn","mouseOut","listOption","iconCss","fieldProperty","listCurrentOptions","showIcon","groupItemRole","checkboxFilter","filterParent","overAllHeight","popupHeight","visibility","headerTemplate","setHeaderTemplate","header","footerTemplate","setFooterTemplate","footer","selectAllHeight","popupElement","searchBoxHeight","maxHeight","unwireScrollEvents","checkboxFilterInput","wireScrollEvents","headercheck","headerTemplateId","onListMouseDown","footercheck","footerTemplateId","clearAll","selectAllItems","selectedElementID","resetValueHandler","textVal","wireEvent","onInput","pasteHandler","info","eventArgs_1","preventDefaultAction","updateData","initializeData","updateDataAttribute","getLocaleName","initial","delim","valueLength","hiddenElementContent","valueItem","listValue","getTextByValue","updateWrapperText","addValidInputClass","textArr","renderList","isEmptyData","noRecordsTemplate","childElementCount","removeListSelection","indexItem","noDataEle","addItem","replaceChild","updateActionCompleteData","updateAddItemList","itemCount","isDynamicGroupItemUpdate","isReactTemplateUpdate","isAngularTemplateUpdate","itemTemplate","removeHover","temp_1","fieldValue","data_1","selectedItems","selectItems","hoveredItem","hover","mainlist","addListHover","ariaCheck","delimChar","onMouseClick","headerLi","liChecked","liUnchecked","groupValues","findGroupAttrtibutes","updateCheckBox","listElement","checked","unChecked","groupHeader","checkBoxElement","onMouseOver","currentLi","onMouseLeave","onDocumentClick","spinnerElement","filterClear","wrapperType","wrapperData","tempIndex","wrapperleng","remaining","overAllContainer","actionFailureTemplate","overflowCountTemplate","totalCountTemplate","remainContent","totalContent","raminElement","remainCompildTemp","remainSize","checkClearIconWidth","getOverflowVal","paddingLeft","totalWidth","updateRemainTemplate","updateRemainWidth","updateRemainingText","nodeType","nodeValue","remainTemp","totalTemp","pop","newTemp","unWireEvent","groupTemplate","selectionLimit","focusedElement","textboxValueUpdate","updateValue","beforeSelectArgs","preventSelectEvent","index_1","count_1","updatedataValueItems","updateHiddenElement","hiddenValue","wrapperText","isRemoveAll","setZIndex","updateDataSource","onLoadSelect","isDynamicDataChange","setUpdateInitial","updateVal","filterBarPlaceholder","dropDownIcon","reInitializePoup","msProps","getPropObject","newProperty","oldProperty","executeQuery","then","itemIndex","mainLiLength","liLength","selectAll","spellcheck","autocomplete","tabindex","opacity","checkInitialValue","isData","optionsElement","valueCol","textCol","optionsLen","checkAutoFocus","Query","subQuery","isChild","lookups","sortedColumns","groupedColumns","setKey","using","execute","done","fail","always","executeLocal","cloned","subQuerySelector","distinct","tables","matchCase","Predicate","fnOperators","isFromGroup","sortByForeignKey","order","sortByDesc","range","hierarchy","selectorFn","foreignKey","requiresCount","q","filtered","processOperator","and","combinePredicates","ornot","andnot","fromJson","fromJSONData","pred","record","isAnd","preds","OTHERMONTH","OTHERDECADE","YEAR","MONTH","DECADE","PREVICON","NEXTICON","PREVSPAN","NEXTSPAN","ICONCONTAINER","OVERLAY","WEEKEND","WEEKNUMBER","OTHERMONTHROW","TODAY","TITLE","LINK","CELL","WEEKHEADER","ZOOMIN","BTN","FLAT","CSS","PRIMARY","DAYHEADERLONG","dayMilliSeconds","minutesMilliSeconds","CalendarBase","isDateSelected","isTodayClicked","previousDates","rangeValidation","calendarEleCopy","setSeconds","firstDayOfWeek","getFirstDayOfWeek","todayDisabled","todayDate","createHeader","createContent","spacebar","altRightArrow","altLeftArrow","ariaPrevAttrs","ariaNextAttrs","ariaTitleAttrs","headerElement","iconContainer","previousIcon","selector","isCenterRipple","nextIcon","headerTitleElement","adjustLongHeaderSize","contentElement","createContentHeader","createContentBody","showTodayButton","createContentFooter","getCultureValues","cldrObj","culShortNames","dayFormat","dayHeaderFormat","getCultureObjects","toCapitalize","toUpperCase","daysCount","html","tableHeadElement","weekNumber","shortNames","shiftArray","days","renderYears","renderDecades","renderMonths","updateFooter","todayElement","l10","minimum","maximum","today","todayButtonClick","ref","keyConfig","navigateTitle","dateWireEvents","serverModuleName","isCustomDate","getViewNumber","renderDayCellArgs","multiSelection","selectedDate","focusedDate","depthValue","levelRestrict","keyboardNavigate","selectDate","contentClick","title","firstDay","lastDay","addMonths","addYears","number","isMonthYearRange","addDay","isMinMaxRange","navigatePreviousHandler","navigateNextHandler","navigateHandler","triggerNavigate","minMaxDate","localDate","minDate","maxDate","tdEles","numCells","renderDays","islamicModule","islamicRenderDays","renderTemplate","islamicRenderTemplate","values","isTodayDate","cellsCount","getDate","timezone","currentMonth","getMonth","titleUpdate","getDay","setStartDate","weekEle","weekAnchor","numberOfDays","weekRule","finalDate","getWeek","dateFormatOptions","tdEle","dayCell","dayLink","isDisabled","isOutOfRange","argument","renderDayCellEvent","argsDate","localDateString","tempDateString","otherMnthBool","disabledCls","clickHandler","getDateVal","tempValue","copyValues","type_1","formatOptions_1","localDateString_1","tempDateString_1","updateFocus","otherMonth","tableElement","removeTableHeadElement","valueUtil","curDate","mon","yr","curYrs","minYr","minMonth","maxYr","maxMonth","setMonth","setDate","localMonth","yearCell","localYr","startYr","endYr","startFullYr","endFullYr","startHdrYr","endHdrYr","startYear","rowIterator","lastDate","timeOffset","abs","findLastDay","classNm","trEle","weekNumCell","numberCell","otherMonthCell","row","iconHandler","islamicIconHandler","setAriaActiveDescendant","clickEventEmitter","getIdValue","islamicPreviousHeader","islamicDate","getIslamicDate","toGregorian","switchView","keyEntity","skipIndex","tempValueString","minFormatOption","minStringValue","minString","maxFormatOption","maxStringValue","maxString","setValueUpdate","dayFormatOptions","monthFormatOptions","focusedEle","selectedEle","previousIconHandler","compareMonth","nextIconHandler","compareYear","compareDecade","stringVal","previous","islamicPrevious","next","islamicNext","ld","gregorianFormat","islamicFormat","mainVal","ceil","time","tzOffset","tzOffsetDiff","setTime","getMaxDays","node","setDateDecade","setDateYear","checkPresentDate","tempElement","selectedElement","dates","previousValue","checkPrevious","compare","startDate","endDate","modifier","array","column","findNextTD","rangeValue","tmpDate","inValue","toUTCString","toLocaleString","timeZone","Calendar","isMultiSelection","copyDate","previousValues","setEnable","form","formResetHandler","setMinutes","todayButtonEvent","changeHandler","triggerChange","previousDateTime","isMultiSelect","tempDays","islamicRenderYears","islamicRenderDecade","storeView","tempDate","addDate","tempDates","removeDate","setTodayDate","Number","NaN","FieldSettings","dropDownBaseClasses","root","rtl","fixedHead","grouping","ITEMTEMPLATE_PROPERTY","DISPLAYTEMPLATE_PROPERTY","SPINNERTEMPLATE_PROPERTY","VALUETEMPLATE_PROPERTY","GROUPTEMPLATE_PROPERTY","HEADERTEMPLATE_PROPERTY","FOOTERTEMPLATE_PROPERTY","NORECORDSTEMPLATE_PROPERTY","ACTIONFAILURETEMPLATE_PROPERTY","HIDE_GROUPLIST","DropDownBase","addedNewItem","isAddNewItemTemplate","isRequesting","propName","checkValueCase","isTextByValue","dataSource_1","checkingAccent","checkIgnoreCase","getItemValue","checkNonIgnoreCase","itemValue","compareValue_1","ignoreDiacritics","textItem","typedText","templateCompiler","baseTemplate","actionFailure","ele","templateId","actionFailureTemplateId","noRecordsTemplateId","tempaltecheck","templateName","noDataElement","liElem","componentLocale","enableRtlElements","bindEvent","jsonElement","createJsonFromElement","setListData","renderItemsBySelect","invalidAttr","a","getJSONfromOption","optionGroup","isHeader","child","updateFields","options_1","scrollTimer","isRequested","itemTemplateId","displayTemplateId","spinnerTemplateId","groupTemplateId","isActive","emptyDataRequest","renderItems","renderGroupTemplate","bindChildItems","catch","localDataArgs","childNode","remainingItems","sortedData","updateListValues","raiseDataBound","findNode","listArr","dataBoundEventArgs","spliceData","listElements","templateListItem","createListItemFromArray","createListItemFromJson","postRender","focusItem","selectedItem","groupTemplateID","headerItems","groupcheck","groupValue","tempHeaders","createListItems","sortOrder","getSortedDataSource","groupDataSource","createList","fieldValues","setFloatingHeader","setFixedHeader","liHeight","topIndex","templateID","itemcheck","renderContentTemplate","listDataType","isNullData","borderWidth","defaultView","borderTopWidth","borderBottomWidth","borderLeftWidth","borderRightWidth","liWidth","firstLi","textField","getDataSource","addSorting","setFields","selectData","isFiltering","updateSelection","rippleModel","rippleFun","wrapperElement","newList","itemsCount","selectedItemValue","itemText","itemCheck","addItemTemplate","createTextNode","listGroupItem","tempLi","hidden","_c","queryString","prevString","matches","activeClass","prevElementId","incrementalSearch","selectedIndex","elementId","strLength","substr","Search","searchType","queryStr","toLocaleLowerCase","escapeCharRegExp","itemsData","filterValue","checkField_1","fieldValue_1","RegExp","state_1","resetIncrementalSearchValues","LABEL","RIPPLE","WRAPPER","ATTRIBUTES","RadioButton","RadioButton_1","isVue","updateChange","instance","radioGrp","getRadioGroup","angularValue","radioWrap","wrapper","unWireEvents","focusHandler","focusOutHandler","getLabel","getSelectedValue","getWrapper","initialCheckedValue","initWrapper","updateHtmlAttribute","setDisabled","rippleSpan","for","setText","keyUpHandler","labelMouseDownHandler","labelMouseLeaveHandler","rippleElem","labelMouseUpHandler","labelPosition","formControlName","textLabel","rippleLabel","getElementsByTagName","click","CLS_VERTICAL","CLS_ITEMS","CLS_ITEM","CLS_RTL","CLS_SEPARATOR","CLS_POPUPICON","CLS_POPUPDOWN","CLS_POPUPOPEN","CLS_TEMPLATE","CLS_DISABLE","CLS_POPUPTEXT","CLS_TBARTEXT","CLS_TBAROVERFLOW","CLS_POPOVERFLOW","CLS_TBARBTN","CLS_TBARNAV","CLS_TBARSCRLNAV","CLS_TBARRIGHT","CLS_TBARLEFT","CLS_TBARCENTER","CLS_TBARPOS","CLS_HSCROLLCNT","CLS_VSCROLLCNT","CLS_HSCROLLBAR","CLS_POPUPNAV","CLS_POPUPCLASS","CLS_POPUP","CLS_TBARBTNTEXT","CLS_TBARNAVACT","CLS_TBARIGNORE","CLS_POPPRI","CLS_HIDDEN","CLS_MULTIROW","CLS_MULTIROWPOS","CLS_MULTIROW_SEPARATOR","CLS_EXTENDABLE_SEPARATOR","CLS_EXTEANDABLE_TOOLBAR","CLS_EXTENDABLECLASS","CLS_EXTENDPOPUP","CLS_EXTENDEDPOPOPEN","Item","Toolbar","resizeContext","resize","orientationChangeContext","orientationChange","popupOpen","popupClose","btnItems","el","ej2_instances","tempId","destroyItems","trgtEle","ctrlTem","popObj","activeEle","tbarAlign","tbarItemsCol","attrb","enableCollision","scrollStep","scrollModule","isVertical","isExtendedOpen","popupPriCount","addEventListener","allowKeyboard","wireKeyboardEvent","keyModule","keyActionHandler","docKeyDown","updateTabIndex","dataTabIndex","unwireKeyboardEvent","popCheck","overflowMode","keyCheck","destroyScroll","removeEventListener","docEvent","clearProperty","tbarEle","tbarAlgEle","lefts","centers","rights","popEle","tbarItems","destroyMode","tempEle","popupRefresh","elementFocus","fChild","activeEleSwitch","clstElement","tbrNavChk","trgt","clst","keyHandling","navChk","scrollChk","nodes","rootEle","popAnimate","eleFocus","popupCheck","extendedPopup","focusFirstVisibleEle","focusLastVisibleEle","popFrstEle","ele_1","activeEleRemove","tbarScrollChk","disable","eleContains","sib","skipEle","tbrItems","itemObj","isPopupElement","clsList","popupNav","popupClickHandler","tempItem","clickedArgs","getElementOffsetY","minHeight","renderControl","ariaAttr","renderLayout","renderOverflowMode","itemPositioning","checkPopupRefresh","separator","itemsAlign","itemEleDom","innerItem","innerPos","renderSubComponent","tbarItemAlign","align","showAlwaysInPopup","overflow","portals","changeOrientation","refreshOverflow","initScroll","innerItems","checkOverflow","itemWidthCal","marginTop","marginBottom","marginLeft","getScrollCntEle","eleWidth","itemWidth","popNav","scrollNav","navEleWidth","toolbarAlign","priorityCheck","offsetWid","removePositioning","setOverflowAttributes","createPopupEle","eleItem","multiVar","extendVar","eleInlineItem","innerEle","innerNav","createPopupIcon","innerNavDom","checkPriority","removeProperty","createPopup","pushingPoppedEle","tbarObj","popupPri","eleHeight","sepHeight","poppedEle","nodeIndex","nodePri","tbResize","tbarElement","sepItem","extendEle","popupEle","popupInit","eleStyles","tbarPopupHandler","isOpen","toolEle","popupElePos","popIcon","scrollVal","scrollY","innerHeight","overflowHeight","tbEleData","bottom","popupOffset","right","documentElement","inEle","pre","checkoffset","popPriority","eleWid","sepCheck","itemPopCount","checkClass","rVal","mrgn","compuStyle","fstEleCheck","tbarEleMrgn","eleWid_1","minWidth","sepEle","popedEle","nav","navItem","tbarPriRef","indx","sepPri","des","elWid","wid","ig","ignoreCount","priEleCnt","eleSep","ignoreCheck","eleSepWidth","prevSep","isVer","dimension","popupEleWidth","popupEleRefresh","ignoreEleFetch","ignoreEle","ignoreInx","tbarWidth","tbarItemsWid","elWidth","btnText","btn","eleSplice","this_1","inlineStyles","sepBeforePri_1","refreshPositioning","margin","tbarWid","popWid","itemEle","alignDiv","alignEle","leftAlign_1","ctrlTemplate","setAttr","keyVal","enableItems","isEnable","itemElement","getElementByIndex","addItems","extendedOpen","itemsDiv","itemsRerender","itemAgn","items_1","algIndex","removeItems","removeItemByIndex","eleIdx","indexAgn","clearToolbarTemplate","btnItem","templateRender","templateProp","isComponent","itemType","eleObj","templateFn","regEx","tempStr","tempArray","toolbarTemplateID","buttonRendering","dom","iconPos","textStr","btnTxt","prefixIcon","suffixIcon","btnObj","iconPosition","tempDom","tooltipText","itemClick","showTextOn","sTxt","visible","getDataTabindex","curEle","multirowele","updateHideEleTabIndex","isElement","eleIndex","nextEle","templateEle","registeredTemplate","registeredTemplates","registeredItem","rootNodes","closestItem","portalItem","containerInfo","tEle","changedProb","property","popupPriCheck","booleanCheck","itemCol","hideItem","innerItems_1","Input","CLASSNAMES","DISABLE","INPUT","TEXTAREA","INPUTGROUP","FLOATINPUT","FLOATTEXTCONTENT","CLEARICON","CLEARICONHIDE","NOFLOATLABEL","INPUTCUSTOMTAG","FLOATCUSTOMTAG","floatType","inputObject","createInputContainer","createFloatingInput","bindInitialEvent","appendSpan","validateInputType","setPropertyValue","checkInputValue","parent","getParentNode","inputValue","inputParent","grandParent","_focusFn","_blurFn","wireFloatingEvents","unwireFloatingEvents","customTag","encodePlaceHolder","inputWrap","updateLabelState","checkFloatLabelType","isNotFocused","createClearButton","baseElement","wireClearBtnEvents","readOnly","validateLabel","tagClass","tag","spanEle","isReadonly","isRtl","inputContainer","disabledAttrs","considerWrapper","isClear","inputEle","iconEle","inputObj","isPrependIcon","floatText","labelSpanElement","setRipple","isRipple","_internalRipple","argsButton","_onMouseDownRipple","_onMouseUpRipple","_onMouseRipple","parentEle","createIconEle","iconClass","addIcon","icons","internalCreate","result_1","icon","result_2","prependSpan","innerWrapper","CLS_ROOT","CLS_HSCROLLCON","CLS_NAVARROW","CLS_NAVRIGHTARROW","CLS_NAVLEFTARROW","CLS_HSCROLLNAV","CLS_HSCROLLNAVRIGHT","CLS_HSCROLLNAVLEFT","CLS_DEVICE","CLS_OVERLAY","CLS_RIGHTOVERLAY","CLS_LEFTOVERLAY","OVERLAY_MAXWID","HScroll","browser","browserCheck","customStep","ieCheck","uniqueId","scroll","touchHandler","swipeHandler","createOverlay","createNavIcon","setScrollState","scrollDiv","innerEle_1","overflowX","scrollItems","overlay","navEles","rightOverlayEle","clsRight","rightEle","leftEle","eventBinding","rightAttributes","clsLeft","leftAttributes","navEle","navLeftItem","onKeyPress","timeoutFun_1","keyTimeout","eleScrolling","keyTimer","onKeyUp","tabHoldHandler","repeatScroll","clickEventHandler","clearInterval","timeout","scrollDis","timeoutFun","isContinuous","frameScrollRequest","distance","swipeEle","velocity","distanceX","animate","step","cancelAnimationFrame","requestAnimationFrame","scrollUpdating","scrollValue","scrollDirection","arrowDisabling","addDisable","removeDisable","arrowIcon","navLeftEle","navRightEle","leftOverlay","rightOverlay","scrollWidth","disEle","DataManager","persistQuery","isInitialLoad","offline","enablePersistence","ignoreOnPersist","headers","timeTillExpiration","cachingPageSize","enableCaching","jsonp","isCors","defaultQuery","setPersistData","isDataAvailable","ready","getPersistedData","persistedData","persistData","setPersistQuery","persistedQuery","some","keyword","allPredicates","predicateObj","nestedPredicates","nestedPredicate","setDefaultQuery","lookup","buildHierarchy","makeRequest","deffered","Deferred","isCustomDataAdaptor","getDeferedArgs","resolve","nextTick","promise","setImmediate","extendRequest","fnSuccess","fnFail","cache","processData","onSuccess","onFailure","isSelector","error","reject","process","actual","virtualSelectRecords","fnQueryChild","subDeffer","childArgs","subUrl","childReq","subData","isGraphQLAdaptor","ajaxReqOption","httpRequest","virtualRecords","ajax_1","send","Promise","all","pResult","cResult","saveChanges","doAjaxRequest","deff_1","ajax_2","successFunc","failureFunc","ajaxDeffered","ajaxFunc","ajax_3","clearPersistence","dropDownListClasses","base","device","backIcon","filterBarClearIcon","mobileFilter","clearIcon","clearIconHide","popupFullScreen","disableIcon","DropDownList","isListSearched","valueTempElement","isDocumentClick","isFilterFocus","initRemoteRender","isNotSearchList","isTyped","isSelected","preventFocus","preventAutoFill","typedString","isEscapeKey","isPreventBlur","isTabKey","actionCompleteData","actionData","prevSelectPoints","isSelectCustom","isDropDownClick","preventAltUp","isCustomFilter","isSecondClick","keyConfigure","down","up","space","unWireListEvents","floatLabelChange","floatElement","resetFocusElement","removeSelection","previousItemData","resetSelection","getItemData","onChangeEvent","setSelection","cloneElements","setHTMLAttributes","preventTabIndex","getElementByText","getElementByValue","listItems_1","liItem","initValue","updateValues","setHiddenValue","isFilterLayout","focusOutAction","onFocusOut","onFocus","dropDownClick","bindCommonEvent","mobileKeyActionHandler","unBindCommonEvent","charCode","searchKeyEvent","onServerIncrementalSearch","back","closePopup","setHover","filterInputObj","preventAction","preventHomeEnd","isNavigation","isEditTextBox","isTabAction","updateUpDownAction","getPageCount","updateHomeEndAction","focusDropDown","selectCurrentItem","selectCurrentValueOnTab","focusEle","isSelectFocusItem","startIndex","nextItem","findLi","checkSelector","activeStateChange","updateSelectedItem","preventSelect","isSelection","selectedData","selectEventCallback","setSelectOptions","detachChanges","checkFieldValue","activeItem","setValueTemplate","isFilterElement","clearElement","previousSelectedLI","dropdownCompiler","dropdownTemplate","dataValue","dataText","detachChangeEvent","defineProperties","enumerable","preItems","onFilterUp","searchLists","onFilterDown","getSelectionPoints","removeFillSelection","selection","setSelectionRange","filteringAction","baseEventArgs","focusIndexItem","setSearchBox","clearIconElement","clearText","searchKeyModule","checkVal","setInputValue","updateActionCompleteDataValues","addNewItem","checkField","newElement","value_1","isExist","actionCompleteDataUpdate","highlightedItem","searchBox","listHeight","getOffsetValue","firstItem","isEmptyList","textIndent","getFocusElement","setSearchBoxPosition","backIconElement","clickOnBackIcon","scrollParentElements","getScrollableParent","scrollParentElements_1","popupInstance","destroyPopup","popupStyles","borderTop","borderBottom","setPopupPosition","actionList","border","lastItem","lastItemOffsetValue","paddingBottom","inputHeight","isInitial","paddingTop","isPopupButton","setEleWidth","scrollableParentElements","scrollableParentElements_1","fixedHeader","setReadOnly","selectElement","onselect","stopImmediatePropagation","onchange","footerCompTemp","headerCompTemp","contentEle","setOldText","setOldValue","checkData","isChangeValue","isChangeText","checkCustomValue","updateInputFields","checkValidLi","setSelectionData","listLength_1","listLength_2","ddlProps","newClass","invokeRenderPopup","proxy_2","renderHightSearch","isSelectVal","attrArray","parentDocument","targetContainer","fit","viewPortElement","axis","elemData","ownerDocument","zoomingFactor","containerWidth","getTargetContainerWidth","getViewPortWidth","containerLeft","ContainerLeft","containerRight","ContainerRight","overLeft","overRight","containerHeight","getTargetContainerHeight","getViewPortHeight","containerTop","ContainerTop","containerBottom","ContainerBottom","overTop","overBottom","isCollide","elemOffset","elementRect","yAxis","topCollideCheck","xAxis","leftCollideCheck","topSide","rightSide","leftSide","bottomSide","flip","positionX","positionY","fixedParent","tEdge","TL","TR","BL","BR","eEdge","oldVisibility","posX","posY","updateElementData","setPosition","leftFlip","topFlip","setPopup","offsetParent","scaleX","scaleY","transformStyle","transform","matrix","DOMMatrix","edge","eStatus","getBodyScrollLeft","deepCheck","collideSide","getBodyScrollTop","getTargetContainerLeft","getTargetContainerTop","windowWidth","innerWidth","documentReact","LICIENSE","popupRect","calculateRelativeBasedPosition","anchor","fixedElement","anchorPos","tempAnchor","calculatePosition","currentElement","targetValues","updatePosition","setPosx","setPosy","getElementHCenter","getElementTop","getElementRight","getElementVCenter","getElementLeft","getElementBottom","WRAPPERCLASS","POPUPDIMENSION","DAY","HOVER","NAVIGATION","ICONANIMATION","LISTCLASS","HALFPOSITION","ANIMATIONDURATION","OFFSETVAL","EDITABLE","wrapperAttributes","TimePickerBase","createdEl","timeFormat","interval","timeCollections","listTag","TimeMaskPlaceholder","TimePicker","disableItemCollection","timeOptions","cloneElement","angularTag","openPopupEventArgs","createInputElement","setTimeAllowEdit","validateInterval","validateDisable","checkErrorState","inputEleValue","getDateObject","clearIconState","setMinMax","initMin","initMax","popupCreation","valueIsDisable","resetState","defaultCulture","checkTimeFormat","checkInValue","scrollTo","checkAttributes","localeText","isNavigate","isTextSelected","valueWithMinutes","prevDate","updatedCssClassesValue","isNullOrEmpty","inputStyle","getCldrDateTimeFormat","cldrTime","dateFormat","cldrFormat","isInvalid","valueExpression","valueExp","setCurrentDate","cldrDateTimeString","getCultureTimeObject","ariaAttribute","enableElement","rippleFn","propertyList","generateList","listWrapper","addSelection","getPopupHeight","containerStyle","setPopupWidth","modelTitleSpan","timePopupCloseHandler","createDateObj","updatedClassesValue","timeStyle","cssClassNew","cssClassOld","removeErrorClass","validateState","disableTimeIcon","disableElement","selectInputText","setCursorToEnd","getMeridianText","meridian","getCursorSelection","getActiveElement","setScrollTo","findScrollTop","initialTime","scrollTime","getText","cldrTimeFormat","cldrDateFormat","cldrDate","getCultureDateObject","dateToNumeric","getExactDateTime","validateMinMax","compareFormatChange","updatePlaceHolder","popupHandler","mouseDownHandler","curPos","cursorDetails","focusSelection","regex","isSeparator","keyHandler","objToString","createMask","previousState","documentClickHandler","mobileTimePopupWrap","disposeServerPopup","checkValueChange","valueProcess","prevValue","minVal","maxVal","dateVal","strictOperation","maxValue","minValue","inputEventHandler","clearHandler","inputEvent","timeValue","raiseClearedEvent","getTextFormat","strArray","validateValue","newval","findNextElement","timeVal","collections","selectNextItem","validLiElement","elementValue","backward","elementIndex","isCheck","isUpdate","getHoverItem","setActiveClass","formatStr","timeParse","listBaseOptions","itemCreated","getProperty","popupAlignment","timePopupElement","formatValues","DATEPICKERROOT","DATETIMEWRAPPER","HOUR","MINUTE","SECOND","MILLISECOND","DATETIMEPOPUPWRAPPER","DateTimePicker","scrollInvoked","dateTimeOptions","blurHandler","isTimePopupOpen","popupObject","dateTimeWrapper","keyboardHandler","unBindInputEvents","timeIcon","timekeyConfigure","cldrDateTimeFormat","bindInputEvents","validateMinMaxRange","isDateObject","disablePopupButton","checkValidState","isValidState","isDisable","renderTimeIcon","timeHandler","dateHandler","inputKeyAction","getCldrFormat","cldrDateTime","isDatePopupOpen","toggle","listCreation","dateObject","endTime","listDetails","wireTimeListEvents","addTimeSelection","setTimeScrollPosition","openPopup","timeModal","timeKeyActionHandle","unWireTimeListEvents","modelWrapper","dateTimeCloseHandler","timeContent","setDimension","setTimeHover","removeTimeHover","nextElement","lineHeight","listContent","getFullDateTime","tempVal","combineDateTime","minutes","seconds","setTimeActiveClass","setTimeActiveDescendant","removeTimeSelection","getTimeHoverItem","calculateStartEnd","hours","milliseconds","tempStartValue","tempMin","tempEndValue","tempMax","getUTCFullYear","dateTimeCloseEventCallback","maskedDateModule","getTimeActiveElement","status_1","millisecond","findNextTimeElement","dateTimeVal","listCount","timeElementValue","setTimeValue","timeKeyHandler","nextItemValue","instances","isBlazorPlatform","createInstance","classFunction","arrayParam","unshift","Function","handler","unbind","num","Uint16Array","intCrypto","msCrypto","crypto","getRandomValues","secret","combineArray","messageHandler","source","postMessage","nameSpace","isUndefined","fromObj","isNullOrUndefined","deleteObject","containerObject","isObject","objCon","getEnumValue","enumObject","enumValue","merge","destination","temrObj","tempProp","deepmerge","extend","copied","first","deep","arguments_1","obj1","src","copy","isArrayChanged","blazorEventExtend","isBlazor","Event","getUniqueID","definedName","debounce","eventFunction","out","later","isObjectArray","parser","compareElementParent","message","stack","print","printWindow","div","links","blinks","l","reference","write","formatUnit","getElement","xPath","Node","evaluate","XPathResult","FIRST_ORDERED_NODE_TYPE","singleNodeValue","getInstance","component","inst","HijriParser","defaultNumberingSystem","defaultNumberSymbols","latnNumberSystem","ParserBase","getMainObject","cName","getNumberingSystem","numberingSystems","reverseObject","propKeys","propKeys_1","getSymbolRegex","regexStr","regExp","getSymbolMatch","matchKeys","matchKeys_1","constructRegex","convertValueParts","getDefaultNumberingSystem","nSystem","getCurrentNumericOptions","curObj","numberSystem","needSymbols","blazorMode","cur","digits","numericPair","numberParseRegex","numericRegex","symbolNumberSystem","symbolMatch","getNumberMapper","isNumber","mapper","numberSymbols","timeSeparator","latnNumberSystem_1","nPair","nRegex","blazorCurrencyData","getBlazorCurrencySymbol","currencyCode","dateCorrection","getHijriDate","gDate","tMonth","tYear","yPrefix","julilanOffset","julianNumber","tempMonth","modifiedJulianDate","iyear","z","cyc","iy","im","tempDay","iln","ii","hYear","hmonth","hDate","mcjdn","julianDate","gDay","gMonth","gYear","abbreviateRegexGlobal","standalone","weekdayKey","timeSetter","m","h","H","s","f","datePartMatcher","DateFormat","cldr","dependable","getDependables","numObject","isIslamic","islamicRegex","compareBlazorDateFormats","resPattern","getResultantPattern","dateSeperator","getDateSeparator","ConvertDateToWeekFormat","numMapper","parserObject","patternMatch","patternMatch_1","weekday","monthIndex","designator","eText","era","intDateFormatter","dateParseRegex","dObject","getCurrentDateValue","matches_1","curval","curvalstr","processNumber","curstr","curlength","desig","dec","retu","pattern_1","hourFormat","gmtZeroFormat","getTimeZoneValue","gmtFormat","getWeekOfYear","checkTwodigitNumber","latnParseRegex","tVal","splt","curPattern","no","ishour","errorText","percentSign","minusSign","NumberFormat","numberFormatter","symbolPattern","fOptions","cOptions","dOptions","numericObject","numberMapper","currencySymbol","getCurrencySymbol","currency","defaultCurrencyCode","altSymbol","percentSymbol","minusSymbol","symbols","formatRegex","customFormat","getProperNumericSkeleton","isCurrency","isPercent","getSymbolPattern","isAccount","groupOne","checkValueRange","maximumSignificantDigits","minimumSignificantDigits","maximumFractionDigits","minimumFractionDigits","fractionDigits","useGrouping","defaultCurrency","nData","replaceBlazorCurrency","getFormatData","groupSeparator","groupData","getGroupingDetails","minFrac","minimumFraction","mval","maximumFraction","mfrac","lfrac","intNumberFormatter","negativeDataRegex","primary","secondary","val1","val2","checkbothExist","isFraction","decide","dint","str1","str2","checkRange","curData","zeroData","fValue","processSignificantDigits","processFraction","minimumIntegerDigits","processMinimumIntegers","isCustomFormat","decimalPart","toExponential","customPivotFormat","groupNumbers","nlead","nend","tn","toPrecision","level1","sep","decimalSymbol","level2","flag","prefix","lead","decimal","latnRegex","DateParser","dateParser","numOptions","parseOptions","hourOnly","regexString","evalposition","gmtCorrection","zCorrectTemp","isgmtTraversed","nRegx","numbers","canUpdate","charKey","optional","weekData","weekObject","monthData","hour12","periodValur","tval","tzone","hpattern","parseTimeZoneRegx","iString","parserRegex","parsedDateParts","internalDateParse","dobj","tDate","ystrig","is2DigitYear","tKeys","century","tKeys_1","tValue","pDate","lDate","tzValue","retOptions","props_1","curObject","matchString","internalNumberParser","tmatch","getZoneValue","tZone","splitStr","cRegex","ival","parseRegex","groupRegex","NumberParser","numberParser","custom","symbolpattern","symbolRegex","infinity","getParsedNumber","isNegative","Infinity","exponent","convertMaxFracDigits","decimalSplitValue","Observer","context","ranArray","boundedEvents","on","cntxt","notExist","isHandlerPresent","off","indexLocation","successHandler","errorHandler","blazor","blazorCallback","curObject_1","objs","isTrigger","obj_1","isJson","dateReviver","dPattern","boundedEvents_1","onIntlChange","rightToLeft","cldrData","Internationalization","cultureName","getDateFormat","getCulture","getNumberFormat","getDateParser","getNumberParser","formatNumber","parseNumber","isExcelFormat","getActualDateTimeFormat","getNumberPattern","isExcel","getActualNumberFormat","getWeekData","setCulture","getNumericObject","numSystem","symbPattern","getDefaultDateObject","blazorCultureFormats","IntlBase","customRegex","fractionRegex","patternRegex","'","dateConverterMapper","defaultFirstDay","firstDayMapper","currencyFormatRegex","curWithoutNumberRegex","typeMapper","0","1","blazorCulture","iType","basicPatterns","tPattern","calendartype","blazorDefaultObject","defaultObject","convertMapper","tempString","curFormatMapper","patternMatcher","needFraction","cSymbol","fractionOnly","changeCurrencySymbol","groupPattern","fraction","fmatch","sym","symbol","getCurrency","formatSplit","customNumberFormat","integerPart","spaceCapture","spaceGrouping","fractionPart","isCurrencyPercent","parts","part","loc","dateObj","actualPattern","tLength","timeZonePattern","processSymbol","numrericObject","curMatch","curCode","hasNegativePattern","defaultMinimum","fractionDigitsPattern","minimumIntegerPattern","groupingPattern","cPattern","minDigits","maxDigits","diff","integer","hash","iCulture","aCurrency","rCurrency","iCurrency","pData_1","weeknum","newYear","daynum","nYear","nday","3","4","5","C","P","N","A","E","headerRegex","defaultType","Ajax","async","emitError","XMLHttpRequest","onreadystatechange","stateChange","onLoad","onload","onProgress","onprogress","onAbort","onabort","onError","onerror","onUploadProgress","upload","failureHandler","reason","responseText","readyState","statusText","responseHeaders","getAllResponseHeaders","REGX_MOBILE","Fetch","contentTypes","fetchRequest","Request","fetchResponse","fetch","ok","responseType","get","returnVal","callback","REGX_IE","REGX_IE11","REGX_IOS","REGX_IOS7","REGX_ANDROID","REGX_WINDOWS","REGX_VERSION","REGX_BROWSER","OPERA","EDGE","CHROME","PANTHOMEJS","SAFARI","WEBKIT","MSIE","MOZILLA","browserDetails","Browser","extractBrowserDetail","browserInfo","clientInfo","userAgent","language","navigator","getEvent","events","isPointer","isTouch","move","getTouchStartEvent","getTouchEndEvent","getTouchMoveEvent","getTouchCancelEvent","isSafari","isIos","regX","platform","maxTouchPoints","uA","set","configurable","isMSPointer","isWebView","cordova","PhoneGap","phonegap","forge","touchMoveEvent","touchCancelEvent","EventHandler","addOrGetEventData","__eventList","listener","bindTo","intDebounce","debounceListener","eventData","passive","clearEvents","copyData","shift","eventProp","eventData_1","event_1","SVG_REG","addClass","getClassList","classList_1","curClass","removeClass","canRemove","classList_2","classes_1","classArr","isVisible","prepend","fromElements","toElement","isEval","docFrag","createDocumentFragment","executeScript","append","NodeList","eleArray","script","head","detach","iKey","needsVDOM","querySelectId","charRegex","idList","splitId","setId","setStyleAttribute","addClasses","removeClasses","msMatchesSelector","webkitMatchesSelector","isColEName","Base","isRendered","isComplexArraySetter","allowServerDataBinding","changedProperties","oldProperties","bulkChanges","refreshing","ignoreCollectionWatch","finalUpdate","childChangedProperties","modelObserver","addInstance","isDestroyed","muteOnChange","prevDetection","serverDataBind","callChildDataBind","clearChanges","getOwnPropertyNames","newChanges","oldChanges","sfBlazor","updateModel","moduleClass","getComponent","comp","getElementById","compName","curKey","defaultValue","getObjectArray","isSetter","isFactory","curType","propertyGetter","propertySetter","complexGetter","complexSetter","complexArrayGetter","defCollection","ignore","controlParent","extendFunc","descriptor","complexArrayDefinedCallback","complexArraySetter","oldValueCollection","newValCollection","dFunc","keyString","getParentKey","model_1","getArrayModel","ejsAction","isControlParent","arrayFunction","modelObject","Property","propertyDescriptor","addPropertyCollection","Complex","Collection","eventDescriptor","finalContext","getParentContext","NotifyPropertyChanges","classConstructor","propertyType","propList","complexProps","colProps","propNames","complexPropNames","colPropNames","eventNames","propertyName","curText","ease","linear","easeIn","easeOut","easeInOut","elasticInOut","elasticIn","elasticOut","Animation_1","getModel","elements_1","delayAnimation","animationId","frameId","animationMode","applyAnimation","timerId","prevTimeStamp","startAnimation","avg","progress","rippleEffect","rippleOptions","getRippleModel","rippleFlag","isRippleEnabled","rippleHandler","rippleUpHandler","rippleLeaveHandler","sqrt","rippleElement","removeRipple","rippleElements","accountURL","MODULE_SUFFIX","ModuleLoader","loadedModules","inject","moduleList","reqLength","clearUnusedModule","modl","moduleList_1","modName","isModuleLoaded","moduleObject","memberName","getMemberName","isProperty","loadedModule","clean","usedModules","arg","removableModule","removableModule_1","mod","ChildProperty","parentObj","isParentArray","updateTimeOut","changeTime_1","clearUpdate","curIndex","restrictServerDataBind","isSaveChanges","parent_1","parentKey","complexKeys","isFinal","actionProperty","componentList","bypassKey","LicenseValidator","isValidated","isLicensed","errors","noLicense","trailExpired","versionMismatched","platformMismatched","invalidKey","manager","licKey","getKey","npxManager","npxLicKey","contentKey","URLKey","convertToChar","validateMsg","validateURL","getInfoFromKey","invalidPlatform","expiryDate","expDate","currDate","licenseContent","errorDiv","getDecryptedData","atob","pkey","decryptedStr","resultArray","isNpxKey","licKeySplit","licKeySplit_1","lKey","decodeStr","k","buffr","decryptedKey","licenseValidator","cArr","cArr_1","registerLicense","lastPageID","validateLicense","createLicenseOverlay","bannerTemplate","errorBackground","componentCount","lastHistoryLen","instancecount","isvalid","isBannerAdded","versionBasedStatePersistence","Component","randomId","needsID","isReactHybrid","moduleLoader","localObserver","detectFunction","detachUnloadEvent","injectModules","accessMount","mount","getRootElement","actualElement","getLocalData","eleId","ej2StatePersistenceVersion","attachUnloadEvent","handleUnload","mergePersistData","event_2","getInjectedModules","injectedModules","Inject","isVDOM","triggerStateChange","setState","currentContext","calls","isHistoryChanged","pageID","href","persistObj","objValue","getActualProperties","iterateJsonProperties","ignoreList","newObj","defaultPosition","isDraggedObject","isDragged","Position","Draggable","dragLimit","Draggable_1","getDefaultPosition","padding","diffX","prevLeft","prevTop","dragProcessStarted","eleTop","tapHoldTimer","externalInitialize","diffY","parentScrollX","parentScrollY","droppables","toggleEvents","scope","isUnWire","handle","enableTapHold","mobileInitialize","removeTapholdTimer","client","tempScrollHeight","scrollHeight","tempScrollWidth","getScrollableValues","curTarget","currentStateTarget","isDragStarted","abort","abortSelectors","changedTouches","intCoord","getCoordinates","initialPosition","clientX","clientY","relativeXPosition","relativeYPosition","intDragStart","intDestroy","isPreventSelect","isChangeTouch","intCordinate","styleProp","dragTarget","intClosest","isReplaceDragEle","currentStateCheck","calculateParentPosition","getMousePosition","isDragScroll","getHelperElement","dragTargetElement","helperElement","parentClientRect","dragStart","getProperTargetElement","bindDragEvents","dragElement","dragArea","setDragArea","enableTailMode","enableScrollHandler","posValue","getProcessedPositionValue","dragElePosition","getDragPosition","intDrag","intDragStop","setGlobalDroppables","elementInViewport","queryPositionInfo","rect","docHeight","getDocumentWidthHeight","docWidth","drag","checkTargetElement","hoverObject","triggerOutFunction","dragData","intOver","helper","tLeft","tTop","pagex","pagey","dLeft","dTop","enableAutoScroll","skipDistanceCheck","helperWidth","helperHeight","draEleTop","draEleLeft","iTop","iLeft","isDialogEle","tempDraEleTop","dragValue","scrollIntoView","getPathElements","scrollParent","getScrollParent","getScrollPosition","hasScroll","nodeEl","scrollingElement","nodeEle","elementTop","elementLeft","elementsFromPoint","intOut","docBody","docEle","dragStop","dragStopCalled","intDrop","eleWidthBound","eleHeightBound","elementArea","tborder","tpadding","lowerKey","prevStyle","pointerEvents","elementFromPoint","oldEle","isdragscroll","dragEle","srcElement","isOffsetParent","isVerticalScroll","isHorrizontalScroll","cursorAt","sender","reset","draggable","draggedElement","dropIns","getDropInstance","drop","eleInst","eleInst_1","Droppable","mouseOver","area","isDrag","isDropArea","canDrop","droppedElement","coord","KeyboardEvents","keyPressHandler","isAltKey","isCtrlKey","isShiftKey","shiftKey","curkeyCode","configCollection","configCollection_1","rconfig","rKeyObj","KeyboardEvents_1","getKeyConfigData","config","configCache","keyData","getKeyCode","L10n","controlName","localeStrings","intLocale","intGetControlConstant","currentLocale","load","localeObject","SwipeSettings","swipeRegex","Touch","touchAction","tapCount","startEvent","point","updateChangeTouches","isTouchMoved","movedDirection","startPoint","lastMovedPoint","startEventData","hScrollLocked","vScrollLocked","tStampStart","now","timeOutTapHold","tapHoldEvent","moveEvent","endEvent","cancelEvent","movedPoint","eScrollArgs","calcScrollPoints","scrollArg","startEvents","startX","startY","distanceY","getVelocity","timeOutTap","swipeFn","tap","tapThreshold","modeclear","isFirefox","endPoint","calcPoints","swipeArgs","eSwipeArgs","tDistance","swipeSettings","swipeThresholdDistance","defaultArgs","canTrigger","scrollBool","isScrollable","moved","checkSwipe","modeClear","lastTapTime","eleStyle","overflowY","eTapArgs","pnt","newX","newY","newT","xDist","yDist","LINES","QUOTES","IF_STMT","ELSEIF_STMT","ELSE_STMT","FOR_STMT","IF_OR_FOR","CALL_FUNCTION","NOT_NUMBER","WORD","DBL_QUOTED_STR","WORDIF","ARR_OBJ","SINGLE_SLASH","DOUBLE_SLASH","WORDFUNC","WINDOWFUNC","compile","ignorePrefix","argName","evalExpResult","evalExp","condtion","fnCode","varCOunt","localKeys","isClass","singleSpace","cnt","matchStr","SPECIAL_CHAR","rlStr","addNameSpace","strs","HandleSpecialCharArrObj","rlStr_1","mtc","fnStr","fNameSpace","ftArray","splRegexp","arrObj","splArrRegexp","SlashReplace","NameSpaceForspecialChar","addNS","NameSpaceArrObj","arrObjReg","double","nameSpaceNew","windowFunc","quotes","HAS_ROW","HAS_SVG","blazorTemplates","getRandomId","templateString","compiler","engineObj","blazorTemplateId","blazorId","updateBlazorTemplate","isEmpty","callBack","ejsIntrop","updateTemplate","resetBlazorTemplate","templateDiv","innerTemplates","setTemplateEngine","classObj","getTemplateEngine","initializeCSPTemplate","boundFunc","CSPTemplate","Engine","removeTags","removeAttrs","jsEvents","SanitizeHtmlHelper","beforeSanitize","selectors","tags","output","serializeValue","wrapElement","removeXssTags","removeJsEvents","removeXssAttrs","tempEleValue","removeElement","localName","ListBase","ul","check","hasChild","collapsible","image","iconWrapper","anchorWrap","navigable","getFieldValues","fieldData","dataField","compileTemplate","defaultMappedFields","hasChildren","urlAttributes","imageAttributes","imageUrl","defaultAriaAttributes","listRole","itemRole","wrapperRole","defaultListBaseOptions","showCheckBox","expandCollapse","listClass","itemClass","processSubChild","expandIconClass","expandIconPosition","itemNavigable","isSingleLevel","componentInstance","curOpt","typeofData","createListFromArray","createListFromJson","subChild","generateUL","getModuleClass","generateId","itemCreating","generateSingleLevelLI","generateLI","checkboxElement","anchorElement","curItem","imageElemnt","iconElement","getSiblingLI","elementArray","isPrevious","siblingLI","liIndex","curFields","cusQuery","grpItem","hdr","newtext","_id","jsonAr","childs","i_1","hasChildNodes","getAllAttributes","elementAttributes","class","liCollection","currentID","compiledElement","category","headerItems_1","headerData","subDS","subLi","expandElement","innerElements","grpLI","elementID","anchorTag","isFullNavigation","anchorWrapper","uID","innerDiv","generateIcon","CLS_VSCROLLBAR","CLS_VSCROLLCON","CLS_NAVUPARROW","CLS_NAVDOWNARROW","CLS_VSCROLLNAV","CLS_VSCROLLNAVUP","CLS_VSCROLLNAVDOWN","CLS_UPOVERLAY","CLS_DOWNOVERLAY","VScroll","scrollEventHandler","createOverlayElement","wheelEventHandler","scrollCnt","scrollBar","navs","overlays","downOverlayEle","clsDown","downEle","upEle","clsUp","navElement","navUpItem","ev","scrollDistance","deltaY","swipeElement","addDisableCls","removeDisableCls","navUpEle","navDownEle","upOverlay","downOverlay","ErrorOption","EMAIL","URL","DATE_ISO","DIGITS","PHONE","CREDITCARD","FormValidator","validated","errorRules","allowSubmit","required","infoElement","selectQuery","localyMessage","defaultMessages","email","dateIso","creditcard","maxLength","minLength","rangeLength","tel","equalTo","rules","localeFunc","afterLocalization","inputElements","createHTML5Rules","FormValidator_1","addRules","removeRules","validateRules","rules_1","name_1","clearForm","getInputElement","validClass","elements_2","getErrorElement","hideMessage","defRules","acceptedTypes","allRule","defRules_1","rule","defRule","annotationRule","ruleCon","ruleName","rulesList","ruleFirstName","ruleSecondName","minvalue","maxvalue","customMessage","annotationMessage","getErrorMessage","isCheckable","submitHandler","excludeKeys","hiddenType","validateHiddenType","vhPos","hPos","rules_2","errorMessage","errorRule","inputName","isValid","removeErrorRules","showMessage","createErrorElement","errorElement","optionalValidationStatus","refer","currentRule","checkValidator","ruleValue","formats","errorOption","Message","errorContainer","containerId","divElement","customPlacement","nextSibling","checkRequired","inputType","uNum","compareTo","Label","wrapperInitialize","ejInstance","getTextNode","childnode","createCheckBox","enableRipple","frameSpan","labelSpan","disableHtmlEncode","rippleMouseHandler","setHiddenInput","CHECK","FRAME","INDETERMINATE","RIPPLECHECK","RIPPLEINDETERMINATE","CheckBox","isMouseClick","clickTriggered","validCheck","changeState","isInitialize","indeterminate","changeEventArgs","updateVueArrayModel","labelWrap","formElem","init","SPINICON","SPINUP","SPINDOWN","INCREMENT","DECREMENT","INTREGEXP","DECIMALSEPARATOR","COMPONENT","NUMERIC_FOCUS","HIDDENELEMENT","selectionTimeOut","NumericTextBox","isDynamicChange","numericOptions","isPrevFocused","decimalSeparator","intRegExp","isCalled","angularTagName","formEle","attributeName","incrementTitle","decrementTitle","cultureInfo","initCultureInfo","initCultureFunc","updateHTMLAttrToElement","validateStep","updatePlaceholder","createWrapper","showSpinButton","spinBtnCreation","setElementWidth","changeValue","trimValue","decimals","roundNumber","elementPrevValue","setNumber","stepValue","updatedCssClassValue","getNumericValidClassList","updateHTMLAttrToWrapper","pro","numericClassName","numericStyle","spinDown","spinUp","wireSpinBtnEvents","MAX_VALUE","formattedValue","operation","isInteract","performAction","raiseChangeEvent","checkErrorClass","setElementValue","setSpinButton","keyDownHandler","mouseDownOnSpinner","mouseUpOnSpinner","touchMoveOnSpinner","unwireSpinBtnEvents","parsedInput","isInteraction","beforeUpdate","preventHandler","iOS","currentPos","prevPos","valArray","ignoreKeyCode","prevVal","cursorPosChanged","validateDecimalOnType","parseValue","numerictextboxObj","fireFox","parsedValue","localChange","nonZeroRegex","updatedValue","correctRounding","floatExp","floatValue","floatStep","valueCount","stepCount","roundValue","precision","divide","pow","updateCurrency","propVal","numberOfDecimals","getNumberOfDecimals","modifyText","serverDecimalSeparator","EXPREGEXP","result1","result2","metaKey","currentChar","isAlterNumPadDecimalChar","fractionRule","mouseWheel","delta","rawEvent","wheelDelta","detail","focusEventArgs","formatValue_1","blurEventArgs","focusEvent","getElementData","mouseUpClick","touchEvent","floatLabelTypeUpdate","decrement","updateSpinButton","propValue","PositionData","OPEN","Popup","setContent","actionOnScroll","orientationOnChange","getRelateToElement","scrollRefresh","parent_2","relateToElement","targetVisible","isElementOnViewport","targetInvisibleStatus","scrollElement","scrollParents","parent_3","isElementVisible","checkGetBoundingClientRect","win","windowView","scrollX","outerWidth","outerHeight","elementView","parent_4","relateToElem","checkFixedParent","parentDisplay","getAnchorPosition","anchorEle","anchorRect","callFlip","callFit","viewPortRect","horz","vert","animationOptions","relativeElement","fmDialogContainer","zIndexElement","getZindexPartial","parentStyle","overflowRegex","parentZindex","childrenZindex","isEqualNode","siblingsZindex","finalValue","currentZindexValue","selectedHandler","resizeWestWidth","elementClass","RESIZE_HANDLER","FOCUSED_HANDLER","DIALOG_RESIZABLE","RESTRICT_LEFT","RESIZE_WITHIN_VIEWPORT","dialogBorderResize","originalWidth","originalHeight","originalX","originalY","originalMouseX","originalMouseY","resizeStart","resizeEnd","setLeft","previousWidth","createResize","resizeBegin","resizing","resizeComplete","getDOMElement","boundary","directions","setBorderResizeElm","resizeHandler","calculateValues","domElement","resizers","onMouseDown","onTouchStart","borderResizers","getEventType","onMouseUp","dialogResizeElement","coordinates","resizeTowards","resizeSouth","resizeNorth","resizeWest","resizeEast","getClientRectValues","containerRectValues","documentHeight","calculateValue","currentpageY","targetRectValues","calculatedHeight","borderValue","topWithoutborder","targetTop","calculatedTop","boundaryRectValues","currentHeight","top_1","rectValues","documentWidth","calculatedWidth","left_1","setMinHeight","minimumHeight","setMaxWidth","setMaxHeight","removeResize","handlers","ButtonProps","AnimationSettings","DLG_HEADER_CONTENT","DLG_HEADER","DLG_FOOTER_CONTENT","MODAL_DLG","DLG_CONTENT","DLG_CLOSE_ICON","DLG_OVERLAY","DLG_TARGET","DLG_CONTAINER","SCROLL_DISABLED","DLG_PRIMARY_BUTTON","FULLSCREEN","DLG_CLOSE_ICON_BTN","DLG_HIDE","DLG_SHOW","DLG_UTIL_DEFAULT_TITLE","DLG_UTIL_ROOT","DLG_UTIL_ALERT","DLG_UTIL_CONFIRM","DLG_RESIZABLE","DLG_RESTRICT_LEFT_VALUE","DLG_RESTRICT_WIDTH_VALUE","DLG_REF_ELEMENT","DLG_USER_ACTION_CLOSED","DLG_CLOSE_ICON_CLOSED","DLG_ESCAPE_CLOSED","DLG_OVERLAYCLICK_CLOSED","DLG_DRAG","Dialog","initRender","enableResize","setResize","animationSettings","getMinHeight","initializeValue","dlgClosedBy","headerContent","allowMaxHeight","preventVisibility","clonedEle","closeIconClickEventHandler","dlgOverlayClickEventHandler","overlayClickEventArgs","focusContent","checkPositionData","updatePersistData","dragObj","isNumberValue","getEle","computedHeaderHeight","computedFooterHeight","footerEle","headerHeight","footerHeight","onResizeStart","dialogObj","onResizing","onResizeComplete","isBlazorServerRender","computedHeight","computedWidth","resizeHandles","directionValue","isModal","wireWindowResizeEvent","unWireWindowResizeEvent","buttonObj","ftrTemplateContent","focusableElements","isTagName","isContentEdit","closeOnEscape","primaryButtonEle","buttonIndex_1","firstPrimary","buttonModel","isPrimary","setCSSClass","initialRender","setzIndex","calculatezIndex","setTargetContent","setHeader","setButton","allowDragging","setAllowDragging","setIsModal","dlgContainer","dlgOverlay","refElement","resetResizeIcon","openEventArgs","unBindEvent","closeArgs","storeActiveElement","positionChange","setEnableRTL","setOverlayZindex","dialogConHeight","resizeIcon","zIndexValue","handleContent","dragEventArgs","buttonContent","buttonType","footerBtn","buttonClickHandler","isFlat","innerContentElement","setTemplate","templateProps","templateValue","sanitizeHelper","isString","dialogItem","beforeEvent","isContent","headerEle","createHeaderContent","showCloseIcon","closeIcon","closeIconBtnObj","closeIconTitle","oldCSSClass","getValidFocusNode","u","getAutoFocusNode","validNode","t","elementMatch","msGetRegionContent","Element","updateSanitizeContent","insertAdjacentHTML","updateIsModal","buttonCount","setTarget","setPopupZindex","currentzIndex","windowResizeHandler","classArray","getDimension","dialogWidth","dialogHeight","isFullScreen","fullScreen","beforeOpenArgs","dialogOpen","closedBy","beforeCloseArgs","getButtons","DialogUtility","alert","alertDialogObj","dialogElement","okButtonModel","createDialog","alertOptions","confirm","confirmDialogObj","okCancelButtonModel","confirmOptions","dialogObject","formOptions","setAlertButtonModel","setConfirmButtonModel","isDraggable","alertButtonModel","okButton","formButtonModel","cancelButtonModel","cancelButton","buttonPropModel","buttonProps","DataUtil","notEndsWith","startsWith","notStartsWith","wildCard","asteriskSplit","optionalSplit","regexPattern","like","fnAscending","fnDescending","localeCompare","extractFields","jsonArray","isLazyLoad","jsonData","childLevels","grouped","groupedArray","this_2","getVal","tempObj","aggs","grp","fKeyData","copyObj","lowerCaseNameSpace","upperCaseNameSpace","casing","middle","diacritics","fnName","param1","param2","adp","rand","hexs","Uint8Array","getItemFromComparer","castRequired","requiresCompleteRecord","prepareQuery","sampledata","requiresCounts","predicateList","getPredicate","sorted","mainPred","childPred","cpre","sum","average","truecount","falsecount","operatorSymbols","equal","expected","notequal","lessthan","greaterthan","lessthanorequal","greaterthanorequal","doesnotcontain","isnotnull","isnull","startswith","doesnotstartwith","isempty","isnotempty","wildcard","endswith","doesnotendwith","processSymbols","jsonText","jsonReviver","iterateAndReviveArray","iterateAndReviveJson","ms","offSet","toTimeZone","isUTC","secondsMs","getUTCMilliseconds","utcFormat","hrs","mins","addSelfOffset","jsonReplacer","arrayReplacer","toUTC","utc","unix","datefn","differenceString","localtimefn","norm","_interopRequireWildcard","__esModule","default","curVue","isExecute","aVue","gh","vueDefineComponent","ComponentBase","tagMapper","tagNameMapper","hasInjectedModules","hasChildDirective","childDirObjects","isDecorator","created","ej2Instance","ej2Instances","isVue3","toRaw","$emit","injectables","vueInjectables","prevModule","managed","getInjectedServices","curModule","curModule_1","mounted","cusEle","$el","vueInstance","referModels","models","setModelValue","updated","beforeDestroy","destroyComponent","beforeUnmount","methods","modelValue","$attrs","propKey","childKey","fetchChildPropValues","curChildDir","assignValueToWrapper","provide","$root","$vnode","$parent","$","provideKey","provideValue","$options","tempBeforeDestroyThis","bindProperties","curModule_2","silent","childOption","dirProps","propRef","slots","getTag","resolveArrayDirectives","splitKeys","keyRef","getDirectiveValues","$slots","dirProp","innerDirValues","slot","flatMap","childSlot","tagRef","resolveComplexDirs","slot_1","tagObject","this_3","resolveComplexInnerDirs","getCamelCaseProps","assign","slot_2","slot_3","isRibbon","resolveMultilevelComplexInnerDirs","slot_4","tagDirectives","keyTags","dir","tagDirectives_1","tagDirective","componentOptions","dirTag","children_1","tagDirChild","retObj","getVNodeValue","getMultiLevelDirValue","tagDirectories","tagKey","mulObj","tagDirectories_1","tagDir","children_2","mulLevObj","retProps","getProps","_loop_4","newprops","watch","__assign","n","stringCompiler","templateElement","that","returnEle","plugins","pid","vueSlot_1","getCurrentVueSlot","app","createVNode","getValues","vueSlot_2","getVueSlot","provided_1","getProvideValues_1","vueinstance","_provided","vueTemplate","$mount","dataObj","propsData","extends","setup","__props","templateVue","templateInstance","templateCollection","object","dataObj_1","tempRef_1","templateCompRef","_context","components","expose","objkeys","objstring","intComponent","__data","objkeys_1","__expose","__returned__","cInstance","provided","getProvideValue","provides","appContext","getVueChildSlot","scopedSlots","$scopedSlots","vSlots","childSlots","getSlot","vnode","getChildVueSlot","token","base64Url","base64","jsonPayload","decodeURIComponent","IconPosition","cssClassName","BUTTON","ICONBTN","Button","removeRippleEffect","tempContent","setIconCss","controlStatus","span","isToggle","btnClickHandler"],"mappings":"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AO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,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SuD,GAAsBz3G,EAAUqpG,GAC5C,IAAIqO,EASJ,OARA13G,EAASxhC,UAAUm5I,aAAc,EAC5BtoC,EAAkBg6B,GAKnBqO,EAAY13G,GAJZ03G,EAAY13G,EAAS97B,KAAKmlI,GAC1BqO,EAAUl5I,UAAYT,OAAOU,OAAOuhC,EAASxhC,YAK1Ck5I,EAGX,IAAI,GAAwB,WACxB,SAASE,KAOT,OAJAA,EAAOp5I,UAAU01I,QAAU,SAAUuC,EAAgBpN,EAAQ8K,GAEzD,YADe,IAAX9K,IAAqBA,EAAS,IAC3B,GAAOoN,EAAgBpN,IAE3BuO,EARgB,GAUvBjB,GAAY,CAAEzC,SAAS,IAAI,IAASA,SC9KpC2D,GAAa,CACb,SACA,QACA,cACA,4BACA,kCACA,wCACA,oCACA,uBACA,0BACA,0BACA,2CAEAC,GAAc,CACd,CAAEjxH,UAAW,OAAQmoC,SAAU,yBAC/B,CAAEnoC,UAAW,aAAcmoC,SAAU,+BACrC,CAAEnoC,UAAW,QAASmoC,SAAU,0BAChC,CAAEnoC,UAAW,QAASmoC,SAAU,0BAChC,CAAEnoC,UAAW,OAAQmoC,SAAU,qCAE/B+oF,GAAW,CAAC,WACZ,UACA,cACA,aACA,YACA,SACA,UACA,SACA,UACA,eACA,iBACA,UACA,WACA,eACA,iBACA,gBACA,YACA,mBACA,gBACA,aACA,SACA,YACA,cACA,cACA,aACA,cACA,SACA,mBACA,YACA,UACA,eACA,cACA,cACA,UACA,YACA,aACA,eACA,mBACA,cACA,YACA,cACA,cACA,YACA,eACA,YACA,SACA,WACA,aACA,aACA,UACA,SACA,YACA,aACA,aACA,eACA,qBACA,SACA,WACA,WACA,WACA,YACA,WACA,YACA,YACA,YACA,eACA,SACA,WACA,iBACA,YACA,eACA,eACA,UACA,mBACA,SACA,WACA,eACA,gBACA,iBACA,iBACA,qBACA,gBACA,eACA,cACA,iBAEA,GAAoC,WACpC,SAASC,KA2ET,OAzEAA,EAAmBC,eAAiB,WAChC,MAAO,CACHC,UAAW,CACPC,KAAMN,GACN3yH,WAAY4yH,MAIxBE,EAAmB/uI,SAAW,SAA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IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,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","file":"js/chunk-76b8bd98.35dbba9c.js","sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\nimport { Component, Property, ChildProperty, Event, append, compile } from '@syncfusion/ej2-base';\nimport { EventHandler, Touch, Browser, Animation as PopupAnimation } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getUniqueID, formatUnit, select, selectAll } from '@syncfusion/ej2-base';\nimport { attributes, closest, removeClass, addClass, remove } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Complex, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Popup } from '../popup/popup';\nimport { calculatePosition } from '../common/position';\nimport { isCollide, fit } from '../common/collision';\nvar TOUCHEND_HIDE_DELAY = 1500;\nvar TAPHOLD_THRESHOLD = 500;\nvar SHOW_POINTER_TIP_GAP = 0;\nvar HIDE_POINTER_TIP_GAP = 8;\nvar MOUSE_TRAIL_GAP = 2;\nvar POINTER_ADJUST = 2;\nvar ROOT = 'e-tooltip';\nvar RTL = 'e-rtl';\nvar DEVICE = 'e-bigger';\nvar ICON = 'e-icons';\nvar CLOSE = 'e-tooltip-close';\nvar TOOLTIP_WRAP = 'e-tooltip-wrap';\nvar CONTENT = 'e-tip-content';\nvar ARROW_TIP = 'e-arrow-tip';\nvar ARROW_TIP_OUTER = 'e-arrow-tip-outer';\nvar ARROW_TIP_INNER = 'e-arrow-tip-inner';\nvar TIP_BOTTOM = 'e-tip-bottom';\nvar TIP_TOP = 'e-tip-top';\nvar TIP_LEFT = 'e-tip-left';\nvar TIP_RIGHT = 'e-tip-right';\nvar POPUP_ROOT = 'e-popup';\nvar POPUP_OPEN = 'e-popup-open';\nvar POPUP_CLOSE = 'e-popup-close';\nvar POPUP_LIB = 'e-lib';\nvar HIDE_POPUP = 'e-hidden';\nvar POPUP_CONTAINER = 'e-tooltip-popup-container';\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property({ effect: 'FadeIn', duration: 150, delay: 0 })\n ], Animation.prototype, \"open\", void 0);\n __decorate([\n Property({ effect: 'FadeOut', duration: 150, delay: 0 })\n ], Animation.prototype, \"close\", void 0);\n return Animation;\n}(ChildProperty));\nexport { Animation };\n/**\n * Represents the Tooltip component that displays a piece of information about the target element on mouse hover.\n * ```html\n *
Show Tooltip
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n /* eslint-enable */\n /**\n * Constructor for creating the Tooltip Component\n *\n * @param {TooltipModel} options - specifies the options for the constructor\n * @param {string| HTMLElement} element - specifies the element for the constructor\n *\n */\n function Tooltip(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.mouseMoveEvent = null;\n _this.mouseMoveTarget = null;\n _this.containerElement = null;\n _this.isBodyContainer = true;\n return _this;\n }\n Tooltip.prototype.initialize = function () {\n this.formatPosition();\n addClass([this.element], ROOT);\n };\n Tooltip.prototype.formatPosition = function () {\n var _a, _b;\n if (this.position.indexOf('Top') === 0 || this.position.indexOf('Bottom') === 0) {\n _a = this.position.split(/(?=[A-Z])/), this.tooltipPositionY = _a[0], this.tooltipPositionX = _a[1];\n }\n else {\n _b = this.position.split(/(?=[A-Z])/), this.tooltipPositionX = _b[0], this.tooltipPositionY = _b[1];\n }\n };\n Tooltip.prototype.renderArrow = function () {\n this.setTipClass(this.position);\n var tip = this.createElement('div', { className: ARROW_TIP + ' ' + this.tipClass });\n tip.appendChild(this.createElement('div', { className: ARROW_TIP_OUTER + ' ' + this.tipClass }));\n tip.appendChild(this.createElement('div', { className: ARROW_TIP_INNER + ' ' + this.tipClass }));\n this.tooltipEle.appendChild(tip);\n };\n Tooltip.prototype.setTipClass = function (position) {\n if (position.indexOf('Right') === 0) {\n this.tipClass = TIP_LEFT;\n }\n else if (position.indexOf('Bottom') === 0) {\n this.tipClass = TIP_TOP;\n }\n else if (position.indexOf('Left') === 0) {\n this.tipClass = TIP_RIGHT;\n }\n else {\n this.tipClass = TIP_BOTTOM;\n }\n };\n Tooltip.prototype.renderPopup = function (target) {\n var elePos = this.mouseTrail ? { top: 0, left: 0 } : this.getTooltipPosition(target);\n this.tooltipEle.classList.remove(POPUP_LIB);\n this.popupObj = new Popup(this.tooltipEle, {\n height: this.height,\n width: this.width,\n position: { X: elePos.left, Y: elePos.top },\n enableRtl: this.enableRtl,\n open: this.openPopupHandler.bind(this),\n close: this.closePopupHandler.bind(this)\n });\n };\n Tooltip.prototype.getScalingFactor = function () {\n var eleRect = this.tooltipEle.getBoundingClientRect();\n var xScalingFactor = (Math.round(eleRect.width) / this.tooltipEle.offsetWidth) || 1;\n var yScalingFactor = (Math.round(eleRect.height) / this.tooltipEle.offsetHeight) || 1;\n return {\n x: isFinite(xScalingFactor) ? xScalingFactor : 1,\n y: isFinite(yScalingFactor) ? yScalingFactor : 1\n };\n };\n Tooltip.prototype.getTooltipPosition = function (target) {\n this.tooltipEle.style.display = 'block';\n var parentWithZoomStyle = this.element.closest('[style*=\"zoom\"]');\n if (parentWithZoomStyle) {\n if (!parentWithZoomStyle.contains(this.tooltipEle)) {\n this.tooltipEle.style.zoom = getComputedStyle(parentWithZoomStyle).zoom;\n }\n }\n var pos = calculatePosition(target, this.tooltipPositionX, this.tooltipPositionY, !this.isBodyContainer, this.isBodyContainer ? null : this.containerElement.getBoundingClientRect());\n var scalingFactors = this.getScalingFactor();\n var offsetPos = this.calculateTooltipOffset(this.position, scalingFactors.x, scalingFactors.y);\n var collisionPosition = this.calculateElementPosition(pos, offsetPos);\n var collisionLeft = collisionPosition[0];\n var collisionTop = collisionPosition[1];\n var elePos = this.collisionFlipFit(target, collisionLeft, collisionTop);\n elePos.left = elePos.left / scalingFactors.x;\n elePos.top = elePos.top / scalingFactors.y;\n this.tooltipEle.style.display = '';\n return elePos;\n };\n Tooltip.prototype.windowResize = function () {\n this.reposition(this.findTarget());\n };\n Tooltip.prototype.reposition = function (target) {\n if (this.popupObj && target) {\n var elePos = this.getTooltipPosition(target);\n this.popupObj.position = { X: elePos.left, Y: elePos.top };\n this.popupObj.dataBind();\n }\n };\n Tooltip.prototype.openPopupHandler = function () {\n if (!this.mouseTrail && this.needTemplateReposition()) {\n this.reposition(this.findTarget());\n }\n this.trigger('afterOpen', this.tooltipEventArgs);\n this.tooltipEventArgs = null;\n };\n Tooltip.prototype.closePopupHandler = function () {\n if (this.isReact && !(this.opensOn === 'Click' && typeof (this.content) === 'function')) {\n this.clearTemplate(['content']);\n }\n this.clear();\n this.trigger('afterClose', this.tooltipEventArgs);\n this.tooltipEventArgs = null;\n };\n Tooltip.prototype.calculateTooltipOffset = function (position, xScalingFactor, yScalingFactor) {\n if (xScalingFactor === void 0) { xScalingFactor = 1; }\n if (yScalingFactor === void 0) { yScalingFactor = 1; }\n var pos = { top: 0, left: 0 };\n var tipWidth, tipHeight, tooltipEleWidth, tooltipEleHeight, arrowEle;\n var tipAdjust, tipHeightAdjust, tipWidthAdjust;\n if (xScalingFactor != 1 || yScalingFactor != 1) {\n var tooltipEleRect = this.tooltipEle.getBoundingClientRect();\n var arrowEleRect = void 0;\n tooltipEleWidth = Math.round(tooltipEleRect.width);\n tooltipEleHeight = Math.round(tooltipEleRect.height);\n arrowEle = select('.' + ARROW_TIP, this.tooltipEle);\n if (arrowEle) {\n arrowEleRect = arrowEle.getBoundingClientRect();\n }\n tipWidth = arrowEle ? Math.round(arrowEleRect.width) : 0;\n tipHeight = arrowEle ? Math.round(arrowEleRect.height) : 0;\n tipAdjust = (this.showTipPointer ? SHOW_POINTER_TIP_GAP : HIDE_POINTER_TIP_GAP);\n tipHeightAdjust = (tipHeight / 2) + POINTER_ADJUST + (tooltipEleHeight - (this.tooltipEle.clientHeight * yScalingFactor));\n tipWidthAdjust = (tipWidth / 2) + POINTER_ADJUST + (tooltipEleWidth - (this.tooltipEle.clientWidth * xScalingFactor));\n }\n else {\n tooltipEleWidth = this.tooltipEle.offsetWidth;\n tooltipEleHeight = this.tooltipEle.offsetHeight;\n arrowEle = select('.' + ARROW_TIP, this.tooltipEle);\n tipWidth = arrowEle ? arrowEle.offsetWidth : 0;\n tipHeight = arrowEle ? arrowEle.offsetHeight : 0;\n tipAdjust = (this.showTipPointer ? SHOW_POINTER_TIP_GAP : HIDE_POINTER_TIP_GAP);\n tipHeightAdjust = (tipHeight / 2) + POINTER_ADJUST + (this.tooltipEle.offsetHeight - this.tooltipEle.clientHeight);\n tipWidthAdjust = (tipWidth / 2) + POINTER_ADJUST + (this.tooltipEle.offsetWidth - this.tooltipEle.clientWidth);\n }\n if (this.mouseTrail) {\n tipAdjust += MOUSE_TRAIL_GAP;\n }\n switch (position) {\n case 'RightTop':\n pos.left += tipWidth + tipAdjust;\n pos.top -= tooltipEleHeight - tipHeightAdjust;\n break;\n case 'RightCenter':\n pos.left += tipWidth + tipAdjust;\n pos.top -= (tooltipEleHeight / 2);\n break;\n case 'RightBottom':\n pos.left += tipWidth + tipAdjust;\n pos.top -= (tipHeightAdjust);\n break;\n case 'BottomRight':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tipWidthAdjust);\n break;\n case 'BottomCenter':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth / 2);\n break;\n case 'BottomLeft':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth - tipWidthAdjust);\n break;\n case 'LeftBottom':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tipHeightAdjust);\n break;\n case 'LeftCenter':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tooltipEleHeight / 2);\n break;\n case 'LeftTop':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tooltipEleHeight - tipHeightAdjust);\n break;\n case 'TopLeft':\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth - tipWidthAdjust);\n break;\n case 'TopRight':\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tipWidthAdjust);\n break;\n default:\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth / 2);\n break;\n }\n pos.left += this.offsetX;\n pos.top += this.offsetY;\n return pos;\n };\n Tooltip.prototype.updateTipPosition = function (position) {\n var selEle = selectAll('.' + ARROW_TIP + ',.' + ARROW_TIP_OUTER + ',.' + ARROW_TIP_INNER, this.tooltipEle);\n var removeList = [TIP_BOTTOM, TIP_TOP, TIP_LEFT, TIP_RIGHT];\n removeClass(selEle, removeList);\n this.setTipClass(position);\n addClass(selEle, this.tipClass);\n };\n Tooltip.prototype.adjustArrow = function (target, position, tooltipPositionX, tooltipPositionY) {\n if (this.showTipPointer === false) {\n return;\n }\n this.updateTipPosition(position);\n var leftValue;\n var topValue;\n this.tooltipEle.style.display = 'block';\n var tooltipWidth = this.tooltipEle.clientWidth;\n var tooltipHeight = this.tooltipEle.clientHeight;\n var arrowEle = select('.' + ARROW_TIP, this.tooltipEle);\n var arrowInnerELe = select('.' + ARROW_TIP_INNER, this.tooltipEle);\n var tipWidth = arrowEle.offsetWidth;\n var tipHeight = arrowEle.offsetHeight;\n this.tooltipEle.style.display = '';\n if (this.tipClass === TIP_BOTTOM || this.tipClass === TIP_TOP) {\n if (this.tipClass === TIP_BOTTOM) {\n topValue = '99.9%';\n // Arrow icon aligned -2px height from ArrowOuterTip div\n arrowInnerELe.style.top = '-' + (tipHeight - 2) + 'px';\n }\n else {\n topValue = -(tipHeight - 1) + 'px';\n // Arrow icon aligned -6px height from ArrowOuterTip div\n arrowInnerELe.style.top = '-' + (tipHeight - 6) + 'px';\n }\n if (target) {\n var tipPosExclude = tooltipPositionX !== 'Center' || (tooltipWidth > target.offsetWidth) || this.mouseTrail;\n if ((tipPosExclude && tooltipPositionX === 'Left') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n leftValue = (tooltipWidth - tipWidth - POINTER_ADJUST) + 'px';\n }\n else if ((tipPosExclude && tooltipPositionX === 'Right') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n leftValue = POINTER_ADJUST + 'px';\n }\n else if ((tipPosExclude) && (this.tipPointerPosition === 'End' || this.tipPointerPosition === 'Start')) {\n leftValue = (this.tipPointerPosition === 'End') ? ((target.offsetWidth + ((this.tooltipEle.offsetWidth - target.offsetWidth) / 2)) - (tipWidth / 2)) - POINTER_ADJUST + 'px'\n : ((this.tooltipEle.offsetWidth - target.offsetWidth) / 2) - (tipWidth / 2) + POINTER_ADJUST + 'px';\n }\n else {\n leftValue = ((tooltipWidth / 2) - (tipWidth / 2)) + 'px';\n }\n }\n }\n else {\n if (this.tipClass === TIP_RIGHT) {\n leftValue = '99.9%';\n // Arrow icon aligned -2px left from ArrowOuterTip div\n arrowInnerELe.style.left = '-' + (tipWidth - 2) + 'px';\n }\n else {\n leftValue = -(tipWidth - 1) + 'px';\n // Arrow icon aligned -2px from ArrowOuterTip width\n arrowInnerELe.style.left = (-(tipWidth) + (tipWidth - 2)) + 'px';\n }\n var tipPosExclude = tooltipPositionY !== 'Center' || (tooltipHeight > target.offsetHeight) || this.mouseTrail;\n if ((tipPosExclude && tooltipPositionY === 'Top') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n topValue = (tooltipHeight - tipHeight - POINTER_ADJUST) + 'px';\n }\n else if ((tipPosExclude && tooltipPositionY === 'Bottom') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n topValue = POINTER_ADJUST + 'px';\n }\n else {\n topValue = ((tooltipHeight / 2) - (tipHeight / 2)) + 'px';\n }\n }\n arrowEle.style.top = topValue;\n arrowEle.style.left = leftValue;\n };\n Tooltip.prototype.renderContent = function (target) {\n var tooltipContent = select('.' + CONTENT, this.tooltipEle);\n if (this.cssClass) {\n addClass([this.tooltipEle], this.cssClass.split(' '));\n }\n if (target && !isNullOrUndefined(target.getAttribute('title'))) {\n target.setAttribute('data-content', target.getAttribute('title'));\n target.removeAttribute('title');\n }\n if (!isNullOrUndefined(this.content)) {\n tooltipContent.innerHTML = '';\n if (this.content instanceof HTMLElement) {\n tooltipContent.appendChild(this.content);\n }\n else if (typeof this.content === 'string') {\n if (this.enableHtmlSanitizer) {\n this.setProperties({ content: SanitizeHtmlHelper.sanitize(this.content) }, true);\n }\n var tempFunction = compile(this.content);\n var tempArr = tempFunction({}, this, 'content', this.element.id + 'content', undefined, undefined, tooltipContent);\n if (tempArr) {\n if (this.enableHtmlParse) {\n var nodeList = tempArr.length;\n for (var i = 0; i < nodeList; i++) {\n tooltipContent[append(tempArr, tooltipContent), 'innerHTML'] = this.content;\n }\n }\n else {\n tooltipContent['textContent'] = this.content;\n }\n }\n }\n else {\n var templateFunction = compile(this.content);\n var tempArr = templateFunction({}, this, 'content', this.element.id + 'content', undefined, undefined, tooltipContent);\n if (tempArr) {\n append(tempArr, tooltipContent);\n }\n this.renderReactTemplates();\n }\n }\n else {\n if (target && !isNullOrUndefined(target.getAttribute('data-content'))) {\n tooltipContent.innerHTML = target.getAttribute('data-content');\n }\n }\n };\n Tooltip.prototype.renderCloseIcon = function () {\n if (!this.isSticky) {\n return;\n }\n var tipClose = this.createElement('div', { className: ICON + ' ' + CLOSE });\n this.tooltipEle.appendChild(tipClose);\n EventHandler.add(tipClose, Browser.touchStartEvent, this.onStickyClose, this);\n };\n Tooltip.prototype.addDataTooltipId = function (target, id) {\n attributes(target, { 'data-tooltip-id': id });\n };\n Tooltip.prototype.removeDataTooltipId = function (target) {\n target.removeAttribute('data-tooltip-id');\n };\n Tooltip.prototype.tapHoldHandler = function (evt) {\n clearTimeout(this.autoCloseTimer);\n this.targetHover(evt.originalEvent);\n };\n Tooltip.prototype.touchEndHandler = function (e) {\n var _this = this;\n if (this.isSticky) {\n return;\n }\n var close = function () {\n _this.close();\n };\n this.autoCloseTimer = setTimeout(close, TOUCHEND_HIDE_DELAY);\n };\n Tooltip.prototype.targetClick = function (e) {\n var target;\n if (this.target) {\n target = closest(e.target, this.target);\n }\n else {\n target = this.element;\n }\n if (isNullOrUndefined(target)) {\n return;\n }\n if (target.getAttribute('data-tooltip-id') === null) {\n this.targetHover(e);\n }\n else if (!this.isSticky) {\n this.hideTooltip(this.animation.close, e, target);\n }\n };\n Tooltip.prototype.targetHover = function (e) {\n var target;\n if (this.target) {\n target = closest(e.target, this.target);\n }\n else {\n target = this.element;\n }\n if (isNullOrUndefined(target) || (target.getAttribute('data-tooltip-id') !== null && this.closeDelay === 0)) {\n return;\n }\n var targetList = [].slice.call(selectAll('[data-tooltip-id= \"' + this.ctrlId + '_content\"]', document));\n for (var _i = 0, targetList_1 = targetList; _i < targetList_1.length; _i++) {\n var target_1 = targetList_1[_i];\n this.restoreElement(target_1);\n }\n this.showTooltip(target, this.animation.open, e);\n };\n Tooltip.prototype.mouseMoveBeforeOpen = function (e) {\n this.mouseMoveEvent = e;\n };\n Tooltip.prototype.mouseMoveBeforeRemove = function () {\n if (this.mouseMoveTarget) {\n EventHandler.remove(this.mouseMoveTarget, 'mousemove touchstart', this.mouseMoveBeforeOpen);\n }\n };\n Tooltip.prototype.showTooltip = function (target, showAnimation, e) {\n var _this = this;\n clearTimeout(this.showTimer);\n clearTimeout(this.hideTimer);\n if (this.openDelay && this.mouseTrail) {\n this.mouseMoveBeforeRemove();\n this.mouseMoveTarget = target;\n EventHandler.add(this.mouseMoveTarget, 'mousemove touchstart', this.mouseMoveBeforeOpen, this);\n }\n this.tooltipEventArgs = {\n type: e ? e.type : null, cancel: false, target: target, event: e ? e : null,\n element: this.tooltipEle, isInteracted: !isNullOrUndefined(e)\n };\n var observeCallback = function (beforeRenderArgs) {\n _this.beforeRenderCallback(beforeRenderArgs, target, e, showAnimation);\n };\n this.trigger('beforeRender', this.tooltipEventArgs, observeCallback.bind(this));\n };\n Tooltip.prototype.beforeRenderCallback = function (beforeRenderArgs, target, e, showAnimation) {\n if (beforeRenderArgs.cancel) {\n this.isHidden = true;\n this.clear();\n this.mouseMoveBeforeRemove();\n }\n else {\n this.isHidden = false;\n if (isNullOrUndefined(this.tooltipEle)) {\n this.ctrlId = this.element.getAttribute('id') ?\n getUniqueID(this.element.getAttribute('id')) : getUniqueID('tooltip');\n this.tooltipEle = this.createElement('div', {\n className: TOOLTIP_WRAP + ' ' + POPUP_ROOT + ' ' + POPUP_LIB, attrs: {\n role: 'tooltip', 'aria-hidden': 'false', 'id': this.ctrlId + '_content'\n }, styles: 'width:' +\n formatUnit(this.width) + ';height:' + formatUnit(this.height) + ';position:absolute;'\n });\n if (Object.keys(this.htmlAttributes).length !== 0) {\n for (var attr in this.htmlAttributes) {\n if (attr === \"class\") {\n this.tooltipEle.classList.add(this.htmlAttributes[\"\" + attr]);\n }\n else {\n this.tooltipEle.setAttribute(attr, this.htmlAttributes[\"\" + attr]);\n }\n }\n }\n this.tooltipBeforeRender(target, this);\n this.tooltipAfterRender(target, e, showAnimation, this);\n }\n else {\n if (target) {\n this.adjustArrow(target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n this.addDataTooltipId(target, this.ctrlId + '_content');\n this.renderContent(target);\n PopupAnimation.stop(this.tooltipEle);\n this.reposition(target);\n this.tooltipAfterRender(target, e, showAnimation, this);\n }\n }\n }\n };\n Tooltip.prototype.appendContainer = function (ctrlObj) {\n if (typeof this.container == 'string') {\n if (this.container === 'body') {\n this.containerElement = document.body;\n }\n else {\n this.isBodyContainer = false;\n this.containerElement = select(this.container, document);\n }\n }\n else if (this.container instanceof HTMLElement) {\n this.containerElement = this.container;\n this.isBodyContainer = this.containerElement.tagName === 'BODY';\n }\n if (!this.isBodyContainer) {\n addClass([this.containerElement], POPUP_CONTAINER);\n }\n this.containerElement.appendChild(ctrlObj.tooltipEle);\n };\n Tooltip.prototype.tooltipBeforeRender = function (target, ctrlObj) {\n if (target) {\n if (Browser.isDevice) {\n addClass([ctrlObj.tooltipEle], DEVICE);\n }\n if (ctrlObj.width !== 'auto') {\n ctrlObj.tooltipEle.style.maxWidth = formatUnit(ctrlObj.width);\n }\n ctrlObj.tooltipEle.appendChild(ctrlObj.createElement('div', { className: CONTENT }));\n this.appendContainer(ctrlObj);\n removeClass([ctrlObj.tooltipEle], HIDE_POPUP);\n ctrlObj.addDataTooltipId(target, ctrlObj.ctrlId + '_content');\n ctrlObj.renderContent(target);\n addClass([ctrlObj.tooltipEle], POPUP_OPEN);\n if (ctrlObj.showTipPointer) {\n ctrlObj.renderArrow();\n }\n ctrlObj.renderCloseIcon();\n ctrlObj.renderPopup(target);\n ctrlObj.adjustArrow(target, ctrlObj.position, ctrlObj.tooltipPositionX, ctrlObj.tooltipPositionY);\n PopupAnimation.stop(ctrlObj.tooltipEle);\n ctrlObj.reposition(target);\n }\n };\n Tooltip.prototype.tooltipAfterRender = function (target, e, showAnimation, ctrlObj) {\n if (target) {\n removeClass([ctrlObj.tooltipEle], POPUP_OPEN);\n addClass([ctrlObj.tooltipEle], POPUP_CLOSE);\n ctrlObj.tooltipEventArgs = {\n type: e ? e.type : null, cancel: false, target: target, event: e ? e : null,\n element: ctrlObj.tooltipEle, isInteracted: !isNullOrUndefined(e)\n };\n if (ctrlObj.needTemplateReposition() && !ctrlObj.mouseTrail) {\n ctrlObj.tooltipEle.style.display = 'none';\n }\n var observeCallback = function (observedArgs) {\n ctrlObj.beforeOpenCallback(observedArgs, target, showAnimation, e);\n };\n ctrlObj.trigger('beforeOpen', ctrlObj.tooltipEventArgs, observeCallback.bind(ctrlObj));\n }\n };\n Tooltip.prototype.beforeOpenCallback = function (observedArgs, target, showAnimation, e) {\n var _this = this;\n if (observedArgs.cancel) {\n this.isHidden = true;\n this.clear();\n this.mouseMoveBeforeRemove();\n this.restoreElement(target);\n }\n else {\n var openAnimation_1 = {\n name: showAnimation.effect,\n duration: showAnimation.duration,\n delay: showAnimation.delay,\n timingFunction: 'easeOut'\n };\n if (showAnimation.effect === 'None') {\n openAnimation_1 = undefined;\n }\n if (this.openDelay > 0) {\n var show = function () {\n if (_this.mouseTrail) {\n EventHandler.add(target, 'mousemove touchstart mouseenter', _this.onMouseMove, _this);\n }\n if (_this.popupObj) {\n _this.popupObj.show(openAnimation_1, target);\n if (_this.mouseMoveEvent && _this.mouseTrail) {\n _this.onMouseMove(_this.mouseMoveEvent);\n }\n }\n };\n this.showTimer = setTimeout(show, this.openDelay);\n }\n else {\n if (this.popupObj) {\n this.popupObj.show(openAnimation_1, target);\n }\n }\n }\n if (e) {\n this.wireMouseEvents(e, target);\n }\n };\n Tooltip.prototype.needTemplateReposition = function () {\n // eslint-disable-next-line\n var tooltip = this;\n return !isNullOrUndefined(tooltip.viewContainerRef)\n && typeof tooltip.viewContainerRef !== 'string';\n };\n Tooltip.prototype.checkCollision = function (target, x, y) {\n var elePos = {\n left: x, top: y, position: this.position,\n horizontal: this.tooltipPositionX, vertical: this.tooltipPositionY\n };\n var affectedPos = isCollide(this.tooltipEle, this.checkCollideTarget(), x, y);\n if (affectedPos.length > 0) {\n elePos.horizontal = affectedPos.indexOf('left') >= 0 ? 'Right' : affectedPos.indexOf('right') >= 0 ? 'Left' :\n this.tooltipPositionX;\n elePos.vertical = affectedPos.indexOf('top') >= 0 ? 'Bottom' : affectedPos.indexOf('bottom') >= 0 ? 'Top' :\n this.tooltipPositionY;\n }\n return elePos;\n };\n Tooltip.prototype.calculateElementPosition = function (pos, offsetPos) {\n return [this.isBodyContainer ? pos.left + offsetPos.left :\n (pos.left - this.containerElement.offsetLeft) + offsetPos.left + window.pageXOffset + this.containerElement.scrollLeft,\n this.isBodyContainer ? pos.top + offsetPos.top :\n (pos.top - this.containerElement.offsetTop) + offsetPos.top + window.pageYOffset + this.containerElement.scrollTop];\n };\n Tooltip.prototype.collisionFlipFit = function (target, x, y) {\n var elePos = this.checkCollision(target, x, y);\n var newpos = elePos.position;\n if (this.tooltipPositionY !== elePos.vertical) {\n newpos = ((this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n elePos.vertical + this.tooltipPositionX : this.tooltipPositionX + elePos.vertical);\n }\n if (this.tooltipPositionX !== elePos.horizontal) {\n if (newpos.indexOf('Left') === 0) {\n elePos.vertical = (newpos === 'LeftTop' || newpos === 'LeftCenter') ? 'Top' : 'Bottom';\n newpos = (elePos.vertical + 'Left');\n }\n if (newpos.indexOf('Right') === 0) {\n elePos.vertical = (newpos === 'RightTop' || newpos === 'RightCenter') ? 'Top' : 'Bottom';\n newpos = (elePos.vertical + 'Right');\n }\n elePos.horizontal = this.tooltipPositionX;\n }\n this.tooltipEventArgs = {\n type: null, cancel: false, target: target, event: null,\n element: this.tooltipEle, collidedPosition: newpos\n };\n this.trigger('beforeCollision', this.tooltipEventArgs);\n if (this.tooltipEventArgs.cancel) {\n newpos = this.position;\n }\n else {\n var elePosVertical = elePos.vertical;\n var elePosHorizontal = elePos.horizontal;\n if (elePos.position !== newpos) {\n var pos = calculatePosition(target, elePosHorizontal, elePosVertical, !this.isBodyContainer, this.isBodyContainer ? null : this.containerElement.getBoundingClientRect());\n this.adjustArrow(target, newpos, elePosHorizontal, elePosVertical);\n var scalingFactors = this.getScalingFactor();\n var offsetPos = this.calculateTooltipOffset(newpos, scalingFactors.x, scalingFactors.y);\n offsetPos.top -= this.getOffSetPosition('TopBottom', newpos, this.offsetY);\n offsetPos.left -= this.getOffSetPosition('RightLeft', newpos, this.offsetX);\n elePos.position = newpos;\n var elePosition = this.calculateElementPosition(pos, offsetPos);\n elePos.left = elePosition[0];\n elePos.top = elePosition[1];\n }\n else {\n this.adjustArrow(target, newpos, elePosHorizontal, elePosVertical);\n }\n }\n var eleOffset = { left: elePos.left, top: elePos.top };\n var position = this.isBodyContainer ?\n fit(this.tooltipEle, this.checkCollideTarget(), { X: true, Y: this.windowCollision }, eleOffset) : eleOffset;\n this.tooltipEle.style.display = 'block';\n if (this.showTipPointer && (newpos.indexOf('Bottom') === 0 || newpos.indexOf('Top') === 0)) {\n var arrowEle = select('.' + ARROW_TIP, this.tooltipEle);\n var arrowleft = parseInt(arrowEle.style.left, 10) - (position.left - elePos.left);\n if (arrowleft < 0) {\n arrowleft = 0;\n }\n else if ((arrowleft + arrowEle.offsetWidth) > this.tooltipEle.clientWidth) {\n arrowleft = this.tooltipEle.clientWidth - arrowEle.offsetWidth;\n }\n arrowEle.style.left = arrowleft.toString() + 'px';\n }\n this.tooltipEle.style.display = '';\n eleOffset.left = position.left;\n eleOffset.top = position.top;\n return eleOffset;\n };\n Tooltip.prototype.getOffSetPosition = function (positionString, newPos, offsetType) {\n return ((positionString.indexOf(this.position.split(/(?=[A-Z])/)[0]) !== -1) &&\n (positionString.indexOf(newPos.split(/(?=[A-Z])/)[0]) !== -1)) ? (2 * offsetType) : 0;\n };\n Tooltip.prototype.checkCollideTarget = function () {\n return !this.windowCollision && this.target ? this.element : null;\n };\n Tooltip.prototype.hideTooltip = function (hideAnimation, e, targetElement) {\n var _this = this;\n if (this.closeDelay > 0) {\n clearTimeout(this.hideTimer);\n clearTimeout(this.showTimer);\n var hide = function () {\n if (_this.closeDelay && _this.tooltipEle && _this.isTooltipOpen) {\n return;\n }\n _this.tooltipHide(hideAnimation, e, targetElement);\n };\n this.hideTimer = setTimeout(hide, this.closeDelay);\n }\n else {\n this.tooltipHide(hideAnimation, e, targetElement);\n }\n };\n Tooltip.prototype.tooltipHide = function (hideAnimation, e, targetElement) {\n var _this = this;\n var target;\n if (e) {\n target = this.target ? (targetElement || e.target) : this.element;\n }\n else {\n target = select('[data-tooltip-id= \"' + this.ctrlId + '_content\"]', document);\n }\n this.tooltipEventArgs = {\n type: e ? e.type : null, cancel: false, target: target, event: e ? e : null,\n element: this.tooltipEle, isInteracted: !isNullOrUndefined(e)\n };\n // this line commented for close the tooltip popup element even the target element destroyed in a page.\n //if (isNullOrUndefined(target)) { return; }\n this.trigger('beforeClose', this.tooltipEventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.mouseMoveBeforeRemove();\n _this.popupHide(hideAnimation, target);\n }\n else {\n _this.isHidden = false;\n }\n });\n this.tooltipEventArgs = null;\n };\n Tooltip.prototype.popupHide = function (hideAnimation, target) {\n if (target) {\n this.restoreElement(target);\n }\n this.isHidden = true;\n var closeAnimation = {\n name: hideAnimation.effect,\n duration: hideAnimation.duration,\n delay: hideAnimation.delay,\n timingFunction: 'easeIn'\n };\n if (hideAnimation.effect === 'None') {\n closeAnimation = undefined;\n }\n if (this.popupObj) {\n this.popupObj.hide(closeAnimation);\n }\n };\n Tooltip.prototype.restoreElement = function (target) {\n this.unwireMouseEvents(target);\n if (!isNullOrUndefined(target.getAttribute('data-content'))) {\n target.setAttribute('title', target.getAttribute('data-content'));\n target.removeAttribute('data-content');\n }\n this.removeDataTooltipId(target);\n };\n Tooltip.prototype.clear = function () {\n if (this.tooltipEle) {\n removeClass([this.tooltipEle], POPUP_CLOSE);\n addClass([this.tooltipEle], POPUP_OPEN);\n }\n if (this.isHidden) {\n if (this.popupObj) {\n this.popupObj.destroy();\n }\n if (this.tooltipEle) {\n remove(this.tooltipEle);\n }\n this.tooltipEle = null;\n this.popupObj = null;\n }\n };\n Tooltip.prototype.tooltipHover = function (e) {\n if (this.tooltipEle) {\n this.isTooltipOpen = true;\n }\n };\n Tooltip.prototype.tooltipMouseOut = function (e) {\n this.isTooltipOpen = false;\n this.hideTooltip(this.animation.close, e, this.findTarget());\n };\n Tooltip.prototype.onMouseOut = function (e) {\n var enteredElement = e.relatedTarget;\n // don't close the tooltip only if it is tooltip content element\n if (enteredElement && !this.mouseTrail) {\n var checkForTooltipElement = closest(enteredElement, \".\" + TOOLTIP_WRAP + \".\" + POPUP_LIB + \".\" + POPUP_ROOT);\n if (checkForTooltipElement) {\n EventHandler.add(checkForTooltipElement, 'mouseleave', this.tooltipElementMouseOut, this);\n }\n else {\n this.hideTooltip(this.animation.close, e, this.findTarget());\n if (this.closeDelay === 0) {\n this.clear();\n }\n }\n }\n else {\n this.hideTooltip(this.animation.close, e, this.findTarget());\n this.clear();\n }\n };\n Tooltip.prototype.tooltipElementMouseOut = function (e) {\n this.hideTooltip(this.animation.close, e, this.findTarget());\n EventHandler.remove(this.element, 'mouseleave', this.tooltipElementMouseOut);\n this.clear();\n };\n Tooltip.prototype.onStickyClose = function (e) {\n this.close();\n };\n Tooltip.prototype.onMouseMove = function (event) {\n var eventPageX = 0;\n var eventPageY = 0;\n if (event.type.indexOf('touch') > -1) {\n event.preventDefault();\n eventPageX = event.touches[0].pageX;\n eventPageY = event.touches[0].pageY;\n }\n else {\n eventPageX = event.pageX;\n eventPageY = event.pageY;\n }\n PopupAnimation.stop(this.tooltipEle);\n removeClass([this.tooltipEle], POPUP_CLOSE);\n addClass([this.tooltipEle], POPUP_OPEN);\n this.adjustArrow(event.target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n var scalingFactors = this.getScalingFactor();\n var pos = this.calculateTooltipOffset(this.position, scalingFactors.x, scalingFactors.y);\n var x = eventPageX + pos.left + this.offsetX;\n var y = eventPageY + pos.top + this.offsetY;\n var elePos = this.checkCollision(event.target, x, y);\n if (this.tooltipPositionX !== elePos.horizontal || this.tooltipPositionY !== elePos.vertical) {\n var newpos = (this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n elePos.vertical + elePos.horizontal : elePos.horizontal + elePos.vertical;\n elePos.position = newpos;\n this.adjustArrow(event.target, elePos.position, elePos.horizontal, elePos.vertical);\n var colpos = this.calculateTooltipOffset(elePos.position, scalingFactors.x, scalingFactors.y);\n elePos.left = eventPageX + colpos.left - this.offsetX;\n elePos.top = eventPageY + colpos.top - this.offsetY;\n }\n this.tooltipEle.style.left = elePos.left + 'px';\n this.tooltipEle.style.top = elePos.top + 'px';\n };\n Tooltip.prototype.keyDown = function (event) {\n if (!isNullOrUndefined(this.targetsList) && !isNullOrUndefined(this.target)) {\n var target = [].slice.call(selectAll(this.target, this.element));\n if (target.length !== this.targetsList.length) {\n this.unwireEvents(this.opensOn);\n this.wireEvents(this.opensOn);\n }\n }\n if (this.tooltipEle && event.keyCode === 27) {\n this.close();\n }\n };\n Tooltip.prototype.touchEnd = function (e) {\n if (this.tooltipEle && closest(e.target, '.' + ROOT) === null && !this.isSticky) {\n this.close();\n }\n };\n Tooltip.prototype.scrollHandler = function (e) {\n if (this.tooltipEle && !this.isSticky) {\n if (!(closest(e.target, \".\" + TOOLTIP_WRAP + \".\" + POPUP_LIB + \".\" + POPUP_ROOT))) {\n this.close();\n }\n }\n };\n /**\n * Core method that initializes the control rendering.\n *\n * @private\n * @returns {void}\n */\n Tooltip.prototype.render = function () {\n this.initialize();\n this.wireEvents(this.opensOn);\n this.renderComplete();\n };\n /**\n * Initializes the values of private members.\n *\n * @private\n * @returns {void}\n */\n Tooltip.prototype.preRender = function () {\n this.tipClass = TIP_BOTTOM;\n this.tooltipPositionX = 'Center';\n this.tooltipPositionY = 'Top';\n this.isHidden = true;\n };\n /**\n * Binding events to the Tooltip element.\n *\n * @hidden\n * @param {string} trigger - specify the trigger string to the function\n * @returns {void}\n *\n */\n Tooltip.prototype.wireEvents = function (trigger) {\n var triggerList = this.getTriggerList(trigger);\n for (var _i = 0, triggerList_1 = triggerList; _i < triggerList_1.length; _i++) {\n var opensOn = triggerList_1[_i];\n if (opensOn === 'Custom') {\n return;\n }\n if (opensOn === 'Focus') {\n this.wireFocusEvents();\n }\n if (opensOn === 'Click') {\n EventHandler.add(this.element, Browser.touchStartEvent, this.targetClick, this);\n }\n if (opensOn === 'Hover') {\n if (Browser.isDevice) {\n this.touchModule = new Touch(this.element, {\n tapHoldThreshold: TAPHOLD_THRESHOLD,\n tapHold: this.tapHoldHandler.bind(this)\n });\n EventHandler.add(this.element, Browser.touchEndEvent, this.touchEndHandler, this);\n }\n else {\n EventHandler.add(this.element, 'mouseover', this.targetHover, this);\n }\n }\n }\n EventHandler.add(document, 'touchend', this.touchEnd, this);\n EventHandler.add(document, 'scroll wheel', this.scrollHandler, this);\n EventHandler.add(window, 'resize', this.windowResize, this);\n EventHandler.add(document, 'keydown', this.keyDown, this);\n };\n Tooltip.prototype.getTriggerList = function (trigger) {\n if (trigger === 'Auto') {\n trigger = (Browser.isDevice) ? 'Hover' : 'Hover Focus';\n }\n return trigger.split(' ');\n };\n Tooltip.prototype.wireFocusEvents = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.element.nodeName !== \"BODY\") {\n EventHandler.add(this.element, 'focusin', this.targetHover, this);\n }\n else {\n var targetList = [].slice.call(selectAll(this.target, this.element));\n this.targetsList = targetList;\n for (var _i = 0, targetList_2 = targetList; _i < targetList_2.length; _i++) {\n var target = targetList_2[_i];\n EventHandler.add(target, 'focus', this.targetHover, this);\n }\n }\n }\n else {\n EventHandler.add(this.element, 'focus', this.targetHover, this);\n }\n };\n Tooltip.prototype.wireMouseEvents = function (e, target) {\n if (this.tooltipEle) {\n if (!this.isSticky) {\n if (e.type === 'focus') {\n EventHandler.add(target, 'blur', this.onMouseOut, this);\n }\n if (e.type === 'focusin') {\n EventHandler.add(target, 'focusout', this.onMouseOut, this);\n }\n if (e.type === 'mouseover') {\n EventHandler.add(target, 'mouseleave', this.onMouseOut, this);\n }\n if (this.closeDelay) {\n EventHandler.add(this.tooltipEle, 'mouseenter', this.tooltipHover, this);\n EventHandler.add(this.tooltipEle, 'mouseleave', this.tooltipMouseOut, this);\n }\n }\n if (this.mouseTrail && this.openDelay === 0) {\n EventHandler.add(target, 'mousemove touchstart mouseenter', this.onMouseMove, this);\n }\n }\n };\n /**\n * Unbinding events from the element on widget destroy.\n *\n * @hidden\n *\n * @param {string} trigger - specify the trigger string to the function\n * @returns {void}\n *\n */\n Tooltip.prototype.unwireEvents = function (trigger) {\n var triggerList = this.getTriggerList(trigger);\n for (var _i = 0, triggerList_2 = triggerList; _i < triggerList_2.length; _i++) {\n var opensOn = triggerList_2[_i];\n if (opensOn === 'Custom') {\n return;\n }\n if (opensOn === 'Focus') {\n this.unwireFocusEvents();\n }\n if (opensOn === 'Click') {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.targetClick);\n }\n if (opensOn === 'Hover') {\n if (Browser.isDevice) {\n if (this.touchModule) {\n this.touchModule.destroy();\n }\n EventHandler.remove(this.element, Browser.touchEndEvent, this.touchEndHandler);\n }\n else {\n EventHandler.remove(this.element, 'mouseover', this.targetHover);\n }\n }\n }\n EventHandler.remove(document, 'touchend', this.touchEnd);\n EventHandler.remove(document, 'scroll wheel', this.scrollHandler);\n EventHandler.remove(window, 'resize', this.windowResize);\n EventHandler.remove(document, 'keydown', this.keyDown);\n };\n Tooltip.prototype.unwireFocusEvents = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.element.nodeName === 'BODY') {\n EventHandler.remove(this.element, 'focusin', this.targetHover);\n }\n else {\n var targetList = [].slice.call(selectAll(this.target, this.element));\n for (var _i = 0, targetList_3 = targetList; _i < targetList_3.length; _i++) {\n var target = targetList_3[_i];\n EventHandler.remove(target, 'focus', this.targetHover);\n }\n }\n }\n else {\n EventHandler.remove(this.element, 'focus', this.targetHover);\n }\n };\n Tooltip.prototype.unwireMouseEvents = function (target) {\n if (!this.isSticky) {\n var triggerList = this.getTriggerList(this.opensOn);\n for (var _i = 0, triggerList_3 = triggerList; _i < triggerList_3.length; _i++) {\n var opensOn = triggerList_3[_i];\n if (opensOn === 'Focus') {\n EventHandler.remove(target, 'blur', this.onMouseOut);\n EventHandler.remove(target, 'focusout', this.onMouseOut);\n }\n if (opensOn === 'Hover' && !Browser.isDevice) {\n EventHandler.remove(target, 'mouseleave', this.onMouseOut);\n }\n }\n if (this.closeDelay) {\n EventHandler.remove(target, 'mouseenter', this.tooltipHover);\n EventHandler.remove(target, 'mouseleave', this.tooltipMouseOut);\n }\n }\n if (this.mouseTrail) {\n EventHandler.remove(target, 'mousemove touchstart mouseenter', this.onMouseMove);\n }\n };\n Tooltip.prototype.findTarget = function () {\n var target = select('[data-tooltip-id= \"' + this.ctrlId + '_content\"]', document);\n return target;\n };\n /**\n * Core method to return the component name.\n *\n * @private\n *\n * @returns {string} - this method returns module name.\n */\n Tooltip.prototype.getModuleName = function () {\n return 'tooltip';\n };\n /**\n * Returns the properties to be maintained in the persisted state.\n *\n * @private\n *\n * @returns {string} - this method returns persisted data.\n */\n Tooltip.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Called internally, if any of the property value changed.\n *\n * @private\n *\n * @param {TooltipModel} newProp - this param gives new property values to the method\n * @param {TooltipModel} oldProp - this param gives old property values to the method\n * @returns {void}\n *\n */\n Tooltip.prototype.onPropertyChanged = function (newProp, oldProp) {\n var targetElement = this.findTarget();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n if (this.tooltipEle && targetElement) {\n this.tooltipEle.style.width = this.tooltipEle.style.maxWidth = formatUnit(newProp.width);\n this.reposition(targetElement);\n }\n break;\n case 'height':\n if (this.tooltipEle && targetElement) {\n this.tooltipEle.style.height = formatUnit(newProp.height);\n this.reposition(targetElement);\n }\n break;\n case 'content':\n if (this.tooltipEle) {\n this.renderContent();\n }\n break;\n case 'opensOn':\n this.unwireEvents(oldProp.opensOn);\n this.wireEvents(newProp.opensOn);\n break;\n case 'position':\n this.formatPosition();\n if (this.tooltipEle && targetElement) {\n var arrowInnerELe = select('.' + ARROW_TIP_INNER, this.tooltipEle);\n arrowInnerELe.style.top = arrowInnerELe.style.left = null;\n this.reposition(targetElement);\n }\n break;\n case 'tipPointerPosition':\n if (this.tooltipEle && targetElement) {\n this.reposition(targetElement);\n }\n break;\n case 'offsetX':\n if (this.tooltipEle) {\n var x = newProp.offsetX - oldProp.offsetX;\n this.tooltipEle.style.left = (parseInt(this.tooltipEle.style.left, 10) + (x)).toString() + 'px';\n }\n break;\n case 'offsetY':\n if (this.tooltipEle) {\n var y = newProp.offsetY - oldProp.offsetY;\n this.tooltipEle.style.top = (parseInt(this.tooltipEle.style.top, 10) + (y)).toString() + 'px';\n }\n break;\n case 'cssClass':\n if (this.tooltipEle) {\n if (oldProp.cssClass) {\n removeClass([this.tooltipEle], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.tooltipEle], newProp.cssClass.split(' '));\n }\n }\n break;\n case 'enableRtl':\n if (this.tooltipEle) {\n if (this.enableRtl) {\n addClass([this.tooltipEle], RTL);\n }\n else {\n removeClass([this.tooltipEle], RTL);\n }\n }\n break;\n case 'container':\n if (!isNullOrUndefined(this.containerElement)) {\n removeClass([this.containerElement], POPUP_CONTAINER);\n }\n this.container = newProp.container;\n if (this.tooltipEle && targetElement) {\n this.appendContainer(this);\n this.reposition(targetElement);\n }\n }\n }\n };\n /**\n * It is used to show the Tooltip on the specified target with specific animation settings.\n *\n * @param {HTMLElement} element - Target element where the Tooltip is to be displayed. (It is an optional parameter)\n * @param {TooltipAnimationSettings} animation - Sets the specific animation, while showing the Tooltip on the screen. (It is an optional parameter)\n * @returns {void}\n */\n Tooltip.prototype.open = function (element, animation) {\n if (isNullOrUndefined(animation)) {\n animation = this.animation.open;\n }\n if (isNullOrUndefined(element)) {\n element = this.element;\n }\n if (element.style.display === 'none') {\n return;\n }\n this.showTooltip(element, animation);\n };\n /**\n * It is used to hide the Tooltip with specific animation effect.\n *\n * @param {TooltipAnimationSettings} animation - Sets the specific animation when hiding Tooltip from the screen. (It is an optional parameter)\n * @returns {void}\n */\n Tooltip.prototype.close = function (animation) {\n if (!animation) {\n animation = this.animation.close;\n }\n this.hideTooltip(animation);\n };\n /**\n * It is used to refresh the Tooltip content and its position.\n *\n * @param {HTMLElement} target - Target element where the Tooltip content or position needs to be refreshed.\n * @returns {void}\n */\n Tooltip.prototype.refresh = function (target) {\n if (this.tooltipEle) {\n this.renderContent(target);\n }\n if (this.popupObj && target) {\n this.reposition(target);\n }\n };\n /**\n * It is used to destroy the Tooltip component.\n * @method destroy\n * @returns {void}\n * @memberof Tooltip\n */\n Tooltip.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.tooltipEle) {\n remove(this.tooltipEle);\n }\n if (this.popupObj) {\n this.popupObj.destroy();\n }\n removeClass([this.element], ROOT);\n this.unwireEvents(this.opensOn);\n this.unwireMouseEvents(this.element);\n this.tooltipEle = null;\n this.popupObj = null;\n var currentTarget = selectAll('[data-tooltip-id= \"' + this.ctrlId + '_content\"]', this.element);\n for (var _i = 0, currentTarget_1 = currentTarget; _i < currentTarget_1.length; _i++) {\n var target = currentTarget_1[_i];\n this.restoreElement(target);\n }\n };\n __decorate([\n Property('auto')\n ], Tooltip.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Tooltip.prototype, \"height\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"content\", void 0);\n __decorate([\n Property('body')\n ], Tooltip.prototype, \"container\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"target\", void 0);\n __decorate([\n Property('TopCenter')\n ], Tooltip.prototype, \"position\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offsetY\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"showTipPointer\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"enableHtmlParse\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"windowCollision\", void 0);\n __decorate([\n Property('Auto')\n ], Tooltip.prototype, \"tipPointerPosition\", void 0);\n __decorate([\n Property('Auto')\n ], Tooltip.prototype, \"opensOn\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"mouseTrail\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isSticky\", void 0);\n __decorate([\n Complex({}, Animation)\n ], Tooltip.prototype, \"animation\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"openDelay\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"closeDelay\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property('')\n ], Tooltip.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeRender\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"afterOpen\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"afterClose\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeCollision\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"destroyed\", void 0);\n Tooltip = __decorate([\n NotifyPropertyChanges\n ], Tooltip);\n return Tooltip;\n}(Component));\nexport { Tooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// \nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Event, extend, L10n, Browser, formatUnit } from '@syncfusion/ej2-base';\nimport { detach, addClass, removeClass, closest, attributes, Touch } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setValue, getUniqueID } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { Calendar } from '../calendar/calendar';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar ROOT = 'e-datepicker';\nvar LIBRARY = 'e-lib';\nvar CONTROL = 'e-control';\nvar POPUPWRAPPER = 'e-popup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar INPUTCONTAINER = 'e-input-group';\nvar INPUTFOCUS = 'e-input-focus';\nvar INPUTROOT = 'e-input';\nvar ERROR = 'e-error';\nvar ACTIVE = 'e-active';\nvar OVERFLOW = 'e-date-overflow';\nvar DATEICON = 'e-date-icon';\nvar CLEARICON = 'e-clear-icon';\nvar ICONS = 'e-icons';\nvar OPENDURATION = 300;\nvar OFFSETVALUE = 4;\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar NONEDIT = 'e-non-edit';\nvar containerAttr = ['title', 'class', 'style'];\n/**\n * Represents the DatePicker component that allows user to select\n * or enter a date value.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DatePicker = /** @class */ (function (_super) {\n __extends(DatePicker, _super);\n /**\n * Constructor for creating the widget.\n *\n * @param {DatePickerModel} options - Specifies the DatePicker model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function DatePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isDateIconClicked = false;\n _this.isAltKeyPressed = false;\n _this.isInteracted = true;\n _this.invalidValueString = null;\n _this.checkPreviousValue = null;\n _this.maskedDateValue = '';\n _this.isAngular = false;\n _this.preventChange = false;\n _this.isIconClicked = false;\n _this.isDynamicValueChanged = false;\n _this.moduleName = _this.getModuleName();\n _this.isFocused = false;\n _this.isBlur = false;\n _this.isKeyAction = false;\n _this.datepickerOptions = options;\n return _this;\n }\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n DatePicker.prototype.render = function () {\n this.initialize();\n this.bindEvents();\n if (this.floatLabelType === 'Auto') {\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.renderComplete();\n this.setTimeZone(this.serverTimezoneOffset);\n };\n DatePicker.prototype.setTimeZone = function (offsetValue) {\n if (!isNullOrUndefined(this.serverTimezoneOffset) && this.value) {\n var clientTimeZoneDiff = new Date().getTimezoneOffset() / 60;\n var serverTimezoneDiff = offsetValue;\n var timeZoneDiff = serverTimezoneDiff + clientTimeZoneDiff;\n timeZoneDiff = this.isDayLightSaving() ? timeZoneDiff-- : timeZoneDiff;\n this.value = new Date((this.value).getTime() + (timeZoneDiff * 60 * 60 * 1000));\n this.updateInput();\n }\n };\n DatePicker.prototype.isDayLightSaving = function () {\n var firstOffset = new Date(this.value.getFullYear(), 0, 1).getTimezoneOffset();\n var secondOffset = new Date(this.value.getFullYear(), 6, 1).getTimezoneOffset();\n return (this.value.getTimezoneOffset() < Math.max(firstOffset, secondOffset));\n };\n DatePicker.prototype.setAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n this.updateIconState();\n };\n DatePicker.prototype.updateIconState = function () {\n if (!this.allowEdit && this.inputWrapper && !this.readonly) {\n if (this.inputElement.value === '') {\n removeClass([this.inputWrapper.container], [NONEDIT]);\n }\n else {\n addClass([this.inputWrapper.container], [NONEDIT]);\n }\n }\n else if (this.inputWrapper) {\n removeClass([this.inputWrapper.container], [NONEDIT]);\n }\n };\n DatePicker.prototype.initialize = function () {\n this.checkInvalidValue(this.value);\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n this.createInput();\n this.updateHtmlAttributeToWrapper();\n this.setAllowEdit();\n if (this.enableMask && !this.value && this.maskedDateValue && (this.floatLabelType === 'Always' || !this.floatLabelType || !this.placeholder)) {\n this.updateInput(true);\n this.updateInputValue(this.maskedDateValue);\n }\n else if (!this.enableMask) {\n this.updateInput(true);\n }\n this.previousElementValue = this.inputElement.value;\n this.previousDate = !isNullOrUndefined(this.value) ? new Date(+this.value) : null;\n this.inputElement.setAttribute('value', this.inputElement.value);\n this.inputValueCopy = this.value;\n };\n DatePicker.prototype.createInput = function () {\n var ariaAttrs = {\n 'aria-atomic': 'true', 'aria-expanded': 'false',\n 'role': 'combobox', 'autocomplete': 'off', 'autocorrect': 'off',\n 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-invalid': 'false'\n };\n if (this.getModuleName() === 'datepicker') {\n var l10nLocale = { placeholder: this.placeholder };\n this.globalize = new Internationalization(this.locale);\n this.l10n = new L10n('datepicker', l10nLocale, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n if (this.fullScreenMode && Browser.isDevice) {\n this.cssClass += ' ' + \"e-popup-expand\";\n }\n var updatedCssClassValues = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValues = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n var isBindClearAction = this.enableMask ? false : true;\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n bindClearAction: isBindClearAction,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassValues,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton\n },\n buttons: [INPUTWRAPPER + ' ' + DATEICON + ' ' + ICONS]\n }, this.createElement);\n this.setWidth(this.width);\n if (this.inputElement.name !== '') {\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute('name'));\n }\n else {\n this.inputElement.setAttribute('name', '' + this.element.id);\n }\n attributes(this.inputElement, ariaAttrs);\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n this.inputElement.tabIndex = -1;\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n Input.addAttributes({ 'aria-label': 'select' }, this.inputWrapper.buttons[0]);\n addClass([this.inputWrapper.container], DATEWRAPPER);\n };\n DatePicker.prototype.updateInput = function (isDynamic, isBlur) {\n if (isDynamic === void 0) { isDynamic = false; }\n if (isBlur === void 0) { isBlur = false; }\n var formatOptions;\n if (this.value && !this.isCalendar()) {\n this.disabledDates(isDynamic, isBlur);\n }\n if (isNaN(+new Date(this.checkValue(this.value)))) {\n this.setProperties({ value: null }, true);\n }\n if (this.strictMode) {\n //calls the Calendar processDate protected method to update the date value according to the strictMode true behaviour.\n _super.prototype.validateDate.call(this);\n this.minMaxUpdates();\n _super.prototype.minMaxUpdate.call(this);\n }\n if (!isNullOrUndefined(this.value)) {\n var dateValue = this.value;\n var dateString = void 0;\n var tempFormat = !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n dateString = this.globalize.formatDate(this.value, {\n format: tempFormat, type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n dateString = this.globalize.formatDate(this.value, {\n format: tempFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n });\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n dateString = this.globalize.formatDate(this.value, formatOptions);\n }\n if ((+dateValue <= +this.max) && (+dateValue >= +this.min)) {\n this.updateInputValue(dateString);\n }\n else {\n var value = (+dateValue >= +this.max || !+this.value) || (!+this.value || +dateValue <= +this.min);\n if (!this.strictMode && value) {\n this.updateInputValue(dateString);\n }\n }\n }\n if (isNullOrUndefined(this.value) && this.strictMode) {\n if (!this.enableMask) {\n this.updateInputValue('');\n }\n else {\n this.updateInputValue(this.maskedDateValue);\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n }\n if (!this.strictMode && isNullOrUndefined(this.value) && this.invalidValueString) {\n this.updateInputValue(this.invalidValueString);\n }\n this.changedArgs = { value: this.value };\n this.errorClass();\n this.updateIconState();\n };\n DatePicker.prototype.minMaxUpdates = function () {\n if (!isNullOrUndefined(this.value) && this.value < this.min && this.min <= this.max && this.strictMode) {\n this.setProperties({ value: this.min }, true);\n this.changedArgs = { value: this.value };\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value > this.max && this.min <= this.max && this.strictMode) {\n this.setProperties({ value: this.max }, true);\n this.changedArgs = { value: this.value };\n }\n }\n };\n DatePicker.prototype.checkStringValue = function (val) {\n var returnDate = null;\n var formatOptions = null;\n var formatDateTime = null;\n if (this.getModuleName() === 'datetimepicker') {\n var culture = new Internationalization(this.locale);\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd' };\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime' };\n }\n else {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime', calendar: 'islamic' };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n }\n returnDate = this.checkDateValue(this.globalize.parseDate(val, formatOptions));\n if (isNullOrUndefined(returnDate) && (this.getModuleName() === 'datetimepicker')) {\n returnDate = this.checkDateValue(this.globalize.parseDate(val, formatDateTime));\n }\n return returnDate;\n };\n DatePicker.prototype.checkInvalidValue = function (value) {\n if (!(value instanceof Date) && !isNullOrUndefined(value)) {\n var valueDate = null;\n var valueString = value;\n if (typeof value === 'number') {\n valueString = value.toString();\n }\n var formatOptions = null;\n var formatDateTime = null;\n if (this.getModuleName() === 'datetimepicker') {\n var culture = new Internationalization(this.locale);\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd' };\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime' };\n }\n else {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime', calendar: 'islamic' };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n }\n var invalid = false;\n if (typeof valueString !== 'string') {\n valueString = null;\n invalid = true;\n }\n else {\n if (typeof valueString === 'string') {\n valueString = valueString.trim();\n }\n valueDate = this.checkStringValue(valueString);\n if (!valueDate) {\n var extISOString = null;\n var basicISOString = null;\n // eslint-disable-next-line\n extISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n // eslint-disable-next-line\n basicISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n if ((!extISOString.test(valueString) && !basicISOString.test(valueString))\n || (/^[a-zA-Z0-9- ]*$/).test(valueString) || isNaN(+new Date(this.checkValue(valueString)))) {\n invalid = true;\n }\n else {\n valueDate = new Date(valueString);\n }\n }\n }\n if (invalid) {\n if (!this.strictMode) {\n this.invalidValueString = valueString;\n }\n this.setProperties({ value: null }, true);\n }\n else {\n this.setProperties({ value: valueDate }, true);\n }\n }\n };\n DatePicker.prototype.bindInputEvent = function () {\n if (!isNullOrUndefined(this.formatString) || this.enableMask) {\n if (this.enableMask || this.formatString.indexOf('y') === -1) {\n EventHandler.add(this.inputElement, 'input', this.inputHandler, this);\n }\n else {\n EventHandler.remove(this.inputElement, 'input', this.inputHandler);\n }\n }\n };\n DatePicker.prototype.bindEvents = function () {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateIconHandler, this);\n EventHandler.add(this.inputElement, 'mouseup', this.mouseUpHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n EventHandler.add(this.inputElement, 'keyup', this.keyupHandler, this);\n if (this.enableMask) {\n EventHandler.add(this.inputElement, 'keydown', this.keydownHandler, this);\n }\n this.bindInputEvent();\n // To prevent the twice triggering.\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.resetFormHandler, this);\n }\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n this.keyboardModules = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputKeyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n };\n DatePicker.prototype.keydownHandler = function (e) {\n switch (e.code) {\n case 'ArrowLeft':\n case 'ArrowRight':\n case 'ArrowUp':\n case 'ArrowDown':\n case 'Home':\n case 'End':\n case 'Delete':\n if (this.enableMask && !this.popupObj && !this.readonly) {\n if (e.code !== 'Delete') {\n e.preventDefault();\n }\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: e\n });\n }\n break;\n default:\n break;\n }\n };\n DatePicker.prototype.unBindEvents = function () {\n if (!isNullOrUndefined(this.inputWrapper)) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateIconHandler);\n }\n EventHandler.remove(this.inputElement, 'mouseup', this.mouseUpHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n EventHandler.remove(this.inputElement, 'keyup', this.keyupHandler);\n if (this.enableMask) {\n EventHandler.remove(this.inputElement, 'keydown', this.keydownHandler);\n }\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler);\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.resetFormHandler);\n }\n };\n DatePicker.prototype.resetFormHandler = function () {\n if (!this.enabled) {\n return;\n }\n if (!this.inputElement.disabled) {\n var value = this.inputElement.getAttribute('value');\n if (this.element.tagName === 'EJS-DATEPICKER' || this.element.tagName === 'EJS-DATETIMEPICKER') {\n value = '';\n this.inputValueCopy = null;\n this.inputElement.setAttribute('value', '');\n }\n this.setProperties({ value: this.inputValueCopy }, true);\n this.restoreValue();\n if (this.inputElement) {\n this.updateInputValue(value);\n this.errorClass();\n }\n }\n };\n DatePicker.prototype.restoreValue = function () {\n this.currentDate = this.value ? this.value : new Date();\n this.previousDate = this.value;\n this.previousElementValue = (isNullOrUndefined(this.inputValueCopy)) ? '' :\n this.globalize.formatDate(this.inputValueCopy, {\n format: this.formatString, type: 'dateTime', skeleton: 'yMd'\n });\n };\n DatePicker.prototype.inputChangeHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.stopPropagation();\n };\n DatePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n DatePicker.prototype.resetHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.preventDefault();\n this.clear(e);\n };\n DatePicker.prototype.mouseUpHandler = function (e) {\n if (this.enableMask) {\n e.preventDefault();\n this.notify('setMaskSelection', {\n module: 'MaskedDateTime'\n });\n }\n };\n DatePicker.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n if (!this.enableMask) {\n this.updateInputValue('');\n }\n var clearedArgs = {\n event: event\n };\n this.trigger('cleared', clearedArgs);\n this.invalidValueString = '';\n this.updateInput();\n this.popupUpdate();\n this.changeEvent(event);\n if (this.enableMask) {\n this.notify('clearHandler', {\n module: 'MaskedDateTime'\n });\n }\n if (closest(this.element, 'form')) {\n var element = this.element;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n DatePicker.prototype.preventEventBubbling = function (e) {\n e.preventDefault();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.interopAdaptor.invokeMethodAsync('OnDateIconClick');\n };\n DatePicker.prototype.updateInputValue = function (value) {\n Input.setValue(value, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n DatePicker.prototype.dateIconHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n this.isIconClicked = true;\n if (Browser.isDevice) {\n this.inputElement.setAttribute('readonly', '');\n this.inputElement.blur();\n }\n e.preventDefault();\n if (!this.readonly) {\n if (this.isCalendar()) {\n this.hide(e);\n }\n else {\n this.isDateIconClicked = true;\n this.show(null, e);\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n addClass(this.inputWrapper.buttons, ACTIVE);\n }\n }\n this.isIconClicked = false;\n };\n DatePicker.prototype.updateHtmlAttributeToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (!isNullOrUndefined(this.htmlAttributes[\"\" + key])) {\n if (containerAttr.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValues = (this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ')).trim();\n if (updatedClassValues !== '') {\n addClass([this.inputWrapper.container], updatedClassValues.split(' '));\n }\n }\n else if (key === 'style') {\n var setStyle = this.inputWrapper.container.getAttribute(key);\n if (!isNullOrUndefined(setStyle)) {\n if (setStyle.charAt(setStyle.length - 1) === ';') {\n setStyle = setStyle + this.htmlAttributes[\"\" + key];\n }\n else {\n setStyle = setStyle + ';' + this.htmlAttributes[\"\" + key];\n }\n }\n else {\n setStyle = this.htmlAttributes[\"\" + key];\n }\n this.inputWrapper.container.setAttribute(key, setStyle);\n }\n else {\n this.inputWrapper.container.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n }\n };\n DatePicker.prototype.updateHtmlAttributeToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (containerAttr.indexOf(key) < 0) {\n this.inputElement.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n DatePicker.prototype.updateCssClass = function (newCssClass, oldCssClass) {\n if (!isNullOrUndefined(oldCssClass)) {\n oldCssClass = (oldCssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(newCssClass)) {\n newCssClass = (newCssClass.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(newCssClass, [this.inputWrapper.container], oldCssClass);\n if (this.popupWrapper) {\n Input.setCssClass(newCssClass, [this.popupWrapper], oldCssClass);\n }\n };\n DatePicker.prototype.calendarKeyActionHandle = function (e) {\n switch (e.action) {\n case 'escape':\n if (this.isCalendar()) {\n this.hide(e);\n }\n else {\n this.inputWrapper.container.children[this.index].blur();\n }\n break;\n case 'enter':\n if (!this.isCalendar()) {\n this.show(null, e);\n }\n else {\n if (+this.value !== +this.currentDate && !this.isCalendar()) {\n this.inputWrapper.container.children[this.index].focus();\n }\n }\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n break;\n case 'tab':\n this.hide(e);\n }\n };\n DatePicker.prototype.inputFocusHandler = function () {\n this.isFocused = true;\n if (!this.enabled) {\n return;\n }\n if (this.enableMask && !this.inputElement.value && this.placeholder) {\n if (this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue(this.maskedDateValue);\n this.inputElement.selectionStart = 0;\n this.inputElement.selectionEnd = this.inputElement.value.length;\n }\n }\n var focusArguments = {\n model: this\n };\n this.isDateIconClicked = false;\n this.trigger('focus', focusArguments);\n this.updateIconState();\n if (this.openOnFocus && !this.isIconClicked) {\n this.show();\n }\n };\n DatePicker.prototype.inputHandler = function () {\n this.isPopupClicked = false;\n if (this.enableMask) {\n this.notify('inputHandler', {\n module: 'MaskedDateTime'\n });\n }\n };\n DatePicker.prototype.inputBlurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n this.strictModeUpdate();\n if (this.inputElement.value === '' && isNullOrUndefined(this.value)) {\n this.invalidValueString = null;\n this.updateInputValue('');\n }\n this.isBlur = true;\n this.updateInput(false, true);\n this.isBlur = false;\n this.popupUpdate();\n this.changeTrigger(e);\n if (this.enableMask && this.maskedDateValue && this.placeholder && this.floatLabelType !== 'Always') {\n if (this.inputElement.value === this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue('');\n }\n }\n this.errorClass();\n if (this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n if (this.getModuleName() === 'datepicker') {\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n if (this.isCalendar()) {\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n this.calendarKeyboardModules = new KeyboardEvents(this.calendarElement.children[1].firstElementChild, {\n eventName: 'keydown',\n keyAction: this.calendarKeyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n }\n this.isPopupClicked = false;\n };\n DatePicker.prototype.documentHandler = function (e) {\n if ((!isNullOrUndefined(this.popupObj) && !isNullOrUndefined(this.inputWrapper) && (this.inputWrapper.container.contains(e.target) && e.type !== 'mousedown' ||\n (this.popupObj.element && this.popupObj.element.contains(e.target)))) && e.type !== 'touchstart') {\n e.preventDefault();\n }\n var target = e.target;\n if (!(closest(target, '.e-datepicker.e-popup-wrapper')) && !isNullOrUndefined(this.inputWrapper)\n && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)\n && (!target.classList.contains('e-day'))) {\n this.hide(e);\n this.focusOut();\n }\n else if (closest(target, '.e-datepicker.e-popup-wrapper')) {\n // Fix for close the popup when select the previously selected value.\n if (target.classList.contains('e-day')\n && !isNullOrUndefined(e.target.parentElement)\n && e.target.parentElement.classList.contains('e-selected')\n && closest(target, '.e-content')\n && closest(target, '.e-content').classList.contains('e-' + this.depth.toLowerCase())) {\n this.hide(e);\n }\n else if (closest(target, '.e-footer-container')\n && target.classList.contains('e-today')\n && target.classList.contains('e-btn')\n && (+new Date(+this.value) === +_super.prototype.generateTodayVal.call(this, this.value))) {\n this.hide(e);\n }\n }\n };\n DatePicker.prototype.inputKeyActionHandle = function (e) {\n var clickedView = this.currentView();\n switch (e.action) {\n case 'altUpArrow':\n this.isAltKeyPressed = false;\n this.hide(e);\n this.inputElement.focus();\n break;\n case 'altDownArrow':\n this.isAltKeyPressed = true;\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger(e);\n if (this.getModuleName() === 'datepicker') {\n this.show(null, e);\n }\n break;\n case 'escape':\n this.hide(e);\n break;\n case 'enter':\n this.strictModeUpdate();\n this.updateInput();\n this.popupUpdate();\n this.changeTrigger(e);\n this.errorClass();\n if (!this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n if (this.isCalendar()) {\n e.preventDefault();\n e.stopPropagation();\n }\n break;\n case 'tab':\n case 'shiftTab':\n {\n var start = this.inputElement.selectionStart;\n var end = this.inputElement.selectionEnd;\n if (this.enableMask && !this.popupObj && !this.readonly) {\n var length_1 = this.inputElement.value.length;\n if ((start === 0 && end === length_1) || (end !== length_1 && e.action === 'tab') || (start !== 0 && e.action === 'shiftTab')) {\n e.preventDefault();\n }\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: e\n });\n start = this.inputElement.selectionStart;\n end = this.inputElement.selectionEnd;\n }\n this.strictModeUpdate();\n this.updateInput();\n this.popupUpdate();\n this.changeTrigger(e);\n this.errorClass();\n if (this.enableMask) {\n this.inputElement.selectionStart = start;\n this.inputElement.selectionEnd = end;\n }\n this.hide(e);\n break;\n }\n default:\n this.defaultAction(e);\n // Fix for close the popup when select the previously selected value.\n if (e.action === 'select' && clickedView === this.depth) {\n this.hide(e);\n }\n }\n };\n DatePicker.prototype.defaultAction = function (e) {\n this.previousDate = ((!isNullOrUndefined(this.value) && new Date(+this.value)) || null);\n if (this.isCalendar()) {\n _super.prototype.keyActionHandle.call(this, e);\n if (this.isCalendar()) {\n attributes(this.inputElement, {\n 'aria-activedescendant': '' + this.setActiveDescendant()\n });\n }\n }\n };\n DatePicker.prototype.popupUpdate = function () {\n if ((isNullOrUndefined(this.value)) && (!isNullOrUndefined(this.previousDate)) ||\n (+this.value !== +this.previousDate)) {\n if (this.popupObj) {\n if (this.popupObj.element.querySelectorAll('.' + SELECTED).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + SELECTED), [SELECTED]);\n }\n }\n if (!isNullOrUndefined(this.value)) {\n if ((+this.value >= +this.min) && (+this.value <= +this.max)) {\n var targetdate = new Date(this.checkValue(this.value));\n _super.prototype.navigateTo.call(this, 'Month', targetdate);\n }\n }\n }\n };\n DatePicker.prototype.strictModeUpdate = function () {\n var format;\n var pattern = /^y/;\n var charPattern = /[^a-zA-Z]/;\n var formatOptions;\n if (this.getModuleName() === 'datetimepicker') {\n format = !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat;\n }\n else if (!pattern.test(this.formatString) || charPattern.test(this.formatString)) {\n format = isNullOrUndefined(this.formatString) ? this.formatString : this.formatString.replace('dd', 'd');\n }\n if (!isNullOrUndefined(format)) {\n var len = format.split('M').length - 1;\n if (len < 3) {\n format = format.replace('MM', 'M');\n }\n }\n else {\n format = this.formatString;\n }\n var dateOptions;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n dateOptions = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n dateOptions = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n dateOptions = formatOptions;\n }\n var date;\n if (typeof this.inputElement.value === 'string') {\n this.inputElement.value = this.inputElement.value.trim();\n }\n if ((this.getModuleName() === 'datetimepicker')) {\n if (this.checkDateValue(this.globalize.parseDate(this.inputElement.value, dateOptions))) {\n date = this.globalize.parseDate(this.inputElement.value.toLocaleUpperCase(), dateOptions);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n date = this.globalize.parseDate(this.inputElement.value, formatOptions);\n }\n }\n else {\n date = this.globalize.parseDate(this.inputElement.value, dateOptions);\n date = (!isNullOrUndefined(date) && isNaN(+date)) ? null : date;\n if (!isNullOrUndefined(this.formatString) && this.inputElement.value !== '' && this.strictMode) {\n if ((this.isPopupClicked || (!this.isPopupClicked && this.inputElement.value === this.previousElementValue))\n && this.formatString.indexOf('y') === -1) {\n date.setFullYear(this.value.getFullYear());\n }\n }\n }\n // EJ2-35061 - To prevent change event from triggering twice when using strictmode and format property\n if ((this.getModuleName() === 'datepicker') && (this.value && !isNaN(+this.value)) && date) {\n date.setHours(this.value.getHours(), this.value.getMinutes(), this.value.getSeconds(), this.value.getMilliseconds());\n }\n if (this.strictMode && date) {\n this.updateInputValue(this.globalize.formatDate(date, dateOptions));\n if (this.inputElement.value !== this.previousElementValue) {\n this.setProperties({ value: date }, true);\n }\n }\n else if (!this.strictMode) {\n if (this.inputElement.value !== this.previousElementValue) {\n this.setProperties({ value: date }, true);\n }\n }\n if (this.strictMode && !date && this.inputElement.value === (this.enableMask ? this.maskedDateValue : '')) {\n this.setProperties({ value: null }, true);\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: null }, true);\n }\n if (isNullOrUndefined(this.value)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n };\n DatePicker.prototype.createCalendar = function () {\n var _this = this;\n this.popupWrapper = this.createElement('div', { className: '' + ROOT + ' ' + POPUPWRAPPER });\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.className += ' ' + this.cssClass;\n }\n if (Browser.isDevice) {\n this.modelHeader();\n this.modal = this.createElement('div');\n this.modal.className = '' + ROOT + ' e-date-modal';\n document.body.className += ' ' + OVERFLOW;\n this.modal.style.display = 'block';\n document.body.appendChild(this.modal);\n }\n //this.calendarElement represent the Calendar object from the Calendar class.\n this.calendarElement.querySelector('table tbody').className = '';\n this.popupObj = new Popup(this.popupWrapper, {\n content: this.calendarElement,\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : (this.enableRtl ? { X: 'right', Y: 'bottom' } : { X: 'left', Y: 'bottom' }),\n offsetY: OFFSETVALUE,\n targetType: 'container',\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n open: function () {\n if (Browser.isDevice && _this.fullScreenMode) {\n _this.iconRight = parseInt(window.getComputedStyle(_this.calendarElement.querySelector('.e-header.e-month .e-prev')).marginRight, 10) > 16 ? true : false;\n _this.touchModule = new Touch(_this.calendarElement.querySelector(\".e-content.e-month\"), {\n swipe: _this.CalendarSwipeHandler.bind(_this)\n });\n EventHandler.add(_this.calendarElement.querySelector(\".e-content.e-month\"), \"touchstart\", _this.TouchStartHandler, _this);\n }\n if (_this.getModuleName() !== 'datetimepicker') {\n if (document.activeElement !== _this.inputElement) {\n _this.defaultKeyConfigs = extend(_this.defaultKeyConfigs, _this.keyConfigs);\n _this.calendarElement.children[1].firstElementChild.focus();\n _this.calendarKeyboardModules = new KeyboardEvents(_this.calendarElement.children[1].firstElementChild, {\n eventName: 'keydown',\n keyAction: _this.calendarKeyActionHandle.bind(_this),\n keyConfigs: _this.defaultKeyConfigs\n });\n _this.calendarKeyboardModules = new KeyboardEvents(_this.inputWrapper.container.children[_this.index], {\n eventName: 'keydown',\n keyAction: _this.calendarKeyActionHandle.bind(_this),\n keyConfigs: _this.defaultKeyConfigs\n });\n }\n }\n }, close: function () {\n if (_this.isDateIconClicked) {\n _this.inputWrapper.container.children[_this.index].focus();\n }\n if (_this.value) {\n _this.disabledDates();\n }\n if (_this.popupObj) {\n _this.popupObj.destroy();\n }\n _this.resetCalendar();\n detach(_this.popupWrapper);\n _this.popupObj = _this.popupWrapper = null;\n _this.preventArgs = null;\n _this.calendarKeyboardModules = null;\n _this.setAriaAttributes();\n }, targetExitViewport: function () {\n if (!Browser.isDevice) {\n _this.hide();\n }\n }\n });\n this.popupObj.element.className += ' ' + this.cssClass;\n this.setAriaAttributes();\n };\n DatePicker.prototype.CalendarSwipeHandler = function (e) {\n var direction = 0;\n if (this.iconRight) {\n switch (e.swipeDirection) {\n case \"Left\":\n direction = 1;\n break;\n case \"Right\":\n direction = -1;\n break;\n default:\n break;\n }\n }\n else {\n switch (e.swipeDirection) {\n case \"Up\":\n direction = 1;\n break;\n case \"Down\":\n direction = -1;\n break;\n default:\n break;\n }\n }\n if (this.touchStart) {\n if (direction === 1) {\n this.navigateNext(e);\n }\n else if (direction === -1) {\n this.navigatePrevious(e);\n }\n this.touchStart = false;\n }\n };\n DatePicker.prototype.TouchStartHandler = function (e) {\n this.touchStart = true;\n };\n DatePicker.prototype.setAriaDisabled = function () {\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n this.inputElement.tabIndex = -1;\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n };\n DatePicker.prototype.modelHeader = function () {\n var dateOptions;\n var modelHeader = this.createElement('div', { className: 'e-model-header' });\n var yearHeading = this.createElement('h1', { className: 'e-model-year' });\n var h2 = this.createElement('div');\n var daySpan = this.createElement('span', { className: 'e-model-day' });\n var monthSpan = this.createElement('span', { className: 'e-model-month' });\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: 'y', skeleton: 'dateTime' };\n }\n else {\n dateOptions = { format: 'y', skeleton: 'dateTime', calendar: 'islamic' };\n }\n yearHeading.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions);\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: 'E', skeleton: 'dateTime' };\n }\n else {\n dateOptions = { format: 'E', skeleton: 'dateTime', calendar: 'islamic' };\n }\n daySpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions) + ', ';\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: 'MMM d', skeleton: 'dateTime' };\n }\n else {\n dateOptions = { format: 'MMM d', skeleton: 'dateTime', calendar: 'islamic' };\n }\n monthSpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions);\n if (this.fullScreenMode) {\n var modelCloseIcon = this.createElement(\"span\", { className: \"e-popup-close\" });\n EventHandler.add(modelCloseIcon, 'mousedown touchstart', this.modelCloseHandler, this);\n var modelTodayButton = this.calendarElement.querySelector(\"button.e-today\");\n h2.classList.add(\"e-day-wrapper\");\n modelTodayButton.classList.add(\"e-outline\");\n modelHeader.appendChild(modelCloseIcon);\n modelHeader.appendChild(modelTodayButton);\n }\n if (!this.fullScreenMode)\n modelHeader.appendChild(yearHeading);\n h2.appendChild(daySpan);\n h2.appendChild(monthSpan);\n modelHeader.appendChild(h2);\n this.calendarElement.insertBefore(modelHeader, this.calendarElement.firstElementChild);\n };\n DatePicker.prototype.modelCloseHandler = function (e) {\n this.hide();\n };\n DatePicker.prototype.changeTrigger = function (event) {\n if (this.inputElement.value !== this.previousElementValue) {\n if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n if (this.isDynamicValueChanged && this.isCalendar()) {\n this.popupUpdate();\n }\n this.changedArgs.value = this.value;\n this.changedArgs.event = event || null;\n this.changedArgs.element = this.element;\n this.changedArgs.isInteracted = !isNullOrUndefined(event);\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', this.changedArgs);\n }\n this.previousElementValue = this.inputElement.value;\n this.previousDate = !isNaN(+new Date(this.checkValue(this.value))) ? new Date(this.checkValue(this.value)) : null;\n this.isInteracted = true;\n }\n }\n this.isKeyAction = false;\n };\n DatePicker.prototype.navigatedEvent = function () {\n this.trigger('navigated', this.navigatedArgs);\n };\n DatePicker.prototype.keyupHandler = function (e) {\n this.isKeyAction = (this.inputElement.value !== this.previousElementValue) ? true : false;\n };\n DatePicker.prototype.changeEvent = function (event) {\n if (!this.isIconClicked && !(this.isBlur || this.isKeyAction)) {\n this.selectCalendar(event);\n }\n if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n this.changedArgs.event = event ? event : null;\n this.changedArgs.element = this.element;\n this.changedArgs.isInteracted = this.isInteracted;\n if (!this.isDynamicValueChanged) {\n this.trigger('change', this.changedArgs);\n }\n this.previousDate = this.value && new Date(+this.value);\n if (!this.isDynamicValueChanged) {\n this.hide(event);\n }\n this.previousElementValue = this.inputElement.value;\n this.errorClass();\n }\n else if (event) {\n this.hide(event);\n }\n this.isKeyAction = false;\n };\n DatePicker.prototype.requiredModules = function () {\n var modules = [];\n if (this) {\n modules.push({ args: [this], member: 'islamic' });\n }\n if (this.enableMask) {\n modules.push({ args: [this], member: 'MaskedDateTime' });\n }\n return modules;\n };\n DatePicker.prototype.selectCalendar = function (e) {\n var date;\n var tempFormat;\n var formatOptions;\n if (this.getModuleName() === 'datetimepicker') {\n tempFormat = !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat;\n }\n else {\n tempFormat = this.formatString;\n }\n if (this.value) {\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: tempFormat, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: tempFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n date = this.globalize.formatDate(this.changedArgs.value, formatOptions);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n date = this.globalize.formatDate(this.changedArgs.value, formatOptions);\n }\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n }\n if (!isNullOrUndefined(date)) {\n this.updateInputValue(date);\n if (this.enableMask) {\n this.notify('setMaskSelection', {\n module: 'MaskedDateTime'\n });\n }\n }\n };\n DatePicker.prototype.isCalendar = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + POPUPWRAPPER)) {\n return true;\n }\n return false;\n };\n DatePicker.prototype.setWidth = function (width) {\n if (typeof width === 'number') {\n this.inputWrapper.container.style.width = formatUnit(this.width);\n }\n else if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (width.match(/px|%|em/)) ? (this.width) : (formatUnit(this.width));\n }\n else {\n this.inputWrapper.container.style.width = '100%';\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Shows the Calendar.\n *\n * @returns {void}\n\n */\n DatePicker.prototype.show = function (type, e) {\n var _this = this;\n if ((this.enabled && this.readonly) || !this.enabled || this.popupObj) {\n return;\n }\n else {\n var prevent_1 = true;\n var outOfRange = void 0;\n if (!isNullOrUndefined(this.value) && !(+this.value >= +new Date(this.checkValue(this.min))\n && +this.value <= +new Date(this.checkValue(this.max)))) {\n outOfRange = new Date(this.checkValue(this.value));\n this.setProperties({ 'value': null }, true);\n }\n else {\n outOfRange = this.value || null;\n }\n if (!this.isCalendar()) {\n _super.prototype.render.call(this);\n this.setProperties({ 'value': outOfRange || null }, true);\n this.previousDate = outOfRange;\n this.createCalendar();\n }\n if (Browser.isDevice) {\n this.mobilePopupWrapper = this.createElement('div', { className: 'e-datepick-mob-popup-wrap' });\n document.body.appendChild(this.mobilePopupWrapper);\n }\n this.preventArgs = {\n preventDefault: function () {\n prevent_1 = false;\n },\n popup: this.popupObj,\n event: e || null,\n cancel: false,\n appendTo: Browser.isDevice ? this.mobilePopupWrapper : document.body\n };\n var eventArgs = this.preventArgs;\n this.trigger('open', eventArgs, function (eventArgs) {\n _this.preventArgs = eventArgs;\n if (prevent_1 && !_this.preventArgs.cancel) {\n addClass(_this.inputWrapper.buttons, ACTIVE);\n _this.preventArgs.appendTo.appendChild(_this.popupWrapper);\n _this.popupObj.refreshPosition(_this.inputElement);\n var openAnimation = {\n name: 'FadeIn',\n duration: Browser.isDevice ? 0 : OPENDURATION\n };\n if (_this.zIndex === 1000) {\n _this.popupObj.show(new Animation(openAnimation), _this.element);\n }\n else {\n _this.popupObj.show(new Animation(openAnimation), null);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _super.prototype.setOverlayIndex.call(_this, _this.mobilePopupWrapper, _this.popupObj.element, _this.modal, Browser.isDevice);\n _this.setAriaAttributes();\n }\n else {\n _this.popupObj.destroy();\n _this.popupWrapper = _this.popupObj = null;\n }\n if (!isNullOrUndefined(_this.inputElement) && _this.inputElement.value === '') {\n if (!isNullOrUndefined(_this.tableBodyElement) && _this.tableBodyElement.querySelectorAll('td.e-selected').length > 0) {\n addClass([_this.tableBodyElement.querySelector('td.e-selected')], FOCUSEDDATE);\n removeClass(_this.tableBodyElement.querySelectorAll('td.e-selected'), SELECTED);\n }\n }\n EventHandler.add(document, 'mousedown touchstart', _this.documentHandler, _this);\n });\n }\n };\n /**\n * Hide the Calendar.\n *\n * @returns {void}\n\n */\n DatePicker.prototype.hide = function (event) {\n var _this = this;\n if (!isNullOrUndefined(this.popupWrapper)) {\n var prevent_2 = true;\n this.preventArgs = {\n preventDefault: function () {\n prevent_2 = false;\n },\n popup: this.popupObj,\n event: event || null,\n cancel: false\n };\n removeClass(this.inputWrapper.buttons, ACTIVE);\n removeClass([document.body], OVERFLOW);\n var eventArgs = this.preventArgs;\n if (this.isCalendar()) {\n this.trigger('close', eventArgs, function (eventArgs) {\n _this.closeEventCallback(prevent_2, eventArgs);\n });\n }\n else {\n this.closeEventCallback(prevent_2, eventArgs);\n }\n }\n else {\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n DatePicker.prototype.closeEventCallback = function (prevent, eventArgs) {\n this.preventArgs = eventArgs;\n if (this.isCalendar() && (prevent && !this.preventArgs.cancel)) {\n this.popupObj.hide();\n this.isAltKeyPressed = false;\n this.keyboardModule.destroy();\n removeClass(this.inputWrapper.buttons, ACTIVE);\n }\n this.setAriaAttributes();\n if (Browser.isDevice && this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n if (Browser.isDevice) {\n if (!isNullOrUndefined(this.mobilePopupWrapper) && (prevent && (isNullOrUndefined(this.preventArgs) || !this.preventArgs.cancel))) {\n this.mobilePopupWrapper.remove();\n this.mobilePopupWrapper = null;\n }\n }\n EventHandler.remove(document, 'mousedown touchstart', this.documentHandler);\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n };\n /* eslint-disable jsdoc/require-param */\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DatePicker.prototype.focusIn = function (triggerEvent) {\n if (document.activeElement !== this.inputElement && this.enabled) {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n };\n /* eslint-enable jsdoc/require-param */\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n DatePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.inputElement.blur();\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the current view of the DatePicker.\n *\n * @returns {string}\n\n */\n DatePicker.prototype.currentView = function () {\n var currentView;\n if (this.calendarElement) {\n // calls the Calendar currentView public method\n currentView = _super.prototype.currentView.call(this);\n }\n return currentView;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Navigates to specified month or year or decade view of the DatePicker.\n *\n * @param {string} view - Specifies the view of the calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns {void}\n\n */\n DatePicker.prototype.navigateTo = function (view, date) {\n if (this.calendarElement) {\n // calls the Calendar navigateTo public method\n _super.prototype.navigateTo.call(this, view, date);\n }\n };\n /**\n * To destroy the widget.\n *\n * @returns {void}\n */\n DatePicker.prototype.destroy = function () {\n this.unBindEvents();\n _super.prototype.destroy.call(this);\n if (!isNullOrUndefined(this.keyboardModules)) {\n this.keyboardModules.destroy();\n }\n if (this.popupObj && this.popupObj.element.classList.contains(POPUP)) {\n _super.prototype.destroy.call(this);\n }\n var ariaAttrs = {\n 'aria-atomic': 'true', 'aria-disabled': 'true',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttrs, this.inputElement);\n if (!isNullOrUndefined(this.inputElementCopy.getAttribute('tabindex'))) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.removeAttribute('tabindex');\n }\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n this.ensureInputAttribute();\n }\n if (this.isCalendar()) {\n if (this.popupWrapper) {\n detach(this.popupWrapper);\n }\n this.popupObj = this.popupWrapper = null;\n this.keyboardModule.destroy();\n }\n if (this.ngTag === null) {\n if (this.inputElement) {\n if (!isNullOrUndefined(this.inputWrapper)) {\n this.inputWrapper.container.insertAdjacentElement('afterend', this.inputElement);\n }\n removeClass([this.inputElement], [INPUTROOT]);\n }\n removeClass([this.element], [ROOT]);\n if (!isNullOrUndefined(this.inputWrapper)) {\n detach(this.inputWrapper.container);\n }\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.resetFormHandler);\n }\n this.inputWrapper = null;\n this.keyboardModules = null;\n };\n DatePicker.prototype.ensureInputAttribute = function () {\n var prop = [];\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n prop[i] = this.inputElement.attributes[i].name;\n }\n for (var i = 0; i < prop.length; i++) {\n if (isNullOrUndefined(this.inputElementCopy.getAttribute(prop[i]))) {\n if (prop[i].toLowerCase() === 'value') {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop[i]);\n }\n else {\n if (prop[i].toLowerCase() === 'value') {\n this.inputElement.value = this.inputElementCopy.getAttribute(prop[i]);\n }\n this.inputElement.setAttribute(prop[i], this.inputElementCopy.getAttribute(prop[i]));\n }\n }\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n DatePicker.prototype.preRender = function () {\n this.inputElementCopy = this.element.cloneNode(true);\n removeClass([this.inputElementCopy], [ROOT, CONTROL, LIBRARY]);\n this.inputElement = this.element;\n this.formElement = closest(this.inputElement, 'form');\n this.index = this.showClearButton ? 2 : 1;\n this.ngTag = null;\n if (this.element.tagName === 'EJS-DATEPICKER' || this.element.tagName === 'EJS-DATETIMEPICKER') {\n this.ngTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n if (this.element.getAttribute('id')) {\n if (this.ngTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n if (this.getModuleName() === 'datetimepicker') {\n this.element.id = getUniqueID('ej2-datetimepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n else {\n this.element.id = getUniqueID('ej2-datepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n }\n if (this.ngTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.updateHtmlAttributeToElement();\n this.defaultKeyConfigs = this.getDefaultKeyConfig();\n this.checkHtmlAttributes(false);\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n _super.prototype.preRender.call(this);\n };\n DatePicker.prototype.getDefaultKeyConfig = function () {\n this.defaultKeyConfigs = {\n altUpArrow: 'alt+uparrow',\n altDownArrow: 'alt+downarrow',\n escape: 'escape',\n enter: 'enter',\n controlUp: 'ctrl+38',\n controlDown: 'ctrl+40',\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n select: 'enter',\n home: 'home',\n end: 'end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n shiftPageUp: 'shift+pageup',\n shiftPageDown: 'shift+pagedown',\n controlHome: 'ctrl+home',\n controlEnd: 'ctrl+end',\n shiftTab: 'shift+tab',\n tab: 'tab'\n };\n return this.defaultKeyConfigs;\n };\n DatePicker.prototype.validationAttribute = function (target, inputElement) {\n var nameAttribute = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n inputElement.setAttribute('name', nameAttribute);\n target.removeAttribute('name');\n var attribute = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attribute.length; i++) {\n if (isNullOrUndefined(target.getAttribute(attribute[i]))) {\n continue;\n }\n var attr = target.getAttribute(attribute[i]);\n inputElement.setAttribute(attribute[i], attr);\n target.removeAttribute(attribute[i]);\n }\n };\n DatePicker.prototype.checkFormat = function () {\n var culture = new Internationalization(this.locale);\n if (this.format) {\n if (typeof this.format === 'string') {\n this.formatString = this.format;\n }\n else if (this.format.skeleton !== '' && !isNullOrUndefined(this.format.skeleton)) {\n var skeletonString = this.format.skeleton;\n if (this.getModuleName() === 'datetimepicker') {\n this.formatString = culture.getDatePattern({ skeleton: skeletonString, type: 'dateTime' });\n }\n else {\n this.formatString = culture.getDatePattern({ skeleton: skeletonString, type: 'date' });\n }\n }\n else {\n if (this.getModuleName() === 'datetimepicker') {\n this.formatString = this.dateTimeFormat;\n }\n else {\n this.formatString = null;\n }\n }\n }\n else {\n this.formatString = null;\n }\n };\n DatePicker.prototype.checkHtmlAttributes = function (dynamic) {\n this.globalize = new Internationalization(this.locale);\n this.checkFormat();\n this.checkView();\n var attributes = dynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['value', 'min', 'max', 'disabled', 'readonly', 'style', 'name', 'placeholder', 'type'];\n var options;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n options = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n options = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n options = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n options = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n }\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['enabled'] === undefined)) || dynamic)) {\n var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '' ||\n this.inputElement.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !dynamic);\n }\n break;\n case 'readonly':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['readonly'] === undefined)) || dynamic)) {\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !dynamic);\n }\n break;\n case 'placeholder':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['placeholder'] === undefined)) || dynamic)) {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !dynamic);\n }\n break;\n case 'style':\n this.inputElement.setAttribute('style', '' + this.inputElement.getAttribute(prop));\n break;\n case 'name':\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute(prop));\n break;\n case 'value':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['value'] === undefined)) || dynamic)) {\n var value = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(value, options), {}), !dynamic);\n }\n break;\n case 'min':\n if ((+this.min === +new Date(1900, 0, 1)) || dynamic) {\n var min = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(min), {}), !dynamic);\n }\n break;\n case 'max':\n if ((+this.max === +new Date(2099, 11, 31)) || dynamic) {\n var max = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(max), {}), !dynamic);\n }\n break;\n case 'type':\n if (this.inputElement.getAttribute(prop) !== 'text') {\n this.inputElement.setAttribute('type', 'text');\n }\n break;\n }\n }\n }\n };\n /**\n * To get component name.\n *\n * @returns {string} Returns the component name.\n * @private\n */\n DatePicker.prototype.getModuleName = function () {\n return 'datepicker';\n };\n DatePicker.prototype.disabledDates = function (isDynamic, isBlur) {\n if (isDynamic === void 0) { isDynamic = false; }\n if (isBlur === void 0) { isBlur = false; }\n var formatOptions;\n var globalize;\n var valueCopy = this.checkDateValue(this.value) ? new Date(+this.value) : new Date(this.checkValue(this.value));\n var previousValCopy = this.previousDate;\n //calls the Calendar render method to check the disabled dates through renderDayCell event and update the input value accordingly.\n this.minMaxUpdates();\n if (!isDynamic || (isDynamic && !isNullOrUndefined(this.renderDayCell))) {\n _super.prototype.render.call(this);\n }\n this.previousDate = previousValCopy;\n var date = valueCopy && +(valueCopy);\n var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + date);\n if (!this.strictMode) {\n if (typeof this.value === 'string' || ((typeof this.value === 'object') && (+this.value) !== (+valueCopy))) {\n this.setProperties({ value: valueCopy }, true);\n }\n }\n if (!isNullOrUndefined(this.calendarElement) && !isNullOrUndefined(this.calendarElement.querySelectorAll(dateIdString)[0])) {\n if (this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled')) {\n if (!this.strictMode) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n }\n }\n var inputVal;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n globalize = this.globalize.formatDate(valueCopy, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n globalize = this.globalize.formatDate(valueCopy, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n });\n }\n inputVal = globalize;\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n inputVal = this.globalize.formatDate(valueCopy, formatOptions);\n }\n if (!this.popupObj) {\n this.updateInputValue(inputVal);\n if (this.enableMask) {\n this.updateInputValue(this.maskedDateValue);\n this.notify('createMask', {\n module: 'MaskedDateTime', isBlur: isBlur\n });\n }\n }\n };\n DatePicker.prototype.setAriaAttributes = function () {\n if (this.isCalendar()) {\n Input.addAttributes({ 'aria-expanded': 'true' }, this.inputElement);\n attributes(this.inputElement, { 'aria-owns': this.inputElement.id + '_options' });\n if (this.value) {\n attributes(this.inputElement, { 'aria-activedescendant': '' + this.setActiveDescendant() });\n }\n }\n else {\n Input.addAttributes({ 'aria-expanded': 'false' }, this.inputElement);\n this.inputElement.removeAttribute('aria-owns');\n this.inputElement.removeAttribute('aria-activedescendant');\n }\n };\n DatePicker.prototype.errorClass = function () {\n var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + (+this.value));\n var isDisabledDate = this.calendarElement &&\n this.calendarElement.querySelectorAll(dateIdString)[0] &&\n this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled');\n if ((!isNullOrUndefined(this.value) && !isNullOrUndefined(this.min) &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n !isNullOrUndefined(this.max) && !(new Date(this.value).setMilliseconds(0) >= new Date(this.min).setMilliseconds(0)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n && new Date(this.value).setMilliseconds(0) <= new Date(this.max).setMilliseconds(0)))\n || (!this.strictMode && this.inputElement.value !== '' && this.inputElement.value !== this.maskedDateValue && isNullOrUndefined(this.value) || isDisabledDate)) {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n else if (!isNullOrUndefined(this.inputWrapper)) {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {DatePickerModel} newProp - Returns the dynamic property value of the component.\n * @param {DatePickerModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n DatePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n this.isDynamicValueChanged = true;\n this.isInteracted = false;\n this.invalidValueString = null;\n this.checkInvalidValue(newProp.value);\n newProp.value = this.value;\n this.previousElementValue = this.inputElement.value;\n if (isNullOrUndefined(this.value)) {\n if (this.enableMask) {\n this.updateInputValue(this.maskedDateValue);\n }\n else {\n this.updateInputValue('');\n }\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n this.updateInput(true);\n if (+this.previousDate !== +this.value) {\n this.changeTrigger(null);\n }\n this.isInteracted = true;\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'format':\n this.checkFormat();\n this.bindInputEvent();\n this.updateInput();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n if (!this.value) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n break;\n case 'allowEdit':\n this.setAllowEdit();\n break;\n case 'placeholder':\n Input.setPlaceholder(this.placeholder, this.inputElement);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.inputElement);\n this.setAriaDisabled();\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToElement();\n this.updateHtmlAttributeToWrapper();\n this.checkHtmlAttributes(true);\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n this.updateInput();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'start':\n case 'depth':\n this.checkView();\n if (this.calendarElement) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n }\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n this.index = this.showClearButton ? 2 : 1;\n break;\n case 'strictMode':\n this.invalidValueString = null;\n this.updateInput();\n break;\n case 'width':\n this.setWidth(newProp.width);\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'enableMask':\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n this.updateInputValue(this.maskedDateValue);\n this.bindInputEvent();\n }\n else {\n if (this.inputElement.value === this.maskedDateValue) {\n this.updateInputValue('');\n }\n }\n break;\n default:\n if (this.calendarElement && this.isCalendar()) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n }\n break;\n }\n if (!this.isDynamicValueChanged) {\n this.hide(null);\n }\n this.isDynamicValueChanged = false;\n }\n };\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"fullScreenMode\", void 0);\n __decorate([\n Property({})\n ], DatePicker.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"values\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(1000)\n ], DatePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Never')\n ], DatePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"openOnFocus\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"enableMask\", void 0);\n __decorate([\n Property({ day: 'day', month: 'month', year: 'year', hour: 'hour', minute: 'minute', second: 'second', dayOfTheWeek: 'day of the week' })\n ], DatePicker.prototype, \"maskPlaceholder\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"cleared\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"destroyed\", void 0);\n DatePicker = __decorate([\n NotifyPropertyChanges\n ], DatePicker);\n return DatePicker;\n}(Calendar));\nexport { DatePicker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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})();\nimport { merge, extend, isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { DataUtil } from './util';\nimport { Query, Predicate } from './query';\nvar consts = { GroupGuid: '{271bbba0-1ee7}' };\n/**\n * Adaptors are specific data source type aware interfaces that are used by DataManager to communicate with DataSource.\n * This is the base adaptor class that other adaptors can extend.\n *\n * @hidden\n */\nvar Adaptor = /** @class */ (function () {\n /**\n * Constructor for Adaptor class\n *\n * @param {DataOptions} ds?\n * @param ds\n * @hidden\n * @returns aggregates\n */\n function Adaptor(ds) {\n // common options for all the adaptors\n this.options = {\n from: 'table',\n requestType: 'json',\n sortBy: 'sorted',\n select: 'select',\n skip: 'skip',\n group: 'group',\n take: 'take',\n search: 'search',\n count: 'requiresCounts',\n where: 'where',\n aggregates: 'aggregates',\n expand: 'expand'\n };\n /**\n * Specifies the type of adaptor.\n *\n * @default Adaptor\n */\n this.type = Adaptor;\n this.dataSource = ds;\n this.pvt = {};\n }\n /**\n * Returns the data from the query processing.\n *\n * @param {Object} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param ds\n * @param query\n * @param xhr\n * @returns Object\n */\n Adaptor.prototype.processResponse = function (data, ds, query, xhr) {\n return data;\n };\n return Adaptor;\n}());\nexport { Adaptor };\n/**\n * JsonAdaptor is used to process JSON data. It contains methods to process the given JSON data based on the queries.\n *\n * @hidden\n */\nvar JsonAdaptor = /** @class */ (function (_super) {\n __extends(JsonAdaptor, _super);\n function JsonAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Process the JSON data based on the provided queries.\n *\n * @param {DataManager} dataManager\n * @param {Query} query\n * @returns Object\n */\n JsonAdaptor.prototype.processQuery = function (dataManager, query) {\n var result = dataManager.dataSource.json.slice(0);\n var count = result.length;\n var countFlg = true;\n var ret;\n var key;\n var lazyLoad = {};\n var keyCount = 0;\n var group = [];\n var page;\n for (var i = 0; i < query.lazyLoad.length; i++) {\n keyCount++;\n lazyLoad[query.lazyLoad[i].key] = query.lazyLoad[i].value;\n }\n var agg = {};\n for (var i = 0; i < query.queries.length; i++) {\n key = query.queries[i];\n if ((key.fn === 'onPage' || key.fn === 'onGroup') && query.lazyLoad.length) {\n if (key.fn === 'onGroup') {\n group.push(key.e);\n }\n if (key.fn === 'onPage') {\n page = key.e;\n }\n continue;\n }\n ret = this[key.fn].call(this, result, key.e, query);\n if (key.fn === 'onAggregates') {\n agg[key.e.field + ' - ' + key.e.type] = ret;\n }\n else {\n result = ret !== undefined ? ret : result;\n }\n if (key.fn === 'onPage' || key.fn === 'onSkip' || key.fn === 'onTake' || key.fn === 'onRange') {\n countFlg = false;\n }\n if (countFlg) {\n count = result.length;\n }\n }\n if (keyCount) {\n var args = {\n query: query, lazyLoad: lazyLoad, result: result, group: group, page: page\n };\n var lazyLoadData = this.lazyLoadGroup(args);\n result = lazyLoadData.result;\n count = lazyLoadData.count;\n }\n if (query.isCountRequired) {\n result = {\n result: result,\n count: count,\n aggregates: agg\n };\n }\n return result;\n };\n /**\n * Perform lazy load grouping in JSON array based on the given query and lazy load details.\n *\n * @param {LazyLoadGroupArgs} args\n */\n JsonAdaptor.prototype.lazyLoadGroup = function (args) {\n var count = 0;\n var agg = this.getAggregate(args.query);\n var result = args.result;\n if (!isNullOrUndefined(args.lazyLoad.onDemandGroupInfo)) {\n var req = args.lazyLoad.onDemandGroupInfo;\n for (var i = req.where.length - 1; i >= 0; i--) {\n result = this.onWhere(result, req.where[i]);\n }\n if (args.group.length !== req.level) {\n var field = args.group[req.level].fieldName;\n result = DataUtil.group(result, field, agg, null, null, args.group[0].comparer, true);\n }\n count = result.length;\n var data = result;\n result = result.slice(req.skip);\n result = result.slice(0, req.take);\n if (args.group.length !== req.level) {\n this.formGroupResult(result, data);\n }\n }\n else {\n var field = args.group[0].fieldName;\n result = DataUtil.group(result, field, agg, null, null, args.group[0].comparer, true);\n count = result.length;\n var data = result;\n if (args.page) {\n result = this.onPage(result, args.page, args.query);\n }\n this.formGroupResult(result, data);\n }\n return { result: result, count: count };\n };\n JsonAdaptor.prototype.formGroupResult = function (result, data) {\n if (result.length && data.length) {\n var uid = 'GroupGuid';\n var childLevel = 'childLevels';\n var level = 'level';\n var records = 'records';\n result[uid] = data[uid];\n result[childLevel] = data[childLevel];\n result[level] = data[level];\n result[records] = data[records];\n }\n return result;\n };\n /**\n * Separate the aggregate query from the given queries\n *\n * @param {Query} query\n */\n JsonAdaptor.prototype.getAggregate = function (query) {\n var aggQuery = Query.filterQueries(query.queries, 'onAggregates');\n var agg = [];\n if (aggQuery.length) {\n var tmp = void 0;\n for (var i = 0; i < aggQuery.length; i++) {\n tmp = aggQuery[i].e;\n agg.push({ type: tmp.type, field: DataUtil.getValue(tmp.field, query) });\n }\n }\n return agg;\n };\n /**\n * Performs batch update in the JSON array which add, remove and update records.\n *\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n JsonAdaptor.prototype.batchRequest = function (dm, changes, e) {\n var i;\n var deletedRecordsLen = changes.deletedRecords.length;\n for (i = 0; i < changes.addedRecords.length; i++) {\n this.insert(dm, changes.addedRecords[i]);\n }\n for (i = 0; i < changes.changedRecords.length; i++) {\n this.update(dm, e.key, changes.changedRecords[i]);\n }\n for (i = 0; i < deletedRecordsLen; i++) {\n this.remove(dm, e.key, changes.deletedRecords[i]);\n }\n return changes;\n };\n /**\n * Performs filter operation with the given data and where query.\n *\n * @param {Object[]} ds\n * @param {{validate:Function}} e\n * @param e.validate\n */\n JsonAdaptor.prototype.onWhere = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.filter(function (obj) {\n if (e) {\n return e.validate(obj);\n }\n });\n };\n /**\n * Returns aggregate function based on the aggregate type.\n *\n * @param {Object[]} ds\n * @param e\n * @param {string} } type\n * @param e.field\n * @param e.type\n */\n JsonAdaptor.prototype.onAggregates = function (ds, e) {\n var fn = DataUtil.aggregates[e.type];\n if (!ds || !fn || ds.length === 0) {\n return null;\n }\n return fn(ds, e.field);\n };\n /**\n * Performs search operation based on the given query.\n *\n * @param {Object[]} ds\n * @param {QueryOptions} e\n */\n JsonAdaptor.prototype.onSearch = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n if (e.fieldNames.length === 0) {\n DataUtil.getFieldList(ds[0], e.fieldNames);\n }\n return ds.filter(function (obj) {\n for (var j = 0; j < e.fieldNames.length; j++) {\n if (e.comparer.call(obj, DataUtil.getObject(e.fieldNames[j], obj), e.searchKey, e.ignoreCase, e.ignoreAccent)) {\n return true;\n }\n }\n return false;\n });\n };\n /**\n * Sort the data with given direction and field.\n *\n * @param {Object[]} ds\n * @param e\n * @param {Object} b\n * @param e.comparer\n * @param e.fieldName\n * @param query\n */\n JsonAdaptor.prototype.onSortBy = function (ds, e, query) {\n if (!ds || !ds.length) {\n return ds;\n }\n var fnCompare;\n var field = DataUtil.getValue(e.fieldName, query);\n if (!field) {\n return ds.sort(e.comparer);\n }\n if (field instanceof Array) {\n field = field.slice(0);\n for (var i = field.length - 1; i >= 0; i--) {\n if (!field[i]) {\n continue;\n }\n fnCompare = e.comparer;\n if (DataUtil.endsWith(field[i], ' desc')) {\n fnCompare = DataUtil.fnSort('descending');\n field[i] = field[i].replace(' desc', '');\n }\n ds = DataUtil.sort(ds, field[i], fnCompare);\n }\n return ds;\n }\n return DataUtil.sort(ds, field, e.comparer);\n };\n /**\n * Group the data based on the given query.\n *\n * @param {Object[]} ds\n * @param {QueryOptions} e\n * @param {Query} query\n */\n JsonAdaptor.prototype.onGroup = function (ds, e, query) {\n if (!ds || !ds.length) {\n return ds;\n }\n var agg = this.getAggregate(query);\n return DataUtil.group(ds, DataUtil.getValue(e.fieldName, query), agg, null, null, e.comparer);\n };\n /**\n * Retrieves records based on the given page index and size.\n *\n * @param {Object[]} ds\n * @param e\n * @param {number} } pageIndex\n * @param e.pageSize\n * @param {Query} query\n * @param e.pageIndex\n */\n JsonAdaptor.prototype.onPage = function (ds, e, query) {\n var size = DataUtil.getValue(e.pageSize, query);\n var start = (DataUtil.getValue(e.pageIndex, query) - 1) * size;\n var end = start + size;\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(start, end);\n };\n /**\n * Retrieves records based on the given start and end index from query.\n *\n * @param {Object[]} ds\n * @param e\n * @param {number} } end\n * @param e.start\n * @param e.end\n */\n JsonAdaptor.prototype.onRange = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(DataUtil.getValue(e.start), DataUtil.getValue(e.end));\n };\n /**\n * Picks the given count of records from the top of the datasource.\n *\n * @param {Object[]} ds\n * @param {{nos:number}} e\n * @param e.nos\n */\n JsonAdaptor.prototype.onTake = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(0, DataUtil.getValue(e.nos));\n };\n /**\n * Skips the given count of records from the data source.\n *\n * @param {Object[]} ds\n * @param {{nos:number}} e\n * @param e.nos\n */\n JsonAdaptor.prototype.onSkip = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(DataUtil.getValue(e.nos));\n };\n /**\n * Selects specified columns from the data source.\n *\n * @param {Object[]} ds\n * @param {{fieldNames:string}} e\n * @param e.fieldNames\n */\n JsonAdaptor.prototype.onSelect = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return DataUtil.select(ds, DataUtil.getValue(e.fieldNames));\n };\n /**\n * Inserts new record in the table.\n *\n * @param {DataManager} dm\n * @param {Object} data\n * @param tableName\n * @param query\n * @param {number} position\n */\n JsonAdaptor.prototype.insert = function (dm, data, tableName, query, position) {\n if (isNullOrUndefined(position)) {\n return dm.dataSource.json.push(data);\n }\n else {\n return dm.dataSource.json.splice(position, 0, data);\n }\n };\n /**\n * Remove the data from the dataSource based on the key field value.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @param tableName\n * @returns null\n */\n JsonAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n var ds = dm.dataSource.json;\n var i;\n if (typeof value === 'object' && !(value instanceof Date)) {\n value = DataUtil.getObject(keyField, value);\n }\n for (i = 0; i < ds.length; i++) {\n if (DataUtil.getObject(keyField, ds[i]) === value) {\n break;\n }\n }\n return i !== ds.length ? ds.splice(i, 1) : null;\n };\n /**\n * Updates existing record and saves the changes to the table.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @param tableName\n * @returns null\n */\n JsonAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n var ds = dm.dataSource.json;\n var i;\n var key;\n if (!isNullOrUndefined(keyField)) {\n key = getValue(keyField, value);\n }\n for (i = 0; i < ds.length; i++) {\n if (!isNullOrUndefined(keyField) && (getValue(keyField, ds[i])) === key) {\n break;\n }\n }\n return i < ds.length ? merge(ds[i], value) : null;\n };\n return JsonAdaptor;\n}(Adaptor));\nexport { JsonAdaptor };\n/**\n * URL Adaptor of DataManager can be used when you are required to use remote service to retrieve data.\n * It interacts with server-side for all DataManager Queries and CRUD operations.\n *\n * @hidden\n */\nvar UrlAdaptor = /** @class */ (function (_super) {\n __extends(UrlAdaptor, _super);\n function UrlAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Process the query to generate request body.\n *\n * @param {DataManager} dm\n * @param {Query} query\n * @param {Object[]} hierarchyFilters?\n * @param hierarchyFilters\n * @returns p\n */\n // tslint:disable-next-line:max-func-body-length\n UrlAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var queries = this.getQueryRequest(query);\n var singles = Query.filterQueryLists(query.queries, ['onSelect', 'onPage', 'onSkip', 'onTake', 'onRange']);\n var params = query.params;\n var url = dm.dataSource.url;\n var temp;\n var skip;\n var take = null;\n var options = this.options;\n var request = { sorts: [], groups: [], filters: [], searches: [], aggregates: [] };\n // calc Paging & Range\n if ('onPage' in singles) {\n temp = singles.onPage;\n skip = DataUtil.getValue(temp.pageIndex, query);\n take = DataUtil.getValue(temp.pageSize, query);\n skip = (skip - 1) * take;\n }\n else if ('onRange' in singles) {\n temp = singles.onRange;\n skip = temp.start;\n take = temp.end - temp.start;\n }\n // Sorting\n for (var i = 0; i < queries.sorts.length; i++) {\n temp = DataUtil.getValue(queries.sorts[i].e.fieldName, query);\n request.sorts.push(DataUtil.callAdaptorFunction(this, 'onEachSort', { name: temp, direction: queries.sorts[i].e.direction }, query));\n }\n // hierarchy\n if (hierarchyFilters) {\n temp = this.getFiltersFrom(hierarchyFilters, query);\n if (temp) {\n request.filters.push(DataUtil.callAdaptorFunction(this, 'onEachWhere', temp.toJson(), query));\n }\n }\n // Filters\n for (var i = 0; i < queries.filters.length; i++) {\n var res = DataUtil.callAdaptorFunction(this, 'onEachWhere', queries.filters[i].e.toJson(), query);\n if ((this.getModuleName &&\n this.getModuleName() === 'ODataV4Adaptor') &&\n !isNullOrUndefined(queries.filters[i].e.key) && queries.filters.length > 1) {\n res = '(' + res + ')';\n }\n request.filters.push(res);\n var keys_3 = typeof request.filters[i] === 'object' ? Object.keys(request.filters[i]) : [];\n for (var _i = 0, keys_1 = keys_3; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n if (DataUtil.isNull((request)[prop])) {\n delete request[prop];\n }\n }\n }\n // Searches\n for (var i = 0; i < queries.searches.length; i++) {\n temp = queries.searches[i].e;\n request.searches.push(DataUtil.callAdaptorFunction(this, 'onEachSearch', {\n fields: temp.fieldNames,\n operator: temp.operator,\n key: temp.searchKey,\n ignoreCase: temp.ignoreCase\n }, query));\n }\n // Grouping\n for (var i = 0; i < queries.groups.length; i++) {\n request.groups.push(DataUtil.getValue(queries.groups[i].e.fieldName, query));\n }\n // aggregates\n for (var i = 0; i < queries.aggregates.length; i++) {\n temp = queries.aggregates[i].e;\n request.aggregates.push({ type: temp.type, field: DataUtil.getValue(temp.field, query) });\n }\n var req = {};\n this.getRequestQuery(options, query, singles, request, req);\n // Params\n DataUtil.callAdaptorFunction(this, 'addParams', { dm: dm, query: query, params: params, reqParams: req });\n if (query.lazyLoad.length) {\n for (var i = 0; i < query.lazyLoad.length; i++) {\n req[query.lazyLoad[i].key] = query.lazyLoad[i].value;\n }\n }\n // cleanup\n var keys = Object.keys(req);\n for (var _a = 0, keys_2 = keys; _a < keys_2.length; _a++) {\n var prop = keys_2[_a];\n if (DataUtil.isNull(req[prop]) || req[prop] === '' || req[prop].length === 0) {\n delete req[prop];\n }\n }\n if (!(options.skip in req && options.take in req) && take !== null) {\n req[options.skip] = DataUtil.callAdaptorFunction(this, 'onSkip', skip, query);\n req[options.take] = DataUtil.callAdaptorFunction(this, 'onTake', take, query);\n }\n var p = this.pvt;\n this.pvt = {};\n if (this.options.requestType === 'json') {\n return {\n data: JSON.stringify(req, DataUtil.parse.jsonDateReplacer),\n url: url,\n pvtData: p,\n type: 'POST',\n contentType: 'application/json; charset=utf-8'\n };\n }\n temp = this.convertToQueryString(req, query, dm);\n temp = (dm.dataSource.url.indexOf('?') !== -1 ? '&' : '/') + temp;\n return {\n type: 'GET', url: temp.length ? url.replace(/\\/*$/, temp) : url, pvtData: p\n };\n };\n UrlAdaptor.prototype.getRequestQuery = function (options, query, singles, request, request1) {\n var param = 'param';\n var req = request1;\n req[options.from] = query.fromTable;\n if (options.apply && query.distincts.length) {\n req[options.apply] = 'onDistinct' in this ? DataUtil.callAdaptorFunction(this, 'onDistinct', query.distincts) : '';\n }\n if (!query.distincts.length && options.expand) {\n req[options.expand] = 'onExpand' in this && 'onSelect' in singles ?\n DataUtil.callAdaptorFunction(this, 'onExpand', { selects: DataUtil.getValue(singles.onSelect.fieldNames, query), expands: query.expands }, query) : query.expands;\n }\n req[options.select] = 'onSelect' in singles && !query.distincts.length ?\n DataUtil.callAdaptorFunction(this, 'onSelect', DataUtil.getValue(singles.onSelect.fieldNames, query), query) : '';\n req[options.count] = query.isCountRequired ? DataUtil.callAdaptorFunction(this, 'onCount', query.isCountRequired, query) : '';\n req[options.search] = request.searches.length ? DataUtil.callAdaptorFunction(this, 'onSearch', request.searches, query) : '';\n req[options.skip] = 'onSkip' in singles ?\n DataUtil.callAdaptorFunction(this, 'onSkip', DataUtil.getValue(singles.onSkip.nos, query), query) : '';\n req[options.take] = 'onTake' in singles ?\n DataUtil.callAdaptorFunction(this, 'onTake', DataUtil.getValue(singles.onTake.nos, query), query) : '';\n req[options.where] = request.filters.length || request.searches.length ?\n DataUtil.callAdaptorFunction(this, 'onWhere', request.filters, query) : '';\n req[options.sortBy] = request.sorts.length ? DataUtil.callAdaptorFunction(this, 'onSortBy', request.sorts, query) : '';\n req[options.group] = request.groups.length ? DataUtil.callAdaptorFunction(this, 'onGroup', request.groups, query) : '';\n req[options.aggregates] = request.aggregates.length ?\n DataUtil.callAdaptorFunction(this, 'onAggregates', request.aggregates, query) : '';\n req[param] = [];\n };\n /**\n * Convert the object from processQuery to string which can be added query string.\n *\n * @param {Object} req\n * @param request\n * @param {Query} query\n * @param {DataManager} dm\n */\n UrlAdaptor.prototype.convertToQueryString = function (request, query, dm) {\n return '';\n // this needs to be overridden\n };\n /**\n * Return the data from the data manager processing.\n *\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Object} request?\n * @param {CrudOptions} changes?\n * @param ds\n * @param query\n * @param xhr\n * @param request\n * @param changes\n */\n UrlAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n if (xhr && xhr.getResponseHeader('Content-Type') &&\n xhr.getResponseHeader('Content-Type').indexOf('application/json') !== -1) {\n var handleTimeZone = DataUtil.timeZoneHandling;\n if (ds && !ds.timeZoneHandling) {\n DataUtil.timeZoneHandling = false;\n }\n data = DataUtil.parse.parseJson(data);\n DataUtil.timeZoneHandling = handleTimeZone;\n }\n var requests = request;\n var pvt = requests.pvtData || {};\n var groupDs = data ? data.groupDs : [];\n if (xhr && xhr.getResponseHeader('Content-Type') &&\n xhr.getResponseHeader('Content-Type').indexOf('xml') !== -1) {\n return (query.isCountRequired ? { result: [], count: 0 } : []);\n }\n var d = JSON.parse(requests.data);\n if (d && d.action === 'batch' && data && data.addedRecords) {\n changes.addedRecords = data.addedRecords;\n return changes;\n }\n if (data && data.d) {\n data = data.d;\n }\n var args = {};\n if (data && 'count' in data) {\n args.count = data.count;\n }\n args.result = data && data.result ? data.result : data;\n var isExpand = false;\n if (Array.isArray(data.result) && data.result.length) {\n var key = 'key';\n var val = 'value';\n var level = 'level';\n if (!isNullOrUndefined(data.result[0][key])) {\n args.result = this.formRemoteGroupedData(args.result, 1, pvt.groups.length - 1);\n }\n if (query && query.lazyLoad.length && pvt.groups.length) {\n for (var i = 0; i < query.lazyLoad.length; i++) {\n if (query.lazyLoad[i][key] === 'onDemandGroupInfo') {\n var value = query.lazyLoad[i][val][level];\n if (pvt.groups.length === value) {\n isExpand = true;\n }\n }\n }\n }\n }\n if (!isExpand) {\n this.getAggregateResult(pvt, data, args, groupDs, query);\n }\n return DataUtil.isNull(args.count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n UrlAdaptor.prototype.formRemoteGroupedData = function (data, level, childLevel) {\n for (var i = 0; i < data.length; i++) {\n if (data[i].items.length && Object.keys(data[i].items[0]).indexOf('key') > -1) {\n this.formRemoteGroupedData(data[i].items, level + 1, childLevel - 1);\n }\n }\n var uid = 'GroupGuid';\n var childLvl = 'childLevels';\n var lvl = 'level';\n var records = 'records';\n data[uid] = consts[uid];\n data[lvl] = level;\n data[childLvl] = childLevel;\n data[records] = data[0].items.length ? this.getGroupedRecords(data, !isNullOrUndefined(data[0].items[records])) : [];\n return data;\n };\n UrlAdaptor.prototype.getGroupedRecords = function (data, hasRecords) {\n var childGroupedRecords = [];\n var records = 'records';\n for (var i = 0; i < data.length; i++) {\n if (!hasRecords) {\n for (var j = 0; j < data[i].items.length; j++) {\n childGroupedRecords.push(data[i].items[j]);\n }\n }\n else {\n childGroupedRecords = childGroupedRecords.concat(data[i].items[records]);\n }\n }\n return childGroupedRecords;\n };\n /**\n * Add the group query to the adaptor`s option.\n *\n * @param {Object[]} e\n * @returns void\n */\n UrlAdaptor.prototype.onGroup = function (e) {\n this.pvt.groups = e;\n return e;\n };\n /**\n * Add the aggregate query to the adaptor`s option.\n *\n * @param {Aggregates[]} e\n * @returns void\n */\n UrlAdaptor.prototype.onAggregates = function (e) {\n this.pvt.aggregates = e;\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n *\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {Object} e\n * @param query\n * @param original\n */\n UrlAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n var url;\n var key;\n return {\n type: 'POST',\n url: dm.dataSource.batchUrl || dm.dataSource.crudUrl || dm.dataSource.removeUrl || dm.dataSource.url,\n contentType: 'application/json; charset=utf-8',\n dataType: 'json',\n data: JSON.stringify(extend({}, {\n changed: changes.changedRecords,\n added: changes.addedRecords,\n deleted: changes.deletedRecords,\n action: 'batch',\n table: e[url],\n key: e[key]\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n *\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @returns void\n */\n UrlAdaptor.prototype.beforeSend = function (dm, request) {\n // need to extend this method\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n *\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName\n * @param query\n */\n UrlAdaptor.prototype.insert = function (dm, data, tableName, query) {\n return {\n url: dm.dataSource.insertUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n value: data,\n table: tableName,\n action: 'insert'\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number|string} value\n * @param {string} tableName\n * @param query\n */\n UrlAdaptor.prototype.remove = function (dm, keyField, value, tableName, query) {\n return {\n type: 'POST',\n url: dm.dataSource.removeUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n key: value,\n keyColumn: keyField,\n table: tableName,\n action: 'remove'\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * Prepare and return request body which is used to update record.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName\n * @param query\n */\n UrlAdaptor.prototype.update = function (dm, keyField, value, tableName, query) {\n return {\n type: 'POST',\n url: dm.dataSource.updateUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n value: value,\n action: 'update',\n keyColumn: keyField,\n key: DataUtil.getObject(keyField, value),\n table: tableName\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * To generate the predicate based on the filtered query.\n *\n * @param {Object[]|string[]|number[]} data\n * @param {Query} query\n * @hidden\n */\n UrlAdaptor.prototype.getFiltersFrom = function (data, query) {\n var key = query.fKey;\n var value;\n var prop = key;\n var pKey = query.key;\n var predicats = [];\n if (typeof data[0] !== 'object') {\n prop = null;\n }\n for (var i = 0; i < data.length; i++) {\n if (typeof data[0] === 'object') {\n value = DataUtil.getObject(pKey || prop, data[i]);\n }\n else {\n value = data[i];\n }\n predicats.push(new Predicate(key, 'equal', value));\n }\n return Predicate.or(predicats);\n };\n UrlAdaptor.prototype.getAggregateResult = function (pvt, data, args, groupDs, query) {\n var pData = data;\n if (data && data.result) {\n pData = data.result;\n }\n if (pvt && pvt.aggregates && pvt.aggregates.length) {\n var agg = pvt.aggregates;\n var fn = void 0;\n var aggregateData = pData;\n var res = {};\n if (data.aggregate) {\n aggregateData = data.aggregate;\n }\n for (var i = 0; i < agg.length; i++) {\n fn = DataUtil.aggregates[agg[i].type];\n if (fn) {\n res[agg[i].field + ' - ' + agg[i].type] = fn(aggregateData, agg[i].field);\n }\n }\n args.aggregates = res;\n }\n var key = 'key';\n var isServerGrouping = Array.isArray(data.result) && data.result.length && !isNullOrUndefined(data.result[0][key]);\n if (pvt && pvt.groups && pvt.groups.length && !isServerGrouping) {\n var groups = pvt.groups;\n for (var i = 0; i < groups.length; i++) {\n var level = null;\n if (!isNullOrUndefined(groupDs)) {\n groupDs = DataUtil.group(groupDs, groups[i]);\n }\n var groupQuery = Query.filterQueries(query.queries, 'onGroup')[i].e;\n pData = DataUtil.group(pData, groups[i], pvt.aggregates, level, groupDs, groupQuery.comparer);\n }\n args.result = pData;\n }\n return args;\n };\n UrlAdaptor.prototype.getQueryRequest = function (query) {\n var req = { sorts: [], groups: [], filters: [], searches: [], aggregates: [] };\n req.sorts = Query.filterQueries(query.queries, 'onSortBy');\n req.groups = Query.filterQueries(query.queries, 'onGroup');\n req.filters = Query.filterQueries(query.queries, 'onWhere');\n req.searches = Query.filterQueries(query.queries, 'onSearch');\n req.aggregates = Query.filterQueries(query.queries, 'onAggregates');\n return req;\n };\n UrlAdaptor.prototype.addParams = function (options) {\n var req = options.reqParams;\n if (options.params.length) {\n req.params = {};\n }\n for (var _i = 0, _a = options.params; _i < _a.length; _i++) {\n var tmp = _a[_i];\n if (req[tmp.key]) {\n throw new Error('Query() - addParams: Custom Param is conflicting other request arguments');\n }\n req[tmp.key] = tmp.value;\n if (tmp.fn) {\n req[tmp.key] = tmp.fn.call(options.query, tmp.key, options.query, options.dm);\n }\n req.params[tmp.key] = req[tmp.key];\n }\n };\n return UrlAdaptor;\n}(Adaptor));\nexport { UrlAdaptor };\n/**\n * OData Adaptor that is extended from URL Adaptor, is used for consuming data through OData Service.\n *\n * @hidden\n */\nvar ODataAdaptor = /** @class */ (function (_super) {\n __extends(ODataAdaptor, _super);\n function ODataAdaptor(props) {\n var _this = _super.call(this) || this;\n // options replaced the default adaptor options\n _this.options = extend({}, _this.options, {\n requestType: 'get',\n accept: 'application/json;odata=light;q=1,application/json;odata=verbose;q=0.5',\n multipartAccept: 'multipart/mixed',\n sortBy: '$orderby',\n select: '$select',\n skip: '$skip',\n take: '$top',\n count: '$inlinecount',\n where: '$filter',\n expand: '$expand',\n batch: '$batch',\n changeSet: '--changeset_',\n batchPre: 'batch_',\n contentId: 'Content-Id: ',\n batchContent: 'Content-Type: multipart/mixed; boundary=',\n changeSetContent: 'Content-Type: application/http\\nContent-Transfer-Encoding: binary ',\n batchChangeSetContentType: 'Content-Type: application/json; charset=utf-8 ',\n updateType: 'PUT'\n });\n extend(_this.options, props || {});\n return _this;\n }\n ODataAdaptor.prototype.getModuleName = function () {\n return 'ODataAdaptor';\n };\n /**\n * Generate request string based on the filter criteria from query.\n *\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n * @param predicate\n * @param query\n * @param requiresCast\n */\n ODataAdaptor.prototype.onPredicate = function (predicate, query, requiresCast) {\n var returnValue = '';\n var operator;\n var guid;\n var val = predicate.value;\n var type = typeof val;\n var field = predicate.field ? ODataAdaptor.getField(predicate.field) : null;\n if (val instanceof Date) {\n val = 'datetime\\'' + DataUtil.parse.replacer(val) + '\\'';\n }\n if (type === 'string') {\n val = val.replace(/'/g, '\\'\\'');\n if (predicate.ignoreCase) {\n val = val.toLowerCase();\n }\n if (predicate.operator !== 'like') {\n val = encodeURIComponent(val);\n }\n if (predicate.operator !== 'wildcard' && predicate.operator !== 'like') {\n val = '\\'' + val + '\\'';\n }\n if (requiresCast) {\n field = 'cast(' + field + ', \\'Edm.String\\')';\n }\n if (DataUtil.parse.isGuid(val)) {\n guid = 'guid';\n }\n if (predicate.ignoreCase) {\n if (!guid) {\n field = 'tolower(' + field + ')';\n }\n val = val.toLowerCase();\n }\n }\n if (predicate.operator === 'isempty' || predicate.operator === 'isnull' || predicate.operator === 'isnotempty' ||\n predicate.operator === 'isnotnull') {\n operator = predicate.operator.indexOf('isnot') !== -1 ? DataUtil.odBiOperator['notequal'] : DataUtil.odBiOperator['equal'];\n val = predicate.operator === 'isnull' || predicate.operator === 'isnotnull' ? null : '\\'\\'';\n }\n else {\n operator = DataUtil.odBiOperator[predicate.operator];\n }\n if (operator) {\n returnValue += field;\n returnValue += operator;\n if (guid) {\n returnValue += guid;\n }\n return returnValue + val;\n }\n if (!isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor') {\n operator = DataUtil.odv4UniOperator[predicate.operator];\n }\n else {\n operator = DataUtil.odUniOperator[predicate.operator];\n }\n if (operator === 'like') {\n val = val;\n if (val.indexOf('%') !== -1) {\n if (val.charAt(0) === '%' && val.lastIndexOf('%') < 2) {\n val = val.substring(1, val.length);\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['startswith'] : DataUtil.odUniOperator['startswith'];\n }\n else if (val.charAt(val.length - 1) === '%' && val.indexOf('%') > val.length - 3) {\n val = val.substring(0, val.length - 1);\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['endswith'] : DataUtil.odUniOperator['endswith'];\n }\n else if (val.lastIndexOf('%') !== val.indexOf('%') && val.lastIndexOf('%') > val.indexOf('%') + 1) {\n val = val.substring(val.indexOf('%') + 1, val.lastIndexOf('%'));\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['contains'] : DataUtil.odUniOperator['contains'];\n }\n else {\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['contains'] : DataUtil.odUniOperator['contains'];\n }\n }\n val = encodeURIComponent(val);\n val = '\\'' + val + '\\'';\n }\n else if (operator === 'wildcard') {\n val = val;\n if (val.indexOf('*') !== -1) {\n var splittedStringValue = val.split('*');\n var splittedValue = void 0;\n var count = 0;\n if (val.indexOf('*') !== 0 && splittedStringValue[0].indexOf('%3f') === -1 &&\n splittedStringValue[0].indexOf('?') === -1) {\n splittedValue = splittedStringValue[0];\n splittedValue = '\\'' + splittedValue + '\\'';\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['startswith'] : DataUtil.odUniOperator['startswith'];\n returnValue += operator + '(';\n returnValue += field + ',';\n if (guid) {\n returnValue += guid;\n }\n returnValue += splittedValue + ')';\n count++;\n }\n if (val.lastIndexOf('*') !== val.length - 1 && splittedStringValue[splittedStringValue.length - 1].indexOf('%3f') === -1 &&\n splittedStringValue[splittedStringValue.length - 1].indexOf('?') === -1) {\n splittedValue = splittedStringValue[splittedStringValue.length - 1];\n splittedValue = '\\'' + splittedValue + '\\'';\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['endswith'] : DataUtil.odUniOperator['endswith'];\n if (count > 0) {\n returnValue += ' and ';\n }\n returnValue += operator + '(';\n returnValue += field + ',';\n if (guid) {\n returnValue += guid;\n }\n returnValue += splittedValue + ')';\n count++;\n }\n if (splittedStringValue.length > 2) {\n for (var i = 1; i < splittedStringValue.length - 1; i++) {\n if (splittedStringValue[i].indexOf('%3f') === -1 && splittedStringValue[i].indexOf('?') === -1) {\n splittedValue = splittedStringValue[i];\n splittedValue = '\\'' + splittedValue + '\\'';\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['contains'] : DataUtil.odUniOperator['contains'];\n if (count > 0) {\n returnValue += ' and ';\n }\n if (operator === 'substringof' || operator === 'not substringof') {\n var temp = splittedValue;\n splittedValue = field;\n field = temp;\n }\n returnValue += operator + '(';\n returnValue += field + ',';\n if (guid) {\n returnValue += guid;\n }\n returnValue += splittedValue + ')';\n count++;\n }\n }\n }\n if (count === 0) {\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['contains'] : DataUtil.odUniOperator['contains'];\n if (val.indexOf('?') !== -1 || val.indexOf('%3f') !== -1) {\n val = val.indexOf('?') !== -1 ? val.split('?').join('') : val.split('%3f').join('');\n }\n val = '\\'' + val + '\\'';\n }\n else {\n operator = 'wildcard';\n }\n }\n else {\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['contains'] : DataUtil.odUniOperator['contains'];\n if (val.indexOf('?') !== -1 || val.indexOf('%3f') !== -1) {\n val = val.indexOf('?') !== -1 ? val.split('?').join('') : val.split('%3f').join('');\n }\n val = '\\'' + val + '\\'';\n }\n }\n if (operator === 'substringof' || operator === 'not substringof') {\n var temp = val;\n val = field;\n field = temp;\n }\n if (operator !== 'wildcard') {\n returnValue += operator + '(';\n returnValue += field + ',';\n if (guid) {\n returnValue += guid;\n }\n returnValue += val + ')';\n }\n return returnValue;\n };\n ODataAdaptor.prototype.addParams = function (options) {\n _super.prototype.addParams.call(this, options);\n delete options.reqParams.params;\n };\n /**\n * Generate request string based on the multiple filter criteria from query.\n *\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n * @param predicate\n * @param query\n * @param requiresCast\n */\n ODataAdaptor.prototype.onComplexPredicate = function (predicate, query, requiresCast) {\n var res = [];\n for (var i = 0; i < predicate.predicates.length; i++) {\n res.push('(' + this.onEachWhere(predicate.predicates[i], query, requiresCast) + ')');\n }\n return res.join(' ' + predicate.condition + ' ');\n };\n /**\n * Generate query string based on the multiple filter criteria from query.\n *\n * @param {Predicate} filter\n * @param {boolean} requiresCast?\n * @param query\n * @param requiresCast\n */\n ODataAdaptor.prototype.onEachWhere = function (filter, query, requiresCast) {\n return filter.isComplex ? this.onComplexPredicate(filter, query, requiresCast) : this.onPredicate(filter, query, requiresCast);\n };\n /**\n * Generate query string based on the multiple filter criteria from query.\n *\n * @param {string[]} filters\n */\n ODataAdaptor.prototype.onWhere = function (filters) {\n if (this.pvt.search) {\n filters.push(this.onEachWhere(this.pvt.search, null, true));\n }\n return filters.join(' and ');\n };\n /**\n * Generate query string based on the multiple search criteria from query.\n *\n * @param e\n * @param {string} operator\n * @param {string} key\n * @param {boolean} } ignoreCase\n * @param e.fields\n * @param e.operator\n * @param e.key\n * @param e.ignoreCase\n */\n ODataAdaptor.prototype.onEachSearch = function (e) {\n if (e.fields && e.fields.length === 0) {\n DataUtil.throwError('Query() - Search : oData search requires list of field names to search');\n }\n var filter = this.pvt.search || [];\n for (var i = 0; i < e.fields.length; i++) {\n filter.push(new Predicate(e.fields[i], e.operator, e.key, e.ignoreCase));\n }\n this.pvt.search = filter;\n };\n /**\n * Generate query string based on the search criteria from query.\n *\n * @param {Object} e\n */\n ODataAdaptor.prototype.onSearch = function (e) {\n this.pvt.search = Predicate.or(this.pvt.search);\n return '';\n };\n /**\n * Generate query string based on multiple sort criteria from query.\n *\n * @param {QueryOptions} e\n */\n ODataAdaptor.prototype.onEachSort = function (e) {\n var res = [];\n if (e.name instanceof Array) {\n for (var i = 0; i < e.name.length; i++) {\n res.push(ODataAdaptor.getField(e.name[i]) + (e.direction === 'descending' ? ' desc' : ''));\n }\n }\n else {\n res.push(ODataAdaptor.getField(e.name) + (e.direction === 'descending' ? ' desc' : ''));\n }\n return res.join(',');\n };\n /**\n * Returns sort query string.\n *\n * @param {string[]} e\n */\n ODataAdaptor.prototype.onSortBy = function (e) {\n return e.reverse().join(',');\n };\n /**\n * Adds the group query to the adaptor option.\n *\n * @param {Object[]} e\n * @returns string\n */\n ODataAdaptor.prototype.onGroup = function (e) {\n this.pvt.groups = e;\n return [];\n };\n /**\n * Returns the select query string.\n *\n * @param {string[]} e\n */\n ODataAdaptor.prototype.onSelect = function (e) {\n for (var i = 0; i < e.length; i++) {\n e[i] = ODataAdaptor.getField(e[i]);\n }\n return e.join(',');\n };\n /**\n * Add the aggregate query to the adaptor option.\n *\n * @param {Object[]} e\n * @returns string\n */\n ODataAdaptor.prototype.onAggregates = function (e) {\n this.pvt.aggregates = e;\n return '';\n };\n /**\n * Returns the query string which requests total count from the data source.\n *\n * @param {boolean} e\n * @returns string\n */\n ODataAdaptor.prototype.onCount = function (e) {\n return e === true ? 'allpages' : '';\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n *\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings?\n * @param settings\n */\n ODataAdaptor.prototype.beforeSend = function (dm, request, settings) {\n if (DataUtil.endsWith(settings.url, this.options.batch) && settings.type.toLowerCase() === 'post') {\n request.setRequestHeader('Accept', this.options.multipartAccept);\n request.setRequestHeader('DataServiceVersion', '2.0');\n request.overrideMimeType('text/plain; charset=x-user-defined');\n }\n else {\n request.setRequestHeader('Accept', this.options.accept);\n }\n request.setRequestHeader('DataServiceVersion', '2.0');\n request.setRequestHeader('MaxDataServiceVersion', '2.0');\n };\n /**\n * Returns the data from the query processing.\n *\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @param ds\n * @param query\n * @param xhr\n * @param request\n * @param changes\n * @returns aggregateResult\n */\n ODataAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var metaCheck = 'odata.metadata';\n if ((request && request.type === 'GET') && !this.rootUrl && data[metaCheck]) {\n var dataUrls = data[metaCheck].split('/$metadata#');\n this.rootUrl = dataUrls[0];\n this.resourceTableName = dataUrls[1];\n }\n var pvtData = 'pvtData';\n if (!isNullOrUndefined(data.d)) {\n var dataCopy = ((query && query.isCountRequired) ? data.d.results : data.d);\n var metaData = '__metadata';\n if (!isNullOrUndefined(dataCopy)) {\n for (var i = 0; i < dataCopy.length; i++) {\n if (!isNullOrUndefined(dataCopy[i][metaData])) {\n delete dataCopy[i][metaData];\n }\n }\n }\n }\n var pvt = request && request[pvtData];\n var emptyAndBatch = this.processBatchResponse(data, query, xhr, request, changes);\n if (emptyAndBatch) {\n return emptyAndBatch;\n }\n var versionCheck = xhr && request.getResponseHeader('DataServiceVersion');\n var count = null;\n var version = (versionCheck && parseInt(versionCheck, 10)) || 2;\n if (query && query.isCountRequired) {\n var oDataCount = '__count';\n if (data[oDataCount] || data['odata.count']) {\n count = data[oDataCount] || data['odata.count'];\n }\n if (data.d) {\n data = data.d;\n }\n if (data[oDataCount] || data['odata.count']) {\n count = data[oDataCount] || data['odata.count'];\n }\n }\n if (version === 3 && data.value) {\n data = data.value;\n }\n if (data.d) {\n data = data.d;\n }\n if (version < 3 && data.results) {\n data = data.results;\n }\n var args = {};\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args, null, query);\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n /**\n * Converts the request object to query string.\n *\n * @param {Object} req\n * @param request\n * @param {Query} query\n * @param {DataManager} dm\n * @returns tableName\n */\n ODataAdaptor.prototype.convertToQueryString = function (request, query, dm) {\n var res = [];\n var table = 'table';\n var tableName = request[table] || '';\n var format = '$format';\n delete request[table];\n if (dm.dataSource.requiresFormat) {\n request[format] = 'json';\n }\n var keys = Object.keys(request);\n for (var _i = 0, keys_4 = keys; _i < keys_4.length; _i++) {\n var prop = keys_4[_i];\n res.push(prop + '=' + request[prop]);\n }\n res = res.join('&');\n if (dm.dataSource.url && dm.dataSource.url.indexOf('?') !== -1 && !tableName) {\n return res;\n }\n return res.length ? tableName + '?' + res : tableName || '';\n };\n ODataAdaptor.prototype.localTimeReplacer = function (key, convertObj) {\n for (var _i = 0, _a = !isNullOrUndefined(convertObj) ? Object.keys(convertObj) : []; _i < _a.length; _i++) {\n var prop = _a[_i];\n if ((convertObj[prop] instanceof Date)) {\n convertObj[prop] = DataUtil.dateParse.toLocalTime(convertObj[prop]);\n }\n }\n return convertObj;\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n *\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n * @param tableName\n */\n ODataAdaptor.prototype.insert = function (dm, data, tableName) {\n return {\n url: (dm.dataSource.insertUrl || dm.dataSource.url).replace(/\\/*$/, tableName ? '/' + tableName : ''),\n data: JSON.stringify(data, this.options.localTime ? this.localTimeReplacer : null)\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number} value\n * @param {string} tableName?\n * @param tableName\n */\n ODataAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n var url;\n if (typeof value === 'string' && !DataUtil.parse.isGuid(value)) {\n url = \"('\" + value + \"')\";\n }\n else {\n url = \"(\" + value + \")\";\n }\n return {\n type: 'DELETE',\n url: (dm.dataSource.removeUrl || dm.dataSource.url).replace(/\\/*$/, tableName ? '/' + tableName : '') + url\n };\n };\n /**\n * Updates existing record and saves the changes to the table.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @param tableName\n * @param query\n * @param original\n * @returns this\n */\n ODataAdaptor.prototype.update = function (dm, keyField, value, tableName, query, original) {\n if (this.options.updateType === 'PATCH' && !isNullOrUndefined(original)) {\n value = this.compareAndRemove(value, original, keyField);\n }\n var url;\n if (typeof value[keyField] === 'string' && !DataUtil.parse.isGuid(value[keyField])) {\n url = \"('\" + value[keyField] + \"')\";\n }\n else {\n url = \"(\" + value[keyField] + \")\";\n }\n return {\n type: this.options.updateType,\n url: (dm.dataSource.updateUrl || dm.dataSource.url).replace(/\\/*$/, tableName ? '/' + tableName : '') + url,\n data: JSON.stringify(value, this.options.localTime ? this.localTimeReplacer : null),\n accept: this.options.accept\n };\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n *\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n * @param query\n * @param original\n * @returns {Object}\n */\n ODataAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n var initialGuid = e.guid = DataUtil.getGuid(this.options.batchPre);\n var url = this.rootUrl ? this.rootUrl + '/' + this.options.batch :\n dm.dataSource.url.replace(/\\/*$/, '/' + this.options.batch);\n e.url = this.resourceTableName ? this.resourceTableName : e.url;\n var args = {\n url: e.url,\n key: e.key,\n cid: 1,\n cSet: DataUtil.getGuid(this.options.changeSet)\n };\n var req = '--' + initialGuid + '\\n';\n req += 'Content-Type: multipart/mixed; boundary=' + args.cSet.replace('--', '') + '\\n';\n this.pvt.changeSet = 0;\n req += this.generateInsertRequest(changes.addedRecords, args, dm);\n req += this.generateUpdateRequest(changes.changedRecords, args, dm, original ? original.changedRecords : []);\n req += this.generateDeleteRequest(changes.deletedRecords, args, dm);\n req += args.cSet + '--\\n';\n req += '--' + initialGuid + '--';\n return {\n type: 'POST',\n url: url,\n dataType: 'json',\n contentType: 'multipart/mixed; charset=UTF-8;boundary=' + initialGuid,\n data: req\n };\n };\n /**\n * Generate the string content from the removed records.\n * The result will be send during batch update.\n *\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n * @param dm\n * @returns this\n */\n ODataAdaptor.prototype.generateDeleteRequest = function (arr, e, dm) {\n if (!arr) {\n return '';\n }\n var req = '';\n var stat = {\n 'method': 'DELETE ',\n 'url': function (data, i, key) {\n var url = DataUtil.getObject(key, data[i]);\n if (typeof url === 'number' || DataUtil.parse.isGuid(url)) {\n return '(' + url + ')';\n }\n else if (url instanceof Date) {\n var dateTime = data[i][key];\n return '(' + dateTime.toJSON() + ')';\n }\n else {\n return \"('\" + url + \"')\";\n }\n },\n 'data': function (data, i) { return ''; }\n };\n req = this.generateBodyContent(arr, e, stat, dm);\n return req + '\\n';\n };\n /**\n * Generate the string content from the inserted records.\n * The result will be send during batch update.\n *\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n * @param dm\n */\n ODataAdaptor.prototype.generateInsertRequest = function (arr, e, dm) {\n if (!arr) {\n return '';\n }\n var req = '';\n var stat = {\n 'method': 'POST ',\n 'url': function (data, i, key) { return ''; },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req = this.generateBodyContent(arr, e, stat, dm);\n return req;\n };\n /**\n * Generate the string content from the updated records.\n * The result will be send during batch update.\n *\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n * @param dm\n * @param org\n */\n ODataAdaptor.prototype.generateUpdateRequest = function (arr, e, dm, org) {\n var _this = this;\n if (!arr) {\n return '';\n }\n var req = '';\n arr.forEach(function (change) { return change = _this.compareAndRemove(change, org.filter(function (o) { return DataUtil.getObject(e.key, o) === DataUtil.getObject(e.key, change); })[0], e.key); });\n var stat = {\n 'method': this.options.updateType + ' ',\n 'url': function (data, i, key) {\n if (typeof data[i][key] === 'number' || DataUtil.parse.isGuid(data[i][key])) {\n return '(' + data[i][key] + ')';\n }\n else if (data[i][key] instanceof Date) {\n var date = data[i][key];\n return '(' + date.toJSON() + ')';\n }\n else {\n return \"('\" + data[i][key] + \"')\";\n }\n },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req = this.generateBodyContent(arr, e, stat, dm);\n return req;\n };\n ODataAdaptor.getField = function (prop) {\n return prop.replace(/\\./g, '/');\n };\n ODataAdaptor.prototype.generateBodyContent = function (arr, e, stat, dm) {\n var req = '';\n for (var i = 0; i < arr.length; i++) {\n req += '\\n' + e.cSet + '\\n';\n req += this.options.changeSetContent + '\\n\\n';\n req += stat.method;\n if (stat.method === 'POST ') {\n req += (dm.dataSource.insertUrl || dm.dataSource.crudUrl || e.url) + stat.url(arr, i, e.key) + ' HTTP/1.1\\n';\n }\n else if (stat.method === 'PUT ' || stat.method === 'PATCH ') {\n req += (dm.dataSource.updateUrl || dm.dataSource.crudUrl || e.url) + stat.url(arr, i, e.key) + ' HTTP/1.1\\n';\n }\n else if (stat.method === 'DELETE ') {\n req += (dm.dataSource.removeUrl || dm.dataSource.crudUrl || e.url) + stat.url(arr, i, e.key) + ' HTTP/1.1\\n';\n }\n req += 'Accept: ' + this.options.accept + '\\n';\n req += 'Content-Id: ' + this.pvt.changeSet++ + '\\n';\n req += this.options.batchChangeSetContentType + '\\n';\n if (!isNullOrUndefined(arr[i]['@odata.etag'])) {\n req += 'If-Match: ' + arr[i]['@odata.etag'] + '\\n\\n';\n delete arr[i]['@odata.etag'];\n }\n else {\n req += '\\n';\n }\n req += stat.data(arr, i);\n }\n return req;\n };\n ODataAdaptor.prototype.processBatchResponse = function (data, query, xhr, request, changes) {\n if (xhr && xhr.getResponseHeader('Content-Type') && xhr.getResponseHeader('Content-Type').indexOf('xml') !== -1) {\n return (query.isCountRequired ? { result: [], count: 0 } : []);\n }\n if (request && this.options.batch && DataUtil.endsWith(request.url, this.options.batch) && request.type.toLowerCase() === 'post') {\n var guid = xhr.getResponseHeader('Content-Type');\n var cIdx = void 0;\n var jsonObj = void 0;\n var d = data + '';\n guid = guid.substring(guid.indexOf('=batchresponse') + 1);\n d = d.split(guid);\n if (d.length < 2) {\n return {};\n }\n d = d[1];\n var exVal = /(?:\\bContent-Type.+boundary=)(changesetresponse.+)/i.exec(d);\n if (exVal) {\n d.replace(exVal[0], '');\n }\n var changeGuid = exVal ? exVal[1] : '';\n d = d.split(changeGuid);\n for (var i = d.length; i > -1; i--) {\n if (!/\\bContent-ID:/i.test(d[i]) || !/\\bHTTP.+201/.test(d[i])) {\n continue;\n }\n cIdx = parseInt(/\\bContent-ID: (\\d+)/i.exec(d[i])[1], 10);\n if (changes.addedRecords[cIdx]) {\n jsonObj = DataUtil.parse.parseJson(/^\\{.+\\}/m.exec(d[i])[0]);\n extend({}, changes.addedRecords[cIdx], this.processResponse(jsonObj));\n }\n }\n return changes;\n }\n return null;\n };\n ODataAdaptor.prototype.compareAndRemove = function (data, original, key) {\n var _this = this;\n if (isNullOrUndefined(original)) {\n return data;\n }\n Object.keys(data).forEach(function (prop) {\n if (prop !== key && prop !== '@odata.etag') {\n if (DataUtil.isPlainObject(data[prop])) {\n _this.compareAndRemove(data[prop], original[prop]);\n var final = Object.keys(data[prop]).filter(function (data) { return data !== '@odata.etag'; });\n if (final.length === 0) {\n delete data[prop];\n }\n }\n else if (data[prop] === original[prop]) {\n delete data[prop];\n }\n else if (data[prop] && original[prop] && data[prop].valueOf() === original[prop].valueOf()) {\n delete data[prop];\n }\n }\n });\n return data;\n };\n return ODataAdaptor;\n}(UrlAdaptor));\nexport { ODataAdaptor };\n/**\n * The OData v4 is an improved version of OData protocols.\n * The DataManager uses the ODataV4Adaptor to consume OData v4 services.\n *\n * @hidden\n */\nvar ODataV4Adaptor = /** @class */ (function (_super) {\n __extends(ODataV4Adaptor, _super);\n function ODataV4Adaptor(props) {\n var _this = _super.call(this, props) || this;\n // options replaced the default adaptor options\n _this.options = extend({}, _this.options, {\n requestType: 'get',\n accept: 'application/json, text/javascript, */*; q=0.01',\n multipartAccept: 'multipart/mixed',\n sortBy: '$orderby',\n select: '$select',\n skip: '$skip',\n take: '$top',\n count: '$count',\n search: '$search',\n where: '$filter',\n expand: '$expand',\n batch: '$batch',\n changeSet: '--changeset_',\n batchPre: 'batch_',\n contentId: 'Content-Id: ',\n batchContent: 'Content-Type: multipart/mixed; boundary=',\n changeSetContent: 'Content-Type: application/http\\nContent-Transfer-Encoding: binary ',\n batchChangeSetContentType: 'Content-Type: application/json; charset=utf-8 ',\n updateType: 'PATCH',\n localTime: false,\n apply: '$apply'\n });\n extend(_this.options, props || {});\n return _this;\n }\n /**\n * @hidden\n */\n ODataV4Adaptor.prototype.getModuleName = function () {\n return 'ODataV4Adaptor';\n };\n /**\n * Returns the query string which requests total count from the data source.\n *\n * @param {boolean} e\n * @returns string\n */\n ODataV4Adaptor.prototype.onCount = function (e) {\n return e === true ? 'true' : '';\n };\n /**\n * Generate request string based on the filter criteria from query.\n *\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n * @param predicate\n * @param query\n * @param requiresCast\n */\n ODataV4Adaptor.prototype.onPredicate = function (predicate, query, requiresCast) {\n var returnValue = '';\n var val = predicate.value;\n var isDate = val instanceof Date;\n if (query instanceof Query) {\n var queries = this.getQueryRequest(query);\n for (var i = 0; i < queries.filters.length; i++) {\n if (queries.filters[i].e.key === predicate.value) {\n requiresCast = true;\n }\n }\n }\n returnValue = _super.prototype.onPredicate.call(this, predicate, query, requiresCast);\n if (isDate) {\n returnValue = returnValue.replace(/datetime'(.*)'$/, '$1');\n }\n if (DataUtil.parse.isGuid(val)) {\n returnValue = returnValue.replace('guid', '').replace(/'/g, '');\n }\n return returnValue;\n };\n /**\n * Generate query string based on the multiple search criteria from query.\n *\n * @param e\n * @param {string} operator\n * @param {string} key\n * @param {boolean} } ignoreCase\n * @param e.fields\n * @param e.operator\n * @param e.key\n * @param e.ignoreCase\n */\n ODataV4Adaptor.prototype.onEachSearch = function (e) {\n var search = this.pvt.searches || [];\n search.push(e.key);\n this.pvt.searches = search;\n };\n /**\n * Generate query string based on the search criteria from query.\n *\n * @param {Object} e\n */\n ODataV4Adaptor.prototype.onSearch = function (e) {\n return this.pvt.searches.join(' OR ');\n };\n /**\n * Returns the expand query string.\n *\n * @param {string} e\n * @param e.selects\n * @param e.expands\n */\n ODataV4Adaptor.prototype.onExpand = function (e) {\n var _this = this;\n var selected = {};\n var expanded = {};\n var expands = e.expands.slice();\n var exArr = [];\n var selects = e.selects.filter(function (item) { return item.indexOf('.') > -1; });\n selects.forEach(function (select) {\n var splits = select.split('.');\n if (!(splits[0] in selected)) {\n selected[splits[0]] = [];\n }\n if (splits.length === 2) {\n if (selected[splits[0]].length && Object.keys(selected).indexOf(splits[0]) !== -1) {\n if (selected[splits[0]][0].indexOf('$expand') !== -1 && selected[splits[0]][0].indexOf(';$select=') === -1) {\n selected[splits[0]][0] = selected[splits[0]][0] + ';' + '$select=' + splits[1];\n }\n else {\n selected[splits[0]][0] = selected[splits[0]][0] + ',' + splits[1];\n }\n }\n else {\n selected[splits[0]].push('$select=' + splits[1]);\n }\n }\n else {\n var sel = '$select=' + splits[splits.length - 1];\n var exp = '';\n var close_1 = '';\n for (var i = 1; i < splits.length - 1; i++) {\n exp = exp + '$expand=' + splits[i] + '(';\n close_1 = close_1 + ')';\n }\n var combineVal = exp + sel + close_1;\n if (selected[splits[0]].length && Object.keys(selected).indexOf(splits[0]) !== -1 &&\n _this.expandQueryIndex(selected[splits[0]], true)) {\n var idx = _this.expandQueryIndex(selected[splits[0]]);\n selected[splits[0]][idx] = selected[splits[0]][idx] + combineVal.replace('$expand=', ',');\n }\n else {\n selected[splits[0]].push(combineVal);\n }\n }\n });\n //Auto expand from select query\n Object.keys(selected).forEach(function (expand) {\n if ((expands.indexOf(expand) === -1)) {\n expands.push(expand);\n }\n });\n expands.forEach(function (expand) {\n expanded[expand] = expand in selected ? expand + \"(\" + selected[expand].join(';') + \")\" : expand;\n });\n Object.keys(expanded).forEach(function (ex) { return exArr.push(expanded[ex]); });\n return exArr.join(',');\n };\n ODataV4Adaptor.prototype.expandQueryIndex = function (query, isExpand) {\n for (var i = 0; i < query.length; i++) {\n if (query[i].indexOf('$expand') !== -1) {\n return isExpand ? true : i;\n }\n }\n return isExpand ? false : 0;\n };\n /**\n * Returns the groupby query string.\n *\n * @param {string} e\n * @param distinctFields\n */\n ODataV4Adaptor.prototype.onDistinct = function (distinctFields) {\n var fields = distinctFields.map(function (field) { return ODataAdaptor.getField(field); }).join(',');\n return \"groupby((\" + fields + \"))\";\n };\n /**\n * Returns the select query string.\n *\n * @param {string[]} e\n */\n ODataV4Adaptor.prototype.onSelect = function (e) {\n return _super.prototype.onSelect.call(this, e.filter(function (item) { return item.indexOf('.') === -1; }));\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n *\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings\n * @returns void\n */\n ODataV4Adaptor.prototype.beforeSend = function (dm, request, settings) {\n if (settings.type === 'POST' || settings.type === 'PUT' || settings.type === 'PATCH') {\n request.setRequestHeader('Prefer', 'return=representation');\n }\n request.setRequestHeader('Accept', this.options.accept);\n };\n /**\n * Returns the data from the query processing.\n *\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @param ds\n * @param query\n * @param xhr\n * @param request\n * @param changes\n * @returns aggregateResult\n */\n ODataV4Adaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var metaName = '@odata.context';\n var metaV4Name = '@context';\n if ((request && request.type === 'GET') && !this.rootUrl && (data[metaName] || data[metaV4Name])) {\n var dataUrl = data[metaName] ? data[metaName].split('/$metadata#') : data[metaV4Name].split('/$metadata#');\n this.rootUrl = dataUrl[0];\n this.resourceTableName = dataUrl[1];\n }\n var pvtData = 'pvtData';\n var pvt = request && request[pvtData];\n var emptyAndBatch = _super.prototype.processBatchResponse.call(this, data, query, xhr, request, changes);\n if (emptyAndBatch) {\n return emptyAndBatch;\n }\n var count = null;\n var dataCount = '@odata.count';\n var dataV4Count = '@count';\n if (query && query.isCountRequired) {\n if (dataCount in data) {\n count = data[dataCount];\n }\n else if (dataV4Count in data) {\n count = data[dataV4Count];\n }\n }\n data = !isNullOrUndefined(data.value) ? data.value : data;\n var args = {};\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args, null, query);\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: count, aggregates: args.aggregates };\n };\n return ODataV4Adaptor;\n}(ODataAdaptor));\nexport { ODataV4Adaptor };\n/**\n * The Web API is a programmatic interface to define the request and response messages system that is mostly exposed in JSON or XML.\n * The DataManager uses the WebApiAdaptor to consume Web API.\n * Since this adaptor is targeted to interact with Web API created using OData endpoint, it is extended from ODataAdaptor\n *\n * @hidden\n */\nvar WebApiAdaptor = /** @class */ (function (_super) {\n __extends(WebApiAdaptor, _super);\n function WebApiAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n WebApiAdaptor.prototype.getModuleName = function () {\n return 'WebApiAdaptor';\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n *\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n * @param tableName\n */\n WebApiAdaptor.prototype.insert = function (dm, data, tableName) {\n return {\n type: 'POST',\n url: dm.dataSource.url,\n data: JSON.stringify(data)\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number} value\n * @param {string} tableName?\n * @param tableName\n */\n WebApiAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n return {\n type: 'DELETE',\n url: dm.dataSource.url + '/' + value,\n data: JSON.stringify(value)\n };\n };\n /**\n * Prepare and return request body which is used to update record.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @param tableName\n */\n WebApiAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n return {\n type: 'PUT',\n url: dm.dataSource.url,\n data: JSON.stringify(value)\n };\n };\n WebApiAdaptor.prototype.batchRequest = function (dm, changes, e) {\n var _this = this;\n var initialGuid = e.guid = DataUtil.getGuid(this.options.batchPre);\n var url = dm.dataSource.url.replace(/\\/*$/, '/' + this.options.batch);\n e.url = this.resourceTableName ? this.resourceTableName : e.url;\n var req = [];\n var _loop_1 = function (i, x) {\n changes.addedRecords.forEach(function (j, d) {\n var stat = {\n 'method': 'POST ',\n 'url': function (data, i, key) { return ''; },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req.push('--' + initialGuid);\n req.push('Content-Type: application/http; msgtype=request', '');\n req.push('POST ' + '/api/' + (dm.dataSource.insertUrl || dm.dataSource.crudUrl || e.url)\n + stat.url(changes.addedRecords, i, e.key) + ' HTTP/1.1');\n req.push('Content-Type: ' + 'application/json; charset=utf-8');\n req.push('Host: ' + location.host);\n req.push('', j ? JSON.stringify(j) : '');\n });\n };\n //insertion\n for (var i = 0, x = changes.addedRecords.length; i < x; i++) {\n _loop_1(i, x);\n }\n var _loop_2 = function (i, x) {\n changes.changedRecords.forEach(function (j, d) {\n var stat = {\n 'method': _this.options.updateType + ' ',\n 'url': function (data, i, key) { return ''; },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req.push('--' + initialGuid);\n req.push('Content-Type: application/http; msgtype=request', '');\n req.push('PUT ' + '/api/' + (dm.dataSource.updateUrl || dm.dataSource.crudUrl || e.url)\n + stat.url(changes.changedRecords, i, e.key) + ' HTTP/1.1');\n req.push('Content-Type: ' + 'application/json; charset=utf-8');\n req.push('Host: ' + location.host);\n req.push('', j ? JSON.stringify(j) : '');\n });\n };\n //updation\n for (var i = 0, x = changes.changedRecords.length; i < x; i++) {\n _loop_2(i, x);\n }\n var _loop_3 = function (i, x) {\n changes.deletedRecords.forEach(function (j, d) {\n var state = {\n 'mtd': 'DELETE ',\n 'url': function (data, i, key) {\n var url = DataUtil.getObject(key, data[i]);\n if (typeof url === 'number' || DataUtil.parse.isGuid(url)) {\n return '/' + url;\n }\n else if (url instanceof Date) {\n var datTime = data[i][key];\n return '/' + datTime.toJSON();\n }\n else {\n return \"/'\" + url + \"'\";\n }\n },\n 'data': function (data, i) { return ''; }\n };\n req.push('--' + initialGuid);\n req.push('Content-Type: application/http; msgtype=request', '');\n req.push('DELETE ' + '/api/' + (dm.dataSource.removeUrl || dm.dataSource.crudUrl || e.url)\n + state.url(changes.deletedRecords, i, e.key) + ' HTTP/1.1');\n req.push('Content-Type: ' + 'application/json; charset=utf-8');\n req.push('Host: ' + location.host);\n req.push('', j ? JSON.stringify(j) : '');\n });\n };\n //deletion\n for (var i = 0, x = changes.deletedRecords.length; i < x; i++) {\n _loop_3(i, x);\n }\n req.push('--' + initialGuid + '--', '');\n return {\n type: 'POST',\n url: url,\n contentType: 'multipart/mixed; boundary=' + initialGuid,\n data: req.join('\\r\\n')\n };\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n *\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings\n * @returns void\n */\n WebApiAdaptor.prototype.beforeSend = function (dm, request, settings) {\n request.setRequestHeader('Accept', 'application/json, text/javascript, */*; q=0.01');\n };\n /**\n * Returns the data from the query processing.\n *\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @param ds\n * @param query\n * @param xhr\n * @param request\n * @param changes\n * @returns aggregateResult\n */\n WebApiAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var pvtData = 'pvtData';\n var pvt = request && request[pvtData];\n var count = null;\n var args = {};\n if (request && request.type.toLowerCase() !== 'post') {\n var versionCheck = xhr && request.getResponseHeader('DataServiceVersion');\n var version = (versionCheck && parseInt(versionCheck, 10)) || 2;\n if (query && query.isCountRequired) {\n if (!DataUtil.isNull(data.Count)) {\n count = data.Count;\n }\n }\n if (version < 3 && data.Items) {\n data = data.Items;\n }\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args, null, query);\n }\n args.result = args.result || data;\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n return WebApiAdaptor;\n}(ODataAdaptor));\nexport { WebApiAdaptor };\n/**\n * WebMethodAdaptor can be used by DataManager to interact with web method.\n *\n * @hidden\n */\nvar WebMethodAdaptor = /** @class */ (function (_super) {\n __extends(WebMethodAdaptor, _super);\n function WebMethodAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Prepare the request body based on the query.\n * The query information can be accessed at the WebMethod using variable named `value`.\n *\n * @param {DataManager} dm\n * @param {Query} query\n * @param {Object[]} hierarchyFilters?\n * @param hierarchyFilters\n * @returns application\n */\n WebMethodAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var obj = new UrlAdaptor().processQuery(dm, query, hierarchyFilters);\n var getData = 'data';\n var data = DataUtil.parse.parseJson(obj[getData]);\n var result = {};\n var value = 'value';\n if (data.param) {\n for (var i = 0; i < data.param.length; i++) {\n var param = data.param[i];\n var key = Object.keys(param)[0];\n result[key] = param[key];\n }\n }\n result[value] = data;\n var pvtData = 'pvtData';\n var url = 'url';\n return {\n data: JSON.stringify(result),\n url: obj[url],\n pvtData: obj[pvtData],\n type: 'POST',\n contentType: 'application/json; charset=utf-8'\n };\n };\n return WebMethodAdaptor;\n}(UrlAdaptor));\nexport { WebMethodAdaptor };\n/**\n * RemoteSaveAdaptor, extended from JsonAdaptor and it is used for binding local data and performs all DataManager queries in client-side.\n * It interacts with server-side only for CRUD operations.\n *\n * @hidden\n */\nvar RemoteSaveAdaptor = /** @class */ (function (_super) {\n __extends(RemoteSaveAdaptor, _super);\n /**\n * @hidden\n */\n function RemoteSaveAdaptor() {\n var _this = _super.call(this) || this;\n setValue('beforeSend', UrlAdaptor.prototype.beforeSend, _this);\n return _this;\n }\n RemoteSaveAdaptor.prototype.insert = function (dm, data, tableName, query, position) {\n this.pvt.position = position;\n this.updateType = 'add';\n return {\n url: dm.dataSource.insertUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n value: data,\n table: tableName,\n action: 'insert'\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n RemoteSaveAdaptor.prototype.remove = function (dm, keyField, val, tableName, query) {\n _super.prototype.remove.call(this, dm, keyField, val);\n return {\n type: 'POST',\n url: dm.dataSource.removeUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n key: val,\n keyColumn: keyField,\n table: tableName,\n action: 'remove'\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n RemoteSaveAdaptor.prototype.update = function (dm, keyField, val, tableName, query) {\n this.updateType = 'update';\n this.updateKey = keyField;\n return {\n type: 'POST',\n url: dm.dataSource.updateUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n value: val,\n action: 'update',\n keyColumn: keyField,\n key: val[keyField],\n table: tableName\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n RemoteSaveAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes, e) {\n var i;\n var newData = request ? JSON.parse(request.data) : data;\n data = newData.action === 'batch' ? DataUtil.parse.parseJson(data) : data;\n if (this.updateType === 'add') {\n _super.prototype.insert.call(this, ds, data, null, null, this.pvt.position);\n }\n if (this.updateType === 'update') {\n _super.prototype.update.call(this, ds, this.updateKey, data);\n }\n this.updateType = undefined;\n if (data.added) {\n for (i = 0; i < data.added.length; i++) {\n _super.prototype.insert.call(this, ds, data.added[i]);\n }\n }\n if (data.changed) {\n for (i = 0; i < data.changed.length; i++) {\n _super.prototype.update.call(this, ds, e.key, data.changed[i]);\n }\n }\n if (data.deleted) {\n for (i = 0; i < data.deleted.length; i++) {\n _super.prototype.remove.call(this, ds, e.key, data.deleted[i]);\n }\n }\n return data;\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * Also perform the changes in the locally cached data to sync with the remote data.\n * The result is used by the batch request.\n *\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n * @param query\n * @param original\n */\n RemoteSaveAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n return {\n type: 'POST',\n url: dm.dataSource.batchUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n contentType: 'application/json; charset=utf-8',\n dataType: 'json',\n data: JSON.stringify(extend({}, {\n changed: changes.changedRecords,\n added: changes.addedRecords,\n deleted: changes.deletedRecords,\n action: 'batch',\n table: e.url,\n key: e.key\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n RemoteSaveAdaptor.prototype.addParams = function (options) {\n var urlParams = new UrlAdaptor();\n urlParams.addParams(options);\n };\n return RemoteSaveAdaptor;\n}(JsonAdaptor));\nexport { RemoteSaveAdaptor };\n/**\n * Ajax Adaptor that is extended from URL Adaptor, is used for handle data operations with user defined functions.\n *\n * @hidden\n */\nvar CustomDataAdaptor = /** @class */ (function (_super) {\n __extends(CustomDataAdaptor, _super);\n function CustomDataAdaptor(props) {\n var _this = _super.call(this) || this;\n // options replaced the default adaptor options\n _this.options = extend({}, _this.options, {\n getData: function () { },\n addRecord: function () { },\n updateRecord: function () { },\n deleteRecord: function () { },\n batchUpdate: function () { }\n });\n extend(_this.options, props || {});\n return _this;\n }\n CustomDataAdaptor.prototype.getModuleName = function () {\n return 'CustomDataAdaptor';\n };\n return CustomDataAdaptor;\n}(UrlAdaptor));\nexport { CustomDataAdaptor };\n/**\n * The GraphqlAdaptor that is extended from URL Adaptor, is used for retrieving data from the Graphql server.\n * It interacts with the Graphql server with all the DataManager Queries and performs CRUD operations.\n *\n * @hidden\n */\nvar GraphQLAdaptor = /** @class */ (function (_super) {\n __extends(GraphQLAdaptor, _super);\n function GraphQLAdaptor(options) {\n var _this = _super.call(this) || this;\n _this.opt = options;\n _this.schema = _this.opt.response;\n _this.query = _this.opt.query;\n /* eslint-disable @typescript-eslint/no-empty-function */\n // tslint:disable-next-line:no-empty\n _this.getVariables = _this.opt.getVariables ? _this.opt.getVariables : function () { };\n /* eslint-enable @typescript-eslint/no-empty-function */\n _this.getQuery = function () { return _this.query; };\n return _this;\n }\n GraphQLAdaptor.prototype.getModuleName = function () {\n return 'GraphQLAdaptor';\n };\n /**\n * Process the JSON data based on the provided queries.\n *\n * @param {DataManager} dm\n * @param {Query} query?\n * @param datamanager\n * @param query\n */\n GraphQLAdaptor.prototype.processQuery = function (datamanager, query) {\n var urlQuery = _super.prototype.processQuery.apply(this, arguments);\n var dm = JSON.parse(urlQuery.data);\n // constructing GraphQL parameters\n var keys = ['skip', 'take', 'sorted', 'table', 'select', 'where',\n 'search', 'requiresCounts', 'aggregates', 'params'];\n var temp = {};\n var str = 'searchwhereparams';\n keys.filter(function (e) {\n temp[e] = str.indexOf(e) > -1 ? JSON.stringify(dm[e]) : dm[e];\n });\n var vars = this.getVariables() || {};\n // tslint:disable-next-line:no-string-literal\n vars['datamanager'] = temp;\n var data = JSON.stringify({\n query: this.getQuery(),\n variables: vars\n });\n urlQuery.data = data;\n return urlQuery;\n };\n /**\n * Returns the data from the query processing.\n * It will also cache the data for later usage.\n *\n * @param {DataResult} data\n * @param {DataManager} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Object} request?\n * @param resData\n * @param ds\n * @param query\n * @param xhr\n * @param request\n * @returns DataResult\n */\n GraphQLAdaptor.prototype.processResponse = function (resData, ds, query, xhr, request) {\n var res = resData;\n var count;\n var aggregates;\n var result = getValue(this.schema.result, res.data);\n if (this.schema.count) {\n count = getValue(this.schema.count, res.data);\n }\n if (this.schema.aggregates) {\n aggregates = getValue(this.schema.aggregates, res.data);\n aggregates = !isNullOrUndefined(aggregates) ? DataUtil.parse.parseJson(aggregates) : aggregates;\n }\n var pvt = request.pvtData || {};\n var args = { result: result, aggregates: aggregates };\n var data = args;\n if (pvt && pvt.groups && pvt.groups.length) {\n this.getAggregateResult(pvt, data, args, null, query);\n }\n return !isNullOrUndefined(count) ? { result: args.result, count: count, aggregates: aggregates } : args.result;\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n */\n GraphQLAdaptor.prototype.insert = function () {\n var inserted = _super.prototype.insert.apply(this, arguments);\n return this.generateCrudData(inserted, 'insert');\n };\n /**\n * Prepare and returns request body which is used to update a new record in the table.\n */\n GraphQLAdaptor.prototype.update = function () {\n var inserted = _super.prototype.update.apply(this, arguments);\n return this.generateCrudData(inserted, 'update');\n };\n /**\n * Prepare and returns request body which is used to remove a new record in the table.\n */\n GraphQLAdaptor.prototype.remove = function () {\n var inserted = _super.prototype.remove.apply(this, arguments);\n return this.generateCrudData(inserted, 'remove');\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n *\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {Object} e\n * @param e.key\n * @param {Query} query\n * @param {Object} original\n */\n GraphQLAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n var batch = _super.prototype.batchRequest.apply(this, arguments);\n // tslint:disable-next-line:typedef\n var bData = JSON.parse(batch.data);\n bData.key = e.key;\n batch.data = JSON.stringify(bData);\n return this.generateCrudData(batch, 'batch');\n };\n GraphQLAdaptor.prototype.generateCrudData = function (crudData, action) {\n var parsed = JSON.parse(crudData.data);\n crudData.data = JSON.stringify({\n query: this.opt.getMutation(action),\n variables: parsed\n });\n return crudData;\n };\n return GraphQLAdaptor;\n}(UrlAdaptor));\nexport { GraphQLAdaptor };\n/**\n * Cache Adaptor is used to cache the data of the visited pages. It prevents new requests for the previously visited pages.\n * You can configure cache page size and duration of caching by using cachingPageSize and timeTillExpiration properties of the DataManager\n *\n * @hidden\n */\nvar CacheAdaptor = /** @class */ (function (_super) {\n __extends(CacheAdaptor, _super);\n /**\n * Constructor for CacheAdaptor class.\n *\n * @param {CacheAdaptor} adaptor?\n * @param {number} timeStamp?\n * @param {number} pageSize?\n * @param adaptor\n * @param timeStamp\n * @param pageSize\n * @hidden\n */\n function CacheAdaptor(adaptor, timeStamp, pageSize) {\n var _this = _super.call(this) || this;\n _this.isCrudAction = false;\n _this.isInsertAction = false;\n if (!isNullOrUndefined(adaptor)) {\n _this.cacheAdaptor = adaptor;\n }\n _this.pageSize = pageSize;\n _this.guidId = DataUtil.getGuid('cacheAdaptor');\n var obj = { keys: [], results: [] };\n window.localStorage.setItem(_this.guidId, JSON.stringify(obj));\n var guid = _this.guidId;\n if (!isNullOrUndefined(timeStamp)) {\n setInterval(function () {\n var data = DataUtil.parse.parseJson(window.localStorage.getItem(guid));\n var forDel = [];\n for (var i = 0; i < data.results.length; i++) {\n var currentTime = +new Date();\n var requestTime = +new Date(data.results[i].timeStamp);\n data.results[i].timeStamp = currentTime - requestTime;\n if (currentTime - requestTime > timeStamp) {\n forDel.push(i);\n }\n }\n for (var i = 0; i < forDel.length; i++) {\n data.results.splice(forDel[i], 1);\n data.keys.splice(forDel[i], 1);\n }\n window.localStorage.removeItem(guid);\n window.localStorage.setItem(guid, JSON.stringify(data));\n }, timeStamp);\n }\n return _this;\n }\n /**\n * It will generate the key based on the URL when we send a request to server.\n *\n * @param {string} url\n * @param {Query} query?\n * @param query\n * @hidden\n */\n CacheAdaptor.prototype.generateKey = function (url, query) {\n var queries = this.getQueryRequest(query);\n var singles = Query.filterQueryLists(query.queries, ['onSelect', 'onPage', 'onSkip', 'onTake', 'onRange']);\n var key = url;\n var page = 'onPage';\n if (page in singles) {\n key += singles[page].pageIndex;\n }\n queries.sorts.forEach(function (obj) {\n key += obj.e.direction + obj.e.fieldName;\n });\n queries.groups.forEach(function (obj) {\n key += obj.e.fieldName;\n });\n queries.searches.forEach(function (obj) {\n key += obj.e.searchKey;\n });\n for (var filter = 0; filter < queries.filters.length; filter++) {\n var currentFilter = queries.filters[filter];\n if (currentFilter.e.isComplex) {\n var newQuery = query.clone();\n newQuery.queries = [];\n for (var i = 0; i < currentFilter.e.predicates.length; i++) {\n newQuery.queries.push({ fn: 'onWhere', e: currentFilter.e.predicates[i], filter: query.queries.filter });\n }\n key += currentFilter.e.condition + this.generateKey(url, newQuery);\n }\n else {\n key += currentFilter.e.field + currentFilter.e.operator + currentFilter.e.value;\n }\n }\n return key;\n };\n /**\n * Process the query to generate request body.\n * If the data is already cached, it will return the cached data.\n *\n * @param {DataManager} dm\n * @param {Query} query?\n * @param {Object[]} hierarchyFilters?\n * @param query\n * @param hierarchyFilters\n */\n CacheAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var key = this.generateKey(dm.dataSource.url, query);\n var cachedItems = DataUtil.parse.parseJson(window.localStorage.getItem(this.guidId));\n var data = cachedItems ? cachedItems.results[cachedItems.keys.indexOf(key)] : null;\n if (data != null && !this.isCrudAction && !this.isInsertAction) {\n return data;\n }\n this.isCrudAction = null;\n this.isInsertAction = null;\n /* eslint-disable prefer-spread */\n return this.cacheAdaptor.processQuery.apply(this.cacheAdaptor, [].slice.call(arguments, 0));\n /* eslint-enable prefer-spread */\n };\n /**\n * Returns the data from the query processing.\n * It will also cache the data for later usage.\n *\n * @param {DataResult} data\n * @param {DataManager} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @param ds\n * @param query\n * @param xhr\n * @param request\n * @param changes\n */\n CacheAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n if (this.isInsertAction || (request && this.cacheAdaptor.options.batch &&\n DataUtil.endsWith(request.url, this.cacheAdaptor.options.batch) && request.type.toLowerCase() === 'post')) {\n return this.cacheAdaptor.processResponse(data, ds, query, xhr, request, changes);\n }\n /* eslint-disable prefer-spread */\n data = this.cacheAdaptor.processResponse.apply(this.cacheAdaptor, [].slice.call(arguments, 0));\n /* eslint-enable prefer-spread */\n var key = query ? this.generateKey(ds.dataSource.url, query) : ds.dataSource.url;\n var obj = {};\n obj = DataUtil.parse.parseJson(window.localStorage.getItem(this.guidId));\n var index = obj.keys.indexOf(key);\n if (index !== -1) {\n obj.results.splice(index, 1);\n obj.keys.splice(index, 1);\n }\n obj.results[obj.keys.push(key) - 1] = { keys: key, result: data.result, timeStamp: new Date(), count: data.count };\n while (obj.results.length > this.pageSize) {\n obj.results.splice(0, 1);\n obj.keys.splice(0, 1);\n }\n window.localStorage.setItem(this.guidId, JSON.stringify(obj));\n return data;\n };\n /**\n * Method will trigger before send the request to server side. Used to set the custom header or modify the request options.\n *\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings?\n * @param settings\n */\n CacheAdaptor.prototype.beforeSend = function (dm, request, settings) {\n if (!isNullOrUndefined(this.cacheAdaptor.options.batch) && DataUtil.endsWith(settings.url, this.cacheAdaptor.options.batch)\n && settings.type.toLowerCase() === 'post') {\n request.setRequestHeader('Accept', this.cacheAdaptor.options.multipartAccept);\n }\n if (!dm.dataSource.crossDomain) {\n request.setRequestHeader('Accept', this.cacheAdaptor.options.accept);\n }\n };\n /**\n * Updates existing record and saves the changes to the table.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName\n */\n CacheAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n this.isCrudAction = true;\n return this.cacheAdaptor.update(dm, keyField, value, tableName);\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n *\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n * @param tableName\n */\n CacheAdaptor.prototype.insert = function (dm, data, tableName) {\n this.isInsertAction = true;\n return this.cacheAdaptor.insert(dm, data, tableName);\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @param tableName\n */\n CacheAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n this.isCrudAction = true;\n return this.cacheAdaptor.remove(dm, keyField, value, tableName);\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n *\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n CacheAdaptor.prototype.batchRequest = function (dm, changes, e) {\n return this.cacheAdaptor.batchRequest(dm, changes, e);\n };\n return CacheAdaptor;\n}(UrlAdaptor));\nexport { CacheAdaptor };\n","import { isNullOrUndefined, classList, createElement, Browser } from '@syncfusion/ej2-base';\nvar globalTimeOut = {};\nvar DEFT_MAT_WIDTH = 30;\nvar DEFT_MAT3_WIDTH = 30;\nvar DEFT_FAB_WIDTH = 30;\nvar DEFT_FLUENT_WIDTH = 30;\nvar DEFT_BOOT_WIDTH = 30;\nvar DEFT_BOOT4_WIDTH = 36;\nvar DEFT_BOOT5_WIDTH = 36;\nvar CLS_SHOWSPIN = 'e-spin-show';\nvar CLS_HIDESPIN = 'e-spin-hide';\nvar CLS_MATERIALSPIN = 'e-spin-material';\nvar CLS_MATERIAL3SPIN = 'e-spin-material3';\nvar CLS_FABRICSPIN = 'e-spin-fabric';\nvar CLS_FLUENTSPIN = 'e-spin-fluent';\nvar CLS_TAILWINDSPIN = 'e-spin-tailwind';\nvar CLS_BOOTSPIN = 'e-spin-bootstrap';\nvar CLS_BOOT4SPIN = 'e-spin-bootstrap4';\nvar CLS_BOOT5SPIN = 'e-spin-bootstrap5';\nvar CLS_HIGHCONTRASTSPIN = 'e-spin-high-contrast';\nvar CLS_SPINWRAP = 'e-spinner-pane';\nvar CLS_SPININWRAP = 'e-spinner-inner';\nvar CLS_SPINCIRCLE = 'e-path-circle';\nvar CLS_SPINARC = 'e-path-arc';\nvar CLS_SPINLABEL = 'e-spin-label';\nvar CLS_SPINTEMPLATE = 'e-spin-template';\nvar spinTemplate = null;\nvar spinCSSClass = null;\n// eslint-disable-next-line\n/**\n * Function to change the Spinners in a page globally from application end.\n * ```\n * E.g : blazorSpinner({ action: \"Create\", options: {target: targetElement}, type: \"\" });\n * ```\n *\n * @param {string} action - specifies the string\n * @param {CreateArgs} options - specifies the args\n * @param {string} target - specifies the target\n * @param {string} type - specifes the type\n * @returns {void}\n * @private\n */\nexport function Spinner(action, options, target, type) {\n switch (action) {\n case 'Create':\n /* eslint-disable */\n var element = document.querySelector(options.target);\n var args = { type: type, target: element, cssClass: options.cssClass,\n label: options.label, width: options.width };\n /* eslint-enable */\n createSpinner(args);\n break;\n case 'Show':\n showSpinner(document.querySelector(target));\n break;\n case 'Hide':\n hideSpinner(document.querySelector(target));\n break;\n case 'Set':\n // eslint-disable-next-line\n var setArgs = { cssClass: options.cssClass, type: type };\n setSpinner(setArgs);\n break;\n }\n}\n/**\n * Create a spinner for the specified target element.\n * ```\n * E.g : createSpinner({ target: targetElement, width: '34px', label: 'Loading..' });\n * ```\n *\n * @param {SpinnerArgs} args - specifies the args\n * @param {CreateElementArgs} internalCreateElement - specifis the element args\n * @returns {void}\n * @private\n */\nexport function createSpinner(args, internalCreateElement) {\n var _a;\n if (!args.target) {\n return;\n }\n var radius;\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n // eslint-disable-next-line\n var container = create_spinner_container(args.target, makeElement);\n if (!isNullOrUndefined(args.cssClass)) {\n var classNames = args.cssClass.split(' ').filter(function (className) { return className.trim() !== ''; });\n (_a = container.wrap.classList).add.apply(_a, classNames);\n }\n if (!isNullOrUndefined(args.template) || !isNullOrUndefined(spinTemplate)) {\n var template = !isNullOrUndefined(args.template) ? args.template : spinTemplate;\n container.wrap.classList.add(CLS_SPINTEMPLATE);\n replaceContent(container.wrap, template, spinCSSClass);\n }\n else {\n var theme = !isNullOrUndefined(args.type) ? args.type : getTheme(container.wrap);\n var width = !isNullOrUndefined(args.width) ? args.width : undefined;\n radius = calculateRadius(width, theme);\n setTheme(theme, container.wrap, radius, makeElement);\n if (!isNullOrUndefined(args.label)) {\n createLabel(container.inner_wrap, args.label, makeElement);\n }\n }\n container.wrap.classList.add(CLS_HIDESPIN);\n container = null;\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {string} label - specifies the string\n * @param {createElementParams} makeElement - specifies the element\n * @returns {HTMLElement} - returns the element\n */\nfunction createLabel(container, label, makeElement) {\n var labelEle = makeElement('div', {});\n labelEle.classList.add(CLS_SPINLABEL);\n labelEle.innerHTML = label;\n container.appendChild(labelEle);\n return labelEle;\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {number} radius - specifies the radius\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\nfunction createMaterialSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[\"\" + uniqueID] = { timeOut: 0, type: 'Material', radius: radius };\n create_material_element(container, uniqueID, makeElement, CLS_MATERIALSPIN);\n mat_calculate_attributes(radius, container, 'Material', CLS_MATERIALSPIN);\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {number} radius - specifies the radius\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\nfunction createMaterial3Spinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[\"\" + uniqueID] = { timeOut: 0, type: 'Material3', radius: radius };\n create_material_element(container, uniqueID, makeElement, CLS_MATERIAL3SPIN);\n mat_calculate_attributes(radius, container, 'Material3', CLS_MATERIAL3SPIN);\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {number} radius - specifies the radius\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\nfunction createBootstrap4Spinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[\"\" + uniqueID] = { timeOut: 0, type: 'Bootstrap4', radius: radius };\n create_material_element(container, uniqueID, makeElement, CLS_BOOT4SPIN);\n mat_calculate_attributes(radius, container, 'Bootstrap4', CLS_BOOT4SPIN);\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {number} radius - specifies the radius\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\nfunction createBootstrap5Spinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[\"\" + uniqueID] = { timeOut: 0, type: 'Bootstrap5', radius: radius };\n create_material_element(container, uniqueID, makeElement, CLS_BOOT5SPIN);\n mat_calculate_attributes(radius, container, 'Bootstrap5', CLS_BOOT5SPIN);\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {string} uniqueID - specifies the id.\n * @param {number} radius - specifies the radius\n * @returns {void}\n */\nfunction startMatAnimate(container, uniqueID, radius) {\n var globalObject = {};\n var timeOutVar = 0;\n globalTimeOut[\"\" + uniqueID].timeOut = 0;\n globalObject[\"\" + uniqueID] = globalVariables(uniqueID, radius, 0, 0);\n // eslint-disable-next-line\n var spinnerInfo = { uniqueID: uniqueID, container: container, globalInfo: globalObject, timeOutVar: timeOutVar };\n animateMaterial(spinnerInfo);\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {number} radius - specifies the radius\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\nfunction createFabricSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[\"\" + uniqueID] = { timeOut: 0, type: 'Fabric', radius: radius };\n create_fabric_element(container, uniqueID, CLS_FABRICSPIN, makeElement);\n fb_calculate_attributes(radius, container, CLS_FABRICSPIN);\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {number} radius - specifies the radius\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\nfunction createFluentSinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[\"\" + uniqueID] = { timeOut: 0, type: 'Fluent', radius: radius };\n create_fabric_element(container, uniqueID, CLS_FLUENTSPIN, makeElement);\n fb_calculate_attributes(radius, container, CLS_FLUENTSPIN);\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {number} radius - specifies the radius\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\nfunction createTailwindSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[\"\" + uniqueID] = { timeOut: 0, type: 'Tailwind', radius: radius };\n create_fabric_element(container, uniqueID, CLS_TAILWINDSPIN, makeElement);\n fb_calculate_attributes(radius, container, CLS_TAILWINDSPIN);\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {number} radius - specifies the radius\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\nfunction createHighContrastSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[\"\" + uniqueID] = { timeOut: 0, type: 'HighContrast', radius: radius };\n create_fabric_element(container, uniqueID, CLS_HIGHCONTRASTSPIN, makeElement);\n fb_calculate_attributes(radius, container, CLS_HIGHCONTRASTSPIN);\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @returns {string} - returns the string\n */\nfunction getTheme(container) {\n var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n return theme.replace(/['\"]+/g, '');\n}\n/**\n *\n * @param {string} theme - specifies the theme\n * @param {HTMLElement} container - specifies the element\n * @param {number} radius - specifies the radius\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\nfunction setTheme(theme, container, radius, makeElement) {\n var innerContainer = container.querySelector('.' + CLS_SPININWRAP);\n var svg = innerContainer.querySelector('svg');\n if (!isNullOrUndefined(svg)) {\n innerContainer.removeChild(svg);\n }\n switch (theme) {\n case 'Material':\n createMaterialSpinner(innerContainer, radius, makeElement);\n break;\n case 'Material3':\n createMaterial3Spinner(innerContainer, radius, makeElement);\n break;\n case 'Fabric':\n createFabricSpinner(innerContainer, radius, makeElement);\n break;\n case 'Fluent':\n createFluentSinner(innerContainer, radius, makeElement);\n break;\n case 'Bootstrap':\n createBootstrapSpinner(innerContainer, radius, makeElement);\n break;\n case 'HighContrast':\n createHighContrastSpinner(innerContainer, radius, makeElement);\n break;\n case 'Bootstrap4':\n createBootstrap4Spinner(innerContainer, radius, makeElement);\n break;\n case 'Bootstrap5':\n createBootstrap5Spinner(innerContainer, radius, makeElement);\n break;\n case 'Tailwind':\n case 'Tailwind-dark':\n createTailwindSpinner(innerContainer, radius, makeElement);\n break;\n }\n}\n/**\n *\n * @param {HTMLElement} innerContainer - specifies the element\n * @param {number} radius - specifies the radius\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\nfunction createBootstrapSpinner(innerContainer, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[\"\" + uniqueID] = { timeOut: 0, type: 'Bootstrap', radius: radius };\n create_bootstrap_element(innerContainer, uniqueID, makeElement);\n boot_calculate_attributes(innerContainer, radius);\n}\n/**\n *\n * @param {HTMLElement} innerContainer - specifies the element\n * @param {string} uniqueID - specifies the id\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\n// eslint-disable-next-line\nfunction create_bootstrap_element(innerContainer, uniqueID, makeElement) {\n var svgBoot = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n var viewBoxValue = 64;\n var trans = 32;\n var defaultRadius = 2;\n svgBoot.setAttribute('id', uniqueID);\n svgBoot.setAttribute('class', CLS_BOOTSPIN);\n svgBoot.setAttribute('viewBox', '0 0 ' + viewBoxValue + ' ' + viewBoxValue);\n innerContainer.insertBefore(svgBoot, innerContainer.firstChild);\n for (var item = 0; item <= 7; item++) {\n var bootCircle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n bootCircle.setAttribute('class', CLS_SPINCIRCLE + '_' + item);\n bootCircle.setAttribute('r', defaultRadius + '');\n bootCircle.setAttribute('transform', 'translate(' + trans + ',' + trans + ')');\n svgBoot.appendChild(bootCircle);\n }\n}\n/**\n *\n * @param {HTMLElement} innerContainer - specifies the element\n * @param {number} radius - specifies the radius\n * @returns {void}\n */\n// eslint-disable-next-line\nfunction boot_calculate_attributes(innerContainer, radius) {\n var svg = innerContainer.querySelector('svg.e-spin-bootstrap');\n var x = 0;\n var y = 0;\n var rad = 24;\n svg.style.width = svg.style.height = radius + 'px';\n var startArc = 90;\n for (var item = 0; item <= 7; item++) {\n var start = defineArcPoints(x, y, rad, startArc);\n var circleEle = svg.querySelector('.' + CLS_SPINCIRCLE + '_' + item);\n circleEle.setAttribute('cx', start.x + '');\n circleEle.setAttribute('cy', start.y + '');\n startArc = startArc >= 360 ? 0 : startArc;\n startArc = startArc + 45;\n }\n}\n/**\n *\n * @param {number} begin - specifies the number\n * @param {number} stop - specifirs the number\n * @returns {number[]} - returns the array of number\n */\nfunction generateSeries(begin, stop) {\n var series = [];\n var start = begin;\n var end = stop;\n // eslint-disable-next-line\n var increment = false, count = 1;\n formSeries(start);\n /**\n *\n * @param {number} i - specifies the number\n * @returns {void}\n */\n function formSeries(i) {\n series.push(i);\n if (i !== end || count === 1) {\n if (i <= start && i > 1 && !increment) {\n i = parseFloat((i - 0.2).toFixed(2));\n }\n else if (i === 1) {\n i = 7;\n i = parseFloat((i + 0.2).toFixed(2));\n increment = true;\n }\n else if (i < 8 && increment) {\n i = parseFloat((i + 0.2).toFixed(2));\n if (i === 8) {\n increment = false;\n }\n }\n else if (i <= 8 && !increment) {\n i = parseFloat((i - 0.2).toFixed(2));\n }\n ++count;\n formSeries(i);\n }\n }\n return series;\n}\n/**\n *\n * @param {HTMLElement} innerContainer - specifies the element\n * @returns {void}\n */\nfunction animateBootstrap(innerContainer) {\n var svg = innerContainer.querySelector('svg.e-spin-bootstrap');\n var id = svg.getAttribute('id');\n for (var i = 1; i <= 8; i++) {\n var circleEle = (innerContainer.getElementsByClassName('e-path-circle_' +\n (i === 8 ? 0 : i))[0]);\n rotation(circleEle, i, i, generateSeries(i, i), id);\n }\n /**\n *\n * @param {SVGCircleElement} circle - specifies the circl element\n * @param {number} start - specifies the number\n * @param {number} end - specifies the end number\n * @param {number} series - specifies the series\n * @param {string} id - specifies the id\n * @returns {void}\n */\n function rotation(circle, start, end, series, id) {\n var count = 0;\n boot_animate(start);\n // eslint-disable-next-line\n function boot_animate(radius) {\n if (globalTimeOut[\"\" + id].isAnimate) {\n ++count;\n circle.setAttribute('r', radius + '');\n if (count >= series.length) {\n count = 0;\n }\n // eslint-disable-next-line\n globalTimeOut[id].timeOut = setTimeout(boot_animate.bind(null, series[count]), 18);\n }\n }\n }\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {string} template - specifies the template\n * @param {string} cssClass - specifies the css class.\n * @returns {void}\n */\nfunction replaceContent(container, template, cssClass) {\n if (!isNullOrUndefined(cssClass)) {\n container.classList.add(cssClass);\n }\n var inner = container.querySelector('.e-spinner-inner');\n inner.innerHTML = template;\n}\n/**\n *\n * @param {string} width - specifies the width\n * @param {string} theme - specifies the string\n * @returns {number} - returns the number\n */\nfunction calculateRadius(width, theme) {\n var defaultSize;\n switch (theme) {\n case 'Material':\n defaultSize = DEFT_MAT_WIDTH;\n break;\n case 'Material3':\n defaultSize = DEFT_MAT3_WIDTH;\n break;\n case 'Fabric':\n defaultSize = DEFT_FAB_WIDTH;\n break;\n case 'Tailwind':\n case 'Tailwind-dark':\n defaultSize = DEFT_FAB_WIDTH;\n break;\n case 'Fluent':\n defaultSize = DEFT_FLUENT_WIDTH;\n break;\n case 'Bootstrap4':\n defaultSize = DEFT_BOOT4_WIDTH;\n break;\n case 'Bootstrap5':\n defaultSize = DEFT_BOOT5_WIDTH;\n break;\n default:\n defaultSize = DEFT_BOOT_WIDTH;\n }\n width = width ? parseFloat(width + '') : defaultSize;\n return theme === 'Bootstrap' ? width : width / 2;\n}\n/**\n *\n * @param {string} id - specifies the id\n * @param {number} radius - specifies the radius\n * @param {number} count - specifies the number count\n * @param {number} previousId - specifies the previous id\n * @returns {GlobalVariables} - returns the variables\n */\nfunction globalVariables(id, radius, count, previousId) {\n return {\n radius: radius,\n count: count,\n previousId: previousId\n };\n}\n/**\n * @returns {string} - returns the string\n */\n// eslint-disable-next-line\nfunction random_generator() {\n var random = '';\n var combine = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n for (var i = 0; i < 5; i++) {\n random += combine.charAt(Math.floor(Math.random() * combine.length));\n }\n return random;\n}\n/**\n *\n * @param {HTMLElement} innerCon - specifies the element\n * @param {string} uniqueID - specifies the unique id\n * @param {string} themeClass - specifies the string\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\n// eslint-disable-next-line\nfunction create_fabric_element(innerCon, uniqueID, themeClass, makeElement) {\n var svgFabric = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svgFabric.setAttribute('id', uniqueID);\n svgFabric.setAttribute('class', themeClass);\n var fabricCirclePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n fabricCirclePath.setAttribute('class', CLS_SPINCIRCLE);\n var fabricCircleArc = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n fabricCircleArc.setAttribute('class', CLS_SPINARC);\n innerCon.insertBefore(svgFabric, innerCon.firstChild);\n svgFabric.appendChild(fabricCirclePath);\n svgFabric.appendChild(fabricCircleArc);\n}\n/**\n *\n * @param {HTMLElement} innerContainer - specifies the element\n * @param {string} uniqueID - specifies the unique id\n * @param {createElementParams} makeElement - specifies the element\n * @param {string} cls - specifies the string\n * @returns {void}\n */\n// eslint-disable-next-line\nfunction create_material_element(innerContainer, uniqueID, makeElement, cls) {\n var svgMaterial = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n var matCirclePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n svgMaterial.setAttribute('class', cls);\n svgMaterial.setAttribute('id', uniqueID);\n matCirclePath.setAttribute('class', CLS_SPINCIRCLE);\n innerContainer.insertBefore(svgMaterial, innerContainer.firstChild);\n svgMaterial.appendChild(matCirclePath);\n}\n/**\n *\n * @param {HTMLElement} target - specifies the element\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\n// eslint-disable-next-line\nfunction create_spinner_container(target, makeElement) {\n var spinnerContainer = makeElement('div', {});\n var spinnerInnerContainer = makeElement('div', {});\n spinnerContainer.classList.add(CLS_SPINWRAP);\n spinnerInnerContainer.classList.add(CLS_SPININWRAP);\n target.appendChild(spinnerContainer);\n spinnerContainer.appendChild(spinnerInnerContainer);\n // eslint-disable-next-line\n return { wrap: spinnerContainer, inner_wrap: spinnerInnerContainer };\n}\n/**\n *\n * @param {SpinnerInfo} spinnerInfo - specifies the spinner\n * @returns {void}\n */\nfunction animateMaterial(spinnerInfo) {\n var start = 1;\n var end = 149;\n var duration = 1333;\n var max = 75;\n createCircle(start, end, easeAnimation, duration, spinnerInfo.globalInfo[spinnerInfo.uniqueID].count, max, spinnerInfo);\n spinnerInfo.globalInfo[spinnerInfo.uniqueID].count = ++spinnerInfo.globalInfo[spinnerInfo.uniqueID].count % 4;\n}\n/**\n *\n * @param {number} start - specifies the number\n * @param {number} end - specifies the end number\n * @param {Function} easing - specifies the function\n * @param {number} duration - specifies the duration\n * @param {number} count - specifies the count\n * @param {number} max - specifies the max number\n * @param {SpinnerInfo} spinnerInfo - specifies the spinner info\n * @returns {void}\n */\nfunction createCircle(start, end, easing, duration, count, max, spinnerInfo) {\n var id = ++spinnerInfo.globalInfo[spinnerInfo.uniqueID].previousId;\n var startTime = new Date().getTime();\n var change = end - start;\n var diameter = getSize((spinnerInfo.globalInfo[spinnerInfo.uniqueID].radius * 2) + '');\n var strokeSize = getStrokeSize(diameter);\n var rotate = -90 * (spinnerInfo.globalInfo[spinnerInfo.uniqueID].count || 0);\n mat_animation(spinnerInfo);\n // eslint-disable-next-line\n function mat_animation(spinnerInfo) {\n var currentTime = Math.max(0, Math.min(new Date().getTime() - startTime, duration));\n updatePath(easing(currentTime, start, change, duration), spinnerInfo.container);\n if (id === spinnerInfo.globalInfo[spinnerInfo.uniqueID].previousId && currentTime < duration) {\n // eslint-disable-next-line\n globalTimeOut[spinnerInfo.uniqueID].timeOut = setTimeout(mat_animation.bind(null, spinnerInfo), 1);\n }\n else {\n animateMaterial(spinnerInfo);\n }\n }\n /**\n *\n * @param {number} value - specifies the number value\n * @param {HTMLElement} container - specifies the container\n * @returns {void}\n */\n function updatePath(value, container) {\n if (!isNullOrUndefined(container.querySelector('svg.e-spin-material')) || !isNullOrUndefined(container.querySelector('svg.e-spin-material3'))) {\n var svg = void 0;\n if (!isNullOrUndefined(container.querySelector('svg.e-spin-material')) && !isNullOrUndefined(container.querySelector('svg.e-spin-material').querySelector('path.e-path-circle'))) {\n svg = container.querySelector('svg.e-spin-material');\n }\n else if (!isNullOrUndefined(container.querySelector('svg.e-spin-material3')) && !isNullOrUndefined(container.querySelector('svg.e-spin-material3').querySelector('path.e-path-circle'))) {\n svg = container.querySelector('svg.e-spin-material3');\n }\n if (!isNullOrUndefined(svg)) {\n var path = svg.querySelector('path.e-path-circle');\n path.setAttribute('stroke-dashoffset', getDashOffset(diameter, strokeSize, value, max) + '');\n path.setAttribute('transform', 'rotate(' + (rotate) + ' ' + diameter / 2 + ' ' + diameter / 2 + ')');\n }\n }\n }\n}\n/**\n *\n * @param {number} radius - specifies the number\n * @param {HTMLElement} container - specifies the element\n * @param {string} type - specifies the string type\n * @param {string} cls - specifies the string\n * @returns {void}\n */\n// eslint-disable-next-line\nfunction mat_calculate_attributes(radius, container, type, cls) {\n var diameter = radius * 2;\n var svg = container.querySelector('svg.' + cls);\n var path = svg.querySelector('path.e-path-circle');\n var strokeSize = getStrokeSize(diameter);\n var transformOrigin = (diameter / 2) + 'px';\n svg.setAttribute('viewBox', '0 0 ' + diameter + ' ' + diameter);\n svg.style.width = svg.style.height = diameter + 'px';\n svg.style.transformOrigin = transformOrigin + ' ' + transformOrigin + ' ' + transformOrigin;\n path.setAttribute('d', drawArc(diameter, strokeSize));\n if (type === 'Material' || type === 'Material3') {\n path.setAttribute('stroke-width', strokeSize + '');\n path.setAttribute('stroke-dasharray', ((diameter - strokeSize) * Math.PI * 0.75) + '');\n path.setAttribute('stroke-dashoffset', getDashOffset(diameter, strokeSize, 1, 75) + '');\n }\n}\n/**\n *\n * @param {string} value - specifies the value\n * @returns {number} - returns the number\n */\nfunction getSize(value) {\n var parsed = parseFloat(value);\n return parsed;\n}\n/**\n *\n * @param {number} diameter - specifies the diameter\n * @param {number} strokeSize - specifies the size\n * @returns {string} - returns the string\n */\nfunction drawArc(diameter, strokeSize) {\n var radius = diameter / 2;\n var offset = strokeSize / 2;\n return 'M' + radius + ',' + offset\n + 'A' + (radius - offset) + ',' + (radius - offset) + ' 0 1 1 ' + offset + ',' + radius;\n}\n/**\n *\n * @param {number} diameter - specifies the number\n * @returns {number} - returns the number\n */\nfunction getStrokeSize(diameter) {\n return 10 / 100 * diameter;\n}\n/**\n *\n * @param {number} diameter - specifies the number\n * @param {number} strokeSize - specifies the stroke size\n * @param {number} value - specifies the value\n * @param {number} max - specifies the max number\n * @returns {number} - returns the number\n */\nfunction getDashOffset(diameter, strokeSize, value, max) {\n return (diameter - strokeSize) * Math.PI * ((3 * (max) / 100) - (value / 100));\n}\n/**\n *\n * @param {number} current - specifies the number\n * @param {number} start - specifies the stroke size\n * @param {number} change - specifies the value\n * @param {number} duration - specifies the max number\n * @returns {number} - returns the number\n */\nfunction easeAnimation(current, start, change, duration) {\n var timestamp = (current /= duration) * current;\n var timecount = timestamp * current;\n return start + change * (6 * timecount * timestamp + -15 * timestamp * timestamp + 10 * timecount);\n}\n/**\n *\n * @param {number} radius - specifies the number\n * @param {HTMLElement} innerConainer - specifies the element\n * @param {string} trgClass - specifies the class\n * @returns {void}\n */\n// eslint-disable-next-line\nfunction fb_calculate_attributes(radius, innerConainer, trgClass) {\n var centerX = radius;\n var centerY = radius;\n var diameter = radius * 2;\n // eslint-disable-next-line\n var startArc = 315, endArc = 45;\n var svg = innerConainer.querySelector('.' + trgClass);\n var circle = svg.querySelector('.e-path-circle');\n var path = svg.querySelector('.e-path-arc');\n var transformOrigin = (diameter / 2) + 'px';\n circle.setAttribute('d', defineCircle(centerX, centerY, radius));\n path.setAttribute('d', defineArc(centerX, centerY, radius, startArc, endArc));\n svg.setAttribute('viewBox', '0 0 ' + diameter + ' ' + diameter);\n svg.style.transformOrigin = transformOrigin + ' ' + transformOrigin + ' ' + transformOrigin;\n svg.style.width = svg.style.height = diameter + 'px';\n}\n/**\n *\n * @param {number} centerX - specifies the number\n * @param {number} centerY - specifies the stroke size\n * @param {number} radius - specifies the value\n * @param {number} angle - specifies the max number\n * @returns {number} - returns the number\n */\nfunction defineArcPoints(centerX, centerY, radius, angle) {\n var radians = (angle - 90) * Math.PI / 180.0;\n return {\n x: centerX + (radius * Math.cos(radians)),\n y: centerY + (radius * Math.sin(radians))\n };\n}\n/**\n *\n * @param {number} x - specifies the number\n * @param {number} y - specifies the stroke size\n * @param {number} radius - specifies the radius\n * @param {number} startArc - specifies the value\n * @param {number} endArc - specifies the max number\n * @returns {number} - returns the number\n */\nfunction defineArc(x, y, radius, startArc, endArc) {\n var start = defineArcPoints(x, y, radius, endArc);\n var end = defineArcPoints(x, y, radius, startArc);\n var d = [\n 'M', start.x, start.y,\n 'A', radius, radius, 0, 0, 0, end.x, end.y\n ].join(' ');\n return d;\n}\n/**\n *\n * @param {number} x - specifies the number\n * @param {number} y - specifies the stroke size\n * @param {number} radius - specifies the value\n * @returns {string} - returns the string\n */\nfunction defineCircle(x, y, radius) {\n var d = [\n 'M', x, y,\n 'm', -radius, 0,\n 'a', radius, radius, 0, 1, 0, radius * 2, 0,\n 'a', radius, radius, 0, 1, 0, -radius * 2, 0\n ].join(' ');\n return d;\n}\n/**\n * Function to show the Spinner.\n *\n * @param {HTMLElement} container - Specify the target of the Spinner.\n * @returns {void}\n * @private\n */\nexport function showSpinner(container) {\n showHideSpinner(container, false);\n container = null;\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {boolean} isHide - specifies the boolean\n * @returns {void}\n */\nfunction showHideSpinner(container, isHide) {\n var spinnerWrap;\n if (container) {\n if (container.classList.contains(CLS_SPINWRAP)) {\n spinnerWrap = container;\n }\n else {\n var spinWrapCollection = container.querySelectorAll('.' + CLS_SPINWRAP);\n if (Browser.isIE) {\n for (var i = 0; i < spinWrapCollection.length; i++) {\n // eslint-disable-next-line\n if (spinWrapCollection[i].parentElement && spinWrapCollection[i].parentElement === container) {\n // eslint-disable-next-line\n spinnerWrap = spinWrapCollection[i];\n break;\n }\n }\n }\n else {\n spinnerWrap = Array.from(spinWrapCollection).find(function (wrap) { return wrap.parentElement === container; }) || null;\n }\n }\n }\n if (container && spinnerWrap) {\n var inner = spinnerWrap.querySelector('.' + CLS_SPININWRAP);\n var spinCheck = void 0;\n // eslint-disable-next-line\n spinCheck = isHide ? !spinnerWrap.classList.contains(CLS_SPINTEMPLATE) && !spinnerWrap.classList.contains(CLS_HIDESPIN) :\n !spinnerWrap.classList.contains(CLS_SPINTEMPLATE) && !spinnerWrap.classList.contains(CLS_SHOWSPIN);\n if (spinCheck) {\n var svgEle = spinnerWrap.querySelector('svg');\n if (isNullOrUndefined(svgEle)) {\n return;\n }\n var id = svgEle.getAttribute('id');\n globalTimeOut[\"\" + id].isAnimate = !isHide;\n switch (globalTimeOut[\"\" + id].type) {\n case 'Material':\n case 'Material3':\n // eslint-disable-next-line\n isHide ? clearTimeout(globalTimeOut[id].timeOut) : startMatAnimate(inner, id, globalTimeOut[id].radius);\n break;\n case 'Bootstrap':\n // eslint-disable-next-line\n isHide ? clearTimeout(globalTimeOut[id].timeOut) : animateBootstrap(inner);\n break;\n }\n }\n // eslint-disable-next-line\n isHide ? classList(spinnerWrap, [CLS_HIDESPIN], [CLS_SHOWSPIN]) : classList(spinnerWrap, [CLS_SHOWSPIN], [CLS_HIDESPIN]);\n container = null;\n }\n}\n/**\n * Function to hide the Spinner.\n *\n * @param {HTMLElement} container - Specify the target of the Spinner.\n * @returns {void}\n * @private\n */\nexport function hideSpinner(container) {\n showHideSpinner(container, true);\n container = null;\n}\n// eslint-disable-next-line\n/**\n * Function to change the Spinners in a page globally from application end.\n * ```\n * E.g : setSpinner({ cssClass: 'custom-css'; type: 'Material' });\n * ```\n *\n * @param {SetSpinnerArgs} args - specifies the args\n * @param {createElementParams} internalCreateElement - specifies the element params\n * @returns {void}\n * @private\n */\nexport function setSpinner(args, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (args.template !== undefined) {\n spinTemplate = args.template;\n if (args.template !== undefined) {\n spinCSSClass = args.cssClass;\n }\n }\n var container = document.querySelectorAll('.' + CLS_SPINWRAP);\n for (var index = 0; index < container.length; index++) {\n ensureTemplate(args.template, container[index], args.type, args.cssClass, makeElement);\n }\n}\n/**\n *\n * @param {string} template - specifies the string\n * @param {HTMLElement} container - specifies the container\n * @param {string} theme - specifies the theme\n * @param {string} cssClass - specifies the string class\n * @param {createElementParams} makeEle - specifies the params\n * @returns {void}\n */\nfunction ensureTemplate(template, container, theme, cssClass, makeEle) {\n if (isNullOrUndefined(template) && !container.classList.contains(CLS_SPINTEMPLATE)) {\n replaceTheme(container, theme, cssClass, makeEle);\n if (container.classList.contains(CLS_SHOWSPIN)) {\n container.classList.remove(CLS_SHOWSPIN);\n showSpinner(container);\n }\n else {\n container.classList.remove(CLS_HIDESPIN);\n hideSpinner(container);\n }\n }\n else {\n spinTemplate = template;\n if (!isNullOrUndefined(cssClass)) {\n spinCSSClass = cssClass;\n }\n if (!isNullOrUndefined(spinTemplate)) {\n replaceContent(container, spinTemplate, spinCSSClass);\n }\n }\n}\n/**\n *\n * @param {HTMLElement} container - specifies the container\n * @param {string} theme - specifies the theme\n * @param {string} cssClass - specifies the string class\n * @param {createElementParams} makeEle - specifies the params\n * @returns {void}\n */\nfunction replaceTheme(container, theme, cssClass, makeEle) {\n if (!isNullOrUndefined(cssClass)) {\n container.classList.add(cssClass);\n }\n var svgElement = container.querySelector('svg');\n if (!isNullOrUndefined(svgElement)) {\n var radius = theme === 'Bootstrap' ? parseFloat(svgElement.style.height) : parseFloat(svgElement.style.height) / 2;\n var classNames = svgElement.getAttribute('class');\n var svgClassList = classNames.split(/\\s/);\n if (svgClassList.indexOf('e-spin-material') >= 0) {\n var id = svgElement.getAttribute('id');\n clearTimeout(globalTimeOut[\"\" + id].timeOut);\n }\n setTheme(theme, container, radius, makeEle);\n }\n}\n","/**\n * FloatLable Moduel\n * Specifies whether to display the floating label above the input element.\n */\nimport { removeClass, addClass, detach } from '@syncfusion/ej2-base';\nimport { attributes, isNullOrUndefined, createElement, getUniqueID } from '@syncfusion/ej2-base';\nvar FLOATLINE = 'e-float-line';\nvar FLOATTEXT = 'e-float-text';\nvar LABELTOP = 'e-label-top';\nvar LABELBOTTOM = 'e-label-bottom';\n/* eslint-disable valid-jsdoc */\n/**\n * Function to create Float Label element.\n *\n * @param {HTMLDivElement} overAllWrapper - Overall wrapper of multiselect.\n * @param {HTMLElement} searchWrapper - Search wrapper of multiselect.\n * @param {HTMLElement} element - The given html element.\n * @param {HTMLInputElement} inputElement - Specify the input wrapper.\n * @param {number[] | string[] | boolean[]} value - Value of the MultiSelect.\n * @param {FloatLabelType} floatLabelType - Specify the FloatLabel Type.\n * @param {string} placeholder - Specify the PlaceHolder text.\n */\nexport function createFloatLabel(overAllWrapper, searchWrapper, element, inputElement, value, floatLabelType, placeholder) {\n var floatLinelement = createElement('span', { className: FLOATLINE });\n var floatLabelElement = createElement('label', { className: FLOATTEXT });\n var id = element.getAttribute('id') ? element.getAttribute('id') : getUniqueID('ej2_multiselect');\n element.id = id;\n if (!isNullOrUndefined(element.id) && element.id !== '') {\n floatLabelElement.id = 'label_' + element.id.replace(/ /g, '_');\n attributes(inputElement, { 'aria-labelledby': floatLabelElement.id });\n }\n if (!isNullOrUndefined(inputElement.placeholder) && inputElement.placeholder !== '') {\n floatLabelElement.innerText = encodePlaceholder(inputElement.placeholder);\n inputElement.removeAttribute('placeholder');\n }\n floatLabelElement.innerText = encodePlaceholder(placeholder);\n searchWrapper.appendChild(floatLinelement);\n searchWrapper.appendChild(floatLabelElement);\n overAllWrapper.classList.add('e-float-input');\n updateFloatLabelState(value, floatLabelElement);\n if (floatLabelType === 'Always') {\n if (floatLabelElement.classList.contains(LABELBOTTOM)) {\n removeClass([floatLabelElement], LABELBOTTOM);\n }\n addClass([floatLabelElement], LABELTOP);\n }\n}\n/**\n * Function to update status of the Float Label element.\n *\n * @param {string[] | number[] | boolean[]} value - Value of the MultiSelect.\n * @param {HTMLElement} label - Float label element.\n */\nexport function updateFloatLabelState(value, label) {\n if (value && value.length > 0) {\n addClass([label], LABELTOP);\n removeClass([label], LABELBOTTOM);\n }\n else {\n removeClass([label], LABELTOP);\n addClass([label], LABELBOTTOM);\n }\n}\n/**\n * Function to remove Float Label element.\n *\n * @param {HTMLDivElement} overAllWrapper - Overall wrapper of multiselect.\n * @param {HTMLDivElement} componentWrapper - Wrapper element of multiselect.\n * @param {HTMLElement} searchWrapper - Search wrapper of multiselect.\n * @param {HTMLInputElement} inputElement - Specify the input wrapper.\n * @param {number[] | string[] | boolean[]} value - Value of the MultiSelect.\n * @param {FloatLabelType} floatLabelType - Specify the FloatLabel Type.\n * @param {string} placeholder - Specify the PlaceHolder text.\n */\nexport function removeFloating(overAllWrapper, componentWrapper, searchWrapper, inputElement, value, floatLabelType, placeholder) {\n var placeholderElement = componentWrapper.querySelector('.' + FLOATTEXT);\n var floatLine = componentWrapper.querySelector('.' + FLOATLINE);\n var placeholderText;\n if (!isNullOrUndefined(placeholderElement)) {\n placeholderText = placeholderElement.innerText;\n detach(searchWrapper.querySelector('.' + FLOATTEXT));\n setPlaceHolder(value, inputElement, placeholderText);\n if (!isNullOrUndefined(floatLine)) {\n detach(searchWrapper.querySelector('.' + FLOATLINE));\n }\n }\n else {\n placeholderText = (placeholder !== null) ? placeholder : '';\n setPlaceHolder(value, inputElement, placeholderText);\n }\n overAllWrapper.classList.remove('e-float-input');\n}\n/**\n * Function to set the placeholder to the element.\n *\n * @param {number[] | string[] | boolean[]} value - Value of the MultiSelect.\n * @param {HTMLInputElement} inputElement - Specify the input wrapper.\n * @param {string} placeholder - Specify the PlaceHolder text.\n */\nexport function setPlaceHolder(value, inputElement, placeholder) {\n if (value && value.length) {\n inputElement.placeholder = '';\n }\n else {\n inputElement.placeholder = placeholder;\n }\n}\n/**\n * Function for focusing the Float Element.\n *\n * @param {HTMLDivElement} overAllWrapper - Overall wrapper of multiselect.\n * @param {HTMLDivElement} componentWrapper - Wrapper element of multiselect.\n */\nexport function floatLabelFocus(overAllWrapper, componentWrapper) {\n overAllWrapper.classList.add('e-input-focus');\n var label = componentWrapper.querySelector('.' + FLOATTEXT);\n if (!isNullOrUndefined(label)) {\n addClass([label], LABELTOP);\n if (label.classList.contains(LABELBOTTOM)) {\n removeClass([label], LABELBOTTOM);\n }\n }\n}\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/**\n * Function to focus the Float Label element.\n *\n * @param {HTMLDivElement} overAllWrapper - Overall wrapper of multiselect.\n * @param {HTMLDivElement} componentWrapper - Wrapper element of multiselect.\n * @param {number[] | string[] | boolean[]} value - Value of the MultiSelect.\n * @param {FloatLabelType} floatLabelType - Specify the FloatLabel Type.\n * @param {string} placeholder - Specify the PlaceHolder text.\n */\nexport function floatLabelBlur(overAllWrapper, componentWrapper, value, floatLabelType, placeholder) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n overAllWrapper.classList.remove('e-input-focus');\n var label = componentWrapper.querySelector('.' + FLOATTEXT);\n if (value && value.length <= 0 && floatLabelType === 'Auto' && !isNullOrUndefined(label)) {\n if (label.classList.contains(LABELTOP)) {\n removeClass([label], LABELTOP);\n }\n addClass([label], LABELBOTTOM);\n }\n}\nexport function encodePlaceholder(placeholder) {\n var result = '';\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n var spanElement = document.createElement('span');\n spanElement.innerHTML = '';\n var hiddenInput = (spanElement.children[0]);\n result = hiddenInput.placeholder;\n }\n return result;\n}\n/* eslint-enable valid-jsdoc */\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// \nimport { DropDownBase, dropDownBaseClasses } from '../drop-down-base/drop-down-base';\nimport { FieldSettings } from '../drop-down-base/drop-down-base';\nimport { Popup, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { attributes, setValue, getValue } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, extend } from '@syncfusion/ej2-base';\nimport { EventHandler, Property, Event, compile, L10n } from '@syncfusion/ej2-base';\nimport { Animation, Browser, prepend, Complex } from '@syncfusion/ej2-base';\nimport { Search } from '../common/incremental-search';\nimport { append, addClass, removeClass, closest, detach, remove, select, selectAll } from '@syncfusion/ej2-base';\nimport { getUniqueID, formatUnit, isNullOrUndefined, isUndefined } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Predicate, JsonAdaptor } from '@syncfusion/ej2-data';\nimport { createFloatLabel, removeFloating, floatLabelFocus, floatLabelBlur, encodePlaceholder } from './float-label';\nvar FOCUS = 'e-input-focus';\nvar DISABLED = 'e-disabled';\nvar OVER_ALL_WRAPPER = 'e-multiselect e-input-group e-control-wrapper';\nvar ELEMENT_WRAPPER = 'e-multi-select-wrapper';\nvar ELEMENT_MOBILE_WRAPPER = 'e-mob-wrapper';\nvar HIDE_LIST = 'e-hide-listitem';\nvar DELIMITER_VIEW = 'e-delim-view';\nvar CHIP_WRAPPER = 'e-chips-collection';\nvar CHIP = 'e-chips';\nvar CHIP_CONTENT = 'e-chipcontent';\nvar CHIP_CLOSE = 'e-chips-close';\nvar CHIP_SELECTED = 'e-chip-selected';\nvar SEARCHBOX_WRAPPER = 'e-searcher';\nvar DELIMITER_VIEW_WRAPPER = 'e-delimiter';\nvar ZERO_SIZE = 'e-zero-size';\nvar REMAIN_WRAPPER = 'e-remain';\nvar CLOSEICON_CLASS = 'e-chips-close e-close-hooker';\nvar DELIMITER_WRAPPER = 'e-delim-values';\nvar POPUP_WRAPPER = 'e-ddl e-popup e-multi-select-list-wrapper';\nvar INPUT_ELEMENT = 'e-dropdownbase';\nvar RTL_CLASS = 'e-rtl';\nvar CLOSE_ICON_HIDE = 'e-close-icon-hide';\nvar MOBILE_CHIP = 'e-mob-chip';\nvar FOOTER = 'e-ddl-footer';\nvar HEADER = 'e-ddl-header';\nvar DISABLE_ICON = 'e-ddl-disable-icon';\nvar SPINNER_CLASS = 'e-ms-spinner-icon';\nvar HIDDEN_ELEMENT = 'e-multi-hidden';\nvar destroy = 'destroy';\nvar dropdownIcon = 'e-input-group-icon e-ddl-icon';\nvar iconAnimation = 'e-icon-anim';\nvar TOTAL_COUNT_WRAPPER = 'e-delim-total';\nvar BOX_ELEMENT = 'e-multiselect-box';\nvar FILTERPARENT = 'e-filter-parent';\nvar CUSTOM_WIDTH = 'e-search-custom-width';\nvar FILTERINPUT = 'e-input-filter';\n/**\n * The Multiselect allows the user to pick a more than one value from list of predefined values.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar MultiSelect = /** @class */ (function (_super) {\n __extends(MultiSelect, _super);\n /**\n * Constructor for creating the DropDownList widget.\n *\n * @param {MultiSelectModel} option - Specifies the MultiSelect model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function MultiSelect(option, element) {\n var _this = _super.call(this, option, element) || this;\n _this.clearIconWidth = 0;\n _this.previousFilterText = '';\n _this.isValidKey = false;\n _this.selectAllEventData = [];\n _this.selectAllEventEle = [];\n _this.resetMainList = null;\n _this.resetFilteredData = false;\n _this.scrollFocusStatus = false;\n _this.keyDownStatus = false;\n return _this;\n }\n MultiSelect.prototype.enableRTL = function (state) {\n if (state) {\n this.overAllWrapper.classList.add(RTL_CLASS);\n }\n else {\n this.overAllWrapper.classList.remove(RTL_CLASS);\n }\n if (this.popupObj) {\n this.popupObj.enableRtl = state;\n this.popupObj.dataBind();\n }\n };\n MultiSelect.prototype.requiredModules = function () {\n var modules = [];\n if (this.mode === 'CheckBox') {\n this.isGroupChecking = this.enableGroupCheckBox;\n if (this.enableGroupCheckBox) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.enableSelectionOrder = false;\n this.isProtectedOnChange = prevOnChange;\n }\n this.allowCustomValue = false;\n this.hideSelectedItem = false;\n this.closePopupOnSelect = false;\n modules.push({\n member: 'CheckBoxSelection',\n args: [this]\n });\n }\n return modules;\n };\n MultiSelect.prototype.updateHTMLAttribute = function () {\n if (Object.keys(this.htmlAttributes).length) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var htmlAttr = _a[_i];\n switch (htmlAttr) {\n case 'class': {\n var updatedClassValue = (this.htmlAttributes[\"\" + htmlAttr].replace(/\\s+/g, ' ')).trim();\n if (updatedClassValue !== '') {\n addClass([this.overAllWrapper], updatedClassValue.split(' '));\n addClass([this.popupWrapper], updatedClassValue.split(' '));\n }\n break;\n }\n case 'disabled':\n this.enable(false);\n break;\n case 'placeholder':\n if (!this.placeholder) {\n this.inputElement.setAttribute(htmlAttr, this.htmlAttributes[\"\" + htmlAttr]);\n this.setProperties({ placeholder: this.inputElement.placeholder }, true);\n this.refreshPlaceHolder();\n }\n break;\n default: {\n var defaultAttr = ['id'];\n var validateAttr = ['name', 'required', 'aria-required', 'form'];\n var containerAttr = ['title', 'role', 'style', 'class'];\n if (defaultAttr.indexOf(htmlAttr) > -1) {\n this.element.setAttribute(htmlAttr, this.htmlAttributes[\"\" + htmlAttr]);\n }\n else if (htmlAttr.indexOf('data') === 0 || validateAttr.indexOf(htmlAttr) > -1) {\n this.hiddenElement.setAttribute(htmlAttr, this.htmlAttributes[\"\" + htmlAttr]);\n }\n else if (containerAttr.indexOf(htmlAttr) > -1) {\n this.overAllWrapper.setAttribute(htmlAttr, this.htmlAttributes[\"\" + htmlAttr]);\n }\n else if (htmlAttr !== 'size' && !isNullOrUndefined(this.inputElement)) {\n this.inputElement.setAttribute(htmlAttr, this.htmlAttributes[\"\" + htmlAttr]);\n }\n break;\n }\n }\n }\n }\n };\n MultiSelect.prototype.updateReadonly = function (state) {\n if (!isNullOrUndefined(this.inputElement)) {\n if (state || this.mode === 'CheckBox') {\n this.inputElement.setAttribute('readonly', 'true');\n }\n else {\n this.inputElement.removeAttribute('readonly');\n }\n }\n };\n MultiSelect.prototype.updateClearButton = function (state) {\n if (state) {\n if (this.overAllClear.parentNode) {\n this.overAllClear.style.display = '';\n }\n else {\n this.componentWrapper.appendChild(this.overAllClear);\n }\n this.componentWrapper.classList.remove(CLOSE_ICON_HIDE);\n }\n else {\n this.overAllClear.style.display = 'none';\n this.componentWrapper.classList.add(CLOSE_ICON_HIDE);\n }\n };\n MultiSelect.prototype.updateCssClass = function () {\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n var updatedCssClassValues = this.cssClass;\n updatedCssClassValues = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n if (updatedCssClassValues !== '') {\n addClass([this.overAllWrapper], updatedCssClassValues.split(' '));\n addClass([this.popupWrapper], updatedCssClassValues.split(' '));\n }\n }\n };\n MultiSelect.prototype.updateOldPropCssClass = function (oldClass) {\n if (!isNullOrUndefined(oldClass) && oldClass !== '') {\n oldClass = (oldClass.replace(/\\s+/g, ' ')).trim();\n if (oldClass !== '') {\n removeClass([this.overAllWrapper], oldClass.split(' '));\n removeClass([this.popupWrapper], oldClass.split(' '));\n }\n }\n };\n MultiSelect.prototype.onPopupShown = function (e) {\n var _this = this;\n if (Browser.isDevice && (this.mode === 'CheckBox' && this.allowFiltering)) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n window.onpopstate = function () {\n proxy_1.hidePopup();\n proxy_1.inputElement.focus();\n };\n history.pushState({}, '');\n }\n var animModel = { name: 'FadeIn', duration: 100 };\n var eventArgs = { popup: this.popupObj, event: e, cancel: false, animation: animModel };\n this.trigger('open', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.focusAtFirstListItem();\n if (_this.popupObj) {\n document.body.appendChild(_this.popupObj.element);\n }\n if (_this.mode === 'CheckBox' && _this.enableGroupCheckBox && !isNullOrUndefined(_this.fields.groupBy)) {\n _this.updateListItems(_this.list.querySelectorAll('li.e-list-item'), _this.mainList.querySelectorAll('li.e-list-item'));\n }\n if (_this.mode === 'CheckBox' || _this.showDropDownIcon) {\n addClass([_this.overAllWrapper], [iconAnimation]);\n }\n _this.refreshPopup();\n _this.renderReactTemplates();\n if (_this.popupObj) {\n _this.popupObj.show(eventArgs.animation, (_this.zIndex === 1000) ? _this.element : null);\n }\n attributes(_this.inputElement, { 'aria-expanded': 'true', 'aria-owns': _this.inputElement.id + '_options' });\n _this.updateAriaActiveDescendant();\n if (_this.isFirstClick) {\n _this.loadTemplate();\n }\n }\n });\n };\n MultiSelect.prototype.updateListItems = function (listItems, mainListItems) {\n for (var i = 0; i < listItems.length; i++) {\n this.findGroupStart(listItems[i]);\n this.findGroupStart(mainListItems[i]);\n }\n this.deselectHeader();\n };\n MultiSelect.prototype.loadTemplate = function () {\n this.refreshListItems(null);\n if (this.mode === 'CheckBox') {\n this.removeFocus();\n }\n this.notify('reOrder', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', e: this });\n };\n MultiSelect.prototype.setScrollPosition = function () {\n if (((!this.hideSelectedItem && this.mode !== 'CheckBox') || (this.mode === 'CheckBox' && !this.enableSelectionOrder)) &&\n (!isNullOrUndefined(this.value) && (this.value.length > 0))) {\n var valueEle = this.findListElement((this.hideSelectedItem ? this.ulElement : this.list), 'li', 'data-value', this.value[this.value.length - 1]);\n if (!isNullOrUndefined(valueEle)) {\n this.scrollBottom(valueEle);\n }\n }\n };\n MultiSelect.prototype.focusAtFirstListItem = function () {\n if (this.ulElement && this.ulElement.querySelector('li.'\n + dropDownBaseClasses.li)) {\n var element = void 0;\n if (this.mode === 'CheckBox') {\n this.removeFocus();\n return;\n }\n else {\n element = this.ulElement.querySelector('li.'\n + dropDownBaseClasses.li + ':not(.'\n + HIDE_LIST + ')');\n }\n if (element !== null) {\n this.removeFocus();\n this.addListFocus(element);\n }\n }\n };\n MultiSelect.prototype.focusAtLastListItem = function (data) {\n var activeElement;\n if (data) {\n activeElement = Search(data, this.liCollections, 'StartsWith', this.ignoreCase);\n }\n else {\n if (this.value && this.value.length) {\n Search(this.value[this.value.length - 1], this.liCollections, 'StartsWith', this.ignoreCase);\n }\n else {\n activeElement = null;\n }\n }\n if (activeElement && activeElement.item !== null) {\n this.addListFocus(activeElement.item);\n this.scrollBottom(activeElement.item, activeElement.index);\n }\n };\n MultiSelect.prototype.getAriaAttributes = function () {\n var ariaAttributes = {\n 'aria-disabled': 'false',\n 'role': 'combobox',\n 'aria-expanded': 'false'\n };\n return ariaAttributes;\n };\n MultiSelect.prototype.updateListARIA = function () {\n if (!isNullOrUndefined(this.ulElement)) {\n attributes(this.ulElement, { 'id': this.element.id + '_options', 'role': 'listbox', 'aria-hidden': 'false' });\n }\n var disableStatus = !isNullOrUndefined(this.inputElement) && (this.inputElement.disabled) ? true : false;\n if (!this.isPopupOpen() && !isNullOrUndefined(this.inputElement)) {\n attributes(this.inputElement, this.getAriaAttributes());\n }\n if (disableStatus) {\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n }\n this.ensureAriaDisabled((disableStatus) ? 'true' : 'false');\n };\n MultiSelect.prototype.ensureAriaDisabled = function (status) {\n if (this.htmlAttributes && this.htmlAttributes['aria-disabled']) {\n var attr = this.htmlAttributes;\n extend(attr, { 'aria-disabled': status }, attr);\n this.setProperties({ htmlAttributes: attr }, true);\n }\n };\n MultiSelect.prototype.removelastSelection = function (e) {\n var elements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP);\n var value = elements[elements.length - 1].getAttribute('data-value');\n if (!isNullOrUndefined(this.value)) {\n this.tempValues = this.value.slice();\n }\n var customValue = this.getFormattedValue(value);\n if (this.allowCustomValue && (value !== 'false' && customValue === false || (!isNullOrUndefined(customValue) &&\n customValue.toString() === 'NaN'))) {\n customValue = value;\n }\n this.removeValue(customValue, e);\n this.removeChipSelection();\n this.updateDelimeter(this.delimiterChar, e);\n this.makeTextBoxEmpty();\n if (this.mainList && this.listData) {\n this.refreshSelection();\n }\n this.checkPlaceholderSize();\n };\n MultiSelect.prototype.onActionFailure = function (e) {\n _super.prototype.onActionFailure.call(this, e);\n this.renderPopup();\n this.onPopupShown();\n };\n MultiSelect.prototype.targetElement = function () {\n this.targetInputElement = this.inputElement;\n if (this.mode === 'CheckBox' && this.allowFiltering) {\n this.notify('targetElement', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n }\n return this.targetInputElement.value;\n };\n MultiSelect.prototype.getForQuery = function (valuecheck) {\n var predicate;\n var field = isNullOrUndefined(this.fields.value) ? this.fields.text : this.fields.value;\n for (var i = 0; i < valuecheck.length; i++) {\n if (i === 0) {\n predicate = new Predicate(field, 'equal', valuecheck[i]);\n }\n else {\n predicate = predicate.or(field, 'equal', valuecheck[i]);\n }\n }\n if (this.dataSource instanceof DataManager && this.dataSource.adaptor instanceof JsonAdaptor) {\n return new Query().where(predicate);\n }\n else {\n return this.getQuery(this.query).clone().where(predicate);\n }\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n MultiSelect.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n this.updateSelectElementData(this.allowFiltering);\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (!isNullOrUndefined(this.value) && !this.allowCustomValue) {\n for (var i = 0; i < this.value.length; i++) {\n var checkEle = this.findListElement(((this.allowFiltering && !isNullOrUndefined(this.mainList)) ? this.mainList : ulElement), 'li', 'data-value', proxy.value[i]);\n if (!checkEle && !(this.dataSource instanceof DataManager)) {\n this.value.splice(i, 1);\n i -= 1;\n }\n }\n }\n var valuecheck = [];\n if (!isNullOrUndefined(this.value)) {\n valuecheck = this.presentItemValue(this.ulElement);\n }\n if (valuecheck.length > 0 && this.dataSource instanceof DataManager && !isNullOrUndefined(this.value)\n && this.listData != null) {\n this.addNonPresentItems(valuecheck, this.ulElement, this.listData);\n }\n else {\n this.updateActionList(ulElement, list, e);\n }\n if (this.dataSource instanceof DataManager && this.mode === 'CheckBox' && this.allowFiltering) {\n this.removeFocus();\n }\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n MultiSelect.prototype.updateActionList = function (ulElement, list, e, isUpdated) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n }\n if (!this.mainList && !this.mainData) {\n this.mainList = ulElement.cloneNode ? ulElement.cloneNode(true) : ulElement;\n this.mainData = list;\n this.mainListCollection = this.liCollections;\n }\n else if (isNullOrUndefined(this.mainData) || this.mainData.length === 0) {\n this.mainData = list;\n }\n if ((this.remoteCustomValue || list.length <= 0) && this.allowCustomValue && this.inputFocus && this.allowFiltering &&\n this.inputElement.value && this.inputElement.value !== '') {\n this.checkForCustomValue(this.tempQuery, this.fields);\n return;\n }\n if (this.value && this.value.length && ((this.mode !== 'CheckBox' && !isNullOrUndefined(this.inputElement) && this.inputElement.value.trim() !== '') ||\n this.mode === 'CheckBox' || ((this.keyCode === 8 || this.keyCode === 46) && this.allowFiltering &&\n this.allowCustomValue && this.dataSource instanceof DataManager && this.inputElement.value === ''))) {\n this.refreshSelection();\n }\n this.updateListARIA();\n this.unwireListEvents();\n this.wireListEvents();\n if (!isNullOrUndefined(this.setInitialValue)) {\n this.setInitialValue();\n }\n if (!isNullOrUndefined(this.selectAllAction)) {\n this.selectAllAction();\n }\n if (this.setDynValue) {\n if (!isNullOrUndefined(this.text) && (isNullOrUndefined(this.value) || this.value.length === 0)) {\n this.initialTextUpdate();\n }\n this.initialValueUpdate();\n this.initialUpdate();\n this.refreshPlaceHolder();\n if (this.mode !== 'CheckBox' && this.changeOnBlur) {\n this.updateValueState(null, this.value, null);\n }\n }\n this.renderPopup();\n if (this.beforePopupOpen) {\n this.beforePopupOpen = false;\n this.onPopupShown(e);\n }\n };\n MultiSelect.prototype.refreshSelection = function () {\n var value;\n var element;\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n if (!isNullOrUndefined(this.value)) {\n for (var index = 0; !isNullOrUndefined(this.value[index]); index++) {\n value = this.value[index];\n element = this.findListElement(this.list, 'li', 'data-value', value);\n if (element) {\n addClass([element], className);\n if (this.hideSelectedItem && element.previousSibling\n && element.previousElementSibling.classList.contains(dropDownBaseClasses.group)\n && (!element.nextElementSibling ||\n element.nextElementSibling.classList.contains(dropDownBaseClasses.group))) {\n addClass([element.previousElementSibling], className);\n }\n if (this.hideSelectedItem && this.fields.groupBy && !element.previousElementSibling.classList.contains(HIDE_LIST)) {\n this.hideGroupItem(value);\n }\n if (this.hideSelectedItem && element.classList.contains(dropDownBaseClasses.focus)) {\n removeClass([element], dropDownBaseClasses.focus);\n var listEle = element.parentElement.querySelectorAll('.' +\n dropDownBaseClasses.li + ':not(.' + HIDE_LIST + ')');\n if (listEle.length > 0) {\n addClass([listEle[0]], dropDownBaseClasses.focus);\n this.updateAriaActiveDescendant();\n }\n else {\n //EJ2-57588 - for this task, we prevent the ul element cloning ( this.ulElement = this.ulElement.cloneNode ? this.ulElement.cloneNode(true) : this.ulElement;)\n if (!(this.list && this.list.querySelectorAll('.' + dropDownBaseClasses.li).length > 0)) {\n this.l10nUpdate();\n addClass([this.list], dropDownBaseClasses.noData);\n }\n }\n }\n element.setAttribute('aria-selected', 'true');\n if (this.mode === 'CheckBox' && element.classList.contains('e-active')) {\n var ariaValue = element.getElementsByClassName('e-check').length;\n if (ariaValue === 0) {\n var args = {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox',\n li: element,\n e: null\n };\n this.notify('updatelist', args);\n }\n }\n }\n }\n }\n this.checkSelectAll();\n this.checkMaxSelection();\n };\n MultiSelect.prototype.hideGroupItem = function (value) {\n var element;\n var element1;\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n element1 = element = this.findListElement(this.ulElement, 'li', 'data-value', value);\n var i = 0;\n var j = 0;\n var temp = true;\n var temp1 = true;\n do {\n if (element && element.previousElementSibling\n && (!element.previousElementSibling.classList.contains(HIDE_LIST) &&\n element.previousElementSibling.classList.contains(dropDownBaseClasses.li))) {\n temp = false;\n }\n if (!temp || !element || (element.previousElementSibling\n && element.previousElementSibling.classList.contains(dropDownBaseClasses.group))) {\n i = 10;\n }\n else {\n element = element.previousElementSibling;\n }\n if (element1 && element1.nextElementSibling\n && (!element1.nextElementSibling.classList.contains(HIDE_LIST) &&\n element1.nextElementSibling.classList.contains(dropDownBaseClasses.li))) {\n temp1 = false;\n }\n if (!temp1 || !element1 || (element1.nextElementSibling\n && element1.nextElementSibling.classList.contains(dropDownBaseClasses.group))) {\n j = 10;\n }\n else {\n element1 = element1.nextElementSibling;\n }\n } while (i < 10 || j < 10);\n if (temp && temp1 && !element.previousElementSibling.classList.contains(HIDE_LIST)) {\n addClass([element.previousElementSibling], className);\n }\n else if (temp && temp1 && element.previousElementSibling.classList.contains(HIDE_LIST)) {\n removeClass([element.previousElementSibling], className);\n }\n };\n MultiSelect.prototype.getValidLi = function () {\n var liElement = this.ulElement.querySelector('li.' + dropDownBaseClasses.li + ':not(.' + HIDE_LIST + ')');\n return (!isNullOrUndefined(liElement) ? liElement : this.liCollections[0]);\n };\n MultiSelect.prototype.checkSelectAll = function () {\n var groupItemLength = this.list.querySelectorAll('li.e-list-group-item.e-active').length;\n var listItem = this.list.querySelectorAll('li.e-list-item');\n var searchCount = this.list.querySelectorAll('li.' + dropDownBaseClasses.li).length;\n var searchActiveCount = this.list.querySelectorAll('li.' + dropDownBaseClasses.selected).length;\n if (this.enableGroupCheckBox && !isNullOrUndefined(this.fields.groupBy)) {\n searchActiveCount = searchActiveCount - groupItemLength;\n }\n if ((searchCount === searchActiveCount || searchActiveCount === this.maximumSelectionLength)\n && (this.mode === 'CheckBox' && this.showSelectAll)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'check' });\n }\n else if ((searchCount !== searchActiveCount) && (this.mode === 'CheckBox' && this.showSelectAll)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'uncheck' });\n }\n if (this.enableGroupCheckBox && this.fields.groupBy && !this.enableSelectionOrder) {\n for (var i = 0; i < listItem.length; i++) {\n this.findGroupStart(listItem[i]);\n }\n this.deselectHeader();\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n MultiSelect.prototype.openClick = function (e) {\n if (!this.openOnClick && this.mode !== 'CheckBox') {\n if (this.targetElement() !== '') {\n this.showPopup();\n }\n else {\n this.hidePopup(e);\n }\n }\n else if (!this.openOnClick && this.mode === 'CheckBox' && !this.isPopupOpen()) {\n this.showPopup();\n }\n };\n MultiSelect.prototype.keyUp = function (e) {\n if (this.mode === 'CheckBox' && !this.openOnClick) {\n var char = String.fromCharCode(e.keyCode);\n var isWordCharacter = char.match(/\\w/);\n if (!isNullOrUndefined(isWordCharacter)) {\n this.isValidKey = true;\n }\n }\n this.isValidKey = (this.isPopupOpen() && e.keyCode === 8) || this.isValidKey;\n this.isValidKey = e.ctrlKey && e.keyCode === 86 ? false : this.isValidKey;\n if (this.isValidKey) {\n this.isValidKey = false;\n this.expandTextbox();\n this.showOverAllClear();\n switch (e.keyCode) {\n default:\n // For filtering works in mobile firefox\n this.search(e);\n }\n }\n };\n /**\n * To filter the multiselect data from given data source by using query\n *\n * @param {Object[] | DataManager } dataSource - Set the data source to filter.\n * @param {Query} query - Specify the query to filter the data.\n * @param {FieldSettingsModel} fields - Specify the fields to map the column in the data table.\n * @returns {void}\n */\n MultiSelect.prototype.filter = function (dataSource, query, fields) {\n this.isFiltered = true;\n this.remoteFilterAction = true;\n this.dataUpdater(dataSource, query, fields);\n };\n MultiSelect.prototype.getQuery = function (query) {\n var filterQuery = query ? query.clone() : this.query ? this.query.clone() : new Query();\n if (this.isFiltered) {\n return filterQuery;\n }\n if (this.filterAction) {\n if (this.targetElement() !== null) {\n var dataType = this.typeOfData(this.dataSource).typeof;\n if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n filterQuery.where('', this.filterType, this.targetElement(), this.ignoreCase, this.ignoreAccent);\n }\n else {\n var fields = this.fields;\n filterQuery.where(!isNullOrUndefined(fields.text) ? fields.text : '', this.filterType, this.targetElement(), this.ignoreCase, this.ignoreAccent);\n }\n }\n return filterQuery;\n }\n else {\n return query ? query : this.query ? this.query : new Query();\n }\n };\n MultiSelect.prototype.dataUpdater = function (dataSource, query, fields) {\n this.isDataFetched = false;\n if (this.targetElement().trim() === '') {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n if (this.backCommand) {\n this.remoteCustomValue = false;\n if (this.allowCustomValue && list.querySelectorAll('li').length == 0 && this.mainData.length > 0) {\n this.mainData = [];\n }\n this.onActionComplete(list, this.mainData);\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n if (this.keyCode !== 8) {\n this.focusAtFirstListItem();\n }\n this.notify('reOrder', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', e: this });\n }\n }\n else {\n this.resetList(dataSource, fields, query);\n if (this.allowCustomValue) {\n if (!(dataSource instanceof DataManager)) {\n this.checkForCustomValue(query, fields);\n }\n else {\n this.remoteCustomValue = true;\n this.tempQuery = query;\n }\n }\n }\n this.refreshPopup();\n if (this.mode === 'CheckBox') {\n this.removeFocus();\n }\n };\n MultiSelect.prototype.checkForCustomValue = function (query, fields) {\n var dataChecks = !this.getValueByText(this.inputElement.value, this.ignoreCase);\n if (this.allowCustomValue && dataChecks) {\n var value = this.inputElement.value;\n var field = fields ? fields : this.fields;\n var customData = (!isNullOrUndefined(this.mainData) && this.mainData.length > 0) ?\n this.mainData[0] : this.mainData;\n if (typeof (customData) !== 'string' && typeof (customData) !== 'number' && typeof (customData) !== 'boolean') {\n var dataItem = {};\n setValue(field.text, value, dataItem);\n if (typeof getValue((this.fields.value ? this.fields.value : 'value'), customData)\n === 'number') {\n setValue(field.value, Math.random(), dataItem);\n }\n else {\n setValue(field.value, value, dataItem);\n }\n var tempData = JSON.parse(JSON.stringify(this.listData));\n tempData.splice(0, 0, dataItem);\n this.resetList(tempData, field, query);\n }\n else {\n var tempData = JSON.parse(JSON.stringify(this.listData));\n tempData.splice(0, 0, this.inputElement.value);\n tempData[0] = (typeof customData === 'number' && !isNaN(parseFloat(tempData[0]))) ?\n parseFloat(tempData[0]) : tempData[0];\n tempData[0] = (typeof customData === 'boolean') ?\n (tempData[0] === 'true' ? true : (tempData[0] === 'false' ? false : tempData[0])) : tempData[0];\n this.resetList(tempData, field);\n }\n }\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n };\n MultiSelect.prototype.getNgDirective = function () {\n return 'EJS-MULTISELECT';\n };\n MultiSelect.prototype.wrapperClick = function (e) {\n this.setDynValue = false;\n if (!this.enabled) {\n return;\n }\n if (e.target === this.overAllClear) {\n e.preventDefault();\n return;\n }\n if (!this.inputFocus) {\n this.inputElement.focus();\n }\n if (!this.readonly) {\n if (e.target && e.target.classList.toString().indexOf(CHIP_CLOSE) !== -1) {\n if (this.isPopupOpen()) {\n this.refreshPopup();\n }\n return;\n }\n if (!this.isPopupOpen() &&\n (this.openOnClick || (this.showDropDownIcon && e.target && e.target.className === dropdownIcon))) {\n this.showPopup(e);\n }\n else {\n this.hidePopup(e);\n if (this.mode === 'CheckBox') {\n this.showOverAllClear();\n this.inputFocus = true;\n if (!this.overAllWrapper.classList.contains(FOCUS)) {\n this.overAllWrapper.classList.add(FOCUS);\n }\n }\n }\n }\n if (!(this.targetElement() && this.targetElement() !== '')) {\n e.preventDefault();\n }\n };\n MultiSelect.prototype.enable = function (state) {\n if (state) {\n this.overAllWrapper.classList.remove(DISABLED);\n this.inputElement.removeAttribute('disabled');\n attributes(this.inputElement, { 'aria-disabled': 'false' });\n this.ensureAriaDisabled('false');\n }\n else {\n this.overAllWrapper.classList.add(DISABLED);\n this.inputElement.setAttribute('disabled', 'true');\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n this.ensureAriaDisabled('true');\n }\n if (this.enabled !== state) {\n this.enabled = state;\n }\n this.hidePopup();\n };\n MultiSelect.prototype.onBlurHandler = function (eve, isDocClickFromCheck) {\n var target;\n if (!isNullOrUndefined(eve)) {\n target = eve.relatedTarget;\n }\n if (this.popupObj && document.body.contains(this.popupObj.element) && this.popupObj.element.contains(target)) {\n if (this.mode !== 'CheckBox') {\n this.inputElement.focus();\n }\n else if ((this.floatLabelType === 'Auto' &&\n ((this.overAllWrapper.classList.contains('e-outline')) || (this.overAllWrapper.classList.contains('e-filled'))))) {\n addClass([this.overAllWrapper], 'e-valid-input');\n }\n return;\n }\n if (this.floatLabelType === 'Auto' && (this.overAllWrapper.classList.contains('e-outline')) && this.mode === 'CheckBox' &&\n ((isNullOrUndefined(this.value)) || this.value.length === 0)) {\n removeClass([this.overAllWrapper], 'e-valid-input');\n }\n if (this.mode === 'CheckBox' && Browser.isIE && !isNullOrUndefined(eve) && !isDocClickFromCheck) {\n this.inputFocus = false;\n this.overAllWrapper.classList.remove(FOCUS);\n return;\n }\n if (this.scrollFocusStatus) {\n if (!isNullOrUndefined(eve)) {\n eve.preventDefault();\n }\n this.inputElement.focus();\n this.scrollFocusStatus = false;\n return;\n }\n this.inputFocus = false;\n this.overAllWrapper.classList.remove(FOCUS);\n if (this.addTagOnBlur) {\n var dataChecks = this.getValueByText(this.inputElement.value, this.ignoreCase, this.ignoreAccent);\n var listLiElement = this.findListElement(this.list, 'li', 'data-value', dataChecks);\n var className = this.hideSelectedItem ? HIDE_LIST : dropDownBaseClasses.selected;\n var allowChipAddition = (listLiElement && !listLiElement.classList.contains(className)) ? true : false;\n if (allowChipAddition) {\n this.updateListSelection(listLiElement, eve);\n if (this.mode === 'Delimiter') {\n this.updateDelimeter(this.delimiterChar);\n }\n }\n }\n this.updateDataList();\n if (this.resetMainList) {\n this.mainList = this.resetMainList;\n this.resetMainList = null;\n }\n this.refreshListItems(null);\n if (this.mode !== 'Box' && this.mode !== 'CheckBox') {\n this.updateDelimView();\n }\n if (this.changeOnBlur) {\n this.updateValueState(eve, this.value, this.tempValues);\n this.dispatchEvent(this.hiddenElement, 'change');\n }\n this.overAllClear.style.display = 'none';\n if (this.isPopupOpen()) {\n this.hidePopup(eve);\n }\n this.makeTextBoxEmpty();\n this.trigger('blur');\n this.focused = true;\n if (Browser.isDevice && this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.removeChipFocus();\n }\n this.removeChipSelection();\n this.refreshInputHight();\n floatLabelBlur(this.overAllWrapper, this.componentWrapper, this.value, this.floatLabelType, this.placeholder);\n this.refreshPlaceHolder();\n if ((this.allowFiltering || (this.enableSelectionOrder === true && this.mode === 'CheckBox'))\n && !isNullOrUndefined(this.mainList)) {\n this.ulElement = this.mainList;\n }\n this.checkPlaceholderSize();\n Input.createSpanElement(this.overAllWrapper, this.createElement);\n this.calculateWidth();\n if (!isNullOrUndefined(this.overAllWrapper) && !isNullOrUndefined(this.overAllWrapper.getElementsByClassName('e-ddl-icon')[0] && this.overAllWrapper.getElementsByClassName('e-float-text-content')[0] && this.floatLabelType !== 'Never')) {\n this.overAllWrapper.getElementsByClassName('e-float-text-content')[0].classList.add('e-icon');\n }\n };\n MultiSelect.prototype.calculateWidth = function () {\n var elementWidth;\n if (this.overAllWrapper) {\n if (!this.showDropDownIcon || this.overAllWrapper.querySelector('.' + 'e-label-top')) {\n elementWidth = this.overAllWrapper.clientWidth - 2 * (parseInt(getComputedStyle(this.inputElement).paddingRight));\n }\n else {\n var downIconWidth = this.dropIcon.offsetWidth +\n parseInt(getComputedStyle(this.dropIcon).marginRight);\n elementWidth = this.overAllWrapper.clientWidth - (downIconWidth + 2 * (parseInt(getComputedStyle(this.inputElement).paddingRight)));\n }\n if (this.floatLabelType === 'Auto') {\n Input.calculateWidth(elementWidth, this.overAllWrapper, this.getModuleName());\n }\n }\n };\n MultiSelect.prototype.checkPlaceholderSize = function () {\n if (this.showDropDownIcon) {\n var downIconWidth = this.dropIcon.offsetWidth +\n parseInt(window.getComputedStyle(this.dropIcon).marginRight, 10);\n this.setPlaceholderSize(downIconWidth);\n }\n else {\n if (!isNullOrUndefined(this.dropIcon)) {\n this.setPlaceholderSize(this.showDropDownIcon ? this.dropIcon.offsetWidth : 0);\n }\n }\n };\n MultiSelect.prototype.setPlaceholderSize = function (downIconWidth) {\n if (isNullOrUndefined(this.value) || this.value.length === 0) {\n if (this.dropIcon.offsetWidth !== 0) {\n this.searchWrapper.style.width = ('calc(100% - ' + (downIconWidth + 10)) + 'px';\n }\n else {\n addClass([this.searchWrapper], CUSTOM_WIDTH);\n }\n }\n else if (!isNullOrUndefined(this.value)) {\n this.searchWrapper.removeAttribute('style');\n removeClass([this.searchWrapper], CUSTOM_WIDTH);\n }\n };\n MultiSelect.prototype.refreshInputHight = function () {\n if (!isNullOrUndefined(this.searchWrapper)) {\n if ((!this.value || !this.value.length) && (isNullOrUndefined(this.text) || this.text === '')) {\n this.searchWrapper.classList.remove(ZERO_SIZE);\n }\n else {\n this.searchWrapper.classList.add(ZERO_SIZE);\n }\n }\n };\n MultiSelect.prototype.validateValues = function (newValue, oldValue) {\n return JSON.stringify(newValue.slice().sort()) !== JSON.stringify(oldValue.slice().sort());\n };\n MultiSelect.prototype.updateValueState = function (event, newVal, oldVal) {\n var newValue = newVal ? newVal : [];\n var oldValue = oldVal ? oldVal : [];\n if (this.initStatus && this.validateValues(newValue, oldValue)) {\n var eventArgs = {\n e: event,\n oldValue: oldVal,\n value: newVal,\n isInteracted: event ? true : false,\n element: this.element,\n event: event\n };\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', eventArgs);\n }\n this.updateTempValue();\n if (!this.changeOnBlur) {\n this.dispatchEvent(this.hiddenElement, 'change');\n }\n }\n };\n MultiSelect.prototype.updateTempValue = function () {\n if (!this.value) {\n this.tempValues = this.value;\n }\n else {\n this.tempValues = this.value.slice();\n }\n };\n MultiSelect.prototype.updateAriaActiveDescendant = function () {\n if (!isNullOrUndefined(this.ulElement) && !isNullOrUndefined(this.ulElement.getElementsByClassName('e-item-focus')[0])) {\n attributes(this.inputElement, { 'aria-activedescendant': this.ulElement.getElementsByClassName('e-item-focus')[0].id });\n }\n };\n MultiSelect.prototype.getPagingCount = function () {\n var height = this.list.classList.contains(dropDownBaseClasses.noData) ? null :\n getComputedStyle(this.getItems()[0], null).getPropertyValue('height');\n return Math.round(this.list.offsetHeight / parseInt(height, 10));\n };\n MultiSelect.prototype.pageUpSelection = function (steps) {\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n var previousItem = steps >= 0 ? collection[steps + 1] : collection[0];\n this.addListFocus(previousItem);\n this.scrollBottom(previousItem, this.getIndexByValue(previousItem.getAttribute('data-value')));\n };\n MultiSelect.prototype.pageDownSelection = function (steps) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var list = this.getItems();\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n var previousItem = steps <= collection.length ? collection[steps - 1] : collection[collection.length - 1];\n this.addListFocus(previousItem);\n this.scrollBottom(previousItem, this.getIndexByValue(previousItem.getAttribute('data-value')));\n };\n MultiSelect.prototype.getItems = function () {\n if (!this.list) {\n _super.prototype.render.call(this);\n }\n return this.ulElement && this.ulElement.querySelectorAll('.' + dropDownBaseClasses.li).length > 0 ?\n this.ulElement.querySelectorAll('.' + dropDownBaseClasses.li\n + ':not(.' + HIDE_LIST + ')') : [];\n };\n MultiSelect.prototype.focusInHandler = function (e) {\n var _this = this;\n if (this.enabled) {\n this.showOverAllClear();\n this.inputFocus = true;\n if (this.value && this.value.length) {\n if (this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.chipCollectionWrapper.style.display = '';\n }\n else {\n this.showDelimWrapper();\n }\n if (this.mode !== 'CheckBox') {\n this.viewWrapper.style.display = 'none';\n }\n }\n if (this.mode !== 'CheckBox') {\n this.searchWrapper.classList.remove(ZERO_SIZE);\n }\n this.checkPlaceholderSize();\n if (this.focused) {\n var args = { isInteracted: e ? true : false, event: e };\n this.trigger('focus', args);\n this.focused = false;\n }\n if (!this.overAllWrapper.classList.contains(FOCUS)) {\n this.overAllWrapper.classList.add(FOCUS);\n }\n floatLabelFocus(this.overAllWrapper, this.componentWrapper);\n if (this.isPopupOpen()) {\n this.refreshPopup();\n }\n setTimeout(function () {\n _this.calculateWidth();\n }, 150);\n return true;\n }\n else {\n return false;\n }\n };\n MultiSelect.prototype.showDelimWrapper = function () {\n if (this.mode === 'CheckBox') {\n this.viewWrapper.style.display = '';\n }\n else {\n this.delimiterWrapper.style.display = '';\n }\n this.componentWrapper.classList.add(DELIMITER_VIEW_WRAPPER);\n };\n MultiSelect.prototype.hideDelimWrapper = function () {\n this.delimiterWrapper.style.display = 'none';\n this.componentWrapper.classList.remove(DELIMITER_VIEW_WRAPPER);\n };\n MultiSelect.prototype.expandTextbox = function () {\n var size = 5;\n if (this.placeholder) {\n size = size > this.inputElement.placeholder.length ? size : this.inputElement.placeholder.length;\n }\n if (this.inputElement.value.length > size) {\n this.inputElement.size = this.inputElement.value.length;\n }\n else {\n this.inputElement.size = size;\n }\n };\n MultiSelect.prototype.isPopupOpen = function () {\n return ((this.popupWrapper !== null) && (this.popupWrapper.parentElement !== null));\n };\n MultiSelect.prototype.refreshPopup = function () {\n if (this.popupObj && this.mobFilter) {\n this.popupObj.setProperties({ width: this.calcPopupWidth() });\n this.popupObj.refreshPosition(this.overAllWrapper);\n this.popupObj.resolveCollision();\n }\n };\n MultiSelect.prototype.checkTextLength = function () {\n return this.targetElement().length < 1;\n };\n MultiSelect.prototype.popupKeyActions = function (e) {\n switch (e.keyCode) {\n case 38:\n this.hidePopup(e);\n if (this.mode === 'CheckBox') {\n this.inputElement.focus();\n }\n e.preventDefault();\n break;\n case 40:\n if (!this.isPopupOpen()) {\n this.showPopup(e);\n e.preventDefault();\n }\n break;\n }\n };\n MultiSelect.prototype.updateAriaAttribute = function () {\n var focusedItem = this.list.querySelector('.' + dropDownBaseClasses.focus);\n if (!isNullOrUndefined(focusedItem)) {\n this.inputElement.setAttribute('aria-activedescendant', focusedItem.id);\n if (this.allowFiltering) {\n var filterInput = this.popupWrapper.querySelector('.' + FILTERINPUT);\n filterInput && filterInput.setAttribute('aria-activedescendant', focusedItem.id);\n }\n else if (this.mode == \"CheckBox\") {\n this.overAllWrapper.setAttribute('aria-activedescendant', focusedItem.id);\n }\n }\n };\n MultiSelect.prototype.homeNavigation = function (isHome) {\n this.removeFocus();\n var scrollEle = this.ulElement.querySelectorAll('li.' + dropDownBaseClasses.li\n + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n if (scrollEle.length > 0) {\n var element = scrollEle[(isHome) ? 0 : (scrollEle.length - 1)];\n element.classList.add(dropDownBaseClasses.focus);\n this.scrollBottom(element);\n this.updateAriaActiveDescendant();\n }\n };\n MultiSelect.prototype.onKeyDown = function (e) {\n if (this.readonly || !this.enabled && this.mode !== 'CheckBox') {\n return;\n }\n this.keyCode = e.keyCode;\n this.keyDownStatus = true;\n if (e.keyCode > 111 && e.keyCode < 124) {\n return;\n }\n if (e.altKey) {\n this.popupKeyActions(e);\n return;\n }\n else if (this.isPopupOpen()) {\n var focusedItem = this.list.querySelector('.' + dropDownBaseClasses.focus);\n var activeIndex = void 0;\n switch (e.keyCode) {\n case 36:\n case 35:\n this.homeNavigation((e.keyCode === 36) ? true : false);\n break;\n case 33:\n e.preventDefault();\n if (focusedItem) {\n this.getIndexByValue(focusedItem.getAttribute('data-value'));\n this.pageUpSelection(activeIndex - this.getPagingCount());\n this.updateAriaAttribute();\n }\n return;\n case 34:\n e.preventDefault();\n if (focusedItem) {\n this.getIndexByValue(focusedItem.getAttribute('data-value'));\n this.pageDownSelection(activeIndex + this.getPagingCount());\n this.updateAriaAttribute();\n }\n return;\n case 38:\n this.arrowUp(e);\n break;\n case 40:\n this.arrowDown(e);\n break;\n case 27:\n e.preventDefault();\n this.hidePopup(e);\n if (this.mode === 'CheckBox') {\n this.inputElement.focus();\n }\n return;\n case 13:\n e.preventDefault();\n if (this.mode !== 'CheckBox') {\n this.selectByKey(e);\n }\n this.checkPlaceholderSize();\n return;\n case 32:\n this.spaceKeySelection(e);\n return;\n case 9:\n e.preventDefault();\n this.hidePopup(e);\n this.inputElement.focus();\n this.overAllWrapper.classList.add(FOCUS);\n }\n }\n else {\n switch (e.keyCode) {\n case 13:\n case 9:\n case 16:\n case 17:\n case 20:\n return;\n case 40:\n if (this.openOnClick) {\n this.showPopup();\n }\n break;\n case 27:\n e.preventDefault();\n this.escapeAction();\n return;\n }\n }\n if (this.checkTextLength()) {\n this.keyNavigation(e);\n }\n if (this.mode === 'CheckBox' && this.enableSelectionOrder) {\n if (this.allowFiltering) {\n this.previousFilterText = this.targetElement();\n }\n this.checkBackCommand(e);\n }\n this.expandTextbox();\n if (!(this.mode === 'CheckBox' && this.showSelectAll)) {\n this.refreshPopup();\n }\n };\n MultiSelect.prototype.arrowDown = function (e) {\n e.preventDefault();\n this.moveByList(1);\n this.keyAction = true;\n if (document.activeElement.classList.contains(FILTERINPUT)\n || (this.mode === 'CheckBox' && !this.allowFiltering && document.activeElement !== this.list)) {\n EventHandler.add(this.list, 'keydown', this.onKeyDown, this);\n }\n this.updateAriaAttribute();\n };\n MultiSelect.prototype.arrowUp = function (e) {\n e.preventDefault();\n this.keyAction = true;\n var list = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li\n + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n if (this.enableGroupCheckBox && this.mode === 'CheckBox' && !isNullOrUndefined(this.fields.groupBy)) {\n list = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ',li.' + dropDownBaseClasses.group\n + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n }\n var focuseElem = this.list.querySelector('li.' + dropDownBaseClasses.focus);\n this.focusFirstListItem = !isNullOrUndefined(this.liCollections[0]) ? this.liCollections[0].classList.contains('e-item-focus') : false;\n var index = Array.prototype.slice.call(list).indexOf(focuseElem);\n if (index <= 0 && (this.mode === 'CheckBox' && this.allowFiltering)) {\n this.keyAction = false;\n this.notify('inputFocus', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'focus' });\n }\n this.moveByList(-1);\n this.updateAriaAttribute();\n };\n MultiSelect.prototype.spaceKeySelection = function (e) {\n if (this.mode === 'CheckBox') {\n if (!document.activeElement.classList.contains(FILTERINPUT)) {\n e.preventDefault();\n this.keyAction = true;\n }\n this.selectByKey(e);\n }\n this.checkPlaceholderSize();\n };\n MultiSelect.prototype.checkBackCommand = function (e) {\n if (e.keyCode === 8 && this.allowFiltering ? this.targetElement() !== this.previousFilterText : this.targetElement() === '') {\n this.backCommand = false;\n }\n else {\n this.backCommand = true;\n }\n };\n MultiSelect.prototype.keyNavigation = function (e) {\n if ((this.mode !== 'Delimiter' && this.mode !== 'CheckBox') && this.value && this.value.length) {\n switch (e.keyCode) {\n case 37: //left arrow\n e.preventDefault();\n this.moveBy(-1, e);\n break;\n case 39: //right arrow\n e.preventDefault();\n this.moveBy(1, e);\n break;\n case 8:\n this.removelastSelection(e);\n break;\n case 46: //del\n this.removeSelectedChip(e);\n break;\n }\n }\n else if (e.keyCode === 8 && this.mode === 'Delimiter') {\n if (this.value && this.value.length) {\n e.preventDefault();\n var temp = this.value[this.value.length - 1];\n this.removeValue(temp, e);\n this.updateDelimeter(this.delimiterChar, e);\n this.focusAtLastListItem(temp);\n }\n }\n };\n MultiSelect.prototype.selectByKey = function (e) {\n this.removeChipSelection();\n this.selectListByKey(e);\n if (this.hideSelectedItem) {\n this.focusAtFirstListItem();\n }\n };\n MultiSelect.prototype.escapeAction = function () {\n var temp = this.tempValues ? this.tempValues.slice() : [];\n if (this.value && this.validateValues(this.value, temp)) {\n if (this.mode !== 'CheckBox') {\n this.value = temp;\n this.initialValueUpdate();\n }\n if (this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.chipCollectionWrapper.style.display = '';\n }\n else {\n this.showDelimWrapper();\n }\n this.refreshPlaceHolder();\n if (this.value.length) {\n this.showOverAllClear();\n }\n else {\n this.hideOverAllClear();\n }\n }\n this.makeTextBoxEmpty();\n };\n MultiSelect.prototype.scrollBottom = function (selectedLI, activeIndex) {\n var currentOffset = this.list.offsetHeight;\n var nextBottom = selectedLI.offsetTop + selectedLI.offsetHeight - this.list.scrollTop;\n var nextOffset = this.list.scrollTop + nextBottom - currentOffset;\n var boxRange = (selectedLI.offsetTop + selectedLI.offsetHeight - this.list.scrollTop);\n boxRange = this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ?\n boxRange - this.fixedHeaderElement.offsetHeight : boxRange;\n if (activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextBottom > currentOffset) {\n this.list.scrollTop = nextOffset;\n }\n else if (!(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = nextOffset;\n }\n };\n MultiSelect.prototype.scrollTop = function (selectedLI, activeIndex) {\n var nextOffset = selectedLI.offsetTop - this.list.scrollTop;\n nextOffset = this.fields.groupBy && !isUndefined(this.fixedHeaderElement) ?\n nextOffset - this.fixedHeaderElement.offsetHeight : nextOffset;\n var boxRange = (selectedLI.offsetTop + selectedLI.offsetHeight - this.list.scrollTop);\n if (activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextOffset < 0) {\n this.list.scrollTop = this.list.scrollTop + nextOffset;\n }\n else if (!(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = selectedLI.offsetTop - (this.fields.groupBy && !isUndefined(this.fixedHeaderElement) ?\n this.fixedHeaderElement.offsetHeight : 0);\n }\n };\n MultiSelect.prototype.selectListByKey = function (e) {\n var li = this.list.querySelector('li.' + dropDownBaseClasses.focus);\n var limit = this.value && this.value.length ? this.value.length : 0;\n var target;\n if (li !== null) {\n e.preventDefault();\n if (li.classList.contains('e-active')) {\n limit = limit - 1;\n }\n if (this.isValidLI(li) && limit < this.maximumSelectionLength) {\n this.updateListSelection(li, e);\n this.addListFocus(li);\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.updateDelimeter(this.delimiterChar, e);\n this.refreshInputHight();\n this.checkPlaceholderSize();\n if (this.enableGroupCheckBox && !isNullOrUndefined(this.fields.groupBy)) {\n target = li.firstElementChild.lastElementChild;\n this.findGroupStart(target);\n this.deselectHeader();\n }\n }\n else {\n this.updateDelimeter(this.delimiterChar, e);\n }\n this.makeTextBoxEmpty();\n if (this.mode !== 'CheckBox') {\n this.refreshListItems(li.textContent);\n }\n if (!this.changeOnBlur) {\n this.updateValueState(e, this.value, this.tempValues);\n }\n this.refreshPopup();\n }\n else {\n if (!this.isValidLI(li) && limit < this.maximumSelectionLength) {\n target = li.firstElementChild.lastElementChild;\n if (target.classList.contains('e-check')) {\n this.selectAllItem(false, e, li);\n }\n else {\n this.selectAllItem(true, e, li);\n }\n }\n }\n this.refreshSelection();\n if (this.closePopupOnSelect) {\n this.hidePopup(e);\n }\n }\n var selectAllParent = document.getElementsByClassName('e-selectall-parent')[0];\n if (selectAllParent && !selectAllParent.classList.contains('e-item-focus')) {\n e.preventDefault();\n }\n if (selectAllParent && selectAllParent.classList.contains('e-item-focus')) {\n var selectAllCheckBox = selectAllParent.childNodes[0];\n if (!selectAllCheckBox.classList.contains('e-check')) {\n selectAllCheckBox.classList.add('e-check');\n var args = {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox',\n value: 'check',\n name: 'checkSelectAll'\n };\n this.notify('checkSelectAll', args);\n this.selectAllItem(true, e, li);\n }\n else {\n selectAllCheckBox.classList.remove('e-check');\n var args = {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox',\n value: 'check',\n name: 'checkSelectAll'\n };\n this.notify('checkSelectAll', args);\n this.selectAllItem(false, e, li);\n }\n }\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.refreshListItems = function (data) {\n if ((this.allowFiltering || (this.mode === 'CheckBox' && this.enableSelectionOrder === true)\n || this.allowCustomValue) && this.mainList && this.listData) {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n this.onActionComplete(list, this.mainData);\n this.focusAtLastListItem(data);\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n }\n else if (!isNullOrUndefined(this.fields.groupBy) && this.value && this.value.length) {\n this.refreshSelection();\n }\n };\n MultiSelect.prototype.removeSelectedChip = function (e) {\n var selectedElem = this.chipCollectionWrapper.querySelector('span.' + CHIP_SELECTED);\n var temp;\n if (selectedElem !== null) {\n if (!isNullOrUndefined(this.value)) {\n this.tempValues = this.value.slice();\n }\n temp = selectedElem.nextElementSibling;\n if (temp !== null) {\n this.removeChipSelection();\n this.addChipSelection(temp, e);\n }\n this.removeValue(selectedElem.getAttribute('data-value'), e);\n this.makeTextBoxEmpty();\n }\n if (this.closePopupOnSelect) {\n this.hidePopup(e);\n }\n this.checkPlaceholderSize();\n };\n MultiSelect.prototype.moveByTop = function (state) {\n var elements = this.list.querySelectorAll('li.' + dropDownBaseClasses.li);\n var index;\n if (elements.length > 1) {\n this.removeFocus();\n index = state ? 0 : (elements.length - 1);\n this.addListFocus(elements[index]);\n this.scrollBottom(elements[index], index);\n }\n this.updateAriaAttribute();\n };\n MultiSelect.prototype.moveByList = function (position) {\n if (this.list) {\n var elements = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li\n + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n if (this.mode === 'CheckBox' && this.enableGroupCheckBox && !isNullOrUndefined(this.fields.groupBy)) {\n elements = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ',li.' + dropDownBaseClasses.group\n + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n }\n var selectedElem = this.list.querySelector('li.' + dropDownBaseClasses.focus);\n var temp = -1;\n var selectAllParent = document.getElementsByClassName('e-selectall-parent')[0];\n if (this.mode === 'CheckBox' && this.showSelectAll && position == 1 && !isNullOrUndefined(selectAllParent) && !selectAllParent.classList.contains('e-item-focus') && this.list.getElementsByClassName('e-item-focus').length == 0 && this.liCollections.length > 1) {\n selectAllParent.classList.add('e-item-focus');\n }\n else if (elements.length) {\n if (this.mode === 'CheckBox' && this.showSelectAll && !isNullOrUndefined(selectAllParent)) {\n selectAllParent.classList.remove('e-item-focus');\n if (this.showSelectAll && position == -1 && !isNullOrUndefined(selectAllParent) && this.liCollections.length > 1 && (this.focusFirstListItem || this.list.getElementsByClassName('e-item-focus').length == 0)) {\n selectAllParent.classList.add('e-item-focus');\n }\n }\n for (var index = 0; index < elements.length; index++) {\n if (elements[index] === selectedElem) {\n temp = index;\n break;\n }\n }\n if (position > 0) {\n if (temp < (elements.length - 1)) {\n this.removeFocus();\n this.addListFocus(elements[++temp]);\n this.updateCheck(elements[temp]);\n this.scrollBottom(elements[temp], temp);\n }\n }\n else {\n if (temp > 0) {\n this.removeFocus();\n this.addListFocus(elements[--temp]);\n this.updateCheck(elements[temp]);\n this.scrollTop(elements[temp], temp);\n }\n }\n }\n }\n };\n MultiSelect.prototype.updateCheck = function (element) {\n if (this.mode === 'CheckBox' && this.enableGroupCheckBox &&\n !isNullOrUndefined(this.fields.groupBy)) {\n var checkElement = element.firstElementChild.lastElementChild;\n if (checkElement.classList.contains('e-check')) {\n element.classList.add('e-active');\n }\n else {\n element.classList.remove('e-active');\n }\n }\n };\n MultiSelect.prototype.moveBy = function (position, e) {\n var temp;\n var elements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP);\n var selectedElem = this.chipCollectionWrapper.querySelector('span.' + CHIP_SELECTED);\n if (selectedElem === null) {\n if (position < 0) {\n this.addChipSelection(elements[elements.length - 1], e);\n }\n }\n else {\n if (position < 0) {\n temp = selectedElem.previousElementSibling;\n if (temp !== null) {\n this.removeChipSelection();\n this.addChipSelection(temp, e);\n }\n }\n else {\n temp = selectedElem.nextElementSibling;\n this.removeChipSelection();\n if (temp !== null) {\n this.addChipSelection(temp, e);\n }\n }\n }\n };\n MultiSelect.prototype.chipClick = function (e) {\n if (this.enabled) {\n var elem = closest(e.target, '.' + CHIP);\n this.removeChipSelection();\n this.addChipSelection(elem, e);\n }\n };\n MultiSelect.prototype.removeChipSelection = function () {\n if (this.chipCollectionWrapper) {\n this.removeChipFocus();\n }\n };\n MultiSelect.prototype.addChipSelection = function (element, e) {\n addClass([element], CHIP_SELECTED);\n this.trigger('chipSelection', e);\n };\n MultiSelect.prototype.onChipRemove = function (e) {\n if (e.which === 3 || e.button === 2) {\n return;\n }\n if (this.enabled && !this.readonly) {\n var element = e.target.parentElement;\n var customVal = element.getAttribute('data-value');\n var value = this.getFormattedValue(customVal);\n if (this.allowCustomValue && ((customVal !== 'false' && value === false) ||\n (!isNullOrUndefined(value) && value.toString() === 'NaN'))) {\n value = customVal;\n }\n if (this.isPopupOpen() && this.mode !== 'CheckBox') {\n this.hidePopup(e);\n }\n if (!this.inputFocus) {\n this.inputElement.focus();\n }\n this.removeValue(value, e);\n if (isNullOrUndefined(this.findListElement(this.list, 'li', 'data-value', value)) && this.mainList && this.listData) {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n this.onActionComplete(list, this.mainData);\n }\n this.updateDelimeter(this.delimiterChar, e);\n if (this.placeholder && this.floatLabelType === 'Never') {\n this.makeTextBoxEmpty();\n this.checkPlaceholderSize();\n }\n else {\n this.inputElement.value = '';\n }\n e.preventDefault();\n }\n };\n MultiSelect.prototype.makeTextBoxEmpty = function () {\n this.inputElement.value = '';\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.refreshPlaceHolder = function () {\n if (this.placeholder && this.floatLabelType === 'Never') {\n if ((this.value && this.value.length) || (!isNullOrUndefined(this.text) && this.text !== '')) {\n this.inputElement.placeholder = '';\n }\n else {\n this.inputElement.placeholder = encodePlaceholder(this.placeholder);\n }\n }\n else {\n this.setFloatLabelType();\n }\n this.expandTextbox();\n };\n MultiSelect.prototype.removeAllItems = function (value, eve, isClearAll, element, mainElement) {\n var index = this.value.indexOf(value);\n var removeVal = this.value.slice(0);\n removeVal.splice(index, 1);\n this.setProperties({ value: [].concat([], removeVal) }, true);\n element.setAttribute('aria-selected', 'false');\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n removeClass([element], className);\n this.notify('activeList', {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox', li: element,\n e: this, index: index\n });\n this.invokeCheckboxSelection(element, eve, isClearAll);\n this.updateMainList(true, value, mainElement);\n this.updateChipStatus();\n };\n MultiSelect.prototype.invokeCheckboxSelection = function (element, eve, isClearAll) {\n this.notify('updatelist', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', li: element, e: eve });\n this.updateAriaActiveDescendant();\n if ((this.value && this.value.length !== this.mainData.length)\n && (this.mode === 'CheckBox' && this.showSelectAll && !(this.isSelectAll || isClearAll))) {\n this.notify('checkSelectAll', {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox',\n value: 'uncheck'\n });\n }\n };\n MultiSelect.prototype.removeValue = function (value, eve, length, isClearAll) {\n var _this = this;\n var index = this.value.indexOf(this.getFormattedValue(value));\n if (index === -1 && this.allowCustomValue && !isNullOrUndefined(value)) {\n index = this.value.indexOf(value.toString());\n }\n var targetEle = eve && eve.target;\n isClearAll = (isClearAll || targetEle && targetEle.classList.contains('e-close-hooker')) ? true : null;\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n if (index !== -1) {\n var element_1 = this.findListElement(this.list, 'li', 'data-value', value);\n var val_1 = this.getDataByValue(value);\n var eventArgs = {\n e: eve,\n item: element_1,\n itemData: val_1,\n isInteracted: eve ? true : false,\n cancel: false\n };\n this.trigger('removing', eventArgs, function (eventArgs) {\n if (eventArgs.cancel) {\n _this.removeIndex++;\n }\n else {\n var removeVal = _this.value.slice(0);\n removeVal.splice(index, 1);\n _this.setProperties({ value: [].concat([], removeVal) }, true);\n if (element_1 !== null) {\n var hideElement = _this.findListElement(_this.mainList, 'li', 'data-value', value);\n element_1.setAttribute('aria-selected', 'false');\n removeClass([element_1], className);\n if (hideElement) {\n hideElement.setAttribute('aria-selected', 'false');\n removeClass([element_1, hideElement], className);\n }\n _this.notify('activeList', {\n module: 'CheckBoxSelection',\n enable: _this.mode === 'CheckBox', li: element_1,\n e: _this, index: index\n });\n _this.invokeCheckboxSelection(element_1, eve, isClearAll);\n }\n if (_this.hideSelectedItem && _this.fields.groupBy && element_1) {\n _this.hideGroupItem(value);\n }\n if (_this.hideSelectedItem && _this.fixedHeaderElement && _this.fields.groupBy && _this.mode !== 'CheckBox' &&\n _this.isPopupOpen()) {\n _super.prototype.scrollStop.call(_this);\n }\n _this.updateMainList(true, value);\n _this.removeChip(value);\n _this.updateChipStatus();\n var limit = _this.value && _this.value.length ? _this.value.length : 0;\n if (limit < _this.maximumSelectionLength) {\n var collection = _this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.e-active)');\n removeClass(collection, 'e-disable');\n }\n _this.trigger('removed', eventArgs);\n var targetEle_1 = eve && eve.currentTarget;\n var isSelectAll = (targetEle_1 && targetEle_1.classList.contains('e-selectall-parent')) ? true : null;\n if (!_this.changeOnBlur && !isClearAll && (eve && length && !isSelectAll)) {\n _this.updateValueState(eve, _this.value, _this.tempValues);\n }\n if (length) {\n _this.selectAllEventData.push(val_1);\n _this.selectAllEventEle.push(element_1);\n }\n if (length === 1) {\n if (!_this.changeOnBlur) {\n _this.updateValueState(eve, _this.value, _this.tempValues);\n }\n var args = {\n event: eve,\n items: _this.selectAllEventEle,\n itemData: _this.selectAllEventData,\n isInteracted: eve ? true : false,\n isChecked: false\n };\n _this.trigger('selectedAll', args);\n _this.selectAllEventData = [];\n _this.selectAllEventEle = [];\n }\n if (isClearAll && (length === 1 || length === null)) {\n _this.clearAllCallback(eve, isClearAll);\n }\n }\n });\n }\n };\n MultiSelect.prototype.updateMainList = function (state, value, mainElement) {\n if (this.allowFiltering || this.mode === 'CheckBox') {\n var element2 = mainElement ? mainElement :\n this.findListElement(this.mainList, 'li', 'data-value', value);\n if (element2) {\n if (state) {\n element2.setAttribute('aria-selected', 'false');\n removeClass([element2], this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected);\n if (this.mode === 'CheckBox') {\n removeClass([element2.firstElementChild.lastElementChild], 'e-check');\n }\n }\n else {\n element2.setAttribute('aria-selected', 'true');\n addClass([element2], this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected);\n if (this.mode === 'CheckBox') {\n addClass([element2.firstElementChild.lastElementChild], 'e-check');\n }\n }\n }\n }\n };\n MultiSelect.prototype.removeChip = function (value) {\n if (this.chipCollectionWrapper) {\n var element = this.findListElement(this.chipCollectionWrapper, 'span', 'data-value', value);\n if (element) {\n remove(element);\n }\n }\n };\n MultiSelect.prototype.setWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.overAllWrapper.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n this.overAllWrapper.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n };\n MultiSelect.prototype.updateChipStatus = function () {\n if (this.value && this.value.length) {\n if (!isNullOrUndefined(this.chipCollectionWrapper)) {\n (this.chipCollectionWrapper.style.display = '');\n }\n if (this.mode === 'Delimiter' || this.mode === 'CheckBox') {\n this.showDelimWrapper();\n }\n this.showOverAllClear();\n }\n else {\n if (!isNullOrUndefined(this.chipCollectionWrapper)) {\n this.chipCollectionWrapper.style.display = 'none';\n }\n if (!isNullOrUndefined(this.delimiterWrapper)) {\n (this.delimiterWrapper.style.display = 'none');\n }\n this.hideOverAllClear();\n }\n };\n MultiSelect.prototype.addValue = function (value, text, eve) {\n if (!this.value) {\n this.value = [];\n }\n if (this.value.indexOf(value) < 0) {\n this.setProperties({ value: [].concat([], this.value, [value]) }, true);\n }\n var element = this.findListElement(this.list, 'li', 'data-value', value);\n this.removeFocus();\n if (element) {\n this.addListFocus(element);\n this.addListSelection(element);\n }\n if (this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.addChip(text, value, eve);\n }\n if (this.hideSelectedItem && this.fields.groupBy) {\n this.hideGroupItem(value);\n }\n this.updateChipStatus();\n this.checkMaxSelection();\n };\n MultiSelect.prototype.checkMaxSelection = function () {\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (limit === this.maximumSelectionLength) {\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.e-active)');\n addClass(collection, 'e-disable');\n }\n };\n MultiSelect.prototype.dispatchSelect = function (value, eve, element, isNotTrigger, length) {\n var _this = this;\n var list = this.listData;\n if (this.initStatus && !isNotTrigger) {\n var val_2 = this.getDataByValue(value);\n var eventArgs = {\n e: eve,\n item: element,\n itemData: val_2,\n isInteracted: eve ? true : false,\n cancel: false\n };\n this.trigger('select', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n if (length) {\n _this.selectAllEventData.push(val_2);\n _this.selectAllEventEle.push(element);\n }\n if (length === 1) {\n var args = {\n event: eve,\n items: _this.selectAllEventEle,\n itemData: _this.selectAllEventData,\n isInteracted: eve ? true : false,\n isChecked: true\n };\n _this.trigger('selectedAll', args);\n _this.selectAllEventData = [];\n }\n if (_this.allowCustomValue && _this.isServerRendered && _this.listData !== list) {\n _this.listData = list;\n }\n _this.updateListSelectEventCallback(value, element, eve);\n if (_this.hideSelectedItem && _this.fixedHeaderElement && _this.fields.groupBy && _this.mode !== 'CheckBox') {\n _super.prototype.scrollStop.call(_this);\n }\n }\n });\n }\n };\n MultiSelect.prototype.addChip = function (text, value, e) {\n if (this.chipCollectionWrapper) {\n this.getChip(text, value, e);\n }\n };\n MultiSelect.prototype.removeChipFocus = function () {\n var elements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP + '.' + CHIP_SELECTED);\n removeClass(elements, CHIP_SELECTED);\n if (Browser.isDevice) {\n var closeElements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP_CLOSE.split(' ')[0]);\n for (var index = 0; index < closeElements.length; index++) {\n closeElements[index].style.display = 'none';\n }\n }\n };\n MultiSelect.prototype.onMobileChipInteraction = function (e) {\n var chipElem = closest(e.target, '.' + CHIP);\n var chipClose = chipElem.querySelector('span.' + CHIP_CLOSE.split(' ')[0]);\n if (this.enabled && !this.readonly) {\n if (!chipElem.classList.contains(CHIP_SELECTED)) {\n this.removeChipFocus();\n chipClose.style.display = '';\n chipElem.classList.add(CHIP_SELECTED);\n }\n this.refreshPopup();\n e.preventDefault();\n }\n };\n MultiSelect.prototype.multiCompiler = function (multiselectTemplate) {\n var checkTemplate = false;\n if (typeof multiselectTemplate !== 'function' && multiselectTemplate) {\n try {\n checkTemplate = (selectAll(multiselectTemplate, document).length) ? true : false;\n }\n catch (exception) {\n checkTemplate = false;\n }\n }\n return checkTemplate;\n };\n MultiSelect.prototype.encodeHtmlEntities = function (input) {\n return input.replace(/[\\u00A0-\\u9999<>&]/g, function (match) {\n return \"&#\" + match.charCodeAt(0) + \";\";\n });\n };\n MultiSelect.prototype.getChip = function (data, value, e) {\n var _this = this;\n var itemData = { text: value, value: value };\n var chip = this.createElement('span', {\n className: CHIP,\n attrs: { 'data-value': value, 'title': data }\n });\n var compiledString;\n var chipContent = this.createElement('span', { className: CHIP_CONTENT });\n var chipClose = this.createElement('span', { className: CHIP_CLOSE });\n if (this.mainData) {\n itemData = this.getDataByValue(value);\n }\n if (this.valueTemplate && !isNullOrUndefined(itemData)) {\n var valuecheck = this.multiCompiler(this.valueTemplate);\n if (typeof this.valueTemplate !== 'function' && valuecheck) {\n compiledString = compile(select(this.valueTemplate, document).innerHTML.trim());\n }\n else {\n compiledString = compile(this.valueTemplate);\n }\n // eslint-disable-next-line\n var valueCompTemp = compiledString(itemData, this, 'valueTemplate', this.valueTemplateId, this.isStringTemplate, null, chipContent);\n if (valueCompTemp && valueCompTemp.length > 0) {\n append(valueCompTemp, chipContent);\n }\n this.renderReactTemplates();\n }\n else if (this.enableHtmlSanitizer) {\n chipContent.innerText = data;\n }\n else {\n chipContent.innerHTML = this.encodeHtmlEntities(data);\n }\n chip.appendChild(chipContent);\n var eventArgs = {\n isInteracted: e ? true : false,\n itemData: itemData,\n e: e,\n setClass: function (classes) {\n addClass([chip], classes);\n },\n cancel: false\n };\n this.isPreventChange = this.isAngular && this.preventChange;\n this.trigger('tagging', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n if (Browser.isDevice) {\n chip.classList.add(MOBILE_CHIP);\n append([chipClose], chip);\n chipClose.style.display = 'none';\n EventHandler.add(chip, 'click', _this.onMobileChipInteraction, _this);\n }\n else {\n EventHandler.add(chip, 'mousedown', _this.chipClick, _this);\n if (_this.showClearButton) {\n chip.appendChild(chipClose);\n }\n }\n EventHandler.add(chipClose, 'mousedown', _this.onChipRemove, _this);\n _this.chipCollectionWrapper.appendChild(chip);\n if (!_this.changeOnBlur && e) {\n _this.updateValueState(e, _this.value, _this.tempValues);\n }\n }\n });\n };\n MultiSelect.prototype.calcPopupWidth = function () {\n var width = formatUnit(this.popupWidth);\n if (width.indexOf('%') > -1) {\n var inputWidth = (this.componentWrapper.offsetWidth) * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n MultiSelect.prototype.mouseIn = function () {\n if (this.enabled && !this.readonly) {\n this.showOverAllClear();\n }\n };\n MultiSelect.prototype.mouseOut = function () {\n if (!this.inputFocus) {\n this.overAllClear.style.display = 'none';\n }\n };\n MultiSelect.prototype.listOption = function (dataSource, fields) {\n var iconCss = isNullOrUndefined(fields.iconCss) ? false : true;\n var fieldProperty = isNullOrUndefined(fields.properties) ? fields :\n fields.properties;\n this.listCurrentOptions = (fields.text !== null || fields.value !== null) ? {\n fields: fieldProperty, showIcon: iconCss, ariaAttributes: { groupItemRole: 'presentation' }\n } : { fields: { value: 'text' } };\n extend(this.listCurrentOptions, this.listCurrentOptions, fields, true);\n if (this.mode === 'CheckBox') {\n this.notify('listoption', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', dataSource: dataSource, fieldProperty: fieldProperty });\n }\n return this.listCurrentOptions;\n };\n MultiSelect.prototype.renderPopup = function () {\n var _this = this;\n if (!this.list) {\n _super.prototype.render.call(this);\n }\n if (!this.popupObj) {\n if (!isNullOrUndefined(this.popupWrapper)) {\n document.body.appendChild(this.popupWrapper);\n var checkboxFilter = this.popupWrapper.querySelector('.' + FILTERPARENT);\n if (this.mode === 'CheckBox' && !this.allowFiltering && checkboxFilter && this.filterParent) {\n checkboxFilter.remove();\n this.filterParent = null;\n }\n var overAllHeight = parseInt(this.popupHeight, 10);\n this.popupWrapper.style.visibility = 'hidden';\n if (this.headerTemplate) {\n this.setHeaderTemplate();\n overAllHeight -= this.header.offsetHeight;\n }\n append([this.list], this.popupWrapper);\n if (this.footerTemplate) {\n this.setFooterTemplate();\n overAllHeight -= this.footer.offsetHeight;\n }\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n overAllHeight -= this.selectAllHeight;\n }\n else if (this.mode === 'CheckBox' && !this.showSelectAll && (!this.headerTemplate && !this.footerTemplate)) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n overAllHeight = parseInt(this.popupHeight, 10);\n }\n else if (this.mode === 'CheckBox' && !this.showSelectAll) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n overAllHeight = parseInt(this.popupHeight, 10);\n if (this.headerTemplate && this.header) {\n overAllHeight -= this.header.offsetHeight;\n }\n if (this.footerTemplate && this.footer) {\n overAllHeight -= this.footer.offsetHeight;\n }\n }\n if (this.mode === 'CheckBox') {\n var args = {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox',\n popupElement: this.popupWrapper\n };\n if (this.allowFiltering) {\n this.notify('searchBox', args);\n overAllHeight -= this.searchBoxHeight;\n }\n addClass([this.popupWrapper], 'e-checkbox');\n }\n if (this.popupHeight !== 'auto') {\n this.list.style.maxHeight = formatUnit(overAllHeight);\n this.popupWrapper.style.maxHeight = formatUnit(this.popupHeight);\n }\n else {\n this.list.style.maxHeight = formatUnit(this.popupHeight);\n }\n this.popupObj = new Popup(this.popupWrapper, {\n width: this.calcPopupWidth(), targetType: 'relative',\n position: this.enableRtl ? { X: 'right', Y: 'bottom' } : { X: 'left', Y: 'bottom' },\n relateTo: this.overAllWrapper, collision: { X: 'flip', Y: 'flip' }, offsetY: 1,\n enableRtl: this.enableRtl, zIndex: this.zIndex,\n close: function () {\n if (_this.popupObj.element.parentElement) {\n _this.popupObj.unwireScrollEvents();\n // For restrict the page scrolling in safari browser\n var checkboxFilterInput = _this.popupWrapper.querySelector('.' + FILTERINPUT);\n if (_this.mode === 'CheckBox' && checkboxFilterInput && document.activeElement === checkboxFilterInput) {\n checkboxFilterInput.blur();\n }\n detach(_this.popupObj.element);\n }\n },\n open: function () {\n _this.popupObj.resolveCollision();\n if (!_this.isFirstClick) {\n var ulElement = _this.list.querySelector('ul');\n if (ulElement) {\n if (!(_this.mode !== 'CheckBox' && (_this.allowFiltering || _this.allowCustomValue) &&\n _this.targetElement().trim() !== '')) {\n _this.mainList = ulElement.cloneNode ? ulElement.cloneNode(true) : ulElement;\n }\n }\n _this.isFirstClick = true;\n }\n _this.popupObj.wireScrollEvents();\n if (!(_this.mode !== 'CheckBox' && (_this.allowFiltering || _this.allowCustomValue) &&\n _this.targetElement().trim() !== '')) {\n _this.loadTemplate();\n }\n _this.setScrollPosition();\n if (_this.allowFiltering) {\n _this.notify('inputFocus', {\n module: 'CheckBoxSelection', enable: _this.mode === 'CheckBox', value: 'focus'\n });\n }\n }, targetExitViewport: function () {\n if (!Browser.isDevice) {\n _this.hidePopup();\n }\n }\n });\n if (this.mode === 'CheckBox' && Browser.isDevice && this.allowFiltering) {\n this.notify('deviceSearchBox', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n }\n this.popupObj.close();\n this.popupWrapper.style.visibility = '';\n }\n }\n };\n MultiSelect.prototype.setHeaderTemplate = function () {\n var compiledString;\n if (this.header) {\n this.header.remove();\n }\n this.header = this.createElement('div');\n addClass([this.header], HEADER);\n var headercheck = this.multiCompiler(this.headerTemplate);\n if (typeof this.headerTemplate !== 'function' && headercheck) {\n compiledString = compile(select(this.headerTemplate, document).innerHTML.trim());\n }\n else {\n compiledString = compile(this.headerTemplate);\n }\n // eslint-disable-next-line\n var elements = compiledString({}, this, 'headerTemplate', this.headerTemplateId, this.isStringTemplate, null, this.header);\n if (elements && elements.length > 0) {\n append(elements, this.header);\n }\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n prepend([this.header], this.popupWrapper);\n }\n else {\n append([this.header], this.popupWrapper);\n }\n EventHandler.add(this.header, 'mousedown', this.onListMouseDown, this);\n };\n MultiSelect.prototype.setFooterTemplate = function () {\n var compiledString;\n if (this.footer) {\n this.footer.remove();\n }\n this.footer = this.createElement('div');\n addClass([this.footer], FOOTER);\n var footercheck = this.multiCompiler(this.footerTemplate);\n if (typeof this.footerTemplate !== 'function' && footercheck) {\n compiledString = compile(select(this.footerTemplate, document).innerHTML.trim());\n }\n else {\n compiledString = compile(this.footerTemplate);\n }\n // eslint-disable-next-line\n var elements = compiledString({}, this, 'footerTemplate', this.footerTemplateId, this.isStringTemplate, null, this.footer);\n if (elements && elements.length > 0) {\n append(elements, this.footer);\n }\n append([this.footer], this.popupWrapper);\n EventHandler.add(this.footer, 'mousedown', this.onListMouseDown, this);\n };\n MultiSelect.prototype.clearAll = function (e) {\n if (this.enabled && !this.readonly) {\n var temp = void 0;\n if (this.value && this.value.length > 0) {\n var liElement = this.list && this.list.querySelectorAll('li.e-list-item');\n if (liElement && liElement.length > 0) {\n this.selectAllItems(false, e);\n }\n else {\n this.removeIndex = 0;\n for (temp = this.value[this.removeIndex]; this.removeIndex < this.value.length; temp = this.value[this.removeIndex]) {\n this.removeValue(temp, e, null, true);\n }\n }\n this.selectedElementID = null;\n this.inputElement.removeAttribute('aria-activedescendant');\n }\n else {\n this.clearAllCallback(e);\n }\n }\n };\n MultiSelect.prototype.clearAllCallback = function (e, isClearAll) {\n var tempValues = this.value ? this.value.slice() : [];\n if (this.mainList && this.listData && ((this.allowFiltering && this.mode !== 'CheckBox') || this.allowCustomValue)) {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n this.onActionComplete(list, this.mainData);\n }\n this.focusAtFirstListItem();\n this.updateDelimeter(this.delimiterChar, e);\n if (this.mode !== 'Box' && (!this.inputFocus || this.mode === 'CheckBox')) {\n this.updateDelimView();\n }\n if (this.inputElement.value !== '') {\n this.makeTextBoxEmpty();\n this.search(null);\n }\n this.checkPlaceholderSize();\n if (this.isPopupOpen()) {\n this.refreshPopup();\n }\n if (!this.inputFocus) {\n if (this.changeOnBlur) {\n this.updateValueState(e, this.value, tempValues);\n }\n if (this.mode !== 'CheckBox') {\n this.inputElement.focus();\n }\n }\n if (this.mode === 'CheckBox') {\n this.refreshPlaceHolder();\n this.refreshInputHight();\n if (this.changeOnBlur && isClearAll && (isNullOrUndefined(this.value) || this.value.length === 0)) {\n this.updateValueState(e, this.value, this.tempValues);\n }\n }\n if (!this.changeOnBlur && isClearAll && (isNullOrUndefined(this.value) || this.value.length === 0)) {\n this.updateValueState(e, this.value, this.tempValues);\n }\n if (this.mode === 'CheckBox' && this.enableGroupCheckBox && !isNullOrUndefined(this.fields.groupBy)) {\n this.updateListItems(this.list.querySelectorAll('li.e-list-item'), this.mainList.querySelectorAll('li.e-list-item'));\n }\n e.preventDefault();\n };\n MultiSelect.prototype.windowResize = function () {\n this.refreshPopup();\n if ((!this.inputFocus || this.mode === 'CheckBox') && this.viewWrapper && this.viewWrapper.parentElement) {\n this.updateDelimView();\n }\n };\n MultiSelect.prototype.resetValueHandler = function (e) {\n var formElement = closest(this.inputElement, 'form');\n if (formElement && e.target === formElement) {\n var textVal = (this.element.tagName === this.getNgDirective()) ?\n null : this.element.getAttribute('data-initial-value');\n this.text = textVal;\n }\n };\n MultiSelect.prototype.wireEvent = function () {\n EventHandler.add(this.componentWrapper, 'mousedown', this.wrapperClick, this);\n EventHandler.add(window, 'resize', this.windowResize, this);\n EventHandler.add(this.inputElement, 'focus', this.focusInHandler, this);\n EventHandler.add(this.inputElement, 'keydown', this.onKeyDown, this);\n EventHandler.add(this.inputElement, 'keyup', this.keyUp, this);\n if (this.mode !== 'CheckBox') {\n EventHandler.add(this.inputElement, 'input', this.onInput, this);\n }\n EventHandler.add(this.inputElement, 'blur', this.onBlurHandler, this);\n EventHandler.add(this.componentWrapper, 'mouseover', this.mouseIn, this);\n var formElement = closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.add(formElement, 'reset', this.resetValueHandler, this);\n }\n EventHandler.add(this.componentWrapper, 'mouseout', this.mouseOut, this);\n EventHandler.add(this.overAllClear, 'mouseup', this.clearAll, this);\n EventHandler.add(this.inputElement, 'paste', this.pasteHandler, this);\n };\n MultiSelect.prototype.onInput = function (e) {\n if (this.keyDownStatus) {\n this.isValidKey = true;\n }\n else {\n this.isValidKey = false;\n }\n this.keyDownStatus = false;\n // For Filtering works in mobile firefox\n if (Browser.isDevice && Browser.info.name === 'mozilla') {\n this.search(e);\n }\n };\n MultiSelect.prototype.pasteHandler = function (event) {\n var _this = this;\n setTimeout(function () {\n _this.expandTextbox();\n _this.search(event);\n });\n };\n MultiSelect.prototype.search = function (e) {\n var _this = this;\n this.resetFilteredData = true;\n if (!isNullOrUndefined(e)) {\n this.keyCode = e.keyCode;\n }\n if (!this.isPopupOpen() && this.openOnClick) {\n this.showPopup(e);\n }\n this.openClick(e);\n if (this.checkTextLength() && !this.allowFiltering && !isNullOrUndefined(e) && (e.keyCode !== 8)) {\n this.focusAtFirstListItem();\n }\n else {\n var text = this.targetElement();\n if (this.allowFiltering) {\n var eventArgs_1 = {\n preventDefaultAction: false,\n text: this.targetElement(),\n updateData: function (dataSource, query, fields) {\n if (eventArgs_1.cancel) {\n return;\n }\n _this.isFiltered = true;\n _this.remoteFilterAction = true;\n _this.dataUpdater(dataSource, query, fields);\n },\n event: e,\n cancel: false\n };\n this.trigger('filtering', eventArgs_1, function (eventArgs) {\n if (!eventArgs.cancel) {\n if (!_this.isFiltered && !eventArgs.preventDefaultAction) {\n _this.filterAction = true;\n _this.dataUpdater(_this.dataSource, null, _this.fields);\n }\n }\n });\n }\n else if (this.allowCustomValue) {\n var query = new Query();\n query = (text !== '') ? query.where(this.fields.text, 'startswith', text, this.ignoreCase, this.ignoreAccent) : query;\n this.dataUpdater(this.mainData, query, this.fields);\n }\n else {\n var liCollections = this.list.querySelectorAll('li.' + dropDownBaseClasses.li + ':not(.e-hide-listitem)');\n var activeElement = Search(this.targetElement(), liCollections, 'StartsWith', this.ignoreCase);\n if (activeElement && activeElement.item !== null) {\n this.addListFocus(activeElement.item);\n this.list.scrollTop =\n activeElement.item.offsetHeight * activeElement.index;\n }\n else if (this.targetElement() !== '') {\n this.removeFocus();\n }\n else {\n this.focusAtFirstListItem();\n }\n }\n }\n };\n MultiSelect.prototype.preRender = function () {\n if (this.allowFiltering === null) {\n this.allowFiltering = (this.mode === 'CheckBox') ? true : false;\n }\n this.initializeData();\n this.updateDataAttribute(this.htmlAttributes);\n _super.prototype.preRender.call(this);\n };\n MultiSelect.prototype.getLocaleName = function () {\n return 'multi-select';\n };\n MultiSelect.prototype.initializeData = function () {\n this.mainListCollection = [];\n this.beforePopupOpen = false;\n this.filterAction = false;\n this.remoteFilterAction = false;\n this.isFirstClick = false;\n this.mobFilter = true;\n this.isFiltered = false;\n this.focused = true;\n this.initial = true;\n this.backCommand = true;\n };\n MultiSelect.prototype.updateData = function (delimiterChar, e) {\n var data = '';\n var delim = this.mode === 'Delimiter' || this.mode === 'CheckBox';\n var text = [];\n var temp;\n var tempData = this.listData;\n this.listData = this.mainData;\n if (!isNullOrUndefined(this.hiddenElement)) {\n this.hiddenElement.innerHTML = '';\n }\n if (!isNullOrUndefined(this.value)) {\n var valueLength = this.value.length;\n var hiddenElementContent = '';\n for (var index = 0; index < valueLength; index++) {\n var valueItem = this.value[index];\n var listValue = this.findListElement((!isNullOrUndefined(this.mainList) ? this.mainList : this.ulElement), 'li', 'data-value', valueItem);\n if (isNullOrUndefined(listValue) && !this.allowCustomValue) {\n this.value.splice(index, 1);\n index -= 1;\n valueLength -= 1;\n }\n else {\n if (this.listData) {\n temp = this.getTextByValue(valueItem);\n }\n else {\n temp = valueItem;\n }\n data += temp + delimiterChar + ' ';\n text.push(temp);\n }\n hiddenElementContent += \"\";\n }\n if (!isNullOrUndefined(this.hiddenElement)) {\n this.hiddenElement.innerHTML = hiddenElementContent;\n }\n }\n this.setProperties({ text: text.toString() }, true);\n if (delim) {\n this.updateWrapperText(this.delimiterWrapper, data);\n this.delimiterWrapper.setAttribute('id', getUniqueID('delim_val'));\n this.inputElement.setAttribute('aria-labelledby', this.delimiterWrapper.id);\n }\n var targetEle = e && e.target;\n var isClearAll = (targetEle && targetEle.classList.contains('e-close-hooker')) ? true : null;\n if (!this.changeOnBlur && ((e && !isClearAll)) || this.isSelectAll) {\n this.isSelectAll = false;\n this.updateValueState(e, this.value, this.tempValues);\n }\n this.listData = tempData;\n this.addValidInputClass();\n };\n MultiSelect.prototype.initialTextUpdate = function () {\n if (!isNullOrUndefined(this.text)) {\n var textArr = this.text.split(this.delimiterChar);\n var textVal = [];\n for (var index = 0; textArr.length > index; index++) {\n var val = this.getValueByText(textArr[index]);\n if (!isNullOrUndefined(val)) {\n textVal.push(val);\n }\n else if (this.allowCustomValue) {\n textVal.push(textArr[index]);\n }\n }\n if (textVal && textVal.length) {\n this.setProperties({ value: textVal }, true);\n }\n }\n else {\n this.setProperties({ value: null }, true);\n }\n };\n MultiSelect.prototype.renderList = function (isEmptyData) {\n if (!isEmptyData && this.allowCustomValue && this.list && (this.list.textContent === this.noRecordsTemplate\n || this.list.querySelector('.e-ul') && this.list.querySelector('.e-ul').childElementCount === 0)) {\n isEmptyData = true;\n }\n _super.prototype.render.call(this, null, isEmptyData);\n this.unwireListEvents();\n this.wireListEvents();\n };\n MultiSelect.prototype.initialValueUpdate = function () {\n if (this.list) {\n var text = void 0;\n var element = void 0;\n var value = void 0;\n if (this.chipCollectionWrapper) {\n this.chipCollectionWrapper.innerHTML = '';\n }\n this.removeListSelection();\n if (!isNullOrUndefined(this.value)) {\n for (var index = 0; !isNullOrUndefined(this.value[index]); index++) {\n value = this.value[index];\n element = this.findListElement(this.hideSelectedItem ? this.ulElement : this.list, 'li', 'data-value', value);\n text = this.getTextByValue(value);\n if ((element && (element.getAttribute('aria-selected') !== 'true')) ||\n (element && (element.getAttribute('aria-selected') === 'true' && this.hideSelectedItem) &&\n (this.mode === 'Box' || this.mode === 'Default'))) {\n this.addChip(text, value);\n this.addListSelection(element);\n }\n else if (value && this.allowCustomValue) {\n var indexItem = this.listData.length;\n var newValue = {};\n setValue(this.fields.text, value, newValue);\n setValue(this.fields.value, value, newValue);\n var noDataEle = this.popupWrapper.querySelector('.' + dropDownBaseClasses.noData);\n this.addItem(newValue, indexItem);\n element = element ? element : this.findListElement(this.hideSelectedItem ? this.ulElement : this.list, 'li', 'data-value', value);\n if (this.popupWrapper.contains(noDataEle)) {\n this.list.setAttribute('style', noDataEle.getAttribute('style'));\n this.popupWrapper.replaceChild(this.list, noDataEle);\n this.wireListEvents();\n }\n this.addChip(text, value);\n this.addListSelection(element);\n }\n }\n }\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n if (this.changeOnBlur) {\n this.updateValueState(null, this.value, this.tempValues);\n }\n this.updateDelimeter(this.delimiterChar);\n this.refreshInputHight();\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n if (this.mode === 'CheckBox' && this.showSelectAll && (isNullOrUndefined(this.value) || !this.value.length)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'uncheck' });\n }\n if (this.mode === 'Box' || (this.mode === 'Default' && this.inputFocus)) {\n this.chipCollectionWrapper.style.display = '';\n }\n else if (this.mode === 'Delimiter' || this.mode === 'CheckBox') {\n this.showDelimWrapper();\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n MultiSelect.prototype.updateActionCompleteData = function (li, item) {\n if (this.value && this.value.indexOf(li.getAttribute('data-value')) > -1) {\n this.mainList = this.ulElement;\n if (this.hideSelectedItem) {\n addClass([li], HIDE_LIST);\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n MultiSelect.prototype.updateAddItemList = function (list, itemCount) {\n if (this.popupObj && this.popupObj.element && this.popupObj.element.querySelector('.' + dropDownBaseClasses.noData) && list) {\n this.list = list;\n this.mainList = this.ulElement = list.querySelector('ul');\n remove(this.popupWrapper.querySelector('.e-content'));\n this.popupObj = null;\n this.renderPopup();\n }\n else if (this.allowCustomValue) {\n this.list = list;\n this.mainList = this.ulElement = list.querySelector('ul');\n }\n };\n MultiSelect.prototype.updateDataList = function () {\n if (this.mainList && this.ulElement && !(this.isFiltered || this.filterAction || this.targetElement().trim())) {\n var isDynamicGroupItemUpdate = this.mainList.childElementCount < this.ulElement.childElementCount;\n var isReactTemplateUpdate = ((this.ulElement.childElementCount > 0 && this.ulElement.children[0].childElementCount > 0) && (this.mainList.children[0].childElementCount < this.ulElement.children[0].childElementCount));\n var isAngularTemplateUpdate = this.itemTemplate && this.ulElement.childElementCount > 0 && !(this.ulElement.childElementCount < this.mainList.childElementCount) && (this.ulElement.children[0].childElementCount > 0 || (this.fields.groupBy && this.ulElement.children[1] && this.ulElement.children[1].childElementCount > 0));\n if (isDynamicGroupItemUpdate || isReactTemplateUpdate || isAngularTemplateUpdate) {\n //EJ2-57748 - for this task, we prevent the ul element cloning ( this.mainList = this.ulElement.cloneNode ? this.ulElement.cloneNode(true) : this.ulElement;)\n this.mainList = this.ulElement;\n }\n }\n };\n MultiSelect.prototype.isValidLI = function (li) {\n return (li && !li.classList.contains(dropDownBaseClasses.disabled) && !li.classList.contains(dropDownBaseClasses.group) &&\n li.classList.contains(dropDownBaseClasses.li));\n };\n MultiSelect.prototype.updateListSelection = function (li, e, length) {\n var customVal = li.getAttribute('data-value');\n var value = this.getFormattedValue(customVal);\n if (this.allowCustomValue && ((customVal !== 'false' && value === false) ||\n (!isNullOrUndefined(value) && value.toString() === 'NaN'))) {\n value = customVal;\n }\n this.removeHover();\n if (!this.value || this.value.indexOf(value) === -1) {\n this.dispatchSelect(value, e, li, (li.getAttribute('aria-selected') === 'true'), length);\n }\n else {\n this.removeValue(value, e, length);\n }\n };\n MultiSelect.prototype.updateListSelectEventCallback = function (value, li, e) {\n var _this = this;\n var text = this.getTextByValue(value);\n if ((this.allowCustomValue || this.allowFiltering) && !this.findListElement(this.mainList, 'li', 'data-value', value)) {\n var temp_1 = li.cloneNode(true);\n var fieldValue = this.fields.value ? this.fields.value : 'value';\n if (this.allowCustomValue && this.mainData.length && typeof getValue(fieldValue, this.mainData[0]) === 'number') {\n value = !isNaN(parseFloat(value.toString())) ? parseFloat(value.toString()) : value;\n }\n var data_1 = this.getDataByValue(value);\n var eventArgs = {\n newData: data_1,\n cancel: false\n };\n this.trigger('customValueSelection', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n append([temp_1], _this.mainList);\n _this.mainData.push(data_1);\n _this.remoteCustomValue = false;\n _this.addValue(value, text, e);\n }\n });\n }\n else {\n this.remoteCustomValue = false;\n this.addValue(value, text, e);\n }\n };\n MultiSelect.prototype.removeListSelection = function () {\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n var selectedItems = this.list.querySelectorAll('.' + className);\n var temp = selectedItems.length;\n if (selectedItems && selectedItems.length) {\n removeClass(selectedItems, className);\n while (temp > 0) {\n selectedItems[temp - 1].setAttribute('aria-selected', 'false');\n temp--;\n }\n }\n if (!isNullOrUndefined(this.mainList)) {\n var selectItems = this.mainList.querySelectorAll('.' + className);\n var temp1 = selectItems.length;\n if (selectItems && selectItems.length) {\n removeClass(selectItems, className);\n while (temp1 > 0) {\n selectItems[temp1 - 1].setAttribute('aria-selected', 'false');\n if (this.mode === 'CheckBox') {\n if (selectedItems && (selectedItems.length > (temp1 - 1))) {\n removeClass([selectedItems[temp1 - 1].firstElementChild.lastElementChild], 'e-check');\n }\n removeClass([selectItems[temp1 - 1].firstElementChild.lastElementChild], 'e-check');\n }\n temp1--;\n }\n }\n }\n };\n MultiSelect.prototype.removeHover = function () {\n var hoveredItem = this.list.querySelectorAll('.' + dropDownBaseClasses.hover);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, dropDownBaseClasses.hover);\n }\n };\n MultiSelect.prototype.removeFocus = function () {\n if (this.list && this.mainList) {\n var hoveredItem = this.list.querySelectorAll('.' + dropDownBaseClasses.focus);\n var mainlist = this.mainList.querySelectorAll('.' + dropDownBaseClasses.focus);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, dropDownBaseClasses.focus);\n removeClass(mainlist, dropDownBaseClasses.focus);\n }\n }\n };\n MultiSelect.prototype.addListHover = function (li) {\n if (this.enabled && this.isValidLI(li)) {\n this.removeHover();\n addClass([li], dropDownBaseClasses.hover);\n }\n else {\n if ((li !== null && li.classList.contains('e-list-group-item')) && this.enableGroupCheckBox && this.mode === 'CheckBox'\n && !isNullOrUndefined(this.fields.groupBy)) {\n this.removeHover();\n addClass([li], dropDownBaseClasses.hover);\n }\n }\n };\n MultiSelect.prototype.addListFocus = function (element) {\n if (this.enabled && this.isValidLI(element)) {\n this.removeFocus();\n addClass([element], dropDownBaseClasses.focus);\n this.updateAriaActiveDescendant();\n }\n else {\n if (this.enableGroupCheckBox && this.mode === 'CheckBox' && !isNullOrUndefined(this.fields.groupBy)) {\n addClass([element], dropDownBaseClasses.focus);\n this.updateAriaActiveDescendant();\n }\n }\n };\n MultiSelect.prototype.addListSelection = function (element, mainElement) {\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n if (this.isValidLI(element) && !element.classList.contains(dropDownBaseClasses.hover)) {\n addClass([element], className);\n this.updateMainList(false, element.getAttribute('data-value'), mainElement);\n element.setAttribute('aria-selected', 'true');\n if (this.mode === 'CheckBox' && element.classList.contains('e-active')) {\n var ariaCheck = element.getElementsByClassName('e-check').length;\n if (ariaCheck === 0) {\n this.notify('updatelist', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', li: element, e: this });\n }\n }\n this.notify('activeList', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', li: element, e: this });\n if (this.chipCollectionWrapper) {\n this.removeChipSelection();\n }\n this.selectedElementID = element.id;\n }\n };\n MultiSelect.prototype.updateDelimeter = function (delimChar, e) {\n this.updateData(delimChar, e);\n };\n MultiSelect.prototype.onMouseClick = function (e) {\n var _this = this;\n this.keyCode = null;\n this.scrollFocusStatus = false;\n var target = e.target;\n var li = closest(target, '.' + dropDownBaseClasses.li);\n var headerLi = closest(target, '.' + dropDownBaseClasses.group);\n if (headerLi && this.enableGroupCheckBox && this.mode === 'CheckBox' && this.fields.groupBy) {\n target = target.classList.contains('e-list-group-item') ? target.firstElementChild.lastElementChild\n : e.target;\n if (target.classList.contains('e-check')) {\n this.selectAllItem(false, e);\n target.classList.remove('e-check');\n target.classList.remove('e-stop');\n closest(target, '.' + 'e-list-group-item').classList.remove('e-active');\n target.setAttribute('aria-selected', 'false');\n }\n else {\n this.selectAllItem(true, e);\n target.classList.remove('e-stop');\n target.classList.add('e-check');\n closest(target, '.' + 'e-list-group-item').classList.add('e-active');\n target.setAttribute('aria-selected', 'true');\n }\n this.refreshSelection();\n this.checkSelectAll();\n }\n else {\n if (this.isValidLI(li)) {\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (li.classList.contains('e-active')) {\n limit = limit - 1;\n }\n if (limit < this.maximumSelectionLength) {\n this.updateListSelection(li, e);\n this.checkPlaceholderSize();\n this.addListFocus(li);\n if ((this.allowCustomValue || this.allowFiltering) && this.mainList && this.listData) {\n if (this.mode !== 'CheckBox') {\n this.focusAtLastListItem(li.getAttribute('data-value'));\n this.refreshSelection();\n }\n }\n else {\n this.makeTextBoxEmpty();\n }\n }\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n if (this.value && this.value.length > 50) {\n setTimeout(function () {\n _this.updateDelimeter(_this.delimiterChar, e);\n }, 0);\n }\n else {\n this.updateDelimeter(this.delimiterChar, e);\n }\n this.refreshInputHight();\n }\n else {\n this.updateDelimeter(this.delimiterChar, e);\n }\n this.checkSelectAll();\n this.refreshPopup();\n if (this.hideSelectedItem) {\n this.focusAtFirstListItem();\n }\n if (this.closePopupOnSelect) {\n this.hidePopup(e);\n }\n else {\n e.preventDefault();\n }\n this.makeTextBoxEmpty();\n this.findGroupStart(target);\n if (this.mode !== 'CheckBox') {\n this.refreshListItems(isNullOrUndefined(li) ? null : li.textContent);\n }\n }\n else {\n e.preventDefault();\n }\n this.refreshPlaceHolder();\n this.deselectHeader();\n }\n };\n MultiSelect.prototype.findGroupStart = function (target) {\n if (this.enableGroupCheckBox && this.mode === 'CheckBox' && !isNullOrUndefined(this.fields.groupBy)) {\n var count = 0;\n var liChecked = 0;\n var liUnchecked = 0;\n var groupValues = void 0;\n if (this.itemTemplate && !target.getElementsByClassName('e-frame').length) {\n while (!target.getElementsByClassName('e-frame').length) {\n target = target.parentElement;\n }\n }\n if (target.classList.contains('e-frame')) {\n target = target.parentElement.parentElement;\n }\n groupValues = this.findGroupAttrtibutes(target, liChecked, liUnchecked, count, 0);\n groupValues = this.findGroupAttrtibutes(target, groupValues[0], groupValues[1], groupValues[2], 1);\n while (!target.classList.contains('e-list-group-item')) {\n if (target.classList.contains('e-list-icon')) {\n target = target.parentElement;\n }\n target = target.previousElementSibling;\n if (target == null) {\n break;\n }\n }\n this.updateCheckBox(target, groupValues[0], groupValues[1], groupValues[2]);\n }\n };\n MultiSelect.prototype.findGroupAttrtibutes = function (listElement, checked, unChecked, count, position) {\n while (!listElement.classList.contains('e-list-group-item')) {\n if (listElement.classList.contains('e-list-icon')) {\n listElement = listElement.parentElement;\n }\n if (listElement.getElementsByClassName('e-frame')[0].classList.contains('e-check') &&\n listElement.classList.contains('e-list-item')) {\n checked++;\n }\n else if (listElement.classList.contains('e-list-item')) {\n unChecked++;\n }\n count++;\n listElement = position ? listElement.nextElementSibling : listElement.previousElementSibling;\n if (listElement == null) {\n break;\n }\n }\n return [checked, unChecked, count];\n };\n MultiSelect.prototype.updateCheckBox = function (groupHeader, checked, unChecked, count) {\n if (groupHeader === null) {\n return;\n }\n var checkBoxElement = groupHeader.getElementsByClassName('e-frame')[0];\n if (count === checked) {\n checkBoxElement.classList.remove('e-stop');\n checkBoxElement.classList.add('e-check');\n closest(checkBoxElement, '.' + 'e-list-group-item').classList.add('e-active');\n groupHeader.setAttribute('aria-selected', 'true');\n }\n else if (count === unChecked) {\n checkBoxElement.classList.remove('e-check');\n checkBoxElement.classList.remove('e-stop');\n closest(checkBoxElement, '.' + 'e-list-group-item').classList.remove('e-active');\n groupHeader.setAttribute('aria-selected', 'false');\n }\n else if (this.maximumSelectionLength === checked - 1) {\n checkBoxElement.classList.remove('e-stop');\n groupHeader.setAttribute('aria-selected', 'true');\n closest(checkBoxElement, '.' + 'e-list-group-item').classList.add('e-active');\n checkBoxElement.classList.add('e-check');\n }\n else {\n checkBoxElement.classList.remove('e-check');\n checkBoxElement.classList.add('e-stop');\n closest(checkBoxElement, '.' + 'e-list-group-item').classList.add('e-active');\n groupHeader.setAttribute('aria-selected', 'false');\n }\n };\n MultiSelect.prototype.deselectHeader = function () {\n var limit = this.value && this.value.length ? this.value.length : 0;\n var collection = this.list.querySelectorAll('li.e-list-group-item:not(.e-active)');\n if (limit < this.maximumSelectionLength) {\n removeClass(collection, 'e-disable');\n }\n if (limit === this.maximumSelectionLength) {\n addClass(collection, 'e-disable');\n }\n };\n MultiSelect.prototype.onMouseOver = function (e) {\n var currentLi = closest(e.target, '.' + dropDownBaseClasses.li);\n if (currentLi === null && this.mode === 'CheckBox' && !isNullOrUndefined(this.fields.groupBy)\n && this.enableGroupCheckBox) {\n currentLi = closest(e.target, '.' + dropDownBaseClasses.group);\n }\n this.addListHover(currentLi);\n };\n MultiSelect.prototype.onMouseLeave = function () {\n this.removeHover();\n };\n MultiSelect.prototype.onListMouseDown = function (e) {\n e.preventDefault();\n this.scrollFocusStatus = true;\n };\n MultiSelect.prototype.onDocumentClick = function (e) {\n if (this.mode !== 'CheckBox') {\n var target = e.target;\n if (!(!isNullOrUndefined(this.popupObj) && closest(target, '[id=\"' + this.popupObj.element.id + '\"]')) &&\n !this.overAllWrapper.contains(e.target)) {\n this.scrollFocusStatus = false;\n }\n else {\n this.scrollFocusStatus = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.inputElement);\n }\n }\n };\n MultiSelect.prototype.wireListEvents = function () {\n if (!isNullOrUndefined(this.list)) {\n EventHandler.add(document, 'mousedown', this.onDocumentClick, this);\n EventHandler.add(this.list, 'mousedown', this.onListMouseDown, this);\n EventHandler.add(this.list, 'mouseup', this.onMouseClick, this);\n EventHandler.add(this.list, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.list, 'mouseout', this.onMouseLeave, this);\n }\n };\n MultiSelect.prototype.unwireListEvents = function () {\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n if (this.list) {\n EventHandler.remove(this.list, 'mousedown', this.onListMouseDown);\n EventHandler.remove(this.list, 'mouseup', this.onMouseClick);\n EventHandler.remove(this.list, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.list, 'mouseout', this.onMouseLeave);\n }\n };\n MultiSelect.prototype.hideOverAllClear = function () {\n if (!this.value || !this.value.length || this.inputElement.value === '') {\n this.overAllClear.style.display = 'none';\n }\n };\n MultiSelect.prototype.showOverAllClear = function () {\n if (((this.value && this.value.length) || this.inputElement.value !== '') && this.showClearButton && this.readonly !== true) {\n this.overAllClear.style.display = '';\n }\n else {\n this.overAllClear.style.display = 'none';\n }\n };\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n MultiSelect.prototype.focusIn = function () {\n if (document.activeElement !== this.inputElement && this.enabled) {\n this.inputElement.focus();\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n MultiSelect.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement && this.enabled) {\n this.inputElement.blur();\n }\n };\n /**\n * Shows the spinner loader.\n *\n * @returns {void}\n */\n MultiSelect.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n var filterClear = this.filterParent && this.filterParent.querySelector('.e-clear-icon.e-icons');\n if (this.overAllClear.style.display !== 'none' || filterClear) {\n this.spinnerElement = filterClear ? filterClear : this.overAllClear;\n }\n else {\n this.spinnerElement = this.createElement('span', { className: CLOSEICON_CLASS + ' ' + SPINNER_CLASS });\n this.componentWrapper.appendChild(this.spinnerElement);\n }\n createSpinner({ target: this.spinnerElement, width: Browser.isDevice ? '16px' : '14px' }, this.createElement);\n addClass([this.spinnerElement], DISABLE_ICON);\n showSpinner(this.spinnerElement);\n }\n };\n /**\n * Hides the spinner loader.\n *\n * @returns {void}\n */\n MultiSelect.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n removeClass([this.spinnerElement], DISABLE_ICON);\n if (this.spinnerElement.classList.contains(SPINNER_CLASS)) {\n detach(this.spinnerElement);\n }\n else {\n this.spinnerElement.innerHTML = '';\n }\n this.spinnerElement = null;\n }\n };\n MultiSelect.prototype.updateWrapperText = function (wrapperType, wrapperData) {\n if (this.valueTemplate || !this.enableHtmlSanitizer) {\n wrapperType.innerHTML = this.encodeHtmlEntities(wrapperData);\n }\n else {\n wrapperType.innerText = wrapperData;\n }\n };\n MultiSelect.prototype.updateDelimView = function () {\n if (this.delimiterWrapper) {\n this.hideDelimWrapper();\n }\n if (this.chipCollectionWrapper) {\n this.chipCollectionWrapper.style.display = 'none';\n }\n if (!isNullOrUndefined(this.viewWrapper)) {\n this.viewWrapper.style.display = '';\n this.viewWrapper.style.width = '';\n this.viewWrapper.classList.remove(TOTAL_COUNT_WRAPPER);\n }\n if (this.value && this.value.length) {\n var data = '';\n var temp = void 0;\n var tempData = void 0;\n var tempIndex = 1;\n var wrapperleng = void 0;\n var remaining = void 0;\n var downIconWidth = 0;\n var overAllContainer = void 0;\n this.updateWrapperText(this.viewWrapper, data);\n var l10nLocale = {\n noRecordsTemplate: 'No records found',\n actionFailureTemplate: 'Request failed',\n overflowCountTemplate: '+${count} more..',\n totalCountTemplate: '${count} selected'\n };\n var l10n = new L10n(this.getLocaleName(), l10nLocale, this.locale);\n if (l10n.getConstant('actionFailureTemplate') === '') {\n l10n = new L10n('dropdowns', l10nLocale, this.locale);\n }\n if (l10n.getConstant('noRecordsTemplate') === '') {\n l10n = new L10n('dropdowns', l10nLocale, this.locale);\n }\n var remainContent = l10n.getConstant('overflowCountTemplate');\n var totalContent = l10n.getConstant('totalCountTemplate');\n var raminElement = this.createElement('span', {\n className: REMAIN_WRAPPER\n });\n var remainCompildTemp = remainContent.replace('${count}', this.value.length.toString());\n raminElement.innerText = remainCompildTemp;\n this.viewWrapper.appendChild(raminElement);\n this.renderReactTemplates();\n var remainSize = raminElement.offsetWidth;\n remove(raminElement);\n if (this.showDropDownIcon) {\n downIconWidth = this.dropIcon.offsetWidth + parseInt(window.getComputedStyle(this.dropIcon).marginRight, 10);\n }\n this.checkClearIconWidth();\n if (!isNullOrUndefined(this.value)) {\n for (var index = 0; !isNullOrUndefined(this.value[index]); index++) {\n data += (index === 0) ? '' : this.delimiterChar + ' ';\n temp = this.getOverflowVal(index);\n data += temp;\n temp = this.viewWrapper.innerHTML;\n this.updateWrapperText(this.viewWrapper, data);\n wrapperleng = this.viewWrapper.offsetWidth +\n parseInt(window.getComputedStyle(this.viewWrapper).paddingRight, 10);\n overAllContainer = this.componentWrapper.offsetWidth -\n parseInt(window.getComputedStyle(this.componentWrapper).paddingLeft, 10) -\n parseInt(window.getComputedStyle(this.componentWrapper).paddingRight, 10);\n if ((wrapperleng + downIconWidth + this.clearIconWidth) > overAllContainer) {\n if (tempData !== undefined && tempData !== '') {\n temp = tempData;\n index = tempIndex + 1;\n }\n this.updateWrapperText(this.viewWrapper, temp);\n remaining = this.value.length - index;\n wrapperleng = this.viewWrapper.offsetWidth +\n parseInt(window.getComputedStyle(this.viewWrapper).paddingRight, 10);\n while (((wrapperleng + remainSize + downIconWidth + this.clearIconWidth) > overAllContainer) && wrapperleng !== 0\n && this.viewWrapper.innerHTML !== '') {\n var textArr = [];\n this.viewWrapper.innerHTML = textArr.join(this.delimiterChar);\n remaining = this.value.length;\n wrapperleng = this.viewWrapper.offsetWidth +\n parseInt(window.getComputedStyle(this.viewWrapper).paddingRight, 10);\n }\n break;\n }\n else if ((wrapperleng + remainSize + downIconWidth + this.clearIconWidth) <= overAllContainer) {\n tempData = data;\n tempIndex = index;\n }\n else if (index === 0) {\n tempData = '';\n tempIndex = -1;\n }\n }\n }\n if (remaining > 0) {\n var totalWidth = overAllContainer - downIconWidth - this.clearIconWidth;\n this.viewWrapper.appendChild(this.updateRemainTemplate(raminElement, this.viewWrapper, remaining, remainContent, totalContent, totalWidth));\n this.updateRemainWidth(this.viewWrapper, totalWidth);\n this.updateRemainingText(raminElement, downIconWidth, remaining, remainContent, totalContent);\n }\n }\n else {\n if (!isNullOrUndefined(this.viewWrapper)) {\n this.viewWrapper.innerHTML = '';\n this.viewWrapper.style.display = 'none';\n }\n }\n };\n MultiSelect.prototype.checkClearIconWidth = function () {\n if (this.showClearButton) {\n this.clearIconWidth = this.overAllClear.offsetWidth;\n }\n };\n MultiSelect.prototype.updateRemainWidth = function (viewWrapper, totalWidth) {\n if (viewWrapper.classList.contains(TOTAL_COUNT_WRAPPER) && totalWidth < (viewWrapper.offsetWidth +\n parseInt(window.getComputedStyle(viewWrapper).paddingLeft, 10)\n + parseInt(window.getComputedStyle(viewWrapper).paddingLeft, 10))) {\n viewWrapper.style.width = totalWidth + 'px';\n }\n };\n MultiSelect.prototype.updateRemainTemplate = function (raminElement, viewWrapper, remaining, remainContent, totalContent, totalWidth) {\n if (viewWrapper.firstChild && viewWrapper.firstChild.nodeType === 3 && viewWrapper.firstChild.nodeValue === '') {\n viewWrapper.removeChild(viewWrapper.firstChild);\n }\n raminElement.innerHTML = '';\n var remainTemp = remainContent.replace('${count}', remaining.toString());\n var totalTemp = totalContent.replace('${count}', remaining.toString());\n raminElement.innerText = (viewWrapper.firstChild && viewWrapper.firstChild.nodeType === 3) ? remainTemp : totalTemp;\n if (viewWrapper.firstChild && viewWrapper.firstChild.nodeType === 3) {\n viewWrapper.classList.remove(TOTAL_COUNT_WRAPPER);\n }\n else {\n viewWrapper.classList.add(TOTAL_COUNT_WRAPPER);\n this.updateRemainWidth(viewWrapper, totalWidth);\n }\n return raminElement;\n };\n MultiSelect.prototype.updateRemainingText = function (raminElement, downIconWidth, remaining, remainContent, totalContent) {\n var overAllContainer = this.componentWrapper.offsetWidth -\n parseInt(window.getComputedStyle(this.componentWrapper).paddingLeft, 10) -\n parseInt(window.getComputedStyle(this.componentWrapper).paddingRight, 10);\n var wrapperleng = this.viewWrapper.offsetWidth + parseInt(window.getComputedStyle(this.viewWrapper).paddingRight, 10);\n if (((wrapperleng + downIconWidth) >= overAllContainer) && wrapperleng !== 0 && this.viewWrapper.firstChild &&\n this.viewWrapper.firstChild.nodeType === 3) {\n while (((wrapperleng + downIconWidth) > overAllContainer) && wrapperleng !== 0 && this.viewWrapper.firstChild &&\n this.viewWrapper.firstChild.nodeType === 3) {\n var textArr = this.viewWrapper.firstChild.nodeValue.split(this.delimiterChar);\n textArr.pop();\n this.viewWrapper.firstChild.nodeValue = textArr.join(this.delimiterChar);\n if (this.viewWrapper.firstChild.nodeValue === '') {\n this.viewWrapper.removeChild(this.viewWrapper.firstChild);\n }\n remaining++;\n wrapperleng = this.viewWrapper.offsetWidth;\n }\n var totalWidth = overAllContainer - downIconWidth;\n this.updateRemainTemplate(raminElement, this.viewWrapper, remaining, remainContent, totalContent, totalWidth);\n }\n };\n MultiSelect.prototype.getOverflowVal = function (index) {\n var temp;\n if (this.mainData && this.mainData.length) {\n if (this.mode === 'CheckBox') {\n var newTemp = this.listData;\n this.listData = this.mainData;\n temp = this.getTextByValue(this.value[index]);\n this.listData = newTemp;\n }\n else {\n temp = this.getTextByValue(this.value[index]);\n }\n }\n else {\n temp = this.value[index];\n }\n return temp;\n };\n MultiSelect.prototype.unWireEvent = function () {\n if (!isNullOrUndefined(this.componentWrapper)) {\n EventHandler.remove(this.componentWrapper, 'mousedown', this.wrapperClick);\n }\n EventHandler.remove(window, 'resize', this.windowResize);\n if (!isNullOrUndefined(this.inputElement)) {\n EventHandler.remove(this.inputElement, 'focus', this.focusInHandler);\n EventHandler.remove(this.inputElement, 'keydown', this.onKeyDown);\n if (this.mode !== 'CheckBox') {\n EventHandler.remove(this.inputElement, 'input', this.onInput);\n }\n EventHandler.remove(this.inputElement, 'keyup', this.keyUp);\n var formElement = closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.remove(formElement, 'reset', this.resetValueHandler);\n }\n EventHandler.remove(this.inputElement, 'blur', this.onBlurHandler);\n }\n if (!isNullOrUndefined(this.componentWrapper)) {\n EventHandler.remove(this.componentWrapper, 'mouseover', this.mouseIn);\n EventHandler.remove(this.componentWrapper, 'mouseout', this.mouseOut);\n }\n if (!isNullOrUndefined(this.overAllClear)) {\n EventHandler.remove(this.overAllClear, 'mousedown', this.clearAll);\n }\n if (!isNullOrUndefined(this.inputElement)) {\n EventHandler.remove(this.inputElement, 'paste', this.pasteHandler);\n }\n };\n MultiSelect.prototype.selectAllItem = function (state, event, list) {\n var li;\n if (!isNullOrUndefined(this.list)) {\n li = this.list.querySelectorAll(state ?\n 'li.e-list-item:not([aria-selected=\"true\"]):not(.e-reorder-hide)' :\n 'li.e-list-item[aria-selected=\"true\"]:not(.e-reorder-hide)');\n }\n if (this.value && this.value.length && event && event.target\n && closest(event.target, '.e-close-hooker') && this.allowFiltering) {\n li = this.mainList.querySelectorAll(state ?\n 'li.e-list-item:not([aria-selected=\"true\"]):not(.e-reorder-hide)' :\n 'li.e-list-item[aria-selected=\"true\"]:not(.e-reorder-hide)');\n }\n if (this.enableGroupCheckBox && this.mode === 'CheckBox' && !isNullOrUndefined(this.fields.groupBy)) {\n var target = (event ? (this.groupTemplate ? closest(event.target, '.e-list-group-item') : event.target) : null);\n target = (event && event.keyCode === 32) ? list : target;\n target = (target && target.classList.contains('e-frame')) ? target.parentElement.parentElement : target;\n if (target && target.classList.contains('e-list-group-item')) {\n var listElement = target.nextElementSibling;\n if (isNullOrUndefined(listElement)) {\n return;\n }\n while (listElement.classList.contains('e-list-item')) {\n if (state) {\n if (!listElement.firstElementChild.lastElementChild.classList.contains('e-check')) {\n var selectionLimit = this.value && this.value.length ? this.value.length : 0;\n if (listElement.classList.contains('e-active')) {\n selectionLimit -= 1;\n }\n if (selectionLimit < this.maximumSelectionLength) {\n this.updateListSelection(listElement, event);\n }\n }\n }\n else {\n if (listElement.firstElementChild.lastElementChild.classList.contains('e-check')) {\n this.updateListSelection(listElement, event);\n }\n }\n listElement = listElement.nextElementSibling;\n if (listElement == null) {\n break;\n }\n }\n if (target.classList.contains('e-list-group-item')) {\n var focusedElement = this.list.getElementsByClassName('e-item-focus')[0];\n if (focusedElement) {\n focusedElement.classList.remove('e-item-focus');\n }\n if (state) {\n target.classList.add('e-active');\n }\n else {\n target.classList.remove('e-active');\n }\n target.classList.add('e-item-focus');\n this.updateAriaActiveDescendant();\n }\n this.textboxValueUpdate();\n this.checkPlaceholderSize();\n if (!this.changeOnBlur && event) {\n this.updateValueState(event, this.value, this.tempValues);\n }\n }\n else {\n this.updateValue(event, li, state);\n }\n }\n else {\n this.updateValue(event, li, state);\n }\n this.addValidInputClass();\n };\n MultiSelect.prototype.updateValue = function (event, li, state) {\n var _this = this;\n var length = li.length;\n var beforeSelectArgs = {\n event: event,\n items: state ? li : [],\n itemData: state ? this.listData : [],\n isInteracted: event ? true : false,\n isChecked: state,\n preventSelectEvent: false\n };\n this.trigger('beforeSelectAll', beforeSelectArgs);\n if (li && li.length) {\n var index_1 = 0;\n var count_1 = 0;\n if (this.enableGroupCheckBox) {\n count_1 = state ? this.maximumSelectionLength - (this.value ? this.value.length : 0) : li.length;\n }\n else {\n count_1 = state ? this.maximumSelectionLength - (this.value ? this.value.length : 0) : this.maximumSelectionLength;\n }\n if (!beforeSelectArgs.preventSelectEvent) {\n while (index_1 < length && index_1 <= 50 && index_1 < count_1) {\n this.updateListSelection(li[index_1], event, length - index_1);\n if (this.enableGroupCheckBox) {\n this.findGroupStart(li[index_1]);\n }\n index_1++;\n }\n if (length > 50) {\n setTimeout(function () {\n while (index_1 < length && index_1 < count_1) {\n _this.updateListSelection(li[index_1], event, length - index_1);\n if (_this.enableGroupCheckBox) {\n _this.findGroupStart(li[index_1]);\n }\n index_1++;\n }\n _this.updatedataValueItems(event);\n if (!_this.changeOnBlur) {\n _this.updateValueState(event, _this.value, _this.tempValues);\n _this.isSelectAll = _this.isSelectAll ? !_this.isSelectAll : _this.isSelectAll;\n }\n _this.updateHiddenElement();\n }, 0);\n }\n }\n else {\n for (var i = 0; i < li.length && i < count_1; i++) {\n this.removeHover();\n var customVal = li[i].getAttribute('data-value');\n var value = this.getFormattedValue(customVal);\n var mainElement = this.mainList ? this.mainList.querySelectorAll(state ?\n 'li.e-list-item:not([aria-selected=\"true\"]):not(.e-reorder-hide)' :\n 'li.e-list-item[aria-selected=\"true\"]:not(.e-reorder-hide)')[i] : null;\n if (state) {\n this.value = !this.value ? [] : this.value;\n if (this.value.indexOf(value) < 0) {\n this.setProperties({ value: [].concat([], this.value, [value]) }, true);\n }\n this.removeFocus();\n this.addListSelection(li[i], mainElement);\n this.updateChipStatus();\n this.checkMaxSelection();\n }\n else {\n this.removeAllItems(value, event, false, li[i], mainElement);\n }\n if (this.enableGroupCheckBox) {\n this.findGroupStart(li[i]);\n }\n }\n if (!state) {\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (limit < this.maximumSelectionLength) {\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.e-active)');\n removeClass(collection, 'e-disable');\n }\n }\n var args = {\n event: event,\n items: state ? li : [],\n itemData: state ? this.listData : [],\n isInteracted: event ? true : false,\n isChecked: state\n };\n this.trigger('selectedAll', args);\n }\n }\n this.updatedataValueItems(event);\n this.checkPlaceholderSize();\n if (length <= 50 && !beforeSelectArgs.preventSelectEvent) {\n if (!this.changeOnBlur) {\n this.updateValueState(event, this.value, this.tempValues);\n this.isSelectAll = this.isSelectAll ? !this.isSelectAll : this.isSelectAll;\n }\n this.updateHiddenElement();\n }\n };\n MultiSelect.prototype.updateHiddenElement = function () {\n var _this = this;\n var hiddenValue = '';\n var wrapperText = '';\n var data = '';\n var text = [];\n if (this.mode === 'CheckBox') {\n this.value.map(function (value, index) {\n hiddenValue += '';\n if (_this.listData) {\n data = _this.getTextByValue(value);\n }\n else {\n data = value;\n }\n wrapperText += data + _this.delimiterChar + ' ';\n text.push(data);\n });\n this.hiddenElement.innerHTML = hiddenValue;\n this.updateWrapperText(this.delimiterWrapper, wrapperText);\n this.delimiterWrapper.setAttribute('id', getUniqueID('delim_val'));\n this.inputElement.setAttribute('aria-labelledby', this.delimiterWrapper.id);\n this.setProperties({ text: text.toString() }, true);\n this.refreshInputHight();\n this.refreshPlaceHolder();\n }\n };\n MultiSelect.prototype.updatedataValueItems = function (event) {\n this.deselectHeader();\n this.textboxValueUpdate(event);\n };\n MultiSelect.prototype.textboxValueUpdate = function (event) {\n var isRemoveAll = event && event.target && (closest(event.target, '.e-selectall-parent')\n || closest(event.target, '.e-close-hooker'));\n if (this.mode !== 'Box' && !this.isPopupOpen() && !(this.mode === 'CheckBox' && (this.isSelectAll || isRemoveAll))) {\n this.updateDelimView();\n }\n else {\n this.searchWrapper.classList.remove(ZERO_SIZE);\n }\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n if (!(isRemoveAll || this.isSelectAll)) {\n this.updateDelimeter(this.delimiterChar, event);\n }\n this.refreshInputHight();\n }\n else {\n this.updateDelimeter(this.delimiterChar, event);\n }\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.setProperties({ 'zIndex': this.zIndex });\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n MultiSelect.prototype.updateDataSource = function (prop) {\n if (isNullOrUndefined(this.list)) {\n this.renderPopup();\n }\n else {\n this.resetList(this.dataSource);\n }\n if (this.value && this.value.length) {\n this.setProperties({ 'value': this.value });\n this.refreshSelection();\n }\n };\n MultiSelect.prototype.onLoadSelect = function () {\n this.setDynValue = true;\n this.renderPopup();\n };\n MultiSelect.prototype.selectAllItems = function (state, event) {\n var _this = this;\n if (isNullOrUndefined(this.list)) {\n this.selectAllAction = function () {\n if (_this.mode === 'CheckBox' && _this.showSelectAll) {\n var args = {\n module: 'CheckBoxSelection',\n enable: _this.mode === 'CheckBox',\n value: state ? 'check' : 'uncheck'\n };\n _this.notify('checkSelectAll', args);\n }\n _this.selectAllItem(state, event);\n _this.selectAllAction = null;\n };\n _super.prototype.render.call(this);\n }\n else {\n this.selectAllAction = null;\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n var args = {\n value: state ? 'check' : 'uncheck',\n enable: this.mode === 'CheckBox',\n module: 'CheckBoxSelection'\n };\n this.notify('checkSelectAll', args);\n }\n this.selectAllItem(state, event);\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} Returns the persisted data of the component.\n */\n MultiSelect.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n /**\n * Dynamically change the value of properties.\n *\n * @param {MultiSelectModel} newProp - Returns the dynamic property value of the component.\n * @param {MultiSelectModel} oldProp - Returns the previous property value of the component.\n * @private\n * @returns {void}\n */\n MultiSelect.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (newProp.dataSource && !isNullOrUndefined(Object.keys(newProp.dataSource))\n || newProp.query && !isNullOrUndefined(Object.keys(newProp.query))) {\n if (this.resetFilteredData) {\n // The filtered data is not being reset in the component after the user focuses out.\n this.resetMainList = !this.resetMainList ? this.mainList : this.resetMainList;\n this.resetFilteredData = false;\n }\n this.mainList = null;\n this.mainData = null;\n this.isFirstClick = false;\n this.isDynamicDataChange = true;\n }\n if (this.getModuleName() === 'multiselect') {\n this.filterAction = false;\n this.setUpdateInitial(['fields', 'query', 'dataSource'], newProp);\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'query':\n case 'dataSource':\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n if (!isNullOrUndefined(this.popupObj)) {\n this.popupObj.destroy();\n this.popupObj = null;\n }\n this.renderPopup();\n }\n break;\n case 'htmlAttributes':\n this.updateHTMLAttribute();\n break;\n case 'showClearButton':\n this.updateClearButton(newProp.showClearButton);\n break;\n case 'text':\n this.updateVal(this.value, this.value, 'text');\n break;\n case 'value':\n this.updateVal(this.value, oldProp.value, 'value');\n this.addValidInputClass();\n if (!this.closePopupOnSelect && this.isPopupOpen()) {\n this.refreshPopup();\n }\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n break;\n case 'width':\n this.setWidth(newProp.width);\n this.popupObj.setProperties({ width: this.calcPopupWidth() });\n break;\n case 'placeholder':\n this.refreshPlaceHolder();\n break;\n case 'filterBarPlaceholder':\n if (this.allowFiltering) {\n this.notify('filterBarPlaceholder', { filterBarPlaceholder: newProp.filterBarPlaceholder });\n }\n break;\n case 'delimiterChar':\n if (this.mode !== 'Box') {\n this.updateDelimView();\n }\n this.updateData(newProp.delimiterChar);\n break;\n case 'cssClass':\n this.updateOldPropCssClass(oldProp.cssClass);\n this.updateCssClass();\n this.calculateWidth();\n break;\n case 'enableRtl':\n this.enableRTL(newProp.enableRtl);\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n break;\n case 'readonly':\n this.updateReadonly(newProp.readonly);\n this.hidePopup();\n break;\n case 'enabled':\n this.hidePopup();\n this.enable(newProp.enabled);\n break;\n case 'showSelectAll':\n if (this.popupObj) {\n this.popupObj.destroy();\n this.popupObj = null;\n }\n this.renderPopup();\n break;\n case 'showDropDownIcon':\n this.dropDownIcon();\n break;\n case 'floatLabelType':\n this.setFloatLabelType();\n this.addValidInputClass();\n Input.createSpanElement(this.overAllWrapper, this.createElement);\n this.calculateWidth();\n if (!isNullOrUndefined(this.overAllWrapper) && !isNullOrUndefined(this.overAllWrapper.getElementsByClassName('e-ddl-icon')[0] && this.overAllWrapper.getElementsByClassName('e-float-text-content')[0] && this.floatLabelType !== 'Never')) {\n this.overAllWrapper.getElementsByClassName('e-float-text-content')[0].classList.add('e-icon');\n }\n break;\n case 'enableSelectionOrder':\n break;\n case 'selectAllText':\n this.notify('selectAllText', false);\n break;\n case 'popupHeight':\n if (this.popupObj) {\n var overAllHeight = parseInt(this.popupHeight, 10);\n if (this.popupHeight !== 'auto') {\n this.list.style.maxHeight = formatUnit(overAllHeight);\n this.popupWrapper.style.maxHeight = formatUnit(this.popupHeight);\n }\n else {\n this.list.style.maxHeight = formatUnit(this.popupHeight);\n }\n }\n break;\n case 'headerTemplate':\n case 'footerTemplate':\n this.reInitializePoup();\n break;\n case 'allowFiltering':\n if (this.mode === 'CheckBox' && this.popupObj) {\n this.reInitializePoup();\n }\n this.updateSelectElementData(this.allowFiltering);\n break;\n default:\n {\n // eslint-disable-next-line max-len\n var msProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, msProps.newProperty, msProps.oldProperty);\n }\n break;\n }\n }\n };\n MultiSelect.prototype.reInitializePoup = function () {\n if (this.popupObj) {\n this.popupObj.destroy();\n this.popupObj = null;\n }\n this.renderPopup();\n };\n MultiSelect.prototype.presentItemValue = function (ulElement) {\n var valuecheck = [];\n for (var i = 0; i < this.value.length; i++) {\n var checkEle = this.findListElement(((this.allowFiltering && !isNullOrUndefined(this.mainList)) ? this.mainList : ulElement), 'li', 'data-value', this.value[i]);\n if (!checkEle) {\n valuecheck.push(this.value[i]);\n }\n }\n return valuecheck;\n };\n ;\n MultiSelect.prototype.addNonPresentItems = function (valuecheck, ulElement, list, event) {\n var _this = this;\n this.dataSource.executeQuery(this.getForQuery(valuecheck)).then(function (e) {\n if (e.result.length > 0) {\n _this.addItem(e.result, list.length);\n }\n _this.updateActionList(ulElement, list, event);\n });\n };\n ;\n MultiSelect.prototype.updateVal = function (newProp, oldProp, prop) {\n if (!this.list) {\n this.onLoadSelect();\n }\n else if ((this.dataSource instanceof DataManager) && (!this.listData || !(this.mainList && this.mainData))) {\n this.onLoadSelect();\n }\n else {\n var valuecheck = [];\n if (!isNullOrUndefined(this.value) && !this.allowCustomValue) {\n valuecheck = this.presentItemValue(this.ulElement);\n }\n if (prop == 'value' && valuecheck.length > 0 && this.dataSource instanceof DataManager && !isNullOrUndefined(this.value)\n && this.listData != null) {\n this.mainData = null;\n this.setDynValue = true;\n this.addNonPresentItems(valuecheck, this.ulElement, this.listData);\n }\n else {\n if (prop === 'text') {\n this.initialTextUpdate();\n newProp = this.value;\n }\n if (isNullOrUndefined(this.value) || this.value.length === 0) {\n this.tempValues = oldProp;\n }\n // eslint-disable-next-line\n if (this.allowCustomValue && (this.mode === 'Default' || this.mode === 'Box') && this.isReact && this.inputFocus\n && this.isPopupOpen() && this.mainData !== this.listData) {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n this.onActionComplete(list, this.mainData);\n }\n this.initialValueUpdate();\n if (this.mode !== 'Box' && !this.inputFocus) {\n this.updateDelimView();\n }\n if (!this.inputFocus) {\n this.refreshInputHight();\n }\n this.refreshPlaceHolder();\n if (this.mode !== 'CheckBox' && this.changeOnBlur) {\n this.updateValueState(null, newProp, oldProp);\n }\n this.checkPlaceholderSize();\n }\n }\n if (!this.changeOnBlur) {\n this.updateValueState(null, newProp, oldProp);\n }\n };\n /**\n * Adds a new item to the multiselect popup list. By default, new item appends to the list as the last item,\n * but you can insert based on the index parameter.\n *\n * @param { Object[] } items - Specifies an array of JSON data or a JSON data.\n * @param { number } itemIndex - Specifies the index to place the newly added item in the popup list.\n * @returns {void}\n */\n MultiSelect.prototype.addItem = function (items, itemIndex) {\n _super.prototype.addItem.call(this, items, itemIndex);\n };\n /**\n * Hides the popup, if the popup in a open state.\n *\n * @returns {void}\n */\n MultiSelect.prototype.hidePopup = function (e) {\n var _this = this;\n var delay = 100;\n if (this.isPopupOpen()) {\n var animModel = {\n name: 'FadeOut',\n duration: 100,\n delay: delay ? delay : 0\n };\n var eventArgs = { popup: this.popupObj, cancel: false, animation: animModel, event: e || null };\n this.trigger('close', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n if (_this.fields.groupBy && _this.mode !== 'CheckBox' && _this.fixedHeaderElement) {\n remove(_this.fixedHeaderElement);\n _this.fixedHeaderElement = null;\n }\n _this.beforePopupOpen = false;\n _this.overAllWrapper.classList.remove(iconAnimation);\n _this.popupObj.hide(new Animation(eventArgs.animation));\n attributes(_this.inputElement, { 'aria-expanded': 'false' });\n _this.inputElement.removeAttribute('aria-owns');\n _this.inputElement.removeAttribute('aria-activedescendant');\n if (_this.allowFiltering) {\n _this.notify('inputFocus', { module: 'CheckBoxSelection', enable: _this.mode === 'CheckBox', value: 'clear' });\n }\n _this.popupObj.hide();\n removeClass([document.body, _this.popupObj.element], 'e-popup-full-page');\n EventHandler.remove(_this.list, 'keydown', _this.onKeyDown);\n }\n });\n }\n };\n /**\n * Shows the popup, if the popup in a closed state.\n *\n * @returns {void}\n */\n MultiSelect.prototype.showPopup = function (e) {\n var _this = this;\n if (!this.enabled) {\n return;\n }\n var args = { cancel: false };\n this.trigger('beforeOpen', args, function (args) {\n if (!args.cancel) {\n if (!_this.ulElement) {\n _this.beforePopupOpen = true;\n _super.prototype.render.call(_this, e);\n if (_this.mode === 'CheckBox' && Browser.isDevice && _this.allowFiltering) {\n _this.notify('popupFullScreen', { module: 'CheckBoxSelection', enable: _this.mode === 'CheckBox' });\n }\n return;\n }\n if (_this.mode === 'CheckBox' && Browser.isDevice && _this.allowFiltering) {\n _this.notify('popupFullScreen', { module: 'CheckBoxSelection', enable: _this.mode === 'CheckBox' });\n }\n var mainLiLength = _this.ulElement.querySelectorAll('li.' + 'e-list-item').length;\n var liLength = _this.ulElement.querySelectorAll('li.'\n + dropDownBaseClasses.li + '.' + HIDE_LIST).length;\n if (mainLiLength > 0 && (mainLiLength === liLength) && (liLength === _this.mainData.length) && !(_this.targetElement() !== '' && _this.allowCustomValue)) {\n _this.beforePopupOpen = false;\n return;\n }\n _this.onPopupShown(e);\n }\n });\n };\n /**\n * Based on the state parameter, entire list item will be selected/deselected.\n * parameter\n * `true` - Selects entire list items.\n * `false` - Un Selects entire list items.\n *\n * @param {boolean} state - if it’s true then Selects the entire list items. If it’s false the Unselects entire list items.\n * @returns {void}\n */\n MultiSelect.prototype.selectAll = function (state) {\n this.isSelectAll = true;\n this.selectAllItems(state);\n };\n /**\n * Return the module name of this component.\n *\n * @private\n * @returns {string} Return the module name of this component.\n */\n MultiSelect.prototype.getModuleName = function () {\n return 'multiselect';\n };\n /**\n * Allows you to clear the selected values from the Multiselect component.\n *\n * @returns {void}\n */\n MultiSelect.prototype.clear = function () {\n var _this = this;\n this.selectAll(false);\n if (this.value && this.value.length) {\n setTimeout(function () {\n _this.setProperties({ value: null }, true);\n }, 0);\n }\n else {\n this.setProperties({ value: null }, true);\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n MultiSelect.prototype.render = function () {\n if (!isNullOrUndefined(this.value)) {\n // eslint-disable-next-line\n this.value = this.value.slice();\n }\n this.setDynValue = this.initStatus = false;\n this.isSelectAll = false;\n this.selectAllEventEle = [];\n this.searchWrapper = this.createElement('span', { className: SEARCHBOX_WRAPPER + ' ' + ((this.mode === 'Box') ? BOX_ELEMENT : '') });\n this.viewWrapper = this.createElement('span', { className: DELIMITER_VIEW + ' ' + DELIMITER_WRAPPER, styles: 'display:none;' });\n this.overAllClear = this.createElement('span', {\n className: CLOSEICON_CLASS, styles: 'display:none;'\n });\n this.componentWrapper = this.createElement('div', { className: ELEMENT_WRAPPER });\n this.overAllWrapper = this.createElement('div', { className: OVER_ALL_WRAPPER });\n if (this.mode === 'CheckBox') {\n addClass([this.overAllWrapper], 'e-checkbox');\n }\n if (Browser.isDevice) {\n this.componentWrapper.classList.add(ELEMENT_MOBILE_WRAPPER);\n }\n this.setWidth(this.width);\n this.overAllWrapper.appendChild(this.componentWrapper);\n this.popupWrapper = this.createElement('div', { id: this.element.id + '_popup', className: POPUP_WRAPPER });\n if (this.mode === 'Delimiter' || this.mode === 'CheckBox') {\n this.delimiterWrapper = this.createElement('span', { className: DELIMITER_WRAPPER, styles: 'display:none' });\n this.componentWrapper.appendChild(this.delimiterWrapper);\n }\n else {\n this.chipCollectionWrapper = this.createElement('span', {\n className: CHIP_WRAPPER,\n styles: 'display:none'\n });\n if (this.mode === 'Default') {\n this.chipCollectionWrapper.setAttribute('id', getUniqueID('chip_default'));\n }\n else if (this.mode === 'Box') {\n this.chipCollectionWrapper.setAttribute('id', getUniqueID('chip_box'));\n }\n this.componentWrapper.appendChild(this.chipCollectionWrapper);\n }\n if (this.mode !== 'Box') {\n this.componentWrapper.appendChild(this.viewWrapper);\n }\n this.componentWrapper.appendChild(this.searchWrapper);\n if (this.showClearButton && !Browser.isDevice) {\n this.componentWrapper.appendChild(this.overAllClear);\n }\n else {\n this.componentWrapper.classList.add(CLOSE_ICON_HIDE);\n }\n this.dropDownIcon();\n this.inputElement = this.createElement('input', {\n className: INPUT_ELEMENT,\n attrs: {\n spellcheck: 'false',\n type: 'text',\n autocomplete: 'off',\n tabindex: '0',\n role: 'combobox'\n }\n });\n if (this.mode === 'Default' || this.mode === 'Box') {\n this.inputElement.setAttribute('aria-labelledby', this.chipCollectionWrapper.id);\n }\n if (this.element.tagName !== this.getNgDirective()) {\n this.element.style.display = 'none';\n }\n if (this.element.tagName === this.getNgDirective()) {\n this.element.appendChild(this.overAllWrapper);\n this.searchWrapper.appendChild(this.inputElement);\n }\n else {\n this.element.parentElement.insertBefore(this.overAllWrapper, this.element);\n this.searchWrapper.appendChild(this.inputElement);\n this.searchWrapper.appendChild(this.element);\n this.element.removeAttribute('tabindex');\n }\n if (this.floatLabelType !== 'Never') {\n createFloatLabel(this.overAllWrapper, this.searchWrapper, this.element, this.inputElement, this.value, this.floatLabelType, this.placeholder);\n }\n else if (this.floatLabelType === 'Never') {\n this.refreshPlaceHolder();\n }\n this.addValidInputClass();\n this.element.style.opacity = '';\n var id = this.element.getAttribute('id') ? this.element.getAttribute('id') : getUniqueID('ej2_dropdownlist');\n this.element.id = id;\n this.hiddenElement = this.createElement('select', {\n attrs: { 'aria-hidden': 'true', 'class': HIDDEN_ELEMENT, 'tabindex': '-1', 'multiple': '' }\n });\n this.componentWrapper.appendChild(this.hiddenElement);\n this.validationAttribute(this.element, this.hiddenElement);\n if (this.mode !== 'CheckBox') {\n this.hideOverAllClear();\n }\n if (!isNullOrUndefined(closest(this.element, \"fieldset\")) && closest(this.element, \"fieldset\").disabled) {\n this.enabled = false;\n }\n this.wireEvent();\n this.enable(this.enabled);\n this.enableRTL(this.enableRtl);\n this.checkInitialValue();\n if (this.element.hasAttribute('data-val')) {\n this.element.setAttribute('data-val', 'false');\n }\n Input.createSpanElement(this.overAllWrapper, this.createElement);\n this.calculateWidth();\n if (!isNullOrUndefined(this.overAllWrapper) && !isNullOrUndefined(this.overAllWrapper.getElementsByClassName('e-ddl-icon')[0] && this.overAllWrapper.getElementsByClassName('e-float-text-content')[0] && this.floatLabelType !== 'Never')) {\n this.overAllWrapper.getElementsByClassName('e-float-text-content')[0].classList.add('e-icon');\n }\n this.renderComplete();\n };\n MultiSelect.prototype.checkInitialValue = function () {\n var _this = this;\n var isData = this.dataSource instanceof Array ? (this.dataSource.length > 0)\n : !isNullOrUndefined(this.dataSource);\n if (!(this.value && this.value.length) &&\n isNullOrUndefined(this.text) &&\n !isData &&\n this.element.tagName === 'SELECT' &&\n this.element.options.length > 0) {\n var optionsElement = this.element.options;\n var valueCol = [];\n var textCol = '';\n for (var index = 0, optionsLen = optionsElement.length; index < optionsLen; index++) {\n var opt = optionsElement[index];\n if (!isNullOrUndefined(opt.getAttribute('selected'))) {\n if (opt.getAttribute('value')) {\n valueCol.push(opt.getAttribute('value'));\n }\n else {\n textCol += (opt.text + this.delimiterChar);\n }\n }\n }\n if (valueCol.length > 0) {\n this.setProperties({ value: valueCol }, true);\n }\n else if (textCol !== '') {\n this.setProperties({ text: textCol }, true);\n }\n if (valueCol.length > 0 || textCol !== '') {\n this.refreshInputHight();\n this.refreshPlaceHolder();\n }\n }\n if ((this.value && this.value.length) || !isNullOrUndefined(this.text)) {\n if (!this.list) {\n _super.prototype.render.call(this);\n }\n }\n if (!isNullOrUndefined(this.text) && (isNullOrUndefined(this.value) || this.value.length === 0)) {\n this.initialTextUpdate();\n }\n if (this.value && this.value.length) {\n if (!(this.dataSource instanceof DataManager)) {\n this.initialValueUpdate();\n this.initialUpdate();\n }\n else {\n this.setInitialValue = function () {\n _this.initStatus = false;\n _this.initialValueUpdate();\n _this.initialUpdate();\n _this.setInitialValue = null;\n _this.initStatus = true;\n };\n }\n this.updateTempValue();\n }\n else {\n this.initialUpdate();\n }\n this.initStatus = true;\n this.checkAutoFocus();\n if (!isNullOrUndefined(this.text)) {\n this.element.setAttribute('data-initial-value', this.text);\n }\n };\n MultiSelect.prototype.checkAutoFocus = function () {\n if (this.element.hasAttribute('autofocus')) {\n this.inputElement.focus();\n }\n };\n MultiSelect.prototype.setFloatLabelType = function () {\n removeFloating(this.overAllWrapper, this.componentWrapper, this.searchWrapper, this.inputElement, this.value, this.floatLabelType, this.placeholder);\n if (this.floatLabelType !== 'Never') {\n createFloatLabel(this.overAllWrapper, this.searchWrapper, this.element, this.inputElement, this.value, this.floatLabelType, this.placeholder);\n }\n };\n MultiSelect.prototype.addValidInputClass = function () {\n if (!isNullOrUndefined(this.overAllWrapper)) {\n if ((!isNullOrUndefined(this.value) && this.value.length) || this.floatLabelType === 'Always') {\n addClass([this.overAllWrapper], 'e-valid-input');\n }\n else {\n removeClass([this.overAllWrapper], 'e-valid-input');\n }\n }\n };\n MultiSelect.prototype.dropDownIcon = function () {\n if (this.showDropDownIcon) {\n this.dropIcon = this.createElement('span', { className: dropdownIcon });\n this.componentWrapper.appendChild(this.dropIcon);\n addClass([this.componentWrapper], ['e-down-icon']);\n }\n else {\n if (!isNullOrUndefined(this.dropIcon)) {\n this.dropIcon.parentElement.removeChild(this.dropIcon);\n removeClass([this.componentWrapper], ['e-down-icon']);\n }\n }\n };\n MultiSelect.prototype.initialUpdate = function () {\n if (this.mode !== 'Box' && !(this.setDynValue && this.mode === 'Default' && this.inputFocus)) {\n this.updateDelimView();\n }\n this.updateCssClass();\n this.updateHTMLAttribute();\n this.updateReadonly(this.readonly);\n this.refreshInputHight();\n this.checkPlaceholderSize();\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n *\n * @method destroy\n * @returns {void}\n */\n MultiSelect.prototype.destroy = function () {\n // eslint-disable-next-line\n if (this.isReact) {\n this.clearTemplate();\n }\n if (this.popupObj) {\n this.popupObj.hide();\n }\n this.notify(destroy, {});\n this.unwireListEvents();\n this.unWireEvent();\n this.list = null;\n this.popupObj = null;\n this.mainList = null;\n this.mainData = null;\n this.filterParent = null;\n this.ulElement = null;\n this.mainListCollection = null;\n _super.prototype.destroy.call(this);\n var temp = ['readonly', 'aria-disabled', 'placeholder'];\n var length = temp.length;\n if (!isNullOrUndefined(this.inputElement)) {\n while (length > 0) {\n this.inputElement.removeAttribute(temp[length - 1]);\n length--;\n }\n }\n if (!isNullOrUndefined(this.element)) {\n this.element.removeAttribute('data-initial-value');\n this.element.style.display = 'block';\n }\n if (this.overAllWrapper && this.overAllWrapper.parentElement) {\n if (this.overAllWrapper.parentElement.tagName === this.getNgDirective()) {\n remove(this.overAllWrapper);\n }\n else {\n this.overAllWrapper.parentElement.insertBefore(this.element, this.overAllWrapper);\n remove(this.overAllWrapper);\n }\n }\n this.componentWrapper = null;\n this.overAllClear = null;\n this.overAllWrapper = null;\n this.hiddenElement = null;\n this.searchWrapper = null;\n this.viewWrapper = null;\n this.chipCollectionWrapper = null;\n this.targetInputElement = null;\n this.popupWrapper = null;\n this.inputElement = null;\n this.delimiterWrapper = null;\n this.popupObj = null;\n this.popupWrapper = null;\n this.liCollections = null;\n this.header = null;\n this.mainList = null;\n this.mainListCollection = null;\n this.footer = null;\n this.selectAllEventEle = null;\n };\n __decorate([\n Complex({ text: null, value: null, iconCss: null, groupBy: null }, FieldSettings)\n ], MultiSelect.prototype, \"fields\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"groupTemplate\", void 0);\n __decorate([\n Property('No records found')\n ], MultiSelect.prototype, \"noRecordsTemplate\", void 0);\n __decorate([\n Property('Request failed')\n ], MultiSelect.prototype, \"actionFailureTemplate\", void 0);\n __decorate([\n Property('None')\n ], MultiSelect.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property([])\n ], MultiSelect.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"query\", void 0);\n __decorate([\n Property('StartsWith')\n ], MultiSelect.prototype, \"filterType\", void 0);\n __decorate([\n Property(1000)\n ], MultiSelect.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property()\n ], MultiSelect.prototype, \"locale\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"enableGroupCheckBox\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"cssClass\", void 0);\n __decorate([\n Property('100%')\n ], MultiSelect.prototype, \"width\", void 0);\n __decorate([\n Property('300px')\n ], MultiSelect.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], MultiSelect.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"placeholder\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property({})\n ], MultiSelect.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"changeOnBlur\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"allowCustomValue\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(1000)\n ], MultiSelect.prototype, \"maximumSelectionLength\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"value\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"hideSelectedItem\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"closePopupOnSelect\", void 0);\n __decorate([\n Property('Default')\n ], MultiSelect.prototype, \"mode\", void 0);\n __decorate([\n Property(',')\n ], MultiSelect.prototype, \"delimiterChar\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"showDropDownIcon\", void 0);\n __decorate([\n Property('Never')\n ], MultiSelect.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"showSelectAll\", void 0);\n __decorate([\n Property('Select All')\n ], MultiSelect.prototype, \"selectAllText\", void 0);\n __decorate([\n Property('Unselect All')\n ], MultiSelect.prototype, \"unSelectAllText\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"enableSelectionOrder\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"openOnClick\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"addTagOnBlur\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"removed\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"beforeSelectAll\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"selectedAll\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"chipSelection\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"filtering\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"tagging\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"customValueSelection\", void 0);\n MultiSelect = __decorate([\n NotifyPropertyChanges\n ], MultiSelect);\n return MultiSelect;\n}(DropDownBase));\nexport { MultiSelect };\n","/* eslint-disable valid-jsdoc */\n/* eslint-disable security/detect-object-injection */\nimport { DataUtil } from './util';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Query class is used to build query which is used by the DataManager to communicate with datasource.\n */\nvar Query = /** @class */ (function () {\n /**\n * Constructor for Query class.\n *\n * @param {string|string[]} from?\n * @param from\n * @hidden\n */\n function Query(from) {\n /** @hidden */\n this.subQuery = null;\n /** @hidden */\n this.isChild = false;\n /** @hidden */\n this.distincts = [];\n this.queries = [];\n this.key = '';\n this.fKey = '';\n if (typeof from === 'string') {\n this.fromTable = from;\n }\n else if (from && from instanceof Array) {\n this.lookups = from;\n }\n this.expands = [];\n this.sortedColumns = [];\n this.groupedColumns = [];\n this.subQuery = null;\n this.isChild = false;\n this.params = [];\n this.lazyLoad = [];\n return this;\n }\n /**\n * Sets the primary key.\n *\n * @param {string} field - Defines the column field.\n */\n Query.prototype.setKey = function (field) {\n this.key = field;\n return this;\n };\n /**\n * Sets default DataManager to execute query.\n *\n * @param {DataManager} dataManager - Defines the DataManager.\n */\n Query.prototype.using = function (dataManager) {\n this.dataManager = dataManager;\n return this;\n };\n /**\n * Executes query with the given DataManager.\n *\n * @param {DataManager} dataManager - Defines the DataManager.\n * @param {Function} done - Defines the success callback.\n * @param {Function} fail - Defines the failure callback.\n * @param {Function} always - Defines the callback which will be invoked on either success or failure.\n *\n *
\n     * let dataManager: DataManager = new DataManager([{ ID: '10' }, { ID: '2' }, { ID: '1' }, { ID: '20' }]);\n     * let query: Query = new Query();\n     * query.sortBy('ID', (x: string, y: string): number => { return parseInt(x, 10) - parseInt(y, 10) });\n     * let promise: Promise< Object > = query.execute(dataManager);\n     * promise.then((e: { result: Object }) => { });\n     * 
\n */\n Query.prototype.execute = function (dataManager, done, fail, always) {\n dataManager = dataManager || this.dataManager;\n if (dataManager) {\n return dataManager.executeQuery(this, done, fail, always);\n }\n return DataUtil.throwError('Query - execute() : dataManager needs to be is set using \"using\" function or should be passed as argument');\n };\n /**\n * Executes query with the local datasource.\n *\n * @param {DataManager} dataManager - Defines the DataManager.\n */\n Query.prototype.executeLocal = function (dataManager) {\n dataManager = dataManager || this.dataManager;\n if (dataManager) {\n return dataManager.executeLocal(this);\n }\n return DataUtil.throwError('Query - executeLocal() : dataManager needs to be is set using \"using\" function or should be passed as argument');\n };\n /**\n * Creates deep copy of the Query object.\n */\n Query.prototype.clone = function () {\n var cloned = new Query();\n cloned.queries = this.queries.slice(0);\n cloned.key = this.key;\n cloned.isChild = this.isChild;\n cloned.dataManager = this.dataManager;\n cloned.fromTable = this.fromTable;\n cloned.params = this.params.slice(0);\n cloned.expands = this.expands.slice(0);\n cloned.sortedColumns = this.sortedColumns.slice(0);\n cloned.groupedColumns = this.groupedColumns.slice(0);\n cloned.subQuerySelector = this.subQuerySelector;\n cloned.subQuery = this.subQuery;\n cloned.fKey = this.fKey;\n cloned.isCountRequired = this.isCountRequired;\n cloned.distincts = this.distincts.slice(0);\n cloned.lazyLoad = this.lazyLoad.slice(0);\n return cloned;\n };\n /**\n * Specifies the name of table to retrieve data in query execution.\n *\n * @param {string} tableName - Defines the table name.\n */\n Query.prototype.from = function (tableName) {\n this.fromTable = tableName;\n return this;\n };\n /**\n * Adds additional parameter which will be sent along with the request which will be generated while DataManager execute.\n *\n * @param {string} key - Defines the key of additional parameter.\n * @param {Function|string} value - Defines the value for the key.\n */\n Query.prototype.addParams = function (key, value) {\n if (typeof value === 'function') {\n this.params.push({ key: key, fn: value });\n }\n else {\n this.params.push({ key: key, value: value });\n }\n return this;\n };\n /**\n * @param fields\n * @hidden\n */\n Query.prototype.distinct = function (fields) {\n if (typeof fields === 'string') {\n this.distincts = [].slice.call([fields], 0);\n }\n else {\n this.distincts = fields.slice(0);\n }\n return this;\n };\n /**\n * Expands the related table.\n *\n * @param {string|Object[]} tables\n */\n Query.prototype.expand = function (tables) {\n if (typeof tables === 'string') {\n this.expands = [].slice.call([tables], 0);\n }\n else {\n this.expands = tables.slice(0);\n }\n return this;\n };\n /**\n * Filter data with given filter criteria.\n *\n * @param {string|Predicate} fieldName - Defines the column field or Predicate.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string|number|boolean} value - Defines the values to match with data.\n * @param {boolean} ignoreCase - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n * @param ignoreAccent\n * @param matchCase\n */\n Query.prototype.where = function (fieldName, operator, value, ignoreCase, ignoreAccent, matchCase) {\n operator = operator ? (operator).toLowerCase() : null;\n var predicate = null;\n if (typeof fieldName === 'string') {\n predicate = new Predicate(fieldName, operator, value, ignoreCase, ignoreAccent, matchCase);\n }\n else if (fieldName instanceof Predicate) {\n predicate = fieldName;\n }\n this.queries.push({\n fn: 'onWhere',\n e: predicate\n });\n return this;\n };\n /**\n * Search data with given search criteria.\n *\n * @param {string|number|boolean} searchKey - Defines the search key.\n * @param {string|string[]} fieldNames - Defines the collection of column fields.\n * @param {string} operator - Defines the operator how to search data.\n * @param {boolean} ignoreCase - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n * @param ignoreAccent\n */\n Query.prototype.search = function (searchKey, fieldNames, operator, ignoreCase, ignoreAccent) {\n if (typeof fieldNames === 'string') {\n fieldNames = [fieldNames];\n }\n if (!operator || operator === 'none') {\n operator = 'contains';\n }\n var comparer = DataUtil.fnOperators[operator];\n this.queries.push({\n fn: 'onSearch',\n e: {\n fieldNames: fieldNames,\n operator: operator,\n searchKey: searchKey,\n ignoreCase: ignoreCase,\n ignoreAccent: ignoreAccent,\n comparer: comparer\n }\n });\n return this;\n };\n /**\n * Sort the data with given sort criteria.\n * By default, sort direction is ascending.\n *\n * @param {string|string[]} fieldName - Defines the single or collection of column fields.\n * @param {string|Function} comparer - Defines the sort direction or custom sort comparer function.\n * @param isFromGroup\n */\n Query.prototype.sortBy = function (fieldName, comparer, isFromGroup) {\n return this.sortByForeignKey(fieldName, comparer, isFromGroup);\n };\n /**\n * Sort the data with given sort criteria.\n * By default, sort direction is ascending.\n *\n * @param {string|string[]} fieldName - Defines the single or collection of column fields.\n * @param {string|Function} comparer - Defines the sort direction or custom sort comparer function.\n * @param isFromGroup\n * @param {string} direction - Defines the sort direction .\n */\n Query.prototype.sortByForeignKey = function (fieldName, comparer, isFromGroup, direction) {\n var order = !isNullOrUndefined(direction) ? direction : 'ascending';\n var sorts;\n var temp;\n if (typeof fieldName === 'string' && DataUtil.endsWith(fieldName.toLowerCase(), ' desc')) {\n fieldName = fieldName.replace(/ desc$/i, '');\n comparer = 'descending';\n }\n if (!comparer || typeof comparer === 'string') {\n order = comparer ? comparer.toLowerCase() : 'ascending';\n comparer = DataUtil.fnSort(comparer);\n }\n if (isFromGroup) {\n sorts = Query.filterQueries(this.queries, 'onSortBy');\n for (var i = 0; i < sorts.length; i++) {\n temp = sorts[i].e.fieldName;\n if (typeof temp === 'string') {\n if (temp === fieldName) {\n return this;\n }\n }\n else if (temp instanceof Array) {\n for (var j = 0; j < temp.length; j++) {\n if (temp[j] === fieldName || fieldName.toLowerCase() === temp[j] + ' desc') {\n return this;\n }\n }\n }\n }\n }\n this.queries.push({\n fn: 'onSortBy',\n e: {\n fieldName: fieldName,\n comparer: comparer,\n direction: order\n }\n });\n return this;\n };\n /**\n * Sorts data in descending order.\n *\n * @param {string} fieldName - Defines the column field.\n */\n Query.prototype.sortByDesc = function (fieldName) {\n return this.sortBy(fieldName, 'descending');\n };\n /**\n * Groups data with the given field name.\n *\n * @param {string} fieldName - Defines the column field.\n * @param fn\n * @param format\n */\n Query.prototype.group = function (fieldName, fn, format) {\n this.sortBy(fieldName, null, true);\n this.queries.push({\n fn: 'onGroup',\n e: {\n fieldName: fieldName,\n comparer: fn ? fn : null,\n format: format ? format : null\n }\n });\n return this;\n };\n /**\n * Gets data based on the given page index and size.\n *\n * @param {number} pageIndex - Defines the current page index.\n * @param {number} pageSize - Defines the no of records per page.\n */\n Query.prototype.page = function (pageIndex, pageSize) {\n this.queries.push({\n fn: 'onPage',\n e: {\n pageIndex: pageIndex,\n pageSize: pageSize\n }\n });\n return this;\n };\n /**\n * Gets data based on the given start and end index.\n *\n * @param {number} start - Defines the start index of the datasource.\n * @param {number} end - Defines the end index of the datasource.\n */\n Query.prototype.range = function (start, end) {\n this.queries.push({\n fn: 'onRange',\n e: {\n start: start,\n end: end\n }\n });\n return this;\n };\n /**\n * Gets data from the top of the data source based on given number of records count.\n *\n * @param {number} nos - Defines the no of records to retrieve from datasource.\n */\n Query.prototype.take = function (nos) {\n this.queries.push({\n fn: 'onTake',\n e: {\n nos: nos\n }\n });\n return this;\n };\n /**\n * Skips data with given number of records count from the top of the data source.\n *\n * @param {number} nos - Defines the no of records skip in the datasource.\n */\n Query.prototype.skip = function (nos) {\n this.queries.push({\n fn: 'onSkip',\n e: { nos: nos }\n });\n return this;\n };\n /**\n * Selects specified columns from the data source.\n *\n * @param {string|string[]} fieldNames - Defines the collection of column fields.\n */\n Query.prototype.select = function (fieldNames) {\n if (typeof fieldNames === 'string') {\n fieldNames = [].slice.call([fieldNames], 0);\n }\n this.queries.push({\n fn: 'onSelect',\n e: { fieldNames: fieldNames }\n });\n return this;\n };\n /**\n * Gets the records in hierarchical relationship from two tables. It requires the foreign key to relate two tables.\n *\n * @param {Query} query - Defines the query to relate two tables.\n * @param {Function} selectorFn - Defines the custom function to select records.\n */\n Query.prototype.hierarchy = function (query, selectorFn) {\n this.subQuerySelector = selectorFn;\n this.subQuery = query;\n return this;\n };\n /**\n * Sets the foreign key which is used to get data from the related table.\n *\n * @param {string} key - Defines the foreign key.\n */\n Query.prototype.foreignKey = function (key) {\n this.fKey = key;\n return this;\n };\n /**\n * It is used to get total number of records in the DataManager execution result.\n */\n Query.prototype.requiresCount = function () {\n this.isCountRequired = true;\n return this;\n };\n //type - sum, avg, min, max\n /**\n * Aggregate the data with given type and field name.\n *\n * @param {string} type - Defines the aggregate type.\n * @param {string} field - Defines the column field to aggregate.\n */\n Query.prototype.aggregate = function (type, field) {\n this.queries.push({\n fn: 'onAggregates',\n e: { field: field, type: type }\n });\n return this;\n };\n /**\n * Pass array of filterColumn query for performing filter operation.\n *\n * @param {QueryOptions[]} queries\n * @param {string} name\n * @hidden\n */\n Query.filterQueries = function (queries, name) {\n return queries.filter(function (q) {\n return q.fn === name;\n });\n };\n /**\n * To get the list of queries which is already filtered in current data source.\n *\n * @param {Object[]} queries\n * @param {string[]} singles\n * @hidden\n */\n Query.filterQueryLists = function (queries, singles) {\n var filtered = queries.filter(function (q) {\n return singles.indexOf(q.fn) !== -1;\n });\n var res = {};\n for (var i = 0; i < filtered.length; i++) {\n if (!res[filtered[i].fn]) {\n res[filtered[i].fn] = filtered[i].e;\n }\n }\n return res;\n };\n return Query;\n}());\nexport { Query };\n/**\n * Predicate class is used to generate complex filter criteria.\n * This will be used by DataManager to perform multiple filtering operation.\n */\nvar Predicate = /** @class */ (function () {\n /**\n * Constructor for Predicate class.\n *\n * @param {string|Predicate} field\n * @param {string} operator\n * @param {string|number|boolean|Predicate|Predicate[]} value\n * @param {boolean=false} ignoreCase\n * @param ignoreAccent\n * @param {boolean} matchCase\n * @hidden\n */\n function Predicate(field, operator, value, ignoreCase, ignoreAccent, matchCase) {\n if (ignoreCase === void 0) { ignoreCase = false; }\n /** @hidden */\n this.ignoreAccent = false;\n /** @hidden */\n this.isComplex = false;\n if (typeof field === 'string') {\n this.field = field;\n this.operator = operator.toLowerCase();\n this.value = value;\n this.matchCase = matchCase;\n this.ignoreCase = ignoreCase;\n this.ignoreAccent = ignoreAccent;\n this.isComplex = false;\n this.comparer = DataUtil.fnOperators.processOperator(this.operator);\n }\n else if (field instanceof Predicate && value instanceof Predicate || value instanceof Array) {\n this.isComplex = true;\n this.condition = operator.toLowerCase();\n this.predicates = [field];\n this.matchCase = field.matchCase;\n this.ignoreCase = field.ignoreCase;\n this.ignoreAccent = field.ignoreAccent;\n if (value instanceof Array) {\n [].push.apply(this.predicates, value);\n }\n else {\n this.predicates.push(value);\n }\n }\n return this;\n }\n /**\n * Adds n-number of new predicates on existing predicate with “and” condition.\n *\n * @param {Object[]} args - Defines the collection of predicates.\n */\n Predicate.and = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return Predicate.combinePredicates([].slice.call(args, 0), 'and');\n };\n /**\n * Adds new predicate on existing predicate with “and” condition.\n *\n * @param {string} field - Defines the column field.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string} value - Defines the values to match with data.\n * @param {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n * @param ignoreCase\n * @param ignoreAccent\n */\n Predicate.prototype.and = function (field, operator, value, ignoreCase, ignoreAccent) {\n return Predicate.combine(this, field, operator, value, 'and', ignoreCase, ignoreAccent);\n };\n /**\n * Adds n-number of new predicates on existing predicate with “or” condition.\n *\n * @param {Object[]} args - Defines the collection of predicates.\n */\n Predicate.or = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return Predicate.combinePredicates([].slice.call(args, 0), 'or');\n };\n /**\n * Adds new predicate on existing predicate with “or” condition.\n *\n * @param {string} field - Defines the column field.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string} value - Defines the values to match with data.\n * @param {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n * @param ignoreCase\n * @param ignoreAccent\n */\n Predicate.prototype.or = function (field, operator, value, ignoreCase, ignoreAccent) {\n return Predicate.combine(this, field, operator, value, 'or', ignoreCase, ignoreAccent);\n };\n /**\n * Adds n-number of new predicates on existing predicate with “and not” condition.\n *\n * @param {Object[]} args - Defines the collection of predicates.\n */\n Predicate.ornot = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return Predicate.combinePredicates([].slice.call(args, 0), 'or not');\n };\n /**\n * Adds new predicate on existing predicate with “and not” condition.\n *\n * @param {string} field - Defines the column field.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string} value - Defines the values to match with data.\n * @param {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n * @param ignoreCase\n * @param ignoreAccent\n */\n Predicate.prototype.ornot = function (field, operator, value, ignoreCase, ignoreAccent) {\n return Predicate.combine(this, field, operator, value, 'ornot', ignoreCase, ignoreAccent);\n };\n /**\n * Adds n-number of new predicates on existing predicate with “and not” condition.\n *\n * @param {Object[]} args - Defines the collection of predicates.\n */\n Predicate.andnot = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return Predicate.combinePredicates([].slice.call(args, 0), 'and not');\n };\n /**\n * Adds new predicate on existing predicate with “and not” condition.\n *\n * @param {string} field - Defines the column field.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string} value - Defines the values to match with data.\n * @param {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n * @param ignoreCase\n * @param ignoreAccent\n */\n Predicate.prototype.andnot = function (field, operator, value, ignoreCase, ignoreAccent) {\n return Predicate.combine(this, field, operator, value, 'andnot', ignoreCase, ignoreAccent);\n };\n /**\n * Converts plain JavaScript object to Predicate object.\n *\n * @param {Predicate[]|Predicate} json - Defines single or collection of Predicate.\n */\n Predicate.fromJson = function (json) {\n if (json instanceof Array) {\n var res = [];\n for (var i = 0, len = json.length; i < len; i++) {\n res.push(this.fromJSONData(json[i]));\n }\n return res;\n }\n var pred = json;\n return this.fromJSONData(pred);\n };\n /**\n * Validate the record based on the predicates.\n *\n * @param {Object} record - Defines the datasource record.\n */\n Predicate.prototype.validate = function (record) {\n var predicate = this.predicates ? this.predicates : [];\n var ret;\n var isAnd;\n if (!this.isComplex && this.comparer) {\n if (this.condition && this.condition.indexOf('not') !== -1) {\n this.condition = this.condition.split('not')[0] === '' ? undefined : this.condition.split('not')[0];\n return !this.comparer.call(this, DataUtil.getObject(this.field, record), this.value, this.ignoreCase, this.ignoreAccent);\n }\n else {\n return this.comparer.call(this, DataUtil.getObject(this.field, record), this.value, this.ignoreCase, this.ignoreAccent);\n }\n }\n if (this.condition && this.condition.indexOf('not') !== -1) {\n isAnd = this.condition.indexOf('and') !== -1;\n }\n else {\n isAnd = this.condition === 'and';\n }\n for (var i = 0; i < predicate.length; i++) {\n if (i > 0 && this.condition && this.condition.indexOf('not') !== -1) {\n predicate[i].condition = predicate[i].condition ? predicate[i].condition + 'not' : 'not';\n }\n ret = predicate[i].validate(record);\n if (isAnd) {\n if (!ret) {\n return false;\n }\n }\n else {\n if (ret) {\n return true;\n }\n }\n }\n return isAnd;\n };\n /**\n * Converts predicates to plain JavaScript.\n * This method is uses Json stringify when serializing Predicate object.\n */\n Predicate.prototype.toJson = function () {\n var predicates;\n var p;\n if (this.isComplex) {\n predicates = [];\n p = this.predicates;\n for (var i = 0; i < p.length; i++) {\n predicates.push(p[i].toJson());\n }\n }\n return {\n isComplex: this.isComplex,\n field: this.field,\n operator: this.operator,\n value: this.value,\n ignoreCase: this.ignoreCase,\n ignoreAccent: this.ignoreAccent,\n condition: this.condition,\n predicates: predicates,\n matchCase: this.matchCase\n };\n };\n Predicate.combinePredicates = function (predicates, operator) {\n if (predicates.length === 1) {\n if (!(predicates[0] instanceof Array)) {\n return predicates[0];\n }\n predicates = predicates[0];\n }\n return new Predicate(predicates[0], operator, predicates.slice(1));\n };\n Predicate.combine = function (pred, field, operator, value, condition, ignoreCase, ignoreAccent) {\n if (field instanceof Predicate) {\n return Predicate[condition](pred, field);\n }\n if (typeof field === 'string') {\n return Predicate[condition](pred, new Predicate(field, operator, value, ignoreCase, ignoreAccent));\n }\n return DataUtil.throwError('Predicate - ' + condition + ' : invalid arguments');\n };\n Predicate.fromJSONData = function (json) {\n var preds = json.predicates || [];\n var len = preds.length;\n var predicates = [];\n var result;\n for (var i = 0; i < len; i++) {\n predicates.push(this.fromJSONData(preds[i]));\n }\n if (!json.isComplex) {\n result = new Predicate(json.field, json.operator, json.value, json.ignoreCase, json.ignoreAccent);\n }\n else {\n result = new Predicate(predicates[0], json.condition, predicates.slice(1));\n }\n return result;\n };\n return Predicate;\n}());\nexport { Predicate };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\n/* eslint-disable @typescript-eslint/no-unused-expressions */\nimport { Component, EventHandler, Internationalization } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { cldrData, getDefaultDateObject, rippleEffect } from '@syncfusion/ej2-base';\nimport { removeClass, detach, closest, addClass, attributes } from '@syncfusion/ej2-base';\nimport { getValue, getUniqueID, extend, Browser } from '@syncfusion/ej2-base';\nimport { Property, Event, isNullOrUndefined, throwError } from '@syncfusion/ej2-base';\n//class constant defination.\nvar OTHERMONTH = 'e-other-month';\nvar OTHERDECADE = 'e-other-year';\nvar ROOT = 'e-calendar';\nvar DEVICE = 'e-device';\nvar HEADER = 'e-header';\nvar RTL = 'e-rtl';\nvar CONTENT = 'e-content';\nvar YEAR = 'e-year';\nvar MONTH = 'e-month';\nvar DECADE = 'e-decade';\nvar ICON = 'e-icons';\nvar PREVICON = 'e-prev';\nvar NEXTICON = 'e-next';\nvar PREVSPAN = 'e-date-icon-prev';\nvar NEXTSPAN = 'e-date-icon-next ';\nvar ICONCONTAINER = 'e-icon-container';\nvar DISABLED = 'e-disabled';\nvar OVERLAY = 'e-overlay';\nvar WEEKEND = 'e-weekend';\nvar WEEKNUMBER = 'e-week-number';\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar OTHERMONTHROW = 'e-month-hide';\nvar TODAY = 'e-today';\nvar TITLE = 'e-title';\nvar LINK = 'e-day';\nvar CELL = 'e-cell';\nvar WEEKHEADER = 'e-week-header';\nvar ZOOMIN = 'e-zoomin';\nvar FOOTER = 'e-footer-container';\nvar BTN = 'e-btn';\nvar FLAT = 'e-flat';\nvar CSS = 'e-css';\nvar PRIMARY = 'e-primary';\nvar DAYHEADERLONG = 'e-calendar-day-header-lg';\nvar dayMilliSeconds = 86400000;\nvar minutesMilliSeconds = 60000;\n/**\n *\n * @private\n */\nvar CalendarBase = /** @class */ (function (_super) {\n __extends(CalendarBase, _super);\n /**\n * Initialized new instance of Calendar Class.\n * Constructor for creating the widget\n *\n * @param {CalendarBaseModel} options - Specifies the CalendarBase model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function CalendarBase(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.effect = '';\n _this.isPopupClicked = false;\n _this.isDateSelected = true;\n _this.isTodayClicked = false;\n _this.preventChange = false;\n _this.isAngular = false;\n _this.previousDates = false;\n return _this;\n }\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n CalendarBase.prototype.render = function () {\n this.rangeValidation(this.min, this.max);\n this.calendarEleCopy = this.element.cloneNode(true);\n if (this.calendarMode === 'Islamic') {\n if (+(this.min.setSeconds(0)) === +new Date(1900, 0, 1, 0, 0, 0)) {\n this.min = new Date(1944, 2, 18);\n }\n if (+this.max === +new Date(2099, 11, 31)) {\n this.max = new Date(2069, 10, 16);\n }\n }\n this.globalize = new Internationalization(this.locale);\n if (isNullOrUndefined(this.firstDayOfWeek) || this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: this.globalize.getFirstDayOfWeek() }, true);\n }\n this.todayDisabled = false;\n this.todayDate = new Date(new Date().setHours(0, 0, 0, 0));\n if (this.getModuleName() === 'calendar') {\n this.element.classList.add(ROOT);\n if (this.enableRtl) {\n this.element.classList.add(RTL);\n }\n if (Browser.isDevice) {\n this.element.classList.add(DEVICE);\n }\n attributes(this.element, {\n 'data-role': 'calendar'\n });\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.calendarElement = this.createElement('div');\n this.calendarElement.classList.add(ROOT);\n if (this.enableRtl) {\n this.calendarElement.classList.add(RTL);\n }\n if (Browser.isDevice) {\n this.calendarElement.classList.add(DEVICE);\n }\n attributes(this.calendarElement, {\n 'data-role': 'calendar'\n });\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.createHeader();\n this.createContent();\n this.wireEvents();\n };\n CalendarBase.prototype.rangeValidation = function (min, max) {\n if (isNullOrUndefined(min)) {\n this.setProperties({ min: new Date(1900, 0, 1) }, true);\n }\n if (isNullOrUndefined(max)) {\n this.setProperties({ max: new Date(2099, 11, 31) }, true);\n }\n };\n CalendarBase.prototype.getDefaultKeyConfig = function () {\n this.defaultKeyConfigs = {\n controlUp: 'ctrl+38',\n controlDown: 'ctrl+40',\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n select: 'enter',\n home: 'home',\n end: 'end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n shiftPageUp: 'shift+pageup',\n shiftPageDown: 'shift+pagedown',\n controlHome: 'ctrl+home',\n controlEnd: 'ctrl+end',\n altUpArrow: 'alt+uparrow',\n spacebar: 'space',\n altRightArrow: 'alt+rightarrow',\n altLeftArrow: 'alt+leftarrow'\n };\n return this.defaultKeyConfigs;\n };\n CalendarBase.prototype.validateDate = function (value) {\n this.setProperties({ min: this.checkDateValue(new Date(this.checkValue(this.min))) }, true);\n this.setProperties({ max: this.checkDateValue(new Date(this.checkValue(this.max))) }, true);\n this.currentDate = this.currentDate ? this.currentDate : new Date(new Date().setHours(0, 0, 0, 0));\n if (!isNullOrUndefined(value) && this.min <= this.max && value >= this.min && value <= this.max) {\n this.currentDate = new Date(this.checkValue(value));\n }\n };\n CalendarBase.prototype.setOverlayIndex = function (popupWrapper, popupElement, modal, isDevice) {\n if (isDevice && !isNullOrUndefined(popupElement) && !isNullOrUndefined(modal) && !isNullOrUndefined(popupWrapper)) {\n var index = parseInt(popupElement.style.zIndex, 10) ? parseInt(popupElement.style.zIndex, 10) : 1000;\n modal.style.zIndex = (index - 1).toString();\n popupWrapper.style.zIndex = index.toString();\n }\n };\n CalendarBase.prototype.minMaxUpdate = function (value) {\n if (!(+this.min <= +this.max)) {\n this.setProperties({ min: this.min }, true);\n addClass([this.element], OVERLAY);\n }\n else {\n removeClass([this.element], OVERLAY);\n }\n this.min = isNullOrUndefined(this.min) || !(+this.min) ? this.min = new Date(1900, 0, 1) : this.min;\n this.max = isNullOrUndefined(this.max) || !(+this.max) ? this.max = new Date(2099, 11, 31) : this.max;\n if (+this.min <= +this.max && value && +value <= +this.max && +value >= +this.min) {\n this.currentDate = new Date(this.checkValue(value));\n }\n else {\n if (+this.min <= +this.max && !value && +this.currentDate > +this.max) {\n this.currentDate = new Date(this.checkValue(this.max));\n }\n else {\n if (+this.currentDate < +this.min) {\n this.currentDate = new Date(this.checkValue(this.min));\n }\n }\n }\n };\n CalendarBase.prototype.createHeader = function () {\n var ariaPrevAttrs = {\n 'aria-disabled': 'false',\n 'aria-label': 'previous month'\n };\n var ariaNextAttrs = {\n 'aria-disabled': 'false',\n 'aria-label': 'next month'\n };\n var ariaTitleAttrs = {\n 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'title'\n };\n this.headerElement = this.createElement('div', { className: HEADER });\n var iconContainer = this.createElement('div', { className: ICONCONTAINER });\n this.previousIcon = this.createElement('button', { className: '' + PREVICON, attrs: { type: 'button' } });\n rippleEffect(this.previousIcon, {\n duration: 400,\n selector: '.e-prev',\n isCenterRipple: true\n });\n attributes(this.previousIcon, ariaPrevAttrs);\n this.nextIcon = this.createElement('button', { className: '' + NEXTICON, attrs: { type: 'button' } });\n rippleEffect(this.nextIcon, {\n selector: '.e-next',\n duration: 400,\n isCenterRipple: true\n });\n if (this.getModuleName() === 'daterangepicker') {\n attributes(this.previousIcon, { tabIndex: '-1' });\n attributes(this.nextIcon, { tabIndex: '-1' });\n }\n attributes(this.nextIcon, ariaNextAttrs);\n this.headerTitleElement = this.createElement('div', { className: '' + LINK + ' ' + TITLE });\n attributes(this.headerTitleElement, ariaTitleAttrs);\n this.headerElement.appendChild(this.headerTitleElement);\n this.previousIcon.appendChild(this.createElement('span', { className: '' + PREVSPAN + ' ' + ICON }));\n this.nextIcon.appendChild(this.createElement('span', { className: '' + NEXTSPAN + ' ' + ICON }));\n iconContainer.appendChild(this.previousIcon);\n iconContainer.appendChild(this.nextIcon);\n this.headerElement.appendChild(iconContainer);\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.headerElement);\n }\n else {\n this.calendarElement.appendChild(this.headerElement);\n }\n this.adjustLongHeaderSize();\n };\n CalendarBase.prototype.createContent = function () {\n this.contentElement = this.createElement('div', { className: CONTENT });\n this.table = this.createElement('table', { attrs: { tabIndex: '0', 'role': 'grid', 'aria-activedescendant': '', 'aria-labelledby': this.element.id } });\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.contentElement);\n }\n else {\n this.calendarElement.appendChild(this.contentElement);\n }\n this.contentElement.appendChild(this.table);\n this.createContentHeader();\n this.createContentBody();\n if (this.showTodayButton) {\n this.createContentFooter();\n }\n };\n CalendarBase.prototype.getCultureValues = function () {\n var culShortNames = [];\n var cldrObj;\n var dayFormat = 'days.stand-alone.' + this.dayHeaderFormat.toLowerCase();\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue(dayFormat, getDefaultDateObject()));\n }\n else {\n cldrObj = (this.getCultureObjects(cldrData, '' + this.locale));\n }\n if (!isNullOrUndefined(cldrObj)) {\n for (var _i = 0, _a = Object.keys(cldrObj); _i < _a.length; _i++) {\n var obj = _a[_i];\n culShortNames.push(getValue(obj, cldrObj));\n }\n }\n return culShortNames;\n };\n CalendarBase.prototype.toCapitalize = function (text) {\n return !isNullOrUndefined(text) && text.length ? text[0].toUpperCase() + text.slice(1) : text;\n };\n CalendarBase.prototype.createContentHeader = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content .e-week-header')[0])) {\n detach(this.element.querySelectorAll('.e-content .e-week-header')[0]);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0])) {\n detach(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0]);\n }\n }\n var daysCount = 6;\n var html = '';\n if (this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: 0 }, true);\n }\n this.tableHeadElement = this.createElement('thead', { className: WEEKHEADER });\n if (this.weekNumber) {\n html += '';\n if (this.getModuleName() === 'calendar') {\n addClass([this.element], '' + WEEKNUMBER);\n }\n else {\n addClass([this.calendarElement], '' + WEEKNUMBER);\n }\n }\n // eslint-disable-next-line max-len\n var shortNames = this.getCultureValues().length > 0 && this.getCultureValues() ? this.shiftArray(((this.getCultureValues().length > 0 && this.getCultureValues())), this.firstDayOfWeek) : null;\n if (!isNullOrUndefined(shortNames)) {\n for (var days = 0; days <= daysCount; days++) {\n html += '' + this.toCapitalize(shortNames[days]) + '';\n }\n }\n html = '' + html + '';\n this.tableHeadElement.innerHTML = html;\n this.table.appendChild(this.tableHeadElement);\n };\n CalendarBase.prototype.createContentBody = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content tbody')[0])) {\n detach(this.element.querySelectorAll('.e-content tbody')[0]);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content tbody')[0])) {\n detach(this.calendarElement.querySelectorAll('.e-content tbody')[0]);\n }\n }\n switch (this.start) {\n case 'Year':\n this.renderYears();\n break;\n case 'Decade':\n this.renderDecades();\n break;\n default:\n this.renderMonths();\n }\n };\n CalendarBase.prototype.updateFooter = function () {\n this.todayElement.textContent = this.l10.getConstant('today');\n this.todayElement.setAttribute('aria-label', this.l10.getConstant('today'));\n };\n CalendarBase.prototype.createContentFooter = function () {\n if (this.showTodayButton) {\n var minimum = new Date(+this.min);\n var maximum = new Date(+this.max);\n var l10nLocale = { today: 'Today' };\n this.globalize = new Internationalization(this.locale);\n this.l10 = new L10n(this.getModuleName(), l10nLocale, this.locale);\n this.todayElement = this.createElement('button', { attrs: { role: 'button' } });\n rippleEffect(this.todayElement);\n this.updateFooter();\n addClass([this.todayElement], [BTN, TODAY, FLAT, PRIMARY, CSS]);\n if ((!(+new Date(minimum.setHours(0, 0, 0, 0)) <= +this.todayDate &&\n +this.todayDate <= +new Date(maximum.setHours(0, 0, 0, 0)))) || (this.todayDisabled)) {\n addClass([this.todayElement], DISABLED);\n }\n this.footer = this.createElement('div', { className: FOOTER });\n this.footer.appendChild(this.todayElement);\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.footer);\n }\n if (this.getModuleName() === 'datepicker') {\n this.calendarElement.appendChild(this.footer);\n }\n if (this.getModuleName() === 'datetimepicker') {\n this.calendarElement.appendChild(this.footer);\n }\n if (!this.todayElement.classList.contains(DISABLED)) {\n EventHandler.add(this.todayElement, 'click', this.todayButtonClick, this);\n }\n }\n };\n CalendarBase.prototype.wireEvents = function (id, ref, keyConfig, moduleName) {\n EventHandler.add(this.headerTitleElement, 'click', this.navigateTitle, this);\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n if (this.getModuleName() === 'calendar') {\n this.keyboardModule = new KeyboardEvents(this.element, {\n eventName: 'keydown',\n keyAction: this.keyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n }\n else {\n this.keyboardModule = new KeyboardEvents(this.calendarElement, {\n eventName: 'keydown',\n keyAction: this.keyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n }\n };\n CalendarBase.prototype.dateWireEvents = function (id, ref, keyConfig, moduleName) {\n this.defaultKeyConfigs = this.getDefaultKeyConfig();\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, keyConfig);\n this.serverModuleName = moduleName;\n };\n CalendarBase.prototype.todayButtonClick = function (e, value, isCustomDate) {\n if (this.showTodayButton) {\n if (this.currentView() === this.depth) {\n this.effect = '';\n }\n else {\n this.effect = 'e-zoomin';\n }\n if (this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.navigateTo(this.depth, new Date(this.checkValue(value)), isCustomDate);\n }\n else {\n this.navigateTo('Month', new Date(this.checkValue(value)), isCustomDate);\n }\n }\n };\n CalendarBase.prototype.resetCalendar = function () {\n this.calendarElement && detach(this.calendarElement);\n this.tableBodyElement && detach(this.tableBodyElement);\n this.table && detach(this.table);\n this.tableHeadElement && detach(this.tableHeadElement);\n this.nextIcon && detach(this.nextIcon);\n this.previousIcon && detach(this.previousIcon);\n this.footer && detach(this.footer);\n this.todayElement = null;\n this.renderDayCellArgs = null;\n this.calendarElement = this.tableBodyElement = this.footer = this.tableHeadElement =\n this.nextIcon = this.previousIcon = this.table = null;\n };\n CalendarBase.prototype.keyActionHandle = function (e, value, multiSelection) {\n var focusedDate = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedDate;\n if (multiSelection) {\n if (!isNullOrUndefined(focusedDate) && +value === parseInt(focusedDate.getAttribute('id').split('_')[0], 10)) {\n selectedDate = focusedDate;\n }\n else {\n selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n }\n }\n else {\n selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n }\n var view = this.getViewNumber(this.currentView());\n var depthValue = this.getViewNumber(this.depth);\n var levelRestrict = (view === depthValue && this.getViewNumber(this.start) >= depthValue);\n this.effect = '';\n switch (e.action) {\n case 'moveLeft':\n this.keyboardNavigate(-1, view, e, this.max, this.min);\n e.preventDefault();\n break;\n case 'moveRight':\n this.keyboardNavigate(1, view, e, this.max, this.min);\n e.preventDefault();\n break;\n case 'moveUp':\n if (view === 0) {\n this.keyboardNavigate(-7, view, e, this.max, this.min); // move the current date to the previous seven days.\n }\n else {\n this.keyboardNavigate(-4, view, e, this.max, this.min); // move the current year to the previous four days.\n }\n e.preventDefault();\n break;\n case 'moveDown':\n if (view === 0) {\n this.keyboardNavigate(7, view, e, this.max, this.min);\n }\n else {\n this.keyboardNavigate(4, view, e, this.max, this.min);\n }\n e.preventDefault();\n break;\n case 'select':\n if (e.target === this.todayElement) {\n this.todayButtonClick(e, value);\n }\n else {\n var element = !isNullOrUndefined(focusedDate) ? focusedDate : selectedDate;\n if (!isNullOrUndefined(element) && !element.classList.contains(DISABLED)) {\n if (levelRestrict) {\n // eslint-disable-next-line radix\n var d = new Date(parseInt('' + (element).id, 0));\n this.selectDate(e, d, (element));\n }\n else {\n this.contentClick(null, --view, (element), value);\n }\n }\n }\n break;\n case 'controlUp':\n this.title();\n e.preventDefault();\n break;\n case 'controlDown':\n if (!isNullOrUndefined(focusedDate) && !levelRestrict || !isNullOrUndefined(selectedDate) && !levelRestrict) {\n this.contentClick(null, --view, (focusedDate || selectedDate), value);\n }\n e.preventDefault();\n break;\n case 'home':\n this.currentDate = this.firstDay(this.currentDate);\n detach(this.tableBodyElement);\n if (view === 0) {\n this.renderMonths(e);\n }\n else if (view === 1) {\n this.renderYears(e);\n }\n else {\n this.renderDecades(e);\n }\n e.preventDefault();\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate, view);\n detach(this.tableBodyElement);\n if (view === 0) {\n this.renderMonths(e);\n }\n else if (view === 1) {\n this.renderYears(e);\n }\n else {\n this.renderDecades(e);\n }\n e.preventDefault();\n break;\n case 'pageUp':\n this.addMonths(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'pageDown':\n this.addMonths(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageUp':\n this.addYears(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageDown':\n this.addYears(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'controlHome':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 0, 1));\n e.preventDefault();\n break;\n case 'controlEnd':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 11, 31));\n e.preventDefault();\n break;\n }\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n CalendarBase.prototype.keyboardNavigate = function (number, currentView, e, max, min) {\n var date = new Date(this.checkValue(this.currentDate));\n switch (currentView) {\n case 2:\n this.addYears(this.currentDate, number);\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n case 1:\n this.addMonths(this.currentDate, number);\n if (this.calendarMode === 'Gregorian') {\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n else {\n this.currentDate = date;\n }\n }\n else {\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n else {\n this.currentDate = date;\n }\n }\n break;\n case 0:\n this.addDay(this.currentDate, number, e, max, min);\n if (this.isMinMaxRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderMonths(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n }\n };\n /**\n * Initialize the event handler\n *\n * @param {Date} value - Specifies value of date.\n * @returns {void}\n * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.preRender = function (value) {\n var _this = this;\n this.navigatePreviousHandler = this.navigatePrevious.bind(this);\n this.navigateNextHandler = this.navigateNext.bind(this);\n this.defaultKeyConfigs = this.getDefaultKeyConfig();\n this.navigateHandler = function (e) {\n _this.triggerNavigate(e);\n };\n };\n CalendarBase.prototype.minMaxDate = function (localDate) {\n var currentDate = new Date(new Date(+localDate).setHours(0, 0, 0, 0));\n var minDate = new Date(new Date(+this.min).setHours(0, 0, 0, 0));\n var maxDate = new Date(new Date(+this.max).setHours(0, 0, 0, 0));\n if (+currentDate === +minDate || +currentDate === +maxDate) {\n if (+localDate < +this.min) {\n localDate = new Date(+this.min);\n }\n if (+localDate > +this.max) {\n localDate = new Date(+this.max);\n }\n }\n return localDate;\n };\n CalendarBase.prototype.renderMonths = function (e, value, isCustomDate) {\n var numCells = this.weekNumber ? 8 : 7;\n var tdEles;\n if (this.calendarMode === 'Gregorian') {\n tdEles = this.renderDays(this.currentDate, value, null, null, isCustomDate, e);\n }\n else {\n tdEles = this.islamicModule.islamicRenderDays(this.currentDate, value);\n }\n this.createContentHeader();\n if (this.calendarMode === 'Gregorian') {\n this.renderTemplate(tdEles, numCells, MONTH, e, value);\n }\n else {\n this.islamicModule.islamicRenderTemplate(tdEles, numCells, MONTH, e, value);\n }\n };\n CalendarBase.prototype.renderDays = function (currentDate, value, multiSelection, values, isTodayDate, e) {\n var tdEles = [];\n var cellsCount = 42;\n var todayDate = isTodayDate ? new Date(+currentDate) : this.getDate(new Date(), this.timezone);\n var localDate = new Date(this.checkValue(currentDate));\n var minMaxDate;\n var currentMonth = localDate.getMonth();\n this.titleUpdate(currentDate, 'days');\n var d = localDate;\n localDate = new Date(d.getFullYear(), d.getMonth(), 0, d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds());\n while (localDate.getDay() !== this.firstDayOfWeek) {\n this.setStartDate(localDate, -1 * dayMilliSeconds);\n }\n for (var day = 0; day < cellsCount; ++day) {\n var weekEle = this.createElement('td', { className: CELL });\n var weekAnchor = this.createElement('span');\n if (day % 7 === 0 && this.weekNumber) {\n // 6 days are added to get Last day of the week and 3 days are added to get middle day of the week.\n var numberOfDays = this.weekRule === 'FirstDay' ? 6 : (this.weekRule === 'FirstFourDayWeek' ? 3 : 0);\n var finalDate = new Date(localDate.getFullYear(), localDate.getMonth(), (localDate.getDate() + numberOfDays));\n weekAnchor.textContent = '' + this.getWeek(finalDate);\n weekEle.appendChild(weekAnchor);\n addClass([weekEle], '' + WEEKNUMBER);\n tdEles.push(weekEle);\n }\n minMaxDate = new Date(+localDate);\n localDate = this.minMaxDate(localDate);\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full' };\n var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var tdEle = this.dayCell(localDate);\n var title = this.globalize.formatDate(localDate, { type: 'date', skeleton: 'full' });\n var dayLink = this.createElement('span');\n dayLink.textContent = this.globalize.formatDate(localDate, { format: 'd', type: 'date', skeleton: 'yMd' });\n var disabled = (this.min > localDate) || (this.max < localDate);\n if (disabled) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n }\n else {\n dayLink.setAttribute('title', '' + title);\n }\n if (currentMonth !== localDate.getMonth()) {\n addClass([tdEle], OTHERMONTH);\n }\n if (localDate.getDay() === 0 || localDate.getDay() === 6) {\n addClass([tdEle], WEEKEND);\n }\n tdEle.appendChild(dayLink);\n this.renderDayCellArgs = {\n date: localDate,\n isDisabled: false,\n element: tdEle,\n isOutOfRange: disabled\n };\n var argument = this.renderDayCellArgs;\n this.renderDayCellEvent(argument);\n if (argument.isDisabled) {\n var selectDate = new Date(this.checkValue(value));\n var argsDate = new Date(this.checkValue(argument.date));\n if (multiSelection) {\n if (!isNullOrUndefined(values) && values.length > 0) {\n for (var index = 0; index < values.length; index++) {\n var localDateString = +new Date(this.globalize.formatDate(argument.date, { type: 'date', skeleton: 'yMd' }));\n var tempDateString = +new Date(this.globalize.formatDate(values[index], { type: 'date', skeleton: 'yMd' }));\n if (localDateString === tempDateString) {\n values.splice(index, 1);\n index = -1;\n }\n }\n }\n }\n else if (selectDate && +selectDate === +argsDate) {\n this.setProperties({ value: null }, true);\n }\n }\n if (this.renderDayCellArgs.isDisabled && !tdEle.classList.contains(SELECTED)) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n if (+this.renderDayCellArgs.date === +this.todayDate) {\n this.todayDisabled = true;\n }\n }\n var otherMnthBool = tdEle.classList.contains(OTHERMONTH);\n var disabledCls = tdEle.classList.contains(DISABLED);\n if (!disabledCls) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n // to set the value as null while setting the disabled date onProperty change.\n // if (args.isDisabled && +this.value === +args.date) {\n // this.setProperties({ value: null }, true);\n // }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var currentTarget = void 0;\n if (!isNullOrUndefined(e) && e.type === 'click') {\n currentTarget = e.currentTarget;\n }\n if (multiSelection && !isNullOrUndefined(values) && !disabledCls) {\n for (var tempValue = 0; tempValue < values.length; tempValue++) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var formatOptions = { format: null, type: 'date', skeleton: 'short', calendar: type };\n var localDateString = this.globalize.formatDate(localDate, formatOptions);\n var tempDateString = this.globalize.formatDate(values[tempValue], formatOptions);\n if ((localDateString === tempDateString && this.getDateVal(localDate, values[tempValue]))\n || (this.getDateVal(localDate, value))) {\n addClass([tdEle], SELECTED);\n }\n if (!isNullOrUndefined(currentTarget) && currentTarget.innerText === tdEle.innerText &&\n this.previousDates && tdEle.classList.contains(SELECTED) && currentTarget.classList.contains(SELECTED)) {\n removeClass([tdEle], SELECTED);\n this.previousDates = false;\n var copyValues = this.copyValues(values);\n for (var i = 0; i < copyValues.length; i++) {\n var type_1 = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var formatOptions_1 = { format: null, type: 'date', skeleton: 'short', calendar: type_1 };\n var localDateString_1 = this.globalize.formatDate(date, formatOptions_1);\n var tempDateString_1 = this.globalize.formatDate(copyValues[i], formatOptions_1);\n if (localDateString_1 === tempDateString_1) {\n var index = copyValues.indexOf(copyValues[i]);\n copyValues.splice(index, 1);\n values.splice(index, 1);\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n else {\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n if (values.length <= 0) {\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n else if (!disabledCls && this.getDateVal(localDate, value)) {\n addClass([tdEle], SELECTED);\n }\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n if (!isNullOrUndefined(date) && date.getFullYear() === todayDate.getFullYear() && date.getMonth() === todayDate.getMonth()\n && date.getDate() === todayDate.getDate()) {\n addClass([tdEle], TODAY);\n }\n tdEles.push(this.renderDayCellArgs.element);\n localDate = new Date(+minMaxDate);\n this.addDay(localDate, 1, null, this.max, this.min);\n }\n return tdEles;\n };\n CalendarBase.prototype.updateFocus = function (otherMonth, disabled, localDate, tableElement, currentDate) {\n if (currentDate.getDate() === localDate.getDate() && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n else {\n // eslint-disable-next-line radix\n if (currentDate >= this.max && parseInt(tableElement.id, 0) === +this.max && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n // eslint-disable-next-line radix\n if (currentDate <= this.min && parseInt(tableElement.id, 0) === +this.min && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n }\n };\n CalendarBase.prototype.renderYears = function (e, value) {\n this.removeTableHeadElement();\n var numCells = 4;\n var tdEles = [];\n var valueUtil = isNullOrUndefined(value);\n var curDate = new Date(this.checkValue(this.currentDate));\n var mon = curDate.getMonth();\n var yr = curDate.getFullYear();\n var localDate = curDate;\n var curYrs = localDate.getFullYear();\n var minYr = new Date(this.checkValue(this.min)).getFullYear();\n var minMonth = new Date(this.checkValue(this.min)).getMonth();\n var maxYr = new Date(this.checkValue(this.max)).getFullYear();\n var maxMonth = new Date(this.checkValue(this.max)).getMonth();\n localDate.setMonth(0);\n this.titleUpdate(this.currentDate, 'months');\n localDate.setDate(1);\n for (var month = 0; month < 12; ++month) {\n var tdEle = this.dayCell(localDate);\n var dayLink = this.createElement('span');\n var localMonth = (value && (value).getMonth() === localDate.getMonth());\n var select = (value && (value).getFullYear() === yr && localMonth);\n dayLink.textContent = this.toCapitalize(this.globalize.formatDate(localDate, {\n format: null, type: 'dateTime', skeleton: 'MMM'\n }));\n if ((this.min && (curYrs < minYr || (month < minMonth && curYrs === minYr))) || (this.max && (curYrs > maxYr || (month > maxMonth && curYrs >= maxYr)))) {\n addClass([tdEle], DISABLED);\n }\n else if (!valueUtil && select) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getMonth() === mon && this.currentDate.getMonth() === mon) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n localDate.setDate(1);\n localDate.setMonth(localDate.getMonth() + 1);\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.renderTemplate(tdEles, numCells, YEAR, e, value);\n };\n CalendarBase.prototype.renderDecades = function (e, value) {\n this.removeTableHeadElement();\n var numCells = 4;\n var yearCell = 12;\n var tdEles = [];\n var localDate = new Date(this.checkValue(this.currentDate));\n localDate.setMonth(0);\n localDate.setDate(1);\n var localYr = localDate.getFullYear();\n var startYr = new Date(localDate.setFullYear((localYr - localYr % 10)));\n var endYr = new Date(localDate.setFullYear((localYr - localYr % 10 + (10 - 1))));\n var startFullYr = startYr.getFullYear();\n var endFullYr = endYr.getFullYear();\n var startHdrYr = this.globalize.formatDate(startYr, {\n format: null, type: 'dateTime', skeleton: 'y'\n });\n var endHdrYr = this.globalize.formatDate(endYr, { format: null, type: 'dateTime', skeleton: 'y' });\n this.headerTitleElement.textContent = startHdrYr + ' - ' + (endHdrYr);\n var start = new Date(localYr - (localYr % 10) - 1, 0, 1);\n var startYear = start.getFullYear();\n for (var rowIterator = 0; rowIterator < yearCell; ++rowIterator) {\n var year = startYear + rowIterator;\n localDate.setFullYear(year);\n var tdEle = this.dayCell(localDate);\n var dayLink = this.createElement('span');\n dayLink.textContent = this.globalize.formatDate(localDate, {\n format: null, type: 'dateTime', skeleton: 'y'\n });\n if ((year < startFullYr) || (year > endFullYr)) {\n addClass([tdEle], OTHERDECADE);\n if (!isNullOrUndefined(value) && localDate.getFullYear() === (value).getFullYear()) {\n addClass([tdEle], SELECTED);\n }\n if (year < new Date(this.checkValue(this.min)).getFullYear() ||\n year > new Date(this.checkValue(this.max)).getFullYear()) {\n addClass([tdEle], DISABLED);\n }\n }\n else if (year < new Date(this.checkValue(this.min)).getFullYear() ||\n year > new Date(this.checkValue(this.max)).getFullYear()) {\n addClass([tdEle], DISABLED);\n }\n else if (!isNullOrUndefined(value) && localDate.getFullYear() === (value).getFullYear()) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getFullYear() === this.currentDate.getFullYear() && !tdEle.classList.contains(DISABLED)) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.renderTemplate(tdEles, numCells, 'e-decade', e, value);\n };\n CalendarBase.prototype.dayCell = function (localDate) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var dateFormatOptions = { skeleton: 'full', type: 'dateTime', calendar: type };\n var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var value;\n if (!isNullOrUndefined(date)) {\n value = date.valueOf();\n }\n var attrs = {\n className: CELL, attrs: { 'id': '' + getUniqueID('' + value), 'aria-selected': 'false' }\n };\n return this.createElement('td', attrs);\n };\n CalendarBase.prototype.firstDay = function (date) {\n var collection = this.currentView() !== 'Decade' ? this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '') :\n this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERDECADE + '');\n if (collection.length) {\n for (var i = 0; i < collection.length; i++) {\n if (!collection[i].classList.contains(DISABLED)) {\n // eslint-disable-next-line radix\n date = new Date(parseInt(collection[i].id, 0));\n break;\n }\n }\n }\n return date;\n };\n CalendarBase.prototype.lastDay = function (date, view) {\n var lastDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n if (view !== 2) {\n var timeOffset = Math.abs(lastDate.getTimezoneOffset() - this.firstDay(date).getTimezoneOffset());\n if (timeOffset) {\n lastDate.setHours(this.firstDay(date).getHours() + (timeOffset / 60));\n }\n return this.findLastDay(lastDate);\n }\n else {\n return this.findLastDay(this.firstDay(lastDate));\n }\n };\n CalendarBase.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n CalendarBase.prototype.findLastDay = function (date) {\n var collection = this.currentView() === 'Decade' ? this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERDECADE + '') :\n this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '');\n if (collection.length) {\n for (var i = collection.length - 1; i >= 0; i--) {\n if (!collection[i].classList.contains(DISABLED)) {\n // eslint-disable-next-line radix\n date = new Date(parseInt(collection[i].id, 0));\n break;\n }\n }\n }\n return date;\n };\n CalendarBase.prototype.removeTableHeadElement = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content table thead')[0])) {\n detach(this.tableHeadElement);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content table thead')[0])) {\n detach(this.tableHeadElement);\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.renderTemplate = function (elements, count, classNm, e, value) {\n var view = this.getViewNumber(this.currentView());\n var trEle;\n this.tableBodyElement = this.createElement('tbody');\n this.table.appendChild(this.tableBodyElement);\n removeClass([this.contentElement, this.headerElement], [MONTH, DECADE, YEAR]);\n addClass([this.contentElement, this.headerElement], [classNm]);\n var weekNumCell = 41;\n var numberCell = 35;\n var otherMonthCell = 6;\n var row = count;\n var rowIterator = 0;\n for (var dayCell = 0; dayCell < elements.length / count; ++dayCell) {\n trEle = this.createElement('tr');\n for (rowIterator = 0 + rowIterator; rowIterator < row; rowIterator++) {\n if (!elements[rowIterator].classList.contains('e-week-number') && !isNullOrUndefined(elements[rowIterator].children[0])) {\n addClass([elements[rowIterator].children[0]], [LINK]);\n rippleEffect(elements[rowIterator].children[0], {\n duration: 600,\n isCenterRipple: true\n });\n }\n trEle.appendChild(elements[rowIterator]);\n if (this.weekNumber && rowIterator === otherMonthCell + 1 && elements[otherMonthCell + 1].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (!this.weekNumber && rowIterator === otherMonthCell && elements[otherMonthCell].\n classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (this.weekNumber) {\n if (rowIterator === weekNumCell && elements[weekNumCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n else {\n if (rowIterator === numberCell && elements[numberCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n }\n row = row + count;\n rowIterator = rowIterator + 0;\n this.tableBodyElement.appendChild(trEle);\n }\n this.table.querySelector('tbody').className = this.effect;\n if (this.calendarMode === 'Gregorian') {\n this.iconHandler();\n }\n else {\n this.islamicModule.islamicIconHandler();\n }\n if (view !== this.getViewNumber(this.currentView()) || (view === 0 && view !== this.getViewNumber(this.currentView()))) {\n this.navigateHandler(e);\n }\n this.setAriaActiveDescendant();\n };\n CalendarBase.prototype.clickHandler = function (e, value) {\n this.clickEventEmitter(e);\n var eve = e.currentTarget;\n var view = this.getViewNumber(this.currentView());\n if (eve.classList.contains(OTHERMONTH)) {\n this.contentClick(e, 0, null, value);\n }\n else if (view === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.contentClick(e, 1, null, value);\n }\n else if (2 === view) {\n this.contentClick(e, 1, null, value);\n }\n else if (!eve.classList.contains(OTHERMONTH) && view === 0) {\n this.selectDate(e, this.getIdValue(e, null), null);\n }\n else {\n this.contentClick(e, 0, eve, value);\n }\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n // Content click event handler required for extended components\n CalendarBase.prototype.clickEventEmitter = function (e) {\n e.preventDefault();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.contentClick = function (e, view, element, value) {\n var currentView = this.getViewNumber(this.currentView());\n var d = this.getIdValue(e, element);\n switch (view) {\n case 0:\n if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n detach(this.tableBodyElement);\n this.currentDate = d;\n this.effect = ZOOMIN;\n this.renderMonths(e);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n this.currentDate.setMonth(d.getMonth());\n if (d.getMonth() > 0 && this.currentDate.getMonth() !== d.getMonth()) {\n this.currentDate.setDate(0);\n }\n this.currentDate.setFullYear(d.getFullYear());\n }\n else {\n this.currentDate = d;\n }\n this.effect = ZOOMIN;\n detach(this.tableBodyElement);\n this.renderMonths(e);\n }\n break;\n case 1:\n if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.selectDate(e, d, null);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n this.currentDate.setFullYear(d.getFullYear());\n }\n else {\n this.islamicPreviousHeader = this.headerElement.textContent;\n var islamicDate = this.islamicModule.getIslamicDate(d);\n this.currentDate = this.islamicModule.toGregorian(islamicDate.year, islamicDate.month, 1);\n }\n this.effect = ZOOMIN;\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n }\n };\n CalendarBase.prototype.switchView = function (view, e, multiSelection, isCustomDate) {\n switch (view) {\n case 0:\n detach(this.tableBodyElement);\n this.renderMonths(e, null, isCustomDate);\n break;\n case 1:\n detach(this.tableBodyElement);\n this.renderYears(e);\n break;\n case 2:\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n };\n /**\n * To get component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n CalendarBase.prototype.getModuleName = function () {\n return 'calendar';\n };\n /**\n *\n * @returns {void}\n\n */\n CalendarBase.prototype.requiredModules = function () {\n var modules = [];\n if (this) {\n modules.push({ args: [this], member: 'islamic' });\n }\n return modules;\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string}\n */\n CalendarBase.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Called internally if any of the property value changed.\n *\n * @param {CalendarBaseModel} newProp - Returns the dynamic property value of the component.\n * @param {CalendarBaseModel} oldProp - Returns the previous property value of the component.\n * @param {boolean} multiSelection - - Specifies whether multiple date selection is enabled or not.\n * @param {Date[]} values - Specifies the dates.\n * @returns {void}\n * @private\n */\n CalendarBase.prototype.onPropertyChanged = function (newProp, oldProp, multiSelection, values) {\n this.effect = '';\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enableRtl':\n if (newProp.enableRtl) {\n if (this.getModuleName() === 'calendar') {\n this.element.classList.add('e-rtl');\n }\n else {\n this.calendarElement.classList.add('e-rtl');\n }\n }\n else {\n if (this.getModuleName() === 'calendar') {\n this.element.classList.remove('e-rtl');\n }\n else {\n this.calendarElement.classList.remove('e-rtl');\n }\n }\n break;\n case 'dayHeaderFormat':\n this.getCultureValues();\n if (this.getModuleName() !== 'datepicker') {\n this.createContentHeader();\n }\n else if (this.calendarElement) {\n this.createContentHeader();\n }\n this.adjustLongHeaderSize();\n break;\n case 'min':\n case 'max':\n this.rangeValidation(this.min, this.max);\n if (prop === 'min') {\n this.setProperties({ min: this.checkDateValue(new Date(this.checkValue(newProp.min))) }, true);\n }\n else {\n this.setProperties({ max: this.checkDateValue(new Date(this.checkValue(newProp.max))) }, true);\n }\n this.setProperties({ start: this.currentView() }, true);\n if (this.tableBodyElement) {\n detach(this.tableBodyElement);\n }\n this.minMaxUpdate();\n if (multiSelection) {\n this.validateValues(multiSelection, values);\n }\n if (this.getModuleName() !== 'datepicker') {\n this.createContentBody();\n }\n else if (this.calendarElement) {\n this.createContentBody();\n }\n if ((this.todayDate < this.min || this.max < this.todayDate) && (this.footer) && (this.todayElement)) {\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = null;\n this.createContentFooter();\n }\n else {\n if ((this.footer) && (this.todayElement) && this.todayElement.classList.contains('e-disabled')) {\n removeClass([this.todayElement], DISABLED);\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = null;\n this.createContentFooter();\n }\n }\n break;\n case 'start':\n case 'depth':\n case 'weekNumber':\n case 'firstDayOfWeek':\n case 'weekRule':\n this.checkView();\n if (this.getModuleName() !== 'datepicker') {\n this.createContentHeader();\n this.createContentBody();\n }\n else if (this.calendarElement) {\n this.createContentHeader();\n this.createContentBody();\n }\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n if (this.getModuleName() !== 'datepicker') {\n this.createContentHeader();\n this.createContentBody();\n }\n else if (this.calendarElement) {\n this.createContentHeader();\n this.createContentBody();\n }\n this.l10.setLocale(this.locale);\n this.updateFooter();\n break;\n case 'showTodayButton':\n if (newProp.showTodayButton) {\n this.createContentFooter();\n }\n else {\n if (!isNullOrUndefined(this.todayElement) && !isNullOrUndefined(this.footer)) {\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = undefined;\n }\n }\n this.setProperties({ showTodayButton: newProp.showTodayButton }, true);\n break;\n }\n }\n };\n /**\n * values property updated with considered disabled dates of the calendar.\n *\n * @param {boolean} multiSelection - Specifies whether multiple date selection is enabled.\n * @param {Date[]} values - Specifies the dates to validate.\n * @returns {void}\n */\n CalendarBase.prototype.validateValues = function (multiSelection, values) {\n if (multiSelection && !isNullOrUndefined(values) && values.length > 0) {\n var copyValues = this.copyValues(values);\n for (var skipIndex = 0; skipIndex < copyValues.length; skipIndex++) {\n var tempValue = copyValues[skipIndex];\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var tempValueString = void 0;\n if (this.calendarMode === 'Gregorian') {\n tempValueString = this.globalize.formatDate(tempValue, { type: 'date', skeleton: 'yMd' });\n }\n else {\n tempValueString = this.globalize.formatDate(tempValue, { type: 'dateTime', skeleton: 'full', calendar: 'islamic' });\n }\n var minFormatOption = { type: 'date', skeleton: 'yMd', calendar: type };\n var minStringValue = this.globalize.formatDate(this.min, minFormatOption);\n var minString = minStringValue;\n var maxFormatOption = { type: 'date', skeleton: 'yMd', calendar: type };\n var maxStringValue = this.globalize.formatDate(this.max, maxFormatOption);\n var maxString = maxStringValue;\n if (+new Date(tempValueString) < +new Date(minString) ||\n +new Date(tempValueString) > +new Date(maxString)) {\n copyValues.splice(skipIndex, 1);\n skipIndex = -1;\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n };\n CalendarBase.prototype.setValueUpdate = function () {\n if (!isNullOrUndefined(this.tableBodyElement)) {\n detach(this.tableBodyElement);\n this.setProperties({ start: this.currentView() }, true);\n this.createContentBody();\n }\n };\n CalendarBase.prototype.copyValues = function (values) {\n var copyValues = [];\n if (!isNullOrUndefined(values) && values.length > 0) {\n for (var index = 0; index < values.length; index++) {\n copyValues.push(new Date(+values[index]));\n }\n }\n return copyValues;\n };\n CalendarBase.prototype.titleUpdate = function (date, view) {\n var globalize = new Internationalization(this.locale);\n var dayFormatOptions;\n var monthFormatOptions;\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n if (this.calendarMode === 'Gregorian') {\n dayFormatOptions = globalize.formatDate(date, { type: 'dateTime', skeleton: 'yMMMM', calendar: type });\n monthFormatOptions = globalize.formatDate(date, {\n format: null, type: 'dateTime', skeleton: 'y', calendar: type\n });\n }\n else {\n dayFormatOptions = globalize.formatDate(date, { type: 'dateTime', format: 'MMMM y', calendar: type });\n monthFormatOptions = globalize.formatDate(date, { type: 'dateTime', format: 'y', calendar: type });\n }\n switch (view) {\n case 'days':\n this.headerTitleElement.textContent = this.toCapitalize(dayFormatOptions);\n break;\n case 'months':\n this.headerTitleElement.textContent = monthFormatOptions;\n }\n };\n CalendarBase.prototype.setActiveDescendant = function () {\n var id;\n var focusedEle = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedEle = this.tableBodyElement.querySelector('tr td.e-selected');\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var title;\n var view = this.currentView();\n if (view === 'Month') {\n title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'full', calendar: type });\n }\n else if (view === 'Year') {\n if (type !== 'islamic') {\n title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'yMMMM', calendar: type });\n }\n else {\n title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'GyMMM', calendar: type });\n }\n }\n else {\n title = this.globalize.formatDate(this.currentDate, {\n format: null, type: 'date', skeleton: 'y', calendar: type\n });\n }\n if (selectedEle || focusedEle) {\n if (!isNullOrUndefined(selectedEle)) {\n selectedEle.setAttribute('aria-selected', 'true');\n }\n (focusedEle || selectedEle).setAttribute('aria-label', title);\n id = (focusedEle || selectedEle).getAttribute('id');\n }\n return id;\n };\n CalendarBase.prototype.iconHandler = function () {\n new Date(this.checkValue(this.currentDate)).setDate(1);\n switch (this.currentView()) {\n case 'Month':\n this.previousIconHandler(this.compareMonth(new Date(this.checkValue(this.currentDate)), this.min) < 1);\n this.nextIconHandler(this.compareMonth(new Date(this.checkValue(this.currentDate)), this.max) > -1);\n break;\n case 'Year':\n this.previousIconHandler(this.compareYear(new Date(this.checkValue(this.currentDate)), this.min) < 1);\n this.nextIconHandler(this.compareYear(new Date(this.checkValue(this.currentDate)), this.max) > -1);\n break;\n case 'Decade':\n this.previousIconHandler(this.compareDecade(new Date(this.checkValue(this.currentDate)), this.min) < 1);\n this.nextIconHandler(this.compareDecade(new Date(this.checkValue(this.currentDate)), this.max) > -1);\n }\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n CalendarBase.prototype.destroy = function () {\n if (this.getModuleName() === 'calendar' && this.element) {\n removeClass([this.element], [ROOT]);\n }\n else {\n if (this.calendarElement && this.element) {\n removeClass([this.element], [ROOT]);\n }\n }\n if (this.getModuleName() === 'calendar' && this.element) {\n if (!isNullOrUndefined(this.headerTitleElement)) {\n EventHandler.remove(this.headerTitleElement, 'click', this.navigateTitle);\n }\n if (this.todayElement) {\n EventHandler.remove(this.todayElement, 'click', this.todayButtonClick);\n }\n this.previousIconHandler(true);\n this.nextIconHandler(true);\n this.keyboardModule.destroy();\n this.element.removeAttribute('data-role');\n if (!isNullOrUndefined(this.calendarEleCopy.getAttribute('tabindex'))) {\n this.element.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.element.removeAttribute('tabindex');\n }\n }\n if (this.element) {\n this.element.innerHTML = '';\n }\n this.todayElement = null;\n this.tableBodyElement = null;\n this.renderDayCellArgs = null;\n this.headerElement = null;\n this.nextIcon = null;\n this.table = null;\n this.tableHeadElement = null;\n this.previousIcon = null;\n this.headerTitleElement = null;\n this.footer = null;\n this.contentElement = null;\n _super.prototype.destroy.call(this);\n };\n CalendarBase.prototype.title = function (e) {\n var currentView = this.getViewNumber(this.currentView());\n this.effect = ZOOMIN;\n this.switchView(++currentView, e);\n };\n CalendarBase.prototype.getViewNumber = function (stringVal) {\n if (stringVal === 'Month') {\n return 0;\n }\n else if (stringVal === 'Year') {\n return 1;\n }\n else {\n return 2;\n }\n };\n CalendarBase.prototype.navigateTitle = function (e) {\n e.preventDefault();\n this.title(e);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n CalendarBase.prototype.previous = function () {\n this.effect = '';\n var currentView = this.getViewNumber(this.currentView());\n switch (this.currentView()) {\n case 'Month':\n this.addMonths(this.currentDate, -1);\n this.switchView(currentView);\n break;\n case 'Year':\n this.addYears(this.currentDate, -1);\n this.switchView(currentView);\n break;\n case 'Decade':\n this.addYears(this.currentDate, -10);\n this.switchView(currentView);\n break;\n }\n };\n CalendarBase.prototype.navigatePrevious = function (e) {\n !Browser.isDevice && e.preventDefault();\n if (this.calendarMode === 'Gregorian') {\n this.previous();\n }\n else {\n this.islamicModule.islamicPrevious();\n }\n this.triggerNavigate(e);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n CalendarBase.prototype.next = function () {\n this.effect = '';\n var currentView = this.getViewNumber(this.currentView());\n switch (this.currentView()) {\n case 'Month':\n this.addMonths(this.currentDate, 1);\n this.switchView(currentView);\n break;\n case 'Year':\n this.addYears(this.currentDate, 1);\n this.switchView(currentView);\n break;\n case 'Decade':\n this.addYears(this.currentDate, 10);\n this.switchView(currentView);\n break;\n }\n };\n CalendarBase.prototype.navigateNext = function (eve) {\n !Browser.isDevice && eve.preventDefault();\n if (this.calendarMode === 'Gregorian') {\n this.next();\n }\n else {\n this.islamicModule.islamicNext();\n }\n this.triggerNavigate(eve);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n *\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @param {boolean} isCustomDate - Specifies whether the calendar is rendered with custom today date or not.\n * @returns {void}\n */\n CalendarBase.prototype.navigateTo = function (view, date, isCustomDate) {\n if (+date >= +this.min && +date <= +this.max) {\n this.currentDate = date;\n }\n if (+date <= +this.min) {\n this.currentDate = new Date(this.checkValue(this.min));\n }\n if (+date >= +this.max) {\n this.currentDate = new Date(this.checkValue(this.max));\n }\n if ((this.getViewNumber(this.depth) >= this.getViewNumber(view))) {\n if ((this.getViewNumber(this.depth) <= this.getViewNumber(this.start))\n || this.getViewNumber(this.depth) === this.getViewNumber(view)) {\n view = this.depth;\n }\n }\n this.switchView(this.getViewNumber(view), null, null, isCustomDate);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the current view of the Calendar.\n *\n * @returns {string}\n */\n CalendarBase.prototype.currentView = function () {\n if (!isNullOrUndefined(this.contentElement) && this.contentElement.classList.contains(YEAR)) {\n return 'Year';\n }\n else if (!isNullOrUndefined(this.contentElement) && this.contentElement.classList.contains(DECADE)) {\n return 'Decade';\n }\n else {\n return 'Month';\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n CalendarBase.prototype.getDateVal = function (date, value) {\n return (!isNullOrUndefined(value) && date.getDate() === (value).getDate()\n && date.getMonth() === (value).getMonth() && date.getFullYear() === (value).getFullYear());\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.getCultureObjects = function (ld, c) {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.' + this.dayHeaderFormat.toLowerCase();\n var islamicFormat = '.dates.calendars.islamic.days.format.' + this.dayHeaderFormat.toLowerCase();\n var mainVal = 'main.';\n if (this.calendarMode === 'Gregorian') {\n return getValue(mainVal + '' + this.locale + gregorianFormat, ld);\n }\n else {\n return getValue('main.' + '' + this.locale + islamicFormat, ld);\n }\n };\n CalendarBase.prototype.getWeek = function (d) {\n var currentDate = new Date(this.checkValue(d)).valueOf();\n var date = new Date(d.getFullYear(), 0, 1).valueOf();\n return Math.ceil((((currentDate - date) + dayMilliSeconds) / dayMilliSeconds) / 7);\n };\n CalendarBase.prototype.setStartDate = function (date, time) {\n var tzOffset = date.getTimezoneOffset();\n var d = new Date(date.getTime() + time);\n var tzOffsetDiff = d.getTimezoneOffset() - tzOffset;\n date.setTime(d.getTime() + tzOffsetDiff * minutesMilliSeconds);\n };\n CalendarBase.prototype.addMonths = function (date, i) {\n if (this.calendarMode === 'Gregorian') {\n var day = date.getDate();\n date.setDate(1);\n date.setMonth(date.getMonth() + i);\n date.setDate(Math.min(day, this.getMaxDays(date)));\n }\n else {\n var islamicDate = this.islamicModule.getIslamicDate(date);\n this.currentDate = this.islamicModule.toGregorian(islamicDate.year, (islamicDate.month) + i, 1);\n }\n };\n CalendarBase.prototype.addYears = function (date, i) {\n if (this.calendarMode === 'Gregorian') {\n var day = date.getDate();\n date.setDate(1);\n date.setFullYear(date.getFullYear() + i);\n date.setDate(Math.min(day, this.getMaxDays(date)));\n }\n else {\n var islamicDate = this.islamicModule.getIslamicDate(date);\n this.currentDate = this.islamicModule.toGregorian(islamicDate.year + i, (islamicDate.month), 1);\n }\n };\n CalendarBase.prototype.getIdValue = function (e, element) {\n var eve;\n if (e) {\n eve = e.currentTarget;\n }\n else {\n eve = element;\n }\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full', calendar: type };\n // eslint-disable-next-line radix\n var dateString = this.globalize.formatDate(new Date(parseInt('' + eve.getAttribute('id'), 0)), dateFormatOptions);\n var date = this.globalize.parseDate(dateString, dateFormatOptions);\n var value = date.valueOf() - date.valueOf() % 1000;\n return new Date(value);\n //return this.globalize.parseDate(dateString, dateFormatOptions);\n };\n CalendarBase.prototype.adjustLongHeaderSize = function () {\n removeClass([this.element], DAYHEADERLONG);\n if (this.dayHeaderFormat === 'Wide') {\n addClass([this.getModuleName() === 'calendar' ? this.element : this.calendarElement], DAYHEADERLONG);\n }\n };\n CalendarBase.prototype.selectDate = function (e, date, node, multiSelection, values) {\n var element = node || e.currentTarget;\n this.isDateSelected = false;\n if (this.currentView() === 'Decade') {\n this.setDateDecade(this.currentDate, date.getFullYear());\n }\n else if (this.currentView() === 'Year') {\n this.setDateYear(this.currentDate, date);\n }\n else {\n if (multiSelection && !this.checkPresentDate(date, values)) {\n var copyValues = this.copyValues(values);\n if (!isNullOrUndefined(values) && copyValues.length > 0) {\n copyValues.push(new Date(this.checkValue(date)));\n this.setProperties({ values: copyValues }, true);\n this.setProperties({ value: values[values.length - 1] }, true);\n }\n else {\n this.setProperties({ values: [new Date(this.checkValue(date))] }, true);\n }\n }\n else {\n this.setProperties({ value: new Date(this.checkValue(date)) }, true);\n }\n this.currentDate = new Date(this.checkValue(date));\n }\n var tableBodyElement = closest(element, '.' + ROOT);\n if (isNullOrUndefined(tableBodyElement)) {\n tableBodyElement = this.tableBodyElement;\n }\n if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + SELECTED))) {\n removeClass([tableBodyElement.querySelector('.' + SELECTED)], SELECTED);\n }\n if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + FOCUSEDDATE))) {\n removeClass([tableBodyElement.querySelector('.' + FOCUSEDDATE)], FOCUSEDDATE);\n }\n if (multiSelection) {\n var copyValues = this.copyValues(values);\n var collection = Array.prototype.slice.call(this.tableBodyElement.querySelectorAll('td'));\n for (var index = 0; index < collection.length; index++) {\n var tempElement = tableBodyElement.querySelectorAll('td' + '.' + FOCUSEDDATE)[0];\n var selectedElement = tableBodyElement.querySelectorAll('td' + '.' + SELECTED)[0];\n if (collection[index] === tempElement) {\n removeClass([collection[index]], FOCUSEDDATE);\n }\n if (collection[index] === selectedElement &&\n !this.checkPresentDate(new Date(parseInt(selectedElement.getAttribute('id').split('_')[0], 10)), values)) {\n removeClass([collection[index]], SELECTED);\n }\n }\n if (element.classList.contains(SELECTED)) {\n removeClass([element], SELECTED);\n for (var i = 0; i < copyValues.length; i++) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var formatOptions = { format: null, type: 'date', skeleton: 'short', calendar: type };\n var localDateString = this.globalize.formatDate(date, formatOptions);\n var tempDateString = this.globalize.formatDate(copyValues[i], formatOptions);\n if (localDateString === tempDateString) {\n var index = copyValues.indexOf(copyValues[i]);\n copyValues.splice(index, 1);\n addClass([element], FOCUSEDDATE);\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n else {\n addClass([element], SELECTED);\n }\n }\n else {\n addClass([element], SELECTED);\n }\n this.isDateSelected = true;\n };\n CalendarBase.prototype.checkPresentDate = function (dates, values) {\n var previousValue = false;\n if (!isNullOrUndefined(values)) {\n for (var checkPrevious = 0; checkPrevious < values.length; checkPrevious++) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var localDateString = this.globalize.formatDate(dates, {\n format: null, type: 'date', skeleton: 'short', calendar: type\n });\n var tempDateString = this.globalize.formatDate(values[checkPrevious], {\n format: null, type: 'date', skeleton: 'short', calendar: type\n });\n if (localDateString === tempDateString) {\n previousValue = true;\n }\n }\n }\n return previousValue;\n };\n CalendarBase.prototype.setAriaActiveDescendant = function () {\n attributes(this.table, {\n 'aria-activedescendant': '' + this.setActiveDescendant()\n });\n };\n CalendarBase.prototype.previousIconHandler = function (disabled) {\n if (disabled) {\n if (!isNullOrUndefined(this.previousIcon)) {\n EventHandler.remove(this.previousIcon, 'click', this.navigatePreviousHandler);\n addClass([this.previousIcon], '' + DISABLED);\n addClass([this.previousIcon], '' + OVERLAY);\n this.previousIcon.setAttribute('aria-disabled', 'true');\n }\n }\n else {\n EventHandler.add(this.previousIcon, 'click', this.navigatePreviousHandler);\n removeClass([this.previousIcon], '' + DISABLED);\n removeClass([this.previousIcon], '' + OVERLAY);\n this.previousIcon.setAttribute('aria-disabled', 'false');\n }\n };\n CalendarBase.prototype.renderDayCellEvent = function (args) {\n extend(this.renderDayCellArgs, { name: 'renderDayCell' });\n this.trigger('renderDayCell', args);\n };\n CalendarBase.prototype.navigatedEvent = function (eve) {\n extend(this.navigatedArgs, { name: 'navigated', event: eve });\n this.trigger('navigated', this.navigatedArgs);\n };\n CalendarBase.prototype.triggerNavigate = function (event) {\n this.navigatedArgs = { view: this.currentView(), date: this.currentDate };\n this.navigatedEvent(event);\n };\n CalendarBase.prototype.nextIconHandler = function (disabled) {\n if (disabled) {\n if (!isNullOrUndefined(this.previousIcon)) {\n EventHandler.remove(this.nextIcon, 'click', this.navigateNextHandler);\n addClass([this.nextIcon], DISABLED);\n addClass([this.nextIcon], OVERLAY);\n this.nextIcon.setAttribute('aria-disabled', 'true');\n }\n }\n else {\n EventHandler.add(this.nextIcon, 'click', this.navigateNextHandler);\n removeClass([this.nextIcon], DISABLED);\n removeClass([this.nextIcon], OVERLAY);\n this.nextIcon.setAttribute('aria-disabled', 'false');\n }\n };\n CalendarBase.prototype.compare = function (startDate, endDate, modifier) {\n var start = endDate.getFullYear();\n var end;\n var result;\n end = start;\n result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (startDate.getFullYear() > end) {\n result = 1;\n }\n else if (startDate.getFullYear() < start) {\n result = -1;\n }\n return result;\n };\n CalendarBase.prototype.isMinMaxRange = function (date) {\n return +date >= +this.min && +date <= +this.max;\n };\n CalendarBase.prototype.isMonthYearRange = function (date) {\n if (this.calendarMode === 'Gregorian') {\n return date.getMonth() >= this.min.getMonth()\n && date.getFullYear() >= this.min.getFullYear()\n && date.getMonth() <= this.max.getMonth()\n && date.getFullYear() <= this.max.getFullYear();\n }\n else {\n var islamicDate = this.islamicModule.getIslamicDate(date);\n return islamicDate.month >= (this.islamicModule.getIslamicDate(new Date(1944, 1, 18))).month\n && islamicDate.year >= (this.islamicModule.getIslamicDate(new Date(1944, 1, 18))).year\n && islamicDate.month <= (this.islamicModule.getIslamicDate(new Date(2069, 1, 16))).month\n && islamicDate.year <= (this.islamicModule.getIslamicDate(new Date(2069, 1, 16))).year;\n }\n };\n CalendarBase.prototype.compareYear = function (start, end) {\n return this.compare(start, end, 0);\n };\n CalendarBase.prototype.compareDecade = function (start, end) {\n return this.compare(start, end, 10);\n };\n CalendarBase.prototype.shiftArray = function (array, i) {\n return array.slice(i).concat(array.slice(0, i));\n };\n CalendarBase.prototype.addDay = function (date, i, e, max, min) {\n var column = i;\n var value = new Date(+date);\n if (!isNullOrUndefined(this.tableBodyElement) && !isNullOrUndefined(e)) {\n while (this.findNextTD(new Date(+date), column, max, min)) {\n column += i;\n }\n var rangeValue = new Date(value.setDate(value.getDate() + column));\n column = (+rangeValue > +max || +rangeValue < +min) ? column === i ? i - i : i : column;\n }\n date.setDate(date.getDate() + column);\n };\n CalendarBase.prototype.findNextTD = function (date, column, max, min) {\n var value = new Date(date.setDate(date.getDate() + column));\n var collection = [];\n var isDisabled = false;\n if ((!isNullOrUndefined(value) && value.getMonth()) === (!isNullOrUndefined(this.currentDate) && this.currentDate.getMonth())) {\n var tdEles = void 0;\n if (this.calendarMode === 'Gregorian') {\n tdEles = this.renderDays(value);\n }\n else {\n tdEles = this.islamicModule.islamicRenderDays(this.currentDate, value);\n }\n collection = tdEles.filter(function (element) {\n return element.classList.contains(DISABLED);\n });\n }\n else {\n collection = this.tableBodyElement.querySelectorAll('td.' + DISABLED);\n }\n if (+value <= (+(max)) && +value >= (+(min))) {\n if (collection.length) {\n for (var i = 0; i < collection.length; i++) {\n // eslint-disable-next-line radix\n isDisabled = (+value === +new Date(parseInt(collection[i].id, 0))) ? true : false;\n if (isDisabled) {\n break;\n }\n }\n }\n }\n return isDisabled;\n };\n CalendarBase.prototype.getMaxDays = function (d) {\n var date;\n var tmpDate = new Date(this.checkValue(d));\n date = 28;\n var month = tmpDate.getMonth();\n while (tmpDate.getMonth() === month) {\n ++date;\n tmpDate.setDate(date);\n }\n return date - 1;\n };\n CalendarBase.prototype.setDateDecade = function (date, year) {\n date.setFullYear(year);\n this.setProperties({ value: new Date(this.checkValue(date)) }, true);\n };\n CalendarBase.prototype.setDateYear = function (date, value) {\n date.setFullYear(value.getFullYear(), value.getMonth(), date.getDate());\n if (value.getMonth() !== date.getMonth()) {\n date.setDate(0);\n this.currentDate = new Date(this.checkValue(value));\n }\n this.setProperties({ value: new Date(this.checkValue(date)) }, true);\n };\n CalendarBase.prototype.compareMonth = function (start, end) {\n var result;\n if (start.getFullYear() > end.getFullYear()) {\n result = 1;\n }\n else if (start.getFullYear() < end.getFullYear()) {\n result = -1;\n }\n else {\n result = start.getMonth() === end.getMonth() ? 0 : start.getMonth() > end.getMonth() ? 1 : -1;\n }\n return result;\n };\n CalendarBase.prototype.checkValue = function (inValue) {\n if (inValue instanceof Date) {\n return (inValue.toUTCString());\n }\n else {\n return ('' + inValue);\n }\n };\n CalendarBase.prototype.checkView = function () {\n if (this.start !== 'Decade' && this.start !== 'Year') {\n this.setProperties({ start: 'Month' }, true);\n }\n if (this.depth !== 'Decade' && this.depth !== 'Year') {\n this.setProperties({ depth: 'Month' }, true);\n }\n if (this.getViewNumber(this.depth) > this.getViewNumber(this.start)) {\n this.setProperties({ depth: 'Month' }, true);\n }\n };\n CalendarBase.prototype.getDate = function (date, timezone) {\n if (timezone) {\n date = new Date(date.toLocaleString('en-US', { timeZone: timezone }));\n }\n return date;\n };\n __decorate([\n Property(new Date(1900, 0, 1))\n ], CalendarBase.prototype, \"min\", void 0);\n __decorate([\n Property(true)\n ], CalendarBase.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"cssClass\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], CalendarBase.prototype, \"max\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property('Gregorian')\n ], CalendarBase.prototype, \"calendarMode\", void 0);\n __decorate([\n Property('Month')\n ], CalendarBase.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], CalendarBase.prototype, \"depth\", void 0);\n __decorate([\n Property(false)\n ], CalendarBase.prototype, \"weekNumber\", void 0);\n __decorate([\n Property('FirstDay')\n ], CalendarBase.prototype, \"weekRule\", void 0);\n __decorate([\n Property(true)\n ], CalendarBase.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property('Short')\n ], CalendarBase.prototype, \"dayHeaderFormat\", void 0);\n __decorate([\n Property(false)\n ], CalendarBase.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"navigated\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"renderDayCell\", void 0);\n CalendarBase = __decorate([\n NotifyPropertyChanges\n ], CalendarBase);\n return CalendarBase;\n}(Component));\nexport { CalendarBase };\n/**\n * Represents the Calendar component that allows the user to select a date.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Calendar = /** @class */ (function (_super) {\n __extends(Calendar, _super);\n /**\n * Initialized new instance of Calendar Class.\n * Constructor for creating the widget\n *\n * @param {CalendarModel} options - Specifies the Calendar model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function Calendar(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n Calendar.prototype.render = function () {\n if (this.calendarMode === 'Islamic' && this.islamicModule === undefined) {\n throwError('Requires the injectable Islamic modules to render Calendar in Islamic mode');\n }\n if (this.isMultiSelection && typeof this.values === 'object' && !isNullOrUndefined(this.values) && this.values.length > 0) {\n var tempValues = [];\n var copyValues = [];\n for (var limit = 0; limit < this.values.length; limit++) {\n if (tempValues.indexOf(+this.values[limit]) === -1) {\n tempValues.push(+this.values[limit]);\n copyValues.push(this.values[limit]);\n }\n }\n this.setProperties({ values: copyValues }, true);\n for (var index = 0; index < this.values.length; index++) {\n if (!this.checkDateValue(this.values[index])) {\n if (typeof (this.values[index]) === 'string' && this.checkDateValue(new Date(this.checkValue(this.values[index])))) {\n var copyDate = new Date(this.checkValue(this.values[index]));\n this.values.splice(index, 1);\n this.values.splice(index, 0, copyDate);\n }\n else {\n this.values.splice(index, 1);\n }\n }\n }\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n this.previousValues = this.values.length;\n }\n this.validateDate();\n this.minMaxUpdate();\n if (this.getModuleName() === 'calendar') {\n this.setEnable(this.enabled);\n this.setClass(this.cssClass);\n }\n _super.prototype.render.call(this);\n if (this.getModuleName() === 'calendar') {\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.add(form, 'reset', this.formResetHandler.bind(this));\n }\n this.setTimeZone(this.serverTimezoneOffset);\n }\n this.renderComplete();\n };\n Calendar.prototype.setEnable = function (enable) {\n if (!enable) {\n addClass([this.element], DISABLED);\n }\n else {\n removeClass([this.element], DISABLED);\n }\n };\n Calendar.prototype.setClass = function (newCssClass, oldCssClass) {\n if (!isNullOrUndefined(oldCssClass)) {\n oldCssClass = (oldCssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(newCssClass)) {\n newCssClass = (newCssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(oldCssClass) && oldCssClass !== '') {\n removeClass([this.element], oldCssClass.split(' '));\n }\n if (!isNullOrUndefined(newCssClass)) {\n addClass([this.element], newCssClass.split(' '));\n }\n };\n Calendar.prototype.isDayLightSaving = function () {\n var secondOffset = new Date(this.value.getFullYear(), 6, 1).getTimezoneOffset();\n var firstOffset = new Date(this.value.getFullYear(), 0, 1).getTimezoneOffset();\n return (this.value.getTimezoneOffset() < Math.max(firstOffset, secondOffset));\n };\n Calendar.prototype.setTimeZone = function (offsetValue) {\n if (!isNullOrUndefined(this.serverTimezoneOffset) && this.value) {\n var serverTimezoneDiff = offsetValue;\n var clientTimeZoneDiff = new Date().getTimezoneOffset() / 60;\n var timeZoneDiff = serverTimezoneDiff + clientTimeZoneDiff;\n timeZoneDiff = this.isDayLightSaving() ? timeZoneDiff-- : timeZoneDiff;\n this.value = new Date(this.value.getTime() + (timeZoneDiff * 60 * 60 * 1000));\n }\n };\n Calendar.prototype.formResetHandler = function () {\n this.setProperties({ value: null }, true);\n };\n Calendar.prototype.validateDate = function () {\n if (typeof this.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date(this.checkValue(this.value))) }, true); // persist the value property.\n }\n _super.prototype.validateDate.call(this, this.value);\n if (!isNullOrUndefined(this.value) && this.min <= this.max && this.value >= this.min && this.value <= this.max) {\n this.currentDate = new Date(this.checkValue(this.value));\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: null }, true);\n }\n };\n Calendar.prototype.minMaxUpdate = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.value) && this.value <= this.min && this.min <= this.max) {\n this.setProperties({ value: this.min }, true);\n this.changedArgs = { value: this.value };\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value >= this.max && this.min <= this.max) {\n this.setProperties({ value: this.max }, true);\n this.changedArgs = { value: this.value };\n }\n }\n }\n if (this.getModuleName() !== 'calendar' && !isNullOrUndefined(this.value)) {\n if (!isNullOrUndefined(this.value) && this.value < this.min && this.min <= this.max) {\n _super.prototype.minMaxUpdate.call(this, this.min);\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value > this.max && this.min <= this.max) {\n _super.prototype.minMaxUpdate.call(this, this.max);\n }\n }\n }\n else {\n _super.prototype.minMaxUpdate.call(this, this.value);\n }\n };\n Calendar.prototype.generateTodayVal = function (value) {\n var tempValue = new Date();\n if (!isNullOrUndefined(this.timezone)) {\n tempValue = _super.prototype.getDate.call(this, tempValue, this.timezone);\n }\n if (value && isNullOrUndefined(this.timezone)) {\n tempValue.setHours(value.getHours());\n tempValue.setMinutes(value.getMinutes());\n tempValue.setSeconds(value.getSeconds());\n tempValue.setMilliseconds(value.getMilliseconds());\n }\n else {\n tempValue = new Date(tempValue.getFullYear(), tempValue.getMonth(), tempValue.getDate(), 0, 0, 0, 0);\n }\n return tempValue;\n };\n Calendar.prototype.todayButtonClick = function (e) {\n if (this.showTodayButton) {\n var tempValue = this.generateTodayVal(this.value);\n this.setProperties({ value: tempValue }, true);\n this.isTodayClicked = true;\n this.todayButtonEvent = e;\n if (this.isMultiSelection) {\n var copyValues = this.copyValues(this.values);\n if (!_super.prototype.checkPresentDate.call(this, tempValue, this.values)) {\n copyValues.push(tempValue);\n this.setProperties({ values: copyValues });\n }\n }\n _super.prototype.todayButtonClick.call(this, e, new Date(+this.value));\n }\n };\n Calendar.prototype.keyActionHandle = function (e) {\n _super.prototype.keyActionHandle.call(this, e, this.value, this.isMultiSelection);\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n Calendar.prototype.preRender = function () {\n var _this = this;\n this.changeHandler = function (e) {\n _this.triggerChange(e);\n };\n this.checkView();\n _super.prototype.preRender.call(this, this.value);\n };\n /**\n * @returns {void}\n\n */\n Calendar.prototype.createContent = function () {\n this.previousDate = this.value;\n this.previousDateTime = this.value;\n _super.prototype.createContent.call(this);\n };\n Calendar.prototype.minMaxDate = function (localDate) {\n return _super.prototype.minMaxDate.call(this, localDate);\n };\n Calendar.prototype.renderMonths = function (e, value, isCustomDate) {\n _super.prototype.renderMonths.call(this, e, this.value, isCustomDate);\n };\n Calendar.prototype.renderDays = function (currentDate, value, isMultiSelect, values, isCustomDate, e) {\n var tempDays = _super.prototype.renderDays.call(this, currentDate, this.value, this.isMultiSelection, this.values, isCustomDate, e);\n if (this.isMultiSelection) {\n _super.prototype.validateValues.call(this, this.isMultiSelection, this.values);\n }\n return tempDays;\n };\n Calendar.prototype.renderYears = function (e) {\n if (this.calendarMode === 'Gregorian') {\n _super.prototype.renderYears.call(this, e, this.value);\n }\n else {\n this.islamicModule.islamicRenderYears(e, this.value);\n }\n };\n Calendar.prototype.renderDecades = function (e) {\n if (this.calendarMode === 'Gregorian') {\n _super.prototype.renderDecades.call(this, e, this.value);\n }\n else {\n this.islamicModule.islamicRenderDecade(e, this.value);\n }\n };\n Calendar.prototype.renderTemplate = function (elements, count, classNm, e) {\n if (this.calendarMode === 'Gregorian') {\n _super.prototype.renderTemplate.call(this, elements, count, classNm, e, this.value);\n }\n else {\n this.islamicModule.islamicRenderTemplate(elements, count, classNm, e, this.value);\n }\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n };\n Calendar.prototype.clickHandler = function (e) {\n var eve = e.currentTarget;\n this.isPopupClicked = true;\n if (eve.classList.contains(OTHERMONTH)) {\n if (this.isMultiSelection) {\n var copyValues = this.copyValues(this.values);\n if (copyValues.toString().indexOf(this.getIdValue(e, null).toString()) === -1) {\n copyValues.push(this.getIdValue(e, null));\n this.setProperties({ values: copyValues }, true);\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n else {\n this.previousDates = true;\n }\n }\n else {\n this.setProperties({ value: this.getIdValue(e, null) }, true);\n }\n }\n var storeView = this.currentView();\n _super.prototype.clickHandler.call(this, e, this.value);\n if (this.isMultiSelection && this.currentDate !== this.value &&\n !isNullOrUndefined(this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0]) && storeView === 'Year') {\n this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0].classList.remove(FOCUSEDDATE);\n }\n };\n Calendar.prototype.switchView = function (view, e, isMultiSelection, isCustomDate) {\n _super.prototype.switchView.call(this, view, e, this.isMultiSelection, isCustomDate);\n };\n /**\n * To get component name\n *\n * @returns {string} Return the component name.\n * @private\n */\n Calendar.prototype.getModuleName = function () {\n _super.prototype.getModuleName.call(this);\n return 'calendar';\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string}\n */\n Calendar.prototype.getPersistData = function () {\n _super.prototype.getPersistData.call(this);\n var keyEntity = ['value', 'values'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Called internally if any of the property value changed.\n *\n * @param {CalendarModel} newProp - Returns the dynamic property value of the component.\n * @param {CalendarModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n Calendar.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.effect = '';\n this.rangeValidation(this.min, this.max);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n if (this.isDateSelected) {\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: new Date(this.checkValue(newProp.value)) }, true);\n }\n else {\n newProp.value = new Date(this.checkValue(newProp.value));\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: oldProp.value }, true);\n }\n this.update();\n }\n break;\n case 'values':\n if (this.isDateSelected) {\n if (typeof newProp.values === 'string' || typeof newProp.values === 'number') {\n this.setProperties({ values: null }, true);\n }\n else {\n var copyValues = this.copyValues(this.values);\n for (var index = 0; index < copyValues.length; index++) {\n var tempDate = copyValues[index];\n if (this.checkDateValue(tempDate) && !_super.prototype.checkPresentDate.call(this, tempDate, copyValues)) {\n copyValues.push(tempDate);\n }\n }\n this.setProperties({ values: copyValues }, true);\n if (this.values.length > 0) {\n this.setProperties({ value: newProp.values[newProp.values.length - 1] }, true);\n }\n }\n this.validateValues(this.isMultiSelection, this.values);\n this.update();\n }\n break;\n case 'isMultiSelection':\n if (this.isDateSelected) {\n this.setProperties({ isMultiSelection: newProp.isMultiSelection }, true);\n this.update();\n }\n break;\n case 'enabled':\n this.setEnable(this.enabled);\n break;\n case 'cssClass':\n if (this.getModuleName() === 'calendar') {\n this.setClass(newProp.cssClass, oldProp.cssClass);\n }\n break;\n default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp, this.isMultiSelection, this.values);\n }\n }\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n Calendar.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.getModuleName() === 'calendar') {\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n }\n }\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n *\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @param {boolean} isCustomDate - Specifies whether the calendar is rendered with custom today date or not.\n * @returns {void}\n\n */\n Calendar.prototype.navigateTo = function (view, date, isCustomDate) {\n this.minMaxUpdate();\n _super.prototype.navigateTo.call(this, view, date, isCustomDate);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the current view of the Calendar.\n *\n * @returns {string}\n\n */\n Calendar.prototype.currentView = function () {\n return _super.prototype.currentView.call(this);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * This method is used to add the single or multiple dates to the values property of the Calendar.\n *\n * @param {Date | Date[]} dates - Specifies the date or dates to be added to the values property of the Calendar.\n * @returns {void}\n\n */\n Calendar.prototype.addDate = function (dates) {\n if (typeof dates !== 'string' && typeof dates !== 'number') {\n var copyValues = this.copyValues(this.values);\n if (typeof dates === 'object' && (dates).length > 0) {\n var tempDates = dates;\n for (var i = 0; i < tempDates.length; i++) {\n if (this.checkDateValue(tempDates[i]) && !_super.prototype.checkPresentDate.call(this, tempDates[i], copyValues)) {\n if (!isNullOrUndefined(copyValues) && copyValues.length > 0) {\n copyValues.push(tempDates[i]);\n }\n else {\n copyValues = [new Date(+tempDates[i])];\n }\n }\n }\n }\n else {\n if (this.checkDateValue(dates) && !_super.prototype.checkPresentDate.call(this, dates, copyValues)) {\n if (!isNullOrUndefined(copyValues) && copyValues.length > 0) {\n copyValues.push((dates));\n }\n else {\n copyValues = [new Date(+dates)];\n }\n }\n }\n this.setProperties({ values: copyValues }, true);\n if (this.isMultiSelection) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.validateValues(this.isMultiSelection, copyValues);\n this.update();\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n }\n };\n /**\n * This method is used to remove the single or multiple dates from the values property of the Calendar.\n *\n * @param {Date | Date[]} dates - Specifies the date or dates which need to be removed from the values property of the Calendar.\n * @returns {void}\n\n */\n Calendar.prototype.removeDate = function (dates) {\n if (typeof dates !== 'string' && typeof dates !== 'number' && !isNullOrUndefined(this.values) && this.values.length > 0) {\n var copyValues = this.copyValues(this.values);\n if (typeof dates === 'object' && ((dates).length > 0)) {\n var tempDates = dates;\n for (var index = 0; index < tempDates.length; index++) {\n for (var i = 0; i < copyValues.length; i++) {\n if (+copyValues[i] === +tempDates[index]) {\n copyValues.splice(i, 1);\n }\n }\n }\n }\n else {\n for (var i = 0; i < copyValues.length; i++) {\n if (+copyValues[i] === +dates) {\n copyValues.splice(i, 1);\n }\n }\n }\n this.setProperties({ values: copyValues }, false);\n this.update();\n if (this.isMultiSelection) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n }\n };\n /**\n * To set custom today date in calendar\n *\n * @param {Date} date - Specifies date value to be set.\n * @private\n * @returns {void}\n */\n Calendar.prototype.setTodayDate = function (date) {\n var todayDate = new Date(+date);\n this.setProperties({ value: todayDate }, true);\n _super.prototype.todayButtonClick.call(this, null, todayDate, true);\n };\n Calendar.prototype.update = function () {\n this.validateDate();\n this.minMaxUpdate();\n _super.prototype.setValueUpdate.call(this);\n };\n Calendar.prototype.selectDate = function (e, date, element) {\n _super.prototype.selectDate.call(this, e, date, element, this.isMultiSelection, this.values);\n if (this.isMultiSelection && !isNullOrUndefined(this.values) && this.values.length > 0) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler(e);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Calendar.prototype.changeEvent = function (e) {\n if ((this.value && this.value.valueOf()) !== (this.previousDate && +this.previousDate.valueOf())\n || this.isMultiSelection) {\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', this.changedArgs);\n }\n this.previousDate = new Date(+this.value);\n }\n };\n Calendar.prototype.triggerChange = function (e) {\n if (!isNullOrUndefined(this.todayButtonEvent) && this.isTodayClicked) {\n e = this.todayButtonEvent;\n this.isTodayClicked = false;\n }\n this.changedArgs.event = e || null;\n this.changedArgs.isInteracted = !isNullOrUndefined(e);\n if (!isNullOrUndefined(this.value)) {\n this.setProperties({ value: this.value }, true);\n }\n // eslint-disable-next-line use-isnan\n if (!this.isMultiSelection && +this.value !== Number.NaN && (!isNullOrUndefined(this.value) &&\n !isNullOrUndefined(this.previousDate) || this.previousDate === null\n && !isNaN(+this.value))) {\n this.changeEvent(e);\n }\n else if (!isNullOrUndefined(this.values) && this.previousValues !== this.values.length) {\n this.changeEvent(e);\n this.previousValues = this.values.length;\n }\n };\n __decorate([\n Property(null)\n ], Calendar.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Calendar.prototype, \"values\", void 0);\n __decorate([\n Property(false)\n ], Calendar.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Event()\n ], Calendar.prototype, \"change\", void 0);\n Calendar = __decorate([\n NotifyPropertyChanges\n ], Calendar);\n return Calendar;\n}(CalendarBase));\nexport { Calendar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\nimport { Component, EventHandler, addClass, append, Property, Event, L10n, compile } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, extend, removeClass, prepend, isNullOrUndefined, detach, getValue } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, rippleEffect, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { select, selectAll } from '@syncfusion/ej2-base';\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"value\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"groupBy\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"htmlAttributes\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\nexport var dropDownBaseClasses = {\n root: 'e-dropdownbase',\n rtl: 'e-rtl',\n content: 'e-content',\n selected: 'e-active',\n hover: 'e-hover',\n noData: 'e-nodata',\n fixedHead: 'e-fixed-head',\n focus: 'e-item-focus',\n li: 'e-list-item',\n group: 'e-list-group-item',\n disabled: 'e-disabled',\n grouping: 'e-dd-group'\n};\nvar ITEMTEMPLATE_PROPERTY = 'ItemTemplate';\nvar DISPLAYTEMPLATE_PROPERTY = 'DisplayTemplate';\nvar SPINNERTEMPLATE_PROPERTY = 'SpinnerTemplate';\nvar VALUETEMPLATE_PROPERTY = 'ValueTemplate';\nvar GROUPTEMPLATE_PROPERTY = 'GroupTemplate';\nvar HEADERTEMPLATE_PROPERTY = 'HeaderTemplate';\nvar FOOTERTEMPLATE_PROPERTY = 'FooterTemplate';\nvar NORECORDSTEMPLATE_PROPERTY = 'NoRecordsTemplate';\nvar ACTIONFAILURETEMPLATE_PROPERTY = 'ActionFailureTemplate';\nvar HIDE_GROUPLIST = 'e-hide-group-header';\n/**\n * DropDownBase component will generate the list items based on given data and act as base class to drop-down related components\n */\nvar DropDownBase = /** @class */ (function (_super) {\n __extends(DropDownBase, _super);\n /**\n * * Constructor for DropDownBase class\n *\n * @param {DropDownBaseModel} options - Specifies the DropDownBase model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function DropDownBase(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.preventChange = false;\n _this.isAngular = false;\n _this.isPreventChange = false;\n _this.isDynamicDataChange = false;\n _this.addedNewItem = false;\n _this.isAddNewItemTemplate = false;\n _this.isRequesting = false;\n return _this;\n }\n DropDownBase.prototype.getPropObject = function (prop, newProp, oldProp) {\n var newProperty = new Object();\n var oldProperty = new Object();\n var propName = function (prop) {\n return prop;\n };\n newProperty[propName(prop)] = newProp[propName(prop)];\n oldProperty[propName(prop)] = oldProp[propName(prop)];\n var data = new Object();\n data.newProperty = newProperty;\n data.oldProperty = oldProperty;\n return data;\n };\n DropDownBase.prototype.getValueByText = function (text, ignoreCase, ignoreAccent) {\n var value = null;\n if (!isNullOrUndefined(this.listData)) {\n if (ignoreCase) {\n value = this.checkValueCase(text, true, ignoreAccent);\n }\n else {\n value = this.checkValueCase(text, false, ignoreAccent);\n }\n }\n return value;\n };\n DropDownBase.prototype.checkValueCase = function (text, ignoreCase, ignoreAccent, isTextByValue) {\n var _this = this;\n var value = null;\n if (isTextByValue) {\n value = text;\n }\n var dataSource = this.listData;\n var fields = this.fields;\n var type = this.typeOfData(dataSource).typeof;\n if (type === 'string' || type === 'number' || type === 'boolean') {\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var item = dataSource_1[_i];\n if (!isNullOrUndefined(item)) {\n if (ignoreAccent) {\n value = this.checkingAccent(String(item), text, ignoreCase);\n }\n else {\n if (ignoreCase) {\n if (this.checkIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n else {\n if (this.checkNonIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase, isTextByValue);\n }\n }\n }\n }\n }\n }\n else {\n if (ignoreCase) {\n dataSource.filter(function (item) {\n var itemValue = getValue(fields.value, item);\n if (!isNullOrUndefined(itemValue) && _this.checkIgnoreCase(getValue(fields.text, item).toString(), text)) {\n value = getValue(fields.value, item);\n }\n });\n }\n else {\n if (isTextByValue) {\n var compareValue_1 = null;\n compareValue_1 = value;\n dataSource.filter(function (item) {\n var itemValue = getValue(fields.value, item);\n if (!isNullOrUndefined(itemValue) && !isNullOrUndefined(value) && itemValue.toString() === compareValue_1.toString()) {\n value = getValue(fields.text, item);\n }\n });\n }\n else {\n dataSource.filter(function (item) {\n if (_this.checkNonIgnoreCase(getValue(fields.text, item), text)) {\n value = getValue(fields.value, item);\n }\n });\n }\n }\n }\n return value;\n };\n DropDownBase.prototype.checkingAccent = function (item, text, ignoreCase) {\n var dataItem = DataUtil.ignoreDiacritics(String(item));\n var textItem = DataUtil.ignoreDiacritics(text.toString());\n var value = null;\n if (ignoreCase) {\n if (this.checkIgnoreCase(dataItem, textItem)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n else {\n if (this.checkNonIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n return value;\n };\n DropDownBase.prototype.checkIgnoreCase = function (item, text) {\n return String(item).toLowerCase() === text.toString().toLowerCase() ? true : false;\n };\n DropDownBase.prototype.checkNonIgnoreCase = function (item, text) {\n return String(item) === text.toString() ? true : false;\n };\n DropDownBase.prototype.getItemValue = function (dataItem, typedText, ignoreCase, isTextByValue) {\n var value = null;\n var dataSource = this.listData;\n var type = this.typeOfData(dataSource).typeof;\n if (isTextByValue) {\n value = dataItem.toString();\n }\n else {\n if (ignoreCase) {\n value = type === 'string' ? String(dataItem) : this.getFormattedValue(String(dataItem));\n }\n else {\n value = type === 'string' ? typedText : this.getFormattedValue(typedText);\n }\n }\n return value;\n };\n DropDownBase.prototype.templateCompiler = function (baseTemplate) {\n var checkTemplate = false;\n if (typeof baseTemplate !== 'function' && baseTemplate) {\n try {\n checkTemplate = (selectAll(baseTemplate, document).length) ? true : false;\n }\n catch (exception) {\n checkTemplate = false;\n }\n }\n return checkTemplate;\n };\n DropDownBase.prototype.l10nUpdate = function (actionFailure) {\n var ele = this.getModuleName() === 'listbox' ? this.ulElement : this.list;\n if (this.noRecordsTemplate !== 'No records found' || this.actionFailureTemplate !== 'Request failed') {\n var template = actionFailure ? this.actionFailureTemplate : this.noRecordsTemplate;\n var compiledString = void 0;\n var templateId = actionFailure ? this.actionFailureTemplateId : this.noRecordsTemplateId;\n ele.innerHTML = '';\n var tempaltecheck = this.templateCompiler(template);\n if (typeof template !== 'function' && tempaltecheck) {\n compiledString = compile(select(template, document).innerHTML.trim());\n }\n else {\n compiledString = compile(template);\n }\n var templateName = actionFailure ? 'actionFailureTemplate' : 'noRecordsTemplate';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var noDataElement = void 0;\n if ((this.isReact) && typeof template === 'function') {\n noDataElement = compiledString({}, this, templateName, templateId, this.isStringTemplate, null);\n }\n else {\n noDataElement = compiledString({}, this, templateName, templateId, this.isStringTemplate, null, ele);\n }\n if (noDataElement && noDataElement.length > 0) {\n for (var i = 0; i < noDataElement.length; i++) {\n if (this.getModuleName() === 'listbox' && templateName === 'noRecordsTemplate') {\n if (noDataElement[i].nodeName === '#text') {\n var liElem = this.createElement('li');\n liElem.textContent = noDataElement[i].textContent;\n liElem.classList.add('e-list-nrt');\n liElem.setAttribute('role', 'option');\n ele.appendChild(liElem);\n }\n else {\n noDataElement[i].classList.add('e-list-nr-template');\n ele.appendChild(noDataElement[i]);\n }\n }\n else {\n ele.appendChild(noDataElement[i]);\n }\n }\n }\n this.renderReactTemplates();\n }\n else {\n var l10nLocale = { noRecordsTemplate: 'No records found', actionFailureTemplate: 'Request failed' };\n var componentLocale = new L10n(this.getLocaleName(), {}, this.locale);\n if (componentLocale.getConstant('actionFailureTemplate') !== '' || componentLocale.getConstant('noRecordsTemplate') !== '') {\n this.l10n = componentLocale;\n }\n else {\n this.l10n = new L10n(this.getModuleName() === 'listbox' ? 'listbox' :\n this.getModuleName() === 'mention' ? 'mention' : 'dropdowns', l10nLocale, this.locale);\n }\n var content = actionFailure ?\n this.l10n.getConstant('actionFailureTemplate') : this.l10n.getConstant('noRecordsTemplate');\n if (this.getModuleName() === 'listbox') {\n var liElem = this.createElement('li');\n liElem.textContent = content;\n ele.appendChild(liElem);\n liElem.classList.add('e-list-nrt');\n liElem.setAttribute('role', 'option');\n }\n else {\n if (!isNullOrUndefined(ele)) {\n ele.innerHTML = content;\n }\n }\n }\n };\n DropDownBase.prototype.getLocaleName = function () {\n return 'drop-down-base';\n };\n DropDownBase.prototype.getTextByValue = function (value) {\n var text = this.checkValueCase(value, false, false, true);\n return text;\n };\n DropDownBase.prototype.getFormattedValue = function (value) {\n if (this.listData && this.listData.length) {\n var item = void 0;\n if (this.properties.allowCustomValue && this.properties.value && this.properties.value instanceof Array && this.properties.value.length > 0) {\n item = this.typeOfData(this.properties.value);\n }\n else {\n item = this.typeOfData(this.listData);\n }\n if (typeof getValue((this.fields.value ? this.fields.value : 'value'), item.item) === 'number'\n || item.typeof === 'number') {\n return parseFloat(value);\n }\n if (typeof getValue((this.fields.value ? this.fields.value : 'value'), item.item) === 'boolean'\n || item.typeof === 'boolean') {\n return ((value === 'true') || ('' + value === 'true'));\n }\n }\n return value;\n };\n /**\n * Sets RTL to dropdownbase wrapper\n *\n * @returns {void}\n */\n DropDownBase.prototype.setEnableRtl = function () {\n if (!isNullOrUndefined(this.enableRtlElements)) {\n if (this.list) {\n this.enableRtlElements.push(this.list);\n }\n if (this.enableRtl) {\n addClass(this.enableRtlElements, dropDownBaseClasses.rtl);\n }\n else {\n removeClass(this.enableRtlElements, dropDownBaseClasses.rtl);\n }\n }\n };\n /**\n * Initialize the Component.\n *\n * @returns {void}\n */\n DropDownBase.prototype.initialize = function (e) {\n this.bindEvent = true;\n this.actionFailureTemplateId = \"\" + this.element.id + ACTIONFAILURETEMPLATE_PROPERTY;\n if (this.element.tagName === 'UL') {\n var jsonElement = ListBase.createJsonFromElement(this.element);\n this.setProperties({ fields: { text: 'text', value: 'text' } }, true);\n this.resetList(jsonElement, this.fields);\n }\n else if (this.element.tagName === 'SELECT') {\n var dataSource = this.dataSource instanceof Array ? (this.dataSource.length > 0 ? true : false)\n : !isNullOrUndefined(this.dataSource) ? true : false;\n if (!dataSource) {\n this.renderItemsBySelect();\n }\n else if (this.isDynamicDataChange) {\n this.setListData(this.dataSource, this.fields, this.query);\n }\n }\n else {\n this.setListData(this.dataSource, this.fields, this.query, e);\n }\n };\n /**\n * Get the properties to be maintained in persisted state.\n *\n * @returns {string} Returns the persisted data of the component.\n */\n DropDownBase.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Sets the enabled state to DropDownBase.\n *\n * @param {string} value - Specifies the attribute values to add on the input element.\n * @returns {void}\n */\n DropDownBase.prototype.updateDataAttribute = function (value) {\n var invalidAttr = ['class', 'style', 'id', 'type', 'aria-expanded', 'aria-autocomplete', 'aria-readonly'];\n var attr = {};\n for (var a = 0; a < this.element.attributes.length; a++) {\n if (invalidAttr.indexOf(this.element.attributes[a].name) === -1 &&\n !(this.getModuleName() === 'dropdownlist' && this.element.attributes[a].name === 'readonly')) {\n attr[this.element.attributes[a].name] = this.element.getAttribute(this.element.attributes[a].name);\n }\n }\n extend(attr, value, attr);\n this.setProperties({ htmlAttributes: attr }, true);\n };\n DropDownBase.prototype.renderItemsBySelect = function () {\n var element = this.element;\n var fields = { value: 'value', text: 'text' };\n var jsonElement = [];\n var group = element.querySelectorAll('select>optgroup');\n var option = element.querySelectorAll('select>option');\n this.getJSONfromOption(jsonElement, option, fields);\n if (group.length) {\n for (var i = 0; i < group.length; i++) {\n var item = group[i];\n var optionGroup = {};\n optionGroup[fields.text] = item.label;\n optionGroup.isHeader = true;\n var child = item.querySelectorAll('option');\n jsonElement.push(optionGroup);\n this.getJSONfromOption(jsonElement, child, fields);\n }\n element.querySelectorAll('select>option');\n }\n this.updateFields(fields.text, fields.value, this.fields.groupBy, this.fields.htmlAttributes, this.fields.iconCss);\n this.resetList(jsonElement, fields);\n };\n DropDownBase.prototype.updateFields = function (text, value, groupBy, htmlAttributes, iconCss) {\n var field = {\n 'fields': {\n text: text,\n value: value,\n groupBy: !isNullOrUndefined(groupBy) ? groupBy : this.fields && this.fields.groupBy,\n htmlAttributes: !isNullOrUndefined(htmlAttributes) ? htmlAttributes : this.fields && this.fields.htmlAttributes,\n iconCss: !isNullOrUndefined(iconCss) ? iconCss : this.fields && this.fields.iconCss\n }\n };\n this.setProperties(field, true);\n };\n DropDownBase.prototype.getJSONfromOption = function (items, options, fields) {\n for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n var option = options_1[_i];\n var json = {};\n json[fields.text] = option.innerText;\n json[fields.value] = !isNullOrUndefined(option.getAttribute(fields.value)) ?\n option.getAttribute(fields.value) : option.innerText;\n items.push(json);\n }\n };\n /**\n * Execute before render the list items\n *\n * @private\n * @returns {void}\n */\n DropDownBase.prototype.preRender = function () {\n // there is no event handler\n this.scrollTimer = -1;\n this.enableRtlElements = [];\n this.isRequested = false;\n this.isDataFetched = false;\n this.itemTemplateId = \"\" + this.element.id + ITEMTEMPLATE_PROPERTY;\n this.displayTemplateId = \"\" + this.element.id + DISPLAYTEMPLATE_PROPERTY;\n this.spinnerTemplateId = \"\" + this.element.id + SPINNERTEMPLATE_PROPERTY;\n this.valueTemplateId = \"\" + this.element.id + VALUETEMPLATE_PROPERTY;\n this.groupTemplateId = \"\" + this.element.id + GROUPTEMPLATE_PROPERTY;\n this.headerTemplateId = \"\" + this.element.id + HEADERTEMPLATE_PROPERTY;\n this.footerTemplateId = \"\" + this.element.id + FOOTERTEMPLATE_PROPERTY;\n this.noRecordsTemplateId = \"\" + this.element.id + NORECORDSTEMPLATE_PROPERTY;\n };\n /**\n * Creates the list items of DropDownBase component.\n *\n * @param {Object[] | string[] | number[] | DataManager | boolean[]} dataSource - Specifies the data to generate the list.\n * @param {FieldSettingsModel} fields - Maps the columns of the data table and binds the data to the component.\n * @param {Query} query - Accepts the external Query that execute along with data processing.\n * @returns {void}\n */\n DropDownBase.prototype.setListData = function (dataSource, fields, query, event) {\n var _this = this;\n fields = fields ? fields : this.fields;\n var ulElement;\n this.isActive = true;\n var eventArgs = { cancel: false, data: dataSource, query: query };\n this.isPreventChange = this.isAngular && this.preventChange ? true : this.isPreventChange;\n if (!this.isRequesting) {\n this.trigger('actionBegin', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.isRequesting = true;\n _this.showSpinner();\n if (dataSource instanceof DataManager) {\n _this.isRequested = true;\n if (_this.isDataFetched) {\n _this.emptyDataRequest(fields);\n return;\n }\n eventArgs.data.executeQuery(_this.getQuery(eventArgs.query)).then(function (e) {\n _this.isPreventChange = _this.isAngular && _this.preventChange ? true : _this.isPreventChange;\n _this.trigger('actionComplete', e, function (e) {\n if (!e.cancel) {\n _this.isRequesting = false;\n var listItems = e.result;\n if (listItems.length === 0) {\n _this.isDataFetched = true;\n }\n ulElement = _this.renderItems(listItems, fields);\n _this.onActionComplete(ulElement, listItems, e);\n if (_this.groupTemplate) {\n _this.renderGroupTemplate(ulElement);\n }\n _this.isRequested = false;\n _this.bindChildItems(listItems, ulElement, fields, e);\n }\n });\n }).catch(function (e) {\n _this.isRequested = false;\n _this.isRequesting = false;\n _this.onActionFailure(e);\n _this.hideSpinner();\n });\n }\n else {\n var dataManager = new DataManager(eventArgs.data);\n var listItems = (_this.getQuery(eventArgs.query)).executeLocal(dataManager);\n var localDataArgs = { cancel: false, result: listItems };\n _this.isPreventChange = _this.isAngular && _this.preventChange ? true : _this.isPreventChange;\n _this.trigger('actionComplete', localDataArgs, function (localDataArgs) {\n if (!localDataArgs.cancel) {\n _this.isRequesting = false;\n ulElement = _this.renderItems(localDataArgs.result, fields);\n _this.onActionComplete(ulElement, localDataArgs.result, event);\n if (_this.groupTemplate) {\n _this.renderGroupTemplate(ulElement);\n }\n _this.bindChildItems(localDataArgs.result, ulElement, fields);\n setTimeout(function () {\n if (_this.getModuleName() === 'multiselect' && _this.itemTemplate != null && (ulElement.childElementCount > 0 && (ulElement.children[0].childElementCount > 0 || (_this.fields.groupBy && ulElement.children[1] && ulElement.children[1].childElementCount > 0)))) {\n _this.updateDataList();\n }\n });\n }\n });\n }\n }\n });\n }\n };\n DropDownBase.prototype.bindChildItems = function (listItems, ulElement, fields, e) {\n var _this = this;\n if (listItems.length >= 100 && this.getModuleName() === 'autocomplete') {\n setTimeout(function () {\n var childNode = _this.remainingItems(_this.sortedData, fields);\n append(childNode, ulElement);\n _this.liCollections = _this.list.querySelectorAll('.' + dropDownBaseClasses.li);\n _this.updateListValues();\n _this.raiseDataBound(listItems, e);\n }, 0);\n }\n else {\n this.raiseDataBound(listItems, e);\n }\n };\n DropDownBase.prototype.updateListValues = function () {\n // Used this method in component side.\n };\n DropDownBase.prototype.findListElement = function (list, findNode, attribute, value) {\n var liElement = null;\n if (list) {\n var listArr = [].slice.call(list.querySelectorAll(findNode));\n for (var index = 0; index < listArr.length; index++) {\n if (listArr[index].getAttribute(attribute) === (value + '')) {\n liElement = listArr[index];\n break;\n }\n }\n }\n return liElement;\n };\n DropDownBase.prototype.raiseDataBound = function (listItems, e) {\n this.hideSpinner();\n var dataBoundEventArgs = {\n items: listItems,\n e: e\n };\n this.trigger('dataBound', dataBoundEventArgs);\n };\n DropDownBase.prototype.remainingItems = function (dataSource, fields) {\n var spliceData = new DataManager(dataSource).executeLocal(new Query().skip(100));\n if (this.itemTemplate) {\n var listElements = this.templateListItem(spliceData, fields);\n return [].slice.call(listElements.childNodes);\n }\n var type = this.typeOfData(spliceData).typeof;\n if (type === 'string' || type === 'number' || type === 'boolean') {\n return ListBase.createListItemFromArray(this.createElement, spliceData, true, this.listOption(spliceData, fields), this);\n }\n return ListBase.createListItemFromJson(this.createElement, spliceData, this.listOption(spliceData, fields), 1, true, this);\n };\n DropDownBase.prototype.emptyDataRequest = function (fields) {\n var listItems = [];\n this.onActionComplete(this.renderItems(listItems, fields), listItems);\n this.isRequested = false;\n this.hideSpinner();\n };\n DropDownBase.prototype.showSpinner = function () {\n // Used this method in component side.\n };\n DropDownBase.prototype.hideSpinner = function () {\n // Used this method in component side.\n };\n DropDownBase.prototype.onActionFailure = function (e) {\n this.liCollections = [];\n this.trigger('actionFailure', e);\n this.l10nUpdate(true);\n if (!isNullOrUndefined(this.list)) {\n addClass([this.list], dropDownBaseClasses.noData);\n }\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n DropDownBase.prototype.onActionComplete = function (ulElement, list, e) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n this.listData = list;\n if (this.getModuleName() !== 'listbox') {\n ulElement.setAttribute('tabindex', '0');\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n this.clearTemplate(['itemTemplate', 'groupTemplate', 'actionFailureTemplate', 'noRecordsTemplate']);\n }\n this.fixedHeaderElement = isNullOrUndefined(this.fixedHeaderElement) ? this.fixedHeaderElement : null;\n if (this.getModuleName() === 'multiselect' && this.properties.allowCustomValue && this.fields.groupBy) {\n for (var i = 0; i < ulElement.childElementCount; i++) {\n if (ulElement.children[i].classList.contains('e-list-group-item')) {\n if (isNullOrUndefined(ulElement.children[i].innerHTML) || ulElement.children[i].innerHTML == \"\") {\n addClass([ulElement.children[i]], HIDE_GROUPLIST);\n }\n }\n }\n }\n if (!isNullOrUndefined(this.list)) {\n this.list.innerHTML = '';\n this.list.appendChild(ulElement);\n this.liCollections = this.list.querySelectorAll('.' + dropDownBaseClasses.li);\n this.ulElement = this.list.querySelector('ul');\n this.postRender(this.list, list, this.bindEvent);\n }\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n DropDownBase.prototype.postRender = function (listElement, list, bindEvent) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n var focusItem = listElement.querySelector('.' + dropDownBaseClasses.li);\n var selectedItem = listElement.querySelector('.' + dropDownBaseClasses.selected);\n if (focusItem && !selectedItem) {\n focusItem.classList.add(dropDownBaseClasses.focus);\n }\n if (list.length <= 0) {\n this.l10nUpdate();\n addClass([listElement], dropDownBaseClasses.noData);\n }\n else {\n listElement.classList.remove(dropDownBaseClasses.noData);\n }\n };\n /**\n * Get the query to do the data operation before list item generation.\n *\n * @param {Query} query - Accepts the external Query that execute along with data processing.\n * @returns {Query} Returns the query to do the data query operation.\n */\n DropDownBase.prototype.getQuery = function (query) {\n return query ? query : this.query ? this.query : new Query();\n };\n /**\n * To render the template content for group header element.\n *\n * @param {HTMLElement} listEle - Specifies the group list elements.\n * @returns {void}\n */\n DropDownBase.prototype.renderGroupTemplate = function (listEle) {\n if (this.fields.groupBy !== null && this.dataSource || this.element.querySelector('.' + dropDownBaseClasses.group)) {\n var dataSource = this.dataSource;\n var option = { groupTemplateID: this.groupTemplateId, isStringTemplate: this.isStringTemplate };\n var headerItems = listEle.querySelectorAll('.' + dropDownBaseClasses.group);\n var groupcheck = this.templateCompiler(this.groupTemplate);\n if (typeof this.groupTemplate !== 'function' && groupcheck) {\n var groupValue = select(this.groupTemplate, document).innerHTML.trim();\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var tempHeaders = ListBase.renderGroupTemplate(groupValue, dataSource, this.fields.properties, headerItems, option, this);\n //EJ2-55168- Group checkbox is not working with group template\n if (this.isGroupChecking) {\n for (var i = 0; i < tempHeaders.length; i++) {\n this.notify('addItem', { module: 'CheckBoxSelection', item: tempHeaders[i] });\n }\n }\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var tempHeaders = ListBase.renderGroupTemplate(this.groupTemplate, dataSource, this.fields.properties, headerItems, option, this);\n //EJ2-55168- Group checkbox is not working with group template\n if (this.isGroupChecking) {\n for (var i = 0; i < tempHeaders.length; i++) {\n this.notify('addItem', { module: 'CheckBoxSelection', item: tempHeaders[i] });\n }\n }\n }\n this.renderReactTemplates();\n }\n };\n /**\n * To create the ul li list items\n *\n * @param {object []} dataSource - Specifies the data to generate the list.\n * @param {FieldSettingsModel} fields - Maps the columns of the data table and binds the data to the component.\n * @returns {HTMLElement} Return the ul li list items.\n */\n DropDownBase.prototype.createListItems = function (dataSource, fields) {\n if (dataSource && fields.groupBy || this.element.querySelector('optgroup')) {\n if (fields.groupBy) {\n if (this.sortOrder !== 'None') {\n dataSource = this.getSortedDataSource(dataSource);\n }\n dataSource = ListBase.groupDataSource(dataSource, fields.properties, this.sortOrder);\n }\n addClass([this.list], dropDownBaseClasses.grouping);\n }\n else {\n dataSource = this.getSortedDataSource(dataSource);\n }\n var options = this.listOption(dataSource, fields);\n var spliceData = (dataSource.length > 100) ?\n new DataManager(dataSource).executeLocal(new Query().take(100))\n : dataSource;\n this.sortedData = dataSource;\n return ListBase.createList(this.createElement, (this.getModuleName() === 'autocomplete') ? spliceData : dataSource, options, true, this);\n };\n DropDownBase.prototype.listOption = function (dataSource, fields) {\n var iconCss = isNullOrUndefined(fields.iconCss) ? false : true;\n var fieldValues = !isNullOrUndefined(fields.properties) ?\n fields.properties : fields;\n var options = (fields.text !== null || fields.value !== null) ? {\n fields: fieldValues,\n showIcon: iconCss, ariaAttributes: { groupItemRole: 'presentation' }\n } : { fields: { value: 'text' } };\n return extend({}, options, fields, true);\n };\n DropDownBase.prototype.setFloatingHeader = function (e) {\n if (!isNullOrUndefined(this.list) && !this.list.classList.contains(dropDownBaseClasses.noData)) {\n if (isNullOrUndefined(this.fixedHeaderElement)) {\n this.fixedHeaderElement = this.createElement('div', { className: dropDownBaseClasses.fixedHead });\n if (!isNullOrUndefined(this.list) && !this.list.querySelector('li').classList.contains(dropDownBaseClasses.group)) {\n this.fixedHeaderElement.style.display = 'none';\n }\n if (!isNullOrUndefined(this.fixedHeaderElement) && !isNullOrUndefined(this.list)) {\n prepend([this.fixedHeaderElement], this.list);\n }\n this.setFixedHeader();\n }\n if (!isNullOrUndefined(this.fixedHeaderElement) && this.fixedHeaderElement.style.zIndex === '0') {\n this.setFixedHeader();\n }\n this.scrollStop(e);\n }\n };\n DropDownBase.prototype.scrollStop = function (e) {\n var target = !isNullOrUndefined(e) ? e.target : this.list;\n var liHeight = parseInt(getComputedStyle(this.getValidLi(), null).getPropertyValue('height'), 10);\n var topIndex = Math.round(target.scrollTop / liHeight);\n var liCollections = this.list.querySelectorAll('li' + ':not(.e-hide-listitem)');\n for (var i = topIndex; i > -1; i--) {\n if (!isNullOrUndefined(liCollections[i]) && liCollections[i].classList.contains(dropDownBaseClasses.group)) {\n var currentLi = liCollections[i];\n this.fixedHeaderElement.innerHTML = currentLi.innerHTML;\n this.fixedHeaderElement.style.top = target.scrollTop + 'px';\n this.fixedHeaderElement.style.display = 'block';\n break;\n }\n else {\n this.fixedHeaderElement.style.display = 'none';\n this.fixedHeaderElement.style.top = 'none';\n }\n }\n };\n DropDownBase.prototype.getValidLi = function () {\n return this.liCollections[0];\n };\n /**\n * To render the list items\n *\n * @param {object[]} listData - Specifies the list of array of data.\n * @param {FieldSettingsModel} fields - Maps the columns of the data table and binds the data to the component.\n * @returns {HTMLElement} Return the list items.\n */\n DropDownBase.prototype.renderItems = function (listData, fields) {\n var ulElement;\n if (this.itemTemplate && listData) {\n var dataSource = listData;\n if (dataSource && fields.groupBy) {\n if (this.sortOrder !== 'None') {\n dataSource = this.getSortedDataSource(dataSource);\n }\n dataSource = ListBase.groupDataSource(dataSource, fields.properties, this.sortOrder);\n }\n else {\n dataSource = this.getSortedDataSource(dataSource);\n }\n this.sortedData = dataSource;\n var spliceData = (dataSource.length > 100) ?\n new DataManager(dataSource).executeLocal(new Query().take(100))\n : dataSource;\n ulElement = this.templateListItem((this.getModuleName() === 'autocomplete') ? spliceData : dataSource, fields);\n }\n else {\n ulElement = this.createListItems(listData, fields);\n }\n return ulElement;\n };\n DropDownBase.prototype.templateListItem = function (dataSource, fields) {\n var option = this.listOption(dataSource, fields);\n option.templateID = this.itemTemplateId;\n option.isStringTemplate = this.isStringTemplate;\n var itemcheck = this.templateCompiler(this.itemTemplate);\n if (typeof this.itemTemplate !== 'function' && itemcheck) {\n var itemValue = select(this.itemTemplate, document).innerHTML.trim();\n return ListBase.renderContentTemplate(this.createElement, itemValue, dataSource, fields.properties, option, this);\n }\n else {\n return ListBase.renderContentTemplate(this.createElement, this.itemTemplate, dataSource, fields.properties, option, this);\n }\n };\n DropDownBase.prototype.typeOfData = function (items) {\n var item = { typeof: null, item: null };\n for (var i = 0; (!isNullOrUndefined(items) && i < items.length); i++) {\n if (!isNullOrUndefined(items[i])) {\n var listDataType = typeof (items[i]) === 'string' ||\n typeof (items[i]) === 'number' || typeof (items[i]) === 'boolean';\n var isNullData = listDataType ? isNullOrUndefined(items[i]) :\n isNullOrUndefined(getValue((this.fields.value ? this.fields.value : 'value'), items[i]));\n if (!isNullData) {\n return item = { typeof: typeof items[i], item: items[i] };\n }\n }\n }\n return item;\n };\n DropDownBase.prototype.setFixedHeader = function () {\n if (!isNullOrUndefined(this.list)) {\n this.list.parentElement.style.display = 'block';\n }\n var borderWidth = 0;\n if (this.list && this.list.parentElement) {\n borderWidth = parseInt(document.defaultView.getComputedStyle(this.list.parentElement, null).getPropertyValue('border-width'), 10);\n /*Shorthand property not working in Firefox for getComputedStyle method.\n Refer bug report https://bugzilla.mozilla.org/show_bug.cgi?id=137688\n Refer alternate solution https://stackoverflow.com/a/41696234/9133493*/\n if (isNaN(borderWidth)) {\n var borderTopWidth = parseInt(document.defaultView.getComputedStyle(this.list.parentElement, null).getPropertyValue('border-top-width'), 10);\n var borderBottomWidth = parseInt(document.defaultView.getComputedStyle(this.list.parentElement, null).getPropertyValue('border-bottom-width'), 10);\n var borderLeftWidth = parseInt(document.defaultView.getComputedStyle(this.list.parentElement, null).getPropertyValue('border-left-width'), 10);\n var borderRightWidth = parseInt(document.defaultView.getComputedStyle(this.list.parentElement, null).getPropertyValue('border-right-width'), 10);\n borderWidth = (borderTopWidth + borderBottomWidth + borderLeftWidth + borderRightWidth);\n }\n }\n if (!isNullOrUndefined(this.liCollections)) {\n var liWidth = this.getValidLi().offsetWidth - borderWidth;\n this.fixedHeaderElement.style.width = liWidth.toString() + 'px';\n }\n setStyleAttribute(this.fixedHeaderElement, { zIndex: 10 });\n var firstLi = this.ulElement.querySelector('.' + dropDownBaseClasses.group + ':not(.e-hide-listitem)');\n this.fixedHeaderElement.innerHTML = firstLi.innerHTML;\n };\n DropDownBase.prototype.getSortedDataSource = function (dataSource) {\n if (dataSource && this.sortOrder !== 'None') {\n var textField = this.fields.text ? this.fields.text : 'text';\n if (this.typeOfData(dataSource).typeof === 'string' || this.typeOfData(dataSource).typeof === 'number'\n || this.typeOfData(dataSource).typeof === 'boolean') {\n textField = '';\n }\n dataSource = ListBase.getDataSource(dataSource, ListBase.addSorting(this.sortOrder, textField));\n }\n return dataSource;\n };\n /**\n * Return the index of item which matched with given value in data source\n *\n * @param {string | number | boolean} value - Specifies given value.\n * @returns {number} Returns the index of the item.\n */\n DropDownBase.prototype.getIndexByValue = function (value) {\n var index;\n var listItems = this.getItems();\n for (var i = 0; i < listItems.length; i++) {\n if (!isNullOrUndefined(value) && listItems[i].getAttribute('data-value') === value.toString()) {\n index = i;\n break;\n }\n }\n return index;\n };\n /**\n * To dispatch the event manually\n *\n * @param {HTMLElement} element - Specifies the element to dispatch the event.\n * @param {string} type - Specifies the name of the event.\n * @returns {void}\n */\n DropDownBase.prototype.dispatchEvent = function (element, type) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent(type, false, true);\n if (element) {\n element.dispatchEvent(evt);\n }\n };\n /**\n * To set the current fields\n *\n * @returns {void}\n */\n DropDownBase.prototype.setFields = function () {\n if (this.fields.value && !this.fields.text) {\n this.updateFields(this.fields.value, this.fields.value);\n }\n else if (!this.fields.value && this.fields.text) {\n this.updateFields(this.fields.text, this.fields.text);\n }\n else if (!this.fields.value && !this.fields.text) {\n this.updateFields('text', 'text');\n }\n };\n /**\n * reset the items list.\n *\n * @param {Object[] | string[] | number[] | DataManager | boolean[]} dataSource - Specifies the data to generate the list.\n * @param {FieldSettingsModel} fields - Maps the columns of the data table and binds the data to the component.\n * @param {Query} query - Accepts the external Query that execute along with data processing.\n * @returns {void}\n */\n DropDownBase.prototype.resetList = function (dataSource, fields, query, e) {\n if (this.list) {\n if ((this.element.tagName === 'SELECT' && this.element.options.length > 0)\n || (this.element.tagName === 'UL' && this.element.childNodes.length > 0)) {\n var data = dataSource instanceof Array ? (dataSource.length > 0)\n : !isNullOrUndefined(dataSource);\n if (!data && this.selectData && this.selectData.length > 0) {\n dataSource = this.selectData;\n }\n }\n dataSource = this.getModuleName() === 'combobox' && this.selectData && dataSource instanceof Array && dataSource.length < this.selectData.length && this.addedNewItem ? this.selectData : dataSource;\n this.addedNewItem = false;\n this.setListData(dataSource, fields, query, e);\n }\n };\n DropDownBase.prototype.updateSelectElementData = function (isFiltering) {\n if (isFiltering && isNullOrUndefined(this.selectData) && this.listData && this.listData.length > 0) {\n this.selectData = this.listData;\n }\n };\n DropDownBase.prototype.updateSelection = function () {\n // This is for after added the item, need to update the selected index values.\n };\n DropDownBase.prototype.renderList = function () {\n // This is for render the list items.\n this.render();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DropDownBase.prototype.updateDataSource = function (props) {\n this.resetList(this.dataSource);\n };\n DropDownBase.prototype.setUpdateInitial = function (props, newProp) {\n this.isDataFetched = false;\n var updateData = {};\n for (var j = 0; props.length > j; j++) {\n if (newProp[props[j]] && props[j] === 'fields') {\n this.setFields();\n updateData[props[j]] = newProp[props[j]];\n }\n else if (newProp[props[j]]) {\n updateData[props[j]] = newProp[props[j]];\n }\n }\n if (Object.keys(updateData).length > 0) {\n if (Object.keys(updateData).indexOf('dataSource') === -1) {\n updateData.dataSource = this.dataSource;\n }\n this.updateDataSource(updateData);\n }\n };\n /**\n * When property value changes happened, then onPropertyChanged method will execute the respective changes in this component.\n *\n * @param {DropDownBaseModel} newProp - Returns the dynamic property value of the component.\n * @param {DropDownBaseModel} oldProp - Returns the previous property value of the component.\n * @private\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DropDownBase.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.getModuleName() === 'dropdownbase') {\n this.setUpdateInitial(['fields', 'query', 'dataSource'], newProp);\n }\n this.setUpdateInitial(['sortOrder', 'itemTemplate'], newProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'query':\n case 'sortOrder':\n case 'dataSource':\n case 'itemTemplate':\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'groupTemplate':\n this.renderGroupTemplate(this.list);\n if (this.ulElement && this.fixedHeaderElement) {\n var firstLi = this.ulElement.querySelector('.' + dropDownBaseClasses.group);\n this.fixedHeaderElement.innerHTML = firstLi.innerHTML;\n }\n break;\n case 'locale':\n if (this.list && (!isNullOrUndefined(this.liCollections) && this.liCollections.length === 0)) {\n this.l10nUpdate();\n }\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n this.setZIndex();\n break;\n }\n }\n };\n /**\n * Build and render the component\n *\n * @param {boolean} isEmptyData - Specifies the component to initialize with list data or not.\n * @private\n * @returns {void}\n */\n DropDownBase.prototype.render = function (e, isEmptyData) {\n if (this.getModuleName() === 'listbox') {\n this.list = this.createElement('div', { className: dropDownBaseClasses.content, attrs: { 'tabindex': '0' } });\n }\n else {\n this.list = this.createElement('div', { className: dropDownBaseClasses.content });\n }\n this.list.classList.add(dropDownBaseClasses.root);\n this.setFields();\n var rippleModel = { duration: 300, selector: '.' + dropDownBaseClasses.li };\n this.rippleFun = rippleEffect(this.list, rippleModel);\n var group = this.element.querySelector('select>optgroup');\n if ((this.fields.groupBy || !isNullOrUndefined(group)) && !this.isGroupChecking) {\n EventHandler.add(this.list, 'scroll', this.setFloatingHeader, this);\n }\n if (this.getModuleName() === 'dropdownbase') {\n if (this.element.getAttribute('tabindex')) {\n this.list.setAttribute('tabindex', this.element.getAttribute('tabindex'));\n }\n removeClass([this.element], dropDownBaseClasses.root);\n this.element.style.display = 'none';\n var wrapperElement = this.createElement('div');\n this.element.parentElement.insertBefore(wrapperElement, this.element);\n wrapperElement.appendChild(this.element);\n wrapperElement.appendChild(this.list);\n }\n this.setEnableRtl();\n if (!isEmptyData) {\n this.initialize(e);\n }\n };\n /**\n * Return the module name of this component.\n *\n * @private\n * @returns {string} Return the module name of this component.\n */\n DropDownBase.prototype.getModuleName = function () {\n return 'dropdownbase';\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets all the list items bound on this component.\n *\n * @returns {Element[]}\n */\n DropDownBase.prototype.getItems = function () {\n return this.ulElement.querySelectorAll('.' + dropDownBaseClasses.li);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Adds a new item to the popup list. By default, new item appends to the list as the last item,\n * but you can insert based on the index parameter.\n *\n * @param { Object[] } items - Specifies an array of JSON data or a JSON data.\n * @param { number } itemIndex - Specifies the index to place the newly added item in the popup list.\n * @returns {void}\n\n */\n DropDownBase.prototype.addItem = function (items, itemIndex) {\n if (!this.list || (this.list.textContent === this.noRecordsTemplate && this.getModuleName() !== 'listbox')) {\n this.renderList();\n }\n if (this.sortOrder !== 'None' && isNullOrUndefined(itemIndex)) {\n var newList = [].slice.call(this.listData);\n newList.push(items);\n newList = this.getSortedDataSource(newList);\n if (this.fields.groupBy) {\n newList = ListBase.groupDataSource(newList, this.fields.properties, this.sortOrder);\n itemIndex = newList.indexOf(items);\n }\n else {\n itemIndex = newList.indexOf(items);\n }\n }\n var itemsCount = this.getItems().length;\n var selectedItemValue = this.list.querySelector('.' + dropDownBaseClasses.selected);\n items = (items instanceof Array ? items : [items]);\n var index;\n index = (isNullOrUndefined(itemIndex) || itemIndex < 0 || itemIndex > itemsCount - 1) ? itemsCount : itemIndex;\n var fields = this.fields;\n if (items && fields.groupBy) {\n items = ListBase.groupDataSource(items, fields.properties);\n }\n var liCollections = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var isHeader = item.isHeader;\n var li = this.createElement('li', { className: isHeader ? dropDownBaseClasses.group : dropDownBaseClasses.li, id: 'option-add-' + i });\n var itemText = item instanceof Object ? getValue(fields.text, item) : item;\n if (isHeader) {\n li.innerText = itemText;\n }\n if (this.itemTemplate && !isHeader) {\n var itemCheck = this.templateCompiler(this.itemTemplate);\n var compiledString = typeof this.itemTemplate !== 'function' &&\n itemCheck ? compile(select(this.itemTemplate, document).innerHTML.trim()) : compile(this.itemTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var addItemTemplate = compiledString(item, this, 'itemTemplate', this.itemTemplateId, this.isStringTemplate, null, li);\n if (addItemTemplate) {\n append(addItemTemplate, li);\n }\n }\n else if (!isHeader) {\n li.appendChild(document.createTextNode(itemText));\n }\n li.setAttribute('data-value', item instanceof Object ? getValue(fields.value, item) : item);\n li.setAttribute('role', 'option');\n this.notify('addItem', { module: 'CheckBoxSelection', item: li });\n liCollections.push(li);\n this.listData.push(item);\n if (this.sortOrder === 'None' && isNullOrUndefined(itemIndex) && index === 0) {\n index = null;\n }\n this.updateActionCompleteData(li, item, index);\n //Listbox event\n this.trigger('beforeItemRender', { element: li, item: item });\n }\n if (itemsCount === 0 && isNullOrUndefined(this.list.querySelector('ul'))) {\n if (!isNullOrUndefined(this.list)) {\n this.list.innerHTML = '';\n this.list.classList.remove(dropDownBaseClasses.noData);\n this.isAddNewItemTemplate = true;\n if (!isNullOrUndefined(this.ulElement)) {\n this.list.appendChild(this.ulElement);\n }\n }\n this.liCollections = liCollections;\n if (!isNullOrUndefined(liCollections) && !isNullOrUndefined(this.ulElement)) {\n append(liCollections, this.ulElement);\n }\n this.updateAddItemList(this.list, itemsCount);\n }\n else {\n if (this.getModuleName() === 'listbox' && itemsCount === 0) {\n this.ulElement.innerHTML = '';\n }\n var attr = [];\n for (var i = 0; i < items.length; i++) {\n var listGroupItem = this.ulElement.querySelectorAll('.e-list-group-item');\n for (var j = 0; j < listGroupItem.length; j++) {\n attr[j] = listGroupItem[j].innerText;\n }\n if (attr.indexOf(liCollections[i].innerText) > -1 && fields.groupBy) {\n for (var j = 0; j < listGroupItem.length; j++) {\n if (attr[j] === liCollections[i].innerText) {\n if (this.sortOrder === 'None') {\n this.ulElement.insertBefore(liCollections[i + 1], listGroupItem[j + 1]);\n }\n else {\n this.ulElement.insertBefore(liCollections[i + 1], this.ulElement.childNodes[itemIndex]);\n }\n i = i + 1;\n break;\n }\n }\n }\n else {\n if (this.liCollections[index]) {\n this.liCollections[index].parentNode.insertBefore(liCollections[i], this.liCollections[index]);\n }\n else {\n this.ulElement.appendChild(liCollections[i]);\n }\n }\n var tempLi = [].slice.call(this.liCollections);\n tempLi.splice(index, 0, liCollections[i]);\n this.liCollections = tempLi;\n index += 1;\n if (this.getModuleName() === 'multiselect') {\n this.updateDataList();\n }\n }\n }\n if (this.getModuleName() === 'listbox' && this.isReact) {\n this.renderReactTemplates();\n }\n if (selectedItemValue || itemIndex === 0) {\n this.updateSelection();\n }\n this.addedNewItem = true;\n };\n DropDownBase.prototype.validationAttribute = function (target, hidden) {\n var name = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n hidden.setAttribute('name', name);\n target.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (!target.getAttribute(attributes[i])) {\n continue;\n }\n var attr = target.getAttribute(attributes[i]);\n hidden.setAttribute(attributes[i], attr);\n target.removeAttribute(attributes[i]);\n }\n };\n DropDownBase.prototype.setZIndex = function () {\n // this is for component wise\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DropDownBase.prototype.updateActionCompleteData = function (li, item, index) {\n // this is for ComboBox custom value\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DropDownBase.prototype.updateAddItemList = function (list, itemCount) {\n // this is for multiselect add item\n };\n DropDownBase.prototype.updateDataList = function () {\n // this is for multiselect update list items\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the data Object that matches the given value.\n *\n * @param { string | number } value - Specifies the value of the list item.\n * @returns {Object}\n */\n DropDownBase.prototype.getDataByValue = function (value) {\n if (!isNullOrUndefined(this.listData)) {\n var type = this.typeOfData(this.listData).typeof;\n if (type === 'string' || type === 'number' || type === 'boolean') {\n for (var _i = 0, _a = this.listData; _i < _a.length; _i++) {\n var item = _a[_i];\n if (!isNullOrUndefined(item) && item === value) {\n return item;\n }\n }\n }\n else {\n for (var _b = 0, _c = this.listData; _b < _c.length; _b++) {\n var item = _c[_b];\n if (!isNullOrUndefined(item) && getValue((this.fields.value ? this.fields.value : 'value'), item) === value) {\n return item;\n }\n }\n }\n }\n return null;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Removes the component from the DOM and detaches all its related event handlers. It also removes the attributes and classes.\n *\n * @method destroy\n * @returns {void}\n */\n DropDownBase.prototype.destroy = function () {\n if (document.body.contains(this.list)) {\n EventHandler.remove(this.list, 'scroll', this.setFloatingHeader);\n if (!isNullOrUndefined(this.rippleFun)) {\n this.rippleFun();\n }\n detach(this.list);\n }\n this.liCollections = null;\n this.ulElement = null;\n this.list = null;\n this.enableRtlElements = null;\n this.rippleFun = null;\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Complex({ text: null, value: null, iconCss: null, groupBy: null }, FieldSettings)\n ], DropDownBase.prototype, \"fields\", void 0);\n __decorate([\n Property(null)\n ], DropDownBase.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property(null)\n ], DropDownBase.prototype, \"groupTemplate\", void 0);\n __decorate([\n Property('No records found')\n ], DropDownBase.prototype, \"noRecordsTemplate\", void 0);\n __decorate([\n Property('Request failed')\n ], DropDownBase.prototype, \"actionFailureTemplate\", void 0);\n __decorate([\n Property('None')\n ], DropDownBase.prototype, \"sortOrder\", void 0);\n __decorate([\n Property([])\n ], DropDownBase.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], DropDownBase.prototype, \"query\", void 0);\n __decorate([\n Property('StartsWith')\n ], DropDownBase.prototype, \"filterType\", void 0);\n __decorate([\n Property(true)\n ], DropDownBase.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(1000)\n ], DropDownBase.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DropDownBase.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property()\n ], DropDownBase.prototype, \"locale\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"destroyed\", void 0);\n DropDownBase = __decorate([\n NotifyPropertyChanges\n ], DropDownBase);\n return DropDownBase;\n}(Component));\nexport { DropDownBase };\n","/**\n * IncrementalSearch module file\n */\nvar queryString = '';\nvar prevString = '';\nvar matches = [];\nvar activeClass = 'e-active';\nvar prevElementId = '';\n/**\n * Search and focus the list item based on key code matches with list text content\n *\n * @param { number } keyCode - Specifies the key code which pressed on keyboard events.\n * @param { HTMLElement[]} items - Specifies an array of HTMLElement, from which matches find has done.\n * @param { number } selectedIndex - Specifies the selected item in list item, so that search will happen\n * after selected item otherwise it will do from initial.\n * @param { boolean } ignoreCase - Specifies the case consideration when search has done.\n * @param {string} elementId - Specifies the list element ID.\n * @returns {Element} Returns list item based on key code matches with list text content.\n */\nexport function incrementalSearch(keyCode, items, selectedIndex, ignoreCase, elementId) {\n queryString += String.fromCharCode(keyCode);\n setTimeout(function () {\n queryString = '';\n }, 1000);\n var index;\n queryString = ignoreCase ? queryString.toLowerCase() : queryString;\n if (prevElementId === elementId && prevString === queryString) {\n for (var i = 0; i < matches.length; i++) {\n if (matches[i].classList.contains(activeClass)) {\n index = i;\n break;\n }\n }\n index = index + 1;\n return matches[index] ? matches[index] : matches[0];\n }\n else {\n var listItems = items;\n var strLength = queryString.length;\n var text = void 0;\n var item = void 0;\n selectedIndex = selectedIndex ? selectedIndex + 1 : 0;\n var i = selectedIndex;\n matches = [];\n do {\n if (i === listItems.length) {\n i = -1;\n }\n if (i === -1) {\n index = 0;\n }\n else {\n index = i;\n }\n item = listItems[index];\n text = ignoreCase ? item.innerText.toLowerCase() : item.innerText;\n if (text.substr(0, strLength) === queryString) {\n matches.push(listItems[index]);\n }\n i++;\n } while (i !== selectedIndex);\n prevString = queryString;\n prevElementId = elementId;\n return matches[0];\n }\n}\n/**\n * Search the list item based on given input value matches with search type.\n *\n * @param {string} inputVal - Specifies the given input value.\n * @param {HTMLElement[]} items - Specifies the list items.\n * @param {SearchType} searchType - Specifies the filter type.\n * @param {boolean} ignoreCase - Specifies the case sensitive option for search operation.\n * @returns {Element | number} Returns the search matched items.\n */\nexport function Search(inputVal, items, searchType, ignoreCase, dataSource, fields, type) {\n var listItems = items;\n ignoreCase = ignoreCase !== undefined && ignoreCase !== null ? ignoreCase : true;\n var itemData = { item: null, index: null };\n if (inputVal && inputVal.length) {\n var strLength = inputVal.length;\n var queryStr = ignoreCase ? inputVal.toLocaleLowerCase() : inputVal;\n queryStr = escapeCharRegExp(queryStr);\n var _loop_1 = function (i, itemsData) {\n var item = itemsData[i];\n var text = void 0;\n var filterValue;\n if (items && dataSource) {\n var checkField_1 = item;\n var fieldValue_1 = fields.text.split('.');\n dataSource.filter(function (data) {\n Array.prototype.slice.call(fieldValue_1).forEach(function (value) {\n /* eslint-disable security/detect-object-injection */\n if (type === 'object' && (!data.isHeader && checkField_1.textContent.toString().indexOf(data[value]) !== -1) && checkField_1.getAttribute('data-value') === data[fields.value].toString() || type === 'string' && checkField_1.textContent.toString().indexOf(data) !== -1) {\n filterValue = type === 'object' ? data[value] : data;\n }\n });\n });\n }\n text = dataSource && filterValue ? (ignoreCase ? filterValue.toLocaleLowerCase() : filterValue).replace(/^\\s+|\\s+$/g, '') : (ignoreCase ? item.textContent.toLocaleLowerCase() : item.textContent).replace(/^\\s+|\\s+$/g, '');\n /* eslint-disable security/detect-non-literal-regexp */\n if ((searchType === 'Equal' && text === queryStr) || (searchType === 'StartsWith' && text.substr(0, strLength) === queryStr) || (searchType === 'EndsWith' && text.substr(text.length - queryStr.length) === queryStr) || (searchType === 'Contains' && new RegExp(queryStr, \"g\").test(text))) {\n itemData.item = item;\n itemData.index = i;\n return { value: { item: item, index: i } };\n }\n };\n for (var i = 0, itemsData = listItems; i < itemsData.length; i++) {\n var state_1 = _loop_1(i, itemsData);\n if (typeof state_1 === \"object\")\n return state_1.value;\n }\n return itemData;\n /* eslint-enable security/detect-non-literal-regexp */\n }\n return itemData;\n}\n/* eslint-enable security/detect-object-injection */\nexport function escapeCharRegExp(value) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\nexport function resetIncrementalSearchValues(elementId) {\n if (prevElementId === elementId) {\n prevElementId = '';\n prevString = '';\n queryString = '';\n matches = [];\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\nimport { Component, rippleEffect, NotifyPropertyChanges, Property, closest } from '@syncfusion/ej2-base';\nimport { addClass, getInstance, getUniqueID, isRippleEnabled, removeClass, attributes, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { detach, Event, EventHandler, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { wrapperInitialize, rippleMouseHandler } from './../common/common';\nvar LABEL = 'e-label';\nvar RIPPLE = 'e-ripple-container';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-radio-wrapper';\nvar ATTRIBUTES = ['title', 'class', 'style', 'disabled', 'readonly', 'name', 'value'];\n/**\n * The RadioButton is a graphical user interface element that allows you to select one option from the choices.\n * It contains checked and unchecked states.\n * ```html\n * \n * \n * ```\n */\nvar RadioButton = /** @class */ (function (_super) {\n __extends(RadioButton, _super);\n /**\n * Constructor for creating the widget\n *\n * @private\n * @param {RadioButtonModel} options - Specifies Radio button model\n * @param {string | HTMLInputElement} element - Specifies target element\n */\n function RadioButton(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isFocused = false;\n return _this;\n }\n RadioButton_1 = RadioButton;\n RadioButton.prototype.changeHandler = function (event) {\n this.checked = true;\n this.dataBind();\n var value = this.element.getAttribute('value');\n value = this.isVue && value ? this.element.value : this.value;\n var type = typeof this.value;\n if (this.isVue && type === 'boolean') {\n value = value === 'true' ? true : false;\n }\n this.trigger('change', { value: value, event: event });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular) {\n event.stopPropagation();\n }\n };\n RadioButton.prototype.updateChange = function () {\n var input;\n var instance;\n var radioGrp = this.getRadioGroup();\n for (var i = 0; i < radioGrp.length; i++) {\n input = radioGrp[i];\n if (input !== this.element) {\n instance = getInstance(input, RadioButton_1);\n instance.checked = false;\n if (this.tagName === 'EJS-RADIOBUTTON') {\n instance.angularValue = this.value;\n }\n }\n }\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n RadioButton.prototype.destroy = function () {\n var _this = this;\n var radioWrap = this.wrapper;\n _super.prototype.destroy.call(this);\n if (radioWrap) {\n if (!this.disabled) {\n this.unWireEvents();\n }\n if (this.tagName === 'INPUT') {\n if (radioWrap.parentNode) {\n radioWrap.parentNode.insertBefore(this.element, radioWrap);\n }\n detach(radioWrap);\n this.element.checked = false;\n ['name', 'value', 'disabled'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n }\n else {\n ['role', 'aria-checked', 'class'].forEach(function (key) {\n radioWrap.removeAttribute(key);\n });\n radioWrap.innerHTML = '';\n }\n }\n };\n RadioButton.prototype.focusHandler = function () {\n this.isFocused = true;\n };\n RadioButton.prototype.focusOutHandler = function () {\n var label = this.getLabel();\n if (label) {\n label.classList.remove('e-focus');\n }\n };\n RadioButton.prototype.getModuleName = function () {\n return 'radio';\n };\n /**\n * To get the value of selected radio button in a group.\n *\n * @method getSelectedValue\n * @returns {string} - Selected Value\n */\n RadioButton.prototype.getSelectedValue = function () {\n var input;\n var radioGrp = this.getRadioGroup();\n for (var i = 0, len = radioGrp.length; i < len; i++) {\n input = radioGrp[i];\n if (input.checked) {\n return input.value;\n }\n }\n return '';\n };\n RadioButton.prototype.getRadioGroup = function () {\n return document.querySelectorAll('input.e-radio[name=\"' + this.element.getAttribute('name') + '\"]');\n };\n /**\n * Gets the properties to be maintained in the persistence state.\n *\n * @private\n * @returns {string} - Persist Data\n */\n RadioButton.prototype.getPersistData = function () {\n return this.addOnPersist(['checked']);\n };\n RadioButton.prototype.getWrapper = function () {\n if (this.element) {\n return this.element.parentElement;\n }\n else {\n return null;\n }\n };\n RadioButton.prototype.getLabel = function () {\n if (this.element) {\n return this.element.nextElementSibling;\n }\n else {\n return null;\n }\n };\n RadioButton.prototype.initialize = function () {\n if (isNullOrUndefined(this.initialCheckedValue)) {\n this.initialCheckedValue = this.checked;\n }\n this.initWrapper();\n this.updateHtmlAttribute();\n if (this.name) {\n this.element.setAttribute('name', this.name);\n }\n var value = this.element.getAttribute('value');\n var type = typeof this.value;\n if (this.isVue && type === 'boolean') {\n value = value === 'true' ? true : false;\n }\n if (this.isVue ? this.value && type !== 'boolean' && !value : this.value) {\n this.element.setAttribute('value', this.value);\n }\n if (this.checked) {\n this.element.checked = true;\n }\n if (this.disabled) {\n this.setDisabled();\n }\n };\n RadioButton.prototype.initWrapper = function () {\n var rippleSpan;\n var wrapper = this.element.parentElement;\n if (!wrapper.classList.contains(WRAPPER)) {\n wrapper = this.createElement('div', { className: WRAPPER });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var label = this.createElement('label', { attrs: { for: this.element.id } });\n wrapper.appendChild(this.element);\n wrapper.appendChild(label);\n if (isRippleEnabled) {\n rippleSpan = this.createElement('span', { className: (RIPPLE) });\n label.appendChild(rippleSpan);\n rippleEffect(rippleSpan, {\n duration: 400,\n isCenterRipple: true\n });\n }\n wrapper.classList.add('e-wrapper');\n if (this.enableRtl) {\n label.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.label) {\n this.setText(this.label);\n }\n };\n RadioButton.prototype.keyUpHandler = function () {\n if (this.isFocused) {\n this.getLabel().classList.add('e-focus');\n }\n };\n RadioButton.prototype.labelMouseDownHandler = function (e) {\n var rippleSpan = this.getLabel().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, rippleSpan);\n };\n RadioButton.prototype.labelMouseLeaveHandler = function (e) {\n var rippleSpan = this.getLabel().getElementsByClassName(RIPPLE)[0];\n if (rippleSpan) {\n var rippleElem = rippleSpan.querySelectorAll('.e-ripple-element');\n for (var i = rippleElem.length - 1; i > 0; i--) {\n rippleSpan.removeChild(rippleSpan.childNodes[i]);\n }\n rippleMouseHandler(e, rippleSpan);\n }\n };\n RadioButton.prototype.labelMouseUpHandler = function (e) {\n var rippleSpan = this.getLabel().getElementsByClassName(RIPPLE)[0];\n if (rippleSpan) {\n var rippleElem = rippleSpan.querySelectorAll('.e-ripple-element');\n for (var i = rippleElem.length - 1; i > 0; i--) {\n rippleSpan.removeChild(rippleSpan.childNodes[i]);\n }\n rippleMouseHandler(e, rippleSpan);\n }\n };\n RadioButton.prototype.formResetHandler = function () {\n this.checked = this.initialCheckedValue;\n if (this.initialCheckedValue) {\n attributes(this.element, { 'checked': 'true' });\n }\n };\n /**\n * Called internally if any of the property value changes.\n *\n * @private\n * @param {RadioButtonModel} newProp - Specifies New Properties\n * @param {RadioButtonModel} oldProp - Specifies Old Properties\n * @returns {void}\n */\n RadioButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var wrap = this.getWrapper();\n var label = this.getLabel();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n if (newProp.checked) {\n this.updateChange();\n }\n this.element.checked = newProp.checked;\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([wrap], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([wrap], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n label.classList.add(RTL);\n }\n else {\n label.classList.remove(RTL);\n }\n break;\n case 'label':\n this.setText(newProp.label);\n break;\n case 'labelPosition':\n if (newProp.labelPosition === 'Before') {\n label.classList.add('e-right');\n }\n else {\n label.classList.remove('e-right');\n }\n break;\n case 'name':\n this.element.setAttribute('name', newProp.name);\n break;\n case 'value':\n var type = typeof this.htmlAttributes.value;\n if (!isNullOrUndefined(this.htmlAttributes) && (this.htmlAttributes.value || type === 'boolean' && !this.htmlAttributes.value)) {\n break;\n }\n this.element.setAttribute('value', newProp.value);\n break;\n case 'htmlAttributes':\n this.updateHtmlAttribute();\n break;\n }\n }\n };\n /**\n * Initialize checked Property, Angular and React and Unique ID support.\n *\n * @private\n * @returns {void}\n */\n RadioButton.prototype.preRender = function () {\n var element = this.element;\n this.formElement = closest(this.element, 'form');\n this.tagName = this.element.tagName;\n element = wrapperInitialize(this.createElement, 'EJS-RADIOBUTTON', 'radio', element, WRAPPER, 'radio');\n this.element = element;\n if (this.element.getAttribute('type') !== 'radio') {\n this.element.setAttribute('type', 'radio');\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n if (this.tagName === 'EJS-RADIOBUTTON') {\n var formControlName = this.element.getAttribute('formcontrolname');\n if (formControlName) {\n this.setProperties({ 'name': formControlName }, true);\n this.element.setAttribute('name', formControlName);\n }\n }\n };\n /**\n * Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n RadioButton.prototype.render = function () {\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n this.renderComplete();\n this.wrapper = this.getWrapper();\n };\n RadioButton.prototype.setDisabled = function () {\n this.element.disabled = true;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RadioButton.prototype.setText = function (text) {\n var label = this.getLabel();\n var textLabel = label.getElementsByClassName(LABEL)[0];\n if (textLabel) {\n textLabel.textContent = text;\n }\n else {\n text = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(text) : text;\n textLabel = this.createElement('span', { className: LABEL, innerHTML: text });\n label.appendChild(textLabel);\n }\n if (this.labelPosition === 'Before') {\n this.getLabel().classList.add('e-right');\n }\n else {\n this.getLabel().classList.remove('e-right');\n }\n };\n RadioButton.prototype.updateHtmlAttribute = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (ATTRIBUTES.indexOf(key) > -1) {\n var wrapper = this.element.parentElement;\n if (key === 'class') {\n addClass([wrapper], this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ').trim().split(' '));\n }\n else if (key === 'title' || key === 'style') {\n wrapper.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n else {\n this.element.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n };\n RadioButton.prototype.unWireEvents = function () {\n var label = this.wrapper;\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n var rippleLabel = label.getElementsByTagName('label')[0];\n if (rippleLabel) {\n EventHandler.remove(rippleLabel, 'mousedown', this.labelMouseDownHandler);\n EventHandler.remove(rippleLabel, 'mouseup', this.labelMouseUpHandler);\n EventHandler.remove(rippleLabel, 'mouseleave', this.labelMouseLeaveHandler);\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n };\n RadioButton.prototype.wireEvents = function () {\n var label = this.getLabel();\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n var rippleLabel = label.getElementsByClassName(LABEL)[0];\n if (rippleLabel) {\n EventHandler.add(rippleLabel, 'mousedown', this.labelMouseDownHandler, this);\n EventHandler.add(rippleLabel, 'mouseup', this.labelMouseUpHandler, this);\n EventHandler.add(rippleLabel, 'mouseleave', this.labelMouseLeaveHandler, this);\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n };\n /**\n * Click the RadioButton element\n * its native method\n *\n * @public\n * @returns {void}\n */\n RadioButton.prototype.click = function () {\n this.element.click();\n };\n /**\n * Sets the focus to RadioButton\n * its native method\n *\n * @public\n * @returns {void}\n */\n RadioButton.prototype.focusIn = function () {\n this.element.focus();\n };\n var RadioButton_1;\n __decorate([\n Event()\n ], RadioButton.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RadioButton.prototype, \"created\", void 0);\n __decorate([\n Property(false)\n ], RadioButton.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RadioButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], RadioButton.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], RadioButton.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property({})\n ], RadioButton.prototype, \"htmlAttributes\", void 0);\n RadioButton = RadioButton_1 = __decorate([\n NotifyPropertyChanges\n ], RadioButton);\n return RadioButton;\n}(Component));\nexport { RadioButton };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Component, EventHandler, Property, Event } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, isVisible, closest, attributes, detach, classList, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { selectAll, setStyleAttribute as setStyle, select } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, getUniqueID, formatUnit, Collection, compile as templateCompiler } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, Browser, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { calculatePosition } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { HScroll } from '../common/h-scroll';\nimport { VScroll } from '../common/v-scroll';\nvar CLS_VERTICAL = 'e-vertical';\nvar CLS_ITEMS = 'e-toolbar-items';\nvar CLS_ITEM = 'e-toolbar-item';\nvar CLS_RTL = 'e-rtl';\nvar CLS_SEPARATOR = 'e-separator';\nvar CLS_POPUPICON = 'e-popup-up-icon';\nvar CLS_POPUPDOWN = 'e-popup-down-icon';\nvar CLS_POPUPOPEN = 'e-popup-open';\nvar CLS_TEMPLATE = 'e-template';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_POPUPTEXT = 'e-toolbar-text';\nvar CLS_TBARTEXT = 'e-popup-text';\nvar CLS_TBAROVERFLOW = 'e-overflow-show';\nvar CLS_POPOVERFLOW = 'e-overflow-hide';\nvar CLS_TBARBTN = 'e-tbar-btn';\nvar CLS_TBARNAV = 'e-hor-nav';\nvar CLS_TBARSCRLNAV = 'e-scroll-nav';\nvar CLS_TBARRIGHT = 'e-toolbar-right';\nvar CLS_TBARLEFT = 'e-toolbar-left';\nvar CLS_TBARCENTER = 'e-toolbar-center';\nvar CLS_TBARPOS = 'e-tbar-pos';\nvar CLS_HSCROLLCNT = 'e-hscroll-content';\nvar CLS_VSCROLLCNT = 'e-vscroll-content';\nvar CLS_HSCROLLBAR = 'e-hscroll-bar';\nvar CLS_POPUPNAV = 'e-hor-nav';\nvar CLS_POPUPCLASS = 'e-toolbar-pop';\nvar CLS_POPUP = 'e-toolbar-popup';\nvar CLS_TBARBTNTEXT = 'e-tbar-btn-text';\nvar CLS_TBARNAVACT = 'e-nav-active';\nvar CLS_TBARIGNORE = 'e-ignore';\nvar CLS_POPPRI = 'e-popup-alone';\nvar CLS_HIDDEN = 'e-hidden';\nvar CLS_MULTIROW = 'e-toolbar-multirow';\nvar CLS_MULTIROWPOS = 'e-multirow-pos';\nvar CLS_MULTIROW_SEPARATOR = 'e-multirow-separator';\nvar CLS_EXTENDABLE_SEPARATOR = 'e-extended-separator';\nvar CLS_EXTEANDABLE_TOOLBAR = 'e-extended-toolbar';\nvar CLS_EXTENDABLECLASS = 'e-toolbar-extended';\nvar CLS_EXTENDPOPUP = 'e-expended-nav';\nvar CLS_EXTENDEDPOPOPEN = 'e-tbar-extended';\n/**\n * An item object that is used to configure Toolbar commands.\n */\nvar Item = /** @class */ (function (_super) {\n __extends(Item, _super);\n function Item() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Item.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"text\", void 0);\n __decorate([\n Property('auto')\n ], Item.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Item.prototype, \"showAlwaysInPopup\", void 0);\n __decorate([\n Property(false)\n ], Item.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"prefixIcon\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"suffixIcon\", void 0);\n __decorate([\n Property(true)\n ], Item.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], Item.prototype, \"overflow\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"template\", void 0);\n __decorate([\n Property('Button')\n ], Item.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], Item.prototype, \"showTextOn\", void 0);\n __decorate([\n Property(null)\n ], Item.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"tooltipText\", void 0);\n __decorate([\n Property('Left')\n ], Item.prototype, \"align\", void 0);\n __decorate([\n Event()\n ], Item.prototype, \"click\", void 0);\n __decorate([\n Property(-1)\n ], Item.prototype, \"tabIndex\", void 0);\n return Item;\n}(ChildProperty));\nexport { Item };\n/**\n * The Toolbar control contains a group of commands that are aligned horizontally.\n * ```html\n *
\n * \n * ```\n */\nvar Toolbar = /** @class */ (function (_super) {\n __extends(Toolbar, _super);\n /**\n * Initializes a new instance of the Toolbar class.\n *\n * @param {ToolbarModel} options - Specifies Toolbar model properties as options.\n * @param { string | HTMLElement} element - Specifies the element that is rendered as a Toolbar.\n */\n function Toolbar(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.resizeContext = _this.resize.bind(_this);\n _this.orientationChangeContext = _this.orientationChange.bind(_this);\n /**\n * Contains the keyboard configuration of the Toolbar.\n */\n _this.keyConfigs = {\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n moveDown: 'downarrow',\n popupOpen: 'enter',\n popupClose: 'escape',\n tab: 'tab',\n home: 'home',\n end: 'end'\n };\n return _this;\n }\n /**\n * Removes the control from the DOM and also removes all its related events.\n *\n * @returns {void}.\n */\n Toolbar.prototype.destroy = function () {\n var _this = this;\n if (this.isReact || this.isAngular) {\n this.clearTemplate();\n }\n var btnItems = this.element.querySelectorAll('.e-control.e-btn');\n [].slice.call(btnItems).forEach(function (el) {\n if (!isNOU(el) && !isNOU(el.ej2_instances) && !isNOU(el.ej2_instances[0]) && !(el.ej2_instances[0].isDestroyed)) {\n el.ej2_instances[0].destroy();\n }\n });\n this.unwireEvents();\n this.tempId.forEach(function (ele) {\n if (!isNOU(_this.element.querySelector(ele))) {\n document.body.appendChild(_this.element.querySelector(ele)).style.display = 'none';\n }\n });\n this.destroyItems();\n while (this.element.lastElementChild) {\n this.element.removeChild(this.element.lastElementChild);\n }\n if (this.trgtEle) {\n this.element.appendChild(this.ctrlTem);\n this.trgtEle = null;\n this.ctrlTem = null;\n }\n if (this.popObj) {\n this.popObj.destroy();\n detach(this.popObj.element);\n }\n if (this.activeEle) {\n this.activeEle = null;\n }\n this.popObj = null;\n this.tbarAlign = null;\n this.tbarItemsCol = [];\n this.remove(this.element, 'e-toolpop');\n if (this.cssClass) {\n removeClass([this.element], this.cssClass.split(' '));\n }\n this.element.removeAttribute('style');\n ['aria-disabled', 'aria-orientation', 'role'].forEach(function (attrb) {\n return _this.element.removeAttribute(attrb);\n });\n _super.prototype.destroy.call(this);\n };\n /**\n * Initialize the event handler\n *\n * @private\n * @returns {void}\n */\n Toolbar.prototype.preRender = function () {\n var eventArgs = { enableCollision: this.enableCollision, scrollStep: this.scrollStep };\n this.trigger('beforeCreate', eventArgs);\n this.enableCollision = eventArgs.enableCollision;\n this.scrollStep = eventArgs.scrollStep;\n this.scrollModule = null;\n this.popObj = null;\n this.tempId = [];\n this.tbarItemsCol = this.items;\n this.isVertical = this.element.classList.contains(CLS_VERTICAL) ? true : false;\n this.isExtendedOpen = false;\n this.popupPriCount = 0;\n if (this.enableRtl) {\n this.add(this.element, CLS_RTL);\n }\n };\n Toolbar.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n window.addEventListener('resize', this.resizeContext);\n window.addEventListener('orientationchange', this.orientationChangeContext);\n if (this.allowKeyboard) {\n this.wireKeyboardEvent();\n }\n };\n Toolbar.prototype.wireKeyboardEvent = function () {\n this.keyModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs\n });\n EventHandler.add(this.element, 'keydown', this.docKeyDown, this);\n this.updateTabIndex('0');\n };\n Toolbar.prototype.updateTabIndex = function (tabIndex) {\n var ele = this.element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_DISABLE + ' ):not(.' + CLS_SEPARATOR + ' ):not(.' + CLS_HIDDEN + ' )');\n if (!isNOU(ele) && !isNOU(ele.firstElementChild)) {\n var dataTabIndex = ele.firstElementChild.getAttribute('data-tabindex');\n if (dataTabIndex && dataTabIndex === '-1' && ele.firstElementChild.tagName !== 'INPUT') {\n ele.firstElementChild.setAttribute('tabindex', tabIndex);\n }\n }\n };\n Toolbar.prototype.unwireKeyboardEvent = function () {\n if (this.keyModule) {\n EventHandler.remove(this.element, 'keydown', this.docKeyDown);\n this.keyModule.destroy();\n this.keyModule = null;\n }\n };\n Toolbar.prototype.docKeyDown = function (e) {\n if (e.target.tagName === 'INPUT') {\n return;\n }\n var popCheck = !isNOU(this.popObj) && isVisible(this.popObj.element) && this.overflowMode !== 'Extended';\n if (e.keyCode === 9 && e.target.classList.contains('e-hor-nav') === true && popCheck) {\n this.popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n var keyCheck = (e.keyCode === 40 || e.keyCode === 38 || e.keyCode === 35 || e.keyCode === 36);\n if (keyCheck) {\n e.preventDefault();\n }\n };\n Toolbar.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n this.destroyScroll();\n this.unwireKeyboardEvent();\n window.removeEventListener('resize', this.resizeContext);\n window.removeEventListener('orientationchange', this.orientationChangeContext);\n EventHandler.remove(document, 'scroll', this.docEvent);\n EventHandler.remove(document, 'click', this.docEvent);\n };\n Toolbar.prototype.clearProperty = function () {\n this.tbarEle = [];\n this.tbarAlgEle = { lefts: [], centers: [], rights: [] };\n };\n Toolbar.prototype.docEvent = function (e) {\n var popEle = closest(e.target, '.e-popup');\n if (this.popObj && isVisible(this.popObj.element) && !popEle && this.overflowMode === 'Popup') {\n this.popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n };\n Toolbar.prototype.destroyScroll = function () {\n if (this.scrollModule) {\n if (this.tbarAlign) {\n this.add(this.scrollModule.element, CLS_TBARPOS);\n }\n this.scrollModule.destroy();\n this.scrollModule = null;\n }\n };\n Toolbar.prototype.destroyItems = function () {\n if (this.element) {\n [].slice.call(this.element.querySelectorAll('.' + CLS_ITEM)).forEach(function (el) { detach(el); });\n }\n if (this.tbarAlign) {\n var tbarItems = this.element.querySelector('.' + CLS_ITEMS);\n [].slice.call(tbarItems.children).forEach(function (el) {\n detach(el);\n });\n this.tbarAlign = false;\n this.remove(tbarItems, CLS_TBARPOS);\n }\n this.clearProperty();\n };\n Toolbar.prototype.destroyMode = function () {\n if (this.scrollModule) {\n this.remove(this.scrollModule.element, CLS_RTL);\n this.destroyScroll();\n }\n this.remove(this.element, CLS_EXTENDEDPOPOPEN);\n this.remove(this.element, CLS_EXTEANDABLE_TOOLBAR);\n var tempEle = this.element.querySelector('.e-toolbar-multirow');\n if (tempEle) {\n this.remove(tempEle, CLS_MULTIROW);\n }\n if (this.popObj) {\n this.popupRefresh(this.popObj.element, true);\n }\n };\n Toolbar.prototype.add = function (ele, val) {\n ele.classList.add(val);\n };\n Toolbar.prototype.remove = function (ele, val) {\n ele.classList.remove(val);\n };\n Toolbar.prototype.elementFocus = function (ele) {\n var fChild = ele.firstElementChild;\n if (fChild) {\n fChild.focus();\n this.activeEleSwitch(ele);\n }\n else {\n ele.focus();\n }\n };\n Toolbar.prototype.clstElement = function (tbrNavChk, trgt) {\n var clst;\n if (tbrNavChk && this.popObj && isVisible(this.popObj.element)) {\n clst = this.popObj.element.querySelector('.' + CLS_ITEM);\n }\n else if (this.element === trgt || tbrNavChk) {\n clst = this.element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_DISABLE + ' ):not(.' + CLS_SEPARATOR + ' ):not(.' + CLS_HIDDEN + ' )');\n }\n else {\n clst = closest(trgt, '.' + CLS_ITEM);\n }\n return clst;\n };\n Toolbar.prototype.keyHandling = function (clst, e, trgt, navChk, scrollChk) {\n var popObj = this.popObj;\n var rootEle = this.element;\n var popAnimate = { name: 'FadeOut', duration: 100 };\n var value = e.action === 'moveUp' ? 'previous' : 'next';\n var ele;\n var nodes;\n switch (e.action) {\n case 'moveRight':\n if (this.isVertical) {\n return;\n }\n if (rootEle === trgt) {\n this.elementFocus(clst);\n }\n else if (!navChk) {\n this.eleFocus(clst, 'next');\n }\n break;\n case 'moveLeft':\n if (this.isVertical) {\n return;\n }\n if (!navChk) {\n this.eleFocus(clst, 'previous');\n }\n break;\n case 'home':\n case 'end':\n if (clst) {\n var popupCheck = closest(clst, '.e-popup');\n var extendedPopup = this.element.querySelector('.' + CLS_EXTENDABLECLASS);\n if (this.overflowMode === 'Extended' && extendedPopup && extendedPopup.classList.contains('e-popup-open')) {\n popupCheck = e.action === 'end' ? extendedPopup : null;\n }\n if (popupCheck) {\n if (isVisible(this.popObj.element)) {\n nodes = [].slice.call(popupCheck.children);\n if (e.action === 'home') {\n ele = this.focusFirstVisibleEle(nodes);\n }\n else {\n ele = this.focusLastVisibleEle(nodes);\n }\n }\n }\n else {\n nodes = this.element.querySelectorAll('.' + CLS_ITEMS + ' .' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + ')');\n if (e.action === 'home') {\n ele = this.focusFirstVisibleEle(nodes);\n }\n else {\n ele = this.focusLastVisibleEle(nodes);\n }\n }\n if (ele) {\n this.elementFocus(ele);\n }\n }\n break;\n case 'moveUp':\n case 'moveDown':\n if (!this.isVertical) {\n if (popObj && closest(trgt, '.e-popup')) {\n var popEle = popObj.element;\n var popFrstEle = popEle.firstElementChild;\n if ((value === 'previous' && popFrstEle === clst)) {\n popEle.lastElementChild.firstChild.focus();\n }\n else if (value === 'next' && popEle.lastElementChild === clst) {\n popFrstEle.firstChild.focus();\n }\n else {\n this.eleFocus(clst, value);\n }\n }\n else if (e.action === 'moveDown' && popObj && isVisible(popObj.element)) {\n this.elementFocus(clst);\n }\n }\n else {\n if (e.action === 'moveUp') {\n this.eleFocus(clst, 'previous');\n }\n else {\n this.eleFocus(clst, 'next');\n }\n }\n break;\n case 'tab':\n if (!scrollChk && !navChk) {\n var ele_1 = clst.firstElementChild;\n if (rootEle === trgt) {\n if (this.activeEle) {\n this.activeEle.focus();\n }\n else {\n this.activeEleRemove(ele_1);\n ele_1.focus();\n }\n }\n }\n break;\n case 'popupClose':\n if (popObj && this.overflowMode !== 'Extended') {\n popObj.hide(popAnimate);\n }\n break;\n case 'popupOpen':\n if (!navChk) {\n return;\n }\n if (popObj && !isVisible(popObj.element)) {\n popObj.element.style.top = rootEle.offsetHeight + 'px';\n popObj.show({ name: 'FadeIn', duration: 100 });\n }\n else {\n popObj.hide(popAnimate);\n }\n break;\n }\n };\n Toolbar.prototype.keyActionHandler = function (e) {\n var trgt = e.target;\n if (trgt.tagName === 'INPUT' || trgt.tagName === 'TEXTAREA' || this.element.classList.contains(CLS_DISABLE)) {\n return;\n }\n e.preventDefault();\n var tbrNavChk = trgt.classList.contains(CLS_TBARNAV);\n var tbarScrollChk = trgt.classList.contains(CLS_TBARSCRLNAV);\n var clst = this.clstElement(tbrNavChk, trgt);\n if (clst || tbarScrollChk) {\n this.keyHandling(clst, e, trgt, tbrNavChk, tbarScrollChk);\n }\n };\n /**\n * Specifies the value to disable/enable the Toolbar component.\n * When set to `true`, the component will be disabled.\n *\n * @param {boolean} value - Based on this Boolean value, Toolbar will be enabled (false) or disabled (true).\n * @returns {void}.\n */\n Toolbar.prototype.disable = function (value) {\n var rootEle = this.element;\n if (value) {\n rootEle.classList.add(CLS_DISABLE);\n }\n else {\n rootEle.classList.remove(CLS_DISABLE);\n }\n if (this.activeEle) {\n this.activeEle.setAttribute('tabindex', this.activeEle.getAttribute('data-tabindex'));\n }\n if (this.scrollModule) {\n this.scrollModule.disable(value);\n }\n if (this.popObj) {\n if (isVisible(this.popObj.element) && this.overflowMode !== 'Extended') {\n this.popObj.hide();\n }\n rootEle.querySelector('#' + rootEle.id + '_nav').setAttribute('tabindex', !value ? '0' : '-1');\n }\n };\n Toolbar.prototype.eleContains = function (el) {\n return el.classList.contains(CLS_SEPARATOR) || el.classList.contains(CLS_DISABLE) || el.getAttribute('disabled') || el.classList.contains(CLS_HIDDEN) || !isVisible(el) || !el.classList.contains(CLS_ITEM);\n };\n Toolbar.prototype.focusFirstVisibleEle = function (nodes) {\n var element;\n var index = 0;\n while (index < nodes.length) {\n var ele = nodes[parseInt(index.toString(), 10)];\n if (!ele.classList.contains(CLS_HIDDEN) && !ele.classList.contains(CLS_DISABLE)) {\n return ele;\n }\n index++;\n }\n return element;\n };\n Toolbar.prototype.focusLastVisibleEle = function (nodes) {\n var element;\n var index = nodes.length - 1;\n while (index >= 0) {\n var ele = nodes[parseInt(index.toString(), 10)];\n if (!ele.classList.contains(CLS_HIDDEN) && !ele.classList.contains(CLS_DISABLE)) {\n return ele;\n }\n index--;\n }\n return element;\n };\n Toolbar.prototype.eleFocus = function (closest, pos) {\n var sib = Object(closest)[pos + 'ElementSibling'];\n if (sib) {\n var skipEle = this.eleContains(sib);\n if (skipEle) {\n this.eleFocus(sib, pos);\n return;\n }\n this.elementFocus(sib);\n }\n else if (this.tbarAlign) {\n var elem = Object(closest.parentElement)[pos + 'ElementSibling'];\n if (!isNOU(elem) && elem.children.length === 0) {\n elem = Object(elem)[pos + 'ElementSibling'];\n }\n if (!isNOU(elem) && elem.children.length > 0) {\n if (pos === 'next') {\n var el = elem.querySelector('.' + CLS_ITEM);\n if (this.eleContains(el)) {\n this.eleFocus(el, pos);\n }\n else {\n el.firstElementChild.focus();\n this.activeEleSwitch(el);\n }\n }\n else {\n var el = elem.lastElementChild;\n if (this.eleContains(el)) {\n this.eleFocus(el, pos);\n }\n else {\n this.elementFocus(el);\n }\n }\n }\n }\n else if (!isNOU(closest)) {\n var tbrItems = this.element.querySelectorAll('.' + CLS_ITEMS + ' .' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + ')' + ':not(.' + CLS_DISABLE + ')' + ':not(.' + CLS_HIDDEN + ')');\n if (pos === 'next' && tbrItems) {\n this.elementFocus(tbrItems[0]);\n }\n else if (pos === 'previous' && tbrItems) {\n this.elementFocus(tbrItems[tbrItems.length - 1]);\n }\n }\n };\n Toolbar.prototype.clickHandler = function (e) {\n var _this = this;\n var trgt = e.target;\n var ele = this.element;\n var isPopupElement = !isNOU(closest(trgt, '.' + CLS_POPUPCLASS));\n var clsList = trgt.classList;\n var popupNav = closest(trgt, ('.' + CLS_TBARNAV));\n if (!popupNav) {\n popupNav = trgt;\n }\n if (!ele.children[0].classList.contains('e-hscroll') && !ele.children[0].classList.contains('e-vscroll')\n && (clsList.contains(CLS_TBARNAV))) {\n clsList = trgt.querySelector('.e-icons').classList;\n }\n if (clsList.contains(CLS_POPUPICON) || clsList.contains(CLS_POPUPDOWN)) {\n this.popupClickHandler(ele, popupNav, CLS_RTL);\n }\n var itemObj;\n var clst = closest(e.target, '.' + CLS_ITEM);\n if ((isNOU(clst) || clst.classList.contains(CLS_DISABLE)) && !popupNav.classList.contains(CLS_TBARNAV)) {\n return;\n }\n if (clst) {\n var tempItem = this.items[this.tbarEle.indexOf(clst)];\n itemObj = tempItem;\n }\n var eventArgs = { originalEvent: e, item: itemObj };\n if (itemObj && !isNOU(itemObj.click)) {\n this.trigger('items[' + this.tbarEle.indexOf(clst) + '].click', eventArgs);\n }\n if (!eventArgs.cancel) {\n this.trigger('clicked', eventArgs, function (clickedArgs) {\n if (!isNOU(_this.popObj) && isPopupElement && !clickedArgs.cancel && _this.overflowMode === 'Popup' &&\n clickedArgs.item && clickedArgs.item.type !== 'Input') {\n _this.popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n });\n }\n };\n Toolbar.prototype.popupClickHandler = function (ele, popupNav, CLS_RTL) {\n var popObj = this.popObj;\n if (isVisible(popObj.element)) {\n popupNav.classList.remove(CLS_TBARNAVACT);\n popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n else {\n if (ele.classList.contains(CLS_RTL)) {\n popObj.enableRtl = true;\n popObj.position = { X: 'left', Y: 'top' };\n }\n if (popObj.offsetX === 0 && !ele.classList.contains(CLS_RTL)) {\n popObj.enableRtl = false;\n popObj.position = { X: 'right', Y: 'top' };\n }\n popObj.dataBind();\n popObj.refreshPosition();\n popObj.element.style.top = this.getElementOffsetY() + 'px';\n if (this.overflowMode === 'Extended') {\n popObj.element.style.minHeight = '0px';\n }\n popupNav.classList.add(CLS_TBARNAVACT);\n popObj.show({ name: 'FadeIn', duration: 100 });\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n Toolbar.prototype.render = function () {\n this.initialize();\n this.renderControl();\n this.wireEvents();\n this.renderComplete();\n };\n Toolbar.prototype.initialize = function () {\n var width = formatUnit(this.width);\n var height = formatUnit(this.height);\n if (Browser.info.name !== 'msie' || this.height !== 'auto' || this.overflowMode === 'MultiRow') {\n setStyle(this.element, { 'height': height });\n }\n setStyle(this.element, { 'width': width });\n var ariaAttr = {\n 'role': 'toolbar', 'aria-disabled': 'false',\n 'aria-orientation': !this.isVertical ? 'horizontal' : 'vertical'\n };\n attributes(this.element, ariaAttr);\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n };\n Toolbar.prototype.renderControl = function () {\n var ele = this.element;\n this.trgtEle = (ele.children.length > 0) ? ele.querySelector('div') : null;\n this.tbarAlgEle = { lefts: [], centers: [], rights: [] };\n this.renderItems();\n this.renderLayout();\n };\n Toolbar.prototype.renderLayout = function () {\n this.renderOverflowMode();\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n if (this.popObj && this.popObj.element.childElementCount > 1 && this.checkPopupRefresh(this.element, this.popObj.element)) {\n this.popupRefresh(this.popObj.element, false);\n }\n this.separator();\n };\n Toolbar.prototype.itemsAlign = function (items, itemEleDom) {\n var innerItem;\n var innerPos;\n if (!this.tbarEle) {\n this.tbarEle = [];\n }\n for (var i = 0; i < items.length; i++) {\n innerItem = this.renderSubComponent(items[parseInt(i.toString(), 10)], i);\n if (this.tbarEle.indexOf(innerItem) === -1) {\n this.tbarEle.push(innerItem);\n }\n if (!this.tbarAlign) {\n this.tbarItemAlign(items[parseInt(i.toString(), 10)], itemEleDom, i);\n }\n innerPos = itemEleDom.querySelector('.e-toolbar-' + items[parseInt(i.toString(), 10)].align.toLowerCase());\n if (innerPos) {\n if (!(items[parseInt(i.toString(), 10)].showAlwaysInPopup && items[parseInt(i.toString(), 10)].overflow !== 'Show')) {\n this.tbarAlgEle[(items[parseInt(i.toString(), 10)].align + 's').toLowerCase()].push(innerItem);\n }\n innerPos.appendChild(innerItem);\n }\n else {\n itemEleDom.appendChild(innerItem);\n }\n }\n if (this.isReact) {\n var portals = 'portals';\n this.notify('render-react-toolbar-template', this[\"\" + portals]);\n this.renderReactTemplates();\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.changeOrientation = function () {\n var ele = this.element;\n if (this.isVertical) {\n ele.classList.remove(CLS_VERTICAL);\n this.isVertical = false;\n if (this.height === 'auto' || this.height === '100%') {\n ele.style.height = this.height;\n }\n ele.setAttribute('aria-orientation', 'horizontal');\n }\n else {\n ele.classList.add(CLS_VERTICAL);\n this.isVertical = true;\n ele.setAttribute('aria-orientation', 'vertical');\n setStyle(this.element, { 'height': formatUnit(this.height), 'width': formatUnit(this.width) });\n }\n this.destroyMode();\n this.refreshOverflow();\n };\n Toolbar.prototype.initScroll = function (element, innerItems) {\n if (!this.scrollModule && this.checkOverflow(element, innerItems[0])) {\n if (this.tbarAlign) {\n this.element.querySelector('.' + CLS_ITEMS + ' .' + CLS_TBARCENTER).removeAttribute('style');\n }\n if (this.isVertical) {\n this.scrollModule = new VScroll({ scrollStep: this.scrollStep, enableRtl: this.enableRtl }, innerItems[0]);\n }\n else {\n this.scrollModule = new HScroll({ scrollStep: this.scrollStep, enableRtl: this.enableRtl }, innerItems[0]);\n }\n if (this.cssClass) {\n addClass([innerItems[0]], this.cssClass.split(' '));\n }\n this.remove(this.scrollModule.element, CLS_TBARPOS);\n setStyle(this.element, { overflow: 'hidden' });\n }\n };\n Toolbar.prototype.itemWidthCal = function (items) {\n var _this = this;\n var width = 0;\n var style;\n [].slice.call(selectAll('.' + CLS_ITEM, items)).forEach(function (el) {\n if (isVisible(el)) {\n style = window.getComputedStyle(el);\n width += _this.isVertical ? el.offsetHeight : el.offsetWidth;\n width += parseFloat(_this.isVertical ? style.marginTop : style.marginRight);\n width += parseFloat(_this.isVertical ? style.marginBottom : style.marginLeft);\n }\n });\n return width;\n };\n Toolbar.prototype.getScrollCntEle = function (innerItem) {\n var trgClass = (this.isVertical) ? '.e-vscroll-content' : '.e-hscroll-content';\n return innerItem.querySelector(trgClass);\n };\n Toolbar.prototype.checkOverflow = function (element, innerItem) {\n if (isNOU(element) || isNOU(innerItem) || !isVisible(element)) {\n return false;\n }\n var eleWidth = this.isVertical ? element.offsetHeight : element.offsetWidth;\n var itemWidth = this.isVertical ? innerItem.offsetHeight : innerItem.offsetWidth;\n if (this.tbarAlign || this.scrollModule || (eleWidth === itemWidth)) {\n itemWidth = this.itemWidthCal(this.scrollModule ? this.getScrollCntEle(innerItem) : innerItem);\n }\n var popNav = element.querySelector('.' + CLS_TBARNAV);\n var scrollNav = element.querySelector('.' + CLS_TBARSCRLNAV);\n var navEleWidth = 0;\n if (popNav) {\n navEleWidth = this.isVertical ? popNav.offsetHeight : popNav.offsetWidth;\n }\n else if (scrollNav) {\n navEleWidth = this.isVertical ? (scrollNav.offsetHeight * (2)) : (scrollNav.offsetWidth * 2);\n }\n if (itemWidth > eleWidth - navEleWidth) {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * Refresh the whole Toolbar component without re-rendering.\n * - It is used to manually refresh the Toolbar overflow modes such as scrollable, popup, multi row, and extended.\n * - It will refresh the Toolbar component after loading items dynamically.\n *\n * @returns {void}.\n */\n Toolbar.prototype.refreshOverflow = function () {\n this.resize();\n };\n Toolbar.prototype.toolbarAlign = function (innerItems) {\n if (this.tbarAlign) {\n this.add(innerItems, CLS_TBARPOS);\n this.itemPositioning();\n }\n };\n Toolbar.prototype.renderOverflowMode = function () {\n var ele = this.element;\n var innerItems = ele.querySelector('.' + CLS_ITEMS);\n var priorityCheck = this.popupPriCount > 0;\n if (ele && ele.children.length > 0) {\n this.offsetWid = ele.offsetWidth;\n this.remove(this.element, 'e-toolpop');\n if (Browser.info.name === 'msie' && this.height === 'auto') {\n ele.style.height = '';\n }\n switch (this.overflowMode) {\n case 'Scrollable':\n if (isNOU(this.scrollModule)) {\n this.initScroll(ele, [].slice.call(ele.getElementsByClassName(CLS_ITEMS)));\n }\n break;\n case 'Popup':\n this.add(this.element, 'e-toolpop');\n if (this.tbarAlign) {\n this.removePositioning();\n }\n if (this.checkOverflow(ele, innerItems) || priorityCheck) {\n this.setOverflowAttributes(ele);\n }\n this.toolbarAlign(innerItems);\n break;\n case 'MultiRow':\n this.add(innerItems, CLS_MULTIROW);\n if (this.checkOverflow(ele, innerItems) && this.tbarAlign) {\n this.removePositioning();\n this.add(innerItems, CLS_MULTIROWPOS);\n }\n if (ele.style.overflow === 'hidden') {\n ele.style.overflow = '';\n }\n if (Browser.info.name === 'msie' || ele.style.height !== 'auto') {\n ele.style.height = 'auto';\n }\n break;\n case 'Extended':\n this.add(this.element, CLS_EXTEANDABLE_TOOLBAR);\n if (this.checkOverflow(ele, innerItems) || priorityCheck) {\n if (this.tbarAlign) {\n this.removePositioning();\n }\n this.setOverflowAttributes(ele);\n }\n this.toolbarAlign(innerItems);\n }\n }\n };\n Toolbar.prototype.setOverflowAttributes = function (ele) {\n this.createPopupEle(ele, [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, ele)));\n var ariaAttr = {\n 'tabindex': '0', 'role': 'button', 'aria-haspopup': 'true',\n 'aria-label': 'overflow'\n };\n attributes(this.element.querySelector('.' + CLS_TBARNAV), ariaAttr);\n };\n Toolbar.prototype.separator = function () {\n var element = this.element;\n var eleItem = [].slice.call(element.querySelectorAll('.' + CLS_SEPARATOR));\n var multiVar = element.querySelector('.' + CLS_MULTIROW_SEPARATOR);\n var extendVar = element.querySelector('.' + CLS_EXTENDABLE_SEPARATOR);\n var eleInlineItem = this.overflowMode === 'MultiRow' ? multiVar : extendVar;\n if (eleInlineItem !== null) {\n if (this.overflowMode === 'MultiRow') {\n eleInlineItem.classList.remove(CLS_MULTIROW_SEPARATOR);\n }\n else if (this.overflowMode === 'Extended') {\n eleInlineItem.classList.remove(CLS_EXTENDABLE_SEPARATOR);\n }\n }\n for (var i = 0; i <= eleItem.length - 1; i++) {\n if (eleItem[parseInt(i.toString(), 10)].offsetLeft < 30 && eleItem[parseInt(i.toString(), 10)].offsetLeft !== 0) {\n if (this.overflowMode === 'MultiRow') {\n eleItem[parseInt(i.toString(), 10)].classList.add(CLS_MULTIROW_SEPARATOR);\n }\n else if (this.overflowMode === 'Extended') {\n eleItem[parseInt(i.toString(), 10)].classList.add(CLS_EXTENDABLE_SEPARATOR);\n }\n }\n }\n };\n Toolbar.prototype.createPopupEle = function (ele, innerEle) {\n var innerNav = ele.querySelector('.' + CLS_TBARNAV);\n var vertical = this.isVertical;\n if (!innerNav) {\n this.createPopupIcon(ele);\n }\n innerNav = ele.querySelector('.' + CLS_TBARNAV);\n var innerNavDom = (vertical ? innerNav.offsetHeight : innerNav.offsetWidth);\n var eleWidth = ((vertical ? ele.offsetHeight : ele.offsetWidth) - (innerNavDom));\n this.element.classList.remove('e-rtl');\n setStyle(this.element, { direction: 'initial' });\n this.checkPriority(ele, innerEle, eleWidth, true);\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n this.element.style.removeProperty('direction');\n this.createPopup();\n };\n Toolbar.prototype.pushingPoppedEle = function (tbarObj, popupPri, ele, eleHeight, sepHeight) {\n var element = tbarObj.element;\n var poppedEle = [].slice.call(selectAll('.' + CLS_POPUP, element.querySelector('.' + CLS_ITEMS)));\n var nodes = selectAll('.' + CLS_TBAROVERFLOW, ele);\n var nodeIndex = 0;\n var nodePri = 0;\n poppedEle.forEach(function (el, index) {\n nodes = selectAll('.' + CLS_TBAROVERFLOW, ele);\n if (el.classList.contains(CLS_TBAROVERFLOW) && nodes.length > 0) {\n if (tbarObj.tbResize && nodes.length > index) {\n ele.insertBefore(el, nodes[parseInt(index.toString(), 10)]);\n ++nodePri;\n }\n else {\n ele.insertBefore(el, ele.children[nodes.length]);\n ++nodePri;\n }\n }\n else if (el.classList.contains(CLS_TBAROVERFLOW)) {\n ele.insertBefore(el, ele.firstChild);\n ++nodePri;\n }\n else if (tbarObj.tbResize && el.classList.contains(CLS_POPOVERFLOW) && ele.children.length > 0 && nodes.length === 0) {\n ele.insertBefore(el, ele.firstChild);\n ++nodePri;\n }\n else if (el.classList.contains(CLS_POPOVERFLOW)) {\n popupPri.push(el);\n }\n else if (tbarObj.tbResize) {\n ele.insertBefore(el, ele.childNodes[nodeIndex + nodePri]);\n ++nodeIndex;\n }\n else {\n ele.appendChild(el);\n }\n if (el.classList.contains(CLS_SEPARATOR)) {\n setStyle(el, { display: '', height: sepHeight + 'px' });\n }\n else {\n setStyle(el, { display: '', height: eleHeight + 'px' });\n }\n });\n popupPri.forEach(function (el) {\n ele.appendChild(el);\n });\n var tbarEle = selectAll('.' + CLS_ITEM, element.querySelector('.' + CLS_ITEMS));\n for (var i = tbarEle.length - 1; i >= 0; i--) {\n var tbarElement = tbarEle[parseInt(i.toString(), 10)];\n if (tbarElement.classList.contains(CLS_SEPARATOR) && this.overflowMode !== 'Extended') {\n setStyle(tbarElement, { display: 'none' });\n }\n else {\n break;\n }\n }\n };\n Toolbar.prototype.createPopup = function () {\n var element = this.element;\n var sepHeight;\n var sepItem;\n if (this.overflowMode === 'Extended') {\n sepItem = element.querySelector('.' + CLS_SEPARATOR);\n sepHeight =\n (element.style.height === 'auto' || element.style.height === '') ? null : (sepItem && sepItem.offsetHeight);\n }\n var eleItem = element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + '):not(.' + CLS_POPUP + ')');\n var eleHeight = (element.style.height === 'auto' || element.style.height === '') ? null : (eleItem && eleItem.offsetHeight);\n var ele;\n var popupPri = [];\n if (select('#' + element.id + '_popup.' + CLS_POPUPCLASS, element)) {\n ele = select('#' + element.id + '_popup.' + CLS_POPUPCLASS, element);\n }\n else {\n var extendEle = this.createElement('div', {\n id: element.id + '_popup', className: CLS_POPUPCLASS + ' ' + CLS_EXTENDABLECLASS\n });\n var popupEle = this.createElement('div', { id: element.id + '_popup', className: CLS_POPUPCLASS });\n ele = this.overflowMode === 'Extended' ? extendEle : popupEle;\n }\n this.pushingPoppedEle(this, popupPri, ele, eleHeight, sepHeight);\n this.popupInit(element, ele);\n };\n Toolbar.prototype.getElementOffsetY = function () {\n return (this.overflowMode === 'Extended' && window.getComputedStyle(this.element).getPropertyValue('box-sizing') === 'border-box' ?\n this.element.clientHeight : this.element.offsetHeight);\n };\n Toolbar.prototype.popupInit = function (element, ele) {\n if (!this.popObj) {\n element.appendChild(ele);\n if (this.cssClass) {\n addClass([ele], this.cssClass.split(' '));\n }\n setStyle(this.element, { overflow: '' });\n var eleStyles = window.getComputedStyle(this.element);\n var popup = new Popup(null, {\n relateTo: this.element,\n offsetY: (this.isVertical) ? 0 : this.getElementOffsetY(),\n enableRtl: this.enableRtl,\n open: this.popupOpen.bind(this),\n close: this.popupClose.bind(this),\n collision: { Y: this.enableCollision ? 'flip' : 'none' },\n position: this.enableRtl ? { X: 'left', Y: 'top' } : { X: 'right', Y: 'top' }\n });\n if (this.overflowMode === 'Extended') {\n popup.width = parseFloat(eleStyles.width) + ((parseFloat(eleStyles.borderRightWidth)) * 2);\n popup.offsetX = 0;\n }\n popup.appendTo(ele);\n EventHandler.add(document, 'scroll', this.docEvent.bind(this));\n EventHandler.add(document, 'click ', this.docEvent.bind(this));\n popup.element.style.maxHeight = popup.element.offsetHeight + 'px';\n if (this.isVertical) {\n popup.element.style.visibility = 'hidden';\n }\n if (this.isExtendedOpen) {\n var popupNav = this.element.querySelector('.' + CLS_TBARNAV);\n popupNav.classList.add(CLS_TBARNAVACT);\n classList(popupNav.firstElementChild, [CLS_POPUPICON], [CLS_POPUPDOWN]);\n this.element.querySelector('.' + CLS_EXTENDABLECLASS).classList.add(CLS_POPUPOPEN);\n }\n else {\n popup.hide();\n }\n this.popObj = popup;\n }\n else {\n var popupEle = this.popObj.element;\n setStyle(popupEle, { maxHeight: '', display: 'block' });\n setStyle(popupEle, { maxHeight: popupEle.offsetHeight + 'px', display: '' });\n }\n };\n Toolbar.prototype.tbarPopupHandler = function (isOpen) {\n if (this.overflowMode === 'Extended') {\n if (isOpen) {\n this.add(this.element, CLS_EXTENDEDPOPOPEN);\n }\n else {\n this.remove(this.element, CLS_EXTENDEDPOPOPEN);\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Toolbar.prototype.popupOpen = function (e) {\n var popObj = this.popObj;\n if (!this.isVertical) {\n popObj.offsetY = this.getElementOffsetY();\n popObj.dataBind();\n }\n var popupEle = this.popObj.element;\n var toolEle = this.popObj.element.parentElement;\n var popupNav = toolEle.querySelector('.' + CLS_TBARNAV);\n popupNav.setAttribute('aria-expanded', 'true');\n setStyle(popObj.element, { height: 'auto', maxHeight: '' });\n popObj.element.style.maxHeight = popObj.element.offsetHeight + 'px';\n if (this.overflowMode === 'Extended') {\n popObj.element.style.minHeight = '';\n }\n var popupElePos = popupEle.offsetTop + popupEle.offsetHeight + calculatePosition(toolEle).top;\n var popIcon = popupNav.firstElementChild;\n popupNav.classList.add(CLS_TBARNAVACT);\n classList(popIcon, [CLS_POPUPICON], [CLS_POPUPDOWN]);\n this.tbarPopupHandler(true);\n var scrollVal = isNOU(window.scrollY) ? 0 : window.scrollY;\n if (!this.isVertical && ((window.innerHeight + scrollVal) < popupElePos) && (this.element.offsetTop < popupEle.offsetHeight)) {\n var overflowHeight = (popupEle.offsetHeight - ((popupElePos - window.innerHeight - scrollVal) + 5));\n popObj.height = overflowHeight + 'px';\n for (var i = 0; i <= popupEle.childElementCount; i++) {\n var ele = popupEle.children[parseInt(i.toString(), 10)];\n if (ele.offsetTop + ele.offsetHeight > overflowHeight) {\n overflowHeight = ele.offsetTop;\n break;\n }\n }\n setStyle(popObj.element, { maxHeight: overflowHeight + 'px' });\n }\n else if (this.isVertical) {\n var tbEleData = this.element.getBoundingClientRect();\n setStyle(popObj.element, { maxHeight: (tbEleData.top + this.element.offsetHeight) + 'px', bottom: 0, visibility: '' });\n }\n if (popObj) {\n var popupOffset = popupEle.getBoundingClientRect();\n if (popupOffset.right > document.documentElement.clientWidth && popupOffset.width > toolEle.getBoundingClientRect().width) {\n popObj.collision = { Y: 'none' };\n popObj.dataBind();\n }\n popObj.refreshPosition();\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Toolbar.prototype.popupClose = function (e) {\n var element = this.element;\n var popupNav = element.querySelector('.' + CLS_TBARNAV);\n popupNav.setAttribute('aria-expanded', 'false');\n var popIcon = popupNav.firstElementChild;\n popupNav.classList.remove(CLS_TBARNAVACT);\n classList(popIcon, [CLS_POPUPDOWN], [CLS_POPUPICON]);\n this.tbarPopupHandler(false);\n };\n Toolbar.prototype.checkPriority = function (ele, inEle, eleWidth, pre) {\n var popPriority = this.popupPriCount > 0;\n var len = inEle.length;\n var eleWid = eleWidth;\n var eleOffset;\n var checkoffset;\n var sepCheck = 0;\n var itemCount = 0;\n var itemPopCount = 0;\n var checkClass = function (ele, val) {\n var rVal = false;\n val.forEach(function (cls) {\n if (ele.classList.contains(cls)) {\n rVal = true;\n }\n });\n return rVal;\n };\n for (var i = len - 1; i >= 0; i--) {\n var mrgn = void 0;\n var compuStyle = window.getComputedStyle(inEle[parseInt(i.toString(), 10)]);\n if (this.isVertical) {\n mrgn = parseFloat((compuStyle).marginTop);\n mrgn += parseFloat((compuStyle).marginBottom);\n }\n else {\n mrgn = parseFloat((compuStyle).marginRight);\n mrgn += parseFloat((compuStyle).marginLeft);\n }\n var fstEleCheck = inEle[parseInt(i.toString(), 10)] === this.tbarEle[0];\n if (fstEleCheck) {\n this.tbarEleMrgn = mrgn;\n }\n eleOffset = this.isVertical ? inEle[parseInt(i.toString(), 10)].offsetHeight : inEle[parseInt(i.toString(), 10)].offsetWidth;\n var eleWid_1 = fstEleCheck ? (eleOffset + mrgn) : eleOffset;\n if (checkClass(inEle[parseInt(i.toString(), 10)], [CLS_POPPRI]) && popPriority) {\n inEle[parseInt(i.toString(), 10)].classList.add(CLS_POPUP);\n if (this.isVertical) {\n setStyle(inEle[parseInt(i.toString(), 10)], { display: 'none', minHeight: eleWid_1 + 'px' });\n }\n else {\n setStyle(inEle[parseInt(i.toString(), 10)], { display: 'none', minWidth: eleWid_1 + 'px' });\n }\n itemPopCount++;\n }\n if (this.isVertical) {\n checkoffset =\n (inEle[parseInt(i.toString(), 10)].offsetTop + inEle[parseInt(i.toString(), 10)].offsetHeight + mrgn) > eleWidth;\n }\n else {\n checkoffset =\n (inEle[parseInt(i.toString(), 10)].offsetLeft + inEle[parseInt(i.toString(), 10)].offsetWidth + mrgn) > eleWidth;\n }\n if (checkoffset) {\n if (inEle[parseInt(i.toString(), 10)].classList.contains(CLS_SEPARATOR)) {\n if (this.overflowMode === 'Extended') {\n var sepEle = inEle[parseInt(i.toString(), 10)];\n if (checkClass(sepEle, [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n inEle[parseInt(i.toString(), 10)].classList.add(CLS_POPUP);\n itemPopCount++;\n }\n itemCount++;\n }\n else if (this.overflowMode === 'Popup') {\n if (sepCheck > 0 && itemCount === itemPopCount) {\n var sepEle = inEle[i + itemCount + (sepCheck - 1)];\n if (checkClass(sepEle, [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n setStyle(sepEle, { display: 'none' });\n }\n }\n sepCheck++;\n itemCount = 0;\n itemPopCount = 0;\n }\n }\n else {\n itemCount++;\n }\n if (inEle[parseInt(i.toString(), 10)].classList.contains(CLS_TBAROVERFLOW) && pre) {\n eleWidth -= ((this.isVertical ? inEle[parseInt(i.toString(), 10)].offsetHeight :\n inEle[parseInt(i.toString(), 10)].offsetWidth) + (mrgn));\n }\n else if (!checkClass(inEle[parseInt(i.toString(), 10)], [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n inEle[parseInt(i.toString(), 10)].classList.add(CLS_POPUP);\n if (this.isVertical) {\n setStyle(inEle[parseInt(i.toString(), 10)], { display: 'none', minHeight: eleWid_1 + 'px' });\n }\n else {\n setStyle(inEle[parseInt(i.toString(), 10)], { display: 'none', minWidth: eleWid_1 + 'px' });\n }\n itemPopCount++;\n }\n else {\n eleWidth -= ((this.isVertical ? inEle[parseInt(i.toString(), 10)].offsetHeight :\n inEle[parseInt(i.toString(), 10)].offsetWidth) + (mrgn));\n }\n }\n }\n if (pre) {\n var popedEle = selectAll('.' + CLS_ITEM + ':not(.' + CLS_POPUP + ')', this.element);\n this.checkPriority(ele, popedEle, eleWid, false);\n }\n };\n Toolbar.prototype.createPopupIcon = function (element) {\n var id = element.id.concat('_nav');\n var className = 'e-' + element.id.concat('_nav ' + CLS_POPUPNAV);\n className = this.overflowMode === 'Extended' ? className + ' ' + CLS_EXTENDPOPUP : className;\n var nav = this.createElement('div', { id: id, className: className });\n if (Browser.info.name === 'msie' || Browser.info.name === 'edge') {\n nav.classList.add('e-ie-align');\n }\n var navItem = this.createElement('div', { className: CLS_POPUPDOWN + ' e-icons' });\n nav.appendChild(navItem);\n nav.setAttribute('tabindex', '0');\n nav.setAttribute('role', 'button');\n element.appendChild(nav);\n };\n Toolbar.prototype.tbarPriRef = function (inEle, indx, sepPri, el, des, elWid, wid, ig, eleStyles) {\n var ignoreCount = ig;\n var popEle = this.popObj.element;\n var query = '.' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + '):not(.' + CLS_TBAROVERFLOW + ')';\n var priEleCnt = selectAll('.' + CLS_POPUP + ':not(.' + CLS_TBAROVERFLOW + ')', popEle).length;\n var checkClass = function (ele, val) {\n return ele.classList.contains(val);\n };\n if (selectAll(query, inEle).length === 0) {\n var eleSep = inEle.children[indx - (indx - sepPri) - 1];\n var ignoreCheck = (!isNOU(eleSep) && checkClass(eleSep, CLS_TBARIGNORE));\n if ((!isNOU(eleSep) && checkClass(eleSep, CLS_SEPARATOR) && !isVisible(eleSep)) || ignoreCheck) {\n eleSep.style.display = 'unset';\n var eleSepWidth = eleSep.offsetWidth + (parseFloat(window.getComputedStyle(eleSep).marginRight) * 2);\n var prevSep = eleSep.previousElementSibling;\n if ((elWid + eleSepWidth) < wid || des) {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - (indx - sepPri)]);\n if (!isNOU(prevSep)) {\n prevSep.style.display = '';\n }\n }\n else {\n setStyle(el, eleStyles);\n if (prevSep.classList.contains(CLS_SEPARATOR)) {\n prevSep.style.display = 'none';\n }\n }\n eleSep.style.display = '';\n }\n else {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - (indx - sepPri)]);\n }\n }\n else {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - priEleCnt]);\n }\n };\n Toolbar.prototype.popupRefresh = function (popupEle, destroy) {\n var _this = this;\n var ele = this.element;\n var isVer = this.isVertical;\n var innerEle = ele.querySelector('.' + CLS_ITEMS);\n var popNav = ele.querySelector('.' + CLS_TBARNAV);\n if (isNOU(popNav)) {\n return;\n }\n innerEle.removeAttribute('style');\n popupEle.style.display = 'block';\n var dimension;\n if (isVer) {\n dimension = ele.offsetHeight - (popNav.offsetHeight + innerEle.offsetHeight);\n }\n else {\n dimension = ele.offsetWidth - (popNav.offsetWidth + innerEle.offsetWidth);\n }\n var popupEleWidth = 0;\n [].slice.call(popupEle.children).forEach(function (el) {\n popupEleWidth += _this.popupEleWidth(el);\n setStyle(el, { 'position': '' });\n });\n if ((dimension + (isVer ? popNav.offsetHeight : popNav.offsetWidth)) > (popupEleWidth) && this.popupPriCount === 0) {\n destroy = true;\n }\n this.popupEleRefresh(dimension, popupEle, destroy);\n popupEle.style.display = '';\n if (popupEle.children.length === 0 && popNav && this.popObj) {\n detach(popNav);\n popNav = null;\n this.popObj.destroy();\n detach(this.popObj.element);\n this.popObj = null;\n }\n };\n Toolbar.prototype.ignoreEleFetch = function (index, innerEle) {\n var ignoreEle = [].slice.call(innerEle.querySelectorAll('.' + CLS_TBARIGNORE));\n var ignoreInx = [];\n var count = 0;\n if (ignoreEle.length > 0) {\n ignoreEle.forEach(function (ele) {\n ignoreInx.push([].slice.call(innerEle.children).indexOf(ele));\n });\n }\n else {\n return 0;\n }\n ignoreInx.forEach(function (val) {\n if (val <= index) {\n count++;\n }\n });\n return count;\n };\n Toolbar.prototype.checkPopupRefresh = function (root, popEle) {\n popEle.style.display = 'block';\n var elWid = this.popupEleWidth(popEle.firstElementChild);\n popEle.firstElementChild.style.removeProperty('Position');\n var tbarWidth = root.offsetWidth - root.querySelector('.' + CLS_TBARNAV).offsetWidth;\n var tbarItemsWid = root.querySelector('.' + CLS_ITEMS).offsetWidth;\n popEle.style.removeProperty('display');\n if (tbarWidth > (elWid + tbarItemsWid)) {\n return true;\n }\n return false;\n };\n Toolbar.prototype.popupEleWidth = function (el) {\n el.style.position = 'absolute';\n var elWidth = this.isVertical ? el.offsetHeight : el.offsetWidth;\n var btnText = el.querySelector('.' + CLS_TBARBTNTEXT);\n if (el.classList.contains('e-tbtn-align') || el.classList.contains(CLS_TBARTEXT)) {\n var btn = el.children[0];\n if (!isNOU(btnText) && el.classList.contains(CLS_TBARTEXT)) {\n btnText.style.display = 'none';\n }\n else if (!isNOU(btnText) && el.classList.contains(CLS_POPUPTEXT)) {\n btnText.style.display = 'block';\n }\n btn.style.minWidth = '0%';\n elWidth = parseFloat(!this.isVertical ? el.style.minWidth : el.style.minHeight);\n btn.style.minWidth = '';\n btn.style.minHeight = '';\n if (!isNOU(btnText)) {\n btnText.style.display = '';\n }\n }\n return elWidth;\n };\n Toolbar.prototype.popupEleRefresh = function (width, popupEle, destroy) {\n var popPriority = this.popupPriCount > 0;\n var eleSplice = this.tbarEle;\n var priEleCnt;\n var index;\n var innerEle = this.element.querySelector('.' + CLS_ITEMS);\n var ignoreCount = 0;\n var _loop_1 = function (el) {\n if (el.classList.contains(CLS_POPPRI) && popPriority && !destroy) {\n return \"continue\";\n }\n var elWidth = this_1.popupEleWidth(el);\n if (el === this_1.tbarEle[0]) {\n elWidth += this_1.tbarEleMrgn;\n }\n el.style.position = '';\n if (elWidth < width || destroy) {\n var inlineStyles = { minWidth: el.style.minWidth, height: el.style.height, minHeight: el.style.minHeight };\n setStyle(el, { minWidth: '', height: '', minHeight: '' });\n if (!el.classList.contains(CLS_POPOVERFLOW)) {\n el.classList.remove(CLS_POPUP);\n }\n index = this_1.tbarEle.indexOf(el);\n if (this_1.tbarAlign) {\n var pos = this_1.items[parseInt(index.toString(), 10)].align;\n index = this_1.tbarAlgEle[(pos + 's').toLowerCase()].indexOf(el);\n eleSplice = this_1.tbarAlgEle[(pos + 's').toLowerCase()];\n innerEle = this_1.element.querySelector('.' + CLS_ITEMS + ' .' + 'e-toolbar-' + pos.toLowerCase());\n }\n var sepBeforePri_1 = 0;\n if (this_1.overflowMode !== 'Extended') {\n eleSplice.slice(0, index).forEach(function (el) {\n if (el.classList.contains(CLS_TBAROVERFLOW) || el.classList.contains(CLS_SEPARATOR)) {\n if (el.classList.contains(CLS_SEPARATOR)) {\n el.style.display = '';\n width -= el.offsetWidth;\n }\n sepBeforePri_1++;\n }\n });\n }\n ignoreCount = this_1.ignoreEleFetch(index, innerEle);\n if (el.classList.contains(CLS_TBAROVERFLOW)) {\n this_1.tbarPriRef(innerEle, index, sepBeforePri_1, el, destroy, elWidth, width, ignoreCount, inlineStyles);\n width -= el.offsetWidth;\n }\n else if (index === 0) {\n innerEle.insertBefore(el, innerEle.firstChild);\n width -= el.offsetWidth;\n }\n else {\n priEleCnt = selectAll('.' + CLS_TBAROVERFLOW, this_1.popObj.element).length;\n innerEle.insertBefore(el, innerEle.children[(index + ignoreCount) - priEleCnt]);\n width -= el.offsetWidth;\n }\n el.style.height = '';\n }\n else {\n return \"break\";\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = [].slice.call(popupEle.children); _i < _a.length; _i++) {\n var el = _a[_i];\n var state_1 = _loop_1(el);\n if (state_1 === \"break\")\n break;\n }\n var checkOverflow = this.checkOverflow(this.element, this.element.getElementsByClassName(CLS_ITEMS)[0]);\n if (checkOverflow && !destroy) {\n this.renderOverflowMode();\n }\n };\n Toolbar.prototype.removePositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n if (isNOU(item) || !item.classList.contains(CLS_TBARPOS)) {\n return;\n }\n this.remove(item, CLS_TBARPOS);\n var innerItem = [].slice.call(item.childNodes);\n innerItem[1].removeAttribute('style');\n innerItem[2].removeAttribute('style');\n };\n Toolbar.prototype.refreshPositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n this.add(item, CLS_TBARPOS);\n this.itemPositioning();\n };\n Toolbar.prototype.itemPositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n var margin;\n if (isNOU(item) || !item.classList.contains(CLS_TBARPOS)) {\n return;\n }\n var popupNav = this.element.querySelector('.' + CLS_TBARNAV);\n var innerItem;\n if (this.scrollModule) {\n var trgClass = (this.isVertical) ? CLS_VSCROLLCNT : CLS_HSCROLLCNT;\n innerItem = [].slice.call(item.querySelector('.' + trgClass).children);\n }\n else {\n innerItem = [].slice.call(item.childNodes);\n }\n if (this.isVertical) {\n margin = innerItem[0].offsetHeight + innerItem[2].offsetHeight;\n }\n else {\n margin = innerItem[0].offsetWidth + innerItem[2].offsetWidth;\n }\n var tbarWid = this.isVertical ? this.element.offsetHeight : this.element.offsetWidth;\n if (popupNav) {\n tbarWid -= (this.isVertical ? popupNav.offsetHeight : popupNav.offsetWidth);\n var popWid = (this.isVertical ? popupNav.offsetHeight : popupNav.offsetWidth) + 'px';\n innerItem[2].removeAttribute('style');\n if (this.isVertical) {\n if (this.enableRtl) {\n innerItem[2].style.top = popWid;\n }\n else {\n innerItem[2].style.bottom = popWid;\n }\n }\n else {\n if (this.enableRtl) {\n innerItem[2].style.left = popWid;\n }\n else {\n innerItem[2].style.right = popWid;\n }\n }\n }\n if (tbarWid <= margin) {\n return;\n }\n var value = (((tbarWid - margin)) - (!this.isVertical ? innerItem[1].offsetWidth : innerItem[1].offsetHeight)) / 2;\n innerItem[1].removeAttribute('style');\n var mrgn = ((!this.isVertical ? innerItem[0].offsetWidth : innerItem[0].offsetHeight) + value) + 'px';\n if (this.isVertical) {\n if (this.enableRtl) {\n innerItem[1].style.marginBottom = mrgn;\n }\n else {\n innerItem[1].style.marginTop = mrgn;\n }\n }\n else {\n if (this.enableRtl) {\n innerItem[1].style.marginRight = mrgn;\n }\n else {\n innerItem[1].style.marginLeft = mrgn;\n }\n }\n };\n Toolbar.prototype.tbarItemAlign = function (item, itemEle, pos) {\n var _this = this;\n if (item.showAlwaysInPopup && item.overflow !== 'Show') {\n return;\n }\n var alignDiv = [];\n alignDiv.push(this.createElement('div', { className: CLS_TBARLEFT }));\n alignDiv.push(this.createElement('div', { className: CLS_TBARCENTER }));\n alignDiv.push(this.createElement('div', { className: CLS_TBARRIGHT }));\n if (pos === 0 && item.align !== 'Left') {\n alignDiv.forEach(function (ele) {\n itemEle.appendChild(ele);\n });\n this.tbarAlign = true;\n this.add(itemEle, CLS_TBARPOS);\n }\n else if (item.align !== 'Left') {\n var alignEle = itemEle.childNodes;\n var leftAlign_1 = alignDiv[0];\n [].slice.call(alignEle).forEach(function (el) {\n _this.tbarAlgEle.lefts.push(el);\n leftAlign_1.appendChild(el);\n });\n itemEle.appendChild(leftAlign_1);\n itemEle.appendChild(alignDiv[1]);\n itemEle.appendChild(alignDiv[2]);\n this.tbarAlign = true;\n this.add(itemEle, CLS_TBARPOS);\n }\n };\n Toolbar.prototype.ctrlTemplate = function () {\n var _this = this;\n this.ctrlTem = this.trgtEle.cloneNode(true);\n this.add(this.trgtEle, CLS_ITEMS);\n this.tbarEle = [];\n var innerEle = [].slice.call(this.trgtEle.children);\n innerEle.forEach(function (ele) {\n if (ele.tagName === 'DIV') {\n _this.tbarEle.push(ele);\n if (!isNOU(ele.firstElementChild)) {\n ele.firstElementChild.setAttribute('aria-disabled', 'false');\n }\n _this.add(ele, CLS_ITEM);\n }\n });\n };\n Toolbar.prototype.renderItems = function () {\n var ele = this.element;\n var items = this.items;\n if (this.trgtEle != null) {\n this.ctrlTemplate();\n }\n else if (ele && items.length > 0) {\n var itemEleDom = void 0;\n if (ele && ele.children.length > 0) {\n itemEleDom = ele.querySelector('.' + CLS_ITEMS);\n }\n if (!itemEleDom) {\n itemEleDom = this.createElement('div', { className: CLS_ITEMS });\n }\n this.itemsAlign(items, itemEleDom);\n ele.appendChild(itemEleDom);\n }\n };\n Toolbar.prototype.setAttr = function (attr, element) {\n var key = Object.keys(attr);\n var keyVal;\n for (var i = 0; i < key.length; i++) {\n keyVal = key[parseInt(i.toString(), 10)];\n if (keyVal === 'class') {\n this.add(element, attr[\"\" + keyVal]);\n }\n else {\n element.setAttribute(keyVal, attr[\"\" + keyVal]);\n }\n }\n };\n /**\n * Enables or disables the specified Toolbar item.\n *\n * @param {number|HTMLElement|NodeList} items - DOM element or an array of items to be enabled or disabled.\n * @param {boolean} isEnable - Boolean value that determines whether the command should be enabled or disabled.\n * By default, `isEnable` is set to true.\n * @returns {void}.\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n var elements = items;\n var len = elements.length;\n var ele;\n if (isNOU(isEnable)) {\n isEnable = true;\n }\n var enable = function (isEnable, ele) {\n if (isEnable) {\n ele.classList.remove(CLS_DISABLE);\n if (!isNOU(ele.firstElementChild)) {\n ele.firstElementChild.setAttribute('aria-disabled', 'false');\n }\n }\n else {\n ele.classList.add(CLS_DISABLE);\n if (!isNOU(ele.firstElementChild)) {\n ele.firstElementChild.setAttribute('aria-disabled', 'true');\n }\n }\n };\n if (!isNOU(len) && len >= 1) {\n for (var a = 0, element = [].slice.call(elements); a < len; a++) {\n var itemElement = element[parseInt(a.toString(), 10)];\n if (typeof (itemElement) === 'number') {\n ele = this.getElementByIndex(itemElement);\n if (isNOU(ele)) {\n return;\n }\n else {\n elements[parseInt(a.toString(), 10)] = ele;\n }\n }\n else {\n ele = itemElement;\n }\n enable(isEnable, ele);\n }\n if (isEnable) {\n removeClass(elements, CLS_DISABLE);\n }\n else {\n addClass(elements, CLS_DISABLE);\n }\n }\n else {\n if (typeof (elements) === 'number') {\n ele = this.getElementByIndex(elements);\n if (isNOU(ele)) {\n return;\n }\n }\n else {\n ele = items;\n }\n enable(isEnable, ele);\n }\n };\n Toolbar.prototype.getElementByIndex = function (index) {\n if (this.tbarEle[parseInt(index.toString(), 10)]) {\n return this.tbarEle[parseInt(index.toString(), 10)];\n }\n return null;\n };\n /**\n * Adds new items to the Toolbar that accepts an array as Toolbar items.\n *\n * @param {ItemModel[]} items - DOM element or an array of items to be added to the Toolbar.\n * @param {number} index - Number value that determines where the command is to be added. By default, index is 0.\n * @returns {void}.\n */\n Toolbar.prototype.addItems = function (items, index) {\n var innerItems;\n this.extendedOpen();\n var itemsDiv = this.element.querySelector('.' + CLS_ITEMS);\n if (isNOU(itemsDiv)) {\n this.itemsRerender(items);\n return;\n }\n var innerEle;\n var itemAgn = 'Left';\n if (isNOU(index)) {\n index = 0;\n }\n items.forEach(function (e) {\n if (!isNOU(e.align) && e.align !== 'Left' && itemAgn === 'Left') {\n itemAgn = e.align;\n }\n });\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n var item = items_1[_i];\n if (isNOU(item.type)) {\n item.type = 'Button';\n }\n innerItems = selectAll('.' + CLS_ITEM, this.element);\n item.align = itemAgn;\n innerEle = this.renderSubComponent(item, index);\n if (this.tbarEle.length >= index && innerItems.length >= 0) {\n if (isNOU(this.scrollModule)) {\n this.destroyMode();\n }\n var algIndex = item.align[0] === 'L' ? 0 : item.align[0] === 'C' ? 1 : 2;\n var ele = void 0;\n if (!this.tbarAlign && itemAgn !== 'Left') {\n this.tbarItemAlign(item, itemsDiv, 1);\n this.tbarAlign = true;\n ele = closest(innerItems[0], '.' + CLS_ITEMS).children[parseInt(algIndex.toString(), 10)];\n ele.appendChild(innerEle);\n this.tbarAlgEle[(item.align + 's').toLowerCase()].push(innerEle);\n this.refreshPositioning();\n }\n else if (this.tbarAlign) {\n ele = closest(innerItems[0], '.' + CLS_ITEMS).children[parseInt(algIndex.toString(), 10)];\n ele.insertBefore(innerEle, ele.children[parseInt(index.toString(), 10)]);\n this.tbarAlgEle[(item.align + 's').toLowerCase()].splice(index, 0, innerEle);\n this.refreshPositioning();\n }\n else if (innerItems.length === 0) {\n innerItems = selectAll('.' + CLS_ITEMS, this.element);\n innerItems[0].appendChild(innerEle);\n }\n else {\n innerItems[0].parentNode.insertBefore(innerEle, innerItems[parseInt(index.toString(), 10)]);\n }\n this.items.splice(index, 0, item);\n if (item.template) {\n this.tbarEle.splice(this.tbarEle.length - 1, 1);\n }\n this.tbarEle.splice(index, 0, innerEle);\n index++;\n this.offsetWid = itemsDiv.offsetWidth;\n }\n }\n itemsDiv.style.width = '';\n this.renderOverflowMode();\n if (this.isReact) {\n this.renderReactTemplates();\n }\n };\n /**\n * Removes the items from the Toolbar. Acceptable arguments are index of item/HTMLElement/node list.\n *\n * @param {number|HTMLElement|NodeList|HTMLElement[]} args\n * Index or DOM element or an Array of item which is to be removed from the Toolbar.\n * @returns {void}.\n */\n Toolbar.prototype.removeItems = function (args) {\n var elements = args;\n var index;\n var innerItems = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n if (typeof (elements) === 'number') {\n index = parseInt(args.toString(), 10);\n this.removeItemByIndex(index, innerItems);\n }\n else {\n if (elements && elements.length > 1) {\n for (var _i = 0, _a = [].slice.call(elements); _i < _a.length; _i++) {\n var ele = _a[_i];\n index = this.tbarEle.indexOf(ele);\n this.removeItemByIndex(index, innerItems);\n innerItems = selectAll('.' + CLS_ITEM, this.element);\n }\n }\n else {\n var ele = (elements && elements.length && elements.length === 1) ? elements[0] : args;\n index = innerItems.indexOf(ele);\n this.removeItemByIndex(index, innerItems);\n }\n }\n this.resize();\n };\n Toolbar.prototype.removeItemByIndex = function (index, innerItems) {\n if (this.tbarEle[parseInt(index.toString(), 10)] && innerItems[parseInt(index.toString(), 10)]) {\n var eleIdx = this.tbarEle.indexOf(innerItems[parseInt(index.toString(), 10)]);\n if (this.tbarAlign) {\n var indexAgn = this.tbarAlgEle[(this.items[parseInt(eleIdx.toString(), 10)].align + 's').toLowerCase()].indexOf(this.tbarEle[parseInt(eleIdx.toString(), 10)]);\n this.tbarAlgEle[(this.items[parseInt(eleIdx.toString(), 10)].align + 's').toLowerCase()].splice(parseInt(indexAgn.toString(), 10), 1);\n }\n if (this.isReact) {\n this.clearToolbarTemplate(innerItems[parseInt(index.toString(), 10)]);\n }\n var btnItem = innerItems[parseInt(index.toString(), 10)].querySelector('.e-control.e-btn');\n if (!isNOU(btnItem) && !isNOU(btnItem.ej2_instances[0]) && !(btnItem.ej2_instances[0].isDestroyed)) {\n btnItem.ej2_instances[0].destroy();\n }\n detach(innerItems[parseInt(index.toString(), 10)]);\n this.items.splice(eleIdx, 1);\n this.tbarEle.splice(eleIdx, 1);\n }\n };\n Toolbar.prototype.templateRender = function (templateProp, innerEle, item, index) {\n var itemType = item.type;\n var eleObj = templateProp;\n var isComponent;\n if (typeof (templateProp) === 'object') {\n isComponent = typeof (eleObj.appendTo) === 'function';\n }\n if (typeof (templateProp) === 'string' || !isComponent) {\n var templateFn = void 0;\n var val = templateProp;\n var regEx = new RegExp(/<(?=.*? .*?\\/ ?>|br|hr|input|!--|wbr)[a-z]+.*?>|<([a-z]+).*?<\\/\\1>/i);\n val = (typeof (templateProp) === 'string') ? templateProp.trim() : templateProp;\n try {\n if (typeof (templateProp) === 'object' && !isNOU(templateProp.tagName)) {\n innerEle.appendChild(templateProp);\n }\n else if (typeof (templateProp) === 'string' && regEx.test(val)) {\n innerEle.innerHTML = val;\n }\n else if (document.querySelectorAll(val).length) {\n var ele = document.querySelector(val);\n var tempStr = ele.outerHTML.trim();\n innerEle.appendChild(ele);\n ele.style.display = '';\n if (!isNOU(tempStr)) {\n this.tempId.push(val);\n }\n }\n else {\n templateFn = templateCompiler(val);\n }\n }\n catch (e) {\n templateFn = templateCompiler(val);\n }\n var tempArray = void 0;\n if (!isNOU(templateFn)) {\n var toolbarTemplateID = this.element.id + index + '_template';\n tempArray = templateFn({}, this, 'template', toolbarTemplateID, this.isStringTemplate);\n }\n if (!isNOU(tempArray) && tempArray.length > 0) {\n [].slice.call(tempArray).forEach(function (ele) {\n if (!isNOU(ele.tagName)) {\n ele.style.display = '';\n }\n innerEle.appendChild(ele);\n });\n }\n }\n else if (itemType === 'Input') {\n var ele = this.createElement('input');\n if (item.id) {\n ele.id = item.id;\n }\n else {\n ele.id = getUniqueID('tbr-ipt');\n }\n innerEle.appendChild(ele);\n eleObj.appendTo(ele);\n }\n this.add(innerEle, CLS_TEMPLATE);\n this.tbarEle.push(innerEle);\n };\n Toolbar.prototype.buttonRendering = function (item, innerEle) {\n var dom = this.createElement('button', { className: CLS_TBARBTN });\n dom.setAttribute('type', 'button');\n var textStr = item.text;\n var iconCss;\n var iconPos;\n if (item.id) {\n dom.id = item.id;\n }\n else {\n dom.id = getUniqueID('e-tbr-btn');\n }\n var btnTxt = this.createElement('span', { className: 'e-tbar-btn-text' });\n if (textStr) {\n btnTxt.innerHTML = this.enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(textStr) : textStr;\n dom.appendChild(btnTxt);\n dom.classList.add('e-tbtn-txt');\n }\n else {\n this.add(innerEle, 'e-tbtn-align');\n }\n if (item.prefixIcon || item.suffixIcon) {\n if ((item.prefixIcon && item.suffixIcon) || item.prefixIcon) {\n iconCss = item.prefixIcon + ' e-icons';\n iconPos = 'Left';\n }\n else {\n iconCss = item.suffixIcon + ' e-icons';\n iconPos = 'Right';\n }\n }\n var btnObj = new Button({ iconCss: iconCss, iconPosition: iconPos });\n btnObj.createElement = this.createElement;\n btnObj.appendTo(dom);\n if (item.width) {\n setStyle(dom, { 'width': formatUnit(item.width) });\n }\n return dom;\n };\n Toolbar.prototype.renderSubComponent = function (item, index) {\n var dom;\n var innerEle = this.createElement('div', { className: CLS_ITEM });\n var tempDom = this.createElement('div', {\n innerHTML: this.enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(item.tooltipText) : item.tooltipText\n });\n if (!this.tbarEle) {\n this.tbarEle = [];\n }\n if (item.htmlAttributes) {\n this.setAttr(item.htmlAttributes, innerEle);\n }\n if (item.tooltipText) {\n innerEle.setAttribute('title', tempDom.textContent);\n }\n if (item.cssClass) {\n innerEle.className = innerEle.className + ' ' + item.cssClass;\n }\n if (item.template) {\n this.templateRender(item.template, innerEle, item, index);\n }\n else {\n switch (item.type) {\n case 'Button':\n dom = this.buttonRendering(item, innerEle);\n dom.setAttribute('tabindex', isNOU(item.tabIndex) ? '-1' : item.tabIndex.toString());\n dom.setAttribute('data-tabindex', isNOU(item.tabIndex) ? '-1' : item.tabIndex.toString());\n dom.setAttribute('aria-label', (item.text || item.tooltipText));\n dom.setAttribute('aria-disabled', 'false');\n innerEle.appendChild(dom);\n innerEle.addEventListener('click', this.itemClick.bind(this));\n break;\n case 'Separator':\n this.add(innerEle, CLS_SEPARATOR);\n break;\n }\n }\n if (item.showTextOn) {\n var sTxt = item.showTextOn;\n if (sTxt === 'Toolbar') {\n this.add(innerEle, CLS_POPUPTEXT);\n this.add(innerEle, 'e-tbtn-align');\n }\n else if (sTxt === 'Overflow') {\n this.add(innerEle, CLS_TBARTEXT);\n }\n }\n if (item.overflow) {\n var overflow = item.overflow;\n if (overflow === 'Show') {\n this.add(innerEle, CLS_TBAROVERFLOW);\n }\n else if (overflow === 'Hide') {\n if (!innerEle.classList.contains(CLS_SEPARATOR)) {\n this.add(innerEle, CLS_POPOVERFLOW);\n }\n }\n }\n if (item.overflow !== 'Show' && item.showAlwaysInPopup && !innerEle.classList.contains(CLS_SEPARATOR)) {\n this.add(innerEle, CLS_POPPRI);\n this.popupPriCount++;\n }\n if (item.disabled) {\n this.add(innerEle, CLS_DISABLE);\n }\n if (item.visible === false) {\n this.add(innerEle, CLS_HIDDEN);\n }\n return innerEle;\n };\n Toolbar.prototype.getDataTabindex = function (ele) {\n return isNOU(ele.getAttribute('data-tabindex')) ? '-1' : ele.getAttribute('data-tabindex');\n };\n Toolbar.prototype.itemClick = function (e) {\n this.activeEleSwitch(e.currentTarget);\n };\n Toolbar.prototype.activeEleSwitch = function (ele) {\n this.activeEleRemove(ele.firstElementChild);\n this.activeEle.focus();\n };\n Toolbar.prototype.activeEleRemove = function (curEle) {\n if (!isNOU(this.activeEle)) {\n this.activeEle.setAttribute('tabindex', this.getDataTabindex(this.activeEle));\n }\n this.activeEle = curEle;\n if (this.getDataTabindex(this.activeEle) === '-1') {\n if (isNOU(this.trgtEle) && !curEle.parentElement.classList.contains(CLS_TEMPLATE)) {\n this.updateTabIndex('-1');\n curEle.removeAttribute('tabindex');\n }\n else {\n this.activeEle.setAttribute('tabindex', this.getDataTabindex(this.activeEle));\n }\n }\n };\n Toolbar.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Returns the current module name.\n *\n * @returns {string} - Returns the module name as string.\n * @private\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n Toolbar.prototype.itemsRerender = function (newProp) {\n this.items = this.tbarItemsCol;\n if (this.isReact || this.isAngular) {\n this.clearTemplate();\n }\n this.destroyMode();\n this.destroyItems();\n this.items = newProp;\n this.tbarItemsCol = this.items;\n this.renderItems();\n this.renderOverflowMode();\n if (this.isReact) {\n this.renderReactTemplates();\n }\n };\n Toolbar.prototype.resize = function () {\n var ele = this.element;\n this.tbResize = true;\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n if (this.popObj && this.overflowMode === 'Popup') {\n this.popObj.hide();\n }\n var checkOverflow = this.checkOverflow(ele, ele.getElementsByClassName(CLS_ITEMS)[0]);\n if (!checkOverflow) {\n this.destroyScroll();\n var multirowele = ele.querySelector('.' + CLS_ITEMS);\n if (!isNOU(multirowele)) {\n this.remove(multirowele, CLS_MULTIROWPOS);\n if (this.tbarAlign) {\n this.add(multirowele, CLS_TBARPOS);\n }\n }\n }\n if (checkOverflow && this.scrollModule && (this.offsetWid === ele.offsetWidth)) {\n return;\n }\n if (this.offsetWid > ele.offsetWidth || checkOverflow) {\n this.renderOverflowMode();\n }\n if (this.popObj) {\n if (this.overflowMode === 'Extended') {\n var eleStyles = window.getComputedStyle(this.element);\n this.popObj.width = parseFloat(eleStyles.width) + ((parseFloat(eleStyles.borderRightWidth)) * 2);\n }\n if (this.tbarAlign) {\n this.removePositioning();\n }\n this.popupRefresh(this.popObj.element, false);\n if (this.tbarAlign) {\n this.refreshPositioning();\n }\n }\n if (this.element.querySelector('.' + CLS_HSCROLLBAR)) {\n this.scrollStep = this.element.querySelector('.' + CLS_HSCROLLBAR).offsetWidth;\n }\n this.offsetWid = ele.offsetWidth;\n this.tbResize = false;\n this.separator();\n };\n Toolbar.prototype.orientationChange = function () {\n var _this = this;\n setTimeout(function () {\n _this.resize();\n }, 500);\n };\n Toolbar.prototype.extendedOpen = function () {\n var sib = this.element.querySelector('.' + CLS_EXTENDABLECLASS);\n if (this.overflowMode === 'Extended' && sib) {\n this.isExtendedOpen = sib.classList.contains(CLS_POPUPOPEN);\n }\n };\n Toolbar.prototype.updateHideEleTabIndex = function (ele, isHidden, isElement, eleIndex, innerItems) {\n if (isElement) {\n eleIndex = innerItems.indexOf(ele);\n }\n var nextEle = innerItems[++eleIndex];\n while (nextEle) {\n var skipEle = this.eleContains(nextEle);\n if (!skipEle) {\n var dataTabIndex = nextEle.firstElementChild.getAttribute('data-tabindex');\n if (isHidden && dataTabIndex === '-1') {\n nextEle.firstElementChild.setAttribute('tabindex', '0');\n }\n else if (dataTabIndex !== nextEle.firstElementChild.getAttribute('tabindex')) {\n nextEle.firstElementChild.setAttribute('tabindex', dataTabIndex);\n }\n break;\n }\n nextEle = innerItems[++eleIndex];\n }\n };\n Toolbar.prototype.clearToolbarTemplate = function (templateEle) {\n if (this.registeredTemplate && this.registeredTemplate[\"\" + 'template']) {\n var registeredTemplates = this.registeredTemplate;\n for (var index = 0; index < registeredTemplates[\"\" + 'template'].length; index++) {\n var registeredItem = registeredTemplates[\"\" + 'template'][parseInt(index.toString(), 10)].rootNodes[0];\n var closestItem = closest(registeredItem, '.' + CLS_ITEM);\n if (!isNOU(closestItem) && closestItem === templateEle) {\n this.clearTemplate(['template'], [registeredTemplates[\"\" + 'template'][parseInt(index.toString(), 10)]]);\n break;\n }\n }\n }\n else if (this.portals && this.portals.length > 0) {\n var portals = this.portals;\n for (var index = 0; index < portals.length; index++) {\n var portalItem = portals[parseInt(index.toString(), 10)];\n var closestItem = closest(portalItem.containerInfo, '.' + CLS_ITEM);\n if (!isNOU(closestItem) && closestItem === templateEle) {\n this.clearTemplate(['template'], index);\n break;\n }\n }\n }\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of the property that changed.\n *\n * @param {ToolbarModel} newProp - It contains new value of the data.\n * @param {ToolbarModel} oldProp - It contains old value of the data.\n * @returns {void}\n * @private\n */\n Toolbar.prototype.onPropertyChanged = function (newProp, oldProp) {\n var tEle = this.element;\n var wid = tEle.offsetWidth;\n this.extendedOpen();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'items':\n if (!(newProp.items instanceof Array && oldProp.items instanceof Array)) {\n var changedProb = Object.keys(newProp.items);\n for (var i = 0; i < changedProb.length; i++) {\n var index = parseInt(Object.keys(newProp.items)[parseInt(i.toString(), 10)], 10);\n var property = Object.keys(newProp.items[parseInt(index.toString(), 10)])[0];\n var newProperty = Object(newProp.items[parseInt(index.toString(), 10)])[\"\" + property];\n if (this.tbarAlign || property === 'align') {\n this.refresh();\n this.trigger('created');\n break;\n }\n var popupPriCheck = property === 'showAlwaysInPopup' && !newProperty;\n var booleanCheck = property === 'overflow' && this.popupPriCount !== 0;\n if ((popupPriCheck) || (this.items[parseInt(index.toString(), 10)].showAlwaysInPopup) && booleanCheck) {\n --this.popupPriCount;\n }\n if (isNOU(this.scrollModule)) {\n this.destroyMode();\n }\n var itemCol = [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, tEle));\n if (this.isReact && this.items[parseInt(index.toString(), 10)].template) {\n this.clearToolbarTemplate(itemCol[parseInt(index.toString(), 10)]);\n }\n detach(itemCol[parseInt(index.toString(), 10)]);\n this.tbarEle.splice(index, 1);\n this.addItems([this.items[parseInt(index.toString(), 10)]], index);\n this.items.splice(index, 1);\n if (this.items[parseInt(index.toString(), 10)].template) {\n this.tbarEle.splice(this.items.length, 1);\n }\n }\n }\n else {\n this.itemsRerender(newProp.items);\n }\n break;\n case 'width':\n setStyle(tEle, { 'width': formatUnit(newProp.width) });\n this.refreshOverflow();\n break;\n case 'height':\n setStyle(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'overflowMode':\n this.destroyMode();\n this.renderOverflowMode();\n if (this.enableRtl) {\n this.add(tEle, CLS_RTL);\n }\n this.refreshOverflow();\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n this.add(tEle, CLS_RTL);\n }\n else {\n this.remove(tEle, CLS_RTL);\n }\n if (!isNOU(this.scrollModule)) {\n if (newProp.enableRtl) {\n this.add(this.scrollModule.element, CLS_RTL);\n }\n else {\n this.remove(this.scrollModule.element, CLS_RTL);\n }\n }\n if (!isNOU(this.popObj)) {\n if (newProp.enableRtl) {\n this.add(this.popObj.element, CLS_RTL);\n }\n else {\n this.remove(this.popObj.element, CLS_RTL);\n }\n }\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n break;\n case 'scrollStep':\n if (this.scrollModule) {\n this.scrollModule.scrollStep = this.scrollStep;\n }\n break;\n case 'enableCollision':\n if (this.popObj) {\n this.popObj.collision = { Y: this.enableCollision ? 'flip' : 'none' };\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.split(' '));\n }\n break;\n case 'allowKeyboard':\n this.unwireKeyboardEvent();\n if (newProp.allowKeyboard) {\n this.wireKeyboardEvent();\n }\n break;\n }\n }\n };\n /**\n * Shows or hides the Toolbar item that is in the specified index.\n *\n * @param {number | HTMLElement} index - Index value of target item or DOM element of items to be hidden or shown.\n * @param {boolean} value - Based on this Boolean value, item will be hide (true) or show (false). By default, value is false.\n * @returns {void}.\n */\n Toolbar.prototype.hideItem = function (index, value) {\n var isElement = (typeof (index) === 'object') ? true : false;\n var eleIndex = index;\n var ele;\n if (!isElement && isNOU(eleIndex)) {\n return;\n }\n var innerItems = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n if (isElement) {\n ele = index;\n }\n else if (this.tbarEle[parseInt(eleIndex.toString(), 10)]) {\n var innerItems_1 = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n ele = innerItems_1[parseInt(eleIndex.toString(), 10)];\n }\n if (ele) {\n if (value) {\n ele.classList.add(CLS_HIDDEN);\n if (!ele.classList.contains(CLS_SEPARATOR)) {\n if (isNOU(ele.firstElementChild.getAttribute('tabindex')) ||\n ele.firstElementChild.getAttribute('tabindex') !== '-1') {\n this.updateHideEleTabIndex(ele, value, isElement, eleIndex, innerItems);\n }\n }\n }\n else {\n ele.classList.remove(CLS_HIDDEN);\n if (!ele.classList.contains(CLS_SEPARATOR)) {\n this.updateHideEleTabIndex(ele, value, isElement, eleIndex, innerItems);\n }\n }\n this.refreshOverflow();\n }\n };\n __decorate([\n Collection([], Item)\n ], Toolbar.prototype, \"items\", void 0);\n __decorate([\n Property('auto')\n ], Toolbar.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Toolbar.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], Toolbar.prototype, \"cssClass\", void 0);\n __decorate([\n Property('Scrollable')\n ], Toolbar.prototype, \"overflowMode\", void 0);\n __decorate([\n Property()\n ], Toolbar.prototype, \"scrollStep\", void 0);\n __decorate([\n Property(true)\n ], Toolbar.prototype, \"enableCollision\", void 0);\n __decorate([\n Property(true)\n ], Toolbar.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(true)\n ], Toolbar.prototype, \"allowKeyboard\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"clicked\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"beforeCreate\", void 0);\n Toolbar = __decorate([\n NotifyPropertyChanges\n ], Toolbar);\n return Toolbar;\n}(Component));\nexport { Toolbar };\n","/* eslint-disable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\nimport { createElement, attributes, addClass, removeClass, detach, classList } from '@syncfusion/ej2-base';\nimport { closest, formatUnit, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nvar CLASSNAMES = {\n RTL: 'e-rtl',\n DISABLE: 'e-disabled',\n INPUT: 'e-input',\n TEXTAREA: 'e-multi-line-input',\n INPUTGROUP: 'e-input-group',\n FLOATINPUT: 'e-float-input',\n FLOATLINE: 'e-float-line',\n FLOATTEXT: 'e-float-text',\n FLOATTEXTCONTENT: 'e-float-text-content',\n CLEARICON: 'e-clear-icon',\n CLEARICONHIDE: 'e-clear-icon-hide',\n LABELTOP: 'e-label-top',\n LABELBOTTOM: 'e-label-bottom',\n NOFLOATLABEL: 'e-no-float-label',\n INPUTCUSTOMTAG: 'e-input-custom-tag',\n FLOATCUSTOMTAG: 'e-float-custom-tag'\n};\n/**\n * Base for Input creation through util methods.\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var Input;\n(function (Input) {\n var privateInputObj = {\n container: null,\n buttons: [],\n clearButton: null\n };\n var floatType;\n var isBindClearAction = true;\n /**\n * Create a wrapper to input element with multiple span elements and set the basic properties to input based components.\n * ```\n * E.g : Input.createInput({ element: element, floatLabelType : \"Auto\", properties: { placeholder: 'Search' } });\n * ```\n *\n */\n function createInput(args, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var inputObject = { container: null, buttons: [], clearButton: null };\n floatType = args.floatLabelType;\n isBindClearAction = args.bindClearAction;\n if (isNullOrUndefined(args.floatLabelType) || args.floatLabelType === 'Never') {\n inputObject.container = createInputContainer(args, CLASSNAMES.INPUTGROUP, CLASSNAMES.INPUTCUSTOMTAG, 'span', makeElement);\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n addClass([args.element], CLASSNAMES.INPUT);\n inputObject.container.appendChild(args.element);\n }\n else {\n createFloatingInput(args, inputObject, makeElement);\n }\n bindInitialEvent(args);\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.showClearButton) &&\n args.properties.showClearButton) {\n setClearButton(args.properties.showClearButton, args.element, inputObject, true, makeElement);\n inputObject.clearButton.setAttribute('role', 'button');\n if (inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([inputObject.container], CLASSNAMES.INPUTGROUP);\n }\n }\n if (!isNullOrUndefined(args.buttons)) {\n for (var i = 0; i < args.buttons.length; i++) {\n inputObject.buttons.push(appendSpan(args.buttons[i], inputObject.container, makeElement));\n }\n }\n if (!isNullOrUndefined(args.element) && args.element.tagName === 'TEXTAREA') {\n addClass([inputObject.container], CLASSNAMES.TEXTAREA);\n }\n validateInputType(inputObject.container, args.element);\n inputObject = setPropertyValue(args, inputObject);\n createSpanElement(inputObject.container, makeElement);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n privateInputObj = inputObject;\n return inputObject;\n }\n Input.createInput = createInput;\n function bindInitialEvent(args) {\n checkInputValue(args.floatLabelType, args.element);\n args.element.addEventListener('focus', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline')\n || parent.classList.contains('e-filled')) {\n parent.classList.add('e-input-focus');\n }\n if (args.floatLabelType === 'Auto') {\n setTimeout(function () {\n Input.calculateWidth(args.element, parent);\n }, 80);\n }\n });\n args.element.addEventListener('blur', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline')\n || parent.classList.contains('e-filled')) {\n parent.classList.remove('e-input-focus');\n }\n if (args.floatLabelType === 'Auto' && args.element.value === '') {\n setTimeout(function () {\n Input.calculateWidth(args.element, parent);\n }, 80);\n }\n });\n args.element.addEventListener('input', function () {\n checkInputValue(floatType, args.element);\n });\n }\n Input.bindInitialEvent = bindInitialEvent;\n function checkInputValue(floatLabelType, inputElement) {\n var inputValue = inputElement.value;\n var inputParent = inputElement.parentElement;\n var grandParent = inputParent.parentElement;\n if (inputValue !== '' && !isNullOrUndefined(inputValue)) {\n if (inputParent && inputParent.classList.contains('e-input-group')) {\n inputParent.classList.add('e-valid-input');\n }\n else if (grandParent && grandParent.classList.contains('e-input-group')) {\n grandParent.classList.add('e-valid-input');\n }\n }\n else if (floatLabelType !== 'Always') {\n if (inputParent && inputParent.classList.contains('e-input-group')) {\n inputParent.classList.remove('e-valid-input');\n }\n else if (grandParent && grandParent.classList.contains('e-input-group')) {\n grandParent.classList.remove('e-valid-input');\n }\n }\n }\n function _focusFn() {\n var label = getParentNode(this).getElementsByClassName('e-float-text')[0];\n if (!isNullOrUndefined(label)) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function _blurFn() {\n var parent = getParentNode(this);\n if ((parent.getElementsByTagName('textarea')[0]) ? parent.getElementsByTagName('textarea')[0].value === '' :\n parent.getElementsByTagName('input')[0].value === '') {\n var label = parent.getElementsByClassName('e-float-text')[0];\n if (!isNullOrUndefined(label)) {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function wireFloatingEvents(element) {\n element.addEventListener('focus', _focusFn);\n element.addEventListener('blur', _blurFn);\n }\n Input.wireFloatingEvents = wireFloatingEvents;\n function unwireFloatingEvents(element) {\n element.removeEventListener('focus', _focusFn);\n element.removeEventListener('blur', _blurFn);\n }\n function createFloatingInput(args, inputObject, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (args.floatLabelType === 'Auto') {\n wireFloatingEvents(args.element);\n }\n if (isNullOrUndefined(inputObject.container)) {\n inputObject.container = createInputContainer(args, CLASSNAMES.FLOATINPUT, CLASSNAMES.FLOATCUSTOMTAG, 'div', makeElement);\n inputObject.container.classList.add(CLASSNAMES.INPUTGROUP);\n if (args.element.parentNode) {\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n }\n }\n else {\n if (!isNullOrUndefined(args.customTag)) {\n inputObject.container.classList.add(CLASSNAMES.FLOATCUSTOMTAG);\n }\n inputObject.container.classList.add(CLASSNAMES.FLOATINPUT);\n }\n var floatLinelement = makeElement('span', { className: CLASSNAMES.FLOATLINE });\n var floatLabelElement = makeElement('label', { className: CLASSNAMES.FLOATTEXT });\n if (!isNullOrUndefined(args.element.id) && args.element.id !== '') {\n floatLabelElement.id = 'label_' + args.element.id.replace(/ /g, '_');\n attributes(args.element, { 'aria-labelledby': floatLabelElement.id });\n }\n if (!isNullOrUndefined(args.element.placeholder) && args.element.placeholder !== '') {\n floatLabelElement.innerText = encodePlaceHolder(args.element.placeholder);\n args.element.removeAttribute('placeholder');\n }\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.placeholder) &&\n args.properties.placeholder !== '') {\n floatLabelElement.innerText = encodePlaceHolder(args.properties.placeholder);\n }\n if (!floatLabelElement.innerText) {\n inputObject.container.classList.add(CLASSNAMES.NOFLOATLABEL);\n }\n if (inputObject.container.classList.contains('e-float-icon-left')) {\n var inputWrap = inputObject.container.querySelector('.e-input-in-wrap');\n inputWrap.appendChild(args.element);\n inputWrap.appendChild(floatLinelement);\n inputWrap.appendChild(floatLabelElement);\n }\n else {\n inputObject.container.appendChild(args.element);\n inputObject.container.appendChild(floatLinelement);\n inputObject.container.appendChild(floatLabelElement);\n }\n updateLabelState(args.element.value, floatLabelElement);\n if (args.floatLabelType === 'Always') {\n if (floatLabelElement.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([floatLabelElement], CLASSNAMES.LABELBOTTOM);\n }\n addClass([floatLabelElement], CLASSNAMES.LABELTOP);\n }\n if (args.floatLabelType === 'Auto') {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n args.element.addEventListener('input', function (event) {\n updateLabelState(args.element.value, floatLabelElement, args.element);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n args.element.addEventListener('blur', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n }\n if (!isNullOrUndefined(args.element.getAttribute('id'))) {\n floatLabelElement.setAttribute('for', args.element.getAttribute('id'));\n }\n }\n function checkFloatLabelType(type, container) {\n if (type === 'Always' && container.classList.contains('e-outline')) {\n container.classList.add('e-valid-input');\n }\n }\n function setPropertyValue(args, inputObject) {\n if (!isNullOrUndefined(args.properties)) {\n for (var _i = 0, _a = Object.keys(args.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n setCssClass(args.properties.cssClass, [inputObject.container]);\n checkFloatLabelType(args.floatLabelType, inputObject.container);\n break;\n case 'enabled':\n setEnabled(args.properties.enabled, args.element, args.floatLabelType, inputObject.container);\n break;\n case 'enableRtl':\n setEnableRtl(args.properties.enableRtl, [inputObject.container]);\n break;\n case 'placeholder':\n setPlaceholder(args.properties.placeholder, args.element);\n break;\n case 'readonly':\n setReadonly(args.properties.readonly, args.element);\n break;\n }\n }\n }\n return inputObject;\n }\n function updateIconState(value, button, readonly) {\n if (!isNullOrUndefined(button)) {\n if (value && !readonly) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n }\n function updateLabelState(value, label, element) {\n if (element === void 0) { element = null; }\n if (value) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n else {\n var isNotFocused = element != null ? element !== document.activeElement : true;\n if (isNotFocused) {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function getParentNode(element) {\n var parentNode = isNullOrUndefined(element.parentNode) ? element\n : element.parentNode;\n if (parentNode && parentNode.classList.contains('e-input-in-wrap')) {\n parentNode = parentNode.parentNode;\n }\n return parentNode;\n }\n /**\n * To create clear button.\n */\n function createClearButton(element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = makeElement('span', { className: CLASSNAMES.CLEARICON });\n var container = inputObject.container;\n if (!isNullOrUndefined(initial)) {\n container.appendChild(button);\n }\n else {\n var baseElement = inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT) ?\n inputObject.container.querySelector('.' + CLASSNAMES.FLOATTEXT) : element;\n baseElement.insertAdjacentElement('afterend', button);\n }\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n wireClearBtnEvents(element, button, container);\n button.setAttribute('aria-label', 'close');\n return button;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function wireClearBtnEvents(element, button, container) {\n if (isBindClearAction === undefined || isBindClearAction) {\n button.addEventListener('click', function (event) {\n if (!(element.classList.contains(CLASSNAMES.DISABLE) || element.readOnly)) {\n event.preventDefault();\n if (element !== document.activeElement) {\n element.focus();\n }\n element.value = '';\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n });\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('input', function (event) {\n updateIconState(element.value, button);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('focus', function (event) {\n updateIconState(element.value, button, element.readOnly);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('blur', function (event) {\n setTimeout(function () {\n if (!isNullOrUndefined(button)) {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n button = !isNullOrUndefined(element) && element.classList.contains('e-combobox') ? null : button;\n }\n }, 200);\n });\n }\n Input.wireClearBtnEvents = wireClearBtnEvents;\n function destroy() {\n privateInputObj = null;\n }\n Input.destroy = destroy;\n function validateLabel(element, floatLabelType) {\n var parent = getParentNode(element);\n if (parent.classList.contains(CLASSNAMES.FLOATINPUT) && floatLabelType === 'Auto') {\n var label = getParentNode(element).getElementsByClassName('e-float-text')[0];\n updateLabelState(element.value, label, element);\n }\n }\n /**\n * To create input box contianer.\n */\n function createInputContainer(args, className, tagClass, tag, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container;\n if (!isNullOrUndefined(args.customTag)) {\n container = makeElement(args.customTag, { className: className });\n container.classList.add(tagClass);\n }\n else {\n container = makeElement(tag, { className: className });\n }\n container.classList.add('e-control-wrapper');\n return container;\n }\n function encodePlaceHolder(placeholder) {\n var result = '';\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n var spanEle = document.createElement('span');\n spanEle.innerHTML = '';\n var hiddenInput = (spanEle.children[0]);\n result = hiddenInput.placeholder;\n }\n return result;\n }\n /**\n * Sets the value to the input element.\n * ```\n * E.g : Input.setValue('content', element, \"Auto\", true );\n * ```\n *\n * @param {string} value - Specify the value of the input element.\n * @param {HTMLInputElement | HTMLTextAreaElement} element - The element on which the specified value is updated.\n * @param {string} floatLabelType - Specify the float label type of the input element.\n * @param {boolean} clearButton - Boolean value to specify whether the clear icon is enabled / disabled on the input.\n */\n function setValue(value, element, floatLabelType, clearButton) {\n element.value = value;\n if (floatLabelType === 'Auto' && value === '') {\n calculateWidth(element, element.parentElement);\n }\n if ((!isNullOrUndefined(floatLabelType)) && floatLabelType === 'Auto') {\n validateLabel(element, floatLabelType);\n }\n if (!isNullOrUndefined(clearButton) && clearButton) {\n var parentElement = getParentNode(element);\n if (!isNullOrUndefined(parentElement)) {\n var button = parentElement.getElementsByClassName(CLASSNAMES.CLEARICON)[0];\n if (!isNullOrUndefined(button)) {\n if (element.value && !isNullOrUndefined(parentElement) && parentElement.classList.contains('e-input-focus')) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n }\n }\n checkInputValue(floatLabelType, element);\n }\n Input.setValue = setValue;\n /**\n * Sets the single or multiple cssClass to wrapper of input element.\n * ```\n * E.g : Input.setCssClass('e-custom-class', [element]);\n * ```\n *\n * @param {string} cssClass - Css class names which are needed to add.\n * @param {Element[] | NodeList} elements - The elements which are needed to add / remove classes.\n * @param {string} oldClass\n * - Css class names which are needed to remove. If old classes are need to remove, can give this optional parameter.\n */\n function setCssClass(cssClass, elements, oldClass) {\n if (!isNullOrUndefined(oldClass) && oldClass !== '') {\n removeClass(elements, oldClass.split(' '));\n }\n if (!isNullOrUndefined(cssClass) && cssClass !== '') {\n addClass(elements, cssClass.split(' '));\n }\n }\n Input.setCssClass = setCssClass;\n /**\n * Set the width to the placeholder when it overflows on the button such as spinbutton, clearbutton, icon etc\n * ```\n * E.g : Input.calculateWidth(element, container);\n * ```\n *\n * @param {any} element - Input element which is need to add.\n * @param {HTMLElement} container - The parent element which is need to get the label span to calculate width\n */\n function calculateWidth(element, container, moduleName) {\n var elementWidth = moduleName === 'multiselect' ? element : element.clientWidth - parseInt(getComputedStyle(element, null).getPropertyValue('padding-left'), 10);\n if (!isNullOrUndefined(container.getElementsByClassName('e-float-text-content')[0])) {\n if (container.getElementsByClassName('e-float-text-content')[0].classList.contains('e-float-text-overflow')) {\n container.getElementsByClassName('e-float-text-content')[0].classList.remove('e-float-text-overflow');\n }\n if (elementWidth < container.getElementsByClassName('e-float-text-content')[0].clientWidth || elementWidth === container.getElementsByClassName('e-float-text-content')[0].clientWidth) {\n container.getElementsByClassName('e-float-text-content')[0].classList.add('e-float-text-overflow');\n }\n }\n }\n Input.calculateWidth = calculateWidth;\n /**\n * Set the width to the wrapper of input element.\n * ```\n * E.g : Input.setWidth('200px', container);\n * ```\n *\n * @param {number | string} width - Width value which is need to add.\n * @param {HTMLElement} container - The element on which the width is need to add.\n */\n function setWidth(width, container) {\n if (typeof width === 'number') {\n container.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n container.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n calculateWidth(container.firstChild, container);\n }\n Input.setWidth = setWidth;\n /**\n * Set the placeholder attribute to the input element.\n * ```\n * E.g : Input.setPlaceholder('Search here', element);\n * ```\n *\n * @param {string} placeholder - Placeholder value which is need to add.\n * @param {HTMLInputElement | HTMLTextAreaElement} element - The element on which the placeholder is need to add.\n */\n function setPlaceholder(placeholder, element) {\n placeholder = encodePlaceHolder(placeholder);\n var parentElement = getParentNode(element);\n if (parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n parentElement.getElementsByClassName('e-float-text-content')[0] ? parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].children[0].textContent = placeholder : parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = placeholder;\n parentElement.classList.remove(CLASSNAMES.NOFLOATLABEL);\n element.removeAttribute('placeholder');\n }\n else {\n parentElement.classList.add(CLASSNAMES.NOFLOATLABEL);\n parentElement.getElementsByClassName('e-float-text-content')[0] ? parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].children[0].textContent = '' : parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n }\n else {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n attributes(element, { 'placeholder': placeholder });\n }\n else {\n element.removeAttribute('placeholder');\n }\n }\n }\n Input.setPlaceholder = setPlaceholder;\n /**\n * Set the read only attribute to the input element\n * ```\n * E.g : Input.setReadonly(true, element);\n * ```\n *\n * @param {boolean} isReadonly\n * - Boolean value to specify whether to set read only. Setting \"True\" value enables read only.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * - The element which is need to enable read only.\n */\n function setReadonly(isReadonly, element, floatLabelType) {\n if (isReadonly) {\n attributes(element, { readonly: '' });\n }\n else {\n element.removeAttribute('readonly');\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setReadonly = setReadonly;\n /**\n * Displays the element direction from right to left when its enabled.\n * ```\n * E.g : Input.setEnableRtl(true, [inputObj.container]);\n * ```\n *\n * @param {boolean} isRtl\n * - Boolean value to specify whether to set RTL. Setting \"True\" value enables the RTL mode.\n * @param {Element[] | NodeList} elements\n * - The elements that are needed to enable/disable RTL.\n */\n function setEnableRtl(isRtl, elements) {\n if (isRtl) {\n addClass(elements, CLASSNAMES.RTL);\n }\n else {\n removeClass(elements, CLASSNAMES.RTL);\n }\n }\n Input.setEnableRtl = setEnableRtl;\n /**\n * Enables or disables the given input element.\n * ```\n * E.g : Input.setEnabled(false, element);\n * ```\n *\n * @param {boolean} isEnable\n * - Boolean value to specify whether to enable or disable.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * - Element to be enabled or disabled.\n */\n function setEnabled(isEnable, element, floatLabelType, inputContainer) {\n var disabledAttrs = { 'disabled': 'disabled', 'aria-disabled': 'true' };\n var considerWrapper = isNullOrUndefined(inputContainer) ? false : true;\n if (isEnable) {\n element.classList.remove(CLASSNAMES.DISABLE);\n removeAttributes(disabledAttrs, element);\n if (considerWrapper) {\n removeClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n else {\n element.classList.add(CLASSNAMES.DISABLE);\n addAttributes(disabledAttrs, element);\n if (considerWrapper) {\n addClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setEnabled = setEnabled;\n function setClearButton(isClear, element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (isClear) {\n inputObject.clearButton = createClearButton(element, inputObject, initial, makeElement);\n }\n else {\n remove(inputObject.clearButton);\n inputObject.clearButton = null;\n }\n }\n Input.setClearButton = setClearButton;\n /**\n * Removing the multiple attributes from the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.removeAttributes({ 'disabled': 'disabled', 'aria-disabled': 'true' }, element);\n * ```\n *\n * @param {string} attrs\n * - Array of attributes which are need to removed from the element.\n * @param {HTMLInputElement | HTMLElement} element\n * - Element on which the attributes are needed to be removed.\n */\n function removeAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n else {\n element.removeAttribute(key);\n }\n }\n }\n Input.removeAttributes = removeAttributes;\n /**\n * Adding the multiple attributes to the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.addAttributes({ 'id': 'inputpopup' }, element);\n * ```\n *\n * @param {string} attrs\n * - Array of attributes which is added to element.\n * @param {HTMLInputElement | HTMLElement} element\n * - Element on which the attributes are needed to be added.\n */\n function addAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = attrs[\"\" + key];\n }\n else {\n element.setAttribute(key, attrs[\"\" + key]);\n }\n }\n }\n Input.addAttributes = addAttributes;\n function removeFloating(input) {\n var container = input.container;\n if (!isNullOrUndefined(container) && container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n var inputEle = container.querySelector('textarea') ? container.querySelector('textarea') :\n container.querySelector('input');\n var placeholder = container.querySelector('.' + CLASSNAMES.FLOATTEXT).textContent;\n var clearButton = container.querySelector('.e-clear-icon') !== null;\n detach(container.querySelector('.' + CLASSNAMES.FLOATLINE));\n detach(container.querySelector('.' + CLASSNAMES.FLOATTEXT));\n classList(container, [CLASSNAMES.INPUTGROUP], [CLASSNAMES.FLOATINPUT]);\n unwireFloatingEvents(inputEle);\n attributes(inputEle, { 'placeholder': placeholder });\n inputEle.classList.add(CLASSNAMES.INPUT);\n if (!clearButton && inputEle.tagName === 'INPUT') {\n inputEle.removeAttribute('required');\n }\n }\n }\n Input.removeFloating = removeFloating;\n function addFloating(input, type, placeholder, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container = closest(input, '.' + CLASSNAMES.INPUTGROUP);\n floatType = type;\n if (type !== 'Never') {\n var customTag = container.tagName;\n customTag = customTag !== 'DIV' && customTag !== 'SPAN' ? customTag : null;\n var args = { element: input, floatLabelType: type,\n customTag: customTag, properties: { placeholder: placeholder } };\n var iconEle = container.querySelector('.e-clear-icon');\n var inputObj = { container: container };\n input.classList.remove(CLASSNAMES.INPUT);\n createFloatingInput(args, inputObj, makeElement);\n createSpanElement(inputObj.container, makeElement);\n calculateWidth(args.element, inputObj.container);\n var isPrependIcon = container.classList.contains('e-float-icon-left');\n if (isNullOrUndefined(iconEle)) {\n if (isPrependIcon) {\n var inputWrap = container.querySelector('.e-input-in-wrap');\n iconEle = inputWrap.querySelector('.e-input-group-icon');\n }\n else {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n }\n if (isNullOrUndefined(iconEle)) {\n if (isPrependIcon) {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n }\n else {\n var floatLine = container.querySelector('.' + CLASSNAMES.FLOATLINE);\n var floatText = container.querySelector('.' + CLASSNAMES.FLOATTEXT);\n var wrapper = isPrependIcon ? container.querySelector('.e-input-in-wrap') : container;\n wrapper.insertBefore(input, iconEle);\n wrapper.insertBefore(floatLine, iconEle);\n wrapper.insertBefore(floatText, iconEle);\n }\n }\n checkFloatLabelType(type, input.parentElement);\n }\n Input.addFloating = addFloating;\n /**\n * Create the span inside the label and add the label text into the span textcontent\n * ```\n * E.g : Input.createSpanElement(inputObject, makeElement);\n * ```\n *\n * @param {InputObject} inputObject\n * - Element which is need to get the label\n * @param {createElementParams} makeElement\n * - Element which is need to create the span\n */\n function createSpanElement(inputObject, makeElement) {\n if (inputObject.classList.contains('e-outline') && inputObject.getElementsByClassName('e-float-text')[0]) {\n var labelSpanElement = makeElement('span', { className: CLASSNAMES.FLOATTEXTCONTENT });\n labelSpanElement.innerHTML = inputObject.getElementsByClassName('e-float-text')[0].innerHTML;\n inputObject.getElementsByClassName('e-float-text')[0].innerHTML = '';\n inputObject.getElementsByClassName('e-float-text')[0].appendChild(labelSpanElement);\n }\n }\n Input.createSpanElement = createSpanElement;\n /**\n * Enable or Disable the ripple effect on the icons inside the Input. Ripple effect is only applicable for material theme.\n * ```\n * E.g : Input.setRipple(true, [inputObjects]);\n * ```\n *\n * @param {boolean} isRipple\n * - Boolean value to specify whether to enable the ripple effect.\n * @param {InputObject[]} inputObj\n * - Specify the collection of input objects.\n */\n function setRipple(isRipple, inputObj) {\n for (var i = 0; i < inputObj.length; i++) {\n _internalRipple(isRipple, inputObj[parseInt(i.toString())].container);\n }\n }\n Input.setRipple = setRipple;\n function _internalRipple(isRipple, container, button) {\n var argsButton = [];\n argsButton.push(button);\n var buttons = isNullOrUndefined(button) ?\n container.querySelectorAll('.e-input-group-icon') : argsButton;\n if (isRipple && buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[parseInt(index.toString())].addEventListener('mousedown', _onMouseDownRipple, false);\n buttons[parseInt(index.toString())].addEventListener('mouseup', _onMouseUpRipple, false);\n }\n }\n else if (buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[parseInt(index.toString())].removeEventListener('mousedown', _onMouseDownRipple, this);\n buttons[parseInt(index.toString())].removeEventListener('mouseup', _onMouseUpRipple, this);\n }\n }\n }\n function _onMouseRipple(container, button) {\n if (!container.classList.contains('e-disabled') && !container.querySelector('input').readOnly) {\n button.classList.add('e-input-btn-ripple');\n }\n }\n function _onMouseDownRipple() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var ele = this;\n var parentEle = this.parentElement;\n while (!parentEle.classList.contains('e-input-group')) {\n parentEle = parentEle.parentElement;\n }\n _onMouseRipple(parentEle, ele);\n }\n function _onMouseUpRipple() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var ele = this;\n setTimeout(function () {\n ele.classList.remove('e-input-btn-ripple');\n }, 500);\n }\n function createIconEle(iconClass, makeElement) {\n var button = makeElement('span', { className: iconClass });\n button.classList.add('e-input-group-icon');\n return button;\n }\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.addIcon('append', 'e-icon-spin', inputObj.container, inputElement);\n * ```\n *\n * @param {string} position - Specify the icon placement on the input.Possible values are append and prepend.\n * @param {string | string[]} icons - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n * @param {HTMLElement} input - The inputElement on which created span element is going to prepend.\n */\n /* eslint-disable @typescript-eslint/indent */\n function addIcon(position, icons, container, input, internalCreate) {\n /* eslint-enable @typescript-eslint/indent */\n var result = typeof (icons) === 'string' ? icons.split(',')\n : icons;\n if (position.toLowerCase() === 'append') {\n for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n var icon = result_1[_i];\n appendSpan(icon, container, internalCreate);\n }\n }\n else {\n for (var _a = 0, result_2 = result; _a < result_2.length; _a++) {\n var icon = result_2[_a];\n prependSpan(icon, container, input, internalCreate);\n }\n }\n if (container.getElementsByClassName('e-input-group-icon')[0] && container.getElementsByClassName('e-float-text-overflow')[0]) {\n container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n }\n Input.addIcon = addIcon;\n /**\n * Creates a new span element with the given icons added and prepend it in input element.\n * ```\n * E.g : Input.prependSpan('e-icon-spin', inputObj.container, inputElement);\n * ```\n *\n * @param {string} iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n * @param {HTMLElement} inputElement - The inputElement on which created span element is going to prepend.\n */\n /* eslint-disable @typescript-eslint/indent */\n function prependSpan(iconClass, container, inputElement, internalCreateElement) {\n /* eslint-enable @typescript-eslint/indent */\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = createIconEle(iconClass, makeElement);\n container.classList.add('e-float-icon-left');\n var innerWrapper = container.querySelector('.e-input-in-wrap');\n if (isNullOrUndefined(innerWrapper)) {\n innerWrapper = makeElement('span', { className: 'e-input-in-wrap' });\n inputElement.parentNode.insertBefore(innerWrapper, inputElement);\n var result = container.querySelectorAll(inputElement.tagName + ' ~ *');\n innerWrapper.appendChild(inputElement);\n for (var i = 0; i < result.length; i++) {\n var element = result[parseInt(i.toString())];\n var parentElement = innerWrapper.parentElement;\n if (!(element.classList.contains('e-float-line')) || (!(parentElement && parentElement.classList.contains('e-filled')) && parentElement)) {\n innerWrapper.appendChild(element);\n }\n }\n }\n innerWrapper.parentNode.insertBefore(button, innerWrapper);\n _internalRipple(true, container, button);\n return button;\n }\n Input.prependSpan = prependSpan;\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.appendSpan('e-icon-spin', inputObj.container);\n * ```\n *\n * @param {string} iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n */\n function appendSpan(iconClass, container, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = createIconEle(iconClass, makeElement);\n var wrap = (container.classList.contains('e-float-icon-left')) ? container.querySelector('.e-input-in-wrap') :\n container;\n wrap.appendChild(button);\n _internalRipple(true, container, button);\n return button;\n }\n Input.appendSpan = appendSpan;\n function validateInputType(containerElement, input) {\n if (input.type === 'hidden') {\n containerElement.classList.add('e-hidden');\n }\n else if (containerElement.classList.contains('e-hidden')) {\n containerElement.classList.remove('e-hidden');\n }\n }\n Input.validateInputType = validateInputType;\n})(Input || (Input = {}));\n/* eslint-enable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\nimport { Touch, Component, EventHandler, selectAll, getUniqueID } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Property, Browser, detach } from '@syncfusion/ej2-base';\nimport { classList, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar CLS_ROOT = 'e-hscroll';\nvar CLS_RTL = 'e-rtl';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_HSCROLLBAR = 'e-hscroll-bar';\nvar CLS_HSCROLLCON = 'e-hscroll-content';\nvar CLS_NAVARROW = 'e-nav-arrow';\nvar CLS_NAVRIGHTARROW = 'e-nav-right-arrow';\nvar CLS_NAVLEFTARROW = 'e-nav-left-arrow';\nvar CLS_HSCROLLNAV = 'e-scroll-nav';\nvar CLS_HSCROLLNAVRIGHT = 'e-scroll-right-nav';\nvar CLS_HSCROLLNAVLEFT = 'e-scroll-left-nav';\nvar CLS_DEVICE = 'e-scroll-device';\nvar CLS_OVERLAY = 'e-scroll-overlay';\nvar CLS_RIGHTOVERLAY = 'e-scroll-right-overlay';\nvar CLS_LEFTOVERLAY = 'e-scroll-left-overlay';\nvar OVERLAY_MAXWID = 40;\n/**\n * HScroll module is introduces horizontal scroller when content exceeds the current viewing area.\n * It can be useful for the components like Toolbar, Tab which needs horizontal scrolling alone.\n * Hidden content can be view by touch moving or icon click.\n * ```html\n *
\n * \n * ```\n */\nvar HScroll = /** @class */ (function (_super) {\n __extends(HScroll, _super);\n /**\n * Initializes a new instance of the HScroll class.\n *\n * @param {HScrollModel} options - Specifies HScroll model properties as options.\n * @param {string | HTMLElement} element - Specifies the element for which horizontal scrolling applies.\n */\n function HScroll(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler\n *\n * @private\n * @returns {void}\n */\n HScroll.prototype.preRender = function () {\n this.browser = Browser.info.name;\n this.browserCheck = this.browser === 'mozilla';\n this.isDevice = Browser.isDevice;\n this.customStep = true;\n var element = this.element;\n this.ieCheck = this.browser === 'edge' || this.browser === 'msie';\n this.initialize();\n if (element.id === '') {\n element.id = getUniqueID('hscroll');\n this.uniqueId = true;\n }\n element.style.display = 'block';\n if (this.enableRtl) {\n element.classList.add(CLS_RTL);\n }\n };\n /**\n * To Initialize the horizontal scroll rendering\n *\n * @private\n * @returns {void}\n */\n HScroll.prototype.render = function () {\n this.touchModule = new Touch(this.element, { scroll: this.touchHandler.bind(this), swipe: this.swipeHandler.bind(this) });\n EventHandler.add(this.scrollEle, 'scroll', this.scrollHandler, this);\n if (!this.isDevice) {\n this.createNavIcon(this.element);\n }\n else {\n this.element.classList.add(CLS_DEVICE);\n this.createOverlay(this.element);\n }\n this.setScrollState();\n };\n HScroll.prototype.setScrollState = function () {\n if (isNullOrUndefined(this.scrollStep) || this.scrollStep < 0) {\n this.scrollStep = this.scrollEle.offsetWidth;\n this.customStep = false;\n }\n else {\n this.customStep = true;\n }\n };\n HScroll.prototype.initialize = function () {\n var scrollEle = this.createElement('div', { className: CLS_HSCROLLCON });\n var scrollDiv = this.createElement('div', { className: CLS_HSCROLLBAR });\n scrollDiv.setAttribute('tabindex', '-1');\n var ele = this.element;\n var innerEle = [].slice.call(ele.children);\n for (var _i = 0, innerEle_1 = innerEle; _i < innerEle_1.length; _i++) {\n var ele_1 = innerEle_1[_i];\n scrollEle.appendChild(ele_1);\n }\n scrollDiv.appendChild(scrollEle);\n ele.appendChild(scrollDiv);\n scrollDiv.style.overflowX = 'hidden';\n this.scrollEle = scrollDiv;\n this.scrollItems = scrollEle;\n };\n HScroll.prototype.getPersistData = function () {\n var keyEntity = ['scrollStep'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Returns the current module name.\n *\n * @returns {string} - It returns the current module name.\n * @private\n */\n HScroll.prototype.getModuleName = function () {\n return 'hScroll';\n };\n /**\n * Removes the control from the DOM and also removes all its related events.\n *\n * @returns {void}\n */\n HScroll.prototype.destroy = function () {\n var ele = this.element;\n ele.style.display = '';\n ele.classList.remove(CLS_ROOT);\n ele.classList.remove(CLS_DEVICE);\n ele.classList.remove(CLS_RTL);\n var nav = selectAll('.e-' + ele.id + '_nav.' + CLS_HSCROLLNAV, ele);\n var overlay = selectAll('.' + CLS_OVERLAY, ele);\n [].slice.call(overlay).forEach(function (ele) {\n detach(ele);\n });\n for (var _i = 0, _a = [].slice.call(this.scrollItems.children); _i < _a.length; _i++) {\n var elem = _a[_i];\n ele.appendChild(elem);\n }\n if (this.uniqueId) {\n this.element.removeAttribute('id');\n }\n detach(this.scrollEle);\n if (nav.length > 0) {\n detach(nav[0]);\n if (!isNullOrUndefined(nav[1])) {\n detach(nav[1]);\n }\n }\n EventHandler.remove(this.scrollEle, 'scroll', this.scrollHandler);\n this.touchModule.destroy();\n this.touchModule = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Specifies the value to disable/enable the HScroll component.\n * When set to `true` , the component will be disabled.\n *\n * @param {boolean} value - Based on this Boolean value, HScroll will be enabled (false) or disabled (true).\n * @returns {void}.\n */\n HScroll.prototype.disable = function (value) {\n var navEles = selectAll('.e-scroll-nav:not(.' + CLS_DISABLE + ')', this.element);\n if (value) {\n this.element.classList.add(CLS_DISABLE);\n }\n else {\n this.element.classList.remove(CLS_DISABLE);\n }\n [].slice.call(navEles).forEach(function (el) {\n el.setAttribute('tabindex', !value ? '0' : '-1');\n });\n };\n HScroll.prototype.createOverlay = function (element) {\n var id = element.id.concat('_nav');\n var rightOverlayEle = this.createElement('div', { className: CLS_OVERLAY + ' ' + CLS_RIGHTOVERLAY });\n var clsRight = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVRIGHT);\n var rightEle = this.createElement('div', { id: id.concat('_right'), className: clsRight });\n var navItem = this.createElement('div', { className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n rightEle.appendChild(navItem);\n var leftEle = this.createElement('div', { className: CLS_OVERLAY + ' ' + CLS_LEFTOVERLAY });\n if (this.ieCheck) {\n rightEle.classList.add('e-ie-align');\n }\n element.appendChild(rightOverlayEle);\n element.appendChild(rightEle);\n element.insertBefore(leftEle, element.firstChild);\n this.eventBinding([rightEle]);\n };\n HScroll.prototype.createNavIcon = function (element) {\n var id = element.id.concat('_nav');\n var clsRight = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVRIGHT);\n var rightAttributes = { 'role': 'button', 'id': id.concat('_right'), 'aria-label': 'Scroll right' };\n var nav = this.createElement('div', { className: clsRight, attrs: rightAttributes });\n nav.setAttribute('aria-disabled', 'false');\n var navItem = this.createElement('div', { className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n var clsLeft = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVLEFT);\n var leftAttributes = { 'role': 'button', 'id': id.concat('_left'), 'aria-label': 'Scroll left' };\n var navEle = this.createElement('div', { className: clsLeft + ' ' + CLS_DISABLE, attrs: leftAttributes });\n navEle.setAttribute('aria-disabled', 'true');\n var navLeftItem = this.createElement('div', { className: CLS_NAVLEFTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n navEle.appendChild(navLeftItem);\n nav.appendChild(navItem);\n element.appendChild(nav);\n element.insertBefore(navEle, element.firstChild);\n if (this.ieCheck) {\n nav.classList.add('e-ie-align');\n navEle.classList.add('e-ie-align');\n }\n this.eventBinding([nav, navEle]);\n };\n HScroll.prototype.onKeyPress = function (e) {\n var _this = this;\n if (e.key === 'Enter') {\n var timeoutFun_1 = function () {\n _this.keyTimeout = true;\n _this.eleScrolling(10, e.target, true);\n };\n this.keyTimer = window.setTimeout(function () {\n timeoutFun_1();\n }, 100);\n }\n };\n HScroll.prototype.onKeyUp = function (e) {\n if (e.key !== 'Enter') {\n return;\n }\n if (this.keyTimeout) {\n this.keyTimeout = false;\n }\n else {\n e.target.click();\n }\n clearTimeout(this.keyTimer);\n };\n HScroll.prototype.eventBinding = function (ele) {\n var _this = this;\n [].slice.call(ele).forEach(function (el) {\n new Touch(el, { tapHold: _this.tabHoldHandler.bind(_this), tapHoldThreshold: 500 });\n el.addEventListener('keydown', _this.onKeyPress.bind(_this));\n el.addEventListener('keyup', _this.onKeyUp.bind(_this));\n el.addEventListener('mouseup', _this.repeatScroll.bind(_this));\n el.addEventListener('touchend', _this.repeatScroll.bind(_this));\n el.addEventListener('contextmenu', function (e) {\n e.preventDefault();\n });\n EventHandler.add(el, 'click', _this.clickEventHandler, _this);\n });\n };\n HScroll.prototype.repeatScroll = function () {\n clearInterval(this.timeout);\n };\n HScroll.prototype.tabHoldHandler = function (e) {\n var _this = this;\n var trgt = e.originalEvent.target;\n trgt = this.contains(trgt, CLS_HSCROLLNAV) ? trgt.firstElementChild : trgt;\n var scrollDis = 10;\n var timeoutFun = function () {\n _this.eleScrolling(scrollDis, trgt, true);\n };\n this.timeout = window.setInterval(function () {\n timeoutFun();\n }, 50);\n };\n HScroll.prototype.contains = function (ele, className) {\n return ele.classList.contains(className);\n };\n HScroll.prototype.eleScrolling = function (scrollDis, trgt, isContinuous) {\n var rootEle = this.element;\n var classList = trgt.classList;\n if (classList.contains(CLS_HSCROLLNAV)) {\n classList = trgt.querySelector('.' + CLS_NAVARROW).classList;\n }\n if (this.contains(rootEle, CLS_RTL) && this.browserCheck) {\n scrollDis = -scrollDis;\n }\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n if (classList.contains(CLS_NAVRIGHTARROW)) {\n this.frameScrollRequest(scrollDis, 'add', isContinuous);\n }\n else {\n this.frameScrollRequest(scrollDis, '', isContinuous);\n }\n }\n else {\n if (classList.contains(CLS_NAVLEFTARROW)) {\n this.frameScrollRequest(scrollDis, 'add', isContinuous);\n }\n else {\n this.frameScrollRequest(scrollDis, '', isContinuous);\n }\n }\n };\n HScroll.prototype.clickEventHandler = function (e) {\n this.eleScrolling(this.scrollStep, e.target, false);\n };\n HScroll.prototype.swipeHandler = function (e) {\n var swipeEle = this.scrollEle;\n var distance;\n if (e.velocity <= 1) {\n distance = e.distanceX / (e.velocity * 10);\n }\n else {\n distance = e.distanceX / e.velocity;\n }\n var start = 0.5;\n var animate = function () {\n var step = Math.sin(start);\n if (step <= 0) {\n window.cancelAnimationFrame(step);\n }\n else {\n if (e.swipeDirection === 'Left') {\n swipeEle.scrollLeft += distance * step;\n }\n else if (e.swipeDirection === 'Right') {\n swipeEle.scrollLeft -= distance * step;\n }\n start -= 0.5;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n HScroll.prototype.scrollUpdating = function (scrollVal, action) {\n if (action === 'add') {\n this.scrollEle.scrollLeft += scrollVal;\n }\n else {\n this.scrollEle.scrollLeft -= scrollVal;\n }\n if (this.enableRtl && this.scrollEle.scrollLeft > 0) {\n this.scrollEle.scrollLeft = 0;\n }\n };\n HScroll.prototype.frameScrollRequest = function (scrollVal, action, isContinuous) {\n var _this = this;\n var step = 10;\n if (isContinuous) {\n this.scrollUpdating(scrollVal, action);\n return;\n }\n if (!this.customStep) {\n [].slice.call(selectAll('.' + CLS_OVERLAY, this.element)).forEach(function (el) {\n scrollVal -= el.offsetWidth;\n });\n }\n var animate = function () {\n var scrollValue;\n var scrollStep;\n if (_this.contains(_this.element, CLS_RTL) && _this.browserCheck) {\n scrollValue = -scrollVal;\n scrollStep = -step;\n }\n else {\n scrollValue = scrollVal;\n scrollStep = step;\n }\n if (scrollValue < step) {\n window.cancelAnimationFrame(scrollStep);\n }\n else {\n _this.scrollUpdating(scrollStep, action);\n scrollVal -= scrollStep;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n HScroll.prototype.touchHandler = function (e) {\n var ele = this.scrollEle;\n var distance = e.distanceX;\n if ((this.ieCheck) && this.contains(this.element, CLS_RTL)) {\n distance = -distance;\n }\n if (e.scrollDirection === 'Left') {\n ele.scrollLeft = ele.scrollLeft + distance;\n }\n else if (e.scrollDirection === 'Right') {\n ele.scrollLeft = ele.scrollLeft - distance;\n }\n };\n HScroll.prototype.arrowDisabling = function (addDisable, removeDisable) {\n if (this.isDevice) {\n var arrowEle = isNullOrUndefined(addDisable) ? removeDisable : addDisable;\n var arrowIcon = arrowEle.querySelector('.' + CLS_NAVARROW);\n if (isNullOrUndefined(addDisable)) {\n classList(arrowIcon, [CLS_NAVRIGHTARROW], [CLS_NAVLEFTARROW]);\n }\n else {\n classList(arrowIcon, [CLS_NAVLEFTARROW], [CLS_NAVRIGHTARROW]);\n }\n }\n else if (addDisable && removeDisable) {\n addDisable.classList.add(CLS_DISABLE);\n addDisable.setAttribute('aria-disabled', 'true');\n addDisable.removeAttribute('tabindex');\n removeDisable.classList.remove(CLS_DISABLE);\n removeDisable.setAttribute('aria-disabled', 'false');\n removeDisable.setAttribute('tabindex', '0');\n }\n this.repeatScroll();\n };\n HScroll.prototype.scrollHandler = function (e) {\n var target = e.target;\n var width = target.offsetWidth;\n var rootEle = this.element;\n var navLeftEle = this.element.querySelector('.' + CLS_HSCROLLNAVLEFT);\n var navRightEle = this.element.querySelector('.' + CLS_HSCROLLNAVRIGHT);\n var leftOverlay = this.element.querySelector('.' + CLS_LEFTOVERLAY);\n var rightOverlay = this.element.querySelector('.' + CLS_RIGHTOVERLAY);\n var scrollLeft = target.scrollLeft;\n if (scrollLeft <= 0) {\n scrollLeft = -scrollLeft;\n }\n if (this.isDevice) {\n if (this.enableRtl && !(this.browserCheck || this.ieCheck)) {\n leftOverlay = this.element.querySelector('.' + CLS_RIGHTOVERLAY);\n rightOverlay = this.element.querySelector('.' + CLS_LEFTOVERLAY);\n }\n if (scrollLeft < OVERLAY_MAXWID) {\n leftOverlay.style.width = scrollLeft + 'px';\n }\n else {\n leftOverlay.style.width = '40px';\n }\n if ((target.scrollWidth - Math.ceil(width + scrollLeft)) < OVERLAY_MAXWID) {\n rightOverlay.style.width = (target.scrollWidth - Math.ceil(width + scrollLeft)) + 'px';\n }\n else {\n rightOverlay.style.width = '40px';\n }\n }\n if (scrollLeft === 0) {\n this.arrowDisabling(navLeftEle, navRightEle);\n }\n else if (Math.ceil(width + scrollLeft + .1) >= target.scrollWidth) {\n this.arrowDisabling(navRightEle, navLeftEle);\n }\n else {\n var disEle = this.element.querySelector('.' + CLS_HSCROLLNAV + '.' + CLS_DISABLE);\n if (disEle) {\n disEle.classList.remove(CLS_DISABLE);\n disEle.setAttribute('aria-disabled', 'false');\n disEle.setAttribute('tabindex', '0');\n }\n }\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of property that changed.\n *\n * @param {HScrollModel} newProp - It contains the new value of data.\n * @param {HScrollModel} oldProp - It contains the old value of data.\n * @returns {void}\n * @private\n */\n HScroll.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'scrollStep':\n this.setScrollState();\n break;\n case 'enableRtl':\n newProp.enableRtl ? this.element.classList.add(CLS_RTL) : this.element.classList.remove(CLS_RTL);\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], HScroll.prototype, \"scrollStep\", void 0);\n HScroll = __decorate([\n NotifyPropertyChanges\n ], HScroll);\n return HScroll;\n}(Component));\nexport { HScroll };\n","/* eslint-disable valid-jsdoc */\n/* eslint-disable security/detect-object-injection */\nimport { Ajax } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataUtil } from './util';\nimport { Predicate, Query } from './query';\nimport { ODataAdaptor, JsonAdaptor, CacheAdaptor, RemoteSaveAdaptor, CustomDataAdaptor } from './adaptors';\n/**\n * DataManager is used to manage and manipulate relational data.\n */\nvar DataManager = /** @class */ (function () {\n /**\n * Constructor for DataManager class\n *\n * @param {DataOptions|JSON[]} dataSource?\n * @param {Query} query?\n * @param {AdaptorOptions|string} adaptor?\n * @param dataSource\n * @param query\n * @param adaptor\n * @hidden\n */\n function DataManager(dataSource, query, adaptor) {\n var _this = this;\n /** @hidden */\n this.dateParse = true;\n /** @hidden */\n this.timeZoneHandling = true;\n this.persistQuery = {};\n this.isInitialLoad = false;\n this.requests = [];\n this.isInitialLoad = true;\n if (!dataSource && !this.dataSource) {\n dataSource = [];\n }\n adaptor = adaptor || dataSource.adaptor;\n if (dataSource && dataSource.timeZoneHandling === false) {\n this.timeZoneHandling = dataSource.timeZoneHandling;\n }\n var data;\n if (dataSource instanceof Array) {\n data = {\n json: dataSource,\n offline: true\n };\n }\n else if (typeof dataSource === 'object') {\n if (!dataSource.json) {\n dataSource.json = [];\n }\n if (!dataSource.enablePersistence) {\n dataSource.enablePersistence = false;\n }\n if (!dataSource.id) {\n dataSource.id = '';\n }\n if (!dataSource.ignoreOnPersist) {\n dataSource.ignoreOnPersist = [];\n }\n data = {\n url: dataSource.url,\n insertUrl: dataSource.insertUrl,\n removeUrl: dataSource.removeUrl,\n updateUrl: dataSource.updateUrl,\n crudUrl: dataSource.crudUrl,\n batchUrl: dataSource.batchUrl,\n json: dataSource.json,\n headers: dataSource.headers,\n accept: dataSource.accept,\n data: dataSource.data,\n timeTillExpiration: dataSource.timeTillExpiration,\n cachingPageSize: dataSource.cachingPageSize,\n enableCaching: dataSource.enableCaching,\n requestType: dataSource.requestType,\n key: dataSource.key,\n crossDomain: dataSource.crossDomain,\n jsonp: dataSource.jsonp,\n dataType: dataSource.dataType,\n offline: dataSource.offline !== undefined ? dataSource.offline\n : dataSource.adaptor instanceof RemoteSaveAdaptor || dataSource.adaptor instanceof CustomDataAdaptor ?\n false : dataSource.url ? false : true,\n requiresFormat: dataSource.requiresFormat,\n enablePersistence: dataSource.enablePersistence,\n id: dataSource.id,\n ignoreOnPersist: dataSource.ignoreOnPersist\n };\n }\n else {\n DataUtil.throwError('DataManager: Invalid arguments');\n }\n if (data.requiresFormat === undefined && !DataUtil.isCors()) {\n data.requiresFormat = isNullOrUndefined(data.crossDomain) ? true : data.crossDomain;\n }\n if (data.dataType === undefined) {\n data.dataType = 'json';\n }\n this.dataSource = data;\n this.defaultQuery = query;\n if (this.dataSource.enablePersistence && this.dataSource.id) {\n window.addEventListener('unload', this.setPersistData.bind(this));\n }\n if (data.url && data.offline && !data.json.length) {\n this.isDataAvailable = false;\n this.adaptor = adaptor || new ODataAdaptor();\n this.dataSource.offline = false;\n this.ready = this.executeQuery(query || new Query());\n this.ready.then(function (e) {\n _this.dataSource.offline = true;\n _this.isDataAvailable = true;\n data.json = e.result;\n _this.adaptor = new JsonAdaptor();\n });\n }\n else {\n this.adaptor = data.offline ? new JsonAdaptor() : new ODataAdaptor();\n }\n if (!data.jsonp && this.adaptor instanceof ODataAdaptor) {\n data.jsonp = 'callback';\n }\n this.adaptor = adaptor || this.adaptor;\n if (data.enableCaching) {\n this.adaptor = new CacheAdaptor(this.adaptor, data.timeTillExpiration, data.cachingPageSize);\n }\n return this;\n }\n /**\n * Get the queries maintained in the persisted state.\n * @param {string} id - The identifier of the persisted query to retrieve.\n * @returns {object} The persisted data object.\n */\n DataManager.prototype.getPersistedData = function (id) {\n var persistedData = localStorage.getItem(id || this.dataSource.id);\n return JSON.parse(persistedData);\n };\n /**\n * Set the queries to be maintained in the persisted state.\n * @param {Event} e - The event parameter that triggers the setPersistData method.\n * @param {string} id - The identifier of the persisted query to set.\n * @param {object} persistData - The data to be persisted.\n * @returns {void} .\n */\n DataManager.prototype.setPersistData = function (e, id, persistData) {\n localStorage.setItem(id || this.dataSource.id, JSON.stringify(persistData || this.persistQuery));\n };\n DataManager.prototype.setPersistQuery = function (query) {\n var _this = this;\n var persistedQuery = this.getPersistedData();\n if (this.isInitialLoad && persistedQuery && Object.keys(persistedQuery).length) {\n this.persistQuery = persistedQuery;\n this.persistQuery.queries = this.persistQuery.queries.filter(function (query) {\n if (_this.dataSource.ignoreOnPersist && _this.dataSource.ignoreOnPersist.length) {\n if (query.fn && _this.dataSource.ignoreOnPersist.some(function (keyword) { return query.fn === keyword; })) {\n return false; // Exclude the matching query\n }\n }\n if (query.fn === 'onWhere') {\n var e = query.e;\n if (e && e.isComplex && e.predicates instanceof Array) {\n var allPredicates = e.predicates.map(function (predicateObj) {\n if (predicateObj.predicates && predicateObj.predicates instanceof Array) {\n // Process nested predicate array\n var nestedPredicates = predicateObj.predicates.map(function (nestedPredicate) {\n var field = nestedPredicate.field, operator = nestedPredicate.operator, value = nestedPredicate.value, ignoreCase = nestedPredicate.ignoreCase, ignoreAccent = nestedPredicate.ignoreAccent, matchCase = nestedPredicate.matchCase;\n return new Predicate(field, operator, value, ignoreCase, ignoreAccent, matchCase);\n });\n return predicateObj.condition === 'and' ? Predicate.and(nestedPredicates) : Predicate.or(nestedPredicates);\n }\n else {\n // Process individual predicate\n var field = predicateObj.field, operator = predicateObj.operator, value = predicateObj.value, ignoreCase = predicateObj.ignoreCase, ignoreAccent = predicateObj.ignoreAccent, matchCase = predicateObj.matchCase;\n return new Predicate(field, operator, value, ignoreCase, ignoreAccent, matchCase);\n }\n });\n query.e = new Predicate(allPredicates[0], e.condition, allPredicates.slice(1));\n }\n }\n return true; // Keep all other queries\n });\n var newQuery = extend(new Query(), this.persistQuery);\n this.isInitialLoad = false;\n return (newQuery);\n }\n else {\n this.persistQuery = query;\n this.isInitialLoad = false;\n return query;\n }\n };\n /**\n * Overrides DataManager's default query with given query.\n *\n * @param {Query} query - Defines the new default query.\n */\n DataManager.prototype.setDefaultQuery = function (query) {\n this.defaultQuery = query;\n return this;\n };\n /**\n * Executes the given query with local data source.\n *\n * @param {Query} query - Defines the query to retrieve data.\n */\n DataManager.prototype.executeLocal = function (query) {\n if (!this.defaultQuery && !(query instanceof Query)) {\n DataUtil.throwError('DataManager - executeLocal() : A query is required to execute');\n }\n if (!this.dataSource.json) {\n DataUtil.throwError('DataManager - executeLocal() : Json data is required to execute');\n }\n if (this.dataSource.enablePersistence && this.dataSource.id) {\n query = this.setPersistQuery(query);\n }\n query = query || this.defaultQuery;\n var result = this.adaptor.processQuery(this, query);\n if (query.subQuery) {\n var from = query.subQuery.fromTable;\n var lookup = query.subQuery.lookups;\n var res = query.isCountRequired ? result.result :\n result;\n if (lookup && lookup instanceof Array) {\n DataUtil.buildHierarchy(query.subQuery.fKey, from, res, lookup, query.subQuery.key);\n }\n for (var j = 0; j < res.length; j++) {\n if (res[j][from] instanceof Array) {\n res[j] = extend({}, {}, res[j]);\n res[j][from] = this.adaptor.processResponse(query.subQuery.using(new DataManager(res[j][from].slice(0))).executeLocal(), this, query);\n }\n }\n }\n return this.adaptor.processResponse(result, this, query);\n };\n /**\n * Executes the given query with either local or remote data source.\n * It will be executed as asynchronously and returns Promise object which will be resolved or rejected after action completed.\n *\n * @param {Query|Function} query - Defines the query to retrieve data.\n * @param {Function} done - Defines the callback function and triggers when the Promise is resolved.\n * @param {Function} fail - Defines the callback function and triggers when the Promise is rejected.\n * @param {Function} always - Defines the callback function and triggers when the Promise is resolved or rejected.\n */\n DataManager.prototype.executeQuery = function (query, done, fail, always) {\n var _this = this;\n var makeRequest = 'makeRequest';\n if (this.dataSource.enablePersistence && this.dataSource.id) {\n query = this.setPersistQuery(query);\n }\n if (typeof query === 'function') {\n always = fail;\n fail = done;\n done = query;\n query = null;\n }\n if (!query) {\n query = this.defaultQuery;\n }\n if (!(query instanceof Query)) {\n DataUtil.throwError('DataManager - executeQuery() : A query is required to execute');\n }\n var deffered = new Deferred();\n var args = { query: query };\n if (!this.dataSource.offline && (this.dataSource.url !== undefined && this.dataSource.url !== '')\n || (!isNullOrUndefined(this.adaptor[makeRequest])) || this.isCustomDataAdaptor(this.adaptor)) {\n var result = this.adaptor.processQuery(this, query);\n if (!isNullOrUndefined(this.adaptor[makeRequest])) {\n this.adaptor[makeRequest](result, deffered, args, query);\n }\n else if (!isNullOrUndefined(result.url) || this.isCustomDataAdaptor(this.adaptor)) {\n this.requests = [];\n this.makeRequest(result, deffered, args, query);\n }\n else {\n args = DataManager.getDeferedArgs(query, result, args);\n deffered.resolve(args);\n }\n }\n else {\n DataManager.nextTick(function () {\n var res = _this.executeLocal(query);\n args = DataManager.getDeferedArgs(query, res, args);\n deffered.resolve(args);\n });\n }\n if (done || fail) {\n deffered.promise.then(done, fail);\n }\n if (always) {\n deffered.promise.then(always, always);\n }\n return deffered.promise;\n };\n DataManager.getDeferedArgs = function (query, result, args) {\n if (query.isCountRequired) {\n args.result = result.result;\n args.count = result.count;\n args.aggregates = result.aggregates;\n }\n else {\n args.result = result;\n }\n return args;\n };\n DataManager.nextTick = function (fn) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n // tslint:disable-next-line:no-any\n (window.setImmediate || window.setTimeout)(fn, 0);\n /* eslint-enable @typescript-eslint/no-explicit-any */\n };\n DataManager.prototype.extendRequest = function (url, fnSuccess, fnFail) {\n return extend({}, {\n type: 'GET',\n dataType: this.dataSource.dataType,\n crossDomain: this.dataSource.crossDomain,\n jsonp: this.dataSource.jsonp,\n cache: true,\n processData: false,\n onSuccess: fnSuccess,\n onFailure: fnFail\n }, url);\n };\n // tslint:disable-next-line:max-func-body-length\n DataManager.prototype.makeRequest = function (url, deffered, args, query) {\n var _this = this;\n var isSelector = !!query.subQuerySelector;\n var fnFail = function (e) {\n args.error = e;\n deffered.reject(args);\n };\n var process = function (data, count, xhr, request, actual, aggregates, virtualSelectRecords) {\n args.xhr = xhr;\n args.count = count ? parseInt(count.toString(), 10) : 0;\n args.result = data;\n args.request = request;\n args.aggregates = aggregates;\n args.actual = actual;\n args.virtualSelectRecords = virtualSelectRecords;\n deffered.resolve(args);\n };\n var fnQueryChild = function (data, selector) {\n var subDeffer = new Deferred();\n var childArgs = { parent: args };\n query.subQuery.isChild = true;\n var subUrl = _this.adaptor.processQuery(_this, query.subQuery, data ? _this.adaptor.processResponse(data) : selector);\n var childReq = _this.makeRequest(subUrl, subDeffer, childArgs, query.subQuery);\n if (!isSelector) {\n subDeffer.then(function (subData) {\n if (data) {\n DataUtil.buildHierarchy(query.subQuery.fKey, query.subQuery.fromTable, data, subData, query.subQuery.key);\n process(data, subData.count, subData.xhr);\n }\n }, fnFail);\n }\n return childReq;\n };\n var fnSuccess = function (data, request) {\n if (_this.isGraphQLAdaptor(_this.adaptor)) {\n // tslint:disable-next-line:no-string-literal\n if (!isNullOrUndefined(data['errors'])) {\n // tslint:disable-next-line:no-string-literal\n return fnFail(data['errors'], request);\n }\n }\n if (_this.isCustomDataAdaptor(_this.adaptor)) {\n request = extend({}, _this.ajaxReqOption, request);\n }\n if (request.httpRequest.getResponseHeader('Content-Type').indexOf('xml') === -1 && _this.dateParse) {\n data = DataUtil.parse.parseJson(data);\n }\n var result = _this.adaptor.processResponse(data, _this, query, request.httpRequest, request);\n var count = 0;\n var aggregates = null;\n var virtualSelectRecords = 'virtualSelectRecords';\n var virtualRecords = data[virtualSelectRecords];\n if (query.isCountRequired) {\n count = result.count;\n aggregates = result.aggregates;\n result = result.result;\n }\n if (!query.subQuery) {\n process(result, count, request.httpRequest, request.type, data, aggregates, virtualRecords);\n return;\n }\n if (!isSelector) {\n fnQueryChild(result, request);\n }\n };\n var req = this.extendRequest(url, fnSuccess, fnFail);\n if (!this.isCustomDataAdaptor(this.adaptor)) {\n var ajax_1 = new Ajax(req);\n ajax_1.beforeSend = function () {\n _this.beforeSend(ajax_1.httpRequest, ajax_1);\n };\n req = ajax_1.send();\n req.catch(function (e) { return true; }); // to handle failure remote requests.\n this.requests.push(ajax_1);\n }\n else {\n this.ajaxReqOption = req;\n var request = req;\n this.adaptor.options.getData({\n data: request.data,\n onSuccess: request.onSuccess, onFailure: request.onFailure\n });\n }\n if (isSelector) {\n var promise = void 0;\n var res = query.subQuerySelector.call(this, { query: query.subQuery, parent: query });\n if (res && res.length) {\n promise = Promise.all([req, fnQueryChild(null, res)]);\n promise.then(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result = args[0];\n var pResult = _this.adaptor.processResponse(result[0], _this, query, _this.requests[0].httpRequest, _this.requests[0]);\n var count = 0;\n if (query.isCountRequired) {\n count = pResult.count;\n pResult = pResult.result;\n }\n var cResult = _this.adaptor.processResponse(result[1], _this, query.subQuery, _this.requests[1].httpRequest, _this.requests[1]);\n count = 0;\n if (query.subQuery.isCountRequired) {\n count = cResult.count;\n cResult = cResult.result;\n }\n DataUtil.buildHierarchy(query.subQuery.fKey, query.subQuery.fromTable, pResult, cResult, query.subQuery.key);\n isSelector = false;\n process(pResult, count, _this.requests[0].httpRequest);\n });\n }\n else {\n isSelector = false;\n }\n }\n return req;\n };\n DataManager.prototype.beforeSend = function (request, settings) {\n this.adaptor.beforeSend(this, request, settings);\n var headers = this.dataSource.headers;\n var props;\n for (var i = 0; headers && i < headers.length; i++) {\n props = [];\n var keys = Object.keys(headers[i]);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n props.push(prop);\n request.setRequestHeader(prop, headers[i][prop]);\n }\n }\n };\n /**\n * Save bulk changes to the given table name.\n * User can add a new record, edit an existing record, and delete a record at the same time.\n * If the datasource from remote, then updated in a single post.\n *\n * @param {Object} changes - Defines the CrudOptions.\n * @param {string} key - Defines the column field.\n * @param {string|Query} tableName - Defines the table name.\n * @param {Query} query - Sets default query for the DataManager.\n * @param original\n */\n DataManager.prototype.saveChanges = function (changes, key, tableName, query, original) {\n var _this = this;\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var args = {\n url: tableName,\n key: key || this.dataSource.key\n };\n var req = this.adaptor.batchRequest(this, changes, args, query || new Query(), original);\n var doAjaxRequest = 'doAjaxRequest';\n if (this.dataSource.offline) {\n return req;\n }\n if (!isNullOrUndefined(this.adaptor[doAjaxRequest])) {\n return this.adaptor[doAjaxRequest](req);\n }\n else if (!this.isCustomDataAdaptor(this.adaptor)) {\n var deff_1 = new Deferred();\n var ajax_2 = new Ajax(req);\n ajax_2.beforeSend = function () {\n _this.beforeSend(ajax_2.httpRequest, ajax_2);\n };\n ajax_2.onSuccess = function (data, request) {\n if (_this.isGraphQLAdaptor(_this.adaptor)) {\n // tslint:disable-next-line:no-string-literal\n if (!isNullOrUndefined(data['errors'])) {\n // tslint:disable-next-line:no-string-literal\n ajax_2.onFailure(JSON.stringify(data['errors']));\n }\n }\n deff_1.resolve(_this.adaptor.processResponse(data, _this, null, request.httpRequest, request, changes, args));\n };\n ajax_2.onFailure = function (e) {\n deff_1.reject([{ error: e }]);\n };\n ajax_2.send().catch(function (e) { return true; }); // to handle the failure requests.\n return deff_1.promise;\n }\n else {\n return this.doAjaxRequest(req, this.adaptor.options.batchUpdate);\n }\n };\n /**\n * Inserts new record in the given table.\n *\n * @param {Object} data - Defines the data to insert.\n * @param {string|Query} tableName - Defines the table name.\n * @param {Query} query - Sets default query for the DataManager.\n * @param position\n */\n DataManager.prototype.insert = function (data, tableName, query, position) {\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var req = this.adaptor.insert(this, data, tableName, query, position);\n var doAjaxRequest = 'doAjaxRequest';\n if (this.dataSource.offline) {\n return req;\n }\n if (!isNullOrUndefined(this.adaptor[doAjaxRequest])) {\n return this.adaptor[doAjaxRequest](req);\n }\n else {\n return this.doAjaxRequest(req, this.adaptor.options.addRecord);\n }\n };\n /**\n * Removes data from the table with the given key.\n *\n * @param {string} keyField - Defines the column field.\n * @param {Object} value - Defines the value to find the data in the specified column.\n * @param {string|Query} tableName - Defines the table name\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.remove = function (keyField, value, tableName, query) {\n if (typeof value === 'object') {\n value = DataUtil.getObject(keyField, value);\n }\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var res = this.adaptor.remove(this, keyField, value, tableName, query);\n var doAjaxRequest = 'doAjaxRequest';\n if (this.dataSource.offline) {\n return res;\n }\n if (!isNullOrUndefined(this.adaptor[doAjaxRequest])) {\n return this.adaptor[doAjaxRequest](res);\n }\n else {\n var remove = this.adaptor.options.deleteRecord;\n return this.doAjaxRequest(res, remove);\n }\n };\n /**\n * Updates existing record in the given table.\n *\n * @param {string} keyField - Defines the column field.\n * @param {Object} value - Defines the value to find the data in the specified column.\n * @param {string|Query} tableName - Defines the table name\n * @param {Query} query - Sets default query for the DataManager.\n * @param original\n */\n DataManager.prototype.update = function (keyField, value, tableName, query, original) {\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var res = this.adaptor.update(this, keyField, value, tableName, query, original);\n var doAjaxRequest = 'doAjaxRequest';\n if (this.dataSource.offline) {\n return res;\n }\n if (!isNullOrUndefined(this.adaptor[doAjaxRequest])) {\n return this.adaptor[doAjaxRequest](res);\n }\n else {\n var update = this.adaptor.options.updateRecord;\n return this.doAjaxRequest(res, update);\n }\n };\n DataManager.prototype.isCustomDataAdaptor = function (dataSource) {\n return this.adaptor.getModuleName &&\n this.adaptor.getModuleName() === 'CustomDataAdaptor';\n };\n DataManager.prototype.isGraphQLAdaptor = function (dataSource) {\n return this.adaptor.getModuleName &&\n this.adaptor.getModuleName() === 'GraphQLAdaptor';\n };\n DataManager.prototype.successFunc = function (record, request) {\n if (this.isGraphQLAdaptor(this.adaptor)) {\n var data = JSON.parse(record);\n // tslint:disable-next-line:no-string-literal\n if (!isNullOrUndefined(data['errors'])) {\n // tslint:disable-next-line:no-string-literal\n this.failureFunc(JSON.stringify(data['errors']));\n }\n }\n if (this.isCustomDataAdaptor(this.adaptor)) {\n request = extend({}, this.ajaxReqOption, request);\n }\n try {\n DataUtil.parse.parseJson(record);\n }\n catch (e) {\n record = [];\n }\n record = this.adaptor.processResponse(DataUtil.parse.parseJson(record), this, null, request.httpRequest, request);\n this.ajaxDeffered.resolve(record);\n };\n DataManager.prototype.failureFunc = function (e) {\n this.ajaxDeffered.reject([{ error: e }]);\n };\n DataManager.prototype.doAjaxRequest = function (res, ajaxFunc) {\n var _this = this;\n res = extend({}, {\n type: 'POST',\n contentType: 'application/json; charset=utf-8',\n processData: false\n }, res);\n this.ajaxDeffered = new Deferred();\n if (!this.isCustomDataAdaptor(this.adaptor)) {\n var ajax_3 = new Ajax(res);\n ajax_3.beforeSend = function () {\n _this.beforeSend(ajax_3.httpRequest, ajax_3);\n };\n ajax_3.onSuccess = this.successFunc.bind(this);\n ajax_3.onFailure = this.failureFunc.bind(this);\n ajax_3.send().catch(function (e) { return true; }); // to handle the failure requests.\n }\n else {\n this.ajaxReqOption = res;\n ajaxFunc.call(this, {\n data: res.data, onSuccess: this.successFunc.bind(this),\n onFailure: this.failureFunc.bind(this)\n });\n }\n return this.ajaxDeffered.promise;\n };\n DataManager.prototype.clearPersistence = function () {\n window.removeEventListener('unload', this.setPersistData.bind(this));\n this.dataSource.enablePersistence = false;\n this.persistQuery = {};\n window.localStorage.setItem(this.dataSource.id, '[]');\n };\n return DataManager;\n}());\nexport { DataManager };\n/**\n * Deferred is used to handle asynchronous operation.\n */\nvar Deferred = /** @class */ (function () {\n function Deferred() {\n var _this = this;\n /**\n * Promise is an object that represents a value that may not be available yet, but will be resolved at some point in the future.\n */\n this.promise = new Promise(function (resolve, reject) {\n _this.resolve = resolve;\n _this.reject = reject;\n });\n /**\n * Defines the callback function triggers when the Deferred object is resolved.\n */\n this.then = this.promise.then.bind(this.promise);\n /**\n * Defines the callback function triggers when the Deferred object is rejected.\n */\n this.catch = this.promise.catch.bind(this.promise);\n }\n return Deferred;\n}());\nexport { Deferred };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// \nimport { EventHandler, Property, Event, compile, KeyboardEvents, append, select } from '@syncfusion/ej2-base';\nimport { attributes, isNullOrUndefined, getUniqueID, formatUnit, isUndefined, getValue } from '@syncfusion/ej2-base';\nimport { Animation, Browser, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, closest, prepend, detach, classList } from '@syncfusion/ej2-base';\nimport { Popup, isCollide, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { incrementalSearch, resetIncrementalSearchValues } from '../common/incremental-search';\nimport { DropDownBase, dropDownBaseClasses } from '../drop-down-base/drop-down-base';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\n// don't use space in classnames\nexport var dropDownListClasses = {\n root: 'e-dropdownlist',\n hover: dropDownBaseClasses.hover,\n selected: dropDownBaseClasses.selected,\n rtl: dropDownBaseClasses.rtl,\n li: dropDownBaseClasses.li,\n disable: dropDownBaseClasses.disabled,\n base: dropDownBaseClasses.root,\n focus: dropDownBaseClasses.focus,\n input: 'e-input-group',\n inputFocus: 'e-input-focus',\n icon: 'e-input-group-icon e-ddl-icon',\n iconAnimation: 'e-icon-anim',\n value: 'e-input-value',\n device: 'e-ddl-device',\n backIcon: 'e-input-group-icon e-back-icon e-icons',\n filterBarClearIcon: 'e-input-group-icon e-clear-icon e-icons',\n filterInput: 'e-input-filter',\n filterParent: 'e-filter-parent',\n mobileFilter: 'e-ddl-device-filter',\n footer: 'e-ddl-footer',\n header: 'e-ddl-header',\n clearIcon: 'e-clear-icon',\n clearIconHide: 'e-clear-icon-hide',\n popupFullScreen: 'e-popup-full-page',\n disableIcon: 'e-ddl-disable-icon',\n hiddenElement: 'e-ddl-hidden'\n};\nvar inputObject = {\n container: null,\n buttons: []\n};\n/**\n * The DropDownList component contains a list of predefined values from which you can\n * choose a single value.\n * ```html\n * \n * ```\n * ```typescript\n * let dropDownListObj:DropDownList = new DropDownList();\n * dropDownListObj.appendTo(\"#list\");\n * ```\n */\nvar DropDownList = /** @class */ (function (_super) {\n __extends(DropDownList, _super);\n /**\n * * Constructor for creating the DropDownList component.\n *\n * @param {DropDownListModel} options - Specifies the DropDownList model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function DropDownList(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isListSearched = false;\n _this.preventChange = false;\n _this.isAngular = false;\n return _this;\n }\n /**\n * Initialize the event handler.\n *\n * @private\n * @returns {void}\n */\n DropDownList.prototype.preRender = function () {\n this.valueTempElement = null;\n this.element.style.opacity = '0';\n this.initializeData();\n _super.prototype.preRender.call(this);\n this.activeIndex = this.index;\n this.queryString = '';\n };\n DropDownList.prototype.initializeData = function () {\n this.isPopupOpen = false;\n this.isDocumentClick = false;\n this.isInteracted = false;\n this.isFilterFocus = false;\n this.beforePopupOpen = false;\n this.initial = true;\n this.initRemoteRender = false;\n this.isNotSearchList = false;\n this.isTyped = false;\n this.isSelected = false;\n this.preventFocus = false;\n this.preventAutoFill = false;\n this.isValidKey = false;\n this.typedString = '';\n this.isEscapeKey = false;\n this.isPreventBlur = false;\n this.isTabKey = false;\n this.actionCompleteData = { isUpdated: false };\n this.actionData = { isUpdated: false };\n this.prevSelectPoints = {};\n this.isSelectCustom = false;\n this.isDropDownClick = false;\n this.preventAltUp = false;\n this.isCustomFilter = false;\n this.isSecondClick = false;\n this.previousValue = null;\n this.keyConfigure = {\n tab: 'tab',\n enter: '13',\n escape: '27',\n end: '35',\n home: '36',\n down: '40',\n up: '38',\n pageUp: '33',\n pageDown: '34',\n open: 'alt+40',\n close: 'shift+tab',\n hide: 'alt+38',\n space: '32'\n };\n };\n DropDownList.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.setProperties({ 'zIndex': this.zIndex });\n }\n };\n DropDownList.prototype.renderList = function (e, isEmptyData) {\n _super.prototype.render.call(this, e, isEmptyData);\n this.unWireListEvents();\n this.wireListEvents();\n };\n DropDownList.prototype.floatLabelChange = function () {\n if (this.getModuleName() === 'dropdownlist' && this.floatLabelType === 'Auto') {\n var floatElement = this.inputWrapper.container.querySelector('.e-float-text');\n if (this.inputElement.value !== '' || this.isInteracted) {\n classList(floatElement, ['e-label-top'], ['e-label-bottom']);\n }\n else {\n classList(floatElement, ['e-label-bottom'], ['e-label-top']);\n }\n }\n };\n DropDownList.prototype.resetHandler = function (e) {\n e.preventDefault();\n this.clearAll(e);\n };\n DropDownList.prototype.resetFocusElement = function () {\n this.removeHover();\n this.removeSelection();\n this.removeFocus();\n this.list.scrollTop = 0;\n if (this.getModuleName() !== 'autocomplete' && !isNullOrUndefined(this.ulElement)) {\n var li = this.ulElement.querySelector('.' + dropDownListClasses.li);\n if (li) {\n li.classList.add(dropDownListClasses.focus);\n }\n }\n };\n DropDownList.prototype.clearAll = function (e, properties) {\n this.previousItemData = (!isNullOrUndefined(this.itemData)) ? this.itemData : null;\n if (isNullOrUndefined(properties) || (!isNullOrUndefined(properties) &&\n (isNullOrUndefined(properties.dataSource) ||\n (!(properties.dataSource instanceof DataManager) && properties.dataSource.length === 0)))) {\n this.isActive = true;\n this.resetSelection(properties);\n }\n var dataItem = this.getItemData();\n if (this.previousValue === dataItem.value) {\n return;\n }\n this.onChangeEvent(e);\n };\n DropDownList.prototype.resetSelection = function (properties) {\n if (this.list) {\n if ((!isNullOrUndefined(properties) &&\n (isNullOrUndefined(properties.dataSource) ||\n (!(properties.dataSource instanceof DataManager) && properties.dataSource.length === 0)))) {\n this.selectedLI = null;\n this.actionCompleteData.isUpdated = false;\n this.actionCompleteData.ulElement = null;\n this.actionCompleteData.list = null;\n this.resetList(properties.dataSource);\n }\n else {\n if (this.allowFiltering && this.getModuleName() !== 'autocomplete'\n && !isNullOrUndefined(this.actionCompleteData.ulElement) && !isNullOrUndefined(this.actionCompleteData.list) &&\n this.actionCompleteData.list.length > 0) {\n this.onActionComplete(this.actionCompleteData.ulElement.cloneNode(true), this.actionCompleteData.list);\n }\n this.resetFocusElement();\n }\n }\n if (!isNullOrUndefined(this.hiddenElement)) {\n this.hiddenElement.innerHTML = '';\n }\n if (!isNullOrUndefined(this.inputElement)) {\n this.inputElement.value = '';\n }\n this.value = null;\n this.itemData = null;\n this.text = null;\n this.index = null;\n this.activeIndex = null;\n this.item = null;\n this.queryString = '';\n if (this.valueTempElement) {\n detach(this.valueTempElement);\n this.inputElement.style.display = 'block';\n this.valueTempElement = null;\n }\n this.setSelection(null, null);\n this.isSelectCustom = false;\n this.updateIconState();\n this.cloneElements();\n };\n DropDownList.prototype.setHTMLAttributes = function () {\n if (Object.keys(this.htmlAttributes).length) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var htmlAttr = _a[_i];\n if (htmlAttr === 'class') {\n var updatedClassValue = (this.htmlAttributes[\"\" + htmlAttr].replace(/\\s+/g, ' ')).trim();\n if (updatedClassValue !== '') {\n addClass([this.inputWrapper.container], updatedClassValue.split(' '));\n }\n }\n else if (htmlAttr === 'disabled' && this.htmlAttributes[\"\" + htmlAttr] === 'disabled') {\n this.enabled = false;\n this.setEnable();\n }\n else if (htmlAttr === 'readonly' && !isNullOrUndefined(this.htmlAttributes[\"\" + htmlAttr])) {\n this.readonly = true;\n this.dataBind();\n }\n else if (htmlAttr === 'style') {\n this.inputWrapper.container.setAttribute('style', this.htmlAttributes[\"\" + htmlAttr]);\n }\n else if (htmlAttr === 'aria-label') {\n if (this.getModuleName() === 'autocomplete' || this.getModuleName() === 'combobox') {\n this.inputElement.setAttribute('aria-label', this.htmlAttributes[\"\" + htmlAttr]);\n }\n else {\n this.inputWrapper.container.setAttribute('aria-label', this.htmlAttributes[\"\" + htmlAttr]);\n }\n }\n else {\n var defaultAttr = ['title', 'id', 'placeholder',\n 'role', 'autocomplete', 'autocapitalize', 'spellcheck', 'minlength', 'maxlength'];\n var validateAttr = ['name', 'required'];\n if (this.getModuleName() === 'autocomplete' || this.getModuleName() === 'combobox') {\n defaultAttr.push('tabindex');\n }\n if (validateAttr.indexOf(htmlAttr) > -1 || htmlAttr.indexOf('data') === 0) {\n this.hiddenElement.setAttribute(htmlAttr, this.htmlAttributes[\"\" + htmlAttr]);\n }\n else if (defaultAttr.indexOf(htmlAttr) > -1) {\n if (htmlAttr === 'placeholder') {\n Input.setPlaceholder(this.htmlAttributes[\"\" + htmlAttr], this.inputElement);\n }\n else {\n this.inputElement.setAttribute(htmlAttr, this.htmlAttributes[\"\" + htmlAttr]);\n }\n }\n else {\n this.inputWrapper.container.setAttribute(htmlAttr, this.htmlAttributes[\"\" + htmlAttr]);\n }\n }\n }\n }\n if (this.getModuleName() === 'autocomplete' || this.getModuleName() === 'combobox') {\n this.inputWrapper.container.removeAttribute('tabindex');\n }\n };\n DropDownList.prototype.getAriaAttributes = function () {\n return {\n 'aria-disabled': 'false',\n 'role': 'combobox',\n 'aria-expanded': 'false',\n 'aria-live': 'polite',\n 'aria-labelledby': this.hiddenElement.id\n };\n };\n DropDownList.prototype.setEnableRtl = function () {\n Input.setEnableRtl(this.enableRtl, [this.inputElement.parentElement]);\n if (this.popupObj) {\n this.popupObj.enableRtl = this.enableRtl;\n this.popupObj.dataBind();\n }\n };\n DropDownList.prototype.setEnable = function () {\n Input.setEnabled(this.enabled, this.inputElement);\n if (this.enabled) {\n removeClass([this.inputWrapper.container], dropDownListClasses.disable);\n this.inputElement.setAttribute('aria-disabled', 'false');\n this.targetElement().setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.hidePopup();\n addClass([this.inputWrapper.container], dropDownListClasses.disable);\n this.inputElement.setAttribute('aria-disabled', 'true');\n this.targetElement().tabIndex = -1;\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} Returns the persisted data of the component.\n */\n DropDownList.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n DropDownList.prototype.getLocaleName = function () {\n return 'drop-down-list';\n };\n DropDownList.prototype.preventTabIndex = function (element) {\n if (this.getModuleName() === 'dropdownlist') {\n element.tabIndex = -1;\n }\n };\n DropDownList.prototype.targetElement = function () {\n return !isNullOrUndefined(this.inputWrapper) ? this.inputWrapper.container : null;\n };\n DropDownList.prototype.getNgDirective = function () {\n return 'EJS-DROPDOWNLIST';\n };\n DropDownList.prototype.getElementByText = function (text) {\n return this.getElementByValue(this.getValueByText(text));\n };\n DropDownList.prototype.getElementByValue = function (value) {\n var item;\n var listItems = this.getItems();\n for (var _i = 0, listItems_1 = listItems; _i < listItems_1.length; _i++) {\n var liItem = listItems_1[_i];\n if (this.getFormattedValue(liItem.getAttribute('data-value')) === value) {\n item = liItem;\n break;\n }\n }\n return item;\n };\n DropDownList.prototype.initValue = function () {\n this.renderList();\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n else {\n this.updateValues();\n }\n };\n DropDownList.prototype.updateValues = function () {\n if (!isNullOrUndefined(this.value)) {\n this.setSelection(this.getElementByValue(this.value), null);\n }\n else if (this.text && isNullOrUndefined(this.value)) {\n var element = this.getElementByText(this.text);\n if (isNullOrUndefined(element)) {\n this.setProperties({ text: null });\n return;\n }\n else {\n this.setSelection(element, null);\n }\n }\n else {\n this.setSelection(this.liCollections[this.activeIndex], null);\n }\n this.setHiddenValue();\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n DropDownList.prototype.onBlurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n var target = e.relatedTarget;\n var currentTarget = e.target;\n var isPreventBlur = this.isPreventBlur;\n this.isPreventBlur = false;\n //IE 11 - issue\n if (isPreventBlur && !this.isDocumentClick && this.isPopupOpen && (!isNullOrUndefined(currentTarget) ||\n !this.isFilterLayout() && isNullOrUndefined(target))) {\n if (this.getModuleName() === 'dropdownlist' && this.allowFiltering && this.isPopupOpen) {\n this.filterInput.focus();\n }\n else {\n this.targetElement().focus();\n }\n return;\n }\n if (this.isDocumentClick || (!isNullOrUndefined(this.popupObj)\n && document.body.contains(this.popupObj.element) &&\n this.popupObj.element.classList.contains(dropDownListClasses.mobileFilter))) {\n if (!this.beforePopupOpen) {\n this.isDocumentClick = false;\n }\n return;\n }\n if (((this.getModuleName() === 'dropdownlist' && !this.isFilterFocus && target !== this.inputElement)\n && (document.activeElement !== target || (document.activeElement === target &&\n currentTarget.classList.contains(dropDownListClasses.inputFocus)))) ||\n (isNullOrUndefined(target) && this.getModuleName() === 'dropdownlist' && this.allowFiltering &&\n currentTarget !== this.inputWrapper.container) || this.getModuleName() !== 'dropdownlist' &&\n !this.inputWrapper.container.contains(target) || this.isTabKey) {\n this.isDocumentClick = this.isPopupOpen ? true : false;\n this.focusOutAction(e);\n this.isTabKey = false;\n }\n if (this.isRequested && !this.isPopupOpen && !this.isPreventBlur) {\n this.isActive = false;\n this.beforePopupOpen = false;\n }\n };\n DropDownList.prototype.focusOutAction = function (e) {\n this.isInteracted = false;\n this.focusOut(e);\n this.onFocusOut();\n };\n DropDownList.prototype.onFocusOut = function () {\n if (!this.enabled) {\n return;\n }\n if (this.isSelected) {\n this.isSelectCustom = false;\n this.onChangeEvent(null);\n }\n this.floatLabelChange();\n this.dispatchEvent(this.hiddenElement, 'change');\n if (this.getModuleName() === 'dropdownlist' && this.element.tagName !== 'INPUT') {\n this.dispatchEvent(this.inputElement, 'blur');\n }\n if (this.inputWrapper.clearButton) {\n addClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n this.trigger('blur');\n };\n DropDownList.prototype.onFocus = function (e) {\n if (!this.isInteracted) {\n this.isInteracted = true;\n var args = { isInteracted: e ? true : false, event: e };\n this.trigger('focus', args);\n }\n this.updateIconState();\n };\n DropDownList.prototype.resetValueHandler = function (e) {\n var formElement = closest(this.inputElement, 'form');\n if (formElement && e.target === formElement) {\n var val = (this.element.tagName === this.getNgDirective()) ? null : this.inputElement.getAttribute('value');\n this.text = val;\n }\n };\n DropDownList.prototype.wireEvent = function () {\n EventHandler.add(this.inputWrapper.container, 'mousedown', this.dropDownClick, this);\n EventHandler.add(this.inputWrapper.container, 'focus', this.focusIn, this);\n EventHandler.add(this.inputWrapper.container, 'keypress', this.onSearch, this);\n EventHandler.add(window, 'resize', this.windowResize, this);\n this.bindCommonEvent();\n };\n DropDownList.prototype.bindCommonEvent = function () {\n EventHandler.add(this.targetElement(), 'blur', this.onBlurHandler, this);\n var formElement = closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.add(formElement, 'reset', this.resetValueHandler, this);\n }\n if (!Browser.isDevice) {\n this.keyboardModule = new KeyboardEvents(this.targetElement(), {\n keyAction: this.keyActionHandler.bind(this), keyConfigs: this.keyConfigure, eventName: 'keydown'\n });\n }\n else {\n this.keyboardModule = new KeyboardEvents(this.targetElement(), {\n keyAction: this.mobileKeyActionHandler.bind(this), keyConfigs: this.keyConfigure, eventName: 'keydown'\n });\n }\n this.bindClearEvent();\n };\n DropDownList.prototype.windowResize = function () {\n if (this.isPopupOpen) {\n this.popupObj.refreshPosition(this.inputWrapper.container);\n }\n };\n DropDownList.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.resetHandler, this);\n }\n };\n DropDownList.prototype.unBindCommonEvent = function () {\n if (!isNullOrUndefined(this.inputWrapper) && this.targetElement()) {\n EventHandler.remove(this.targetElement(), 'blur', this.onBlurHandler);\n }\n var formElement = this.inputElement && closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.remove(formElement, 'reset', this.resetValueHandler);\n }\n if (!Browser.isDevice) {\n this.keyboardModule.destroy();\n }\n if (this.showClearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown', this.resetHandler);\n }\n };\n DropDownList.prototype.updateIconState = function () {\n if (this.showClearButton) {\n if (this.inputElement.value !== '' && !this.readonly) {\n removeClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n else {\n addClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n }\n };\n /**\n * Event binding for list\n *\n * @returns {void}\n */\n DropDownList.prototype.wireListEvents = function () {\n if (!isNullOrUndefined(this.list)) {\n EventHandler.add(this.list, 'click', this.onMouseClick, this);\n EventHandler.add(this.list, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.list, 'mouseout', this.onMouseLeave, this);\n }\n };\n DropDownList.prototype.onSearch = function (e) {\n if (e.charCode !== 32 && e.charCode !== 13) {\n if (this.list === undefined) {\n this.renderList();\n }\n this.searchKeyEvent = e;\n this.onServerIncrementalSearch(e);\n }\n };\n DropDownList.prototype.onServerIncrementalSearch = function (e) {\n if (!this.isRequested && !isNullOrUndefined(this.list) &&\n !isNullOrUndefined(this.list.querySelector('li')) && this.enabled && !this.readonly) {\n this.incrementalSearch(e);\n }\n };\n DropDownList.prototype.onMouseClick = function (e) {\n var target = e.target;\n var li = closest(target, '.' + dropDownBaseClasses.li);\n if (!this.isValidLI(li)) {\n return;\n }\n this.setSelection(li, e);\n if (Browser.isDevice && this.isFilterLayout()) {\n history.back();\n }\n else {\n var delay = 100;\n this.closePopup(delay, e);\n }\n };\n DropDownList.prototype.onMouseOver = function (e) {\n var currentLi = closest(e.target, '.' + dropDownBaseClasses.li);\n this.setHover(currentLi);\n };\n DropDownList.prototype.setHover = function (li) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(dropDownBaseClasses.hover)) {\n this.removeHover();\n addClass([li], dropDownBaseClasses.hover);\n }\n };\n DropDownList.prototype.onMouseLeave = function () {\n this.removeHover();\n };\n DropDownList.prototype.removeHover = function () {\n if (this.list) {\n var hoveredItem = this.list.querySelectorAll('.' + dropDownBaseClasses.hover);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, dropDownBaseClasses.hover);\n }\n }\n };\n DropDownList.prototype.isValidLI = function (li) {\n return (li && li.hasAttribute('role') && li.getAttribute('role') === 'option');\n };\n DropDownList.prototype.incrementalSearch = function (e) {\n if (this.liCollections.length > 0) {\n var li = incrementalSearch(e.charCode, this.liCollections, this.activeIndex, true, this.element.id);\n if (!isNullOrUndefined(li)) {\n this.setSelection(li, e);\n this.setScrollPosition();\n }\n }\n };\n /**\n * Hides the spinner loader.\n *\n * @returns {void}\n */\n DropDownList.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n removeClass([this.spinnerElement], dropDownListClasses.disableIcon);\n this.spinnerElement.innerHTML = '';\n this.spinnerElement = null;\n }\n };\n /**\n * Shows the spinner loader.\n *\n * @returns {void}\n */\n DropDownList.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n this.spinnerElement = Browser.isDevice && !isNullOrUndefined(this.filterInputObj) && this.filterInputObj.buttons[1] ||\n !isNullOrUndefined(this.filterInputObj) && this.filterInputObj.buttons[0] || this.inputWrapper.buttons[0];\n addClass([this.spinnerElement], dropDownListClasses.disableIcon);\n createSpinner({\n target: this.spinnerElement,\n width: Browser.isDevice ? '16px' : '14px'\n }, this.createElement);\n showSpinner(this.spinnerElement);\n }\n };\n DropDownList.prototype.keyActionHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n var preventAction = e.action === 'pageUp' || e.action === 'pageDown';\n var preventHomeEnd = this.getModuleName() !== 'dropdownlist' && (e.action === 'home' || e.action === 'end');\n this.isEscapeKey = e.action === 'escape';\n this.isTabKey = !this.isPopupOpen && e.action === 'tab';\n var isNavigation = (e.action === 'down' || e.action === 'up' || e.action === 'pageUp' || e.action === 'pageDown'\n || e.action === 'home' || e.action === 'end');\n if ((this.isEditTextBox() || preventAction || preventHomeEnd) && !this.isPopupOpen) {\n return;\n }\n if (!this.readonly) {\n var isTabAction = e.action === 'tab' || e.action === 'close';\n if (isNullOrUndefined(this.list) && !this.isRequested && !isTabAction && e.action !== 'escape') {\n this.searchKeyEvent = e;\n this.renderList(e);\n }\n if (isNullOrUndefined(this.list) || (!isNullOrUndefined(this.liCollections) &&\n isNavigation && this.liCollections.length === 0) || this.isRequested) {\n return;\n }\n if ((isTabAction && this.getModuleName() !== 'autocomplete') && this.isPopupOpen\n || e.action === 'escape') {\n e.preventDefault();\n }\n this.isSelected = e.action === 'escape' ? false : this.isSelected;\n this.isTyped = (isNavigation || e.action === 'escape') ? false : this.isTyped;\n switch (e.action) {\n case 'down':\n case 'up':\n this.updateUpDownAction(e);\n break;\n case 'pageUp':\n this.pageUpSelection(this.activeIndex - this.getPageCount(), e);\n e.preventDefault();\n break;\n case 'pageDown':\n this.pageDownSelection(this.activeIndex + this.getPageCount(), e);\n e.preventDefault();\n break;\n case 'home':\n this.updateHomeEndAction(e);\n break;\n case 'end':\n this.updateHomeEndAction(e);\n break;\n case 'space':\n if (this.getModuleName() === 'dropdownlist') {\n if (!this.beforePopupOpen) {\n this.showPopup();\n }\n }\n break;\n case 'open':\n this.showPopup(e);\n break;\n case 'hide':\n this.preventAltUp = this.isPopupOpen;\n this.hidePopup(e);\n this.focusDropDown(e);\n break;\n case 'enter':\n this.selectCurrentItem(e);\n break;\n case 'tab':\n this.selectCurrentValueOnTab(e);\n break;\n case 'escape':\n case 'close':\n if (this.isPopupOpen) {\n this.hidePopup(e);\n this.focusDropDown(e);\n }\n break;\n }\n }\n };\n DropDownList.prototype.updateUpDownAction = function (e) {\n var focusEle = this.list.querySelector('.' + dropDownListClasses.focus);\n if (this.isSelectFocusItem(focusEle)) {\n this.setSelection(focusEle, e);\n }\n else if (!isNullOrUndefined(this.liCollections)) {\n var index = e.action === 'down' ? this.activeIndex + 1 : this.activeIndex - 1;\n var startIndex = 0;\n if (this.getModuleName() === 'autocomplete') {\n startIndex = e.action === 'down' && isNullOrUndefined(this.activeIndex) ? 0 : this.liCollections.length - 1;\n index = index < 0 ? this.liCollections.length - 1 : index === this.liCollections.length ? 0 : index;\n }\n var nextItem = void 0;\n if (this.getModuleName() !== 'autocomplete' || this.getModuleName() === 'autocomplete' && this.isPopupOpen) {\n nextItem = isNullOrUndefined(this.activeIndex) ? this.liCollections[startIndex]\n : this.liCollections[index];\n }\n if (!isNullOrUndefined(nextItem)) {\n this.setSelection(nextItem, e);\n }\n }\n e.preventDefault();\n };\n DropDownList.prototype.updateHomeEndAction = function (e) {\n if (this.getModuleName() === 'dropdownlist') {\n var findLi = 0;\n if (e.action === 'home') {\n findLi = 0;\n }\n else {\n findLi = this.getItems().length - 1;\n }\n e.preventDefault();\n if (this.activeIndex === findLi) {\n return;\n }\n this.setSelection(this.liCollections[findLi], e);\n }\n };\n DropDownList.prototype.selectCurrentValueOnTab = function (e) {\n if (this.getModuleName() === 'autocomplete') {\n this.selectCurrentItem(e);\n }\n else {\n if (this.isPopupOpen) {\n this.hidePopup(e);\n this.focusDropDown(e);\n }\n }\n };\n DropDownList.prototype.mobileKeyActionHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if ((this.isEditTextBox()) && !this.isPopupOpen) {\n return;\n }\n if (!this.readonly) {\n if (this.list === undefined && !this.isRequested) {\n this.searchKeyEvent = e;\n this.renderList();\n }\n if (isNullOrUndefined(this.list) || (!isNullOrUndefined(this.liCollections) &&\n this.liCollections.length === 0) || this.isRequested) {\n return;\n }\n if (e.action === 'enter') {\n this.selectCurrentItem(e);\n }\n }\n };\n DropDownList.prototype.selectCurrentItem = function (e) {\n if (this.isPopupOpen) {\n var li = this.list.querySelector('.' + dropDownListClasses.focus);\n if (li) {\n this.setSelection(li, e);\n this.isTyped = false;\n }\n if (this.isSelected) {\n this.isSelectCustom = false;\n this.onChangeEvent(e);\n }\n this.hidePopup(e);\n this.focusDropDown(e);\n }\n else {\n this.showPopup();\n }\n };\n DropDownList.prototype.isSelectFocusItem = function (element) {\n return !isNullOrUndefined(element);\n };\n DropDownList.prototype.getPageCount = function () {\n var liHeight = this.list.classList.contains(dropDownBaseClasses.noData) ? null :\n getComputedStyle(this.getItems()[0], null).getPropertyValue('height');\n return Math.round(this.list.getBoundingClientRect().height / parseInt(liHeight, 10));\n };\n DropDownList.prototype.pageUpSelection = function (steps, event) {\n var previousItem = steps >= 0 ? this.liCollections[steps + 1] : this.liCollections[0];\n this.setSelection(previousItem, event);\n };\n DropDownList.prototype.pageDownSelection = function (steps, event) {\n var list = this.getItems();\n var previousItem = steps <= list.length ? this.liCollections[steps - 1] : this.liCollections[list.length - 1];\n this.setSelection(previousItem, event);\n };\n DropDownList.prototype.unWireEvent = function () {\n if (!isNullOrUndefined(this.inputWrapper)) {\n EventHandler.remove(this.inputWrapper.container, 'mousedown', this.dropDownClick);\n EventHandler.remove(this.inputWrapper.container, 'keypress', this.onSearch);\n EventHandler.remove(this.inputWrapper.container, 'focus', this.focusIn);\n EventHandler.remove(window, 'resize', this.windowResize);\n }\n this.unBindCommonEvent();\n };\n /**\n * Event un binding for list items.\n *\n * @returns {void}\n */\n DropDownList.prototype.unWireListEvents = function () {\n if (this.list) {\n EventHandler.remove(this.list, 'click', this.onMouseClick);\n EventHandler.remove(this.list, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.list, 'mouseout', this.onMouseLeave);\n }\n };\n DropDownList.prototype.checkSelector = function (id) {\n return '[id=\"' + id.replace(/(:|\\.|\\[|\\]|,|=|@|\\\\|\\/|#)/g, '\\\\$1') + '\"]';\n };\n DropDownList.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!(!isNullOrUndefined(this.popupObj) && closest(target, this.checkSelector(this.popupObj.element.id))) &&\n !isNullOrUndefined(this.inputWrapper) && !this.inputWrapper.container.contains(e.target)) {\n if (this.inputWrapper.container.classList.contains(dropDownListClasses.inputFocus) || this.isPopupOpen) {\n this.isDocumentClick = true;\n var isActive = this.isRequested;\n this.isInteracted = false;\n this.hidePopup(e);\n if (!isActive) {\n this.onFocusOut();\n this.inputWrapper.container.classList.remove(dropDownListClasses.inputFocus);\n }\n }\n }\n else if (target !== this.inputElement && !(this.allowFiltering && target === this.filterInput)\n && !(this.getModuleName() === 'combobox' &&\n !this.allowFiltering && Browser.isDevice && target === this.inputWrapper.buttons[0])) {\n this.isPreventBlur = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.targetElement() ||\n document.activeElement === this.filterInput);\n e.preventDefault();\n }\n };\n DropDownList.prototype.activeStateChange = function () {\n if (this.isDocumentClick) {\n this.hidePopup();\n this.onFocusOut();\n this.inputWrapper.container.classList.remove(dropDownListClasses.inputFocus);\n }\n };\n DropDownList.prototype.focusDropDown = function (e) {\n if (!this.initial && this.isFilterLayout()) {\n this.focusIn(e);\n }\n };\n DropDownList.prototype.dropDownClick = function (e) {\n if (e.which === 3 || e.button === 2) {\n return;\n }\n if (this.targetElement().classList.contains(dropDownListClasses.disable) || this.inputWrapper.clearButton === e.target) {\n return;\n }\n var target = e.target;\n if (target !== this.inputElement && !(this.allowFiltering && target === this.filterInput) && this.getModuleName() !== 'combobox') {\n e.preventDefault();\n }\n if (!this.readonly) {\n if (this.isPopupOpen) {\n this.hidePopup(e);\n if (this.isFilterLayout()) {\n this.focusDropDown(e);\n }\n }\n else {\n this.focusIn(e);\n this.floatLabelChange();\n this.queryString = this.inputElement.value.trim() === '' ? null : this.inputElement.value;\n this.isDropDownClick = true;\n this.showPopup(e);\n }\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n // eslint-disable-next-line max-len\n var duration = (this.element.tagName === this.getNgDirective() && this.itemTemplate) ? 500 : 100;\n if (!this.isSecondClick) {\n setTimeout(function () {\n proxy_1.cloneElements();\n proxy_1.isSecondClick = true;\n }, duration);\n }\n }\n else {\n this.focusIn(e);\n }\n };\n DropDownList.prototype.cloneElements = function () {\n if (this.list) {\n var ulElement = this.list.querySelector('ul');\n if (ulElement) {\n ulElement = ulElement.cloneNode ? ulElement.cloneNode(true) : ulElement;\n this.actionCompleteData.ulElement = ulElement;\n }\n }\n };\n DropDownList.prototype.updateSelectedItem = function (li, e, preventSelect, isSelection) {\n var _this = this;\n this.removeSelection();\n li.classList.add(dropDownBaseClasses.selected);\n this.removeHover();\n var value = li.getAttribute('data-value') !== \"null\" ? this.getFormattedValue(li.getAttribute('data-value')) : null;\n var selectedData = this.getDataByValue(value);\n if (!this.initial && !preventSelect && !isNullOrUndefined(e)) {\n var items = this.detachChanges(selectedData);\n this.isSelected = true;\n var eventArgs = {\n e: e,\n item: li,\n itemData: items,\n isInteracted: e ? true : false,\n cancel: false\n };\n this.trigger('select', eventArgs, function (eventArgs) {\n if (eventArgs.cancel) {\n li.classList.remove(dropDownBaseClasses.selected);\n }\n else {\n _this.selectEventCallback(li, e, preventSelect, selectedData, value);\n if (isSelection) {\n _this.setSelectOptions(li, e);\n }\n }\n });\n }\n else {\n this.selectEventCallback(li, e, preventSelect, selectedData, value);\n if (isSelection) {\n this.setSelectOptions(li, e);\n }\n }\n };\n DropDownList.prototype.selectEventCallback = function (li, e, preventSelect, selectedData, value) {\n this.previousItemData = (!isNullOrUndefined(this.itemData)) ? this.itemData : null;\n if (this.itemData != selectedData) {\n this.previousValue = (!isNullOrUndefined(this.itemData)) ? typeof this.itemData == \"object\" ? this.checkFieldValue(this.itemData, this.fields.value.split('.')) : this.itemData : null;\n }\n this.item = li;\n this.itemData = selectedData;\n var focusedItem = this.list.querySelector('.' + dropDownBaseClasses.focus);\n if (focusedItem) {\n removeClass([focusedItem], dropDownBaseClasses.focus);\n }\n li.setAttribute('aria-selected', 'true');\n this.activeIndex = this.getIndexByValue(value);\n };\n DropDownList.prototype.activeItem = function (li) {\n if (this.isValidLI(li) && !li.classList.contains(dropDownBaseClasses.selected)) {\n this.removeSelection();\n li.classList.add(dropDownBaseClasses.selected);\n this.removeHover();\n li.setAttribute('aria-selected', 'true');\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DropDownList.prototype.setValue = function (e) {\n var dataItem = this.getItemData();\n if (dataItem.value === null) {\n Input.setValue(null, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(dataItem.text, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n if (this.valueTemplate && this.itemData !== null) {\n this.setValueTemplate();\n }\n else if (!isNullOrUndefined(this.valueTempElement) && this.inputElement.previousSibling === this.valueTempElement) {\n detach(this.valueTempElement);\n this.inputElement.style.display = 'block';\n }\n var clearIcon = dropDownListClasses.clearIcon;\n var isFilterElement = this.isFiltering() && this.filterInput && (this.getModuleName() === 'combobox');\n var clearElement = isFilterElement && this.filterInput.parentElement.querySelector('.' + clearIcon);\n if (this.isFiltering() && clearElement) {\n clearElement.style.removeProperty('visibility');\n }\n if (this.previousValue === dataItem.value) {\n this.isSelected = false;\n return true;\n }\n else {\n this.isSelected = !this.initial ? true : false;\n this.isSelectCustom = false;\n if (this.getModuleName() === 'dropdownlist') {\n this.updateIconState();\n }\n return false;\n }\n };\n DropDownList.prototype.setSelection = function (li, e) {\n if (this.isValidLI(li) && (!li.classList.contains(dropDownBaseClasses.selected) || (this.isPopupOpen && this.isSelected\n && li.classList.contains(dropDownBaseClasses.selected)))) {\n this.updateSelectedItem(li, e, false, true);\n }\n else {\n this.setSelectOptions(li, e);\n }\n };\n DropDownList.prototype.setSelectOptions = function (li, e) {\n if (this.list) {\n this.removeHover();\n }\n this.previousSelectedLI = (!isNullOrUndefined(this.selectedLI)) ? this.selectedLI : null;\n this.selectedLI = li;\n if (this.setValue(e)) {\n return;\n }\n if ((!this.isPopupOpen && !isNullOrUndefined(li)) || (this.isPopupOpen && !isNullOrUndefined(e) &&\n (e.type !== 'keydown' || e.type === 'keydown' && e.action === 'enter'))) {\n this.isSelectCustom = false;\n this.onChangeEvent(e);\n }\n if (this.isPopupOpen && !isNullOrUndefined(this.selectedLI) && this.itemData !== null && (!e || e.type !== 'click')) {\n this.setScrollPosition(e);\n }\n if (Browser.info.name !== 'mozilla') {\n if (this.targetElement()) {\n attributes(this.targetElement(), { 'aria-describedby': this.inputElement.id !== '' ? this.inputElement.id : this.element.id });\n this.targetElement().removeAttribute('aria-live');\n }\n }\n if (this.isPopupOpen && !isNullOrUndefined(this.ulElement) && !isNullOrUndefined(this.ulElement.getElementsByClassName('e-item-focus')[0])) {\n attributes(this.targetElement(), { 'aria-activedescendant': this.ulElement.getElementsByClassName('e-item-focus')[0].id });\n }\n else if (this.isPopupOpen && !isNullOrUndefined(this.ulElement) && !isNullOrUndefined(this.ulElement.getElementsByClassName('e-active')[0])) {\n attributes(this.targetElement(), { 'aria-activedescendant': this.ulElement.getElementsByClassName('e-active')[0].id });\n }\n };\n DropDownList.prototype.dropdownCompiler = function (dropdownTemplate) {\n var checkTemplate = false;\n if (typeof dropdownTemplate !== 'function' && dropdownTemplate) {\n try {\n checkTemplate = (document.querySelectorAll(dropdownTemplate).length) ? true : false;\n }\n catch (exception) {\n checkTemplate = false;\n }\n }\n return checkTemplate;\n };\n DropDownList.prototype.setValueTemplate = function () {\n var compiledString;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n this.clearTemplate(['valueTemplate']);\n if (this.valueTempElement) {\n detach(this.valueTempElement);\n this.inputElement.style.display = 'block';\n this.valueTempElement = null;\n }\n }\n if (!this.valueTempElement) {\n this.valueTempElement = this.createElement('span', { className: dropDownListClasses.value });\n this.inputElement.parentElement.insertBefore(this.valueTempElement, this.inputElement);\n this.inputElement.style.display = 'none';\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!this.isReact) {\n this.valueTempElement.innerHTML = '';\n }\n var valuecheck = this.dropdownCompiler(this.valueTemplate);\n if (typeof this.valueTemplate !== 'function' && valuecheck) {\n compiledString = compile(document.querySelector(this.valueTemplate).innerHTML.trim());\n }\n else {\n compiledString = compile(this.valueTemplate);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var valueCompTemp = compiledString(this.itemData, this, 'valueTemplate', this.valueTemplateId, this.isStringTemplate, null, this.valueTempElement);\n if (valueCompTemp && valueCompTemp.length > 0) {\n append(valueCompTemp, this.valueTempElement);\n }\n this.renderReactTemplates();\n };\n DropDownList.prototype.removeSelection = function () {\n if (this.list) {\n var selectedItems = this.list.querySelectorAll('.' + dropDownBaseClasses.selected);\n if (selectedItems.length) {\n removeClass(selectedItems, dropDownBaseClasses.selected);\n selectedItems[0].removeAttribute('aria-selected');\n }\n }\n };\n DropDownList.prototype.getItemData = function () {\n var fields = this.fields;\n var dataItem = null;\n dataItem = this.itemData;\n var dataValue;\n var dataText;\n if (!isNullOrUndefined(dataItem)) {\n dataValue = getValue(fields.value, dataItem);\n dataText = getValue(fields.text, dataItem);\n }\n var value = (!isNullOrUndefined(dataItem) &&\n !isUndefined(dataValue) ? dataValue : dataItem);\n var text = (!isNullOrUndefined(dataItem) &&\n !isUndefined(dataValue) ? dataText : dataItem);\n return { value: value, text: text };\n };\n /**\n * To trigger the change event for list.\n *\n * @param {MouseEvent | KeyboardEvent | TouchEvent} eve - Specifies the event arguments.\n * @returns {void}\n */\n DropDownList.prototype.onChangeEvent = function (eve) {\n var dataItem = this.getItemData();\n var index = this.isSelectCustom ? null : this.activeIndex;\n this.setProperties({ 'index': index, 'text': dataItem.text, 'value': dataItem.value }, true);\n this.detachChangeEvent(eve);\n };\n DropDownList.prototype.detachChanges = function (value) {\n var items;\n if (typeof value === 'string' ||\n typeof value === 'boolean' ||\n typeof value === 'number') {\n items = Object.defineProperties({}, {\n value: {\n value: value,\n enumerable: true\n },\n text: {\n value: value,\n enumerable: true\n }\n });\n }\n else {\n items = value;\n }\n return items;\n };\n DropDownList.prototype.detachChangeEvent = function (eve) {\n this.isSelected = false;\n this.previousValue = this.value;\n this.activeIndex = this.index;\n this.typedString = !isNullOrUndefined(this.text) ? this.text : '';\n if (!this.initial) {\n var items = this.detachChanges(this.itemData);\n var preItems = void 0;\n if (typeof this.previousItemData === 'string' ||\n typeof this.previousItemData === 'boolean' ||\n typeof this.previousItemData === 'number') {\n preItems = Object.defineProperties({}, {\n value: {\n value: this.previousItemData,\n enumerable: true\n },\n text: {\n value: this.previousItemData,\n enumerable: true\n }\n });\n }\n else {\n preItems = this.previousItemData;\n }\n this.setHiddenValue();\n var eventArgs = {\n e: eve,\n item: this.item,\n itemData: items,\n previousItem: this.previousSelectedLI,\n previousItemData: preItems,\n isInteracted: eve ? true : false,\n value: this.value,\n element: this.element,\n event: eve\n };\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', eventArgs);\n }\n }\n if ((isNullOrUndefined(this.value) || this.value === '') && this.floatLabelType !== 'Always') {\n removeClass([this.inputWrapper.container], 'e-valid-input');\n }\n };\n DropDownList.prototype.setHiddenValue = function () {\n if (!isNullOrUndefined(this.value)) {\n if (this.hiddenElement.querySelector('option')) {\n var selectedElement = this.hiddenElement.querySelector('option');\n selectedElement.textContent = this.text;\n selectedElement.setAttribute('value', this.value.toString());\n }\n else {\n if (!isNullOrUndefined(this.hiddenElement)) {\n this.hiddenElement.innerHTML = '';\n var selectedElement = this.hiddenElement.querySelector('option');\n selectedElement.setAttribute('value', this.value.toString());\n }\n }\n }\n else {\n this.hiddenElement.innerHTML = '';\n }\n };\n /**\n * Filter bar implementation\n *\n * @param {KeyboardEventArgs} e - Specifies the event arguments.\n * @returns {void}\n */\n DropDownList.prototype.onFilterUp = function (e) {\n if (!(e.ctrlKey && e.keyCode === 86) && (this.isValidKey || e.keyCode === 40 || e.keyCode === 38)) {\n this.isValidKey = false;\n switch (e.keyCode) {\n case 38: //up arrow\n case 40: //down arrow\n if (this.getModuleName() === 'autocomplete' && !this.isPopupOpen && !this.preventAltUp && !this.isRequested) {\n this.preventAutoFill = true;\n this.searchLists(e);\n }\n else {\n this.preventAutoFill = false;\n }\n this.preventAltUp = false;\n if (this.getModuleName() === 'autocomplete' && !isNullOrUndefined(this.ulElement) && !isNullOrUndefined(this.ulElement.getElementsByClassName('e-item-focus')[0])) {\n attributes(this.targetElement(), { 'aria-activedescendant': this.ulElement.getElementsByClassName('e-item-focus')[0].id });\n }\n e.preventDefault();\n break;\n case 46: //delete\n case 8: //backspace\n this.typedString = this.filterInput.value;\n if (!this.isPopupOpen && this.typedString !== '' || this.isPopupOpen && this.queryString.length > 0) {\n this.preventAutoFill = true;\n this.searchLists(e);\n }\n else if (this.typedString === '' && this.queryString === '' && this.getModuleName() !== 'autocomplete') {\n this.preventAutoFill = true;\n this.searchLists(e);\n }\n else if (this.typedString === '') {\n if (this.list) {\n this.resetFocusElement();\n }\n this.activeIndex = null;\n if (this.getModuleName() !== 'dropdownlist') {\n this.preventAutoFill = true;\n this.searchLists(e);\n if (this.getModuleName() === 'autocomplete') {\n this.hidePopup();\n }\n }\n }\n e.preventDefault();\n break;\n default:\n this.typedString = this.filterInput.value;\n this.preventAutoFill = false;\n this.searchLists(e);\n break;\n }\n }\n else {\n this.isValidKey = false;\n }\n };\n DropDownList.prototype.onFilterDown = function (e) {\n switch (e.keyCode) {\n case 13: //enter\n break;\n case 40: //down arrow\n case 38: //up arrow\n this.queryString = this.filterInput.value;\n e.preventDefault();\n break;\n case 9: //tab\n if (this.isPopupOpen && this.getModuleName() !== 'autocomplete') {\n e.preventDefault();\n }\n break;\n default:\n this.prevSelectPoints = this.getSelectionPoints();\n this.queryString = this.filterInput.value;\n break;\n }\n };\n DropDownList.prototype.removeFillSelection = function () {\n if (this.isInteracted) {\n var selection = this.getSelectionPoints();\n this.inputElement.setSelectionRange(selection.end, selection.end);\n }\n };\n DropDownList.prototype.getQuery = function (query) {\n var filterQuery;\n if (!this.isCustomFilter && this.allowFiltering && this.filterInput) {\n filterQuery = query ? query.clone() : this.query ? this.query.clone() : new Query();\n var filterType = this.typedString === '' ? 'contains' : this.filterType;\n var dataType = this.typeOfData(this.dataSource).typeof;\n if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n filterQuery.where('', filterType, this.typedString, this.ignoreCase, this.ignoreAccent);\n }\n else {\n var fields = (this.fields.text) ? this.fields.text : '';\n filterQuery.where(fields, filterType, this.typedString, this.ignoreCase, this.ignoreAccent);\n }\n }\n else {\n filterQuery = query ? query.clone() : this.query ? this.query.clone() : new Query();\n }\n return filterQuery;\n };\n DropDownList.prototype.getSelectionPoints = function () {\n var input = this.inputElement;\n return { start: Math.abs(input.selectionStart), end: Math.abs(input.selectionEnd) };\n };\n DropDownList.prototype.searchLists = function (e) {\n var _this = this;\n this.isTyped = true;\n this.activeIndex = null;\n this.isListSearched = true;\n if (this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon)) {\n var clearElement = this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon);\n clearElement.style.visibility = this.filterInput.value === '' ? 'hidden' : 'visible';\n }\n this.isDataFetched = false;\n if (this.isFiltering()) {\n var eventArgs_1 = {\n preventDefaultAction: false,\n text: this.filterInput.value,\n updateData: function (dataSource, query, fields) {\n if (eventArgs_1.cancel) {\n return;\n }\n _this.isCustomFilter = true;\n _this.filteringAction(dataSource, query, fields);\n },\n baseEventArgs: e,\n cancel: false\n };\n this.trigger('filtering', eventArgs_1, function (eventArgs) {\n if (!eventArgs.cancel && !_this.isCustomFilter && !eventArgs.preventDefaultAction) {\n _this.filteringAction(_this.dataSource, null, _this.fields);\n }\n });\n }\n };\n /**\n * To filter the data from given data source by using query\n *\n * @param {Object[] | DataManager } dataSource - Set the data source to filter.\n * @param {Query} query - Specify the query to filter the data.\n * @param {FieldSettingsModel} fields - Specify the fields to map the column in the data table.\n * @returns {void}\n\n */\n DropDownList.prototype.filter = function (dataSource, query, fields) {\n this.isCustomFilter = true;\n this.filteringAction(dataSource, query, fields);\n };\n DropDownList.prototype.filteringAction = function (dataSource, query, fields) {\n if (!isNullOrUndefined(this.filterInput)) {\n this.beforePopupOpen = (!this.isPopupOpen && this.getModuleName() === 'combobox' && this.filterInput.value === '') ?\n false : true;\n if (this.filterInput.value.trim() === '' && !this.itemTemplate) {\n this.actionCompleteData.isUpdated = false;\n this.isTyped = false;\n if (!isNullOrUndefined(this.actionCompleteData.ulElement) && !isNullOrUndefined(this.actionCompleteData.list)) {\n this.onActionComplete(this.actionCompleteData.ulElement, this.actionCompleteData.list);\n }\n this.isTyped = true;\n if (!isNullOrUndefined(this.itemData) && this.getModuleName() === 'dropdownlist') {\n this.focusIndexItem();\n this.setScrollPosition();\n }\n this.isNotSearchList = true;\n }\n else {\n this.isNotSearchList = false;\n query = (this.filterInput.value.trim() === '') ? null : query;\n this.resetList(dataSource, fields, query);\n }\n this.renderReactTemplates();\n }\n };\n DropDownList.prototype.setSearchBox = function (popupElement) {\n if (this.isFiltering()) {\n var parentElement = popupElement.querySelector('.' + dropDownListClasses.filterParent) ?\n popupElement.querySelector('.' + dropDownListClasses.filterParent) : this.createElement('span', {\n className: dropDownListClasses.filterParent\n });\n this.filterInput = this.createElement('input', {\n attrs: { type: 'text' },\n className: dropDownListClasses.filterInput\n });\n this.element.parentNode.insertBefore(this.filterInput, this.element);\n var backIcon = false;\n if (Browser.isDevice) {\n backIcon = true;\n }\n this.filterInputObj = Input.createInput({\n element: this.filterInput,\n buttons: backIcon ?\n [dropDownListClasses.backIcon, dropDownListClasses.filterBarClearIcon] : [dropDownListClasses.filterBarClearIcon],\n properties: { placeholder: this.filterBarPlaceholder }\n }, this.createElement);\n if (!isNullOrUndefined(this.cssClass)) {\n if (this.cssClass.split(' ').indexOf('e-outline') !== -1) {\n addClass([this.filterInputObj.container], 'e-outline');\n }\n else if (this.cssClass.split(' ').indexOf('e-filled') !== -1) {\n addClass([this.filterInputObj.container], 'e-filled');\n }\n }\n append([this.filterInputObj.container], parentElement);\n prepend([parentElement], popupElement);\n attributes(this.filterInput, {\n 'aria-disabled': 'false',\n 'role': 'combobox',\n 'autocomplete': 'off',\n 'autocapitalize': 'off',\n 'spellcheck': 'false'\n });\n this.clearIconElement = this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon);\n if (!Browser.isDevice && this.clearIconElement) {\n EventHandler.add(this.clearIconElement, 'click', this.clearText, this);\n this.clearIconElement.style.visibility = 'hidden';\n }\n if (!Browser.isDevice) {\n this.searchKeyModule = new KeyboardEvents(this.filterInput, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigure,\n eventName: 'keydown'\n });\n }\n else {\n this.searchKeyModule = new KeyboardEvents(this.filterInput, {\n keyAction: this.mobileKeyActionHandler.bind(this),\n keyConfigs: this.keyConfigure,\n eventName: 'keydown'\n });\n }\n EventHandler.add(this.filterInput, 'input', this.onInput, this);\n EventHandler.add(this.filterInput, 'keyup', this.onFilterUp, this);\n EventHandler.add(this.filterInput, 'keydown', this.onFilterDown, this);\n EventHandler.add(this.filterInput, 'blur', this.onBlurHandler, this);\n EventHandler.add(this.filterInput, 'paste', this.pasteHandler, this);\n return this.filterInputObj;\n }\n else {\n return inputObject;\n }\n };\n DropDownList.prototype.onInput = function (e) {\n this.isValidKey = true;\n if (this.getModuleName() === 'combobox') {\n this.updateIconState();\n }\n // For filtering works in mobile firefox.\n if (Browser.isDevice && Browser.info.name === 'mozilla') {\n this.typedString = this.filterInput.value;\n this.preventAutoFill = true;\n this.searchLists(e);\n }\n };\n DropDownList.prototype.pasteHandler = function (e) {\n var _this = this;\n setTimeout(function () {\n _this.typedString = _this.filterInput.value;\n _this.searchLists(e);\n });\n };\n DropDownList.prototype.onActionFailure = function (e) {\n _super.prototype.onActionFailure.call(this, e);\n if (this.beforePopupOpen) {\n this.renderPopup();\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DropDownList.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n var _this = this;\n if (this.isNotSearchList) {\n this.isNotSearchList = false;\n return;\n }\n if (this.isActive || !isNullOrUndefined(ulElement)) {\n var selectedItem = this.selectedLI ? this.selectedLI.cloneNode(true) : null;\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n this.updateSelectElementData(this.allowFiltering);\n if (this.isRequested && !isNullOrUndefined(this.searchKeyEvent) && this.searchKeyEvent.type === 'keydown') {\n this.isRequested = false;\n this.keyActionHandler(this.searchKeyEvent);\n this.searchKeyEvent = null;\n }\n if (this.isRequested && !isNullOrUndefined(this.searchKeyEvent)) {\n this.incrementalSearch(this.searchKeyEvent);\n this.searchKeyEvent = null;\n }\n this.list.scrollTop = 0;\n if (!isNullOrUndefined(ulElement)) {\n attributes(ulElement, { 'id': this.element.id + '_options', 'role': 'listbox', 'aria-hidden': 'false' });\n }\n if (this.initRemoteRender) {\n this.initial = true;\n this.activeIndex = this.index;\n this.initRemoteRender = false;\n if (this.value && this.dataSource instanceof DataManager) {\n var checkField_1 = isNullOrUndefined(this.fields.value) ? this.fields.text : this.fields.value;\n var fieldValue_1 = this.fields.value.split('.');\n var checkVal = list.some(function (x) {\n return isNullOrUndefined(x[checkField_1]) && fieldValue_1.length > 1 ?\n _this.checkFieldValue(x, fieldValue_1) === _this.value : x[checkField_1] === _this.value;\n });\n if (!checkVal) {\n this.dataSource.executeQuery(this.getQuery(this.query).where(new Predicate(checkField_1, 'equal', this.value)))\n .then(function (e) {\n if (e.result.length > 0) {\n _this.addItem(e.result, list.length);\n _this.updateValues();\n }\n else {\n _this.updateValues();\n }\n });\n }\n else {\n this.updateValues();\n }\n }\n else {\n this.updateValues();\n }\n this.initial = false;\n }\n else if (this.getModuleName() === 'autocomplete' && this.value) {\n this.setInputValue();\n }\n if (this.getModuleName() !== 'autocomplete' && this.isFiltering() && !this.isTyped) {\n if (!this.actionCompleteData.isUpdated || ((!this.isCustomFilter\n && !this.isFilterFocus) || (isNullOrUndefined(this.itemData) && this.allowFiltering)\n && ((this.dataSource instanceof DataManager)\n || (!isNullOrUndefined(this.dataSource) && !isNullOrUndefined(this.dataSource.length) &&\n this.dataSource.length !== 0)))) {\n if (this.itemTemplate && this.element.tagName === 'EJS-COMBOBOX' && this.allowFiltering) {\n setTimeout(function () {\n _this.updateActionCompleteDataValues(ulElement, list);\n }, 0);\n }\n else {\n this.updateActionCompleteDataValues(ulElement, list);\n }\n }\n this.addNewItem(list, selectedItem);\n if (!isNullOrUndefined(this.itemData)) {\n this.focusIndexItem();\n }\n }\n if (this.beforePopupOpen) {\n this.renderPopup(e);\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n DropDownList.prototype.checkFieldValue = function (list, fieldValue) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var checkField = list;\n fieldValue.forEach(function (value) {\n checkField = checkField[value];\n });\n return checkField;\n };\n DropDownList.prototype.updateActionCompleteDataValues = function (ulElement, list) {\n this.actionCompleteData = { ulElement: ulElement.cloneNode(true), list: list, isUpdated: true };\n if (this.actionData.list !== this.actionCompleteData.list && this.actionCompleteData.ulElement && this.actionCompleteData.list) {\n this.actionData = this.actionCompleteData;\n }\n };\n DropDownList.prototype.addNewItem = function (listData, newElement) {\n var _this = this;\n if (!isNullOrUndefined(this.itemData) && !isNullOrUndefined(newElement)) {\n var value_1 = this.getItemData().value;\n var isExist = listData.some(function (data) {\n return (((typeof data === 'string' || typeof data === 'number') && data === value_1) ||\n (getValue(_this.fields.value, data) === value_1));\n });\n if (!isExist) {\n this.addItem(this.itemData);\n }\n }\n };\n DropDownList.prototype.updateActionCompleteData = function (li, item, index) {\n var _this = this;\n if (this.getModuleName() !== 'autocomplete' && this.actionCompleteData.ulElement) {\n if (this.itemTemplate && this.element.tagName === 'EJS-COMBOBOX' && this.allowFiltering) {\n setTimeout(function () {\n _this.actionCompleteDataUpdate(li, item, index);\n }, 0);\n }\n else {\n this.actionCompleteDataUpdate(li, item, index);\n }\n }\n };\n DropDownList.prototype.actionCompleteDataUpdate = function (li, item, index) {\n if (index !== null) {\n this.actionCompleteData.ulElement.\n insertBefore(li.cloneNode(true), this.actionCompleteData.ulElement.childNodes[index]);\n }\n else {\n this.actionCompleteData.ulElement.appendChild(li.cloneNode(true));\n }\n if (this.isFiltering() && this.actionCompleteData.list.indexOf(item) < 0) {\n this.actionCompleteData.list.push(item);\n }\n };\n DropDownList.prototype.focusIndexItem = function () {\n var value = this.getItemData().value;\n this.activeIndex = this.getIndexByValue(value);\n var element = this.findListElement(this.list, 'li', 'data-value', value);\n this.selectedLI = element;\n this.activeItem(element);\n this.removeFocus();\n };\n DropDownList.prototype.updateSelection = function () {\n var selectedItem = this.list.querySelector('.' + dropDownBaseClasses.selected);\n if (selectedItem) {\n this.setProperties({ 'index': this.getIndexByValue(selectedItem.getAttribute('data-value')) });\n this.activeIndex = this.index;\n }\n else {\n this.removeFocus();\n this.list.querySelector('.' + dropDownBaseClasses.li).classList.add(dropDownListClasses.focus);\n }\n };\n DropDownList.prototype.removeFocus = function () {\n var highlightedItem = this.list.querySelectorAll('.' + dropDownListClasses.focus);\n if (highlightedItem && highlightedItem.length) {\n removeClass(highlightedItem, dropDownListClasses.focus);\n }\n };\n DropDownList.prototype.renderPopup = function (e) {\n var _this = this;\n if (this.popupObj && document.body.contains(this.popupObj.element)) {\n this.refreshPopup();\n return;\n }\n var args = { cancel: false };\n this.trigger('beforeOpen', args, function (args) {\n if (!args.cancel) {\n var popupEle = _this.createElement('div', {\n id: _this.element.id + '_popup', className: 'e-ddl e-popup ' + (_this.cssClass !== null ? _this.cssClass : '')\n });\n var searchBox = _this.setSearchBox(popupEle);\n _this.listHeight = formatUnit(_this.popupHeight);\n if (_this.headerTemplate) {\n _this.setHeaderTemplate(popupEle);\n }\n append([_this.list], popupEle);\n if (_this.footerTemplate) {\n _this.setFooterTemplate(popupEle);\n }\n document.body.appendChild(popupEle);\n popupEle.style.visibility = 'hidden';\n if (_this.popupHeight !== 'auto') {\n _this.searchBoxHeight = 0;\n if (!isNullOrUndefined(searchBox.container)) {\n _this.searchBoxHeight = (searchBox.container.parentElement).getBoundingClientRect().height;\n _this.listHeight = (parseInt(_this.listHeight, 10) - (_this.searchBoxHeight)).toString() + 'px';\n }\n if (_this.headerTemplate) {\n _this.header = _this.header ? _this.header : popupEle.querySelector('.e-ddl-header');\n var height = Math.round(_this.header.getBoundingClientRect().height);\n _this.listHeight = (parseInt(_this.listHeight, 10) - (height + _this.searchBoxHeight)).toString() + 'px';\n }\n if (_this.footerTemplate) {\n _this.footer = _this.footer ? _this.footer : popupEle.querySelector('.e-ddl-footer');\n var height = Math.round(_this.footer.getBoundingClientRect().height);\n _this.listHeight = (parseInt(_this.listHeight, 10) - (height + _this.searchBoxHeight)).toString() + 'px';\n }\n _this.list.style.maxHeight = (parseInt(_this.listHeight, 10) - 2).toString() + 'px'; // due to box-sizing property\n popupEle.style.maxHeight = formatUnit(_this.popupHeight);\n }\n else {\n popupEle.style.height = 'auto';\n }\n var offsetValue = 0;\n var left = void 0;\n if (!isNullOrUndefined(_this.selectedLI) && (!isNullOrUndefined(_this.activeIndex) && _this.activeIndex >= 0)) {\n _this.setScrollPosition();\n }\n else {\n _this.list.scrollTop = 0;\n }\n if (Browser.isDevice && (!_this.allowFiltering && (_this.getModuleName() === 'dropdownlist' ||\n (_this.isDropDownClick && _this.getModuleName() === 'combobox')))) {\n offsetValue = _this.getOffsetValue(popupEle);\n var firstItem = _this.isEmptyList() ? _this.list : _this.liCollections[0];\n if (!isNullOrUndefined(_this.inputElement)) {\n left = -(parseInt(getComputedStyle(firstItem).textIndent, 10) -\n parseInt(getComputedStyle(_this.inputElement).paddingLeft, 10) +\n parseInt(getComputedStyle(_this.inputElement.parentElement).borderLeftWidth, 10));\n }\n }\n _this.getFocusElement();\n _this.createPopup(popupEle, offsetValue, left);\n _this.checkCollision(popupEle);\n if (Browser.isDevice) {\n _this.popupObj.element.classList.add(dropDownListClasses.device);\n if (_this.getModuleName() === 'dropdownlist' || (_this.getModuleName() === 'combobox'\n && !_this.allowFiltering && _this.isDropDownClick)) {\n _this.popupObj.collision = { X: 'fit', Y: 'fit' };\n }\n if (_this.isFilterLayout()) {\n _this.popupObj.element.classList.add(dropDownListClasses.mobileFilter);\n _this.popupObj.position = { X: 0, Y: 0 };\n _this.popupObj.dataBind();\n attributes(_this.popupObj.element, { style: 'left:0px;right:0px;top:0px;bottom:0px;' });\n addClass([document.body, _this.popupObj.element], dropDownListClasses.popupFullScreen);\n _this.setSearchBoxPosition();\n _this.backIconElement = searchBox.container.querySelector('.e-back-icon');\n _this.clearIconElement = searchBox.container.querySelector('.' + dropDownListClasses.clearIcon);\n EventHandler.add(_this.backIconElement, 'click', _this.clickOnBackIcon, _this);\n EventHandler.add(_this.clearIconElement, 'click', _this.clearText, _this);\n }\n }\n popupEle.style.visibility = 'visible';\n addClass([popupEle], 'e-popup-close');\n var scrollParentElements = _this.popupObj.getScrollableParent(_this.inputWrapper.container);\n for (var _i = 0, scrollParentElements_1 = scrollParentElements; _i < scrollParentElements_1.length; _i++) {\n var element = scrollParentElements_1[_i];\n EventHandler.add(element, 'scroll', _this.scrollHandler, _this);\n }\n if (!isNullOrUndefined(_this.list)) {\n _this.unWireListEvents();\n _this.wireListEvents();\n }\n _this.selectedElementID = _this.selectedLI ? _this.selectedLI.id : null;\n attributes(_this.targetElement(), { 'aria-expanded': 'true', 'aria-owns': _this.element.id + '_options' });\n _this.inputElement.setAttribute('aria-expanded', 'true');\n var inputParent = _this.isFiltering() ? _this.filterInput.parentElement : _this.inputWrapper.container;\n addClass([inputParent], [dropDownListClasses.inputFocus]);\n var animModel = { name: 'FadeIn', duration: 100 };\n _this.beforePopupOpen = true;\n var popupInstance = _this.popupObj;\n var eventArgs = { popup: popupInstance, event: e, cancel: false, animation: animModel };\n _this.trigger('open', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n if (!isNullOrUndefined(_this.inputWrapper)) {\n addClass([_this.inputWrapper.container], [dropDownListClasses.iconAnimation]);\n }\n _this.renderReactTemplates();\n if (!isNullOrUndefined(_this.popupObj)) {\n _this.popupObj.show(new Animation(eventArgs.animation), (_this.zIndex === 1000) ? _this.element : null);\n }\n }\n else {\n _this.beforePopupOpen = false;\n _this.destroyPopup();\n }\n });\n }\n else {\n _this.beforePopupOpen = false;\n }\n });\n };\n DropDownList.prototype.checkCollision = function (popupEle) {\n if (!Browser.isDevice || (Browser.isDevice && !(this.getModuleName() === 'dropdownlist' || this.isDropDownClick))) {\n var collision = isCollide(popupEle);\n if (collision.length > 0) {\n popupEle.style.marginTop = -parseInt(getComputedStyle(popupEle).marginTop, 10) + 'px';\n }\n this.popupObj.resolveCollision();\n }\n };\n DropDownList.prototype.getOffsetValue = function (popupEle) {\n var popupStyles = getComputedStyle(popupEle);\n var borderTop = parseInt(popupStyles.borderTopWidth, 10);\n var borderBottom = parseInt(popupStyles.borderBottomWidth, 10);\n return this.setPopupPosition(borderTop + borderBottom);\n };\n DropDownList.prototype.createPopup = function (element, offsetValue, left) {\n var _this = this;\n this.popupObj = new Popup(element, {\n width: this.setWidth(), targetType: 'relative',\n relateTo: this.inputWrapper.container, collision: { X: 'flip', Y: 'flip' }, offsetY: offsetValue,\n enableRtl: this.enableRtl, offsetX: left,\n position: this.enableRtl ? { X: 'right', Y: 'bottom' } : { X: 'left', Y: 'bottom' },\n zIndex: this.zIndex,\n close: function () {\n if (!_this.isDocumentClick) {\n _this.focusDropDown();\n }\n // eslint-disable-next-line\n if (_this.isReact) {\n _this.clearTemplate(['headerTemplate', 'footerTemplate']);\n }\n _this.isNotSearchList = false;\n _this.isDocumentClick = false;\n _this.destroyPopup();\n if (_this.isFiltering() && _this.actionCompleteData.list && _this.actionCompleteData.list[0]) {\n _this.isActive = true;\n _this.onActionComplete(_this.actionCompleteData.ulElement, _this.actionCompleteData.list, null, true);\n }\n },\n open: function () {\n EventHandler.add(document, 'mousedown', _this.onDocumentClick, _this);\n _this.isPopupOpen = true;\n var actionList = _this.actionCompleteData && _this.actionCompleteData.ulElement &&\n _this.actionCompleteData.ulElement.querySelector('li');\n var ulElement = _this.list.querySelector('ul li');\n if (!isNullOrUndefined(_this.ulElement) && !isNullOrUndefined(_this.ulElement.getElementsByClassName('e-item-focus')[0])) {\n attributes(_this.targetElement(), { 'aria-activedescendant': _this.ulElement.getElementsByClassName('e-item-focus')[0].id });\n }\n else if (!isNullOrUndefined(_this.ulElement) && !isNullOrUndefined(_this.ulElement.getElementsByClassName('e-active')[0])) {\n attributes(_this.targetElement(), { 'aria-activedescendant': _this.ulElement.getElementsByClassName('e-active')[0].id });\n }\n if (_this.isFiltering() && _this.itemTemplate && (_this.element.tagName === _this.getNgDirective()) &&\n (actionList && ulElement && actionList.textContent !== ulElement.textContent) &&\n _this.element.tagName !== 'EJS-COMBOBOX') {\n _this.cloneElements();\n }\n if (_this.isFilterLayout()) {\n removeClass([_this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n _this.isFilterFocus = true;\n _this.filterInput.focus();\n if (_this.inputWrapper.clearButton) {\n addClass([_this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n }\n _this.activeStateChange();\n },\n targetExitViewport: function () {\n if (!Browser.isDevice) {\n _this.hidePopup();\n }\n }\n });\n };\n DropDownList.prototype.isEmptyList = function () {\n return !isNullOrUndefined(this.liCollections) && this.liCollections.length === 0;\n };\n DropDownList.prototype.getFocusElement = function () {\n // combo-box used this method\n };\n DropDownList.prototype.isFilterLayout = function () {\n return this.getModuleName() === 'dropdownlist' && this.allowFiltering;\n };\n DropDownList.prototype.scrollHandler = function () {\n if (Browser.isDevice && ((this.getModuleName() === 'dropdownlist' &&\n !this.isFilterLayout()) || (this.getModuleName() === 'combobox' && !this.allowFiltering && this.isDropDownClick))) {\n this.hidePopup();\n }\n };\n DropDownList.prototype.setSearchBoxPosition = function () {\n var searchBoxHeight = this.filterInput.parentElement.getBoundingClientRect().height;\n this.popupObj.element.style.maxHeight = '100%';\n this.popupObj.element.style.width = '100%';\n this.list.style.maxHeight = (window.innerHeight - searchBoxHeight) + 'px';\n this.list.style.height = (window.innerHeight - searchBoxHeight) + 'px';\n var clearElement = this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon);\n detach(this.filterInput);\n clearElement.parentElement.insertBefore(this.filterInput, clearElement);\n };\n DropDownList.prototype.setPopupPosition = function (border) {\n var offsetValue;\n var popupOffset = border;\n var selectedLI = this.list.querySelector('.' + dropDownListClasses.focus) || this.selectedLI;\n var firstItem = this.isEmptyList() ? this.list : this.liCollections[0];\n var lastItem = this.isEmptyList() ? this.list : this.liCollections[this.getItems().length - 1];\n var liHeight = firstItem.getBoundingClientRect().height;\n var listHeight = this.list.offsetHeight / 2;\n var height = isNullOrUndefined(selectedLI) ? firstItem.offsetTop : selectedLI.offsetTop;\n var lastItemOffsetValue = lastItem.offsetTop;\n if (lastItemOffsetValue - listHeight < height && !isNullOrUndefined(this.liCollections) &&\n this.liCollections.length > 0 && !isNullOrUndefined(selectedLI)) {\n var count = this.list.offsetHeight / liHeight;\n var paddingBottom = parseInt(getComputedStyle(this.list).paddingBottom, 10);\n offsetValue = (count - (this.liCollections.length - this.activeIndex)) * liHeight - popupOffset + paddingBottom;\n this.list.scrollTop = selectedLI.offsetTop;\n }\n else if (height > listHeight) {\n offsetValue = listHeight - liHeight / 2;\n this.list.scrollTop = height - listHeight + liHeight / 2;\n }\n else {\n offsetValue = height;\n }\n var inputHeight = this.inputWrapper.container.offsetHeight;\n offsetValue = offsetValue + liHeight + popupOffset - ((liHeight - inputHeight) / 2);\n return -offsetValue;\n };\n DropDownList.prototype.setWidth = function () {\n var width = formatUnit(this.popupWidth);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.inputWrapper.container.offsetWidth * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n if (Browser.isDevice && (!this.allowFiltering && (this.getModuleName() === 'dropdownlist' ||\n (this.isDropDownClick && this.getModuleName() === 'combobox')))) {\n var firstItem = this.isEmptyList() ? this.list : this.liCollections[0];\n width = (parseInt(width, 10) + (parseInt(getComputedStyle(firstItem).textIndent, 10) -\n parseInt(getComputedStyle(this.inputElement).paddingLeft, 10) +\n parseInt(getComputedStyle(this.inputElement.parentElement).borderLeftWidth, 10)) * 2) + 'px';\n }\n return width;\n };\n DropDownList.prototype.scrollBottom = function (isInitial) {\n if (!isNullOrUndefined(this.selectedLI)) {\n var currentOffset = this.list.offsetHeight;\n var nextBottom = this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop;\n var nextOffset = this.list.scrollTop + nextBottom - currentOffset;\n nextOffset = isInitial ? nextOffset + parseInt(getComputedStyle(this.list).paddingTop, 10) * 2 : nextOffset;\n var boxRange = this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop;\n boxRange = this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ?\n boxRange - this.fixedHeaderElement.offsetHeight : boxRange;\n if (this.activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextBottom > currentOffset || !(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = nextOffset;\n }\n }\n };\n DropDownList.prototype.scrollTop = function () {\n if (!isNullOrUndefined(this.selectedLI)) {\n var nextOffset = this.selectedLI.offsetTop - this.list.scrollTop;\n nextOffset = this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ?\n nextOffset - this.fixedHeaderElement.offsetHeight : nextOffset;\n var boxRange = (this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop);\n if (this.activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextOffset < 0) {\n this.list.scrollTop = this.list.scrollTop + nextOffset;\n }\n else if (!(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = this.selectedLI.offsetTop - (this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ?\n this.fixedHeaderElement.offsetHeight : 0);\n }\n }\n };\n DropDownList.prototype.isEditTextBox = function () {\n return false;\n };\n DropDownList.prototype.isFiltering = function () {\n return this.allowFiltering;\n };\n DropDownList.prototype.isPopupButton = function () {\n return true;\n };\n DropDownList.prototype.setScrollPosition = function (e) {\n if (!isNullOrUndefined(e)) {\n switch (e.action) {\n case 'pageDown':\n case 'down':\n case 'end':\n this.scrollBottom();\n break;\n default:\n this.scrollTop();\n break;\n }\n }\n else {\n this.scrollBottom(true);\n }\n };\n DropDownList.prototype.clearText = function () {\n this.filterInput.value = this.typedString = '';\n this.searchLists(null);\n };\n DropDownList.prototype.setEleWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.inputWrapper.container.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n };\n DropDownList.prototype.closePopup = function (delay, e) {\n var _this = this;\n this.isTyped = false;\n if (!(this.popupObj && document.body.contains(this.popupObj.element) && this.beforePopupOpen)) {\n return;\n }\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n this.isActive = false;\n this.filterInputObj = null;\n this.isDropDownClick = false;\n this.preventAutoFill = false;\n var scrollableParentElements = this.popupObj.getScrollableParent(this.inputWrapper.container);\n for (var _i = 0, scrollableParentElements_1 = scrollableParentElements; _i < scrollableParentElements_1.length; _i++) {\n var element = scrollableParentElements_1[_i];\n EventHandler.remove(element, 'scroll', this.scrollHandler);\n }\n if (Browser.isDevice && this.isFilterLayout()) {\n removeClass([document.body, this.popupObj.element], dropDownListClasses.popupFullScreen);\n }\n if (this.isFilterLayout()) {\n if (!Browser.isDevice) {\n this.searchKeyModule.destroy();\n if (this.clearIconElement) {\n EventHandler.remove(this.clearIconElement, 'click', this.clearText);\n }\n }\n if (this.backIconElement) {\n EventHandler.remove(this.backIconElement, 'click', this.clickOnBackIcon);\n EventHandler.remove(this.clearIconElement, 'click', this.clearText);\n }\n if (!isNullOrUndefined(this.filterInput)) {\n EventHandler.remove(this.filterInput, 'input', this.onInput);\n EventHandler.remove(this.filterInput, 'keyup', this.onFilterUp);\n EventHandler.remove(this.filterInput, 'keydown', this.onFilterDown);\n EventHandler.remove(this.filterInput, 'blur', this.onBlurHandler);\n EventHandler.remove(this.filterInput, 'paste', this.pasteHandler);\n }\n this.filterInput = null;\n }\n attributes(this.targetElement(), { 'aria-expanded': 'false' });\n this.inputElement.setAttribute('aria-expanded', 'false');\n this.targetElement().removeAttribute('aria-owns');\n this.targetElement().removeAttribute('aria-activedescendant');\n this.inputWrapper.container.classList.remove(dropDownListClasses.iconAnimation);\n if (this.isFiltering()) {\n this.actionCompleteData.isUpdated = false;\n }\n this.beforePopupOpen = false;\n var animModel = {\n name: 'FadeOut',\n duration: 100,\n delay: delay ? delay : 0\n };\n var popupInstance = this.popupObj;\n var eventArgs = { popup: popupInstance, cancel: false, animation: animModel, event: e || null };\n this.trigger('close', eventArgs, function (eventArgs) {\n if (!isNullOrUndefined(_this.popupObj) &&\n !isNullOrUndefined(_this.popupObj.element.querySelector('.e-fixed-head'))) {\n var fixedHeader = _this.popupObj.element.querySelector('.e-fixed-head');\n fixedHeader.parentNode.removeChild(fixedHeader);\n _this.fixedHeaderElement = null;\n }\n if (!eventArgs.cancel) {\n if (_this.getModuleName() === 'autocomplete') {\n _this.rippleFun();\n }\n if (_this.isPopupOpen) {\n _this.popupObj.hide(new Animation(eventArgs.animation));\n }\n else {\n _this.destroyPopup();\n }\n }\n });\n if (this.isReact && this.isFiltering() && this.itemTemplate != null) {\n this.actionCompleteData.ulElement = this.ulElement.cloneNode(true);\n }\n };\n DropDownList.prototype.destroyPopup = function () {\n this.isPopupOpen = false;\n this.isFilterFocus = false;\n if (this.popupObj) {\n this.popupObj.destroy();\n detach(this.popupObj.element);\n }\n };\n DropDownList.prototype.clickOnBackIcon = function () {\n this.hidePopup();\n this.focusIn();\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n DropDownList.prototype.render = function () {\n if (this.element.tagName === 'INPUT') {\n this.inputElement = this.element;\n if (isNullOrUndefined(this.inputElement.getAttribute('role'))) {\n this.inputElement.setAttribute('role', 'combobox');\n }\n if (isNullOrUndefined(this.inputElement.getAttribute('type'))) {\n this.inputElement.setAttribute('type', 'text');\n }\n this.inputElement.setAttribute('aria-expanded', 'false');\n }\n else {\n this.inputElement = this.createElement('input', { attrs: { role: 'combobox', type: 'text' } });\n if (this.element.tagName !== this.getNgDirective()) {\n this.element.style.display = 'none';\n }\n this.element.parentElement.insertBefore(this.inputElement, this.element);\n this.preventTabIndex(this.inputElement);\n }\n var updatedCssClassValues = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValues = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n buttons: this.isPopupButton() ? [dropDownListClasses.icon] : null,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.getModuleName() === 'dropdownlist' ? true : this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassValues,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton\n }\n }, this.createElement);\n if (this.element.tagName === this.getNgDirective()) {\n this.element.appendChild(this.inputWrapper.container);\n }\n else {\n this.inputElement.parentElement.insertBefore(this.element, this.inputElement);\n }\n this.hiddenElement = this.createElement('select', {\n attrs: { 'aria-hidden': 'true', 'tabindex': '-1', 'class': dropDownListClasses.hiddenElement }\n });\n prepend([this.hiddenElement], this.inputWrapper.container);\n this.validationAttribute(this.element, this.hiddenElement);\n this.setReadOnly();\n this.setFields();\n this.inputWrapper.container.style.width = formatUnit(this.width);\n this.inputWrapper.container.classList.add('e-ddl');\n if (this.floatLabelType === 'Auto') {\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && this.inputWrapper.container.getElementsByClassName('e-float-text-content')[0] && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-content')[0].classList.add('e-icon');\n }\n this.wireEvent();\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n var id = this.element.getAttribute('id') ? this.element.getAttribute('id') : getUniqueID('ej2_dropdownlist');\n this.element.id = id;\n this.hiddenElement.id = id + '_hidden';\n this.targetElement().setAttribute('tabindex', this.tabIndex);\n if (this.getModuleName() === 'autocomplete' || this.getModuleName() === 'combobox') {\n this.inputElement.setAttribute('aria-label', this.getModuleName());\n }\n else {\n attributes(this.targetElement(), { 'aria-label': this.getModuleName() });\n }\n attributes(this.targetElement(), this.getAriaAttributes());\n this.updateDataAttribute(this.htmlAttributes);\n this.setHTMLAttributes();\n if (this.targetElement() === this.inputElement) {\n this.inputElement.removeAttribute('aria-labelledby');\n }\n if (this.value !== null || this.activeIndex !== null || this.text !== null) {\n this.initValue();\n }\n else if (this.element.tagName === 'SELECT' && this.element.options[0]) {\n var selectElement = this.element;\n this.value = selectElement.options[selectElement.selectedIndex].value;\n this.text = isNullOrUndefined(this.value) ? null : selectElement.options[selectElement.selectedIndex].textContent;\n this.initValue();\n }\n this.setEnabled();\n this.preventTabIndex(this.element);\n if (!this.enabled) {\n this.targetElement().tabIndex = -1;\n }\n this.initial = false;\n this.element.style.opacity = '';\n this.inputElement.onselect = function (e) {\n e.stopImmediatePropagation();\n };\n this.inputElement.onchange = function (e) {\n e.stopImmediatePropagation();\n };\n if (this.element.hasAttribute('autofocus')) {\n this.focusIn();\n }\n if (!isNullOrUndefined(this.text)) {\n this.inputElement.setAttribute('value', this.text);\n }\n if (this.element.hasAttribute('data-val')) {\n this.element.setAttribute('data-val', 'false');\n }\n var floatLabelElement = this.inputWrapper.container.getElementsByClassName('e-float-text')[0];\n if (!isNullOrUndefined(this.element.id) && this.element.id !== '' && !isNullOrUndefined(floatLabelElement)) {\n floatLabelElement.id = 'label_' + this.element.id.replace(/ /g, '_');\n attributes(this.inputElement, { 'aria-labelledby': floatLabelElement.id });\n }\n this.renderComplete();\n };\n DropDownList.prototype.setFooterTemplate = function (popupEle) {\n var compiledString;\n if (this.footer) {\n if (this.isReact && typeof this.footerTemplate === 'function') {\n this.clearTemplate(['footerTemplate']);\n }\n else {\n this.footer.innerHTML = '';\n }\n }\n else {\n this.footer = this.createElement('div');\n addClass([this.footer], dropDownListClasses.footer);\n }\n var footercheck = this.dropdownCompiler(this.footerTemplate);\n if (typeof this.footerTemplate !== 'function' && footercheck) {\n compiledString = compile(select(this.footerTemplate, document).innerHTML.trim());\n }\n else {\n compiledString = compile(this.footerTemplate);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var footerCompTemp = compiledString({}, this, 'footerTemplate', this.footerTemplateId, this.isStringTemplate, null, this.footer);\n if (footerCompTemp && footerCompTemp.length > 0) {\n append(footerCompTemp, this.footer);\n }\n append([this.footer], popupEle);\n };\n DropDownList.prototype.setHeaderTemplate = function (popupEle) {\n var compiledString;\n if (this.header) {\n this.header.innerHTML = '';\n }\n else {\n this.header = this.createElement('div');\n addClass([this.header], dropDownListClasses.header);\n }\n var headercheck = this.dropdownCompiler(this.headerTemplate);\n if (typeof this.headerTemplate !== 'function' && headercheck) {\n compiledString = compile(select(this.headerTemplate, document).innerHTML.trim());\n }\n else {\n compiledString = compile(this.headerTemplate);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var headerCompTemp = compiledString({}, this, 'headerTemplate', this.headerTemplateId, this.isStringTemplate, null, this.header);\n if (headerCompTemp && headerCompTemp.length) {\n append(headerCompTemp, this.header);\n }\n var contentEle = popupEle.querySelector('div.e-content');\n popupEle.insertBefore(this.header, contentEle);\n };\n /**\n * Sets the enabled state to DropDownBase.\n *\n * @returns {void}\n */\n DropDownList.prototype.setEnabled = function () {\n this.element.setAttribute('aria-disabled', (this.enabled) ? 'false' : 'true');\n };\n DropDownList.prototype.setOldText = function (text) {\n this.text = text;\n };\n DropDownList.prototype.setOldValue = function (value) {\n this.value = value;\n };\n DropDownList.prototype.refreshPopup = function () {\n if (!isNullOrUndefined(this.popupObj) && document.body.contains(this.popupObj.element) &&\n ((this.allowFiltering && !(Browser.isDevice && this.isFilterLayout())) || this.getModuleName() === 'autocomplete')) {\n removeClass([this.popupObj.element], 'e-popup-close');\n this.popupObj.refreshPosition(this.inputWrapper.container);\n this.popupObj.resolveCollision();\n }\n };\n DropDownList.prototype.checkData = function (newProp) {\n if (newProp.dataSource && !isNullOrUndefined(Object.keys(newProp.dataSource)) && this.itemTemplate && this.allowFiltering &&\n !(this.isListSearched && (newProp.dataSource instanceof DataManager))) {\n this.list = null;\n this.actionCompleteData = { ulElement: null, list: null, isUpdated: false };\n }\n this.isListSearched = false;\n var isChangeValue = Object.keys(newProp).indexOf('value') !== -1 && isNullOrUndefined(newProp.value);\n var isChangeText = Object.keys(newProp).indexOf('text') !== -1 && isNullOrUndefined(newProp.text);\n if (this.getModuleName() !== 'autocomplete' && this.allowFiltering && (isChangeValue || isChangeText)) {\n this.itemData = null;\n }\n if (this.allowFiltering && newProp.dataSource && !isNullOrUndefined(Object.keys(newProp.dataSource))) {\n this.actionCompleteData = { ulElement: null, list: null, isUpdated: false };\n this.actionData = this.actionCompleteData;\n this.itemData = null;\n }\n else if (this.allowFiltering && newProp.query && !isNullOrUndefined(Object.keys(newProp.query))) {\n this.actionCompleteData = this.getModuleName() === 'combobox' ?\n { ulElement: null, list: null, isUpdated: false } : this.actionCompleteData;\n this.actionData = this.actionCompleteData;\n }\n };\n DropDownList.prototype.updateDataSource = function (props) {\n if (this.inputElement.value !== '' || (!isNullOrUndefined(props) && (isNullOrUndefined(props.dataSource)\n || (!(props.dataSource instanceof DataManager) && props.dataSource.length === 0)))) {\n this.clearAll(null, props);\n }\n if ((this.fields.groupBy && props.fields) && !this.isGroupChecking && this.list) {\n EventHandler.remove(this.list, 'scroll', this.setFloatingHeader);\n EventHandler.add(this.list, 'scroll', this.setFloatingHeader, this);\n }\n if (!(!isNullOrUndefined(props) && (isNullOrUndefined(props.dataSource)\n || (!(props.dataSource instanceof DataManager) && props.dataSource.length === 0))) || !(props.dataSource === [])) {\n this.typedString = '';\n this.resetList(this.dataSource);\n }\n if (!this.isCustomFilter && !this.isFilterFocus && document.activeElement !== this.filterInput) {\n this.checkCustomValue();\n }\n };\n DropDownList.prototype.checkCustomValue = function () {\n this.itemData = this.getDataByValue(this.value);\n var dataItem = this.getItemData();\n this.setProperties({ 'text': dataItem.text, 'value': dataItem.value });\n };\n DropDownList.prototype.updateInputFields = function () {\n if (this.getModuleName() === 'dropdownlist') {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n };\n /**\n * Dynamically change the value of properties.\n *\n * @private\n * @param {DropDownListModel} newProp - Returns the dynamic property value of the component.\n * @param {DropDownListModel} oldProp - Returns the previous previous value of the component.\n * @returns {void}\n */\n DropDownList.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n if (this.getModuleName() === 'dropdownlist') {\n this.checkData(newProp);\n this.setUpdateInitial(['fields', 'query', 'dataSource'], newProp);\n }\n var _loop_1 = function (prop) {\n switch (prop) {\n case 'query':\n case 'dataSource': break;\n case 'htmlAttributes':\n this_1.setHTMLAttributes();\n break;\n case 'width':\n this_1.setEleWidth(newProp.width);\n Input.calculateWidth(this_1.inputElement, this_1.inputWrapper.container);\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this_1.inputElement);\n break;\n case 'filterBarPlaceholder':\n if (this_1.filterInput) {\n Input.setPlaceholder(newProp.filterBarPlaceholder, this_1.filterInput);\n }\n break;\n case 'readonly':\n if (this_1.getModuleName() !== 'dropdownlist') {\n Input.setReadonly(newProp.readonly, this_1.inputElement);\n }\n this_1.setReadOnly();\n break;\n case 'cssClass':\n this_1.setCssClass(newProp.cssClass, oldProp.cssClass);\n Input.calculateWidth(this_1.inputElement, this_1.inputWrapper.container);\n break;\n case 'enableRtl':\n this_1.setEnableRtl();\n break;\n case 'enabled':\n this_1.setEnable();\n break;\n case 'text':\n if (newProp.text === null) {\n this_1.clearAll();\n break;\n }\n if (!this_1.list) {\n if (this_1.dataSource instanceof DataManager) {\n this_1.initRemoteRender = true;\n }\n this_1.renderList();\n }\n if (!this_1.initRemoteRender) {\n var li = this_1.getElementByText(newProp.text);\n if (!this_1.checkValidLi(li)) {\n if (this_1.liCollections && this_1.liCollections.length === 100 &&\n this_1.getModuleName() === 'autocomplete' && this_1.listData.length > 100) {\n this_1.setSelectionData(newProp.text, oldProp.text, 'text');\n }\n else if (newProp.text && this_1.dataSource instanceof DataManager) {\n var listLength_1 = this_1.getItems().length;\n var checkField = isNullOrUndefined(this_1.fields.text) ? this_1.fields.value : this_1.fields.text;\n this_1.typedString = '';\n this_1.dataSource.executeQuery(this_1.getQuery(this_1.query).where(new Predicate(checkField, 'equal', newProp.text)))\n .then(function (e) {\n if (e.result.length > 0) {\n _this.addItem(e.result, listLength_1);\n _this.updateValues();\n }\n else {\n _this.setOldText(oldProp.text);\n }\n });\n }\n else if (this_1.getModuleName() === 'autocomplete') {\n this_1.setInputValue(newProp, oldProp);\n }\n else {\n this_1.setOldText(oldProp.text);\n }\n }\n this_1.updateInputFields();\n }\n break;\n case 'value':\n if (newProp.value === null) {\n this_1.clearAll();\n break;\n }\n this_1.notify('beforeValueChange', { newProp: newProp }); // gird component value type change\n if (!this_1.list) {\n if (this_1.dataSource instanceof DataManager) {\n this_1.initRemoteRender = true;\n }\n this_1.renderList();\n }\n if (!this_1.initRemoteRender) {\n var item = this_1.getElementByValue(newProp.value);\n if (!this_1.checkValidLi(item)) {\n if (this_1.liCollections && this_1.liCollections.length === 100 &&\n this_1.getModuleName() === 'autocomplete' && this_1.listData.length > 100) {\n this_1.setSelectionData(newProp.value, oldProp.value, 'value');\n }\n else if (newProp.value && this_1.dataSource instanceof DataManager) {\n var listLength_2 = this_1.getItems().length;\n var checkField = isNullOrUndefined(this_1.fields.value) ? this_1.fields.text : this_1.fields.value;\n this_1.typedString = '';\n this_1.dataSource.executeQuery(this_1.getQuery(this_1.query).where(new Predicate(checkField, 'equal', newProp.value)))\n .then(function (e) {\n if (e.result.length > 0) {\n _this.addItem(e.result, listLength_2);\n _this.updateValues();\n }\n else {\n _this.setOldValue(oldProp.value);\n }\n });\n }\n else if (this_1.getModuleName() === 'autocomplete') {\n this_1.setInputValue(newProp, oldProp);\n }\n else {\n this_1.setOldValue(oldProp.value);\n }\n }\n this_1.updateInputFields();\n this_1.preventChange = this_1.isAngular && this_1.preventChange ? !this_1.preventChange : this_1.preventChange;\n }\n break;\n case 'index':\n if (newProp.index === null) {\n this_1.clearAll();\n break;\n }\n if (!this_1.list) {\n if (this_1.dataSource instanceof DataManager) {\n this_1.initRemoteRender = true;\n }\n this_1.renderList();\n }\n if (!this_1.initRemoteRender && this_1.liCollections) {\n var element = this_1.liCollections[newProp.index];\n if (!this_1.checkValidLi(element)) {\n if (this_1.liCollections && this_1.liCollections.length === 100 &&\n this_1.getModuleName() === 'autocomplete' && this_1.listData.length > 100) {\n this_1.setSelectionData(newProp.index, oldProp.index, 'index');\n }\n else {\n this_1.index = oldProp.index;\n }\n }\n this_1.updateInputFields();\n }\n break;\n case 'footerTemplate':\n if (this_1.popupObj) {\n this_1.setFooterTemplate(this_1.popupObj.element);\n }\n break;\n case 'headerTemplate':\n if (this_1.popupObj) {\n this_1.setHeaderTemplate(this_1.popupObj.element);\n }\n break;\n case 'valueTemplate':\n if (!isNullOrUndefined(this_1.itemData) && this_1.valueTemplate !== null) {\n this_1.setValueTemplate();\n }\n break;\n case 'allowFiltering':\n if (this_1.allowFiltering) {\n this_1.actionCompleteData = {\n ulElement: this_1.ulElement,\n list: this_1.listData, isUpdated: true\n };\n this_1.actionData = this_1.actionCompleteData;\n this_1.updateSelectElementData(this_1.allowFiltering);\n }\n break;\n case 'floatLabelType':\n Input.removeFloating(this_1.inputWrapper);\n Input.addFloating(this_1.inputElement, newProp.floatLabelType, this_1.placeholder, this_1.createElement);\n if (!isNullOrUndefined(this_1.inputWrapper.buttons[0]) && this_1.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0] && this_1.floatLabelType !== 'Never') {\n this_1.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'showClearButton':\n if (!this_1.inputWrapper.clearButton) {\n Input.setClearButton(newProp.showClearButton, this_1.inputElement, this_1.inputWrapper, null, this_1.createElement);\n this_1.bindClearEvent();\n }\n break;\n default:\n {\n // eslint-disable-next-line max-len\n var ddlProps = this_1.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this_1, ddlProps.newProperty, ddlProps.oldProperty);\n }\n break;\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_1(prop);\n }\n };\n DropDownList.prototype.checkValidLi = function (element) {\n if (this.isValidLI(element)) {\n this.setSelection(element, null);\n return true;\n }\n return false;\n };\n DropDownList.prototype.setSelectionData = function (newProp, oldProp, prop) {\n var _this = this;\n var li;\n this.updateListValues = function () {\n if (prop === 'text') {\n li = _this.getElementByText(newProp);\n if (!_this.checkValidLi(li)) {\n _this.setOldText(oldProp);\n }\n }\n else if (prop === 'value') {\n li = _this.getElementByValue(newProp);\n if (!_this.checkValidLi(li)) {\n _this.setOldValue(oldProp);\n }\n }\n else if (prop === 'index') {\n li = _this.liCollections[newProp];\n if (!_this.checkValidLi(li)) {\n _this.index = oldProp;\n }\n }\n };\n };\n DropDownList.prototype.setReadOnly = function () {\n if (this.readonly) {\n addClass([this.inputWrapper.container], ['e-readonly']);\n }\n else {\n removeClass([this.inputWrapper.container], ['e-readonly']);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n DropDownList.prototype.setInputValue = function (newProp, oldProp) {\n };\n DropDownList.prototype.setCssClass = function (newClass, oldClass) {\n if (!isNullOrUndefined(oldClass)) {\n oldClass = (oldClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(newClass)) {\n newClass = (newClass.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(newClass, [this.inputWrapper.container], oldClass);\n if (this.popupObj) {\n Input.setCssClass(newClass, [this.popupObj.element], oldClass);\n }\n };\n /**\n * Return the module name of this component.\n *\n * @private\n * @returns {string} Return the module name of this component.\n */\n DropDownList.prototype.getModuleName = function () {\n return 'dropdownlist';\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Opens the popup that displays the list of items.\n *\n * @returns {void}\n */\n DropDownList.prototype.showPopup = function (e) {\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n if (!this.enabled) {\n return;\n }\n if (this.isReact && this.getModuleName() === 'combobox' && this.itemTemplate && this.isCustomFilter && this.isAddNewItemTemplate) {\n this.renderList();\n this.isAddNewItemTemplate = false;\n }\n if (this.isFiltering() && this.dataSource instanceof DataManager && (this.actionData.list !== this.actionCompleteData.list) &&\n this.actionData.list && this.actionData.ulElement) {\n this.actionCompleteData = this.actionData;\n this.onActionComplete(this.actionCompleteData.ulElement, this.actionCompleteData.list, null, true);\n }\n if (this.beforePopupOpen) {\n this.refreshPopup();\n return;\n }\n this.beforePopupOpen = true;\n if (this.isFiltering() && !this.isActive && this.actionCompleteData.list && this.actionCompleteData.list[0]) {\n this.isActive = true;\n this.onActionComplete(this.actionCompleteData.ulElement, this.actionCompleteData.list, null, true);\n }\n else if (isNullOrUndefined(this.list) || !isUndefined(this.list) && (this.list.classList.contains(dropDownBaseClasses.noData) ||\n this.list.querySelectorAll('.' + dropDownBaseClasses.li).length <= 0)) {\n this.renderList(e);\n }\n this.invokeRenderPopup(e);\n };\n DropDownList.prototype.invokeRenderPopup = function (e) {\n if (Browser.isDevice && this.isFilterLayout()) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_2 = this;\n window.onpopstate = function () {\n proxy_2.hidePopup();\n };\n history.pushState({}, '');\n }\n if (!isNullOrUndefined(this.list) && (!isNullOrUndefined(this.list.children[0]) ||\n this.list.classList.contains(dropDownBaseClasses.noData))) {\n this.renderPopup(e);\n }\n };\n DropDownList.prototype.renderHightSearch = function () {\n // update high light search\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Hides the popup if it is in an open state.\n *\n * @returns {void}\n */\n DropDownList.prototype.hidePopup = function (e) {\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n if (this.isEscapeKey && this.getModuleName() === 'dropdownlist') {\n if (!isNullOrUndefined(this.inputElement)) {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.isEscapeKey = false;\n if (!isNullOrUndefined(this.index)) {\n var element = this.findListElement(this.ulElement, 'li', 'data-value', this.value);\n this.selectedLI = this.liCollections[this.index] || element;\n if (this.selectedLI) {\n this.updateSelectedItem(this.selectedLI, null, true);\n if (this.valueTemplate && this.itemData !== null) {\n this.setValueTemplate();\n }\n }\n }\n else {\n this.resetSelection();\n }\n }\n this.closePopup(0, e);\n var dataItem = this.getItemData();\n var isSelectVal = !isNullOrUndefined(this.selectedLI);\n if (this.inputElement && this.inputElement.value.trim() === '' && !this.isInteracted && (this.isSelectCustom ||\n isSelectVal && this.inputElement.value !== dataItem.text)) {\n this.isSelectCustom = false;\n this.clearAll(e);\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Sets the focus on the component for interaction.\n *\n * @returns {void}\n */\n DropDownList.prototype.focusIn = function (e) {\n if (!this.enabled) {\n return;\n }\n if (this.targetElement().classList.contains(dropDownListClasses.disable)) {\n return;\n }\n var isFocused = false;\n if (this.preventFocus && Browser.isDevice) {\n this.inputWrapper.container.tabIndex = 1;\n this.inputWrapper.container.focus();\n this.preventFocus = false;\n isFocused = true;\n }\n if (!isFocused) {\n this.targetElement().focus();\n }\n addClass([this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n this.onFocus(e);\n if (this.floatLabelType === 'Auto') {\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n }\n };\n /**\n * Moves the focus from the component if the component is already focused.\n *\n * @returns {void}\n */\n DropDownList.prototype.focusOut = function (e) {\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n if (!this.enabled) {\n return;\n }\n this.isTyped = true;\n this.hidePopup(e);\n if (this.targetElement()) {\n this.targetElement().blur();\n }\n removeClass([this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n if (this.floatLabelType === 'Auto' && this.inputElement.value === '') {\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n *\n * @method destroy\n * @returns {void}\n */\n DropDownList.prototype.destroy = function () {\n this.isActive = false;\n resetIncrementalSearchValues(this.element.id);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n this.clearTemplate();\n }\n this.hidePopup();\n this.unWireEvent();\n if (this.list) {\n this.unWireListEvents();\n }\n if (this.element && !this.element.classList.contains('e-' + this.getModuleName())) {\n return;\n }\n if (this.inputElement) {\n var attrArray = ['readonly', 'aria-disabled', 'placeholder', 'aria-labelledby',\n 'aria-expanded', 'autocomplete', 'aria-readonly', 'autocapitalize',\n 'spellcheck', 'aria-autocomplete', 'aria-live', 'aria-describedby', 'aria-label'];\n for (var i = 0; i < attrArray.length; i++) {\n this.inputElement.removeAttribute(attrArray[i]);\n }\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n this.inputElement.classList.remove('e-input');\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.element.style.display = 'block';\n if (this.inputWrapper.container.parentElement.tagName === this.getNgDirective()) {\n detach(this.inputWrapper.container);\n }\n else {\n this.inputWrapper.container.parentElement.insertBefore(this.element, this.inputWrapper.container);\n detach(this.inputWrapper.container);\n }\n this.hiddenElement = null;\n this.inputWrapper = null;\n this.keyboardModule = null;\n this.ulElement = null;\n this.list = null;\n this.popupObj = null;\n this.rippleFun = null;\n this.selectedLI = null;\n this.liCollections = null;\n this.item = null;\n this.inputWrapper = null;\n this.footer = null;\n this.header = null;\n this.previousSelectedLI = null;\n this.valueTempElement = null;\n this.actionData.ulElement = null;\n if (this.inputElement && !isNullOrUndefined(this.inputElement.onchange)) {\n this.inputElement.onchange = null;\n }\n if (this.isAngular) {\n this.inputElement = null;\n }\n _super.prototype.destroy.call(this);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets all the list items bound on this component.\n *\n * @returns {Element[]}\n */\n DropDownList.prototype.getItems = function () {\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n this.renderList();\n }\n return this.ulElement ? _super.prototype.getItems.call(this) : [];\n };\n /**\n * Gets the data Object that matches the given value.\n *\n * @param { string | number } value - Specifies the value of the list item.\n * @returns {Object}\n */\n DropDownList.prototype.getDataByValue = function (value) {\n return _super.prototype.getDataByValue.call(this, value);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Allows you to clear the selected values from the component.\n *\n * @returns {void}\n */\n DropDownList.prototype.clear = function () {\n this.value = null;\n };\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"cssClass\", void 0);\n __decorate([\n Property('100%')\n ], DropDownList.prototype, \"width\", void 0);\n __decorate([\n Property(true)\n ], DropDownList.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('300px')\n ], DropDownList.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], DropDownList.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"placeholder\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property({})\n ], DropDownList.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"query\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"index\", void 0);\n __decorate([\n Property('Never')\n ], DropDownList.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"showClearButton\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"filtering\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"focus\", void 0);\n DropDownList = __decorate([\n NotifyPropertyChanges\n ], DropDownList);\n return DropDownList;\n}(DropDownBase));\nexport { DropDownList };\n","/**\n * Collision module.\n */\nimport { calculatePosition } from './position';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nvar parentDocument;\nvar targetContainer;\n/**\n *\n * @param {HTMLElement} element - specifies the element\n * @param {HTMLElement} viewPortElement - specifies the element\n * @param {CollisionCoordinates} axis - specifies the collision coordinates\n * @param {OffsetPosition} position - specifies the position\n * @returns {void}\n */\nexport function fit(element, viewPortElement, axis, position) {\n if (viewPortElement === void 0) { viewPortElement = null; }\n if (axis === void 0) { axis = { X: false, Y: false }; }\n if (!axis.Y && !axis.X) {\n return { left: 0, top: 0 };\n }\n var elemData = element.getBoundingClientRect();\n targetContainer = viewPortElement;\n parentDocument = element.ownerDocument;\n if (!position) {\n position = calculatePosition(element, 'left', 'top');\n }\n var zoomingFactor = 1;\n var parentWithZoomStyle = element.closest('[style*=\"zoom\"]');\n if (parentWithZoomStyle) {\n zoomingFactor = parseFloat(getComputedStyle(parentWithZoomStyle).zoom);\n }\n if (axis.X) {\n var containerWidth = targetContainer ? getTargetContainerWidth() : getViewPortWidth();\n var containerLeft = ContainerLeft() / zoomingFactor;\n var containerRight = ContainerRight() / zoomingFactor;\n var overLeft = containerLeft - position.left;\n var overRight = position.left + elemData.width - containerRight;\n if (elemData.width > containerWidth) {\n if (overLeft > 0 && overRight <= 0) {\n position.left = containerRight - elemData.width;\n }\n else if (overRight > 0 && overLeft <= 0) {\n position.left = containerLeft;\n }\n else {\n position.left = overLeft > overRight ? (containerRight - elemData.width) : containerLeft;\n }\n }\n else if (overLeft > 0) {\n position.left += overLeft;\n }\n else if (overRight > 0) {\n position.left -= overRight;\n }\n }\n if (axis.Y) {\n var containerHeight = targetContainer ? getTargetContainerHeight() : getViewPortHeight();\n var containerTop = ContainerTop() / zoomingFactor;\n var containerBottom = ContainerBottom() / zoomingFactor;\n var overTop = containerTop - position.top;\n var overBottom = position.top + elemData.height - containerBottom;\n if (elemData.height > containerHeight) {\n if (overTop > 0 && overBottom <= 0) {\n position.top = containerBottom - elemData.height;\n }\n else if (overBottom > 0 && overTop <= 0) {\n position.top = containerTop;\n }\n else {\n position.top = overTop > overBottom ? (containerBottom - elemData.height) : containerTop;\n }\n }\n else if (overTop > 0) {\n position.top += overTop;\n }\n else if (overBottom > 0) {\n position.top -= overBottom;\n }\n }\n return position;\n}\n/**\n *\n * @param {HTMLElement} element - specifies the html element\n * @param {HTMLElement} viewPortElement - specifies the html element\n * @param {number} x - specifies the number\n * @param {number} y - specifies the number\n * @returns {string[]} - returns the string value\n */\nexport function isCollide(element, viewPortElement, x, y) {\n if (viewPortElement === void 0) { viewPortElement = null; }\n var elemOffset = calculatePosition(element, 'left', 'top');\n if (x) {\n elemOffset.left = x;\n }\n if (y) {\n elemOffset.top = y;\n }\n var data = [];\n targetContainer = viewPortElement;\n parentDocument = element.ownerDocument;\n var elementRect = element.getBoundingClientRect();\n var top = elemOffset.top;\n var left = elemOffset.left;\n var right = elemOffset.left + elementRect.width;\n var bottom = elemOffset.top + elementRect.height;\n // eslint-disable-next-line\n var topData = '', leftData = '';\n var yAxis = topCollideCheck(top, bottom);\n var xAxis = leftCollideCheck(left, right);\n if (yAxis.topSide) {\n data.push('top');\n }\n if (xAxis.rightSide) {\n data.push('right');\n }\n if (xAxis.leftSide) {\n data.push('left');\n }\n if (yAxis.bottomSide) {\n data.push('bottom');\n }\n return data;\n}\n/**\n *\n * @param {HTMLElement} element - specifies the element\n * @param {HTMLElement} target - specifies the element\n * @param {number} offsetX - specifies the number\n * @param {number} offsetY - specifies the number\n * @param {string} positionX - specifies the string value\n * @param {string} positionY - specifies the string value\n * @param {HTMLElement} viewPortElement - specifies the element\n * @param {CollisionCoordinates} axis - specifies the collision axis\n * @param {boolean} fixedParent - specifies the boolean\n * @returns {void}\n */\nexport function flip(element, target, offsetX, offsetY, positionX, positionY, viewPortElement, \n/* eslint-disable */\naxis, fixedParent) {\n if (viewPortElement === void 0) { viewPortElement = null; }\n if (axis === void 0) { axis = { X: true, Y: true }; }\n if (!target || !element || !positionX || !positionY || (!axis.X && !axis.Y)) {\n return;\n }\n var tEdge = { TL: null,\n TR: null,\n BL: null,\n BR: null\n }, eEdge = {\n TL: null,\n TR: null,\n BL: null,\n BR: null\n /* eslint-enable */\n };\n var elementRect;\n if (window.getComputedStyle(element).display === 'none') {\n var oldVisibility = element.style.visibility;\n element.style.visibility = 'hidden';\n element.style.display = 'block';\n elementRect = element.getBoundingClientRect();\n element.style.removeProperty('display');\n element.style.visibility = oldVisibility;\n }\n else {\n elementRect = element.getBoundingClientRect();\n }\n var pos = {\n posX: positionX, posY: positionY, offsetX: offsetX, offsetY: offsetY, position: { left: 0, top: 0 }\n };\n targetContainer = viewPortElement;\n parentDocument = target.ownerDocument;\n updateElementData(target, tEdge, pos, fixedParent, elementRect);\n setPosition(eEdge, pos, elementRect);\n if (axis.X) {\n leftFlip(target, eEdge, tEdge, pos, elementRect, true);\n }\n if (axis.Y && tEdge.TL.top > -1) {\n topFlip(target, eEdge, tEdge, pos, elementRect, true);\n }\n setPopup(element, pos, elementRect);\n}\n/**\n *\n * @param {HTMLElement} element - specifies the element\n * @param {PositionLocation} pos - specifies the location\n * @param {ClientRect} elementRect - specifies the client rect\n * @returns {void}\n */\nfunction setPopup(element, pos, elementRect) {\n //eslint-disable-next-line\n var left = 0, top = 0;\n if (element.offsetParent != null\n && (getComputedStyle(element.offsetParent).position === 'absolute' ||\n getComputedStyle(element.offsetParent).position === 'relative')) {\n var data = calculatePosition(element.offsetParent, 'left', 'top', false, elementRect);\n left = data.left;\n top = data.top;\n }\n var scaleX = 1;\n var scaleY = 1;\n if (element.offsetParent) {\n var transformStyle = getComputedStyle(element.offsetParent).transform;\n if (transformStyle !== 'none') {\n var matrix = new DOMMatrix(transformStyle);\n scaleX = matrix.a;\n scaleY = matrix.d;\n }\n }\n element.style.top = ((pos.position.top / scaleY) + pos.offsetY - (top)) + 'px';\n element.style.left = ((pos.position.left / scaleX) + pos.offsetX - (left)) + 'px';\n}\n/**\n *\n * @param {HTMLElement} target - specifies the element\n * @param {EdgeOffset} edge - specifies the offset\n * @param {PositionLocation} pos - specifies theloaction\n * @param {boolean} fixedParent - specifies the boolean\n * @param {ClientRect} elementRect - specifies the client rect\n * @returns {void}\n */\nfunction updateElementData(target, edge, pos, fixedParent, elementRect) {\n pos.position = calculatePosition(target, pos.posX, pos.posY, fixedParent, elementRect);\n edge.TL = calculatePosition(target, 'left', 'top', fixedParent, elementRect);\n edge.TR = calculatePosition(target, 'right', 'top', fixedParent, elementRect);\n edge.BR = calculatePosition(target, 'left', 'bottom', fixedParent, elementRect);\n edge.BL = calculatePosition(target, 'right', 'bottom', fixedParent, elementRect);\n}\n/**\n *\n * @param {EdgeOffset} eStatus - specifies the status\n * @param {PositionLocation} pos - specifies the location\n * @param {ClientRect} elementRect - specifies the client\n * @returns {void}\n */\nfunction setPosition(eStatus, pos, elementRect) {\n eStatus.TL = { top: pos.position.top + pos.offsetY, left: pos.position.left + pos.offsetX };\n eStatus.TR = { top: eStatus.TL.top, left: eStatus.TL.left + elementRect.width };\n eStatus.BL = { top: eStatus.TL.top + elementRect.height,\n left: eStatus.TL.left };\n eStatus.BR = { top: eStatus.TL.top + elementRect.height,\n left: eStatus.TL.left + elementRect.width };\n}\n/**\n *\n * @param {number} left - specifies the number\n * @param {number} right - specifies the number\n * @returns {LeftCorners} - returns the value\n */\nfunction leftCollideCheck(left, right) {\n //eslint-disable-next-line\n var leftSide = false, rightSide = false;\n if (((left - getBodyScrollLeft()) < ContainerLeft())) {\n leftSide = true;\n }\n if (right > ContainerRight()) {\n rightSide = true;\n }\n return { leftSide: leftSide, rightSide: rightSide };\n}\n/**\n *\n * @param {HTMLElement} target - specifies the element\n * @param {EdgeOffset} edge - specifes the element\n * @param {EdgeOffset} tEdge - specifies the edge offset\n * @param {PositionLocation} pos - specifes the location\n * @param {ClientRect} elementRect - specifies the client\n * @param {boolean} deepCheck - specifies the boolean value\n * @returns {void}\n */\nfunction leftFlip(target, edge, tEdge, pos, elementRect, deepCheck) {\n var collideSide = leftCollideCheck(edge.TL.left, edge.TR.left);\n if ((tEdge.TL.left - getBodyScrollLeft()) <= ContainerLeft()) {\n collideSide.leftSide = false;\n }\n if (tEdge.TR.left > ContainerRight()) {\n collideSide.rightSide = false;\n }\n if ((collideSide.leftSide && !collideSide.rightSide) || (!collideSide.leftSide && collideSide.rightSide)) {\n if (pos.posX === 'right') {\n pos.posX = 'left';\n }\n else {\n pos.posX = 'right';\n }\n pos.offsetX = pos.offsetX + elementRect.width;\n pos.offsetX = -1 * pos.offsetX;\n pos.position = calculatePosition(target, pos.posX, pos.posY, false);\n setPosition(edge, pos, elementRect);\n if (deepCheck) {\n leftFlip(target, edge, tEdge, pos, elementRect, false);\n }\n }\n}\n/**\n *\n * @param {HTMLElement} target - specifies the element\n * @param {EdgeOffset} edge - specifies the offset\n * @param {EdgeOffset} tEdge - specifies the offset\n * @param {PositionLocation} pos - specifies the location\n * @param {ClientRect} elementRect - specifies the client rect\n * @param {boolean} deepCheck - specifies the boolean\n * @returns {void}\n */\nfunction topFlip(target, edge, tEdge, pos, elementRect, deepCheck) {\n var collideSide = topCollideCheck(edge.TL.top, edge.BL.top);\n if ((tEdge.TL.top - getBodyScrollTop()) <= ContainerTop()) {\n collideSide.topSide = false;\n }\n if (tEdge.BL.top >= ContainerBottom() && target.getBoundingClientRect().bottom < window.innerHeight) {\n collideSide.bottomSide = false;\n }\n if ((collideSide.topSide && !collideSide.bottomSide) || (!collideSide.topSide && collideSide.bottomSide)) {\n if (pos.posY === 'top') {\n pos.posY = 'bottom';\n }\n else {\n pos.posY = 'top';\n }\n pos.offsetY = pos.offsetY + elementRect.height;\n pos.offsetY = -1 * pos.offsetY;\n pos.position = calculatePosition(target, pos.posX, pos.posY, false, elementRect);\n setPosition(edge, pos, elementRect);\n if (deepCheck) {\n topFlip(target, edge, tEdge, pos, elementRect, false);\n }\n }\n}\n/**\n *\n * @param {number} top - specifies the number\n * @param {number} bottom - specifies the number\n * @returns {TopCorners} - retyrns the value\n */\nfunction topCollideCheck(top, bottom) {\n //eslint-disable-next-line\n var topSide = false, bottomSide = false;\n if ((top - getBodyScrollTop()) < ContainerTop()) {\n topSide = true;\n }\n if (bottom > ContainerBottom()) {\n bottomSide = true;\n }\n return { topSide: topSide, bottomSide: bottomSide };\n}\n/**\n * @returns {void}\n */\nfunction getTargetContainerWidth() {\n return targetContainer.getBoundingClientRect().width;\n}\n/**\n * @returns {void}\n */\nfunction getTargetContainerHeight() {\n return targetContainer.getBoundingClientRect().height;\n}\n/**\n * @returns {void}\n */\nfunction getTargetContainerLeft() {\n return targetContainer.getBoundingClientRect().left;\n}\n/**\n * @returns {void}\n */\nfunction getTargetContainerTop() {\n return targetContainer.getBoundingClientRect().top;\n}\n//eslint-disable-next-line\nfunction ContainerTop() {\n if (targetContainer) {\n return getTargetContainerTop();\n }\n return 0;\n}\n//eslint-disable-next-line\nfunction ContainerLeft() {\n if (targetContainer) {\n return getTargetContainerLeft();\n }\n return 0;\n}\n//eslint-disable-next-line\nfunction ContainerRight() {\n if (targetContainer) {\n return (getBodyScrollLeft() + getTargetContainerLeft() + getTargetContainerWidth());\n }\n return (getBodyScrollLeft() + getViewPortWidth());\n}\n//eslint-disable-next-line\nfunction ContainerBottom() {\n if (targetContainer) {\n return (getBodyScrollTop() + getTargetContainerTop() + getTargetContainerHeight());\n }\n return (getBodyScrollTop() + getViewPortHeight());\n}\n/**\n * @returns {void}\n */\nfunction getBodyScrollTop() {\n // if(targetContainer)\n // return targetContainer.scrollTop;\n return parentDocument.documentElement.scrollTop || parentDocument.body.scrollTop;\n}\n/**\n * @returns {void}\n */\nfunction getBodyScrollLeft() {\n // if(targetContainer)\n // return targetContainer.scrollLeft;\n return parentDocument.documentElement.scrollLeft || parentDocument.body.scrollLeft;\n}\n/**\n * @returns {void}\n */\nfunction getViewPortHeight() {\n return window.innerHeight;\n}\n/**\n * @returns {void}\n */\nfunction getViewPortWidth() {\n var windowWidth = window.innerWidth;\n var documentReact = document.documentElement.getBoundingClientRect();\n var offsetWidth = (isNullOrUndefined(document.documentElement)) ? 0 : documentReact.width;\n return windowWidth - (windowWidth - offsetWidth);\n}\n","const LICIENSE =\n \"Ngo9BigBOggjHTQxAR8/V1NGaF1cWGhAYVFwWmFZfV1gfV9DZVZSQWY/P1ZhSXxQdk1hXn1fdXFWQGFcUkc=\";\nexport default LICIENSE;\n","/**\n * Position library\n */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nvar elementRect;\nvar popupRect;\nvar element;\nvar parentDocument;\nvar fixedParent = false;\n/**\n *\n * @param {HTMLElement} anchor - specifies the element\n * @param {HTMLElement} element - specifies the element\n * @returns {OffsetPosition} - returns the value\n */\nexport function calculateRelativeBasedPosition(anchor, element) {\n var fixedElement = false;\n var anchorPos = { left: 0, top: 0 };\n var tempAnchor = anchor;\n if (!anchor || !element) {\n return anchorPos;\n }\n if (isNullOrUndefined(element.offsetParent) && element.style.position === 'fixed') {\n fixedElement = true;\n }\n while ((element.offsetParent || fixedElement) && anchor && element.offsetParent !== anchor) {\n anchorPos.left += anchor.offsetLeft;\n anchorPos.top += anchor.offsetTop;\n anchor = anchor.offsetParent;\n }\n anchor = tempAnchor;\n while ((element.offsetParent || fixedElement) && anchor && element.offsetParent !== anchor) {\n anchorPos.left -= anchor.scrollLeft;\n anchorPos.top -= anchor.scrollTop;\n anchor = anchor.parentElement;\n }\n return anchorPos;\n}\n/**\n *\n * @param {Element} currentElement - specifies the element\n * @param {string} positionX - specifies the position\n * @param {string} positionY - specifies the position\n * @param {boolean} parentElement - specifies the boolean\n * @param {ClientRect} targetValues - specifies the client\n * @returns {OffsetPosition} - returns the position\n */\nexport function calculatePosition(currentElement, positionX, positionY, parentElement, targetValues) {\n popupRect = undefined;\n popupRect = targetValues;\n fixedParent = parentElement ? true : false;\n if (!currentElement) {\n return { left: 0, top: 0 };\n }\n if (!positionX) {\n positionX = 'left';\n }\n if (!positionY) {\n positionY = 'top';\n }\n parentDocument = currentElement.ownerDocument;\n element = currentElement;\n var pos = { left: 0, top: 0 };\n return updatePosition(positionX.toLowerCase(), positionY.toLowerCase(), pos);\n}\n/**\n *\n * @param {number} value - specifies the number\n * @param {OffsetPosition} pos - specifies the position\n * @returns {void}\n */\nfunction setPosx(value, pos) {\n pos.left = value;\n}\n/**\n *\n * @param {number} value - specifies the number\n * @param {OffsetPosition} pos - specifies the position\n * @returns {void}\n */\nfunction setPosy(value, pos) {\n pos.top = value;\n}\n/**\n *\n * @param {string} posX - specifies the position\n * @param {string} posY - specifies the position\n * @param {OffsetPosition} pos - specifies the position\n * @returns {OffsetPosition} - returns the postion\n */\nfunction updatePosition(posX, posY, pos) {\n elementRect = element.getBoundingClientRect();\n switch (posY + posX) {\n case 'topcenter':\n setPosx(getElementHCenter(), pos);\n setPosy(getElementTop(), pos);\n break;\n case 'topright':\n setPosx(getElementRight(), pos);\n setPosy(getElementTop(), pos);\n break;\n case 'centercenter':\n setPosx(getElementHCenter(), pos);\n setPosy(getElementVCenter(), pos);\n break;\n case 'centerright':\n setPosx(getElementRight(), pos);\n setPosy(getElementVCenter(), pos);\n break;\n case 'centerleft':\n setPosx(getElementLeft(), pos);\n setPosy(getElementVCenter(), pos);\n break;\n case 'bottomcenter':\n setPosx(getElementHCenter(), pos);\n setPosy(getElementBottom(), pos);\n break;\n case 'bottomright':\n setPosx(getElementRight(), pos);\n setPosy(getElementBottom(), pos);\n break;\n case 'bottomleft':\n setPosx(getElementLeft(), pos);\n setPosy(getElementBottom(), pos);\n break;\n default:\n case 'topleft':\n setPosx(getElementLeft(), pos);\n setPosy(getElementTop(), pos);\n break;\n }\n element = null;\n return pos;\n}\n/**\n * @returns {number} - specifies the number value\n */\nfunction getBodyScrollTop() {\n return parentDocument.documentElement.scrollTop || parentDocument.body.scrollTop;\n}\n/**\n * @returns {number} - specifies the number value\n */\nfunction getBodyScrollLeft() {\n return parentDocument.documentElement.scrollLeft || parentDocument.body.scrollLeft;\n}\n/**\n * @returns {number} - specifies the number value\n */\nfunction getElementBottom() {\n return fixedParent ? elementRect.bottom : elementRect.bottom + getBodyScrollTop();\n}\n/**\n * @returns {number} - specifies the number value\n */\nfunction getElementVCenter() {\n return getElementTop() + (elementRect.height / 2);\n}\n/**\n * @returns {number} - specifies the number value\n */\nfunction getElementTop() {\n return fixedParent ? elementRect.top : elementRect.top + getBodyScrollTop();\n}\n/**\n * @returns {number} - specifies the number value\n */\nfunction getElementLeft() {\n return elementRect.left + getBodyScrollLeft();\n}\n/**\n * @returns {number} - specifies the number value\n */\nfunction getElementRight() {\n var popupWidth = (element && (element.classList.contains('e-date-wrapper') || element.classList.contains('e-datetime-wrapper') || element.classList.contains('e-date-range-wrapper') || element.classList.contains('e-ddl') || element.classList.contains('e-multiselect'))) ? (popupRect ? popupRect.width : 0) :\n (popupRect && (elementRect.width >= popupRect.width) ? popupRect.width : 0);\n return elementRect.right + getBodyScrollLeft() - popupWidth;\n}\n/**\n * @returns {number} - specifies the number value\n */\nfunction getElementHCenter() {\n return getElementLeft() + (elementRect.width / 2);\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Browser } from '@syncfusion/ej2-base';\nimport { cldrData, L10n, Component, getDefaultDateObject, rippleEffect, Event } from '@syncfusion/ej2-base';\nimport { remove, addClass, detach, removeClass, closest, append, attributes, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, getValue, extend, getUniqueID, ChildProperty } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { ListBase } from '@syncfusion/ej2-lists';\nvar WRAPPERCLASS = 'e-time-wrapper';\nvar POPUP = 'e-popup';\nvar ERROR = 'e-error';\nvar POPUPDIMENSION = '240px';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar ROOT = 'e-timepicker';\nvar LIBRARY = 'e-lib';\nvar CONTROL = 'e-control';\nvar CONTENT = 'e-content';\nvar SELECTED = 'e-active';\nvar HOVER = 'e-hover';\nvar NAVIGATION = 'e-navigation';\nvar DISABLED = 'e-disabled';\nvar ICONANIMATION = 'e-icon-anim';\nvar TIMEICON = 'e-time-icon';\nvar CLEARICON = 'e-clear-icon';\nvar FOCUS = 'e-input-focus';\nvar LISTCLASS = 'e-list-item';\nvar HALFPOSITION = 2;\nvar ANIMATIONDURATION = 50;\nvar OVERFLOW = 'e-time-overflow';\nvar OFFSETVAL = 4;\nvar EDITABLE = 'e-non-edit';\nvar wrapperAttributes = ['title', 'class', 'style'];\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var TimePickerBase;\n(function (TimePickerBase) {\n // eslint-disable-next-line max-len, jsdoc/require-jsdoc\n function createListItems(createdEl, min, max, globalize, timeFormat, step) {\n var formatOptions;\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: timeFormat, type: 'time' };\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n formatOptions = { format: timeFormat, type: 'time', calendar: 'islamic' };\n }\n var start;\n var interval = step * 60000;\n var listItems = [];\n var timeCollections = [];\n start = +(min.setMilliseconds(0));\n var end = +(max.setMilliseconds(0));\n while (end >= start) {\n timeCollections.push(start);\n listItems.push(globalize.formatDate(new Date(start), { format: timeFormat, type: 'time' }));\n start += interval;\n }\n var listTag = ListBase.createList(createdEl, listItems, null, true);\n return { collection: timeCollections, list: listTag };\n }\n TimePickerBase.createListItems = createListItems;\n})(TimePickerBase || (TimePickerBase = {}));\nvar TimeMaskPlaceholder = /** @class */ (function (_super) {\n __extends(TimeMaskPlaceholder, _super);\n function TimeMaskPlaceholder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('day')\n ], TimeMaskPlaceholder.prototype, \"day\", void 0);\n __decorate([\n Property('month')\n ], TimeMaskPlaceholder.prototype, \"month\", void 0);\n __decorate([\n Property('year')\n ], TimeMaskPlaceholder.prototype, \"year\", void 0);\n __decorate([\n Property('day of the week')\n ], TimeMaskPlaceholder.prototype, \"dayOfTheWeek\", void 0);\n __decorate([\n Property('hour')\n ], TimeMaskPlaceholder.prototype, \"hour\", void 0);\n __decorate([\n Property('minute')\n ], TimeMaskPlaceholder.prototype, \"minute\", void 0);\n __decorate([\n Property('second')\n ], TimeMaskPlaceholder.prototype, \"second\", void 0);\n return TimeMaskPlaceholder;\n}(ChildProperty));\nexport { TimeMaskPlaceholder };\n/**\n * TimePicker is an intuitive interface component which provides an options to select a time value\n * from popup list or to set a desired time value.\n * ```\n * \n * \n * ```\n */\nvar TimePicker = /** @class */ (function (_super) {\n __extends(TimePicker, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {TimePickerModel} options - Specifies the TimePicker model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function TimePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.liCollections = [];\n _this.timeCollections = [];\n _this.disableItemCollection = [];\n _this.invalidValueString = null;\n _this.isAngular = false;\n _this.preventChange = false;\n _this.maskedDateValue = '';\n _this.moduleName = _this.getModuleName();\n _this.timeOptions = options;\n return _this;\n }\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n TimePicker.prototype.preRender = function () {\n this.keyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [ROOT, CONTROL, LIBRARY]);\n this.inputElement = this.element;\n this.angularTag = null;\n this.formElement = closest(this.element, 'form');\n if (this.element.tagName === 'EJS-TIMEPICKER') {\n this.angularTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n this.openPopupEventArgs = {\n appendTo: document.body\n };\n };\n // element creation\n TimePicker.prototype.render = function () {\n this.initialize();\n this.createInputElement();\n this.updateHtmlAttributeToWrapper();\n this.setTimeAllowEdit();\n this.setEnable();\n this.validateInterval();\n this.bindEvents();\n this.validateDisable();\n this.setTimeZone();\n this.setValue(this.getFormattedValue(this.value));\n if (this.enableMask && !this.value && this.maskedDateValue && (this.floatLabelType === 'Always' || !this.floatLabelType || !this.placeholder)) {\n this.updateInputValue(this.maskedDateValue);\n this.checkErrorState(this.maskedDateValue);\n }\n this.anchor = this.inputElement;\n this.inputElement.setAttribute('value', this.inputElement.value);\n this.inputEleValue = this.getDateObject(this.inputElement.value);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.renderComplete();\n };\n TimePicker.prototype.setTimeZone = function () {\n if (!isNullOrUndefined(this.serverTimezoneOffset) && this.value) {\n var clientTimeZoneDiff = new Date().getTimezoneOffset() / 60;\n var serverTimezoneDiff = this.serverTimezoneOffset;\n var timeZoneDiff = serverTimezoneDiff + clientTimeZoneDiff;\n timeZoneDiff = this.isDayLightSaving() ? timeZoneDiff-- : timeZoneDiff;\n this.value = new Date((this.value).getTime() + (timeZoneDiff * 60 * 60 * 1000));\n }\n };\n TimePicker.prototype.isDayLightSaving = function () {\n var firstOffset = new Date(this.value.getFullYear(), 0, 1).getTimezoneOffset();\n var secondOffset = new Date(this.value.getFullYear(), 6, 1).getTimezoneOffset();\n return (this.value.getTimezoneOffset() < Math.max(firstOffset, secondOffset));\n };\n TimePicker.prototype.setTimeAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n this.clearIconState();\n };\n TimePicker.prototype.clearIconState = function () {\n if (!this.allowEdit && this.inputWrapper && !this.readonly) {\n if (this.inputElement.value === '') {\n removeClass([this.inputWrapper.container], [EDITABLE]);\n }\n else {\n addClass([this.inputWrapper.container], [EDITABLE]);\n }\n }\n else if (this.inputWrapper) {\n removeClass([this.inputWrapper.container], [EDITABLE]);\n }\n };\n TimePicker.prototype.validateDisable = function () {\n this.setMinMax(this.initMin, this.initMax);\n if (!isNullOrUndefined(this.value)) {\n this.popupCreation();\n this.popupObj.destroy();\n this.popupWrapper = this.popupObj = null;\n }\n if ((!isNaN(+this.value) && this.value !== null)) {\n if (!this.valueIsDisable(this.value)) {\n //disable value given in value property so reset the date based on current date\n if (this.strictMode) {\n this.resetState();\n }\n this.initValue = null;\n this.initMax = this.getDateObject(this.initMax);\n this.initMin = this.getDateObject(this.initMin);\n this.timeCollections = this.liCollections = [];\n this.setMinMax(this.initMin, this.initMax);\n }\n }\n };\n TimePicker.prototype.validationAttribute = function (target, input) {\n var name = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n input.setAttribute('name', name);\n target.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (isNullOrUndefined(target.getAttribute(attributes[i]))) {\n continue;\n }\n var attr = target.getAttribute(attributes[i]);\n input.setAttribute(attributes[i], attr);\n target.removeAttribute(attributes[i]);\n }\n };\n TimePicker.prototype.initialize = function () {\n this.globalize = new Internationalization(this.locale);\n this.defaultCulture = new Internationalization('en');\n this.checkTimeFormat();\n this.checkInvalidValue(this.value);\n // persist the value property.\n this.setProperties({ value: this.checkDateValue(new Date(this.checkInValue(this.value))) }, true);\n this.setProperties({ min: this.checkDateValue(new Date(this.checkInValue(this.min))) }, true);\n this.setProperties({ max: this.checkDateValue(new Date(this.checkInValue(this.max))) }, true);\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkInValue(this.scrollTo))) }, true);\n if (this.angularTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.updateHtmlAttributeToElement();\n this.checkAttributes(false); //check the input element attributes\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('timepicker', localeText, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n this.initValue = this.checkDateValue(this.value);\n this.initMin = this.checkDateValue(this.min);\n this.initMax = this.checkDateValue(this.max);\n this.isNavigate = this.isPreventBlur = this.isTextSelected = false;\n this.activeIndex = this.valueWithMinutes = this.prevDate = null;\n if (!isNullOrUndefined(this.element.getAttribute('id'))) {\n if (this.angularTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n //for angular case\n this.element.id = getUniqueID('ej2_timepicker');\n if (this.angularTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n if (isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.element.id });\n }\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n };\n TimePicker.prototype.checkTimeFormat = function () {\n if (this.format) {\n if (typeof this.format === 'string') {\n this.formatString = this.format;\n }\n else if (!isNullOrUndefined(this.format.skeleton) && this.format.skeleton !== '') {\n var skeletonString = this.format.skeleton;\n this.formatString = this.globalize.getDatePattern({ type: 'time', skeleton: skeletonString });\n }\n else {\n this.formatString = this.globalize.getDatePattern({ type: 'time', skeleton: 'short' });\n }\n }\n else {\n this.formatString = null;\n }\n };\n TimePicker.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n TimePicker.prototype.createInputElement = function () {\n if (this.fullScreenMode && Browser.isDevice) {\n this.cssClass += ' ' + \"e-popup-expand\";\n }\n var updatedCssClassesValue = this.cssClass;\n var isBindClearAction = this.enableMask ? false : true;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassesValue = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n bindClearAction: isBindClearAction,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassesValue,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton\n },\n buttons: [' e-input-group-icon e-time-icon e-icons']\n }, this.createElement);\n this.inputWrapper.container.style.width = this.setWidth(this.width);\n attributes(this.inputElement, {\n 'aria-autocomplete': 'list', 'tabindex': '0',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-disabled': 'false', 'aria-invalid': 'false'\n });\n if (!this.isNullOrEmpty(this.inputStyle)) {\n Input.addAttributes({ 'style': this.inputStyle }, this.inputElement);\n }\n addClass([this.inputWrapper.container], WRAPPERCLASS);\n };\n TimePicker.prototype.getCldrDateTimeFormat = function () {\n var culture = new Internationalization(this.locale);\n var cldrTime;\n var dateFormat = culture.getDatePattern({ skeleton: 'yMd' });\n if (this.isNullOrEmpty(this.formatString)) {\n cldrTime = dateFormat + ' ' + this.cldrFormat('time');\n }\n else {\n cldrTime = this.formatString;\n }\n return cldrTime;\n };\n TimePicker.prototype.checkInvalidValue = function (value) {\n var isInvalid = false;\n if (typeof value !== 'object' && !isNullOrUndefined(value)) {\n var valueString = value;\n if (typeof valueString === 'string') {\n valueString = valueString.trim();\n }\n var valueExpression = null;\n var valueExp = null;\n if (typeof value === 'number') {\n valueString = value.toString();\n }\n else if (typeof value === 'string') {\n if (!(/^[a-zA-Z0-9- ]*$/).test(value)) {\n valueExpression = this.setCurrentDate(this.getDateObject(value));\n if (isNullOrUndefined(valueExpression)) {\n valueExpression = this.checkDateValue(this.globalize.parseDate(valueString, {\n format: this.getCldrDateTimeFormat(), type: 'datetime'\n }));\n if (isNullOrUndefined(valueExpression)) {\n valueExpression = this.checkDateValue(this.globalize.parseDate(valueString, {\n format: this.formatString, type: 'dateTime', skeleton: 'yMd'\n }));\n }\n }\n }\n }\n valueExp = this.globalize.parseDate(valueString, {\n format: this.getCldrDateTimeFormat(), type: 'datetime'\n });\n valueExpression = (!isNullOrUndefined(valueExp) && valueExp instanceof Date && !isNaN(+valueExp)) ? valueExp : null;\n if (isNullOrUndefined(valueExpression) && valueString.replace(/\\s/g, '').length) {\n var extISOString = null;\n var basicISOString = null;\n // eslint-disable-next-line\n extISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n // eslint-disable-next-line\n basicISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n if ((!extISOString.test(valueString) && !basicISOString.test(valueString))\n || ((/^[a-zA-Z0-9- ]*$/).test(value)) || isNaN(+new Date('' + valueString))) {\n isInvalid = true;\n }\n else {\n valueExpression = new Date('' + valueString);\n }\n }\n if (isInvalid) {\n if (!this.strictMode) {\n this.invalidValueString = valueString;\n }\n this.setProperties({ value: null }, true);\n this.initValue = null;\n }\n else {\n this.setProperties({ value: valueExpression }, true);\n this.initValue = this.value;\n }\n }\n };\n TimePicker.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableMask) {\n modules.push({ args: [this], member: 'MaskedDateTime' });\n }\n return modules;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n TimePicker.prototype.cldrFormat = function (type) {\n var cldrDateTimeString;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDateTimeString = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDateTimeString = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n return cldrDateTimeString;\n };\n // destroy function\n TimePicker.prototype.destroy = function () {\n this.hide();\n this.unBindEvents();\n var ariaAttribute = {\n 'aria-autocomplete': 'list', 'tabindex': '0',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-disabled': 'true', 'aria-invalid': 'false'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttribute, this.inputElement);\n if (this.angularTag === null) {\n this.inputWrapper.container.parentElement.appendChild(this.inputElement);\n }\n if (!isNullOrUndefined(this.cloneElement.getAttribute('tabindex'))) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.removeAttribute('tabindex');\n }\n this.ensureInputAttribute();\n this.enableElement([this.inputElement]);\n this.inputElement.classList.remove('e-input');\n if (isNullOrUndefined(this.cloneElement.getAttribute('disabled'))) {\n Input.setEnabled(true, this.inputElement, this.floatLabelType);\n }\n }\n if (this.inputWrapper.container) {\n detach(this.inputWrapper.container);\n }\n this.inputWrapper = this.popupWrapper = this.cloneElement = undefined;\n this.liCollections = this.timeCollections = this.disableItemCollection = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n _super.prototype.destroy.call(this);\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n this.rippleFn = null;\n this.openPopupEventArgs = null;\n this.selectedElement = null;\n this.listTag = null;\n this.liCollections = null;\n };\n TimePicker.prototype.ensureInputAttribute = function () {\n var propertyList = [];\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n propertyList[i] = this.inputElement.attributes[i].name;\n }\n for (var i = 0; i < propertyList.length; i++) {\n if (!isNullOrUndefined(this.cloneElement.getAttribute(propertyList[i]))) {\n this.inputElement.setAttribute(propertyList[i], this.cloneElement.getAttribute(propertyList[i]));\n if (propertyList[i].toLowerCase() === 'value') {\n this.inputElement.value = this.cloneElement.getAttribute(propertyList[i]);\n }\n }\n else {\n this.inputElement.removeAttribute(propertyList[i]);\n if (propertyList[i].toLowerCase() === 'value') {\n this.inputElement.value = '';\n }\n }\n }\n };\n //popup creation\n TimePicker.prototype.popupCreation = function () {\n this.popupWrapper = this.createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_popup', 'style': 'visibility:hidden' }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.className += ' ' + this.cssClass;\n }\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.generateList();\n append([this.listWrapper], this.popupWrapper);\n }\n this.addSelection();\n this.renderPopup();\n detach(this.popupWrapper);\n };\n TimePicker.prototype.getPopupHeight = function () {\n var height = parseInt(POPUPDIMENSION, 10);\n var popupHeight = this.popupWrapper.getBoundingClientRect().height;\n return popupHeight > height ? height : popupHeight;\n };\n TimePicker.prototype.generateList = function () {\n this.createListItems();\n this.wireListEvents();\n var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n };\n TimePicker.prototype.renderPopup = function () {\n var _this = this;\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n this.popupObj = new Popup(this.popupWrapper, {\n width: this.setPopupWidth(this.width),\n zIndex: this.zIndex,\n targetType: 'relative',\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n enableRtl: this.enableRtl,\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n offsetY: OFFSETVAL,\n open: function () {\n _this.popupWrapper.style.visibility = 'visible';\n addClass([_this.inputWrapper.buttons[0]], SELECTED);\n }, close: function () {\n removeClass([_this.inputWrapper.buttons[0]], SELECTED);\n _this.unWireListEvents();\n _this.inputElement.removeAttribute('aria-activedescendant');\n remove(_this.popupObj.element);\n _this.popupObj.destroy();\n _this.popupWrapper.innerHTML = '';\n _this.listWrapper = _this.popupWrapper = _this.listTag = undefined;\n }, targetExitViewport: function () {\n if (!Browser.isDevice) {\n _this.hide();\n }\n }\n });\n if (!Browser.isDevice) {\n this.popupObj.collision = { X: 'none', Y: 'flip' };\n }\n if (Browser.isDevice && this.fullScreenMode) {\n this.popupObj.element.style.maxHeight = \"100%\";\n this.popupObj.element.style.width = \"100%\";\n }\n else {\n this.popupObj.element.style.maxHeight = POPUPDIMENSION;\n }\n if (Browser.isDevice && this.fullScreenMode) {\n var modelHeader = this.createElement('div', { className: 'e-model-header' });\n var modelTitleSpan = this.createElement(\"span\", { className: \"e-model-title\" });\n modelTitleSpan.textContent = \"Select time\";\n var modelCloseIcon = this.createElement(\"span\", { className: \"e-popup-close\" });\n EventHandler.add(modelCloseIcon, 'mousedown touchstart', this.timePopupCloseHandler, this);\n modelHeader.appendChild(modelCloseIcon);\n modelHeader.appendChild(modelTitleSpan);\n this.popupWrapper.insertBefore(modelHeader, this.popupWrapper.firstElementChild);\n }\n };\n TimePicker.prototype.timePopupCloseHandler = function (e) {\n this.hide();\n };\n //util function\n TimePicker.prototype.getFormattedValue = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { skeleton: 'medium', type: 'time' });\n }\n };\n TimePicker.prototype.getDateObject = function (text) {\n if (!this.isNullOrEmpty(text)) {\n var dateValue = this.createDateObj(text);\n var value = !this.isNullOrEmpty(this.initValue);\n if (this.checkDateValue(dateValue)) {\n var date = value ? this.initValue.getDate() : DAY;\n var month = value ? this.initValue.getMonth() : MONTH;\n var year = value ? this.initValue.getFullYear() : YEAR;\n return new Date(year, month, date, dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds());\n }\n }\n return null;\n };\n TimePicker.prototype.updateHtmlAttributeToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttributes.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassesValue = (this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ')).trim();\n if (updatedClassesValue !== '') {\n addClass([this.inputWrapper.container], updatedClassesValue.split(' '));\n }\n }\n else if (key === 'style') {\n var timeStyle = this.inputWrapper.container.getAttribute(key);\n timeStyle = !isNullOrUndefined(timeStyle) ? (timeStyle + this.htmlAttributes[\"\" + key]) :\n this.htmlAttributes[\"\" + key];\n this.inputWrapper.container.setAttribute(key, timeStyle);\n }\n else {\n this.inputWrapper.container.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n };\n TimePicker.prototype.updateHtmlAttributeToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttributes.indexOf(key) < 0) {\n this.inputElement.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n TimePicker.prototype.updateCssClass = function (cssClassNew, cssClassOld) {\n if (!isNullOrUndefined(cssClassOld)) {\n cssClassOld = (cssClassOld.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(cssClassNew)) {\n cssClassNew = (cssClassNew.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(cssClassNew, [this.inputWrapper.container], cssClassOld);\n if (this.popupWrapper) {\n Input.setCssClass(cssClassNew, [this.popupWrapper], cssClassOld);\n }\n };\n TimePicker.prototype.removeErrorClass = function () {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n };\n TimePicker.prototype.checkErrorState = function (val) {\n var value = this.getDateObject(val);\n if ((this.validateState(value) && !this.invalidValueString) ||\n (this.enableMask && this.inputElement.value === this.maskedDateValue)) {\n this.removeErrorClass();\n }\n else {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n };\n TimePicker.prototype.validateInterval = function () {\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.enableElement([this.inputWrapper.buttons[0]]);\n }\n else {\n this.disableTimeIcon();\n }\n };\n TimePicker.prototype.disableTimeIcon = function () {\n this.disableElement([this.inputWrapper.buttons[0]]);\n this.hide();\n };\n TimePicker.prototype.disableElement = function (element) {\n addClass(element, DISABLED);\n };\n TimePicker.prototype.enableElement = function (element) {\n removeClass(element, DISABLED);\n };\n TimePicker.prototype.selectInputText = function () {\n this.inputElement.setSelectionRange(0, (this.inputElement).value.length);\n };\n TimePicker.prototype.setCursorToEnd = function () {\n this.inputElement.setSelectionRange((this.inputElement).value.length, (this.inputElement).value.length);\n };\n TimePicker.prototype.getMeridianText = function () {\n var meridian;\n if (this.locale === 'en' || this.locale === 'en-US') {\n meridian = getValue('dayPeriods.format.wide', getDefaultDateObject());\n }\n else {\n var gregorianFormat = '.dates.calendars.gregorian.dayPeriods.format.abbreviated';\n var mainVal = 'main.';\n meridian = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n }\n return meridian;\n };\n TimePicker.prototype.getCursorSelection = function () {\n var input = (this.inputElement);\n var start = 0;\n var end = 0;\n if (!isNaN(input.selectionStart)) {\n start = input.selectionStart;\n end = input.selectionEnd;\n }\n return { start: Math.abs(start), end: Math.abs(end) };\n };\n TimePicker.prototype.getActiveElement = function () {\n if (!isNullOrUndefined(this.popupWrapper)) {\n return this.popupWrapper.querySelectorAll('.' + SELECTED);\n }\n else {\n return null;\n }\n };\n TimePicker.prototype.isNullOrEmpty = function (value) {\n if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n return true;\n }\n else {\n return false;\n }\n };\n TimePicker.prototype.setWidth = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n width = (width.match(/px|%|em/)) ? width : formatUnit(width);\n }\n else {\n width = '100%';\n }\n return width;\n };\n TimePicker.prototype.setPopupWidth = function (width) {\n width = this.setWidth(width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n TimePicker.prototype.setScrollPosition = function () {\n var element = this.selectedElement;\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else if (this.popupWrapper && this.checkDateValue(this.scrollTo)) {\n this.setScrollTo();\n }\n };\n TimePicker.prototype.findScrollTop = function (element) {\n var listHeight = this.getPopupHeight();\n var nextEle = element.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : element.offsetTop;\n var liHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n this.popupWrapper.scrollTop = nextEle ? (height - (listHeight / HALFPOSITION + liHeight / HALFPOSITION)) : height;\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.setScrollTo = function () {\n var element;\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n var initialTime = this.timeCollections[0];\n var scrollTime = this.getDateObject(this.checkDateValue(this.scrollTo)).getTime();\n element = items[Math.round((scrollTime - initialTime) / (this.step * 60000))];\n }\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.getText = function () {\n return (isNullOrUndefined(this.checkDateValue(this.value))) ? '' : this.getValue(this.value);\n };\n TimePicker.prototype.getValue = function (value) {\n return (isNullOrUndefined(this.checkDateValue(value))) ? null : this.globalize.formatDate(value, {\n format: this.cldrTimeFormat(), type: 'time'\n });\n };\n TimePicker.prototype.cldrDateFormat = function () {\n var cldrDate;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDate = (getValue('dateFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDate = (this.getCultureDateObject(cldrData, '' + this.locale));\n }\n return cldrDate;\n };\n TimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.formatString)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.formatString;\n }\n return cldrTime;\n };\n TimePicker.prototype.dateToNumeric = function () {\n var cldrTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.medium', getDefaultDateObject()));\n }\n else {\n cldrTime = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.medium', cldrData));\n }\n return cldrTime;\n };\n TimePicker.prototype.getExactDateTime = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { format: this.dateToNumeric(), type: 'time' });\n }\n };\n TimePicker.prototype.setValue = function (value) {\n var time = this.checkValue(value);\n if (!this.strictMode && !this.validateState(time)) {\n if (this.checkDateValue(this.valueWithMinutes) === null) {\n this.initValue = this.valueWithMinutes = null;\n }\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n if (this.isNullOrEmpty(time)) {\n this.initValue = null;\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.initValue = this.compareFormatChange(time);\n }\n }\n this.updateInput(true, this.initValue);\n };\n TimePicker.prototype.compareFormatChange = function (value) {\n if (isNullOrUndefined(value)) {\n return null;\n }\n return (value !== this.getText()) ? this.getDateObject(value) : this.getDateObject(this.value);\n };\n TimePicker.prototype.updatePlaceHolder = function () {\n Input.setPlaceholder(this.l10n.getConstant('placeholder'), this.inputElement);\n };\n //event related functions\n TimePicker.prototype.updateInputValue = function (value) {\n Input.setValue(value, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n TimePicker.prototype.preventEventBubbling = function (e) {\n e.preventDefault();\n this.interopAdaptor.invokeMethodAsync('OnTimeIconClick');\n };\n TimePicker.prototype.popupHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if (Browser.isDevice) {\n this.inputElement.setAttribute('readonly', '');\n }\n e.preventDefault();\n if (this.isPopupOpen()) {\n this.closePopup(0, e);\n }\n else {\n this.inputElement.focus();\n this.show(e);\n }\n };\n TimePicker.prototype.mouseDownHandler = function () {\n if (!this.enabled) {\n return;\n }\n if (!this.readonly) {\n this.inputElement.setSelectionRange(0, 0);\n EventHandler.add(this.inputElement, 'mouseup', this.mouseUpHandler, this);\n }\n };\n TimePicker.prototype.mouseUpHandler = function (event) {\n if (!this.readonly) {\n event.preventDefault();\n if (this.enableMask) {\n event.preventDefault();\n this.notify('setMaskSelection', {\n module: 'MaskedDateTime'\n });\n return;\n }\n else {\n EventHandler.remove(this.inputElement, 'mouseup', this.mouseUpHandler);\n var curPos = this.getCursorSelection();\n if (!(curPos.start === 0 && curPos.end === this.inputElement.value.length)) {\n if (this.inputElement.value.length > 0) {\n this.cursorDetails = this.focusSelection();\n }\n this.inputElement.setSelectionRange(this.cursorDetails.start, this.cursorDetails.end);\n }\n }\n }\n };\n TimePicker.prototype.focusSelection = function () {\n var regex = new RegExp('^[a-zA-Z0-9]+$');\n var split = this.inputElement.value.split('');\n split.push(' ');\n var curPos = this.getCursorSelection();\n var start = 0;\n var end = 0;\n var isSeparator = false;\n if (!this.isTextSelected) {\n for (var i = 0; i < split.length; i++) {\n if (!regex.test(split[i])) {\n end = i;\n isSeparator = true;\n }\n if (isSeparator) {\n if (curPos.start >= start && curPos.end <= end) {\n // eslint-disable-next-line no-self-assign\n end = end;\n this.isTextSelected = true;\n break;\n }\n else {\n start = i + 1;\n isSeparator = false;\n }\n }\n }\n }\n else {\n start = curPos.start;\n end = curPos.end;\n this.isTextSelected = false;\n }\n return { start: start, end: end };\n };\n TimePicker.prototype.inputHandler = function (event) {\n if (!this.readonly && this.enabled) {\n if (!((event.action == 'right' || event.action == 'left' || event.action == 'tab') || ((event.action == 'home' || event.action == 'end' || event.action == 'up' || event.action == 'down') && !this.isPopupOpen() && !this.enableMask))) {\n event.preventDefault();\n }\n switch (event.action) {\n case 'home':\n case 'end':\n case 'up':\n case 'down':\n if (!this.isPopupOpen()) {\n this.popupCreation();\n this.popupObj.destroy();\n this.popupObj = this.popupWrapper = null;\n }\n if (this.enableMask && !this.readonly && !this.isPopupOpen()) {\n event.preventDefault();\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: event\n });\n }\n if (this.isPopupOpen()) {\n this.keyHandler(event);\n }\n break;\n case 'enter':\n if (this.isNavigate) {\n this.selectedElement = this.liCollections[this.activeIndex];\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n this.updateValue(this.valueWithMinutes, event);\n }\n else {\n this.updateValue(this.inputElement.value, event);\n }\n this.hide();\n this.isNavigate = false;\n if (this.isPopupOpen()) {\n event.stopPropagation();\n }\n break;\n case 'open':\n this.show(event);\n break;\n case 'escape':\n this.updateInputValue(this.objToString(this.value));\n if (this.enableMask) {\n if (!this.value) {\n this.updateInputValue(this.maskedDateValue);\n }\n this.createMask();\n }\n this.previousState(this.value);\n this.hide();\n break;\n case 'close':\n this.hide();\n break;\n case 'right':\n case 'left':\n case 'tab':\n case 'shiftTab':\n if (!this.isPopupOpen() && this.enableMask && !this.readonly) {\n if ((this.inputElement.selectionStart === 0 && this.inputElement.selectionEnd === this.inputElement.value.length) ||\n (this.inputElement.selectionEnd !== this.inputElement.value.length && event.action === 'tab') ||\n (this.inputElement.selectionStart !== 0 && event.action === 'shiftTab') || (event.action === 'left' || event.action === 'right')) {\n event.preventDefault();\n }\n this.notify('keyDownHandler', { module: 'MaskedDateTime',\n e: event\n });\n }\n break;\n default:\n this.isNavigate = false;\n break;\n }\n }\n };\n TimePicker.prototype.onMouseClick = function (event) {\n var target = event.target;\n var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n this.setSelection(li, event);\n if (li && li.classList.contains(LISTCLASS)) {\n this.hide();\n }\n };\n TimePicker.prototype.closePopup = function (delay, e) {\n var _this = this;\n if (this.isPopupOpen() && this.popupWrapper) {\n var args = {\n popup: this.popupObj,\n event: e || null,\n cancel: false,\n name: 'open'\n };\n removeClass([document.body], OVERFLOW);\n this.trigger('close', args, function (args) {\n if (!args.cancel) {\n var animModel = {\n name: 'FadeOut',\n duration: ANIMATIONDURATION,\n delay: delay ? delay : 0\n };\n _this.popupObj.hide(new Animation(animModel));\n removeClass([_this.inputWrapper.container], [ICONANIMATION]);\n attributes(_this.inputElement, { 'aria-expanded': 'false' });\n _this.inputElement.removeAttribute('aria-owns');\n _this.inputElement.removeAttribute('aria-activedescendant');\n EventHandler.remove(document, 'mousedown touchstart', _this.documentClickHandler);\n }\n if (Browser.isDevice && _this.modal) {\n _this.modal.style.display = 'none';\n _this.modal.outerHTML = '';\n _this.modal = null;\n }\n if (Browser.isDevice) {\n if (!isNullOrUndefined(_this.mobileTimePopupWrap)) {\n _this.mobileTimePopupWrap.remove();\n _this.mobileTimePopupWrap = null;\n }\n }\n if (Browser.isDevice && _this.allowEdit && !_this.readonly) {\n _this.inputElement.removeAttribute('readonly');\n }\n });\n }\n else {\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n };\n TimePicker.prototype.disposeServerPopup = function () {\n if (this.popupWrapper) {\n this.popupWrapper.style.visibility = 'hidden';\n this.popupWrapper.style.top = '-9999px';\n this.popupWrapper.style.left = '-9999px';\n this.popupWrapper.style.width = '0px';\n this.popupWrapper.style.height = '0px';\n }\n };\n TimePicker.prototype.checkValueChange = function (event, isNavigation) {\n if (!this.strictMode && !this.validateState(this.valueWithMinutes)) {\n if (this.checkDateValue(this.valueWithMinutes) === null) {\n this.initValue = this.valueWithMinutes = null;\n }\n this.setProperties({ value: this.compareFormatChange(this.inputElement.value) }, true);\n this.initValue = this.valueWithMinutes = this.compareFormatChange(this.inputElement.value);\n this.prevValue = this.inputElement.value;\n if (+this.prevDate !== +this.value) {\n this.changeEvent(event);\n }\n }\n else {\n if (!isNavigation) {\n if ((this.prevValue !== this.inputElement.value) || isNullOrUndefined(this.checkDateValue(this.value))) {\n this.valueProcess(event, this.compareFormatChange(this.inputElement.value));\n }\n }\n else {\n var value = this.getDateObject(new Date(this.timeCollections[this.activeIndex]));\n if (+this.prevDate !== +value) {\n this.valueProcess(event, value);\n }\n }\n }\n };\n TimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setHover(currentLi, HOVER);\n };\n TimePicker.prototype.setHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeHover(className);\n addClass([li], className);\n if (className === NAVIGATION) {\n li.setAttribute('aria-selected', 'true');\n }\n }\n };\n TimePicker.prototype.setSelection = function (li, event) {\n if (this.isValidLI(li)) {\n this.checkValue(li.getAttribute('data-value'));\n if (this.enableMask) {\n this.createMask();\n }\n this.selectedElement = li;\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n addClass([this.selectedElement], SELECTED);\n this.selectedElement.setAttribute('aria-selected', 'true');\n this.checkValueChange(event, true);\n }\n };\n TimePicker.prototype.onMouseLeave = function () {\n this.removeHover(HOVER);\n };\n TimePicker.prototype.scrollHandler = function () {\n if (this.getModuleName() === 'timepicker' && Browser.isDevice) {\n return;\n }\n else {\n this.hide();\n }\n };\n TimePicker.prototype.setMinMax = function (minVal, maxVal) {\n if (isNullOrUndefined(this.checkDateValue(minVal))) {\n this.initMin = this.getDateObject('12:00:00 AM');\n }\n if (isNullOrUndefined(this.checkDateValue(maxVal))) {\n this.initMax = this.getDateObject('11:59:59 PM');\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n TimePicker.prototype.validateMinMax = function (dateVal, minVal, maxVal) {\n var value = dateVal instanceof Date ? dateVal : this.getDateObject(dateVal);\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n dateVal = this.strictOperation(this.initMin, this.initMax, dateVal, value);\n }\n else if (+(this.createDateObj(this.getFormattedValue(this.initMin))) >\n +(this.createDateObj(this.getFormattedValue(this.initMax)))) {\n this.disableTimeIcon();\n }\n if (this.strictMode) {\n dateVal = this.valueIsDisable(dateVal) ? dateVal : null;\n }\n this.checkErrorState(dateVal);\n return dateVal;\n };\n TimePicker.prototype.valueIsDisable = function (value) {\n if (this.disableItemCollection.length > 0) {\n if (this.disableItemCollection.length === this.timeCollections.length) {\n return false;\n }\n var time = value instanceof Date ? this.objToString(value) : value;\n for (var index = 0; index < this.disableItemCollection.length; index++) {\n if (time === this.disableItemCollection[index]) {\n return false;\n }\n }\n }\n return true;\n };\n TimePicker.prototype.validateState = function (val) {\n if (!this.strictMode) {\n if (this.valueIsDisable(val)) {\n var value = typeof val === 'string' ? this.setCurrentDate(this.getDateObject(val)) :\n this.setCurrentDate(this.getDateObject(val));\n var maxValue = this.setCurrentDate(this.getDateObject(this.initMax));\n var minValue = this.setCurrentDate(this.getDateObject(this.initMin));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n if ((+(value) > +(maxValue)) || (+(value) < +(minValue))) {\n return false;\n }\n }\n else {\n if ((+(maxValue) < +(minValue)) || this.inputElement.value !== '') {\n return false;\n }\n }\n }\n else {\n return false;\n }\n }\n return true;\n };\n TimePicker.prototype.strictOperation = function (minimum, maximum, dateVal, val) {\n var maxValue = this.createDateObj(this.getFormattedValue(maximum));\n var minValue = this.createDateObj(this.getFormattedValue(minimum));\n var value = this.createDateObj(this.getFormattedValue(val));\n if (this.strictMode) {\n if (+minValue > +maxValue) {\n this.disableTimeIcon();\n this.initValue = this.getDateObject(maxValue);\n this.updateInputValue(this.getValue(this.initValue));\n if (this.enableMask) {\n this.createMask();\n }\n return this.inputElement.value;\n }\n else if (+minValue >= +value) {\n return this.getDateObject(minValue);\n }\n else if (+value >= +maxValue || +minValue === +maxValue) {\n return this.getDateObject(maxValue);\n }\n }\n else {\n if (+minValue > +maxValue) {\n this.disableTimeIcon();\n if (!isNaN(+this.createDateObj(dateVal))) {\n return dateVal;\n }\n }\n }\n return dateVal;\n };\n TimePicker.prototype.bindEvents = function () {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.popupHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n EventHandler.add(this.inputElement, 'input', this.inputEventHandler, this);\n if (this.enableMask) {\n EventHandler.add(this.inputElement, 'keydown', this.keydownHandler, this);\n }\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.clearHandler, this);\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n if (!Browser.isDevice) {\n this.keyConfigure = extend(this.keyConfigure, this.keyConfigs);\n this.inputEvent = new KeyboardEvents(this.inputWrapper.container, {\n keyAction: this.inputHandler.bind(this),\n keyConfigs: this.keyConfigure,\n eventName: 'keydown'\n });\n if (this.showClearButton && this.inputElement) {\n EventHandler.add(this.inputElement, 'mousedown', this.mouseDownHandler, this);\n }\n }\n };\n TimePicker.prototype.keydownHandler = function (e) {\n switch (e.code) {\n case 'Delete':\n if (this.enableMask && !this.popupObj && !this.readonly) {\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: e\n });\n }\n break;\n default:\n break;\n }\n };\n TimePicker.prototype.formResetHandler = function () {\n if (!this.enabled) {\n return;\n }\n if (!this.inputElement.disabled) {\n var timeValue = this.inputElement.getAttribute('value');\n var val = this.checkDateValue(this.inputEleValue);\n if (this.element.tagName === 'EJS-TIMEPICKER') {\n val = null;\n timeValue = '';\n this.inputElement.setAttribute('value', '');\n }\n this.setProperties({ value: val }, true);\n this.prevDate = this.value;\n this.valueWithMinutes = this.value;\n this.initValue = this.value;\n if (this.inputElement) {\n this.updateInputValue(timeValue);\n if (this.enableMask) {\n if (!timeValue) {\n this.updateInputValue(this.maskedDateValue);\n }\n this.createMask();\n }\n this.checkErrorState(timeValue);\n this.prevValue = this.inputElement.value;\n }\n }\n };\n TimePicker.prototype.inputChangeHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.stopPropagation();\n };\n TimePicker.prototype.inputEventHandler = function () {\n if (this.enableMask) {\n this.notify('inputHandler', {\n module: 'MaskedDateTime'\n });\n }\n };\n TimePicker.prototype.unBindEvents = function () {\n if (this.inputWrapper) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.popupHandler);\n }\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n EventHandler.remove(this.inputElement, 'input', this.inputEventHandler);\n if (this.inputEvent) {\n this.inputEvent.destroy();\n }\n EventHandler.remove(this.inputElement, 'mousedown touchstart', this.mouseDownHandler);\n if (this.showClearButton && !isNullOrUndefined(this.inputWrapper) && !isNullOrUndefined(this.inputWrapper.clearButton)) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.clearHandler);\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n };\n TimePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.clearHandler, this);\n }\n };\n TimePicker.prototype.raiseClearedEvent = function (e) {\n var clearedArgs = {\n event: e\n };\n this.trigger('cleared', clearedArgs);\n };\n TimePicker.prototype.clearHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.preventDefault();\n if (!isNullOrUndefined(this.value)) {\n this.clear(e);\n }\n else {\n this.resetState();\n this.raiseClearedEvent(e);\n }\n if (this.popupWrapper) {\n this.popupWrapper.scrollTop = 0;\n }\n if (this.enableMask) {\n this.notify('clearHandler', {\n module: 'MaskedDateTime'\n });\n }\n if (closest(this.element, 'form')) {\n var element = this.element;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n TimePicker.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.initValue = null;\n this.resetState();\n this.raiseClearedEvent(event);\n this.changeEvent(event);\n };\n TimePicker.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.zIndex = this.zIndex;\n this.popupObj.dataBind();\n }\n };\n TimePicker.prototype.checkAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['step', 'disabled', 'readonly', 'style', 'name', 'value', 'min', 'max', 'placeholder'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'style':\n this.inputStyle = this.inputElement.getAttribute(prop);\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !isDynamic);\n }\n break;\n case 'min':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['min'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.setProperties({ min: value }, !isDynamic);\n }\n }\n break;\n case 'max':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['max'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.setProperties({ max: value }, !isDynamic);\n }\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['value'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.initValue = value;\n this.updateInput(false, this.initValue);\n this.setProperties({ value: value }, !isDynamic);\n }\n }\n break;\n }\n }\n }\n };\n TimePicker.prototype.setCurrentDate = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n return new Date(YEAR, MONTH, DAY, value.getHours(), value.getMinutes(), value.getSeconds());\n };\n TimePicker.prototype.getTextFormat = function () {\n var time = 0;\n if (this.cldrTimeFormat().split(' ')[0] === 'a' || this.cldrTimeFormat().indexOf('a') === 0) {\n time = 1;\n }\n else if (this.cldrTimeFormat().indexOf('a') < 0) {\n var strArray = this.cldrTimeFormat().split(' ');\n for (var i = 0; i < strArray.length; i++) {\n if (strArray[i].toLowerCase().indexOf('h') >= 0) {\n time = i;\n break;\n }\n }\n }\n return time;\n };\n TimePicker.prototype.updateValue = function (value, event) {\n var val;\n if (this.isNullOrEmpty(value)) {\n this.resetState();\n }\n else {\n val = this.checkValue(value);\n if (this.strictMode) {\n // this case set previous value to the text box when set invalid date\n var inputVal = (val === null && value.trim().length > 0) ?\n this.previousState(this.prevDate) : this.inputElement.value;\n this.updateInputValue(inputVal);\n if (this.enableMask) {\n if (!inputVal) {\n this.updateInputValue(this.maskedDateValue);\n }\n if (isNullOrUndefined(val) && value !== this.maskedDateValue) {\n this.createMask();\n }\n if (isNullOrUndefined(val) && value === this.maskedDateValue) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n }\n }\n this.checkValueChange(event, typeof value === 'string' ? false : true);\n };\n TimePicker.prototype.previousState = function (date) {\n var value = this.getDateObject(date);\n for (var i = 0; i < this.timeCollections.length; i++) {\n if (+value === this.timeCollections[i]) {\n this.activeIndex = i;\n this.selectedElement = this.liCollections[i];\n this.valueWithMinutes = new Date(this.timeCollections[i]);\n break;\n }\n }\n return this.prevValue;\n };\n TimePicker.prototype.resetState = function () {\n this.removeSelection();\n Input.setValue('', this.inputElement, this.floatLabelType, false);\n this.valueWithMinutes = this.activeIndex = null;\n if (!this.strictMode) {\n this.checkErrorState(null);\n }\n };\n TimePicker.prototype.objToString = function (val) {\n if (isNullOrUndefined(this.checkDateValue(val))) {\n return null;\n }\n else {\n return this.globalize.formatDate(val, { format: this.cldrTimeFormat(), type: 'time' });\n }\n };\n TimePicker.prototype.checkValue = function (value) {\n if (!this.isNullOrEmpty(value)) {\n var date = value instanceof Date ? value : this.getDateObject(value);\n return this.validateValue(date, value);\n }\n this.resetState();\n return this.valueWithMinutes = null;\n };\n TimePicker.prototype.validateValue = function (date, value) {\n var time;\n var val = this.validateMinMax(value, this.min, this.max);\n var newval = this.createDateObj(val);\n if (this.getFormattedValue(newval) !== this.getFormattedValue(this.value)) {\n this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n time = this.objToString(this.valueWithMinutes);\n }\n else {\n if (this.strictMode) {\n //for strict mode case, when value not present within a range. Reset the nearest range value.\n date = newval;\n }\n this.valueWithMinutes = this.checkDateValue(date);\n time = this.objToString(this.valueWithMinutes);\n }\n if (!this.strictMode && isNullOrUndefined(time)) {\n var value_1 = val.trim().length > 0 ? val : '';\n this.updateInputValue(value_1);\n if (this.enableMask) {\n if (!value_1) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n }\n else {\n this.updateInputValue(time);\n if (this.enableMask) {\n if (time === '') {\n this.updateInputValue(this.maskedDateValue);\n }\n if (isNullOrUndefined(time) && value !== this.maskedDateValue) {\n this.createMask();\n }\n if (isNullOrUndefined(time) && value === this.maskedDateValue) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n }\n return time;\n };\n TimePicker.prototype.createMask = function () {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n };\n TimePicker.prototype.findNextElement = function (event) {\n var textVal = (this.inputElement).value;\n var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n this.getDateObject(this.valueWithMinutes);\n var timeVal = null;\n var count = this.liCollections.length;\n var collections = this.timeCollections;\n if (!isNullOrUndefined(this.checkDateValue(value)) || !isNullOrUndefined(this.activeIndex)) {\n if (event.action === 'home') {\n var index = this.validLiElement(0);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n }\n else if (event.action === 'end') {\n var index = this.validLiElement(collections.length - 1, true);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n }\n else {\n if (event.action === 'down') {\n for (var i = 0; i < count; i++) {\n if (+value < this.timeCollections[i]) {\n var index = this.validLiElement(i);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n else if (i === count - 1) {\n var index = this.validLiElement(0);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n }\n }\n else {\n for (var i = count - 1; i >= 0; i--) {\n if (+value > this.timeCollections[i]) {\n var index = this.validLiElement(i, true);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n else if (i === 0) {\n var index = this.validLiElement(count - 1);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n }\n }\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.elementValue(isNullOrUndefined(timeVal) ? null : new Date(timeVal));\n }\n else {\n this.selectNextItem(event);\n }\n };\n TimePicker.prototype.selectNextItem = function (event) {\n var index = this.validLiElement(0, event.action === 'down' ? false : true);\n this.activeIndex = index;\n this.selectedElement = this.liCollections[index];\n this.elementValue(new Date(this.timeCollections[index]));\n };\n TimePicker.prototype.elementValue = function (value) {\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.checkValue(value);\n }\n };\n TimePicker.prototype.validLiElement = function (index, backward) {\n var elementIndex = null;\n var items = isNullOrUndefined(this.popupWrapper) ? this.liCollections :\n this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n var isCheck = true;\n if (items.length) {\n if (backward) {\n for (var i = index; i >= 0; i--) {\n if (!items[i].classList.contains(DISABLED)) {\n elementIndex = i;\n break;\n }\n else if (i === 0) {\n if (isCheck) {\n index = i = items.length;\n isCheck = false;\n }\n }\n }\n }\n else {\n for (var i = index; i <= items.length - 1; i++) {\n if (!items[i].classList.contains(DISABLED)) {\n elementIndex = i;\n break;\n }\n else if (i === items.length - 1) {\n if (isCheck) {\n index = i = -1;\n isCheck = false;\n }\n }\n }\n }\n }\n return elementIndex;\n };\n TimePicker.prototype.keyHandler = function (event) {\n if (isNullOrUndefined(this.step) || this.step <= 0 || !isNullOrUndefined(this.inputWrapper)\n && this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n return;\n }\n var count = this.timeCollections.length;\n if (isNullOrUndefined(this.getActiveElement()) || this.getActiveElement().length === 0) {\n if (this.liCollections.length > 0) {\n if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n var index = this.validLiElement(0, event.action === 'down' ? false : true);\n this.activeIndex = index;\n this.selectedElement = this.liCollections[index];\n this.elementValue(new Date(this.timeCollections[index]));\n }\n else {\n this.findNextElement(event);\n }\n }\n else {\n this.findNextElement(event);\n }\n }\n else {\n var nextItem = void 0;\n if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n this.activeIndex = index = this.activeIndex === (count) ? 0 : this.activeIndex;\n this.activeIndex = index = this.activeIndex < 0 ? (count - 1) : this.activeIndex;\n this.activeIndex = index = this.validLiElement(this.activeIndex, (event.keyCode === 40 || event.keyCode === 39) ?\n false : true);\n nextItem = isNullOrUndefined(this.timeCollections[index]) ?\n this.timeCollections[0] : this.timeCollections[index];\n }\n else if (event.action === 'home') {\n var index = this.validLiElement(0);\n this.activeIndex = index;\n nextItem = this.timeCollections[index];\n }\n else if (event.action === 'end') {\n var index = this.validLiElement(count - 1, true);\n this.activeIndex = index;\n nextItem = this.timeCollections[index];\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.elementValue(new Date(nextItem));\n }\n this.isNavigate = true;\n this.setHover(this.selectedElement, NAVIGATION);\n this.setActiveDescendant();\n if (this.enableMask) {\n this.selectInputText();\n }\n if (this.isPopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n this.setScrollPosition();\n }\n };\n TimePicker.prototype.getCultureTimeObject = function (ld, c) {\n return getValue('main.' + c + '.dates.calendars.gregorian.timeFormats.short', ld);\n };\n TimePicker.prototype.getCultureDateObject = function (ld, c) {\n return getValue('main.' + c + '.dates.calendars.gregorian.dateFormats.short', ld);\n };\n TimePicker.prototype.wireListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n TimePicker.prototype.unWireListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n if (!Browser.isDevice) {\n EventHandler.remove(this.listWrapper, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.listWrapper, 'mouseout', this.onMouseLeave);\n }\n }\n };\n TimePicker.prototype.valueProcess = function (event, value) {\n var result = (isNullOrUndefined(this.checkDateValue(value))) ? null : value;\n if (+this.prevDate !== +result) {\n this.initValue = result;\n this.changeEvent(event);\n }\n };\n TimePicker.prototype.changeEvent = function (e) {\n this.addSelection();\n this.updateInput(true, this.initValue);\n var eventArgs = {\n event: (e || null),\n value: this.value,\n text: (this.inputElement).value,\n isInteracted: !isNullOrUndefined(e),\n element: this.element\n };\n eventArgs.value = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n this.prevDate = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', eventArgs);\n }\n this.invalidValueString = null;\n this.checkErrorState(this.value);\n };\n TimePicker.prototype.updateInput = function (isUpdate, date) {\n if (isUpdate) {\n this.prevValue = this.getValue(date);\n }\n this.prevDate = this.valueWithMinutes = date;\n if ((typeof date !== 'number') || (this.value && +new Date(+this.value).setMilliseconds(0)) !== +date) {\n this.setProperties({ value: date }, true);\n if (this.enableMask && this.value) {\n this.createMask();\n }\n }\n if (!this.strictMode && isNullOrUndefined(this.value) && this.invalidValueString) {\n this.checkErrorState(this.invalidValueString);\n this.updateInputValue(this.invalidValueString);\n }\n this.clearIconState();\n };\n TimePicker.prototype.setActiveDescendant = function () {\n if (!isNullOrUndefined(this.selectedElement) && this.value) {\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n }\n else {\n this.inputElement.removeAttribute('aria-activedescendant');\n }\n };\n TimePicker.prototype.removeSelection = function () {\n this.removeHover(HOVER);\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + SELECTED);\n if (items.length) {\n removeClass(items, SELECTED);\n items[0].removeAttribute('aria-selected');\n }\n }\n };\n TimePicker.prototype.removeHover = function (className) {\n var hoveredItem = this.getHoverItem(className);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, className);\n if (className === NAVIGATION) {\n hoveredItem[0].removeAttribute('aria-selected');\n }\n }\n };\n TimePicker.prototype.getHoverItem = function (className) {\n var hoveredItem;\n if (!isNullOrUndefined(this.popupWrapper)) {\n hoveredItem = this.popupWrapper.querySelectorAll('.' + className);\n }\n return hoveredItem;\n };\n TimePicker.prototype.setActiveClass = function () {\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n for (var i = 0; i < items.length; i++) {\n if ((this.timeCollections[i] === +this.getDateObject(this.valueWithMinutes))) {\n items[i].setAttribute('aria-selected', 'true');\n this.selectedElement = items[i];\n this.activeIndex = i;\n break;\n }\n }\n }\n }\n };\n TimePicker.prototype.addSelection = function () {\n this.selectedElement = null;\n this.removeSelection();\n this.setActiveClass();\n if (!isNullOrUndefined(this.selectedElement)) {\n addClass([this.selectedElement], SELECTED);\n this.selectedElement.setAttribute('aria-selected', 'true');\n }\n };\n TimePicker.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n };\n TimePicker.prototype.createDateObj = function (val) {\n var formatStr = null;\n var today = this.globalize.formatDate(new Date(), { format: formatStr, skeleton: 'short', type: 'date' });\n var value = null;\n if (typeof val === 'string') {\n if (val.toUpperCase().indexOf('AM') > -1 || val.toUpperCase().indexOf('PM') > -1) {\n today = this.defaultCulture.formatDate(new Date(), { format: formatStr, skeleton: 'short', type: 'date' });\n value = isNaN(+new Date(today + ' ' + val)) ? null : new Date(new Date(today + ' ' + val).setMilliseconds(0));\n if (isNullOrUndefined(value)) {\n value = this.timeParse(today, val);\n }\n }\n else {\n value = this.timeParse(today, val);\n }\n }\n else if (val instanceof Date) {\n value = val;\n }\n return value;\n };\n TimePicker.prototype.timeParse = function (today, val) {\n var value;\n value = this.globalize.parseDate(today + ' ' + val, {\n format: this.cldrDateFormat() + ' ' + this.cldrTimeFormat(), type: 'datetime'\n });\n value = isNullOrUndefined(value) ? this.globalize.parseDate(today + ' ' + val, {\n format: this.cldrDateFormat() + ' ' + this.dateToNumeric(), type: 'datetime'\n }) : value;\n value = isNullOrUndefined(value) ? value : new Date(value.setMilliseconds(0));\n return value;\n };\n TimePicker.prototype.createListItems = function () {\n var _this = this;\n this.listWrapper = this.createElement('div', { className: CONTENT, attrs: { 'tabindex': '-1' } });\n var start;\n var interval = this.step * 60000;\n var listItems = [];\n this.timeCollections = [];\n this.disableItemCollection = [];\n start = +(this.getDateObject(this.initMin).setMilliseconds(0));\n var end = +(this.getDateObject(this.initMax).setMilliseconds(0));\n while (end >= start) {\n this.timeCollections.push(start);\n listItems.push(this.globalize.formatDate(new Date(start), { format: this.cldrTimeFormat(), type: 'time' }));\n start += interval;\n }\n var listBaseOptions = {\n itemCreated: function (args) {\n var eventArgs = {\n element: args.item,\n text: args.text, value: _this.getDateObject(args.text), isDisabled: false\n };\n _this.trigger('itemRender', eventArgs, function (eventArgs) {\n if (eventArgs.isDisabled) {\n eventArgs.element.classList.add(DISABLED);\n }\n if (eventArgs.element.classList.contains(DISABLED)) {\n _this.disableItemCollection.push(eventArgs.element.getAttribute('data-value'));\n }\n });\n }\n };\n this.listTag = ListBase.createList(this.createElement, listItems, listBaseOptions, true);\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options', 'tabindex': '0' });\n append([this.listTag], this.listWrapper);\n };\n TimePicker.prototype.documentClickHandler = function (event) {\n var target = event.target;\n if ((!isNullOrUndefined(this.popupObj) && !isNullOrUndefined(this.inputWrapper) && (this.inputWrapper.container.contains(target) && event.type !== 'mousedown' ||\n (this.popupObj.element && this.popupObj.element.contains(target)))) && event.type !== 'touchstart') {\n event.preventDefault();\n }\n if (!(closest(target, '[id=\"' + this.popupObj.element.id + '\"]')) && target !== this.inputElement\n && target !== (this.inputWrapper && this.inputWrapper.buttons[0]) &&\n target !== (this.inputWrapper && this.inputWrapper.clearButton) &&\n target !== (this.inputWrapper && this.inputWrapper.container)) {\n if (this.isPopupOpen()) {\n this.hide();\n this.focusOut();\n }\n }\n else if (target !== this.inputElement) {\n if (!Browser.isDevice) {\n this.isPreventBlur = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.inputElement)\n && (target === this.popupWrapper);\n }\n }\n };\n TimePicker.prototype.setEnableRtl = function () {\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n if (this.popupObj) {\n this.popupObj.enableRtl = this.enableRtl;\n this.popupObj.dataBind();\n }\n };\n TimePicker.prototype.setEnable = function () {\n Input.setEnabled(this.enabled, this.inputElement, this.floatLabelType);\n if (this.enabled) {\n removeClass([this.inputWrapper.container], DISABLED);\n attributes(this.inputElement, { 'aria-disabled': 'false' });\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.hide();\n addClass([this.inputWrapper.container], DISABLED);\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n this.inputElement.tabIndex = -1;\n }\n };\n TimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.initMin = this.checkDateValue(new Date(this.checkInValue(date.min)));\n this.setProperties({ min: this.initMin }, true);\n }\n else {\n this.initMax = this.checkDateValue(new Date(this.checkInValue(date.max)));\n this.setProperties({ max: this.initMax }, true);\n }\n if (this.inputElement.value === '') {\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.checkValue(this.inputElement.value);\n }\n this.checkValueChange(null, false);\n };\n TimePicker.prototype.inputBlurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n // IE popup closing issue when click over the scrollbar\n if (this.isPreventBlur && this.isPopupOpen()) {\n this.inputElement.focus();\n return;\n }\n this.closePopup(0, e);\n if (this.enableMask && this.maskedDateValue && this.placeholder && this.floatLabelType !== 'Always') {\n if (this.inputElement.value === this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue('');\n }\n }\n removeClass([this.inputWrapper.container], [FOCUS]);\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n if (this.getText() !== this.inputElement.value) {\n this.updateValue((this.inputElement).value, e);\n }\n else if (this.inputElement.value.trim().length === 0) {\n this.resetState();\n }\n this.cursorDetails = null;\n this.isNavigate = false;\n if (this.inputElement.value === '') {\n this.invalidValueString = null;\n }\n };\n /**\n * Focuses out the TimePicker textbox element.\n *\n * @returns {void}\n */\n TimePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], [FOCUS]);\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n };\n TimePicker.prototype.isPopupOpen = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + ROOT)) {\n return true;\n }\n return false;\n };\n TimePicker.prototype.inputFocusHandler = function () {\n if (!this.enabled) {\n return;\n }\n var focusArguments = {\n model: this\n };\n if (!this.readonly && !Browser.isDevice && !this.enableMask) {\n this.selectInputText();\n }\n if (this.enableMask && !this.inputElement.value && this.placeholder) {\n if (this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue(this.maskedDateValue);\n this.inputElement.selectionStart = 0;\n this.inputElement.selectionEnd = this.inputElement.value.length;\n }\n }\n this.trigger('focus', focusArguments);\n this.clearIconState();\n if (this.openOnFocus) {\n this.show();\n }\n };\n /**\n * Focused the TimePicker textbox element.\n *\n * @returns {void}\n */\n TimePicker.prototype.focusIn = function () {\n if (document.activeElement !== this.inputElement && this.enabled) {\n this.inputElement.focus();\n }\n };\n /**\n * Hides the TimePicker popup.\n *\n * @returns {void}\n\n */\n TimePicker.prototype.hide = function () {\n this.closePopup(100, null);\n this.clearIconState();\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Opens the popup to show the list items.\n *\n * @returns {void}\n\n */\n TimePicker.prototype.show = function (event) {\n var _this = this;\n if ((this.enabled && this.readonly) || !this.enabled || this.popupWrapper) {\n return;\n }\n else {\n this.popupCreation();\n if (Browser.isDevice && this.listWrapper) {\n this.modal = this.createElement('div');\n this.modal.className = '' + ROOT + ' e-time-modal';\n document.body.className += ' ' + OVERFLOW;\n document.body.appendChild(this.modal);\n }\n if (Browser.isDevice) {\n this.mobileTimePopupWrap = this.createElement('div', { className: 'e-timepicker-mob-popup-wrap' });\n document.body.appendChild(this.mobileTimePopupWrap);\n }\n this.openPopupEventArgs = {\n popup: this.popupObj || null,\n cancel: false,\n event: event || null,\n name: 'open',\n appendTo: Browser.isDevice ? this.mobileTimePopupWrap : document.body\n };\n var eventArgs = this.openPopupEventArgs;\n this.trigger('open', eventArgs, function (eventArgs) {\n _this.openPopupEventArgs = eventArgs;\n if (!_this.openPopupEventArgs.cancel && !_this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n _this.openPopupEventArgs.appendTo.appendChild(_this.popupWrapper);\n _this.popupAlignment(_this.openPopupEventArgs);\n _this.setScrollPosition();\n if (!Browser.isDevice) {\n _this.inputElement.focus();\n }\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION\n };\n _this.popupObj.refreshPosition(_this.anchor);\n if (_this.zIndex === 1000) {\n _this.popupObj.show(new Animation(openAnimation), _this.element);\n }\n else {\n _this.popupObj.show(new Animation(openAnimation), null);\n }\n _this.setActiveDescendant();\n attributes(_this.inputElement, { 'aria-expanded': 'true' });\n attributes(_this.inputElement, { 'aria-owns': _this.inputElement.id + '_options' });\n addClass([_this.inputWrapper.container], FOCUS);\n EventHandler.add(document, 'mousedown touchstart', _this.documentClickHandler, _this);\n _this.setOverlayIndex(_this.mobileTimePopupWrap, _this.popupObj.element, _this.modal, Browser.isDevice);\n }\n else {\n _this.popupObj.destroy();\n _this.popupWrapper = _this.listTag = undefined;\n _this.liCollections = _this.timeCollections = _this.disableItemCollection = [];\n _this.popupObj = null;\n }\n });\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n TimePicker.prototype.setOverlayIndex = function (popupWrapper, timePopupElement, modal, isDevice) {\n if (isDevice && !isNullOrUndefined(timePopupElement) && !isNullOrUndefined(modal) && !isNullOrUndefined(popupWrapper)) {\n var index = parseInt(timePopupElement.style.zIndex, 10) ? parseInt(timePopupElement.style.zIndex, 10) : 1000;\n modal.style.zIndex = (index - 1).toString();\n popupWrapper.style.zIndex = index.toString();\n }\n };\n TimePicker.prototype.formatValues = function (type) {\n var value;\n if (typeof type === 'number') {\n value = formatUnit(type);\n }\n else if (typeof type === 'string') {\n value = (type.match(/px|%|em/)) ? type : isNaN(parseInt(type, 10)) ? type : formatUnit(type);\n }\n return value;\n };\n TimePicker.prototype.popupAlignment = function (args) {\n args.popup.position.X = this.formatValues(args.popup.position.X);\n args.popup.position.Y = this.formatValues(args.popup.position.Y);\n if (!isNaN(parseFloat(args.popup.position.X)) || !isNaN(parseFloat(args.popup.position.Y))) {\n this.popupObj.relateTo = this.anchor = document.body;\n this.popupObj.targetType = 'container';\n }\n if (!isNaN(parseFloat(args.popup.position.X))) {\n this.popupObj.offsetX = parseFloat(args.popup.position.X);\n }\n if (!isNaN(parseFloat(args.popup.position.Y))) {\n this.popupObj.offsetY = parseFloat(args.popup.position.Y);\n }\n if (!Browser.isDevice) {\n switch (args.popup.position.X) {\n case 'left':\n break;\n case 'right':\n args.popup.offsetX = this.containerStyle.width;\n break;\n case 'center':\n args.popup.offsetX = -(this.containerStyle.width / 2);\n break;\n }\n switch (args.popup.position.Y) {\n case 'top':\n break;\n case 'bottom':\n break;\n case 'center':\n args.popup.offsetY = -(this.containerStyle.height / 2);\n break;\n }\n if (args.popup.position.X === 'center' && args.popup.position.Y === 'center') {\n this.popupObj.relateTo = this.inputWrapper.container;\n this.anchor = this.inputElement;\n this.popupObj.targetType = 'relative';\n }\n }\n else {\n if (args.popup.position.X === 'center' && args.popup.position.Y === 'center') {\n this.popupObj.relateTo = this.anchor = document.body;\n this.popupObj.offsetY = 0;\n this.popupObj.targetType = 'container';\n this.popupObj.collision = { X: 'fit', Y: 'fit' };\n }\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string}\n */\n TimePicker.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * To get component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n TimePicker.prototype.getModuleName = function () {\n return 'timepicker';\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {TimePickerModel} newProp - Returns the dynamic property value of the component.\n * @param {TimePickerModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n TimePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement, this.floatLabelType);\n if (this.readonly) {\n this.hide();\n }\n this.setTimeAllowEdit();\n break;\n case 'enabled':\n this.setProperties({ enabled: newProp.enabled }, true);\n this.setEnable();\n break;\n case 'allowEdit':\n this.setTimeAllowEdit();\n break;\n case 'enableRtl':\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n this.setEnableRtl();\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n this.setZIndex();\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToElement();\n this.updateHtmlAttributeToWrapper();\n this.checkAttributes(true);\n break;\n case 'min':\n case 'max':\n this.getProperty(newProp, prop);\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'locale':\n this.setProperties({ locale: newProp.locale }, true);\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.updatePlaceHolder();\n this.setValue(this.value);\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'width':\n setStyleAttribute(this.inputWrapper.container, { 'width': this.setWidth(newProp.width) });\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.checkTimeFormat();\n this.setValue(this.value);\n if (this.enableMask) {\n this.createMask();\n if (!this.value) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n break;\n case 'value':\n this.invalidValueString = null;\n this.checkInvalidValue(newProp.value);\n newProp.value = this.value;\n if (!this.invalidValueString) {\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date(newProp.value)) }, true);\n newProp.value = this.value;\n }\n else {\n if ((newProp.value && +new Date(+newProp.value).setMilliseconds(0)) !== +this.value) {\n newProp.value = this.checkDateValue(new Date('' + newProp.value));\n }\n }\n this.initValue = newProp.value;\n newProp.value = this.compareFormatChange(this.checkValue(newProp.value));\n }\n else {\n this.updateInputValue(this.invalidValueString);\n this.checkErrorState(this.invalidValueString);\n }\n if (this.enableMask && isNullOrUndefined(newProp.value)) {\n this.updateInputValue(this.maskedDateValue);\n this.checkErrorState(this.maskedDateValue);\n }\n this.checkValueChange(null, false);\n if (this.isPopupOpen()) {\n this.setScrollPosition();\n }\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'strictMode':\n this.invalidValueString = null;\n if (newProp.strictMode) {\n this.checkErrorState(null);\n }\n this.setProperties({ strictMode: newProp.strictMode }, true);\n this.checkValue((this.inputElement).value);\n this.checkValueChange(null, false);\n break;\n case 'scrollTo':\n if (this.checkDateValue(new Date(this.checkInValue(newProp.scrollTo)))) {\n if (this.popupWrapper) {\n this.setScrollTo();\n }\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkInValue(newProp.scrollTo))) }, true);\n }\n else {\n this.setProperties({ scrollTo: null }, true);\n }\n break;\n case 'enableMask':\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n this.updateInputValue(this.maskedDateValue);\n }\n else {\n if (this.inputElement.value === this.maskedDateValue) {\n this.updateInputValue('');\n }\n }\n break;\n }\n }\n };\n TimePicker.prototype.checkInValue = function (inValue) {\n if (inValue instanceof Date) {\n return (inValue.toUTCString());\n }\n else {\n return ('' + inValue);\n }\n };\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"fullScreenMode\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property({})\n ], TimePicker.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('Never')\n ], TimePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(1000)\n ], TimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(30)\n ], TimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"scrollTo\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"min\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"max\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"openOnFocus\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enableMask\", void 0);\n __decorate([\n Property({ day: 'day', month: 'month', year: 'year', hour: 'hour', minute: 'minute', second: 'second', dayOfTheWeek: 'day of the week' })\n ], TimePicker.prototype, \"maskPlaceholder\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"itemRender\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"cleared\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"focus\", void 0);\n TimePicker = __decorate([\n NotifyPropertyChanges\n ], TimePicker);\n return TimePicker;\n}(Component));\nexport { TimePicker };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n///\nimport { EventHandler, Internationalization, Property, NotifyPropertyChanges, Browser } from '@syncfusion/ej2-base';\nimport { Animation, Event, cldrData, getDefaultDateObject, detach } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, L10n, removeClass, closest, append, attributes } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, isNullOrUndefined, formatUnit, getValue, rippleEffect } from '@syncfusion/ej2-base';\nimport { extend } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '../datepicker/datepicker';\nimport { TimePickerBase } from '../timepicker/timepicker';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar DATEPICKERROOT = 'e-datepicker';\nvar DATETIMEWRAPPER = 'e-datetime-wrapper';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar HOUR = new Date().getHours();\nvar MINUTE = new Date().getMinutes();\nvar SECOND = new Date().getSeconds();\nvar MILLISECOND = new Date().getMilliseconds();\nvar ROOT = 'e-datetimepicker';\nvar DATETIMEPOPUPWRAPPER = 'e-datetimepopup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar TIMEICON = 'e-time-icon';\nvar INPUTFOCUS = 'e-input-focus';\nvar POPUPDIMENSION = '250px';\nvar ICONANIMATION = 'e-icon-anim';\nvar DISABLED = 'e-disabled';\nvar ERROR = 'e-error';\nvar CONTENT = 'e-content';\nvar NAVIGATION = 'e-navigation';\nvar ACTIVE = 'e-active';\nvar HOVER = 'e-hover';\nvar ICONS = 'e-icons';\nvar HALFPOSITION = 2;\nvar LISTCLASS = 'e-list-item';\nvar ANIMATIONDURATION = 100;\nvar OVERFLOW = 'e-time-overflow';\n/**\n * Represents the DateTimePicker component that allows user to select\n * or enter a date time value.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DateTimePicker = /** @class */ (function (_super) {\n __extends(DateTimePicker, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {DateTimePickerModel} options - Specifies the DateTimePicker model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function DateTimePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.valueWithMinutes = null;\n _this.scrollInvoked = false;\n _this.moduleName = _this.getModuleName();\n _this.dateTimeOptions = options;\n return _this;\n }\n DateTimePicker.prototype.focusHandler = function () {\n if (!this.enabled) {\n return;\n }\n addClass([this.inputWrapper.container], INPUTFOCUS);\n };\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n DateTimePicker.prototype.focusIn = function () {\n _super.prototype.focusIn.call(this);\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n DateTimePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n };\n DateTimePicker.prototype.blurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n // IE popup closing issue when click over the scrollbar\n if (this.isTimePopupOpen() && this.isPreventBlur) {\n this.inputElement.focus();\n return;\n }\n removeClass([this.inputWrapper.container], INPUTFOCUS);\n var blurArguments = {\n model: this\n };\n if (this.isTimePopupOpen()) {\n this.hide(e);\n }\n this.trigger('blur', blurArguments);\n };\n /**\n * To destroy the widget.\n *\n * @returns {void}\n */\n DateTimePicker.prototype.destroy = function () {\n if (this.popupObject && this.popupObject.element.classList.contains(POPUP)) {\n this.popupObject.destroy();\n detach(this.dateTimeWrapper);\n this.dateTimeWrapper = undefined;\n this.liCollections = this.timeCollections = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n }\n var ariaAttribute = {\n 'aria-live': 'assertive', 'aria-atomic': 'true', 'aria-invalid': 'false',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttribute, this.inputElement);\n }\n if (this.isCalendar()) {\n if (this.popupWrapper) {\n detach(this.popupWrapper);\n }\n this.popupObject = this.popupWrapper = null;\n this.keyboardHandler.destroy();\n }\n this.unBindInputEvents();\n this.liCollections = null;\n this.rippleFn = null;\n this.selectedElement = null;\n this.listTag = null;\n this.timeIcon = null;\n this.popupObject = null;\n this.preventArgs = null;\n this.keyboardModule = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n DateTimePicker.prototype.render = function () {\n this.timekeyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.valueWithMinutes = null;\n this.previousDateTime = null;\n this.isPreventBlur = false;\n this.cloneElement = this.element.cloneNode(true);\n this.dateTimeFormat = this.cldrDateTimeFormat();\n this.initValue = this.value;\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n _super.prototype.updateHtmlAttributeToElement.call(this);\n this.checkAttributes(false);\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('datetimepicker', localeText, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n _super.prototype.render.call(this);\n this.createInputElement();\n _super.prototype.updateHtmlAttributeToWrapper.call(this);\n this.bindInputEvents();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n this.setValue(true);\n if (this.enableMask && !this.value && this.maskedDateValue && (this.floatLabelType === 'Always' || !this.floatLabelType || !this.placeholder)) {\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkValue(this.scrollTo))) }, true);\n this.previousDateTime = this.value && new Date(+this.value);\n if (this.element.tagName === 'EJS-DATETIMEPICKER') {\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n if (!this.enabled) {\n this.inputElement.tabIndex = -1;\n }\n }\n if (this.floatLabelType === 'Auto') {\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');\n }\n this.renderComplete();\n };\n DateTimePicker.prototype.setValue = function (isDynamic) {\n if (isDynamic === void 0) { isDynamic = false; }\n this.initValue = this.validateMinMaxRange(this.value);\n if (!this.strictMode && this.isDateObject(this.initValue)) {\n var value = this.validateMinMaxRange(this.initValue);\n Input.setValue(this.getFormattedValue(value), this.inputElement, this.floatLabelType, this.showClearButton);\n this.setProperties({ value: value }, true);\n }\n else {\n if (isNullOrUndefined(this.value)) {\n this.initValue = null;\n this.setProperties({ value: null }, true);\n }\n }\n this.valueWithMinutes = this.value;\n _super.prototype.updateInput.call(this, isDynamic);\n };\n DateTimePicker.prototype.validateMinMaxRange = function (value) {\n var result = value;\n if (this.isDateObject(value)) {\n result = this.validateValue(value);\n }\n else {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n }\n }\n this.checkValidState(result);\n return result;\n };\n DateTimePicker.prototype.checkValidState = function (value) {\n this.isValidState = true;\n if (!this.strictMode) {\n if ((+(value) > +(this.max)) || (+(value) < +(this.min))) {\n this.isValidState = false;\n }\n }\n this.checkErrorState();\n };\n DateTimePicker.prototype.checkErrorState = function () {\n if (this.isValidState) {\n removeClass([this.inputWrapper.container], ERROR);\n }\n else {\n addClass([this.inputWrapper.container], ERROR);\n }\n attributes(this.inputElement, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n DateTimePicker.prototype.validateValue = function (value) {\n var dateVal = value;\n if (this.strictMode) {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n dateVal = this.max;\n }\n else if (+value < +this.min) {\n dateVal = this.min;\n }\n else if (+value > +this.max) {\n dateVal = this.max;\n }\n }\n else {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n dateVal = value;\n }\n }\n return dateVal;\n };\n DateTimePicker.prototype.disablePopupButton = function (isDisable) {\n if (isDisable) {\n addClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n this.hide();\n }\n else {\n removeClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n }\n };\n DateTimePicker.prototype.getFormattedValue = function (value) {\n var dateOptions;\n if (!isNullOrUndefined(value)) {\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n dateOptions = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n return this.globalize.formatDate(value, dateOptions);\n }\n else {\n return null;\n }\n };\n DateTimePicker.prototype.isDateObject = function (value) {\n return (!isNullOrUndefined(value) && !isNaN(+value)) ? true : false;\n };\n DateTimePicker.prototype.createInputElement = function () {\n removeClass([this.inputElement], DATEPICKERROOT);\n removeClass([this.inputWrapper.container], DATEWRAPPER);\n addClass([this.inputWrapper.container], DATETIMEWRAPPER);\n addClass([this.inputElement], ROOT);\n this.renderTimeIcon();\n };\n DateTimePicker.prototype.renderTimeIcon = function () {\n this.timeIcon = Input.appendSpan(INPUTWRAPPER + ' ' + TIMEICON + ' ' + ICONS, this.inputWrapper.container);\n };\n DateTimePicker.prototype.bindInputEvents = function () {\n EventHandler.add(this.timeIcon, 'mousedown', this.timeHandler, this);\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.dateHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.blurHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.focusHandler, this);\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n this.keyboardHandler = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputKeyAction.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n };\n DateTimePicker.prototype.unBindInputEvents = function () {\n EventHandler.remove(this.timeIcon, 'mousedown touchstart', this.timeHandler);\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateHandler);\n if (this.inputElement) {\n EventHandler.remove(this.inputElement, 'blur', this.blurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.focusHandler);\n }\n if (this.keyboardHandler) {\n this.keyboardHandler.destroy();\n }\n };\n DateTimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.timeFormat)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.timeFormat;\n }\n return cldrTime;\n };\n DateTimePicker.prototype.cldrDateTimeFormat = function () {\n var cldrTime;\n var culture = new Internationalization(this.locale);\n var dateFormat = culture.getDatePattern({ skeleton: 'yMd' });\n if (this.isNullOrEmpty(this.formatString)) {\n cldrTime = dateFormat + ' ' + this.getCldrFormat('time');\n }\n else {\n cldrTime = this.formatString;\n }\n return cldrTime;\n };\n DateTimePicker.prototype.getCldrFormat = function (type) {\n var cldrDateTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDateTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDateTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n return cldrDateTime;\n };\n DateTimePicker.prototype.isNullOrEmpty = function (value) {\n if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n return true;\n }\n else {\n return false;\n }\n };\n DateTimePicker.prototype.getCultureTimeObject = function (ld, c) {\n if (this.calendarMode === 'Gregorian') {\n return getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.short', ld);\n }\n else {\n return getValue('main.' + '' + this.locale + '.dates.calendars.islamic.timeFormats.short', ld);\n }\n };\n DateTimePicker.prototype.timeHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n this.isIconClicked = true;\n if (Browser.isDevice) {\n this.inputElement.setAttribute('readonly', '');\n }\n if (e.currentTarget === this.timeIcon) {\n e.preventDefault();\n }\n if (this.enabled && !this.readonly) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n }\n if (this.isTimePopupOpen()) {\n this.closePopup(e);\n }\n else {\n this.inputElement.focus();\n this.popupCreation('time', e);\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n this.isIconClicked = false;\n };\n DateTimePicker.prototype.dateHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if (e.currentTarget === this.inputWrapper.buttons[0]) {\n e.preventDefault();\n }\n if (this.enabled && !this.readonly) {\n if (this.isTimePopupOpen()) {\n this.closePopup(e);\n }\n if (!isNullOrUndefined(this.popupWrapper)) {\n this.popupCreation('date', e);\n }\n }\n };\n DateTimePicker.prototype.show = function (type, e) {\n if ((this.enabled && this.readonly) || !this.enabled) {\n return;\n }\n else {\n if (type === 'time' && !this.dateTimeWrapper) {\n if (this.isDatePopupOpen()) {\n this.hide(e);\n }\n this.popupCreation('time', e);\n }\n else if (!this.popupObj) {\n if (this.isTimePopupOpen()) {\n this.hide(e);\n }\n _super.prototype.show.call(this);\n this.popupCreation('date', e);\n }\n }\n };\n DateTimePicker.prototype.toggle = function (e) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n this.show('time', null);\n }\n else if (this.isTimePopupOpen()) {\n this.hide(e);\n _super.prototype.show.call(this, null, e);\n this.popupCreation('date', null);\n }\n else {\n this.show(null, e);\n }\n };\n DateTimePicker.prototype.listCreation = function () {\n var dateObject;\n if (this.calendarMode === 'Gregorian') {\n dateObject = this.globalize.parseDate(this.inputElement.value, {\n format: this.cldrDateTimeFormat(), type: 'datetime'\n });\n }\n else {\n dateObject = this.globalize.parseDate(this.inputElement.value, {\n format: this.cldrDateTimeFormat(), type: 'datetime', calendar: 'islamic'\n });\n }\n var value = isNullOrUndefined(this.value) ? this.inputElement.value !== '' ?\n dateObject : new Date() : this.value;\n this.valueWithMinutes = value;\n this.listWrapper = createElement('div', { className: CONTENT, attrs: { 'tabindex': '0' } });\n var min = this.startTime(value);\n var max = this.endTime(value);\n var listDetails = TimePickerBase.createListItems(this.createElement, min, max, this.globalize, this.cldrTimeFormat(), this.step);\n this.timeCollections = listDetails.collection;\n this.listTag = listDetails.list;\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options' });\n append([listDetails.list], this.listWrapper);\n this.wireTimeListEvents();\n var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n };\n DateTimePicker.prototype.popupCreation = function (type, e) {\n if (Browser.isDevice) {\n this.element.setAttribute('readonly', 'readonly');\n }\n if (type === 'date') {\n if (!this.readonly && this.popupWrapper) {\n addClass([this.popupWrapper], DATETIMEPOPUPWRAPPER);\n attributes(this.popupWrapper, { 'id': this.element.id + '_datepopup' });\n }\n }\n else {\n if (!this.readonly) {\n this.dateTimeWrapper = createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_timepopup', 'style': 'visibility:hidden ; display:block' }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n this.dateTimeWrapper.className += ' ' + this.cssClass;\n }\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.listCreation();\n append([this.listWrapper], this.dateTimeWrapper);\n }\n document.body.appendChild(this.dateTimeWrapper);\n this.addTimeSelection();\n this.renderPopup();\n this.setTimeScrollPosition();\n this.openPopup(e);\n if (!Browser.isDevice || (Browser.isDevice && !this.fullScreenMode)) {\n this.popupObject.refreshPosition(this.inputElement);\n }\n if (Browser.isDevice && this.fullScreenMode) {\n this.dateTimeWrapper.style.left = '0px';\n }\n }\n }\n };\n DateTimePicker.prototype.openPopup = function (e) {\n var _this = this;\n this.preventArgs = {\n cancel: false,\n popup: this.popupObject,\n event: e || null\n };\n var eventArgs = this.preventArgs;\n this.trigger('open', eventArgs, function (eventArgs) {\n _this.preventArgs = eventArgs;\n if (!_this.preventArgs.cancel && !_this.readonly) {\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION\n };\n if (_this.zIndex === 1000) {\n _this.popupObject.show(new Animation(openAnimation), _this.element);\n }\n else {\n _this.popupObject.show(new Animation(openAnimation), null);\n }\n addClass([_this.inputWrapper.container], [ICONANIMATION]);\n attributes(_this.inputElement, { 'aria-expanded': 'true' });\n attributes(_this.inputElement, { 'aria-owns': _this.inputElement.id + '_options' });\n EventHandler.add(document, 'mousedown touchstart', _this.documentClickHandler, _this);\n }\n });\n };\n DateTimePicker.prototype.documentClickHandler = function (event) {\n var target = event.target;\n if ((!isNullOrUndefined(this.popupObject) && (this.inputWrapper.container.contains(target) && event.type !== 'mousedown' ||\n (this.popupObject.element && this.popupObject.element.contains(target)))) && event.type !== 'touchstart') {\n event.preventDefault();\n }\n if (!(closest(target, '[id=\"' + (this.popupObject && this.popupObject.element.id + '\"]'))) && target !== this.inputElement\n && target !== this.timeIcon && !isNullOrUndefined(this.inputWrapper) && target !== this.inputWrapper.container) {\n if (this.isTimePopupOpen()) {\n this.hide(event);\n this.focusOut();\n }\n }\n else if (target !== this.inputElement) {\n if (!Browser.isDevice) {\n this.isPreventBlur = ((document.activeElement === this.inputElement) && (Browser.isIE || Browser.info.name === 'edge')\n && target === this.popupObject.element);\n }\n }\n };\n DateTimePicker.prototype.isTimePopupOpen = function () {\n return (this.dateTimeWrapper && this.dateTimeWrapper.classList.contains('' + ROOT)) ? true : false;\n };\n DateTimePicker.prototype.isDatePopupOpen = function () {\n return (this.popupWrapper && this.popupWrapper.classList.contains('' + DATETIMEPOPUPWRAPPER)) ? true : false;\n };\n DateTimePicker.prototype.renderPopup = function () {\n var _this = this;\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n if (Browser.isDevice) {\n this.timeModal = createElement('div');\n this.timeModal.className = '' + ROOT + ' e-time-modal';\n document.body.className += ' ' + OVERFLOW;\n this.timeModal.style.display = 'block';\n document.body.appendChild(this.timeModal);\n }\n var offset = 4;\n this.popupObject = new Popup(this.dateTimeWrapper, {\n width: this.setPopupWidth(),\n zIndex: this.zIndex,\n targetType: 'container',\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n enableRtl: this.enableRtl,\n offsetY: offset,\n open: function () {\n _this.dateTimeWrapper.style.visibility = 'visible';\n addClass([_this.timeIcon], ACTIVE);\n if (!Browser.isDevice) {\n _this.timekeyConfigure = extend(_this.timekeyConfigure, _this.keyConfigs);\n _this.inputEvent = new KeyboardEvents(_this.inputWrapper.container, {\n keyAction: _this.timeKeyActionHandle.bind(_this),\n keyConfigs: _this.timekeyConfigure,\n eventName: 'keydown'\n });\n }\n }, close: function () {\n removeClass([_this.timeIcon], ACTIVE);\n _this.unWireTimeListEvents();\n _this.inputElement.removeAttribute('aria-activedescendant');\n remove(_this.popupObject.element);\n _this.popupObject.destroy();\n _this.dateTimeWrapper.innerHTML = '';\n _this.listWrapper = _this.dateTimeWrapper = undefined;\n if (_this.inputEvent) {\n _this.inputEvent.destroy();\n }\n }, targetExitViewport: function () {\n if (!Browser.isDevice) {\n _this.hide();\n }\n }\n });\n if (Browser.isDevice && this.fullScreenMode) {\n this.popupObject.element.style.display = \"flex\";\n this.popupObject.element.style.maxHeight = \"100%\";\n this.popupObject.element.style.width = \"100%\";\n }\n else {\n this.popupObject.element.style.maxHeight = POPUPDIMENSION;\n }\n if (Browser.isDevice && this.fullScreenMode) {\n var modelWrapper = createElement('div', { className: 'e-datetime-mob-popup-wrap' });\n var modelHeader = this.createElement('div', { className: 'e-model-header' });\n var modelTitleSpan = this.createElement(\"span\", { className: \"e-model-title\" });\n modelTitleSpan.textContent = \"Select time\";\n var modelCloseIcon = this.createElement(\"span\", { className: \"e-popup-close\" });\n EventHandler.add(modelCloseIcon, 'mousedown touchstart', this.dateTimeCloseHandler, this);\n var timeContent = this.dateTimeWrapper.querySelector(\".e-content\");\n modelHeader.appendChild(modelCloseIcon);\n modelHeader.appendChild(modelTitleSpan);\n modelWrapper.appendChild(modelHeader);\n modelWrapper.appendChild(timeContent);\n this.dateTimeWrapper.insertBefore(modelWrapper, this.dateTimeWrapper.firstElementChild);\n }\n };\n DateTimePicker.prototype.dateTimeCloseHandler = function (e) {\n this.hide();\n };\n DateTimePicker.prototype.setDimension = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n // eslint-disable-next-line no-self-assign\n width = width;\n }\n else {\n width = '100%';\n }\n return width;\n };\n DateTimePicker.prototype.setPopupWidth = function () {\n var width = this.setDimension(this.width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n DateTimePicker.prototype.wireTimeListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n DateTimePicker.prototype.unWireTimeListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n }\n };\n DateTimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setTimeHover(currentLi, HOVER);\n };\n DateTimePicker.prototype.onMouseLeave = function () {\n this.removeTimeHover(HOVER);\n };\n DateTimePicker.prototype.setTimeHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeTimeHover(className);\n addClass([li], className);\n }\n };\n DateTimePicker.prototype.getPopupHeight = function () {\n var height = parseInt(POPUPDIMENSION, 10);\n var popupHeight = this.dateTimeWrapper.getBoundingClientRect().height;\n if (Browser.isDevice && this.fullScreenMode) {\n return popupHeight;\n }\n else {\n return popupHeight > height ? height : popupHeight;\n }\n };\n DateTimePicker.prototype.changeEvent = function (e) {\n _super.prototype.changeEvent.call(this, e);\n if ((this.value && this.value.valueOf()) !== (this.previousDateTime && +this.previousDateTime.valueOf())) {\n this.valueWithMinutes = this.value;\n this.setInputValue('date');\n this.previousDateTime = this.value && new Date(+this.value);\n }\n };\n DateTimePicker.prototype.updateValue = function (e) {\n this.setInputValue('time');\n if (+this.previousDateTime !== +this.value) {\n this.changedArgs = {\n value: this.value, event: e || null,\n isInteracted: !isNullOrUndefined(e),\n element: this.element\n };\n this.addTimeSelection();\n this.trigger('change', this.changedArgs);\n this.previousDateTime = this.previousDate = this.value;\n }\n };\n DateTimePicker.prototype.setTimeScrollPosition = function () {\n var popupElement = this.selectedElement;\n if (!isNullOrUndefined(popupElement)) {\n this.findScrollTop(popupElement);\n }\n else if (this.dateTimeWrapper && this.checkDateValue(this.scrollTo)) {\n this.setScrollTo();\n }\n };\n DateTimePicker.prototype.findScrollTop = function (element) {\n var listHeight = this.getPopupHeight();\n var nextElement = element.nextElementSibling;\n var height = nextElement ? nextElement.offsetTop : element.offsetTop;\n var lineHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n if (Browser.isDevice && this.fullScreenMode) {\n var listContent = this.dateTimeWrapper.querySelector('.e-content');\n listContent.scrollTop = nextElement ? (height - (listHeight / HALFPOSITION + lineHeight / HALFPOSITION)) : height;\n }\n else {\n this.dateTimeWrapper.scrollTop = nextElement ? (height - (listHeight / HALFPOSITION + lineHeight / HALFPOSITION)) : height;\n }\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n };\n DateTimePicker.prototype.setScrollTo = function () {\n var element;\n var items = this.dateTimeWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length >= 0) {\n this.scrollInvoked = true;\n var initialTime = this.timeCollections[0];\n var scrollTime = this.getDateObject(this.checkDateValue(this.scrollTo)).getTime();\n element = items[Math.round((scrollTime - initialTime) / (this.step * 60000))];\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n };\n DateTimePicker.prototype.setInputValue = function (type) {\n if (type === 'date') {\n this.inputElement.value = this.previousElementValue = this.getFormattedValue(this.getFullDateTime());\n this.setProperties({ value: this.getFullDateTime() }, true);\n }\n else {\n var tempVal = this.getFormattedValue(new Date(this.timeCollections[this.activeIndex]));\n Input.setValue(tempVal, this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousElementValue = this.inputElement.value;\n this.setProperties({ value: new Date(this.timeCollections[this.activeIndex]) }, true);\n if (this.enableMask) {\n this.createMask();\n }\n }\n this.updateIconState();\n };\n DateTimePicker.prototype.getFullDateTime = function () {\n var value = null;\n if (this.isDateObject(this.valueWithMinutes)) {\n value = this.combineDateTime(this.valueWithMinutes);\n }\n else {\n value = this.previousDate;\n }\n return this.validateMinMaxRange(value);\n };\n DateTimePicker.prototype.createMask = function () {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n };\n DateTimePicker.prototype.combineDateTime = function (value) {\n if (this.isDateObject(value)) {\n var day = this.previousDate.getDate();\n var month = this.previousDate.getMonth();\n var year = this.previousDate.getFullYear();\n var hour = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n return new Date(year, month, day, hour, minutes, seconds);\n }\n else {\n return this.previousDate;\n }\n };\n DateTimePicker.prototype.onMouseClick = function (event) {\n var target = event.target;\n var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n if (li && li.classList.contains(LISTCLASS)) {\n this.timeValue = li.getAttribute('data-value');\n this.hide(event);\n }\n this.setSelection(li, event);\n };\n DateTimePicker.prototype.setSelection = function (li, event) {\n if (this.isValidLI(li) && !li.classList.contains(ACTIVE)) {\n this.selectedElement = li;\n var index = Array.prototype.slice.call(this.liCollections).indexOf(li);\n this.activeIndex = index;\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n addClass([this.selectedElement], ACTIVE);\n this.selectedElement.setAttribute('aria-selected', 'true');\n this.updateValue(event);\n }\n };\n DateTimePicker.prototype.setTimeActiveClass = function () {\n var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n if (!isNullOrUndefined(collections)) {\n var items = collections.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n for (var i = 0; i < items.length; i++) {\n if (this.timeCollections[i] === +(this.valueWithMinutes)) {\n items[i].setAttribute('aria-selected', 'true');\n this.selectedElement = items[i];\n this.activeIndex = i;\n this.setTimeActiveDescendant();\n break;\n }\n }\n }\n }\n };\n DateTimePicker.prototype.setTimeActiveDescendant = function () {\n if (!isNullOrUndefined(this.selectedElement) && this.value) {\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n }\n else {\n this.inputElement.removeAttribute('aria-activedescendant');\n }\n };\n DateTimePicker.prototype.addTimeSelection = function () {\n this.selectedElement = null;\n this.removeTimeSelection();\n this.setTimeActiveClass();\n if (!isNullOrUndefined(this.selectedElement)) {\n addClass([this.selectedElement], ACTIVE);\n this.selectedElement.setAttribute('aria-selected', 'true');\n }\n };\n DateTimePicker.prototype.removeTimeSelection = function () {\n this.removeTimeHover(HOVER);\n if (!isNullOrUndefined(this.dateTimeWrapper)) {\n var items = this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n if (items.length) {\n removeClass(items, ACTIVE);\n items[0].removeAttribute('aria-selected');\n }\n }\n };\n DateTimePicker.prototype.removeTimeHover = function (className) {\n var hoveredItem = this.getTimeHoverItem(className);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, className);\n }\n };\n DateTimePicker.prototype.getTimeHoverItem = function (className) {\n var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n var hoveredItem;\n if (!isNullOrUndefined(collections)) {\n hoveredItem = collections.querySelectorAll('.' + className);\n }\n return hoveredItem;\n };\n DateTimePicker.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n };\n DateTimePicker.prototype.calculateStartEnd = function (value, range, method) {\n var day = value.getDate();\n var month = value.getMonth();\n var year = value.getFullYear();\n var hours = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n var milliseconds = value.getMilliseconds();\n if (range) {\n if (method === 'starttime') {\n return new Date(year, month, day, 0, 0, 0);\n }\n else {\n return new Date(year, month, day, 23, 59, 59);\n }\n }\n else {\n return new Date(year, month, day, hours, minutes, seconds, milliseconds);\n }\n };\n DateTimePicker.prototype.startTime = function (date) {\n var tempStartValue;\n var start;\n var tempMin = this.min;\n var value = date === null ? new Date() : date;\n if ((+value.getDate() === +tempMin.getDate() && +value.getMonth() === +tempMin.getMonth() &&\n +value.getFullYear() === +tempMin.getFullYear()) || ((+new Date(value.getFullYear(), value.getMonth(), value.getDate())) <=\n +new Date(tempMin.getFullYear(), tempMin.getMonth(), tempMin.getDate()))) {\n start = false;\n tempStartValue = this.min;\n }\n else if (+value < +this.max && +value > +this.min) {\n start = true;\n tempStartValue = value;\n }\n else if (+value >= +this.max) {\n start = true;\n tempStartValue = this.max;\n }\n return this.calculateStartEnd(tempStartValue, start, 'starttime');\n };\n DateTimePicker.prototype.endTime = function (date) {\n var tempEndValue;\n var end;\n var tempMax = this.max;\n var value = date === null ? new Date() : date;\n if ((+value.getDate() === +tempMax.getDate() && +value.getMonth() === +tempMax.getMonth() &&\n +value.getFullYear() === +tempMax.getFullYear()) || (+new Date(value.getUTCFullYear(), value.getMonth(), value.getDate()) >=\n +new Date(tempMax.getFullYear(), tempMax.getMonth(), tempMax.getDate()))) {\n end = false;\n tempEndValue = this.max;\n }\n else if (+value < +this.max && +value > +this.min) {\n end = true;\n tempEndValue = value;\n }\n else if (+value <= +this.min) {\n end = true;\n tempEndValue = this.min;\n }\n return this.calculateStartEnd(tempEndValue, end, 'endtime');\n };\n DateTimePicker.prototype.hide = function (e) {\n var _this = this;\n if (this.popupObj || this.dateTimeWrapper) {\n this.preventArgs = {\n cancel: false,\n popup: this.popupObj || this.popupObject,\n event: e || null\n };\n var eventArgs = this.preventArgs;\n if (isNullOrUndefined(this.popupObj)) {\n this.trigger('close', eventArgs, function (eventArgs) {\n _this.dateTimeCloseEventCallback(e, eventArgs);\n });\n }\n else {\n this.dateTimeCloseEventCallback(e, eventArgs);\n }\n }\n else {\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n }\n };\n DateTimePicker.prototype.dateTimeCloseEventCallback = function (e, eventArgs) {\n this.preventArgs = eventArgs;\n if (!this.preventArgs.cancel) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n }\n else if (this.isTimePopupOpen()) {\n this.closePopup(e);\n removeClass([document.body], OVERFLOW);\n if (Browser.isDevice && this.timeModal) {\n this.timeModal.style.display = 'none';\n this.timeModal.outerHTML = '';\n this.timeModal = null;\n }\n this.setTimeActiveDescendant();\n }\n }\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DateTimePicker.prototype.closePopup = function (e) {\n if (this.isTimePopupOpen() && this.popupObject) {\n var animModel = {\n name: 'FadeOut',\n duration: ANIMATIONDURATION,\n delay: 0\n };\n this.popupObject.hide(new Animation(animModel));\n this.inputWrapper.container.classList.remove(ICONANIMATION);\n attributes(this.inputElement, { 'aria-expanded': 'false' });\n this.inputElement.removeAttribute('aria-owns');\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n }\n };\n DateTimePicker.prototype.preRender = function () {\n this.checkFormat();\n this.dateTimeFormat = this.cldrDateTimeFormat();\n _super.prototype.preRender.call(this);\n removeClass([this.inputElementCopy], [ROOT]);\n };\n DateTimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.setProperties({ min: this.validateValue(date.min) }, true);\n }\n else {\n this.setProperties({ max: this.validateValue(date.max) }, true);\n }\n };\n DateTimePicker.prototype.checkAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['style', 'name', 'step', 'disabled', 'readonly', 'value', 'min', 'max', 'placeholder', 'type'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '' ||\n this.inputElement.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !isDynamic);\n }\n break;\n case 'min':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['min'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ min: value }, !isDynamic);\n }\n }\n break;\n case 'disabled':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === 'true' ||\n this.inputElement.getAttribute(prop) === '' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['value'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ value: value }, !isDynamic);\n }\n }\n break;\n case 'max':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['max'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ max: value }, !isDynamic);\n }\n }\n break;\n }\n }\n }\n };\n DateTimePicker.prototype.requiredModules = function () {\n var modules = [];\n if (this) {\n modules.push({ args: [this], member: 'islamic' });\n }\n if (this.enableMask) {\n modules.push(this.maskedDateModule());\n }\n return modules;\n };\n DateTimePicker.prototype.maskedDateModule = function () {\n var modules = { args: [this], member: 'MaskedDateTime' };\n return modules;\n };\n DateTimePicker.prototype.getTimeActiveElement = function () {\n if (!isNullOrUndefined(this.dateTimeWrapper)) {\n return this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n }\n else {\n return null;\n }\n };\n DateTimePicker.prototype.createDateObj = function (val) {\n return val instanceof Date ? val : null;\n };\n DateTimePicker.prototype.getDateObject = function (text) {\n if (!this.isNullOrEmpty(text)) {\n var dateValue = this.createDateObj(text);\n var value = this.valueWithMinutes;\n var status_1 = !isNullOrUndefined(value);\n if (this.checkDateValue(dateValue)) {\n var date = status_1 ? value.getDate() : DAY;\n var month = status_1 ? value.getMonth() : MONTH;\n var year = status_1 ? value.getFullYear() : YEAR;\n var hour = status_1 ? value.getHours() : HOUR;\n var minute = status_1 ? value.getMinutes() : MINUTE;\n var second = status_1 ? value.getSeconds() : SECOND;\n var millisecond = status_1 ? value.getMilliseconds() : MILLISECOND;\n if (!this.scrollInvoked) {\n return new Date(year, month, date, hour, minute, second, millisecond);\n }\n else {\n this.scrollInvoked = false;\n return new Date(year, month, date, dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds(), dateValue.getMilliseconds());\n }\n }\n }\n return null;\n };\n DateTimePicker.prototype.findNextTimeElement = function (event) {\n var textVal = (this.inputElement).value;\n var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n this.getDateObject(this.valueWithMinutes);\n var dateTimeVal = null;\n var listCount = this.liCollections.length;\n if (!isNullOrUndefined(this.activeIndex) || !isNullOrUndefined(this.checkDateValue(value))) {\n if (event.action === 'home') {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[0])));\n this.activeIndex = 0;\n }\n else if (event.action === 'end') {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[this.timeCollections.length - 1])));\n this.activeIndex = this.timeCollections.length - 1;\n }\n else {\n if (event.action === 'down') {\n for (var i = 0; i < listCount; i++) {\n if (+value < this.timeCollections[i]) {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[i])));\n this.activeIndex = i;\n break;\n }\n }\n }\n else {\n for (var i = listCount - 1; i >= 0; i--) {\n if (+value > this.timeCollections[i]) {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[i])));\n this.activeIndex = i;\n break;\n }\n }\n }\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.timeElementValue(isNullOrUndefined(dateTimeVal) ? null : new Date(dateTimeVal));\n }\n };\n DateTimePicker.prototype.setTimeValue = function (date, value) {\n var dateString;\n var time;\n var val = this.validateMinMaxRange(value);\n var newval = this.createDateObj(val);\n if (this.getFormattedValue(newval) !== (!isNullOrUndefined(this.value) ? this.getFormattedValue(this.value) : null)) {\n this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n time = new Date(+this.valueWithMinutes);\n }\n else {\n if (this.strictMode) {\n //for strict mode case, when value not present within a range. Reset the nearest range value.\n date = newval;\n }\n this.valueWithMinutes = this.checkDateValue(date);\n time = new Date(+this.valueWithMinutes);\n }\n if (this.calendarMode === 'Gregorian') {\n dateString = this.globalize.formatDate(time, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.cldrDateTimeFormat(),\n type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n dateString = this.globalize.formatDate(time, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.cldrDateTimeFormat(),\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n });\n }\n if (!this.strictMode && isNullOrUndefined(time)) {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n return time;\n };\n DateTimePicker.prototype.timeElementValue = function (value) {\n if (!isNullOrUndefined(this.checkDateValue(value)) && !this.isNullOrEmpty(value)) {\n var date = value instanceof Date ? value : this.getDateObject(value);\n return this.setTimeValue(date, value);\n }\n return null;\n };\n DateTimePicker.prototype.timeKeyHandler = function (event) {\n if (isNullOrUndefined(this.step) || this.step <= 0) {\n return;\n }\n var listCount = this.timeCollections.length;\n if (isNullOrUndefined(this.getTimeActiveElement()) || this.getTimeActiveElement().length === 0) {\n if (this.liCollections.length > 0) {\n if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n this.activeIndex = 0;\n this.selectedElement = this.liCollections[0];\n this.timeElementValue(new Date(this.timeCollections[0]));\n }\n else {\n this.findNextTimeElement(event);\n }\n }\n }\n else {\n var nextItemValue = void 0;\n if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n this.activeIndex = index = this.activeIndex === (listCount) ? 0 : this.activeIndex;\n this.activeIndex = index = this.activeIndex < 0 ? (listCount - 1) : this.activeIndex;\n nextItemValue = isNullOrUndefined(this.timeCollections[index]) ?\n this.timeCollections[0] : this.timeCollections[index];\n }\n else if (event.action === 'home') {\n this.activeIndex = 0;\n nextItemValue = this.timeCollections[0];\n }\n else if (event.action === 'end') {\n this.activeIndex = listCount - 1;\n nextItemValue = this.timeCollections[listCount - 1];\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.timeElementValue(new Date(nextItemValue));\n }\n this.isNavigate = true;\n this.setTimeHover(this.selectedElement, NAVIGATION);\n this.setTimeActiveDescendant();\n if (this.isTimePopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n this.setTimeScrollPosition();\n }\n };\n DateTimePicker.prototype.timeKeyActionHandle = function (event) {\n if (this.enabled) {\n if (event.action !== 'right' && event.action !== 'left' && event.action !== 'tab') {\n event.preventDefault();\n }\n switch (event.action) {\n case 'up':\n case 'down':\n case 'home':\n case 'end':\n this.timeKeyHandler(event);\n break;\n case 'enter':\n if (this.isNavigate) {\n this.selectedElement = this.liCollections[this.activeIndex];\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n this.setInputValue('time');\n if (+this.previousDateTime !== +this.value) {\n this.changedArgs.value = this.value;\n this.addTimeSelection();\n this.previousDateTime = this.value;\n }\n }\n else {\n this.updateValue(event);\n }\n this.hide(event);\n addClass([this.inputWrapper.container], INPUTFOCUS);\n this.isNavigate = false;\n event.stopPropagation();\n break;\n case 'escape':\n this.hide(event);\n break;\n default:\n this.isNavigate = false;\n break;\n }\n }\n };\n DateTimePicker.prototype.inputKeyAction = function (event) {\n switch (event.action) {\n case 'altDownArrow':\n this.strictModeUpdate();\n this.updateInput();\n this.toggle(event);\n break;\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {DateTimePickerModel} newProp - Returns the dynamic property value of the component.\n * @param {DateTimePickerModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n\n */\n DateTimePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n this.isDynamicValueChanged = true;\n this.invalidValueString = null;\n this.checkInvalidValue(newProp.value);\n newProp.value = this.value;\n newProp.value = this.validateValue(newProp.value);\n if (this.enableMask) {\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(this.getFormattedValue(newProp.value), this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.valueWithMinutes = newProp.value;\n this.setProperties({ value: newProp.value }, true);\n if (this.popupObj) {\n this.popupUpdate();\n }\n this.previousDateTime = new Date(this.inputElement.value);\n this.updateInput();\n this.changeTrigger(null);\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n if (this.enableMask && this.value) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'min':\n case 'max':\n this.getProperty(newProp, prop);\n this.updateInput();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'cssClass':\n if (!isNullOrUndefined(oldProp.cssClass)) {\n oldProp.cssClass = (oldProp.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(newProp.cssClass)) {\n newProp.cssClass = (newProp.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container], oldProp.cssClass);\n if (this.dateTimeWrapper) {\n Input.setCssClass(newProp.cssClass, [this.dateTimeWrapper], oldProp.cssClass);\n }\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.l10n.getConstant('placeholder'), this.inputElement);\n this.dateTimeFormat = this.cldrDateTimeFormat();\n _super.prototype.updateInput.call(this);\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToElement();\n this.updateHtmlAttributeToWrapper();\n this.checkAttributes(true);\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.checkFormat();\n this.dateTimeFormat = this.formatString;\n this.setValue();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n if (!this.value) {\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.inputElement);\n if (!this.enabled) {\n this.inputElement.tabIndex = -1;\n }\n break;\n case 'strictMode':\n this.invalidValueString = null;\n this.updateInput();\n break;\n case 'width':\n this.setWidth(newProp.width);\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');\n }\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');\n }\n break;\n case 'scrollTo':\n if (this.checkDateValue(new Date(this.checkValue(newProp.scrollTo)))) {\n if (this.dateTimeWrapper) {\n this.setScrollTo();\n }\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkValue(newProp.scrollTo))) }, true);\n }\n else {\n this.setProperties({ scrollTo: null }, true);\n }\n break;\n case 'enableMask':\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n if (this.inputElement.value === this.maskedDateValue) {\n this.maskedDateValue = '';\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n break;\n default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n break;\n }\n if (!this.isDynamicValueChanged) {\n this.hide(null);\n }\n this.isDynamicValueChanged = false;\n }\n };\n /**\n * To get component name.\n *\n * @returns {string} Returns the component name.\n * @private\n */\n DateTimePicker.prototype.getModuleName = function () {\n return 'datetimepicker';\n };\n DateTimePicker.prototype.restoreValue = function () {\n this.previousDateTime = this.previousDate;\n this.currentDate = this.value ? this.value : new Date();\n this.valueWithMinutes = this.value;\n this.previousDate = this.value;\n this.previousElementValue = this.previousElementValue = (isNullOrUndefined(this.inputValueCopy)) ? '' :\n this.getFormattedValue(this.inputValueCopy);\n };\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"timeFormat\", void 0);\n __decorate([\n Property(30)\n ], DateTimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"scrollTo\", void 0);\n __decorate([\n Property(1000)\n ], DateTimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property({})\n ], DateTimePicker.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"values\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"fullScreenMode\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Property(new Date(1900, 0, 1))\n ], DateTimePicker.prototype, \"min\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], DateTimePicker.prototype, \"max\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property('Gregorian')\n ], DateTimePicker.prototype, \"calendarMode\", void 0);\n __decorate([\n Property('Month')\n ], DateTimePicker.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], DateTimePicker.prototype, \"depth\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"weekNumber\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property('Short')\n ], DateTimePicker.prototype, \"dayHeaderFormat\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"openOnFocus\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"enableMask\", void 0);\n __decorate([\n Property({ day: 'day', month: 'month', year: 'year', hour: 'hour', minute: 'minute', second: 'second', dayOfTheWeek: 'day of the week' })\n ], DateTimePicker.prototype, \"maskPlaceholder\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"cleared\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"destroyed\", void 0);\n DateTimePicker = __decorate([\n NotifyPropertyChanges\n ], DateTimePicker);\n return DateTimePicker;\n}(DatePicker));\nexport { DateTimePicker };\n","var instances = 'ej2_instances';\nvar uid = 0;\nvar isBlazorPlatform = false;\n/**\n * Function to check whether the platform is blazor or not.\n *\n * @returns {void} result\n * @private\n */\nexport function disableBlazorMode() {\n isBlazorPlatform = false;\n}\n/**\n * Create Instance from constructor function with desired parameters.\n *\n * @param {Function} classFunction - Class function to which need to create instance\n * @param {any[]} params - Parameters need to passed while creating instance\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function createInstance(classFunction, params) {\n var arrayParam = params;\n arrayParam.unshift(undefined);\n return new (Function.prototype.bind.apply(classFunction, arrayParam));\n}\n/**\n * To run a callback function immediately after the browser has completed other operations.\n *\n * @param {Function} handler - callback function to be triggered.\n * @returns {Function} ?\n * @private\n */\nexport function setImmediate(handler) {\n var unbind;\n // eslint-disable-next-line\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n intCrypto.getRandomValues(num);\n var secret = 'ej2' + combineArray(num);\n // eslint-disable-next-line\n var messageHandler = function (event) {\n if (event.source === window && typeof event.data === 'string' && event.data.length <= 32 && event.data === secret) {\n handler();\n unbind();\n }\n };\n window.addEventListener('message', messageHandler, false);\n window.postMessage(secret, '*');\n return unbind = function () {\n window.removeEventListener('message', messageHandler);\n handler = messageHandler = secret = undefined;\n };\n}\n/**\n * To get nameSpace value from the desired object.\n *\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} obj - Object to get the inner object value.\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function getValue(nameSpace, obj) {\n // eslint-disable-next-line\n var value = obj;\n var splits = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n for (var i = 0; i < splits.length && !isUndefined(value); i++) {\n value = value[splits[parseInt(i.toString(), 10)]];\n }\n return value;\n}\n/**\n * To set value for the nameSpace in desired object.\n *\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} value - Value that you need to set.\n * @param {any} obj - Object to get the inner object value.\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function setValue(nameSpace, value, obj) {\n var keys = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n // eslint-disable-next-line\n var start = obj || {};\n // eslint-disable-next-line\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[parseInt(i.toString(), 10)];\n if (i + 1 === length) {\n fromObj[\"\" + key] = value === undefined ? {} : value;\n }\n else if (isNullOrUndefined(fromObj[\"\" + key])) {\n fromObj[\"\" + key] = {};\n }\n fromObj = fromObj[\"\" + key];\n }\n return start;\n}\n/**\n * Delete an item from Object\n *\n * @param {any} obj - Object in which we need to delete an item.\n * @param {string} key - String value to the get the inner object\n * @returns {void} ?\n * @private\n */\n// eslint-disable-next-line\nexport function deleteObject(obj, key) {\n delete obj[\"\" + key];\n}\n/**\n *@private\n */\n// eslint-disable-next-line\nexport var containerObject = typeof window !== 'undefined' ? window : {};\n/**\n * Check weather the given argument is only object.\n *\n * @param {any} obj - Object which is need to check.\n * @returns {boolean} ?\n * @private\n */\n// eslint-disable-next-line\nexport function isObject(obj) {\n var objCon = {};\n return (!isNullOrUndefined(obj) && obj.constructor === objCon.constructor);\n}\n/**\n * To get enum value by giving the string.\n *\n * @param {any} enumObject - Enum object.\n * @param {string} enumValue - Enum value to be searched\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function getEnumValue(enumObject, enumValue) {\n // eslint-disable-next-line\n return enumObject[enumValue];\n}\n/**\n * Merge the source object into destination object.\n *\n * @param {any} source - source object which is going to merge with destination object\n * @param {any} destination - object need to be merged\n * @returns {void} ?\n * @private\n */\nexport function merge(source, destination) {\n if (!isNullOrUndefined(destination)) {\n var temrObj = source;\n var tempProp = destination;\n var keys = Object.keys(destination);\n var deepmerge = 'deepMerge';\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (!isNullOrUndefined(temrObj[\"\" + deepmerge]) && (temrObj[\"\" + deepmerge].indexOf(key) !== -1) &&\n (isObject(tempProp[\"\" + key]) || Array.isArray(tempProp[\"\" + key]))) {\n extend(temrObj[\"\" + key], temrObj[\"\" + key], tempProp[\"\" + key], true);\n }\n else {\n temrObj[\"\" + key] = tempProp[\"\" + key];\n }\n }\n }\n}\n/**\n * Extend the two object with newer one.\n *\n * @param {any} copied - Resultant object after merged\n * @param {Object} first - First object need to merge\n * @param {Object} second - Second object need to merge\n * @param {boolean} deep ?\n * @returns {Object} ?\n * @private\n */\nexport function extend(copied, first, second, deep) {\n var result = copied && typeof copied === 'object' ? copied : {};\n var length = arguments.length;\n if (deep) {\n length = length - 1;\n }\n var _loop_1 = function (i) {\n // eslint-disable-next-line\n if (!arguments_1[i]) {\n return \"continue\";\n }\n // eslint-disable-next-line\n var obj1 = arguments_1[i];\n Object.keys(obj1).forEach(function (key) {\n var src = result[\"\" + key];\n var copy = obj1[\"\" + key];\n var clone;\n var isArrayChanged = Array.isArray(copy) && Array.isArray(src) && (copy.length !== src.length);\n // eslint-disable-next-line\n var blazorEventExtend = isBlazor() ? (!(src instanceof Event) && !isArrayChanged) : true;\n if (deep && blazorEventExtend && (isObject(copy) || Array.isArray(copy))) {\n if (isObject(copy)) {\n clone = src ? src : {};\n // eslint-disable-next-line\n if (Array.isArray(clone) && clone.hasOwnProperty('isComplexArray')) {\n extend(clone, {}, copy, deep);\n }\n else {\n result[\"\" + key] = extend(clone, {}, copy, deep);\n }\n }\n else {\n /* istanbul ignore next */\n clone = isBlazor() ? src && Object.keys(copy).length : src ? src : [];\n // eslint-disable-next-line\n result[\"\" + key] = extend([], clone, copy, (clone && clone.length) || (copy && copy.length));\n }\n }\n else {\n result[\"\" + key] = copy;\n }\n });\n };\n var arguments_1 = arguments;\n for (var i = 1; i < length; i++) {\n _loop_1(i);\n }\n return result;\n}\n/**\n * To check whether the object is null or undefined.\n *\n * @param {Object} value - To check the object is null or undefined\n * @returns {boolean} ?\n * @private\n */\nexport function isNullOrUndefined(value) {\n return value === undefined || value === null;\n}\n/**\n * To check whether the object is undefined.\n *\n * @param {Object} value - To check the object is undefined\n * @returns {boolean} ?\n * @private\n */\nexport function isUndefined(value) {\n return ('undefined' === typeof value);\n}\n/**\n * To return the generated unique name\n *\n * @param {string} definedName - To concatenate the unique id to provided name\n * @returns {string} ?\n * @private\n */\nexport function getUniqueID(definedName) {\n return definedName + '_' + uid++;\n}\n/**\n * It limits the rate at which a function can fire. The function will fire only once every provided second instead of as quickly.\n *\n * @param {Function} eventFunction - Specifies the function to run when the event occurs\n * @param {number} delay - A number that specifies the milliseconds for function delay call option\n * @returns {Function} ?\n * @private\n */\nexport function debounce(eventFunction, delay) {\n // eslint-disable-next-line\n var out;\n return function () {\n var _this = this;\n // eslint-disable-next-line\n var args = arguments;\n var later = function () {\n out = null;\n return eventFunction.apply(_this, args);\n };\n clearTimeout(out);\n out = setTimeout(later, delay);\n };\n}\n/**\n * To convert the object to string for query url\n *\n * @param {Object} data ?\n * @returns {string} ?\n * @private\n */\n// eslint-disable-next-line\nexport function queryParams(data) {\n var array = [];\n var keys = Object.keys(data);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n array.push(encodeURIComponent(key) + '=' + encodeURIComponent('' + data[\"\" + key]));\n }\n return array.join('&');\n}\n/**\n * To check whether the given array contains object.\n *\n * @param {any} value - Specifies the T type array to be checked.\n * @returns {boolean} ?\n * @private\n */\nexport function isObjectArray(value) {\n var parser = Object.prototype.toString;\n if (parser.call(value) === '[object Array]') {\n if (parser.call(value[0]) === '[object Object]') {\n return true;\n }\n }\n return false;\n}\n/**\n * To check whether the child element is descendant to parent element or parent and child are same element.\n *\n * @param {Element} child - Specifies the child element to compare with parent.\n * @param {Element} parent - Specifies the parent element.\n * @returns {boolean} ?\n * @private\n */\nexport function compareElementParent(child, parent) {\n var node = child;\n if (node === parent) {\n return true;\n }\n else if (node === document || !node) {\n return false;\n }\n else {\n return compareElementParent(node.parentNode, parent);\n }\n}\n/**\n * To throw custom error message.\n *\n * @param {string} message - Specifies the error message to be thrown.\n * @returns {void} ?\n * @private\n */\nexport function throwError(message) {\n try {\n throw new Error(message);\n }\n catch (e) {\n // eslint-disable-next-line\n throw e.message + '\\n' + e.stack;\n }\n}\n/**\n * This function is used to print given element\n *\n * @param {Element} element - Specifies the print content element.\n * @param {Window} printWindow - Specifies the print window.\n * @returns {Window} ?\n * @private\n */\nexport function print(element, printWindow) {\n var div = document.createElement('div');\n var links = [].slice.call(document.getElementsByTagName('head')[0].querySelectorAll('base, link, style'));\n var blinks = [].slice.call(document.getElementsByTagName('body')[0].querySelectorAll('link, style'));\n if (blinks.length) {\n for (var l = 0, len = blinks.length; l < len; l++) {\n links.push(blinks[parseInt(l.toString(), 10)]);\n }\n }\n var reference = '';\n if (isNullOrUndefined(printWindow)) {\n printWindow = window.open('', 'print', 'height=452,width=1024,tabbar=no');\n }\n div.appendChild(element.cloneNode(true));\n for (var i = 0, len = links.length; i < len; i++) {\n reference += links[parseInt(i.toString(), 10)].outerHTML;\n }\n printWindow.document.write(' ' + reference + '' + div.innerHTML +\n '' + '');\n printWindow.document.close();\n printWindow.focus();\n // eslint-disable-next-line\n var interval = setInterval(function () {\n if (printWindow.ready) {\n printWindow.print();\n printWindow.close();\n clearInterval(interval);\n }\n }, 500);\n return printWindow;\n}\n/**\n * Function to normalize the units applied to the element.\n *\n * @param {number|string} value ?\n * @returns {string} result\n * @private\n */\nexport function formatUnit(value) {\n var result = value + '';\n if (result.match(/auto|cm|mm|in|px|pt|pc|%|em|ex|ch|rem|vw|vh|vmin|vmax/)) {\n return result;\n }\n return result + 'px';\n}\n/**\n * Function to check whether the platform is blazor or not.\n *\n * @returns {void} result\n * @private\n */\nexport function enableBlazorMode() {\n isBlazorPlatform = true;\n}\n/**\n * Function to check whether the platform is blazor or not.\n *\n * @returns {boolean} result\n * @private\n */\nexport function isBlazor() {\n return isBlazorPlatform;\n}\n/**\n * Function to convert xPath to DOM element in blazor platform\n *\n * @returns {HTMLElement} result\n * @param {HTMLElement | object} element ?\n * @private\n */\nexport function getElement(element) {\n var xPath = 'xPath';\n if (!(element instanceof Node) && isBlazor() && !isNullOrUndefined(element[\"\" + xPath])) {\n return document.evaluate(element[\"\" + xPath], document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;\n }\n return element;\n}\n/**\n * Function to fetch the Instances of a HTML element for the given component.\n *\n * @param {string | HTMLElement} element ?\n * @param {any} component ?\n * @returns {Object} ?\n * @private\n */\n// eslint-disable-next-line\nexport function getInstance(element, component) {\n // eslint-disable-next-line\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[\"\" + instances]) {\n for (var _i = 0, _a = elem[\"\" + instances]; _i < _a.length; _i++) {\n var inst = _a[_i];\n if (inst instanceof component) {\n return inst;\n }\n }\n }\n return null;\n}\n/**\n * Function to add instances for the given element.\n *\n * @param {string | HTMLElement} element ?\n * @param {Object} instance ?\n * @returns {void} ?\n * @private\n */\nexport function addInstance(element, instance) {\n // eslint-disable-next-line\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[\"\" + instances]) {\n elem[\"\" + instances].push(instance);\n }\n else {\n elem[\"\" + instances] = [instance];\n }\n}\n/**\n * Function to generate the unique id.\n *\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function uniqueID() {\n if ((typeof window) === 'undefined') {\n return;\n }\n // eslint-disable-next-line\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n return intCrypto.getRandomValues(num);\n}\n/**\n *\n * @param {Int16Array} num ?\n * @returns {string} ?\n */\nfunction combineArray(num) {\n var ret = '';\n for (var i = 0; i < 5; i++) {\n ret += (i ? ',' : '') + num[parseInt(i.toString(), 10)];\n }\n return ret;\n}\n","/**\n * Parser\n */\nvar defaultNumberingSystem = {\n 'latn': {\n '_digits': '0123456789',\n '_type': 'numeric'\n }\n};\nimport { isUndefined, getValue, isBlazor } from '../util';\nvar defaultNumberSymbols = {\n 'decimal': '.',\n 'group': ',',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'exponential': 'E'\n};\nvar latnNumberSystem = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n/**\n * Interface for parser base\n *\n * @private\n */\nvar ParserBase = /** @class */ (function () {\n function ParserBase() {\n }\n /**\n * Returns the cldr object for the culture specifies\n *\n * @param {Object} obj - Specifies the object from which culture object to be acquired.\n * @param {string} cName - Specifies the culture name.\n * @returns {Object} ?\n */\n ParserBase.getMainObject = function (obj, cName) {\n var value = isBlazor() ? cName : 'main.' + cName;\n return getValue(value, obj);\n };\n /**\n * Returns the numbering system object from given cldr data.\n *\n * @param {Object} obj - Specifies the object from which number system is acquired.\n * @returns {Object} ?\n */\n ParserBase.getNumberingSystem = function (obj) {\n return getValue('supplemental.numberingSystems', obj) || this.numberingSystems;\n };\n /**\n * Returns the reverse of given object keys or keys specified.\n *\n * @param {Object} prop - Specifies the object to be reversed.\n * @param {number[]} keys - Optional parameter specifies the custom keyList for reversal.\n * @returns {Object} ?\n */\n ParserBase.reverseObject = function (prop, keys) {\n var propKeys = keys || Object.keys(prop);\n var res = {};\n for (var _i = 0, propKeys_1 = propKeys; _i < propKeys_1.length; _i++) {\n var key = propKeys_1[_i];\n // eslint-disable-next-line\n if (!res.hasOwnProperty(prop[key])) {\n // eslint-disable-next-line\n res[prop[key]] = key;\n }\n }\n return res;\n };\n /**\n * Returns the symbol regex by skipping the escape sequence.\n *\n * @param {string[]} props - Specifies the array values to be skipped.\n * @returns {RegExp} ?\n */\n ParserBase.getSymbolRegex = function (props) {\n var regexStr = props.map(function (str) {\n return str.replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1');\n }).join('|');\n var regExp = RegExp;\n return new regExp(regexStr, 'g');\n };\n /**\n *\n * @param {Object} prop ?\n * @returns {Object} ?\n */\n ParserBase.getSymbolMatch = function (prop) {\n var matchKeys = Object.keys(defaultNumberSymbols);\n var ret = {};\n for (var _i = 0, matchKeys_1 = matchKeys; _i < matchKeys_1.length; _i++) {\n var key = matchKeys_1[_i];\n // eslint-disable-next-line\n ret[prop[key]] = defaultNumberSymbols[key];\n }\n return ret;\n };\n /**\n * Returns regex string for provided value\n *\n * @param {string} val ?\n * @returns {string} ?\n */\n ParserBase.constructRegex = function (val) {\n var len = val.length;\n var ret = '';\n for (var i = 0; i < len; i++) {\n if (i !== len - 1) {\n ret += val[parseInt(i.toString(), 10)] + '|';\n }\n else {\n ret += val[parseInt(i.toString(), 10)];\n }\n }\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n *\n * @param {string} value - Specifies the values to be replaced.\n * @param {RegExp} regex - Specifies the regex to search.\n * @param {Object} obj - Specifies the object matcher to be replace value parts.\n * @returns {string} ?\n */\n ParserBase.convertValueParts = function (value, regex, obj) {\n return value.replace(regex, function (str) {\n // eslint-disable-next-line\n return obj[str];\n });\n };\n /**\n * Returns default numbering system object for formatting from cldr data\n *\n * @param {Object} obj ?\n * @returns {NumericObject} ?\n */\n ParserBase.getDefaultNumberingSystem = function (obj) {\n var ret = {};\n ret.obj = getValue('numbers', obj);\n ret.nSystem = getValue('defaultNumberingSystem', ret.obj);\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n *\n * @param {Object} curObj ?\n * @param {Object} numberSystem ?\n * @param {boolean} needSymbols ?\n * @param {boolean} blazorMode ?\n * @returns {Object} ?\n */\n ParserBase.getCurrentNumericOptions = function (curObj, numberSystem, needSymbols, blazorMode) {\n var ret = {};\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem) || blazorMode) {\n var digits = blazorMode ? getValue('obj.mapperDigits', cur) : getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n ret.numericPair = this.reverseObject(digits, latnNumberSystem);\n var regExp = RegExp;\n ret.numberParseRegex = new regExp(this.constructRegex(digits), 'g');\n ret.numericRegex = '[' + digits[0] + '-' + digits[9] + ']';\n if (needSymbols) {\n ret.numericRegex = digits[0] + '-' + digits[9];\n ret.symbolNumberSystem = getValue(blazorMode ? 'numberSymbols' : 'symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.symbolMatch = this.getSymbolMatch(ret.symbolNumberSystem);\n ret.numberSystem = cur.nSystem;\n }\n }\n }\n return ret;\n };\n /**\n * Returns number mapper object for the provided cldr data\n *\n * @param {Object} curObj ?\n * @param {Object} numberSystem ?\n * @param {boolean} isNumber ?\n * @returns {NumberMapper} ?\n */\n // eslint-disable-next-line\n ParserBase.getNumberMapper = function (curObj, numberSystem, isNumber) {\n var ret = { mapper: {} };\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem)) {\n ret.numberSystem = cur.nSystem;\n ret.numberSymbols = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.timeSeparator = getValue('timeSeparator', ret.numberSymbols);\n var digits = getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n for (var _i = 0, latnNumberSystem_1 = latnNumberSystem; _i < latnNumberSystem_1.length; _i++) {\n var i = latnNumberSystem_1[_i];\n // eslint-disable-next-line\n ret.mapper[i] = digits[i];\n }\n }\n }\n return ret;\n };\n ParserBase.nPair = 'numericPair';\n ParserBase.nRegex = 'numericRegex';\n ParserBase.numberingSystems = defaultNumberingSystem;\n return ParserBase;\n}());\nexport { ParserBase };\n/**\n * @private\n */\nvar blazorCurrencyData = {\n 'DJF': 'Fdj',\n 'ERN': 'Nfk',\n 'ETB': 'Br',\n 'NAD': '$',\n 'ZAR': 'R',\n 'XAF': 'FCFA',\n 'GHS': 'GH₵',\n 'XDR': 'XDR',\n 'AED': 'د.إ.',\n 'BHD': 'د.ب.',\n 'DZD': 'د.ج.',\n 'EGP': 'ج.م.',\n 'ILS': '₪',\n 'IQD': 'د.ع.',\n 'JOD': 'د.ا.',\n 'KMF': 'CF',\n 'KWD': 'د.ك.',\n 'LBP': 'ل.ل.',\n 'LYD': 'د.ل.',\n 'MAD': 'د.م.',\n 'MRU': 'أ.م.',\n 'OMR': 'ر.ع.',\n 'QAR': 'ر.ق.',\n 'SAR': 'ر.س.',\n 'SDG': 'ج.س.',\n 'SOS': 'S',\n 'SSP': '£',\n 'SYP': 'ل.س.',\n 'TND': 'د.ت.',\n 'YER': 'ر.ي.',\n 'CLP': '$',\n 'INR': '₹',\n 'TZS': 'TSh',\n 'EUR': '€',\n 'AZN': '₼',\n 'RUB': '₽',\n 'BYN': 'Br',\n 'ZMW': 'K',\n 'BGN': 'лв.',\n 'NGN': '₦',\n 'XOF': 'CFA',\n 'BDT': '৳',\n 'CNY': '¥',\n 'BAM': 'КМ',\n 'UGX': 'USh',\n 'USD': '$',\n 'CZK': 'Kč',\n 'GBP': '£',\n 'DKK': 'kr.',\n 'KES': 'Ksh',\n 'CHF': 'CHF',\n 'MVR': 'ރ.',\n 'BTN': 'Nu.',\n 'XCD': 'EC$',\n 'AUD': '$',\n 'BBD': '$',\n 'BIF': 'FBu',\n 'BMD': '$',\n 'BSD': '$',\n 'BWP': 'P',\n 'BZD': '$',\n 'CAD': '$',\n 'NZD': '$',\n 'FJD': '$',\n 'FKP': '£',\n 'GIP': '£',\n 'GMD': 'D',\n 'GYD': '$',\n 'HKD': '$',\n 'IDR': 'Rp',\n 'JMD': '$',\n 'KYD': '$',\n 'LRD': '$',\n 'MGA': 'Ar',\n 'MOP': 'MOP$',\n 'MUR': 'Rs',\n 'MWK': 'MK',\n 'MYR': 'RM',\n 'PGK': 'K',\n 'PHP': '₱',\n 'PKR': 'Rs',\n 'RWF': 'RF',\n 'SBD': '$',\n 'SCR': 'SR',\n 'SEK': 'kr',\n 'SGD': '$',\n 'SHP': '£',\n 'SLL': 'Le',\n 'ANG': 'NAf.',\n 'SZL': 'E',\n 'TOP': 'T$',\n 'TTD': '$',\n 'VUV': 'VT',\n 'WST': 'WS$',\n 'ARS': '$',\n 'BOB': 'Bs',\n 'BRL': 'R$',\n 'COP': '$',\n 'CRC': '₡',\n 'CUP': '$',\n 'DOP': '$',\n 'GTQ': 'Q',\n 'HNL': 'L',\n 'MXN': '$',\n 'NIO': 'C$',\n 'PAB': 'B/.',\n 'PEN': 'S/',\n 'PYG': '₲',\n 'UYU': '$',\n 'VES': 'Bs.S',\n 'IRR': 'ريال',\n 'GNF': 'FG',\n 'CDF': 'FC',\n 'HTG': 'G',\n 'XPF': 'FCFP',\n 'HRK': 'kn',\n 'HUF': 'Ft',\n 'AMD': '֏',\n 'ISK': 'kr',\n 'JPY': '¥',\n 'GEL': '₾',\n 'CVE': '​',\n 'KZT': '₸',\n 'KHR': '៛',\n 'KPW': '₩',\n 'KRW': '₩',\n 'KGS': 'сом',\n 'AOA': 'Kz',\n 'LAK': '₭',\n 'MZN': 'MTn',\n 'MKD': 'ден',\n 'MNT': '₮',\n 'BND': '$',\n 'MMK': 'K',\n 'NOK': 'kr',\n 'NPR': 'रु',\n 'AWG': 'Afl.',\n 'SRD': '$',\n 'PLN': 'zł',\n 'AFN': '؋',\n 'STN': 'Db',\n 'MDL': 'L',\n 'RON': 'lei',\n 'UAH': '₴',\n 'LKR': 'රු.',\n 'ALL': 'Lekë',\n 'RSD': 'дин.',\n 'TJS': 'смн',\n 'THB': '฿',\n 'TMT': 'm.',\n 'TRY': '₺',\n 'UZS': 'сўм',\n 'VND': '₫',\n 'TWD': 'NT$'\n};\n/**\n *\n * @param {string} currencyCode ?\n * @returns {string} ?\n */\nexport function getBlazorCurrencySymbol(currencyCode) {\n return getValue(currencyCode || '', blazorCurrencyData);\n}\n","/***\n * Hijri parser\n */\n// eslint-disable-next-line\nexport var HijriParser;\n(function (HijriParser) {\n var dateCorrection = [28607, 28636, 28665, 28695, 28724, 28754, 28783, 28813, 28843, 28872, 28901, 28931, 28960, 28990,\n 29019, 29049, 29078, 29108, 29137, 29167, 29196, 29226, 29255, 29285, 29315, 29345, 29375, 29404, 29434, 29463, 29492, 29522,\n 29551, 29580, 29610, 29640, 29669, 29699, 29729, 29759, 29788, 29818, 29847, 29876, 29906, 29935, 29964, 29994, 30023, 30053,\n 30082, 30112, 30141, 30171, 30200, 30230, 30259, 30289, 30318, 30348, 30378, 30408, 30437, 30467, 30496, 30526, 30555, 30585,\n 30614, 30644, 30673, 30703, 30732, 30762, 30791, 30821, 30850, 30880, 30909, 30939, 30968, 30998, 31027, 31057, 31086, 31116,\n 31145, 31175, 31204, 31234, 31263, 31293, 31322, 31352, 31381, 31411, 31441, 31471, 31500, 31530, 31559, 31589, 31618, 31648,\n 31676, 31706, 31736, 31766, 31795, 31825, 31854, 31884, 31913, 31943, 31972, 32002, 32031, 32061, 32090, 32120, 32150, 32180,\n 32209, 32239, 32268, 32298, 32327, 32357, 32386, 32416, 32445, 32475, 32504, 32534, 32563, 32593, 32622, 32652, 32681, 32711,\n 32740, 32770, 32799, 32829, 32858, 32888, 32917, 32947, 32976, 33006, 33035, 33065, 33094, 33124, 33153, 33183, 33213, 33243,\n 33272, 33302, 33331, 33361, 33390, 33420, 33450, 33479, 33509, 33539, 33568, 33598, 33627, 33657, 33686, 33716, 33745, 33775,\n 33804, 33834, 33863, 33893, 33922, 33952, 33981, 34011, 34040, 34069, 34099, 34128, 34158, 34187, 34217, 34247, 34277, 34306,\n 34336, 34365, 34395, 34424, 34454, 34483, 34512, 34542, 34571, 34601, 34631, 34660, 34690, 34719, 34749, 34778, 34808, 34837,\n 34867, 34896, 34926, 34955, 34985, 35015, 35044, 35074, 35103, 35133, 35162, 35192, 35222, 35251, 35280, 35310, 35340, 35370,\n 35399, 35429, 35458, 35488, 35517, 35547, 35576, 35605, 35635, 35665, 35694, 35723, 35753, 35782, 35811, 35841, 35871, 35901,\n 35930, 35960, 35989, 36019, 36048, 36078, 36107, 36136, 36166, 36195, 36225, 36254, 36284, 36314, 36343, 36373, 36403, 36433,\n 36462, 36492, 36521, 36551, 36580, 36610, 36639, 36669, 36698, 36728, 36757, 36786, 36816, 36845, 36875, 36904, 36934, 36963,\n 36993, 37022, 37052, 37081, 37111, 37141, 37170, 37200, 37229, 37259, 37288, 37318, 37347, 37377, 37406, 37436, 37465, 37495,\n 37524, 37554, 37584, 37613, 37643, 37672, 37701, 37731, 37760, 37790, 37819, 37849, 37878, 37908, 37938, 37967, 37997, 38027,\n 38056, 38085, 38115, 38144, 38174, 38203, 38233, 38262, 38292, 38322, 38351, 38381, 38410, 38440, 38469, 38499, 38528, 38558,\n 38587, 38617, 38646, 38676, 38705, 38735, 38764, 38794, 38823, 38853, 38882, 38912, 38941, 38971, 39001, 39030, 39059, 39089,\n 39118, 39148, 39178, 39208, 39237, 39267, 39297, 39326, 39355, 39385, 39414, 39444, 39473, 39503, 39532, 39562, 39592, 39621,\n 39650, 39680, 39709, 39739, 39768, 39798, 39827, 39857, 39886, 39916, 39946, 39975, 40005, 40035, 40064, 40094, 40123, 40153,\n 40182, 40212, 40241, 40271, 40300, 40330, 40359, 40389, 40418, 40448, 40477, 40507, 40536, 40566, 40595, 40625, 40655, 40685,\n 40714, 40744, 40773, 40803, 40832, 40862, 40892, 40921, 40951, 40980, 41009, 41039, 41068, 41098, 41127, 41157, 41186, 41216,\n 41245, 41275, 41304, 41334, 41364, 41393, 41422, 41452, 41481, 41511, 41540, 41570, 41599, 41629, 41658, 41688, 41718, 41748,\n 41777, 41807, 41836, 41865, 41894, 41924, 41953, 41983, 42012, 42042, 42072, 42102, 42131, 42161, 42190, 42220, 42249, 42279,\n 42308, 42337, 42367, 42397, 42426, 42456, 42485, 42515, 42545, 42574, 42604, 42633, 42662, 42692, 42721, 42751, 42780, 42810,\n 42839, 42869, 42899, 42929, 42958, 42988, 43017, 43046, 43076, 43105, 43135, 43164, 43194, 43223, 43253, 43283, 43312, 43342,\n 43371, 43401, 43430, 43460, 43489, 43519, 43548, 43578, 43607, 43637, 43666, 43696, 43726, 43755, 43785, 43814, 43844, 43873,\n 43903, 43932, 43962, 43991, 44021, 44050, 44080, 44109, 44139, 44169, 44198, 44228, 44258, 44287, 44317, 44346, 44375, 44405,\n 44434, 44464, 44493, 44523, 44553, 44582, 44612, 44641, 44671, 44700, 44730, 44759, 44788, 44818, 44847, 44877, 44906, 44936,\n 44966, 44996, 45025, 45055, 45084, 45114, 45143, 45172, 45202, 45231, 45261, 45290, 45320, 45350, 45380, 45409, 45439, 45468,\n 45498, 45527, 45556, 45586, 45615, 45644, 45674, 45704, 45733, 45763, 45793, 45823, 45852, 45882, 45911, 45940, 45970, 45999,\n 46028, 46058, 46088, 46117, 46147, 46177, 46206, 46236, 46265, 46295, 46324, 46354, 46383, 46413, 46442, 46472, 46501, 46531,\n 46560, 46590, 46620, 46649, 46679, 46708, 46738, 46767, 46797, 46826, 46856, 46885, 46915, 46944, 46974, 47003, 47033, 47063,\n 47092, 47122, 47151, 47181, 47210, 47240, 47269, 47298, 47328, 47357, 47387, 47417, 47446, 47476, 47506, 47535, 47565, 47594,\n 47624, 47653, 47682, 47712, 47741, 47771, 47800, 47830, 47860, 47890, 47919, 47949, 47978, 48008, 48037, 48066, 48096, 48125,\n 48155, 48184, 48214, 48244, 48273, 48303, 48333, 48362, 48392, 48421, 48450, 48480, 48509, 48538, 48568, 48598, 48627, 48657,\n 48687, 48717, 48746, 48776, 48805, 48834, 48864, 48893, 48922, 48952, 48982, 49011, 49041, 49071, 49100, 49130, 49160, 49189,\n 49218, 49248, 49277, 49306, 49336, 49365, 49395, 49425, 49455, 49484, 49514, 49543, 49573, 49602, 49632, 49661, 49690, 49720,\n 49749, 49779, 49809, 49838, 49868, 49898, 49927, 49957, 49986, 50016, 50045, 50075, 50104, 50133, 50163, 50192, 50222, 50252,\n 50281, 50311, 50340, 50370, 50400, 50429, 50459, 50488, 50518, 50547, 50576, 50606, 50635, 50665, 50694, 50724, 50754, 50784,\n 50813, 50843, 50872, 50902, 50931, 50960, 50990, 51019, 51049, 51078, 51108, 51138, 51167, 51197, 51227, 51256, 51286, 51315,\n 51345, 51374, 51403, 51433, 51462, 51492, 51522, 51552, 51582, 51611, 51641, 51670, 51699, 51729, 51758, 51787, 51816, 51846,\n 51876, 51906, 51936, 51965, 51995, 52025, 52054, 52083, 52113, 52142, 52171, 52200, 52230, 52260, 52290, 52319, 52349, 52379,\n 52408, 52438, 52467, 52497, 52526, 52555, 52585, 52614, 52644, 52673, 52703, 52733, 52762, 52792, 52822, 52851, 52881, 52910,\n 52939, 52969, 52998, 53028, 53057, 53087, 53116, 53146, 53176, 53205, 53235, 53264, 53294, 53324, 53353, 53383, 53412, 53441,\n 53471, 53500, 53530, 53559, 53589, 53619, 53648, 53678, 53708, 53737, 53767, 53796, 53825, 53855, 53884, 53913, 53943, 53973,\n 54003, 54032, 54062, 54092, 54121, 54151, 54180, 54209, 54239, 54268, 54297, 54327, 54357, 54387, 54416, 54446, 54476, 54505,\n 54535, 54564, 54593, 54623, 54652, 54681, 54711, 54741, 54770, 54800, 54830, 54859, 54889, 54919, 54948, 54977, 55007, 55036,\n 55066, 55095, 55125, 55154, 55184, 55213, 55243, 55273, 55302, 55332, 55361, 55391, 55420, 55450, 55479, 55508, 55538, 55567,\n 55597, 55627, 55657, 55686, 55716, 55745, 55775, 55804, 55834, 55863, 55892, 55922, 55951, 55981, 56011, 56040, 56070, 56100,\n 56129, 56159, 56188, 56218, 56247, 56276, 56306, 56335, 56365, 56394, 56424, 56454, 56483, 56513, 56543, 56572, 56601, 56631,\n 56660, 56690, 56719, 56749, 56778, 56808, 56837, 56867, 56897, 56926, 56956, 56985, 57015, 57044, 57074, 57103, 57133, 57162,\n 57192, 57221, 57251, 57280, 57310, 57340, 57369, 57399, 57429, 57458, 57487, 57517, 57546, 57576, 57605, 57634, 57664, 57694,\n 57723, 57753, 57783, 57813, 57842, 57871, 57901, 57930, 57959, 57989, 58018, 58048, 58077, 58107, 58137, 58167, 58196, 58226,\n 58255, 58285, 58314, 58343, 58373, 58402, 58432, 58461, 58491, 58521, 58551, 58580, 58610, 58639, 58669, 58698, 58727, 58757,\n 58786, 58816, 58845, 58875, 58905, 58934, 58964, 58994, 59023, 59053, 59082, 59111, 59141, 59170, 59200, 59229, 59259, 59288,\n 59318, 59348, 59377, 59407, 59436, 59466, 59495, 59525, 59554, 59584, 59613, 59643, 59672, 59702, 59731, 59761, 59791, 59820,\n 59850, 59879, 59909, 59939, 59968, 59997, 60027, 60056, 60086, 60115, 60145, 60174, 60204, 60234, 60264, 60293, 60323, 60352,\n 60381, 60411, 60440, 60469, 60499, 60528, 60558, 60588, 60618, 60648, 60677, 60707, 60736, 60765, 60795, 60824, 60853, 60883,\n 60912, 60942, 60972, 61002, 61031, 61061, 61090, 61120, 61149, 61179, 61208, 61237, 61267, 61296, 61326, 61356, 61385, 61415,\n 61445, 61474, 61504, 61533, 61563, 61592, 61621, 61651, 61680, 61710, 61739, 61769, 61799, 61828, 61858, 61888, 61917, 61947,\n 61976, 62006, 62035, 62064, 62094, 62123, 62153, 62182, 62212, 62242, 62271, 62301, 62331, 62360, 62390, 62419, 62448, 62478,\n 62507, 62537, 62566, 62596, 62625, 62655, 62685, 62715, 62744, 62774, 62803, 62832, 62862, 62891, 62921, 62950, 62980, 63009,\n 63039, 63069, 63099, 63128, 63157, 63187, 63216, 63246, 63275, 63305, 63334, 63363, 63393, 63423, 63453, 63482, 63512, 63541,\n 63571, 63600, 63630, 63659, 63689, 63718, 63747, 63777, 63807, 63836, 63866, 63895, 63925, 63955, 63984, 64014, 64043, 64073,\n 64102, 64131, 64161, 64190, 64220, 64249, 64279, 64309, 64339, 64368, 64398, 64427, 64457, 64486, 64515, 64545, 64574, 64603,\n 64633, 64663, 64692, 64722, 64752, 64782, 64811, 64841, 64870, 64899, 64929, 64958, 64987, 65017, 65047, 65076, 65106, 65136,\n 65166, 65195, 65225, 65254, 65283, 65313, 65342, 65371, 65401, 65431, 65460, 65490, 65520, 65549, 65579, 65608, 65638, 65667,\n 65697, 65726, 65755, 65785, 65815, 65844, 65874, 65903, 65933, 65963, 65992, 66022, 66051, 66081, 66110, 66140, 66169, 66199,\n 66228, 66258, 66287, 66317, 66346, 66376, 66405, 66435, 66465, 66494, 66524, 66553, 66583, 66612, 66641, 66671, 66700, 66730,\n 66760, 66789, 66819, 66849, 66878, 66908, 66937, 66967, 66996, 67025, 67055, 67084, 67114, 67143, 67173, 67203, 67233, 67262,\n 67292, 67321, 67351, 67380, 67409, 67439, 67468, 67497, 67527, 67557, 67587, 67617, 67646, 67676, 67705, 67735, 67764, 67793,\n 67823, 67852, 67882, 67911, 67941, 67971, 68000, 68030, 68060, 68089, 68119, 68148, 68177, 68207, 68236, 68266, 68295, 68325,\n 68354, 68384, 68414, 68443, 68473, 68502, 68532, 68561, 68591, 68620, 68650, 68679, 68708, 68738, 68768, 68797, 68827, 68857,\n 68886, 68916, 68946, 68975, 69004, 69034, 69063, 69092, 69122, 69152, 69181, 69211, 69240, 69270, 69300, 69330, 69359, 69388,\n 69418, 69447, 69476, 69506, 69535, 69565, 69595, 69624, 69654, 69684, 69713, 69743, 69772, 69802, 69831, 69861, 69890, 69919,\n 69949, 69978, 70008, 70038, 70067, 70097, 70126, 70156, 70186, 70215, 70245, 70274, 70303, 70333, 70362, 70392, 70421, 70451,\n 70481, 70510, 70540, 70570, 70599, 70629, 70658, 70687, 70717, 70746, 70776, 70805, 70835, 70864, 70894, 70924, 70954, 70983,\n 71013, 71042, 71071, 71101, 71130, 71159, 71189, 71218, 71248, 71278, 71308, 71337, 71367, 71397, 71426, 71455, 71485, 71514,\n 71543, 71573, 71602, 71632, 71662, 71691, 71721, 71751, 71781, 71810, 71839, 71869, 71898, 71927, 71957, 71986, 72016, 72046,\n 72075, 72105, 72135, 72164, 72194, 72223, 72253, 72282, 72311, 72341, 72370, 72400, 72429, 72459, 72489, 72518, 72548, 72577,\n 72607, 72637, 72666, 72695, 72725, 72754, 72784, 72813, 72843, 72872, 72902, 72931, 72961, 72991, 73020, 73050, 73080, 73109,\n 73139, 73168, 73197, 73227, 73256, 73286, 73315, 73345, 73375, 73404, 73434, 73464, 73493, 73523, 73552, 73581, 73611, 73640,\n 73669, 73699, 73729, 73758, 73788, 73818, 73848, 73877, 73907, 73936, 73965, 73995, 74024, 74053, 74083, 74113, 74142, 74172,\n 74202, 74231, 74261, 74291, 74320, 74349, 74379, 74408, 74437, 74467, 74497, 74526, 74556, 74586, 74615, 74645, 74675, 74704,\n 74733, 74763, 74792, 74822, 74851, 74881, 74910, 74940, 74969, 74999, 75029, 75058, 75088, 75117, 75147, 75176, 75206, 75235,\n 75264, 75294, 75323, 75353, 75383, 75412, 75442, 75472, 75501, 75531, 75560, 75590, 75619, 75648, 75678, 75707, 75737, 75766,\n 75796, 75826, 75856, 75885, 75915, 75944, 75974, 76003, 76032, 76062, 76091, 76121, 76150, 76180, 76210, 76239, 76269, 76299,\n 76328, 76358, 76387, 76416, 76446, 76475, 76505, 76534, 76564, 76593, 76623, 76653, 76682, 76712, 76741, 76771, 76801, 76830,\n 76859, 76889, 76918, 76948, 76977, 77007, 77036, 77066, 77096, 77125, 77155, 77185, 77214, 77243, 77273, 77302, 77332, 77361,\n 77390, 77420, 77450, 77479, 77509, 77539, 77569, 77598, 77627, 77657, 77686, 77715, 77745, 77774, 77804, 77833, 77863, 77893,\n 77923, 77952, 77982, 78011, 78041, 78070, 78099, 78129, 78158, 78188, 78217, 78247, 78277, 78307, 78336, 78366, 78395, 78425,\n 78454, 78483, 78513, 78542, 78572, 78601, 78631, 78661, 78690, 78720, 78750, 78779, 78808, 78838, 78867, 78897, 78926, 78956,\n 78985, 79015, 79044, 79074, 79104, 79133, 79163, 79192, 79222, 79251, 79281, 79310, 79340, 79369, 79399, 79428, 79458, 79487,\n 79517, 79546, 79576, 79606, 79635, 79665, 79695, 79724, 79753, 79783, 79812, 79841, 79871, 79900, 79930, 79960, 79990\n ];\n /**\n *\n * @param {Date} gDate ?\n * @returns {Object} ?\n */\n function getHijriDate(gDate) {\n var day = gDate.getDate();\n var month = gDate.getMonth();\n var year = gDate.getFullYear();\n var tMonth = month + 1;\n var tYear = year;\n if (tMonth < 3) {\n tYear -= 1;\n tMonth += 12;\n }\n var yPrefix = Math.floor(tYear / 100.);\n var julilanOffset = yPrefix - Math.floor(yPrefix / 4.) - 2;\n var julianNumber = Math.floor(365.25 * (tYear + 4716)) + Math.floor(30.6001 * (tMonth + 1)) + day - julilanOffset - 1524;\n yPrefix = Math.floor((julianNumber - 1867216.25) / 36524.25);\n julilanOffset = yPrefix - Math.floor(yPrefix / 4.) + 1;\n var b = julianNumber + julilanOffset + 1524;\n var c = Math.floor((b - 122.1) / 365.25);\n var d = Math.floor(365.25 * c);\n var tempMonth = Math.floor((b - d) / 30.6001);\n day = (b - d) - Math.floor(30.6001 * tempMonth);\n month = Math.floor((b - d) / 20.6001);\n if (month > 13) {\n c += 1;\n month -= 12;\n }\n month -= 1;\n year = c - 4716;\n var modifiedJulianDate = julianNumber - 2400000;\n // date calculation for year after 2077\n var iyear = 10631. / 30.;\n var z = julianNumber - 1948084;\n var cyc = Math.floor(z / 10631.);\n z = z - 10631 * cyc;\n var j = Math.floor((z - 0.1335) / iyear);\n var iy = 30 * cyc + j;\n z = z - Math.floor(j * iyear + 0.1335);\n var im = Math.floor((z + 28.5001) / 29.5);\n /* istanbul ignore next */\n if (im === 13) {\n im = 12;\n }\n var tempDay = z - Math.floor(29.5001 * im - 29);\n var i = 0;\n for (; i < dateCorrection.length; i++) {\n if (dateCorrection[parseInt(i.toString(), 10)] > modifiedJulianDate) {\n break;\n }\n }\n var iln = i + 16260;\n var ii = Math.floor((iln - 1) / 12);\n var hYear = ii + 1;\n var hmonth = iln - 12 * ii;\n var hDate = modifiedJulianDate - dateCorrection[i - 1] + 1;\n if ((hDate + '').length > 2) {\n hDate = tempDay;\n hmonth = im;\n hYear = iy;\n }\n return { year: hYear, month: hmonth, date: hDate };\n }\n HijriParser.getHijriDate = getHijriDate;\n /**\n *\n * @param {number} year ?\n * @param {number} month ?\n * @param {number} day ?\n * @returns {Date} ?\n */\n function toGregorian(year, month, day) {\n var iy = year;\n var im = month;\n var id = day;\n var ii = iy - 1;\n var iln = (ii * 12) + 1 + (im - 1);\n var i = iln - 16260;\n var mcjdn = id + dateCorrection[i - 1] - 1;\n var julianDate = mcjdn + 2400000;\n var z = Math.floor(julianDate + 0.5);\n var a = Math.floor((z - 1867216.25) / 36524.25);\n a = z + 1 + a - Math.floor(a / 4);\n var b = a + 1524;\n var c = Math.floor((b - 122.1) / 365.25);\n var d = Math.floor(365.25 * c);\n var e = Math.floor((b - d) / 30.6001);\n var gDay = b - d - Math.floor(e * 30.6001);\n var gMonth = e - (e > 13.5 ? 13 : 1);\n var gYear = c - (gMonth > 2.5 ? 4716 : 4715);\n /* istanbul ignore next */\n if (gYear <= 0) {\n gMonth--;\n } // No year zero\n return new Date(gYear + '/' + (gMonth) + '/' + gDay);\n }\n HijriParser.toGregorian = toGregorian;\n})(HijriParser || (HijriParser = {}));\n","import { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nimport { isUndefined, throwError, getValue, isBlazor } from '../util';\nimport { HijriParser } from '../hijri-parser';\nimport { isNullOrUndefined, extend } from '../util';\nvar abbreviateRegexGlobal = /\\/MMMMM|MMMM|MMM|a|LLLL|LLL|EEEEE|EEEE|E|K|cccc|ccc|WW|W|G+|z+/gi;\nvar standalone = 'stand-alone';\nvar weekdayKey = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\nexport var basicPatterns = ['short', 'medium', 'long', 'full'];\nvar timeSetter = {\n m: 'getMinutes',\n h: 'getHours',\n H: 'getHours',\n s: 'getSeconds',\n d: 'getDate',\n f: 'getMilliseconds'\n};\nexport var datePartMatcher = {\n 'M': 'month',\n 'd': 'day',\n 'E': 'weekday',\n 'c': 'weekday',\n 'y': 'year',\n 'm': 'minute',\n 'h': 'hour',\n 'H': 'hour',\n 's': 'second',\n 'L': 'month',\n 'a': 'designator',\n 'z': 'timeZone',\n 'Z': 'timeZone',\n 'G': 'era',\n 'f': 'milliseconds'\n};\nvar timeSeparator = 'timeSeparator';\n/* tslint:disable no-any */\n/**\n * Date Format is a framework provides support for date formatting.\n *\n * @private\n */\nvar DateFormat = /** @class */ (function () {\n function DateFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n *\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} option - Specific the format in which date will format.\n * @param {Object} cldr - Specifies the global cldr data collection.\n * @returns {Function} ?\n */\n DateFormat.dateFormat = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, option.calendar);\n var numObject = getValue('parserObject.numbers', dependable);\n var dateObject = dependable.dateObject;\n var formatOptions = { isIslamic: base.islamicRegex.test(option.calendar) };\n if (isBlazor() && option.isServerRendered) {\n option = base.compareBlazorDateFormats(option, culture);\n }\n var resPattern = option.format ||\n base.getResultantPattern(option.skeleton, dependable.dateObject, option.type, false, isBlazor() ? culture : '');\n formatOptions.dateSeperator = isBlazor() ? getValue('dateSeperator', dateObject) : base.getDateSeparator(dependable.dateObject);\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n }\n else {\n resPattern = base.ConvertDateToWeekFormat(resPattern);\n if (isBlazor()) {\n resPattern = resPattern.replace(/tt/, 'a');\n }\n formatOptions.pattern = resPattern;\n formatOptions.numMapper = isBlazor() ?\n extend({}, numObject) : parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n var patternMatch = resPattern.match(abbreviateRegexGlobal) || [];\n for (var _i = 0, patternMatch_1 = patternMatch; _i < patternMatch_1.length; _i++) {\n var str = patternMatch_1[_i];\n var len = str.length;\n var char = str[0];\n if (char === 'K') {\n char = 'h';\n }\n switch (char) {\n case 'E':\n case 'c':\n if (isBlazor()) {\n // eslint-disable-next-line\n formatOptions.weekday = getValue('days.' + base.monthIndex[len], dateObject);\n }\n else {\n // eslint-disable-next-line\n formatOptions.weekday = dependable.dateObject[base.days][standalone][base.monthIndex[len]];\n }\n break;\n case 'M':\n case 'L':\n if (isBlazor()) {\n // eslint-disable-next-line\n formatOptions.month = getValue('months.' + base.monthIndex[len], dateObject);\n }\n else {\n // eslint-disable-next-line\n formatOptions.month = dependable.dateObject[base.month][standalone][base.monthIndex[len]];\n }\n break;\n case 'a':\n formatOptions.designator = isBlazor() ?\n getValue('dayPeriods', dateObject) : getValue('dayPeriods.format.wide', dateObject);\n break;\n case 'G':\n // eslint-disable-next-line\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n formatOptions.era = isBlazor() ? getValue('eras', dateObject) : getValue('eras.' + eText, dependable.dateObject);\n break;\n case 'z':\n formatOptions.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n break;\n }\n }\n }\n return function (value) {\n if (isNaN(value.getDate())) {\n return null;\n }\n return _this.intDateFormatter(value, formatOptions);\n };\n };\n /**\n * Returns formatted date string based on options passed.\n *\n * @param {Date} value ?\n * @param {FormatOptions} options ?\n * @returns {string} ?\n */\n DateFormat.intDateFormatter = function (value, options) {\n var pattern = options.pattern;\n var ret = '';\n var matches = pattern.match(base.dateParseRegex);\n var dObject = this.getCurrentDateValue(value, options.isIslamic);\n for (var _i = 0, matches_1 = matches; _i < matches_1.length; _i++) {\n var match = matches_1[_i];\n var length_1 = match.length;\n var char = match[0];\n if (char === 'K') {\n char = 'h';\n }\n var curval = void 0;\n var curvalstr = '';\n var isNumber = void 0;\n var processNumber = void 0;\n var curstr = '';\n switch (char) {\n case 'M':\n case 'L':\n curval = dObject.month;\n if (length_1 > 2) {\n // eslint-disable-next-line\n ret += options.month[curval];\n }\n else {\n isNumber = true;\n }\n break;\n case 'E':\n case 'c':\n // eslint-disable-next-line\n ret += options.weekday[weekdayKey[value.getDay()]];\n break;\n case 'H':\n case 'h':\n case 'm':\n case 's':\n case 'd':\n case 'f':\n isNumber = true;\n if (char === 'd') {\n curval = dObject.date;\n }\n else if (char === 'f') {\n isNumber = false;\n processNumber = true;\n // eslint-disable-next-line\n curvalstr = value[timeSetter[char]]().toString();\n curvalstr = curvalstr.substring(0, length_1);\n var curlength = curvalstr.length;\n if (length_1 !== curlength) {\n if (length_1 > 3) {\n continue;\n }\n for (var i = 0; i < length_1 - curlength; i++) {\n curvalstr = '0' + curvalstr.toString();\n }\n }\n curstr += curvalstr;\n }\n else {\n // eslint-disable-next-line\n curval = value[timeSetter[char]]();\n }\n if (char === 'h') {\n curval = curval % 12 || 12;\n }\n break;\n case 'y':\n processNumber = true;\n curstr += dObject.year;\n if (length_1 === 2) {\n curstr = curstr.substr(curstr.length - 2);\n }\n break;\n case 'a':\n // eslint-disable-next-line\n var desig = value.getHours() < 12 ? 'am' : 'pm';\n // eslint-disable-next-line\n ret += options.designator[desig];\n break;\n case 'G':\n // eslint-disable-next-line\n var dec = value.getFullYear() < 0 ? 0 : 1;\n // eslint-disable-next-line\n var retu = options.era[dec];\n if (isNullOrUndefined(retu)) {\n // eslint-disable-next-line\n retu = options.era[dec ? 0 : 1];\n }\n ret += retu || '';\n break;\n case '\\'':\n ret += (match === '\\'\\'') ? '\\'' : match.replace(/'/g, '');\n break;\n case 'z':\n // eslint-disable-next-line\n var timezone = value.getTimezoneOffset();\n // eslint-disable-next-line\n var pattern_1 = (length_1 < 4) ? '+H;-H' : options.timeZone.hourFormat;\n pattern_1 = pattern_1.replace(/:/g, options.numMapper.timeSeparator);\n if (timezone === 0) {\n ret += options.timeZone.gmtZeroFormat;\n }\n else {\n processNumber = true;\n curstr = this.getTimeZoneValue(timezone, pattern_1);\n }\n curstr = options.timeZone.gmtFormat.replace(/\\{0\\}/, curstr);\n break;\n case ':':\n // eslint-disable-next-line\n ret += options.numMapper.numberSymbols[timeSeparator];\n break;\n case '/':\n ret += options.dateSeperator;\n break;\n case 'W':\n isNumber = true;\n curval = base.getWeekOfYear(value);\n break;\n default:\n ret += match;\n }\n if (isNumber) {\n processNumber = true;\n curstr = this.checkTwodigitNumber(curval, length_1);\n }\n if (processNumber) {\n ret += parser.convertValueParts(curstr, base.latnParseRegex, options.numMapper.mapper);\n }\n }\n return ret;\n };\n DateFormat.getCurrentDateValue = function (value, isIslamic) {\n if (isIslamic) {\n return HijriParser.getHijriDate(value);\n }\n return { year: value.getFullYear(), month: value.getMonth() + 1, date: value.getDate() };\n };\n /**\n * Returns two digit numbers for given value and length\n *\n * @param {number} val ?\n * @param {number} len ?\n * @returns {string} ?\n */\n DateFormat.checkTwodigitNumber = function (val, len) {\n var ret = val + '';\n if (len === 2 && ret.length !== 2) {\n return '0' + ret;\n }\n return ret;\n };\n /**\n * Returns the value of the Time Zone.\n *\n * @param {number} tVal ?\n * @param {string} pattern ?\n * @returns {string} ?\n * @private\n */\n DateFormat.getTimeZoneValue = function (tVal, pattern) {\n var _this = this;\n var splt = pattern.split(';');\n var curPattern = splt[tVal > 0 ? 1 : 0];\n var no = Math.abs(tVal);\n return curPattern = curPattern.replace(/HH?|mm/g, function (str) {\n var len = str.length;\n var ishour = str.indexOf('H') !== -1;\n return _this.checkTwodigitNumber(Math.floor(ishour ? (no / 60) : (no % 60)), len);\n });\n };\n return DateFormat;\n}());\nexport { DateFormat };\n","import { isUndefined, throwError, isNullOrUndefined, extend, isBlazor, getValue } from '../util';\nimport { defaultCurrencyCode } from '../internationalization';\nimport { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nvar errorText = {\n 'ms': 'minimumSignificantDigits',\n 'ls': 'maximumSignificantDigits',\n 'mf': 'minimumFractionDigits',\n 'lf': 'maximumFractionDigits'\n};\nvar integerError = 'minimumIntegerDigits';\nvar percentSign = 'percentSign';\nvar minusSign = 'minusSign';\nvar spaceRegex = /\\s/;\nvar mapper = ['infinity', 'nan', 'group', 'decimal', 'exponential'];\nvar infinity = 'infinity';\nvar nan = 'nan';\n/**\n * Module for number formatting.\n *\n * @private\n */\nvar NumberFormat = /** @class */ (function () {\n function NumberFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n *\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} option - Specific the format in which number will format.\n * @param {Object} cldr - Specifies the global cldr data collection.\n * @returns {Function} ?\n */\n NumberFormat.numberFormatter = function (culture, option, cldr) {\n var _this = this;\n var fOptions = extend({}, option);\n var cOptions = {};\n var dOptions = {};\n var symbolPattern;\n var dependable = base.getDependables(cldr, culture, '', true);\n var numObject = dependable.numericObject;\n dOptions.numberMapper = isBlazor() ? extend({}, numObject) :\n parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n dOptions.currencySymbol = isBlazor() ? getValue('currencySymbol', numObject) : base.getCurrencySymbol(dependable.numericObject, fOptions.currency || defaultCurrencyCode, option.altSymbol);\n /* eslint-disable @typescript-eslint/no-explicit-any */\n dOptions.percentSymbol = isBlazor() ? getValue('numberSymbols.percentSign', numObject) :\n dOptions.numberMapper.numberSymbols[\"\" + percentSign];\n dOptions.minusSymbol = isBlazor() ? getValue('numberSymbols.minusSign', numObject) :\n dOptions.numberMapper.numberSymbols[\"\" + minusSign];\n var symbols = dOptions.numberMapper.numberSymbols;\n if ((option.format) && !(base.formatRegex.test(option.format))) {\n cOptions = base.customFormat(option.format, dOptions, dependable.numericObject);\n }\n else {\n extend(fOptions, base.getProperNumericSkeleton(option.format || 'N'));\n fOptions.isCurrency = fOptions.type === 'currency';\n fOptions.isPercent = fOptions.type === 'percent';\n if (!isBlazor()) {\n symbolPattern = base.getSymbolPattern(fOptions.type, dOptions.numberMapper.numberSystem, dependable.numericObject, fOptions.isAccount);\n }\n fOptions.groupOne = this.checkValueRange(fOptions.maximumSignificantDigits, fOptions.minimumSignificantDigits, true);\n this.checkValueRange(fOptions.maximumFractionDigits, fOptions.minimumFractionDigits, false, true);\n if (!isUndefined(fOptions.fractionDigits)) {\n fOptions.minimumFractionDigits = fOptions.maximumFractionDigits = fOptions.fractionDigits;\n }\n if (isUndefined(fOptions.useGrouping)) {\n fOptions.useGrouping = true;\n }\n if (fOptions.isCurrency && !isBlazor()) {\n symbolPattern = symbolPattern.replace(/\\u00A4/g, base.defaultCurrency);\n }\n if (!isBlazor()) {\n var split = symbolPattern.split(';');\n cOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, dOptions.currencySymbol);\n cOptions.pData = base.getFormatData(split[0], false, dOptions.currencySymbol);\n if (fOptions.useGrouping) {\n fOptions.groupSeparator = symbols[mapper[2]];\n fOptions.groupData = this.getGroupingDetails(split[0]);\n }\n }\n else {\n cOptions.nData = extend({}, {}, getValue(fOptions.type + 'nData', numObject));\n cOptions.pData = extend({}, {}, getValue(fOptions.type + 'pData', numObject));\n if (fOptions.type === 'currency' && option.currency) {\n base.replaceBlazorCurrency([cOptions.pData, cOptions.nData], dOptions.currencySymbol, option.currency);\n }\n }\n var minFrac = isUndefined(fOptions.minimumFractionDigits);\n if (minFrac) {\n fOptions.minimumFractionDigits = cOptions.nData.minimumFraction;\n }\n if (isUndefined(fOptions.maximumFractionDigits)) {\n var mval = cOptions.nData.maximumFraction;\n fOptions.maximumFractionDigits = isUndefined(mval) && fOptions.isPercent ? 0 : mval;\n }\n var mfrac = fOptions.minimumFractionDigits;\n var lfrac = fOptions.maximumFractionDigits;\n if (!isUndefined(mfrac) && !isUndefined(lfrac)) {\n if (mfrac > lfrac) {\n fOptions.maximumFractionDigits = mfrac;\n }\n }\n }\n extend(cOptions.nData, fOptions);\n extend(cOptions.pData, fOptions);\n return function (value) {\n if (isNaN(value)) {\n return symbols[mapper[1]];\n }\n else if (!isFinite(value)) {\n return symbols[mapper[0]];\n }\n return _this.intNumberFormatter(value, cOptions, dOptions, option);\n };\n };\n /**\n * Returns grouping details for the pattern provided\n *\n * @param {string} pattern ?\n * @returns {GroupDetails} ?\n */\n NumberFormat.getGroupingDetails = function (pattern) {\n var ret = {};\n var match = pattern.match(base.negativeDataRegex);\n if (match && match[4]) {\n var pattern_1 = match[4];\n var p = pattern_1.lastIndexOf(',');\n if (p !== -1) {\n var temp = pattern_1.split('.')[0];\n ret.primary = (temp.length - p) - 1;\n var s = pattern_1.lastIndexOf(',', p - 1);\n if (s !== -1) {\n ret.secondary = p - 1 - s;\n }\n }\n }\n return ret;\n };\n /**\n * Returns if the provided integer range is valid.\n *\n * @param {number} val1 ?\n * @param {number} val2 ?\n * @param {boolean} checkbothExist ?\n * @param {boolean} isFraction ?\n * @returns {boolean} ?\n */\n NumberFormat.checkValueRange = function (val1, val2, checkbothExist, isFraction) {\n var decide = isFraction ? 'f' : 's';\n var dint = 0;\n var str1 = errorText['l' + decide];\n // eslint-disable-next-line\n var str2 = errorText['m' + decide];\n if (!isUndefined(val1)) {\n this.checkRange(val1, str1, isFraction);\n dint++;\n }\n if (!isUndefined(val2)) {\n this.checkRange(val2, str2, isFraction);\n dint++;\n }\n if (dint === 2) {\n if (val1 < val2) {\n throwError(str2 + 'specified must be less than the' + str1);\n }\n else {\n return true;\n }\n }\n else if (checkbothExist && dint === 1) {\n throwError('Both' + str2 + 'and' + str2 + 'must be present');\n }\n return false;\n };\n /**\n * Check if the provided fraction range is valid\n *\n * @param {number} val ?\n * @param {string} text ?\n * @param {boolean} isFraction ?\n * @returns {void} ?\n */\n NumberFormat.checkRange = function (val, text, isFraction) {\n var range = isFraction ? [0, 20] : [1, 21];\n if (val < range[0] || val > range[1]) {\n throwError(text + 'value must be within the range' + range[0] + 'to' + range[1]);\n }\n };\n /**\n * Returns formatted numeric string for provided formatting options\n *\n * @param {number} value ?\n * @param {base.GenericFormatOptions} fOptions ?\n * @param {CommonOptions} dOptions ?\n * @returns {string} ?\n */\n NumberFormat.intNumberFormatter = function (value, fOptions, dOptions, option) {\n var curData;\n if (isUndefined(fOptions.nData.type)) {\n return undefined;\n }\n else {\n if (value < 0) {\n value = value * -1;\n curData = fOptions.nData;\n }\n else if (value === 0) {\n curData = fOptions.zeroData || fOptions.pData;\n }\n else {\n curData = fOptions.pData;\n }\n var fValue = '';\n if (curData.isPercent) {\n value = value * 100;\n }\n if (curData.groupOne) {\n fValue = this.processSignificantDigits(value, curData.minimumSignificantDigits, curData.maximumSignificantDigits);\n }\n else {\n fValue = this.processFraction(value, curData.minimumFractionDigits, curData.maximumFractionDigits, option);\n if (curData.minimumIntegerDigits) {\n fValue = this.processMinimumIntegers(fValue, curData.minimumIntegerDigits);\n }\n if (dOptions.isCustomFormat && curData.minimumFractionDigits < curData.maximumFractionDigits\n && /\\d+\\.\\d+/.test(fValue)) {\n var temp = fValue.split('.');\n var decimalPart = temp[1];\n var len = decimalPart.length;\n for (var i = len - 1; i >= 0; i--) {\n if (decimalPart[\"\" + i] === '0' && i >= curData.minimumFractionDigits) {\n decimalPart = decimalPart.slice(0, i);\n }\n else {\n break;\n }\n }\n fValue = temp[0] + '.' + decimalPart;\n }\n }\n if (curData.type === 'scientific') {\n fValue = value.toExponential(curData.maximumFractionDigits);\n fValue = fValue.replace('e', dOptions.numberMapper.numberSymbols[mapper[4]]);\n }\n fValue = fValue.replace('.', dOptions.numberMapper.numberSymbols[mapper[3]]);\n fValue = curData.format === \"#,###,,;(#,###,,)\" ? this.customPivotFormat(parseInt(fValue)) : fValue;\n if (curData.useGrouping) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n fValue = this.groupNumbers(fValue, curData.groupData.primary, curData.groupSeparator || ',', dOptions.numberMapper.numberSymbols[mapper[3]] || '.', curData.groupData.secondary);\n }\n fValue = parser.convertValueParts(fValue, base.latnParseRegex, dOptions.numberMapper.mapper);\n if (curData.nlead === 'N/A') {\n return curData.nlead;\n }\n else {\n if (fValue === '0' && option && option.format === '0') {\n return fValue + curData.nend;\n }\n return curData.nlead + fValue + curData.nend;\n }\n }\n };\n /**\n * Returns significant digits processed numeric string\n *\n * @param {number} value ?\n * @param {number} min ?\n * @param {number} max ?\n * @returns {string} ?\n */\n NumberFormat.processSignificantDigits = function (value, min, max) {\n var temp = value + '';\n var tn;\n var length = temp.length;\n if (length < min) {\n return value.toPrecision(min);\n }\n else {\n temp = value.toPrecision(max);\n tn = +temp;\n return tn + '';\n }\n };\n /**\n * Returns grouped numeric string\n *\n * @param {string} val ?\n * @param {number} level1 ?\n * @param {string} sep ?\n * @param {string} decimalSymbol ?\n * @param {number} level2 ?\n * @returns {string} ?\n */\n NumberFormat.groupNumbers = function (val, level1, sep, decimalSymbol, level2) {\n var flag = !isNullOrUndefined(level2) && level2 !== 0;\n var split = val.split(decimalSymbol);\n var prefix = split[0];\n var length = prefix.length;\n var str = '';\n while (length > level1) {\n str = prefix.slice(length - level1, length) + (str.length ?\n (sep + str) : '');\n length -= level1;\n if (flag) {\n level1 = level2;\n flag = false;\n }\n }\n split[0] = prefix.slice(0, length) + (str.length ? sep : '') + str;\n return split.join(decimalSymbol);\n };\n /**\n * Returns fraction processed numeric string\n *\n * @param {number} value ?\n * @param {number} min ?\n * @param {number} max ?\n * @returns {string} ?\n */\n NumberFormat.processFraction = function (value, min, max, option) {\n var temp = (value + '').split('.')[1];\n var length = temp ? temp.length : 0;\n if (min && length < min) {\n var ret = '';\n if (length === 0) {\n ret = value.toFixed(min);\n }\n else {\n ret += value;\n for (var j = 0; j < min - length; j++) {\n ret += '0';\n }\n return ret;\n }\n return value.toFixed(min);\n }\n else if (!isNullOrUndefined(max) && (length > max || max === 0)) {\n return value.toFixed(max);\n }\n var str = value + '';\n if (str[0] === '0' && option && option.format === '###.00') {\n str = str.slice(1);\n }\n return str;\n };\n /**\n * Returns integer processed numeric string\n *\n * @param {string} value ?\n * @param {number} min ?\n * @returns {string} ?\n */\n NumberFormat.processMinimumIntegers = function (value, min) {\n var temp = value.split('.');\n var lead = temp[0];\n var len = lead.length;\n if (len < min) {\n for (var i = 0; i < min - len; i++) {\n lead = '0' + lead;\n }\n temp[0] = lead;\n }\n return temp.join('.');\n };\n /**\n * Returns custom format for pivot table\n *\n * @param {number} value ?\n */\n NumberFormat.customPivotFormat = function (value) {\n if (value >= 500000) {\n value /= 1000000;\n var _a = value.toString().split(\".\"), integer = _a[0], decimal = _a[1];\n return decimal && +decimal.substring(0, 1) >= 5\n ? Math.ceil(value).toString()\n : Math.floor(value).toString();\n }\n return \"\";\n };\n return NumberFormat;\n}());\nexport { NumberFormat };\n","import { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nimport { isUndefined, throwError, getValue, isNullOrUndefined, isBlazor } from '../util';\nimport { datePartMatcher } from './date-formatter';\nimport { HijriParser } from '../hijri-parser';\nvar standalone = 'stand-alone';\nvar latnRegex = /^[0-9]*$/;\nvar timeSetter = {\n minute: 'setMinutes',\n hour: 'setHours',\n second: 'setSeconds',\n day: 'setDate',\n month: 'setMonth',\n milliseconds: 'setMilliseconds'\n};\nvar month = 'months';\n/* tslint:disable no-any */\n/**\n * Date Parser.\n *\n * @private\n */\nvar DateParser = /** @class */ (function () {\n function DateParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n *\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} option - Specific the format in which string date will be parsed.\n * @param {Object} cldr - Specifies the global cldr data collection.\n * @returns {Function} ?\n */\n DateParser.dateParser = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, option.calendar);\n var numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), false, isBlazor());\n var parseOptions = {};\n if (isBlazor() && option.isServerRendered) {\n option = base.compareBlazorDateFormats(option, culture);\n }\n var resPattern = option.format ||\n base.getResultantPattern(option.skeleton, dependable.dateObject, option.type, false, isBlazor() ? culture : '');\n var regexString = '';\n var hourOnly;\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n }\n else {\n resPattern = base.ConvertDateToWeekFormat(resPattern);\n parseOptions = { isIslamic: base.islamicRegex.test(option.calendar), pattern: resPattern, evalposition: {}, culture: culture };\n var patternMatch = resPattern.match(base.dateParseRegex) || [];\n var length_1 = patternMatch.length;\n var gmtCorrection = 0;\n var zCorrectTemp = 0;\n var isgmtTraversed = false;\n var nRegx = numOptions.numericRegex;\n // eslint-disable-next-line\n var numMapper = isBlazor() ? dependable.parserObject.numbers :\n parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n for (var i = 0; i < length_1; i++) {\n var str = patternMatch[parseInt(i.toString(), 10)];\n var len = str.length;\n var char = (str[0] === 'K') ? 'h' : str[0];\n var isNumber = void 0;\n var canUpdate = void 0;\n // eslint-disable-next-line\n var charKey = datePartMatcher[char];\n var optional = (len === 2) ? '' : '?';\n if (isgmtTraversed) {\n gmtCorrection = zCorrectTemp;\n isgmtTraversed = false;\n }\n switch (char) {\n case 'E':\n case 'c':\n // eslint-disable-next-line\n var weekData = void 0;\n if (isBlazor()) {\n // eslint-disable-next-line\n weekData = getValue('days.' + base.monthIndex[len], dependable.dateObject);\n }\n else {\n // eslint-disable-next-line\n weekData = dependable.dateObject[base.days][standalone][base.monthIndex[len]];\n }\n // eslint-disable-next-line\n var weekObject = parser.reverseObject(weekData);\n // tslint:enable\n regexString += '(' + Object.keys(weekObject).join('|') + ')';\n break;\n case 'M':\n case 'L':\n case 'd':\n case 'm':\n case 's':\n case 'h':\n case 'H':\n case 'f':\n canUpdate = true;\n if ((char === 'M' || char === 'L') && len > 2) {\n var monthData = void 0;\n if (isBlazor()) {\n // eslint-disable-next-line\n monthData = getValue('months.' + base.monthIndex[len], dependable.dateObject);\n }\n else {\n // eslint-disable-next-line\n monthData = dependable.dateObject[month][standalone][base.monthIndex[len]];\n }\n // eslint-disable-next-line\n parseOptions[charKey] = parser.reverseObject(monthData);\n // eslint-disable-next-line\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n }\n else if (char === 'f') {\n if (len > 3) {\n continue;\n }\n isNumber = true;\n regexString += '(' + nRegx + nRegx + '?' + nRegx + '?' + ')';\n }\n else {\n isNumber = true;\n regexString += '(' + nRegx + nRegx + optional + ')';\n }\n if (char === 'h') {\n parseOptions.hour12 = true;\n }\n break;\n case 'W':\n // eslint-disable-next-line\n var opt = len === 1 ? '?' : '';\n regexString += '(' + nRegx + opt + nRegx + ')';\n break;\n case 'y':\n canUpdate = isNumber = true;\n if (len === 2) {\n regexString += '(' + nRegx + nRegx + ')';\n }\n else {\n regexString += '(' + nRegx + '{' + len + ',})';\n }\n break;\n case 'a':\n canUpdate = true;\n // eslint-disable-next-line\n var periodValur = isBlazor() ?\n getValue('dayPeriods', dependable.dateObject) :\n getValue('dayPeriods.format.wide', dependable.dateObject);\n // eslint-disable-next-line\n parseOptions[charKey] = parser.reverseObject(periodValur);\n // eslint-disable-next-line\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n break;\n case 'G':\n canUpdate = true;\n // eslint-disable-next-line\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n // eslint-disable-next-line\n parseOptions[charKey] = parser.reverseObject(isBlazor() ?\n getValue('eras', dependable.dateObject) : getValue('eras.' + eText, dependable.dateObject));\n // eslint-disable-next-line\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + '?)';\n break;\n case 'z':\n // eslint-disable-next-line\n var tval = new Date().getTimezoneOffset();\n canUpdate = (tval !== 0);\n // eslint-disable-next-line\n parseOptions[charKey] = getValue('dates.timeZoneNames', dependable.parserObject);\n // eslint-disable-next-line\n var tzone = parseOptions[charKey];\n hourOnly = (len < 4);\n // eslint-disable-next-line\n var hpattern = hourOnly ? '+H;-H' : tzone.hourFormat;\n hpattern = hpattern.replace(/:/g, numMapper.timeSeparator);\n regexString += '(' + this.parseTimeZoneRegx(hpattern, tzone, nRegx) + ')?';\n isgmtTraversed = true;\n zCorrectTemp = hourOnly ? 6 : 12;\n break;\n case '\\'':\n // eslint-disable-next-line\n var iString = str.replace(/'/g, '');\n regexString += '(' + iString + ')?';\n break;\n default:\n regexString += '([\\\\D])';\n break;\n }\n if (canUpdate) {\n parseOptions.evalposition[\"\" + charKey] = { isNumber: isNumber, pos: i + 1 + gmtCorrection, hourOnly: hourOnly };\n }\n if (i === length_1 - 1 && !isNullOrUndefined(regexString)) {\n var regExp = RegExp;\n parseOptions.parserRegex = new regExp('^' + regexString + '$', 'i');\n }\n }\n }\n return function (value) {\n var parsedDateParts = _this.internalDateParse(value, parseOptions, numOptions);\n if (isNullOrUndefined(parsedDateParts) || !Object.keys(parsedDateParts).length) {\n return null;\n }\n if (parseOptions.isIslamic) {\n var dobj = {};\n var tYear = parsedDateParts.year;\n var tDate = parsedDateParts.day;\n var tMonth = parsedDateParts.month;\n var ystrig = tYear ? (tYear + '') : '';\n var is2DigitYear = (ystrig.length === 2);\n if (!tYear || !tMonth || !tDate || is2DigitYear) {\n dobj = HijriParser.getHijriDate(new Date());\n }\n if (is2DigitYear) {\n tYear = parseInt((dobj.year + '').slice(0, 2) + ystrig, 10);\n }\n // tslint:disable-next-line\n var dateObject = HijriParser.toGregorian(tYear || dobj.year, tMonth || dobj.month, tDate || dobj.date);\n parsedDateParts.year = dateObject.getFullYear();\n parsedDateParts.month = dateObject.getMonth() + 1;\n parsedDateParts.day = dateObject.getDate();\n }\n return _this.getDateObject(parsedDateParts);\n };\n };\n /* tslint:disable */\n /**\n * Returns date object for provided date options\n *\n * @param {DateParts} options ?\n * @param {Date} value ?\n * @returns {Date} ?\n */\n DateParser.getDateObject = function (options, value) {\n var res = value || new Date();\n res.setMilliseconds(0);\n var tKeys = ['hour', 'minute', 'second', 'milliseconds', 'month', 'day'];\n var y = options.year;\n var desig = options.designator;\n var tzone = options.timeZone;\n if (!isUndefined(y)) {\n var len = (y + '').length;\n if (len <= 2) {\n var century = Math.floor(res.getFullYear() / 100) * 100;\n y += century;\n }\n res.setFullYear(y);\n }\n for (var _i = 0, tKeys_1 = tKeys; _i < tKeys_1.length; _i++) {\n var key = tKeys_1[_i];\n // eslint-disable-next-line\n var tValue = options[key];\n if (isUndefined(tValue) && key === 'day') {\n res.setDate(1);\n }\n if (!isUndefined(tValue)) {\n if (key === 'month') {\n tValue -= 1;\n if (tValue < 0 || tValue > 11) {\n return new Date('invalid');\n }\n var pDate = res.getDate();\n res.setDate(1);\n // eslint-disable-next-line\n res[timeSetter[key]](tValue);\n var lDate = new Date(res.getFullYear(), tValue + 1, 0).getDate();\n res.setDate(pDate < lDate ? pDate : lDate);\n }\n else {\n if (key === 'day') {\n var lastDay = new Date(res.getFullYear(), res.getMonth() + 1, 0).getDate();\n if ((tValue < 1 || tValue > lastDay)) {\n return null;\n }\n }\n // eslint-disable-next-line\n res[timeSetter[key]](tValue);\n }\n }\n }\n if (!isUndefined(desig)) {\n var hour = res.getHours();\n if (desig === 'pm') {\n res.setHours(hour + (hour === 12 ? 0 : 12));\n }\n else if (hour === 12) {\n res.setHours(0);\n }\n }\n if (!isUndefined(tzone)) {\n var tzValue = tzone - res.getTimezoneOffset();\n if (tzValue !== 0) {\n res.setMinutes(res.getMinutes() + tzValue);\n }\n }\n return res;\n };\n /**\n * Returns date parsing options for provided value along with parse and numeric options\n *\n * @param {string} value ?\n * @param {ParseOptions} parseOptions ?\n * @param {NumericOptions} num ?\n * @returns {DateParts} ?\n */\n DateParser.internalDateParse = function (value, parseOptions, num) {\n var matches = value.match(parseOptions.parserRegex);\n var retOptions = { 'hour': 0, 'minute': 0, 'second': 0 };\n if (isNullOrUndefined(matches)) {\n return null;\n }\n else {\n var props = Object.keys(parseOptions.evalposition);\n for (var _i = 0, props_1 = props; _i < props_1.length; _i++) {\n var prop = props_1[_i];\n var curObject = parseOptions.evalposition[\"\" + prop];\n var matchString = matches[curObject.pos];\n if (curObject.isNumber) {\n // eslint-disable-next-line\n retOptions[prop] = this.internalNumberParser(matchString, num);\n }\n else {\n if (prop === 'timeZone' && !isUndefined(matchString)) {\n var pos = curObject.pos;\n var val = void 0;\n var tmatch = matches[pos + 1];\n var flag = !isUndefined(tmatch);\n if (curObject.hourOnly) {\n val = this.getZoneValue(flag, tmatch, matches[pos + 4], num) * 60;\n }\n else {\n val = this.getZoneValue(flag, tmatch, matches[pos + 7], num) * 60;\n val += this.getZoneValue(flag, matches[pos + 4], matches[pos + 10], num);\n }\n if (!isNullOrUndefined(val)) {\n retOptions[\"\" + prop] = val;\n }\n }\n else {\n // eslint-disable-next-line\n matchString = ((prop === 'month') && (!parseOptions.isIslamic) && (parseOptions.culture === 'en' || parseOptions.culture === 'en-GB' || parseOptions.culture === 'en-US'))\n ? matchString[0].toUpperCase() + matchString.substring(1).toLowerCase() : matchString;\n // eslint-disable-next-line\n retOptions[prop] = parseOptions[prop][matchString];\n }\n }\n }\n if (parseOptions.hour12) {\n retOptions.hour12 = true;\n }\n }\n return retOptions;\n };\n /**\n * Returns parsed number for provided Numeric string and Numeric Options\n *\n * @param {string} value ?\n * @param {NumericOptions} option ?\n * @returns {number} ?\n */\n DateParser.internalNumberParser = function (value, option) {\n value = parser.convertValueParts(value, option.numberParseRegex, option.numericPair);\n if (latnRegex.test(value)) {\n return +value;\n }\n return null;\n };\n /**\n * Returns parsed time zone RegExp for provided hour format and time zone\n *\n * @param {string} hourFormat ?\n * @param {base.TimeZoneOptions} tZone ?\n * @param {string} nRegex ?\n * @returns {string} ?\n */\n DateParser.parseTimeZoneRegx = function (hourFormat, tZone, nRegex) {\n var pattern = tZone.gmtFormat;\n var ret;\n var cRegex = '(' + nRegex + ')' + '(' + nRegex + ')';\n var splitStr;\n ret = hourFormat.replace('+', '\\\\+');\n if (hourFormat.indexOf('HH') !== -1) {\n ret = ret.replace(/HH|mm/g, '(' + cRegex + ')');\n }\n else {\n ret = ret.replace(/H|m/g, '(' + cRegex + '?)');\n }\n // eslint-disable-next-line\n splitStr = (ret.split(';').map(function (str) {\n return pattern.replace('{0}', str);\n }));\n ret = splitStr.join('|') + '|' + tZone.gmtZeroFormat;\n return ret;\n };\n /**\n * Returns zone based value.\n *\n * @param {boolean} flag ?\n * @param {string} val1 ?\n * @param {string} val2 ?\n * @param {NumericOptions} num ?\n * @returns {number} ?\n */\n DateParser.getZoneValue = function (flag, val1, val2, num) {\n var ival = flag ? val1 : val2;\n if (!ival) {\n return 0;\n }\n var value = this.internalNumberParser(ival, num);\n if (flag) {\n return -value;\n }\n return value;\n };\n return DateParser;\n}());\nexport { DateParser };\n","import { extend, isNullOrUndefined, isBlazor, getValue } from '../util';\nimport { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nvar regExp = RegExp;\nvar parseRegex = new regExp('^([^0-9]*)' + '(([0-9,]*[0-9]+)(\\.[0-9]+)?)' + '([Ee][+-]?[0-9]+)?([^0-9]*)$');\nvar groupRegex = /,/g;\nvar keys = ['minusSign', 'infinity'];\n/**\n * Module for Number Parser.\n *\n * @private\n */\nvar NumberParser = /** @class */ (function () {\n function NumberParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n *\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} option - Specific the format in which number will parsed.\n * @param {Object} cldr - Specifies the global cldr data collection.\n * @returns {Function} ?\n */\n NumberParser.numberParser = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, '', true);\n var parseOptions = { custom: true };\n var numOptions;\n if ((base.formatRegex.test(option.format)) || !(option.format)) {\n extend(parseOptions, base.getProperNumericSkeleton(option.format || 'N'));\n parseOptions.custom = false;\n if (!parseOptions.fractionDigits) {\n if (option.maximumFractionDigits) {\n parseOptions.maximumFractionDigits = option.maximumFractionDigits;\n }\n }\n }\n else {\n extend(parseOptions, base.customFormat(option.format, null, null));\n }\n var numbers = getValue('numbers', dependable.parserObject);\n // eslint-disable-next-line\n numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), true, isBlazor());\n parseOptions.symbolRegex = parser.getSymbolRegex(Object.keys(numOptions.symbolMatch));\n // eslint-disable-next-line\n parseOptions.infinity = numOptions.symbolNumberSystem[keys[1]];\n var symbolpattern;\n if (!isBlazor()) {\n symbolpattern = base.getSymbolPattern(parseOptions.type, numOptions.numberSystem, dependable.numericObject, parseOptions.isAccount);\n if (symbolpattern) {\n symbolpattern = symbolpattern.replace(/\\u00A4/g, base.defaultCurrency);\n var split = symbolpattern.split(';');\n parseOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, '');\n parseOptions.pData = base.getFormatData(split[0], true, '');\n }\n }\n else {\n parseOptions.nData = extend({}, {}, getValue(parseOptions.type + 'nData', numbers));\n parseOptions.pData = extend({}, {}, getValue(parseOptions.type + 'pData', numbers));\n if (parseOptions.type === 'currency' && option.currency) {\n base.replaceBlazorCurrency([parseOptions.pData, parseOptions.nData], getValue('currencySymbol', numbers), option.currency);\n }\n }\n return function (value) {\n return _this.getParsedNumber(value, parseOptions, numOptions);\n };\n };\n /**\n * Returns parsed number for the provided formatting options\n *\n * @param {string} value ?\n * @param {NumericParts} options ?\n * @param {NumericOptions} numOptions ?\n * @returns {number} ?\n */\n NumberParser.getParsedNumber = function (value, options, numOptions) {\n var isNegative;\n var isPercent;\n var tempValue;\n var lead;\n var end;\n var ret;\n if (value.indexOf(options.infinity) !== -1) {\n return Infinity;\n }\n else {\n value = parser.convertValueParts(value, options.symbolRegex, numOptions.symbolMatch);\n value = parser.convertValueParts(value, numOptions.numberParseRegex, numOptions.numericPair);\n value = value.indexOf('-') !== -1 ? value.replace('-.', '-0.') : value;\n if (value.indexOf('.') === 0) {\n value = '0' + value;\n }\n var matches = value.match(parseRegex);\n if (isNullOrUndefined(matches)) {\n return NaN;\n }\n lead = matches[1];\n tempValue = matches[2];\n var exponent = matches[5];\n end = matches[6];\n isNegative = options.custom ? ((lead === options.nData.nlead) && (end === options.nData.nend)) :\n ((lead.indexOf(options.nData.nlead) !== -1) && (end.indexOf(options.nData.nend) !== -1));\n isPercent = isNegative ?\n options.nData.isPercent :\n options.pData.isPercent;\n tempValue = tempValue.replace(groupRegex, '');\n if (exponent) {\n tempValue += exponent;\n }\n ret = +tempValue;\n if (options.type === 'percent' || isPercent) {\n ret = ret / 100;\n }\n if (options.custom || options.fractionDigits) {\n ret = parseFloat(ret.toFixed(options.custom ?\n (isNegative ? options.nData.maximumFractionDigits : options.pData.maximumFractionDigits) : options.fractionDigits));\n }\n if (options.maximumFractionDigits) {\n ret = this.convertMaxFracDigits(tempValue, options, ret, isNegative);\n }\n if (isNegative) {\n ret *= -1;\n }\n return ret;\n }\n };\n NumberParser.convertMaxFracDigits = function (value, options, ret, isNegative) {\n var decimalSplitValue = value.split('.');\n if (decimalSplitValue[1] && decimalSplitValue[1].length > options.maximumFractionDigits) {\n ret = +(ret.toFixed(options.custom ?\n (isNegative ? options.nData.maximumFractionDigits : options.pData.maximumFractionDigits) : options.maximumFractionDigits));\n }\n return ret;\n };\n return NumberParser;\n}());\nexport { NumberParser };\n","import { isNullOrUndefined, getValue, extend, isBlazor } from './util';\nvar Observer = /** @class */ (function () {\n function Observer(context) {\n this.ranArray = [];\n this.boundedEvents = {};\n if (isNullOrUndefined(context)) {\n return;\n }\n this.context = context;\n }\n /**\n * To attach handler for given property in current context.\n *\n * @param {string} property - specifies the name of the event.\n * @param {Function} handler - Specifies the handler function to be called while event notified.\n * @param {Object} context - Specifies the context binded to the handler.\n * @param {string} id - specifies the random generated id.\n * @returns {void}\n */\n Observer.prototype.on = function (property, handler, context, id) {\n if (isNullOrUndefined(handler)) {\n return;\n }\n var cntxt = context || this.context;\n if (this.notExist(property)) {\n this.boundedEvents[\"\" + property] = [{ handler: handler, context: cntxt }];\n return;\n }\n if (!isNullOrUndefined(id)) {\n if (this.ranArray.indexOf(id) === -1) {\n this.ranArray.push(id);\n this.boundedEvents[\"\" + property].push({ handler: handler, context: cntxt, id: id });\n }\n }\n else if (!this.isHandlerPresent(this.boundedEvents[\"\" + property], handler)) {\n this.boundedEvents[\"\" + property].push({ handler: handler, context: cntxt });\n }\n };\n /**\n * To remove handlers from a event attached using on() function.\n *\n * @param {string} property - specifies the name of the event.\n * @param {Function} handler - Optional argument specifies the handler function to be called while event notified.\n * @param {string} id - specifies the random generated id.\n * @returns {void} ?\n */\n Observer.prototype.off = function (property, handler, id) {\n if (this.notExist(property)) {\n return;\n }\n var curObject = getValue(property, this.boundedEvents);\n if (handler) {\n for (var i = 0; i < curObject.length; i++) {\n if (id) {\n if (curObject[parseInt(i.toString(), 10)].id === id) {\n curObject.splice(i, 1);\n var indexLocation = this.ranArray.indexOf(id);\n if (indexLocation !== -1) {\n this.ranArray.splice(indexLocation, 1);\n }\n break;\n }\n }\n else if (handler === curObject[parseInt(i.toString(), 10)].handler) {\n curObject.splice(i, 1);\n break;\n }\n }\n }\n else {\n delete this.boundedEvents[\"\" + property];\n }\n };\n /**\n * To notify the handlers in the specified event.\n *\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} argument - Additional parameters to pass while calling the handler.\n * @param {Function} successHandler - this function will invoke after event successfully triggered\n * @param {Function} errorHandler - this function will invoke after event if it was failure to call.\n * @returns {void} ?\n */\n Observer.prototype.notify = function (property, argument, successHandler, errorHandler) {\n if (this.notExist(property)) {\n if (successHandler) {\n successHandler.call(this, argument);\n }\n return;\n }\n if (argument) {\n argument.name = property;\n }\n var blazor = 'Blazor';\n var curObject = getValue(property, this.boundedEvents).slice(0);\n if (window[\"\" + blazor]) {\n return this.blazorCallback(curObject, argument, successHandler, errorHandler, 0);\n }\n else {\n for (var _i = 0, curObject_1 = curObject; _i < curObject_1.length; _i++) {\n var cur = curObject_1[_i];\n cur.handler.call(cur.context, argument);\n }\n if (successHandler) {\n successHandler.call(this, argument);\n }\n }\n };\n Observer.prototype.blazorCallback = function (objs, argument, successHandler, errorHandler, index) {\n var _this = this;\n var isTrigger = index === objs.length - 1;\n if (index < objs.length) {\n var obj_1 = objs[parseInt(index.toString(), 10)];\n var promise = obj_1.handler.call(obj_1.context, argument);\n if (promise && typeof promise.then === 'function') {\n if (!successHandler) {\n return promise;\n }\n promise.then(function (data) {\n data = typeof data === 'string' && _this.isJson(data) ? JSON.parse(data, _this.dateReviver) : data;\n extend(argument, argument, data, true);\n if (successHandler && isTrigger) {\n successHandler.call(obj_1.context, argument);\n }\n else {\n return _this.blazorCallback(objs, argument, successHandler, errorHandler, index + 1);\n }\n }).catch(function (data) {\n if (errorHandler) {\n errorHandler.call(obj_1.context, typeof data === 'string' &&\n _this.isJson(data) ? JSON.parse(data, _this.dateReviver) : data);\n }\n });\n }\n else if (successHandler && isTrigger) {\n successHandler.call(obj_1.context, argument);\n }\n else {\n return this.blazorCallback(objs, argument, successHandler, errorHandler, index + 1);\n }\n }\n };\n // eslint-disable-next-line\n Observer.prototype.dateReviver = function (key, value) {\n var dPattern = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/;\n if (isBlazor && typeof value === 'string' && value.match(dPattern) !== null) {\n return (new Date(value));\n }\n return (value);\n };\n Observer.prototype.isJson = function (value) {\n try {\n JSON.parse(value);\n }\n catch (e) {\n return false;\n }\n return true;\n };\n /**\n * To destroy handlers in the event\n *\n * @returns {void} ?\n */\n Observer.prototype.destroy = function () {\n this.boundedEvents = this.context = undefined;\n };\n /**\n * Returns if the property exists.\n *\n * @param {string} prop ?\n * @returns {boolean} ?\n */\n Observer.prototype.notExist = function (prop) {\n // eslint-disable-next-line\n return this.boundedEvents.hasOwnProperty(prop) === false || this.boundedEvents[prop].length <= 0;\n };\n /**\n * Returns if the handler is present.\n *\n * @param {BoundOptions[]} boundedEvents ?\n * @param {Function} handler ?\n * @returns {boolean} ?\n */\n Observer.prototype.isHandlerPresent = function (boundedEvents, handler) {\n for (var _i = 0, boundedEvents_1 = boundedEvents; _i < boundedEvents_1.length; _i++) {\n var cur = boundedEvents_1[_i];\n if (cur.handler === handler) {\n return true;\n }\n }\n return false;\n };\n return Observer;\n}());\nexport { Observer };\n","import { DateFormat } from './intl/date-formatter';\nimport { NumberFormat } from './intl/number-formatter';\nimport { DateParser } from './intl/date-parser';\nimport { NumberParser } from './intl/number-parser';\nimport { IntlBase } from './intl/intl-base';\nimport { extend, getValue, isBlazor } from './util';\nimport { Observer } from './observer';\n/**\n * Specifies the observer used for external change detection.\n */\nexport var onIntlChange = new Observer();\n/**\n * Specifies the default rtl status for EJ2 components.\n */\nexport var rightToLeft = false;\n/**\n * Specifies the CLDR data loaded for internationalization functionalities.\n *\n * @private\n */\nexport var cldrData = {};\n/**\n * Specifies the default culture value to be considered.\n *\n * @private\n */\nexport var defaultCulture = 'en-US';\n/**\n * Specifies default currency code to be considered\n *\n * @private\n */\nexport var defaultCurrencyCode = 'USD';\nvar mapper = ['numericObject', 'dateObject'];\n/**\n * Internationalization class provides support to parse and format the number and date object to the desired format.\n * ```typescript\n * // To set the culture globally\n * setCulture('en-GB');\n *\n * // To set currency code globally\n * setCurrencyCode('EUR');\n *\n * //Load cldr data\n * loadCldr(gregorainData);\n * loadCldr(timeZoneData);\n * loadCldr(numbersData);\n * loadCldr(numberSystemData);\n *\n * // To use formatter in component side\n * let Intl:Internationalization = new Internationalization();\n *\n * // Date formatting\n * let dateFormatter: Function = Intl.getDateFormat({skeleton:'long',type:'dateTime'});\n * dateFormatter(new Date('11/2/2016'));\n * dateFormatter(new Date('25/2/2030'));\n * Intl.formatDate(new Date(),{skeleton:'E'});\n *\n * //Number formatting\n * let numberFormatter: Function = Intl.getNumberFormat({skeleton:'C5'})\n * numberFormatter(24563334);\n * Intl.formatNumber(123123,{skeleton:'p2'});\n *\n * // Date parser\n * let dateParser: Function = Intl.getDateParser({skeleton:'short',type:'time'});\n * dateParser('10:30 PM');\n * Intl.parseDate('10',{skeleton:'H'});\n * ```\n */\nvar Internationalization = /** @class */ (function () {\n function Internationalization(cultureName) {\n if (cultureName) {\n this.culture = cultureName;\n }\n }\n /**\n * Returns the format function for given options.\n *\n * @param {DateFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function} ?\n */\n Internationalization.prototype.getDateFormat = function (options) {\n return DateFormat.dateFormat(this.getCulture(), options || { type: 'date', skeleton: 'short' }, cldrData);\n };\n /**\n * Returns the format function for given options.\n *\n * @param {NumberFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function} ?\n */\n Internationalization.prototype.getNumberFormat = function (options) {\n if (options && !options.currency) {\n options.currency = defaultCurrencyCode;\n }\n if (isBlazor() && options && !options.format) {\n options.minimumFractionDigits = 0;\n }\n return NumberFormat.numberFormatter(this.getCulture(), options || {}, cldrData);\n };\n /**\n * Returns the parser function for given options.\n *\n * @param {DateFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function} ?\n */\n Internationalization.prototype.getDateParser = function (options) {\n return DateParser.dateParser(this.getCulture(), options || { skeleton: 'short', type: 'date' }, cldrData);\n };\n /**\n * Returns the parser function for given options.\n *\n * @param {NumberFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function} ?\n */\n Internationalization.prototype.getNumberParser = function (options) {\n if (isBlazor() && options && !options.format) {\n options.minimumFractionDigits = 0;\n }\n return NumberParser.numberParser(this.getCulture(), options || { format: 'N' }, cldrData);\n };\n /**\n * Returns the formatted string based on format options.\n *\n * @param {number} value - Specifies the number to format.\n * @param {NumberFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string} ?\n */\n Internationalization.prototype.formatNumber = function (value, option) {\n return this.getNumberFormat(option)(value);\n };\n /**\n * Returns the formatted date string based on format options.\n *\n * @param {Date} value - Specifies the number to format.\n * @param {DateFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string} ?\n */\n Internationalization.prototype.formatDate = function (value, option) {\n return this.getDateFormat(option)(value);\n };\n /**\n * Returns the date object for given date string and options.\n *\n * @param {string} value - Specifies the string to parse.\n * @param {DateFormatOptions} option - Specifies the parse options in which the date string will be parsed.\n * @returns {Date} ?\n */\n Internationalization.prototype.parseDate = function (value, option) {\n return this.getDateParser(option)(value);\n };\n /**\n * Returns the number object from the given string value and options.\n *\n * @param {string} value - Specifies the string to parse.\n * @param {NumberFormatOptions} option - Specifies the parse options in which the string number will be parsed.\n * @returns {number} ?\n */\n Internationalization.prototype.parseNumber = function (value, option) {\n return this.getNumberParser(option)(value);\n };\n /**\n * Returns Native Date Time Pattern\n *\n * @param {DateFormatOptions} option - Specifies the parse options for resultant date time pattern.\n * @param {boolean} isExcelFormat - Specifies format value to be converted to excel pattern.\n * @returns {string} ?\n * @private\n */\n Internationalization.prototype.getDatePattern = function (option, isExcelFormat) {\n return IntlBase.getActualDateTimeFormat(this.getCulture(), option, cldrData, isExcelFormat);\n };\n /**\n * Returns Native Number Pattern\n *\n * @param {NumberFormatOptions} option - Specifies the parse options for resultant number pattern.\n * @param {boolean} isExcel ?\n * @returns {string} ?\n * @private\n */\n Internationalization.prototype.getNumberPattern = function (option, isExcel) {\n return IntlBase.getActualNumberFormat(this.getCulture(), option, cldrData, isExcel);\n };\n /**\n * Returns the First Day of the Week\n *\n * @returns {number} ?\n */\n Internationalization.prototype.getFirstDayOfWeek = function () {\n return IntlBase.getWeekData(this.getCulture(), cldrData);\n };\n /**\n * Returns the culture\n *\n * @returns {string} ?\n */\n Internationalization.prototype.getCulture = function () {\n return this.culture || defaultCulture;\n };\n return Internationalization;\n}());\nexport { Internationalization };\n/**\n * Set the default culture to all EJ2 components\n *\n * @param {string} cultureName - Specifies the culture name to be set as default culture.\n * @returns {void} ?\n */\nexport function setCulture(cultureName) {\n defaultCulture = cultureName;\n onIntlChange.notify('notifyExternalChange', { 'locale': defaultCulture });\n}\n/**\n * Set the default currency code to all EJ2 components\n *\n * @param {string} currencyCode Specifies the culture name to be set as default culture.\n * @returns {void} ?\n */\nexport function setCurrencyCode(currencyCode) {\n defaultCurrencyCode = currencyCode;\n onIntlChange.notify('notifyExternalChange', { 'currencyCode': defaultCurrencyCode });\n}\n/**\n * Load the CLDR data into context\n *\n * @param {Object[]} data Specifies the CLDR data's to be used for formatting and parser.\n * @returns {void} ?\n */\nexport function loadCldr() {\n var data = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n data[_i] = arguments[_i];\n }\n for (var _a = 0, data_1 = data; _a < data_1.length; _a++) {\n var obj = data_1[_a];\n extend(cldrData, obj, {}, true);\n }\n}\n/**\n * To enable or disable RTL functionality for all components globally.\n *\n * @param {boolean} status - Optional argument Specifies the status value to enable or disable rtl option.\n * @returns {void} ?\n */\nexport function enableRtl(status) {\n if (status === void 0) { status = true; }\n rightToLeft = status;\n onIntlChange.notify('notifyExternalChange', { enableRtl: rightToLeft });\n}\n/**\n * To get the numeric CLDR object for given culture\n *\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @param {string} type ?\n * @returns {Object} ?\n * @ignore\n * @private\n */\nexport function getNumericObject(locale, type) {\n // eslint-disable-next-line\n var numObject = IntlBase.getDependables(cldrData, locale, '', true)[mapper[0]];\n // eslint-disable-next-line\n var dateObject = IntlBase.getDependables(cldrData, locale, '')[mapper[1]];\n var numSystem = getValue('defaultNumberingSystem', numObject);\n var symbPattern = isBlazor() ? getValue('numberSymbols', numObject) : getValue('symbols-numberSystem-' + numSystem, numObject);\n var pattern = IntlBase.getSymbolPattern(type || 'decimal', numSystem, numObject, false);\n return extend(symbPattern, IntlBase.getFormatData(pattern, true, '', true), { 'dateSeparator': IntlBase.getDateSeparator(dateObject) });\n}\n/**\n * To get the numeric CLDR number base object for given culture\n *\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @param {string} currency - Specifies the currency for which numericObject to be returned.\n * @returns {string} ?\n * @ignore\n * @private\n */\nexport function getNumberDependable(locale, currency) {\n // eslint-disable-next-line\n var numObject = IntlBase.getDependables(cldrData, locale, '', true);\n // eslint-disable-next-line\n return IntlBase.getCurrencySymbol(numObject.numericObject, currency);\n}\n/**\n * To get the default date CLDR object.\n *\n * @param {string} mode ?\n * @returns {Object} ?\n * @ignore\n * @private\n */\nexport function getDefaultDateObject(mode) {\n // eslint-disable-next-line\n return IntlBase.getDependables(cldrData, '', mode, false)[mapper[1]];\n}\n","import { defaultCurrencyCode } from '../internationalization';\nimport { getValue, isNullOrUndefined, extend, isBlazor } from '../util';\nimport { ParserBase as parser, getBlazorCurrencySymbol } from './parser-base';\nimport { DateFormat } from './date-formatter';\nimport { NumberFormat } from './number-formatter';\nimport { isUndefined } from '../util';\nvar regExp = RegExp;\nexport var blazorCultureFormats = {\n 'en-US': {\n 'd': 'M/d/y',\n 'D': 'EEEE, MMMM d, y',\n 'f': 'EEEE, MMMM d, y h:mm a',\n 'F': 'EEEE, MMMM d, y h:mm:s a',\n 'g': 'M/d/y h:mm a',\n 'G': 'M/d/yyyy h:mm:ss tt',\n 'm': 'MMMM d',\n 'M': 'MMMM d',\n 'r': 'ddd, dd MMM yyyy HH\\':\\'mm\\':\\'ss \\'GMT\\'',\n 'R': 'ddd, dd MMM yyyy HH\\':\\'mm\\':\\'ss \\'GMT\\'',\n 's': 'yyyy\\'-\\'MM\\'-\\'dd\\'T\\'HH\\':\\'mm\\':\\'ss',\n 't': 'h:mm tt',\n 'T': 'h:m:s tt',\n 'u': 'yyyy\\'-\\'MM\\'-\\'dd HH\\':\\'mm\\':\\'ss\\'Z\\'',\n 'U': 'dddd, MMMM d, yyyy h:mm:ss tt',\n 'y': 'MMMM yyyy',\n 'Y': 'MMMM yyyy'\n }\n};\n/**\n * Date base common constants and function for date parser and formatter.\n */\n// eslint-disable-next-line\nexport var IntlBase;\n(function (IntlBase) {\n /* eslint-disable */\n // tslint:disable-next-line:max-line-length.\n IntlBase.negativeDataRegex = /^(('[^']+'|''|[^*#@0,.E])*)(\\*.)?((([#,]*[0,]*0+)(\\.0*[0-9]*#*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.customRegex = /^(('[^']+'|''|[^*#@0,.])*)(\\*.)?((([0#,]*[0,]*[0#]*[0#\\ ]*)(\\.[0#]*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.latnParseRegex = /0|1|2|3|4|5|6|7|8|9/g;\n var fractionRegex = /[0-9]/g;\n IntlBase.defaultCurrency = '$';\n var mapper = ['infinity', 'nan', 'group', 'decimal'];\n var patternRegex = /G|M|L|H|c|'| a|yy|y|EEEE|E/g;\n var patternMatch = {\n 'G': '',\n 'M': 'm',\n 'L': 'm',\n 'H': 'h',\n 'c': 'd',\n '\\'': '\"',\n ' a': ' AM/PM',\n 'yy': 'yy',\n 'y': 'yyyy',\n 'EEEE': 'dddd',\n 'E': 'ddd'\n };\n IntlBase.dateConverterMapper = /dddd|ddd/ig;\n var defaultFirstDay = 'sun';\n IntlBase.islamicRegex = /^islamic/;\n var firstDayMapper = {\n 'sun': 0,\n 'mon': 1,\n 'tue': 2,\n 'wed': 3,\n 'thu': 4,\n 'fri': 5,\n 'sat': 6\n };\n IntlBase.formatRegex = new regExp(\"(^[ncpae]{1})([0-1]?[0-9]|20)?$\", \"i\");\n IntlBase.currencyFormatRegex = new regExp(\"(^[ca]{1})([0-1]?[0-9]|20)?$\", \"i\");\n IntlBase.curWithoutNumberRegex = /(c|a)$/ig;\n var typeMapper = {\n '$': 'isCurrency',\n '%': 'isPercent',\n '-': 'isNegative',\n 0: 'nlead',\n 1: 'nend'\n };\n IntlBase.dateParseRegex = /([a-z])\\1*|'([^']|'')+'|''|./gi;\n IntlBase.basicPatterns = ['short', 'medium', 'long', 'full'];\n /* tslint:disable:quotemark */\n IntlBase.defaultObject = {\n 'dates': {\n 'calendars': {\n 'gregorian': {\n 'months': {\n 'stand-alone': {\n 'abbreviated': {\n '1': 'Jan',\n '2': 'Feb',\n '3': 'Mar',\n '4': 'Apr',\n '5': 'May',\n '6': 'Jun',\n '7': 'Jul',\n '8': 'Aug',\n '9': 'Sep',\n '10': 'Oct',\n '11': 'Nov',\n '12': 'Dec'\n },\n 'narrow': {\n '1': 'J',\n '2': 'F',\n '3': 'M',\n '4': 'A',\n '5': 'M',\n '6': 'J',\n '7': 'J',\n '8': 'A',\n '9': 'S',\n '10': 'O',\n '11': 'N',\n '12': 'D'\n },\n 'wide': {\n '1': 'January',\n '2': 'February',\n '3': 'March',\n '4': 'April',\n '5': 'May',\n '6': 'June',\n '7': 'July',\n '8': 'August',\n '9': 'September',\n '10': 'October',\n '11': 'November',\n '12': 'December'\n }\n }\n },\n 'days': {\n 'stand-alone': {\n 'abbreviated': {\n 'sun': 'Sun',\n 'mon': 'Mon',\n 'tue': 'Tue',\n 'wed': 'Wed',\n 'thu': 'Thu',\n 'fri': 'Fri',\n 'sat': 'Sat'\n },\n 'narrow': {\n 'sun': 'S',\n 'mon': 'M',\n 'tue': 'T',\n 'wed': 'W',\n 'thu': 'T',\n 'fri': 'F',\n 'sat': 'S'\n },\n 'short': {\n 'sun': 'Su',\n 'mon': 'Mo',\n 'tue': 'Tu',\n 'wed': 'We',\n 'thu': 'Th',\n 'fri': 'Fr',\n 'sat': 'Sa'\n },\n 'wide': {\n 'sun': 'Sunday',\n 'mon': 'Monday',\n 'tue': 'Tuesday',\n 'wed': 'Wednesday',\n 'thu': 'Thursday',\n 'fri': 'Friday',\n 'sat': 'Saturday'\n }\n }\n },\n 'dayPeriods': {\n 'format': {\n 'wide': {\n 'am': 'AM',\n 'pm': 'PM'\n }\n }\n },\n 'eras': {\n 'eraNames': {\n '0': 'Before Christ',\n '0-alt-variant': 'Before Common Era',\n '1': 'Anno Domini',\n '1-alt-variant': 'Common Era'\n },\n 'eraAbbr': {\n '0': 'BC',\n '0-alt-variant': 'BCE',\n '1': 'AD',\n '1-alt-variant': 'CE'\n },\n 'eraNarrow': {\n '0': 'B',\n '0-alt-variant': 'BCE',\n '1': 'A',\n '1-alt-variant': 'CE'\n }\n },\n 'dateFormats': {\n 'full': 'EEEE, MMMM d, y',\n 'long': 'MMMM d, y',\n 'medium': 'MMM d, y',\n 'short': 'M/d/yy'\n },\n 'timeFormats': {\n 'full': 'h:mm:ss a zzzz',\n 'long': 'h:mm:ss a z',\n 'medium': 'h:mm:ss a',\n 'short': 'h:mm a'\n },\n 'dateTimeFormats': {\n 'full': '{1} \\'at\\' {0}',\n 'long': '{1} \\'at\\' {0}',\n 'medium': '{1}, {0}',\n 'short': '{1}, {0}',\n 'availableFormats': {\n 'd': 'd',\n 'E': 'ccc',\n 'Ed': 'd E',\n 'Ehm': 'E h:mm a',\n 'EHm': 'E HH:mm',\n 'Ehms': 'E h:mm:ss a',\n 'EHms': 'E HH:mm:ss',\n 'Gy': 'y G',\n 'GyMMM': 'MMM y G',\n 'GyMMMd': 'MMM d, y G',\n 'GyMMMEd': 'E, MMM d, y G',\n 'h': 'h a',\n 'H': 'HH',\n 'hm': 'h:mm a',\n 'Hm': 'HH:mm',\n 'hms': 'h:mm:ss a',\n 'Hms': 'HH:mm:ss',\n 'hmsv': 'h:mm:ss a v',\n 'Hmsv': 'HH:mm:ss v',\n 'hmv': 'h:mm a v',\n 'Hmv': 'HH:mm v',\n 'M': 'L',\n 'Md': 'M/d',\n 'MEd': 'E, M/d',\n 'MMM': 'LLL',\n 'MMMd': 'MMM d',\n 'MMMEd': 'E, MMM d',\n 'MMMMd': 'MMMM d',\n 'ms': 'mm:ss',\n 'y': 'y',\n 'yM': 'M/y',\n 'yMd': 'M/d/y',\n 'yMEd': 'E, M/d/y',\n 'yMMM': 'MMM y',\n 'yMMMd': 'MMM d, y',\n 'yMMMEd': 'E, MMM d, y',\n 'yMMMM': 'MMMM y'\n }\n }\n },\n 'islamic': {\n 'months': {\n 'stand-alone': {\n 'abbreviated': {\n '1': 'Muh.',\n '2': 'Saf.',\n '3': 'Rab. I',\n '4': 'Rab. II',\n '5': 'Jum. I',\n '6': 'Jum. II',\n '7': 'Raj.',\n '8': 'Sha.',\n '9': 'Ram.',\n '10': 'Shaw.',\n '11': 'Dhuʻl-Q.',\n '12': 'Dhuʻl-H.'\n },\n 'narrow': {\n '1': '1',\n '2': '2',\n '3': '3',\n '4': '4',\n '5': '5',\n '6': '6',\n '7': '7',\n '8': '8',\n '9': '9',\n '10': '10',\n '11': '11',\n '12': '12'\n },\n 'wide': {\n '1': 'Muharram',\n '2': 'Safar',\n '3': 'Rabiʻ I',\n '4': 'Rabiʻ II',\n '5': 'Jumada I',\n '6': 'Jumada II',\n '7': 'Rajab',\n '8': 'Shaʻban',\n '9': 'Ramadan',\n '10': 'Shawwal',\n '11': 'Dhuʻl-Qiʻdah',\n '12': 'Dhuʻl-Hijjah'\n }\n }\n },\n 'days': {\n 'stand-alone': {\n 'abbreviated': {\n 'sun': 'Sun',\n 'mon': 'Mon',\n 'tue': 'Tue',\n 'wed': 'Wed',\n 'thu': 'Thu',\n 'fri': 'Fri',\n 'sat': 'Sat'\n },\n 'narrow': {\n 'sun': 'S',\n 'mon': 'M',\n 'tue': 'T',\n 'wed': 'W',\n 'thu': 'T',\n 'fri': 'F',\n 'sat': 'S'\n },\n 'short': {\n 'sun': 'Su',\n 'mon': 'Mo',\n 'tue': 'Tu',\n 'wed': 'We',\n 'thu': 'Th',\n 'fri': 'Fr',\n 'sat': 'Sa'\n },\n 'wide': {\n 'sun': 'Sunday',\n 'mon': 'Monday',\n 'tue': 'Tuesday',\n 'wed': 'Wednesday',\n 'thu': 'Thursday',\n 'fri': 'Friday',\n 'sat': 'Saturday'\n }\n }\n },\n 'dayPeriods': {\n 'format': {\n 'wide': {\n 'am': 'AM',\n 'pm': 'PM'\n }\n }\n },\n 'eras': {\n 'eraNames': {\n '0': 'AH'\n },\n 'eraAbbr': {\n '0': 'AH'\n },\n 'eraNarrow': {\n '0': 'AH'\n }\n },\n 'dateFormats': {\n 'full': 'EEEE, MMMM d, y G',\n 'long': 'MMMM d, y G',\n 'medium': 'MMM d, y G',\n 'short': 'M/d/y GGGGG'\n },\n 'timeFormats': {\n 'full': 'h:mm:ss a zzzz',\n 'long': 'h:mm:ss a z',\n 'medium': 'h:mm:ss a',\n 'short': 'h:mm a'\n },\n 'dateTimeFormats': {\n 'full': '{1} \\'at\\' {0}',\n 'long': '{1} \\'at\\' {0}',\n 'medium': '{1}, {0}',\n 'short': '{1}, {0}',\n 'availableFormats': {\n 'd': 'd',\n 'E': 'ccc',\n 'Ed': 'd E',\n 'Ehm': 'E h:mm a',\n 'EHm': 'E HH:mm',\n 'Ehms': 'E h:mm:ss a',\n 'EHms': 'E HH:mm:ss',\n 'Gy': 'y G',\n 'GyMMM': 'MMM y G',\n 'GyMMMd': 'MMM d, y G',\n 'GyMMMEd': 'E, MMM d, y G',\n 'h': 'h a',\n 'H': 'HH',\n 'hm': 'h:mm a',\n 'Hm': 'HH:mm',\n 'hms': 'h:mm:ss a',\n 'Hms': 'HH:mm:ss',\n 'M': 'L',\n 'Md': 'M/d',\n 'MEd': 'E, M/d',\n 'MMM': 'LLL',\n 'MMMd': 'MMM d',\n 'MMMEd': 'E, MMM d',\n 'MMMMd': 'MMMM d',\n 'ms': 'mm:ss',\n 'y': 'y G',\n 'yyyy': 'y G',\n 'yyyyM': 'M/y GGGGG',\n 'yyyyMd': 'M/d/y GGGGG',\n 'yyyyMEd': 'E, M/d/y GGGGG',\n 'yyyyMMM': 'MMM y G',\n 'yyyyMMMd': 'MMM d, y G',\n 'yyyyMMMEd': 'E, MMM d, y G',\n 'yyyyMMMM': 'MMMM y G',\n 'yyyyQQQ': 'QQQ y G',\n 'yyyyQQQQ': 'QQQQ y G'\n }\n }\n }\n },\n 'timeZoneNames': {\n 'hourFormat': '+HH:mm;-HH:mm',\n 'gmtFormat': 'GMT{0}',\n 'gmtZeroFormat': 'GMT'\n }\n },\n 'numbers': {\n 'currencies': {\n 'USD': {\n 'displayName': 'US Dollar',\n 'symbol': '$',\n 'symbol-alt-narrow': '$'\n },\n 'EUR': {\n 'displayName': 'Euro',\n 'symbol': '€',\n 'symbol-alt-narrow': '€'\n },\n 'GBP': {\n 'displayName': 'British Pound',\n 'symbol-alt-narrow': '£'\n }\n },\n 'defaultNumberingSystem': 'latn',\n 'minimumGroupingDigits': '1',\n 'symbols-numberSystem-latn': {\n 'decimal': '.',\n 'group': ',',\n 'list': ';',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'exponential': 'E',\n 'superscriptingExponent': '×',\n 'perMille': '‰',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'timeSeparator': ':'\n },\n 'decimalFormats-numberSystem-latn': {\n 'standard': '#,##0.###'\n },\n 'percentFormats-numberSystem-latn': {\n 'standard': '#,##0%'\n },\n 'currencyFormats-numberSystem-latn': {\n 'standard': '¤#,##0.00',\n 'accounting': '¤#,##0.00;(¤#,##0.00)'\n },\n 'scientificFormats-numberSystem-latn': {\n 'standard': '#E0'\n }\n }\n };\n IntlBase.blazorDefaultObject = {\n 'numbers': {\n 'mapper': {\n '0': '0',\n '1': '1',\n '2': '2',\n '3': '3',\n '4': '4',\n '5': '5',\n '6': '6',\n '7': '7',\n '8': '8',\n '9': '9'\n },\n 'mapperDigits': '0123456789',\n 'numberSymbols': {\n 'decimal': '.',\n 'group': ',',\n 'plusSign': '+',\n 'minusSign': '-',\n 'percentSign': '%',\n 'nan': 'NaN',\n 'timeSeparator': ':',\n 'infinity': '∞'\n },\n 'timeSeparator': ':',\n 'currencySymbol': '$',\n 'currencypData': {\n 'nlead': '$',\n 'nend': '',\n 'groupSeparator': ',',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'percentpData': {\n 'nlead': '',\n 'nend': '%',\n 'groupSeparator': ',',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'percentnData': {\n 'nlead': '-',\n 'nend': '%',\n 'groupSeparator': ',',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'currencynData': {\n 'nlead': '($',\n 'nend': ')',\n 'groupSeparator': ',',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'decimalnData': {\n 'nlead': '-',\n 'nend': '',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'decimalpData': {\n 'nlead': '',\n 'nend': '',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n }\n },\n 'dates': {\n 'dayPeriods': {\n 'am': 'AM',\n 'pm': 'PM'\n },\n 'dateSeperator': '/',\n 'days': {\n 'abbreviated': {\n 'sun': 'Sun',\n 'mon': 'Mon',\n 'tue': 'Tue',\n 'wed': 'Wed',\n 'thu': 'Thu',\n 'fri': 'Fri',\n 'sat': 'Sat'\n },\n 'short': {\n 'sun': 'Su',\n 'mon': 'Mo',\n 'tue': 'Tu',\n 'wed': 'We',\n 'thu': 'Th',\n 'fri': 'Fr',\n 'sat': 'Sa'\n },\n 'wide': {\n 'sun': 'Sunday',\n 'mon': 'Monday',\n 'tue': 'Tuesday',\n 'wed': 'Wednesday',\n 'thu': 'Thursday',\n 'fri': 'Friday',\n 'sat': 'Saturday'\n }\n },\n 'months': {\n 'abbreviated': {\n '1': 'Jan',\n '2': 'Feb',\n '3': 'Mar',\n '4': 'Apr',\n '5': 'May',\n '6': 'Jun',\n '7': 'Jul',\n '8': 'Aug',\n '9': 'Sep',\n '10': 'Oct',\n '11': 'Nov',\n '12': 'Dec'\n },\n 'wide': {\n '1': 'January',\n '2': 'February',\n '3': 'March',\n '4': 'April',\n '5': 'May',\n '6': 'June',\n '7': 'July',\n '8': 'August',\n '9': 'September',\n '10': 'October',\n '11': 'November',\n '12': 'December'\n }\n },\n 'eras': {\n '1': 'AD'\n }\n }\n };\n /* tslint:enable:quotemark */\n IntlBase.monthIndex = {\n 3: 'abbreviated',\n 4: 'wide',\n 5: 'narrow',\n 1: 'abbreviated'\n };\n /**\n *\n */\n IntlBase.month = 'months';\n IntlBase.days = 'days';\n /**\n * Default numerber Object\n */\n IntlBase.patternMatcher = {\n C: 'currency',\n P: 'percent',\n N: 'decimal',\n A: 'currency',\n E: 'scientific'\n };\n /**\n * Returns the resultant pattern based on the skeleton, dateObject and the type provided\n *\n * @private\n * @param {string} skeleton ?\n * @param {Object} dateObject ?\n * @param {string} type ?\n * @param {boolean} isIslamic ?\n * @param {string} blazorCulture ?\n * @returns {string} ?\n */\n function getResultantPattern(skeleton, dateObject, type, isIslamic, blazorCulture) {\n var resPattern;\n var iType = type || 'date';\n if (blazorCulture) {\n resPattern = compareBlazorDateFormats({ skeleton: skeleton }, blazorCulture).format ||\n compareBlazorDateFormats({ skeleton: 'd' }, 'en-US').format;\n }\n else {\n if (IntlBase.basicPatterns.indexOf(skeleton) !== -1) {\n resPattern = getValue(iType + 'Formats.' + skeleton, dateObject);\n if (iType === 'dateTime') {\n var dPattern = getValue('dateFormats.' + skeleton, dateObject);\n var tPattern = getValue('timeFormats.' + skeleton, dateObject);\n resPattern = resPattern.replace('{1}', dPattern).replace('{0}', tPattern);\n }\n }\n else {\n resPattern = getValue('dateTimeFormats.availableFormats.' + skeleton, dateObject);\n }\n if (isUndefined(resPattern) && skeleton === 'yMd') {\n resPattern = 'M/d/y';\n }\n }\n return resPattern;\n }\n IntlBase.getResultantPattern = getResultantPattern;\n /**\n * Returns the dependable object for provided cldr data and culture\n *\n * @private\n * @param {Object} cldr ?\n * @param {string} culture ?\n * @param {string} mode ?\n * @param {boolean} isNumber ?\n * @returns {any} ?\n */\n function getDependables(cldr, culture, mode, isNumber) {\n var ret = {};\n var calendartype = mode || 'gregorian';\n ret.parserObject = parser.getMainObject(cldr, culture) || (isBlazor() ? IntlBase.blazorDefaultObject : IntlBase.defaultObject);\n if (isNumber) {\n ret.numericObject = getValue('numbers', ret.parserObject);\n }\n else {\n var dateString = isBlazor() ? 'dates' : ('dates.calendars.' + calendartype);\n ret.dateObject = getValue(dateString, ret.parserObject);\n }\n return ret;\n }\n IntlBase.getDependables = getDependables;\n /**\n * Returns the symbol pattern for provided parameters\n *\n * @private\n * @param {string} type ?\n * @param {string} numSystem ?\n * @param {Object} obj ?\n * @param {boolean} isAccount ?\n * @returns {string} ?\n */\n function getSymbolPattern(type, numSystem, obj, isAccount) {\n return getValue(type + 'Formats-numberSystem-' +\n numSystem + (isAccount ? '.accounting' : '.standard'), obj) || (isAccount ? getValue(type + 'Formats-numberSystem-' +\n numSystem + '.standard', obj) : '');\n }\n IntlBase.getSymbolPattern = getSymbolPattern;\n /**\n *\n * @param {string} format ?\n * @returns {string} ?\n */\n function ConvertDateToWeekFormat(format) {\n var convertMapper = format.match(IntlBase.dateConverterMapper);\n if (convertMapper && isBlazor()) {\n var tempString = convertMapper[0].length === 3 ? 'EEE' : 'EEEE';\n return format.replace(IntlBase.dateConverterMapper, tempString);\n }\n return format;\n }\n IntlBase.ConvertDateToWeekFormat = ConvertDateToWeekFormat;\n /**\n *\n * @param {DateFormatOptions} formatOptions ?\n * @param {string} culture ?\n * @returns {DateFormatOptions} ?\n */\n function compareBlazorDateFormats(formatOptions, culture) {\n var format = formatOptions.format || formatOptions.skeleton;\n var curFormatMapper = getValue((culture || 'en-US') + '.' + format, blazorCultureFormats);\n if (!curFormatMapper) {\n curFormatMapper = getValue('en-US.' + format, blazorCultureFormats);\n }\n if (curFormatMapper) {\n curFormatMapper = ConvertDateToWeekFormat(curFormatMapper);\n formatOptions.format = curFormatMapper.replace(/tt/, 'a');\n }\n return formatOptions;\n }\n IntlBase.compareBlazorDateFormats = compareBlazorDateFormats;\n /**\n * Returns proper numeric skeleton\n *\n * @private\n * @param {string} skeleton ?\n * @returns {any} ?\n */\n function getProperNumericSkeleton(skeleton) {\n var matches = skeleton.match(IntlBase.formatRegex);\n var ret = {};\n var pattern = matches[1].toUpperCase();\n ret.isAccount = (pattern === 'A');\n // eslint-disable-next-line\n ret.type = IntlBase.patternMatcher[pattern];\n if (skeleton.length > 1) {\n ret.fractionDigits = parseInt(matches[2], 10);\n }\n return ret;\n }\n IntlBase.getProperNumericSkeleton = getProperNumericSkeleton;\n /**\n * Returns format data for number formatting like minimum fraction, maximum fraction, etc..,\n *\n * @private\n * @param {string} pattern ?\n * @param {boolean} needFraction ?\n * @param {string} cSymbol ?\n * @param {boolean} fractionOnly ?\n * @returns {any} ?\n */\n function getFormatData(pattern, needFraction, cSymbol, fractionOnly) {\n var nData = fractionOnly ? {} : { nlead: '', nend: '' };\n var match = pattern.match(IntlBase.customRegex);\n if (match) {\n if (!fractionOnly) {\n nData.nlead = changeCurrencySymbol(match[1], cSymbol);\n nData.nend = changeCurrencySymbol(match[10], cSymbol);\n nData.groupPattern = match[4];\n }\n var fraction = match[7];\n if (fraction && needFraction) {\n var fmatch = fraction.match(fractionRegex);\n if (!isNullOrUndefined(fmatch)) {\n nData.minimumFraction = fmatch.length;\n }\n else {\n nData.minimumFraction = 0;\n }\n nData.maximumFraction = fraction.length - 1;\n }\n }\n return nData;\n }\n IntlBase.getFormatData = getFormatData;\n /**\n * Changes currency symbol\n *\n * @private\n * @param {string} val ?\n * @param {string} sym ?\n * @returns {string} ?\n */\n function changeCurrencySymbol(val, sym) {\n if (val) {\n return val.replace(IntlBase.defaultCurrency, sym);\n }\n return '';\n }\n IntlBase.changeCurrencySymbol = changeCurrencySymbol;\n /**\n * Returns currency symbol based on currency code ?\n *\n * @private\n * @param {Object} numericObject ?\n * @param {string} currencyCode ?\n * @param {string} altSymbol ?\n * @returns {string} ?\n */\n function getCurrencySymbol(numericObject, currencyCode, altSymbol) {\n var symbol = altSymbol ? ('.' + altSymbol) : '.symbol';\n var getCurrency = getValue('currencies.' + currencyCode + symbol, numericObject) ||\n getValue('currencies.' + currencyCode + '.symbol-alt-narrow', numericObject) || '$';\n return getCurrency;\n }\n IntlBase.getCurrencySymbol = getCurrencySymbol;\n /**\n * Returns formatting options for custom number format\n *\n * @private\n * @param {string} format ?\n * @param {CommonOptions} dOptions ?\n * @param {any} obj ?\n * @returns {any} ?\n */\n function customFormat(format, dOptions, obj) {\n var options = {};\n var formatSplit = format.split(';');\n var data = ['pData', 'nData', 'zeroData'];\n for (var i = 0; i < formatSplit.length; i++) {\n // eslint-disable-next-line\n options[data[i]] = customNumberFormat(formatSplit[i], dOptions, obj);\n }\n if (isNullOrUndefined(options.nData)) {\n options.nData = extend({}, options.pData);\n options.nData.nlead = isNullOrUndefined(dOptions) ? '-' + options.nData.nlead : dOptions.minusSymbol + options.nData.nlead;\n }\n return options;\n }\n IntlBase.customFormat = customFormat;\n /**\n * Returns custom formatting options\n *\n * @private\n * @param {string} format ?\n * @param {CommonOptions} dOptions ?\n * @param {Object} numObject ?\n * @returns {any} ?\n */\n function customNumberFormat(format, dOptions, numObject) {\n var cOptions = { type: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 0 };\n var pattern = format.match(IntlBase.customRegex);\n if (isNullOrUndefined(pattern) || (pattern[5] === '' && format !== 'N/A')) {\n cOptions.type = undefined;\n return cOptions;\n }\n cOptions.nlead = pattern[1];\n cOptions.nend = pattern[10];\n var integerPart = pattern[6];\n var spaceCapture = integerPart.match(/\\ $/g) ? true : false;\n var spaceGrouping = integerPart.replace(/\\ $/g, '').indexOf(' ') !== -1;\n cOptions.useGrouping = integerPart.indexOf(',') !== -1 || spaceGrouping;\n integerPart = integerPart.replace(/,/g, '');\n var fractionPart = pattern[7];\n if (integerPart.indexOf('0') !== -1) {\n cOptions.minimumIntegerDigits = integerPart.length - integerPart.indexOf('0');\n }\n if (!isNullOrUndefined(fractionPart)) {\n cOptions.minimumFractionDigits = fractionPart.lastIndexOf('0');\n cOptions.maximumFractionDigits = fractionPart.lastIndexOf('#');\n if (cOptions.minimumFractionDigits === -1) {\n cOptions.minimumFractionDigits = 0;\n }\n if (cOptions.maximumFractionDigits === -1 || cOptions.maximumFractionDigits < cOptions.minimumFractionDigits) {\n cOptions.maximumFractionDigits = cOptions.minimumFractionDigits;\n }\n }\n if (!isNullOrUndefined(dOptions)) {\n dOptions.isCustomFormat = true;\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '$', dOptions.currencySymbol));\n if (!cOptions.isCurrency) {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', dOptions.percentSymbol));\n }\n }\n else {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', '%'));\n }\n if (!isNullOrUndefined(numObject)) {\n var symbolPattern = getSymbolPattern(cOptions.type, dOptions.numberMapper.numberSystem, numObject, false);\n if (cOptions.useGrouping) {\n // eslint-disable-next-line\n cOptions.groupSeparator = spaceGrouping ? ' ' : dOptions.numberMapper.numberSymbols[mapper[2]];\n cOptions.groupData = NumberFormat.getGroupingDetails(symbolPattern.split(';')[0]);\n }\n cOptions.nlead = cOptions.nlead.replace(/'/g, '');\n cOptions.nend = spaceCapture ? ' ' + cOptions.nend.replace(/'/g, '') : cOptions.nend.replace(/'/g, '');\n }\n return cOptions;\n }\n IntlBase.customNumberFormat = customNumberFormat;\n /**\n * Returns formatting options for currency or percent type\n *\n * @private\n * @param {string[]} parts ?\n * @param {string} actual ?\n * @param {string} symbol ?\n * @returns {any} ?\n */\n function isCurrencyPercent(parts, actual, symbol) {\n var options = { nlead: parts[0], nend: parts[1] };\n for (var i = 0; i < 2; i++) {\n var part = parts[parseInt(i.toString(), 10)];\n var loc = part.indexOf(actual);\n if ((loc !== -1) && ((loc < part.indexOf('\\'')) || (loc > part.lastIndexOf('\\'')))) {\n // eslint-disable-next-line\n options[typeMapper[i]] = part.substr(0, loc) + symbol + part.substr(loc + 1);\n // eslint-disable-next-line\n options[typeMapper[actual]] = true;\n options.type = options.isCurrency ? 'currency' : 'percent';\n break;\n }\n }\n return options;\n }\n IntlBase.isCurrencyPercent = isCurrencyPercent;\n /**\n * Returns culture based date separator\n *\n * @private\n * @param {Object} dateObj ?\n * @returns {string} ?\n */\n function getDateSeparator(dateObj) {\n var value = (getValue('dateFormats.short', dateObj) || '').match(/[d‏M‏]([^d‏M])[d‏M‏]/i);\n return value ? value[1] : '/';\n }\n IntlBase.getDateSeparator = getDateSeparator;\n /**\n * Returns Native Date Time pattern\n *\n * @private\n * @param {string} culture ?\n * @param {DateFormatOptions} options ?\n * @param {Object} cldr ?\n * @param {boolean} isExcelFormat ?\n * @returns {string} ?\n */\n function getActualDateTimeFormat(culture, options, cldr, isExcelFormat) {\n var dependable = getDependables(cldr, culture, options.calendar);\n if (isBlazor()) {\n options = compareBlazorDateFormats(options, culture);\n }\n var actualPattern = options.format || getResultantPattern(options.skeleton, dependable.dateObject, options.type);\n if (isExcelFormat) {\n actualPattern = actualPattern.replace(patternRegex, function (pattern) {\n // eslint-disable-next-line\n return patternMatch[pattern];\n });\n if (actualPattern.indexOf('z') !== -1) {\n var tLength = actualPattern.match(/z/g).length;\n var timeZonePattern = void 0;\n var options_1 = { 'timeZone': {} };\n options_1.numMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n options_1.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n var value = new Date();\n var timezone = value.getTimezoneOffset();\n var pattern = (tLength < 4) ? '+H;-H' : options_1.timeZone.hourFormat;\n pattern = pattern.replace(/:/g, options_1.numMapper.timeSeparator);\n if (timezone === 0) {\n timeZonePattern = options_1.timeZone.gmtZeroFormat;\n }\n else {\n timeZonePattern = DateFormat.getTimeZoneValue(timezone, pattern);\n timeZonePattern = options_1.timeZone.gmtFormat.replace(/\\{0\\}/, timeZonePattern);\n }\n actualPattern = actualPattern.replace(/[z]+/, '\"' + timeZonePattern + '\"');\n }\n actualPattern = actualPattern.replace(/ $/, '');\n }\n return actualPattern;\n }\n IntlBase.getActualDateTimeFormat = getActualDateTimeFormat;\n /**\n *\n * @param {string} actual ?\n * @param {any} option ?\n * @returns {any} ?\n */\n // eslint-disable-next-line\n function processSymbol(actual, option) {\n if (actual.indexOf(',') !== -1) {\n // eslint-disable-next-line\n var split = actual.split(',');\n actual = (split[0] + getValue('numberMapper.numberSymbols.group', option) +\n split[1].replace('.', getValue('numberMapper.numberSymbols.decimal', option)));\n }\n else {\n actual = actual.replace('.', getValue('numberMapper.numberSymbols.decimal', option));\n }\n return actual;\n }\n /**\n * Returns Native Number pattern\n *\n * @private\n * @param {string} culture ?\n * @param {NumberFormatOptions} options ?\n * @param {Object} cldr ?\n * @param {boolean} isExcel ?\n * @returns {string} ?\n */\n function getActualNumberFormat(culture, options, cldr, isExcel) {\n var dependable = getDependables(cldr, culture, '', true);\n var parseOptions = { custom: true };\n var numrericObject = dependable.numericObject;\n var minFrac;\n var curObj = {};\n var curMatch = (options.format || '').match(IntlBase.currencyFormatRegex);\n var type = IntlBase.formatRegex.test(options.format) ? getProperNumericSkeleton(options.format || 'N') : {};\n var dOptions = {};\n if (curMatch) {\n dOptions.numberMapper = isBlazor() ?\n extend({}, dependable.numericObject) :\n parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n var curCode = isBlazor() ? getValue('currencySymbol', dependable.numericObject) :\n getCurrencySymbol(dependable.numericObject, options.currency || defaultCurrencyCode, options.altSymbol);\n var symbolPattern = getSymbolPattern('currency', dOptions.numberMapper.numberSystem, dependable.numericObject, (/a/i).test(options.format));\n symbolPattern = symbolPattern.replace(/\\u00A4/g, curCode);\n var split = symbolPattern.split(';');\n curObj.hasNegativePattern = isBlazor() ? true : (split.length > 1);\n curObj.nData = isBlazor() ? getValue(type.type + 'nData', numrericObject) :\n getFormatData(split[1] || '-' + split[0], true, curCode);\n curObj.pData = isBlazor() ? getValue(type.type + 'pData', numrericObject) :\n getFormatData(split[0], false, curCode);\n if (!curMatch[2] && !options.minimumFractionDigits && !options.maximumFractionDigits) {\n minFrac = getFormatData(symbolPattern.split(';')[0], true, '', true).minimumFraction;\n }\n }\n var actualPattern;\n if ((IntlBase.formatRegex.test(options.format)) || !(options.format)) {\n extend(parseOptions, getProperNumericSkeleton(options.format || 'N'));\n parseOptions.custom = false;\n actualPattern = '###0';\n if (parseOptions.fractionDigits || options.minimumFractionDigits || options.maximumFractionDigits || minFrac) {\n var defaultMinimum = 0;\n if (parseOptions.fractionDigits) {\n options.minimumFractionDigits = options.maximumFractionDigits = parseOptions.fractionDigits;\n }\n actualPattern = fractionDigitsPattern(actualPattern, minFrac || parseOptions.fractionDigits ||\n options.minimumFractionDigits || defaultMinimum, options.maximumFractionDigits || defaultMinimum);\n }\n if (options.minimumIntegerDigits) {\n actualPattern = minimumIntegerPattern(actualPattern, options.minimumIntegerDigits);\n }\n if (options.useGrouping) {\n actualPattern = groupingPattern(actualPattern);\n }\n if (parseOptions.type === 'currency' || (parseOptions.type && isBlazor())) {\n if (isBlazor() && parseOptions.type !== 'currency') {\n curObj.pData = getValue(parseOptions.type + 'pData', numrericObject);\n curObj.nData = getValue(parseOptions.type + 'nData', numrericObject);\n }\n var cPattern = actualPattern;\n actualPattern = curObj.pData.nlead + cPattern + curObj.pData.nend;\n if (curObj.hasNegativePattern || isBlazor()) {\n actualPattern += ';' + curObj.nData.nlead + cPattern + curObj.nData.nend;\n }\n }\n if (parseOptions.type === 'percent' && !isBlazor()) {\n actualPattern += ' %';\n }\n }\n else {\n actualPattern = options.format.replace(/'/g, '\"');\n }\n if (Object.keys(dOptions).length > 0) {\n actualPattern = !isExcel ? processSymbol(actualPattern, dOptions) : actualPattern;\n }\n return actualPattern;\n }\n IntlBase.getActualNumberFormat = getActualNumberFormat;\n /**\n *\n * @param {string} pattern ?\n * @param {number} minDigits ?\n * @param {number} maxDigits ?\n * @returns {string} ?\n */\n function fractionDigitsPattern(pattern, minDigits, maxDigits) {\n pattern += '.';\n for (var a = 0; a < minDigits; a++) {\n pattern += '0';\n }\n if (minDigits < maxDigits) {\n var diff = maxDigits - minDigits;\n for (var b = 0; b < diff; b++) {\n pattern += '#';\n }\n }\n return pattern;\n }\n IntlBase.fractionDigitsPattern = fractionDigitsPattern;\n /**\n *\n * @param {string} pattern ?\n * @param {number} digits ?\n * @returns {string} ?\n */\n function minimumIntegerPattern(pattern, digits) {\n var temp = pattern.split('.');\n var integer = '';\n for (var x = 0; x < digits; x++) {\n integer += '0';\n }\n return temp[1] ? (integer + '.' + temp[1]) : integer;\n }\n IntlBase.minimumIntegerPattern = minimumIntegerPattern;\n /**\n *\n * @param {string} pattern ?\n * @returns {string} ?\n */\n function groupingPattern(pattern) {\n var temp = pattern.split('.');\n var integer = temp[0];\n var no = 3 - integer.length % 3;\n var hash = (no && no === 1) ? '#' : (no === 2 ? '##' : '');\n integer = hash + integer;\n pattern = '';\n for (var x = integer.length - 1; x > 0; x = x - 3) {\n pattern = ',' + integer[x - 2] + integer[x - 1] + integer[parseInt(x.toString(), 10)] + pattern;\n }\n pattern = pattern.slice(1);\n return temp[1] ? (pattern + '.' + temp[1]) : pattern;\n }\n IntlBase.groupingPattern = groupingPattern;\n /**\n *\n * @param {string} culture ?\n * @param {Object} cldr ?\n * @returns {number} ?\n */\n function getWeekData(culture, cldr) {\n var firstDay = defaultFirstDay;\n var mapper = getValue('supplemental.weekData.firstDay', cldr);\n var iCulture = culture;\n if ((/en-/).test(iCulture)) {\n iCulture = iCulture.slice(3);\n }\n iCulture = iCulture.slice(0, 2).toUpperCase() + iCulture.substr(2);\n if (mapper) {\n firstDay = mapper[\"\" + iCulture] || mapper[iCulture.slice(0, 2)] || defaultFirstDay;\n }\n return firstDayMapper[\"\" + firstDay];\n }\n IntlBase.getWeekData = getWeekData;\n /**\n * @private\n * @param {any} pData ?\n * @param {string} aCurrency ?\n * @param {string} rCurrency ?\n * @returns {void} ?\n */\n function replaceBlazorCurrency(pData, aCurrency, rCurrency) {\n var iCurrency = getBlazorCurrencySymbol(rCurrency);\n if (aCurrency !== iCurrency) {\n for (var _i = 0, pData_1 = pData; _i < pData_1.length; _i++) {\n var data = pData_1[_i];\n data.nend = data.nend.replace(aCurrency, iCurrency);\n data.nlead = data.nlead.replace(aCurrency, iCurrency);\n }\n }\n }\n IntlBase.replaceBlazorCurrency = replaceBlazorCurrency;\n /**\n * @private\n * @param {Date} date ?\n * @returns {number} ?\n */\n function getWeekOfYear(date) {\n var newYear = new Date(date.getFullYear(), 0, 1);\n var day = newYear.getDay();\n var weeknum;\n day = (day >= 0 ? day : day + 7);\n var daynum = Math.floor((date.getTime() - newYear.getTime() -\n (date.getTimezoneOffset() - newYear.getTimezoneOffset()) * 60000) / 86400000) + 1;\n if (day < 4) {\n weeknum = Math.floor((daynum + day - 1) / 7) + 1;\n if (weeknum > 52) {\n var nYear = new Date(date.getFullYear() + 1, 0, 1);\n var nday = nYear.getDay();\n nday = nday >= 0 ? nday : nday + 7;\n weeknum = nday < 4 ? 1 : 53;\n }\n }\n else {\n weeknum = Math.floor((daynum + day - 1) / 7);\n }\n return weeknum;\n }\n IntlBase.getWeekOfYear = getWeekOfYear;\n})(IntlBase || (IntlBase = {}));\n","import { isNullOrUndefined, merge } from './util';\nvar headerRegex = /^(.*?):[ \\t]*([^\\r\\n]*)$/gm;\nvar defaultType = 'GET';\n/**\n * Ajax class provides ability to make asynchronous HTTP request to the server\n * ```typescript\n * var ajax = new Ajax(\"index.html\", \"GET\", true);\n * ajax.send().then(\n * function (value) {\n * console.log(value);\n * },\n * function (reason) {\n * console.log(reason);\n * });\n * ```\n */\nvar Ajax = /** @class */ (function () {\n /**\n * Constructor for Ajax class\n *\n * @param {string|Object} options ?\n * @param {string} type ?\n * @param {boolean} async ?\n * @returns defaultType any\n */\n function Ajax(options, type, async, contentType) {\n /**\n * A boolean value indicating whether the request should be sent asynchronous or not.\n *\n * @default true\n */\n this.mode = true;\n /**\n * A boolean value indicating whether to ignore the promise reject.\n *\n * @private\n * @default true\n */\n this.emitError = true;\n this.options = {};\n if (typeof options === 'string') {\n this.url = options;\n this.type = type ? type.toUpperCase() : defaultType;\n this.mode = !isNullOrUndefined(async) ? async : true;\n }\n else if (typeof options === 'object') {\n this.options = options;\n merge(this, this.options);\n }\n this.type = this.type ? this.type.toUpperCase() : defaultType;\n this.contentType = (this.contentType !== undefined) ? this.contentType : contentType;\n }\n /**\n *\n * Send the request to server.\n *\n * @param {any} data - To send the user data\n * @return {Promise} ?\n */\n Ajax.prototype.send = function (data) {\n var _this = this;\n this.data = isNullOrUndefined(data) ? this.data : data;\n var eventArgs = {\n cancel: false,\n httpRequest: null\n };\n var promise = new Promise(function (resolve, reject) {\n _this.httpRequest = new XMLHttpRequest();\n _this.httpRequest.onreadystatechange = function () { _this.stateChange(resolve, reject); };\n if (!isNullOrUndefined(_this.onLoad)) {\n _this.httpRequest.onload = _this.onLoad;\n }\n if (!isNullOrUndefined(_this.onProgress)) {\n _this.httpRequest.onprogress = _this.onProgress;\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onAbort)) {\n _this.httpRequest.onabort = _this.onAbort;\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onError)) {\n _this.httpRequest.onerror = _this.onError;\n }\n //** Upload Events **/\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onUploadProgress)) {\n _this.httpRequest.upload.onprogress = _this.onUploadProgress;\n }\n // eslint-disable-next-line\n _this.httpRequest.open(_this.type, _this.url, _this.mode);\n // Set default headers\n if (!isNullOrUndefined(_this.data) && _this.contentType !== null) {\n _this.httpRequest.setRequestHeader('Content-Type', _this.contentType || 'application/json; charset=utf-8');\n }\n if (_this.beforeSend) {\n eventArgs.httpRequest = _this.httpRequest;\n _this.beforeSend(eventArgs);\n }\n if (!eventArgs.cancel) {\n _this.httpRequest.send(!isNullOrUndefined(_this.data) ? _this.data : null);\n }\n });\n return promise;\n };\n Ajax.prototype.successHandler = function (data) {\n if (this.onSuccess) {\n this.onSuccess(data, this);\n }\n return data;\n };\n Ajax.prototype.failureHandler = function (reason) {\n if (this.onFailure) {\n this.onFailure(this.httpRequest);\n }\n return reason;\n };\n Ajax.prototype.stateChange = function (resolve, reject) {\n var data = this.httpRequest.responseText;\n if (this.dataType && this.dataType.toLowerCase() === 'json') {\n if (data === '') {\n data = undefined;\n }\n else {\n try {\n data = JSON.parse(data);\n }\n catch (error) {\n // no exception handle\n }\n }\n }\n if (this.httpRequest.readyState === 4) {\n //success range should be 200 to 299\n if ((this.httpRequest.status >= 200 && this.httpRequest.status <= 299) || this.httpRequest.status === 304) {\n resolve(this.successHandler(data));\n }\n else {\n if (this.emitError) {\n reject(new Error(this.failureHandler(this.httpRequest.statusText)));\n }\n else {\n resolve();\n }\n }\n }\n };\n /**\n * To get the response header from XMLHttpRequest\n *\n * @param {string} key Key to search in the response header\n * @returns {string} ?\n */\n Ajax.prototype.getResponseHeader = function (key) {\n var responseHeaders;\n var header;\n // eslint-disable-next-line\n responseHeaders = {};\n var headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n while (headers) {\n responseHeaders[headers[1].toLowerCase()] = headers[2];\n headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n }\n // eslint-disable-next-line\n header = responseHeaders[key.toLowerCase()];\n return isNullOrUndefined(header) ? null : header;\n };\n return Ajax;\n}());\nexport { Ajax };\n","import { isUndefined } from './util';\nvar REGX_MOBILE = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile/i;\nvar REGX_IE = /msie|trident/i;\nvar REGX_IE11 = /Trident\\/7\\./;\nvar REGX_IOS = /(ipad|iphone|ipod touch)/i;\nvar REGX_IOS7 = /(ipad|iphone|ipod touch);.*os 7_\\d|(ipad|iphone|ipod touch);.*os 8_\\d/i;\nvar REGX_ANDROID = /android/i;\nvar REGX_WINDOWS = /trident|windows phone|edge/i;\nvar REGX_VERSION = /(version)[ /]([\\w.]+)/i;\nvar REGX_BROWSER = {\n OPERA: /(opera|opr)(?:.*version|)[ /]([\\w.]+)/i,\n EDGE: /(edge)(?:.*version|)[ /]([\\w.]+)/i,\n CHROME: /(chrome|crios)[ /]([\\w.]+)/i,\n PANTHOMEJS: /(phantomjs)[ /]([\\w.]+)/i,\n SAFARI: /(safari)[ /]([\\w.]+)/i,\n WEBKIT: /(webkit)[ /]([\\w.]+)/i,\n MSIE: /(msie|trident) ([\\w.]+)/i,\n MOZILLA: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n};\n/* istanbul ignore else */\nif (typeof window !== 'undefined') {\n window.browserDetails = window.browserDetails || {};\n}\n/**\n * Get configuration details for Browser\n *\n * @private\n */\nvar Browser = /** @class */ (function () {\n function Browser() {\n }\n Browser.extractBrowserDetail = function () {\n var browserInfo = { culture: {} };\n var keys = Object.keys(REGX_BROWSER);\n var clientInfo = [];\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n clientInfo = Browser.userAgent.match(REGX_BROWSER[\"\" + key]);\n if (clientInfo) {\n browserInfo.name = (clientInfo[1].toLowerCase() === 'opr' ? 'opera' : clientInfo[1].toLowerCase());\n browserInfo.name = (clientInfo[1].toLowerCase() === 'crios' ? 'chrome' : browserInfo.name);\n browserInfo.version = clientInfo[2];\n browserInfo.culture.name = browserInfo.culture.language = navigator.language;\n // eslint-disable-next-line\n if (!!Browser.userAgent.match(REGX_IE11)) {\n browserInfo.name = 'msie';\n break;\n }\n var version = Browser.userAgent.match(REGX_VERSION);\n if (browserInfo.name === 'safari' && version) {\n browserInfo.version = version[2];\n }\n break;\n }\n }\n return browserInfo;\n };\n /**\n * To get events from the browser\n *\n * @param {string} event - type of event triggered.\n * @returns {boolean}\n */\n Browser.getEvent = function (event) {\n // eslint-disable-next-line\n var events = {\n start: {\n isPointer: 'pointerdown', isTouch: 'touchstart', isDevice: 'mousedown'\n },\n move: {\n isPointer: 'pointermove', isTouch: 'touchmove', isDevice: 'mousemove'\n },\n end: {\n isPointer: 'pointerup', isTouch: 'touchend', isDevice: 'mouseup'\n },\n cancel: {\n isPointer: 'pointercancel', isTouch: 'touchcancel', isDevice: 'mouseleave'\n }\n };\n return (Browser.isPointer ? events[\"\" + event].isPointer :\n (Browser.isTouch ? events[\"\" + event].isTouch + (!Browser.isDevice ? ' ' + events[\"\" + event].isDevice : '')\n : events[\"\" + event].isDevice));\n };\n /**\n * To get the Touch start event from browser\n *\n * @returns {string}\n */\n Browser.getTouchStartEvent = function () {\n return Browser.getEvent('start');\n };\n /**\n * To get the Touch end event from browser\n *\n * @returns {string}\n */\n Browser.getTouchEndEvent = function () {\n return Browser.getEvent('end');\n };\n /**\n * To get the Touch move event from browser\n *\n * @returns {string}\n */\n Browser.getTouchMoveEvent = function () {\n return Browser.getEvent('move');\n };\n /**\n * To cancel the touch event from browser\n *\n * @returns {string}\n */\n Browser.getTouchCancelEvent = function () {\n return Browser.getEvent('cancel');\n };\n /**\n * Check whether the browser on the iPad device is Safari or not\n *\n * @returns {boolean}\n */\n Browser.isSafari = function () {\n return (Browser.isDevice && Browser.isIos && Browser.isTouch && typeof window !== 'undefined'\n && window.navigator.userAgent.toLowerCase().indexOf('iphone') === -1\n && window.navigator.userAgent.toLowerCase().indexOf('safari') > -1);\n };\n /**\n * To get the value based on provided key and regX\n *\n * @param {string} key ?\n * @param {RegExp} regX ?\n * @returns {Object} ?\n */\n Browser.getValue = function (key, regX) {\n var browserDetails = typeof window !== 'undefined' ? window.browserDetails : {};\n if (typeof navigator !== 'undefined' && navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1 && Browser.isTouch === true && !REGX_BROWSER.CHROME.test(navigator.userAgent)) {\n browserDetails['isIos'] = true;\n browserDetails['isDevice'] = true;\n browserDetails['isTouch'] = true;\n browserDetails['isPointer'] = true;\n }\n if ('undefined' === typeof browserDetails[\"\" + key]) {\n return browserDetails[\"\" + key] = regX.test(Browser.userAgent);\n }\n return browserDetails[\"\" + key];\n };\n Object.defineProperty(Browser, \"userAgent\", {\n get: function () {\n return Browser.uA;\n },\n //Properties\n /**\n * Property specifies the userAgent of the browser. Default userAgent value is based on the browser.\n * Also we can set our own userAgent.\n *\n * @param {string} uA ?\n */\n set: function (uA) {\n Browser.uA = uA;\n window.browserDetails = {};\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"info\", {\n //Read Only Properties\n /**\n * Property is to get the browser information like Name, Version and Language\n *\n * @returns {BrowserInfo} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.info)) {\n return window.browserDetails.info = Browser.extractBrowserDetail();\n }\n return window.browserDetails.info;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIE\", {\n /**\n * Property is to get whether the userAgent is based IE.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isIE', REGX_IE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isTouch\", {\n /**\n * Property is to get whether the browser has touch support.\n *\n * @returns {boolean} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.isTouch)) {\n return (window.browserDetails.isTouch =\n ('ontouchstart' in window.navigator) ||\n (window &&\n window.navigator &&\n (window.navigator.maxTouchPoints > 0)) || ('ontouchstart' in window));\n }\n return window.browserDetails.isTouch;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isPointer\", {\n /**\n * Property is to get whether the browser has Pointer support.\n *\n * @returns {boolean} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.isPointer)) {\n return window.browserDetails.isPointer = ('pointerEnabled' in window.navigator);\n }\n return window.browserDetails.isPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isMSPointer\", {\n /**\n * Property is to get whether the browser has MSPointer support.\n *\n * @returns {boolean} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.isMSPointer)) {\n return window.browserDetails.isMSPointer = ('msPointerEnabled' in window.navigator);\n }\n return window.browserDetails.isMSPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isDevice\", {\n /**\n * Property is to get whether the userAgent is device based.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isDevice', REGX_MOBILE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos\", {\n /**\n * Property is to get whether the userAgent is IOS.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isIos', REGX_IOS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos7\", {\n /**\n * Property is to get whether the userAgent is Ios7.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isIos7', REGX_IOS7);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isAndroid\", {\n /**\n * Property is to get whether the userAgent is Android.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isAndroid', REGX_ANDROID);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWebView\", {\n /**\n * Property is to identify whether application ran in web view.\n *\n * @returns {boolean} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.isWebView)) {\n window.browserDetails.isWebView = !(isUndefined(window.cordova) && isUndefined(window.PhoneGap)\n && isUndefined(window.phonegap) && window.forge !== 'object');\n return window.browserDetails.isWebView;\n }\n return window.browserDetails.isWebView;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWindows\", {\n /**\n * Property is to get whether the userAgent is Windows.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isWindows', REGX_WINDOWS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchStartEvent\", {\n /**\n * Property is to get the touch start event. It returns event name based on browser.\n *\n * @returns {string} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchStartEvent)) {\n return window.browserDetails.touchStartEvent = Browser.getTouchStartEvent();\n }\n return window.browserDetails.touchStartEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchMoveEvent\", {\n /**\n * Property is to get the touch move event. It returns event name based on browser.\n *\n * @returns {string} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchMoveEvent)) {\n return window.browserDetails.touchMoveEvent = Browser.getTouchMoveEvent();\n }\n return window.browserDetails.touchMoveEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchEndEvent\", {\n /**\n * Property is to get the touch end event. It returns event name based on browser.\n *\n * @returns {string} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchEndEvent)) {\n return window.browserDetails.touchEndEvent = Browser.getTouchEndEvent();\n }\n return window.browserDetails.touchEndEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchCancelEvent\", {\n /**\n * Property is to cancel the touch end event.\n *\n * @returns {string} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchCancelEvent)) {\n return window.browserDetails.touchCancelEvent = Browser.getTouchCancelEvent();\n }\n return window.browserDetails.touchCancelEvent;\n },\n enumerable: true,\n configurable: true\n });\n /* istanbul ignore next */\n Browser.uA = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n return Browser;\n}());\nexport { Browser };\n","import { isNullOrUndefined as isNOU, isObject, merge } from './util';\n/**\n * The Fetch class provides a way to make asynchronous network requests, typically to retrieve resources from a server.\n * ```typescript\n * var fetchApi = new Fetch('index.html', 'GET');\n * fetchApi.send()\n * .then((value) => {\n * console.log(value);\n * }).catch((error) => {\n * console.log(error);\n * });\n * ```\n */\nvar Fetch = /** @class */ (function () {\n /**\n * Constructor for Fetch class.\n *\n * @param {string|Object} options - Specifies the URL or Request object with URL to which the request is to be sent.\n * @param {string} type - Specifies which request method is to be used, such as GET, POST, etc.\n * @param {string} contentType - Specifies the content type of the request, which is used to indicate the original media type of the resource.\n */\n function Fetch(options, type, contentType) {\n /**\n * Specifies which request method is to be used, such as GET, POST, etc.\n *\n * @default GET\n */\n this.type = 'GET';\n /**\n * A boolean value indicating whether to reject the promise or not.\n *\n * @private\n * @default true\n */\n this.emitError = true;\n if (typeof options === 'string') {\n this.url = options;\n this.type = !isNOU(type) ? type.toUpperCase() : this.type;\n this.contentType = contentType;\n }\n else if (isObject(options) && Object.keys(options).length > 0) {\n merge(this, options);\n }\n this.contentType = !isNOU(this.contentType) ? this.contentType : 'application/json; charset=utf-8';\n }\n /**\n * Send the request to server.\n *\n * @param {string|Object} data - Specifies the data that needs to be added to the request.\n * @returns {Promise} - Returns the response to a request.\n */\n Fetch.prototype.send = function (data) {\n var _this = this;\n var contentTypes = {\n 'application/json': 'json',\n 'multipart/form-data': 'formData',\n 'application/octet-stream': 'blob',\n 'application/x-www-form-urlencoded': 'formData'\n };\n try {\n if (isNOU(this.fetchRequest) && this.type === 'GET') {\n this.fetchRequest = new Request(this.url, { method: this.type });\n }\n else if (isNOU(this.fetchRequest)) {\n this.data = !isNOU(data) ? data : this.data;\n this.fetchRequest = new Request(this.url, {\n method: this.type,\n headers: { 'Content-Type': this.contentType },\n body: this.data\n });\n }\n var eventArgs = { cancel: false, fetchRequest: this.fetchRequest };\n this.triggerEvent(this['beforeSend'], eventArgs);\n if (eventArgs.cancel) {\n return null;\n }\n this.fetchResponse = fetch(this.fetchRequest);\n return this.fetchResponse.then(function (response) {\n _this.triggerEvent(_this['onLoad'], response);\n if (!response.ok) {\n throw new Error(response.statusText);\n }\n var responseType = 'text';\n for (var _i = 0, _a = Object.keys(contentTypes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (response.headers.get('Content-Type').indexOf(key) !== -1) {\n responseType = contentTypes[key];\n }\n }\n return response[responseType]();\n // eslint-disable-next-line\n }).then(function (data) {\n _this.triggerEvent(_this['onSuccess'], data, _this);\n return data;\n // eslint-disable-next-line\n }).catch(function (error) {\n var returnVal = {};\n if (_this.emitError) {\n _this.triggerEvent(_this['onFailure'], error);\n returnVal = Promise.reject(error);\n }\n return returnVal;\n });\n }\n catch (error) {\n return error;\n }\n };\n Fetch.prototype.triggerEvent = function (callback, data, instance) {\n if (!isNOU(callback) && typeof callback === 'function') {\n callback(data, instance);\n }\n };\n return Fetch;\n}());\nexport { Fetch };\n","import { debounce, extend } from './util';\nimport { Browser } from './browser';\n/**\n * EventHandler class provides option to add, remove, clear and trigger events to a HTML DOM element\n * ```html\n *
\n * \n * ```\n */\nvar EventHandler = /** @class */ (function () {\n function EventHandler() {\n }\n // to get the event data based on element\n EventHandler.addOrGetEventData = function (element) {\n if ('__eventList' in element) {\n return element.__eventList.events;\n }\n else {\n element.__eventList = {};\n return element.__eventList.events = [];\n }\n };\n /**\n * Add an event to the specified DOM element.\n *\n * @param {any} element - Target HTML DOM element\n * @param {string} eventName - A string that specifies the name of the event\n * @param {Function} listener - Specifies the function to run when the event occurs\n * @param {Object} bindTo - A object that binds 'this' variable in the event handler\n * @param {number} intDebounce - Specifies at what interval given event listener should be triggered.\n * @returns {Function} ?\n */\n EventHandler.add = function (element, eventName, listener, bindTo, intDebounce) {\n var eventData = EventHandler.addOrGetEventData(element);\n var debounceListener;\n if (intDebounce) {\n debounceListener = debounce(listener, intDebounce);\n }\n else {\n debounceListener = listener;\n }\n if (bindTo) {\n debounceListener = debounceListener.bind(bindTo);\n }\n var event = eventName.split(' ');\n for (var i = 0; i < event.length; i++) {\n eventData.push({\n name: event[parseInt(i.toString(), 10)],\n listener: listener,\n debounce: debounceListener\n });\n if (Browser.isIE) {\n element.addEventListener(event[parseInt(i.toString(), 10)], debounceListener);\n }\n else {\n element.addEventListener(event[parseInt(i.toString(), 10)], debounceListener, { passive: false });\n }\n }\n return debounceListener;\n };\n /**\n * Remove an event listener that has been attached before.\n *\n * @param {any} element - Specifies the target html element to remove the event\n * @param {string} eventName - A string that specifies the name of the event to remove\n * @param {Function} listener - Specifies the function to remove\n * @returns {void} ?\n */\n EventHandler.remove = function (element, eventName, listener) {\n var eventData = EventHandler.addOrGetEventData(element);\n var event = eventName.split(' ');\n var _loop_1 = function (j) {\n var index = -1;\n var debounceListener;\n if (eventData && eventData.length !== 0) {\n eventData.some(function (x, i) {\n return x.name === event[parseInt(j.toString(), 10)] && x.listener === listener ?\n (index = i, debounceListener = x.debounce, true) : false;\n });\n }\n if (index !== -1) {\n eventData.splice(index, 1);\n }\n if (debounceListener) {\n element.removeEventListener(event[parseInt(j.toString(), 10)], debounceListener);\n }\n };\n for (var j = 0; j < event.length; j++) {\n _loop_1(j);\n }\n };\n /**\n * Clear all the event listeners that has been previously attached to the element.\n *\n * @param {any} element - Specifies the target html element to clear the events\n * @returns {void} ?\n */\n EventHandler.clearEvents = function (element) {\n var eventData;\n var copyData;\n // eslint-disable-next-line\n eventData = EventHandler.addOrGetEventData(element);\n // eslint-disable-next-line\n copyData = extend([], copyData, eventData);\n for (var i = 0; i < copyData.length; i++) {\n element.removeEventListener(copyData[parseInt(i.toString(), 10)].name, copyData[parseInt(i.toString(), 10)].debounce);\n eventData.shift();\n }\n };\n /**\n * Trigger particular event of the element.\n *\n * @param {any} element - Specifies the target html element to trigger the events\n * @param {string} eventName - Specifies the event to trigger for the specified element.\n * Can be a custom event, or any of the standard events.\n * @param {any} eventProp - Additional parameters to pass on to the event properties\n * @returns {void} ?\n */\n EventHandler.trigger = function (element, eventName, eventProp) {\n var eventData = EventHandler.addOrGetEventData(element);\n for (var _i = 0, eventData_1 = eventData; _i < eventData_1.length; _i++) {\n var event_1 = eventData_1[_i];\n if (event_1.name === eventName) {\n event_1.debounce.call(this, eventProp);\n }\n }\n };\n return EventHandler;\n}());\nexport { EventHandler };\n","/**\n * Functions related to dom operations.\n */\nimport { EventHandler } from './event-handler';\nimport { isNullOrUndefined, getValue, setValue, isObject, extend } from './util';\nvar SVG_REG = /^svg|^path|^g/;\n/**\n * Function to create Html element.\n *\n * @param {string} tagName - Name of the tag, id and class names.\n * @param {ElementProperties} properties - Object to set properties in the element.\n * @param {ElementProperties} properties.id - To set the id to the created element.\n * @param {ElementProperties} properties.className - To add classes to the element.\n * @param {ElementProperties} properties.innerHTML - To set the innerHTML to element.\n * @param {ElementProperties} properties.styles - To set the some custom styles to element.\n * @param {ElementProperties} properties.attrs - To set the attributes to element.\n * @returns {any} ?\n * @private\n */\nexport function createElement(tagName, properties) {\n var element = (SVG_REG.test(tagName) ? document.createElementNS('http://www.w3.org/2000/svg', tagName) : document.createElement(tagName));\n if (typeof (properties) === 'undefined') {\n return element;\n }\n element.innerHTML = (properties.innerHTML ? properties.innerHTML : '');\n if (properties.className !== undefined) {\n element.className = properties.className;\n }\n if (properties.id !== undefined) {\n element.id = properties.id;\n }\n if (properties.styles !== undefined) {\n element.setAttribute('style', properties.styles);\n }\n if (properties.attrs !== undefined) {\n attributes(element, properties.attrs);\n }\n return element;\n}\n/**\n * The function used to add the classes to array of elements\n *\n * @param {Element[]|NodeList} elements - An array of elements that need to add a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @returns {any} .\n * @private\n */\nexport function addClass(elements, classes) {\n var classList = getClassList(classes);\n var regExp = RegExp;\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n for (var _b = 0, classList_1 = classList; _b < classList_1.length; _b++) {\n var className = classList_1[_b];\n if (isObject(ele)) {\n var curClass = getValue('attributes.className', ele);\n if (isNullOrUndefined(curClass)) {\n setValue('attributes.className', className, ele);\n }\n else if (!new regExp('\\\\b' + className + '\\\\b', 'i').test(curClass)) {\n setValue('attributes.className', curClass + ' ' + className, ele);\n }\n }\n else {\n if (!ele.classList.contains(className)) {\n ele.classList.add(className);\n }\n }\n }\n }\n return elements;\n}\n/**\n * The function used to add the classes to array of elements\n *\n * @param {Element[]|NodeList} elements - An array of elements that need to remove a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @returns {any} .\n * @private\n */\nexport function removeClass(elements, classes) {\n var classList = getClassList(classes);\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n var flag = isObject(ele);\n var canRemove = flag ? getValue('attributes.className', ele) : ele.className !== '';\n if (canRemove) {\n for (var _b = 0, classList_2 = classList; _b < classList_2.length; _b++) {\n var className = classList_2[_b];\n if (flag) {\n var classes_1 = getValue('attributes.className', ele);\n var classArr = classes_1.split(' ');\n var index = classArr.indexOf(className);\n if (index !== -1) {\n classArr.splice(index, 1);\n }\n setValue('attributes.className', classArr.join(' '), ele);\n }\n else {\n ele.classList.remove(className);\n }\n }\n }\n }\n return elements;\n}\n/**\n * The function used to get classlist.\n *\n * @param {string | string[]} classes - An element the need to check visibility\n * @returns {string[]} ?\n * @private\n */\nfunction getClassList(classes) {\n var classList = [];\n if (typeof classes === 'string') {\n classList.push(classes);\n }\n else {\n classList = classes;\n }\n return classList;\n}\n/**\n * The function used to check element is visible or not.\n *\n * @param {Element|Node} element - An element the need to check visibility\n * @returns {boolean} ?\n * @private\n */\nexport function isVisible(element) {\n var ele = element;\n return (ele.style.visibility === '' && ele.offsetWidth > 0);\n}\n/**\n * The function used to insert an array of elements into a first of the element.\n *\n * @param {Element[]|NodeList} fromElements - An array of elements that need to prepend.\n * @param {Element} toElement - An element that is going to prepend.\n * @param {boolean} isEval - ?\n * @returns {Element[] | NodeList} ?\n * @private\n */\nexport function prepend(fromElements, toElement, isEval) {\n var docFrag = document.createDocumentFragment();\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n toElement.insertBefore(docFrag, toElement.firstElementChild);\n if (isEval) {\n executeScript(toElement);\n }\n return fromElements;\n}\n/**\n * The function used to insert an array of elements into last of the element.\n *\n * @param {Element[]|NodeList} fromElements - An array of elements that need to append.\n * @param {Element} toElement - An element that is going to prepend.\n * @param {boolean} isEval - ?\n * @returns {Element[] | NodeList} ?\n * @private\n */\nexport function append(fromElements, toElement, isEval) {\n var docFrag = document.createDocumentFragment();\n if (fromElements instanceof NodeList) {\n while (fromElements.length > 0) {\n docFrag.appendChild(fromElements[0]);\n }\n }\n else {\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n }\n toElement.appendChild(docFrag);\n if (isEval) {\n executeScript(toElement);\n }\n return fromElements;\n}\n/**\n * The function is used to evaluate script from Ajax request\n *\n * @param {Element} ele - An element is going to evaluate the script\n * @returns {void} ?\n */\nfunction executeScript(ele) {\n var eleArray = ele.querySelectorAll('script');\n eleArray.forEach(function (element) {\n var script = document.createElement('script');\n script.text = element.innerHTML;\n document.head.appendChild(script);\n detach(script);\n });\n}\n/**\n * The function used to remove the element from parentnode\n *\n * @param {Element|Node|HTMLElement} element - An element that is going to detach from the Dom\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function detach(element) {\n var parentNode = element.parentNode;\n if (parentNode) {\n return parentNode.removeChild(element);\n }\n}\n/**\n * The function used to remove the element from Dom also clear the bounded events\n *\n * @param {Element|Node|HTMLElement} element - An element remove from the Dom\n * @returns {void} ?\n * @private\n */\nexport function remove(element) {\n var parentNode = element.parentNode;\n EventHandler.clearEvents(element);\n parentNode.removeChild(element);\n}\n/**\n * The function helps to set multiple attributes to an element\n *\n * @param {Element|Node} element - An element that need to set attributes.\n * @param {string} attributes - JSON Object that is going to as attributes.\n * @returns {Element} ?\n * @private\n */\n// eslint-disable-next-line\nexport function attributes(element, attributes) {\n var keys = Object.keys(attributes);\n var ele = element;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (isObject(ele)) {\n var iKey = key;\n if (key === 'tabindex') {\n iKey = 'tabIndex';\n }\n ele.attributes[\"\" + iKey] = attributes[\"\" + key];\n }\n else {\n ele.setAttribute(key, attributes[\"\" + key]);\n }\n }\n return ele;\n}\n/**\n * The function selects the element from giving context.\n *\n * @param {string} selector - Selector string need fetch element\n * @param {Document|Element} context - It is an optional type, That specifies a Dom context.\n * @param {boolean} needsVDOM ?\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function select(selector, context, needsVDOM) {\n if (context === void 0) { context = document; }\n selector = querySelectId(selector);\n return context.querySelector(selector);\n}\n/**\n * The function selects an array of element from the given context.\n *\n * @param {string} selector - Selector string need fetch element\n * @param {Document|Element} context - It is an optional type, That specifies a Dom context.\n * @param {boolean} needsVDOM ?\n * @returns {HTMLElement[]} ?\n * @private\n */\n// eslint-disable-next-line\nexport function selectAll(selector, context, needsVDOM) {\n if (context === void 0) { context = document; }\n selector = querySelectId(selector);\n var nodeList = context.querySelectorAll(selector);\n return nodeList;\n}\n/**\n * The function selects an id of element from the given context.\n *\n * @param {string} selector - Selector string need fetch element\n * @returns {string} ?\n * @private\n */\nfunction querySelectId(selector) {\n var charRegex = /(!|\"|\\$|%|&|'|\\(|\\)|\\*|\\/|:|;|<|=|\\?|@|\\]|\\^|`|{|}|\\||\\+|~)/g;\n if (selector.match(/#[0-9]/g) || selector.match(charRegex)) {\n var idList = selector.split(',');\n for (var i = 0; i < idList.length; i++) {\n var list = idList[parseInt(i.toString(), 10)].split(' ');\n for (var j = 0; j < list.length; j++) {\n if (list[parseInt(j.toString(), 10)].indexOf('#') > -1) {\n if (!list[parseInt(j.toString(), 10)].match(/\\[.*\\]/)) {\n var splitId = list[parseInt(j.toString(), 10)].split('#');\n if (splitId[1].match(/^\\d/) || splitId[1].match(charRegex)) {\n var setId = list[parseInt(j.toString(), 10)].split('.');\n setId[0] = setId[0].replace(/#/, '[id=\\'') + '\\']';\n list[parseInt(j.toString(), 10)] = setId.join('.');\n }\n }\n }\n }\n idList[parseInt(i.toString(), 10)] = list.join(' ');\n }\n return idList.join(',');\n }\n return selector;\n}\n/**\n * Returns single closest parent element based on class selector.\n *\n * @param {Element} element - An element that need to find the closest element.\n * @param {string} selector - A classSelector of closest element.\n * @returns {Element} ?\n * @private\n */\nexport function closest(element, selector) {\n var el = element;\n if (typeof el.closest === 'function') {\n return el.closest(selector);\n }\n while (el && el.nodeType === 1) {\n if (matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n return null;\n}\n/**\n * Returns all sibling elements of the given element.\n *\n * @param {Element|Node} element - An element that need to get siblings.\n * @returns {Element[]} ?\n * @private\n */\nexport function siblings(element) {\n var siblings = [];\n var childNodes = Array.prototype.slice.call(element.parentNode.childNodes);\n for (var _i = 0, childNodes_1 = childNodes; _i < childNodes_1.length; _i++) {\n var curNode = childNodes_1[_i];\n if (curNode.nodeType === Node.ELEMENT_NODE && element !== curNode) {\n siblings.push(curNode);\n }\n }\n return siblings;\n}\n/**\n * set the value if not exist. Otherwise set the existing value\n *\n * @param {HTMLElement} element - An element to which we need to set value.\n * @param {string} property - Property need to get or set.\n * @param {string} value - value need to set.\n * @returns {string} ?\n * @private\n */\nexport function getAttributeOrDefault(element, property, value) {\n var attrVal;\n var isObj = isObject(element);\n if (isObj) {\n attrVal = getValue('attributes.' + property, element);\n }\n else {\n attrVal = element.getAttribute(property);\n }\n if (isNullOrUndefined(attrVal) && value) {\n if (!isObj) {\n element.setAttribute(property, value.toString());\n }\n else {\n element.attributes[\"\" + property] = value;\n }\n attrVal = value;\n }\n return attrVal;\n}\n/**\n * Set the style attributes to Html element.\n *\n * @param {HTMLElement} element - Element which we want to set attributes\n * @param {any} attrs - Set the given attributes to element\n * @returns {void} ?\n * @private\n */\nexport function setStyleAttribute(element, attrs) {\n if (attrs !== undefined) {\n Object.keys(attrs).forEach(function (key) {\n // eslint-disable-next-line\n element.style[key] = attrs[key];\n });\n }\n}\n/**\n * Method for add and remove classes to a dom element.\n *\n * @param {Element} element - Element for add and remove classes\n * @param {string[]} addClasses - List of classes need to be add to the element\n * @param {string[]} removeClasses - List of classes need to be remove from the element\n * @returns {void} ?\n * @private\n */\nexport function classList(element, addClasses, removeClasses) {\n addClass([element], addClasses);\n removeClass([element], removeClasses);\n}\n/**\n * Method to check whether the element matches the given selector.\n *\n * @param {Element} element - Element to compare with the selector.\n * @param {string} selector - String selector which element will satisfy.\n * @returns {void} ?\n * @private\n */\nexport function matches(element, selector) {\n // eslint-disable-next-line\n var matches = element.matches || element.msMatchesSelector || element.webkitMatchesSelector;\n if (matches) {\n return matches.call(element, selector);\n }\n else {\n return [].indexOf.call(document.querySelectorAll(selector), element) !== -1;\n }\n}\n/**\n * Method to get the html text from DOM.\n *\n * @param {HTMLElement} ele - Element to compare with the selector.\n * @param {string} innerHTML - String selector which element will satisfy.\n * @returns {void} ?\n * @private\n */\nexport function includeInnerHTML(ele, innerHTML) {\n ele.innerHTML = innerHTML;\n}\n/**\n * Method to get the containsclass.\n *\n * @param {HTMLElement} ele - Element to compare with the selector.\n * @param {string} className - String selector which element will satisfy.\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function containsClass(ele, className) {\n if (isObject(ele)) {\n // eslint-disable-next-line\n return new RegExp('\\\\b' + className + '\\\\b', 'i').test(ele.attributes.className);\n }\n else {\n return ele.classList.contains(className);\n }\n}\n/**\n * Method to check whether the element matches the given selector.\n *\n * @param {Object} element - Element to compare with the selector.\n * @param {boolean} deep ?\n * @returns {any} ?\n * @private\n */\n// eslint-disable-next-line\nexport function cloneNode(element, deep) {\n if (isObject(element)) {\n if (deep) {\n return extend({}, {}, element, true);\n }\n }\n else {\n return element.cloneNode(deep);\n }\n}\n","import { isUndefined, isNullOrUndefined, merge, setImmediate, setValue, isBlazor, getValue, extend } from './util';\nimport { addClass, removeClass } from './dom';\nimport { Observer } from './observer';\nvar isColEName = new RegExp(']');\n/* tslint:enable:no-any */\n/**\n * Base library module is common module for Framework modules like touch,keyboard and etc.,\n *\n * @private\n */\nvar Base = /** @class */ (function () {\n /**\n * Base constructor accept options and element\n *\n * @param {Object} options ?\n * @param {string} element ?\n */\n function Base(options, element) {\n this.isRendered = false;\n this.isComplexArraySetter = false;\n this.isServerRendered = false;\n this.allowServerDataBinding = true;\n this.isProtectedOnChange = true;\n this.properties = {};\n this.changedProperties = {};\n this.oldProperties = {};\n this.bulkChanges = {};\n this.refreshing = false;\n this.ignoreCollectionWatch = false;\n // eslint-disable-next-line\n this.finalUpdate = function () { };\n this.childChangedProperties = {};\n this.modelObserver = new Observer(this);\n if (!isUndefined(element)) {\n if ('string' === typeof (element)) {\n this.element = document.querySelector(element);\n }\n else {\n this.element = element;\n }\n if (!isNullOrUndefined(this.element)) {\n this.isProtectedOnChange = false;\n this.addInstance();\n }\n }\n if (!isUndefined(options)) {\n this.setProperties(options, true);\n }\n this.isDestroyed = false;\n }\n /** Property base section */\n /**\n * Function used to set bunch of property at a time.\n *\n * @private\n * @param {Object} prop - JSON object which holds components properties.\n * @param {boolean} muteOnChange ? - Specifies to true when we set properties.\n * @returns {void} ?\n */\n Base.prototype.setProperties = function (prop, muteOnChange) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = !!muteOnChange;\n merge(this, prop);\n if (muteOnChange !== true) {\n merge(this.changedProperties, prop);\n this.dataBind();\n }\n else if (isBlazor() && this.isRendered) {\n this.serverDataBind(prop);\n }\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.isProtectedOnChange = prevDetection;\n };\n /**\n * Calls for child element data bind\n *\n * @param {Object} obj ?\n * @param {Object} parent ?\n * @returns {void} ?\n */\n // tslint:disable-next-line:no-any\n Base.callChildDataBind = function (obj, parent) {\n var keys = Object.keys(obj);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (parent[\"\" + key] instanceof Array) {\n for (var _a = 0, _b = parent[\"\" + key]; _a < _b.length; _a++) {\n var obj_1 = _b[_a];\n if (obj_1.dataBind !== undefined) {\n obj_1.dataBind();\n }\n }\n }\n else {\n parent[\"\" + key].dataBind();\n }\n }\n };\n Base.prototype.clearChanges = function () {\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.childChangedProperties = {};\n };\n /**\n * Bind property changes immediately to components\n *\n * @returns {void} ?\n */\n Base.prototype.dataBind = function () {\n Base.callChildDataBind(this.childChangedProperties, this);\n if (Object.getOwnPropertyNames(this.changedProperties).length) {\n var prevDetection = this.isProtectedOnChange;\n var newChanges = this.changedProperties;\n var oldChanges = this.oldProperties;\n this.clearChanges();\n this.isProtectedOnChange = true;\n this.onPropertyChanged(newChanges, oldChanges);\n this.isProtectedOnChange = prevDetection;\n }\n };\n /* tslint:disable:no-any */\n Base.prototype.serverDataBind = function (newChanges) {\n if (!isBlazor()) {\n return;\n }\n newChanges = newChanges ? newChanges : {};\n extend(this.bulkChanges, {}, newChanges, true);\n var sfBlazor = 'sfBlazor';\n if (this.allowServerDataBinding && window[\"\" + sfBlazor].updateModel) {\n window[\"\" + sfBlazor].updateModel(this);\n this.bulkChanges = {};\n }\n };\n /* tslint:enable:no-any */\n Base.prototype.saveChanges = function (key, newValue, oldValue) {\n if (isBlazor()) {\n // tslint:disable-next-line:no-any\n var newChanges = {};\n newChanges[\"\" + key] = newValue;\n this.serverDataBind(newChanges);\n }\n if (this.isProtectedOnChange) {\n return;\n }\n this.oldProperties[\"\" + key] = oldValue;\n this.changedProperties[\"\" + key] = newValue;\n this.finalUpdate();\n this.finalUpdate = setImmediate(this.dataBind.bind(this));\n };\n /** Event Base Section */\n /**\n * Adds the handler to the given event listener.\n *\n * @param {string} eventName - A String that specifies the name of the event\n * @param {Function} handler - Specifies the call to run when the event occurs.\n * @returns {void} ?\n */\n Base.prototype.addEventListener = function (eventName, handler) {\n this.modelObserver.on(eventName, handler);\n };\n /**\n * Removes the handler from the given event listener.\n *\n * @param {string} eventName - A String that specifies the name of the event to remove\n * @param {Function} handler - Specifies the function to remove\n * @returns {void} ?\n */\n Base.prototype.removeEventListener = function (eventName, handler) {\n this.modelObserver.off(eventName, handler);\n };\n /**\n * Triggers the handlers in the specified event.\n *\n * @private\n * @param {string} eventName - Specifies the event to trigger for the specified component properties.\n * Can be a custom event, or any of the standard events.\n * @param {Event} eventProp - Additional parameters to pass on to the event properties\n * @param {Function} successHandler - this function will invoke after event successfully triggered\n * @param {Function} errorHandler - this function will invoke after event if it failured to call.\n * @returns {void} ?\n */\n Base.prototype.trigger = function (eventName, eventProp, successHandler, errorHandler) {\n var _this = this;\n if (this.isDestroyed !== true) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = false;\n var data = this.modelObserver.notify(eventName, eventProp, successHandler, errorHandler);\n if (isColEName.test(eventName)) {\n var handler = getValue(eventName, this);\n if (handler) {\n var blazor = 'Blazor';\n if (window[\"\" + blazor]) {\n var promise = handler.call(this, eventProp);\n if (promise && typeof promise.then === 'function') {\n if (!successHandler) {\n data = promise;\n }\n else {\n promise.then(function (data) {\n if (successHandler) {\n data = typeof data === 'string' && _this.modelObserver.isJson(data) ?\n JSON.parse(data) : data;\n successHandler.call(_this, data);\n }\n }).catch(function (data) {\n if (errorHandler) {\n data = typeof data === 'string' && _this.modelObserver.isJson(data) ? JSON.parse(data) : data;\n errorHandler.call(_this, data);\n }\n });\n }\n }\n else if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n else {\n handler.call(this, eventProp);\n if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n }\n else if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n this.isProtectedOnChange = prevDetection;\n return data;\n }\n };\n /**\n * To maintain instance in base class\n *\n * @returns {void} ?\n */\n Base.prototype.addInstance = function () {\n // Add module class to the root element\n var moduleClass = 'e-' + this.getModuleName().toLowerCase();\n addClass([this.element], ['e-lib', moduleClass]);\n if (!isNullOrUndefined(this.element.ej2_instances)) {\n this.element.ej2_instances.push(this);\n }\n else {\n setValue('ej2_instances', [this], this.element);\n }\n };\n /**\n * To remove the instance from the element\n *\n * @returns {void} ?\n */\n Base.prototype.destroy = function () {\n var _this = this;\n // eslint-disable-next-line\n this.element.ej2_instances =\n this.element.ej2_instances.filter(function (i) { return i !== _this; });\n removeClass([this.element], ['e-' + this.getModuleName()]);\n if (this.element.ej2_instances.length === 0) {\n // Remove module class from the root element\n removeClass([this.element], ['e-lib']);\n }\n this.clearChanges();\n this.modelObserver.destroy();\n this.isDestroyed = true;\n };\n return Base;\n}());\nexport { Base };\n/**\n * Global function to get the component instance from the rendered element.\n *\n * @param {HTMLElement} elem Specifies the HTMLElement or element id string.\n * @param {string} comp Specifies the component module name or Component.\n * @returns {any} ?\n */\n// tslint:disable-next-line:no-any\nexport function getComponent(elem, comp) {\n var instance;\n var i;\n var ele = typeof elem === 'string' ? document.getElementById(elem) : elem;\n for (i = 0; i < ele.ej2_instances.length; i++) {\n instance = ele.ej2_instances[parseInt(i.toString(), 10)];\n if (typeof comp === 'string') {\n var compName = instance.getModuleName();\n if (comp === compName) {\n return instance;\n }\n }\n else {\n // tslint:disable-next-line:no-any\n if (instance instanceof comp) {\n return instance;\n }\n }\n }\n return undefined;\n}\n/**\n * Function to remove the child instances.\n *\n * @param {HTMLElement} element ?\n * @return {void}\n * @private\n */\n// tslint:disable-next-line:no-any\nexport function removeChildInstance(element) {\n // tslint:disable-next-line:no-any\n var childEle = [].slice.call(element.getElementsByClassName('e-control'));\n for (var i = 0; i < childEle.length; i++) {\n var compName = childEle[parseInt(i.toString(), 10)].classList[1].split('e-')[1];\n // tslint:disable-next-line:no-any\n var compInstance = getComponent(childEle[parseInt(i.toString(), 10)], compName);\n if (!isUndefined(compInstance)) {\n compInstance.destroy();\n }\n }\n}\n","import { createInstance, isUndefined, merge, extend, getValue } from './util';\n/**\n * Returns the Class Object\n *\n * @param {ClassObject} instance - instance of ClassObject\n * @param {string} curKey - key of the current instance\n * @param {Object} defaultValue - default Value\n * @param {Object[]} type ?\n * @returns {ClassObject} ?\n */\n// eslint-disable-next-line\nfunction getObject(instance, curKey, defaultValue, type) {\n // eslint-disable-next-line\n if (!instance.properties.hasOwnProperty(curKey) || !(instance.properties[curKey] instanceof type)) {\n instance.properties[\"\" + curKey] = createInstance(type, [instance, curKey, defaultValue]);\n }\n return instance.properties[\"\" + curKey];\n}\n/**\n * Returns object array\n *\n * @param {ClassObject} instance ?\n * @param {string} curKey ?\n * @param {Object[]} defaultValue ?\n * @param {Object} type ?\n * @param {boolean} isSetter ?\n * @param {boolean} isFactory ?\n * @returns {Object[]} ?\n */\n// eslint-disable-next-line\nfunction getObjectArray(instance, curKey, defaultValue, type, isSetter, isFactory) {\n var result = [];\n var len = defaultValue ? defaultValue.length : 0;\n for (var i = 0; i < len; i++) {\n var curType = type;\n if (isFactory) {\n curType = type(defaultValue[parseInt(i.toString(), 10)], instance);\n }\n if (isSetter) {\n var inst = createInstance(curType, [instance, curKey, {}, true]);\n inst.setProperties(defaultValue[parseInt(i.toString(), 10)], true);\n result.push(inst);\n }\n else {\n result.push(createInstance(curType, [instance, curKey, defaultValue[parseInt(i.toString(), 10)], false]));\n }\n }\n return result;\n}\n/**\n * Returns the properties of the object\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @returns {void} ?\n */\nfunction propertyGetter(defaultValue, curKey) {\n return function () {\n // eslint-disable-next-line\n if (!this.properties.hasOwnProperty(curKey)) {\n this.properties[\"\" + curKey] = defaultValue;\n }\n return this.properties[\"\" + curKey];\n };\n}\n/**\n * Set the properties for the object\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @returns {void} ?\n */\nfunction propertySetter(defaultValue, curKey) {\n return function (newValue) {\n if (this.properties[\"\" + curKey] !== newValue) {\n // eslint-disable-next-line\n var oldVal = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n this.saveChanges(curKey, newValue, oldVal);\n this.properties[\"\" + curKey] = newValue;\n }\n };\n}\n/**\n * Returns complex objects\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\n// eslint-disable-next-line\nfunction complexGetter(defaultValue, curKey, type) {\n return function () {\n return getObject(this, curKey, defaultValue, type);\n };\n}\n/**\n * Sets complex objects\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexSetter(defaultValue, curKey, type) {\n return function (newValue) {\n getObject(this, curKey, defaultValue, type).setProperties(newValue);\n };\n}\n/**\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @param {FunctionConstructor} type ?\n * @returns {void} ?\n */\n// eslint-disable-next-line\nfunction complexFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n // eslint-disable-next-line\n if (this.properties.hasOwnProperty(curKey)) {\n return this.properties[\"\" + curKey];\n }\n else {\n return getObject(this, curKey, defaultValue, curType);\n }\n };\n}\n/**\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var curType = type(newValue, this);\n getObject(this, curKey, defaultValue, curType).setProperties(newValue);\n };\n}\n/**\n *\n * @param {Object[]} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexArrayGetter(defaultValue, curKey, type) {\n return function () {\n var _this = this;\n // eslint-disable-next-line\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, type, false);\n this.properties[\"\" + curKey] = defCollection;\n }\n var ignore = ((this.controlParent !== undefined && this.controlParent.ignoreCollectionWatch)\n || this.ignoreCollectionWatch);\n // eslint-disable-next-line\n if (!this.properties[curKey].hasOwnProperty('push') && !ignore) {\n ['push', 'pop'].forEach(function (extendFunc) {\n var descriptor = {\n value: complexArrayDefinedCallback(extendFunc, curKey, type, _this.properties[\"\" + curKey]).bind(_this),\n configurable: true\n };\n Object.defineProperty(_this.properties[\"\" + curKey], extendFunc, descriptor);\n });\n }\n // eslint-disable-next-line\n if (!this.properties[curKey].hasOwnProperty('isComplexArray')) {\n Object.defineProperty(this.properties[\"\" + curKey], 'isComplexArray', { value: true });\n }\n return this.properties[\"\" + curKey];\n };\n}\n/**\n *\n * @param {Object[]} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexArraySetter(defaultValue, curKey, type) {\n return function (newValue) {\n this.isComplexArraySetter = true;\n var oldValueCollection = getObjectArray(this, curKey, defaultValue, type, false);\n var newValCollection = getObjectArray(this, curKey, newValue, type, true);\n this.isComplexArraySetter = false;\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[\"\" + curKey] = newValCollection;\n };\n}\n/**\n *\n * @param {Object[]} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexArrayFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n // eslint-disable-next-line\n var oldValueCollection = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n var newValCollection = getObjectArray(this, curKey, newValue, type, true, true);\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[\"\" + curKey] = newValCollection;\n };\n}\n/**\n *\n * @param {Object[]} defaultValue ?\n * @param {string} curKey ?\n * @param {FunctionConstructor} type ?\n * @returns {void} ?\n */\nfunction complexArrayFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n // eslint-disable-next-line\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, curType, false);\n this.properties[\"\" + curKey] = defCollection;\n }\n return this.properties[\"\" + curKey];\n };\n}\n/**\n *\n * @param {string} dFunc ?\n * @param {string} curKey ?\n * @param {Object} type ?\n * @param {Object} prop ?\n * @returns {Object} ?\n */\nfunction complexArrayDefinedCallback(dFunc, curKey, type, prop) {\n /* tslint:disable no-function-expression */\n return function () {\n var newValue = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newValue[_i] = arguments[_i];\n }\n var keyString = this.propName ? this.getParentKey() + '.' + curKey + '-' : curKey + '-';\n switch (dFunc) {\n case 'push':\n for (var i = 0; i < newValue.length; i++) {\n Array.prototype[\"\" + dFunc].apply(prop, [newValue[parseInt(i.toString(), 10)]]);\n var model_1 = getArrayModel(keyString + (prop.length - 1), newValue[parseInt(i.toString(), 10)], !this.controlParent, dFunc);\n this.serverDataBind(model_1, newValue[parseInt(i.toString(), 10)], false, dFunc);\n }\n break;\n case 'pop':\n Array.prototype[\"\" + dFunc].apply(prop);\n // eslint-disable-next-line\n var model = getArrayModel(keyString + prop.length, null, !this.controlParent, dFunc);\n this.serverDataBind(model, { ejsAction: 'pop' }, false, dFunc);\n break;\n }\n return prop;\n };\n}\n/**\n *\n * @param {string} keyString ?\n * @param {Object} value ?\n * @param {boolean} isControlParent ?\n * @param {string} arrayFunction ?\n * @returns {Object} ?\n */\nfunction getArrayModel(keyString, value, isControlParent, arrayFunction) {\n var modelObject = keyString;\n if (isControlParent) {\n modelObject = {};\n modelObject[\"\" + keyString] = value;\n if (value && typeof value === 'object') {\n var action = 'ejsAction';\n modelObject[\"\" + keyString][\"\" + action] = arrayFunction;\n }\n }\n return modelObject;\n}\n// eslint-disable-next-line\n/**\n * Method used to create property. General syntax below.\n *\n * @param {Object} defaultValue - Specifies the default value of property.\n * @returns {PropertyDecorator} ?\n * ```\n * @Property('TypeScript')\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Property(defaultValue) {\n return function (target, key) {\n var propertyDescriptor = {\n set: propertySetter(defaultValue, key),\n get: propertyGetter(defaultValue, key),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'prop', defaultValue);\n };\n}\n/**\n * Method used to create complex property. General syntax below.\n *\n * @param {any} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * @returns {PropertyDecorator} ?\n * ```\n * @Complex({},Type)\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Complex(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexSetter(defaultValue, key, type),\n get: complexGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex Factory property. General syntax below.\n *\n * @param {Function} type - Specifies the class factory type of complex object.\n * @returns {PropertyDecorator} ?\n * ```\n * @ComplexFactory(defaultType, factoryFunction)\n * propertyName: Type1 | Type2;\n * ```\n * @private\n */\nexport function ComplexFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexFactorySetter({}, key, type),\n get: complexFactoryGetter({}, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', {}, type);\n };\n}\n/**\n * Method used to create complex array property. General syntax below.\n *\n * @param {any} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * @returns {PropertyDecorator} ?\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Collection(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArraySetter(defaultValue, key, type),\n get: complexArrayGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex factory array property. General syntax below.\n *\n * @param {Function} type - Specifies the class type of complex object.\n * @returns {PropertyCollectionInfo} ?\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function CollectionFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArrayFactorySetter([], key, type),\n get: complexArrayFactoryGetter([], key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', {}, type);\n };\n}\n/**\n * Method used to create event property. General syntax below.\n *\n * @returns {PropertyDecorator} ?\n * ```\n * @Event(()=>{return true;})\n * ```\n * @private\n */\nexport function Event() {\n return function (target, key) {\n var eventDescriptor = {\n set: function (newValue) {\n var oldValue = this.properties[\"\" + key];\n if (oldValue !== newValue) {\n var finalContext = getParentContext(this, key);\n if (isUndefined(oldValue) === false) {\n finalContext.context.removeEventListener(finalContext.prefix, oldValue);\n }\n finalContext.context.addEventListener(finalContext.prefix, newValue);\n this.properties[\"\" + key] = newValue;\n }\n },\n get: propertyGetter(undefined, key),\n enumerable: true,\n configurable: true\n };\n Object.defineProperty(target, key, eventDescriptor);\n addPropertyCollection(target, key, 'event');\n };\n}\n/**\n * NotifyPropertyChanges is triggers the call back when the property has been changed.\n *\n * @param {Function} classConstructor ?\n * @returns {void} ?\n * ```\n * @NotifyPropertyChanges\n * class DemoClass implements INotifyPropertyChanged {\n *\n * @Property()\n * property1: string;\n *\n * dataBind: () => void;\n *\n * constructor() { }\n *\n * onPropertyChanged(newProp: any, oldProp: any) {\n * // Called when property changed\n * }\n * }\n * ```\n * @private\n */\n// eslint-disable-next-line\nexport function NotifyPropertyChanges(classConstructor) {\n /** Need to code */\n}\n/**\n * Method used to create the builderObject for the target component.\n *\n * @param {BuildInfo} target ?\n * @param {string} key ?\n * @param {string} propertyType ?\n * @param {Object} defaultValue ?\n * @param {Function} type ?\n * @returns {void} ?\n * @private\n */\nfunction addPropertyCollection(target, key, propertyType, defaultValue, type) {\n if (isUndefined(target.propList)) {\n target.propList = {\n props: [],\n complexProps: [],\n colProps: [],\n events: [],\n propNames: [],\n complexPropNames: [],\n colPropNames: [],\n eventNames: []\n };\n }\n // eslint-disable-next-line\n target.propList[propertyType + 's'].push({\n propertyName: key,\n defaultValue: defaultValue,\n type: type\n });\n // eslint-disable-next-line\n target.propList[propertyType + 'Names'].push(key);\n}\n/**\n * Returns an object containing the builder properties\n *\n * @param {Function} component ?\n * @returns {Object} ?\n * @private\n */\nfunction getBuilderProperties(component) {\n if (isUndefined(component.prototype.builderObject)) {\n component.prototype.builderObject = {\n properties: {}, propCollections: [], add: function () {\n this.isPropertyArray = true;\n this.propCollections.push(extend({}, this.properties, {}));\n }\n };\n var rex = /complex/;\n for (var _i = 0, _a = Object.keys(component.prototype.propList); _i < _a.length; _i++) {\n var key = _a[_i];\n var _loop_1 = function (prop) {\n if (rex.test(key)) {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n var childType = {};\n merge(childType, getBuilderProperties(prop.type));\n value(childType);\n var tempValue;\n if (!childType.isPropertyArray) {\n tempValue = extend({}, childType.properties, {});\n }\n else {\n tempValue = childType.propCollections;\n }\n this.properties[prop.propertyName] = tempValue;\n childType.properties = {};\n childType.propCollections = [];\n childType.isPropertyArray = false;\n return this;\n };\n }\n else {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n this.properties[prop.propertyName] = value;\n return this;\n };\n }\n };\n for (var _b = 0, _c = component.prototype.propList[\"\" + key]; _b < _c.length; _b++) {\n var prop = _c[_b];\n _loop_1(prop);\n }\n }\n }\n return component.prototype.builderObject;\n}\n/**\n * Method used to create builder for the components\n *\n * @param {any} component -specifies the target component for which builder to be created.\n * @returns {Object} ?\n * @private\n */\nexport function CreateBuilder(component) {\n var builderFunction = function (element) {\n this.element = element;\n return this;\n };\n var instanceFunction = function (element) {\n // eslint-disable-next-line\n if (!builderFunction.prototype.hasOwnProperty('create')) {\n builderFunction.prototype = getBuilderProperties(component);\n builderFunction.prototype.create = function () {\n var temp = extend({}, {}, this.properties);\n this.properties = {};\n return new component(temp, this.element);\n };\n }\n return new builderFunction(element);\n };\n return instanceFunction;\n}\n/**\n * Returns parent options for the object\n *\n * @param {Object} context ?\n * @param {string} prefix ?\n * @returns {ParentOption} ?\n * @private\n */\nfunction getParentContext(context, prefix) {\n // eslint-disable-next-line\n if (context.hasOwnProperty('parentObj') === false) {\n return { context: context, prefix: prefix };\n }\n else {\n var curText = getValue('propName', context);\n if (curText) {\n prefix = curText + '-' + prefix;\n }\n return getParentContext(getValue('parentObj', context), prefix);\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\nimport { createElement, selectAll, closest } from './dom';\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { EventHandler } from './event-handler';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\n/**\n * The Animation framework provide options to animate the html DOM elements\n * ```typescript\n * let animeObject = new Animation({\n * name: 'SlideLeftIn',\n * duration: 1000\n * });\n * animeObject.animate('#anime1');\n * animeObject.animate('#anime2', { duration: 500 });\n * ```\n */\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation(options) {\n var _this = _super.call(this, options, undefined) || this;\n /**\n * @private\n */\n _this.easing = {\n ease: 'cubic-bezier(0.250, 0.100, 0.250, 1.000)',\n linear: 'cubic-bezier(0.250, 0.250, 0.750, 0.750)',\n easeIn: 'cubic-bezier(0.420, 0.000, 1.000, 1.000)',\n easeOut: 'cubic-bezier(0.000, 0.000, 0.580, 1.000)',\n easeInOut: 'cubic-bezier(0.420, 0.000, 0.580, 1.000)',\n elasticInOut: 'cubic-bezier(0.5,-0.58,0.38,1.81)',\n elasticIn: 'cubic-bezier(0.17,0.67,0.59,1.81)',\n elasticOut: 'cubic-bezier(0.7,-0.75,0.99,1.01)'\n };\n return _this;\n }\n Animation_1 = Animation;\n /**\n * Applies animation to the current element.\n *\n * @param {string | HTMLElement} element - Element which needs to be animated.\n * @param {AnimationModel} options - Overriding default animation settings.\n * @returns {void} ?\n */\n Animation.prototype.animate = function (element, options) {\n options = !options ? {} : options;\n var model = this.getModel(options);\n if (typeof element === 'string') {\n var elements = Array.prototype.slice.call(selectAll(element, document));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element_1 = elements_1[_i];\n model.element = element_1;\n Animation_1.delayAnimation(model);\n }\n }\n else {\n model.element = element;\n Animation_1.delayAnimation(model);\n }\n };\n /**\n * Stop the animation effect on animated element.\n *\n * @param {HTMLElement} element - Element which needs to be stop the animation.\n * @param {AnimationOptions} model - Handling the animation model at stop function.\n * @return {void}\n */\n Animation.stop = function (element, model) {\n element.style.animation = '';\n element.removeAttribute('e-animate');\n var animationId = element.getAttribute('e-animation-id');\n if (animationId) {\n var frameId = parseInt(animationId, 10);\n cancelAnimationFrame(frameId);\n element.removeAttribute('e-animation-id');\n }\n if (model && model.end) {\n model.end.call(this, model);\n }\n };\n /**\n * Set delay to animation element\n *\n * @param {AnimationModel} model ?\n * @returns {void}\n */\n Animation.delayAnimation = function (model) {\n if (animationMode === 'Disable') {\n if (model.begin) {\n model.begin.call(this, model);\n }\n if (model.end) {\n model.end.call(this, model);\n }\n }\n else {\n if (model.delay) {\n setTimeout(function () { Animation_1.applyAnimation(model); }, model.delay);\n }\n else {\n Animation_1.applyAnimation(model);\n }\n }\n };\n /**\n * Triggers animation\n *\n * @param {AnimationModel} model ?\n * @returns {void}\n */\n Animation.applyAnimation = function (model) {\n var _this = this;\n model.timeStamp = 0;\n var step = 0;\n var timerId = 0;\n var prevTimeStamp = 0;\n var duration = model.duration;\n model.element.setAttribute('e-animate', 'true');\n var startAnimation = function (timeStamp) {\n try {\n if (timeStamp) {\n // let step: number = model.timeStamp = timeStamp - startTime;\n /** phantomjs workaround for timestamp fix */\n prevTimeStamp = prevTimeStamp === 0 ? timeStamp : prevTimeStamp;\n model.timeStamp = (timeStamp + model.timeStamp) - prevTimeStamp;\n prevTimeStamp = timeStamp;\n /** phantomjs workaround end */\n // trigger animation begin event\n if (!step && model.begin) {\n model.begin.call(_this, model);\n }\n step = step + 1;\n var avg = model.timeStamp / step;\n if (model.timeStamp < duration && model.timeStamp + avg < duration && model.element.getAttribute('e-animate')) {\n // apply animation effect to the current element\n model.element.style.animation = model.name + ' ' + model.duration + 'ms ' + model.timingFunction;\n if (model.progress) {\n model.progress.call(_this, model);\n }\n // repeat requestAnimationFrame\n requestAnimationFrame(startAnimation);\n }\n else {\n // clear requestAnimationFrame\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n model.element.removeAttribute('e-animate');\n model.element.style.animation = '';\n if (model.end) {\n model.end.call(_this, model);\n }\n }\n }\n else {\n //startTime = performance.now();\n // set initial requestAnimationFrame\n timerId = requestAnimationFrame(startAnimation);\n model.element.setAttribute('e-animation-id', timerId.toString());\n }\n }\n catch (e) {\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n if (model.fail) {\n model.fail.call(_this, e);\n }\n }\n };\n startAnimation();\n };\n /**\n * Returns Animation Model\n *\n * @param {AnimationModel} options ?\n * @returns {AnimationModel} ?\n */\n Animation.prototype.getModel = function (options) {\n return {\n name: options.name || this.name,\n delay: options.delay || this.delay,\n duration: (options.duration !== undefined ? options.duration : this.duration),\n begin: options.begin || this.begin,\n end: options.end || this.end,\n fail: options.fail || this.fail,\n progress: options.progress || this.progress,\n timingFunction: this.easing[options.timingFunction] ? this.easing[options.timingFunction] :\n (options.timingFunction || this.easing[this.timingFunction])\n };\n };\n /**\n * @private\n * @param {AnimationModel} newProp ?\n * @param {AnimationModel} oldProp ?\n * @returns {void} ?\n */\n // eslint-disable-next-line\n Animation.prototype.onPropertyChanged = function (newProp, oldProp) {\n // no code needed\n };\n /**\n * Returns module name as animation\n *\n * @private\n * @returns {void} ?\n */\n Animation.prototype.getModuleName = function () {\n return 'animation';\n };\n /**\n *\n * @private\n * @returns {void} ?\n */\n Animation.prototype.destroy = function () {\n //Override base destroy;\n };\n var Animation_1;\n __decorate([\n Property('FadeIn')\n ], Animation.prototype, \"name\", void 0);\n __decorate([\n Property(400)\n ], Animation.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], Animation.prototype, \"timingFunction\", void 0);\n __decorate([\n Property(0)\n ], Animation.prototype, \"delay\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"begin\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"end\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"fail\", void 0);\n Animation = Animation_1 = __decorate([\n NotifyPropertyChanges\n ], Animation);\n return Animation;\n}(Base));\nexport { Animation };\n/**\n * Ripple provides material theme's wave effect when an element is clicked\n * ```html\n *
\n * \n * ```\n *\n * @private\n * @param {HTMLElement} element - Target element\n * @param {RippleOptions} rippleOptions - Ripple options .\n * @param {Function} done .\n * @returns {void} .\n */\nexport function rippleEffect(element, rippleOptions, done) {\n var rippleModel = getRippleModel(rippleOptions);\n if (rippleModel.rippleFlag === false || (rippleModel.rippleFlag === undefined && !isRippleEnabled)) {\n return (function () {\n // do nothing.\n });\n }\n element.setAttribute('data-ripple', 'true');\n EventHandler.add(element, 'mousedown', rippleHandler, { parent: element, rippleOptions: rippleModel });\n EventHandler.add(element, 'mouseup', rippleUpHandler, { parent: element, rippleOptions: rippleModel, done: done });\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n if (Browser.isPointer) {\n EventHandler.add(element, 'transitionend', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n }\n return (function () {\n element.removeAttribute('data-ripple');\n EventHandler.remove(element, 'mousedown', rippleHandler);\n EventHandler.remove(element, 'mouseup', rippleUpHandler);\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n EventHandler.remove(element, 'transitionend', rippleLeaveHandler);\n });\n}\n/**\n * Handler for ripple model\n *\n * @param {RippleOptions} rippleOptions ?\n * @returns {RippleOptions} ?\n */\nfunction getRippleModel(rippleOptions) {\n var rippleModel = {\n selector: rippleOptions && rippleOptions.selector ? rippleOptions.selector : null,\n ignore: rippleOptions && rippleOptions.ignore ? rippleOptions.ignore : null,\n rippleFlag: rippleOptions && rippleOptions.rippleFlag,\n isCenterRipple: rippleOptions && rippleOptions.isCenterRipple,\n duration: rippleOptions && rippleOptions.duration ? rippleOptions.duration : 350\n };\n return rippleModel;\n}\n/**\n * Handler for ripple event\n *\n * @param {MouseEvent} e ?\n * @returns {void} ?\n * @private\n */\nfunction rippleHandler(e) {\n var target = (e.target);\n var selector = this.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (this.rippleOptions && closest(target, this.rippleOptions.ignore))) {\n return;\n }\n var offset = element.getBoundingClientRect();\n var offsetX = e.pageX - document.body.scrollLeft;\n var offsetY = e.pageY - ((!document.body.scrollTop && document.documentElement) ?\n document.documentElement.scrollTop : document.body.scrollTop);\n var pageX = Math.max(Math.abs(offsetX - offset.left), Math.abs(offsetX - offset.right));\n var pageY = Math.max(Math.abs(offsetY - offset.top), Math.abs(offsetY - offset.bottom));\n var radius = Math.sqrt(pageX * pageX + pageY * pageY);\n var diameter = radius * 2 + 'px';\n var x = offsetX - offset.left - radius;\n var y = offsetY - offset.top - radius;\n if (this.rippleOptions && this.rippleOptions.isCenterRipple) {\n x = 0;\n y = 0;\n diameter = '100%';\n }\n element.classList.add('e-ripple');\n var duration = this.rippleOptions.duration.toString();\n var styles = 'width: ' + diameter + ';height: ' + diameter + ';left: ' + x + 'px;top: ' + y + 'px;' +\n 'transition-duration: ' + duration + 'ms;';\n var rippleElement = createElement('div', { className: 'e-ripple-element', styles: styles });\n element.appendChild(rippleElement);\n window.getComputedStyle(rippleElement).getPropertyValue('opacity');\n rippleElement.style.transform = 'scale(1)';\n if (element !== this.parent) {\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: this.parent, rippleOptions: this.rippleOptions });\n }\n}\n/**\n * Handler for ripple element mouse up event\n *\n * @param {MouseEvent} e ?\n * @returns {void} ?\n * @private\n */\nfunction rippleUpHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for ripple element mouse move event\n *\n * @param {MouseEvent} e ?\n * @returns {void} ?\n * @private\n */\nfunction rippleLeaveHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for removing ripple element\n *\n * @param {MouseEvent} e ?\n * @param {RippleArgs} eventArgs ?\n * @returns {void} ?\n * @private\n */\nfunction removeRipple(e, eventArgs) {\n var duration = eventArgs.rippleOptions.duration;\n var target = (e.target);\n var selector = eventArgs.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (element && element.className.indexOf('e-ripple') === -1)) {\n return;\n }\n var rippleElements = selectAll('.e-ripple-element', element);\n var rippleElement = rippleElements[rippleElements.length - 1];\n if (rippleElement) {\n rippleElement.style.opacity = '0.5';\n }\n if (eventArgs.parent !== element) {\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n }\n /* tslint:disable:align */\n setTimeout(function () {\n if (rippleElement && rippleElement.parentNode) {\n rippleElement.parentNode.removeChild(rippleElement);\n }\n if (!element.getElementsByClassName('e-ripple-element').length) {\n element.classList.remove('e-ripple');\n }\n if (eventArgs.done) {\n eventArgs.done(e);\n }\n }, duration);\n}\nexport var isRippleEnabled = false;\n/**\n * Animation Module provides support to enable ripple effect functionality to Essential JS 2 components.\n *\n * @param {boolean} isRipple Specifies the boolean value to enable or disable ripple effect.\n * @returns {boolean} ?\n */\nexport function enableRipple(isRipple) {\n isRippleEnabled = isRipple;\n return isRippleEnabled;\n}\n/**\n * Defines the Modes of Global animation.\n *\n * @private\n */\nexport var animationMode = '';\n/**\n * Method for set the Global animation modes for Syncfusion Blazor components.\n *\n * @param {string} value - Specifies the animation mode.\n * @returns {void}\n */\nexport function setGlobalAnimation(value) {\n animationMode = value;\n}\n","/**\n * Module loading operations\n */\nimport { createInstance, setValue, getValue, deleteObject } from './util';\nvar MODULE_SUFFIX = 'Module';\nvar ModuleLoader = /** @class */ (function () {\n function ModuleLoader(parent) {\n this.loadedModules = [];\n this.parent = parent;\n }\n /**\n * Inject required modules in component library\n *\n * @returns {void} ?\n * @param {ModuleDeclaration[]} requiredModules - Array of modules to be required\n * @param {Function[]} moduleList - Array of modules to be injected from sample side\n */\n ModuleLoader.prototype.inject = function (requiredModules, moduleList) {\n var reqLength = requiredModules.length;\n if (reqLength === 0) {\n this.clean();\n return;\n }\n if (this.loadedModules.length) {\n this.clearUnusedModule(requiredModules);\n }\n for (var i = 0; i < reqLength; i++) {\n var modl = requiredModules[parseInt(i.toString(), 10)];\n for (var _i = 0, moduleList_1 = moduleList; _i < moduleList_1.length; _i++) {\n var module = moduleList_1[_i];\n var modName = modl.member;\n if (module && module.prototype.getModuleName() === modl.member && !this.isModuleLoaded(modName)) {\n var moduleObject = createInstance(module, modl.args);\n var memberName = this.getMemberName(modName);\n if (modl.isProperty) {\n setValue(memberName, module, this.parent);\n }\n else {\n setValue(memberName, moduleObject, this.parent);\n }\n var loadedModule = modl;\n loadedModule.member = memberName;\n this.loadedModules.push(loadedModule);\n }\n }\n }\n };\n /**\n * To remove the created object while destroying the control\n *\n * @returns {void}\n */\n ModuleLoader.prototype.clean = function () {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var modules = _a[_i];\n if (!modules.isProperty) {\n getValue(modules.member, this.parent).destroy();\n }\n }\n this.loadedModules = [];\n };\n /**\n * Removes all unused modules\n *\n * @param {ModuleDeclaration[]} moduleList ?\n * @returns {void} ?\n */\n ModuleLoader.prototype.clearUnusedModule = function (moduleList) {\n var _this = this;\n var usedModules = moduleList.map(function (arg) { return _this.getMemberName(arg.member); });\n var removableModule = this.loadedModules.filter(function (module) {\n return usedModules.indexOf(module.member) === -1;\n });\n for (var _i = 0, removableModule_1 = removableModule; _i < removableModule_1.length; _i++) {\n var mod = removableModule_1[_i];\n if (!mod.isProperty) {\n getValue(mod.member, this.parent).destroy();\n }\n this.loadedModules.splice(this.loadedModules.indexOf(mod), 1);\n deleteObject(this.parent, mod.member);\n }\n };\n /**\n * To get the name of the member.\n *\n * @param {string} name ?\n * @returns {string} ?\n */\n ModuleLoader.prototype.getMemberName = function (name) {\n return name[0].toLowerCase() + name.substring(1) + MODULE_SUFFIX;\n };\n /**\n * Returns boolean based on whether the module specified is loaded or not\n *\n * @param {string} modName ?\n * @returns {boolean} ?\n */\n ModuleLoader.prototype.isModuleLoaded = function (modName) {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var mod = _a[_i];\n if (mod.member === this.getMemberName(modName)) {\n return true;\n }\n }\n return false;\n };\n return ModuleLoader;\n}());\nexport { ModuleLoader };\n","import { createElement } from './dom';\nimport { getValue, containerObject, setValue, isNullOrUndefined } from './util';\nexport var componentList = ['grid', 'pivotview', 'treegrid', 'spreadsheet', 'rangeNavigator', 'DocumentEditor', 'listbox', 'inplaceeditor', 'PdfViewer', 'richtexteditor', 'DashboardLayout', 'chart', 'stockChart', 'circulargauge', 'diagram', 'heatmap', 'lineargauge', 'maps', 'slider', 'smithchart', 'barcode', 'sparkline', 'treemap', 'bulletChart', 'kanban', 'daterangepicker', 'schedule', 'gantt', 'signature', 'query-builder', 'drop-down-tree', 'carousel', 'filemanager', 'uploader', 'accordion', 'tab', 'treeview'];\nvar bypassKey = [115, 121, 110, 99, 102, 117, 115, 105,\n 111, 110, 46, 105, 115, 76, 105, 99, 86, 97, 108,\n 105, 100, 97, 116, 101, 100];\nvar accountURL;\n/**\n * License validation module\n *\n * @private\n */\nvar LicenseValidator = /** @class */ (function () {\n function LicenseValidator(key) {\n this.isValidated = false;\n this.isLicensed = true;\n this.version = '22';\n this.platform = /JavaScript|ASPNET|ASPNETCORE|ASPNETMVC|FileFormats|essentialstudio/i;\n this.errors = {\n noLicense: 'This application was built using a trial version of Syncfusion Essential Studio.' +\n ' To remove the license validation message permanently, a valid license key must be included.',\n trailExpired: 'This application was built using a trial version of Syncfusion Essential Studio.' +\n ' To remove the license validation message permanently, a valid license key must be included.',\n versionMismatched: 'The included Syncfusion license key is invalid.',\n platformMismatched: 'The included Syncfusion license key is invalid.',\n invalidKey: 'The included Syncfusion license key is invalid.'\n };\n /**\n * To manage licensing operation.\n */\n this.manager = (function () {\n var licKey = null;\n /**\n * Sets the license key.\n *\n * @param {string} key - Specifies the license key.\n * @returns {void}\n */\n function set(key) { licKey = key; }\n /**\n * Gets the license key.\n *\n * @returns {string} -Gets the license key.\n */\n function get() { return licKey; }\n return {\n setKey: set,\n getKey: get\n };\n })();\n /**\n * To manage npx licensing operation.\n */\n this.npxManager = (function () {\n var npxLicKey = 'npxKeyReplace';\n /**\n * Gets the license key.\n *\n * @returns {string} - Gets the license key.\n */\n function get() { return npxLicKey; }\n return {\n getKey: get\n };\n })();\n this.manager.setKey(key);\n }\n /**\n * To validate the provided license key.\n */\n LicenseValidator.prototype.validate = function () {\n var contentKey = [115, 121, 110, 99, 102, 117, 115, 105, 111, 110, 46,\n 108, 105, 99, 101, 110, 115, 101, 67, 111, 110, 116, 101, 110, 116];\n var URLKey = [115, 121, 110, 99, 102, 117, 115, 105, 111, 110, 46,\n 99, 108, 97, 105, 109, 65, 99, 99, 111, 117, 110, 116, 85, 82, 76];\n if (!this.isValidated && (containerObject && !getValue(convertToChar(bypassKey), containerObject) && !getValue('Blazor', containerObject))) {\n var validateMsg = void 0;\n var validateURL = void 0;\n if ((this.manager && this.manager.getKey()) || (this.npxManager && this.npxManager.getKey() !== 'npxKeyReplace')) {\n var result = this.getInfoFromKey();\n if (result && result.length) {\n for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n var res = result_1[_i];\n if (!this.platform.test(res.platform) || res.invalidPlatform) {\n validateMsg = this.errors.platformMismatched;\n }\n else if (res.version.indexOf(this.version) === -1) {\n validateMsg = this.errors.versionMismatched;\n validateMsg = validateMsg.replace('##LicenseVersion', res.version);\n validateMsg = validateMsg.replace('##Requireversion', this.version + '.x');\n }\n else if (res.expiryDate) {\n var expDate = new Date(res.expiryDate);\n var currDate = new Date();\n if (expDate !== currDate && expDate < currDate) {\n validateMsg = this.errors.trailExpired;\n }\n else {\n break;\n }\n }\n }\n }\n else {\n validateMsg = this.errors.invalidKey;\n }\n }\n else {\n var licenseContent = getValue(convertToChar(contentKey), containerObject);\n validateURL = getValue(convertToChar(URLKey), containerObject);\n if (licenseContent && licenseContent !== '') {\n validateMsg = licenseContent;\n }\n else {\n validateMsg = this.errors.noLicense;\n }\n }\n if (validateMsg && typeof document !== 'undefined' && !isNullOrUndefined(document)) {\n accountURL = (validateURL && validateURL !== '') ? validateURL : \"https://www.syncfusion.com/account/claim-license-key?pl=SmF2YVNjcmlwdA==&vs=MjI=&utm_source=license&utm_medium=listing&utm_campaign=license-information\";\n var errorDiv = createElement('div', {\n innerHTML: \"\" + validateMsg + ' ' + 'Claim your free account'\n });\n errorDiv.setAttribute('style', \"position: fixed;\\n top: 10px;\\n left: 10px;\\n right: 10px;\\n font-size: 14px;\\n background: #EEF2FF;\\n color: #222222;\\n z-index: 999999999;\\n text-align: left;\\n border: 1px solid #EEEEEE;\\n padding: 10px 11px 10px 50px;\\n border-radius: 8px;\\n font-family: Helvetica Neue, Helvetica, Arial;\");\n document.body.appendChild(errorDiv);\n this.isLicensed = false;\n }\n this.isValidated = true;\n setValue(convertToChar(bypassKey), this.isValidated, containerObject);\n }\n return this.isLicensed;\n };\n LicenseValidator.prototype.getDecryptedData = function (key) {\n try {\n return atob(key);\n }\n catch (error) {\n return '';\n }\n };\n /**\n * Get license information from key.\n *\n * @returns {IValidator} - Get license information from key.\n */\n LicenseValidator.prototype.getInfoFromKey = function () {\n try {\n var licKey = '';\n var pkey = [5439488, 7929856, 5111808, 6488064, 4587520, 7667712, 5439488,\n 6881280, 5177344, 7208960, 4194304, 4456448, 6619136, 7733248, 5242880, 7077888,\n 6356992, 7602176, 4587520, 7274496, 7471104, 7143424];\n var decryptedStr = [];\n var resultArray = [];\n var invalidPlatform = false;\n var isNpxKey = false;\n if (this.manager.getKey()) {\n licKey = this.manager.getKey();\n }\n else {\n isNpxKey = true;\n licKey = this.npxManager.getKey().split('npxKeyReplace')[1];\n }\n var licKeySplit = licKey.split(';');\n for (var _i = 0, licKeySplit_1 = licKeySplit; _i < licKeySplit_1.length; _i++) {\n var lKey = licKeySplit_1[_i];\n var decodeStr = this.getDecryptedData(lKey);\n if (!decodeStr) {\n continue;\n }\n var k = 0;\n var buffr = '';\n if (!isNpxKey) {\n for (var i = 0; i < decodeStr.length; i++, k++) {\n if (k === pkey.length) {\n k = 0;\n }\n var c = decodeStr.charCodeAt(i);\n buffr += String.fromCharCode(c ^ (pkey[parseInt(k.toString(), 10)] >> 16));\n }\n }\n else {\n var charKey = decodeStr[decodeStr.length - 1];\n var decryptedKey = [];\n for (var i = 0; i < decodeStr.length; i++) {\n decryptedKey[parseInt(i.toString(), 10)] = decodeStr[parseInt(i.toString(), 10)].charCodeAt(0) - charKey.charCodeAt(0);\n }\n for (var i = 0; i < decryptedKey.length; i++) {\n buffr += String.fromCharCode(decryptedKey[parseInt(i.toString(), 10)]);\n }\n }\n if (this.platform.test(buffr)) {\n decryptedStr = buffr.split(';');\n invalidPlatform = false;\n // checked the length to verify the key in proper strucutre\n if (decryptedStr.length > 3) {\n resultArray.push({ platform: decryptedStr[0],\n version: decryptedStr[1],\n expiryDate: decryptedStr[2] });\n }\n }\n else if (buffr && buffr.split(';').length > 3) {\n invalidPlatform = true;\n }\n }\n if (invalidPlatform && !resultArray.length) {\n return [{ invalidPlatform: invalidPlatform }];\n }\n else {\n return resultArray.length ? resultArray : null;\n }\n }\n catch (error) {\n return null;\n }\n };\n return LicenseValidator;\n}());\nvar licenseValidator = new LicenseValidator();\n/**\n * Converts the given number to characters.\n *\n * @param {number} cArr - Specifies the license key as number.\n * @returns {string}\n */\nfunction convertToChar(cArr) {\n var ret = '';\n for (var _i = 0, cArr_1 = cArr; _i < cArr_1.length; _i++) {\n var arr = cArr_1[_i];\n ret += String.fromCharCode(arr);\n }\n return ret;\n}\n/**\n * To set license key.\n *\n * @param {string} key - license key\n * @returns {void}\n */\nexport function registerLicense(key) {\n licenseValidator = new LicenseValidator(key);\n}\nexport var validateLicense = function (key) {\n if (key) {\n registerLicense(key);\n }\n return licenseValidator.validate();\n};\nexport var getVersion = function () {\n return licenseValidator.version;\n};\n// Method for create overlay over the sample\nexport var createLicenseOverlay = function () {\n var bannerTemplate = \"\\n
\\n
\\n
\\n \\n
\\n
Claim your FREE account and get a key in less than a minute
\\n
    \\n
  • Access to a 30-day free trial of any of our products.
  • \\n
  • Access to 24x5 support by developers via the support tickets, forum, feature & feedback page and chat.
  • \\n
  • 200+ ebooks on the latest technologies, industry trends, and research topics.\\n
  • \\n
  • Largest collection of over 7,000 flat and wireframe icons for free with Syncfusion Metro Studio.
  • \\n
  • Free and unlimited access to Syncfusion technical blogs and whitepapers.
  • \\n
\\n
Syncfusion is trusted by 29,000+ businesses worldwide
\\n \\n Claim your FREE account\\n
have a Syncfusion account? Sign In
\\n
\\n
\";\n if (typeof document !== 'undefined' && !isNullOrUndefined(document)) {\n var errorBackground = createElement('div', {\n innerHTML: bannerTemplate\n });\n document.body.appendChild(errorBackground);\n }\n};\n","import { getValue, setValue, merge, isBlazor } from './util';\nimport { Base } from './base';\n/**\n * To detect the changes for inner properties.\n *\n * @private\n */\nvar ChildProperty = /** @class */ (function () {\n function ChildProperty(parent, propName, defaultValue, isArray) {\n this.isComplexArraySetter = false;\n this.properties = {};\n this.changedProperties = {};\n this.childChangedProperties = {};\n this.oldProperties = {};\n // eslint-disable-next-line\n this.finalUpdate = function () { };\n this.callChildDataBind = getValue('callChildDataBind', Base);\n this.parentObj = parent;\n this.controlParent = this.parentObj.controlParent || this.parentObj;\n this.propName = propName;\n this.isParentArray = isArray;\n this.setProperties(defaultValue, true);\n }\n /**\n * Updates the property changes\n *\n * @param {boolean} val ?\n * @param {string} propName ?\n * @returns {void} ?\n */\n ChildProperty.prototype.updateChange = function (val, propName) {\n if (val === true) {\n this.parentObj.childChangedProperties[\"\" + propName] = val;\n }\n else {\n delete this.parentObj.childChangedProperties[\"\" + propName];\n }\n if (this.parentObj.updateChange) {\n this.parentObj.updateChange(val, this.parentObj.propName);\n }\n };\n /**\n * Updates time out duration\n *\n * @returns {void} ?\n */\n ChildProperty.prototype.updateTimeOut = function () {\n if (this.parentObj.updateTimeOut) {\n this.parentObj.finalUpdate();\n this.parentObj.updateTimeOut();\n }\n else {\n var changeTime_1 = setTimeout(this.parentObj.dataBind.bind(this.parentObj));\n var clearUpdate = function () {\n clearTimeout(changeTime_1);\n };\n this.finalUpdate = clearUpdate;\n }\n };\n /**\n * Clears changed properties\n *\n * @returns {void} ?\n */\n ChildProperty.prototype.clearChanges = function () {\n this.finalUpdate();\n this.updateChange(false, this.propName);\n this.oldProperties = {};\n this.changedProperties = {};\n };\n /**\n * Set property changes\n *\n * @param {Object} prop ?\n * @param {boolean} muteOnChange ?\n * @returns {void} ?\n */\n ChildProperty.prototype.setProperties = function (prop, muteOnChange) {\n if (muteOnChange === true) {\n merge(this, prop);\n this.updateChange(false, this.propName);\n this.clearChanges();\n }\n else {\n merge(this, prop);\n }\n };\n /**\n * Binds data\n *\n * @returns {void} ?\n */\n ChildProperty.prototype.dataBind = function () {\n this.callChildDataBind(this.childChangedProperties, this);\n if (this.isParentArray) {\n var curIndex = this.parentObj[this.propName].indexOf(this);\n if (Object.keys(this.changedProperties).length) {\n setValue(this.propName + '.' + curIndex, this.changedProperties, this.parentObj.changedProperties);\n setValue(this.propName + '.' + curIndex, this.oldProperties, this.parentObj.oldProperties);\n }\n }\n else {\n this.parentObj.changedProperties[this.propName] = this.changedProperties;\n this.parentObj.oldProperties[this.propName] = this.oldProperties;\n }\n this.clearChanges();\n };\n /**\n * Saves changes to newer values\n *\n * @param {string} key ?\n * @param {Object} newValue ?\n * @param {Object} oldValue ?\n * @param {boolean} restrictServerDataBind ?\n * @returns {void} ?\n */\n ChildProperty.prototype.saveChanges = function (key, newValue, oldValue, restrictServerDataBind) {\n if (this.controlParent.isProtectedOnChange) {\n return;\n }\n if (!restrictServerDataBind) {\n this.serverDataBind(key, newValue, true);\n }\n this.oldProperties[\"\" + key] = oldValue;\n this.changedProperties[\"\" + key] = newValue;\n this.updateChange(true, this.propName);\n this.finalUpdate();\n this.updateTimeOut();\n };\n ChildProperty.prototype.serverDataBind = function (key, value, isSaveChanges, action) {\n if (isBlazor() && !this.parentObj.isComplexArraySetter) {\n var parent_1;\n var newChanges = {};\n var parentKey = isSaveChanges ? this.getParentKey(true) + '.' + key : key;\n /* istanbul ignore else */\n if (parentKey.indexOf('.') !== -1) {\n var complexKeys = parentKey.split('.');\n parent_1 = newChanges;\n for (var i = 0; i < complexKeys.length; i++) {\n var isFinal = i === complexKeys.length - 1;\n parent_1[complexKeys[parseInt(i.toString(), 10)]] = isFinal ? value : {};\n parent_1 = isFinal ? parent_1 : parent_1[complexKeys[parseInt(i.toString(), 10)]];\n }\n }\n else {\n newChanges[\"\" + parentKey] = {};\n parent_1 = newChanges[\"\" + parentKey];\n newChanges[\"\" + parentKey][\"\" + key] = value;\n }\n /* istanbul ignore next */\n if (this.isParentArray) {\n var actionProperty = 'ejsAction';\n parent_1[\"\" + actionProperty] = action ? action : 'none';\n }\n this.controlParent.serverDataBind(newChanges);\n }\n };\n ChildProperty.prototype.getParentKey = function (isSaveChanges) {\n // eslint-disable-next-line\n var index = '';\n var propName = this.propName;\n /* istanbul ignore next */\n if (this.isParentArray) {\n index = this.parentObj[this.propName].indexOf(this);\n var valueLength = this.parentObj[this.propName].length;\n valueLength = isSaveChanges ? valueLength : (valueLength > 0 ? valueLength - 1 : 0);\n index = index !== -1 ? '-' + index : '-' + valueLength;\n propName = propName + index;\n }\n if (this.controlParent !== this.parentObj) {\n propName = this.parentObj.getParentKey() + '.' + this.propName + index;\n }\n return propName;\n };\n return ChildProperty;\n}());\nexport { ChildProperty };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\nimport { isUndefined, getValue, isNullOrUndefined, setValue, uniqueID, isBlazor } from './util';\nimport { ModuleLoader } from './module-loader';\nimport { Base } from './base';\nimport { Observer } from './observer';\nimport { ChildProperty } from './child-property';\nimport { Property, NotifyPropertyChanges } from './notify-property-change';\nimport { onIntlChange, rightToLeft, defaultCulture } from './internationalization';\nimport { createElement, addClass, removeClass, select } from './dom';\nimport { validateLicense, createLicenseOverlay, componentList } from './validate-lic';\nvar componentCount = 0;\nvar lastPageID;\nvar lastHistoryLen = 0;\n// Decalre the static variable to count the instance\nvar instancecount = 0;\n// Decalre the static variable to find if control limit exceed or not\nvar isvalid = true;\n// We have added styles to inline type so here declare the static variable to detect if banner is added or not\nvar isBannerAdded = false;\nexport var versionBasedStatePersistence = false;\n/**\n * To enable or disable version based statePersistence functionality for all components globally.\n *\n * @param {boolean} status - Optional argument Specifies the status value to enable or disable versionBasedStatePersistence option.\n * @returns {void}\n */\nexport function enableVersionBasedPersistence(status) {\n versionBasedStatePersistence = status;\n}\n/**\n * Base class for all Essential JavaScript components\n */\nvar Component = /** @class */ (function (_super) {\n __extends(Component, _super);\n /**\n * Initialize the constructor for component base\n *\n * @param {Object} options ?\n * @param {string} selector ?\n */\n function Component(options, selector) {\n var _this = _super.call(this, options, selector) || this;\n _this.randomId = uniqueID();\n /**\n * string template option for Blazor template rendering\n *\n * @private\n */\n _this.isStringTemplate = false;\n _this.needsID = false;\n _this.isReactHybrid = false;\n if (isNullOrUndefined(_this.enableRtl)) {\n _this.setProperties({ 'enableRtl': rightToLeft }, true);\n }\n if (isNullOrUndefined(_this.locale)) {\n _this.setProperties({ 'locale': defaultCulture }, true);\n }\n _this.moduleLoader = new ModuleLoader(_this);\n _this.localObserver = new Observer(_this);\n // tslint:disable-next-line:no-function-constructor-with-string-args\n onIntlChange.on('notifyExternalChange', _this.detectFunction, _this, _this.randomId);\n // Based on the considered control list we have count the instance\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\" && !validateLicense()) {\n if (componentList.indexOf(_this.getModuleName()) !== -1) {\n instancecount = instancecount + 1;\n if (instancecount > 5) {\n isvalid = false;\n }\n }\n }\n if (!isUndefined(selector)) {\n _this.appendTo();\n }\n return _this;\n }\n Component.prototype.requiredModules = function () {\n return [];\n };\n /**\n * Destroys the sub modules while destroying the widget\n *\n * @returns {void} ?\n */\n Component.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (this.enablePersistence) {\n this.setPersistData();\n this.detachUnloadEvent();\n }\n this.localObserver.destroy();\n if (this.refreshing) {\n return;\n }\n removeClass([this.element], ['e-control']);\n this.trigger('destroyed', { cancel: false });\n _super.prototype.destroy.call(this);\n this.moduleLoader.clean();\n onIntlChange.off('notifyExternalChange', this.detectFunction, this.randomId);\n };\n /**\n * Applies all the pending property changes and render the component again.\n *\n * @returns {void} ?\n */\n Component.prototype.refresh = function () {\n this.refreshing = true;\n this.moduleLoader.clean();\n this.destroy();\n this.clearChanges();\n this.localObserver = new Observer(this);\n this.preRender();\n this.injectModules();\n this.render();\n this.refreshing = false;\n };\n Component.prototype.accessMount = function () {\n if (this.mount && !this.isReactHybrid) {\n this.mount();\n }\n };\n /**\n * Returns the route element of the component\n *\n * @returns {HTMLElement} ?\n */\n Component.prototype.getRootElement = function () {\n if (this.isReactHybrid) {\n // eslint-disable-next-line\n return this.actualElement;\n }\n else {\n return this.element;\n }\n };\n /**\n * Returns the persistence data for component\n *\n * @returns {any} ?\n */\n // eslint-disable-next-line\n Component.prototype.getLocalData = function () {\n var eleId = this.getModuleName() + this.element.id;\n if (versionBasedStatePersistence) {\n return window.localStorage.getItem(eleId + this.ej2StatePersistenceVersion);\n }\n else {\n return window.localStorage.getItem(eleId);\n }\n };\n /**\n * Adding unload event to persist data when enable persistence true\n */\n Component.prototype.attachUnloadEvent = function () {\n this.handleUnload = this.handleUnload.bind(this);\n window.addEventListener('unload', this.handleUnload);\n };\n /**\n * Handling unload event to persist data when enable persistence true\n */\n Component.prototype.handleUnload = function () {\n this.setPersistData();\n };\n /**\n * Removing unload event to persist data when enable persistence true\n */\n Component.prototype.detachUnloadEvent = function () {\n window.removeEventListener('unload', this.handleUnload);\n };\n /**\n * Appends the control within the given HTML element\n *\n * @param {string | HTMLElement} selector - Target element where control needs to be appended\n * @returns {void} ?\n */\n Component.prototype.appendTo = function (selector) {\n if (!isNullOrUndefined(selector) && typeof (selector) === 'string') {\n this.element = select(selector, document);\n }\n else if (!isNullOrUndefined(selector)) {\n this.element = selector;\n }\n if (!isNullOrUndefined(this.element)) {\n var moduleClass = 'e-' + this.getModuleName().toLowerCase();\n addClass([this.element], ['e-control', moduleClass]);\n this.isProtectedOnChange = false;\n if (this.needsID && !this.element.id) {\n this.element.id = this.getUniqueID(this.getModuleName());\n }\n if (this.enablePersistence) {\n this.mergePersistData();\n this.attachUnloadEvent();\n }\n var inst = getValue('ej2_instances', this.element);\n if (!inst || inst.indexOf(this) === -1) {\n _super.prototype.addInstance.call(this);\n }\n this.preRender();\n this.injectModules();\n // Checked weather cases are valid or not. If control leads to more than five counts \n if (!isvalid && !isBannerAdded) {\n createLicenseOverlay();\n isBannerAdded = true;\n }\n this.render();\n if (!this.mount) {\n this.trigger('created');\n }\n else {\n this.accessMount();\n }\n }\n };\n /**\n * It is used to process the post rendering functionalities to a component.\n *\n * @param {Node} wrapperElement ?\n * @returns {void} ?\n */\n Component.prototype.renderComplete = function (wrapperElement) {\n if (isBlazor()) {\n var sfBlazor = 'sfBlazor';\n // eslint-disable-next-line\n window[sfBlazor].renderComplete(this.element, wrapperElement);\n }\n this.isRendered = true;\n };\n /**\n * When invoked, applies the pending property changes immediately to the component.\n *\n * @returns {void} ?\n */\n Component.prototype.dataBind = function () {\n this.injectModules();\n _super.prototype.dataBind.call(this);\n };\n /**\n * Attach one or more event handler to the current component context.\n * It is used for internal handling event internally within the component only.\n *\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the handler to run when the event occurs\n * @param {Object} context - optional parameter Specifies the context to be bind in the handler.\n * @returns {void} ?\n * @private\n */\n Component.prototype.on = function (event, handler, context) {\n if (typeof event === 'string') {\n this.localObserver.on(event, handler, context);\n }\n else {\n for (var _i = 0, event_1 = event; _i < event_1.length; _i++) {\n var arg = event_1[_i];\n this.localObserver.on(arg.event, arg.handler, arg.context);\n }\n }\n };\n /**\n * To remove one or more event handler that has been attached with the on() method.\n *\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the function to run when the event occurs\n * @returns {void} ?\n * @private\n */\n Component.prototype.off = function (event, handler) {\n if (typeof event === 'string') {\n this.localObserver.off(event, handler);\n }\n else {\n for (var _i = 0, event_2 = event; _i < event_2.length; _i++) {\n var arg = event_2[_i];\n this.localObserver.off(arg.event, arg.handler);\n }\n }\n };\n /**\n * To notify the handlers in the specified event.\n *\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} argument - Additional parameters to pass while calling the handler.\n * @returns {void} ?\n * @private\n */\n Component.prototype.notify = function (property, argument) {\n if (this.isDestroyed !== true) {\n this.localObserver.notify(property, argument);\n }\n };\n /**\n * Get injected modules\n *\n * @returns {Function} ?\n * @private\n */\n Component.prototype.getInjectedModules = function () {\n return this.injectedModules;\n };\n /**\n * Dynamically injects the required modules to the component.\n *\n * @param {Function} moduleList ?\n * @returns {void} ?\n */\n Component.Inject = function () {\n var moduleList = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n moduleList[_i] = arguments[_i];\n }\n if (!this.prototype.injectedModules) {\n this.prototype.injectedModules = [];\n }\n for (var i = 0; i < moduleList.length; i++) {\n if (this.prototype.injectedModules.indexOf(moduleList[parseInt(i.toString(), 10)]) === -1) {\n this.prototype.injectedModules.push(moduleList[parseInt(i.toString(), 10)]);\n }\n }\n };\n /**\n * This is a instance method to create an element.\n *\n * @param {string} tagName ?\n * @param {ElementProperties} prop ?\n * @param {boolean} isVDOM ?\n * @returns {any} ?\n * @private\n */\n // eslint-disable-next-line\n Component.prototype.createElement = function (tagName, prop, isVDOM) {\n return createElement(tagName, prop);\n };\n /**\n *\n * @param {Function} handler - handler to be triggered after state Updated.\n * @param {any} argument - Arguments to be passed to caller.\n * @returns {void} .\n * @private\n */\n // eslint-disable-next-line\n Component.prototype.triggerStateChange = function (handler, argument) {\n if (this.isReactHybrid) {\n // eslint-disable-next-line\n this.setState();\n this.currentContext = { calls: handler, args: argument };\n }\n };\n // tslint: enable: no-any\n Component.prototype.injectModules = function () {\n if (this.injectedModules && this.injectedModules.length) {\n this.moduleLoader.inject(this.requiredModules(), this.injectedModules);\n }\n };\n Component.prototype.detectFunction = function (args) {\n var prop = Object.keys(args);\n if (prop.length) {\n this[prop[0]] = args[prop[0]];\n }\n };\n Component.prototype.mergePersistData = function () {\n var data;\n if (versionBasedStatePersistence) {\n data = window.localStorage.getItem(this.getModuleName() + this.element.id + this.ej2StatePersistenceVersion);\n }\n else {\n data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n }\n if (!(isNullOrUndefined(data) || (data === ''))) {\n this.setProperties(JSON.parse(data), true);\n }\n };\n Component.prototype.setPersistData = function () {\n if (!this.isDestroyed) {\n if (versionBasedStatePersistence) {\n window.localStorage.setItem(this.getModuleName() +\n this.element.id + this.ej2StatePersistenceVersion, this.getPersistData());\n }\n else {\n window.localStorage.setItem(this.getModuleName() + this.element.id, this.getPersistData());\n }\n }\n };\n // eslint-disable-next-line\n Component.prototype.renderReactTemplates = function (callback) {\n if (!isNullOrUndefined(callback)) {\n callback();\n }\n };\n // eslint-disable-next-line\n Component.prototype.clearTemplate = function (templateName, index) {\n //No Code\n };\n Component.prototype.getUniqueID = function (definedName) {\n if (this.isHistoryChanged()) {\n componentCount = 0;\n }\n lastPageID = this.pageID(location.href);\n lastHistoryLen = history.length;\n return definedName + '_' + lastPageID + '_' + componentCount++;\n };\n Component.prototype.pageID = function (url) {\n var hash = 0;\n if (url.length === 0) {\n return hash;\n }\n for (var i = 0; i < url.length; i++) {\n var char = url.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return Math.abs(hash);\n };\n Component.prototype.isHistoryChanged = function () {\n return lastPageID !== this.pageID(location.href) || lastHistoryLen !== history.length;\n };\n Component.prototype.addOnPersist = function (options) {\n var _this = this;\n var persistObj = {};\n for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n var key = options_1[_i];\n var objValue = void 0;\n // eslint-disable-next-line\n objValue = getValue(key, this);\n if (!isUndefined(objValue)) {\n setValue(key, this.getActualProperties(objValue), persistObj);\n }\n }\n return JSON.stringify(persistObj, function (key, value) {\n return _this.getActualProperties(value);\n });\n };\n Component.prototype.getActualProperties = function (obj) {\n if (obj instanceof ChildProperty) {\n return getValue('properties', obj);\n }\n else {\n return obj;\n }\n };\n Component.prototype.ignoreOnPersist = function (options) {\n return JSON.stringify(this.iterateJsonProperties(this.properties, options));\n };\n Component.prototype.iterateJsonProperties = function (obj, ignoreList) {\n var newObj = {};\n var _loop_1 = function (key) {\n if (ignoreList.indexOf(key) === -1) {\n // eslint-disable-next-line\n var value = obj[key];\n if (typeof value === 'object' && !(value instanceof Array)) {\n var newList = ignoreList.filter(function (str) {\n var regExp = RegExp;\n return new regExp(key + '.').test(str);\n }).map(function (str) {\n return str.replace(key + '.', '');\n });\n newObj[\"\" + key] = this_1.iterateJsonProperties(this_1.getActualProperties(value), newList);\n }\n else {\n newObj[\"\" + key] = value;\n }\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var key = _a[_i];\n _loop_1(key);\n }\n return newObj;\n };\n __decorate([\n Property(false)\n ], Component.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"enableRtl\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"locale\", void 0);\n Component = __decorate([\n NotifyPropertyChanges\n ], Component);\n return Component;\n}(Base));\nexport { Component };\n//Function handling for page navigation detection\n/* istanbul ignore next */\n(function () {\n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', \n /* istanbul ignore next */\n function () {\n componentCount = 0;\n });\n }\n})();\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible } from './dom';\nimport { Property, Complex, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { ChildProperty } from './child-property';\nimport { select, closest, setStyleAttribute, addClass, createElement } from './dom';\nimport { extend, isUndefined, isNullOrUndefined, compareElementParent, isBlazor } from './util';\nvar defaultPosition = { left: 0, top: 0, bottom: 0, right: 0 };\nvar positionProp = ['offsetLeft', 'offsetTop'];\nvar axisMapper = ['x', 'y'];\nvar axisValueMapper = ['left', 'top'];\nvar isDraggedObject = { isDragged: false };\n/**\n * Specifies the position coordinates\n */\nvar Position = /** @class */ (function (_super) {\n __extends(Position, _super);\n function Position() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Position.prototype, \"left\", void 0);\n __decorate([\n Property(0)\n ], Position.prototype, \"top\", void 0);\n return Position;\n}(ChildProperty));\nexport { Position };\n/**\n * Draggable Module provides support to enable draggable functionality in Dom Elements.\n * ```html\n *
Draggable
\n * \n * ```\n */\nvar Draggable = /** @class */ (function (_super) {\n __extends(Draggable, _super);\n function Draggable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.dragLimit = Draggable_1.getDefaultPosition();\n _this.borderWidth = Draggable_1.getDefaultPosition();\n _this.padding = Draggable_1.getDefaultPosition();\n _this.diffX = 0;\n _this.prevLeft = 0;\n _this.prevTop = 0;\n _this.dragProcessStarted = false;\n _this.eleTop = 0;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n _this.tapHoldTimer = 0;\n _this.externalInitialize = false;\n _this.diffY = 0;\n _this.parentScrollX = 0;\n _this.parentScrollY = 0;\n _this.droppables = {};\n _this.bind();\n return _this;\n }\n Draggable_1 = Draggable;\n Draggable.prototype.bind = function () {\n this.toggleEvents();\n if (Browser.isIE) {\n addClass([this.element], 'e-block-touch');\n }\n this.droppables[this.scope] = {};\n };\n Draggable.getDefaultPosition = function () {\n return extend({}, defaultPosition);\n };\n Draggable.prototype.toggleEvents = function (isUnWire) {\n var ele;\n if (!isUndefined(this.handle)) {\n ele = select(this.handle, this.element);\n }\n var handler = (this.enableTapHold && Browser.isDevice && Browser.isTouch) ? this.mobileInitialize : this.initialize;\n if (isUnWire) {\n EventHandler.remove(ele || this.element, Browser.isSafari() ? 'touchstart' : Browser.touchStartEvent, handler);\n }\n else {\n EventHandler.add(ele || this.element, Browser.isSafari() ? 'touchstart' : Browser.touchStartEvent, handler, this);\n }\n };\n /* istanbul ignore next */\n Draggable.prototype.mobileInitialize = function (evt) {\n var _this = this;\n var target = evt.currentTarget;\n this.tapHoldTimer = setTimeout(function () {\n _this.externalInitialize = true;\n _this.removeTapholdTimer();\n _this.initialize(evt, target);\n }, this.tapHoldThreshold);\n EventHandler.add(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.removeTapholdTimer, this);\n EventHandler.add(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.removeTapholdTimer, this);\n };\n /* istanbul ignore next */\n Draggable.prototype.removeTapholdTimer = function () {\n clearTimeout(this.tapHoldTimer);\n EventHandler.remove(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.removeTapholdTimer);\n EventHandler.remove(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.removeTapholdTimer);\n };\n /* istanbul ignore next */\n Draggable.prototype.getScrollableParent = function (element, axis) {\n var scroll = { 'vertical': 'scrollHeight', 'horizontal': 'scrollWidth' };\n var client = { 'vertical': 'clientHeight', 'horizontal': 'clientWidth' };\n if (isNullOrUndefined(element)) {\n return null;\n }\n if (element[scroll[\"\" + axis]] > element[client[\"\" + axis]]) {\n if (axis === 'vertical' ? element.scrollTop > 0 : element.scrollLeft > 0) {\n if (axis === 'vertical') {\n this.parentScrollY = this.parentScrollY +\n (this.parentScrollY === 0 ? element.scrollTop : element.scrollTop - this.parentScrollY);\n this.tempScrollHeight = element.scrollHeight;\n }\n else {\n this.parentScrollX = this.parentScrollX +\n (this.parentScrollX === 0 ? element.scrollLeft : element.scrollLeft - this.parentScrollX);\n this.tempScrollWidth = element.scrollWidth;\n }\n if (!isNullOrUndefined(element)) {\n return this.getScrollableParent(element.parentNode, axis);\n }\n else {\n return element;\n }\n }\n else {\n return this.getScrollableParent(element.parentNode, axis);\n }\n }\n else {\n return this.getScrollableParent(element.parentNode, axis);\n }\n };\n Draggable.prototype.getScrollableValues = function () {\n this.parentScrollX = 0;\n this.parentScrollY = 0;\n var isModalDialog = this.element.classList.contains('e-dialog') && this.element.classList.contains('e-dlg-modal');\n var verticalScrollParent = this.getScrollableParent(this.element.parentNode, 'vertical');\n var horizontalScrollParent = this.getScrollableParent(this.element.parentNode, 'horizontal');\n };\n Draggable.prototype.initialize = function (evt, curTarget) {\n this.currentStateTarget = evt.target;\n if (this.isDragStarted()) {\n return;\n }\n else {\n this.isDragStarted(true);\n this.externalInitialize = false;\n }\n this.target = (evt.currentTarget || curTarget);\n this.dragProcessStarted = false;\n if (this.abort) {\n /* tslint:disable no-any */\n var abortSelectors = this.abort;\n if (typeof abortSelectors === 'string') {\n abortSelectors = [abortSelectors];\n }\n for (var i = 0; i < abortSelectors.length; i++) {\n if (!isNullOrUndefined(closest(evt.target, abortSelectors[parseInt(i.toString(), 10)]))) {\n /* istanbul ignore next */\n if (this.isDragStarted()) {\n this.isDragStarted(true);\n }\n return;\n }\n }\n }\n if (this.preventDefault && !isUndefined(evt.changedTouches) && evt.type !== 'touchstart') {\n evt.preventDefault();\n }\n this.element.setAttribute('aria-grabbed', 'true');\n var intCoord = this.getCoordinates(evt);\n this.initialPosition = { x: intCoord.pageX, y: intCoord.pageY };\n if (!this.clone) {\n var pos = this.element.getBoundingClientRect();\n this.getScrollableValues();\n if (evt.clientX === evt.pageX) {\n this.parentScrollX = 0;\n }\n if (evt.clientY === evt.pageY) {\n this.parentScrollY = 0;\n }\n this.relativeXPosition = intCoord.pageX - (pos.left + this.parentScrollX);\n this.relativeYPosition = intCoord.pageY - (pos.top + this.parentScrollY);\n }\n if (this.externalInitialize) {\n this.intDragStart(evt);\n }\n else {\n EventHandler.add(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDragStart, this);\n EventHandler.add(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDestroy, this);\n }\n this.toggleEvents(true);\n if (evt.type !== 'touchstart' && this.isPreventSelect) {\n document.body.classList.add('e-prevent-select');\n }\n this.externalInitialize = false;\n EventHandler.trigger(document.documentElement, Browser.isSafari() ? 'touchstart' : Browser.touchStartEvent, evt);\n };\n Draggable.prototype.intDragStart = function (evt) {\n this.removeTapholdTimer();\n var isChangeTouch = !isUndefined(evt.changedTouches);\n if (isChangeTouch && (evt.changedTouches.length !== 1)) {\n return;\n }\n var intCordinate = this.getCoordinates(evt);\n var pos;\n var styleProp = getComputedStyle(this.element);\n this.margin = {\n left: parseInt(styleProp.marginLeft, 10),\n top: parseInt(styleProp.marginTop, 10),\n right: parseInt(styleProp.marginRight, 10),\n bottom: parseInt(styleProp.marginBottom, 10)\n };\n var element = this.element;\n if (this.clone && this.dragTarget) {\n var intClosest = closest(evt.target, this.dragTarget);\n if (!isNullOrUndefined(intClosest)) {\n element = intClosest;\n }\n }\n /* istanbul ignore next */\n if (this.isReplaceDragEle) {\n element = this.currentStateCheck(evt.target, element);\n }\n this.offset = this.calculateParentPosition(element);\n this.position = this.getMousePosition(evt, this.isDragScroll);\n var x = this.initialPosition.x - intCordinate.pageX;\n var y = this.initialPosition.y - intCordinate.pageY;\n var distance = Math.sqrt((x * x) + (y * y));\n if ((distance >= this.distance || this.externalInitialize)) {\n var ele = this.getHelperElement(evt);\n if (!ele || isNullOrUndefined(ele)) {\n return;\n }\n if (isChangeTouch) {\n evt.preventDefault();\n }\n var dragTargetElement = this.helperElement = ele;\n this.parentClientRect = this.calculateParentPosition(dragTargetElement.offsetParent);\n if (this.dragStart) {\n var curTarget = this.getProperTargetElement(evt);\n var args = {\n event: evt,\n element: element,\n target: curTarget,\n bindEvents: isBlazor() ? this.bindDragEvents.bind(this) : null,\n dragElement: dragTargetElement\n };\n this.trigger('dragStart', args);\n }\n if (this.dragArea) {\n this.setDragArea();\n }\n else {\n this.dragLimit = { left: 0, right: 0, bottom: 0, top: 0 };\n this.borderWidth = { top: 0, left: 0 };\n }\n pos = { left: this.position.left - this.parentClientRect.left, top: this.position.top - this.parentClientRect.top };\n if (this.clone && !this.enableTailMode) {\n this.diffX = this.position.left - this.offset.left;\n this.diffY = this.position.top - this.offset.top;\n }\n this.getScrollableValues();\n // when drag element has margin-top\n var styles = getComputedStyle(element);\n var marginTop = parseFloat(styles.marginTop);\n /* istanbul ignore next */\n if (this.clone && marginTop !== 0) {\n pos.top += marginTop;\n }\n this.eleTop = !isNaN(parseFloat(styles.top)) ? parseFloat(styles.top) - this.offset.top : 0;\n /* istanbul ignore next */\n // if (this.eleTop > 0) {\n // pos.top += this.eleTop;\n // }\n if (this.enableScrollHandler && !this.clone) {\n pos.top -= this.parentScrollY;\n pos.left -= this.parentScrollX;\n }\n var posValue = this.getProcessedPositionValue({\n top: (pos.top - this.diffY) + 'px',\n left: (pos.left - this.diffX) + 'px'\n });\n if (this.dragArea && typeof this.dragArea !== 'string' && this.dragArea.classList.contains('e-kanban-content') && this.dragArea.style.position === 'relative') {\n pos.top += this.dragArea.scrollTop;\n }\n this.dragElePosition = { top: pos.top, left: pos.left };\n setStyleAttribute(dragTargetElement, this.getDragPosition({ position: 'absolute', left: posValue.left, top: posValue.top }));\n EventHandler.remove(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDestroy);\n if (!isBlazor()) {\n this.bindDragEvents(dragTargetElement);\n }\n }\n };\n Draggable.prototype.bindDragEvents = function (dragTargetElement) {\n if (isVisible(dragTargetElement)) {\n EventHandler.add(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDrag, this);\n EventHandler.add(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDragStop, this);\n this.setGlobalDroppables(false, this.element, dragTargetElement);\n }\n else {\n this.toggleEvents();\n document.body.classList.remove('e-prevent-select');\n }\n };\n Draggable.prototype.elementInViewport = function (el) {\n this.top = el.offsetTop;\n this.left = el.offsetLeft;\n this.width = el.offsetWidth;\n this.height = el.offsetHeight;\n while (el.offsetParent) {\n el = el.offsetParent;\n this.top += el.offsetTop;\n this.left += el.offsetLeft;\n }\n return (this.top >= window.pageYOffset &&\n this.left >= window.pageXOffset &&\n (this.top + this.height) <= (window.pageYOffset + window.innerHeight) &&\n (this.left + this.width) <= (window.pageXOffset + window.innerWidth));\n };\n Draggable.prototype.getProcessedPositionValue = function (value) {\n if (this.queryPositionInfo) {\n return this.queryPositionInfo(value);\n }\n return value;\n };\n Draggable.prototype.calculateParentPosition = function (ele) {\n if (isNullOrUndefined(ele)) {\n return { left: 0, top: 0 };\n }\n var rect = ele.getBoundingClientRect();\n var style = getComputedStyle(ele);\n return {\n left: (rect.left + window.pageXOffset) - parseInt(style.marginLeft, 10),\n top: (rect.top + window.pageYOffset) - parseInt(style.marginTop, 10)\n };\n };\n // tslint:disable-next-line:max-func-body-length\n Draggable.prototype.intDrag = function (evt) {\n if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n return;\n }\n if (this.clone && evt.changedTouches && Browser.isDevice && Browser.isTouch) {\n evt.preventDefault();\n }\n var left;\n var top;\n this.position = this.getMousePosition(evt, this.isDragScroll);\n var docHeight = this.getDocumentWidthHeight('Height');\n if (docHeight < this.position.top) {\n this.position.top = docHeight;\n }\n var docWidth = this.getDocumentWidthHeight('Width');\n if (docWidth < this.position.left) {\n this.position.left = docWidth;\n }\n if (this.drag) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('drag', { event: evt, element: this.element, target: curTarget });\n }\n var eleObj = this.checkTargetElement(evt);\n if (eleObj.target && eleObj.instance) {\n /* tslint:disable no-any */\n var flag = true;\n if (this.hoverObject) {\n if (this.hoverObject.instance !== eleObj.instance) {\n this.triggerOutFunction(evt, eleObj);\n }\n else {\n flag = false;\n }\n }\n if (flag) {\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n eleObj.instance.intOver(evt, eleObj.target);\n this.hoverObject = eleObj;\n }\n }\n else if (this.hoverObject) {\n this.triggerOutFunction(evt, eleObj);\n }\n var helperElement = this.droppables[this.scope].helper;\n this.parentClientRect = this.calculateParentPosition(this.helperElement.offsetParent);\n var tLeft = this.parentClientRect.left;\n var tTop = this.parentClientRect.top;\n var intCoord = this.getCoordinates(evt);\n var pagex = intCoord.pageX;\n var pagey = intCoord.pageY;\n var dLeft = this.position.left - this.diffX;\n var dTop = this.position.top - this.diffY;\n var styles = getComputedStyle(helperElement);\n if (this.dragArea) {\n if (this.enableAutoScroll) {\n this.setDragArea();\n }\n if (this.pageX !== pagex || this.skipDistanceCheck) {\n var helperWidth = helperElement.offsetWidth + (parseFloat(styles.marginLeft)\n + parseFloat(styles.marginRight));\n if (this.dragLimit.left > dLeft && dLeft > 0) {\n left = this.dragLimit.left;\n }\n else if (this.dragLimit.right + window.pageXOffset < dLeft + helperWidth && dLeft > 0) {\n left = dLeft - (dLeft - this.dragLimit.right) + window.pageXOffset - helperWidth;\n }\n else {\n left = dLeft < 0 ? this.dragLimit.left : dLeft;\n }\n }\n if (this.pageY !== pagey || this.skipDistanceCheck) {\n var helperHeight = helperElement.offsetHeight + (parseFloat(styles.marginTop)\n + parseFloat(styles.marginBottom));\n if (this.dragLimit.top > dTop && dTop > 0) {\n top = this.dragLimit.top;\n }\n else if (this.dragLimit.bottom + window.pageYOffset < dTop + helperHeight && dTop > 0) {\n top = dTop - (dTop - this.dragLimit.bottom) + window.pageYOffset - helperHeight;\n }\n else {\n top = dTop < 0 ? this.dragLimit.top : dTop;\n }\n }\n }\n else {\n left = dLeft;\n top = dTop;\n }\n var iTop = tTop + this.borderWidth.top;\n var iLeft = tLeft + this.borderWidth.left;\n if (this.dragProcessStarted) {\n if (isNullOrUndefined(top)) {\n top = this.prevTop;\n }\n if (isNullOrUndefined(left)) {\n left = this.prevLeft;\n }\n }\n var draEleTop;\n var draEleLeft;\n if (this.helperElement.classList.contains('e-treeview')) {\n if (this.dragArea) {\n this.dragLimit.top = this.clone ? this.dragLimit.top : 0;\n draEleTop = (top - iTop) < 0 ? this.dragLimit.top : (top - this.borderWidth.top);\n draEleLeft = (left - iLeft) < 0 ? this.dragLimit.left : (left - this.borderWidth.left);\n }\n else {\n draEleTop = top - this.borderWidth.top;\n draEleLeft = left - this.borderWidth.left;\n }\n }\n else {\n if (this.dragArea) {\n var isDialogEle = this.helperElement.classList.contains('e-dialog');\n this.dragLimit.top = this.clone ? this.dragLimit.top : 0;\n draEleTop = (top - iTop) < 0 ? this.dragLimit.top : (top - iTop);\n draEleLeft = (left - iLeft) < 0 ? isDialogEle ? (left - (iLeft - this.borderWidth.left)) :\n this.dragElePosition.left : (left - iLeft);\n }\n else {\n draEleTop = top - iTop;\n draEleLeft = left - iLeft;\n }\n }\n var marginTop = parseFloat(getComputedStyle(this.element).marginTop);\n // when drag-element has margin-top\n /* istanbul ignore next */\n if (marginTop > 0) {\n if (this.clone) {\n draEleTop += marginTop;\n if (dTop < 0) {\n if ((marginTop + dTop) >= 0) {\n draEleTop = marginTop + dTop;\n }\n else {\n draEleTop -= marginTop;\n }\n }\n if (this.dragArea) {\n draEleTop = (this.dragLimit.bottom < draEleTop) ? this.dragLimit.bottom : draEleTop;\n }\n }\n if ((top - iTop) < 0) {\n if (dTop + marginTop + (helperElement.offsetHeight - iTop) >= 0) {\n var tempDraEleTop = this.dragLimit.top + dTop - iTop;\n if ((tempDraEleTop + marginTop + iTop) < 0) {\n draEleTop -= marginTop + iTop;\n }\n else {\n draEleTop = tempDraEleTop;\n }\n }\n else {\n draEleTop -= marginTop + iTop;\n }\n }\n }\n if (this.dragArea && this.helperElement.classList.contains('e-treeview')) {\n var helperHeight = helperElement.offsetHeight + (parseFloat(styles.marginTop)\n + parseFloat(styles.marginBottom));\n draEleTop = (draEleTop + helperHeight) > this.dragLimit.bottom ? (this.dragLimit.bottom - helperHeight) : draEleTop;\n }\n /* istanbul ignore next */\n // if(this.eleTop > 0) {\n // draEleTop += this.eleTop;\n // }\n if (this.enableScrollHandler && !this.clone) {\n draEleTop -= this.parentScrollY;\n draEleLeft -= this.parentScrollX;\n }\n if (this.dragArea && typeof this.dragArea !== 'string' && this.dragArea.classList.contains('e-kanban-content') && this.dragArea.style.position === 'relative') {\n draEleTop += this.dragArea.scrollTop;\n }\n var dragValue = this.getProcessedPositionValue({ top: draEleTop + 'px', left: draEleLeft + 'px' });\n setStyleAttribute(helperElement, this.getDragPosition(dragValue));\n if (!this.elementInViewport(helperElement) && this.enableAutoScroll && !this.helperElement.classList.contains('e-treeview')) {\n this.helperElement.scrollIntoView();\n }\n var elements = document.querySelectorAll(':hover');\n if (this.enableAutoScroll && this.helperElement.classList.contains('e-treeview')) {\n if (elements.length === 0) {\n elements = this.getPathElements(evt);\n }\n /* tslint:disable no-any */\n var scrollParent = this.getScrollParent(elements, false);\n if (this.elementInViewport(this.helperElement)) {\n this.getScrollPosition(scrollParent, draEleTop);\n }\n else if (!this.elementInViewport(this.helperElement)) {\n elements = [].slice.call(document.querySelectorAll(':hover'));\n if (elements.length === 0) {\n elements = this.getPathElements(evt);\n }\n scrollParent = this.getScrollParent(elements, true);\n this.getScrollPosition(scrollParent, draEleTop);\n }\n }\n this.dragProcessStarted = true;\n this.prevLeft = left;\n this.prevTop = top;\n this.position.left = left;\n this.position.top = top;\n this.pageX = pagex;\n this.pageY = pagey;\n };\n /* tslint:disable no-any */\n Draggable.prototype.getScrollParent = function (node, reverse) {\n /* tslint:disable no-any */\n var nodeEl = reverse ? node.reverse() : node;\n var hasScroll;\n for (var i = nodeEl.length - 1; i >= 0; i--) {\n hasScroll = window.getComputedStyle(nodeEl[parseInt(i.toString(), 10)])['overflow-y'];\n if ((hasScroll === 'auto' || hasScroll === 'scroll')\n && nodeEl[parseInt(i.toString(), 10)].scrollHeight > nodeEl[parseInt(i.toString(), 10)].clientHeight) {\n return nodeEl[parseInt(i.toString(), 10)];\n }\n }\n hasScroll = window.getComputedStyle(document.scrollingElement)['overflow-y'];\n if (hasScroll === 'visible') {\n document.scrollingElement.style.overflow = 'auto';\n return document.scrollingElement;\n }\n };\n Draggable.prototype.getScrollPosition = function (nodeEle, draEleTop) {\n if (nodeEle && nodeEle === document.scrollingElement) {\n if ((nodeEle.clientHeight + document.scrollingElement.scrollTop - this.helperElement.clientHeight) < draEleTop\n && nodeEle.getBoundingClientRect().height + this.parentClientRect.top > draEleTop) {\n nodeEle.scrollTop += this.helperElement.clientHeight;\n }\n else if (nodeEle.scrollTop > draEleTop - this.helperElement.clientHeight) {\n nodeEle.scrollTop -= this.helperElement.clientHeight;\n }\n }\n else if (nodeEle && nodeEle !== document.scrollingElement) {\n if ((nodeEle.clientHeight + nodeEle.getBoundingClientRect().top - this.helperElement.clientHeight + document.scrollingElement.scrollTop) < draEleTop) {\n nodeEle.scrollTop += this.helperElement.clientHeight;\n }\n else if (nodeEle.getBoundingClientRect().top > (draEleTop - this.helperElement.clientHeight - document.scrollingElement.scrollTop)) {\n nodeEle.scrollTop -= this.helperElement.clientHeight;\n }\n }\n };\n Draggable.prototype.getPathElements = function (evt) {\n var elementTop = evt.clientX > 0 ? evt.clientX : 0;\n var elementLeft = evt.clientY > 0 ? evt.clientY : 0;\n return document.elementsFromPoint(elementTop, elementLeft);\n };\n Draggable.prototype.triggerOutFunction = function (evt, eleObj) {\n this.hoverObject.instance.intOut(evt, eleObj.target);\n this.hoverObject.instance.dragData[this.scope] = null;\n this.hoverObject = null;\n };\n Draggable.prototype.getDragPosition = function (dragValue) {\n var temp = extend({}, dragValue);\n if (this.axis) {\n if (this.axis === 'x') {\n delete temp.top;\n }\n else if (this.axis === 'y') {\n delete temp.left;\n }\n }\n return temp;\n };\n Draggable.prototype.getDocumentWidthHeight = function (str) {\n var docBody = document.body;\n var docEle = document.documentElement;\n var returnValue = Math.max(docBody['scroll' + str], docEle['scroll' + str], docBody['offset' + str], docEle['offset' + str], docEle['client' + str]);\n return returnValue;\n };\n Draggable.prototype.intDragStop = function (evt) {\n this.dragProcessStarted = false;\n if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n return;\n }\n var type = ['touchend', 'pointerup', 'mouseup'];\n if (type.indexOf(evt.type) !== -1) {\n if (this.dragStop) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('dragStop', { event: evt, element: this.element, target: curTarget, helper: this.helperElement });\n }\n this.intDestroy(evt);\n }\n else {\n this.element.setAttribute('aria-grabbed', 'false');\n }\n var eleObj = this.checkTargetElement(evt);\n if (eleObj.target && eleObj.instance) {\n eleObj.instance.dragStopCalled = true;\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n eleObj.instance.intDrop(evt, eleObj.target);\n }\n this.setGlobalDroppables(true);\n document.body.classList.remove('e-prevent-select');\n };\n /**\n * @private\n */\n Draggable.prototype.intDestroy = function (evt) {\n this.dragProcessStarted = false;\n this.toggleEvents();\n document.body.classList.remove('e-prevent-select');\n this.element.setAttribute('aria-grabbed', 'false');\n EventHandler.remove(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDragStop);\n EventHandler.remove(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDestroy);\n EventHandler.remove(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDrag);\n if (this.isDragStarted()) {\n this.isDragStarted(true);\n }\n };\n // triggers when property changed\n Draggable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Draggable.prototype.getModuleName = function () {\n return 'draggable';\n };\n Draggable.prototype.isDragStarted = function (change) {\n if (change) {\n isDraggedObject.isDragged = !isDraggedObject.isDragged;\n }\n return isDraggedObject.isDragged;\n };\n Draggable.prototype.setDragArea = function () {\n var eleWidthBound;\n var eleHeightBound;\n var top = 0;\n var left = 0;\n var ele;\n var type = typeof this.dragArea;\n if (type === 'string') {\n ele = select(this.dragArea);\n }\n else {\n ele = this.dragArea;\n }\n if (ele) {\n var elementArea = ele.getBoundingClientRect();\n eleWidthBound = ele.scrollWidth ? ele.scrollWidth : elementArea.right - elementArea.left;\n eleHeightBound = ele.scrollHeight ? (this.dragArea && !isNullOrUndefined(this.helperElement) && this.helperElement.classList.contains('e-treeview')) ? ele.clientHeight : ele.scrollHeight : elementArea.bottom - elementArea.top;\n var keys = ['Top', 'Left', 'Bottom', 'Right'];\n var styles = getComputedStyle(ele);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[parseInt(i.toString(), 10)];\n var tborder = styles['border' + key + 'Width'];\n var tpadding = styles['padding' + key];\n var lowerKey = key.toLowerCase();\n this.borderWidth[\"\" + lowerKey] = isNaN(parseFloat(tborder)) ? 0 : parseFloat(tborder);\n this.padding[\"\" + lowerKey] = isNaN(parseFloat(tpadding)) ? 0 : parseFloat(tpadding);\n }\n if (this.dragArea && !isNullOrUndefined(this.helperElement) && this.helperElement.classList.contains('e-treeview')) {\n top = elementArea.top + document.scrollingElement.scrollTop;\n }\n else {\n top = elementArea.top;\n }\n left = elementArea.left;\n this.dragLimit.left = left + this.borderWidth.left + this.padding.left;\n this.dragLimit.top = ele.offsetTop + this.borderWidth.top + this.padding.top;\n this.dragLimit.right = left + eleWidthBound - (this.borderWidth.right + this.padding.right);\n this.dragLimit.bottom = top + eleHeightBound - (this.borderWidth.bottom + this.padding.bottom);\n }\n };\n Draggable.prototype.getProperTargetElement = function (evt) {\n var intCoord = this.getCoordinates(evt);\n var ele;\n var prevStyle = this.helperElement.style.pointerEvents || '';\n var isPointer = evt.type.indexOf('pointer') !== -1 && Browser.info.name === 'safari' && parseInt(Browser.info.version) > 12;\n if (compareElementParent(evt.target, this.helperElement) || evt.type.indexOf('touch') !== -1 || isPointer) {\n this.helperElement.style.pointerEvents = 'none';\n ele = document.elementFromPoint(intCoord.clientX, intCoord.clientY);\n this.helperElement.style.pointerEvents = prevStyle;\n }\n else {\n ele = evt.target;\n }\n return ele;\n };\n /* istanbul ignore next */\n Draggable.prototype.currentStateCheck = function (ele, oldEle) {\n var elem;\n if (!isNullOrUndefined(this.currentStateTarget) && this.currentStateTarget !== ele) {\n elem = this.currentStateTarget;\n }\n else {\n elem = !isNullOrUndefined(oldEle) ? oldEle : ele;\n }\n return elem;\n };\n Draggable.prototype.getMousePosition = function (evt, isdragscroll) {\n /* tslint:disable no-any */\n var dragEle = evt.srcElement !== undefined ? evt.srcElement : evt.target;\n var intCoord = this.getCoordinates(evt);\n var pageX;\n var pageY;\n var isOffsetParent = isNullOrUndefined(dragEle.offsetParent);\n /* istanbul ignore next */\n if (isdragscroll) {\n pageX = this.clone ? intCoord.pageX :\n (intCoord.pageX + (isOffsetParent ? 0 : dragEle.offsetParent.scrollLeft)) - this.relativeXPosition;\n pageY = this.clone ? intCoord.pageY :\n (intCoord.pageY + (isOffsetParent ? 0 : dragEle.offsetParent.scrollTop)) - this.relativeYPosition;\n }\n else {\n pageX = this.clone ? intCoord.pageX : (intCoord.pageX + window.pageXOffset) - this.relativeXPosition;\n pageY = this.clone ? intCoord.pageY : (intCoord.pageY + window.pageYOffset) - this.relativeYPosition;\n }\n if (document.scrollingElement && (!isdragscroll && !this.clone)) {\n var isVerticalScroll = document.scrollingElement.scrollHeight > 0 && document.scrollingElement.scrollHeight > document.scrollingElement.clientHeight && document.scrollingElement.scrollTop > 0;\n var isHorrizontalScroll = document.scrollingElement.scrollWidth > 0 && document.scrollingElement.scrollWidth > document.scrollingElement.clientWidth && document.scrollingElement.scrollLeft > 0;\n pageX = isHorrizontalScroll ? pageX - document.scrollingElement.scrollLeft : pageX;\n pageY = isVerticalScroll ? pageY - document.scrollingElement.scrollTop : pageY;\n }\n return {\n left: pageX - (this.margin.left + this.cursorAt.left),\n top: pageY - (this.margin.top + this.cursorAt.top)\n };\n };\n Draggable.prototype.getCoordinates = function (evt) {\n if (evt.type.indexOf('touch') > -1) {\n return evt.changedTouches[0];\n }\n return evt;\n };\n Draggable.prototype.getHelperElement = function (evt) {\n var element;\n if (this.clone) {\n if (this.helper) {\n element = this.helper({ sender: evt, element: this.target });\n }\n else {\n element = createElement('div', { className: 'e-drag-helper e-block-touch', innerHTML: 'Draggable' });\n document.body.appendChild(element);\n }\n }\n else {\n element = this.element;\n }\n return element;\n };\n Draggable.prototype.setGlobalDroppables = function (reset, drag, helper) {\n this.droppables[this.scope] = reset ? null : {\n draggable: drag,\n helper: helper,\n draggedElement: this.element\n };\n };\n Draggable.prototype.checkTargetElement = function (evt) {\n var target = this.getProperTargetElement(evt);\n var dropIns = this.getDropInstance(target);\n if (!dropIns && target && !isNullOrUndefined(target.parentNode)) {\n var parent_1 = closest(target.parentNode, '.e-droppable') || target.parentElement;\n if (parent_1) {\n dropIns = this.getDropInstance(parent_1);\n }\n }\n return { target: target, instance: dropIns };\n };\n Draggable.prototype.getDropInstance = function (ele) {\n var name = 'getModuleName';\n var drop;\n var eleInst = ele && ele.ej2_instances;\n if (eleInst) {\n for (var _i = 0, eleInst_1 = eleInst; _i < eleInst_1.length; _i++) {\n var inst = eleInst_1[_i];\n if (inst[\"\" + name]() === 'droppable') {\n drop = inst;\n break;\n }\n }\n }\n return drop;\n };\n Draggable.prototype.destroy = function () {\n this.toggleEvents(true);\n _super.prototype.destroy.call(this);\n };\n var Draggable_1;\n __decorate([\n Complex({}, Position)\n ], Draggable.prototype, \"cursorAt\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"clone\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"dragArea\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"isDragScroll\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"isReplaceDragEle\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"isPreventSelect\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"dragStop\", void 0);\n __decorate([\n Property(1)\n ], Draggable.prototype, \"distance\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"handle\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"abort\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"helper\", void 0);\n __decorate([\n Property('default')\n ], Draggable.prototype, \"scope\", void 0);\n __decorate([\n Property('')\n ], Draggable.prototype, \"dragTarget\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"axis\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"queryPositionInfo\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableTailMode\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"skipDistanceCheck\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"preventDefault\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableAutoScroll\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableTapHold\", void 0);\n __decorate([\n Property(750)\n ], Draggable.prototype, \"tapHoldThreshold\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableScrollHandler\", void 0);\n Draggable = Draggable_1 = __decorate([\n NotifyPropertyChanges\n ], Draggable);\n return Draggable;\n}(Base));\nexport { Draggable };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible, matches } from './dom';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { compareElementParent } from './util';\n/**\n * Droppable Module provides support to enable droppable functionality in Dom Elements.\n * ```html\n *
Droppable
\n * \n * ```\n */\nvar Droppable = /** @class */ (function (_super) {\n __extends(Droppable, _super);\n function Droppable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.mouseOver = false;\n _this.dragData = {};\n _this.dragStopCalled = false;\n _this.bind();\n return _this;\n }\n Droppable.prototype.bind = function () {\n this.wireEvents();\n };\n Droppable.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDrop, this);\n };\n // triggers when property changed\n // eslint-disable-next-line\n Droppable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Droppable.prototype.getModuleName = function () {\n return 'droppable';\n };\n Droppable.prototype.intOver = function (event, element) {\n if (!this.mouseOver) {\n var drag = this.dragData[this.scope];\n this.trigger('over', { event: event, target: element, dragData: drag });\n this.mouseOver = true;\n }\n };\n Droppable.prototype.intOut = function (event, element) {\n if (this.mouseOver) {\n this.trigger('out', { evt: event, target: element });\n this.mouseOver = false;\n }\n };\n Droppable.prototype.intDrop = function (evt, element) {\n if (!this.dragStopCalled) {\n return;\n }\n else {\n this.dragStopCalled = false;\n }\n var accept = true;\n var drag = this.dragData[this.scope];\n var isDrag = drag ? (drag.helper && isVisible(drag.helper)) : false;\n var area;\n if (isDrag) {\n area = this.isDropArea(evt, drag.helper, element);\n if (this.accept) {\n accept = matches(drag.helper, this.accept);\n }\n }\n if (isDrag && this.drop && area.canDrop && accept) {\n this.trigger('drop', { event: evt, target: area.target, droppedElement: drag.helper, dragData: drag });\n }\n this.mouseOver = false;\n };\n Droppable.prototype.isDropArea = function (evt, helper, element) {\n var area = { canDrop: true, target: element || evt.target };\n var isTouch = evt.type === 'touchend';\n if (isTouch || area.target === helper) {\n helper.style.display = 'none';\n var coord = isTouch ? (evt.changedTouches[0]) : evt;\n var ele = document.elementFromPoint(coord.clientX, coord.clientY);\n area.canDrop = false;\n area.canDrop = compareElementParent(ele, this.element);\n if (area.canDrop) {\n area.target = ele;\n }\n helper.style.display = '';\n }\n return area;\n };\n Droppable.prototype.destroy = function () {\n EventHandler.remove(this.element, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDrop);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property()\n ], Droppable.prototype, \"accept\", void 0);\n __decorate([\n Property('default')\n ], Droppable.prototype, \"scope\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"drop\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"over\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"out\", void 0);\n Droppable = __decorate([\n NotifyPropertyChanges\n ], Droppable);\n return Droppable;\n}(Base));\nexport { Droppable };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Base } from './base';\nvar keyCode = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'space': 32,\n 'escape': 27,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'leftarrow': 37,\n 'uparrow': 38,\n 'rightarrow': 39,\n 'downarrow': 40,\n 'insert': 45,\n 'delete': 46,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'semicolon': 186,\n 'plus': 187,\n 'comma': 188,\n 'minus': 189,\n 'dot': 190,\n 'forwardslash': 191,\n 'graveaccent': 192,\n 'openbracket': 219,\n 'backslash': 220,\n 'closebracket': 221,\n 'singlequote': 222\n};\n/**\n * KeyboardEvents class enables you to bind key action desired key combinations for ex., Ctrl+A, Delete, Alt+Space etc.\n * ```html\n *
;\n * \n * ```\n */\nvar KeyboardEvents = /** @class */ (function (_super) {\n __extends(KeyboardEvents, _super);\n /**\n * Initializes the KeyboardEvents\n *\n * @param {HTMLElement} element ?\n * @param {KeyboardEventsModel} options ?\n */\n function KeyboardEvents(element, options) {\n var _this = _super.call(this, options, element) || this;\n /**\n * To handle a key press event returns null\n *\n * @param {KeyboardEventArgs} e ?\n * @returns {void} ?\n */\n _this.keyPressHandler = function (e) {\n var isAltKey = e.altKey;\n var isCtrlKey = e.ctrlKey;\n var isShiftKey = e.shiftKey;\n var curkeyCode = e.which;\n var keys = Object.keys(_this.keyConfigs);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n var configCollection = _this.keyConfigs[\"\" + key].split(',');\n for (var _a = 0, configCollection_1 = configCollection; _a < configCollection_1.length; _a++) {\n var rconfig = configCollection_1[_a];\n var rKeyObj = KeyboardEvents_1.getKeyConfigData(rconfig.trim());\n if (isAltKey === rKeyObj.altKey && isCtrlKey === rKeyObj.ctrlKey &&\n isShiftKey === rKeyObj.shiftKey && curkeyCode === rKeyObj.keyCode) {\n e.action = key;\n if (_this.keyAction) {\n _this.keyAction(e);\n }\n }\n }\n }\n };\n _this.bind();\n return _this;\n }\n KeyboardEvents_1 = KeyboardEvents;\n /**\n * Unwire bound events and destroy the instance.\n *\n * @returns {void} ?\n */\n KeyboardEvents.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Function can be used to specify certain action if a property is changed\n *\n * @param {KeyboardEventsModel} newProp ?\n * @param {KeyboardEventsModel} oldProp ?\n * @returns {void} ?\n * @private\n */\n // eslint-disable-next-line\n KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n KeyboardEvents.prototype.bind = function () {\n this.wireEvents();\n };\n /**\n * To get the module name, returns 'keyboard'.\n *\n * @returns {string} ?\n * @private\n */\n KeyboardEvents.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * Wiring event handlers to events\n *\n * @returns {void} ?\n * @private\n */\n KeyboardEvents.prototype.wireEvents = function () {\n this.element.addEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * Unwiring event handlers to events\n *\n * @returns {void} ?\n * @private\n */\n KeyboardEvents.prototype.unwireEvents = function () {\n this.element.removeEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * To get the key configuration data\n *\n * @param {string} config - configuration data\n * @returns {KeyData} ?\n */\n KeyboardEvents.getKeyConfigData = function (config) {\n if (config in this.configCache) {\n return this.configCache[\"\" + config];\n }\n var keys = config.toLowerCase().split('+');\n var keyData = {\n altKey: (keys.indexOf('alt') !== -1 ? true : false),\n ctrlKey: (keys.indexOf('ctrl') !== -1 ? true : false),\n shiftKey: (keys.indexOf('shift') !== -1 ? true : false),\n keyCode: null\n };\n if (keys[keys.length - 1].length > 1 && !!Number(keys[keys.length - 1])) {\n keyData.keyCode = Number(keys[keys.length - 1]);\n }\n else {\n keyData.keyCode = KeyboardEvents_1.getKeyCode(keys[keys.length - 1]);\n }\n KeyboardEvents_1.configCache[\"\" + config] = keyData;\n return keyData;\n };\n // Return the keycode value as string\n KeyboardEvents.getKeyCode = function (keyVal) {\n return keyCode[\"\" + keyVal] || keyVal.toUpperCase().charCodeAt(0);\n };\n var KeyboardEvents_1;\n KeyboardEvents.configCache = {};\n __decorate([\n Property({})\n ], KeyboardEvents.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property('keyup')\n ], KeyboardEvents.prototype, \"eventName\", void 0);\n __decorate([\n Event()\n ], KeyboardEvents.prototype, \"keyAction\", void 0);\n KeyboardEvents = KeyboardEvents_1 = __decorate([\n NotifyPropertyChanges\n ], KeyboardEvents);\n return KeyboardEvents;\n}(Base));\nexport { KeyboardEvents };\n","import { extend, isNullOrUndefined } from './util';\nimport { defaultCulture } from './internationalization';\n/**\n * L10n modules provides localized text for different culture.\n * ```typescript\n * import {setCulture} from '@syncfusion/ts-base-library';\n * //load global locale object common for all components.\n * L10n.load({\n * 'fr-BE': {\n * 'button': {\n * 'check': 'vérifié'\n * }\n * }\n * });\n * //set globale default locale culture.\n * setCulture('fr-BE');\n * let instance: L10n = new L10n('button', {\n * check: 'checked'\n * });\n * //Get locale text for current property.\n * instance.getConstant('check');\n * //Change locale culture in a component.\n * instance.setLocale('en-US');\n * ```\n */\nvar L10n = /** @class */ (function () {\n /**\n * Constructor\n *\n * @param {string} controlName ?\n * @param {Object} localeStrings ?\n * @param {string} locale ?\n */\n function L10n(controlName, localeStrings, locale) {\n this.controlName = controlName;\n this.localeStrings = localeStrings;\n this.setLocale(locale || defaultCulture);\n }\n /**\n * Sets the locale text\n *\n * @param {string} locale ?\n * @returns {void} ?\n */\n L10n.prototype.setLocale = function (locale) {\n var intLocale = this.intGetControlConstant(L10n.locale, locale);\n this.currentLocale = intLocale || this.localeStrings;\n };\n /**\n * Sets the global locale for all components.\n *\n * @param {Object} localeObject - specifies the localeObject to be set as global locale.\n * @returns {void} ?\n */\n L10n.load = function (localeObject) {\n this.locale = extend(this.locale, localeObject, {}, true);\n };\n /**\n * Returns current locale text for the property based on the culture name and control name.\n *\n * @param {string} prop - specifies the property for which localize text to be returned.\n * @returns {string} ?\n */\n L10n.prototype.getConstant = function (prop) {\n // Removed conditional operator because this method does not return correct value when passing 0 as value in localization\n if (!isNullOrUndefined(this.currentLocale[\"\" + prop])) {\n return this.currentLocale[\"\" + prop];\n }\n else {\n return this.localeStrings[\"\" + prop] || '';\n }\n };\n /**\n * Returns the control constant object for current object and the locale specified.\n *\n * @param {Object} curObject ?\n * @param {string} locale ?\n * @returns {Object} ?\n */\n L10n.prototype.intGetControlConstant = function (curObject, locale) {\n if ((curObject)[\"\" + locale]) {\n return (curObject)[\"\" + locale][this.controlName];\n }\n return null;\n };\n L10n.locale = {};\n return L10n;\n}());\nexport { L10n };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\nimport { extend } from './util';\nimport { Property, Complex, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Browser } from './browser';\nimport { Base } from './base';\nimport { ChildProperty } from './child-property';\nimport { EventHandler } from './event-handler';\n/**\n * SwipeSettings is a framework module that provides support to handle swipe event like swipe up, swipe right, etc..,\n */\nvar SwipeSettings = /** @class */ (function (_super) {\n __extends(SwipeSettings, _super);\n function SwipeSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(50)\n ], SwipeSettings.prototype, \"swipeThresholdDistance\", void 0);\n return SwipeSettings;\n}(ChildProperty));\nexport { SwipeSettings };\nvar swipeRegex = /(Up|Down)/;\n/**\n * Touch class provides support to handle the touch event like tap, double tap, tap hold, etc..,\n * ```typescript\n * let node: HTMLElement;\n * let touchObj: Touch = new Touch({\n * element: node,\n * tap: function (e) {\n * // tap handler function code\n * }\n * tapHold: function (e) {\n * // tap hold handler function code\n * }\n * scroll: function (e) {\n * // scroll handler function code\n * }\n * swipe: function (e) {\n * // swipe handler function code\n * }\n * });\n * ```\n */\nvar Touch = /** @class */ (function (_super) {\n __extends(Touch, _super);\n /* End-Properties */\n function Touch(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.touchAction = true;\n _this.tapCount = 0;\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.startEvent = function (evt) {\n if (_this.touchAction === true) {\n var point = _this.updateChangeTouches(evt);\n if (evt.changedTouches !== undefined) {\n _this.touchAction = false;\n }\n _this.isTouchMoved = false;\n _this.movedDirection = '';\n _this.startPoint = _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n _this.startEventData = point;\n _this.hScrollLocked = _this.vScrollLocked = false;\n _this.tStampStart = Date.now();\n _this.timeOutTapHold = setTimeout(function () { _this.tapHoldEvent(evt); }, _this.tapHoldThreshold);\n EventHandler.add(_this.element, Browser.touchMoveEvent, _this.moveEvent, _this);\n EventHandler.add(_this.element, Browser.touchEndEvent, _this.endEvent, _this);\n EventHandler.add(_this.element, Browser.touchCancelEvent, _this.cancelEvent, _this);\n }\n };\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.moveEvent = function (evt) {\n var point = _this.updateChangeTouches(evt);\n _this.movedPoint = point;\n _this.isTouchMoved = !(point.clientX === _this.startPoint.clientX && point.clientY === _this.startPoint.clientY);\n var eScrollArgs = {};\n if (_this.isTouchMoved) {\n clearTimeout(_this.timeOutTapHold);\n _this.calcScrollPoints(evt);\n var scrollArg = {\n startEvents: _this.startEventData,\n originalEvent: evt, startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY, distanceX: _this.distanceX,\n distanceY: _this.distanceY, scrollDirection: _this.scrollDirection,\n velocity: _this.getVelocity(point)\n };\n eScrollArgs = extend(eScrollArgs, {}, scrollArg);\n _this.trigger('scroll', eScrollArgs);\n _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n }\n };\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.cancelEvent = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n _this.tapCount = 0;\n _this.swipeFn(evt);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.endEvent = function (evt) {\n _this.swipeFn(evt);\n if (!_this.isTouchMoved) {\n if (typeof _this.tap === 'function') {\n _this.trigger('tap', { originalEvent: evt, tapCount: ++_this.tapCount });\n _this.timeOutTap = setTimeout(function () {\n _this.tapCount = 0;\n }, _this.tapThreshold);\n }\n }\n _this.modeclear();\n };\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.swipeFn = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n var point = _this.updateChangeTouches(evt);\n var diffX = point.clientX - _this.startPoint.clientX;\n var diffY = point.clientY - _this.startPoint.clientY;\n diffX = Math.floor(diffX < 0 ? -1 * diffX : diffX);\n diffY = Math.floor(diffY < 0 ? -1 * diffY : diffX);\n _this.isTouchMoved = diffX > 1 || diffY > 1;\n var isFirefox = (/Firefox/).test(Browser.userAgent);\n if (isFirefox && point.clientX === 0 && point.clientY === 0 && evt.type === 'mouseup') {\n _this.isTouchMoved = false;\n }\n _this.endPoint = point;\n _this.calcPoints(evt);\n var swipeArgs = {\n originalEvent: evt,\n startEvents: _this.startEventData,\n startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY,\n distanceX: _this.distanceX, distanceY: _this.distanceY, swipeDirection: _this.movedDirection,\n velocity: _this.getVelocity(point)\n };\n if (_this.isTouchMoved) {\n var eSwipeArgs = void 0;\n var tDistance = _this.swipeSettings.swipeThresholdDistance;\n // eslint-disable-next-line\n eSwipeArgs = extend(eSwipeArgs, _this.defaultArgs, swipeArgs);\n var canTrigger = false;\n var ele = _this.element;\n var scrollBool = _this.isScrollable(ele);\n var moved = swipeRegex.test(_this.movedDirection);\n if ((tDistance < _this.distanceX && !moved) || (tDistance < _this.distanceY && moved)) {\n if (!scrollBool) {\n canTrigger = true;\n }\n else {\n canTrigger = _this.checkSwipe(ele, moved);\n }\n }\n if (canTrigger) {\n _this.trigger('swipe', eSwipeArgs);\n }\n }\n _this.modeclear();\n };\n _this.modeclear = function () {\n _this.modeClear = setTimeout(function () {\n _this.touchAction = true;\n }, (typeof _this.tap !== 'function' ? 0 : 20));\n _this.lastTapTime = new Date().getTime();\n EventHandler.remove(_this.element, Browser.touchMoveEvent, _this.moveEvent);\n EventHandler.remove(_this.element, Browser.touchEndEvent, _this.endEvent);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n _this.bind();\n return _this;\n }\n // triggers when property changed\n /**\n *\n * @private\n * @param {TouchModel} newProp ?\n * @param {TouchModel} oldProp ?\n * @returns {void} ?\n */\n // eslint-disable-next-line\n Touch.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Touch.prototype.bind = function () {\n this.wireEvents();\n if (Browser.isIE) {\n this.element.classList.add('e-block-touch');\n }\n };\n /**\n * To destroy the touch instance.\n *\n * @returns {void}\n */\n Touch.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n // Need to changes the event binding once we updated the event handler.\n Touch.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.touchStartEvent, this.startEvent, this);\n };\n Touch.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.startEvent);\n };\n /**\n * Returns module name as touch\n *\n * @returns {string} ?\n * @private\n */\n Touch.prototype.getModuleName = function () {\n return 'touch';\n };\n /**\n * Returns if the HTML element is Scrollable.\n *\n * @param {HTMLElement} element - HTML Element to check if Scrollable.\n * @returns {boolean} ?\n */\n Touch.prototype.isScrollable = function (element) {\n var eleStyle = getComputedStyle(element);\n var style = eleStyle.overflow + eleStyle.overflowX + eleStyle.overflowY;\n if ((/(auto|scroll)/).test(style)) {\n return true;\n }\n return false;\n };\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n Touch.prototype.tapHoldEvent = function (evt) {\n this.tapCount = 0;\n this.touchAction = true;\n var eTapArgs;\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.moveEvent);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.endEvent);\n // eslint-disable-next-line\n eTapArgs = { originalEvent: evt };\n this.trigger('tapHold', eTapArgs);\n EventHandler.remove(this.element, Browser.touchCancelEvent, this.cancelEvent);\n };\n Touch.prototype.calcPoints = function (evt) {\n var point = this.updateChangeTouches(evt);\n this.defaultArgs = { originalEvent: evt };\n this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.startPoint.clientX)));\n this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.startPoint.clientY)));\n if (this.distanceX > this.distanceY) {\n this.movedDirection = (point.clientX > this.startPoint.clientX) ? 'Right' : 'Left';\n }\n else {\n this.movedDirection = (point.clientY < this.startPoint.clientY) ? 'Up' : 'Down';\n }\n };\n Touch.prototype.calcScrollPoints = function (evt) {\n var point = this.updateChangeTouches(evt);\n this.defaultArgs = { originalEvent: evt };\n this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.lastMovedPoint.clientX)));\n this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.lastMovedPoint.clientY)));\n if ((this.distanceX > this.distanceY || this.hScrollLocked === true) && this.vScrollLocked === false) {\n this.scrollDirection = (point.clientX > this.lastMovedPoint.clientX) ? 'Right' : 'Left';\n this.hScrollLocked = true;\n }\n else {\n this.scrollDirection = (point.clientY < this.lastMovedPoint.clientY) ? 'Up' : 'Down';\n this.vScrollLocked = true;\n }\n };\n Touch.prototype.getVelocity = function (pnt) {\n var newX = pnt.clientX;\n var newY = pnt.clientY;\n var newT = Date.now();\n var xDist = newX - this.startPoint.clientX;\n var yDist = newY - this.startPoint.clientX;\n var interval = newT - this.tStampStart;\n return Math.sqrt(xDist * xDist + yDist * yDist) / interval;\n };\n // eslint-disable-next-line\n Touch.prototype.checkSwipe = function (ele, flag) {\n var keys = ['scroll', 'offset'];\n var temp = flag ? ['Height', 'Top'] : ['Width', 'Left'];\n if ((ele[keys[0] + temp[0]] <= ele[keys[1] + temp[0]])) {\n return true;\n }\n return (ele[keys[0] + temp[1]] === 0) ||\n (ele[keys[1] + temp[0]] + ele[keys[0] + temp[1]] >= ele[keys[0] + temp[0]]);\n };\n Touch.prototype.updateChangeTouches = function (evt) {\n var point = evt.changedTouches && evt.changedTouches.length !== 0 ? evt.changedTouches[0] : evt;\n return point;\n };\n __decorate([\n Event()\n ], Touch.prototype, \"tap\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"tapHold\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"swipe\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"scroll\", void 0);\n __decorate([\n Property(350)\n ], Touch.prototype, \"tapThreshold\", void 0);\n __decorate([\n Property(750)\n ], Touch.prototype, \"tapHoldThreshold\", void 0);\n __decorate([\n Complex({}, SwipeSettings)\n ], Touch.prototype, \"swipeSettings\", void 0);\n Touch = __decorate([\n NotifyPropertyChanges\n ], Touch);\n return Touch;\n}(Base));\nexport { Touch };\n","/**\n * Template Engine\n */\nvar LINES = new RegExp('\\\\n|\\\\r|\\\\s\\\\s+', 'g');\nvar QUOTES = new RegExp(/'|\"/g);\nvar IF_STMT = new RegExp('if ?\\\\(');\nvar ELSEIF_STMT = new RegExp('else if ?\\\\(');\nvar ELSE_STMT = new RegExp('else');\nvar FOR_STMT = new RegExp('for ?\\\\(');\nvar IF_OR_FOR = new RegExp('(/if|/for)');\nvar CALL_FUNCTION = new RegExp('\\\\((.*)\\\\)', '');\nvar NOT_NUMBER = new RegExp('^[0-9]+$', 'g');\nvar WORD = new RegExp('[\\\\w\"\\'.\\\\s+]+', 'g');\nvar DBL_QUOTED_STR = new RegExp('\"(.*?)\"', 'g');\nvar WORDIF = new RegExp('[\\\\w\"\\'@#$.\\\\s-+]+', 'g');\nvar exp = new RegExp('\\\\${([^}]*)}', 'g');\n// let cachedTemplate: Object = {};\nvar ARR_OBJ = /^\\..*/gm;\nvar SINGLE_SLASH = /\\\\/gi;\nvar DOUBLE_SLASH = /\\\\\\\\/gi;\nvar WORDFUNC = new RegExp('[\\\\w\"\\'@#$.\\\\s+]+', 'g');\nvar WINDOWFUNC = /\\window\\./gm;\n/**\n * The function to set regular expression for template expression string.\n *\n * @param {RegExp} value - Value expression.\n * @returns {RegExp} ?\n * @private\n */\nexport function expression(value) {\n if (value) {\n exp = value;\n }\n return exp;\n}\n// /**\n// * To render the template string from the given data.\n// * @param {string} template - String Template.\n// * @param {Object[]|JSON} data - DataSource for the template.\n// * @param {Object} helper? - custom helper object.\n// */\n// export function template(template: string, data: JSON, helper?: Object): string {\n// let hash: string = hashCode(template);\n// let tmpl: Function;\n// if (!cachedTemplate[hash]) {\n// tmpl = cachedTemplate[hash] = compile(template, helper);\n// } else {\n// tmpl = cachedTemplate[hash];\n// }\n// return tmpl(data);\n// }\n/**\n * Compile the template string into template function.\n *\n * @param {string | Function} template - The template string which is going to convert.\n * @param {Object} helper - Helper functions as an object.\n * @param {boolean} ignorePrefix ?\n * @returns {string} ?\n * @private\n */\nexport function compile(template, helper, ignorePrefix) {\n if (typeof template === 'function') {\n return template;\n }\n else {\n var argName = 'data';\n var evalExpResult = evalExp(template, argName, helper, ignorePrefix);\n // eslint-disable-next-line\n var condtion = \"var valueRegEx = (/value=\\\\'([A-Za-z0-9 _]*)((.)([\\\\w)(!-;?-\\u25A0\\\\s]+)['])/g);\\n var hrefRegex = (/(?:href)([\\\\s='\\\"./]+)([\\\\w-./?=&\\\\\\\\#\\\"]+)((.)([\\\\w)(!-;/?-\\u25A0\\\\s]+)['])/g);\\n if(str.match(valueRegEx)){\\n var check = str.match(valueRegEx);\\n var str1 = str;\\n for (var i=0; i < check.length; i++) {\\n var check1 = str.match(valueRegEx)[i].split('value=')[1];\\n var change = check1.match(/^'/) !== null ? check1.replace(/^'/, '\\\"') : check1;\\n change =change.match(/.$/)[0] === '\\\\'' ? change.replace(/.$/,'\\\"') : change;\\n str1 = str1.replace(check1, change);\\n }\\n str = str.replace(str, str1);\\n }\\n else if (str.match(/(?:href='')/) === null) {\\n if(str.match(hrefRegex)) {\\n var check = str.match(hrefRegex);\\n var str1 = str;\\n for (var i=0; i < check.length; i++) {\\n var check1 = str.match(hrefRegex)[i].split('href=')[1];\\n if (check1) {\\n var change = check1.match(/^'/) !== null ? check1.replace(/^'/, '\\\"') : check1;\\n change =change.match(/.$/)[0] === '\\\\'' ? change.replace(/.$/,'\\\"') : change;\\n str1 = str1.replace(check1, change);\\n }\\n }\\n str = str.replace(str, str1);\\n }\\n }\\n \";\n var fnCode = 'var str=\\\"' + evalExpResult + '\\\";' + condtion + ' return str;';\n var fn = new Function(argName, fnCode);\n return fn.bind(helper);\n }\n}\n/** function used to evaluate the function expression\n *\n * @param {string} str ?\n * @param {string} nameSpace ?\n * @param {Object} helper ?\n * @param {boolean} ignorePrefix ?\n * @returns {string} ?\n */\nfunction evalExp(str, nameSpace, helper, ignorePrefix) {\n var varCOunt = 0;\n /**\n * Variable containing Local Keys\n */\n var localKeys = [];\n var isClass = str.match(/class=\"([^\"]+|)\\s{2}/g);\n var singleSpace = '';\n if (isClass) {\n isClass.forEach(function (value) {\n singleSpace = value.replace(/\\s\\s+/g, ' ');\n str = str.replace(value, singleSpace);\n });\n }\n return str.replace(LINES, '').replace(DBL_QUOTED_STR, '\\'$1\\'').replace(exp, \n // eslint-disable-next-line\n function (match, cnt, offset, matchStr) {\n var SPECIAL_CHAR = /@|#|\\$/gm;\n var matches = cnt.match(CALL_FUNCTION);\n // matches to detect any function calls\n if (matches) {\n var rlStr = matches[1];\n if (ELSEIF_STMT.test(cnt)) {\n //handling else-if condition\n cnt = '\";} ' + cnt.replace(matches[1], rlStr.replace(WORD, function (str) {\n str = str.trim();\n return addNameSpace(str, !(QUOTES.test(str)) && (localKeys.indexOf(str) === -1), nameSpace, localKeys, ignorePrefix);\n })) + '{ \\n str = str + \"';\n }\n else if (IF_STMT.test(cnt)) {\n //handling if condition\n cnt = '\"; ' + cnt.replace(matches[1], rlStr.replace(WORDIF, function (strs) {\n return HandleSpecialCharArrObj(strs, nameSpace, localKeys, ignorePrefix);\n })) + '{ \\n str = str + \"';\n }\n else if (FOR_STMT.test(cnt)) {\n //handling for condition\n var rlStr_1 = matches[1].split(' of ');\n // replace for each into actual JavaScript\n // eslint-disable-next-line\n cnt = '\"; ' + cnt.replace(matches[1], function (mtc) {\n localKeys.push(rlStr_1[0]);\n localKeys.push(rlStr_1[0] + 'Index');\n varCOunt = varCOunt + 1;\n // tslint:disable-next-line\n return 'var i' + varCOunt + '=0; i' + varCOunt + ' < ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys, ignorePrefix) + '.length; i' + varCOunt + '++';\n }) + '{ \\n ' + rlStr_1[0] + '= ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys, ignorePrefix)\n + '[i' + varCOunt + ']; \\n var ' + rlStr_1[0] + 'Index=i' + varCOunt + '; \\n str = str + \"';\n }\n else {\n //helper function handling\n var fnStr = cnt.split('(');\n // eslint-disable-next-line\n var fNameSpace = (helper && helper.hasOwnProperty(fnStr[0]) ? 'this.' : 'global');\n fNameSpace = (/\\./.test(fnStr[0]) ? '' : fNameSpace);\n var ftArray = matches[1].split(',');\n if (matches[1].length !== 0 && !(/data/).test(ftArray[0]) && !(/window./).test(ftArray[0])) {\n matches[1] = (fNameSpace === 'global' ? nameSpace + '.' + matches[1] : matches[1]);\n }\n var splRegexp = /@|\\$|#/gm;\n var arrObj = /\\]\\./gm;\n if (WINDOWFUNC.test(cnt) && arrObj.test(cnt) || splRegexp.test(cnt)) {\n var splArrRegexp = /@|\\$|#|\\]\\./gm;\n if (splArrRegexp.test(cnt)) {\n // tslint:disable-next-line\n cnt = '\"+ ' + (fNameSpace === 'global' ? '' : fNameSpace) + cnt.replace(matches[1], rlStr.replace(WORDFUNC, function (strs) {\n return HandleSpecialCharArrObj(strs, nameSpace, localKeys, ignorePrefix);\n })) + '+ \"';\n }\n }\n else {\n cnt = '\" + ' + (fNameSpace === 'global' ? '' : fNameSpace) +\n cnt.replace(rlStr, addNameSpace(matches[1].replace(/,( |)data.|,/gi, ',' + nameSpace + '.').replace(/,( |)data.window/gi, ',window'), (fNameSpace === 'global' ? false : true), nameSpace, localKeys, ignorePrefix)) +\n '+\"';\n }\n }\n }\n else if (ELSE_STMT.test(cnt)) {\n // handling else condition\n cnt = '\"; ' + cnt.replace(ELSE_STMT, '} else { \\n str = str + \"');\n // eslint-disable-next-line\n }\n else if (!!cnt.match(IF_OR_FOR)) {\n // close condition\n cnt = cnt.replace(IF_OR_FOR, '\"; \\n } \\n str = str + \"');\n }\n else if (SPECIAL_CHAR.test(cnt)) {\n // template string with double slash with special character\n if (cnt.match(SINGLE_SLASH)) {\n cnt = SlashReplace(cnt);\n }\n cnt = '\"+' + NameSpaceForspecialChar(cnt, (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '\"]+\"';\n }\n else {\n // template string with double slash\n if (cnt.match(SINGLE_SLASH)) {\n cnt = SlashReplace(cnt);\n cnt = '\"+' + NameSpaceForspecialChar(cnt, (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '\"]+\"';\n }\n else {\n // evaluate normal expression\n cnt = cnt !== '' ? '\"+' + addNameSpace(cnt.replace(/,/gi, '+' + nameSpace + '.'), (localKeys.indexOf(cnt) === -1), nameSpace, localKeys, ignorePrefix) + '+\"' : ' ';\n }\n }\n return cnt;\n });\n}\n/**\n *\n * @param {string} str ?\n * @param {boolean} addNS ?\n * @param {string} nameSpace ?\n * @param {string[]} ignoreList ?\n * @param {boolean} ignorePrefix ?\n * @returns {string} ?\n */\nfunction addNameSpace(str, addNS, nameSpace, ignoreList, ignorePrefix) {\n return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1 && !ignorePrefix && str !== \"true\" && str !== \"false\") ? nameSpace + '.' + str : str);\n}\n/**\n *\n * @param {string} str ?\n * @param {boolean} addNS ?\n * @param {string} nameSpace ?\n * @param {string[]} ignoreList ?\n * @returns {string} ?\n */\nfunction NameSpaceArrObj(str, addNS, nameSpace, ignoreList) {\n var arrObjReg = /^\\..*/gm;\n return ((addNS && !(NOT_NUMBER.test(str)) &&\n ignoreList.indexOf(str.split('.')[0]) === -1 && !(arrObjReg.test(str))) ? nameSpace + '.' + str : str);\n}\n// // Create hashCode for template string to storeCached function\n// function hashCode(str: string): string {\n// return str.split('').reduce((a: number, b: string) => { a = ((a << 5) - a) + b.charCodeAt(0); return a & a; }, 0).toString();\n// }\n/**\n *\n * @param {string} str ?\n * @param {boolean} addNS ?\n * @param {string} nameSpace ?\n * @param {string[]} ignoreList ?\n * @returns {string} ?\n */\nfunction NameSpaceForspecialChar(str, addNS, nameSpace, ignoreList) {\n return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1) ? nameSpace + '[\"' + str : str);\n}\n// eslint-disable-next-line\nfunction SlashReplace(tempStr) {\n var double = '\\\\\\\\';\n if (tempStr.match(DOUBLE_SLASH)) {\n // eslint-disable-next-line\n tempStr = tempStr;\n }\n else {\n tempStr = tempStr.replace(SINGLE_SLASH, double);\n }\n return tempStr;\n}\n/**\n *\n * @param {string} str ?\n * @param {string} nameSpaceNew ?\n * @param {string[]} keys ?\n * @param {boolean} ignorePrefix ?\n * @returns {string} ?\n */\nfunction HandleSpecialCharArrObj(str, nameSpaceNew, keys, ignorePrefix) {\n str = str.trim();\n var windowFunc = /\\window\\./gm;\n if (!windowFunc.test(str)) {\n var quotes = /'|\"/gm;\n var splRegexp = /@|\\$|#/gm;\n if (splRegexp.test(str)) {\n str = NameSpaceForspecialChar(str, (keys.indexOf(str) === -1), nameSpaceNew, keys) + '\"]';\n }\n if (ARR_OBJ.test(str)) {\n return NameSpaceArrObj(str, !(quotes.test(str)) && (keys.indexOf(str) === -1), nameSpaceNew, keys);\n }\n else {\n return addNameSpace(str, !(quotes.test(str)) && (keys.indexOf(str) === -1), nameSpaceNew, keys, ignorePrefix);\n }\n }\n else {\n return str;\n }\n}\n","/**\n * Template Engine Bridge\n */\nimport { compile as render } from './template';\nimport { createElement } from './dom';\nimport { isNullOrUndefined, isBlazor } from './util';\nvar HAS_ROW = /^[\\n\\r.]+ 0) {\n elements.forEach(function (element) {\n detach(element);\n });\n }\n else {\n return;\n }\n };\n SanitizeHtmlHelper.removeJsEvents = function () {\n var elements = this.wrapElement.querySelectorAll('[' + jsEvents.join('],[') + ']');\n if (elements.length > 0) {\n elements.forEach(function (element) {\n jsEvents.forEach(function (attr) {\n if (element.hasAttribute(attr)) {\n element.removeAttribute(attr);\n }\n });\n });\n }\n else {\n return;\n }\n };\n SanitizeHtmlHelper.removeXssAttrs = function () {\n var _this = this;\n // eslint-disable-next-line\n this.removeAttrs.forEach(function (item, index) {\n var elements = _this.wrapElement.querySelectorAll(item.selector);\n if (elements.length > 0) {\n elements.forEach(function (element) {\n element.removeAttribute(item.attribute);\n });\n }\n });\n };\n return SanitizeHtmlHelper;\n}());\nexport { SanitizeHtmlHelper };\n","/* eslint-disable no-inner-declarations */\nimport { extend, merge, isNullOrUndefined, getValue, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { attributes, prepend, isVisible, append, addClass } from '@syncfusion/ej2-base';\nimport { compile } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nexport var cssClass = {\n li: 'e-list-item',\n ul: 'e-list-parent e-ul',\n group: 'e-list-group-item',\n icon: 'e-list-icon',\n text: 'e-list-text',\n check: 'e-list-check',\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: 'e-list-url',\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: 'e-list-img',\n iconWrapper: 'e-icon-wrapper',\n anchorWrap: 'e-anchor-wrap',\n navigable: 'e-navigable'\n};\n/**\n * Base List Generator\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var ListBase;\n(function (ListBase) {\n /**\n *\n * Default mapped fields.\n */\n ListBase.defaultMappedFields = {\n id: 'id',\n text: 'text',\n url: 'url',\n value: 'value',\n isChecked: 'isChecked',\n enabled: 'enabled',\n expanded: 'expanded',\n selected: 'selected',\n iconCss: 'iconCss',\n child: 'child',\n isVisible: 'isVisible',\n hasChildren: 'hasChildren',\n tooltip: 'tooltip',\n htmlAttributes: 'htmlAttributes',\n urlAttributes: 'urlAttributes',\n imageAttributes: 'imageAttributes',\n imageUrl: 'imageUrl',\n groupBy: null,\n sortBy: null\n };\n var defaultAriaAttributes = {\n level: 1,\n listRole: 'presentation',\n itemRole: 'presentation',\n groupItemRole: 'group',\n itemText: 'list-item',\n wrapperRole: 'presentation'\n };\n var defaultListBaseOptions = {\n showCheckBox: false,\n showIcon: false,\n enableHtmlSanitizer: false,\n expandCollapse: false,\n fields: ListBase.defaultMappedFields,\n ariaAttributes: defaultAriaAttributes,\n listClass: '',\n itemClass: '',\n processSubChild: false,\n sortOrder: 'None',\n template: null,\n groupTemplate: null,\n headerTemplate: null,\n expandIconClass: 'e-icon-collapsible',\n moduleName: 'list',\n expandIconPosition: 'Right',\n itemNavigable: false\n };\n /**\n * Function helps to created and return the UL Li element based on your data.\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {createElement} createListFromJson - Specifies the list options that need to provide.\n */\n function createList(createElement, dataSource, \n // eslint-disable-next-line\n options, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var type = typeofData(dataSource).typeof;\n if (type === 'string' || type === 'number') {\n return createListFromArray(createElement, dataSource, isSingleLevel, options, componentInstance);\n }\n else {\n return createListFromJson(createElement, dataSource, options, ariaAttributes.level, isSingleLevel, componentInstance);\n }\n }\n ListBase.createList = createList;\n /**\n * Function helps to created an element list based on string array input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {createElement} generateUL - returns the list options that need to provide.\n */\n function createListFromArray(createElement, dataSource, \n // tslint:disable-next-line\n // eslint-disable-next-line\n isSingleLevel, options, componentInstance) {\n var subChild = createListItemFromArray(createElement, dataSource, isSingleLevel, options, componentInstance);\n return generateUL(createElement, subChild, null, options);\n }\n ListBase.createListFromArray = createListFromArray;\n /**\n * Function helps to created an element list based on string array input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {HTMLElement[]} subChild - returns the list options that need to provide.\n */\n function createListItemFromArray(createElement, dataSource, \n // eslint-disable-next-line\n isSingleLevel, options, componentInstance) {\n var subChild = [];\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n var li = void 0;\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n options: curOpt\n };\n curOpt.itemCreating(curData);\n }\n if (isSingleLevel) {\n li = generateSingleLevelLI(createElement, dataSource[i], undefined, null, null, [], null, id, i, options);\n }\n else {\n li = generateLI(createElement, dataSource[i], undefined, null, null, options, componentInstance);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n item: li,\n options: curOpt\n };\n curOpt.itemCreated(curData);\n }\n subChild.push(li);\n }\n return subChild;\n }\n ListBase.createListItemFromArray = createListItemFromArray;\n /**\n * Function helps to created an element list based on array of JSON input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {number} level? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {HTMLElement[]} child - returns the list options that need to provide.\n */\n function createListItemFromJson(createElement, dataSource, \n // eslint-disable-next-line\n options, level, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var fields = (componentInstance &&\n (componentInstance.getModuleName() === 'listview' || componentInstance.getModuleName() === 'multiselect'))\n ? curOpt.fields : extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var id;\n var checkboxElement = [];\n if (level) {\n ariaAttributes.level = level;\n }\n var child = [];\n var li;\n var anchorElement;\n if (dataSource && dataSource.length && !isNullOrUndefined(typeofData(dataSource).item) &&\n // eslint-disable-next-line no-prototype-builtins\n !typeofData(dataSource).item.hasOwnProperty(fields.id)) {\n id = generateId(); // generate id for drop-down-list option.\n }\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], fields);\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreating(curData);\n }\n var curItem = dataSource[i];\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], fields);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.id) && !isNullOrUndefined(fieldData[fields.id])) {\n id = fieldData[fields.id];\n }\n var innerEle = [];\n if (curOpt.showCheckBox) {\n if (curOpt.itemNavigable && (fieldData[fields.url] || fieldData[fields.urlAttributes])) {\n checkboxElement.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n }\n else {\n innerEle.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n }\n }\n if (isSingleLevel === true) {\n // eslint-disable-next-line no-prototype-builtins\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) && !isNullOrUndefined(fieldData[fields.iconCss])) {\n innerEle.push(createElement('span', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] }));\n }\n li = generateSingleLevelLI(createElement, curItem, fieldData, fields, curOpt.itemClass, innerEle, \n // eslint-disable-next-line no-prototype-builtins\n (curItem.hasOwnProperty('isHeader') &&\n curItem.isHeader) ? true : false, id, i, options);\n anchorElement = li.querySelector('.' + cssClass.anchorWrap);\n if (curOpt.itemNavigable && checkboxElement.length) {\n prepend(checkboxElement, li.firstElementChild);\n }\n }\n else {\n li = generateLI(createElement, curItem, fieldData, fields, curOpt.itemClass, options, componentInstance);\n li.classList.add(cssClass.level + '-' + ariaAttributes.level);\n li.setAttribute('aria-level', ariaAttributes.level.toString());\n if (ariaAttributes.groupItemRole == 'presentation') {\n li.removeAttribute('aria-level');\n }\n anchorElement = li.querySelector('.' + cssClass.anchorWrap);\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.tooltip)) {\n li.setAttribute('title', fieldData[fields.tooltip]);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled] === false) {\n li.classList.add(cssClass.disabled);\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.isVisible) && fieldData[fields.isVisible] === false) {\n li.style.display = 'none';\n }\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.imageUrl) && !isNullOrUndefined(fieldData[fields.imageUrl])\n && !curOpt.template) {\n var attr = { src: fieldData[fields.imageUrl] };\n merge(attr, fieldData[fields.imageAttributes]);\n var imageElemnt = createElement('img', { className: cssClass.image, attrs: attr });\n if (anchorElement) {\n anchorElement.insertAdjacentElement('afterbegin', imageElemnt);\n }\n else {\n prepend([imageElemnt], li.firstElementChild);\n }\n }\n // eslint-disable-next-line no-prototype-builtins\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) &&\n !isNullOrUndefined(fieldData[fields.iconCss]) && !curOpt.template) {\n var iconElement = createElement('div', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] });\n if (anchorElement) {\n anchorElement.insertAdjacentElement('afterbegin', iconElement);\n }\n else {\n prepend([iconElement], li.firstElementChild);\n }\n }\n if (innerEle.length) {\n prepend(innerEle, li.firstElementChild);\n }\n if (curOpt.itemNavigable && checkboxElement.length) {\n prepend(checkboxElement, li.firstElementChild);\n }\n processSubChild(createElement, fieldData, fields, dataSource, curOpt, li, ariaAttributes.level);\n }\n if (anchorElement) {\n addClass([li], [cssClass.navigable]);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n item: li,\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreated(curData);\n }\n checkboxElement = [];\n child.push(li);\n }\n return child;\n }\n ListBase.createListItemFromJson = createListItemFromJson;\n /**\n * Function helps to created an element list based on array of JSON input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n *\n * @param {number} level? - Specifies the list options that need to provide.\n *\n * @param {boolean} isSingleLevel? - Specifies the list options that need to provide.\n *\n * @param {any} componentInstance? - Specifies the list options that need to provide.\n *\n * @returns {createElement} generateUL - Specifies the list options that need to provide.\n */\n function createListFromJson(createElement, dataSource, \n // eslint-disable-next-line\n options, level, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var li = createListItemFromJson(createElement, dataSource, options, level, isSingleLevel, componentInstance);\n return generateUL(createElement, li, curOpt.listClass, options);\n }\n ListBase.createListFromJson = createListFromJson;\n /**\n * Return the next or previous visible element.\n *\n * @param {Element[]|NodeList} elementArray - An element array to find next or previous element.\n * @param {Element} li - An element to find next or previous after this element.\n * @param {boolean} isPrevious? - Specify when the need get previous element from array.\n */\n function getSiblingLI(elementArray, element, isPrevious) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n if (!elementArray || !elementArray.length) {\n return void 0;\n }\n var siblingLI;\n var liIndex;\n var liCollections = Array.prototype.slice.call(elementArray);\n if (element) {\n liIndex = indexOf(element, liCollections);\n }\n else {\n liIndex = (isPrevious === true ? liCollections.length : -1);\n }\n siblingLI = liCollections[liIndex + (isPrevious === true ? -1 : 1)];\n while (siblingLI && (!isVisible(siblingLI) || siblingLI.classList.contains(cssClass.disabled))) {\n liIndex = liIndex + (isPrevious === true ? -1 : 1);\n siblingLI = liCollections[liIndex];\n }\n return siblingLI;\n }\n ListBase.getSiblingLI = getSiblingLI;\n /**\n * Return the index of the li element\n *\n * @param {Element} item - An element to find next or previous after this element.\n * @param {Element[]} elementArray - An element array to find index of given li.\n */\n function indexOf(item, elementArray) {\n if (!elementArray || !item) {\n return void 0;\n }\n else {\n var liCollections = elementArray;\n liCollections = Array.prototype.slice.call(elementArray);\n return liCollections.indexOf(item);\n }\n }\n ListBase.indexOf = indexOf;\n /**\n * Returns the grouped data from given dataSource.\n *\n * @param {{Object}[]} dataSource - The JSON data which is necessary to process.\n * @param {FieldsMapping} fields - Fields that are mapped from the data source.\n * @param {SortOrder} sortOrder- Specifies final result sort order.\n */\n function groupDataSource(dataSource, fields, sortOrder) {\n if (sortOrder === void 0) { sortOrder = 'None'; }\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var cusQuery = new Query().group(curFields.groupBy);\n // need to remove once sorting issues fixed in DataManager\n cusQuery = addSorting(sortOrder, 'key', cusQuery);\n var ds = getDataSource(dataSource, cusQuery);\n dataSource = [];\n for (var j = 0; j < ds.length; j++) {\n var itemObj = ds[j].items;\n var grpItem = {};\n var hdr = 'isHeader';\n grpItem[curFields.text] = ds[j].key;\n grpItem[\"\" + hdr] = true;\n var newtext = curFields.text;\n if (newtext === 'id') {\n newtext = 'text';\n grpItem[\"\" + newtext] = ds[j].key;\n }\n grpItem._id = 'group-list-item-' + (ds[j].key ?\n ds[j].key.toString().trim() : 'undefined');\n grpItem.items = itemObj;\n dataSource.push(grpItem);\n for (var k = 0; k < itemObj.length; k++) {\n dataSource.push(itemObj[k]);\n }\n }\n return dataSource;\n }\n ListBase.groupDataSource = groupDataSource;\n /**\n * Returns a sorted query object.\n *\n * @param {SortOrder} sortOrder - Specifies that sort order.\n * @param {string} sortBy - Specifies sortBy fields.\n * @param {Query} query - Pass if any existing query.\n */\n function addSorting(sortOrder, sortBy, query) {\n if (query === void 0) { query = new Query(); }\n if (sortOrder === 'Ascending') {\n query.sortBy(sortBy, 'ascending', true);\n }\n else if (sortOrder === 'Descending') {\n query.sortBy(sortBy, 'descending', true);\n }\n else {\n for (var i = 0; i < query.queries.length; i++) {\n if (query.queries[i].fn === 'onSortBy') {\n query.queries.splice(i, 1);\n }\n }\n }\n return query;\n }\n ListBase.addSorting = addSorting;\n /**\n * Return an array of JSON Data that processed based on queries.\n *\n * @param {{Object}[]} dataSource - Specifies local JSON data source.\n *\n * @param {Query} query - Specifies query that need to process.\n */\n function getDataSource(dataSource, query) {\n // eslint-disable-next-line\n return new DataManager(dataSource)\n .executeLocal(query);\n }\n ListBase.getDataSource = getDataSource;\n /**\n * Created JSON data based the UL and LI element\n *\n * @param {HTMLElement|Element} element - UL element that need to convert as a JSON\n * @param {ListBaseOptions} options? - Specifies listbase option for fields.\n */\n function createJsonFromElement(element, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var curEle = element.cloneNode(true);\n // eslint-disable-next-line\n var jsonAr = [];\n curEle.classList.add('json-parent');\n var childs = curEle.querySelectorAll('.json-parent>li');\n curEle.classList.remove('json-parent');\n for (var i = 0; i < childs.length; i++) {\n var li = childs[i];\n var anchor = li.querySelector('a');\n var ul = li.querySelector('ul');\n // eslint-disable-next-line\n var json = {};\n var childNodes = anchor ? anchor.childNodes : li.childNodes;\n var keys = Object.keys(childNodes);\n for (var i_1 = 0; i_1 < childNodes.length; i_1++) {\n if (!(childNodes[Number(keys[i_1])]).hasChildNodes()) {\n json[fields.text] = childNodes[Number(keys[i_1])].textContent;\n }\n }\n var attributes_1 = getAllAttributes(li);\n if (attributes_1.id) {\n json[fields.id] = attributes_1.id;\n delete attributes_1.id;\n }\n else {\n json[fields.id] = generateId();\n }\n if (Object.keys(attributes_1).length) {\n json[fields.htmlAttributes] = attributes_1;\n }\n if (anchor) {\n attributes_1 = getAllAttributes(anchor);\n if (Object.keys(attributes_1).length) {\n json[fields.urlAttributes] = attributes_1;\n }\n }\n if (ul) {\n json[fields.child] = createJsonFromElement(ul, options);\n }\n jsonAr.push(json);\n }\n return jsonAr;\n }\n ListBase.createJsonFromElement = createJsonFromElement;\n function typeofData(data) {\n var match = { typeof: null, item: null };\n for (var i = 0; i < data.length; i++) {\n if (!isNullOrUndefined(data[i])) {\n return match = { typeof: typeof data[i], item: data[i] };\n }\n }\n return match;\n }\n function setAttribute(element, elementAttributes) {\n var attr = {};\n merge(attr, elementAttributes);\n if (attr.class) {\n addClass([element], attr.class.split(' '));\n delete attr.class;\n }\n attributes(element, attr);\n }\n function getAllAttributes(element) {\n var attributes = {};\n var attr = element.attributes;\n for (var index = 0; index < attr.length; index++) {\n attributes[attr[index].nodeName] = attr[index].nodeValue;\n }\n return attributes;\n }\n /**\n * Created UL element from content template.\n *\n * @param {string} template - that need to convert and generate li element.\n * @param {{Object}[]} dataSource - Specifies local JSON data source.\n * @param {ListBaseOptions} options? - Specifies listbase option for fields.\n */\n function renderContentTemplate(createElement, template, dataSource, \n // eslint-disable-next-line\n fields, options, componentInstance) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n var ulElement = createElement('ul', { className: cssClass.ul, attrs: { role: 'presentation' } });\n var curOpt = extend({}, defaultListBaseOptions, options);\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n // eslint-disable-next-line\n var compiledString = compileTemplate(template);\n var liCollection = [];\n var value;\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], curFields);\n var curItem = dataSource[i];\n var isHeader = curItem.isHeader;\n if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n value = curItem;\n }\n else {\n value = fieldData[curFields.value];\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n options: curOpt,\n fields: curFields\n };\n curOpt.itemCreating(curData);\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], curFields);\n if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n value = curItem;\n }\n else {\n value = fieldData[curFields.value];\n }\n }\n var li = createElement('li', {\n id: id + '-' + i,\n className: isHeader ? cssClass.group : cssClass.li, attrs: { role: 'presentation' }\n });\n if (isHeader) {\n if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n li.innerText = curItem;\n }\n else {\n li.innerText = fieldData[curFields.text];\n }\n }\n else {\n var currentID = isHeader ? curOpt.groupTemplateID : curOpt.templateID;\n if (isHeader) {\n if (componentInstance && componentInstance.getModuleName() != 'listview') {\n // eslint-disable-next-line\n var compiledElement = compiledString(curItem, componentInstance, 'headerTemplate', currentID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(curItem, componentInstance, 'headerTemplate', currentID, !!curOpt.isStringTemplate), li);\n }\n }\n else {\n if (componentInstance && componentInstance.getModuleName() !== 'listview') {\n // eslint-disable-next-line\n var compiledElement = compiledString(curItem, componentInstance, 'template', currentID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(curItem, componentInstance, 'template', currentID, !!curOpt.isStringTemplate), li);\n }\n }\n li.setAttribute('data-value', isNullOrUndefined(value) ? 'null' : value);\n li.setAttribute('role', 'option');\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n item: li,\n options: curOpt,\n fields: curFields\n };\n curOpt.itemCreated(curData);\n }\n liCollection.push(li);\n }\n append(liCollection, ulElement);\n return ulElement;\n }\n ListBase.renderContentTemplate = renderContentTemplate;\n /**\n * Created header items from group template.\n *\n * @param {string} template - that need to convert and generate li element.\n *\n * @param {{Object}[]} dataSource - Specifies local JSON data source.\n *\n * @param {FieldsMapping} fields - Specifies fields for mapping the dataSource.\n *\n * @param {Element[]} headerItems? - Specifies listbase header items.\n */\n // tslint:disable-next-line\n function renderGroupTemplate(groupTemplate, groupDataSource, fields, \n // eslint-disable-next-line\n headerItems, options, componentInstance) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n var compiledString = compileTemplate(groupTemplate);\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var curOpt = extend({}, defaultListBaseOptions, options);\n var category = curFields.groupBy;\n for (var _i = 0, headerItems_1 = headerItems; _i < headerItems_1.length; _i++) {\n var header = headerItems_1[_i];\n var headerData = {};\n headerData[\"\" + category] = header.textContent;\n header.innerHTML = '';\n if (componentInstance && componentInstance.getModuleName() !== \"listview\") {\n // eslint-disable-next-line\n var compiledElement = compiledString(headerData, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate, null, header);\n if (compiledElement) {\n append(compiledElement, header);\n }\n }\n else {\n append(compiledString(headerData, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate), header);\n }\n }\n return headerItems;\n }\n ListBase.renderGroupTemplate = renderGroupTemplate;\n function generateId() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n ListBase.generateId = generateId;\n function processSubChild(createElement, fieldData, fields, ds, options, element, level) {\n // Get SubList\n var subDS = fieldData[fields.child] || [];\n var hasChildren = fieldData[fields.hasChildren];\n //Create Sub child\n if (subDS.length) {\n hasChildren = true;\n element.classList.add(cssClass.hasChild);\n if (options.processSubChild) {\n var subLi = createListFromJson(createElement, subDS, options, ++level);\n element.appendChild(subLi);\n }\n }\n // Create expand and collapse node\n if (!!options.expandCollapse && hasChildren && !options.template) {\n element.firstElementChild.classList.add(cssClass.iconWrapper);\n // eslint-disable-next-line @typescript-eslint/ban-types\n var expandElement = options.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', { className: 'e-icons ' + options.expandIconClass })], element.querySelector('.' + cssClass.textContent));\n }\n }\n function generateSingleLevelLI(createElement, item, fieldData, fields, className, innerElements, grpLI, id, index, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var value = item;\n var dataSource;\n if (typeof item !== 'string' && typeof item !== 'number' && typeof item !== 'boolean') {\n dataSource = item;\n text = (typeof fieldData[fields.text] === 'boolean' || typeof fieldData[fields.text] === 'number') ?\n fieldData[fields.text] : (fieldData[fields.text] || '');\n value = fieldData[fields.value];\n }\n var elementID;\n if (!isNullOrUndefined(dataSource) && !isNullOrUndefined(fieldData[fields.id])\n && fieldData[fields.id] !== '') {\n elementID = id;\n }\n else {\n elementID = id + '-' + index;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n id: elementID, attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n // eslint-disable-next-line no-prototype-builtins\n if (dataSource && fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled].toString() === 'false') {\n li.classList.add(cssClass.disabled);\n }\n if (grpLI) {\n li.innerText = text;\n }\n else {\n li.setAttribute('data-value', isNullOrUndefined(value) ? 'null' : value);\n li.setAttribute('role', 'option');\n // eslint-disable-next-line no-prototype-builtins\n if (dataSource && fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n if (innerElements.length && !curOpt.itemNavigable) {\n append(innerElements, li);\n }\n if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&\n fieldData[fields.urlAttributes].href))) {\n li.appendChild(anchorTag(createElement, dataSource, fields, text, innerElements, curOpt.itemNavigable));\n }\n else {\n if (innerElements.length && curOpt.itemNavigable) {\n append(innerElements, li);\n }\n li.appendChild(document.createTextNode(text));\n }\n }\n return li;\n }\n function getModuleClass(moduleName) {\n var moduleClass;\n // eslint-disable-next-line\n return moduleClass = {\n li: \"e-\" + moduleName + \"-item\",\n ul: \"e-\" + moduleName + \"-parent e-ul\",\n group: \"e-\" + moduleName + \"-group-item\",\n icon: \"e-\" + moduleName + \"-icon\",\n text: \"e-\" + moduleName + \"-text\",\n check: \"e-\" + moduleName + \"-check\",\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: \"e-\" + moduleName + \"-url\",\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: \"e-\" + moduleName + \"-img\",\n iconWrapper: 'e-icon-wrapper',\n anchorWrap: 'e-anchor-wrap',\n navigable: 'e-navigable'\n };\n }\n function anchorTag(createElement, dataSource, fields, text, innerElements, isFullNavigation) {\n var fieldData = getFieldValues(dataSource, fields);\n var attr = { href: fieldData[fields.url] };\n // eslint-disable-next-line no-prototype-builtins\n if (fieldData.hasOwnProperty(fields.urlAttributes) && fieldData[fields.urlAttributes]) {\n merge(attr, fieldData[fields.urlAttributes]);\n attr.href = fieldData[fields.url] ? fieldData[fields.url] :\n fieldData[fields.urlAttributes].href;\n }\n var anchorTag;\n if (!isFullNavigation) {\n anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url, innerHTML: text });\n }\n else {\n anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url });\n var anchorWrapper = createElement('div', { className: cssClass.anchorWrap });\n if (innerElements && innerElements.length) {\n append(innerElements, anchorWrapper);\n }\n anchorWrapper.appendChild(document.createTextNode(text));\n append([anchorWrapper], anchorTag);\n }\n setAttribute(anchorTag, attr);\n return anchorTag;\n }\n // tslint:disable-next-line\n /* tslint:disable:align */\n function generateLI(createElement, item, fieldData, \n // eslint-disable-next-line\n fields, className, options, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var uID;\n var grpLI;\n var dataSource;\n if (typeof item !== 'string' && typeof item !== 'number') {\n dataSource = item;\n text = fieldData[fields.text] || '';\n // tslint:disable-next-line\n uID = (isNullOrUndefined(fieldData['_id'])) ? fieldData[fields.id] : fieldData['_id'];\n // eslint-disable-next-line no-prototype-builtins\n grpLI = (item.hasOwnProperty('isHeader') && item.isHeader)\n ? true : false;\n }\n if (options && options.enableHtmlSanitizer) {\n // eslint-disable-next-line no-self-assign\n text = text;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n if (!isNullOrUndefined(uID) === true) {\n li.setAttribute('data-uid', uID);\n }\n else {\n li.setAttribute('data-uid', generateId());\n }\n if (grpLI && options && options.groupTemplate) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n var compiledString = compileTemplate(options.groupTemplate);\n if (componentInstance && componentInstance.getModuleName() !== \"listview\") {\n // eslint-disable-next-line\n var compiledElement = compiledString(item, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(item, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate), li);\n }\n }\n else if (!grpLI && options && options.template) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n var compiledString = compileTemplate(options.template);\n if (componentInstance && componentInstance.getModuleName() !== 'listview') {\n // eslint-disable-next-line\n var compiledElement = compiledString(item, componentInstance, 'template', curOpt.templateID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(item, componentInstance, 'template', curOpt.templateID, !!curOpt.isStringTemplate), li);\n }\n }\n else {\n var innerDiv = createElement('div', {\n className: cssClass.textContent,\n attrs: (ariaAttributes.wrapperRole !== '' ? { role: ariaAttributes.wrapperRole } : {})\n });\n if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&\n fieldData[fields.urlAttributes].href))) {\n innerDiv.appendChild(anchorTag(createElement, dataSource, fields, text, null, curOpt.itemNavigable));\n }\n else {\n var element = createElement('span', {\n className: cssClass.text,\n attrs: (ariaAttributes.itemText !== '' ? { role: ariaAttributes.itemText } : {})\n });\n if (options && options.enableHtmlSanitizer) {\n element.innerText = SanitizeHtmlHelper.sanitize(text);\n }\n else {\n element.innerHTML = text;\n }\n innerDiv.appendChild(element);\n }\n li.appendChild(innerDiv);\n }\n return li;\n }\n /**\n * Returns UL element based on the given LI element.\n *\n * @param {HTMLElement[]} liElement - Specifies array of LI element.\n *\n * @param {string} className? - Specifies class name that need to be added in UL element.\n *\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateUL(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n cssClass = getModuleClass(curOpt.moduleName);\n var ulElement = createElement('ul', {\n className: cssClass.ul + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.listRole !== '' ? { role: ariaAttributes.listRole } : {})\n });\n append(liElement, ulElement);\n return ulElement;\n }\n ListBase.generateUL = generateUL;\n /**\n * Returns LI element with additional DIV tag based on the given LI element.\n *\n * @param {liElement} liElement - Specifies LI element.\n *\n * @param {string} className? - Specifies class name that need to be added in created DIV element.\n *\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateIcon(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n // eslint-disable-next-line @typescript-eslint/ban-types\n var expandElement = curOpt.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', {\n className: 'e-icons ' + curOpt.expandIconClass + ' ' +\n (isNullOrUndefined(className) ? '' : className)\n })], liElement.querySelector('.' + cssClass.textContent));\n return liElement;\n }\n ListBase.generateIcon = generateIcon;\n})(ListBase || (ListBase = {}));\n/**\n * Used to get dataSource item from complex data using fields.\n *\n * @param {Object} dataSource - Specifies an JSON or String data.\n *\n * @param {FieldsMapping} fields - Fields that are mapped from the dataSource.\n */\nexport function getFieldValues(dataItem, fields) {\n var fieldData = {};\n if (isNullOrUndefined(dataItem) || typeof (dataItem) === 'string' || typeof (dataItem) === 'number'\n || !isNullOrUndefined(dataItem.isHeader)) {\n return dataItem;\n }\n else {\n for (var _i = 0, _a = Object.keys(fields); _i < _a.length; _i++) {\n var field = _a[_i];\n var dataField = fields[\"\" + field];\n var value = !isNullOrUndefined(dataField) &&\n typeof (dataField) === 'string' ? getValue(dataField, dataItem) : undefined;\n if (!isNullOrUndefined(value)) {\n fieldData[\"\" + dataField] = value;\n }\n }\n }\n return fieldData;\n}\nfunction compileTemplate(template) {\n if (template) {\n try {\n if (typeof template !== 'function' && document.querySelector(template)) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (e) {\n return compile(template);\n }\n }\n return undefined;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\nimport { Touch, Component, EventHandler, selectAll, getUniqueID, removeClass } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Property, Browser, detach, createElement as buildTag } from '@syncfusion/ej2-base';\nimport { classList, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar CLS_ROOT = 'e-vscroll';\nvar CLS_RTL = 'e-rtl';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_VSCROLLBAR = 'e-vscroll-bar';\nvar CLS_VSCROLLCON = 'e-vscroll-content';\nvar CLS_NAVARROW = 'e-nav-arrow';\nvar CLS_NAVUPARROW = 'e-nav-up-arrow';\nvar CLS_NAVDOWNARROW = 'e-nav-down-arrow';\nvar CLS_VSCROLLNAV = 'e-scroll-nav';\nvar CLS_VSCROLLNAVUP = 'e-scroll-up-nav';\nvar CLS_VSCROLLNAVDOWN = 'e-scroll-down-nav';\nvar CLS_DEVICE = 'e-scroll-device';\nvar CLS_OVERLAY = 'e-scroll-overlay';\nvar CLS_UPOVERLAY = 'e-scroll-up-overlay';\nvar CLS_DOWNOVERLAY = 'e-scroll-down-overlay';\nvar OVERLAY_MAXWID = 40;\n/**\n * VScroll module is introduces vertical scroller when content exceeds the current viewing area.\n * It can be useful for the components like Toolbar, Tab which needs vertical scrolling alone.\n * Hidden content can be view by touch moving or icon click.\n * ```html\n *
\n * \n * ```\n */\nvar VScroll = /** @class */ (function (_super) {\n __extends(VScroll, _super);\n /**\n * Initializes a new instance of the VScroll class.\n *\n * @param {VScrollModel} options - Specifies VScroll model properties as options.\n * @param {string | HTMLElement} element - Specifies the element for which vertical scrolling applies.\n */\n function VScroll(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler\n *\n * @private\n * @returns {void}\n */\n VScroll.prototype.preRender = function () {\n this.browser = Browser.info.name;\n this.browserCheck = this.browser === 'mozilla';\n this.isDevice = Browser.isDevice;\n this.customStep = true;\n var ele = this.element;\n this.ieCheck = this.browser === 'edge' || this.browser === 'msie';\n this.initialize();\n if (ele.id === '') {\n ele.id = getUniqueID('vscroll');\n this.uniqueId = true;\n }\n ele.style.display = 'block';\n if (this.enableRtl) {\n ele.classList.add(CLS_RTL);\n }\n };\n /**\n * To Initialize the vertical scroll rendering\n *\n * @private\n * @returns {void}\n */\n VScroll.prototype.render = function () {\n this.touchModule = new Touch(this.element, { scroll: this.touchHandler.bind(this), swipe: this.swipeHandler.bind(this) });\n EventHandler.add(this.scrollEle, 'scroll', this.scrollEventHandler, this);\n if (!this.isDevice) {\n this.createNavIcon(this.element);\n }\n else {\n this.element.classList.add(CLS_DEVICE);\n this.createOverlayElement(this.element);\n }\n this.setScrollState();\n EventHandler.add(this.element, 'wheel', this.wheelEventHandler, this);\n };\n VScroll.prototype.setScrollState = function () {\n if (isNullOrUndefined(this.scrollStep) || this.scrollStep < 0) {\n this.scrollStep = this.scrollEle.offsetHeight;\n this.customStep = false;\n }\n else {\n this.customStep = true;\n }\n };\n VScroll.prototype.initialize = function () {\n var scrollCnt = buildTag('div', { className: CLS_VSCROLLCON });\n var scrollBar = buildTag('div', { className: CLS_VSCROLLBAR });\n scrollBar.setAttribute('tabindex', '-1');\n var ele = this.element;\n var innerEle = [].slice.call(ele.children);\n for (var _i = 0, innerEle_1 = innerEle; _i < innerEle_1.length; _i++) {\n var ele_1 = innerEle_1[_i];\n scrollCnt.appendChild(ele_1);\n }\n scrollBar.appendChild(scrollCnt);\n ele.appendChild(scrollBar);\n scrollBar.style.overflow = 'hidden';\n this.scrollEle = scrollBar;\n this.scrollItems = scrollCnt;\n };\n VScroll.prototype.getPersistData = function () {\n var keyEntity = ['scrollStep'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Returns the current module name.\n *\n * @returns {string} - It returns the current module name.\n * @private\n */\n VScroll.prototype.getModuleName = function () {\n return 'vScroll';\n };\n /**\n * Removes the control from the DOM and also removes all its related events.\n *\n * @returns {void}\n */\n VScroll.prototype.destroy = function () {\n var el = this.element;\n el.style.display = '';\n removeClass([this.element], [CLS_ROOT, CLS_DEVICE, CLS_RTL]);\n var navs = selectAll('.e-' + el.id + '_nav.' + CLS_VSCROLLNAV, el);\n var overlays = selectAll('.' + CLS_OVERLAY, el);\n [].slice.call(overlays).forEach(function (ele) {\n detach(ele);\n });\n for (var _i = 0, _a = [].slice.call(this.scrollItems.children); _i < _a.length; _i++) {\n var elem = _a[_i];\n el.appendChild(elem);\n }\n if (this.uniqueId) {\n this.element.removeAttribute('id');\n }\n detach(this.scrollEle);\n if (navs.length > 0) {\n detach(navs[0]);\n if (!isNullOrUndefined(navs[1])) {\n detach(navs[1]);\n }\n }\n EventHandler.remove(this.scrollEle, 'scroll', this.scrollEventHandler);\n this.touchModule.destroy();\n this.touchModule = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Specifies the value to disable/enable the VScroll component.\n * When set to `true` , the component will be disabled.\n *\n * @param {boolean} value - Based on this Boolean value, VScroll will be enabled (false) or disabled (true).\n * @returns {void}.\n */\n VScroll.prototype.disable = function (value) {\n var navEle = selectAll('.e-scroll-nav:not(.' + CLS_DISABLE + ')', this.element);\n if (value) {\n this.element.classList.add(CLS_DISABLE);\n }\n else {\n this.element.classList.remove(CLS_DISABLE);\n }\n [].slice.call(navEle).forEach(function (el) {\n el.setAttribute('tabindex', !value ? '0' : '-1');\n });\n };\n VScroll.prototype.createOverlayElement = function (element) {\n var id = element.id.concat('_nav');\n var downOverlayEle = buildTag('div', { className: CLS_OVERLAY + ' ' + CLS_DOWNOVERLAY });\n var clsDown = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVDOWN);\n var downEle = buildTag('div', { id: id.concat('down'), className: clsDown });\n var navItem = buildTag('div', { className: CLS_NAVDOWNARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n downEle.appendChild(navItem);\n var upEle = buildTag('div', { className: CLS_OVERLAY + ' ' + CLS_UPOVERLAY });\n if (this.ieCheck) {\n downEle.classList.add('e-ie-align');\n }\n element.appendChild(downOverlayEle);\n element.appendChild(downEle);\n element.insertBefore(upEle, element.firstChild);\n this.eventBinding([downEle]);\n };\n VScroll.prototype.createNavIcon = function (element) {\n var id = element.id.concat('_nav');\n var clsDown = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVDOWN);\n var nav = buildTag('div', { id: id.concat('_down'), className: clsDown });\n nav.setAttribute('aria-disabled', 'false');\n var navItem = buildTag('div', { className: CLS_NAVDOWNARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n var clsUp = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVUP);\n var navElement = buildTag('div', { id: id.concat('_up'), className: clsUp + ' ' + CLS_DISABLE });\n navElement.setAttribute('aria-disabled', 'true');\n var navUpItem = buildTag('div', { className: CLS_NAVUPARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n navElement.appendChild(navUpItem);\n nav.appendChild(navItem);\n nav.setAttribute('tabindex', '0');\n element.appendChild(nav);\n element.insertBefore(navElement, element.firstChild);\n if (this.ieCheck) {\n nav.classList.add('e-ie-align');\n navElement.classList.add('e-ie-align');\n }\n this.eventBinding([nav, navElement]);\n };\n VScroll.prototype.onKeyPress = function (ev) {\n var _this = this;\n if (ev.key === 'Enter') {\n var timeoutFun_1 = function () {\n _this.keyTimeout = true;\n _this.eleScrolling(10, ev.target, true);\n };\n this.keyTimer = window.setTimeout(function () {\n timeoutFun_1();\n }, 100);\n }\n };\n VScroll.prototype.onKeyUp = function (ev) {\n if (ev.key !== 'Enter') {\n return;\n }\n if (this.keyTimeout) {\n this.keyTimeout = false;\n }\n else {\n ev.target.click();\n }\n clearTimeout(this.keyTimer);\n };\n VScroll.prototype.eventBinding = function (element) {\n var _this = this;\n [].slice.call(element).forEach(function (ele) {\n new Touch(ele, { tapHold: _this.tabHoldHandler.bind(_this), tapHoldThreshold: 500 });\n ele.addEventListener('keydown', _this.onKeyPress.bind(_this));\n ele.addEventListener('keyup', _this.onKeyUp.bind(_this));\n ele.addEventListener('mouseup', _this.repeatScroll.bind(_this));\n ele.addEventListener('touchend', _this.repeatScroll.bind(_this));\n ele.addEventListener('contextmenu', function (e) {\n e.preventDefault();\n });\n EventHandler.add(ele, 'click', _this.clickEventHandler, _this);\n });\n };\n VScroll.prototype.repeatScroll = function () {\n clearInterval(this.timeout);\n };\n VScroll.prototype.tabHoldHandler = function (ev) {\n var _this = this;\n var trgt = ev.originalEvent.target;\n trgt = this.contains(trgt, CLS_VSCROLLNAV) ? trgt.firstElementChild : trgt;\n var scrollDistance = 10;\n var timeoutFun = function () {\n _this.eleScrolling(scrollDistance, trgt, true);\n };\n this.timeout = window.setInterval(function () {\n timeoutFun();\n }, 50);\n };\n VScroll.prototype.contains = function (element, className) {\n return element.classList.contains(className);\n };\n VScroll.prototype.eleScrolling = function (scrollDis, trgt, isContinuous) {\n var classList = trgt.classList;\n if (classList.contains(CLS_VSCROLLNAV)) {\n classList = trgt.querySelector('.' + CLS_NAVARROW).classList;\n }\n if (classList.contains(CLS_NAVDOWNARROW)) {\n this.frameScrollRequest(scrollDis, 'add', isContinuous);\n }\n else if (classList.contains(CLS_NAVUPARROW)) {\n this.frameScrollRequest(scrollDis, '', isContinuous);\n }\n };\n VScroll.prototype.clickEventHandler = function (event) {\n this.eleScrolling(this.scrollStep, event.target, false);\n };\n VScroll.prototype.wheelEventHandler = function (e) {\n e.preventDefault();\n this.frameScrollRequest(this.scrollStep, (e.deltaY > 0 ? 'add' : ''), false);\n };\n VScroll.prototype.swipeHandler = function (e) {\n var swipeElement = this.scrollEle;\n var distance;\n if (e.velocity <= 1) {\n distance = e.distanceY / (e.velocity * 10);\n }\n else {\n distance = e.distanceY / e.velocity;\n }\n var start = 0.5;\n var animate = function () {\n var step = Math.sin(start);\n if (step <= 0) {\n window.cancelAnimationFrame(step);\n }\n else {\n if (e.swipeDirection === 'Up') {\n swipeElement.scrollTop += distance * step;\n }\n else if (e.swipeDirection === 'Down') {\n swipeElement.scrollTop -= distance * step;\n }\n start -= 0.02;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n VScroll.prototype.scrollUpdating = function (scrollVal, action) {\n if (action === 'add') {\n this.scrollEle.scrollTop += scrollVal;\n }\n else {\n this.scrollEle.scrollTop -= scrollVal;\n }\n };\n VScroll.prototype.frameScrollRequest = function (scrollValue, action, isContinuous) {\n var _this = this;\n var step = 10;\n if (isContinuous) {\n this.scrollUpdating(scrollValue, action);\n return;\n }\n if (!this.customStep) {\n [].slice.call(selectAll('.' + CLS_OVERLAY, this.element)).forEach(function (el) {\n scrollValue -= el.offsetHeight;\n });\n }\n var animate = function () {\n if (scrollValue < step) {\n window.cancelAnimationFrame(step);\n }\n else {\n _this.scrollUpdating(step, action);\n scrollValue -= step;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n VScroll.prototype.touchHandler = function (e) {\n var el = this.scrollEle;\n var distance = e.distanceY;\n if (e.scrollDirection === 'Up') {\n el.scrollTop = el.scrollTop + distance;\n }\n else if (e.scrollDirection === 'Down') {\n el.scrollTop = el.scrollTop - distance;\n }\n };\n VScroll.prototype.arrowDisabling = function (addDisableCls, removeDisableCls) {\n if (this.isDevice) {\n var arrowEle = isNullOrUndefined(addDisableCls) ? removeDisableCls : addDisableCls;\n var arrowIcon = arrowEle.querySelector('.' + CLS_NAVARROW);\n if (isNullOrUndefined(addDisableCls)) {\n classList(arrowIcon, [CLS_NAVDOWNARROW], [CLS_NAVUPARROW]);\n }\n else {\n classList(arrowIcon, [CLS_NAVUPARROW], [CLS_NAVDOWNARROW]);\n }\n }\n else {\n addDisableCls.classList.add(CLS_DISABLE);\n addDisableCls.setAttribute('aria-disabled', 'true');\n addDisableCls.removeAttribute('tabindex');\n removeDisableCls.classList.remove(CLS_DISABLE);\n removeDisableCls.setAttribute('aria-disabled', 'false');\n removeDisableCls.setAttribute('tabindex', '0');\n }\n this.repeatScroll();\n };\n VScroll.prototype.scrollEventHandler = function (e) {\n var target = e.target;\n var height = target.offsetHeight;\n var navUpEle = this.element.querySelector('.' + CLS_VSCROLLNAVUP);\n var navDownEle = this.element.querySelector('.' + CLS_VSCROLLNAVDOWN);\n var upOverlay = this.element.querySelector('.' + CLS_UPOVERLAY);\n var downOverlay = this.element.querySelector('.' + CLS_DOWNOVERLAY);\n var scrollTop = target.scrollTop;\n if (scrollTop <= 0) {\n scrollTop = -scrollTop;\n }\n if (this.isDevice) {\n if (scrollTop < OVERLAY_MAXWID) {\n upOverlay.style.height = scrollTop + 'px';\n }\n else {\n upOverlay.style.height = '40px';\n }\n if ((target.scrollHeight - Math.ceil(height + scrollTop)) < OVERLAY_MAXWID) {\n downOverlay.style.height = (target.scrollHeight - Math.ceil(height + scrollTop)) + 'px';\n }\n else {\n downOverlay.style.height = '40px';\n }\n }\n if (scrollTop === 0) {\n this.arrowDisabling(navUpEle, navDownEle);\n }\n else if (Math.ceil(height + scrollTop + .1) >= target.scrollHeight) {\n this.arrowDisabling(navDownEle, navUpEle);\n }\n else {\n var disEle = this.element.querySelector('.' + CLS_VSCROLLNAV + '.' + CLS_DISABLE);\n if (disEle) {\n disEle.classList.remove(CLS_DISABLE);\n disEle.setAttribute('aria-disabled', 'false');\n disEle.setAttribute('tabindex', '0');\n }\n }\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of property that changed.\n *\n * @param {VScrollModel} newProp - It contains the new value of data.\n * @param {VScrollModel} oldProp - It contains the old value of data.\n * @returns {void}\n * @private\n */\n VScroll.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'scrollStep':\n this.setScrollState();\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n this.element.classList.add(CLS_RTL);\n }\n else {\n this.element.classList.remove(CLS_RTL);\n }\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], VScroll.prototype, \"scrollStep\", void 0);\n VScroll = __decorate([\n NotifyPropertyChanges\n ], VScroll);\n return VScroll;\n}(Component));\nexport { VScroll };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\nimport { selectAll, select, createElement, Base, detach } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Event, onIntlChange } from '@syncfusion/ej2-base';\nimport { Internationalization, L10n } from '@syncfusion/ej2-base';\n/**\n * global declarations\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport var regex = {\n /* eslint-disable no-useless-escape */\n EMAIL: new RegExp('^[A-Za-z0-9._%+-]{1,}@[A-Za-z0-9._%+-]{1,}([.]{1}[a-zA-Z0-9]{2,}' +\n '|[.]{1}[a-zA-Z0-9]{2,4}[.]{1}[a-zA-Z0-9]{2,4})$'),\n /* eslint-disable-next-line security/detect-unsafe-regex */\n URL: /^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$/m,\n DATE_ISO: new RegExp('^([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$'),\n DIGITS: new RegExp('^[0-9]*$'),\n PHONE: new RegExp('^[+]?[0-9]{9,13}$'),\n CREDITCARD: new RegExp('^\\\\d{13,16}$')\n /* eslint-enable no-useless-escape */\n};\n/**\n * ErrorOption values\n *\n * @private\n */\nexport var ErrorOption;\n(function (ErrorOption) {\n /**\n * Defines the error message.\n */\n ErrorOption[ErrorOption[\"Message\"] = 0] = \"Message\";\n /**\n * Defines the error element type.\n */\n ErrorOption[ErrorOption[\"Label\"] = 1] = \"Label\";\n})(ErrorOption || (ErrorOption = {}));\n/**\n * FormValidator class enables you to validate the form fields based on your defined rules\n * ```html\n *
\n * \n * \n *
\n * \n * ```\n */\nvar FormValidator = /** @class */ (function (_super) {\n __extends(FormValidator, _super);\n /**\n * Initializes the FormValidator.\n *\n * @param {string | HTMLFormElement} element - Specifies the element to render as component.\n * @param {FormValidatorModel} options - Specifies the FormValidator model.\n * @private\n */\n function FormValidator(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.validated = [];\n _this.errorRules = [];\n _this.allowSubmit = false;\n _this.required = 'required';\n _this.infoElement = null;\n _this.inputElement = null;\n _this.selectQuery = 'input:not([type=reset]):not([type=button]), select, textarea';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _this.localyMessage = {};\n /**\n * Specifies the default messages for validation rules.\n *\n * @default { List of validation message }\n */\n _this.defaultMessages = {\n required: 'This field is required.',\n email: 'Please enter a valid email address.',\n url: 'Please enter a valid URL.',\n date: 'Please enter a valid date.',\n dateIso: 'Please enter a valid date ( ISO ).',\n creditcard: 'Please enter valid card number',\n number: 'Please enter a valid number.',\n digits: 'Please enter only digits.',\n maxLength: 'Please enter no more than {0} characters.',\n minLength: 'Please enter at least {0} characters.',\n rangeLength: 'Please enter a value between {0} and {1} characters long.',\n range: 'Please enter a value between {0} and {1}.',\n max: 'Please enter a value less than or equal to {0}.',\n min: 'Please enter a value greater than or equal to {0}.',\n regex: 'Please enter a correct value.',\n tel: 'Please enter a valid phone number.',\n pattern: 'Please enter a correct pattern value.',\n equalTo: 'Please enter the valid match text'\n };\n if (typeof _this.rules === 'undefined') {\n _this.rules = {};\n }\n _this.l10n = new L10n('formValidator', _this.defaultMessages, _this.locale);\n if (_this.locale) {\n _this.localeFunc();\n }\n onIntlChange.on('notifyExternalChange', _this.afterLocalization, _this);\n element = typeof element === 'string' ? select(element, document) : element;\n // Set novalidate to prevent default HTML5 form validation\n if (_this.element != null) {\n _this.element.setAttribute('novalidate', '');\n _this.inputElements = selectAll(_this.selectQuery, _this.element);\n _this.createHTML5Rules();\n _this.wireEvents();\n }\n else {\n return undefined;\n }\n return _this;\n }\n FormValidator_1 = FormValidator;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n /**\n * Add validation rules to the corresponding input element based on `name` attribute.\n *\n * @param {string} name `name` of form field.\n * @param {Object} rules Validation rules for the corresponding element.\n * @returns {void}\n */\n FormValidator.prototype.addRules = function (name, rules) {\n if (name) {\n // eslint-disable-next-line no-prototype-builtins\n if (this.rules.hasOwnProperty(name)) {\n extend(this.rules[\"\" + name], rules, {});\n }\n else {\n this.rules[\"\" + name] = rules;\n }\n }\n };\n /**\n * Remove validation to the corresponding field based on name attribute.\n * When no parameter is passed, remove all the validations in the form.\n *\n * @param {string} name Input name attribute value.\n * @param {string[]} rules List of validation rules need to be remove from the corresponding element.\n * @returns {void}\n */\n FormValidator.prototype.removeRules = function (name, rules) {\n if (!name && !rules) {\n this.rules = {};\n }\n else if (this.rules[\"\" + name] && !rules) {\n delete this.rules[\"\" + name];\n }\n else if (!isNullOrUndefined(this.rules[\"\" + name] && rules)) {\n for (var i = 0; i < rules.length; i++) {\n delete this.rules[\"\" + name][rules[parseInt(i.toString())]];\n }\n }\n else {\n return;\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Validate the current form values using defined rules.\n * Returns `true` when the form is valid otherwise `false`\n *\n * @param {string} selected - Optional parameter to validate specified element.\n * @returns {boolean}\n */\n FormValidator.prototype.validate = function (selected) {\n var rules = Object.keys(this.rules);\n if (selected && rules.length) {\n this.validateRules(selected);\n //filter the selected element it don't have any valid input element\n return rules.indexOf(selected) !== -1 && this.errorRules.filter(function (data) {\n return data.name === selected;\n }).length === 0;\n }\n else {\n this.errorRules = [];\n for (var _i = 0, rules_1 = rules; _i < rules_1.length; _i++) {\n var name_1 = rules_1[_i];\n this.validateRules(name_1);\n }\n return this.errorRules.length === 0;\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Reset the value of all the fields in form.\n *\n * @returns {void}\n */\n FormValidator.prototype.reset = function () {\n this.element.reset();\n this.clearForm();\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Get input element by name.\n *\n * @param {string} name - Input element name attribute value.\n * @returns {HTMLInputElement}\n */\n FormValidator.prototype.getInputElement = function (name) {\n this.inputElement = (select('[name=\"' + name + '\"]', this.element));\n return this.inputElement;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Destroy the form validator object and error elements.\n *\n * @returns {void}\n */\n FormValidator.prototype.destroy = function () {\n this.reset();\n this.unwireEvents();\n this.rules = {};\n var elements = selectAll('.' + this.errorClass + ', .' + this.validClass, this.element);\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element = elements_1[_i];\n detach(element);\n }\n _super.prototype.destroy.call(this);\n onIntlChange.off('notifyExternalChange', this.afterLocalization);\n };\n /**\n * @param {FormValidatorModel} newProp - Returns the dynamic property value of the component.\n * @param {FormValidatorModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n FormValidator.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'locale':\n this.localeFunc();\n break;\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n FormValidator.prototype.localeFunc = function () {\n for (var _i = 0, _a = Object.keys(this.defaultMessages); _i < _a.length; _i++) {\n var key = _a[_i];\n this.l10n.setLocale(this.locale);\n var value = this.l10n.getConstant(key);\n this.localyMessage[\"\" + key] = value;\n }\n };\n /**\n * @private\n * @returns {string} - Returns the component name.\n */\n FormValidator.prototype.getModuleName = function () {\n return 'formValidator';\n };\n /**\n * @param {any} args - Specifies the culture name.\n * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n FormValidator.prototype.afterLocalization = function (args) {\n this.locale = args.locale;\n this.localeFunc();\n };\n /**\n * Allows you to refresh the form validator base events to the elements inside the form.\n *\n * @returns {void}\n */\n FormValidator.prototype.refresh = function () {\n this.unwireEvents();\n this.inputElements = selectAll(this.selectQuery, this.element);\n this.wireEvents();\n };\n FormValidator.prototype.clearForm = function () {\n this.errorRules = [];\n this.validated = [];\n var elements = selectAll(this.selectQuery, this.element);\n for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n var element = elements_2[_i];\n var input = element;\n input.removeAttribute('aria-invalid');\n var inputParent = input.parentElement;\n var grandParent = inputParent.parentElement;\n if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper')) {\n inputParent.classList.remove(this.errorClass);\n }\n else if ((grandParent != null) && (grandParent.classList.contains('e-control-wrapper') || grandParent.classList.contains('e-wrapper'))) {\n grandParent.classList.remove(this.errorClass);\n }\n else {\n input.classList.remove(this.errorClass);\n }\n if (input.name.length > 0) {\n this.getInputElement(input.name);\n this.getErrorElement(input.name);\n this.hideMessage(input.name);\n }\n if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper')) {\n inputParent.classList.remove(this.validClass);\n }\n else if ((grandParent != null) && (grandParent.classList.contains('e-control-wrapper') || grandParent.classList.contains('e-wrapper'))) {\n grandParent.classList.remove(this.validClass);\n }\n else {\n input.classList.remove(this.validClass);\n }\n }\n };\n FormValidator.prototype.createHTML5Rules = function () {\n var defRules = ['required', 'validateHidden', 'regex', 'rangeLength', 'maxLength', 'minLength', 'dateIso', 'digits',\n 'pattern', 'data-val-required', 'type', 'data-validation', 'min', 'max', 'range', 'equalTo', 'data-val-minlength-min',\n 'data-val-equalto-other', 'data-val-maxlength-max', 'data-val-range-min', 'data-val-regex-pattern', 'data-val-length-max',\n 'data-val-creditcard', 'data-val-phone'];\n var acceptedTypes = ['hidden', 'email', 'url', 'date', 'number', 'tel'];\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n // Default attribute rules\n var allRule = {};\n for (var _b = 0, defRules_1 = defRules; _b < defRules_1.length; _b++) {\n var rule = defRules_1[_b];\n if (input.getAttribute(rule) !== null) {\n switch (rule) {\n case 'required':\n this.defRule(input, allRule, rule, input.required);\n break;\n case 'data-validation':\n rule = input.getAttribute(rule);\n this.defRule(input, allRule, rule, true);\n break;\n case 'type':\n if (acceptedTypes.indexOf(input.type) !== -1) {\n this.defRule(input, allRule, input.type, true);\n }\n break;\n case 'rangeLength':\n case 'range':\n this.defRule(input, allRule, rule, JSON.parse(input.getAttribute(rule)));\n break;\n case 'equalTo':\n {\n var id = input.getAttribute(rule);\n this.defRule(input, allRule, rule, id);\n }\n break;\n default:\n if (input.getAttribute('data-val') === 'true') {\n this.annotationRule(input, allRule, rule, input.getAttribute(rule));\n }\n else {\n this.defRule(input, allRule, rule, input.getAttribute(rule));\n }\n }\n }\n }\n //adding pattern type validation\n if (Object.keys(allRule).length !== 0) {\n this.addRules(input.name, allRule);\n }\n }\n };\n FormValidator.prototype.annotationRule = function (input, ruleCon, ruleName, value) {\n var annotationRule = ruleName.split('-');\n var rulesList = ['required', 'creditcard', 'phone', 'maxlength', 'minlength', 'range', 'regex', 'equalto'];\n var ruleFirstName = annotationRule[annotationRule.length - 1];\n var ruleSecondName = annotationRule[annotationRule.length - 2];\n if (rulesList.indexOf(ruleFirstName) !== -1) {\n switch (ruleFirstName) {\n case 'required':\n this.defRule(input, ruleCon, 'required', value);\n break;\n case 'creditcard':\n this.defRule(input, ruleCon, 'creditcard', value);\n break;\n case 'phone':\n this.defRule(input, ruleCon, 'tel', value);\n break;\n }\n }\n else if (rulesList.indexOf(ruleSecondName) !== -1) {\n switch (ruleSecondName) {\n case 'maxlength':\n this.defRule(input, ruleCon, 'maxLength', value);\n break;\n case 'minlength':\n this.defRule(input, ruleCon, 'minLength', value);\n break;\n case 'range':\n {\n var minvalue = input.getAttribute('data-val-range-min');\n var maxvalue = input.getAttribute('data-val-range-max');\n this.defRule(input, ruleCon, 'range', [minvalue, maxvalue]);\n }\n break;\n case 'equalto':\n {\n var id = input.getAttribute(ruleName).split('.');\n this.defRule(input, ruleCon, 'equalTo', id[id.length - 1]);\n }\n break;\n case 'regex':\n this.defRule(input, ruleCon, 'regex', value);\n break;\n }\n }\n };\n FormValidator.prototype.defRule = function (input, ruleCon, ruleName, value) {\n var message = input.getAttribute('data-' + ruleName + '-message');\n var annotationMessage = input.getAttribute('data-val-' + ruleName);\n var customMessage;\n if (this.rules[input.name] && ruleName !== 'validateHidden' && ruleName !== 'hidden') {\n this.getInputElement(input.name);\n customMessage = this.getErrorMessage(this.rules[input.name][\"\" + ruleName], ruleName);\n }\n if (message) {\n value = [value, message];\n }\n else if (annotationMessage) {\n value = [value, annotationMessage];\n }\n else if (customMessage) {\n value = [value, customMessage];\n }\n ruleCon[\"\" + ruleName] = value;\n };\n // Wire events to the form elements\n FormValidator.prototype.wireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n if (FormValidator_1.isCheckable(input)) {\n EventHandler.add(input, 'click', this.clickHandler, this);\n }\n else if (input.tagName === 'SELECT') {\n EventHandler.add(input, 'change', this.changeHandler, this);\n }\n else {\n EventHandler.add(input, 'focusout', this.focusOutHandler, this);\n EventHandler.add(input, 'keyup', this.keyUpHandler, this);\n }\n }\n EventHandler.add(this.element, 'submit', this.submitHandler, this);\n EventHandler.add(this.element, 'reset', this.resetHandler, this);\n };\n // UnWire events to the form elements\n FormValidator.prototype.unwireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n EventHandler.clearEvents(input);\n }\n EventHandler.remove(this.element, 'submit', this.submitHandler);\n EventHandler.remove(this.element, 'reset', this.resetHandler);\n };\n // Handle input element focusout event\n FormValidator.prototype.focusOutHandler = function (e) {\n this.trigger('focusout', e);\n //FormValidator.triggerCallback(this.focusout, e);\n var element = e.target;\n if (this.rules[element.name]) {\n if (this.rules[element.name][this.required] || element.value.length > 0) {\n this.validate(element.name);\n }\n else if (this.validated.indexOf(element.name) === -1) {\n this.validated.push(element.name);\n }\n }\n };\n // Handle input element keyup event\n FormValidator.prototype.keyUpHandler = function (e) {\n this.trigger('keyup', e);\n var element = e.target;\n // List of keys need to prevent while validation\n var excludeKeys = [16, 17, 18, 20, 35, 36, 37, 38, 39, 40, 45, 144, 225];\n if (e.which === 9 && (!this.rules[element.name] || (this.rules[element.name] && !this.rules[element.name][this.required]))) {\n return;\n }\n if (this.validated.indexOf(element.name) !== -1 && this.rules[element.name] && excludeKeys.indexOf(e.which) === -1) {\n this.validate(element.name);\n }\n };\n // Handle input click event\n FormValidator.prototype.clickHandler = function (e) {\n this.trigger('click', e);\n var element = e.target;\n // If element type is not submit allow validation\n if (element.type !== 'submit') {\n this.validate(element.name);\n }\n else if (element.getAttribute('formnovalidate') !== null) {\n // Prevent form validation, if submit button has formnovalidate attribute\n this.allowSubmit = true;\n }\n };\n // Handle input change event\n FormValidator.prototype.changeHandler = function (e) {\n this.trigger('change', e);\n var element = e.target;\n this.validate(element.name);\n };\n // Handle form submit event\n FormValidator.prototype.submitHandler = function (e) {\n this.trigger('submit', e);\n //FormValidator.triggerCallback(this.submit, e);\n // Prevent form submit if validation failed\n if (!this.allowSubmit && !this.validate()) {\n e.preventDefault();\n }\n else {\n this.allowSubmit = false;\n }\n };\n // Handle form reset\n FormValidator.prototype.resetHandler = function () {\n this.clearForm();\n };\n // Validate each rule based on input element name\n FormValidator.prototype.validateRules = function (name) {\n if (!this.rules[\"\" + name]) {\n return;\n }\n var rules = Object.keys(this.rules[\"\" + name]);\n var hiddenType = false;\n var validateHiddenType = false;\n var vhPos = rules.indexOf('validateHidden');\n var hPos = rules.indexOf('hidden');\n this.getInputElement(name);\n if (hPos !== -1) {\n hiddenType = true;\n }\n if (vhPos !== -1) {\n validateHiddenType = true;\n }\n if (!hiddenType || (hiddenType && validateHiddenType)) {\n if (vhPos !== -1) {\n rules.splice(vhPos, 1);\n }\n if (hPos !== -1) {\n rules.splice((hPos - 1), 1);\n }\n this.getErrorElement(name);\n for (var _i = 0, rules_2 = rules; _i < rules_2.length; _i++) {\n var rule = rules_2[_i];\n var errorMessage = this.getErrorMessage(this.rules[\"\" + name][\"\" + rule], rule);\n var errorRule = { name: name, message: errorMessage };\n var eventArgs = {\n inputName: name,\n element: this.inputElement,\n message: errorMessage\n };\n if (!this.isValid(name, rule) && !this.inputElement.classList.contains(this.ignore)) {\n this.removeErrorRules(name);\n this.errorRules.push(errorRule);\n // Set aria attributes to invalid elements\n this.inputElement.setAttribute('aria-invalid', 'true');\n this.inputElement.setAttribute('aria-describedby', this.inputElement.id + '-info');\n var inputParent = this.inputElement.parentElement;\n var grandParent = inputParent.parentElement;\n if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper')) {\n inputParent.classList.add(this.errorClass);\n inputParent.classList.remove(this.validClass);\n }\n else if ((grandParent != null) && (grandParent.classList.contains('e-control-wrapper') || grandParent.classList.contains('e-wrapper'))) {\n grandParent.classList.add(this.errorClass);\n grandParent.classList.remove(this.validClass);\n }\n else {\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n }\n if (!this.infoElement) {\n this.createErrorElement(name, errorRule.message, this.inputElement);\n }\n else {\n this.showMessage(errorRule);\n }\n eventArgs.errorElement = this.infoElement;\n eventArgs.status = 'failure';\n if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper')) {\n inputParent.classList.add(this.errorClass);\n inputParent.classList.remove(this.validClass);\n }\n else if ((grandParent != null) && (grandParent.classList.contains('e-control-wrapper') || grandParent.classList.contains('e-wrapper'))) {\n grandParent.classList.add(this.errorClass);\n grandParent.classList.remove(this.validClass);\n }\n else {\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n }\n this.optionalValidationStatus(name, eventArgs);\n this.trigger('validationComplete', eventArgs);\n // Set aria-required to required rule elements\n if (rule === 'required') {\n this.inputElement.setAttribute('aria-required', 'true');\n }\n break;\n }\n else {\n this.hideMessage(name);\n eventArgs.status = 'success';\n this.trigger('validationComplete', eventArgs);\n }\n }\n }\n else {\n return;\n }\n };\n // Update the optional validation status\n FormValidator.prototype.optionalValidationStatus = function (name, refer) {\n if (!this.rules[\"\" + name][this.required] && !this.inputElement.value.length && !isNullOrUndefined(this.infoElement)) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n refer.status = '';\n this.hideMessage(name);\n }\n };\n // Check the input element whether it's value satisfy the validation rule or not\n FormValidator.prototype.isValid = function (name, rule) {\n var params = this.rules[\"\" + name][\"\" + rule];\n var param = (params instanceof Array && typeof params[1] === 'string') ? params[0] : params;\n var currentRule = this.rules[\"\" + name][\"\" + rule];\n var args = { value: this.inputElement.value, param: param, element: this.inputElement, formElement: this.element };\n this.trigger('validationBegin', args);\n if (!args.param && rule === 'required') {\n return true;\n }\n if (currentRule && typeof currentRule[0] === 'function') {\n var fn = currentRule[0];\n return fn.call(this, { element: this.inputElement, value: this.inputElement.value });\n }\n else if (FormValidator_1.isCheckable(this.inputElement)) {\n if (rule !== 'required') {\n return true;\n }\n return selectAll('input[name=\"' + name + '\"]:checked', this.element).length > 0;\n }\n else {\n return FormValidator_1.checkValidator[\"\" + rule](args);\n }\n };\n // Return default error message or custom error message\n FormValidator.prototype.getErrorMessage = function (ruleValue, rule) {\n var message = this.inputElement.getAttribute('data-' + rule + '-message') ?\n this.inputElement.getAttribute('data-' + rule + '-message') :\n (ruleValue instanceof Array && typeof ruleValue[1] === 'string') ? ruleValue[1] :\n (Object.keys(this.localyMessage).length !== 0) ? this.localyMessage[\"\" + rule] : this.defaultMessages[\"\" + rule];\n var formats = message.match(/{(\\d)}/g);\n if (!isNullOrUndefined(formats)) {\n for (var i = 0; i < formats.length; i++) {\n var value = ruleValue instanceof Array ? ruleValue[parseInt(i.toString())] : ruleValue;\n message = message.replace(formats[parseInt(i.toString())], value);\n }\n }\n return message;\n };\n // Create error element based on name and error message\n FormValidator.prototype.createErrorElement = function (name, message, input) {\n var errorElement = createElement(this.errorElement, {\n className: this.errorClass,\n innerHTML: message,\n attrs: { for: name }\n });\n // Create message design if errorOption is message\n if (this.errorOption === ErrorOption.Message) {\n errorElement.classList.remove(this.errorClass);\n errorElement.classList.add('e-message');\n errorElement = createElement(this.errorContainer, { className: this.errorClass, innerHTML: errorElement.outerHTML });\n }\n errorElement.id = this.inputElement.name + '-info';\n // Append error message into MVC error message element\n if (this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]')) {\n this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]').appendChild(errorElement);\n }\n else if (input.hasAttribute('data-msg-containerid') === true) {\n // Append error message into custom div element\n var containerId = input.getAttribute('data-msg-containerid');\n var divElement = select('#' + containerId, this.element);\n divElement.appendChild(errorElement);\n }\n else if (this.customPlacement != null) {\n // Call custom placement function if customPlacement is not null\n this.customPlacement.call(this, this.inputElement, errorElement);\n }\n else {\n var inputParent = this.inputElement.parentElement;\n var grandParent = inputParent.parentElement;\n if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper')) {\n grandParent.insertBefore(errorElement, inputParent.nextSibling);\n }\n else if (grandParent.classList.contains('e-control-wrapper') || grandParent.classList.contains('e-wrapper')) {\n grandParent.parentElement.insertBefore(errorElement, grandParent.nextSibling);\n }\n else {\n inputParent.insertBefore(errorElement, this.inputElement.nextSibling);\n }\n }\n errorElement.style.display = 'block';\n this.getErrorElement(name);\n this.validated.push(name);\n this.checkRequired(name);\n };\n // Get error element by name\n FormValidator.prototype.getErrorElement = function (name) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass, this.inputElement.parentElement);\n if (!this.infoElement) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass + '[for=\"' + name + '\"]', this.element);\n }\n return this.infoElement;\n };\n // Remove existing rule from errorRules object\n FormValidator.prototype.removeErrorRules = function (name) {\n for (var i = 0; i < this.errorRules.length; i++) {\n var rule = this.errorRules[parseInt(i.toString())];\n if (rule.name === name) {\n this.errorRules.splice(i, 1);\n }\n }\n };\n // Show error message to the input element\n FormValidator.prototype.showMessage = function (errorRule) {\n this.infoElement.style.display = 'block';\n this.infoElement.innerHTML = errorRule.message;\n this.checkRequired(errorRule.name);\n };\n // Hide error message based on input name\n FormValidator.prototype.hideMessage = function (name) {\n if (this.infoElement) {\n this.infoElement.style.display = 'none';\n this.removeErrorRules(name);\n var inputParent = this.inputElement.parentElement;\n var grandParent = inputParent.parentElement;\n if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper')) {\n inputParent.classList.add(this.validClass);\n inputParent.classList.remove(this.errorClass);\n }\n else if ((grandParent != null) && (grandParent.classList.contains('e-control-wrapper') || grandParent.classList.contains('e-wrapper'))) {\n grandParent.classList.add(this.validClass);\n grandParent.classList.remove(this.errorClass);\n }\n else {\n this.inputElement.classList.add(this.validClass);\n this.inputElement.classList.remove(this.errorClass);\n }\n this.inputElement.setAttribute('aria-invalid', 'false');\n }\n };\n // Check whether the input element have required rule and its value is not empty\n FormValidator.prototype.checkRequired = function (name) {\n if (!this.rules[\"\" + name][this.required] && !this.inputElement.value.length && !isNullOrUndefined(this.infoElement)) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n this.hideMessage(name);\n }\n };\n // Return boolean result if the input have chekcable or submit types\n FormValidator.isCheckable = function (input) {\n var inputType = input.getAttribute('type');\n return inputType && (inputType === 'checkbox' || inputType === 'radio' || inputType === 'submit');\n };\n var FormValidator_1;\n // List of function to validate the rules\n FormValidator.checkValidator = {\n required: function (option) {\n return !isNaN(Date.parse(option.value)) ? !isNaN(new Date(option.value).getTime()) : option.value.toString().length > 0;\n },\n email: function (option) {\n return regex.EMAIL.test(option.value);\n },\n url: function (option) {\n return regex.URL.test(option.value);\n },\n dateIso: function (option) {\n return regex.DATE_ISO.test(option.value);\n },\n tel: function (option) {\n return regex.PHONE.test(option.value);\n },\n creditcard: function (option) {\n return regex.CREDITCARD.test(option.value);\n },\n number: function (option) {\n return !isNaN(Number(option.value)) && option.value.indexOf(' ') === -1;\n },\n digits: function (option) {\n return regex.DIGITS.test(option.value);\n },\n maxLength: function (option) {\n return option.value.length <= option.param;\n },\n minLength: function (option) {\n return option.value.length >= option.param;\n },\n rangeLength: function (option) {\n var param = option.param;\n return option.value.length >= param[0] && option.value.length <= param[1];\n },\n range: function (option) {\n var param = option.param;\n return !isNaN(Number(option.value)) && Number(option.value) >= param[0] && Number(option.value) <= param[1];\n },\n date: function (option) {\n if (!isNullOrUndefined(option.param) && (typeof (option.param) === 'string' && option.param !== '')) {\n var globalize = new Internationalization;\n var dateOptions = { format: option.param.toString(), type: 'dateTime', skeleton: 'yMd' };\n var dateValue = globalize.parseDate(option.value, dateOptions);\n return (!isNullOrUndefined(dateValue) && dateValue instanceof Date && !isNaN(+dateValue));\n }\n else {\n return !isNaN(new Date(option.value).getTime());\n }\n },\n max: function (option) {\n if (!isNaN(Number(option.value))) {\n // Maximum rule validation for number\n return +option.value <= option.param;\n }\n // Maximum rule validation for date\n return new Date(option.value).getTime() <= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n },\n min: function (option) {\n if (!isNaN(Number(option.value))) {\n // Minimum rule validation for number\n return +option.value >= option.param;\n }\n else if ((option.value).indexOf(',') !== -1) {\n var uNum = (option.value).replace(/,/g, '');\n return parseFloat(uNum) >= option.param;\n }\n else {\n // Minimum rule validation for date\n return new Date(option.value).getTime() >= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n }\n },\n regex: function (option) {\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n return new RegExp(option.param).test(option.value);\n },\n equalTo: function (option) {\n var compareTo = option.formElement.querySelector('#' + option.param);\n option.param = compareTo.value;\n return option.param === option.value;\n }\n };\n __decorate([\n Property('')\n ], FormValidator.prototype, \"locale\", void 0);\n __decorate([\n Property('e-hidden')\n ], FormValidator.prototype, \"ignore\", void 0);\n __decorate([\n Property()\n ], FormValidator.prototype, \"rules\", void 0);\n __decorate([\n Property('e-error')\n ], FormValidator.prototype, \"errorClass\", void 0);\n __decorate([\n Property('e-valid')\n ], FormValidator.prototype, \"validClass\", void 0);\n __decorate([\n Property('label')\n ], FormValidator.prototype, \"errorElement\", void 0);\n __decorate([\n Property('div')\n ], FormValidator.prototype, \"errorContainer\", void 0);\n __decorate([\n Property(ErrorOption.Label)\n ], FormValidator.prototype, \"errorOption\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"focusout\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"keyup\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"submit\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationBegin\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationComplete\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"customPlacement\", void 0);\n FormValidator = FormValidator_1 = __decorate([\n NotifyPropertyChanges\n ], FormValidator);\n return FormValidator;\n}(Base));\nexport { FormValidator };\n","import { detach, getUniqueID, rippleEffect, setValue, attributes } from '@syncfusion/ej2-base';\nimport { getValue, addClass, deleteObject } from '@syncfusion/ej2-base';\n/**\n * Initialize wrapper element for angular.\n *\n * @private\n *\n * @param {CreateElementArgs} createElement - Specifies created element args\n * @param {string} tag - Specifies tag name\n * @param {string} type - Specifies type name\n * @param {HTMLInputElement} element - Specifies input element\n * @param {string} WRAPPER - Specifies wrapper element\n * @param {string} role - Specifies role\n * @returns {HTMLInputElement} - Input Element\n */\nexport function wrapperInitialize(createElement, tag, type, element, WRAPPER, role) {\n var input = element;\n if (element.tagName === tag) {\n var ejInstance = getValue('ej2_instances', element);\n input = createElement('input', { attrs: { 'type': type } });\n var props = ['change', 'cssClass', 'label', 'labelPosition', 'id'];\n for (var index = 0, len = element.attributes.length; index < len; index++) {\n if (props.indexOf(element.attributes[index].nodeName) === -1) {\n input.setAttribute(element.attributes[index].nodeName, element.attributes[index].nodeValue);\n }\n }\n attributes(element, { 'class': WRAPPER });\n element.appendChild(input);\n setValue('ej2_instances', ejInstance, input);\n deleteObject(element, 'ej2_instances');\n }\n return input;\n}\n/**\n * Get the text node.\n *\n * @param {HTMLElement} element - Specifies html element\n * @private\n * @returns {Node} - Text node.\n */\nexport function getTextNode(element) {\n var node;\n var childnode = element.childNodes;\n for (var i = 0; i < childnode.length; i++) {\n node = childnode[i];\n if (node.nodeType === 3) {\n return node;\n }\n }\n return null;\n}\n/**\n * Destroy the button components.\n *\n * @private\n * @param {Switch | CheckBox} ejInst - Specifies eJ2 Instance\n * @param {Element} wrapper - Specifies wrapper element\n * @param {string} tagName - Specifies tag name\n * @returns {void}\n */\nexport function destroy(ejInst, wrapper, tagName) {\n if (tagName === 'INPUT') {\n wrapper.parentNode.insertBefore(ejInst.element, wrapper);\n detach(wrapper);\n ejInst.element.checked = false;\n ['name', 'value', 'disabled'].forEach(function (key) {\n ejInst.element.removeAttribute(key);\n });\n }\n else {\n ['role', 'aria-checked', 'class'].forEach(function (key) {\n wrapper.removeAttribute(key);\n });\n wrapper.innerHTML = '';\n }\n}\n/**\n * Initialize control pre rendering.\n *\n * @private\n * @param {Switch | CheckBox} proxy - Specifies proxy\n * @param {string} control - Specifies control\n * @param {string} wrapper - Specifies wrapper element\n * @param {HTMLInputElement} element - Specifies input element\n * @param {string} moduleName - Specifies module name\n * @returns {void}\n */\nexport function preRender(proxy, control, wrapper, element, moduleName) {\n element = wrapperInitialize(proxy.createElement, control, 'checkbox', element, wrapper, moduleName);\n proxy.element = element;\n if (proxy.element.getAttribute('type') !== 'checkbox') {\n proxy.element.setAttribute('type', 'checkbox');\n }\n if (!proxy.element.id) {\n proxy.element.id = getUniqueID('e-' + moduleName);\n }\n}\n/**\n * Creates CheckBox component UI with theming and ripple support.\n *\n * @private\n * @param {CreateElementArgs} createElement - Specifies Created Element args\n * @param {boolean} enableRipple - Specifies ripple effect\n * @param {CheckBoxUtilModel} options - Specifies Checkbox util Model\n * @returns {Element} - Checkbox Element\n */\nexport function createCheckBox(createElement, enableRipple, options) {\n if (enableRipple === void 0) { enableRipple = false; }\n if (options === void 0) { options = {}; }\n var wrapper = createElement('div', { className: 'e-checkbox-wrapper e-css' });\n if (options.cssClass) {\n addClass([wrapper], options.cssClass.split(' '));\n }\n if (options.enableRtl) {\n wrapper.classList.add('e-rtl');\n }\n if (enableRipple) {\n var rippleSpan = createElement('span', { className: 'e-ripple-container' });\n rippleEffect(rippleSpan, { isCenterRipple: true, duration: 400 });\n wrapper.appendChild(rippleSpan);\n }\n var frameSpan = createElement('span', { className: 'e-frame e-icons' });\n if (options.checked) {\n frameSpan.classList.add('e-check');\n }\n wrapper.appendChild(frameSpan);\n if (options.label) {\n var labelSpan = createElement('span', { className: 'e-label' });\n if (options.disableHtmlEncode) {\n labelSpan.textContent = options.label;\n }\n else {\n labelSpan.innerHTML = options.label;\n }\n wrapper.appendChild(labelSpan);\n }\n return wrapper;\n}\n/**\n * Handles ripple mouse.\n *\n * @private\n * @param {MouseEvent} e - Specifies mouse event\n * @param {Element} rippleSpan - Specifies Ripple span element\n * @returns {void}\n */\nexport function rippleMouseHandler(e, rippleSpan) {\n if (rippleSpan) {\n var event_1 = document.createEvent('MouseEvents');\n event_1.initEvent(e.type, false, true);\n rippleSpan.dispatchEvent(event_1);\n }\n}\n/**\n * Append hidden input to given element\n *\n * @private\n * @param {Switch | CheckBox} proxy - Specifies Proxy\n * @param {Element} wrap - Specifies Wrapper ELement\n * @returns {void}\n */\nexport function setHiddenInput(proxy, wrap) {\n if (proxy.element.getAttribute('ejs-for')) {\n wrap.appendChild(proxy.createElement('input', {\n attrs: { 'name': proxy.name || proxy.element.name, 'value': 'false', 'type': 'hidden' }\n }));\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\nimport { Component, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, isNullOrUndefined, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { addClass, detach, getUniqueID, isRippleEnabled, removeClass, rippleEffect, closest } from '@syncfusion/ej2-base';\nimport { wrapperInitialize, rippleMouseHandler, setHiddenInput } from './../common/common';\nvar CHECK = 'e-check';\nvar DISABLED = 'e-checkbox-disabled';\nvar FRAME = 'e-frame';\nvar INDETERMINATE = 'e-stop';\nvar LABEL = 'e-label';\nvar RIPPLE = 'e-ripple-container';\nvar RIPPLECHECK = 'e-ripple-check';\nvar RIPPLEINDETERMINATE = 'e-ripple-stop';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-checkbox-wrapper';\nvar containerAttr = ['title', 'class', 'style', 'disabled', 'readonly', 'name', 'value'];\n/**\n * The CheckBox is a graphical user interface element that allows you to select one or more options from the choices.\n * It contains checked, unchecked, and indeterminate states.\n * ```html\n * \n * \n * ```\n */\nvar CheckBox = /** @class */ (function (_super) {\n __extends(CheckBox, _super);\n /**\n * Constructor for creating the widget\n *\n * @private\n * @param {CheckBoxModel} options - Specifies checkbox model\n * @param {string | HTMLInputElement} element - Specifies target element\n */\n function CheckBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isFocused = false;\n _this.isMouseClick = false;\n _this.clickTriggered = false;\n _this.validCheck = true;\n return _this;\n }\n CheckBox.prototype.changeState = function (state, isInitialize) {\n var ariaState;\n var rippleSpan;\n var frameSpan = this.getWrapper().getElementsByClassName(FRAME)[0];\n if (isRippleEnabled) {\n rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n }\n if (state === 'check') {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n if (rippleSpan) {\n rippleSpan.classList.remove(RIPPLEINDETERMINATE);\n rippleSpan.classList.add(RIPPLECHECK);\n }\n ariaState = 'true';\n this.element.checked = true;\n if ((this.element.required || closest(this.element, 'form') && closest(this.element, 'form').classList.contains('e-formvalidator')) && this.validCheck && !isInitialize) {\n this.element.checked = false;\n this.validCheck = false;\n }\n else if (this.element.required || closest(this.element, 'form') && closest(this.element, 'form').classList.contains('e-formvalidator')) {\n this.validCheck = true;\n }\n }\n else if (state === 'uncheck') {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n if (rippleSpan) {\n removeClass([rippleSpan], [RIPPLECHECK, RIPPLEINDETERMINATE]);\n }\n ariaState = 'false';\n this.element.checked = false;\n if ((this.element.required || closest(this.element, 'form') && closest(this.element, 'form').classList.contains('e-formvalidator')) && this.validCheck && !isInitialize) {\n this.element.checked = true;\n this.validCheck = false;\n }\n else if (this.element.required || closest(this.element, 'form') && closest(this.element, 'form').classList.contains('e-formvalidator')) {\n this.validCheck = true;\n }\n }\n else {\n frameSpan.classList.remove(CHECK);\n frameSpan.classList.add(INDETERMINATE);\n if (rippleSpan) {\n rippleSpan.classList.remove(RIPPLECHECK);\n rippleSpan.classList.add(RIPPLEINDETERMINATE);\n }\n ariaState = 'mixed';\n this.element.indeterminate = true;\n this.indeterminate = true;\n }\n };\n CheckBox.prototype.clickHandler = function (event) {\n if (event.target.tagName === 'INPUT' && this.clickTriggered) {\n if (this.isVue) {\n this.changeState(this.checked ? 'check' : 'uncheck');\n }\n this.clickTriggered = false;\n return;\n }\n if (event.target.tagName === 'SPAN' || event.target.tagName === 'LABEL') {\n this.clickTriggered = true;\n }\n if (this.isMouseClick) {\n this.focusOutHandler();\n this.isMouseClick = false;\n }\n if (this.indeterminate) {\n this.changeState(this.checked ? 'check' : 'uncheck');\n this.indeterminate = false;\n this.element.indeterminate = false;\n }\n else if (this.checked) {\n this.changeState('uncheck');\n this.checked = false;\n }\n else {\n this.changeState('check');\n this.checked = true;\n }\n var changeEventArgs = { checked: this.updateVueArrayModel(false), event: event };\n this.trigger('change', changeEventArgs);\n event.stopPropagation();\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n CheckBox.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n _super.prototype.destroy.call(this);\n if (this.wrapper) {\n wrapper = this.wrapper;\n if (!this.disabled) {\n this.unWireEvents();\n }\n if (this.tagName === 'INPUT') {\n if (this.getWrapper() && wrapper.parentNode) {\n wrapper.parentNode.insertBefore(this.element, wrapper);\n }\n detach(wrapper);\n this.element.checked = false;\n if (this.indeterminate) {\n this.element.indeterminate = false;\n }\n ['name', 'value', 'disabled'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n }\n else {\n ['class'].forEach(function (key) {\n wrapper.removeAttribute(key);\n });\n wrapper.innerHTML = '';\n }\n }\n };\n CheckBox.prototype.focusHandler = function () {\n this.isFocused = true;\n };\n CheckBox.prototype.focusOutHandler = function () {\n var wrapper = this.getWrapper();\n if (wrapper) {\n wrapper.classList.remove('e-focus');\n }\n this.isFocused = false;\n };\n /**\n * Gets the module name.\n *\n * @private\n * @returns {string} - Module Name\n */\n CheckBox.prototype.getModuleName = function () {\n return 'checkbox';\n };\n /**\n * Gets the properties to be maintained in the persistence state.\n *\n * @private\n * @returns {string} - Persist Data\n */\n CheckBox.prototype.getPersistData = function () {\n return this.addOnPersist(['checked', 'indeterminate']);\n };\n CheckBox.prototype.getWrapper = function () {\n if (this.element && this.element.parentElement) {\n return this.element.parentElement.parentElement;\n }\n else {\n return null;\n }\n };\n CheckBox.prototype.initialize = function () {\n if (isNullOrUndefined(this.initialCheckedValue)) {\n this.initialCheckedValue = this.checked;\n }\n if (this.name) {\n this.element.setAttribute('name', this.name);\n }\n if (this.value) {\n this.element.setAttribute('value', this.value);\n if (this.isVue && typeof this.value === 'boolean' && this.value === true) {\n this.setProperties({ 'checked': true }, true);\n }\n }\n if (this.checked) {\n this.changeState('check', true);\n }\n if (this.indeterminate) {\n this.changeState();\n }\n if (this.disabled) {\n this.setDisabled();\n }\n };\n CheckBox.prototype.initWrapper = function () {\n var wrapper = this.element.parentElement;\n if (!wrapper.classList.contains(WRAPPER)) {\n wrapper = this.createElement('div', {\n className: WRAPPER\n });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var label = this.createElement('label', { attrs: { for: this.element.id } });\n var frameSpan = this.createElement('span', { className: 'e-icons ' + FRAME });\n wrapper.classList.add('e-wrapper');\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n wrapper.appendChild(label);\n label.appendChild(this.element);\n setHiddenInput(this, label);\n label.appendChild(frameSpan);\n if (isRippleEnabled) {\n var rippleSpan = this.createElement('span', { className: RIPPLE });\n if (this.labelPosition === 'Before') {\n label.appendChild(rippleSpan);\n }\n else {\n label.insertBefore(rippleSpan, frameSpan);\n }\n rippleEffect(rippleSpan, { duration: 400, isCenterRipple: true });\n }\n if (this.label) {\n this.setText(this.label);\n }\n };\n CheckBox.prototype.keyUpHandler = function () {\n if (this.isFocused) {\n this.getWrapper().classList.add('e-focus');\n }\n };\n CheckBox.prototype.labelMouseDownHandler = function (e) {\n this.isMouseClick = true;\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, rippleSpan);\n };\n CheckBox.prototype.labelMouseUpHandler = function (e) {\n this.isMouseClick = true;\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n if (rippleSpan) {\n var rippleElem = rippleSpan.querySelectorAll('.e-ripple-element');\n for (var i = 0; i < rippleElem.length - 1; i++) {\n rippleSpan.removeChild(rippleSpan.childNodes[i]);\n }\n rippleMouseHandler(e, rippleSpan);\n }\n };\n /**\n * Called internally if any of the property value changes.\n *\n * @private\n * @param {CheckBoxModel} newProp - Specifies new Properties\n * @param {CheckBoxModel} oldProp - Specifies old Properties\n *\n * @returns {void}\n */\n CheckBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n this.indeterminate = false;\n this.element.indeterminate = false;\n this.changeState(newProp.checked ? 'check' : 'uncheck');\n break;\n case 'indeterminate':\n if (newProp.indeterminate) {\n this.changeState();\n }\n else {\n this.element.indeterminate = false;\n this.changeState(this.checked ? 'check' : 'uncheck');\n }\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.wrapper = this.getWrapper();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n wrapper.classList.remove(DISABLED);\n wrapper.setAttribute('aria-disabled', 'false');\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([wrapper], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([wrapper], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n wrapper.classList.add(RTL);\n }\n else {\n wrapper.classList.remove(RTL);\n }\n break;\n case 'label':\n this.setText(newProp.label);\n break;\n case 'labelPosition': {\n var label = wrapper.getElementsByClassName(LABEL)[0];\n var labelWrap = wrapper.getElementsByTagName('label')[0];\n detach(label);\n if (newProp.labelPosition === 'After') {\n labelWrap.appendChild(label);\n }\n else {\n labelWrap.insertBefore(label, wrapper.getElementsByClassName(FRAME)[0]);\n }\n break;\n }\n case 'name':\n this.element.setAttribute('name', newProp.name);\n break;\n case 'value':\n if (this.isVue && typeof newProp.value === 'object') {\n break;\n }\n this.element.setAttribute('value', newProp.value);\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToWrapper();\n break;\n }\n }\n };\n /**\n * Initialize Angular, React and Unique ID support.\n *\n * @private\n * @returns {void}\n */\n CheckBox.prototype.preRender = function () {\n var element = this.element;\n this.tagName = this.element.tagName;\n element = wrapperInitialize(this.createElement, 'EJS-CHECKBOX', 'checkbox', element, WRAPPER, 'checkbox');\n this.element = element;\n if (this.element.getAttribute('type') !== 'checkbox') {\n this.element.setAttribute('type', 'checkbox');\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n };\n /**\n * Initialize the control rendering.\n *\n * @private\n * @returns {void}\n */\n CheckBox.prototype.render = function () {\n this.initWrapper();\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n this.updateHtmlAttributeToWrapper();\n this.updateVueArrayModel(true);\n this.renderComplete();\n this.wrapper = this.getWrapper();\n };\n CheckBox.prototype.setDisabled = function () {\n var wrapper = this.getWrapper();\n this.element.disabled = true;\n wrapper.classList.add(DISABLED);\n wrapper.setAttribute('aria-disabled', 'true');\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n CheckBox.prototype.setText = function (text) {\n var wrapper = this.getWrapper();\n if (!wrapper) {\n return;\n }\n var label = wrapper.getElementsByClassName(LABEL)[0];\n if (label) {\n label.textContent = text;\n }\n else {\n text = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(text) : text;\n label = this.createElement('span', { className: LABEL, innerHTML: text });\n var labelWrap = wrapper.getElementsByTagName('label')[0];\n if (this.labelPosition === 'Before') {\n labelWrap.insertBefore(label, wrapper.getElementsByClassName(FRAME)[0]);\n }\n else {\n labelWrap.appendChild(label);\n }\n }\n };\n CheckBox.prototype.changeHandler = function (e) {\n e.stopPropagation();\n };\n CheckBox.prototype.formResetHandler = function () {\n this.checked = this.initialCheckedValue;\n this.element.checked = this.initialCheckedValue;\n };\n CheckBox.prototype.unWireEvents = function () {\n var wrapper = this.wrapper;\n EventHandler.remove(wrapper, 'click', this.clickHandler);\n EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n var label = wrapper.getElementsByTagName('label')[0];\n EventHandler.remove(label, 'mousedown', this.labelMouseDownHandler);\n EventHandler.remove(label, 'mouseup', this.labelMouseUpHandler);\n var formElem = closest(this.element, 'form');\n if (formElem) {\n EventHandler.remove(formElem, 'reset', this.formResetHandler);\n }\n if (this.tagName === 'EJS-CHECKBOX') {\n EventHandler.remove(this.element, 'change', this.changeHandler);\n }\n };\n CheckBox.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(wrapper, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n var label = wrapper.getElementsByTagName('label')[0];\n EventHandler.add(label, 'mousedown', this.labelMouseDownHandler, this);\n EventHandler.add(label, 'mouseup', this.labelMouseUpHandler, this);\n var formElem = closest(this.element, 'form');\n if (formElem) {\n EventHandler.add(formElem, 'reset', this.formResetHandler, this);\n }\n if (this.tagName === 'EJS-CHECKBOX') {\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n }\n };\n CheckBox.prototype.updateVueArrayModel = function (init) {\n if (this.isVue && typeof this.value === 'object') {\n var value = this.element.value;\n if (value && this.value) {\n if (init) {\n for (var i = 0; i < this.value.length; i++) {\n if (value === this.value[i]) {\n this.changeState('check');\n this.setProperties({ 'checked': true }, true);\n }\n }\n }\n else {\n var index = this.value.indexOf(value);\n if (this.checked) {\n if (index < 0) {\n this.value.push(value);\n }\n }\n else {\n if (index > -1) {\n this.value.splice(index, 1);\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.value;\n }\n }\n }\n return this.validCheck ? this.element.checked : !this.element.checked;\n };\n CheckBox.prototype.updateHtmlAttributeToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (containerAttr.indexOf(key) > -1) {\n var wrapper = this.getWrapper();\n if (key === 'class') {\n addClass([wrapper], this.htmlAttributes[\"\" + key].split(' '));\n }\n else if (key === 'title') {\n wrapper.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n else if (key === 'style') {\n var frameSpan = this.getWrapper().getElementsByClassName(FRAME)[0];\n frameSpan.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n else if (key === 'disabled') {\n if (this.htmlAttributes[\"\" + key] === 'true') {\n this.setDisabled();\n }\n this.element.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n else {\n this.element.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n };\n /**\n * Click the CheckBox element\n * its native method\n *\n * @public\n * @returns {void}\n */\n CheckBox.prototype.click = function () {\n this.element.click();\n };\n /**\n * Sets the focus to CheckBox\n * its native method\n *\n * @public\n * @returns {void}\n */\n CheckBox.prototype.focusIn = function () {\n this.element.focus();\n };\n __decorate([\n Event()\n ], CheckBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], CheckBox.prototype, \"created\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"indeterminate\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], CheckBox.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property({})\n ], CheckBox.prototype, \"htmlAttributes\", void 0);\n CheckBox = __decorate([\n NotifyPropertyChanges\n ], CheckBox);\n return CheckBox;\n}(Component));\nexport { CheckBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\nimport { Component, EventHandler, Property, Event, Browser, L10n, getUniqueID } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, detach, closest } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue, formatUnit, setValue, merge } from '@syncfusion/ej2-base';\nimport { Internationalization, getNumericObject } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar ROOT = 'e-control-wrapper e-numeric';\nvar SPINICON = 'e-input-group-icon';\nvar SPINUP = 'e-spin-up';\nvar SPINDOWN = 'e-spin-down';\nvar ERROR = 'e-error';\nvar INCREMENT = 'increment';\nvar DECREMENT = 'decrement';\nvar INTREGEXP = new RegExp('^(-)?(\\\\d*)$');\nvar DECIMALSEPARATOR = '.';\nvar COMPONENT = 'e-numerictextbox';\nvar CONTROL = 'e-control';\nvar NUMERIC_FOCUS = 'e-input-focus';\nvar HIDDENELEMENT = 'e-numeric-hidden';\nvar wrapperAttributes = ['title', 'style', 'class'];\nvar selectionTimeOut = 0;\n/**\n * Represents the NumericTextBox component that allows the user to enter only numeric values.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar NumericTextBox = /** @class */ (function (_super) {\n __extends(NumericTextBox, _super);\n /**\n *\n * @param {NumericTextBoxModel} options - Specifies the NumericTextBox model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function NumericTextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isVue = false;\n _this.preventChange = false;\n _this.isAngular = false;\n _this.isDynamicChange = false;\n _this.numericOptions = options;\n return _this;\n }\n NumericTextBox.prototype.preRender = function () {\n this.isPrevFocused = false;\n this.decimalSeparator = '.';\n // eslint-disable-next-line no-useless-escape\n this.intRegExp = new RegExp('/^(-)?(\\d*)$/');\n this.isCalled = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [CONTROL, COMPONENT, 'e-lib']);\n this.angularTagName = null;\n this.formEle = closest(this.element, 'form');\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = this.createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (attributeName !== 'id' && attributeName !== 'class') {\n input.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n else if (attributeName === 'class') {\n input.setAttribute(attributeName, this.element.className.split(' ').filter(function (item) { return item.indexOf('ng-') !== 0; }).join(' '));\n }\n }\n if (this.element.hasAttribute('name')) {\n this.element.removeAttribute('name');\n }\n this.element.classList.remove('e-control', 'e-numerictextbox');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n attributes(this.element, { 'role': 'spinbutton', 'tabindex': '0', 'autocomplete': 'off' });\n var localeText = {\n incrementTitle: 'Increment value', decrementTitle: 'Decrement value', placeholder: this.placeholder\n };\n this.l10n = new L10n('numerictextbox', localeText, this.locale);\n if (this.l10n.getConstant('placeholder') !== '') {\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n if (!this.element.hasAttribute('id')) {\n this.element.setAttribute('id', getUniqueID('numerictextbox'));\n }\n this.isValidState = true;\n this.inputStyle = null;\n this.inputName = null;\n this.cultureInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.prevValue = this.value;\n this.updateHTMLAttrToElement();\n this.checkAttributes(false);\n if (this.formEle) {\n this.inputEleValue = this.value;\n }\n this.validateMinMax();\n this.validateStep();\n if (this.placeholder === null) {\n this.updatePlaceholder();\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n NumericTextBox.prototype.render = function () {\n if (this.element.tagName.toLowerCase() === 'input') {\n this.createWrapper();\n if (this.showSpinButton) {\n this.spinBtnCreation();\n }\n this.setElementWidth(this.width);\n if (!this.container.classList.contains('e-input-group')) {\n this.container.classList.add('e-input-group');\n }\n this.changeValue(this.value === null || isNaN(this.value) ?\n null : this.strictMode ? this.trimValue(this.value) : this.value);\n this.wireEvents();\n if (this.value !== null && !isNaN(this.value)) {\n if (this.decimals) {\n this.setProperties({ value: this.roundNumber(this.value, this.decimals) }, true);\n }\n }\n if (this.element.getAttribute('value') || this.value) {\n this.element.setAttribute('value', this.element.value);\n this.hiddenInput.setAttribute('value', this.hiddenInput.value);\n }\n this.elementPrevValue = this.element.value;\n if (this.element.hasAttribute('data-val')) {\n this.element.setAttribute('data-val', 'false');\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.renderComplete();\n }\n };\n NumericTextBox.prototype.checkAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['value', 'min', 'max', 'step', 'disabled', 'readonly', 'style', 'name', 'placeholder'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.element.getAttribute(prop) === 'disabled' || this.element.getAttribute(prop) === ''\n || this.element.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.element.getAttribute(prop) === 'readonly' || this.element.getAttribute(prop) === ''\n || this.element.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['value'] === undefined)) || isDynamic) {\n var setNumber = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n this.setProperties(setValue(prop, setNumber, {}), !isDynamic);\n }\n break;\n case 'min':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['min'] === undefined)) || isDynamic) {\n var minValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (minValue !== null && !isNaN(minValue)) {\n this.setProperties(setValue(prop, minValue, {}), !isDynamic);\n }\n }\n break;\n case 'max':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['max'] === undefined)) || isDynamic) {\n var maxValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (maxValue !== null && !isNaN(maxValue)) {\n this.setProperties(setValue(prop, maxValue, {}), !isDynamic);\n }\n }\n break;\n case 'step':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['step'] === undefined)) || isDynamic) {\n var stepValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (stepValue !== null && !isNaN(stepValue)) {\n this.setProperties(setValue(prop, stepValue, {}), !isDynamic);\n }\n }\n break;\n case 'style':\n this.inputStyle = this.element.getAttribute(prop);\n break;\n case 'name':\n this.inputName = this.element.getAttribute(prop);\n break;\n default:\n {\n var value = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if ((value !== null && !isNaN(value)) || (prop === 'value')) {\n this.setProperties(setValue(prop, value, {}), true);\n }\n }\n break;\n }\n }\n }\n };\n NumericTextBox.prototype.updatePlaceholder = function () {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n };\n NumericTextBox.prototype.initCultureFunc = function () {\n this.instance = new Internationalization(this.locale);\n };\n NumericTextBox.prototype.initCultureInfo = function () {\n this.cultureInfo.format = this.format;\n if (getValue('currency', this) !== null) {\n setValue('currency', this.currency, this.cultureInfo);\n this.setProperties({ currencyCode: this.currency }, true);\n }\n };\n /* Wrapper creation */\n NumericTextBox.prototype.createWrapper = function () {\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = this.getNumericValidClassList(this.cssClass);\n }\n var inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassValue,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n enabled: this.enabled\n }\n }, this.createElement);\n this.inputWrapper = inputObj;\n this.container = inputObj.container;\n this.container.setAttribute('class', ROOT + ' ' + this.container.getAttribute('class'));\n this.updateHTMLAttrToWrapper();\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n this.hiddenInput = (this.createElement('input', { attrs: { type: 'text',\n 'validateHidden': 'true', 'class': HIDDENELEMENT } }));\n this.inputName = this.inputName !== null ? this.inputName : this.element.id;\n this.element.removeAttribute('name');\n if (this.isAngular && this.angularTagName === 'EJS-NUMERICTEXTBOX' && this.cloneElement.id.length > 0) {\n attributes(this.hiddenInput, { 'name': this.cloneElement.id });\n }\n else {\n attributes(this.hiddenInput, { 'name': this.inputName });\n }\n this.container.insertBefore(this.hiddenInput, this.container.childNodes[1]);\n this.updateDataAttribute(false);\n if (this.inputStyle !== null) {\n attributes(this.container, { 'style': this.inputStyle });\n }\n };\n NumericTextBox.prototype.updateDataAttribute = function (isDynamic) {\n var attr = {};\n if (!isDynamic) {\n for (var a = 0; a < this.element.attributes.length; a++) {\n attr[this.element.attributes[a].name] = this.element.getAttribute(this.element.attributes[a].name);\n }\n }\n else {\n attr = this.htmlAttributes;\n }\n for (var _i = 0, _a = Object.keys(attr); _i < _a.length; _i++) {\n var key = _a[_i];\n if (key.indexOf('data') === 0) {\n this.hiddenInput.setAttribute(key, attr[\"\" + key]);\n }\n }\n };\n NumericTextBox.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttributes.indexOf(pro) < 0) {\n this.element.setAttribute(pro, this.htmlAttributes[\"\" + pro]);\n }\n }\n }\n };\n NumericTextBox.prototype.updateCssClass = function (newClass, oldClass) {\n Input.setCssClass(this.getNumericValidClassList(newClass), [this.container], this.getNumericValidClassList(oldClass));\n };\n NumericTextBox.prototype.getNumericValidClassList = function (numericClassName) {\n var result = numericClassName;\n if (!isNullOrUndefined(numericClassName) && numericClassName !== '') {\n result = (numericClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\n };\n NumericTextBox.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttributes.indexOf(pro) > -1) {\n if (pro === 'class') {\n var updatedClassValue = this.getNumericValidClassList(this.htmlAttributes[\"\" + pro]);\n if (updatedClassValue !== '') {\n addClass([this.container], updatedClassValue.split(' '));\n }\n }\n else if (pro === 'style') {\n var numericStyle = this.container.getAttribute(pro);\n numericStyle = !isNullOrUndefined(numericStyle) ? (numericStyle + this.htmlAttributes[\"\" + pro]) :\n this.htmlAttributes[\"\" + pro];\n this.container.setAttribute(pro, numericStyle);\n }\n else {\n this.container.setAttribute(pro, this.htmlAttributes[\"\" + pro]);\n }\n }\n }\n }\n };\n NumericTextBox.prototype.setElementWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.container.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n this.container.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n };\n /* Spinner creation */\n NumericTextBox.prototype.spinBtnCreation = function () {\n this.spinDown = Input.appendSpan(SPINICON + ' ' + SPINDOWN, this.container, this.createElement);\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle')\n });\n this.spinUp = Input.appendSpan(SPINICON + ' ' + SPINUP, this.container, this.createElement);\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle')\n });\n this.wireSpinBtnEvents();\n };\n NumericTextBox.prototype.validateMinMax = function () {\n if (!(typeof (this.min) === 'number' && !isNaN(this.min))) {\n this.setProperties({ min: -(Number.MAX_VALUE) }, true);\n }\n if (!(typeof (this.max) === 'number' && !isNaN(this.max))) {\n this.setProperties({ max: Number.MAX_VALUE }, true);\n }\n if (this.decimals !== null) {\n if (this.min !== -(Number.MAX_VALUE)) {\n this.setProperties({ min: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.min)) }, true);\n }\n if (this.max !== (Number.MAX_VALUE)) {\n this.setProperties({ max: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.max)) }, true);\n }\n }\n this.setProperties({ min: this.min > this.max ? this.max : this.min }, true);\n if (this.min !== -(Number.MAX_VALUE)) {\n attributes(this.element, { 'aria-valuemin': this.min.toString() });\n }\n if (this.max !== (Number.MAX_VALUE)) {\n attributes(this.element, { 'aria-valuemax': this.max.toString() });\n }\n };\n NumericTextBox.prototype.formattedValue = function (decimals, value) {\n return this.instance.getNumberFormat({\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals, useGrouping: false\n })(value);\n };\n NumericTextBox.prototype.validateStep = function () {\n if (this.decimals !== null) {\n this.setProperties({ step: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.step)) }, true);\n }\n };\n NumericTextBox.prototype.action = function (operation, event) {\n this.isInteract = true;\n var value = this.isFocused ? this.instance.getNumberParser({ format: 'n' })(this.element.value) : this.value;\n this.changeValue(this.performAction(value, this.step, operation));\n this.raiseChangeEvent(event);\n };\n NumericTextBox.prototype.checkErrorClass = function () {\n if (this.isValidState) {\n removeClass([this.container], ERROR);\n }\n else {\n addClass([this.container], ERROR);\n }\n attributes(this.element, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n NumericTextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n NumericTextBox.prototype.resetHandler = function (e) {\n e.preventDefault();\n if (!(this.inputWrapper.clearButton.classList.contains('e-clear-icon-hide')) || this.inputWrapper.container.classList.contains('e-static-clear')) {\n this.clear(e);\n }\n this.isInteract = true;\n this.raiseChangeEvent(e);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n NumericTextBox.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.setElementValue('');\n this.hiddenInput.value = '';\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.resetFormHandler = function () {\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.updateValue(null);\n }\n else {\n this.updateValue(this.inputEleValue);\n }\n };\n NumericTextBox.prototype.setSpinButton = function () {\n if (!isNullOrUndefined(this.spinDown)) {\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n }\n if (!isNullOrUndefined(this.spinUp)) {\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n }\n };\n NumericTextBox.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'blur', this.focusOutHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyDownHandler, this);\n EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n EventHandler.add(this.element, 'input', this.inputHandler, this);\n EventHandler.add(this.element, 'keypress', this.keyPressHandler, this);\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(this.element, 'paste', this.pasteHandler, this);\n if (this.enabled) {\n this.bindClearEvent();\n if (this.formEle) {\n EventHandler.add(this.formEle, 'reset', this.resetFormHandler, this);\n }\n }\n };\n NumericTextBox.prototype.wireSpinBtnEvents = function () {\n /* bind spin button events */\n EventHandler.add(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n };\n NumericTextBox.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'blur', this.focusOutHandler);\n EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n EventHandler.remove(this.element, 'input', this.inputHandler);\n EventHandler.remove(this.element, 'keydown', this.keyDownHandler);\n EventHandler.remove(this.element, 'keypress', this.keyPressHandler);\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(this.element, 'paste', this.pasteHandler);\n if (this.formEle) {\n EventHandler.remove(this.formEle, 'reset', this.resetFormHandler);\n }\n };\n NumericTextBox.prototype.unwireSpinBtnEvents = function () {\n /* unbind spin button events */\n EventHandler.remove(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n };\n NumericTextBox.prototype.changeHandler = function (event) {\n event.stopPropagation();\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n };\n NumericTextBox.prototype.raiseChangeEvent = function (event) {\n if (this.prevValue !== this.value || this.prevValue !== this.inputValue) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.value, previousValue: this.prevValue, isInteracted: this.isInteract,\n isInteraction: this.isInteract, event: event };\n if (event) {\n this.changeEventArgs.event = event;\n }\n if (this.changeEventArgs.event === undefined) {\n this.changeEventArgs.isInteracted = false;\n this.changeEventArgs.isInteraction = false;\n }\n merge(eventArgs, this.changeEventArgs);\n this.prevValue = this.value;\n this.isInteract = false;\n this.elementPrevValue = this.element.value;\n this.preventChange = false;\n this.trigger('change', eventArgs);\n }\n };\n NumericTextBox.prototype.pasteHandler = function () {\n var _this = this;\n if (!this.enabled || this.readonly) {\n return;\n }\n var beforeUpdate = this.element.value;\n setTimeout(function () {\n if (!_this.numericRegex().test(_this.element.value)) {\n _this.setElementValue(beforeUpdate);\n }\n });\n };\n NumericTextBox.prototype.preventHandler = function () {\n var _this = this;\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n setTimeout(function () {\n if (_this.element.selectionStart > 0) {\n var currentPos = _this.element.selectionStart;\n var prevPos = _this.element.selectionStart - 1;\n var start = 0;\n var valArray = _this.element.value.split('');\n var numericObject = getNumericObject(_this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var ignoreKeyCode = decimalSeparator.charCodeAt(0);\n if (_this.element.value[prevPos] === ' ' && _this.element.selectionStart > 0 && !iOS) {\n if (isNullOrUndefined(_this.prevVal)) {\n _this.element.value = _this.element.value.trim();\n }\n else if (prevPos !== 0) {\n _this.element.value = _this.prevVal;\n }\n else if (prevPos === 0) {\n _this.element.value = _this.element.value.trim();\n }\n _this.element.setSelectionRange(prevPos, prevPos);\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 1]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 1]) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.value = _this.element.value.substring(0, prevPos) +\n _this.element.value.substring(currentPos, _this.element.value.length);\n _this.element.setSelectionRange(prevPos, prevPos);\n if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) && _this.element.selectionStart > 0\n && _this.element.value.length) {\n _this.preventHandler();\n }\n }\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 2])) && _this.element.selectionStart > 1 &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 2]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 2]) &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.setSelectionRange(prevPos, prevPos);\n _this.nextEle = _this.element.value[_this.element.selectionStart];\n _this.cursorPosChanged = true;\n _this.preventHandler();\n }\n }\n if (_this.cursorPosChanged === true && _this.element.value[_this.element.selectionStart] === _this.nextEle &&\n isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1]))) {\n _this.element.setSelectionRange(_this.element.selectionStart + 1, _this.element.selectionStart + 1);\n _this.cursorPosChanged = false;\n _this.nextEle = null;\n }\n if (_this.element.value.trim() === '') {\n _this.element.setSelectionRange(start, start);\n }\n if (_this.element.selectionStart > 0) {\n if ((_this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === 45) && _this.element.selectionStart > 1) {\n if (isNullOrUndefined(_this.prevVal)) {\n // eslint-disable-next-line no-self-assign\n _this.element.value = _this.element.value;\n }\n else {\n _this.element.value = _this.prevVal;\n }\n _this.element.setSelectionRange(_this.element.selectionStart, _this.element.selectionStart);\n }\n if (_this.element.value[_this.element.selectionStart - 1] === decimalSeparator && _this.decimals === 0 && _this.validateDecimalOnType) {\n _this.element.value = _this.element.value.substring(0, prevPos) +\n _this.element.value.substring(currentPos, _this.element.value.length);\n }\n }\n _this.prevVal = _this.element.value;\n }\n });\n };\n NumericTextBox.prototype.keyUpHandler = function () {\n if (!this.enabled || this.readonly) {\n return;\n }\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n if (!iOS && Browser.isDevice) {\n this.preventHandler();\n }\n var parseValue = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n parseValue = parseValue === null || isNaN(parseValue) ? null : parseValue;\n this.hiddenInput.value = parseValue || parseValue === 0 ? parseValue.toString() : null;\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.inputHandler = function (event) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-this-alias\n var numerictextboxObj = this;\n if (!this.enabled || this.readonly) {\n return;\n }\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n var fireFox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n if ((fireFox || iOS) && Browser.isDevice) {\n this.preventHandler();\n }\n /* istanbul ignore next */\n if (this.isAngular\n && this.element.value !== getValue('decimal', getNumericObject(this.locale))\n && this.element.value !== getValue('minusSign', getNumericObject(this.locale))) {\n var parsedValue = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n parsedValue = isNaN(parsedValue) ? null : parsedValue;\n numerictextboxObj.localChange({ value: parsedValue });\n this.preventChange = true;\n }\n if (this.isVue) {\n var current = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n var previous = this.instance.getNumberParser({ format: 'n' })(this.elementPrevValue);\n //EJ2-54963-if type \".\" or \".0\" or \"-.0\" it converts to \"0\" automatically when binding v-model\n var nonZeroRegex = new RegExp('[^0-9]+$');\n if (nonZeroRegex.test(this.element.value) || ((this.elementPrevValue.indexOf('.') !== -1 || this.elementPrevValue.indexOf('-') !== -1) && this.element.value[this.element.value.length - 1] === '0')) {\n current = this.value;\n }\n var eventArgs = {\n event: event,\n value: (current === null || isNaN(current) ? null : current),\n previousValue: (previous === null || isNaN(previous) ? null : previous)\n };\n this.preventChange = true;\n this.elementPrevValue = this.element.value;\n this.trigger('input', eventArgs);\n }\n };\n NumericTextBox.prototype.keyDownHandler = function (event) {\n if (!this.readonly) {\n switch (event.keyCode) {\n case 38:\n event.preventDefault();\n this.action(INCREMENT, event);\n break;\n case 40:\n event.preventDefault();\n this.action(DECREMENT, event);\n break;\n default: break;\n }\n }\n };\n NumericTextBox.prototype.performAction = function (value, step, operation) {\n if (value === null || isNaN(value)) {\n value = 0;\n }\n var updatedValue = operation === INCREMENT ? value + step : value - step;\n updatedValue = this.correctRounding(value, step, updatedValue);\n return this.strictMode ? this.trimValue(updatedValue) : updatedValue;\n };\n NumericTextBox.prototype.correctRounding = function (value, step, result) {\n var floatExp = new RegExp('[,.](.*)');\n var floatValue = floatExp.test(value.toString());\n var floatStep = floatExp.test(step.toString());\n if (floatValue || floatStep) {\n var valueCount = floatValue ? floatExp.exec(value.toString())[0].length : 0;\n var stepCount = floatStep ? floatExp.exec(step.toString())[0].length : 0;\n var max = Math.max(valueCount, stepCount);\n return value = this.roundValue(result, max);\n }\n return result;\n };\n NumericTextBox.prototype.roundValue = function (result, precision) {\n precision = precision || 0;\n var divide = Math.pow(10, precision);\n return result *= divide, result = Math.round(result) / divide;\n };\n NumericTextBox.prototype.updateValue = function (value, event) {\n if (event) {\n this.isInteract = true;\n }\n if (value !== null && !isNaN(value)) {\n if (this.decimals) {\n value = this.roundNumber(value, this.decimals);\n }\n }\n this.inputValue = value;\n this.changeValue(value === null || isNaN(value) ? null : this.strictMode ? this.trimValue(value) : value);\n /* istanbul ignore next */\n if (!this.isDynamicChange) {\n this.raiseChangeEvent(event);\n }\n };\n NumericTextBox.prototype.updateCurrency = function (prop, propVal) {\n setValue(prop, propVal, this.cultureInfo);\n this.updateValue(this.value);\n };\n NumericTextBox.prototype.changeValue = function (value) {\n if (!(value || value === 0)) {\n value = null;\n this.setProperties({ value: value }, true);\n }\n else {\n var numberOfDecimals = this.getNumberOfDecimals(value);\n this.setProperties({ value: this.roundNumber(value, numberOfDecimals) }, true);\n }\n this.modifyText();\n if (!this.strictMode) {\n this.validateState();\n }\n };\n NumericTextBox.prototype.modifyText = function () {\n if (this.value || this.value === 0) {\n var value = this.formatNumber();\n var elementValue = this.isFocused ? value : this.instance.getNumberFormat(this.cultureInfo)(this.value);\n this.setElementValue(elementValue);\n attributes(this.element, { 'aria-valuenow': value });\n this.hiddenInput.value = this.value.toString();\n if (this.value !== null && this.serverDecimalSeparator) {\n this.hiddenInput.value = this.hiddenInput.value.replace('.', this.serverDecimalSeparator);\n }\n }\n else {\n this.setElementValue('');\n this.element.removeAttribute('aria-valuenow');\n this.hiddenInput.value = null;\n }\n };\n NumericTextBox.prototype.setElementValue = function (val, element) {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n };\n NumericTextBox.prototype.validateState = function () {\n this.isValidState = true;\n if (this.value || this.value === 0) {\n this.isValidState = !(this.value > this.max || this.value < this.min);\n }\n this.checkErrorClass();\n };\n NumericTextBox.prototype.getNumberOfDecimals = function (value) {\n var numberOfDecimals;\n // eslint-disable-next-line no-useless-escape\n var EXPREGEXP = new RegExp('[eE][\\-+]?([0-9]+)');\n var valueString = value.toString();\n if (EXPREGEXP.test(valueString)) {\n var result = EXPREGEXP.exec(valueString);\n if (!isNullOrUndefined(result)) {\n valueString = value.toFixed(Math.min(parseInt(result[1], 10), 20));\n }\n }\n var decimalPart = valueString.split('.')[1];\n numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n if (this.decimals !== null) {\n numberOfDecimals = numberOfDecimals < this.decimals ? numberOfDecimals : this.decimals;\n }\n return numberOfDecimals;\n };\n NumericTextBox.prototype.formatNumber = function () {\n var numberOfDecimals = this.getNumberOfDecimals(this.value);\n return this.instance.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(this.value);\n };\n NumericTextBox.prototype.trimValue = function (value) {\n if (value > this.max) {\n return this.max;\n }\n if (value < this.min) {\n return this.min;\n }\n return value;\n };\n NumericTextBox.prototype.roundNumber = function (value, precision) {\n var result = value;\n var decimals = precision || 0;\n var result1 = result.toString().split('e');\n result = Math.round(Number(result1[0] + 'e' + (result1[1] ? (Number(result1[1]) + decimals) : decimals)));\n var result2 = result.toString().split('e');\n result = Number(result2[0] + 'e' + (result2[1] ? (Number(result2[1]) - decimals) : -decimals));\n return Number(result.toFixed(decimals));\n };\n NumericTextBox.prototype.cancelEvent = function (event) {\n event.preventDefault();\n return false;\n };\n NumericTextBox.prototype.keyPressHandler = function (event) {\n if (!this.enabled || this.readonly) {\n return true;\n }\n if (!Browser.isDevice && Browser.info.version === '11.0' && event.keyCode === 13) {\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n return true;\n }\n if (event.which === 0 || event.metaKey || event.ctrlKey || event.keyCode === 8 || event.keyCode === 13) {\n return true;\n }\n var currentChar = String.fromCharCode(event.which);\n var decimalSeparator = getValue('decimal', getNumericObject(this.locale));\n var isAlterNumPadDecimalChar = event.code === 'NumpadDecimal' && currentChar !== decimalSeparator;\n //EJ2-59813-replace the culture decimal separator value with numberpad decimal separator value when culture decimal separator and numberpad decimal separator are different\n if (isAlterNumPadDecimalChar) {\n currentChar = decimalSeparator;\n }\n var text = this.element.value;\n text = text.substring(0, this.element.selectionStart) + currentChar + text.substring(this.element.selectionEnd);\n if (!this.numericRegex().test(text)) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n else {\n //EJ2-59813-update the numberpad decimal separator and update the cursor position\n if (isAlterNumPadDecimalChar) {\n var start = this.element.selectionStart + 1;\n this.element.value = text;\n this.element.setSelectionRange(start, start);\n event.preventDefault();\n event.stopPropagation();\n }\n return true;\n }\n };\n NumericTextBox.prototype.numericRegex = function () {\n var numericObject = getNumericObject(this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var fractionRule = '*';\n if (decimalSeparator === DECIMALSEPARATOR) {\n decimalSeparator = '\\\\' + decimalSeparator;\n }\n if (this.decimals === 0 && this.validateDecimalOnType) {\n return INTREGEXP;\n }\n if (this.decimals && this.validateDecimalOnType) {\n fractionRule = '{0,' + this.decimals + '}';\n }\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n return new RegExp('^(-)?(((\\\\d+(' + decimalSeparator + '\\\\d' + fractionRule +\n ')?)|(' + decimalSeparator + '\\\\d' + fractionRule + ')))?$');\n };\n NumericTextBox.prototype.mouseWheel = function (event) {\n event.preventDefault();\n var delta;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var rawEvent = event;\n if (rawEvent.wheelDelta) {\n delta = rawEvent.wheelDelta / 120;\n }\n else if (rawEvent.detail) {\n delta = -rawEvent.detail / 3;\n }\n if (delta > 0) {\n this.action(INCREMENT, event);\n }\n else if (delta < 0) {\n this.action(DECREMENT, event);\n }\n this.cancelEvent(event);\n };\n NumericTextBox.prototype.focusHandler = function (event) {\n var _this = this;\n clearTimeout(selectionTimeOut);\n this.focusEventArgs = { event: event, value: this.value, container: this.container };\n this.trigger('focus', this.focusEventArgs);\n if (!this.enabled || this.readonly) {\n return;\n }\n this.isFocused = true;\n removeClass([this.container], ERROR);\n this.prevValue = this.value;\n if ((this.value || this.value === 0)) {\n var formatValue_1 = this.formatNumber();\n this.setElementValue(formatValue_1);\n if (!this.isPrevFocused) {\n if (!Browser.isDevice && Browser.info.version === '11.0') {\n this.element.setSelectionRange(0, formatValue_1.length);\n }\n else {\n var delay = (Browser.isDevice && Browser.isIos) ? 600 : 0;\n selectionTimeOut = setTimeout(function () {\n _this.element.setSelectionRange(0, formatValue_1.length);\n }, delay);\n }\n }\n }\n if (!Browser.isDevice) {\n EventHandler.add(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel, this);\n }\n };\n NumericTextBox.prototype.focusOutHandler = function (event) {\n var _this = this;\n this.blurEventArgs = { event: event, value: this.value, container: this.container };\n this.trigger('blur', this.blurEventArgs);\n if (!this.enabled || this.readonly) {\n return;\n }\n if (this.isPrevFocused) {\n event.preventDefault();\n if (Browser.isDevice) {\n var value_1 = this.element.value;\n this.element.focus();\n this.isPrevFocused = false;\n var ele_1 = this.element;\n setTimeout(function () {\n _this.setElementValue(value_1, ele_1);\n }, 200);\n }\n }\n else {\n this.isFocused = false;\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput);\n if (!Browser.isDevice) {\n EventHandler.remove(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel);\n }\n }\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var focusEvent = document.createEvent('FocusEvent');\n focusEvent.initEvent('focusout', false, true);\n element.dispatchEvent(focusEvent);\n }\n };\n NumericTextBox.prototype.mouseDownOnSpinner = function (event) {\n var _this = this;\n if (this.isFocused) {\n this.isPrevFocused = true;\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var result = this.getElementData(event);\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.add(target, 'mouseleave', this.mouseUpClick, this);\n this.timeOut = setInterval(function () {\n _this.isCalled = true;\n _this.action(action, event);\n }, 150);\n EventHandler.add(document, 'mouseup', this.mouseUpClick, this);\n };\n NumericTextBox.prototype.touchMoveOnSpinner = function (event) {\n var target;\n if (event.type === 'touchmove') {\n var touchEvent = event.touches;\n target = touchEvent.length && document.elementFromPoint(touchEvent[0].pageX, touchEvent[0].pageY);\n }\n else {\n target = document.elementFromPoint(event.clientX, event.clientY);\n }\n if (!(target.classList.contains(SPINICON))) {\n clearInterval(this.timeOut);\n }\n };\n NumericTextBox.prototype.mouseUpOnSpinner = function (event) {\n this.prevValue = this.value;\n if (this.isPrevFocused) {\n this.element.focus();\n if (!Browser.isDevice) {\n this.isPrevFocused = false;\n }\n }\n if (!Browser.isDevice) {\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.remove(target, 'mouseleave', this.mouseUpClick);\n if (!this.isCalled) {\n this.action(action, event);\n }\n this.isCalled = false;\n EventHandler.remove(document, 'mouseup', this.mouseUpClick);\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.getElementData = function (event) {\n if ((event.which && event.which === 3) || (event.button && event.button === 2)\n || !this.enabled || this.readonly) {\n return false;\n }\n clearInterval(this.timeOut);\n return true;\n };\n NumericTextBox.prototype.floatLabelTypeUpdate = function () {\n Input.removeFloating(this.inputWrapper);\n var hiddenInput = this.hiddenInput;\n this.hiddenInput.remove();\n Input.addFloating(this.element, this.floatLabelType, this.placeholder, this.createElement);\n this.container.insertBefore(hiddenInput, this.container.childNodes[1]);\n };\n NumericTextBox.prototype.mouseUpClick = function (event) {\n event.stopPropagation();\n clearInterval(this.timeOut);\n this.isCalled = false;\n if (this.spinUp) {\n EventHandler.remove(this.spinUp, 'mouseleave', this.mouseUpClick);\n }\n if (this.spinDown) {\n EventHandler.remove(this.spinDown, 'mouseleave', this.mouseUpClick);\n }\n };\n /**\n * Increments the NumericTextBox value with the specified step value.\n *\n * @param {number} step - Specifies the value used to increment the NumericTextBox value.\n * if its not given then numeric value will be incremented based on the step property value.\n * @returns {void}\n */\n NumericTextBox.prototype.increment = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, INCREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Decrements the NumericTextBox value with specified step value.\n *\n * @param {number} step - Specifies the value used to decrement the NumericTextBox value.\n * if its not given then numeric value will be decremented based on the step property value.\n * @returns {void}\n */\n NumericTextBox.prototype.decrement = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, DECREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n NumericTextBox.prototype.destroy = function () {\n this.unwireEvents();\n detach(this.hiddenInput);\n if (this.showSpinButton) {\n this.unwireSpinBtnEvents();\n detach(this.spinUp);\n detach(this.spinDown);\n }\n var attrArray = ['aria-labelledby', 'role', 'autocomplete', 'aria-readonly',\n 'aria-disabled', 'autocapitalize', 'spellcheck', 'aria-autocomplete', 'tabindex',\n 'aria-valuemin', 'aria-valuemax', 'aria-valuenow', 'aria-invalid'];\n for (var i = 0; i < attrArray.length; i++) {\n this.element.removeAttribute(attrArray[i]);\n }\n this.element.classList.remove('e-input');\n this.container.insertAdjacentElement('afterend', this.element);\n detach(this.container);\n this.spinUp = null;\n this.spinDown = null;\n this.container = null;\n this.hiddenInput = null;\n this.changeEventArgs = null;\n this.blurEventArgs = null;\n this.focusEventArgs = null;\n this.inputWrapper = null;\n Input.destroy();\n _super.prototype.destroy.call(this);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns */\n /**\n * Returns the value of NumericTextBox with the format applied to the NumericTextBox.\n *\n */\n NumericTextBox.prototype.getText = function () {\n return this.element.value;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns */\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n NumericTextBox.prototype.focusIn = function () {\n if (document.activeElement !== this.element && this.enabled) {\n this.element.focus();\n addClass([this.container], [NUMERIC_FOCUS]);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n NumericTextBox.prototype.focusOut = function () {\n if (document.activeElement === this.element && this.enabled) {\n this.element.blur();\n removeClass([this.container], [NUMERIC_FOCUS]);\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string}\n */\n NumericTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {NumericTextBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {NumericTextBoxModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n NumericTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n this.setElementWidth(newProp.width);\n Input.calculateWidth(this.element, this.container);\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element);\n this.bindClearEvent();\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.container]);\n break;\n case 'readonly':\n Input.setReadonly(newProp.readonly, this.element);\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n else {\n this.element.removeAttribute('aria-readonly');\n }\n break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.updateDataAttribute(true);\n this.checkAttributes(true);\n Input.validateInputType(this.container, this.element);\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.element);\n Input.calculateWidth(this.element, this.container);\n break;\n case 'step':\n this.step = newProp.step;\n this.validateStep();\n break;\n case 'showSpinButton':\n this.updateSpinButton(newProp);\n break;\n case 'showClearButton':\n this.updateClearButton(newProp);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n this.floatLabelTypeUpdate();\n break;\n case 'value':\n this.isDynamicChange = (this.isAngular || this.isVue) && this.preventChange;\n this.updateValue(newProp.value);\n if (this.isDynamicChange) {\n this.preventChange = false;\n this.isDynamicChange = false;\n }\n break;\n case 'min':\n case 'max':\n setValue(prop, getValue(prop, newProp), this);\n this.validateMinMax();\n this.updateValue(this.value);\n break;\n case 'strictMode':\n this.strictMode = newProp.strictMode;\n this.updateValue(this.value);\n this.validateState();\n break;\n case 'locale':\n this.initCultureFunc();\n this.l10n.setLocale(this.locale);\n this.setSpinButton();\n this.updatePlaceholder();\n Input.setPlaceholder(this.placeholder, this.element);\n this.updateValue(this.value);\n break;\n case 'currency':\n {\n var propVal = getValue(prop, newProp);\n this.setProperties({ currencyCode: propVal }, true);\n this.updateCurrency(prop, propVal);\n }\n break;\n case 'currencyCode':\n {\n var propValue = getValue(prop, newProp);\n this.setProperties({ currency: propValue }, true);\n this.updateCurrency('currency', propValue);\n }\n break;\n case 'format':\n setValue(prop, getValue(prop, newProp), this);\n this.initCultureInfo();\n this.updateValue(this.value);\n break;\n case 'decimals':\n this.decimals = newProp.decimals;\n this.updateValue(this.value);\n }\n }\n };\n NumericTextBox.prototype.updateClearButton = function (newProp) {\n Input.setClearButton(newProp.showClearButton, this.element, this.inputWrapper, undefined, this.createElement);\n this.bindClearEvent();\n };\n NumericTextBox.prototype.updateSpinButton = function (newProp) {\n if (newProp.showSpinButton) {\n this.spinBtnCreation();\n }\n else {\n detach(this.spinUp);\n detach(this.spinDown);\n }\n };\n /**\n * Gets the component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n NumericTextBox.prototype.getModuleName = function () {\n return 'numerictextbox';\n };\n __decorate([\n Property('')\n ], NumericTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(-(Number.MAX_VALUE))\n ], NumericTextBox.prototype, \"min\", void 0);\n __decorate([\n Property(Number.MAX_VALUE)\n ], NumericTextBox.prototype, \"max\", void 0);\n __decorate([\n Property(1)\n ], NumericTextBox.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property({})\n ], NumericTextBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"showSpinButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('n2')\n ], NumericTextBox.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"decimals\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currency\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currencyCode\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"strictMode\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"validateDecimalOnType\", void 0);\n __decorate([\n Property('Never')\n ], NumericTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"blur\", void 0);\n NumericTextBox = __decorate([\n NotifyPropertyChanges\n ], NumericTextBox);\n return NumericTextBox;\n}(Component));\nexport { NumericTextBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\nimport { setStyleAttribute, addClass, removeClass, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { calculatePosition, calculateRelativeBasedPosition } from '../common/position';\nimport { Animation, Property, Event, Component } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { flip, fit, isCollide } from '../common/collision';\n/**\n * Specifies the offset position values.\n */\nvar PositionData = /** @class */ (function (_super) {\n __extends(PositionData, _super);\n function PositionData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('left')\n ], PositionData.prototype, \"X\", void 0);\n __decorate([\n Property('top')\n ], PositionData.prototype, \"Y\", void 0);\n return PositionData;\n}(ChildProperty));\nexport { PositionData };\n// don't use space in classNames\nvar CLASSNAMES = {\n ROOT: 'e-popup',\n RTL: 'e-rtl',\n OPEN: 'e-popup-open',\n CLOSE: 'e-popup-close'\n};\n/**\n * Represents the Popup Component\n * ```html\n *
\n *
Popup Content
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Popup = /** @class */ (function (_super) {\n __extends(Popup, _super);\n function Popup(element, options) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Called internally if any of the property value changed.\n *\n * @param {PopupModel} newProp - specifies the new property\n * @param {PopupModel} oldProp - specifies the old property\n * @private\n * @returns {void}\n */\n Popup.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n setStyleAttribute(this.element, { 'width': formatUnit(newProp.width) });\n break;\n case 'height':\n setStyleAttribute(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'zIndex':\n setStyleAttribute(this.element, { 'zIndex': newProp.zIndex });\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'position':\n case 'relateTo':\n this.refreshPosition();\n break;\n case 'offsetX':\n // eslint-disable-next-line\n var x = newProp.offsetX - oldProp.offsetX;\n this.element.style.left = (parseInt(this.element.style.left, 10) + (x)).toString() + 'px';\n break;\n case 'offsetY':\n // eslint-disable-next-line\n var y = newProp.offsetY - oldProp.offsetY;\n this.element.style.top = (parseInt(this.element.style.top, 10) + (y)).toString() + 'px';\n break;\n case 'content':\n this.setContent();\n break;\n case 'actionOnScroll':\n if (newProp.actionOnScroll !== 'none') {\n this.wireScrollEvents();\n }\n else {\n this.unwireScrollEvents();\n }\n break;\n }\n }\n };\n /**\n * gets the Component module name.\n *\n * @returns {void}\n * @private\n */\n Popup.prototype.getModuleName = function () {\n return 'popup';\n };\n /**\n * To resolve if any collision occurs.\n *\n * @returns {void}\n */\n Popup.prototype.resolveCollision = function () {\n this.checkCollision();\n };\n /**\n * gets the persisted state properties of the Component.\n *\n * @returns {void}\n */\n Popup.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To destroy the control.\n *\n * @returns {void}\n */\n Popup.prototype.destroy = function () {\n if (this.element.classList.contains('e-popup-open')) {\n this.unwireEvents();\n }\n this.element.classList.remove(CLASSNAMES.ROOT, CLASSNAMES.RTL, CLASSNAMES.OPEN, CLASSNAMES.CLOSE);\n this.content = null;\n this.relateTo = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n Popup.prototype.render = function () {\n this.element.classList.add(CLASSNAMES.ROOT);\n var styles = {};\n if (this.zIndex !== 1000) {\n styles.zIndex = this.zIndex;\n }\n if (this.width !== 'auto') {\n styles.width = formatUnit(this.width);\n }\n if (this.height !== 'auto') {\n styles.height = formatUnit(this.height);\n }\n setStyleAttribute(this.element, styles);\n this.fixedParent = false;\n this.setEnableRtl();\n this.setContent();\n };\n Popup.prototype.wireEvents = function () {\n if (Browser.isDevice) {\n EventHandler.add(window, 'orientationchange', this.orientationOnChange, this);\n }\n if (this.actionOnScroll !== 'none') {\n this.wireScrollEvents();\n }\n };\n Popup.prototype.wireScrollEvents = function () {\n if (this.getRelateToElement()) {\n for (var _i = 0, _a = this.getScrollableParent(this.getRelateToElement()); _i < _a.length; _i++) {\n var parent_1 = _a[_i];\n EventHandler.add(parent_1, 'scroll', this.scrollRefresh, this);\n }\n }\n };\n Popup.prototype.unwireEvents = function () {\n if (Browser.isDevice) {\n EventHandler.remove(window, 'orientationchange', this.orientationOnChange);\n }\n if (this.actionOnScroll !== 'none') {\n this.unwireScrollEvents();\n }\n };\n Popup.prototype.unwireScrollEvents = function () {\n if (this.getRelateToElement()) {\n for (var _i = 0, _a = this.getScrollableParent(this.getRelateToElement()); _i < _a.length; _i++) {\n var parent_2 = _a[_i];\n EventHandler.remove(parent_2, 'scroll', this.scrollRefresh);\n }\n }\n };\n Popup.prototype.getRelateToElement = function () {\n var relateToElement = this.relateTo === '' || isNullOrUndefined(this.relateTo) ?\n document.body : this.relateTo;\n this.setProperties({ relateTo: relateToElement }, true);\n return ((typeof this.relateTo) === 'string') ?\n document.querySelector(this.relateTo) : this.relateTo;\n };\n Popup.prototype.scrollRefresh = function (e) {\n if (this.actionOnScroll === 'reposition') {\n if (!isNullOrUndefined(this.element) && !(this.element.offsetParent === e.target ||\n (this.element.offsetParent && this.element.offsetParent.tagName === 'BODY' &&\n e.target.parentElement == null))) {\n this.refreshPosition();\n }\n }\n else if (this.actionOnScroll === 'hide') {\n this.hide();\n }\n if (this.actionOnScroll !== 'none') {\n if (this.getRelateToElement()) {\n var targetVisible = this.isElementOnViewport(this.getRelateToElement(), e.target);\n if (!targetVisible && !this.targetInvisibleStatus) {\n this.trigger('targetExitViewport');\n this.targetInvisibleStatus = true;\n }\n else if (targetVisible) {\n this.targetInvisibleStatus = false;\n }\n }\n }\n };\n /**\n * This method is to get the element visibility on viewport when scroll\n * the page. This method will returns true even though 1 px of element\n * part is in visible.\n *\n * @param {HTMLElement} relateToElement - specifies the element\n * @param {HTMLElement} scrollElement - specifies the scroll element\n * @returns {boolean} - retruns the boolean\n */\n // eslint-disable-next-line\n Popup.prototype.isElementOnViewport = function (relateToElement, scrollElement) {\n var scrollParents = this.getScrollableParent(relateToElement);\n for (var parent_3 = 0; parent_3 < scrollParents.length; parent_3++) {\n if (this.isElementVisible(relateToElement, scrollParents[parent_3])) {\n continue;\n }\n else {\n return false;\n }\n }\n return true;\n };\n Popup.prototype.isElementVisible = function (relateToElement, scrollElement) {\n var rect = this.checkGetBoundingClientRect(relateToElement);\n if (!rect.height || !rect.width) {\n return false;\n }\n if (!isNullOrUndefined(this.checkGetBoundingClientRect(scrollElement))) {\n var parent_4 = scrollElement.getBoundingClientRect();\n return !(rect.bottom < parent_4.top) &&\n (!(rect.bottom > parent_4.bottom) &&\n (!(rect.right > parent_4.right) &&\n !(rect.left < parent_4.left)));\n }\n else {\n var win = window;\n var windowView = {\n top: win.scrollY,\n left: win.scrollX,\n right: win.scrollX + win.outerWidth,\n bottom: win.scrollY + win.outerHeight\n };\n var off = calculatePosition(relateToElement);\n var ele = {\n top: off.top,\n left: off.left,\n right: off.left + rect.width,\n bottom: off.top + rect.height\n };\n var elementView = {\n top: windowView.bottom - ele.top,\n left: windowView.right - ele.left,\n bottom: ele.bottom - windowView.top,\n right: ele.right - windowView.left\n };\n return elementView.top > 0\n && elementView.left > 0\n && elementView.right > 0\n && elementView.bottom > 0;\n }\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n Popup.prototype.preRender = function () {\n //There is no event handler\n };\n Popup.prototype.setEnableRtl = function () {\n this.reposition();\n // eslint-disable-next-line\n this.enableRtl ? this.element.classList.add(CLASSNAMES.RTL) : this.element.classList.remove(CLASSNAMES.RTL);\n };\n Popup.prototype.setContent = function () {\n if (!isNullOrUndefined(this.content)) {\n this.element.innerHTML = '';\n if (typeof (this.content) === 'string') {\n this.element.textContent = this.content;\n }\n else {\n var relateToElem = this.getRelateToElement();\n // eslint-disable-next-line\n var props = this.content.props;\n if (!relateToElem.classList.contains('e-dropdown-btn') || isNullOrUndefined(props)) {\n this.element.appendChild(this.content);\n }\n }\n }\n };\n Popup.prototype.orientationOnChange = function () {\n var _this = this;\n setTimeout(function () {\n _this.refreshPosition();\n }, 200);\n };\n // eslint-disable-next-line\n /**\n * Based on the `relative` element and `offset` values, `Popup` element position will refreshed.\n *\n * @returns {void}\n */\n Popup.prototype.refreshPosition = function (target, collision) {\n if (!isNullOrUndefined(target)) {\n this.checkFixedParent(target);\n }\n this.reposition();\n if (!collision) {\n this.checkCollision();\n }\n };\n Popup.prototype.reposition = function () {\n var pos;\n var position;\n var relateToElement = this.getRelateToElement();\n if (typeof this.position.X === 'number' && typeof this.position.Y === 'number') {\n pos = { left: this.position.X, top: this.position.Y };\n }\n else if ((typeof this.position.X === 'string' && typeof this.position.Y === 'number') ||\n (typeof this.position.X === 'number' && typeof this.position.Y === 'string')) {\n var parentDisplay = void 0;\n var display = this.element.style.display;\n this.element.style.display = 'block';\n if (this.element.classList.contains('e-dlg-modal')) {\n parentDisplay = this.element.parentElement.style.display;\n this.element.parentElement.style.display = 'block';\n }\n position = this.getAnchorPosition(relateToElement, this.element, this.position, this.offsetX, this.offsetY);\n if (typeof this.position.X === 'string') {\n pos = { left: position.left, top: this.position.Y };\n }\n else {\n pos = { left: this.position.X, top: position.top };\n }\n this.element.style.display = display;\n if (this.element.classList.contains('e-dlg-modal')) {\n this.element.parentElement.style.display = parentDisplay;\n }\n }\n else if (relateToElement) {\n var height = this.element.clientHeight;\n var display = this.element.style.display;\n this.element.style.display = 'block';\n pos = this.getAnchorPosition(relateToElement, this.element, this.position, this.offsetX, this.offsetY, height);\n this.element.style.display = display;\n }\n else {\n pos = { left: 0, top: 0 };\n }\n if (!isNullOrUndefined(pos)) {\n this.element.style.left = pos.left + 'px';\n this.element.style.top = pos.top + 'px';\n }\n };\n Popup.prototype.checkGetBoundingClientRect = function (ele) {\n var eleRect;\n try {\n eleRect = ele.getBoundingClientRect();\n return eleRect;\n }\n catch (error) {\n return null;\n }\n };\n Popup.prototype.getAnchorPosition = function (anchorEle, ele, position, offsetX, offsetY, height) {\n if (height === void 0) { height = 0; }\n var eleRect = this.checkGetBoundingClientRect(ele);\n var anchorRect = this.checkGetBoundingClientRect(anchorEle);\n if (isNullOrUndefined(eleRect) || isNullOrUndefined(anchorRect)) {\n return null;\n }\n var anchor = anchorEle;\n var anchorPos = { left: 0, top: 0 };\n if (ele.offsetParent && ele.offsetParent.tagName === 'BODY' && anchorEle.tagName === 'BODY') {\n anchorPos = calculatePosition(anchorEle);\n }\n else {\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName !== 'BODY')) {\n ele = ele.parentElement;\n }\n anchorPos = calculateRelativeBasedPosition(anchor, ele);\n }\n switch (position.X) {\n default:\n case 'left':\n break;\n case 'center':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.left += (window.innerWidth / 2 - eleRect.width / 2);\n }\n else if (this.targetType === 'container') {\n anchorPos.left += (anchorRect.width / 2 - eleRect.width / 2);\n }\n else {\n anchorPos.left += (anchorRect.width / 2);\n }\n break;\n case 'right':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.left += (window.innerWidth - eleRect.width);\n }\n else if (this.targetType === 'container') {\n anchorPos.left += (anchorRect.width - eleRect.width);\n }\n else {\n anchorPos.left += (anchorRect.width);\n }\n break;\n }\n switch (position.Y) {\n default:\n case 'top':\n break;\n case 'center':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.top += (window.innerHeight / 2 - eleRect.height / 2);\n }\n else if (this.targetType === 'container') {\n anchorPos.top += (anchorRect.height / 2 - eleRect.height / 2);\n }\n else {\n anchorPos.top += (anchorRect.height / 2);\n }\n break;\n case 'bottom':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.top += (window.innerHeight - eleRect.height);\n }\n else if (this.targetType === 'container' && !ele.classList.contains('e-dialog')) {\n anchorPos.top += (anchorRect.height - eleRect.height);\n }\n else if (this.targetType === 'container' && ele.classList.contains('e-dialog')) {\n anchorPos.top += (anchorRect.height - height);\n }\n else {\n anchorPos.top += (anchorRect.height);\n }\n break;\n }\n anchorPos.left += offsetX;\n anchorPos.top += offsetY;\n return anchorPos;\n };\n Popup.prototype.callFlip = function (param) {\n var relateToElement = this.getRelateToElement();\n flip(this.element, relateToElement, this.offsetX, this.offsetY, this.position.X, this.position.Y, this.viewPortElement, param, this.fixedParent);\n };\n Popup.prototype.callFit = function (param) {\n if (isCollide(this.element, this.viewPortElement).length !== 0) {\n if (isNullOrUndefined(this.viewPortElement)) {\n var data = fit(this.element, this.viewPortElement, param);\n if (param.X) {\n this.element.style.left = data.left + 'px';\n }\n if (param.Y) {\n this.element.style.top = data.top + 'px';\n }\n }\n else {\n var elementRect = this.checkGetBoundingClientRect(this.element);\n var viewPortRect = this.checkGetBoundingClientRect(this.viewPortElement);\n if (isNullOrUndefined(elementRect) || isNullOrUndefined(viewPortRect)) {\n return null;\n }\n if (param && param.Y === true) {\n if (viewPortRect.top > elementRect.top) {\n this.element.style.top = '0px';\n }\n else if (viewPortRect.bottom < elementRect.bottom) {\n this.element.style.top = parseInt(this.element.style.top, 10) - (elementRect.bottom - viewPortRect.bottom) + 'px';\n }\n }\n if (param && param.X === true) {\n if (viewPortRect.right < elementRect.right) {\n this.element.style.left = parseInt(this.element.style.left, 10) - (elementRect.right - viewPortRect.right) + 'px';\n }\n else if (viewPortRect.left > elementRect.left) {\n this.element.style.left = parseInt(this.element.style.left, 10) + (viewPortRect.left - elementRect.left) + 'px';\n }\n }\n }\n }\n };\n Popup.prototype.checkCollision = function () {\n var horz = this.collision.X;\n var vert = this.collision.Y;\n if (horz === 'none' && vert === 'none') {\n return;\n }\n if (horz === 'flip' && vert === 'flip') {\n this.callFlip({ X: true, Y: true });\n }\n else if (horz === 'fit' && vert === 'fit') {\n this.callFit({ X: true, Y: true });\n }\n else {\n if (horz === 'flip') {\n this.callFlip({ X: true, Y: false });\n }\n else if (vert === 'flip') {\n this.callFlip({ Y: true, X: false });\n }\n if (horz === 'fit') {\n this.callFit({ X: true, Y: false });\n }\n else if (vert === 'fit') {\n this.callFit({ X: false, Y: true });\n }\n }\n };\n /**\n * Shows the popup element from screen.\n *\n * @returns {void}\n * @param {AnimationModel} animationOptions - specifies the model\n * @param { HTMLElement } relativeElement - To calculate the zIndex value dynamically.\n */\n Popup.prototype.show = function (animationOptions, relativeElement) {\n var _this = this;\n var relateToElement = this.getRelateToElement();\n if (relateToElement.classList.contains('e-filemanager')) {\n this.fmDialogContainer = this.element.getElementsByClassName('e-file-select-wrap')[0];\n }\n this.wireEvents();\n if (!isNullOrUndefined(this.fmDialogContainer) && Browser.isIos) {\n this.fmDialogContainer.style.display = 'block';\n }\n if (this.zIndex === 1000 || !isNullOrUndefined(relativeElement)) {\n var zIndexElement = (isNullOrUndefined(relativeElement)) ? this.element : relativeElement;\n this.zIndex = getZindexPartial(zIndexElement);\n setStyleAttribute(this.element, { 'zIndex': this.zIndex });\n }\n animationOptions = (!isNullOrUndefined(animationOptions) && typeof animationOptions === 'object') ?\n animationOptions : this.showAnimation;\n if (this.collision.X !== 'none' || this.collision.Y !== 'none') {\n removeClass([this.element], CLASSNAMES.CLOSE);\n addClass([this.element], CLASSNAMES.OPEN);\n this.checkCollision();\n removeClass([this.element], CLASSNAMES.OPEN);\n addClass([this.element], CLASSNAMES.CLOSE);\n }\n if (!isNullOrUndefined(animationOptions)) {\n animationOptions.begin = function () {\n if (!_this.isDestroyed) {\n removeClass([_this.element], CLASSNAMES.CLOSE);\n addClass([_this.element], CLASSNAMES.OPEN);\n }\n };\n animationOptions.end = function () {\n if (!_this.isDestroyed) {\n _this.trigger('open');\n }\n };\n new Animation(animationOptions).animate(this.element);\n }\n else {\n removeClass([this.element], CLASSNAMES.CLOSE);\n addClass([this.element], CLASSNAMES.OPEN);\n this.trigger('open');\n }\n };\n /**\n * Hides the popup element from screen.\n *\n * @param {AnimationModel} animationOptions - To give the animation options.\n * @returns {void}\n */\n Popup.prototype.hide = function (animationOptions) {\n var _this = this;\n animationOptions = (!isNullOrUndefined(animationOptions) && typeof animationOptions === 'object') ?\n animationOptions : this.hideAnimation;\n if (!isNullOrUndefined(animationOptions)) {\n animationOptions.end = function () {\n if (!_this.isDestroyed) {\n removeClass([_this.element], CLASSNAMES.OPEN);\n addClass([_this.element], CLASSNAMES.CLOSE);\n _this.trigger('close');\n }\n };\n new Animation(animationOptions).animate(this.element);\n }\n else {\n removeClass([this.element], CLASSNAMES.OPEN);\n addClass([this.element], CLASSNAMES.CLOSE);\n this.trigger('close');\n }\n this.unwireEvents();\n };\n /**\n * Gets scrollable parent elements for the given element.\n *\n * @returns {void}\n * @param { HTMLElement } element - Specify the element to get the scrollable parents of it.\n */\n Popup.prototype.getScrollableParent = function (element) {\n this.checkFixedParent(element);\n return getScrollableParent(element, this.fixedParent);\n };\n Popup.prototype.checkFixedParent = function (element) {\n var parent = element.parentElement;\n while (parent && parent.tagName !== 'HTML') {\n var parentStyle = getComputedStyle(parent);\n if (parentStyle.position === 'fixed' && !isNullOrUndefined(this.element) && this.element.offsetParent &&\n this.element.offsetParent.tagName === 'BODY' && getComputedStyle(this.element.offsetParent).overflow !== 'hidden') {\n this.element.style.top = window.scrollY > parseInt(this.element.style.top, 10) ?\n formatUnit(window.scrollY - parseInt(this.element.style.top, 10))\n : formatUnit(parseInt(this.element.style.top, 10) - window.scrollY);\n this.element.style.position = 'fixed';\n this.fixedParent = true;\n }\n parent = parent.parentElement;\n if (!isNullOrUndefined(this.element) && isNullOrUndefined(this.element.offsetParent) && parentStyle.position === 'fixed'\n && this.element.style.position === 'fixed') {\n this.fixedParent = true;\n }\n }\n };\n __decorate([\n Property('auto')\n ], Popup.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], Popup.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"content\", void 0);\n __decorate([\n Property('container')\n ], Popup.prototype, \"targetType\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"viewPortElement\", void 0);\n __decorate([\n Property({ X: 'none', Y: 'none' })\n ], Popup.prototype, \"collision\", void 0);\n __decorate([\n Property('')\n ], Popup.prototype, \"relateTo\", void 0);\n __decorate([\n Complex({}, PositionData)\n ], Popup.prototype, \"position\", void 0);\n __decorate([\n Property(0)\n ], Popup.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Popup.prototype, \"offsetY\", void 0);\n __decorate([\n Property(1000)\n ], Popup.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], Popup.prototype, \"enableRtl\", void 0);\n __decorate([\n Property('reposition')\n ], Popup.prototype, \"actionOnScroll\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"showAnimation\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"hideAnimation\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"targetExitViewport\", void 0);\n Popup = __decorate([\n NotifyPropertyChanges\n ], Popup);\n return Popup;\n}(Component));\nexport { Popup };\n/**\n * Gets scrollable parent elements for the given element.\n *\n * @param { HTMLElement } element - Specify the element to get the scrollable parents of it.\n * @param {boolean} fixedParent - specifies the parent element\n * @private\n * @returns {void}\n */\nexport function getScrollableParent(element, fixedParent) {\n var eleStyle = getComputedStyle(element);\n var scrollParents = [];\n var overflowRegex = /(auto|scroll)/;\n var parent = element.parentElement;\n while (parent && parent.tagName !== 'HTML') {\n var parentStyle = getComputedStyle(parent);\n if (!(eleStyle.position === 'absolute' && parentStyle.position === 'static')\n && overflowRegex.test(parentStyle.overflow + parentStyle.overflowY + parentStyle.overflowX)) {\n scrollParents.push(parent);\n }\n parent = parent.parentElement;\n }\n if (!fixedParent) {\n scrollParents.push(document);\n }\n return scrollParents;\n}\n/**\n * Gets the maximum z-index of the given element.\n *\n * @returns {void}\n * @param { HTMLElement } element - Specify the element to get the maximum z-index of it.\n * @private\n */\nexport function getZindexPartial(element) {\n // upto body traversal\n var parent = element.parentElement;\n var parentZindex = [];\n while (parent) {\n if (parent.tagName !== 'BODY') {\n var index = document.defaultView.getComputedStyle(parent, null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(parent, null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n parentZindex.push(index);\n }\n parent = parent.parentElement;\n }\n else {\n break;\n }\n }\n var childrenZindex = [];\n for (var i = 0; i < document.body.children.length; i++) {\n if (!element.isEqualNode(document.body.children[i])) {\n var index = document.defaultView.getComputedStyle(document.body.children[i], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(document.body.children[i], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n childrenZindex.push(index);\n }\n }\n }\n childrenZindex.push('999');\n var siblingsZindex = [];\n if (!isNullOrUndefined(element.parentElement) && element.parentElement.tagName !== 'BODY') {\n var childNodes = [].slice.call(element.parentElement.children);\n for (var i = 0; i < childNodes.length; i++) {\n if (!element.isEqualNode(childNodes[i])) {\n var index = document.defaultView.getComputedStyle(childNodes[i], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(childNodes[i], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n siblingsZindex.push(index);\n }\n }\n }\n }\n var finalValue = parentZindex.concat(childrenZindex, siblingsZindex);\n // eslint-disable-next-line\n var currentZindexValue = Math.max.apply(Math, finalValue) + 1;\n return currentZindexValue > 2147483647 ? 2147483647 : currentZindexValue;\n}\n/**\n * Gets the maximum z-index of the page.\n *\n * @returns {void}\n * @param { HTMLElement } tagName - Specify the tagName to get the maximum z-index of it.\n * @private\n */\nexport function getMaxZindex(tagName) {\n if (tagName === void 0) { tagName = ['*']; }\n var maxZindex = [];\n for (var i = 0; i < tagName.length; i++) {\n var elements = document.getElementsByTagName(tagName[i]);\n for (var i_1 = 0; i_1 < elements.length; i_1++) {\n var index = document.defaultView.getComputedStyle(elements[i_1], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(elements[i_1], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n maxZindex.push(index);\n }\n }\n }\n // eslint-disable-next-line\n var currentZindexValue = Math.max.apply(Math, maxZindex) + 1;\n return currentZindexValue > 2147483647 ? 2147483647 : currentZindexValue;\n}\n","/**\n * Resize library\n */\nimport { isNullOrUndefined as isNOU, createElement, EventHandler, detach, Browser } from '@syncfusion/ej2-base';\n/* eslint-disable */\nvar elementClass = ['north-west', 'north', 'north-east', 'west', 'east', 'south-west', 'south', 'south-east'];\nvar RESIZE_HANDLER = 'e-resize-handle';\nvar FOCUSED_HANDLER = 'e-focused-handle';\nvar DIALOG_RESIZABLE = 'e-dlg-resizable';\nvar RESTRICT_LEFT = ['e-restrict-left'];\nvar RESIZE_WITHIN_VIEWPORT = 'e-resize-viewport';\nvar dialogBorderResize = ['north', 'west', 'east', 'south'];\nvar targetElement;\nvar selectedHandler;\nvar originalWidth = 0;\nvar originalHeight = 0;\nvar originalX = 0;\nvar originalY = 0;\nvar originalMouseX = 0;\nvar originalMouseY = 0;\nvar minHeight;\nvar maxHeight;\nvar minWidth;\nvar maxWidth;\nvar containerElement;\nvar resizeStart = null;\nvar resize = null;\nvar resizeEnd = null;\n/* eslint-enable */\nvar resizeWestWidth;\nvar setLeft = true;\nvar previousWidth = 0;\nvar setWidth = true;\n// eslint-disable-next-line\nvar proxy;\n/**\n *\n * @param {ResizeArgs} args - specifies the resize args\n * @returns {void}\n */\nexport function createResize(args) {\n resizeStart = args.resizeBegin;\n resize = args.resizing;\n resizeEnd = args.resizeComplete;\n targetElement = getDOMElement(args.element);\n containerElement = getDOMElement(args.boundary);\n var directions = args.direction.split(' ');\n for (var i = 0; i < directions.length; i++) {\n if (dialogBorderResize.indexOf(directions[i]) >= 0 && directions[i]) {\n setBorderResizeElm(directions[i]);\n }\n else if (directions[i].trim() !== '') {\n var resizeHandler = createElement('div', { className: 'e-icons ' + RESIZE_HANDLER + ' ' + 'e-' + directions[i] });\n targetElement.appendChild(resizeHandler);\n }\n }\n minHeight = args.minHeight;\n minWidth = args.minWidth;\n maxWidth = args.maxWidth;\n maxHeight = args.maxHeight;\n if (args.proxy && args.proxy.element && args.proxy.element.classList.contains('e-dialog')) {\n wireEvents(args.proxy);\n }\n else {\n wireEvents();\n }\n}\n/**\n *\n * @param {string} direction - specifies the string\n * @returns {void}\n */\nfunction setBorderResizeElm(direction) {\n calculateValues();\n var borderBottom = createElement('span', {\n attrs: {\n 'unselectable': 'on', 'contenteditable': 'false'\n }\n });\n borderBottom.setAttribute('class', 'e-dialog-border-resize e-' + direction);\n if (direction === 'south') {\n borderBottom.style.height = '2px';\n borderBottom.style.width = '100%';\n borderBottom.style.bottom = '0px';\n borderBottom.style.left = '0px';\n }\n if (direction === 'north') {\n borderBottom.style.height = '2px';\n borderBottom.style.width = '100%';\n borderBottom.style.top = '0px';\n borderBottom.style.left = '0px';\n }\n if (direction === 'east') {\n borderBottom.style.height = '100%';\n borderBottom.style.width = '2px';\n borderBottom.style.right = '0px';\n borderBottom.style.top = '0px';\n }\n if (direction === 'west') {\n borderBottom.style.height = '100%';\n borderBottom.style.width = '2px';\n borderBottom.style.left = '0px';\n borderBottom.style.top = '0px';\n }\n targetElement.appendChild(borderBottom);\n}\n/**\n *\n * @param {string} element - specifies the element\n * @returns {HTMLElement} - returns the element\n */\nfunction getDOMElement(element) {\n var domElement;\n if (!isNOU(element)) {\n if (typeof (element) === 'string') {\n domElement = document.querySelector(element);\n }\n else {\n domElement = element;\n }\n }\n return domElement;\n}\n// eslint-disable-next-line\nfunction wireEvents(args) {\n if (isNOU(args)) {\n args = this;\n }\n var resizers = targetElement.querySelectorAll('.' + RESIZE_HANDLER);\n for (var i = 0; i < resizers.length; i++) {\n selectedHandler = resizers[i];\n EventHandler.add(selectedHandler, 'mousedown', onMouseDown, args);\n var eventName = (Browser.info.name === 'msie') ? 'pointerdown' : 'touchstart';\n EventHandler.add(selectedHandler, eventName, onTouchStart, args);\n }\n var borderResizers = targetElement.querySelectorAll('.e-dialog-border-resize');\n if (!isNOU(borderResizers)) {\n for (var i = 0; i < borderResizers.length; i++) {\n selectedHandler = borderResizers[i];\n EventHandler.add(selectedHandler, 'mousedown', onMouseDown, args);\n var eventName = (Browser.info.name === 'msie') ? 'pointerdown' : 'touchstart';\n EventHandler.add(selectedHandler, eventName, onTouchStart, args);\n }\n }\n}\n/* istanbul ignore next */\n/**\n *\n * @param {string} e - specifies the string\n * @returns {string} - returns the string\n */\nfunction getEventType(e) {\n return (e.indexOf('mouse') > -1) ? 'mouse' : 'touch';\n}\n/* istanbul ignore next */\n/**\n *\n * @param {MouseEvent} e - specifies the mouse event\n * @returns {void}\n */\nfunction onMouseDown(e) {\n e.preventDefault();\n targetElement = e.target.parentElement;\n calculateValues();\n originalMouseX = e.pageX;\n originalMouseY = e.pageY;\n e.target.classList.add(FOCUSED_HANDLER);\n if (!isNOU(resizeStart)) {\n proxy = this;\n if (resizeStart(e, proxy) === true) {\n return;\n }\n }\n if (this.targetEle && targetElement && targetElement.querySelector('.' + DIALOG_RESIZABLE)) {\n containerElement = this.target === ('body' || 'document.body' || document.body) ? null : this.targetEle;\n maxWidth = this.targetEle.clientWidth;\n maxHeight = this.targetEle.clientHeight;\n }\n var target = (isNOU(containerElement)) ? document : containerElement;\n EventHandler.add(target, 'mousemove', onMouseMove, this);\n EventHandler.add(document, 'mouseup', onMouseUp, this);\n for (var i = 0; i < RESTRICT_LEFT.length; i++) {\n if (targetElement.classList.contains(RESTRICT_LEFT[i])) {\n setLeft = false;\n }\n else {\n setLeft = true;\n }\n }\n}\n/* istanbul ignore next */\n/**\n *\n * @param {MouseEvent} e - specifies the event\n * @returns {void}\n */\nfunction onMouseUp(e) {\n var touchMoveEvent = (Browser.info.name === 'msie') ? 'pointermove' : 'touchmove';\n var touchEndEvent = (Browser.info.name === 'msie') ? 'pointerup' : 'touchend';\n var target = (isNOU(containerElement)) ? document : containerElement;\n var eventName = (Browser.info.name === 'msie') ? 'pointerdown' : 'touchstart';\n EventHandler.remove(target, 'mousemove', onMouseMove);\n EventHandler.remove(target, touchMoveEvent, onMouseMove);\n EventHandler.remove(target, eventName, onMouseMove);\n if (!isNOU(document.body.querySelector('.' + FOCUSED_HANDLER))) {\n document.body.querySelector('.' + FOCUSED_HANDLER).classList.remove(FOCUSED_HANDLER);\n }\n if (!isNOU(resizeEnd)) {\n proxy = this;\n resizeEnd(e, proxy);\n }\n EventHandler.remove(document, 'mouseup', onMouseUp);\n EventHandler.remove(document, touchEndEvent, onMouseUp);\n}\n/* istanbul ignore next */\n/**\n * @returns {void}\n */\nfunction calculateValues() {\n originalWidth = parseFloat(getComputedStyle(targetElement, null).getPropertyValue('width').replace('px', ''));\n originalHeight = parseFloat(getComputedStyle(targetElement, null).getPropertyValue('height').replace('px', ''));\n originalX = targetElement.getBoundingClientRect().left;\n originalY = targetElement.getBoundingClientRect().top;\n}\n/* istanbul ignore next */\n/**\n *\n * @param {MouseEvent} e - specifies the event\n * @returns {void}\n */\nfunction onTouchStart(e) {\n targetElement = e.target.parentElement;\n calculateValues();\n var dialogResizeElement = targetElement.classList.contains('e-dialog');\n if ((e.target.classList.contains(RESIZE_HANDLER) || e.target.classList.contains('e-dialog-border-resize')) && dialogResizeElement) {\n e.target.classList.add(FOCUSED_HANDLER);\n }\n var coordinates = e.touches ? e.changedTouches[0] : e;\n originalMouseX = coordinates.pageX;\n originalMouseY = coordinates.pageY;\n if (!isNOU(resizeStart)) {\n proxy = this;\n if (resizeStart(e, proxy) === true) {\n return;\n }\n }\n var touchMoveEvent = (Browser.info.name === 'msie') ? 'pointermove' : 'touchmove';\n var touchEndEvent = (Browser.info.name === 'msie') ? 'pointerup' : 'touchend';\n var target = (isNOU(containerElement)) ? document : containerElement;\n EventHandler.add(target, touchMoveEvent, onMouseMove, this);\n EventHandler.add(document, touchEndEvent, onMouseUp, this);\n}\n/* istanbul ignore next */\n/**\n *\n * @param {MouseEvent} e - specifies the event\n * @returns {void}\n */\nfunction onMouseMove(e) {\n if (e.target.classList.contains(RESIZE_HANDLER) && e.target.classList.contains(FOCUSED_HANDLER)) {\n selectedHandler = e.target;\n }\n else if (!isNOU(document.body.querySelector('.' + FOCUSED_HANDLER))) {\n selectedHandler = document.body.querySelector('.' + FOCUSED_HANDLER);\n }\n if (!isNOU(selectedHandler)) {\n var resizeTowards = '';\n for (var i = 0; i < elementClass.length; i++) {\n if (selectedHandler.classList.contains('e-' + elementClass[i])) {\n resizeTowards = elementClass[i];\n }\n }\n if (!isNOU(resize)) {\n proxy = this;\n resize(e, proxy);\n }\n switch (resizeTowards) {\n case 'south':\n resizeSouth(e);\n break;\n case 'north':\n resizeNorth(e);\n break;\n case 'west':\n resizeWest(e);\n break;\n case 'east':\n resizeEast(e);\n break;\n case 'south-east':\n resizeSouth(e);\n resizeEast(e);\n break;\n case 'south-west':\n resizeSouth(e);\n resizeWest(e);\n break;\n case 'north-east':\n resizeNorth(e);\n resizeEast(e);\n break;\n case 'north-west':\n resizeNorth(e);\n resizeWest(e);\n break;\n default: break;\n }\n }\n}\n/* istanbul ignore next */\n/**\n *\n * @param {HTMLElement} element - specifies the eleemnt\n * @returns {ClientRect} - returns the client\n */\nfunction getClientRectValues(element) {\n return element.getBoundingClientRect();\n}\n/* istanbul ignore next */\n// eslint-disable-next-line\nfunction resizeSouth(e) {\n var documentHeight = document.documentElement.clientHeight;\n var calculateValue = false;\n var coordinates = e.touches ? e.changedTouches[0] : e;\n var currentpageY = coordinates.pageY;\n var targetRectValues = getClientRectValues(targetElement);\n var containerRectValues;\n if (!isNOU(containerElement)) {\n containerRectValues = getClientRectValues(containerElement);\n }\n if (!isNOU(containerElement)) {\n calculateValue = true;\n }\n else if (isNOU(containerElement) && ((documentHeight - currentpageY) >= 0 || (targetRectValues.top < 0))) {\n calculateValue = true;\n }\n var calculatedHeight = originalHeight + (currentpageY - originalMouseY);\n calculatedHeight = (calculatedHeight > minHeight) ? calculatedHeight : minHeight;\n var containerTop = 0;\n if (!isNOU(containerElement)) {\n containerTop = containerRectValues.top;\n }\n var borderValue = isNOU(containerElement) ? 0 : containerElement.offsetHeight - containerElement.clientHeight;\n var topWithoutborder = (targetRectValues.top - containerTop) - (borderValue / 2);\n topWithoutborder = (topWithoutborder < 0) ? 0 : topWithoutborder;\n if (targetRectValues.top > 0 && (topWithoutborder + calculatedHeight) > maxHeight) {\n calculateValue = false;\n if (targetElement.classList.contains(RESIZE_WITHIN_VIEWPORT)) {\n return;\n }\n targetElement.style.height = (maxHeight - parseInt(topWithoutborder.toString(), 10)) + 'px';\n return;\n }\n var targetTop = 0;\n if (calculateValue) {\n if (targetRectValues.top < 0 && (documentHeight + (targetRectValues.height + targetRectValues.top) > 0)) {\n targetTop = targetRectValues.top;\n if ((calculatedHeight + targetTop) <= 30) {\n calculatedHeight = (targetRectValues.height - (targetRectValues.height + targetRectValues.top)) + 30;\n }\n }\n if (((calculatedHeight + targetRectValues.top) >= maxHeight)) {\n targetElement.style.height = targetRectValues.height +\n (documentHeight - (targetRectValues.height + targetRectValues.top)) + 'px';\n }\n var calculatedTop = (isNOU(containerElement)) ? targetTop : topWithoutborder;\n if (calculatedHeight >= minHeight && ((calculatedHeight + calculatedTop) <= maxHeight)) {\n targetElement.style.height = calculatedHeight + 'px';\n }\n }\n}\n/* istanbul ignore next */\n// eslint-disable-next-line\nfunction resizeNorth(e) {\n var calculateValue = false;\n var boundaryRectValues;\n var pageY = (getEventType(e.type) === 'mouse') ? e.pageY : e.touches[0].pageY;\n var targetRectValues = getClientRectValues(targetElement);\n if (!isNOU(containerElement)) {\n boundaryRectValues = getClientRectValues(containerElement);\n }\n if (!isNOU(containerElement) && (targetRectValues.top - boundaryRectValues.top) > 0) {\n calculateValue = true;\n }\n else if (isNOU(containerElement) && pageY > 0) {\n calculateValue = true;\n }\n var currentHeight = originalHeight - (pageY - originalMouseY);\n if (calculateValue) {\n if (currentHeight >= minHeight && currentHeight <= maxHeight) {\n var containerTop = 0;\n if (!isNOU(containerElement)) {\n containerTop = boundaryRectValues.top;\n }\n var top_1 = (originalY - containerTop) + (pageY - originalMouseY);\n top_1 = top_1 > 0 ? top_1 : 1;\n targetElement.style.height = currentHeight + 'px';\n targetElement.style.top = top_1 + 'px';\n }\n }\n}\n/* istanbul ignore next */\n// eslint-disable-next-line\nfunction resizeWest(e) {\n var documentWidth = document.documentElement.clientWidth;\n var calculateValue = false;\n var rectValues;\n if (!isNOU(containerElement)) {\n rectValues = getClientRectValues(containerElement);\n }\n var pageX = (getEventType(e.type) === 'mouse') ? e.pageX : e.touches[0].pageX;\n var targetRectValues = getClientRectValues(targetElement);\n var borderValue = isNOU(containerElement) ? 0 : containerElement.offsetWidth - containerElement.clientWidth;\n /* eslint-disable */\n var left = isNOU(containerElement) ? 0 : rectValues.left;\n var containerWidth = isNOU(containerElement) ? 0 : rectValues.width;\n /* eslint-enable */\n if (isNOU(resizeWestWidth)) {\n if (!isNOU(containerElement)) {\n resizeWestWidth = (((targetRectValues.left - left) - borderValue / 2)) + targetRectValues.width;\n resizeWestWidth = resizeWestWidth + (containerWidth - borderValue - resizeWestWidth);\n }\n else {\n resizeWestWidth = documentWidth;\n }\n }\n if (!isNOU(containerElement) &&\n (Math.floor((targetRectValues.left - rectValues.left) + targetRectValues.width +\n (rectValues.right - targetRectValues.right)) - borderValue) <= maxWidth) {\n calculateValue = true;\n }\n else if (isNOU(containerElement) && pageX >= 0) {\n calculateValue = true;\n }\n var calculatedWidth = originalWidth - (pageX - originalMouseX);\n if (setLeft) {\n calculatedWidth = (calculatedWidth > resizeWestWidth) ? resizeWestWidth : calculatedWidth;\n }\n if (calculateValue) {\n if (calculatedWidth >= minWidth && calculatedWidth <= maxWidth) {\n var containerLeft = 0;\n if (!isNOU(containerElement)) {\n containerLeft = rectValues.left;\n }\n var left_1 = (originalX - containerLeft) + (pageX - originalMouseX);\n left_1 = (left_1 > 0) ? left_1 : 1;\n if (calculatedWidth !== previousWidth && setWidth) {\n targetElement.style.width = calculatedWidth + 'px';\n }\n if (setLeft) {\n targetElement.style.left = left_1 + 'px';\n if (left_1 === 1) {\n setWidth = false;\n }\n else {\n setWidth = true;\n }\n }\n }\n }\n previousWidth = calculatedWidth;\n}\n/* istanbul ignore next */\n// eslint-disable-next-line\nfunction resizeEast(e) {\n var documentWidth = document.documentElement.clientWidth;\n var calculateValue = false;\n var containerRectValues;\n if (!isNOU(containerElement)) {\n containerRectValues = getClientRectValues(containerElement);\n }\n var coordinates = e.touches ? e.changedTouches[0] : e;\n var pageX = coordinates.pageX;\n var targetRectValues = getClientRectValues(targetElement);\n if (!isNOU(containerElement) && (((targetRectValues.left - containerRectValues.left) + targetRectValues.width) <= maxWidth\n || (targetRectValues.right - containerRectValues.left) >= targetRectValues.width)) {\n calculateValue = true;\n }\n else if (isNOU(containerElement) && (documentWidth - pageX) > 0) {\n calculateValue = true;\n }\n var calculatedWidth = originalWidth + (pageX - originalMouseX);\n var containerLeft = 0;\n if (!isNOU(containerElement)) {\n containerLeft = containerRectValues.left;\n }\n if (((targetRectValues.left - containerLeft) + calculatedWidth) > maxWidth) {\n calculateValue = false;\n if (targetElement.classList.contains(RESIZE_WITHIN_VIEWPORT)) {\n return;\n }\n targetElement.style.width = maxWidth - (targetRectValues.left - containerLeft) + 'px';\n }\n if (calculateValue) {\n if (calculatedWidth >= minWidth && calculatedWidth <= maxWidth) {\n targetElement.style.width = calculatedWidth + 'px';\n }\n }\n}\n/* istanbul ignore next */\n/**\n *\n * @param {number} minimumHeight - specifies the number\n * @returns {void}\n */\nexport function setMinHeight(minimumHeight) {\n minHeight = minimumHeight;\n}\n/**\n *\n * @param {number} value - specifies the number value\n * @returns {void}\n */\nexport function setMaxWidth(value) {\n maxWidth = value;\n}\n/**\n *\n * @param {number} value - specifies the number value\n * @returns {void}\n */\nexport function setMaxHeight(value) {\n maxHeight = value;\n}\n/**\n * @returns {void}\n */\nexport function removeResize() {\n var handlers = targetElement.querySelectorAll('.' + RESIZE_HANDLER);\n for (var i = 0; i < handlers.length; i++) {\n detach(handlers[i]);\n }\n var borderResizers = targetElement.querySelectorAll('.e-dialog-border-resize');\n if (!isNOU(borderResizers)) {\n for (var i = 0; i < borderResizers.length; i++) {\n detach(borderResizers[i]);\n }\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\nimport { Component, Property, Event, Collection, L10n, Complex, compile, createElement } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, detach, attributes, prepend, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, isBlazor } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, append, EventHandler, Draggable, extend } from '@syncfusion/ej2-base';\nimport { SanitizeHtmlHelper, Browser } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Popup, PositionData, getZindexPartial } from '../popup/popup';\nimport { createResize, removeResize, setMinHeight, setMaxWidth, setMaxHeight } from '../common/resize';\nvar ButtonProps = /** @class */ (function (_super) {\n __extends(ButtonProps, _super);\n function ButtonProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], ButtonProps.prototype, \"isFlat\", void 0);\n __decorate([\n Property()\n ], ButtonProps.prototype, \"buttonModel\", void 0);\n __decorate([\n Property('Button')\n ], ButtonProps.prototype, \"type\", void 0);\n __decorate([\n Event()\n ], ButtonProps.prototype, \"click\", void 0);\n return ButtonProps;\n}(ChildProperty));\nexport { ButtonProps };\n/**\n * Configures the animation properties for both open and close the dialog.\n */\nvar AnimationSettings = /** @class */ (function (_super) {\n __extends(AnimationSettings, _super);\n function AnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Fade')\n ], AnimationSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], AnimationSettings.prototype, \"duration\", void 0);\n __decorate([\n Property(0)\n ], AnimationSettings.prototype, \"delay\", void 0);\n return AnimationSettings;\n}(ChildProperty));\nexport { AnimationSettings };\nvar ROOT = 'e-dialog';\nvar RTL = 'e-rtl';\nvar DLG_HEADER_CONTENT = 'e-dlg-header-content';\nvar DLG_HEADER = 'e-dlg-header';\nvar DLG_FOOTER_CONTENT = 'e-footer-content';\nvar MODAL_DLG = 'e-dlg-modal';\nvar DLG_CONTENT = 'e-dlg-content';\nvar DLG_CLOSE_ICON = 'e-icon-dlg-close';\nvar DLG_OVERLAY = 'e-dlg-overlay';\nvar DLG_TARGET = 'e-dlg-target';\nvar DLG_CONTAINER = 'e-dlg-container';\nvar SCROLL_DISABLED = 'e-scroll-disabled';\nvar DLG_PRIMARY_BUTTON = 'e-primary';\nvar ICON = 'e-icons';\nvar POPUP_ROOT = 'e-popup';\nvar DEVICE = 'e-device';\nvar FULLSCREEN = 'e-dlg-fullscreen';\nvar DLG_CLOSE_ICON_BTN = 'e-dlg-closeicon-btn';\nvar DLG_HIDE = 'e-popup-close';\nvar DLG_SHOW = 'e-popup-open';\nvar DLG_UTIL_DEFAULT_TITLE = 'Information';\nvar DLG_UTIL_ROOT = 'e-scroll-disabled';\nvar DLG_UTIL_ALERT = 'e-alert-dialog';\nvar DLG_UTIL_CONFIRM = 'e-confirm-dialog';\nvar DLG_RESIZABLE = 'e-dlg-resizable';\nvar DLG_RESTRICT_LEFT_VALUE = 'e-restrict-left';\nvar DLG_RESTRICT_WIDTH_VALUE = 'e-resize-viewport';\nvar DLG_REF_ELEMENT = 'e-dlg-ref-element';\nvar DLG_USER_ACTION_CLOSED = 'user action';\nvar DLG_CLOSE_ICON_CLOSED = 'close icon';\nvar DLG_ESCAPE_CLOSED = 'escape';\nvar DLG_OVERLAYCLICK_CLOSED = 'overlayClick';\nvar DLG_DRAG = 'e-draggable';\n/**\n * Represents the dialog component that displays the information and get input from the user.\n * Two types of dialog components are `Modal and Modeless (non-modal)` depending on its interaction with parent application.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Dialog = /** @class */ (function (_super) {\n __extends(Dialog, _super);\n /*\n * * Constructor for creating the widget\n *\n * @param\n * @param\n * @hidden\n */\n function Dialog(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.needsID = true;\n return _this;\n }\n /**\n *Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n Dialog.prototype.render = function () {\n this.initialize();\n this.initRender();\n this.wireEvents();\n if (this.width === '100%') {\n this.element.style.width = '';\n }\n if (this.minHeight !== '') {\n this.element.style.minHeight = formatUnit(this.minHeight);\n }\n if (this.enableResize) {\n this.setResize();\n if (this.animationSettings.effect === 'None') {\n this.getMinHeight();\n }\n }\n this.renderComplete();\n };\n Dialog.prototype.initializeValue = function () {\n this.dlgClosedBy = DLG_USER_ACTION_CLOSED;\n };\n /**\n *Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n Dialog.prototype.preRender = function () {\n var _this = this;\n this.initializeValue();\n this.headerContent = null;\n this.allowMaxHeight = true;\n this.preventVisibility = true;\n this.clonedEle = this.element.cloneNode(true);\n this.closeIconClickEventHandler = function (event) {\n _this.dlgClosedBy = DLG_CLOSE_ICON_CLOSED;\n _this.hide(event);\n };\n this.dlgOverlayClickEventHandler = function (event) {\n _this.dlgClosedBy = DLG_OVERLAYCLICK_CLOSED;\n event.preventFocus = false;\n _this.trigger('overlayClick', event, function (overlayClickEventArgs) {\n if (!overlayClickEventArgs.preventFocus) {\n _this.focusContent();\n }\n _this.dlgClosedBy = DLG_USER_ACTION_CLOSED;\n });\n };\n var localeText = { close: 'Close' };\n this.l10n = new L10n('dialog', localeText, this.locale);\n this.checkPositionData();\n if (isNullOrUndefined(this.target)) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.target = document.body;\n this.isProtectedOnChange = prevOnChange;\n }\n };\n Dialog.prototype.updatePersistData = function () {\n if (this.enablePersistence) {\n this.setProperties({ width: parseFloat(this.element.style.width), height: parseFloat(this.element.style.height),\n position: { X: parseFloat(this.dragObj.element.style.left), Y: parseFloat(this.dragObj.element.style.top) } }, true);\n }\n };\n Dialog.prototype.isNumberValue = function (value) {\n var isNumber = /^[-+]?\\d*\\.?\\d+$/.test(value);\n return isNumber;\n };\n Dialog.prototype.checkPositionData = function () {\n if (!isNullOrUndefined(this.position)) {\n if (!isNullOrUndefined(this.position.X) && (typeof (this.position.X) !== 'number')) {\n var isNumber = this.isNumberValue(this.position.X);\n if (isNumber) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.position.X = parseFloat(this.position.X);\n this.isProtectedOnChange = prevOnChange;\n }\n }\n if (!isNullOrUndefined(this.position.Y) && (typeof (this.position.Y) !== 'number')) {\n var isNumber = this.isNumberValue(this.position.Y);\n if (isNumber) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.position.Y = parseFloat(this.position.Y);\n this.isProtectedOnChange = prevOnChange;\n }\n }\n }\n };\n Dialog.prototype.getEle = function (list, selector) {\n var element = undefined;\n for (var i = 0; i < list.length; i++) {\n if (list[i].classList.contains(selector)) {\n element = list[i];\n break;\n }\n }\n return element;\n };\n /* istanbul ignore next */\n Dialog.prototype.getMinHeight = function () {\n var computedHeaderHeight = '0px';\n var computedFooterHeight = '0px';\n if (!isNullOrUndefined(this.element.querySelector('.' + DLG_HEADER_CONTENT))) {\n computedHeaderHeight = getComputedStyle(this.headerContent).height;\n }\n var footerEle = this.getEle(this.element.children, DLG_FOOTER_CONTENT);\n if (!isNullOrUndefined(footerEle)) {\n computedFooterHeight = getComputedStyle(footerEle).height;\n }\n var headerHeight = parseInt(computedHeaderHeight.slice(0, computedHeaderHeight.indexOf('p')), 10);\n var footerHeight = parseInt(computedFooterHeight.slice(0, computedFooterHeight.indexOf('p')), 10);\n setMinHeight(headerHeight + 30 + (isNaN(footerHeight) ? 0 : footerHeight));\n return (headerHeight + 30 + footerHeight);\n };\n Dialog.prototype.onResizeStart = function (args, dialogObj) {\n dialogObj.trigger('resizeStart', args);\n return args.cancel;\n };\n Dialog.prototype.onResizing = function (args, dialogObj) {\n dialogObj.trigger('resizing', args);\n };\n Dialog.prototype.onResizeComplete = function (args, dialogObj) {\n dialogObj.trigger('resizeStop', args);\n this.updatePersistData();\n };\n Dialog.prototype.setResize = function () {\n if (this.enableResize) {\n if (this.isBlazorServerRender() && !isNullOrUndefined(this.element.querySelector('.e-icons.e-resize-handle'))) {\n return;\n }\n this.element.classList.add(DLG_RESIZABLE);\n var computedHeight = getComputedStyle(this.element).minHeight;\n var computedWidth = getComputedStyle(this.element).minWidth;\n var direction = '';\n for (var i = 0; i < this.resizeHandles.length; i++) {\n if (this.resizeHandles[i] === 'All') {\n direction = 'south north east west north-east north-west south-east south-west';\n break;\n }\n else {\n var directionValue = '';\n switch (this.resizeHandles[i].toString()) {\n case 'SouthEast':\n directionValue = 'south-east';\n break;\n case 'SouthWest':\n directionValue = 'south-west';\n break;\n case 'NorthEast':\n directionValue = 'north-east';\n break;\n case 'NorthWest':\n directionValue = 'north-west';\n break;\n default:\n directionValue = this.resizeHandles[i].toString();\n break;\n }\n direction += directionValue.toLocaleLowerCase() + ' ';\n }\n }\n if (this.enableRtl && direction.trim() === 'south-east') {\n direction = 'south-west';\n }\n else if (this.enableRtl && direction.trim() === 'south-west') {\n direction = 'south-east';\n }\n if (this.isModal && this.enableRtl) {\n this.element.classList.add(DLG_RESTRICT_LEFT_VALUE);\n }\n else if (this.isModal && this.target === document.body) {\n this.element.classList.add(DLG_RESTRICT_WIDTH_VALUE);\n }\n createResize({\n element: this.element,\n direction: direction,\n minHeight: parseInt(computedHeight.slice(0, computedWidth.indexOf('p')), 10),\n maxHeight: this.targetEle.clientHeight,\n minWidth: parseInt(computedWidth.slice(0, computedWidth.indexOf('p')), 10),\n maxWidth: this.targetEle.clientWidth,\n boundary: this.target === document.body ? null : this.targetEle,\n resizeBegin: this.onResizeStart.bind(this),\n resizeComplete: this.onResizeComplete.bind(this),\n resizing: this.onResizing.bind(this),\n proxy: this\n });\n this.wireWindowResizeEvent();\n }\n else {\n removeResize();\n this.unWireWindowResizeEvent();\n if (this.isModal) {\n this.element.classList.remove(DLG_RESTRICT_LEFT_VALUE);\n }\n else {\n this.element.classList.remove(DLG_RESTRICT_WIDTH_VALUE);\n }\n this.element.classList.remove(DLG_RESIZABLE);\n }\n };\n Dialog.prototype.getFocusElement = function (target) {\n var value = 'input,select,textarea,button:enabled,a,[contenteditable=\"true\"],[tabindex]';\n var items = target.querySelectorAll(value);\n return { element: items[items.length - 1] };\n };\n /* istanbul ignore next */\n Dialog.prototype.keyDown = function (event) {\n var _this = this;\n if (event.keyCode === 9) {\n if (this.isModal) {\n var buttonObj = void 0;\n if (!isNullOrUndefined(this.btnObj)) {\n buttonObj = this.btnObj[this.btnObj.length - 1];\n }\n if ((isNullOrUndefined(this.btnObj)) && (!isNullOrUndefined(this.ftrTemplateContent))) {\n buttonObj = this.getFocusElement(this.ftrTemplateContent);\n }\n if (isNullOrUndefined(this.btnObj) && isNullOrUndefined(this.ftrTemplateContent) && !isNullOrUndefined(this.contentEle)) {\n buttonObj = this.getFocusElement(this.contentEle);\n }\n if (!isNullOrUndefined(buttonObj) && document.activeElement === buttonObj.element && !event.shiftKey) {\n event.preventDefault();\n this.focusableElements(this.element).focus();\n }\n if (document.activeElement === this.focusableElements(this.element) && event.shiftKey) {\n event.preventDefault();\n if (!isNullOrUndefined(buttonObj)) {\n buttonObj.element.focus();\n }\n }\n }\n }\n var element = document.activeElement;\n var isTagName = (['input', 'textarea'].indexOf(element.tagName.toLowerCase()) > -1);\n var isContentEdit = false;\n if (!isTagName) {\n isContentEdit = element.hasAttribute('contenteditable') && element.getAttribute('contenteditable') === 'true';\n }\n if (event.keyCode === 27 && this.closeOnEscape) {\n this.dlgClosedBy = DLG_ESCAPE_CLOSED;\n var query = document.querySelector('.e-popup-open:not(.e-dialog)');\n // 'document.querySelector' is used to find the elements rendered based on body\n if (!(!isNullOrUndefined(query) && !query.classList.contains('e-toolbar-pop'))) {\n this.hide(event);\n }\n }\n if ((event.keyCode === 13 && !event.ctrlKey && element.tagName.toLowerCase() !== 'textarea' &&\n isTagName && !isNullOrUndefined(this.primaryButtonEle)) ||\n (event.keyCode === 13 && event.ctrlKey && (element.tagName.toLowerCase() === 'textarea' ||\n isContentEdit)) && !isNullOrUndefined(this.primaryButtonEle)) {\n var buttonIndex_1;\n var firstPrimary = this.buttons.some(function (data, index) {\n buttonIndex_1 = index;\n // eslint-disable-next-line\n var buttonModel = data.buttonModel;\n return !isNullOrUndefined(buttonModel) && buttonModel.isPrimary === true;\n });\n if (firstPrimary && typeof (this.buttons[buttonIndex_1].click) === 'function') {\n setTimeout(function () {\n _this.buttons[buttonIndex_1].click.call(_this, event);\n });\n }\n }\n };\n /**\n * Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n Dialog.prototype.initialize = function () {\n if (!isNullOrUndefined(this.target)) {\n this.targetEle = ((typeof this.target) === 'string') ?\n document.querySelector(this.target) : this.target;\n }\n if (!this.isBlazorServerRender()) {\n addClass([this.element], ROOT);\n }\n if (Browser.isDevice) {\n addClass([this.element], DEVICE);\n }\n if (!this.isBlazorServerRender()) {\n this.setCSSClass();\n }\n this.setMaxHeight();\n };\n /**\n * Initialize the rendering\n *\n * @returns {void}\n * @private\n */\n Dialog.prototype.initRender = function () {\n var _this = this;\n this.initialRender = true;\n if (!this.isBlazorServerRender()) {\n attributes(this.element, { role: 'dialog' });\n }\n if (this.zIndex === 1000) {\n this.setzIndex(this.element, false);\n this.calculatezIndex = true;\n }\n else {\n this.calculatezIndex = false;\n }\n if (this.isBlazorServerRender() && isNullOrUndefined(this.headerContent)) {\n this.headerContent = this.element.getElementsByClassName('e-dlg-header-content')[0];\n }\n if (this.isBlazorServerRender() && isNullOrUndefined(this.contentEle)) {\n this.contentEle = this.element.querySelector('#' + this.element.id + '_dialog-content');\n }\n if (!this.isBlazorServerRender()) {\n this.setTargetContent();\n if (this.header !== '' && !isNullOrUndefined(this.header)) {\n this.setHeader();\n }\n this.renderCloseIcon();\n this.setContent();\n if (this.footerTemplate !== '' && !isNullOrUndefined(this.footerTemplate)) {\n this.setFooterTemplate();\n }\n else if (!isNullOrUndefined(this.buttons[0].buttonModel)) {\n this.setButton();\n }\n }\n if (this.isBlazorServerRender()) {\n if (!isNullOrUndefined(this.buttons[0].buttonModel) && this.footerTemplate === '') {\n this.setButton();\n }\n }\n if (this.allowDragging && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n if (!this.isBlazorServerRender()) {\n attributes(this.element, { 'aria-modal': (this.isModal ? 'true' : 'false') });\n if (this.isModal) {\n this.setIsModal();\n }\n }\n if (this.isBlazorServerRender() && isNullOrUndefined(this.dlgContainer)) {\n this.dlgContainer = this.element.parentElement;\n for (var i = 0, childNodes = this.dlgContainer.children; i < childNodes.length; i++) {\n if (childNodes[i].classList.contains('e-dlg-overlay')) {\n this.dlgOverlay = childNodes[i];\n }\n }\n }\n if (this.element.classList.contains(DLG_UTIL_ALERT) !== true && this.element.classList.contains(DLG_UTIL_CONFIRM) !== true\n && !isNullOrUndefined(this.element.parentElement)) {\n var parentEle = this.isModal ? this.dlgContainer.parentElement : this.element.parentElement;\n this.refElement = this.createElement('div', { className: DLG_REF_ELEMENT });\n parentEle.insertBefore(this.refElement, (this.isModal ? this.dlgContainer : this.element));\n }\n if (!isNullOrUndefined(this.targetEle)) {\n // eslint-disable-next-line\n this.isModal ? this.targetEle.appendChild(this.dlgContainer) : this.targetEle.appendChild(this.element);\n }\n this.popupObj = new Popup(this.element, {\n height: this.height,\n width: this.width,\n zIndex: this.zIndex,\n relateTo: this.target,\n actionOnScroll: 'none',\n enableRtl: this.enableRtl,\n // eslint-disable-next-line\n open: function (event) {\n var eventArgs = {\n container: _this.isModal ? _this.dlgContainer : _this.element,\n element: _this.element,\n target: _this.target,\n preventFocus: false\n };\n if (_this.enableResize) {\n _this.resetResizeIcon();\n }\n _this.trigger('open', eventArgs, function (openEventArgs) {\n if (!openEventArgs.preventFocus) {\n _this.focusContent();\n }\n });\n },\n // eslint-disable-next-line\n close: function (event) {\n if (_this.isModal) {\n addClass([_this.dlgOverlay], 'e-fade');\n }\n _this.unBindEvent(_this.element);\n if (_this.isModal) {\n _this.dlgContainer.style.display = 'none';\n }\n _this.trigger('close', _this.closeArgs);\n var activeEle = document.activeElement;\n if (!isNullOrUndefined(activeEle) && !isNullOrUndefined((activeEle).blur)) {\n activeEle.blur();\n }\n if (!isNullOrUndefined(_this.storeActiveElement) && !isNullOrUndefined(_this.storeActiveElement.focus)) {\n _this.storeActiveElement.focus();\n }\n }\n });\n this.positionChange();\n this.setEnableRTL();\n if (!this.isBlazorServerRender()) {\n addClass([this.element], DLG_HIDE);\n if (this.isModal) {\n this.setOverlayZindex();\n }\n }\n if (this.visible) {\n this.show();\n }\n else {\n if (this.isModal) {\n this.dlgOverlay.style.display = 'none';\n }\n }\n this.initialRender = false;\n };\n Dialog.prototype.resetResizeIcon = function () {\n var dialogConHeight = this.getMinHeight();\n if (this.targetEle.offsetHeight < dialogConHeight) {\n var className = this.enableRtl ? 'e-south-west' : 'e-south-east';\n var resizeIcon = this.element.querySelector('.' + className);\n if (!isNullOrUndefined(resizeIcon)) {\n resizeIcon.style.bottom = '-' + dialogConHeight.toString() + 'px';\n }\n }\n };\n Dialog.prototype.setOverlayZindex = function (zIndexValue) {\n var zIndex;\n if (isNullOrUndefined(zIndexValue)) {\n zIndex = parseInt(this.element.style.zIndex, 10) ? parseInt(this.element.style.zIndex, 10) : this.zIndex;\n }\n else {\n zIndex = zIndexValue;\n }\n this.dlgOverlay.style.zIndex = (zIndex - 1).toString();\n this.dlgContainer.style.zIndex = zIndex.toString();\n };\n Dialog.prototype.positionChange = function () {\n if (this.isModal) {\n if (!isNaN(parseFloat(this.position.X)) && !isNaN(parseFloat(this.position.Y))) {\n this.setPopupPosition();\n }\n else if ((!isNaN(parseFloat(this.position.X)) && isNaN(parseFloat(this.position.Y)))\n || (isNaN(parseFloat(this.position.X)) && !isNaN(parseFloat(this.position.Y)))) {\n this.setPopupPosition();\n }\n else {\n this.element.style.top = '0px';\n this.element.style.left = '0px';\n this.dlgContainer.classList.add('e-dlg-' + this.position.X + '-' + this.position.Y);\n }\n }\n else {\n this.setPopupPosition();\n }\n };\n Dialog.prototype.setPopupPosition = function () {\n this.popupObj.setProperties({\n position: {\n X: this.position.X, Y: this.position.Y\n }\n });\n };\n Dialog.prototype.setAllowDragging = function () {\n var _this = this;\n var handleContent = '.' + DLG_HEADER_CONTENT;\n if (!this.element.classList.contains(DLG_DRAG)) {\n this.dragObj = new Draggable(this.element, {\n clone: false,\n isDragScroll: true,\n abort: '.e-dlg-closeicon-btn',\n handle: handleContent,\n dragStart: function (event) {\n _this.trigger('dragStart', event, function (dragEventArgs) {\n if (isBlazor()) {\n dragEventArgs.bindEvents(event.dragElement);\n }\n });\n },\n dragStop: function (event) {\n if (_this.isModal) {\n if (!isNullOrUndefined(_this.position)) {\n _this.dlgContainer.classList.remove('e-dlg-' + _this.position.X + '-' + _this.position.Y);\n }\n // Reset the dialog position after drag completion.\n _this.element.style.position = 'relative';\n }\n _this.trigger('dragStop', event);\n _this.element.classList.remove(DLG_RESTRICT_LEFT_VALUE);\n _this.updatePersistData();\n },\n drag: function (event) {\n _this.trigger('drag', event);\n }\n });\n if (!isNullOrUndefined(this.targetEle)) {\n this.dragObj.dragArea = this.targetEle;\n }\n }\n };\n Dialog.prototype.setButton = function () {\n if (!this.isBlazorServerRender()) {\n this.buttonContent = [];\n this.btnObj = [];\n // eslint-disable-next-line\n var primaryBtnFlag = true;\n for (var i = 0; i < this.buttons.length; i++) {\n var buttonType = !isNullOrUndefined(this.buttons[i].type) ? this.buttons[i].type.toLowerCase() : 'button';\n var btn = this.createElement('button', { className: this.cssClass, attrs: { type: buttonType } });\n this.buttonContent.push(btn.outerHTML);\n }\n this.setFooterTemplate();\n }\n var footerBtn;\n for (var i = 0, childNodes = this.element.children; i < childNodes.length; i++) {\n if (childNodes[i].classList.contains(DLG_FOOTER_CONTENT)) {\n footerBtn = childNodes[i].querySelectorAll('button');\n }\n }\n for (var i = 0; i < this.buttons.length; i++) {\n if (!this.isBlazorServerRender()) {\n this.btnObj[i] = new Button(this.buttons[i].buttonModel);\n }\n if (this.isBlazorServerRender()) {\n this.ftrTemplateContent = this.element.querySelector('.' + DLG_FOOTER_CONTENT);\n }\n if (!isNullOrUndefined(this.ftrTemplateContent) && footerBtn.length > 0) {\n if (typeof (this.buttons[i].click) === 'function') {\n EventHandler.add(footerBtn[i], 'click', this.buttons[i].click, this);\n }\n if (typeof (this.buttons[i].click) === 'object') {\n EventHandler.add(footerBtn[i], 'click', this.buttonClickHandler.bind(this, i), this);\n }\n }\n if (!this.isBlazorServerRender() && !isNullOrUndefined(this.ftrTemplateContent)) {\n this.btnObj[i].appendTo(this.ftrTemplateContent.children[i]);\n if (this.buttons[i].isFlat) {\n this.btnObj[i].element.classList.add('e-flat');\n }\n this.primaryButtonEle = this.element.getElementsByClassName('e-primary')[0];\n }\n }\n };\n Dialog.prototype.buttonClickHandler = function (index) {\n this.trigger('buttons[' + index + '].click', {});\n };\n Dialog.prototype.setContent = function () {\n this.contentEle = this.createElement('div', { className: DLG_CONTENT, id: this.element.id + '_dialog-content' });\n if (this.innerContentElement) {\n this.contentEle.appendChild(this.innerContentElement);\n }\n else if (!isNullOrUndefined(this.content) && this.content !== '' || !this.initialRender) {\n // eslint-disable-next-line\n var blazorContain = Object.keys(window);\n if (typeof (this.content) === 'string' && !isBlazor()) {\n this.setTemplate(this.content, this.contentEle, 'content');\n }\n else if (this.content instanceof HTMLElement) {\n this.contentEle.appendChild(this.content);\n }\n else {\n this.setTemplate(this.content, this.contentEle, 'content');\n }\n }\n if (!isNullOrUndefined(this.headerContent)) {\n this.element.insertBefore(this.contentEle, this.element.children[1]);\n }\n else {\n this.element.insertBefore(this.contentEle, this.element.children[0]);\n }\n if (this.height === 'auto') {\n if (!this.isBlazorServerRender() && Browser.isIE && this.element.style.width === '' && !isNullOrUndefined(this.width)) {\n this.element.style.width = formatUnit(this.width);\n }\n this.setMaxHeight();\n }\n };\n Dialog.prototype.setTemplate = function (template, toElement, prop) {\n var templateFn;\n var templateProps;\n // eslint-disable-next-line\n var blazorContain = Object.keys(window);\n if (toElement.classList.contains(DLG_HEADER)) {\n templateProps = this.element.id + 'header';\n }\n else if (toElement.classList.contains(DLG_FOOTER_CONTENT)) {\n templateProps = this.element.id + 'footerTemplate';\n }\n else {\n templateProps = this.element.id + 'content';\n }\n var templateValue;\n if (!isNullOrUndefined(template.outerHTML)) {\n toElement.appendChild(template);\n }\n else if ((typeof template === 'string') || (typeof template !== 'string') || (isBlazor() && !this.isStringTemplate)) {\n if ((typeof template === 'string')) {\n template = this.sanitizeHelper(template);\n }\n if (this.isVue || typeof template !== 'string') {\n templateFn = compile(template);\n templateValue = template;\n }\n else {\n toElement.innerHTML = template;\n }\n }\n var fromElements = [];\n if (!isNullOrUndefined(templateFn)) {\n var isString = (isBlazor() &&\n !this.isStringTemplate && (templateValue).indexOf('
Blazor') === 0) ?\n this.isStringTemplate : true;\n for (var _i = 0, _a = templateFn({}, this, prop, templateProps, isString); _i < _a.length; _i++) {\n var item = _a[_i];\n fromElements.push(item);\n }\n append([].slice.call(fromElements), toElement);\n }\n };\n /*\n * @returns {void}\n * @hidden\n * @value\n */\n Dialog.prototype.sanitizeHelper = function (value) {\n if (this.enableHtmlSanitizer) {\n var dialogItem = SanitizeHtmlHelper.beforeSanitize();\n var beforeEvent = {\n cancel: false,\n helper: null\n };\n extend(dialogItem, dialogItem, beforeEvent);\n this.trigger('beforeSanitizeHtml', dialogItem);\n if (dialogItem.cancel && !isNullOrUndefined(dialogItem.helper)) {\n value = dialogItem.helper(value);\n }\n else if (!dialogItem.cancel) {\n value = SanitizeHtmlHelper.serializeValue(dialogItem, value);\n }\n }\n return value;\n };\n Dialog.prototype.setMaxHeight = function () {\n if (!this.allowMaxHeight) {\n return;\n }\n var display = this.element.style.display;\n this.element.style.display = 'none';\n this.element.style.maxHeight = (!isNullOrUndefined(this.target)) && (this.targetEle.offsetHeight < window.innerHeight) ?\n (this.targetEle.offsetHeight - 20) + 'px' : (window.innerHeight - 20) + 'px';\n this.element.style.display = display;\n if (Browser.isIE && this.height === 'auto' && !isNullOrUndefined(this.contentEle)\n && this.element.offsetHeight < this.contentEle.offsetHeight) {\n this.element.style.height = 'inherit';\n }\n };\n Dialog.prototype.setEnableRTL = function () {\n if (!this.isBlazorServerRender()) {\n // eslint-disable-next-line\n this.enableRtl ? addClass([this.element], RTL) : removeClass([this.element], RTL);\n }\n if (!isNullOrUndefined(this.element.querySelector('.e-resize-handle'))) {\n removeResize();\n this.setResize();\n }\n };\n Dialog.prototype.setTargetContent = function () {\n var _this = this;\n if (isNullOrUndefined(this.content) || this.content === '') {\n var isContent = this.element.innerHTML.replace(/\\s|<(\\/?|\\/?)(!--!--)>/g, '') !== '';\n if (this.element.children.length > 0 || isContent) {\n this.innerContentElement = document.createDocumentFragment();\n [].slice.call(this.element.childNodes).forEach(function (el) {\n if (el.nodeType !== 8) {\n _this.innerContentElement.appendChild(el);\n }\n });\n }\n }\n };\n Dialog.prototype.setHeader = function () {\n if (this.headerEle) {\n this.headerEle.innerHTML = '';\n }\n else {\n this.headerEle = this.createElement('div', { id: this.element.id + '_title', className: DLG_HEADER });\n }\n this.createHeaderContent();\n this.headerContent.appendChild(this.headerEle);\n this.setTemplate(this.header, this.headerEle, 'header');\n attributes(this.element, { 'aria-labelledby': this.element.id + '_title' });\n this.element.insertBefore(this.headerContent, this.element.children[0]);\n if (this.allowDragging && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n };\n Dialog.prototype.setFooterTemplate = function () {\n if (this.ftrTemplateContent) {\n this.ftrTemplateContent.innerHTML = '';\n }\n else {\n this.ftrTemplateContent = this.createElement('div', {\n className: DLG_FOOTER_CONTENT\n });\n }\n if (this.footerTemplate !== '' && !isNullOrUndefined(this.footerTemplate)) {\n this.setTemplate(this.footerTemplate, this.ftrTemplateContent, 'footerTemplate');\n }\n else {\n this.ftrTemplateContent.innerHTML = this.buttonContent.join('');\n }\n this.element.appendChild(this.ftrTemplateContent);\n };\n Dialog.prototype.createHeaderContent = function () {\n if (isNullOrUndefined(this.headerContent)) {\n this.headerContent = this.createElement('div', { id: this.element.id + '_dialog-header', className: DLG_HEADER_CONTENT });\n }\n };\n Dialog.prototype.renderCloseIcon = function () {\n if (this.showCloseIcon) {\n this.closeIcon = this.createElement('button', { className: DLG_CLOSE_ICON_BTN, attrs: { type: 'button' } });\n this.closeIconBtnObj = new Button({ cssClass: 'e-flat', iconCss: DLG_CLOSE_ICON + ' ' + ICON });\n this.closeIconTitle();\n if (!isNullOrUndefined(this.headerContent)) {\n prepend([this.closeIcon], this.headerContent);\n }\n else {\n this.createHeaderContent();\n prepend([this.closeIcon], this.headerContent);\n this.element.insertBefore(this.headerContent, this.element.children[0]);\n }\n this.closeIconBtnObj.appendTo(this.closeIcon);\n }\n };\n Dialog.prototype.closeIconTitle = function () {\n this.l10n.setLocale(this.locale);\n var closeIconTitle = this.l10n.getConstant('close');\n this.closeIcon.setAttribute('title', closeIconTitle);\n this.closeIcon.setAttribute('aria-label', closeIconTitle);\n };\n Dialog.prototype.setCSSClass = function (oldCSSClass) {\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n if (this.isModal && !isNullOrUndefined(this.dlgContainer)) {\n removeClass([this.dlgContainer], oldCSSClass.split(' '));\n }\n }\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n if (this.isModal && !isNullOrUndefined(this.dlgContainer)) {\n addClass([this.dlgContainer], this.cssClass.split(' '));\n }\n }\n };\n Dialog.prototype.setIsModal = function () {\n this.dlgContainer = this.createElement('div', { className: DLG_CONTAINER });\n this.setCSSClass();\n this.element.classList.remove(DLG_SHOW);\n this.element.parentNode.insertBefore(this.dlgContainer, this.element);\n this.dlgContainer.appendChild(this.element);\n addClass([this.element], MODAL_DLG);\n this.dlgOverlay = this.createElement('div', { className: DLG_OVERLAY });\n this.dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n this.dlgContainer.appendChild(this.dlgOverlay);\n };\n Dialog.prototype.getValidFocusNode = function (items) {\n var node;\n for (var u = 0; u < items.length; u++) {\n node = items[u];\n if ((node.clientHeight > 0 || (node.tagName.toLowerCase() === 'a' && node.hasAttribute('href'))) && node.tabIndex > -1 &&\n !node.disabled && !this.disableElement(node, '[disabled],[aria-disabled=\"true\"],[type=\"hidden\"]')) {\n return node;\n }\n else {\n node = null;\n }\n }\n return node;\n };\n Dialog.prototype.focusableElements = function (content) {\n if (!isNullOrUndefined(content)) {\n var value = 'input,select,textarea,button,a,[contenteditable=\"true\"],[tabindex]';\n var items = content.querySelectorAll(value);\n return this.getValidFocusNode(items);\n }\n return null;\n };\n Dialog.prototype.getAutoFocusNode = function (container) {\n var node = container.querySelector('.' + DLG_CLOSE_ICON_BTN);\n var value = '[autofocus]';\n var items = container.querySelectorAll(value);\n var validNode = this.getValidFocusNode(items);\n if (isBlazor()) {\n this.primaryButtonEle = this.element.getElementsByClassName('e-primary')[0];\n }\n if (!isNullOrUndefined(validNode)) {\n node = validNode;\n }\n else {\n validNode = this.focusableElements(this.contentEle);\n if (!isNullOrUndefined(validNode)) {\n return node = validNode;\n }\n else if (!isNullOrUndefined(this.primaryButtonEle)) {\n return this.element.querySelector('.' + DLG_PRIMARY_BUTTON);\n }\n }\n return node;\n };\n Dialog.prototype.disableElement = function (element, t) {\n var elementMatch = element ? element.matches || element.webkitMatchesSelector || element.msGetRegionContent : null;\n if (elementMatch) {\n for (; element; element = element.parentNode) {\n if (element instanceof Element && elementMatch.call(element, t)) {\n /* istanbul ignore next */\n return element;\n }\n }\n }\n return null;\n };\n Dialog.prototype.focusContent = function () {\n var element = this.getAutoFocusNode(this.element);\n var node = !isNullOrUndefined(element) ? element : this.element;\n var userAgent = Browser.userAgent;\n if (userAgent.indexOf('MSIE ') > 0 || userAgent.indexOf('Trident/') > 0) {\n this.element.focus();\n }\n node.focus();\n this.unBindEvent(this.element);\n this.bindEvent(this.element);\n };\n Dialog.prototype.bindEvent = function (element) {\n EventHandler.add(element, 'keydown', this.keyDown, this);\n };\n Dialog.prototype.unBindEvent = function (element) {\n EventHandler.remove(element, 'keydown', this.keyDown);\n };\n Dialog.prototype.updateSanitizeContent = function () {\n if (!this.isBlazorServerRender()) {\n this.contentEle.innerHTML = this.sanitizeHelper(this.content);\n }\n };\n Dialog.prototype.isBlazorServerRender = function () {\n return isBlazor() && this.isServerRendered;\n };\n /**\n * Module required function\n *\n * @returns {void}\n * @private\n */\n Dialog.prototype.getModuleName = function () {\n return 'dialog';\n };\n /**\n * Called internally if any of the property value changed\n *\n * @param {DialogModel} newProp - specifies the new property\n * @param {DialogModel} oldProp - specifies the old property\n * @private\n * @returns {void}\n */\n Dialog.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'content':\n if (!isNullOrUndefined(this.content) && this.content !== '') {\n if (this.isBlazorServerRender()) {\n this.contentEle = this.element.querySelector('.e-dlg-content');\n }\n if (!isNullOrUndefined(this.contentEle) && this.contentEle.getAttribute('role') !== 'dialog') {\n if (!this.isBlazorServerRender()) {\n this.contentEle.innerHTML = '';\n }\n if (typeof (this.content) === 'function') {\n this.clearTemplate(['content']);\n detach(this.contentEle);\n this.contentEle = null;\n this.setContent();\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n typeof (this.content) === 'string' ? (this.isBlazorServerRender() && (this.contentEle.innerText === '')) ?\n this.contentEle.insertAdjacentHTML('beforeend', this.sanitizeHelper(this.content)) :\n this.updateSanitizeContent() : this.contentEle.appendChild(this.content);\n }\n this.setMaxHeight();\n }\n else {\n if (!this.isBlazorServerRender() ||\n isNullOrUndefined(this.element.querySelector('.e-dlg-content'))) {\n this.setContent();\n }\n }\n }\n else if (!isNullOrUndefined(this.contentEle)) {\n detach(this.contentEle);\n this.contentEle = null;\n }\n break;\n case 'header':\n if (this.header === '' || isNullOrUndefined(this.header)) {\n if (this.headerEle) {\n detach(this.headerEle);\n this.headerEle = null;\n }\n }\n else {\n if (!this.isBlazorServerRender() ||\n isNullOrUndefined(this.element.querySelector('.e-dlg-header-content'))) {\n this.setHeader();\n }\n }\n break;\n case 'footerTemplate':\n if (this.footerTemplate === '' || isNullOrUndefined(this.footerTemplate)) {\n if (!this.ftrTemplateContent) {\n return;\n }\n detach(this.ftrTemplateContent);\n this.ftrTemplateContent = null;\n this.buttons = [{}];\n }\n else {\n if (!this.isBlazorServerRender() ||\n isNullOrUndefined(this.element.querySelector('.e-footer-content'))) {\n this.setFooterTemplate();\n }\n this.buttons = [{}];\n }\n break;\n case 'showCloseIcon':\n if (this.element.getElementsByClassName(DLG_CLOSE_ICON).length > 0) {\n if (!this.showCloseIcon && (this.header === '' || isNullOrUndefined(this.header))) {\n detach(this.headerContent);\n this.headerContent = null;\n }\n else if (!this.showCloseIcon) {\n detach(this.closeIcon);\n }\n else {\n if (this.isBlazorServerRender()) {\n this.wireEvents();\n }\n }\n }\n else {\n if (!this.isBlazorServerRender()) {\n this.renderCloseIcon();\n }\n this.wireEvents();\n }\n break;\n case 'locale':\n if (this.showCloseIcon) {\n this.closeIconTitle();\n }\n break;\n case 'visible':\n // eslint-disable-next-line\n this.visible ? this.show() : this.hide();\n break;\n case 'isModal':\n this.updateIsModal();\n break;\n case 'height':\n setStyleAttribute(this.element, { 'height': formatUnit(newProp.height) });\n this.updatePersistData();\n break;\n case 'width':\n setStyleAttribute(this.element, { 'width': formatUnit(newProp.width) });\n this.updatePersistData();\n break;\n case 'zIndex':\n this.popupObj.zIndex = this.zIndex;\n if (this.isModal) {\n this.setOverlayZindex(this.zIndex);\n }\n if (this.element.style.zIndex !== this.zIndex.toString()) {\n this.calculatezIndex = false;\n }\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'buttons': {\n var buttonCount = this.buttons.length;\n if (!isNullOrUndefined(this.ftrTemplateContent) && !this.isBlazorServerRender()) {\n detach(this.ftrTemplateContent);\n this.ftrTemplateContent = null;\n }\n for (var i = 0; i < buttonCount; i++) {\n if (!isNullOrUndefined(this.buttons[i].buttonModel)) {\n this.footerTemplate = '';\n this.setButton();\n }\n }\n break;\n }\n case 'allowDragging':\n if (this.allowDragging && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n else {\n this.dragObj.destroy();\n }\n break;\n case 'target':\n this.setTarget(newProp.target);\n break;\n case 'position':\n this.checkPositionData();\n if (this.isModal) {\n var positionX = !isNullOrUndefined(oldProp.position) && !isNullOrUndefined(oldProp.position.X) ? oldProp.position.X : this.position.X;\n var positionY = !isNullOrUndefined(oldProp.position) && !isNullOrUndefined(oldProp.position.Y) ? oldProp.position.Y : this.position.Y;\n if (this.dlgContainer.classList.contains('e-dlg-' + positionX + '-' + positionY)) {\n this.dlgContainer.classList.remove('e-dlg-' + positionX + '-' + positionY);\n }\n }\n this.positionChange();\n this.updatePersistData();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n case 'enableResize':\n this.setResize();\n break;\n case 'minHeight':\n if (this.minHeight !== '') {\n this.element.style.minHeight = formatUnit(this.minHeight);\n }\n break;\n }\n }\n };\n Dialog.prototype.setTarget = function (target) {\n this.popupObj.relateTo = target;\n this.target = target;\n this.targetEle = ((typeof this.target) === 'string') ?\n document.querySelector(this.target) : this.target;\n if (this.dragObj) {\n this.dragObj.dragArea = this.targetEle;\n }\n this.setMaxHeight();\n if (this.isModal) {\n this.updateIsModal();\n }\n if (this.enableResize) {\n this.setResize();\n }\n };\n Dialog.prototype.updateIsModal = function () {\n this.element.setAttribute('aria-modal', this.isModal ? 'true' : 'false');\n if (this.isModal) {\n if (isNullOrUndefined(this.dlgOverlay)) {\n this.setIsModal();\n this.element.style.top = '0px';\n this.element.style.left = '0px';\n if (!isNullOrUndefined(this.targetEle)) {\n this.targetEle.appendChild(this.dlgContainer);\n }\n }\n }\n else {\n removeClass([this.element], MODAL_DLG);\n removeClass([document.body], [DLG_TARGET, SCROLL_DISABLED]);\n detach(this.dlgOverlay);\n while (this.dlgContainer.firstChild) {\n this.dlgContainer.parentElement.insertBefore(this.dlgContainer.firstChild, this.dlgContainer);\n }\n this.dlgContainer.parentElement.removeChild(this.dlgContainer);\n }\n if (this.visible) {\n this.show();\n }\n this.positionChange();\n if (this.isModal && this.dlgOverlay) {\n EventHandler.add(this.dlgOverlay, 'click', this.dlgOverlayClickEventHandler, this);\n }\n };\n Dialog.prototype.setzIndex = function (zIndexElement, setPopupZindex) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n var currentzIndex = getZindexPartial(zIndexElement);\n this.zIndex = currentzIndex > this.zIndex ? currentzIndex : this.zIndex;\n this.isProtectedOnChange = prevOnChange;\n if (setPopupZindex) {\n this.popupObj.zIndex = this.zIndex;\n }\n };\n Dialog.prototype.windowResizeHandler = function () {\n setMaxWidth(this.targetEle.clientWidth);\n setMaxHeight(this.targetEle.clientHeight);\n this.setMaxHeight();\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {void}\n * @private\n */\n Dialog.prototype.getPersistData = function () {\n return this.addOnPersist(['width', 'height', 'position']);\n };\n /**\n * To destroy the widget\n *\n * @returns {void}\n */\n Dialog.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n var classArray = [RTL, MODAL_DLG, DLG_RESIZABLE, DLG_RESTRICT_LEFT_VALUE, FULLSCREEN, DEVICE];\n var attrs = ['role', 'aria-modal', 'aria-labelledby', 'aria-describedby', 'aria-grabbed', 'tabindex', 'style'];\n removeClass([this.targetEle], [DLG_TARGET, SCROLL_DISABLED]);\n if (!isNullOrUndefined(this.element) && this.element.classList.contains(FULLSCREEN)) {\n removeClass([document.body], [DLG_TARGET, SCROLL_DISABLED]);\n }\n if (this.isModal) {\n removeClass([(!isNullOrUndefined(this.targetEle) ? this.targetEle : document.body)], SCROLL_DISABLED);\n }\n this.unWireEvents();\n if (!isNullOrUndefined(this.btnObj)) {\n for (var i = 0; i < this.btnObj.length; i++) {\n this.btnObj[i].destroy();\n }\n }\n if (!isNullOrUndefined(this.closeIconBtnObj)) {\n this.closeIconBtnObj.destroy();\n }\n if (!isNullOrUndefined(this.dragObj)) {\n this.dragObj.destroy();\n }\n if (!isNullOrUndefined(this.popupObj.element) && this.popupObj.element.classList.contains(POPUP_ROOT)) {\n this.popupObj.destroy();\n }\n removeClass([this.element], classArray);\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n removeClass([this.element], this.cssClass.split(' '));\n }\n if (!isNullOrUndefined(this.refElement) && !isNullOrUndefined(this.refElement.parentElement)) {\n this.refElement.parentElement.insertBefore((this.isModal ? this.dlgContainer : this.element), this.refElement);\n detach(this.refElement);\n this.refElement = undefined;\n }\n if (this.isModal && !this.isBlazorServerRender()) {\n detach(this.dlgOverlay);\n this.dlgContainer.parentNode.insertBefore(this.element, this.dlgContainer);\n detach(this.dlgContainer);\n }\n if (!this.isBlazorServerRender()) {\n this.element.innerHTML = this.clonedEle.innerHTML;\n }\n if (this.isBlazorServerRender()) {\n if (!isNullOrUndefined(this.element.children)) {\n for (var i = 0; i <= this.element.children.length; i++) {\n i = i - i;\n detach(this.element.children[i]);\n }\n }\n }\n for (var i = 0; i < attrs.length; i++) {\n this.element.removeAttribute(attrs[i]);\n }\n this.ftrTemplateContent = null;\n this.headerContent = null;\n this.contentEle = null;\n if (!this.isBlazorServerRender()) {\n _super.prototype.destroy.call(this);\n }\n else {\n this.isDestroyed = true;\n }\n // eslint-disable-next-line\n if (this.isReact) {\n this.clearTemplate();\n }\n };\n Dialog.prototype.wireWindowResizeEvent = function () {\n window.addEventListener('resize', this.windowResizeHandler.bind(this));\n };\n Dialog.prototype.unWireWindowResizeEvent = function () {\n window.removeEventListener('resize', this.windowResizeHandler.bind(this));\n };\n /**\n * Binding event to the element while widget creation\n *\n * @returns {void}\n * @hidden\n */\n Dialog.prototype.wireEvents = function () {\n if (this.isBlazorServerRender() && this.showCloseIcon) {\n this.closeIcon = this.element.getElementsByClassName('e-dlg-closeicon-btn')[0];\n }\n if (this.showCloseIcon) {\n EventHandler.add(this.closeIcon, 'click', this.closeIconClickEventHandler, this);\n }\n if (this.isModal && this.dlgOverlay) {\n EventHandler.add(this.dlgOverlay, 'click', this.dlgOverlayClickEventHandler, this);\n }\n };\n /**\n * Unbinding event to the element while widget destroy\n *\n * @returns {void}\n * @hidden\n */\n Dialog.prototype.unWireEvents = function () {\n if (this.showCloseIcon) {\n EventHandler.remove(this.closeIcon, 'click', this.closeIconClickEventHandler);\n }\n if (this.isModal) {\n EventHandler.remove(this.dlgOverlay, 'click', this.dlgOverlayClickEventHandler);\n }\n if (this.buttons.length > 0 && !isNullOrUndefined(this.buttons[0].buttonModel) && this.footerTemplate === '') {\n for (var i = 0; i < this.buttons.length; i++) {\n if (typeof (this.buttons[i].click) === 'function') {\n EventHandler.remove(this.ftrTemplateContent.children[i], 'click', this.buttons[i].click);\n }\n }\n }\n };\n /**\n * Refreshes the dialog's position when the user changes its header and footer height/width dynamically.\n *\n * @returns {void}\n */\n Dialog.prototype.refreshPosition = function () {\n this.popupObj.refreshPosition();\n if (this.element.classList.contains(MODAL_DLG)) {\n this.positionChange();\n }\n };\n /**\n * Returns the current width and height of the Dialog\n *\n * @returns {DialogDimension}- returns the dialog element Dimension.\n * @public\n */\n Dialog.prototype.getDimension = function () {\n var dialogWidth = this.element.offsetWidth;\n var dialogHeight = this.element.offsetHeight;\n return { width: dialogWidth, height: dialogHeight };\n };\n /**\n * Opens the dialog if it is in hidden state.\n * To open the dialog with full screen width, set the parameter to true.\n *\n * @param { boolean } isFullScreen - Enable the fullScreen Dialog.\n * @returns {void}\n */\n Dialog.prototype.show = function (isFullScreen) {\n var _this = this;\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n if (!this.element.classList.contains(DLG_SHOW) || (!isNullOrUndefined(isFullScreen))) {\n if (!isNullOrUndefined(isFullScreen)) {\n this.fullScreen(isFullScreen);\n }\n var eventArgs_1 = isBlazor() ? {\n cancel: false,\n element: this.element,\n container: this.isModal ? this.dlgContainer : this.element,\n maxHeight: this.element.style.maxHeight\n } : {\n cancel: false,\n element: this.element,\n container: this.isModal ? this.dlgContainer : this.element,\n target: this.target,\n maxHeight: this.element.style.maxHeight\n };\n this.trigger('beforeOpen', eventArgs_1, function (beforeOpenArgs) {\n if (!beforeOpenArgs.cancel) {\n if (_this.element.style.maxHeight !== eventArgs_1.maxHeight) {\n _this.allowMaxHeight = false;\n _this.element.style.maxHeight = eventArgs_1.maxHeight;\n }\n _this.storeActiveElement = document.activeElement;\n _this.element.tabIndex = -1;\n if (_this.isModal && (!isNullOrUndefined(_this.dlgOverlay))) {\n _this.dlgOverlay.style.display = 'block';\n _this.dlgContainer.style.display = 'flex';\n removeClass([_this.dlgOverlay], 'e-fade');\n if (!isNullOrUndefined(_this.targetEle)) {\n if (_this.targetEle === document.body) {\n _this.dlgContainer.style.position = 'fixed';\n }\n else {\n _this.dlgContainer.style.position = 'absolute';\n }\n _this.dlgOverlay.style.position = 'absolute';\n _this.element.style.position = 'relative';\n addClass([_this.targetEle], [DLG_TARGET, SCROLL_DISABLED]);\n }\n else {\n addClass([document.body], [DLG_TARGET, SCROLL_DISABLED]);\n }\n }\n var openAnimation = {\n name: _this.animationSettings.effect + 'In',\n duration: _this.animationSettings.duration,\n delay: _this.animationSettings.delay\n };\n var zIndexElement = (_this.isModal) ? _this.element.parentElement : _this.element;\n if (_this.calculatezIndex) {\n _this.setzIndex(zIndexElement, true);\n setStyleAttribute(_this.element, { 'zIndex': _this.zIndex });\n if (_this.isModal) {\n _this.setOverlayZindex(_this.zIndex);\n }\n }\n // eslint-disable-next-line\n _this.animationSettings.effect === 'None' ? _this.popupObj.show() : _this.popupObj.show(openAnimation);\n _this.dialogOpen = true;\n var prevOnChange = _this.isProtectedOnChange;\n _this.isProtectedOnChange = true;\n _this.visible = true;\n _this.preventVisibility = true;\n _this.isProtectedOnChange = prevOnChange;\n }\n });\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n this.renderReactTemplates();\n }\n };\n /**\n * Closes the dialog if it is in visible state.\n *\n * @param { Event } event - specifies the event\n * @returns {void}\n */\n Dialog.prototype.hide = function (event) {\n var _this = this;\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n if (this.preventVisibility) {\n var eventArgs = isBlazor() ? {\n cancel: false,\n isInteracted: event ? true : false,\n element: this.element,\n container: this.isModal ? this.dlgContainer : this.element,\n event: event\n } : {\n cancel: false,\n isInteracted: event ? true : false,\n element: this.element,\n target: this.target,\n container: this.isModal ? this.dlgContainer : this.element,\n event: event,\n closedBy: this.dlgClosedBy\n };\n this.closeArgs = eventArgs;\n this.trigger('beforeClose', eventArgs, function (beforeCloseArgs) {\n if (!beforeCloseArgs.cancel) {\n if (_this.isModal) {\n if (!isNullOrUndefined(_this.targetEle)) {\n removeClass([_this.targetEle], [DLG_TARGET, SCROLL_DISABLED]);\n }\n }\n if (document.body.classList.contains(DLG_TARGET) &&\n document.body.classList.contains(SCROLL_DISABLED)) {\n removeClass([document.body], [DLG_TARGET, SCROLL_DISABLED]);\n }\n var closeAnimation = {\n name: _this.animationSettings.effect + 'Out',\n duration: _this.animationSettings.duration,\n delay: _this.animationSettings.delay\n };\n // eslint-disable-next-line\n _this.animationSettings.effect === 'None' ? _this.popupObj.hide() : _this.popupObj.hide(closeAnimation);\n _this.dialogOpen = false;\n var prevOnChange = _this.isProtectedOnChange;\n _this.isProtectedOnChange = true;\n _this.visible = false;\n _this.preventVisibility = false;\n _this.isProtectedOnChange = prevOnChange;\n }\n _this.dlgClosedBy = DLG_USER_ACTION_CLOSED;\n });\n }\n };\n // eslint-disable-next-line\n /**\n * Specifies to view the Full screen Dialog.\n *\n * @returns {void}\n * @private\n */\n Dialog.prototype.fullScreen = function (args) {\n /* eslint-disable */\n var top = this.element.offsetTop;\n var left = this.element.offsetLeft;\n /* eslint-enable */\n if (args) {\n this.element.style.top = document.scrollingElement.scrollTop + 'px';\n addClass([this.element], FULLSCREEN);\n var display = this.element.style.display;\n this.element.style.display = 'none';\n this.element.style.maxHeight = (!isNullOrUndefined(this.target)) ?\n (this.targetEle.offsetHeight) + 'px' : (window.innerHeight) + 'px';\n this.element.style.display = display;\n addClass([document.body], [DLG_TARGET, SCROLL_DISABLED]);\n if (this.allowDragging && !isNullOrUndefined(this.dragObj)) {\n this.dragObj.destroy();\n }\n }\n else {\n removeClass([this.element], FULLSCREEN);\n removeClass([document.body], [DLG_TARGET, SCROLL_DISABLED]);\n if (this.allowDragging && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n }\n return args;\n };\n /**\n * Returns the dialog button instances.\n * Based on that, you can dynamically change the button states.\n *\n * @param { number } index - Index of the button.\n * @returns {Button} - returns the button element\n */\n Dialog.prototype.getButtons = function (index) {\n if (!isNullOrUndefined(index)) {\n return this.btnObj[index];\n }\n return this.btnObj;\n };\n __decorate([\n Property('')\n ], Dialog.prototype, \"content\", void 0);\n __decorate([\n Property(true)\n ], Dialog.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"showCloseIcon\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"isModal\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"header\", void 0);\n __decorate([\n Property(true)\n ], Dialog.prototype, \"visible\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"enableResize\", void 0);\n __decorate([\n Property(['South-East'])\n ], Dialog.prototype, \"resizeHandles\", void 0);\n __decorate([\n Property('auto')\n ], Dialog.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"minHeight\", void 0);\n __decorate([\n Property('100%')\n ], Dialog.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"cssClass\", void 0);\n __decorate([\n Property(1000)\n ], Dialog.prototype, \"zIndex\", void 0);\n __decorate([\n Property(null)\n ], Dialog.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"allowDragging\", void 0);\n __decorate([\n Collection([{}], ButtonProps)\n ], Dialog.prototype, \"buttons\", void 0);\n __decorate([\n Property(true)\n ], Dialog.prototype, \"closeOnEscape\", void 0);\n __decorate([\n Complex({}, AnimationSettings)\n ], Dialog.prototype, \"animationSettings\", void 0);\n __decorate([\n Complex({ X: 'center', Y: 'center' }, PositionData)\n ], Dialog.prototype, \"position\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"beforeSanitizeHtml\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"dragStop\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"overlayClick\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"destroyed\", void 0);\n Dialog = __decorate([\n NotifyPropertyChanges\n ], Dialog);\n return Dialog;\n}(Component));\nexport { Dialog };\n/**\n * Base for creating Alert and Confirmation Dialog through util method.\n */\n// eslint-disable-next-line\nexport var DialogUtility;\n(function (DialogUtility) {\n /**\n * An alert dialog box is used to display warning like messages to the users.\n * ```\n * Eg : DialogUtility.alert('Alert message');\n *\n * ```\n */\n /* istanbul ignore next */\n /**\n *\n * @param {AlertDialogArgs} args - specifies the string\n * @returns {Dialog} - returns the dialog element.\n */\n function alert(args) {\n // eslint-disable-next-line\n var dialogComponent;\n var dialogElement = createElement('div', { 'className': DLG_UTIL_ALERT });\n document.body.appendChild(dialogElement);\n var alertDialogObj;\n var okButtonModel = [{\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n }];\n if (typeof (args) === 'string') {\n alertDialogObj = createDialog({ content: args,\n position: { X: 'center', Y: 'top' },\n isModal: true, header: DLG_UTIL_DEFAULT_TITLE,\n buttons: okButtonModel }, dialogElement);\n }\n else {\n alertDialogObj = createDialog(alertOptions(args), dialogElement);\n }\n alertDialogObj.close = function () {\n if (args && args.close) {\n args.close.apply(alertDialogObj);\n }\n alertDialogObj.destroy();\n if (alertDialogObj.element.classList.contains('e-dlg-modal')) {\n alertDialogObj.element.parentElement.remove();\n alertDialogObj.target.classList.remove(DLG_UTIL_ROOT);\n }\n else {\n alertDialogObj.element.remove();\n }\n };\n return alertDialogObj;\n }\n DialogUtility.alert = alert;\n /**\n * A confirm dialog displays a specified message along with ‘OK’ and ‘Cancel’ button.\n * ```\n * Eg : DialogUtility.confirm('Confirm dialog message');\n *\n * ```\n */\n /* istanbul ignore next */\n /**\n *\n * @param {ConfirmDialogArgs} args - specifies the args\n * @returns {Dialog} - returns te element\n */\n function confirm(args) {\n // eslint-disable-next-line\n var dialogComponent;\n var dialogElement = createElement('div', { 'className': DLG_UTIL_CONFIRM });\n document.body.appendChild(dialogElement);\n var confirmDialogObj;\n var okCancelButtonModel = [{\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n }, {\n buttonModel: { content: 'Cancel' },\n click: function () {\n this.hide();\n }\n }];\n if (typeof (args) === 'string') {\n confirmDialogObj = createDialog({ position: { X: 'center', Y: 'top' }, content: args, isModal: true,\n header: DLG_UTIL_DEFAULT_TITLE, buttons: okCancelButtonModel\n }, dialogElement);\n }\n else {\n confirmDialogObj = createDialog(confirmOptions(args), dialogElement);\n }\n confirmDialogObj.close = function () {\n if (args && args.close) {\n args.close.apply(confirmDialogObj);\n }\n confirmDialogObj.destroy();\n if (confirmDialogObj.element.classList.contains('e-dlg-modal')) {\n confirmDialogObj.element.parentElement.remove();\n confirmDialogObj.target.classList.remove(DLG_UTIL_ROOT);\n }\n else {\n confirmDialogObj.element.remove();\n }\n };\n return confirmDialogObj;\n }\n DialogUtility.confirm = confirm;\n // eslint-disable-next-line\n function createDialog(options, element) {\n var dialogObject = new Dialog(options);\n dialogObject.appendTo(element);\n return dialogObject;\n }\n // eslint-disable-next-line\n function alertOptions(option) {\n var options = {};\n options.buttons = [];\n options = formOptions(options, option);\n options = setAlertButtonModel(options, option);\n return options;\n }\n // eslint-disable-next-line\n function confirmOptions(option) {\n var options = {};\n options.buttons = [];\n options = formOptions(options, option);\n options = setConfirmButtonModel(options, option);\n return options;\n }\n // eslint-disable-next-line\n function formOptions(options, option) {\n options.header = !isNullOrUndefined(option.title) ? option.title : null;\n options.content = !isNullOrUndefined(option.content) ? option.content : '';\n options.isModal = !isNullOrUndefined(option.isModal) ? option.isModal : true;\n options.showCloseIcon = !isNullOrUndefined(option.showCloseIcon) ? option.showCloseIcon : false;\n options.allowDragging = !isNullOrUndefined(option.isDraggable) ? option.isDraggable : false;\n options.closeOnEscape = !isNullOrUndefined(option.closeOnEscape) ? option.closeOnEscape : false;\n options.position = !isNullOrUndefined(option.position) ? option.position : { X: 'center', Y: 'top' };\n options.animationSettings = !isNullOrUndefined(option.animationSettings) ? option.animationSettings :\n { effect: 'Fade', duration: 400, delay: 0 };\n options.cssClass = !isNullOrUndefined(option.cssClass) ? option.cssClass : '';\n options.zIndex = !isNullOrUndefined(option.zIndex) ? option.zIndex : 1000;\n options.open = !isNullOrUndefined(option.open) ? option.open : null;\n options.width = !isNullOrUndefined(option.width) ? option.width : 'auto';\n options.height = !isNullOrUndefined(option.height) ? option.height : 'auto';\n return options;\n }\n // eslint-disable-next-line\n function setAlertButtonModel(options, option) {\n var alertButtonModel = [{\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n }];\n if (!isNullOrUndefined(option.okButton)) {\n options.buttons[0] = formButtonModel(options.buttons[0], option.okButton, alertButtonModel[0]);\n }\n else {\n options.buttons = alertButtonModel;\n }\n return options;\n }\n // eslint-disable-next-line\n function setConfirmButtonModel(options, option) {\n var okButtonModel = {\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n };\n var cancelButtonModel = {\n buttonModel: { content: 'Cancel' },\n click: function () {\n this.hide();\n }\n };\n if (!isNullOrUndefined(option.okButton)) {\n options.buttons[0] = formButtonModel(options.buttons[0], option.okButton, okButtonModel);\n }\n else {\n options.buttons[0] = okButtonModel;\n }\n if (!isNullOrUndefined(option.cancelButton)) {\n options.buttons[1] = formButtonModel(options.buttons[1], option.cancelButton, cancelButtonModel);\n }\n else {\n options.buttons[1] = cancelButtonModel;\n }\n return options;\n }\n // eslint-disable-next-line\n function formButtonModel(buttonModel, option, buttonPropModel) {\n var buttonProps = buttonPropModel;\n if (!isNullOrUndefined(option.text)) {\n buttonProps.buttonModel.content = option.text;\n }\n if (!isNullOrUndefined(option.icon)) {\n buttonProps.buttonModel.iconCss = option.icon;\n }\n if (!isNullOrUndefined(option.cssClass)) {\n buttonProps.buttonModel.cssClass = option.cssClass;\n }\n if (!isNullOrUndefined(option.click)) {\n buttonProps.click = option.click;\n }\n return buttonProps;\n }\n})(DialogUtility || (DialogUtility = {}));\n","/* eslint-disable valid-jsdoc */\n/* eslint-disable security/detect-object-injection */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from './manager';\nimport { Query, Predicate } from './query';\nvar consts = { GroupGuid: '{271bbba0-1ee7}' };\n/**\n * Data manager common utility methods.\n *\n * @hidden\n */\nvar DataUtil = /** @class */ (function () {\n function DataUtil() {\n }\n /**\n * Returns the value by invoking the provided parameter function.\n * If the paramater is not of type function then it will be returned as it is.\n *\n * @param {Function|string|string[]|number} value\n * @param {Object} inst?\n * @param inst\n * @hidden\n */\n DataUtil.getValue = function (value, inst) {\n if (typeof value === 'function') {\n return value.call(inst || {});\n }\n return value;\n };\n /**\n * Returns true if the input string ends with given string.\n *\n * @param {string} input\n * @param {string} substr\n */\n DataUtil.endsWith = function (input, substr) {\n return input.slice && input.slice(-substr.length) === substr;\n };\n /**\n * Returns true if the input string not ends with given string.\n *\n * @param {string} input\n * @param {string} substr\n */\n DataUtil.notEndsWith = function (input, substr) {\n return input.slice && input.slice(-substr.length) !== substr;\n };\n /**\n * Returns true if the input string starts with given string.\n *\n * @param {string} str\n * @param {string} startstr\n * @param input\n * @param start\n */\n DataUtil.startsWith = function (input, start) {\n return input.slice(0, start.length) === start;\n };\n /**\n * Returns true if the input string not starts with given string.\n *\n * @param {string} str\n * @param {string} startstr\n * @param input\n * @param start\n */\n DataUtil.notStartsWith = function (input, start) {\n return input.slice(0, start.length) !== start;\n };\n /**\n * Returns true if the input string pattern(wildcard) matches with given string.\n *\n * @param {string} str\n * @param {string} startstr\n * @param input\n * @param pattern\n */\n DataUtil.wildCard = function (input, pattern) {\n var asteriskSplit;\n var optionalSplit;\n // special character allowed search\n if (pattern.indexOf('[') !== -1) {\n pattern = pattern.split('[').join('[[]');\n }\n if (pattern.indexOf('(') !== -1) {\n pattern = pattern.split('(').join('[(]');\n }\n if (pattern.indexOf(')') !== -1) {\n pattern = pattern.split(')').join('[)]');\n }\n if (pattern.indexOf('\\\\') !== -1) {\n pattern = pattern.split('\\\\').join('[\\\\\\\\]');\n }\n if (pattern.indexOf('*') !== -1) {\n if (pattern.charAt(0) !== '*') {\n pattern = '^' + pattern;\n }\n if (pattern.charAt(pattern.length - 1) !== '*') {\n pattern = pattern + '$';\n }\n asteriskSplit = pattern.split('*');\n for (var i = 0; i < asteriskSplit.length; i++) {\n if (asteriskSplit[i].indexOf('.') === -1) {\n asteriskSplit[i] = asteriskSplit[i] + '.*';\n }\n else {\n asteriskSplit[i] = asteriskSplit[i] + '*';\n }\n }\n pattern = asteriskSplit.join('');\n }\n if (pattern.indexOf('%3f') !== -1 || pattern.indexOf('?') !== -1) {\n optionalSplit = pattern.indexOf('%3f') !== -1 ? pattern.split('%3f') : pattern.split('?');\n pattern = optionalSplit.join('.');\n }\n // eslint-disable-next-line security/detect-non-literal-regexp\n var regexPattern = new RegExp(pattern, 'g');\n return regexPattern.test(input);\n };\n /**\n * Returns true if the input string pattern(like) matches with given string.\n *\n * @param {string} str\n * @param {string} startstr\n * @param input\n * @param pattern\n */\n DataUtil.like = function (input, pattern) {\n if (pattern.indexOf('%') !== -1) {\n if (pattern.charAt(0) === '%' && pattern.lastIndexOf('%') < 2) {\n pattern = pattern.substring(1, pattern.length);\n return DataUtil.startsWith(DataUtil.toLowerCase(input), DataUtil.toLowerCase(pattern));\n }\n else if (pattern.charAt(pattern.length - 1) === '%' && pattern.indexOf('%') > pattern.length - 3) {\n pattern = pattern.substring(0, pattern.length - 1);\n return DataUtil.endsWith(DataUtil.toLowerCase(input), DataUtil.toLowerCase(pattern));\n }\n else if (pattern.lastIndexOf('%') !== pattern.indexOf('%') && pattern.lastIndexOf('%') > pattern.indexOf('%') + 1) {\n pattern = pattern.substring(pattern.indexOf('%') + 1, pattern.lastIndexOf('%'));\n return input.indexOf(pattern) !== -1;\n }\n else {\n return input.indexOf(pattern) !== -1;\n }\n }\n else {\n return false;\n }\n };\n /**\n * To return the sorting function based on the string.\n *\n * @param {string} order\n * @hidden\n */\n DataUtil.fnSort = function (order) {\n order = order ? DataUtil.toLowerCase(order) : 'ascending';\n if (order === 'ascending') {\n return this.fnAscending;\n }\n return this.fnDescending;\n };\n /**\n * Comparer function which is used to sort the data in ascending order.\n *\n * @param {string|number} x\n * @param {string|number} y\n * @returns number\n */\n DataUtil.fnAscending = function (x, y) {\n if (isNullOrUndefined(x) && isNullOrUndefined(y)) {\n return -1;\n }\n if (y === null || y === undefined) {\n return -1;\n }\n if (typeof x === 'string') {\n return x.localeCompare(y);\n }\n if (x === null || x === undefined) {\n return 1;\n }\n return x - y;\n };\n /**\n * Comparer function which is used to sort the data in descending order.\n *\n * @param {string|number} x\n * @param {string|number} y\n * @returns number\n */\n DataUtil.fnDescending = function (x, y) {\n if (isNullOrUndefined(x) && isNullOrUndefined(y)) {\n return -1;\n }\n if (y === null || y === undefined) {\n return 1;\n }\n if (typeof x === 'string') {\n return x.localeCompare(y) * -1;\n }\n if (x === null || x === undefined) {\n return -1;\n }\n return y - x;\n };\n DataUtil.extractFields = function (obj, fields) {\n var newObj = {};\n for (var i = 0; i < fields.length; i++) {\n newObj = this.setValue(fields[i], this.getObject(fields[i], obj), newObj);\n }\n return newObj;\n };\n /**\n * Select objects by given fields from jsonArray.\n *\n * @param {Object[]} jsonArray\n * @param {string[]} fields\n */\n DataUtil.select = function (jsonArray, fields) {\n var newData = [];\n for (var i = 0; i < jsonArray.length; i++) {\n newData.push(this.extractFields(jsonArray[i], fields));\n }\n return newData;\n };\n /**\n * Group the input data based on the field name.\n * It also performs aggregation of the grouped records based on the aggregates paramater.\n *\n * @param {Object[]} jsonArray\n * @param {string} field?\n * @param {Object[]} agg?\n * @param {number} level?\n * @param {Object[]} groupDs?\n * @param field\n * @param aggregates\n * @param level\n * @param groupDs\n * @param format\n * @param isLazyLoad\n */\n DataUtil.group = function (jsonArray, field, aggregates, level, groupDs, format, isLazyLoad) {\n level = level || 1;\n var jsonData = jsonArray;\n var guid = 'GroupGuid';\n if (jsonData.GroupGuid === consts[guid]) {\n var _loop_1 = function (j) {\n if (!isNullOrUndefined(groupDs)) {\n var indx = -1;\n var temp = groupDs.filter(function (e) { return e.key === jsonData[j].key; });\n indx = groupDs.indexOf(temp[0]);\n jsonData[j].items = this_1.group(jsonData[j].items, field, aggregates, jsonData.level + 1, groupDs[indx].items, format, isLazyLoad);\n jsonData[j].count = groupDs[indx].count;\n }\n else {\n jsonData[j].items = this_1.group(jsonData[j].items, field, aggregates, jsonData.level + 1, null, format, isLazyLoad);\n jsonData[j].count = jsonData[j].items.length;\n }\n };\n var this_1 = this;\n for (var j = 0; j < jsonData.length; j++) {\n _loop_1(j);\n }\n jsonData.childLevels += 1;\n return jsonData;\n }\n var grouped = {};\n var groupedArray = [];\n groupedArray.GroupGuid = consts[guid];\n groupedArray.level = level;\n groupedArray.childLevels = 0;\n groupedArray.records = jsonData;\n var _loop_2 = function (i) {\n var val = this_2.getVal(jsonData, i, field);\n if (!isNullOrUndefined(format)) {\n val = format(val, field);\n }\n if (!grouped[val]) {\n grouped[val] = {\n key: val,\n count: 0,\n items: [],\n aggregates: {},\n field: field\n };\n groupedArray.push(grouped[val]);\n if (!isNullOrUndefined(groupDs)) {\n var tempObj = groupDs.filter(function (e) { return e.key === grouped[val].key; });\n grouped[val].count = tempObj[0].count;\n }\n }\n grouped[val].count = !isNullOrUndefined(groupDs) ? grouped[val].count : grouped[val].count += 1;\n if (!isLazyLoad || (isLazyLoad && aggregates.length)) {\n grouped[val].items.push(jsonData[i]);\n }\n };\n var this_2 = this;\n for (var i = 0; i < jsonData.length; i++) {\n _loop_2(i);\n }\n if (aggregates && aggregates.length) {\n var _loop_3 = function (i) {\n var res = {};\n var fn = void 0;\n var aggs = aggregates;\n for (var j = 0; j < aggregates.length; j++) {\n fn = DataUtil.aggregates[aggregates[j].type];\n if (!isNullOrUndefined(groupDs)) {\n var temp = groupDs.filter(function (e) { return e.key === groupedArray[i].key; });\n if (fn) {\n res[aggs[j].field + ' - ' + aggs[j].type] = fn(temp[0].items, aggs[j].field);\n }\n }\n else {\n if (fn) {\n res[aggs[j].field + ' - ' + aggs[j].type] = fn(groupedArray[i].items, aggs[j].field);\n }\n }\n }\n groupedArray[i].aggregates = res;\n };\n for (var i = 0; i < groupedArray.length; i++) {\n _loop_3(i);\n }\n }\n if (isLazyLoad && groupedArray.length && aggregates.length) {\n for (var i = 0; i < groupedArray.length; i++) {\n groupedArray[i].items = [];\n }\n }\n return jsonData.length && groupedArray || jsonData;\n };\n /**\n * It is used to categorize the multiple items based on a specific field in jsonArray.\n * The hierarchical queries are commonly required when you use foreign key binding.\n *\n * @param {string} fKey\n * @param {string} from\n * @param {Object[]} source\n * @param {Group} lookup?\n * @param {string} pKey?\n * @param lookup\n * @param pKey\n * @hidden\n */\n DataUtil.buildHierarchy = function (fKey, from, source, lookup, pKey) {\n var i;\n var grp = {};\n var temp;\n if (lookup.result) {\n lookup = lookup.result;\n }\n if (lookup.GroupGuid) {\n this.throwError('DataManager: Do not have support Grouping in hierarchy');\n }\n for (i = 0; i < lookup.length; i++) {\n var fKeyData = this.getObject(fKey, lookup[i]);\n temp = grp[fKeyData] || (grp[fKeyData] = []);\n temp.push(lookup[i]);\n }\n for (i = 0; i < source.length; i++) {\n var fKeyData = this.getObject(pKey || fKey, source[i]);\n source[i][from] = grp[fKeyData];\n }\n };\n /**\n * The method used to get the field names which started with specified characters.\n *\n * @param {Object} obj\n * @param {string[]} fields?\n * @param {string} prefix?\n * @param fields\n * @param prefix\n * @hidden\n */\n DataUtil.getFieldList = function (obj, fields, prefix) {\n if (prefix === undefined) {\n prefix = '';\n }\n if (fields === undefined || fields === null) {\n return this.getFieldList(obj, [], prefix);\n }\n var copyObj = obj;\n var keys = Object.keys(obj);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n if (typeof copyObj[prop] === 'object' && !(copyObj[prop] instanceof Array)) {\n this.getFieldList(copyObj[prop], fields, prefix + prop + '.');\n }\n else {\n fields.push(prefix + prop);\n }\n }\n return fields;\n };\n /**\n * Gets the value of the property in the given object.\n * The complex object can be accessed by providing the field names concatenated with dot(.).\n *\n * @param {string} nameSpace - The name of the property to be accessed.\n * @param {Object} from - Defines the source object.\n */\n DataUtil.getObject = function (nameSpace, from) {\n if (!nameSpace) {\n return from;\n }\n if (!from) {\n return undefined;\n }\n if (nameSpace.indexOf('.') === -1) {\n var lowerCaseNameSpace = nameSpace.charAt(0).toLowerCase() + nameSpace.slice(1);\n var upperCaseNameSpace = nameSpace.charAt(0).toUpperCase() + nameSpace.slice(1);\n if (!isNullOrUndefined(from[nameSpace])) {\n return from[nameSpace];\n }\n else {\n if (!isNullOrUndefined(from[lowerCaseNameSpace])) {\n return from[lowerCaseNameSpace];\n }\n else if (!isNullOrUndefined(from[upperCaseNameSpace])) {\n return from[upperCaseNameSpace];\n }\n else {\n return null;\n }\n }\n }\n var value = from;\n var splits = nameSpace.split('.');\n for (var i = 0; i < splits.length; i++) {\n if (value == null) {\n break;\n }\n value = value[splits[i]];\n if (value === undefined) {\n var casing = splits[i].charAt(0).toUpperCase() + splits[i].slice(1);\n value = from[casing] || from[casing.charAt(0).toLowerCase() + casing.slice(1)] || null;\n }\n from = value;\n }\n return value;\n };\n /**\n * To set value for the nameSpace in desired object.\n *\n * @param {string} nameSpace - String value to the get the inner object.\n * @param {Object} value - Value that you need to set.\n * @param {Object} obj - Object to get the inner object value.\n * @return { [key: string]: Object; } | Object\n * @hidden\n */\n DataUtil.setValue = function (nameSpace, value, obj) {\n var keys = nameSpace.toString().split('.');\n var start = obj || {};\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[i];\n if (i + 1 === length) {\n fromObj[key] = value === undefined ? undefined : value;\n }\n else if (isNullOrUndefined(fromObj[key])) {\n fromObj[key] = {};\n }\n fromObj = fromObj[key];\n }\n return start;\n };\n /**\n * Sort the given data based on the field and comparer.\n *\n * @param {Object[]} ds - Defines the input data.\n * @param {string} field - Defines the field to be sorted.\n * @param {Function} comparer - Defines the comparer function used to sort the records.\n */\n DataUtil.sort = function (ds, field, comparer) {\n if (ds.length <= 1) {\n return ds;\n }\n var middle = parseInt((ds.length / 2).toString(), 10);\n var left = ds.slice(0, middle);\n var right = ds.slice(middle);\n left = this.sort(left, field, comparer);\n right = this.sort(right, field, comparer);\n return this.merge(left, right, field, comparer);\n };\n DataUtil.ignoreDiacritics = function (value) {\n if (typeof value !== 'string') {\n return value;\n }\n var result = value.split('');\n var newValue = result.map(function (temp) { return temp in DataUtil.diacritics ? DataUtil.diacritics[temp] : temp; });\n return newValue.join('');\n };\n DataUtil.merge = function (left, right, fieldName, comparer) {\n var result = [];\n var current;\n while (left.length > 0 || right.length > 0) {\n if (left.length > 0 && right.length > 0) {\n if (comparer) {\n current = comparer(this.getVal(left, 0, fieldName), this.getVal(right, 0, fieldName), left[0], right[0]) <= 0 ? left : right;\n }\n else {\n current = left[0][fieldName] < left[0][fieldName] ? left : right;\n }\n }\n else {\n current = left.length > 0 ? left : right;\n }\n result.push(current.shift());\n }\n return result;\n };\n DataUtil.getVal = function (array, index, field) {\n return field ? this.getObject(field, array[index]) : array[index];\n };\n DataUtil.toLowerCase = function (val) {\n return val ? typeof val === 'string' ? val.toLowerCase() : val.toString() : (val === 0 || val === false) ? val.toString() : '';\n };\n /**\n * To perform the filter operation with specified adaptor and returns the result.\n *\n * @param {Object} adaptor\n * @param {string} fnName\n * @param {Object} param1?\n * @param {Object} param2?\n * @param param1\n * @param param2\n * @hidden\n */\n DataUtil.callAdaptorFunction = function (adaptor, fnName, param1, param2) {\n if (fnName in adaptor) {\n var res = adaptor[fnName](param1, param2);\n if (!isNullOrUndefined(res)) {\n param1 = res;\n }\n }\n return param1;\n };\n DataUtil.getAddParams = function (adp, dm, query) {\n var req = {};\n DataUtil.callAdaptorFunction(adp, 'addParams', {\n dm: dm,\n query: query,\n params: query.params,\n reqParams: req\n });\n return req;\n };\n /**\n * Checks wheather the given input is a plain object or not.\n *\n * @param {Object|Object[]} obj\n */\n DataUtil.isPlainObject = function (obj) {\n return (!!obj) && (obj.constructor === Object);\n };\n /**\n * Returns true when the browser cross origin request.\n */\n DataUtil.isCors = function () {\n var xhr = null;\n var request = 'XMLHttpRequest';\n try {\n xhr = new window[request]();\n }\n catch (e) {\n // No exception handling\n }\n return !!xhr && ('withCredentials' in xhr);\n };\n /**\n * Generate random GUID value which will be prefixed with the given value.\n *\n * @param {string} prefix\n */\n DataUtil.getGuid = function (prefix) {\n var hexs = '0123456789abcdef';\n var rand;\n return (prefix || '') + '00000000-0000-4000-0000-000000000000'.replace(/0/g, function (val, i) {\n if ('crypto' in window && 'getRandomValues' in crypto) {\n var arr = new Uint8Array(1);\n window.crypto.getRandomValues(arr);\n rand = arr[0] % 16 | 0;\n }\n else {\n rand = Math.random() * 16 | 0;\n }\n return hexs[i === 19 ? rand & 0x3 | 0x8 : rand];\n });\n };\n /**\n * Checks wheather the given value is null or not.\n *\n * @param {string|Object} val\n * @returns boolean\n */\n DataUtil.isNull = function (val) {\n return val === undefined || val === null;\n };\n /**\n * To get the required items from collection of objects.\n *\n * @param {Object[]} array\n * @param {string} field\n * @param {Function} comparer\n * @returns Object\n * @hidden\n */\n DataUtil.getItemFromComparer = function (array, field, comparer) {\n var keyVal;\n var current;\n var key;\n var i = 0;\n var castRequired = typeof DataUtil.getVal(array, 0, field) === 'string';\n if (array.length) {\n while (isNullOrUndefined(keyVal) && i < array.length) {\n keyVal = DataUtil.getVal(array, i, field);\n key = array[i++];\n }\n }\n for (; i < array.length; i++) {\n current = DataUtil.getVal(array, i, field);\n if (isNullOrUndefined(current)) {\n continue;\n }\n if (castRequired) {\n keyVal = +keyVal;\n current = +current;\n }\n if (comparer(keyVal, current) > 0) {\n keyVal = current;\n key = array[i];\n }\n }\n return key;\n };\n /**\n * To get distinct values of Array or Array of Objects.\n *\n * @param {Object[]} json\n * @param {string} field\n * @param fieldName\n * @param {boolean} requiresCompleteRecord\n * @returns Object[]\n * * distinct array of objects is return when requiresCompleteRecord set as true.\n * @hidden\n */\n DataUtil.distinct = function (json, fieldName, requiresCompleteRecord) {\n requiresCompleteRecord = isNullOrUndefined(requiresCompleteRecord) ? false : requiresCompleteRecord;\n var result = [];\n var val;\n var tmp = {};\n json.forEach(function (data, index) {\n val = typeof (json[index]) === 'object' ? DataUtil.getVal(json, index, fieldName) : json[index];\n if (!(val in tmp)) {\n result.push(!requiresCompleteRecord ? val : json[index]);\n tmp[val] = 1;\n }\n });\n return result;\n };\n /**\n * Process the given records based on the datamanager string.\n *\n * @param {string} datamanager\n * @param dm\n * @param {Object[]} records\n */\n DataUtil.processData = function (dm, records) {\n var query = this.prepareQuery(dm);\n var sampledata = new DataManager(records);\n if (dm.requiresCounts) {\n query.requiresCount();\n }\n /* eslint-disable @typescript-eslint/no-explicit-any */\n // tslint:disable-next-line:no-any\n var result = sampledata.executeLocal(query);\n /* eslint-enable @typescript-eslint/no-explicit-any */\n var returnValue = {\n result: dm.requiresCounts ? result.result : result,\n count: result.count,\n aggregates: JSON.stringify(result.aggregates)\n };\n return dm.requiresCounts ? returnValue : result;\n };\n DataUtil.prepareQuery = function (dm) {\n var _this = this;\n var query = new Query();\n if (dm.select) {\n query.select(dm.select);\n }\n if (dm.where) {\n var where = DataUtil.parse.parseJson(dm.where);\n where.filter(function (pred) {\n if (isNullOrUndefined(pred.condition)) {\n query.where(pred.field, pred.operator, pred.value, pred.ignoreCase, pred.ignoreAccent);\n }\n else {\n var predicateList = [];\n if (pred.field) {\n predicateList.push(new Predicate(pred.field, pred.operator, pred.value, pred.ignoreCase, pred.ignoreAccent));\n }\n else {\n predicateList = predicateList.concat(_this.getPredicate(pred.predicates));\n }\n if (pred.condition === 'or') {\n query.where(Predicate.or(predicateList));\n }\n else if (pred.condition === 'and') {\n query.where(Predicate.and(predicateList));\n }\n }\n });\n }\n if (dm.search) {\n var search = DataUtil.parse.parseJson(dm.search);\n // tslint:disable-next-line:no-string-literal\n search.filter(function (e) { return query.search(e.key, e.fields, e['operator'], \n // tslint:disable-next-line:no-string-literal\n e['ignoreCase'], e['ignoreAccent']); });\n }\n if (dm.aggregates) {\n dm.aggregates.filter(function (e) { return query.aggregate(e.type, e.field); });\n }\n if (dm.sorted) {\n dm.sorted.filter(function (e) { return query.sortBy(e.name, e.direction); });\n }\n if (dm.skip) {\n query.skip(dm.skip);\n }\n if (dm.take) {\n query.take(dm.take);\n }\n if (dm.group) {\n dm.group.filter(function (grp) { return query.group(grp); });\n }\n return query;\n };\n DataUtil.getPredicate = function (pred) {\n var mainPred = [];\n for (var i = 0; i < pred.length; i++) {\n var e = pred[i];\n if (e.field) {\n mainPred.push(new Predicate(e.field, e.operator, e.value, e.ignoreCase, e.ignoreAccent));\n }\n else {\n var childPred = [];\n // tslint:disable-next-line:typedef\n var cpre = this.getPredicate(e.predicates);\n for (var _i = 0, _a = Object.keys(cpre); _i < _a.length; _i++) {\n var prop = _a[_i];\n childPred.push(cpre[prop]);\n }\n mainPred.push(e.condition === 'or' ? Predicate.or(childPred) : Predicate.and(childPred));\n }\n }\n return mainPred;\n };\n /**\n * Specifies the value which will be used to adjust the date value to server timezone.\n *\n * @default null\n */\n DataUtil.serverTimezoneOffset = null;\n /**\n * Species whether are not to be parsed with serverTimezoneOffset value.\n *\n * @hidden\n */\n DataUtil.timeZoneHandling = true;\n /**\n * Throw error with the given string as message.\n *\n * @param {string} er\n * @param error\n */\n DataUtil.throwError = function (error) {\n try {\n throw new Error(error);\n }\n catch (e) {\n // eslint-disable-next-line no-throw-literal\n throw e.message + '\\n' + e.stack;\n }\n };\n DataUtil.aggregates = {\n /**\n * Calculate sum of the given field in the data.\n *\n * @param {Object[]} ds\n * @param {string} field\n */\n sum: function (ds, field) {\n var result = 0;\n var val;\n var castRequired = typeof DataUtil.getVal(ds, 0, field) !== 'number';\n for (var i = 0; i < ds.length; i++) {\n val = DataUtil.getVal(ds, i, field);\n if (!isNaN(val) && val !== null) {\n if (castRequired) {\n val = +val;\n }\n result += val;\n }\n }\n return result;\n },\n /**\n * Calculate average value of the given field in the data.\n *\n * @param {Object[]} ds\n * @param {string} field\n */\n average: function (ds, field) {\n return DataUtil.aggregates.sum(ds, field) / ds.length;\n },\n /**\n * Returns the min value of the data based on the field.\n *\n * @param {Object[]} ds\n * @param {string|Function} field\n */\n min: function (ds, field) {\n var comparer;\n if (typeof field === 'function') {\n comparer = field;\n field = null;\n }\n return DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnAscending));\n },\n /**\n * Returns the max value of the data based on the field.\n *\n * @param {Object[]} ds\n * @param {string} field\n * @returns number\n */\n max: function (ds, field) {\n var comparer;\n if (typeof field === 'function') {\n comparer = field;\n field = null;\n }\n return DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnDescending));\n },\n /**\n * Returns the total number of true value present in the data based on the given boolean field name.\n *\n * @param {Object[]} ds\n * @param {string} field\n */\n truecount: function (ds, field) {\n return new DataManager(ds).executeLocal(new Query().where(field, 'equal', true, true)).length;\n },\n /**\n * Returns the total number of false value present in the data based on the given boolean field name.\n *\n * @param {Object[]} ds\n * @param {string} field\n */\n falsecount: function (ds, field) {\n return new DataManager(ds).executeLocal(new Query().where(field, 'equal', false, true)).length;\n },\n /**\n * Returns the length of the given data.\n *\n * @param {Object[]} ds\n * @param {string} field?\n * @param field\n * @returns number\n */\n count: function (ds, field) {\n return ds.length;\n }\n };\n /**\n * Specifies the Object with filter operators.\n */\n DataUtil.operatorSymbols = {\n '<': 'lessthan',\n '>': 'greaterthan',\n '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal',\n '==': 'equal',\n '!=': 'notequal',\n '*=': 'contains',\n '$=': 'endswith',\n '^=': 'startswith'\n };\n /**\n * Specifies the Object with filter operators which will be used for OData filter query generation.\n * * It will be used for date/number type filter query.\n */\n DataUtil.odBiOperator = {\n '<': ' lt ',\n '>': ' gt ',\n '<=': ' le ',\n '>=': ' ge ',\n '==': ' eq ',\n '!=': ' ne ',\n 'lessthan': ' lt ',\n 'lessthanorequal': ' le ',\n 'greaterthan': ' gt ',\n 'greaterthanorequal': ' ge ',\n 'equal': ' eq ',\n 'notequal': ' ne '\n };\n /**\n * Specifies the Object with filter operators which will be used for OData filter query generation.\n * It will be used for string type filter query.\n */\n DataUtil.odUniOperator = {\n '$=': 'endswith',\n '^=': 'startswith',\n '*=': 'substringof',\n 'endswith': 'endswith',\n 'startswith': 'startswith',\n 'contains': 'substringof',\n 'doesnotendwith': 'not endswith',\n 'doesnotstartwith': 'not startswith',\n 'doesnotcontain': 'not substringof',\n 'wildcard': 'wildcard',\n 'like': 'like'\n };\n /**\n * Specifies the Object with filter operators which will be used for ODataV4 filter query generation.\n * It will be used for string type filter query.\n */\n DataUtil.odv4UniOperator = {\n '$=': 'endswith',\n '^=': 'startswith',\n '*=': 'contains',\n 'endswith': 'endswith',\n 'startswith': 'startswith',\n 'contains': 'contains',\n 'doesnotendwith': 'not endswith',\n 'doesnotstartwith': 'not startswith',\n 'doesnotcontain': 'not contains',\n 'wildcard': 'wildcard',\n 'like': 'like'\n };\n DataUtil.diacritics = {\n '\\u24B6': 'A',\n '\\uFF21': 'A',\n '\\u00C0': 'A',\n '\\u00C1': 'A',\n '\\u00C2': 'A',\n '\\u1EA6': 'A',\n '\\u1EA4': 'A',\n '\\u1EAA': 'A',\n '\\u1EA8': 'A',\n '\\u00C3': 'A',\n '\\u0100': 'A',\n '\\u0102': 'A',\n '\\u1EB0': 'A',\n '\\u1EAE': 'A',\n '\\u1EB4': 'A',\n '\\u1EB2': 'A',\n '\\u0226': 'A',\n '\\u01E0': 'A',\n '\\u00C4': 'A',\n '\\u01DE': 'A',\n '\\u1EA2': 'A',\n '\\u00C5': 'A',\n '\\u01FA': 'A',\n '\\u01CD': 'A',\n '\\u0200': 'A',\n '\\u0202': 'A',\n '\\u1EA0': 'A',\n '\\u1EAC': 'A',\n '\\u1EB6': 'A',\n '\\u1E00': 'A',\n '\\u0104': 'A',\n '\\u023A': 'A',\n '\\u2C6F': 'A',\n '\\uA732': 'AA',\n '\\u00C6': 'AE',\n '\\u01FC': 'AE',\n '\\u01E2': 'AE',\n '\\uA734': 'AO',\n '\\uA736': 'AU',\n '\\uA738': 'AV',\n '\\uA73A': 'AV',\n '\\uA73C': 'AY',\n '\\u24B7': 'B',\n '\\uFF22': 'B',\n '\\u1E02': 'B',\n '\\u1E04': 'B',\n '\\u1E06': 'B',\n '\\u0243': 'B',\n '\\u0182': 'B',\n '\\u0181': 'B',\n '\\u24B8': 'C',\n '\\uFF23': 'C',\n '\\u0106': 'C',\n '\\u0108': 'C',\n '\\u010A': 'C',\n '\\u010C': 'C',\n '\\u00C7': 'C',\n '\\u1E08': 'C',\n '\\u0187': 'C',\n '\\u023B': 'C',\n '\\uA73E': 'C',\n '\\u24B9': 'D',\n '\\uFF24': 'D',\n '\\u1E0A': 'D',\n '\\u010E': 'D',\n '\\u1E0C': 'D',\n '\\u1E10': 'D',\n '\\u1E12': 'D',\n '\\u1E0E': 'D',\n '\\u0110': 'D',\n '\\u018B': 'D',\n '\\u018A': 'D',\n '\\u0189': 'D',\n '\\uA779': 'D',\n '\\u01F1': 'DZ',\n '\\u01C4': 'DZ',\n '\\u01F2': 'Dz',\n '\\u01C5': 'Dz',\n '\\u24BA': 'E',\n '\\uFF25': 'E',\n '\\u00C8': 'E',\n '\\u00C9': 'E',\n '\\u00CA': 'E',\n '\\u1EC0': 'E',\n '\\u1EBE': 'E',\n '\\u1EC4': 'E',\n '\\u1EC2': 'E',\n '\\u1EBC': 'E',\n '\\u0112': 'E',\n '\\u1E14': 'E',\n '\\u1E16': 'E',\n '\\u0114': 'E',\n '\\u0116': 'E',\n '\\u00CB': 'E',\n '\\u1EBA': 'E',\n '\\u011A': 'E',\n '\\u0204': 'E',\n '\\u0206': 'E',\n '\\u1EB8': 'E',\n '\\u1EC6': 'E',\n '\\u0228': 'E',\n '\\u1E1C': 'E',\n '\\u0118': 'E',\n '\\u1E18': 'E',\n '\\u1E1A': 'E',\n '\\u0190': 'E',\n '\\u018E': 'E',\n '\\u24BB': 'F',\n '\\uFF26': 'F',\n '\\u1E1E': 'F',\n '\\u0191': 'F',\n '\\uA77B': 'F',\n '\\u24BC': 'G',\n '\\uFF27': 'G',\n '\\u01F4': 'G',\n '\\u011C': 'G',\n '\\u1E20': 'G',\n '\\u011E': 'G',\n '\\u0120': 'G',\n '\\u01E6': 'G',\n '\\u0122': 'G',\n '\\u01E4': 'G',\n '\\u0193': 'G',\n '\\uA7A0': 'G',\n '\\uA77D': 'G',\n '\\uA77E': 'G',\n '\\u24BD': 'H',\n '\\uFF28': 'H',\n '\\u0124': 'H',\n '\\u1E22': 'H',\n '\\u1E26': 'H',\n '\\u021E': 'H',\n '\\u1E24': 'H',\n '\\u1E28': 'H',\n '\\u1E2A': 'H',\n '\\u0126': 'H',\n '\\u2C67': 'H',\n '\\u2C75': 'H',\n '\\uA78D': 'H',\n '\\u24BE': 'I',\n '\\uFF29': 'I',\n '\\u00CC': 'I',\n '\\u00CD': 'I',\n '\\u00CE': 'I',\n '\\u0128': 'I',\n '\\u012A': 'I',\n '\\u012C': 'I',\n '\\u0130': 'I',\n '\\u00CF': 'I',\n '\\u1E2E': 'I',\n '\\u1EC8': 'I',\n '\\u01CF': 'I',\n '\\u0208': 'I',\n '\\u020A': 'I',\n '\\u1ECA': 'I',\n '\\u012E': 'I',\n '\\u1E2C': 'I',\n '\\u0197': 'I',\n '\\u24BF': 'J',\n '\\uFF2A': 'J',\n '\\u0134': 'J',\n '\\u0248': 'J',\n '\\u24C0': 'K',\n '\\uFF2B': 'K',\n '\\u1E30': 'K',\n '\\u01E8': 'K',\n '\\u1E32': 'K',\n '\\u0136': 'K',\n '\\u1E34': 'K',\n '\\u0198': 'K',\n '\\u2C69': 'K',\n '\\uA740': 'K',\n '\\uA742': 'K',\n '\\uA744': 'K',\n '\\uA7A2': 'K',\n '\\u24C1': 'L',\n '\\uFF2C': 'L',\n '\\u013F': 'L',\n '\\u0139': 'L',\n '\\u013D': 'L',\n '\\u1E36': 'L',\n '\\u1E38': 'L',\n '\\u013B': 'L',\n '\\u1E3C': 'L',\n '\\u1E3A': 'L',\n '\\u0141': 'L',\n '\\u023D': 'L',\n '\\u2C62': 'L',\n '\\u2C60': 'L',\n '\\uA748': 'L',\n '\\uA746': 'L',\n '\\uA780': 'L',\n '\\u01C7': 'LJ',\n '\\u01C8': 'Lj',\n '\\u24C2': 'M',\n '\\uFF2D': 'M',\n '\\u1E3E': 'M',\n '\\u1E40': 'M',\n '\\u1E42': 'M',\n '\\u2C6E': 'M',\n '\\u019C': 'M',\n '\\u24C3': 'N',\n '\\uFF2E': 'N',\n '\\u01F8': 'N',\n '\\u0143': 'N',\n '\\u00D1': 'N',\n '\\u1E44': 'N',\n '\\u0147': 'N',\n '\\u1E46': 'N',\n '\\u0145': 'N',\n '\\u1E4A': 'N',\n '\\u1E48': 'N',\n '\\u0220': 'N',\n '\\u019D': 'N',\n '\\uA790': 'N',\n '\\uA7A4': 'N',\n '\\u01CA': 'NJ',\n '\\u01CB': 'Nj',\n '\\u24C4': 'O',\n '\\uFF2F': 'O',\n '\\u00D2': 'O',\n '\\u00D3': 'O',\n '\\u00D4': 'O',\n '\\u1ED2': 'O',\n '\\u1ED0': 'O',\n '\\u1ED6': 'O',\n '\\u1ED4': 'O',\n '\\u00D5': 'O',\n '\\u1E4C': 'O',\n '\\u022C': 'O',\n '\\u1E4E': 'O',\n '\\u014C': 'O',\n '\\u1E50': 'O',\n '\\u1E52': 'O',\n '\\u014E': 'O',\n '\\u022E': 'O',\n '\\u0230': 'O',\n '\\u00D6': 'O',\n '\\u022A': 'O',\n '\\u1ECE': 'O',\n '\\u0150': 'O',\n '\\u01D1': 'O',\n '\\u020C': 'O',\n '\\u020E': 'O',\n '\\u01A0': 'O',\n '\\u1EDC': 'O',\n '\\u1EDA': 'O',\n '\\u1EE0': 'O',\n '\\u1EDE': 'O',\n '\\u1EE2': 'O',\n '\\u1ECC': 'O',\n '\\u1ED8': 'O',\n '\\u01EA': 'O',\n '\\u01EC': 'O',\n '\\u00D8': 'O',\n '\\u01FE': 'O',\n '\\u0186': 'O',\n '\\u019F': 'O',\n '\\uA74A': 'O',\n '\\uA74C': 'O',\n '\\u01A2': 'OI',\n '\\uA74E': 'OO',\n '\\u0222': 'OU',\n '\\u24C5': 'P',\n '\\uFF30': 'P',\n '\\u1E54': 'P',\n '\\u1E56': 'P',\n '\\u01A4': 'P',\n '\\u2C63': 'P',\n '\\uA750': 'P',\n '\\uA752': 'P',\n '\\uA754': 'P',\n '\\u24C6': 'Q',\n '\\uFF31': 'Q',\n '\\uA756': 'Q',\n '\\uA758': 'Q',\n '\\u024A': 'Q',\n '\\u24C7': 'R',\n '\\uFF32': 'R',\n '\\u0154': 'R',\n '\\u1E58': 'R',\n '\\u0158': 'R',\n '\\u0210': 'R',\n '\\u0212': 'R',\n '\\u1E5A': 'R',\n '\\u1E5C': 'R',\n '\\u0156': 'R',\n '\\u1E5E': 'R',\n '\\u024C': 'R',\n '\\u2C64': 'R',\n '\\uA75A': 'R',\n '\\uA7A6': 'R',\n '\\uA782': 'R',\n '\\u24C8': 'S',\n '\\uFF33': 'S',\n '\\u1E9E': 'S',\n '\\u015A': 'S',\n '\\u1E64': 'S',\n '\\u015C': 'S',\n '\\u1E60': 'S',\n '\\u0160': 'S',\n '\\u1E66': 'S',\n '\\u1E62': 'S',\n '\\u1E68': 'S',\n '\\u0218': 'S',\n '\\u015E': 'S',\n '\\u2C7E': 'S',\n '\\uA7A8': 'S',\n '\\uA784': 'S',\n '\\u24C9': 'T',\n '\\uFF34': 'T',\n '\\u1E6A': 'T',\n '\\u0164': 'T',\n '\\u1E6C': 'T',\n '\\u021A': 'T',\n '\\u0162': 'T',\n '\\u1E70': 'T',\n '\\u1E6E': 'T',\n '\\u0166': 'T',\n '\\u01AC': 'T',\n '\\u01AE': 'T',\n '\\u023E': 'T',\n '\\uA786': 'T',\n '\\uA728': 'TZ',\n '\\u24CA': 'U',\n '\\uFF35': 'U',\n '\\u00D9': 'U',\n '\\u00DA': 'U',\n '\\u00DB': 'U',\n '\\u0168': 'U',\n '\\u1E78': 'U',\n '\\u016A': 'U',\n '\\u1E7A': 'U',\n '\\u016C': 'U',\n '\\u00DC': 'U',\n '\\u01DB': 'U',\n '\\u01D7': 'U',\n '\\u01D5': 'U',\n '\\u01D9': 'U',\n '\\u1EE6': 'U',\n '\\u016E': 'U',\n '\\u0170': 'U',\n '\\u01D3': 'U',\n '\\u0214': 'U',\n '\\u0216': 'U',\n '\\u01AF': 'U',\n '\\u1EEA': 'U',\n '\\u1EE8': 'U',\n '\\u1EEE': 'U',\n '\\u1EEC': 'U',\n '\\u1EF0': 'U',\n '\\u1EE4': 'U',\n '\\u1E72': 'U',\n '\\u0172': 'U',\n '\\u1E76': 'U',\n '\\u1E74': 'U',\n '\\u0244': 'U',\n '\\u24CB': 'V',\n '\\uFF36': 'V',\n '\\u1E7C': 'V',\n '\\u1E7E': 'V',\n '\\u01B2': 'V',\n '\\uA75E': 'V',\n '\\u0245': 'V',\n '\\uA760': 'VY',\n '\\u24CC': 'W',\n '\\uFF37': 'W',\n '\\u1E80': 'W',\n '\\u1E82': 'W',\n '\\u0174': 'W',\n '\\u1E86': 'W',\n '\\u1E84': 'W',\n '\\u1E88': 'W',\n '\\u2C72': 'W',\n '\\u24CD': 'X',\n '\\uFF38': 'X',\n '\\u1E8A': 'X',\n '\\u1E8C': 'X',\n '\\u24CE': 'Y',\n '\\uFF39': 'Y',\n '\\u1EF2': 'Y',\n '\\u00DD': 'Y',\n '\\u0176': 'Y',\n '\\u1EF8': 'Y',\n '\\u0232': 'Y',\n '\\u1E8E': 'Y',\n '\\u0178': 'Y',\n '\\u1EF6': 'Y',\n '\\u1EF4': 'Y',\n '\\u01B3': 'Y',\n '\\u024E': 'Y',\n '\\u1EFE': 'Y',\n '\\u24CF': 'Z',\n '\\uFF3A': 'Z',\n '\\u0179': 'Z',\n '\\u1E90': 'Z',\n '\\u017B': 'Z',\n '\\u017D': 'Z',\n '\\u1E92': 'Z',\n '\\u1E94': 'Z',\n '\\u01B5': 'Z',\n '\\u0224': 'Z',\n '\\u2C7F': 'Z',\n '\\u2C6B': 'Z',\n '\\uA762': 'Z',\n '\\u24D0': 'a',\n '\\uFF41': 'a',\n '\\u1E9A': 'a',\n '\\u00E0': 'a',\n '\\u00E1': 'a',\n '\\u00E2': 'a',\n '\\u1EA7': 'a',\n '\\u1EA5': 'a',\n '\\u1EAB': 'a',\n '\\u1EA9': 'a',\n '\\u00E3': 'a',\n '\\u0101': 'a',\n '\\u0103': 'a',\n '\\u1EB1': 'a',\n '\\u1EAF': 'a',\n '\\u1EB5': 'a',\n '\\u1EB3': 'a',\n '\\u0227': 'a',\n '\\u01E1': 'a',\n '\\u00E4': 'a',\n '\\u01DF': 'a',\n '\\u1EA3': 'a',\n '\\u00E5': 'a',\n '\\u01FB': 'a',\n '\\u01CE': 'a',\n '\\u0201': 'a',\n '\\u0203': 'a',\n '\\u1EA1': 'a',\n '\\u1EAD': 'a',\n '\\u1EB7': 'a',\n '\\u1E01': 'a',\n '\\u0105': 'a',\n '\\u2C65': 'a',\n '\\u0250': 'a',\n '\\uA733': 'aa',\n '\\u00E6': 'ae',\n '\\u01FD': 'ae',\n '\\u01E3': 'ae',\n '\\uA735': 'ao',\n '\\uA737': 'au',\n '\\uA739': 'av',\n '\\uA73B': 'av',\n '\\uA73D': 'ay',\n '\\u24D1': 'b',\n '\\uFF42': 'b',\n '\\u1E03': 'b',\n '\\u1E05': 'b',\n '\\u1E07': 'b',\n '\\u0180': 'b',\n '\\u0183': 'b',\n '\\u0253': 'b',\n '\\u24D2': 'c',\n '\\uFF43': 'c',\n '\\u0107': 'c',\n '\\u0109': 'c',\n '\\u010B': 'c',\n '\\u010D': 'c',\n '\\u00E7': 'c',\n '\\u1E09': 'c',\n '\\u0188': 'c',\n '\\u023C': 'c',\n '\\uA73F': 'c',\n '\\u2184': 'c',\n '\\u24D3': 'd',\n '\\uFF44': 'd',\n '\\u1E0B': 'd',\n '\\u010F': 'd',\n '\\u1E0D': 'd',\n '\\u1E11': 'd',\n '\\u1E13': 'd',\n '\\u1E0F': 'd',\n '\\u0111': 'd',\n '\\u018C': 'd',\n '\\u0256': 'd',\n '\\u0257': 'd',\n '\\uA77A': 'd',\n '\\u01F3': 'dz',\n '\\u01C6': 'dz',\n '\\u24D4': 'e',\n '\\uFF45': 'e',\n '\\u00E8': 'e',\n '\\u00E9': 'e',\n '\\u00EA': 'e',\n '\\u1EC1': 'e',\n '\\u1EBF': 'e',\n '\\u1EC5': 'e',\n '\\u1EC3': 'e',\n '\\u1EBD': 'e',\n '\\u0113': 'e',\n '\\u1E15': 'e',\n '\\u1E17': 'e',\n '\\u0115': 'e',\n '\\u0117': 'e',\n '\\u00EB': 'e',\n '\\u1EBB': 'e',\n '\\u011B': 'e',\n '\\u0205': 'e',\n '\\u0207': 'e',\n '\\u1EB9': 'e',\n '\\u1EC7': 'e',\n '\\u0229': 'e',\n '\\u1E1D': 'e',\n '\\u0119': 'e',\n '\\u1E19': 'e',\n '\\u1E1B': 'e',\n '\\u0247': 'e',\n '\\u025B': 'e',\n '\\u01DD': 'e',\n '\\u24D5': 'f',\n '\\uFF46': 'f',\n '\\u1E1F': 'f',\n '\\u0192': 'f',\n '\\uA77C': 'f',\n '\\u24D6': 'g',\n '\\uFF47': 'g',\n '\\u01F5': 'g',\n '\\u011D': 'g',\n '\\u1E21': 'g',\n '\\u011F': 'g',\n '\\u0121': 'g',\n '\\u01E7': 'g',\n '\\u0123': 'g',\n '\\u01E5': 'g',\n '\\u0260': 'g',\n '\\uA7A1': 'g',\n '\\u1D79': 'g',\n '\\uA77F': 'g',\n '\\u24D7': 'h',\n '\\uFF48': 'h',\n '\\u0125': 'h',\n '\\u1E23': 'h',\n '\\u1E27': 'h',\n '\\u021F': 'h',\n '\\u1E25': 'h',\n '\\u1E29': 'h',\n '\\u1E2B': 'h',\n '\\u1E96': 'h',\n '\\u0127': 'h',\n '\\u2C68': 'h',\n '\\u2C76': 'h',\n '\\u0265': 'h',\n '\\u0195': 'hv',\n '\\u24D8': 'i',\n '\\uFF49': 'i',\n '\\u00EC': 'i',\n '\\u00ED': 'i',\n '\\u00EE': 'i',\n '\\u0129': 'i',\n '\\u012B': 'i',\n '\\u012D': 'i',\n '\\u00EF': 'i',\n '\\u1E2F': 'i',\n '\\u1EC9': 'i',\n '\\u01D0': 'i',\n '\\u0209': 'i',\n '\\u020B': 'i',\n '\\u1ECB': 'i',\n '\\u012F': 'i',\n '\\u1E2D': 'i',\n '\\u0268': 'i',\n '\\u0131': 'i',\n '\\u24D9': 'j',\n '\\uFF4A': 'j',\n '\\u0135': 'j',\n '\\u01F0': 'j',\n '\\u0249': 'j',\n '\\u24DA': 'k',\n '\\uFF4B': 'k',\n '\\u1E31': 'k',\n '\\u01E9': 'k',\n '\\u1E33': 'k',\n '\\u0137': 'k',\n '\\u1E35': 'k',\n '\\u0199': 'k',\n '\\u2C6A': 'k',\n '\\uA741': 'k',\n '\\uA743': 'k',\n '\\uA745': 'k',\n '\\uA7A3': 'k',\n '\\u24DB': 'l',\n '\\uFF4C': 'l',\n '\\u0140': 'l',\n '\\u013A': 'l',\n '\\u013E': 'l',\n '\\u1E37': 'l',\n '\\u1E39': 'l',\n '\\u013C': 'l',\n '\\u1E3D': 'l',\n '\\u1E3B': 'l',\n '\\u017F': 'l',\n '\\u0142': 'l',\n '\\u019A': 'l',\n '\\u026B': 'l',\n '\\u2C61': 'l',\n '\\uA749': 'l',\n '\\uA781': 'l',\n '\\uA747': 'l',\n '\\u01C9': 'lj',\n '\\u24DC': 'm',\n '\\uFF4D': 'm',\n '\\u1E3F': 'm',\n '\\u1E41': 'm',\n '\\u1E43': 'm',\n '\\u0271': 'm',\n '\\u026F': 'm',\n '\\u24DD': 'n',\n '\\uFF4E': 'n',\n '\\u01F9': 'n',\n '\\u0144': 'n',\n '\\u00F1': 'n',\n '\\u1E45': 'n',\n '\\u0148': 'n',\n '\\u1E47': 'n',\n '\\u0146': 'n',\n '\\u1E4B': 'n',\n '\\u1E49': 'n',\n '\\u019E': 'n',\n '\\u0272': 'n',\n '\\u0149': 'n',\n '\\uA791': 'n',\n '\\uA7A5': 'n',\n '\\u01CC': 'nj',\n '\\u24DE': 'o',\n '\\uFF4F': 'o',\n '\\u00F2': 'o',\n '\\u00F3': 'o',\n '\\u00F4': 'o',\n '\\u1ED3': 'o',\n '\\u1ED1': 'o',\n '\\u1ED7': 'o',\n '\\u1ED5': 'o',\n '\\u00F5': 'o',\n '\\u1E4D': 'o',\n '\\u022D': 'o',\n '\\u1E4F': 'o',\n '\\u014D': 'o',\n '\\u1E51': 'o',\n '\\u1E53': 'o',\n '\\u014F': 'o',\n '\\u022F': 'o',\n '\\u0231': 'o',\n '\\u00F6': 'o',\n '\\u022B': 'o',\n '\\u1ECF': 'o',\n '\\u0151': 'o',\n '\\u01D2': 'o',\n '\\u020D': 'o',\n '\\u020F': 'o',\n '\\u01A1': 'o',\n '\\u1EDD': 'o',\n '\\u1EDB': 'o',\n '\\u1EE1': 'o',\n '\\u1EDF': 'o',\n '\\u1EE3': 'o',\n '\\u1ECD': 'o',\n '\\u1ED9': 'o',\n '\\u01EB': 'o',\n '\\u01ED': 'o',\n '\\u00F8': 'o',\n '\\u01FF': 'o',\n '\\u0254': 'o',\n '\\uA74B': 'o',\n '\\uA74D': 'o',\n '\\u0275': 'o',\n '\\u01A3': 'oi',\n '\\u0223': 'ou',\n '\\uA74F': 'oo',\n '\\u24DF': 'p',\n '\\uFF50': 'p',\n '\\u1E55': 'p',\n '\\u1E57': 'p',\n '\\u01A5': 'p',\n '\\u1D7D': 'p',\n '\\uA751': 'p',\n '\\uA753': 'p',\n '\\uA755': 'p',\n '\\u24E0': 'q',\n '\\uFF51': 'q',\n '\\u024B': 'q',\n '\\uA757': 'q',\n '\\uA759': 'q',\n '\\u24E1': 'r',\n '\\uFF52': 'r',\n '\\u0155': 'r',\n '\\u1E59': 'r',\n '\\u0159': 'r',\n '\\u0211': 'r',\n '\\u0213': 'r',\n '\\u1E5B': 'r',\n '\\u1E5D': 'r',\n '\\u0157': 'r',\n '\\u1E5F': 'r',\n '\\u024D': 'r',\n '\\u027D': 'r',\n '\\uA75B': 'r',\n '\\uA7A7': 'r',\n '\\uA783': 'r',\n '\\u24E2': 's',\n '\\uFF53': 's',\n '\\u00DF': 's',\n '\\u015B': 's',\n '\\u1E65': 's',\n '\\u015D': 's',\n '\\u1E61': 's',\n '\\u0161': 's',\n '\\u1E67': 's',\n '\\u1E63': 's',\n '\\u1E69': 's',\n '\\u0219': 's',\n '\\u015F': 's',\n '\\u023F': 's',\n '\\uA7A9': 's',\n '\\uA785': 's',\n '\\u1E9B': 's',\n '\\u24E3': 't',\n '\\uFF54': 't',\n '\\u1E6B': 't',\n '\\u1E97': 't',\n '\\u0165': 't',\n '\\u1E6D': 't',\n '\\u021B': 't',\n '\\u0163': 't',\n '\\u1E71': 't',\n '\\u1E6F': 't',\n '\\u0167': 't',\n '\\u01AD': 't',\n '\\u0288': 't',\n '\\u2C66': 't',\n '\\uA787': 't',\n '\\uA729': 'tz',\n '\\u24E4': 'u',\n '\\uFF55': 'u',\n '\\u00F9': 'u',\n '\\u00FA': 'u',\n '\\u00FB': 'u',\n '\\u0169': 'u',\n '\\u1E79': 'u',\n '\\u016B': 'u',\n '\\u1E7B': 'u',\n '\\u016D': 'u',\n '\\u00FC': 'u',\n '\\u01DC': 'u',\n '\\u01D8': 'u',\n '\\u01D6': 'u',\n '\\u01DA': 'u',\n '\\u1EE7': 'u',\n '\\u016F': 'u',\n '\\u0171': 'u',\n '\\u01D4': 'u',\n '\\u0215': 'u',\n '\\u0217': 'u',\n '\\u01B0': 'u',\n '\\u1EEB': 'u',\n '\\u1EE9': 'u',\n '\\u1EEF': 'u',\n '\\u1EED': 'u',\n '\\u1EF1': 'u',\n '\\u1EE5': 'u',\n '\\u1E73': 'u',\n '\\u0173': 'u',\n '\\u1E77': 'u',\n '\\u1E75': 'u',\n '\\u0289': 'u',\n '\\u24E5': 'v',\n '\\uFF56': 'v',\n '\\u1E7D': 'v',\n '\\u1E7F': 'v',\n '\\u028B': 'v',\n '\\uA75F': 'v',\n '\\u028C': 'v',\n '\\uA761': 'vy',\n '\\u24E6': 'w',\n '\\uFF57': 'w',\n '\\u1E81': 'w',\n '\\u1E83': 'w',\n '\\u0175': 'w',\n '\\u1E87': 'w',\n '\\u1E85': 'w',\n '\\u1E98': 'w',\n '\\u1E89': 'w',\n '\\u2C73': 'w',\n '\\u24E7': 'x',\n '\\uFF58': 'x',\n '\\u1E8B': 'x',\n '\\u1E8D': 'x',\n '\\u24E8': 'y',\n '\\uFF59': 'y',\n '\\u1EF3': 'y',\n '\\u00FD': 'y',\n '\\u0177': 'y',\n '\\u1EF9': 'y',\n '\\u0233': 'y',\n '\\u1E8F': 'y',\n '\\u00FF': 'y',\n '\\u1EF7': 'y',\n '\\u1E99': 'y',\n '\\u1EF5': 'y',\n '\\u01B4': 'y',\n '\\u024F': 'y',\n '\\u1EFF': 'y',\n '\\u24E9': 'z',\n '\\uFF5A': 'z',\n '\\u017A': 'z',\n '\\u1E91': 'z',\n '\\u017C': 'z',\n '\\u017E': 'z',\n '\\u1E93': 'z',\n '\\u1E95': 'z',\n '\\u01B6': 'z',\n '\\u0225': 'z',\n '\\u0240': 'z',\n '\\u2C6C': 'z',\n '\\uA763': 'z',\n '\\u0386': '\\u0391',\n '\\u0388': '\\u0395',\n '\\u0389': '\\u0397',\n '\\u038A': '\\u0399',\n '\\u03AA': '\\u0399',\n '\\u038C': '\\u039F',\n '\\u038E': '\\u03A5',\n '\\u03AB': '\\u03A5',\n '\\u038F': '\\u03A9',\n '\\u03AC': '\\u03B1',\n '\\u03AD': '\\u03B5',\n '\\u03AE': '\\u03B7',\n '\\u03AF': '\\u03B9',\n '\\u03CA': '\\u03B9',\n '\\u0390': '\\u03B9',\n '\\u03CC': '\\u03BF',\n '\\u03CD': '\\u03C5',\n '\\u03CB': '\\u03C5',\n '\\u03B0': '\\u03C5',\n '\\u03C9': '\\u03C9',\n '\\u03C2': '\\u03C3'\n };\n DataUtil.fnOperators = {\n /**\n * Returns true when the actual input is equal to the given input.\n *\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param {boolean} ignoreAccent?\n * @param ignoreCase\n * @param ignoreAccent\n */\n equal: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) === DataUtil.toLowerCase(expected);\n }\n return actual === expected;\n },\n /**\n * Returns true when the actual input is not equal to the given input.\n *\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n * @param ignoreAccent\n */\n notequal: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n return !DataUtil.fnOperators.equal(actual, expected, ignoreCase);\n },\n /**\n * Returns true when the actual input is less than to the given input.\n *\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n */\n lessthan: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) < DataUtil.toLowerCase(expected);\n }\n if (isNullOrUndefined(actual)) {\n actual = undefined;\n }\n return actual < expected;\n },\n /**\n * Returns true when the actual input is greater than to the given input.\n *\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n */\n greaterthan: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) > DataUtil.toLowerCase(expected);\n }\n return actual > expected;\n },\n /**\n * Returns true when the actual input is less than or equal to the given input.\n *\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n */\n lessthanorequal: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) <= DataUtil.toLowerCase(expected);\n }\n if (isNullOrUndefined(actual)) {\n actual = undefined;\n }\n return actual <= expected;\n },\n /**\n * Returns true when the actual input is greater than or equal to the given input.\n *\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n */\n greaterthanorequal: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) >= DataUtil.toLowerCase(expected);\n }\n return actual >= expected;\n },\n /**\n * Returns true when the actual input contains the given string.\n *\n * @param {string|number} actual\n * @param {string|number} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n * @param ignoreAccent\n */\n contains: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n DataUtil.toLowerCase(actual).indexOf(DataUtil.toLowerCase(expected)) !== -1;\n }\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n actual.toString().indexOf(expected) !== -1;\n },\n /**\n * Returns true when the actual input not contains the given string.\n *\n * @param {string|number} actual\n * @param {string|number} expected\n * @param {boolean} ignoreCase?\n */\n doesnotcontain: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n DataUtil.toLowerCase(actual).indexOf(DataUtil.toLowerCase(expected)) === -1;\n }\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n actual.toString().indexOf(expected) === -1;\n },\n /**\n * Returns true when the given input value is not null.\n *\n * @param {string|number} actual\n * @returns boolean\n */\n isnotnull: function (actual) {\n return actual !== null && actual !== undefined;\n },\n /**\n * Returns true when the given input value is null.\n *\n * @param {string|number} actual\n * @returns boolean\n */\n isnull: function (actual) {\n return actual === null || actual === undefined;\n },\n /**\n * Returns true when the actual input starts with the given string\n *\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n * @param ignoreAccent\n */\n startswith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.startsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.startsWith(actual, expected);\n },\n /**\n * Returns true when the actual input not starts with the given string\n *\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n doesnotstartwith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.notStartsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.notStartsWith(actual, expected);\n },\n /**\n * Returns true when the actual input like with the given string.\n *\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n like: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.like(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.like(actual, expected);\n },\n /**\n * Returns true when the given input value is empty.\n *\n * @param {string|number} actual\n * @returns boolean\n */\n isempty: function (actual) {\n return actual === undefined || actual === '';\n },\n /**\n * Returns true when the given input value is not empty.\n *\n * @param {string|number} actual\n * @returns boolean\n */\n isnotempty: function (actual) {\n return actual !== undefined && actual !== '';\n },\n /**\n * Returns true when the actual input pattern(wildcard) matches with the given string.\n *\n * @param {string|Date} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n wildcard: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return (actual || typeof actual === 'boolean') && expected && typeof actual !== 'object' &&\n DataUtil.wildCard(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return (actual || typeof actual === 'boolean') && expected && DataUtil.wildCard(actual, expected);\n },\n /**\n * Returns true when the actual input ends with the given string.\n *\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n * @param ignoreAccent\n */\n endswith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.endsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.endsWith(actual, expected);\n },\n /**\n * Returns true when the actual input not ends with the given string.\n *\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n doesnotendwith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.notEndsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.notEndsWith(actual, expected);\n },\n /**\n * It will return the filter operator based on the filter symbol.\n *\n * @param {string} operator\n * @hidden\n */\n processSymbols: function (operator) {\n var fnName = DataUtil.operatorSymbols[operator];\n if (fnName) {\n var fn = DataUtil.fnOperators[fnName];\n return fn;\n }\n return DataUtil.throwError('Query - Process Operator : Invalid operator');\n },\n /**\n * It will return the valid filter operator based on the specified operators.\n *\n * @param {string} operator\n * @hidden\n */\n processOperator: function (operator) {\n var fn = DataUtil.fnOperators[operator];\n if (fn) {\n return fn;\n }\n return DataUtil.fnOperators.processSymbols(operator);\n }\n };\n /**\n * To perform the parse operation on JSON data, like convert to string from JSON or convert to JSON from string.\n */\n DataUtil.parse = {\n /**\n * Parse the given string to the plain JavaScript object.\n *\n * @param {string|Object|Object[]} jsonText\n */\n parseJson: function (jsonText) {\n if (typeof jsonText === 'string') {\n jsonText = JSON.parse(jsonText, DataUtil.parse.jsonReviver);\n }\n else if (jsonText instanceof Array) {\n DataUtil.parse.iterateAndReviveArray(jsonText);\n }\n else if (typeof jsonText === 'object' && jsonText !== null) {\n DataUtil.parse.iterateAndReviveJson(jsonText);\n }\n return jsonText;\n },\n /**\n * It will perform on array of values.\n *\n * @param {string[]|Object[]} array\n * @hidden\n */\n iterateAndReviveArray: function (array) {\n for (var i = 0; i < array.length; i++) {\n if (typeof array[i] === 'object' && array[i] !== null) {\n DataUtil.parse.iterateAndReviveJson(array[i]);\n // eslint-disable-next-line no-useless-escape\n }\n else if (typeof array[i] === 'string' && !/^[\\s]*\\[|^[\\s]*\\{(.)+:|\\\"/g.test(array[i])) {\n array[i] = DataUtil.parse.jsonReviver('', array[i]);\n }\n else {\n array[i] = DataUtil.parse.parseJson(array[i]);\n }\n }\n },\n /**\n * It will perform on JSON values\n *\n * @param {JSON} json\n * @hidden\n */\n iterateAndReviveJson: function (json) {\n var value;\n var keys = Object.keys(json);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var prop = keys_2[_i];\n if (DataUtil.startsWith(prop, '__')) {\n continue;\n }\n value = json[prop];\n if (typeof value === 'object') {\n if (value instanceof Array) {\n DataUtil.parse.iterateAndReviveArray(value);\n }\n else if (value) {\n DataUtil.parse.iterateAndReviveJson(value);\n }\n }\n else {\n json[prop] = DataUtil.parse.jsonReviver(json[prop], value);\n }\n }\n },\n /**\n * It will perform on JSON values\n *\n * @param {string} field\n * @param {string|Date} value\n * @hidden\n */\n jsonReviver: function (field, value) {\n if (typeof value === 'string') {\n // eslint-disable-next-line security/detect-unsafe-regex\n var ms = /^\\/Date\\(([+-]?[0-9]+)([+-][0-9]{4})?\\)\\/$/.exec(value);\n var offSet = DataUtil.timeZoneHandling ? DataUtil.serverTimezoneOffset : null;\n if (ms) {\n return DataUtil.dateParse.toTimeZone(new Date(parseInt(ms[1], 10)), offSet, true);\n // eslint-disable-next-line no-useless-escape, security/detect-unsafe-regex\n }\n else if (/^(\\d{4}\\-\\d\\d\\-\\d\\d([tT][\\d:\\.]*){1})([zZ]|([+\\-])(\\d\\d):?(\\d\\d))?$/.test(value)) {\n var isUTC = value.indexOf('Z') > -1 || value.indexOf('z') > -1;\n var arr = value.split(/[^0-9.]/);\n if (isUTC) {\n if (arr[5].indexOf('.') > -1) {\n var secondsMs = arr[5].split('.');\n arr[5] = secondsMs[0];\n arr[6] = new Date(value).getUTCMilliseconds().toString();\n }\n else {\n arr[6] = '00';\n }\n value = DataUtil.dateParse\n .toTimeZone(new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10), parseInt(arr[3], 10), parseInt(arr[4], 10), parseInt(arr[5] ? arr[5] : '00', 10), parseInt(arr[6], 10)), DataUtil.serverTimezoneOffset, false);\n }\n else {\n var utcFormat = new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10), parseInt(arr[3], 10), parseInt(arr[4], 10), parseInt(arr[5] ? arr[5] : '00', 10));\n var hrs = parseInt(arr[6], 10);\n var mins = parseInt(arr[7], 10);\n if (isNaN(hrs) && isNaN(mins)) {\n return utcFormat;\n }\n if (value.indexOf('+') > -1) {\n utcFormat.setHours(utcFormat.getHours() - hrs, utcFormat.getMinutes() - mins);\n }\n else {\n utcFormat.setHours(utcFormat.getHours() + hrs, utcFormat.getMinutes() + mins);\n }\n value = DataUtil.dateParse\n .toTimeZone(utcFormat, DataUtil.serverTimezoneOffset, false);\n }\n if (DataUtil.serverTimezoneOffset == null) {\n value = DataUtil.dateParse.addSelfOffset(value);\n }\n }\n else if (/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) {\n var arr = value.split(/[^0-9.]/);\n return new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10));\n }\n }\n return value;\n },\n /**\n * Check wheather the given value is JSON or not.\n *\n * @param {Object[]} jsonData\n */\n isJson: function (jsonData) {\n if (typeof jsonData[0] === 'string') {\n return jsonData;\n }\n return DataUtil.parse.parseJson(jsonData);\n },\n /**\n * Checks wheather the given value is GUID or not.\n *\n * @param {string} value\n */\n isGuid: function (value) {\n // eslint-disable-next-line security/detect-unsafe-regex\n var regex = /[A-Fa-f0-9]{8}(?:-[A-Fa-f0-9]{4}){3}-[A-Fa-f0-9]{12}/i;\n var match = regex.exec(value);\n return match != null;\n },\n /**\n * The method used to replace the value based on the type.\n *\n * @param {Object} value\n * @param {boolean} stringify\n * @hidden\n */\n replacer: function (value, stringify) {\n if (DataUtil.isPlainObject(value)) {\n return DataUtil.parse.jsonReplacer(value, stringify);\n }\n if (value instanceof Array) {\n return DataUtil.parse.arrayReplacer(value);\n }\n if (value instanceof Date) {\n return DataUtil.parse.jsonReplacer({ val: value }, stringify).val;\n }\n return value;\n },\n /**\n * It will replace the JSON value.\n *\n * @param {string} key\n * @param {Object} val\n * @param stringify\n * @hidden\n */\n jsonReplacer: function (val, stringify) {\n var value;\n var keys = Object.keys(val);\n for (var _i = 0, keys_3 = keys; _i < keys_3.length; _i++) {\n var prop = keys_3[_i];\n value = val[prop];\n if (!(value instanceof Date)) {\n continue;\n }\n var d = value;\n if (DataUtil.serverTimezoneOffset == null) {\n val[prop] = DataUtil.dateParse.toTimeZone(d, null).toJSON();\n }\n else {\n d = new Date(+d + DataUtil.serverTimezoneOffset * 3600000);\n val[prop] = DataUtil.dateParse.toTimeZone(DataUtil.dateParse.addSelfOffset(d), null).toJSON();\n }\n }\n return val;\n },\n /**\n * It will replace the Array of value.\n *\n * @param {string} key\n * @param {Object[]} val\n * @hidden\n */\n arrayReplacer: function (val) {\n for (var i = 0; i < val.length; i++) {\n if (DataUtil.isPlainObject(val[i])) {\n val[i] = DataUtil.parse.jsonReplacer(val[i]);\n }\n else if (val[i] instanceof Date) {\n val[i] = DataUtil.parse.jsonReplacer({ date: val[i] }).date;\n }\n }\n return val;\n },\n /**\n * It will replace the Date object with respective to UTC format value.\n *\n * @param {string} key\n * @param {any} value\n * @hidden\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n /* tslint:disable-next-line:no-any */\n jsonDateReplacer: function (key, value) {\n /* eslint-enable @typescript-eslint/no-explicit-any */\n if (key === 'value' && value) {\n if (typeof value === 'string') {\n // eslint-disable-next-line security/detect-unsafe-regex\n var ms = /^\\/Date\\(([+-]?[0-9]+)([+-][0-9]{4})?\\)\\/$/.exec(value);\n if (ms) {\n value = DataUtil.dateParse.toTimeZone(new Date(parseInt(ms[1], 10)), null, true);\n // eslint-disable-next-line no-useless-escape, security/detect-unsafe-regex\n }\n else if (/^(\\d{4}\\-\\d\\d\\-\\d\\d([tT][\\d:\\.]*){1})([zZ]|([+\\-])(\\d\\d):?(\\d\\d))?$/.test(value)) {\n var arr = value.split(/[^0-9]/);\n value = DataUtil.dateParse\n .toTimeZone(new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10), parseInt(arr[3], 10), parseInt(arr[4], 10), parseInt(arr[5], 10)), null, true);\n }\n }\n if (value instanceof Date) {\n value = DataUtil.dateParse.addSelfOffset(value);\n if (DataUtil.serverTimezoneOffset === null) {\n return DataUtil.dateParse.toTimeZone(DataUtil.dateParse.addSelfOffset(value), null).toJSON();\n }\n else {\n value = DataUtil.dateParse.toTimeZone(value, (((value.getTimezoneOffset() / 60) * 2)\n - DataUtil.serverTimezoneOffset), false);\n return value.toJSON();\n }\n }\n }\n return value;\n }\n };\n /**\n * @hidden\n */\n DataUtil.dateParse = {\n addSelfOffset: function (input) {\n return new Date(+input - (input.getTimezoneOffset() * 60000));\n },\n toUTC: function (input) {\n return new Date(+input + (input.getTimezoneOffset() * 60000));\n },\n toTimeZone: function (input, offset, utc) {\n if (offset === null) {\n return input;\n }\n var unix = utc ? DataUtil.dateParse.toUTC(input) : input;\n return new Date(+unix - (offset * 3600000));\n },\n toLocalTime: function (input) {\n var datefn = input;\n var timeZone = -datefn.getTimezoneOffset();\n var differenceString = timeZone >= 0 ? '+' : '-';\n var localtimefn = function (num) {\n var norm = Math.floor(Math.abs(num));\n return (norm < 10 ? '0' : '') + norm;\n };\n var val = datefn.getFullYear() + '-' + localtimefn(datefn.getMonth() + 1) + '-' + localtimefn(datefn.getDate()) +\n 'T' + localtimefn(datefn.getHours()) +\n ':' + localtimefn(datefn.getMinutes()) +\n ':' + localtimefn(datefn.getSeconds()) +\n differenceString + localtimefn(timeZone / 60) +\n ':' + localtimefn(timeZone % 60);\n return val;\n }\n };\n return DataUtil;\n}());\nexport { DataUtil };\n","/**\n * Vue Component Base\n */\nimport * as Vue from 'vue';\nimport { isNullOrUndefined, extend, getValue } from '@syncfusion/ej2-base';\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) {\n return obj;\n}\nelse {\n var newObj = {};\n if (obj != null) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key))\n newObj[\"\" + key] = obj[\"\" + key];\n }\n }\n newObj.default = obj;\n return newObj;\n} }\nvar curVue = _interopRequireWildcard(Vue);\nexport var isExecute = (parseInt(curVue['version']) > 2) ? false : true, aVue = !isExecute ? curVue : (curVue['default']['default'] ? curVue['default']['default'] : curVue['default']), gh = curVue['h'];\nexport var vueDefineComponent = function (options) { return !isExecute ? aVue['defineComponent'](options) : aVue['extend'](options); };\nexport var ComponentBase = vueDefineComponent({\n name: 'ComponentBase',\n data: function () {\n return {\n tagMapper: {},\n tagNameMapper: {},\n hasInjectedModules: false,\n hasChildDirective: false,\n childDirObjects: '',\n propKeys: {},\n isDecorator: false\n };\n },\n created: function () {\n var _this = this;\n if (this.ej2Instance) {\n this.ej2Instances = this.isVue3 ? aVue.toRaw(this.ej2Instance) : this.ej2Instance;\n }\n if (!this.propKeys) {\n return;\n }\n var _loop_1 = function (prop) {\n this_1.ej2Instances.addEventListener(prop, function (args) {\n _this.$emit(prop, args);\n });\n };\n var this_1 = this;\n for (var _i = 0, _a = this.propKeys; _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_1(prop);\n }\n var injectables = getValue('$root.$options.provide', this);\n var vueInjectables = getValue('$parent.$options.provide', this);\n vueInjectables = !isNullOrUndefined(vueInjectables) ? vueInjectables : getValue('$.parent.provides', this);\n if (this.hasInjectedModules && !isExecute) {\n var prevModule = [];\n if (injectables && injectables.managed) {\n this.isDecorator = true;\n prevModule = this.getInjectedServices() || [];\n }\n else if (injectables) {\n prevModule = injectables[this.ej2Instances.getModuleName()] || [];\n }\n else if (vueInjectables) {\n prevModule = this.getInjectedServices() || [];\n }\n var curModule = this.ej2Instances.getInjectedModules() || [];\n for (var _b = 0, curModule_1 = curModule; _b < curModule_1.length; _b++) {\n var mod = curModule_1[_b];\n if (prevModule.indexOf(mod) === -1) {\n prevModule.push(mod);\n }\n }\n this.ej2Instances.injectedModules = prevModule;\n }\n },\n mounted: function () {\n var cusEle = this.$el ? this.$el.querySelectorAll(\"div.e-directive\") : null;\n if (!isExecute && cusEle) {\n for (var i = 0; i < cusEle.length; i++) {\n cusEle[parseInt(i.toString(), 10)].parentElement && cusEle[parseInt(i.toString(), 10)].parentElement.removeChild(cusEle[parseInt(i.toString(), 10)]);\n }\n }\n this.ej2Instances.isVue = true;\n this.ej2Instances.isVue3 = this.isVue3;\n this.ej2Instances.vueInstance = this;\n if (this.isVue3) {\n this.ej2Instances.ej2Instances = this.ej2Instances;\n this.ej2Instances.referModels = this.models;\n this.setModelValue();\n }\n this.ej2Instances.appendTo(this.$el);\n },\n updated: function () {\n this.updated();\n },\n beforeDestroy: function () {\n this.destroyComponent();\n },\n beforeUnmount: function () {\n this.destroyComponent();\n },\n methods: {\n setModelValue: function () {\n if (!isNullOrUndefined(this.modelValue) || !isNullOrUndefined(this.$attrs.modelValue)) {\n var key = this.models.toString().match(/checked|value/) || [];\n var propKey = key[0];\n if (!isNullOrUndefined(propKey)) {\n this.ej2Instances[\"\" + propKey] = !isNullOrUndefined(this.modelValue) ? this.modelValue : this.$attrs.modelValue;\n }\n }\n },\n updated: function () {\n if (this.isVue3) {\n this.setModelValue();\n }\n if (this.hasChildDirective) {\n var childKey = {};\n this.fetchChildPropValues(childKey);\n var curChildDir = JSON.stringify(childKey);\n if (this.childDirObjects !== curChildDir) {\n this.childDirObjects = curChildDir;\n this.assignValueToWrapper(childKey, false);\n }\n }\n },\n getInjectedServices: function () {\n var ret = [];\n var provide;\n if (this.$root && this.isDecorator) {\n provide = getValue('$root.$options.provide', this);\n }\n else if (this.$vnode) {\n provide = getValue('$vnode.context.$options.provide', this);\n }\n else if (this.$parent) {\n provide = getValue('$parent.$options.provide', this);\n }\n if (isNullOrUndefined(provide) && !isNullOrUndefined(this.$)) {\n provide = getValue('$.parent.provides', this);\n }\n if (provide) {\n // tslint:disable:no-any\n var injectables = provide;\n if (typeof provide === 'function') {\n if (provide.managed) {\n var provideKey = provide.managed;\n var provideValue = Object.keys(provideKey);\n var key = void 0;\n if (this.$root && this.isDecorator) {\n key = Object.keys(this.$root);\n }\n else if (this.$vnode) {\n key = Object.keys(this.$vnode.context);\n }\n else if (this.$parent) {\n key = Object.keys(this.$parent);\n }\n for (var i = 0; i < provideValue.length; i++) {\n for (var j = 0; j < key.length; j++) {\n if ((key[parseInt(j.toString(), 10)].indexOf(provideValue[parseInt(i.toString(), 10)])) !== -1) {\n if (this.$root && this.isDecorator) {\n provideKey[provideValue[parseInt(j.toString(), 10)]] = this.$root[key[parseInt(i.toString(), 10)]];\n }\n else if (this.$vnode) {\n provideKey[provideValue[parseInt(i.toString(), 10)]] = this.$vnode.context[key[parseInt(j.toString(), 10)]];\n }\n else if (this.$parent) {\n provideKey[provideValue[parseInt(i.toString(), 10)]] = this.$parent[key[parseInt(j.toString(), 10)]];\n }\n injectables = provideKey;\n }\n }\n }\n }\n // tslint:disable:no-any\n else if (this.$vnode) {\n injectables = this.$vnode.context.$options.provide();\n }\n else if (this.$parent) {\n injectables = this.$parent.$options.provide();\n }\n }\n ret = injectables[this.ej2Instances.getModuleName()] || [];\n }\n this.isDecorator = false;\n return ret;\n },\n destroyComponent: function () {\n var tempBeforeDestroyThis = this;\n tempBeforeDestroyThis.ej2Instances.destroy();\n tempBeforeDestroyThis.$el.style.visibility = 'hidden';\n tempBeforeDestroyThis = null;\n },\n bindProperties: function () {\n var options = {};\n for (var _i = 0, _a = this.propKeys; _i < _a.length; _i++) {\n var prop = _a[_i];\n if (!isNullOrUndefined(this[\"\" + prop])) {\n options[\"\" + prop] = this[\"\" + prop];\n }\n else if (this[0] && !isNullOrUndefined(this[0][0]) && !isNullOrUndefined(this[0][0][\"\" + prop])) {\n options[\"\" + prop] = this[0][0][\"\" + prop];\n }\n }\n if (this.hasChildDirective) {\n this.fetchChildPropValues(options);\n }\n if (this.hasInjectedModules) {\n var prevModule = this.getInjectedServices() || [];\n var curModule = this.ej2Instances.getInjectedModules() || [];\n for (var _b = 0, curModule_2 = curModule; _b < curModule_2.length; _b++) {\n var mod = curModule_2[_b];\n if (prevModule.indexOf(mod) === -1) {\n prevModule.push(mod);\n }\n }\n this.ej2Instances.injectedModules = prevModule;\n }\n this.assignValueToWrapper(options);\n },\n assignValueToWrapper: function (option, silent) {\n this.ej2Instances.setProperties(extend({}, {}, option, true), isNullOrUndefined(silent) ? true : silent);\n },\n fetchChildPropValues: function (childOption) {\n var dirProps = {};\n if (!this.isVue3) {\n dirProps = this.getDirectiveValues(this.$slots.default, this.tagMapper || {}, this.tagNameMapper || {});\n }\n else {\n var propRef = void 0;\n if (this[0] && this[0][1].slots.default) {\n propRef = this[0][1].slots.default();\n }\n else if (this && this.$ && this.$.slots && this.$.slots.default) {\n propRef = this.$.slots.default();\n }\n if (propRef) {\n for (var i = 0; i < propRef.length; i++) {\n if (propRef[parseInt(i.toString(), 10)].type.methods || propRef[parseInt(i.toString(), 10)].type === 'e-seriescollection') {\n var key = propRef[parseInt(i.toString(), 10)].type === 'e-seriescollection' ? 'series-collection' :\n propRef[parseInt(i.toString(), 10)].type.methods.getTag().replace(\"e-\", \"\");\n var ref = this.resolveArrayDirectives(propRef[parseInt(i.toString(), 10)].children, key);\n var splitKeys = key.split('-');\n var controlName = this.ej2Instances.getModuleName().toLowerCase();\n var keyRef = (splitKeys.length > 1 && controlName.indexOf(splitKeys[0]) > -1) ? splitKeys[1] : splitKeys[0];\n keyRef = keyRef.replace(controlName, '');\n if (controlName == \"splitter\" && keyRef == \"panes\") {\n keyRef = \"paneSettings\";\n }\n else if (controlName == \"bulletchart\" && keyRef == \"range\") {\n keyRef = \"ranges\";\n }\n else if (controlName == \"schedule\" && keyRef == \"header\") {\n keyRef = \"headerRows\";\n }\n dirProps[\"\" + keyRef] = ref[\"\" + key];\n }\n }\n }\n else {\n return;\n }\n }\n if (!this.childDirObjects) {\n this.childDirObjects = JSON.stringify(dirProps);\n }\n for (var _i = 0, _a = Object.keys(dirProps); _i < _a.length; _i++) {\n var dirProp = _a[_i];\n childOption[\"\" + dirProp] = dirProps[\"\" + dirProp];\n }\n },\n resolveArrayDirectives: function (slots, tagName) {\n var slot = [];\n var innerDirValues;\n slot = slots.default ? slots.default() : slots;\n slot = slot.flatMap(function (item) { return Array.isArray(item.children) ? item.children : item; });\n var items = {};\n items[\"\" + tagName] = [];\n var _loop_2 = function (childSlot) {\n var tempObj = {};\n var tagRef = childSlot.type.methods ? childSlot.type.methods.getTag() : tagName;\n if (childSlot.children) {\n var key = void 0;\n innerDirValues = this_2.resolveComplexDirs(childSlot.children, this_2.tagMapper[\"e-\" + tagName], tagRef);\n if (innerDirValues.length) {\n tempObj = innerDirValues;\n }\n else {\n for (var i = 0; i < Object.keys(innerDirValues).length; i++) {\n key = Object.keys(innerDirValues)[parseInt(i.toString(), 10)];\n tempObj[\"\" + key] = innerDirValues[\"\" + key];\n }\n }\n }\n if (childSlot.props) {\n Object.keys(childSlot.props).forEach(function (key) {\n var propName = key.replace(/-[a-z]/g, function (e) { return e[1].toUpperCase(); });\n if (propName) {\n tempObj[\"\" + propName] = childSlot.props[\"\" + key];\n }\n });\n }\n if (((/[s]\\b/).test(tagRef) && innerDirValues) && (!(/[s]\\b/).test(tagName) || innerDirValues.length)) {\n Array.isArray(tempObj) ? tempObj.forEach(function (item) { items[\"\" + tagName].push(item); }) : items[\"\" + tagName].push(tempObj);\n }\n else if (tempObj && Object.keys(tempObj).length !== 0) {\n items[\"\" + tagName].push(tempObj);\n }\n };\n var this_2 = this;\n for (var _i = 0, slot_1 = slot; _i < slot_1.length; _i++) {\n var childSlot = slot_1[_i];\n _loop_2(childSlot);\n }\n return items;\n },\n resolveComplexDirs: function (slots, tagObject, tagName) {\n var slot = [];\n var innerDirValues;\n slot = slots.default ? slots.default() : slots;\n var items = {};\n var _loop_3 = function (childSlot) {\n var tagRef = void 0;\n var tag = void 0;\n if (tagObject[\"\" + tagName]) {\n tagRef = Object.keys(tagObject[\"\" + tagName]);\n tag = tagRef.find(function (key) {\n return tagObject[\"\" + tagName][\"\" + key] ===\n childSlot.type.methods.getTag().replace(/[s]\\b/, \"\");\n });\n var moduleName = this_3.ej2Instances.getModuleName().toLowerCase();\n tag = tag\n ? tag.replace(\"e-\", \"\")\n : childSlot.type.methods.getTag().replace(moduleName === \"ribbon\" ? \"e-ribbon-\" : \"e-\", \"\");\n if (this_3.ej2Instances.getModuleName().toLowerCase() == \"diagram\" && tag.indexOf('annotations') != -1) {\n tag = 'annotations';\n }\n }\n if (childSlot.children) {\n innerDirValues = this_3.resolveComplexInnerDirs(childSlot.children, tagObject[\"\" + tagName], childSlot.type.methods.getTag());\n if (!items[\"\" + tag]) {\n items[\"\" + tag] = [];\n }\n if (innerDirValues.length > 1) {\n items[\"\" + tag] = innerDirValues;\n }\n else {\n items[\"\" + tag].push(innerDirValues);\n }\n }\n if (childSlot.props) {\n childSlot.props = this_3.getCamelCaseProps(childSlot.props);\n }\n if (slot.length > 1) {\n items = Object.keys(items).length == 0 && !items.length ? [] : items;\n if (childSlot.props) {\n items.push(childSlot.props);\n }\n }\n else {\n items = childSlot.props ? Object.assign(items, childSlot.props) : items;\n }\n };\n var this_3 = this;\n for (var _i = 0, slot_2 = slot; _i < slot_2.length; _i++) {\n var childSlot = slot_2[_i];\n _loop_3(childSlot);\n }\n return items;\n },\n resolveComplexInnerDirs: function (slots, tagObject, tagName) {\n var slot = [];\n var innerDirValues;\n slot = slots.default ? slots.default() : slots;\n var items = slot.length > 1 ? [] : {};\n for (var _i = 0, slot_3 = slot; _i < slot_3.length; _i++) {\n var childSlot = slot_3[_i];\n var isRibbon = (this.ej2Instances.getModuleName().toLowerCase() == \"ribbon\");\n var tag = childSlot.type.methods.getTag().replace(isRibbon ? \"e-ribbon-\" : \"e-\", \"\");\n if (childSlot.children) {\n innerDirValues = this.resolveMultilevelComplexInnerDirs(childSlot.children, tagObject[\"\" + tagName], childSlot.type.methods.getTag());\n if ((/[s]\\b/).test(tag) || slot.length > 1) {\n if ((/[s]\\b/).test(tag)) {\n items[\"\" + tag] = !items[\"\" + tag] ? [] : items[\"\" + tag];\n if (innerDirValues.length) {\n items[\"\" + tag] = innerDirValues;\n }\n else {\n items[\"\" + tag].push(innerDirValues);\n }\n }\n else if (innerDirValues && !(isRibbon && innerDirValues.hasOwnProperty('collections'))) {\n items.push(innerDirValues);\n }\n }\n else {\n items = innerDirValues ? innerDirValues : items;\n }\n }\n if (childSlot.props) {\n childSlot.props = this.getCamelCaseProps(childSlot.props);\n }\n if (slot.length > 1 && childSlot.props) {\n if (isRibbon && innerDirValues && innerDirValues.hasOwnProperty('collections')) {\n innerDirValues = childSlot.props ? Object.assign(innerDirValues, childSlot.props) : innerDirValues;\n items.push(innerDirValues);\n }\n else if (items.length >= 0) {\n items.push(childSlot.props);\n }\n else {\n items = childSlot.props ? Object.assign(items, childSlot.props) : items;\n }\n }\n else {\n items = childSlot.props ? Object.assign(items, childSlot.props) : items;\n }\n }\n return items;\n },\n resolveMultilevelComplexInnerDirs: function (slots, tagObject, tagName) {\n var slot = [];\n var innerDirValues;\n slot = slots.default ? slots.default() : slots;\n var items = slot.length > 1 ? [] : {};\n for (var _i = 0, slot_4 = slot; _i < slot_4.length; _i++) {\n var childSlot = slot_4[_i];\n var moduleName = this.ej2Instances.getModuleName().toLowerCase();\n var tag = childSlot.type.methods.getTag().replace(moduleName === \"ribbon\" ? \"e-ribbon-\" : \"e-\", \"\");\n if (childSlot.children) {\n innerDirValues = this.resolveComplexInnerDirs(childSlot.children, tagObject[\"\" + tagName], childSlot.type.methods.getTag());\n }\n if (childSlot.props) {\n childSlot.props = this.getCamelCaseProps(childSlot.props);\n }\n if ((/[s]\\b/).test(tag)) {\n items[\"\" + tag] = !items[\"\" + tag] ? [] : items[\"\" + tag];\n if (innerDirValues.length) {\n items[\"\" + tag] = innerDirValues;\n }\n else {\n items[\"\" + tag].push(innerDirValues);\n }\n if (childSlot.props) {\n items[\"\" + tag].push(childSlot.props);\n }\n }\n else {\n items = innerDirValues;\n items = childSlot.props ? Object.assign(items, childSlot.props) : items;\n }\n }\n return items;\n },\n getDirectiveValues: function (tagDirectives, tagMapper, tagNameMapper) {\n var keyTags = Object.keys(tagMapper);\n var dir = {};\n if (tagDirectives) {\n for (var _i = 0, tagDirectives_1 = tagDirectives; _i < tagDirectives_1.length; _i++) {\n var tagDirective = tagDirectives_1[_i];\n if (tagDirective.componentOptions && tagDirective.componentOptions.children && tagDirective.componentOptions.tag ||\n (tagDirective.tag === 'e-seriescollection' && tagDirective.children)) {\n var dirTag = tagDirective.componentOptions ? tagDirective.componentOptions.tag : tagDirective.tag;\n dirTag = (dirTag === 'e-seriescollection') ? 'e-seriesCollection' : dirTag;\n if (keyTags.indexOf(dirTag) !== -1) {\n var tagName = tagNameMapper[\"\" + dirTag] ? tagNameMapper[\"\" + dirTag] : dirTag;\n dir[tagName.replace('e-', '')] = [];\n var children = tagDirective.componentOptions ? tagDirective.componentOptions.children : tagDirective.children;\n for (var _a = 0, children_1 = children; _a < children_1.length; _a++) {\n var tagDirChild = children_1[_a];\n var retObj = this.getVNodeValue(tagDirChild, tagMapper[\"\" + dirTag], tagNameMapper);\n if (Object.keys(retObj).length !== 0) {\n dir[tagName.replace('e-', '')].push(retObj);\n }\n }\n }\n }\n }\n }\n return dir;\n },\n getMultiLevelDirValue: function (tagDirectories, tagKey, tagNameMapper) {\n var mulObj = {};\n for (var _i = 0, tagDirectories_1 = tagDirectories; _i < tagDirectories_1.length; _i++) {\n var tagDir = tagDirectories_1[_i];\n var key = void 0;\n var children = void 0;\n if (tagDir.componentOptions) {\n key = tagDir.componentOptions.tag;\n if (tagDir.componentOptions.children) {\n children = tagDir.componentOptions.children;\n }\n }\n else if ((tagDir.tag === 'e-markersettings' || tagDir.tag === 'e-markersetting') && tagDir.children) {\n key = (tagDir.tag === 'e-markersettings') ? 'e-markerSettings' : 'e-markerSetting';\n children = tagDir.children;\n }\n if (key) {\n var tagName = tagNameMapper[\"\" + key] ? tagNameMapper[\"\" + key] : key;\n mulObj[tagName.replace('e-', '')] = [];\n if (children) {\n for (var _a = 0, children_2 = children; _a < children_2.length; _a++) {\n var tagDirChild = children_2[_a];\n var mulLevObj = this.getVNodeValue(tagDirChild, tagKey[\"\" + key], tagNameMapper);\n if (Object.keys(mulLevObj).length !== 0) {\n mulObj[tagName.replace('e-', '')].push(mulLevObj);\n }\n }\n }\n }\n }\n return mulObj;\n },\n getVNodeValue: function (tagDirective, tagKey, tagNameMapper) {\n var ret = {};\n if (tagDirective.componentOptions || ((tagDirective.tag === 'e-markersettings' || tagDirective.tag === 'e-markersetting') && tagDirective.context)) {\n var dirTag = void 0;\n if (tagDirective.componentOptions) {\n dirTag = tagDirective.componentOptions.tag;\n }\n else {\n dirTag = (tagDirective.tag === 'e-markersettings') ? 'e-markerSettings' : 'e-markerSetting';\n }\n if (typeof tagKey === 'string' && dirTag === tagKey && tagDirective.data) {\n ret = tagDirective.data.attrs ? this.getCamelCaseProps(tagDirective.data.attrs) : this.getCamelCaseProps(tagDirective.data);\n }\n else if (typeof tagKey === 'object') {\n if (tagDirective.componentOptions.children && (Object.keys(tagKey).indexOf(dirTag) !== -1)) {\n ret = this.getMultiLevelDirValue(tagDirective.componentOptions.children, tagKey[\"\" + dirTag], tagNameMapper);\n }\n else if (tagDirective.children && (Object.keys(tagKey).indexOf(dirTag) !== -1) && (dirTag === 'e-markersettings' || dirTag === 'e-markersetting')) {\n ret = this.getMultiLevelDirValue(tagDirective.children, tagKey[\"\" + dirTag], tagNameMapper);\n }\n if (tagDirective.data && tagDirective.data.attrs) {\n ret = extend(ret, this.getCamelCaseProps(tagDirective.data.attrs));\n }\n }\n }\n return ret;\n },\n /**\n * convert kebab case directive props to camel case\n */\n getCamelCaseProps: function (props) {\n var retProps = {};\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\n var prop = _a[_i];\n retProps[prop.replace(/-[a-z]/g, function (e) { return e[1].toUpperCase(); })] = props[\"\" + prop];\n }\n return retProps;\n },\n dataBind: function () {\n this.ej2Instances.dataBind();\n },\n setProperties: function (arg, muteOnChange) {\n return this.ej2Instances.setProperties(arg, muteOnChange);\n },\n }\n});\nexport function getProps(options) {\n if (options === void 0) { options = {}; }\n if (options.props) {\n var _loop_4 = function (prop) {\n (options.newprops || (options.newprops = {}))[\"\" + prop] = {};\n (options.watch || (options.watch = {}))[\"\" + prop] = function (newVal) {\n this.ej2Instances[\"\" + prop] = newVal;\n if (this.dataBind && (options.name !== 'DateRangePickerComponent')) {\n this.dataBind();\n }\n };\n };\n for (var _i = 0, _a = options.props; _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_4(prop);\n }\n }\n return [options.newprops, options.watch];\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { setTemplateEngine, getTemplateEngine, getUniqueID, createElement, detach, extend, getValue } from \"@syncfusion/ej2-base\";\nimport { aVue as Vue, isExecute } from \"./component-base\";\n// tslint:disable:no-any\nvar stringCompiler = getTemplateEngine();\nexport function compile(templateElement, helper) {\n var that = this;\n return function (data, context, propName, element, root) {\n var returnEle;\n if (context) {\n var plugins = context.vueInstance ? context.vueInstance.plugins : null;\n var pid = getUniqueID(\"templateParentDiv\");\n var id = getUniqueID(\"templateDiv\");\n var ele = createElement(\"div\", {\n id: pid,\n innerHTML: '
',\n });\n document.body.appendChild(ele);\n if (!isExecute && (typeof templateElement === \"string\" || (templateElement.prototype && templateElement.prototype.CSPTemplate && typeof templateElement === 'function'))) {\n var vueSlot_1 = getCurrentVueSlot(context.vueInstance, templateElement, root);\n if (vueSlot_1) {\n // Compilation for Vue 3 slot template\n var app = Vue.createVNode({\n render: function () {\n return vueSlot_1[\"\" + templateElement]({ data: data });\n }\n }, plugins);\n ele.innerHTML = '';\n // Get values for Vue 3 slot template\n getValues(app, context.vueInstance, root);\n Vue.render(app, ele);\n returnEle = ele.childNodes;\n detach(ele);\n }\n else {\n // Compilation for Vue 3 string template\n detach(ele);\n return stringCompiler(templateElement, helper)(data);\n }\n }\n else if (!isExecute) {\n // Compilation for Vue 3 functional template\n var tempObj = templateElement.call(that, {});\n var object = tempObj;\n var propsData = getValue(\"template.propsData\", tempObj);\n var dataObj_1 = {\n data: { data: extend(tempObj.data || {}, data) },\n parent: context.vueInstance,\n };\n if (!object.template) {\n object.template = object[Object.keys(object)[0]];\n }\n var templateCompRef = void 0;\n if (object.template.extends) {\n templateCompRef = object.template.extends._context.components.template;\n }\n else {\n templateCompRef = object.template._context.components[templateElement.name];\n if (!templateCompRef) {\n var key = Object.keys(object.template._context.components)[0];\n templateCompRef = object.template._context.components[\"\" + key];\n }\n }\n var tempRef_1;\n if (propsData) {\n if (templateCompRef.setup) {\n tempRef_1 = Object.assign(templateCompRef.setup(null, { expose: function () { } }), propsData);\n }\n else {\n tempRef_1 = Object.assign(templateCompRef.data(), propsData);\n }\n }\n else {\n if (templateCompRef.setup) {\n tempRef_1 = Object.assign(templateCompRef.setup(null, { expose: function () { } }), dataObj_1.data);\n }\n else {\n tempRef_1 = Object.assign(templateCompRef.data(), dataObj_1.data);\n }\n if (templateCompRef.components) {\n var objkeys = Object.keys(templateCompRef.components) || [];\n var _loop_1 = function (objstring) {\n var intComponent = templateCompRef.components[\"\" + objstring];\n if (intComponent && intComponent.data) {\n if (!intComponent.__data)\n intComponent.__data = intComponent.data;\n intComponent.data = function (proxy) { return Object.assign(intComponent.__data.call(proxy), dataObj_1.data); };\n }\n };\n for (var _i = 0, objkeys_1 = objkeys; _i < objkeys_1.length; _i++) {\n var objstring = objkeys_1[_i];\n _loop_1(objstring);\n }\n }\n }\n if (templateCompRef.setup) {\n templateCompRef.setup = function (__props, _a) {\n var __expose = _a.expose;\n __expose();\n var __returned__ = tempRef_1;\n Object.defineProperty(__returned__, '__isScriptSetup', { enumerable: false, value: true });\n return __returned__;\n };\n }\n templateCompRef.data = function () { return tempRef_1; };\n var app = Vue.createVNode(templateCompRef, plugins);\n ele.innerHTML = '';\n // Get values for Vue 3 functional template\n getValues(app, context.vueInstance, root);\n Vue.render(app, ele);\n returnEle = ele.childNodes;\n detach(ele);\n }\n else if (typeof templateElement === \"string\" || (templateElement.prototype && templateElement.prototype.CSPTemplate && typeof templateElement === 'function')) {\n var vueSlot_2 = getVueSlot(context.vueInstance, templateElement, root);\n if (vueSlot_2) {\n // Get provide values for Vue 2 slot template\n var provided_1 = {};\n var getProvideValues_1 = function (vueinstance) {\n if (vueinstance['$parent'])\n getProvideValues_1(vueinstance.$parent);\n if (vueinstance['_provided'] && Object.keys(vueinstance['_provided']).length > 0) {\n provided_1 = __assign({}, provided_1, vueinstance._provided);\n }\n };\n var vueInstance = context.vueInstance ? context.vueInstance : ((root && root.vueInstance) ? root.vueInstance : null);\n if (vueInstance) {\n getProvideValues_1(vueInstance);\n }\n // Compilation for Vue 2 slot template\n var vueTemplate = new Vue({\n provide: __assign({}, provided_1),\n render: function () {\n return vueSlot_2[\"\" + templateElement]({ data: data });\n }\n });\n vueTemplate.$mount(\"#\" + id);\n returnEle = ele.childNodes;\n detach(ele);\n }\n else {\n // Compilation for Vue 2 string template\n detach(ele);\n return stringCompiler(templateElement, helper)(data);\n }\n }\n else {\n // Compilation for Vue 2 functional template\n var tempObj = templateElement.call(that, {});\n var templateFunction = tempObj.template;\n var propsData = getValue(\"template.propsData\", tempObj);\n var dataObj = {\n data: { data: extend(tempObj.data || {}, data) },\n parent: context.vueInstance,\n };\n if (propsData) {\n templateFunction = tempObj.template.extends;\n dataObj.propsData = propsData;\n }\n if (typeof templateFunction !== \"function\") {\n templateFunction = Vue.extend(templateFunction);\n }\n if (templateFunction.options.setup) {\n var variables = Object.assign(templateFunction.options.setup(), dataObj.data);\n templateFunction.options.setup = function (__props) {\n return variables;\n };\n }\n var templateVue = new templateFunction(dataObj);\n // let templateVue = new Vue(tempObj.template);\n // templateVue.$data.data = extend(tempObj.data, data);\n templateVue.$mount(\"#\" + id);\n returnEle = ele.childNodes;\n if (context.vueInstance) {\n var templateInstance = context.vueInstance.templateCollection;\n if (!templateInstance) {\n context.vueInstance.templateCollection = {};\n templateInstance = context.vueInstance.templateCollection;\n }\n if (propName) {\n if (!templateInstance[\"\" + propName]) {\n templateInstance[\"\" + propName] = [];\n }\n templateInstance[\"\" + propName].push(returnEle[0]);\n }\n }\n detach(ele);\n }\n }\n return returnEle || [];\n };\n}\nsetTemplateEngine({ compile: compile });\nfunction getValues(app, cInstance, root) {\n var vueInstance = cInstance ? cInstance : ((root && root.vueInstance) ? root.vueInstance : null);\n if (!vueInstance) {\n return;\n }\n // Get globally defined variables.\n app['appContext'] = vueInstance['$']['appContext'];\n // Get provide value from child component.\n var provided = {};\n var getProvideValue = function (vueinstance) {\n if (vueinstance['$'] && vueinstance['$']['parent'])\n getProvideValue(vueinstance.$.parent);\n if (vueinstance['provides'] && Object.keys(vueinstance['provides']).length > 0) {\n provided = __assign({}, provided, vueinstance.provides);\n }\n };\n getProvideValue(vueInstance);\n if (app['appContext']['provides']) {\n app.appContext.provides = __assign({}, app.appContext.provides, provided);\n }\n}\n// Get the Vue2 slot template from the root or current Vue component.\nfunction getVueSlot(vueInstance, templateElement, root) {\n if (!vueInstance && !(root && root.vueInstance)) {\n return undefined;\n }\n var instance = (root && root.vueInstance) ? root.vueInstance : vueInstance;\n return getVueChildSlot(instance, templateElement);\n}\nfunction getVueChildSlot(vueInstance, templateElement) {\n if (!vueInstance) {\n return undefined;\n }\n var slots = vueInstance.$slots;\n var scopedSlots = vueInstance.$scopedSlots;\n var vSlots = vueInstance.scopedSlots;\n var children = vueInstance.children;\n if (scopedSlots && scopedSlots[\"\" + templateElement]) {\n return scopedSlots;\n }\n else if (slots && slots.default) {\n var childSlots = slots.default;\n for (var i = 0; i < childSlots.length; i++) {\n var slot = getVueChildSlot(getSlot(childSlots[parseInt(i.toString(), 10)]), templateElement);\n if (slot) {\n return slot;\n }\n }\n }\n else if (vSlots && vSlots[\"\" + templateElement]) {\n return vSlots;\n }\n else if (children) {\n for (var i = 0; i < children.length; i++) {\n var slot = getVueChildSlot(getSlot(children[parseInt(i.toString(), 10)]), templateElement);\n if (slot) {\n return slot;\n }\n }\n }\n return undefined;\n}\nfunction getSlot(vnode) {\n var slot = (vnode.componentOptions && vnode.componentOptions.children) ? vnode.componentOptions :\n (!vnode.data && (vnode.tag === 'e-markersettings' || vnode.tag === 'e-markersetting')) ? vnode : vnode.data;\n return vnode.componentInstance ? vnode.componentInstance : slot;\n}\n// Get the Vue3 slot template from the root or current Vue component.\nfunction getCurrentVueSlot(vueInstance, templateElement, root) {\n if (!vueInstance && !(root && root.vueInstance)) {\n return undefined;\n }\n var slots = (root && root.vueInstance) ? root.vueInstance.$slots : vueInstance.$slots;\n return getChildVueSlot(slots, templateElement);\n}\nfunction getChildVueSlot(slots, templateElement) {\n if (slots && slots[\"\" + templateElement]) {\n return slots;\n }\n else if (slots && slots.default) {\n var childSlots = slots.default();\n childSlots = childSlots.flatMap(function (item) { return Array.isArray(item.children) ? item.children : item; });\n for (var i = 0; i < childSlots.length; i++) {\n var slot = getChildVueSlot(childSlots[parseInt(i.toString(), 10)].children, templateElement);\n if (slot) {\n return slot;\n }\n }\n }\n return undefined;\n}\n","export default (token) => {\n try {\n var base64Url = token.split(\".\")[1];\n var base64 = base64Url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n var jsonPayload = decodeURIComponent(\n window\n .atob(base64)\n .split(\"\")\n .map(function (c) {\n return \"%\" + (\"00\" + c.charCodeAt(0).toString(16)).slice(-2);\n })\n .join(\"\")\n );\n\n return JSON.parse(jsonPayload);\n } catch (error) {\n return error;\n }\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n 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 extendStatics(d, b);\n };\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};\nimport { Property, NotifyPropertyChanges, Component, isBlazor, isRippleEnabled } from '@syncfusion/ej2-base';\nimport { addClass, Event, detach, removeClass } from '@syncfusion/ej2-base';\nimport { rippleEffect, EventHandler, Observer, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { getTextNode } from '../common/common';\n/**\n * Defines the icon position of button.\n */\nexport var IconPosition;\n(function (IconPosition) {\n /**\n * Positions the Icon at the left of the text content in the Button.\n */\n IconPosition[\"Left\"] = \"Left\";\n /**\n * Positions the Icon at the right of the text content in the Button.\n */\n IconPosition[\"Right\"] = \"Right\";\n /**\n * Positions the Icon at the top of the text content in the Button.\n */\n IconPosition[\"Top\"] = \"Top\";\n /**\n * Positions the Icon at the bottom of the text content in the Button.\n */\n IconPosition[\"Bottom\"] = \"Bottom\";\n})(IconPosition || (IconPosition = {}));\nexport var buttonObserver = new Observer();\nvar cssClassName = {\n RTL: 'e-rtl',\n BUTTON: 'e-btn',\n PRIMARY: 'e-primary',\n ICONBTN: 'e-icon-btn'\n};\n/**\n * The Button is a graphical user interface element that triggers an event on its click action. It can contain a text, an image, or both.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Button = /** @class */ (function (_super) {\n __extends(Button, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {ButtonModel} options - Specifies the button model\n * @param {string|HTMLButtonElement} element - Specifies the target element\n */\n function Button(options, element) {\n return _super.call(this, options, element) || this;\n }\n Button.prototype.preRender = function () {\n // pre render code snippets\n };\n /**\n * Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n Button.prototype.render = function () {\n this.initialize();\n this.removeRippleEffect = rippleEffect(this.element, { selector: '.' + cssClassName.BUTTON });\n this.renderComplete();\n };\n Button.prototype.initialize = function () {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.isPrimary) {\n this.element.classList.add(cssClassName.PRIMARY);\n }\n if (!isBlazor() || (isBlazor() && this.getModuleName() !== 'progress-btn')) {\n if (this.content) {\n var tempContent = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(this.content) : this.content;\n this.element.innerHTML = tempContent;\n }\n this.setIconCss();\n }\n if (this.enableRtl) {\n this.element.classList.add(cssClassName.RTL);\n }\n if (this.disabled) {\n this.controlStatus(this.disabled);\n }\n else {\n this.wireEvents();\n }\n };\n Button.prototype.controlStatus = function (disabled) {\n this.element.disabled = disabled;\n };\n Button.prototype.setIconCss = function () {\n if (this.iconCss) {\n var span = this.createElement('span', { className: 'e-btn-icon ' + this.iconCss });\n if (!this.element.textContent.trim()) {\n this.element.classList.add(cssClassName.ICONBTN);\n }\n else {\n span.classList.add('e-icon-' + this.iconPosition.toLowerCase());\n if (this.iconPosition === 'Top' || this.iconPosition === 'Bottom') {\n this.element.classList.add('e-' + this.iconPosition.toLowerCase() + '-icon-btn');\n }\n }\n var node = this.element.childNodes[0];\n if (node && (this.iconPosition === 'Left' || this.iconPosition === 'Top')) {\n this.element.insertBefore(span, node);\n }\n else {\n this.element.appendChild(span);\n }\n }\n };\n Button.prototype.wireEvents = function () {\n if (this.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n };\n Button.prototype.unWireEvents = function () {\n if (this.isToggle) {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n }\n };\n Button.prototype.btnClickHandler = function () {\n if (this.element.classList.contains('e-active')) {\n this.element.classList.remove('e-active');\n }\n else {\n this.element.classList.add('e-active');\n }\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n Button.prototype.destroy = function () {\n var classList = [cssClassName.PRIMARY, cssClassName.RTL, cssClassName.ICONBTN, 'e-success', 'e-info', 'e-danger',\n 'e-warning', 'e-flat', 'e-outline', 'e-small', 'e-bigger', 'e-active', 'e-round',\n 'e-top-icon-btn', 'e-bottom-icon-btn'];\n if (this.cssClass) {\n classList = classList.concat(this.cssClass.split(' '));\n }\n _super.prototype.destroy.call(this);\n removeClass([this.element], classList);\n if (!this.element.getAttribute('class')) {\n this.element.removeAttribute('class');\n }\n if (this.disabled) {\n this.element.removeAttribute('disabled');\n }\n if (this.content) {\n this.element.innerHTML = this.element.innerHTML.replace(this.content, '');\n }\n var span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n detach(span);\n }\n this.unWireEvents();\n if (isRippleEnabled) {\n this.removeRippleEffect();\n }\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module name\n * @private\n */\n Button.prototype.getModuleName = function () {\n return 'btn';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist Data\n * @private\n */\n Button.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Dynamically injects the required modules to the component.\n *\n * @private\n * @returns {void}\n */\n Button.Inject = function () {\n // Inject code snippets\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {ButtonModel} newProp - Specifies new properties\n * @param {ButtonModel} oldProp - Specifies old properties\n * @returns {void}\n * @private\n */\n Button.prototype.onPropertyChanged = function (newProp, oldProp) {\n var span = this.element.querySelector('span.e-btn-icon');\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'isPrimary':\n if (newProp.isPrimary) {\n this.element.classList.add(cssClassName.PRIMARY);\n }\n else {\n this.element.classList.remove(cssClassName.PRIMARY);\n }\n break;\n case 'disabled':\n this.controlStatus(newProp.disabled);\n break;\n case 'iconCss': {\n if (span) {\n if (newProp.iconCss) {\n span.className = 'e-btn-icon ' + newProp.iconCss;\n if (this.element.textContent.trim()) {\n if (this.iconPosition === 'Left') {\n span.classList.add('e-icon-left');\n }\n else {\n span.classList.add('e-icon-right');\n }\n }\n }\n else {\n detach(span);\n }\n }\n else {\n this.setIconCss();\n }\n break;\n }\n case 'iconPosition':\n removeClass([this.element], ['e-top-icon-btn', 'e-bottom-icon-btn']);\n span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n detach(span);\n }\n this.setIconCss();\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n this.element.classList.add(cssClassName.RTL);\n }\n else {\n this.element.classList.remove(cssClassName.RTL);\n }\n break;\n case 'content': {\n var node = getTextNode(this.element);\n if (!node) {\n this.element.classList.remove(cssClassName.ICONBTN);\n }\n if (!isBlazor() || (isBlazor() && !this.isServerRendered && this.getModuleName() !== 'progress-btn')) {\n if (this.enableHtmlSanitizer) {\n newProp.content = SanitizeHtmlHelper.sanitize(newProp.content);\n }\n this.element.innerHTML = newProp.content;\n this.setIconCss();\n }\n break;\n }\n case 'isToggle':\n if (newProp.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n else {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n removeClass([this.element], ['e-active']);\n }\n break;\n }\n }\n };\n /**\n * Click the button element\n * its native method\n *\n * @public\n * @returns {void}\n */\n Button.prototype.click = function () {\n this.element.click();\n };\n /**\n * Sets the focus to Button\n * its native method\n *\n * @public\n * @returns {void}\n */\n Button.prototype.focusIn = function () {\n this.element.focus();\n };\n __decorate([\n Property('Left')\n ], Button.prototype, \"iconPosition\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isPrimary\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"content\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isToggle\", void 0);\n __decorate([\n Property()\n ], Button.prototype, \"locale\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Event()\n ], Button.prototype, \"created\", void 0);\n Button = __decorate([\n NotifyPropertyChanges\n ], Button);\n return Button;\n}(Component));\nexport { Button };\n"],"sourceRoot":""}