{"version":3,"sources":["webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/util.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/intl/parser-base.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/hijri-parser.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/intl/date-formatter.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/intl/number-formatter.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/intl/date-parser.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/intl/number-parser.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/observer.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/internationalization.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/intl/intl-base.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/ajax.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/browser.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/event-handler.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/template.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/template-engine.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/virtual-dom.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/dom.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/base.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/notify-property-change.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/animation.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/module-loader.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/component.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/child-property.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/draggable.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/droppable.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/keyboard.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/l10n.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/touch.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-base/src/sanitize-helper.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-buttons/src/button/button.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-buttons/src/common/common.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-data/src/adaptors.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-data/src/manager.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-data/src/query.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-data/src/util.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/actions/clipboard.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/actions/print.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/actions/scroll.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/actions/search.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/actions/selection.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/actions/show-hide.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/base/constant.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/base/enum.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/base/string-literals.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/base/util.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/models/aggregate.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/models/cell.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/models/column-chooser-settings.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/models/column.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/models/page-settings.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/models/row.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/renderer/cell-merge-renderer.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/renderer/cell-renderer.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/services/summary-model-generator.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/common/checkbox-filter-base.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/actions/data.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/services/group-model-generator.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/renderer/content-renderer.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-renderer.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-cell-renderer.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/renderer/stacked-cell-renderer.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/renderer/indent-cell-renderer.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/renderer/caption-cell-renderer.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/renderer/expand-cell-renderer.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-indent-renderer.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/renderer/detail-header-indent-renderer.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/renderer/detail-expand-cell-renderer.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/renderer/row-drag-drop-renderer.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/renderer/row-drag-header-indent-render.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/renderer/render.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/renderer/row-renderer.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/services/aria-service.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/services/cell-render-factory.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/services/focus-strategy.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/services/renderer-factory.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/services/row-model-generator.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/renderer/responsive-dialog-renderer.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/services/service-locator.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/services/value-formatter.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/services/width-controller.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-inputs/src/input/input.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-popups/src/common/collision.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-popups/src/common/position.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-popups/src/common/resize.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-popups/src/dialog/dialog.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-popups/src/popup/popup.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-popups/src/spinner/spinner.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-popups/src/tooltip/tooltip.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-react-base/src/component-base.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-react-base/src/complex-base.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-react-base/src/services.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-react-base/src/template.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-react-grids/src/grid/grid.component.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-react-base/src/util.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-react-grids/src/grid/columns-directive.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/pager/numeric-container.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/pager/pager-message.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/pager/pager.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-dropdowns/src/common/incremental-search.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-lists/src/common/list-base.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-dropdowns/src/drop-down-base/drop-down-base.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-dropdowns/src/drop-down-list/drop-down-list.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/pager/pager-dropdown.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/pager/external-message.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/actions/page.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/actions/sort.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-navigations/src/common/h-scroll.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-navigations/src/common/v-scroll.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-navigations/src/toolbar/toolbar.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/actions/toolbar.js","webpack://lcb-research-content/./node_modules/@syncfusion/ej2-grids/src/grid/actions/detail-row.js","webpack://lcb-research-content/./src/components/ContentGrid.js","webpack://lcb-research-content/./src/components/OtherOptionsMenu.js"],"names":["uid","isBlazorPlatform","createInstance","classFunction","params","arrayParam","unshift","undefined","Function","prototype","bind","apply","nameSpace","obj","value","splits","replace","split","i","length","setValue","key","keys","start","fromObj","constructor","getEnumValue","enumObject","enumValue","source","destination","temrObj","tempProp","_i","keys_1","Object","indexOf","Array","isArray","copied","first","second","deep","result","arguments","_loop_1","arguments_1","obj1","forEach","clone","src","copy","isArrayChanged","blazorEventExtend","Event","hasOwnProperty","getUniqueID","definedName","debounce","eventFunction","delay","out","_this","this","args","later","clearTimeout","setTimeout","compareElementParent","child","parent","document","parentNode","throwError","message","Error","e","stack","print","element","printWindow","div","createElement","links","slice","call","getElementsByTagName","querySelectorAll","blinks","l","len","push","reference","window","open","appendChild","cloneNode","outerHTML","write","innerHTML","close","focus","interval","setInterval","ready","clearInterval","formatUnit","match","HijriParser","defaultNumberingSystem","defaultNumberSymbols","latnNumberSystem","ParserBase","getMainObject","cName","getNumberingSystem","numberingSystems","reverseObject","prop","res","propKeys_1","getSymbolRegex","props","regexStr","map","str","join","RegExp","getSymbolMatch","ret","matchKeys_1","constructRegex","val","convertValueParts","regex","getDefaultNumberingSystem","nSystem","getCurrentNumericOptions","curObj","numberSystem","needSymbols","blazorMode","cur","digits","numericPair","numberParseRegex","numericRegex","symbolNumberSystem","symbolMatch","getNumberMapper","isNumber","mapper","numberSymbols","timeSeparator","latnNumberSystem_1","nPair","nRegex","blazorCurrencyData","dateCorrection","getHijriDate","gDate","day","getDate","month","getMonth","year","getFullYear","tMonth","tYear","yPrefix","Math","floor","julilanOffset","julianNumber","b","c","d","tempMonth","modifiedJulianDate","iyear","z","cyc","j","iy","im","tempDay","iln","ii","hYear","hmonth","hDate","date","toGregorian","julianDate","a","gDay","gMonth","gYear","Date","abbreviateRegexGlobal","standalone","weekdayKey","timeSetter","m","h","H","s","f","datePartMatcher","DateFormat","dateFormat","culture","option","cldr","dependable","calendar","numObject","dateObject","formatOptions","isIslamic","isServerRendered","resPattern","format","skeleton","type","dateSeperator","pattern","numMapper","parserObject","patternMatch_1","char","weekday","designator","eText","era","timeZone","isNaN","intDateFormatter","options","matches","dObject","getCurrentDateValue","matches_1","length_1","curval","curvalstr","processNumber","curstr","getDay","curlength","toString","substring","substr","desig","getHours","dec","retu","timezone","getTimezoneOffset","pattern_1","hourFormat","gmtZeroFormat","getTimeZoneValue","gmtFormat","checkTwodigitNumber","tVal","curPattern","no","abs","ishour","errorText","NumberFormat","numberFormatter","symbolPattern","fOptions","cOptions","dOptions","numericObject","numberMapper","currencySymbol","currency","defaultCurrencyCode","altSymbol","percentSymbol","minusSymbol","symbols","isCurrency","isPercent","isAccount","groupOne","checkValueRange","maximumSignificantDigits","minimumSignificantDigits","maximumFractionDigits","minimumFractionDigits","fractionDigits","useGrouping","nData","pData","groupSeparator","groupData","getGroupingDetails","minimumFraction","mval","maximumFraction","mfrac","lfrac","isFinite","intNumberFormatter","p","lastIndexOf","temp","primary","secondary","val1","val2","checkbothExist","isFraction","decide","dint","str1","str2","checkRange","text","range","curData","zeroData","fValue","processSignificantDigits","processFraction","minimumIntegerDigits","processMinimumIntegers","toExponential","groupNumbers","nlead","nend","min","max","toPrecision","level1","sep","decimalSymbol","level2","flag","prefix","toFixed","lead","minute","hour","milliseconds","DateParser","dateParser","numOptions","parseOptions","hourOnly","regexString","evalposition","patternMatch","gmtCorrection","zCorrectTemp","isgmtTraversed","nRegx","numbers","canUpdate","charKey","optional","weekData","weekObject","monthData","hour12","periodValur","tzone","hpattern","parseTimeZoneRegx","pos","parserRegex","parsedDateParts","internalDateParse","dobj","tDate","ystrig","is2DigitYear","parseInt","getDateObject","setMilliseconds","y","setFullYear","tKeys_1","tValue","setDate","pDate","lDate","lastDay","setHours","tzValue","setMinutes","getMinutes","num","retOptions","props_1","curObject","matchString","internalNumberParser","toUpperCase","toLowerCase","test","tmatch","getZoneValue","tZone","splitStr","cRegex","ival","parseRegex","groupRegex","NumberParser","numberParser","custom","symbolpattern","symbolRegex","infinity","getParsedNumber","isNegative","tempValue","end","Infinity","NaN","exponent","parseFloat","convertMaxFracDigits","decimalSplitValue","Observer","context","ranArray","boundedEvents","on","property","handler","id","cntxt","notExist","isHandlerPresent","off","splice","indexLocation","notify","argument","successHandler","errorHandler","name","blazorCallback","curObject_1","objs","index","isTrigger","obj_1","promise","then","data","isJson","JSON","parse","dateReviver","catch","destroy","boundedEvents_1","onIntlChange","rightToLeft","cldrData","defaultCulture","Internationalization","cultureName","getDateFormat","getCulture","getNumberFormat","getDateParser","getNumberParser","formatNumber","formatDate","parseDate","parseNumber","getDatePattern","isExcelFormat","getNumberPattern","isExcel","getFirstDayOfWeek","setCulture","blazorCultureFormats","IntlBase","negativeDataRegex","customRegex","latnParseRegex","fractionRegex","defaultCurrency","patternRegex","'","dateConverterMapper","islamicRegex","firstDayMapper","formatRegex","currencyFormatRegex","curWithoutNumberRegex","typeMapper","0","1","getResultantPattern","blazorCulture","iType","compareBlazorDateFormats","basicPatterns","dPattern","tPattern","getDependables","mode","calendartype","blazorDefaultObject","defaultObject","dateString","getSymbolPattern","numSystem","ConvertDateToWeekFormat","convertMapper","tempString","curFormatMapper","getProperNumericSkeleton","patternMatcher","getFormatData","needFraction","cSymbol","fractionOnly","changeCurrencySymbol","groupPattern","fraction","fmatch","sym","getCurrencySymbol","currencyCode","customNumberFormat","integerPart","fractionPart","isCurrencyPercent","parts","actual","symbol","part","loc","dateParseRegex","monthIndex","3","4","5","days","C","P","N","A","E","customFormat","formatSplit","getDateSeparator","dateObj","getActualDateTimeFormat","actualPattern","tLength","timeZonePattern","options_1","getActualNumberFormat","minFrac","numrericObject","curMatch","curCode","hasNegativePattern","minDigits","maxDigits","diff","fractionDigitsPattern","integer","x","minimumIntegerPattern","groupingPattern","cPattern","processSymbol","getWeekData","firstDay","iCulture","replaceBlazorCurrency","aCurrency","rCurrency","iCurrency","pData_1","getWeekOfYear","weeknum","newYear","daynum","getTime","nday","headerRegex","Ajax","async","contentType","emitError","url","send","eventArgs","cancel","httpRequest","Promise","resolve","reject","XMLHttpRequest","onreadystatechange","stateChange","onLoad","onload","onProgress","onprogress","onAbort","onabort","onError","onerror","onUploadProgress","upload","setRequestHeader","beforeSend","onSuccess","failureHandler","reason","onFailure","responseText","dataType","error","readyState","status","statusText","getResponseHeader","responseHeaders","header","headers","exec","getAllResponseHeaders","REGX_MOBILE","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","version","language","navigator","getEvent","event","events","isPointer","isTouch","isDevice","move","isWindows","getTouchStartEvent","getTouchEndEvent","getTouchMoveEvent","getTouchCancelEvent","getValue","regX","defineProperty","get","uA","set","enumerable","configurable","info","maxTouchPoints","isMSPointer","isWebView","cordova","PhoneGap","phonegap","forge","touchStartEvent","touchMoveEvent","touchEndEvent","touchCancelEvent","EventHandler","addOrGetEventData","__eventList","add","eventName","listener","bindTo","intDebounce","debounceListener","eventData","isIE","addEventListener","passive","remove","some","removeEventListener","clearEvents","copyData","shift","trigger","eventProp","eventData_1","event_1","LINES","QUOTES","IF_STMT","ELSEIF_STMT","ELSE_STMT","FOR_STMT","IF_OR_FOR","CALL_FUNCTION","NOT_NUMBER","WORD","DBL_QUOTED_STR","WORDIF","exp","ARR_OBJ","SINGLE_SLASH","DOUBLE_SLASH","WORDFUNC","WINDOWFUNC","compile","template","helper","ignorePrefix","argName","evalExpResult","varCOunt","localKeys","isClass","singleSpace","cnt","offset","matchStr","SPECIAL_CHAR","rlStr","addNameSpace","trim","strs","HandleSpecialCharArrObj","rlStr_1","mtc","fnStr","fNameSpace","ftArray","splRegexp","arrObj","SlashReplace","NameSpaceForspecialChar","evalExp","addNS","ignoreList","tempStr","nameSpaceNew","quotes","NameSpaceArrObj","HAS_ROW","HAS_SVG","blazorTemplates","getRandomId","random","templateString","compiler","engineObj","component","propName","templateId","isStringTemplate","blazorTemplateId","blazorId","className","childNodes","updateBlazorTemplate","templateName","comp","isEmpty","callBack","updateTemplate","resetBlazorTemplate","templateDiv","getElementById","innerTemplates","getElementsByClassName","tempId","getAttribute","tempElement","setTemplateEngine","classObj","getTemplateEngine","Engine","simpleRegex","multipleSplitRegex","idClassSelector","selectMapper","assigner","tagName","emptyElements","blockElements","inlineElement","selfClosingElements","fillAttrs","cspElement","nameMapper","startRegex","endRegex","attributeRegex","VirtualDOM","assignParent","childrens","detach","children","processSelector","selector","curMapper","filter","canPush","existValue","accessElement","ele","selectAll","immediateParent","temp_1","matched","mapper_1","expected","actualValue","concat","ConvertHTMLToJSon","htmlString","isText","results","tagArray","nodeArray","lastVal","getLastValue","contains","all","iterateText","iterateEndTag","iterateStartTag","tagIndex","rest","isSelfTag","attrs","names","valArr","vObj","length_3","cVal","styleSplit","tagObject","attributes","parent_3","node","parent_4","parent_5","arr","properties","extended","styles","style","append","fromElements","toElement","prepend","vDomSelector","_a","iSelector","curColl","length_2","isDescendant","parent_2","curSelector","splitSelector_1","dParent","descendent","_b","dSelector_1","sel","descendentChild","_c","dParent_1","iCurSelector","_d","parent_1","curParent","setStyleAttribute","SVG_REG","createElementNS","setAttribute","addClass","elements","classes","classList","getClassList","classList_1","curClass","removeClass","classList_2","classArr","isVisible","visibility","offsetWidth","isEval","docFrag","createDocumentFragment","insertBefore","firstElementChild","executeScript","script","head","removeChild","iKey","needsVDOM","querySelectId","querySelector","charRegex","idList","list","splitId","setId","closest","el","nodeType","addClasses","removeClasses","msMatchesSelector","webkitMatchesSelector","isColEName","Base","isRendered","isComplexArraySetter","allowServerDataBinding","isProtectedOnChange","changedProperties","oldProperties","bulkChanges","refreshing","ignoreCollectionWatch","finalUpdate","childChangedProperties","modelObserver","addInstance","setProperties","isDestroyed","muteOnChange","prevDetection","dataBind","serverDataBind","callChildDataBind","clearChanges","getOwnPropertyNames","newChanges","oldChanges","onPropertyChanged","updateModel","saveChanges","newValue","oldValue","unbind","Uint16Array","msCrypto","crypto","getRandomValues","secret","combineArray","messageHandler","postMessage","setImmediate","moduleClass","getModuleName","ej2_instances","getObject","instance","curKey","defaultValue","getObjectArray","isSetter","isFactory","curType","inst","propertyGetter","propertySetter","oldVal","complexGetter","complexSetter","complexArrayGetter","defCollection","ignore","controlParent","extendFunc","descriptor","complexArrayDefinedCallback","complexArraySetter","oldValueCollection","newValCollection","dFunc","keyString","getParentKey","model_1","getArrayModel","model","ejsAction","isControlParent","arrayFunction","modelObject","Property","target","propertyDescriptor","addPropertyCollection","Complex","Collection","eventDescriptor","finalContext","getParentContext","NotifyPropertyChanges","classConstructor","propertyType","propList","complexProps","colProps","propNames","complexPropNames","colPropNames","eventNames","propertyName","curText","_extendStatics","__extends","setPrototypeOf","__proto__","__","create","__decorate","decorators","desc","r","getOwnPropertyDescriptor","Reflect","decorate","Animation","_super","easing","ease","linear","easeIn","easeOut","easeInOut","elasticInOut","elasticIn","elasticOut","Animation_1","animate","getModel","elements_1","element_1","delayAnimation","stop","animation","removeAttribute","animationId","frameId","cancelAnimationFrame","applyAnimation","timeStamp","step","timerId","prevTimeStamp","duration","startAnimation","begin","avg","timingFunction","progress","requestAnimationFrame","performance","now","fail","newProp","oldProp","rippleEffect","rippleOptions","done","rippleModel","rippleFlag","isCenterRipple","getRippleModel","isRippleEnabled","rippleHandler","rippleUpHandler","rippleLeaveHandler","getBoundingClientRect","offsetX","pageX","body","scrollLeft","offsetY","pageY","scrollTop","documentElement","left","right","top","bottom","radius","sqrt","diameter","rippleElement","getComputedStyle","getPropertyValue","transform","removeRipple","rippleElements","opacity","lastPageID","ModuleLoader","loadedModules","inject","requiredModules","moduleList","reqLength","clearUnusedModule","modl","moduleList_1","module","modName","member","isModuleLoaded","moduleObject","memberName","getMemberName","isProperty","loadedModule","clean","modules","usedModules","arg","removableModule_1","mod","ChildProperty","parentObj","isParentArray","updateChange","updateTimeOut","changeTime_1","curIndex","restrictServerDataBind","isSaveChanges","action","parentKey","complexKeys","isFinal","valueLength","componentCount","lastHistoryLen","versionBasedStatePersistence","Component","randomId","uniqueID","needsID","isReactHybrid","enableRtl","locale","moduleLoader","localObserver","detectFunction","appendTo","enablePersistence","setPersistData","refresh","preRender","injectModules","render","accessMount","mount","getRootElement","actualElement","getLocalData","eleId","localStorage","getItem","ej2StatePersistenceVersion","mergePersistData","renderComplete","wrapperElement","event_2","getInjectedModules","injectedModules","Inject","isVDOM","triggerStateChange","setState","currentContext","calls","setItem","getPersistData","renderReactTemplates","clearTemplate","isHistoryChanged","pageID","location","href","history","hash","charCodeAt","addOnPersist","persistObj","objValue","getActualProperties","stringify","ignoreOnPersist","iterateJsonProperties","newObj","newList","this_1","defaultPosition","isDraggedObject","isDragged","Position","Draggable","dragLimit","Draggable_1","getDefaultPosition","borderWidth","padding","diffX","prevLeft","prevTop","dragProcessStarted","tapHoldTimer","externalInitialize","diffY","parentScrollX","parentScrollY","droppables","toggleEvents","scope","isUnWire","handle","enableTapHold","mobileInitialize","initialize","evt","currentTarget","removeTapholdTimer","tapHoldThreshold","getScrollableParent","axis","getScrollableValues","curTarget","currentStateTarget","isDragStarted","abort","abortSelectors","preventDefault","changedTouches","intCoord","getCoordinates","initialPosition","clientX","clientY","relativeXPosition","relativeYPosition","intDragStart","intDestroy","isPreventSelect","isChangeTouch","intCordinate","styleProp","margin","marginLeft","marginTop","marginRight","marginBottom","dragTarget","intClosest","isReplaceDragEle","currentStateCheck","calculateParentPosition","position","getMousePosition","isDragScroll","distance","getHelperElement","dragTargetElement","helperElement","parentClientRect","offsetParent","dragStart","getProperTargetElement","bindEvents","bindDragEvents","dragElement","dragArea","setDragArea","enableTailMode","posValue","getProcessedPositionValue","dragElePosition","getDragPosition","intDrag","intDragStop","setGlobalDroppables","elementInViewport","offsetTop","offsetLeft","width","height","offsetHeight","pageYOffset","pageXOffset","innerHeight","innerWidth","queryPositionInfo","rect","docHeight","getDocumentWidthHeight","docWidth","drag","eleObj","checkTargetElement","hoverObject","triggerOutFunction","dragData","intOver","tLeft","tTop","pagex","pagey","dLeft","dTop","skipDistanceCheck","helperWidth","helperHeight","draEleTop","draEleLeft","iTop","iLeft","tempDraEleTop","dragValue","enableAutoScroll","scrollIntoView","intOut","docBody","docEle","dragStop","dragStopCalled","intDrop","change","eleWidthBound","eleHeightBound","elementArea","scrollWidth","scrollHeight","tborder","tpadding","lowerKey","prevStyle","pointerEvents","elementFromPoint","oldEle","isdragscroll","dragEle","srcElement","isOffsetParent","cursorAt","sender","reset","draggable","draggedElement","dropIns","getDropInstance","parentElement","drop","eleInst","eleInst_1","Droppable","mouseOver","wireEvents","area","accept","isDrag","isDropArea","canDrop","droppedElement","display","coord","keyCode","KeyboardEvents","keyPressHandler","isAltKey","altKey","isCtrlKey","ctrlKey","isShiftKey","shiftKey","curkeyCode","which","keyConfigs","configCollection_1","rconfig","rKeyObj","KeyboardEvents_1","getKeyConfigData","keyAction","unwireEvents","config","configCache","keyData","Number","getKeyCode","keyVal","L10n","controlName","localeStrings","setLocale","intLocale","intGetControlConstant","currentLocale","load","localeObject","getConstant","SwipeSettings","swipeRegex","Touch","touchAction","tapCount","startEvent","point","updateChangeTouches","isTouchMoved","movedDirection","startPoint","lastMovedPoint","startEventData","hScrollLocked","vScrollLocked","tStampStart","timeOutTapHold","tapHoldEvent","moveEvent","endEvent","cancelEvent","movedPoint","eScrollArgs","calcScrollPoints","startEvents","originalEvent","startX","startY","distanceX","distanceY","scrollDirection","velocity","getVelocity","timeOutTap","swipeFn","tap","tapThreshold","modeclear","endPoint","calcPoints","swipeArgs","swipeDirection","eSwipeArgs","tDistance","swipeSettings","swipeThresholdDistance","defaultArgs","canTrigger","scrollBool","isScrollable","moved","checkSwipe","modeClear","lastTapTime","eleStyle","overflow","overflowX","overflowY","eTapArgs","pnt","newX","newY","newT","xDist","yDist","removeTags","removeAttrs","attribute","jsEvents","SanitizeHtmlHelper","beforeSanitize","selectors","tags","sanitize","item","serializeValue","wrapElement","removeXssTags","removeJsEvents","removeXssAttrs","tempEleValue","removeElement","nodes","localName","attr","hasAttribute","cssClassName","Button","removeRippleEffect","cssClass","isPrimary","content","tempContent","enableHtmlSanitizer","setIconCss","disabled","controlStatus","iconCss","span","textContent","iconPosition","isToggle","btnClickHandler","unWireEvents","click","focusIn","getTextNode","childnode","createCheckBox","enableRipple","wrapper","rippleSpan","frameSpan","checked","label","labelSpan","disableHtmlEncode","consts","GroupGuid","Adaptor","ds","from","requestType","sortBy","select","skip","group","take","search","count","where","aggregates","expand","dataSource","pvt","processResponse","query","xhr","JsonAdaptor","processQuery","dataManager","page","json","countFlg","lazyLoad","keyCount","agg","queries","fn","field","lazyLoadData","lazyLoadGroup","isCountRequired","getAggregate","onDemandGroupInfo","fieldName","comparer","onPage","formGroupResult","req","onWhere","level","aggQuery","tmp","batchRequest","dm","changes","deletedRecordsLen","deletedRecords","addedRecords","insert","changedRecords","update","validate","onAggregates","onSearch","fieldNames","searchKey","ignoreCase","ignoreAccent","onSortBy","fnCompare","sort","onGroup","size","pageSize","pageIndex","onRange","onTake","nos","onSkip","onSelect","tableName","keyField","UrlAdaptor","hierarchyFilters","getQueryRequest","singles","request","sorts","groups","filters","searches","direction","getFiltersFrom","toJson","fields","operator","getRequestQuery","reqParams","keys_2","pvtData","convertToQueryString","request1","fromTable","distincts","selects","expands","handleTimeZone","timeZoneHandling","requests","groupDs","isExpand","formRemoteGroupedData","getAggregateResult","childLevel","items","getGroupedRecords","hasRecords","childGroupedRecords","original","batchUrl","crudUrl","removeUrl","changed","added","deleted","table","insertUrl","keyColumn","updateUrl","fKey","pKey","predicats","aggregateData","aggregate","isServerGrouping","groupQuery","addParams","ODataAdaptor","multipartAccept","batch","changeSet","batchPre","contentId","batchContent","changeSetContent","batchChangeSetContentType","updateType","onPredicate","predicate","requiresCast","guid","returnValue","getField","encodeURIComponent","onComplexPredicate","predicates","onEachWhere","condition","isComplex","onEachSearch","onEachSort","reverse","onCount","settings","overrideMimeType","metaCheck","rootUrl","dataUrls","resourceTableName","dataCopy","metaData","emptyAndBatch","processBatchResponse","versionCheck","requiresFormat","keys_4","localTimeReplacer","convertObj","localTime","compareAndRemove","initialGuid","cid","cSet","generateInsertRequest","generateUpdateRequest","generateDeleteRequest","stat","toJSON","_data","generateBodyContent","_data2","org","o","_data3","method","cIdx","jsonObj","exVal","changeGuid","valueOf","RemoteSaveAdaptor","ODataV4Adaptor","isDate","onExpand","selected","expanded","exArr","ex","onDistinct","distinctFields","metaName","dataUrl","dataCount","WebApiAdaptor","host","_loop_2","_loop_3","state","Count","Items","WebMethodAdaptor","param","updateKey","CustomDataAdaptor","getData","addRecord","updateRecord","deleteRecord","batchUpdate","CacheAdaptor","adaptor","isCrudAction","isInsertAction","cacheAdaptor","guidId","forDel","currentTime","requestTime","removeItem","generateKey","currentFilter","newQuery","cachedItems","crossDomain","DataManager","dateParse","offline","timeTillExpiration","cachingPageSize","enableCaching","jsonp","defaultQuery","isDataAvailable","executeQuery","setDefaultQuery","executeLocal","subQuery","lookup","lookups","using","always","deffered","Deferred","isCustomDataAdaptor","makeRequest","getDeferedArgs","nextTick","extendRequest","fnSuccess","fnFail","cache","processData","isSelector","subQuerySelector","process","virtualSelectRecords","fnQueryChild","subDeffer","childArgs","isChild","subUrl","childReq","subData","ajaxReqOption","virtualRecords","ajax_1","pResult","cResult","doAjaxRequest","deff_1","ajax_2","successFunc","record","ajaxDeffered","failureFunc","ajaxFunc","ajax_3","Query","sortedColumns","groupedColumns","setKey","execute","cloned","distinct","tables","Predicate","isFromGroup","sortByForeignKey","order","filterQueries","sortByDesc","hierarchy","selectorFn","foreignKey","requiresCount","q","filterQueryLists","filtered","and","combinePredicates","combine","or","fromJson","fromJSONData","pred","isAnd","preds","DataUtil","endsWith","input","startsWith","fnSort","fnAscending","fnDescending","localeCompare","extractFields","jsonArray","newData","isLazyLoad","jsonData","indx","childLevels","grouped","groupedArray","records","this_2","getVal","tempObj","aggs","buildHierarchy","grp","fKeyData","getFieldList","copyObj","middle","merge","ignoreDiacritics","diacritics","current","array","callAdaptorFunction","fnName","param1","param2","getAddParams","adp","isPlainObject","isCors","getGuid","rand","Uint8Array","isNull","getItemFromComparer","castRequired","requiresCompleteRecord","serverTimezoneOffset","sum","average","truecount","falsecount","operatorSymbols","odBiOperator","odUniOperator","odv4UniOperator","fnOperators","equal","notequal","lessthan","greaterthan","lessthanorequal","greaterthanorequal","notnull","isnull","startswith","endswith","processSymbols","processOperator","parseJson","jsonText","jsonReviver","iterateAndReviveArray","iterateAndReviveJson","ms","offSet","toTimeZone","isUTC","utcFormat","hrs","mins","addSelfOffset","isGuid","replacer","jsonReplacer","arrayReplacer","keys_3","jsonDateReplacer","toUTC","utc","unix","toLocalTime","datefn","differenceString","localtimefn","norm","getSeconds","Clipboard","copyContent","isSelect","initialEnd","keyDownHandler","clickHandler","pasteHandler","grid","isMacLike","platform","metaKey","isEdit","activeElement","editSettings","allowEditing","selectionSettings","cellSelectionMode","clipBoardTextArea","x_1","scrollX","y_1","scrollY","scrollTo","paste","getSelectedRowCellIndexes","rowIndex","cellIndexes","colIndex","col","isAvail","rIdx","cols","mRows","frRows","rows","dataRows","getDataRows","isFrozen","isFrozenGrid","getMovableDataRows","getFrozenRightColumnsCount","getFrozenRightDataRows","getRowByIndex","getCellFromIndex","fTr","mTr","getColumnByIndex","getParser","isPrimaryKey","column","editModule","updateCell","selectionModule","selectCellsByRange","cellIndex","cell","tabindex","setCopyData","withHeader","getSelection","getRows","getFrozenMode","getFrozenRightRows","selectedIndexes","getSelectedRowIndexes","headerTextArray","getVisibleColumns","headerText","getCopyData","cells","checkBoxSelection","colIndexes","getColumnHeaderByIndex","rowIndexes","setSelectionRange","isCell","splitKey","isElement","getColumns","innerText","queryCommandSupported","execCommand","blur","removeAllRanges","gridObj","rowCellIndxes","Print","scrollModule","isAsyncPrint","defered","isContentReady","actionBegin","onEmpty","hierarchyPrint","isPrintGrid","hierarchyPrintMode","childGrid","contentReady","removeColGroup","printGridObj","printModule","renderPrintGrid","printWind","outerHeight","outerWidth","moveTo","resizeTo","screen","availWidth","availHeight","gObj","printGrid","getFrozenColumns","columns","freeze","isAngular","viewContainerRef","getQuery","isPrinting","injectedModues","setInjectedModules","printgrid","log","registeredTemplate","selectedRows","getContentTable","cssProps","getCssProperties","contentDiv","headerDiv","border","allowGrouping","groupSettings","waitingPop","printGridElement","depth","groupCaption","colSpan","colGroups","contentColGroups","hideColGroup","printGridProp","Scroll","lastScrollTop","previousValues","oneTimeReady","widthService","setWidth","uiupdate","setWidthToColumns","toolbarModule","toolbar","refreshOverflow","setHeight","mHdrHeight","getContent","getScrollBarWidth","enableVirtualization","frozenRows","tbody","getHeaderContent","getRowHeight","ensureOverflow","setPadding","getThreshold","removePadding","rtl","hDiv","footerDiv","getFooterContent","getSiblingsHeight","setScrollLeft","headerModule","getMovableHeader","onFrozenContentScroll","isPreventScrollEvent","infiniteScrollModule","enableInfiniteScrolling","onContentScroll","scrollTarget","isHeader","isLeft","enableLazyLoading","isDown","scrollDown","isFooter","onCustomScrollbarScroll","mCont","mHdr","onTouchScroll","pointerType","pageXY","getPointXY","clientWidth","setPageXY","touches","frzCols","mScrollBar","firstChild","sLeft","sHeight","clientHeight","enableColumnVirtualization","css","gridElement","cont","Search","searchString","arg1","searchSettings","refreshSearch","onSearchComplete","actionCompleteFunc","onActionComplete","cancelBeginEvent","__assign","assign","t","n","Selection","locator","selectedRowIndexes","selectedRowCellIndexes","selectedRecords","preventFocus","selectedColumnsIndexes","checkBoxState","isMultiShiftRequest","isMultiCtrlRequest","enableSelectMultiTouch","clearRowCheck","selectRowCheck","selectedRowState","totalRecordsCount","chkAllCollec","isCheckedOnAdd","persistSelectedData","deSelectedData","needColumnSelection","isCancelDeSelect","isPreventCellSelect","disableUI","isPersisted","cmdKeyPressed","cellselected","isMultiSelection","isAddRowsToSelection","initialRowSelection","isPrevRowSelection","autoFillRLselection","right_bottom","bottom_left","top_right","top_left","top_bottom","top_right_bottom","top_bottom_left","top_right_left","right_bottom_left","all_border","factory","getService","initializeSelection","onActionBegin","fDataUpdate","rowObj","getRowObj","currentIndex","foreignKeyData","hidePopUp","clearSelection","mouseDownHandler","isEditing","formObj","isPersistSelection","getSelectedMovableRow","getMovableRowByIndex","getSelectedFrozenRightRow","getFrozenRightContent","getFrozenRightRowByIndex","getCurrentBatchRecordChanges","currentRecords","getCurrentViewRecords","newRowPosition","getBatchChanges","primaryKey","getPrimaryKeyFieldNames","selectRow","enableSimpleMultiRowSelection","addRowsToSelection","selectData","selectedRow","selectedMovableRow","selectedFrozenRightRow","selectedIndex","frozenData","contentModule","getRowObjectByIndex","getRowObjectFromUID","getSelectedRecords","clearRowSelection","isRowType","isRowSelected","activeTarget","can","rowSelectingCallBack","isCtrlPressed","isShiftPressed","row","previousRow","prevRowIndex","previousRowIndex","actualTarget","isInteracted","isHeaderCheckboxClicked","addMovableArgs","isRemoved","toggle","removed","persistSelection","checkboxMode","clearSelectedRow","selectRowCallBack","isCheckBoxSelection","clearRow","disableInteracted","updateRowSelection","selectMovableRow","selectRowIndex","isHeaderCheckBoxClicked","updateRowProps","targetObj","mRow","frRow","mObj","previousMovRow","getMovableRows","selectRowsByRange","startIndex","endIndex","selectRows","getCollectionFromIndexes","isSingleSel","selectedData","currentRow","isJsComponent","prevRow","selectRowFn","rightEle","rowIndexes_1","indexes","checkboxOnly","checkboxColumn","rowIndexes_2","isUnSelected","enableToggle","rowDeselect","addRemoveClassesForRow","isHybrid","clearRowCallBack","checkAllRows","selectedEle","updatePersistCollection","updateCheckBoxes","chkState","ensureCheckboxFieldSelection","pKey_1","isSelected","updatePersistDelete","chkBox","nextElementSibling","checkedTarget","setCheckAllState","pop","getPrevIndexes","contextMenuModule","mouseButton","onClick","clearCellSelection","clearColumnSelection","rows_1","data_1","row_1","mRow_1","fRightRow_1","rowIndex_1","foreignKeyData_1","target_1","isRowClicked","checkSelectAllClicked","getCheckAllStatus","updatePersistSelectedData","movableRow","rowDeselectCallBack","frozenRightRow","isSingleDeSel","rowDeselectObj","rowidxex","getSelectedMovableCell","getFreezeTableName","getMovableCellFromIndex","getColIndex","selectCell","isCellType","selectedCell","isCellSelected","prevCIdxs","successCallBack","previousRowCell","prevECIdxs","getCellIndex","cellSelectingArgs","clearCell","updateCellSelection","currentCell","selectedRowCellIndex","updateCellProps","stIndex","edIndex","getLastColIndex","addAttribute","cellSelectedArgs","selectCells","rowCellIndexes","cellSelectArgs","cellLen","addRowCellIndex","addCellsToSelection","getFrozenLeftCount","movable","getMovableColumnsCount","hideAutoFill","getRowsObject","getMovableRowsObject","getFrozenRightRowsObject","cellIndexes_1","idx","selectedCellIdx","cellDeselect","getFrozenLeftColumnsCount","rowCellIndex","isRowAvail","selectedCells","getSelectedCellsElement","rowCell","currentViewData","cLen","bdrElement","showHideBorders","addMovableRows","mouseMoveHandler","gBRect","x1","y1","x2","y2","isCellDrag","td","startAFCell","startCell","endAFCell","selectLikeExcel","startDIndex","isAutoFillSel","showAFBorders","selectLikeAutoFill","startDCellIndex","drawBorders","createBorders","positionBorders","isLastCell","isLastRow","isFirstRow","isFirstCell","setBorders","parentEle","bdrStr","stOff","endOff","parentOff","rowHeight","topOffSet","leftOffset","rightOffset","selectDirection","updateStartEndCells","getMovableContent","mcBdrElement","frcBdrElement","getHeaderTable","fhBdrElement","mhBdrElement","getFrozenRightHeader","frhBdrElement","applyBorders","applyBothFrozenBorders","includes","drawAFBorders","bdrAFBottom","createAFBorders","positionAFBorders","bdrAFLeft","firstCellTop","firstCellLeft","parentRect","sTop","totalHeight","totalWidth","scrolloffSet","bdrAFRight","bdrAFTop","leftRemove","topRemove","hideAFBorders","updateValue","createBeforeAutoFill","getAutoFillCells","startCellIdx","cls","isApply","startrowIdx","endrowIdx","endCellIdx","rowLen","colLen","cellIdx","endCell","startCellIndex","trIdx","mouseUpHandler","mUPTarget","updateAutoFillPosition","lastCell","updateStartCellsIndex","autofill","enableAutoFill","rindex","isFrozenCol","isFrozenRow","isFrozenRight","clientRect","colWidth","button","allowRowDragAndDrop","enableDrag","isUpdate","tr","postion","clearSelAfterRefresh","isInfiniteScroll","evtHandlers","enableAfterRender","onCellFocused","columnPositionChanged","rowsRemoved","refreshHeader","actionBeginFunction","actionCompleteFunction","actionComplete","addEventListener_checkbox","removeEventListener_checkbox","isMacOS","keyUpHandler","beforeFragAppend","getCheckAllBox","enable","initPerisistSelection","prevColIndex","checkBoxSelectionChanged","isLeftRightFrozen","renderFrozenRightContent","selectedRowIndex","gobj","chkField","pageSettings","getDataModule","proxy_1","showSpinner","dataSuccess","refreshPersistSelection","hideSpinner","setRowSelection","isRemote","generateQuery","getMovableContentTbody","getFrozenRightContentTbody","allowPaging","checkState","editChkBox","onDataBound","getSelectedRows","totalRecords","checkSelectAllAction","cRenderer","getRenderer","editForm","getVirtualRowIndex","checkSelectAll","checkBox","stateStr","triggerChkChangeEvent","checkSelect","rIndex","rowCellSelectionHandler","moveIntoUncheckCollection","updateSelectedRowIndex","dataLength","selectedVal","isInteraction","checkedLen","spanEle","indeterminate","setSelection","allowColumnSelection","popUpClickHandler","chkSelect","checkWrap","isEqualNode","hoverFrozenRows","showPopup","headerSelectionHandler","getColumnIndexByUid","container","byKey","keyArgs","allowFiltering","isJump","clear","isContent","isSelectable","headerAction","prev","thLen","childElementCount","columnIndex","getKeyColIndex","applyDownUpKey","applyRightLeftKey","shiftDownKey","applyShiftLeftRightKey","applyHomeEndKey","applyCtrlHomeEndKey","ctrlPlusA","applySpaceSelection","allowNextRowEdit","stackedHeader","innerColumn","getstackedColumns","getColumnByUid","lastIndex","firstIndex","applyUpDown","selectColumn","cIndex","contentRenderer","selectColumnsByRange","innerColumnIndexes","isAdd","clearAll","detailIndentCell","dragdropIndentCell","selectedCol","getColumnHeaderByUid","isColSelected","isMultiColumns","clearColDependency","headerCell","previousColumnIndex","updateColSelection","selectedArgs","updateColProps","selectColumns","columnIndexes","getselectedCols","selectingArgs","selectColumnWithExisting","newCol","clearIndex","isColumnSelected","deselectedArgs","getFrozenRightColumnHeaderByIndex","getMovableColumnHeaderByIndex","columnDeselect","selectedHeader","getSelectedColumnCells","movableRows","isRowTemplate","rowTemplate","seletedcells","selectionString","getIndentCount","dataReady","onDataBoundFunction","setCheckAllForEmptyGrid","actionCompleteHandler","resizeEndFn","checkAllBox","isInfinitecroll","enableImmutableMode","isSelectedRowIndexUpdating","ShowHide","show","columnName","showBy","getToggleFields","visible","setVisible","hide","hideBy","getKeyBy","columnModel","changedStateColumns","showHideArgs","currentViewCols","emptyVcRows","allowSelection","col1","col2","columnQueryMode","created","rowDataBound","queryCellInfo","headerCellInfo","actionFailure","dataBound","rowSelecting","rowSelected","rowDeselecting","rowDeselected","cellSelecting","cellSelected","cellDeselecting","cellDeselected","columnSelecting","columnSelected","columnDeselecting","columnDeselected","columnDragStart","columnDrag","columnDrop","beforePrint","printComplete","detailDataBound","toolbarClick","batchAdd","batchCancel","batchDelete","recordDoubleClick","recordClick","beforeDataBound","beforeOpenAdaptiveDialog","resizeStop","checkBoxChange","beforeCopy","beforePaste","beforeAutoFill","filterChoiceRequest","filterAfterOpen","filterBeforeOpen","filterSearchBegin","initialLoad","uiUpdate","inBoundModelChanged","modelChanged","colGroupRefresh","headerRefreshed","pageComplete","sortComplete","searchComplete","groupComplete","groupAggregates","refreshFooterRenderer","rowSelectionComplete","cellSelectionComplete","beforeCellFocused","cellFocused","keyPressed","columnVisibilityChanged","scroll","columnWidthChanged","rowsAdded","columnDragStop","headerDrop","dataSourceModified","refreshComplete","dblclick","toolbarRefresh","bulkSave","autoCol","tooltipDestroy","updateData","preventBatch","crudAction","addDeleteAction","doubleTap","freezeRender","filterDialogCreated","filterMenuClose","initForeignKeyColumn","getForeignKeyData","showEmptyGrid","dataStateChange","dataSourceChanged","rtlUpdated","frozenHeight","textWrapRefresh","recordAdded","cancelBegin","editNextValCell","expandChildGrid","printGridInit","rowPositionChanged","partialRefresh","selectVirtualRow","columnsPrepared","cBoxFltrBegin","cBoxFltrComplete","fltrPrevent","filterCboxValue","restoreFocus","detailStateChange","detailIndentCellInfo","virtaulCellFocus","virtualScrollEdit","editReset","getVirtualData","refreshInfiniteModeBlocks","resetInfiniteBlocks","infiniteScrollHandler","infinitePageQuery","infiniteShowHide","appendInfiniteContent","removeInfiniteRows","setInfiniteCache","infiniteEditHandler","closeFilterDialog","resetColumns","setGroupCache","lazyLoadScrollHandler","groupCollapse","beforeCheckboxRenderer","refreshHandlers","setFreezeSelection","beforeRefreshOnDataChange","immutableBatchCancel","checkScrollReset","preventFrozenScrollRefresh","refreshInfiniteCurrentViewData","filterDialogClose","refreshCustomFilterOkBtn","refreshCustomFilterClearBtn","renderResponsiveCmenu","filterCmenuSelect","customFilterClose","setFullScreenDialog","refreshExpandandCollapse","rowModeChange","enterKeyHandler","pagerRefresh","closeEdit","resetVirtualFocus","CellType","RenderType","ToolbarItem","ResponsiveDialogAction","ResponsiveToolbarAction","gridHeader","gridContent","gridFooter","headerContent","movableContent","movableHeader","frozenContent","frozenHeader","gridChkBox","editedRow","addedRow","leftRight","frozenRight","frozenLeft","ariaColIndex","ariaRowIndex","colGroup","doesImplementInterface","checkFor","valueAccessor","getUpdateUsingRaf","updateFunction","iterateArrayOrObject","collection","iterateExtend","templateCompiler","setStyleAndAttributes","customAttributes","copyAttr","literals","extend","exclude","values","setColumnIndex","ind","prepareColumns","autoWidth","allowReordering","foreignKeyValue","foreignKeyField","setCssInGridPopUp","popUp","isBottomTail","popUpSpan","targetPosition","popup","getPosition","getPopupLeftPosition","parentsUntil","elem","isID","getActualPropFromColl","coll","getUid","appendChildren","parents","calculateAggregate","customAggregate","Global","divNode","cssText","ceil","isActionPrevent","dlg","showConfirmDialog","wrap","clName","setFormatter","serviceLocator","fmtr","getFormatFunction","setParser","getParserFunction","addRemoveActiveClasses","getFilterMenuPostion","dialogObj","elementVisible","newpos","dlgWidth","leftPos","toogleCheckbox","previousSibling","setChecked","createCboxWithWrap","removeAddCboxClasses","refreshForeignData","getForeignData","isForeignKey","lValue","fField","fdata","columnData","getDatePredicate","matchCase","getColumnByForeignKeyValue","filterObject","datePredicate","prevDate","nextDate","prevObj","nextObj","setSeconds","predicateSt","predicateEnd","ejpredicate","renderMovable","isRowDragable","mEle","isGroupAdaptive","isVirtualAdaptive","object","getPrintGridModel","printGridModel","printMode","expandedRows","isDetailRow","currentPage","gridModel","getExpandedState","extendObjWithFn","getPrototypeOf","getPrototypesOfObj","i_1","cpy","cln","measureColumnDepth","checkDepth","indices","refreshFilteredColsUid","filteredCols","getForeignKeyColumns","getColumnByField","eventPromise","adaptr","getStateEventArgument","def","ispercentageWidth","percentageCol","undefinedWidthCol","showGroupedColumn","resetRowIndex","rowElms","isDataRow","isAltRow","enableAltRow","renderModule","emptyRow","compareChanges","newArray","dataToBeUpdated","reduce","k","setRowElements","rowElements","freezeRowElements","frozenRightRowElements","gridActionHandler","force","getCellsByTableName","getCellByColAndRowIndex","numberFormat","intl","mtch_1","addBiggerDialog","enableAdaptiveUI","dialogs","performComplexDataOperation","mapObject","returnObj","duplicateMap","setDisplayValue","displayVal","trs","addRemoveEventListener","isOn","evt_1","timer","AggregateColumn","templateFn","formatFn","getFormatter","setTemplate","footerTemplate","groupFooterTemplate","groupCaptionTemplate","getTemplate","setPropertiesSilent","AggregateRow","Cell","isSpanned","isRowSpanned","ColumnChooserSettings","Column","allowSorting","allowResizing","showColumnMenu","enableGroupByFormat","showInColumnChooser","edit","allowSearching","autoFit","sortDirection","getEditTemplate","editTemplateFn","getFilterTemplate","filterTemplateFn","editType","valueFormatter","commands","textAlign","commandsTemplate","headerTemplate","headerTemplateFn","itemTemplate","fltrTemplateFn","editTemplate","filterTemplate","isForeignColumn","sortComparer","a_1","xObj","yObj","getSortDirection","setSortDirection","freezeTable","isReact","refreshReactColumnTemplateByUid","parserFn","getColumnTemplate","getHeaderTemplate","getFilterItemTemplate","getDomSetter","CommandColumnModel","PageSettings","Row","setRowValue","setRowData","setCellValue","pKeyField","makechanges","CellMergeRender","cellArgs","spannedCell","cellRenderer","getCellRenderer","cellType","cellSpan","rowSpan","targetCell_1","colSpanLen","colSpanRange","rowSpanRange","spanText","containsKey","backupMergeCells","fName","setMergeCells","generteKey","fname","getMergeCells","mergeCells","updateVirtualCells","mCells","getIndexFromAllColumns","vColumnIndices","getColumnIndexesInView","CellRenderer","localizer","formatter","role","rowChkBox","getGui","toView","evaluate","fData","isReactCompiler","literals_1","dummyData","templateID","renderTemplates","invokeFormatter","refreshCell","refreshTD","parentRow","newTD","cloneAttributes","innerHtml","displayAsCheckBox","localeStr","fromFormatter","appendHtml","setAttributes","buildAttributeFromCell","rowRenderingMode","clipMode","isCheckBoxType","isTemplate","class","CheckBoxFilterBase","existingPredicate","foreignKeyQuery","filterState","renderEmpty","cBoxTrue","cBoxFalse","closeDialog","keyupHandler","searchHandler","searchBoxKeyUp","foreignKeyFilter","fColl","mPredicate","fPredicate","filterCollection","fpred","foreignFilter","initalPredicate","searchBoxClick","sInput","refreshCheckboxes","updateSearchIcon","sIcon","getLocalizedLabel","localeObj","updateDataSource","actualPredicate","filteredColumns","filterSettings","allowCaseSensitive","isFiltered","getAndSetChkElem","sBox","hideSearchbox","title","searchBox","inputargs","floatLabelType","placeholder","I","spinner","cBox","showDialog","columnType","animationSettings","effect","buttons","btnClick","buttonModel","dialogCreated","dialogOpen","renderResponsiveFilter","isResponsiveFilter","maxHeight","getAllData","X","Y","openDialog","filterTemplateCol","filterItemTemplate","destroyTemplate","clearFilter","fltrBtnHandler","searchInput","check","optr","ddlValue","isMenuNotEqual","fObj","caseSen","defaults","isNotEqual","itemsCnt","generateNullValuePredicates","arg2","arg3","arg4","arg5","arg6","initiateFilter","firstVal","foreignQuery","predicte","parsed","moduleName","fromView","addDistinct","filterModel","filterChoiceCount","filterargs","filterObj","filterEvent","processSearch","getPredicateFromCols","getPredicate","predicateList","isGrid","foreignColumn","processDataOperation","filteredColumn","defObj","isInitial","allPromise","runArray","colData","fullData","args1","sSettings","filterColumn","filteredData","getDistinct","processDataSource","updateResult","createFilterItems","result_1","updateAllCBoxes","updateIndeterminatenBtn","setFocus","prevElem","cBoxes_1","createCheckbox","btn","btnObj","cBoxes","nullCounter","selectAllValue","isColFiltered","isRndere","args_1","checkbox","getCheckedState","foreignDataObj","generatePredicate","updateDateFilter","getCaseValue","Data","dataState","isPending","resolver","foreignKeyDataState","initDataManager","addRows","reorderRows","removeRows","crudActions","refreshFilteredCols","toIndex","fromIndex","isQueryInvokedFromData","skipPage","selectQueryFields","filterQuery","searchQuery","aggregateQuery","sortQuery","virtualGroupPageQuery","pageQuery","isForeign","types","pageCount","isGrpFmt","formatGroupColumn","sortSettings","sortGrp","fcolumn","getSearchColumnFieldNames","needForeignKeySearch","fGeneratePredicate","predList","skipFoerign","foreignColEmpty","actualFilter","colType","foreignCols","defaultFltrCols","columns_1","gridColumn","grabColumnByFieldFromAllCols","excelPredicate","_e","foreignCols_1","column_1","grabColumnByUidFromAllCols","_f","_g","getKey","crud","deferred_1","getMilliseconds","pr","previousData","deff","endEdit","getState","getForeignKeyDataState","setForeignKeyDataState","dataArgs","isDataChanged","editArgs_1","cancelEdit","colFieldNames","columns_2","SummaryModelGenerator","columnSelector","detailTemplate","generateRows","buildSummaryData","getGeneratedRow","parentUid","summaryRow","raw","indents","getIndentByLevel","isDetailGridAlone","indentLength","getGeneratedCell","getCellType","isDataCell","indent","sColumn","scolumn","opt","dummy","summaryRows","single","disp","GroupSummaryModelGenerator","v","CaptionSummaryModelGenerator","GroupModelGenerator","summaryModelGen","captionModelGen","isCollapseStateEnabled","ensureRowVisibility","parentid","childId","tIndex","isRenderCaption","prevKey","generateDataRows","captionRow","generateCaptionRow","rowCnt","isCaptionRow","aggregatesCount","getCaptionRowCells","visibles","groupedLen","generateIndentCell","generateCell","captionCells","cIndex_1","wFlag","tmpFlag","parentID","childID","parentGid","childGid","gSummary","fkValue","generateRow","refreshRows","generateCells","cRow","childRow","ContentRender","freezeRows","currentInfo","prevCurrentView","isLoaded","viewColIndexes","infiniteCache","isRemove","visibleRows","visibleFrozenRows","rightFreezeRows","isAddRows","isInfiniteFreeze","useGroupCache","mutableData","rafCallback","mContentRows","getMovableVirtualContent","fContentRows","getFrozenVirtualContent","getMovableVirtualHeader","fHdr","getFrozenVirtualHeader","ariaService","setBusy","getPanel","allowTextWrap","case","generator","getModelGenerator","refreshContentRows","droppableDestroy","pressedKey","renderPanel","setOptions","busy","setPanel","innerDiv","renderTable","virtualTable","virtualTrack","createContentTable","setTable","getTable","multiselectable","initializeContentDrop","cellspacing","setColGroup","getColGroup","currentMovableRows","frag","initialPageRecords","hdrTbody","trElement","hdrfrag","tbdy","modelData","fCont","virtualInfo","sentinelInfo","renderMovableContent","checkCache","setTbody","getTbody","isFrozenLeft","templatetoclear","rootNodes","blockLoad","vcRows","offsets","offsets_1","vGroupOffsets","bSize","blockIndexes","round","contentPanel","rowObject","isVFFrozenOnly","bIndex","mhdrData","vgenerator","virtualFrozenHdrRefresh","setRowsInLazyGroup","setInfiniteVisibleRows","rowTemplateID","getRowTemplate","lastElementChild","isTR","nodeName","isVFreorder","ensureFrozenHeaderRender","ensureVirtualFrozenHeaderRender","colcount","splitRows","getFrozenHeader","parentTable","setIsFrozen","isVFTable","frCont","appendContent","renderNextFrozentPart","vRows","maintainRows","infiniteScrollSettings","enableCache","frozenCols","getGroupCache","initialGroupRows","getCurrentBlockInfiniteRecords","isFreeze","last","getReorderedVFRows","getReorderedFrozenRows","getReorderedRows","fhdrData","getInfiniteRows","getInfiniteMovableRows","infiniteCacheRows","panel","contentTable","infiniteRows","getRowElements","getMovableRowElements","colgroup","testRow","fRows","rightRows","rightLen","needFullRefresh","infiniteData","infiniteRowVisibility","contentrows","clen","getNormalizedColumnIndex","colIdx","colG","infiniteFreezeData","mTable","infiniteMovableData","setDisplayNone","invokedFromMedia","hideAtMedia","updateMediaColumns","isXaxis","getHeaderColGroup","replaceChild","droppable","canSkip","getInfiniteRowIndex","firstRowIndex","setRowObjects","immutableModeRendering","oldKeys","newKeys","newRowObjs","oldIndexes","oldRowObjs","batchChangeKeys","getBatchEditedRecords","newIndexes","hasBatch","oldRowElements","prevLen","currentLen","oldIndex","refreshImmutableContent","isEqual","objectEqualityChecker","old","next","isDirty","updateCellIndex","rowEle","HeaderRender","frzIdx","notfrzIdx","isFirstCol","visualElement","headercelldiv","getStackedHeaderColumnByHeaderText","lockColumn","getColumnIndexByField","lineHeight","cloneElement","colPosRefresh","renderCustomToolbar","updateCustomResponsiveToolbar","toggleStackClass","createHeaderTable","initializeHeaderDrag","initializeHeaderDrop","headerPanel","headerTable","tHead","createTable","createHeader","tableEle","tblName","findHeaderRow","createHeaderContent","thead","caption","bodyCell","rowBody","len_1","updateColGroup","frozenMode","colHeader","rowRenderer","headerRow","colDepth","ensureColumns","getHeaderCells","colFreezeMode","len_2","lockcolPositionCount","lockColsRendered","appendCells","isFirstObj","isLastCol","isMovable","lastCol","isLockColumn","isFrozenLockColumn","scrollbar","getCellCnt","stackedLockColsCount","getStackedLockColsCount","isStackedLockColumn","isFrozenStack","ensureStackedFrozen","getColSpan","isFirstCol_1","isLaststackedCol","inViewIndexes","frozenColumns","isTrue","lockColsCount","getFrozenColSpan","normalizedfrzCols","mTblColGrp","refreshUI","freezeReorder","getVirtualFreezeHeader","updateDefaultCursor","gCells","textWrapSettings","wrapMode","showDropArea","toolbarItems","toolbarLeft","toolbarItem","onclick","showResponsiveCustomSort","showResponsiveCustomFilter","resToolbar","HeaderCellRenderer","hTxtEle","sortEle","gui","chkAllBox","fltrMenuEle","prepareHeader","hValueAccer","ariaAttr","innerDIV","headerValueAccessor","checkAllWrap","matchFlColumns","grabbed","extendPrepareHeader","headerTempID","headerTextAlign","alignment","matchFilteredColumns","StackedHeaderCellRenderer","toolTip","IndentCellRenderer","GroupCaptionCellRenderer","fKeyValue","captionTemplate","tempID","isVue","GroupCaptionEmptyCellRenderer","ExpandCellRenderer","HeaderIndentCellRenderer","DetailHeaderIndentCellRenderer","DetailExpandCellRenderer","RowDragDropRenderer","nodeElement","RowDragDropHeaderRenderer","Render","emptyGrid","counter","l10n","renderer","headerRenderer","isLayoutRendered","refreshDataManager","prevPageMoving","pagerModule","pagerObj","resetTemplates","gridColumns","detailTemplateID","toolbarTemplate","isFActon","isNeedForeignAction","getFData","deffered_1","disablePageWiseAggregates","validateGroupRecords","dataManagerSuccess","dataManagerFailure","deferred","sendBulkRequest","dmSuccess","dmFailure","renderEmptyRow","spanCount","colspan","dynamicColumnChange","updateColumnType","cFormat","validationRules","isColTypeDef","isServerDateMap","actionArgs","isInfiniteDelete","isInfiniteEnd","updatesOnInitialRender","isInitialLoad","alert","setRowCount","invalid","dataRowCount","rowcount","buildColumns","isAutoGen","iterateComplexColumns","complexCols","instantiateRenderer","addRenderer","cellrender","addCellRenderer","group0","groupN","addWhere","curFilter","rPredicate","updateGroupInfo","untouched","uGroup","itemGroup","uGroupItem","RowRenderer","isSpan","refreshRow","isChanged","refreshMergeCells","cells_1","rowArgs","chekBoxEnable","selIndex","buildAttributeFromRow","cellRendererFact","requestTypeAction","prevRowCells","prevRowCell","lazyLoadCssClass","summarycell","lastSummaryCell","firstSummaryCell","AriaService","setStateAndProperties","setExpand","setSort","isBusy","setGrabbed","isGrabbed","setDropTarget","isTarget","dropeffect","haspopup","CellRendererFactory","cellRenderMap","FocusStrategy","oneTime","swap","forget","skipFocus","focusByClick","prevIndexes","refMatrix","refreshMatrix","actions","isVirtualScroll","rowModelGen","focusCheck","onFocus","setActive","enableHeaderFocus","matrix","generate","validator","passiveFocus","skipAction","onBlur","relatedTarget","removeFocus","getFocusInfo","elementToFocus","tabIndex","beforeArgs","byClick","clickArgs","clearOutline","onKeyPress","skipOn","activeKey","bValue","outline","swapInfo","jump","toHeader","toFrozen","toFrozenRight","getNextCurrent","active","setActiveByKey","lastIdxCell","clearIndicator","th","filterCell","focusVirtualElement","virtualData","isCancel","isKeyFocus","empty","preventScroll","getFocusedElement","fContent","frContent","fHeader","frHeader","setFocusedElement","addFocus","addOutline","focusHeader","resetFocus","focusContent","isFocused","getInfo","focusedColumnUid","FixedContentFocus","FixedRightContentFocus","ContentFocus","FixedHeaderFocus","FixedRightHeaderFocus","HeaderFocus","cFocus","updateRow","index_1","newMovableRows","newFrozenRows","newfrRows","handlerInstance","focusElement","cellPosition","gridPosition","passiveHandler","filterfocus","restoreFocusWithAction","internalCellFocus","forgetPrevious","focusEle","getFocusable","Matrix","allow","emptyTable","inValid","vector","keyActions","indexesByKey","getCurrentFromAction","editNextRow","isLastCellPrimaryKey","visibleIndex","isPresent","shouldFocusChange","rN","cN","oRowIndex","oCellIndex","nextRowFocusValidate","previousRowFocusValidate","frozenSwap","frSwap","enterFrozen","isHeaderFocus","previous","optionals","defaultLen","isData","isCellWidth","getGridSeletion","lastRow","headerSwap","fMatrix","focusModule","current1","current2","hMatrix","current3","SearchBox","searchFocus","searchBlur","wireEvent","unWireEvent","headerMat","RendererFactory","rendererMap","rName","RowModelGenerator","getInfiniteIndex","pid","refreshForeignKeyRow","foreignKeyColumns","dummies","rowId","oIndex","ResponsiveDialogRenderer","sortedCols","sortPredicate","isCustomDialog","closeCustomDialog","renderResponsiveContextMenu","renderCustomFilterDiv","customExFilterClose","onActionCompleteFn","editComplate","isCustomDlgRender","customResponsiveDlg","closeBtn","filterModule","saveBtn","backBtn","customExcelFilterParent","isOpen","filterClearBtn","getHeaderTitle","renderResponsiveContent","filterParent","customColumnDiv","sortBtnParent","isSort","isFilter","cDiv","getSortedFieldsAndDirections","sortButtonClickHandler","divIcon","iconSpan","customFilterColumnClickHandler","allowMultiSorting","isSortApplied","resetSortButtons","txt","setSortedCols","getCurrentSortedFields","isRowResponsive","showResponsiveDialog","colDiv","isDialogClose","clearCustomFilter","removeCustomDlgFilterEle","renderCustomFilterDialog","filteredCol","renderResponsiveDialog","setFilterModel","createOptions","setTopToChildDialog","dialogEle","top_1","outerDiv","customFilterDlg","getDialogOptions","isCustomFilter","isModal","showCloseIcon","closeOnEscape","adaptiveDlgTarget","beforeDialogClose","renderResponsiveHeader","sortField","closeResponsiveDialog","closeCustomFilter","keyHandler","sortColumn","clearSorting","primaryKeyValue","getDialogName","getButtonText","titleDiv","dialogHdrBtnClickHandler","id_1","clearBtn","clearFiltering","filterClear","applyCustomFilter","mainfilterdiv","destroyCustomFilterDialog","customEle","ServiceLocator","services","register","registerAdaptiveService","isAdaptiveUI","responsiveDialogRenderer","ValueFormatter","ColumnWidthService","totalColumnsWidth","setColumnWidth","getTableWidth","setMinwidthBycalculation","tWidth","difference","tmWidth","collection_1","minWidth","isWidthUndefined","setUndefinedColumnWidth","cWidth","getWidth","tgridWidth","setWidthToTable","headerCol","fWidth","isDraggable","contentCol","freezeLeft","freezeRight","movableCount","isColFrozen","frHdr","getColumnLevelFrozenColgroup","editTableCol","refreshFrozenScrollbar","frzMode","frozenScrollbar","movableScrollbar","frozencontent","frozenWidth","movableWidth","frozenRightScrollbar","frozenRightWidth","placeHolder","getHeightFromDirection","sibling","isWidUndefCount","maxWidth","calcMovableOrFreezeColWidth","tableType","setWidthToFrozenRightTable","freezeWidth","isAutoResize","headerTbl","cntTbl","setWidthToFrozenLeftTable","setWidthToMovableTable","isColUndefined","isWidthAuto","setWidthToFrozenEditTable","setWidthToMovableEditTable","resizeSettings","Input","CLASSNAMES","floatType","bindInitialEvent","checkInputValue","getParentNode","inputElement","inputValue","_focusFn","_blurFn","wireFloatingEvents","createFloatingInput","inputObject","internalCreateElement","makeElement","createInputContainer","customTag","floatLinelement","floatLabelElement","encodePlaceHolder","inputWrap","updateLabelState","checkFloatLabelType","updateIconState","wireClearBtnEvents","readOnly","validateLabel","tagClass","tag","setCssClass","oldClass","setPlaceholder","setReadonly","isReadonly","readonly","setEnableRtl","isRtl","setEnabled","isEnable","inputContainer","disabledAttrs","considerWrapper","removeAttributes","addAttributes","setClearButton","isClear","initial","clearButton","insertAdjacentElement","createClearButton","_internalRipple","isRipple","argsButton","_onMouseDownRipple","_onMouseUpRipple","createIconEle","iconClass","prependSpan","innerWrapper","appendSpan","validateInputType","containerElement","createInput","showClearButton","enabled","setPropertyValue","removeFloating","inputEle","addFloating","iconEle","inputObj","isPrependIcon","floatLine","floatText","setRipple","addIcon","icons","internalCreate","result_2","parentDocument","targetContainer","fit","viewPortElement","elemData","ownerDocument","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","removeProperty","posX","posY","edge","updateElementData","setPosition","leftFlip","topFlip","setPopup","eStatus","getBodyScrollLeft","deepCheck","collideSide","getBodyScrollTop","getTargetContainerLeft","getTargetContainerTop","windowWidth","documentReact","popupRect","calculateRelativeBasedPosition","anchor","fixedElement","anchorPos","tempAnchor","calculatePosition","currentElement","targetValues","setPosx","getElementHCenter","setPosy","getElementTop","getElementRight","getElementVCenter","getElementLeft","getElementBottom","updatePosition","targetElement","selectedHandler","minHeight","resizeWestWidth","elementClass","RESIZE_HANDLER","FOCUSED_HANDLER","RESTRICT_LEFT","RESIZE_WITHIN_VIEWPORT","dialogBorderResize","originalWidth","originalHeight","originalX","originalY","originalMouseX","originalMouseY","resizeStart","resize","resizeEnd","setLeft","previousWidth","setBorderResizeElm","calculateValues","borderBottom","getDOMElement","domElement","resizers","onMouseDown","onTouchStart","borderResizers","getEventType","onMouseMove","onMouseUp","coordinates","resizeTowards","resizeSouth","resizeNorth","resizeWest","resizeEast","getClientRectValues","containerRectValues","documentHeight","calculateValue","currentpageY","targetRectValues","calculatedHeight","borderValue","topWithoutborder","targetTop","calculatedTop","boundaryRectValues","currentHeight","rectValues","documentWidth","calculatedWidth","left_1","removeResize","handlers","DialogUtility","ButtonProps","AnimationSettings","ROOT","RTL","DLG_HEADER_CONTENT","DLG_HEADER","DLG_FOOTER_CONTENT","MODAL_DLG","DLG_CLOSE_ICON","DLG_TARGET","SCROLL_DISABLED","DEVICE","FULLSCREEN","DLG_CLOSE_ICON_BTN","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","Dialog","initRender","enableResize","setResize","getMinHeight","allowMaxHeight","preventVisibility","clonedEle","closeIconClickEventHandler","dlgOverlayClickEventHandler","overlayClickEventArgs","checkPositionData","prevOnChange","isNumberValue","getEle","computedHeaderHeight","computedFooterHeight","footerEle","minimumHeight","headerHeight","footerHeight","onResizeStart","onResizing","onResizeComplete","isBlazorServerRender","computedHeight","computedWidth","resizeHandles","directionValue","toLocaleLowerCase","resizeBegin","resizing","resizeComplete","boundary","directions","resizeHandler","proxy","createResize","targetEle","wireWindowResizeEvent","unWireWindowResizeEvent","getFocusElement","keyDown","buttonObj","ftrTemplateContent","contentEle","focusableElements","buttonIndex_1","isTagName","isContentEdit","primaryButtonEle","setCSSClass","setMaxHeight","initialRender","zIndex","setzIndex","calculatezIndex","setTargetContent","setHeader","renderCloseIcon","setContent","setButton","setFooterTemplate","allowDragging","setAllowDragging","setIsModal","dlgContainer","dlgOverlay","refElement","popupObj","relateTo","actionOnScroll","resetResizeIcon","openEventArgs","unBindEvent","closeArgs","activeEle","storeActiveElement","positionChange","setEnableRTL","setOverlayZindex","dialogConHeight","resizeIcon","zIndexValue","setPopupPosition","dragObj","dragEventArgs","buttonContent","buttonType","footerBtn","isFlat","innerContentElement","HTMLElement","sanitizeHelper","templateProps","templateValue","dialogItem","headerEle","closeIcon","closeIconBtnObj","closeIconTitle","oldCSSClass","getValidFocusNode","u","disableElement","getAutoFocusNode","validNode","elementMatch","msGetRegionContent","Element","bindEvent","updateSanitizeContent","insertAdjacentHTML","updateIsModal","buttonCount","setTarget","zIndexElement","setPopupZindex","windowResizeHandler","classArray","refreshPosition","isFullScreen","fullScreen","eventArgs_1","beforeOpenArgs","openAnimation","beforeCloseArgs","closeAnimation","getButtons","createDialog","dialogObject","formOptions","formButtonModel","buttonPropModel","buttonProps","icon","alertDialogObj","dialogElement","alertButtonModel","okButton","setAlertButtonModel","confirm","confirmDialogObj","okButtonModel","cancelButtonModel","cancelButton","setConfirmButtonModel","PositionData","Popup","wireScrollEvents","unwireScrollEvents","resolveCollision","checkCollision","orientationOnChange","getRelateToElement","scrollRefresh","relateToElement","targetVisible","isElementOnViewport","targetInvisibleStatus","scrollElement","scrollParents","isElementVisible","checkGetBoundingClientRect","win","windowView","elementView","reposition","collision","checkFixedParent","parentDisplay","getAnchorPosition","anchorEle","eleRect","anchorRect","targetType","callFlip","callFit","viewPortRect","horz","vert","animationOptions","relativeElement","getZindexPartial","showAnimation","hideAnimation","overflowRegex","parentStyle","parentZindex","defaultView","childrenZindex","siblingsZindex","finalValue","currentZindexValue","globalTimeOut","CLS_SHOWSPIN","CLS_HIDESPIN","CLS_MATERIALSPIN","CLS_FABRICSPIN","CLS_BOOTSPIN","CLS_BOOT4SPIN","CLS_HIGHCONTRASTSPIN","CLS_SPINWRAP","CLS_SPININWRAP","CLS_SPINCIRCLE","CLS_SPINLABEL","CLS_SPINTEMPLATE","spinTemplate","spinCSSClass","createSpinner","spinnerContainer","spinnerInnerContainer","inner_wrap","create_spinner_container","theme","getTheme","defaultSize","calculateRadius","setTheme","labelEle","createLabel","replaceContent","innerContainer","svg","random_generator","timeOut","create_material_element","mat_calculate_attributes","createMaterialSpinner","create_fabric_element","fb_calculate_attributes","createFabricSpinner","svgBoot","viewBoxValue","trans","defaultRadius","bootCircle","create_bootstrap_element","rad","startArc","defineArcPoints","circleEle","boot_calculate_attributes","createBootstrapSpinner","createHighContrastSpinner","createBootstrap4Spinner","charAt","innerCon","themeClass","svgFabric","fabricCirclePath","fabricCircleArc","svgMaterial","matCirclePath","animateMaterial","spinnerInfo","globalInfo","previousId","startTime","strokeSize","getStrokeSize","rotate","mat_animation","updatePath","path","getDashOffset","createCircle","easeAnimation","transformOrigin","drawArc","PI","timestamp","timecount","innerConainer","trgClass","centerX","centerY","circle","defineCircle","endArc","defineArc","angle","radians","cos","sin","showHideSpinner","isHide","spinnerWrap","inner","svgEle","isAnimate","globalObject","globalVariables","timeOutVar","startMatAnimate","series","increment","rotation","formSeries","boot_animate","animateBootstrap","CONTENT","ARROW_TIP","ARROW_TIP_OUTER","ARROW_TIP_INNER","TIP_BOTTOM","TIP_TOP","TIP_LEFT","TIP_RIGHT","POPUP_OPEN","POPUP_CLOSE","POPUP_LIB","Tooltip","isBlazorTooltip","contentTargetValue","contentEvent","contentAnimation","formatPosition","isServerRender","tooltipPositionY","tooltipPositionX","renderArrow","setTipClass","tip","tooltipEle","tipClass","renderPopup","elePos","mouseTrail","getTooltipPosition","openPopupHandler","closePopupHandler","offsetPos","calculateTooltipOffset","collisionFlipFit","needTemplateReposition","findTarget","tooltipEventArgs","tooltipEleWidth","tooltipEleHeight","arrowEle","tipWidth","tipHeight","tipAdjust","showTipPointer","tipHeightAdjust","tipWidthAdjust","updateTipPosition","selEle","removeList","adjustArrow","leftValue","topValue","tipPosExclude","tooltipWidth","tooltipHeight","arrowInnerELe","tipPointerPosition","POINTER_ADJUST","renderContent","tooltipContent","enableHtmlParse","tempArr","templateFunction","isBlazorTemplate","isSticky","tipClose","ICON","onStickyClose","addDescribedBy","describedby","removeDescribedBy","orgdescribedby","tapHoldHandler","autoCloseTimer","targetHover","touchEndHandler","targetClick","hideTooltip","closeDelay","targetList_1","ctrlId","restoreElement","showTooltip","showTimer","hideTimer","beforeRenderArgs","beforeRenderCallback","isBlazorTooltipRendered","isHidden","interopAdaptor","invokeMethodAsync","TOOLTIP_WRAP","beforeRenderBlazor","afterRenderBlazor","contentUpdated","ctrlObj","observedArgs","beforeOpenCallback","openAnimation_1","openDelay","wireMouseEvents","horizontal","vertical","affectedPos","checkCollideTarget","collidedPosition","eleOffset","arrowleft","windowCollision","isTooltipOpen","tooltipHide","blazorHide","popupHide","unwireMouseEvents","tooltipHover","tooltipMouseOut","onMouseOut","enteredElement","checkForTooltipElement","tooltipElementMouseOut","eventPageX","eventPageY","colpos","touchEnd","scrollHandler","opensOn","triggerList_1","getTriggerList","wireFocusEvents","touchModule","tapHold","targetList_2","triggerList_2","unwireFocusEvents","targetList_3","triggerList_3","defaulthtmlkeys","delayUpdate","ComponentBase","attrKeys","cachedTimeOut","isAppendCalled","initRenderCalled","isReactForeceUpdate","componentDidMount","refreshChild","canDelayUpdate","renderReactComponent","portals","reactElement","shouldComponentUpdate","nextProps","updateProperties","silent","dProps","propkey","isClassName","htmlattributes","compareValues","refreshProperties","processComplexTemplate","compTemplate","complexTemplate","PropVal","getDefaultAttributes","propKeys","controlAttributes","ref","reactUid","onChange","syntheticEvent","nativeEvent","value1","value2","String","tempVal","tempVal2","compareObjects","oldProps","newProps","diffArray","checkInjectedModules","prevModule","curModule_1","getInjectedServices","directivekeys","changedProps","directiveValue","validateChildren","skipRefresh","prevProperties","dKeys","compareOutput","changedProps_1","propInstance","componentWillUnmount","callback","forceUpdate","templateNames","tempPortal","indexCount","propIndexCount","portal","childCache","childs_1","ifield","getChildType","childProps","getChildProps","isDirective","subChild","matcher","subChild_1","accessProp","cacheVal","cachedValue","childs_2","isService","ComplexBase","stringCompiler","templateElement","cEle","actTemplate","actData","isLegacyTemplate","rele","derivedClass","GridComponent","immediateRender","baseClass","ColumnDirective","ColumnsDirective","NumericContainer","pagerElement","renderNumericContainer","refreshNumericLinks","updateTotalPages","updateLinksHtml","updateStyles","link","renderFirstNPrev","renderPrevPagerSet","renderNextPagerSet","renderNextNLast","pagerContainer","prevPager","PP","nextPager","NP","previousPageNo","currentPageSet","pageNo","totalPages","customText","updateFirstNPrevStyles","updatePrevPagerSetStyles","updateNextPagerSetStyles","updateNextNLastStyles","firstPage","firstPageDisabled","prevPage","prevPageDisabled","lastPage","lastPageDisabled","nextPage","nextPageDisabled","PagerMessage","pageNoMsgElem","pageCountMsgElem","hideMessage","showMessage","regx","Pager","hasParent","pageRefresh","enableExternalMessage","checkpagesizes","defaultConstants","currentPageInfo","totalItemsInfo","totalItemInfo","firstPageTooltip","lastPageTooltip","nextPageTooltip","previousPageTooltip","nextPagerTooltip","previousPagerTooltip","pagerDropDown","pagerAllDropDown","CurrentPageInfo","TotalItemsInfo","FirstPageTooltip","LastPageTooltip","NextPageTooltip","PreviousPageTooltip","NextPagerTooltip","PreviousPagerTooltip","PagerDropDown","PagerAllDropDown","All","containerModule","pagerMessageModule","isReactTemplate","pagerTemplate","initLocalization","updateRTL","renderFirstPrevDivForDevice","enablePagerMessage","renderNextLastDivForDevice","pagerdropdownModule","addAriaLabel","externalMessageModule","propertyNames","checkGoToPage","currentPageChanged","setDropDownValue","goToPage","setPageSize","pageSizes","newPageNo","oldPageNo","enableQueryString","updateQueryString","getPagerTemplate","updatedUrl","getUpdatedURL","pushState","uri","queryString","prevString","prevElementId","ListBase","li","ul","hasChild","collapsible","image","iconWrapper","anchorWrap","navigable","getFieldValues","dataItem","fieldData","dataField","defaultMappedFields","isChecked","hasChildren","tooltip","htmlAttributes","urlAttributes","imageAttributes","imageUrl","groupBy","defaultAriaAttributes","listRole","itemRole","groupItemRole","itemText","wrapperRole","defaultListBaseOptions","showCheckBox","showIcon","expandCollapse","ariaAttributes","listClass","itemClass","processSubChild","sortOrder","groupTemplate","expandIconClass","expandIconPosition","itemNavigable","createListFromArray","isSingleLevel","componentInstance","generateUL","createListItemFromArray","curOpt","getModuleClass","generateId","itemCreating","generateSingleLevelLI","generateLI","itemCreated","createListItemFromJson","checkboxElement","anchorElement","typeofData","curItem","innerEle","imageElemnt","iconElement","createListFromJson","elementArray","addSorting","getDataSource","typeof","elementAttributes","getAllAttributes","nodeValue","subDS","subLi","innerElements","grpLI","elementID","anchorTag","createTextNode","isFullNavigation","anchorWrapper","uID","blazId","removeBlazorID","compiledString","groupTemplateID","liElement","ulElement","createList","getSiblingLI","isPrevious","siblingLI","liIndex","liCollections","groupDataSource","curFields","cusQuery","itemObj","grpItem","newtext","_id","createJsonFromElement","curEle","jsonAr","childs","hasChildNodes","attributes_1","renderContentTemplate","liCollection","currentID","renderGroupTemplate","headerItems","category","headerItems_1","headerData","generateIcon","FieldSettings","dropDownBaseClasses","ITEMTEMPLATE_PROPERTY","VALUETEMPLATE_PROPERTY","GROUPTEMPLATE_PROPERTY","HEADERTEMPLATE_PROPERTY","FOOTERTEMPLATE_PROPERTY","NORECORDSTEMPLATE_PROPERTY","ACTIONFAILURETEMPLATE_PROPERTY","DropDownBase","preventChange","isPreventChange","getPropObject","newProperty","oldProperty","getValueByText","listData","checkValueCase","isTextByValue","typeOfData","dataSource_1","checkingAccent","checkIgnoreCase","getItemValue","checkNonIgnoreCase","itemValue","textItem","typedText","getFormattedValue","baseTemplate","checkTemplate","exception","l10nUpdate","noRecordsTemplate","actionFailureTemplate","DropDownBaseresetBlazorTemplates","actionFailureTemplateId","noRecordsTemplateId","noDataCompTemp","DropDownBaseupdateBlazorTemplates","componentLocale","getLocaleName","liElem","getTextByValue","enableRtlElements","jsonElement","resetList","renderItemsBySelect","setListData","noRecord","footer","itemTemplateId","groupTemplateId","valueTemplateId","headerTemplateId","footerTemplateId","updateDataAttribute","invalidAttr","getJSONfromOption","optionGroup","updateFields","scrollTimer","isRequested","isDataFetched","isActive","emptyDataRequest","listItems","renderItems","bindChildItems","onActionFailure","localDataArgs","childNode","remainingItems","sortedData","updateListValues","raiseDataBound","findListElement","findNode","listArr","dataBoundEventArgs","spliceData","listElements","templateListItem","listOption","fixedHeaderElement","postRender","listElement","focusItem","selectedItem","listEle","groupValue","createListItems","getSortedDataSource","fieldValues","setFloatingHeader","setFixedHeader","scrollStop","liHeight","getValidLi","topIndex","currentLi","isTempEmpty","liWidth","firstLi","textField","getIndexByValue","getItems","dispatchEvent","createEvent","initEvent","setFields","updateSelectElementData","isFiltering","updateSelection","renderList","setUpdateInitial","setZIndex","isEmptyData","rippleFun","isGroupChecking","addItem","itemIndex","itemsCount","selectedItemValue","addItemTemplate","updateActionCompleteData","updateAddItemList","listGroupItem","tempLi","updateDataList","validationAttribute","hidden","itemCount","getDataByValue","dropDownListClasses","root","hover","disable","base","inputFocus","iconAnimation","device","backIcon","filterBarClearIcon","filterInput","mobileFilter","clearIcon","clearIconHide","popupFullScreen","disableIcon","hiddenElement","DropDownList","previousValue","isListSearched","checkBlazor","isServerBlazor","valueTempElement","initializeData","activeIndex","isPopupOpen","isDocumentClick","isFilterFocus","beforePopupOpen","initRemoteRender","isNotSearchList","isTyped","preventAutoFill","isValidKey","typedString","isEscapeKey","isPreventBlur","isTabKey","actionCompleteData","isUpdated","actionData","prevSelectPoints","isSelectCustom","isDropDownClick","preventAltUp","isSecondClick","keyConfigure","tab","enter","escape","home","down","up","pageUp","pageDown","space","unWireListEvents","wireListEvents","floatLabelChange","floatElement","inputWrapper","resetHandler","resetFocusElement","removeHover","removeSelection","resetSelection","getItemData","onChangeEvent","selectedLI","itemData","cloneElements","setHTMLAttributes","htmlAttr","updatedClassValue","setEnable","defaultAttr","getAriaAttributes","hidePopup","preventTabIndex","getNgDirective","getElementByText","getElementByValue","listItems_1","liItem","initValue","updateValues","setHiddenValue","isFilterLayout","focusOutAction","focusOut","onFocusOut","resetValueHandler","formElement","dropDownClick","bindCommonEvent","keyboardModule","mobileKeyActionHandler","keyActionHandler","bindClearEvent","unBindCommonEvent","onMouseClick","onMouseOver","onMouseLeave","charCode","isServerIncrementalSearch","searchKeyEvent","onServerIncrementalSearch","incrementalSearch","isValidLI","back","closePopup","setHover","hoveredItem","elementId","isBlazor","fromCharCode","strLength","setScrollPosition","spinnerElement","filterInputObj","preventAction","preventHomeEnd","isNavAction","isNavigation","isEditTextBox","isTabAction","updateUpDownAction","pageUpSelection","getPageCount","pageDownSelection","updateHomeEndAction","focusDropDown","selectCurrentItem","selectCurrentValueOnTab","isServerNavigation","isSelectFocusItem","nextItem","findLi","steps","previousItem","checkSelector","onDocumentClick","activeStateChange","updateSelectedItem","preventSelect","isSelection","selectEventCallback","setSelectOptions","detachChanges","previousItemData","focusedItem","activeItem","valueTemplate","setValueTemplate","previousSelectedLI","dropdownCompiler","dropdownTemplate","templateData","valueCompTemp","selectedItems","dataValue","dataText","eve","detachChangeEvent","defineProperties","preItems","selectedElement","onFilterUp","searchLists","onFilterDown","getSelectionPoints","removeFillSelection","selection","filterType","selectionStart","selectionEnd","preventDefaultAction","filteringAction","baseEventArgs","focusIndexItem","setSearchBox","popupElement","filterBarPlaceholder","clearIconElement","clearText","searchKeyModule","onInput","checkField_1","updateActionCompleteDataValues","addNewItem","newElement","value_1","actionCompleteDataUpdate","highlightedItem","refreshPopup","popupEle","serverPopupEle","listHeight","popupHeight","setHeaderTemplate","updateServerPopup","searchBoxHeight","offsetValue","getOffsetValue","firstItem","isEmptyList","textIndent","paddingLeft","borderLeftWidth","createPopup","setSearchBoxPosition","backIconElement","clickOnBackIcon","scrollParentElements_1","listScroll","inputParent","destroyPopup","serverBlazorUpdateSelection","bindServerScrollEvent","popupStyles","borderTop","borderTopWidth","borderBottomWidth","isResetItem","actionList","targetExitViewport","clearElement","popupOffset","lastItem","paddingBottom","popupWidth","scrollBottom","currentOffset","nextBottom","nextOffset","paddingTop","boxRange","isPopupButton","setEleWidth","scrollableParentElements_1","animModel","fixedHeader","popupHolderEle","updatedCssClassValues","selectElement","onselect","stopImmediatePropagation","onchange","footerCompTemp","headerCompTemp","setOldText","setOldValue","checkData","isChangeValue","isChangeText","checkCustomValue","updateInputFields","checkValidLi","setSelectionData","ddlProps","newClass","invokeRenderPopup","isDropdownComp","proxy_2","onpopstate","clientRenderPopup","renderHightSearch","updateclientItemData","initValueItemData","serverUpdateListElement","isSelectVal","attrArray","pagerDropDownDiv","dropDownDiv","defaultTextDiv","pagerCons","pageSizesModule","pageSizesArray","convertValue","dropDownListObject","beforeValueChange","pageSizeValue","ExternalMessage","externalMessage","Page","isInitialRender","pagerDestroy","pageTemplateChange","dropDownChanged","addAriaAttr","renderReactPagerTemplate","numericContainerNew","numericContainer","numericContainerDiv","isForceCancel","previousPage","updateExternalMessage","appendToElement","setGridPager","complete","updateLayout","inboundChange","keyPress","ctrlAltPageDown","ctrlAltPageUp","altPageUp","altPageDown","Sort","contentRefresh","isModelChanged","aria","sortedColumn","gCols","isMultiSort","getSortedColsIndexByField","sCol","getSortColumnFromField","lastSortedCol","isContextMenuOpen","backupSettings","removeSortIcons","getColumnHeaderByField","updateSortedCols","lastSortedCols","lastCols","restoreSettings","refreshSortSettings","addSortIcons","sortColumns","removeSortColumn","refreshSortIcons","colObj","initiateSort","showPopUp","colUid","allowUnsort","enableSortMultiTouch","filterElement","updateAriaAttr","showCustomSort","CLS_RTL","CLS_DISABLE","CLS_NAVRIGHTARROW","CLS_NAVLEFTARROW","CLS_HSCROLLNAV","CLS_DEVICE","CLS_OVERLAY","CLS_RIGHTOVERLAY","CLS_LEFTOVERLAY","HScroll","browser","browserCheck","customStep","ieCheck","uniqueId","touchHandler","swipe","swipeHandler","scrollEle","createOverlay","createNavIcon","setScrollState","scrollStep","scrollDiv","innerEle_1","ele_1","scrollItems","nav","overlay","navEles","rightOverlayEle","clsRight","navItem","leftEle","eventBinding","clsLeft","navEle","navLeftItem","keyTimer","keyTimeout","eleScrolling","onKeyUp","tabHoldHandler","repeatScroll","clickEventHandler","timeout","trgt","scrollDis","isContinuous","rootEle","frameScrollRequest","swipeEle","scrollUpdating","scrollVal","scrollValue","arrowDisabling","addDisable","removeDisable","arrowIcon","navLeftEle","navRightEle","leftOverlay","rightOverlay","disEle","CLS_NAVUPARROW","CLS_NAVDOWNARROW","CLS_VSCROLLNAV","CLS_UPOVERLAY","CLS_DOWNOVERLAY","VScroll","scrollEventHandler","createOverlayElement","wheelEventHandler","scrollCnt","scrollBar","navs","overlays","downOverlayEle","clsDown","downEle","upEle","clsUp","navElement","navUpItem","ev","deltaY","swipeElement","addDisableCls","removeDisableCls","navUpEle","navDownEle","upOverlay","downOverlay","CLS_VERTICAL","CLS_ITEMS","CLS_ITEM","CLS_SEPARATOR","CLS_POPUPICON","CLS_POPUPDOWN","CLS_POPUPOPEN","CLS_TEMPLATE","CLS_POPUPTEXT","CLS_TBARTEXT","CLS_TBAROVERFLOW","CLS_POPOVERFLOW","CLS_TBARNAV","CLS_TBARSCRLNAV","CLS_TBARCENTER","CLS_TBARPOS","CLS_POPUPCLASS","CLS_POPUP","CLS_TBARNAVACT","CLS_TBARIGNORE","CLS_POPPRI","CLS_HIDDEN","CLS_MULTIROW","CLS_MULTIROWPOS","CLS_MULTIROW_SEPARATOR","CLS_EXTENDABLE_SEPARATOR","CLS_EXTEANDABLE_TOOLBAR","CLS_EXTENDEDPOPOPEN","Item","Toolbar","resizeContext","moveLeft","moveRight","moveUp","moveDown","popupOpen","popupClose","trgtEle","ctrlTem","clearProperty","popObj","tbarAlign","attrb","enableCollision","tbarItemsCol","isVertical","isExtendedOpen","popupPriCount","allowKeyboard","wireKeyboardEvent","keyModule","docKeyDown","unwireKeyboardEvent","popCheck","overflowMode","destroyScroll","docEvent","tbarEle","tbarAlgEle","lefts","centers","rights","popEle","destroyItems","tbarItems","destroyMode","tempEle","popupRefresh","elementFocus","fChild","activeEleSwitch","clstElement","tbrNavChk","keyHandling","clst","navChk","scrollChk","popAnimate","eleFocus","popupCheck","popFrstEle","activeEleRemove","tbarScrollChk","eleContains","sib","isPopupElement","clsList","popupNav","popupClickHandler","clickedArgs","getElementOffsetY","renderControl","renderLayout","renderOverflowMode","itemPositioning","checkPopupRefresh","separator","itemsAlign","itemEleDom","innerItem","innerPos","renderSubComponent","tbarItemAlign","align","showAlwaysInPopup","changeOrientation","initScroll","innerItems","checkOverflow","itemWidthCal","getScrollCntEle","eleWidth","itemWidth","popNav","scrollNav","navEleWidth","toolbarAlign","priorityCheck","offsetWid","removePositioning","setOverflowAttributes","createPopupEle","eleItem","multiVar","extendVar","eleInlineItem","innerNav","createPopupIcon","innerNavDom","checkPriority","pushingPoppedEle","tbarObj","popupPri","eleHeight","sepHeight","poppedEle","nodeIndex","nodePri","tbResize","tbarElement","sepItem","extendEle","popupEle_1","popupInit","eleStyles","borderRightWidth","tbarPopupHandler","toolEle","popupElePos","popIcon","overflowHeight","tbEleData","inEle","pre","popPriority","eleWid","sepCheck","itemPopCount","checkClass","rVal","mrgn","compuStyle","fstEleCheck","tbarEleMrgn","eleWid_1","sepEle","popedEle","tbarPriRef","sepPri","des","elWid","wid","ig","ignoreCount","priEleCnt","eleSep","ignoreCheck","eleSepWidth","prevSep","previousElementSibling","isVer","dimension","popupEleWidth","popupEleRefresh","ignoreEleFetch","ignoreEle","ignoreInx","tbarWidth","tbarItemsWid","elWidth","btnText","eleSplice","sepBeforePri_1","refreshPositioning","tbarWid","popWid","itemEle","alignDiv","alignEle","leftAlign_1","ctrlTemplate","setAttr","enableItems","itemElement","getElementByIndex","addItems","extendedOpen","itemsDiv","itemsRerender","itemAgn","items_1","algIndex","removeItems","removeItemByIndex","eleIdx","indexAgn","templateRender","templateProp","isComponent","itemType","tempArray","buttonRendering","dom","iconPos","textStr","btnTxt","prefixIcon","suffixIcon","tempDom","tooltipText","itemClick","showTextOn","sTxt","multirowele","tEle","changedProb","popupPriCheck","booleanCheck","itemCol","hideItem","initIndex","eleIndex","innerItems_2","nextEle","setFlag","removeFlag","initELe","predefinedItems","gridID","isAdaptive","excludingItems","preItems_1","itemStr","localeName","ColumnChooser","responsiveFilter","responsiveSort","responsiveBack","createToolbar","getToolbar","addReactToolbarPortals","bindSearchEvents","searchElement","refreshToolbarItems","updateSearchBox","toolbarCreated","isNormal","clicked","toolbarClickHandler","viewStr","ID","renderResponsiveSearch","isRender","refreshResponsiveToolbarItems","searchBoxObj","toolbarEle","disableItems","hasData","allowAdding","allowDeleting","getItemObject","toolbarItems_1","itemObject","itemName","gID","newArgs","toolbarargs","startEdit","tarElement","createColumnchooser","reRenderToolbar","removeResponsiveSearch","rowSelectedFunction","rowDeSelectedFunction","isSearch","DetailRow","refreshColSpan","toogleExpandcollapse","lastrowIdx","isExpanded","nextRow","detailElement","getDetailTemplate","detailRow","detailCell","nextSibling","getGridModel","parentPrimaryKeys","parentKeyField","parentKeyFieldValue","parentRowData","promiseResolve","gridElem","detailrowIdx","lastrowcell","getTDfromIndex","collapse","expandAll","moduleObj","collapseAll","detailrows","documents","doc","subjects_string","subject","subject_name","sourceRendered","resourceTypeRendered","contentCategoryRendered","documentDesignationRendered","resource_type","content_category","document_designation","Col","Link","to","SubjectBadge","DateDisplay","date_published","isAllContent"],"mappings":"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MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,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AU,IACV,IAAQ,IACR,IAAQ,IACR,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAQ,IACR,IAAQ,IACR,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,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,IAAQ,IACR,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,IAAQ,IACR,IAAQ,IACR,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAQ,IACR,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,IAAQ,IACR,IAAQ,IACR,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,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,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAQ,IACR,IAAQ,IACR,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAQ,KACR,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,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,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,IAAQ,IACR,IAAQ,IACR,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,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,IAAQ,IACR,IAAQ,IACR,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,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,IAAQ,IACR,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,IAAQ,IACR,IAAQ,IACR,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAQ,IACR,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,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,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,IAAQ,IACR,IAAQ,IACR,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,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,IAAQ,IACR,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAQ,IACR,IA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","file":"283322e3261f1dcd9d3f39d0537a9c0d5a34cc2f-a4364327fabd520dbf37.js","sourcesContent":["var instances = 'ej2_instances';\nvar uid = 0;\nvar isBlazorPlatform = false;\n/**\n * Function to check whether the platform is blazor or not.\n * @return {boolean} result\n * @private\n */\n\nexport function disableBlazorMode() {\n  isBlazorPlatform = false;\n}\n/**\n * Create Instance from constructor function with desired parameters.\n * @param {Function} classFunction - Class function to which need to create instance\n * @param {any[]} params - Parameters need to passed while creating instance\n * @return {any}\n * @private\n */\n\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 * @param {Function} handler - callback function to be triggered.\n * @return {Function}\n * @private\n */\n\nexport function setImmediate(handler) {\n  var unbind;\n  var num = new Uint16Array(5);\n  var intCrypto = window.msCrypto || window.crypto;\n  intCrypto.getRandomValues(num);\n  var secret = 'ej2' + combineArray(num);\n\n  var messageHandler = function messageHandler(event) {\n    if (event.source === window && typeof event.data === 'string' && event.data.length <= 32 && event.data === secret) {\n      handler();\n      unbind();\n    }\n  };\n\n  window.addEventListener('message', messageHandler, false);\n  window.postMessage(secret, '*');\n  return unbind = function unbind() {\n    window.removeEventListener('message', messageHandler);\n    handler = messageHandler = secret = undefined;\n  };\n}\n/**\n * To get nameSpace value from the desired object.\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} obj - Object to get the inner object value.\n * @return {any}\n * @private\n */\n\nexport function getValue(nameSpace, obj) {\n  /* tslint:disable no-any */\n  var value = obj;\n  var splits = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n\n  for (var i = 0; i < splits.length && !isUndefined(value); i++) {\n    value = value[splits[i]];\n  }\n\n  return value;\n}\n/**\n * To set value for the nameSpace in desired object.\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 * @return {void}\n * @private\n */\n\nexport function setValue(nameSpace, value, obj) {\n  var keys = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n  var start = obj || {};\n  var fromObj = start;\n  var i;\n  var length = keys.length;\n  var key;\n\n  for (i = 0; i < length; i++) {\n    key = keys[i];\n\n    if (i + 1 === length) {\n      fromObj[key] = value === undefined ? {} : value;\n    } else if (isNullOrUndefined(fromObj[key])) {\n      fromObj[key] = {};\n    }\n\n    fromObj = fromObj[key];\n  }\n\n  return start;\n}\n/**\n * Delete an item from Object\n * @param {any} obj - Object in which we need to delete an item.\n * @param {string} params - String value to the get the inner object\n * @return {void}\n * @private\n */\n\nexport function deleteObject(obj, key) {\n  delete obj[key];\n}\n/**\n * Check weather the given argument is only object.\n * @param {any} obj - Object which is need to check.\n * @return {boolean}\n * @private\n */\n\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 * @param {any} enumObject - Enum object.\n * @param {string} enumValue - Enum value to be searched\n * @return {any}\n * @private\n */\n\nexport function getEnumValue(enumObject, enumValue) {\n  return enumObject[enumValue];\n}\n/**\n * Merge the source object into destination object.\n * @param {any} source - source object which is going to merge with destination object\n * @param {any} destination - object need to be merged\n * @return {void}\n * @private\n */\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\n    for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n      var key = keys_1[_i];\n\n      if (!isNullOrUndefined(temrObj[deepmerge]) && temrObj[deepmerge].indexOf(key) !== -1 && (isObject(tempProp[key]) || Array.isArray(tempProp[key]))) {\n        extend(temrObj[key], temrObj[key], tempProp[key], true);\n      } else {\n        temrObj[key] = tempProp[key];\n      }\n    }\n  }\n}\n/**\n * Extend the two object with newer one.\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 * @return {Object}\n * @private\n */\n\nexport function extend(copied, first, second, deep) {\n  var result = copied && typeof copied === 'object' ? copied : {};\n  var length = arguments.length;\n\n  if (deep) {\n    length = length - 1;\n  }\n\n  var _loop_1 = function _loop_1(i) {\n    if (!arguments_1[i]) {\n      return \"continue\";\n    }\n\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      var blazorEventExtend = isBlazor() ? !(src instanceof Event) && !isArrayChanged : true;\n\n      if (deep && blazorEventExtend && (isObject(copy) || Array.isArray(copy))) {\n        if (isObject(copy)) {\n          clone = src ? src : {};\n\n          if (Array.isArray(clone) && clone.hasOwnProperty('isComplexArray')) {\n            extend(clone, {}, copy, deep);\n          } else {\n            result[key] = extend(clone, {}, copy, deep);\n          }\n        } else {\n          /* istanbul ignore next */\n          clone = isBlazor() ? src && Object.keys(copy).length : src ? src : [];\n          result[key] = extend([], clone, copy, deep);\n        }\n      } else {\n        result[key] = copy;\n      }\n    });\n  };\n\n  var arguments_1 = arguments;\n\n  for (var i = 1; i < length; i++) {\n    _loop_1(i);\n  }\n\n  return result;\n}\n/**\n * To check whether the object is null or undefined.\n * @param {Object} value - To check the object is null or undefined\n * @return {boolean}\n * @private\n */\n\nexport function isNullOrUndefined(value) {\n  return value === undefined || value === null;\n}\n/**\n * To check whether the object is undefined.\n * @param {Object} value - To check the object is undefined\n * @return {boolean}\n * @private\n */\n\nexport function isUndefined(value) {\n  return 'undefined' === typeof value;\n}\n/**\n * To return the generated unique name\n * @param {string} definedName - To concatenate the unique id to provided name\n * @return {string}\n * @private\n */\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 * @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 * @return {Function}\n * @private\n */\n\nexport function debounce(eventFunction, delay) {\n  var out; // tslint:disable-next-line\n\n  return function () {\n    var _this = this;\n\n    var args = arguments;\n\n    var later = function later() {\n      out = null;\n      return eventFunction.apply(_this, args);\n    };\n\n    clearTimeout(out);\n    out = setTimeout(later, delay);\n  };\n} // Added since lint ignored after added '//tslint:disable-next-line' \n\n/* tslint:disable:no-any */\n\n/**\n * To convert the object to string for query url\n * @param  {Object} data\n * @returns string\n * @private\n */\n\nexport function queryParams(data) {\n  var array = [];\n  var keys = Object.keys(data);\n\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\n  return array.join('&');\n}\n/**\n * To check whether the given array contains object.\n * @param {T[]} value- Specifies the T type array to be checked.\n * @private\n */\n\nexport function isObjectArray(value) {\n  var parser = Object.prototype.toString;\n\n  if (parser.call(value) === '[object Array]') {\n    if (parser.call(value[0]) === '[object Object]') {\n      return true;\n    }\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 * @param{Element} - Specifies the child element to compare with parent.\n * @param{Element} - Specifies the parent element.\n * @return boolean\n * @private\n */\n\nexport function compareElementParent(child, parent) {\n  var node = child;\n\n  if (node === parent) {\n    return true;\n  } else if (node === document || !node) {\n    return false;\n  } else {\n    return compareElementParent(node.parentNode, parent);\n  }\n}\n/**\n * To throw custom error message.\n * @param{string} - Specifies the error message to be thrown.\n * @private\n */\n\nexport function throwError(message) {\n  try {\n    throw new Error(message);\n  } catch (e) {\n    throw e.message + '\\n' + e.stack;\n  }\n}\n/**\n * This function is used to print given element\n * @param{Element} element - Specifies the print content element.\n * @param{Window} printWindow - Specifies the print window.\n * @private\n */\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\n  if (blinks.length) {\n    for (var l = 0, len = blinks.length; l < len; l++) {\n      links.push(blinks[l]);\n    }\n  }\n\n  var reference = '';\n\n  if (isNullOrUndefined(printWindow)) {\n    printWindow = window.open('', 'print', 'height=452,width=1024,tabbar=no');\n  }\n\n  div.appendChild(element.cloneNode(true));\n\n  for (var i = 0, len = links.length; i < len; i++) {\n    reference += links[i].outerHTML;\n  }\n\n  printWindow.document.write('<!DOCTYPE html> <html><head>' + reference + '</head><body>' + div.innerHTML + '<script> (function() { window.ready = true; })(); </script>' + '</body></html>');\n  printWindow.document.close();\n  printWindow.focus(); // tslint:disable-next-line\n\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 * @param  {number|string} value\n * @return {string} result\n * @private\n */\n\nexport function formatUnit(value) {\n  var result = value + '';\n\n  if (result.match(/auto|%|px|vh|vm|vmax|vmin|em/)) {\n    return result;\n  }\n\n  return result + 'px';\n}\n/**\n * Function to check whether the platform is blazor or not.\n * @return {boolean} result\n * @private\n */\n\nexport function enableBlazorMode() {\n  isBlazorPlatform = true;\n}\n/**\n * Function to check whether the platform is blazor or not.\n * @return {boolean} result\n * @private\n */\n\nexport function isBlazor() {\n  return isBlazorPlatform;\n}\n/**\n * Function to convert xPath to DOM element in blazor platform\n * @return {HTMLElement} result\n * @param {HTMLElement | object} element\n * @private\n */\n\nexport function getElement(element) {\n  var xPath = 'xPath';\n\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\n  return element;\n}\n/**\n * Function to fetch the Instances of a HTML element for the given component.\n * @param {string | HTMLElement} element\n * @param {any} component\n * @return {Object} inst\n * @private\n */\n// tslint:disable-next-line\n\nexport function getInstance(element, component) {\n  // tslint:disable-next-line:no-any\n  var elem = typeof element === 'string' ? document.querySelector(element) : element;\n\n  if (elem[instances]) {\n    for (var _i = 0, _a = elem[instances]; _i < _a.length; _i++) {\n      var inst = _a[_i];\n\n      if (inst instanceof component) {\n        return inst;\n      }\n    }\n  }\n\n  return null;\n}\n/**\n * Function to add instances for the given element.\n * @param {string | HTMLElement} element\n * @param {Object} instance\n * @return {void}\n * @private\n */\n\nexport function addInstance(element, instance) {\n  // tslint:disable-next-line:no-any\n  var elem = typeof element === 'string' ? document.querySelector(element) : element;\n\n  if (elem[instances]) {\n    elem[instances].push(instance);\n  } else {\n    elem[instances] = [instance];\n  }\n}\n/**\n * Function to generate the unique id.\n * @return {any}\n * @private\n */\n// tslint:disable-next-line:no-any\n\nexport function uniqueID() {\n  // tslint:disable-next-line:no-any\n  if (typeof window === 'undefined') {\n    return;\n  } // tslint:disable-next-line:no-any\n\n\n  var num = new Uint16Array(5);\n  var intCrypto = window.msCrypto || window.crypto;\n  return intCrypto.getRandomValues(num);\n}\n\nfunction combineArray(num) {\n  var ret = '';\n\n  for (var i = 0; i < 5; i++) {\n    ret += (i ? ',' : '') + num[i];\n  }\n\n  return ret;\n}","/**\n * Parser\n */\nvar defaultNumberingSystem = {\n  'latn': {\n    '_digits': '0123456789',\n    '_type': 'numeric'\n  }\n};\nimport { isUndefined, getValue, isBlazor } from '../util';\nvar latnRegex = /^[0-9]*$/;\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 * @private\n */\n\nvar ParserBase =\n/** @class */\nfunction () {\n  function ParserBase() {}\n  /**\n   * Returns the cldr object for the culture specifies\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\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   * @param {Object} obj - Specifies the object from which number system is acquired.\n   * @returns {Object}\n   */\n\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   * @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\n\n  ParserBase.reverseObject = function (prop, keys) {\n    var propKeys = keys || Object.keys(prop);\n    var res = {};\n\n    for (var _i = 0, propKeys_1 = propKeys; _i < propKeys_1.length; _i++) {\n      var key = propKeys_1[_i];\n      /* tslint:disable no-any */\n\n      if (!res.hasOwnProperty(prop[key])) {\n        res[prop[key]] = key;\n      }\n    }\n\n    return res;\n  };\n  /**\n   * Returns the symbol regex by skipping the escape sequence.\n   * @param {string[]} props - Specifies the array values to be skipped.\n   * @returns {RegExp}\n   */\n\n\n  ParserBase.getSymbolRegex = function (props) {\n    var regexStr = props.map(function (str) {\n      return str.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1');\n    }).join('|');\n    return new RegExp(regexStr, 'g');\n  };\n\n  ParserBase.getSymbolMatch = function (prop) {\n    var matchKeys = Object.keys(defaultNumberSymbols);\n    var ret = {};\n\n    for (var _i = 0, matchKeys_1 = matchKeys; _i < matchKeys_1.length; _i++) {\n      var key = matchKeys_1[_i];\n      ret[prop[key]] = defaultNumberSymbols[key];\n    }\n\n    return ret;\n  };\n  /**\n   * Returns regex string for provided value\n   * @param {string} val\n   * @returns {string}\n   */\n\n\n  ParserBase.constructRegex = function (val) {\n    var len = val.length;\n    var ret = '';\n\n    for (var i = 0; i < len; i++) {\n      if (i !== len - 1) {\n        ret += val[i] + '|';\n      } else {\n        ret += val[i];\n      }\n    }\n\n    return ret;\n  };\n  /**\n   * Returns the replaced value of matching regex and obj mapper.\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\n\n  ParserBase.convertValueParts = function (value, regex, obj) {\n    return value.replace(regex, function (str) {\n      return obj[str];\n    });\n  };\n  /**\n   * Returns default numbering system object for formatting from cldr data\n   * @param {Object} obj\n   * @returns {NumericObject}\n   */\n\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\n\n  ParserBase.getCurrentNumericOptions = function (curObj, numberSystem, needSymbols, blazorMode) {\n    var ret = {};\n    var cur = this.getDefaultNumberingSystem(curObj);\n\n    if (!isUndefined(cur.nSystem) || blazorMode) {\n      var digits = blazorMode ? getValue('obj.mapperDigits', cur) : getValue(cur.nSystem + '._digits', numberSystem);\n\n      if (!isUndefined(digits)) {\n        ret.numericPair = this.reverseObject(digits, latnNumberSystem);\n        ret.numberParseRegex = new RegExp(this.constructRegex(digits), 'g');\n        ret.numericRegex = '[' + digits[0] + '-' + digits[9] + ']';\n\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\n    return ret;\n  };\n  /**\n   * Returns number mapper object for the provided cldr data\n   * @param {Object} curObj\n   * @param {Object} numberSystem\n   * @param {boolean} isNumber\n   * @returns {NumberMapper}\n   */\n\n\n  ParserBase.getNumberMapper = function (curObj, numberSystem, isNumber) {\n    var ret = {\n      mapper: {}\n    };\n    var cur = this.getDefaultNumberingSystem(curObj);\n\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\n      if (!isUndefined(digits)) {\n        for (var _i = 0, latnNumberSystem_1 = latnNumberSystem; _i < latnNumberSystem_1.length; _i++) {\n          var i = latnNumberSystem_1[_i];\n          ret.mapper[i] = digits[i];\n        }\n      }\n    }\n\n    return ret;\n  };\n\n  ParserBase.nPair = 'numericPair';\n  ParserBase.nRegex = 'numericRegex';\n  ParserBase.numberingSystems = defaultNumberingSystem;\n  return ParserBase;\n}();\n\nexport { ParserBase };\n/**\n * @private\n */\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};\nexport function getBlazorCurrencySymbol(currencyCode) {\n  return getValue(currencyCode || '', blazorCurrencyData);\n}","/***\n * Hijri parser\n */\nexport var HijriParser;\n\n(function (HijriParser) {\n  /* tslint:disable */\n  var dateCorrection = [28607, 28636, 28665, 28695, 28724, 28754, 28783, 28813, 28843, 28872, 28901, 28931, 28960, 28990, 29019, 29049, 29078, 29108, 29137, 29167, 29196, 29226, 29255, 29285, 29315, 29345, 29375, 29404, 29434, 29463, 29492, 29522, 29551, 29580, 29610, 29640, 29669, 29699, 29729, 29759, 29788, 29818, 29847, 29876, 29906, 29935, 29964, 29994, 30023, 30053, 30082, 30112, 30141, 30171, 30200, 30230, 30259, 30289, 30318, 30348, 30378, 30408, 30437, 30467, 30496, 30526, 30555, 30585, 30614, 30644, 30673, 30703, 30732, 30762, 30791, 30821, 30850, 30880, 30909, 30939, 30968, 30998, 31027, 31057, 31086, 31116, 31145, 31175, 31204, 31234, 31263, 31293, 31322, 31352, 31381, 31411, 31441, 31471, 31500, 31530, 31559, 31589, 31618, 31648, 31676, 31706, 31736, 31766, 31795, 31825, 31854, 31884, 31913, 31943, 31972, 32002, 32031, 32061, 32090, 32120, 32150, 32180, 32209, 32239, 32268, 32298, 32327, 32357, 32386, 32416, 32445, 32475, 32504, 32534, 32563, 32593, 32622, 32652, 32681, 32711, 32740, 32770, 32799, 32829, 32858, 32888, 32917, 32947, 32976, 33006, 33035, 33065, 33094, 33124, 33153, 33183, 33213, 33243, 33272, 33302, 33331, 33361, 33390, 33420, 33450, 33479, 33509, 33539, 33568, 33598, 33627, 33657, 33686, 33716, 33745, 33775, 33804, 33834, 33863, 33893, 33922, 33952, 33981, 34011, 34040, 34069, 34099, 34128, 34158, 34187, 34217, 34247, 34277, 34306, 34336, 34365, 34395, 34424, 34454, 34483, 34512, 34542, 34571, 34601, 34631, 34660, 34690, 34719, 34749, 34778, 34808, 34837, 34867, 34896, 34926, 34955, 34985, 35015, 35044, 35074, 35103, 35133, 35162, 35192, 35222, 35251, 35280, 35310, 35340, 35370, 35399, 35429, 35458, 35488, 35517, 35547, 35576, 35605, 35635, 35665, 35694, 35723, 35753, 35782, 35811, 35841, 35871, 35901, 35930, 35960, 35989, 36019, 36048, 36078, 36107, 36136, 36166, 36195, 36225, 36254, 36284, 36314, 36343, 36373, 36403, 36433, 36462, 36492, 36521, 36551, 36580, 36610, 36639, 36669, 36698, 36728, 36757, 36786, 36816, 36845, 36875, 36904, 36934, 36963, 36993, 37022, 37052, 37081, 37111, 37141, 37170, 37200, 37229, 37259, 37288, 37318, 37347, 37377, 37406, 37436, 37465, 37495, 37524, 37554, 37584, 37613, 37643, 37672, 37701, 37731, 37760, 37790, 37819, 37849, 37878, 37908, 37938, 37967, 37997, 38027, 38056, 38085, 38115, 38144, 38174, 38203, 38233, 38262, 38292, 38322, 38351, 38381, 38410, 38440, 38469, 38499, 38528, 38558, 38587, 38617, 38646, 38676, 38705, 38735, 38764, 38794, 38823, 38853, 38882, 38912, 38941, 38971, 39001, 39030, 39059, 39089, 39118, 39148, 39178, 39208, 39237, 39267, 39297, 39326, 39355, 39385, 39414, 39444, 39473, 39503, 39532, 39562, 39592, 39621, 39650, 39680, 39709, 39739, 39768, 39798, 39827, 39857, 39886, 39916, 39946, 39975, 40005, 40035, 40064, 40094, 40123, 40153, 40182, 40212, 40241, 40271, 40300, 40330, 40359, 40389, 40418, 40448, 40477, 40507, 40536, 40566, 40595, 40625, 40655, 40685, 40714, 40744, 40773, 40803, 40832, 40862, 40892, 40921, 40951, 40980, 41009, 41039, 41068, 41098, 41127, 41157, 41186, 41216, 41245, 41275, 41304, 41334, 41364, 41393, 41422, 41452, 41481, 41511, 41540, 41570, 41599, 41629, 41658, 41688, 41718, 41748, 41777, 41807, 41836, 41865, 41894, 41924, 41953, 41983, 42012, 42042, 42072, 42102, 42131, 42161, 42190, 42220, 42249, 42279, 42308, 42337, 42367, 42397, 42426, 42456, 42485, 42515, 42545, 42574, 42604, 42633, 42662, 42692, 42721, 42751, 42780, 42810, 42839, 42869, 42899, 42929, 42958, 42988, 43017, 43046, 43076, 43105, 43135, 43164, 43194, 43223, 43253, 43283, 43312, 43342, 43371, 43401, 43430, 43460, 43489, 43519, 43548, 43578, 43607, 43637, 43666, 43696, 43726, 43755, 43785, 43814, 43844, 43873, 43903, 43932, 43962, 43991, 44021, 44050, 44080, 44109, 44139, 44169, 44198, 44228, 44258, 44287, 44317, 44346, 44375, 44405, 44434, 44464, 44493, 44523, 44553, 44582, 44612, 44641, 44671, 44700, 44730, 44759, 44788, 44818, 44847, 44877, 44906, 44936, 44966, 44996, 45025, 45055, 45084, 45114, 45143, 45172, 45202, 45231, 45261, 45290, 45320, 45350, 45380, 45409, 45439, 45468, 45498, 45527, 45556, 45586, 45615, 45644, 45674, 45704, 45733, 45763, 45793, 45823, 45852, 45882, 45911, 45940, 45970, 45999, 46028, 46058, 46088, 46117, 46147, 46177, 46206, 46236, 46265, 46295, 46324, 46354, 46383, 46413, 46442, 46472, 46501, 46531, 46560, 46590, 46620, 46649, 46679, 46708, 46738, 46767, 46797, 46826, 46856, 46885, 46915, 46944, 46974, 47003, 47033, 47063, 47092, 47122, 47151, 47181, 47210, 47240, 47269, 47298, 47328, 47357, 47387, 47417, 47446, 47476, 47506, 47535, 47565, 47594, 47624, 47653, 47682, 47712, 47741, 47771, 47800, 47830, 47860, 47890, 47919, 47949, 47978, 48008, 48037, 48066, 48096, 48125, 48155, 48184, 48214, 48244, 48273, 48303, 48333, 48362, 48392, 48421, 48450, 48480, 48509, 48538, 48568, 48598, 48627, 48657, 48687, 48717, 48746, 48776, 48805, 48834, 48864, 48893, 48922, 48952, 48982, 49011, 49041, 49071, 49100, 49130, 49160, 49189, 49218, 49248, 49277, 49306, 49336, 49365, 49395, 49425, 49455, 49484, 49514, 49543, 49573, 49602, 49632, 49661, 49690, 49720, 49749, 49779, 49809, 49838, 49868, 49898, 49927, 49957, 49986, 50016, 50045, 50075, 50104, 50133, 50163, 50192, 50222, 50252, 50281, 50311, 50340, 50370, 50400, 50429, 50459, 50488, 50518, 50547, 50576, 50606, 50635, 50665, 50694, 50724, 50754, 50784, 50813, 50843, 50872, 50902, 50931, 50960, 50990, 51019, 51049, 51078, 51108, 51138, 51167, 51197, 51227, 51256, 51286, 51315, 51345, 51374, 51403, 51433, 51462, 51492, 51522, 51552, 51582, 51611, 51641, 51670, 51699, 51729, 51758, 51787, 51816, 51846, 51876, 51906, 51936, 51965, 51995, 52025, 52054, 52083, 52113, 52142, 52171, 52200, 52230, 52260, 52290, 52319, 52349, 52379, 52408, 52438, 52467, 52497, 52526, 52555, 52585, 52614, 52644, 52673, 52703, 52733, 52762, 52792, 52822, 52851, 52881, 52910, 52939, 52969, 52998, 53028, 53057, 53087, 53116, 53146, 53176, 53205, 53235, 53264, 53294, 53324, 53353, 53383, 53412, 53441, 53471, 53500, 53530, 53559, 53589, 53619, 53648, 53678, 53708, 53737, 53767, 53796, 53825, 53855, 53884, 53913, 53943, 53973, 54003, 54032, 54062, 54092, 54121, 54151, 54180, 54209, 54239, 54268, 54297, 54327, 54357, 54387, 54416, 54446, 54476, 54505, 54535, 54564, 54593, 54623, 54652, 54681, 54711, 54741, 54770, 54800, 54830, 54859, 54889, 54919, 54948, 54977, 55007, 55036, 55066, 55095, 55125, 55154, 55184, 55213, 55243, 55273, 55302, 55332, 55361, 55391, 55420, 55450, 55479, 55508, 55538, 55567, 55597, 55627, 55657, 55686, 55716, 55745, 55775, 55804, 55834, 55863, 55892, 55922, 55951, 55981, 56011, 56040, 56070, 56100, 56129, 56159, 56188, 56218, 56247, 56276, 56306, 56335, 56365, 56394, 56424, 56454, 56483, 56513, 56543, 56572, 56601, 56631, 56660, 56690, 56719, 56749, 56778, 56808, 56837, 56867, 56897, 56926, 56956, 56985, 57015, 57044, 57074, 57103, 57133, 57162, 57192, 57221, 57251, 57280, 57310, 57340, 57369, 57399, 57429, 57458, 57487, 57517, 57546, 57576, 57605, 57634, 57664, 57694, 57723, 57753, 57783, 57813, 57842, 57871, 57901, 57930, 57959, 57989, 58018, 58048, 58077, 58107, 58137, 58167, 58196, 58226, 58255, 58285, 58314, 58343, 58373, 58402, 58432, 58461, 58491, 58521, 58551, 58580, 58610, 58639, 58669, 58698, 58727, 58757, 58786, 58816, 58845, 58875, 58905, 58934, 58964, 58994, 59023, 59053, 59082, 59111, 59141, 59170, 59200, 59229, 59259, 59288, 59318, 59348, 59377, 59407, 59436, 59466, 59495, 59525, 59554, 59584, 59613, 59643, 59672, 59702, 59731, 59761, 59791, 59820, 59850, 59879, 59909, 59939, 59968, 59997, 60027, 60056, 60086, 60115, 60145, 60174, 60204, 60234, 60264, 60293, 60323, 60352, 60381, 60411, 60440, 60469, 60499, 60528, 60558, 60588, 60618, 60648, 60677, 60707, 60736, 60765, 60795, 60824, 60853, 60883, 60912, 60942, 60972, 61002, 61031, 61061, 61090, 61120, 61149, 61179, 61208, 61237, 61267, 61296, 61326, 61356, 61385, 61415, 61445, 61474, 61504, 61533, 61563, 61592, 61621, 61651, 61680, 61710, 61739, 61769, 61799, 61828, 61858, 61888, 61917, 61947, 61976, 62006, 62035, 62064, 62094, 62123, 62153, 62182, 62212, 62242, 62271, 62301, 62331, 62360, 62390, 62419, 62448, 62478, 62507, 62537, 62566, 62596, 62625, 62655, 62685, 62715, 62744, 62774, 62803, 62832, 62862, 62891, 62921, 62950, 62980, 63009, 63039, 63069, 63099, 63128, 63157, 63187, 63216, 63246, 63275, 63305, 63334, 63363, 63393, 63423, 63453, 63482, 63512, 63541, 63571, 63600, 63630, 63659, 63689, 63718, 63747, 63777, 63807, 63836, 63866, 63895, 63925, 63955, 63984, 64014, 64043, 64073, 64102, 64131, 64161, 64190, 64220, 64249, 64279, 64309, 64339, 64368, 64398, 64427, 64457, 64486, 64515, 64545, 64574, 64603, 64633, 64663, 64692, 64722, 64752, 64782, 64811, 64841, 64870, 64899, 64929, 64958, 64987, 65017, 65047, 65076, 65106, 65136, 65166, 65195, 65225, 65254, 65283, 65313, 65342, 65371, 65401, 65431, 65460, 65490, 65520, 65549, 65579, 65608, 65638, 65667, 65697, 65726, 65755, 65785, 65815, 65844, 65874, 65903, 65933, 65963, 65992, 66022, 66051, 66081, 66110, 66140, 66169, 66199, 66228, 66258, 66287, 66317, 66346, 66376, 66405, 66435, 66465, 66494, 66524, 66553, 66583, 66612, 66641, 66671, 66700, 66730, 66760, 66789, 66819, 66849, 66878, 66908, 66937, 66967, 66996, 67025, 67055, 67084, 67114, 67143, 67173, 67203, 67233, 67262, 67292, 67321, 67351, 67380, 67409, 67439, 67468, 67497, 67527, 67557, 67587, 67617, 67646, 67676, 67705, 67735, 67764, 67793, 67823, 67852, 67882, 67911, 67941, 67971, 68000, 68030, 68060, 68089, 68119, 68148, 68177, 68207, 68236, 68266, 68295, 68325, 68354, 68384, 68414, 68443, 68473, 68502, 68532, 68561, 68591, 68620, 68650, 68679, 68708, 68738, 68768, 68797, 68827, 68857, 68886, 68916, 68946, 68975, 69004, 69034, 69063, 69092, 69122, 69152, 69181, 69211, 69240, 69270, 69300, 69330, 69359, 69388, 69418, 69447, 69476, 69506, 69535, 69565, 69595, 69624, 69654, 69684, 69713, 69743, 69772, 69802, 69831, 69861, 69890, 69919, 69949, 69978, 70008, 70038, 70067, 70097, 70126, 70156, 70186, 70215, 70245, 70274, 70303, 70333, 70362, 70392, 70421, 70451, 70481, 70510, 70540, 70570, 70599, 70629, 70658, 70687, 70717, 70746, 70776, 70805, 70835, 70864, 70894, 70924, 70954, 70983, 71013, 71042, 71071, 71101, 71130, 71159, 71189, 71218, 71248, 71278, 71308, 71337, 71367, 71397, 71426, 71455, 71485, 71514, 71543, 71573, 71602, 71632, 71662, 71691, 71721, 71751, 71781, 71810, 71839, 71869, 71898, 71927, 71957, 71986, 72016, 72046, 72075, 72105, 72135, 72164, 72194, 72223, 72253, 72282, 72311, 72341, 72370, 72400, 72429, 72459, 72489, 72518, 72548, 72577, 72607, 72637, 72666, 72695, 72725, 72754, 72784, 72813, 72843, 72872, 72902, 72931, 72961, 72991, 73020, 73050, 73080, 73109, 73139, 73168, 73197, 73227, 73256, 73286, 73315, 73345, 73375, 73404, 73434, 73464, 73493, 73523, 73552, 73581, 73611, 73640, 73669, 73699, 73729, 73758, 73788, 73818, 73848, 73877, 73907, 73936, 73965, 73995, 74024, 74053, 74083, 74113, 74142, 74172, 74202, 74231, 74261, 74291, 74320, 74349, 74379, 74408, 74437, 74467, 74497, 74526, 74556, 74586, 74615, 74645, 74675, 74704, 74733, 74763, 74792, 74822, 74851, 74881, 74910, 74940, 74969, 74999, 75029, 75058, 75088, 75117, 75147, 75176, 75206, 75235, 75264, 75294, 75323, 75353, 75383, 75412, 75442, 75472, 75501, 75531, 75560, 75590, 75619, 75648, 75678, 75707, 75737, 75766, 75796, 75826, 75856, 75885, 75915, 75944, 75974, 76003, 76032, 76062, 76091, 76121, 76150, 76180, 76210, 76239, 76269, 76299, 76328, 76358, 76387, 76416, 76446, 76475, 76505, 76534, 76564, 76593, 76623, 76653, 76682, 76712, 76741, 76771, 76801, 76830, 76859, 76889, 76918, 76948, 76977, 77007, 77036, 77066, 77096, 77125, 77155, 77185, 77214, 77243, 77273, 77302, 77332, 77361, 77390, 77420, 77450, 77479, 77509, 77539, 77569, 77598, 77627, 77657, 77686, 77715, 77745, 77774, 77804, 77833, 77863, 77893, 77923, 77952, 77982, 78011, 78041, 78070, 78099, 78129, 78158, 78188, 78217, 78247, 78277, 78307, 78336, 78366, 78395, 78425, 78454, 78483, 78513, 78542, 78572, 78601, 78631, 78661, 78690, 78720, 78750, 78779, 78808, 78838, 78867, 78897, 78926, 78956, 78985, 79015, 79044, 79074, 79104, 79133, 79163, 79192, 79222, 79251, 79281, 79310, 79340, 79369, 79399, 79428, 79458, 79487, 79517, 79546, 79576, 79606, 79635, 79665, 79695, 79724, 79753, 79783, 79812, 79841, 79871, 79900, 79930, 79960, 79990];\n  /* tslint:enable */\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\n    if (tMonth < 3) {\n      tYear -= 1;\n      tMonth += 12;\n    }\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\n    if (month > 13) {\n      c += 1;\n      month -= 12;\n    }\n\n    month -= 1;\n    year = c - 4716;\n    var modifiedJulianDate = julianNumber - 2400000; // date calculation for year after 2077\n\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\n    if (im === 13) {\n      im = 12;\n    }\n\n    var tempDay = z - Math.floor(29.5001 * im - 29);\n    var i = 0;\n\n    for (; i < dateCorrection.length; i++) {\n      if (dateCorrection[i] > modifiedJulianDate) {\n        break;\n      }\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\n    if ((hDate + '').length > 2) {\n      hDate = tempDay;\n      hmonth = im;\n      hYear = iy;\n    }\n\n    return {\n      year: hYear,\n      month: hmonth,\n      date: hDate\n    };\n  }\n\n  HijriParser.getHijriDate = getHijriDate;\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\n    if (gYear <= 0) {\n      gMonth--;\n    } // No year zero\n\n\n    return new Date(gYear + '/' + gMonth + '/' + gDay);\n  }\n\n  HijriParser.toGregorian = toGregorian;\n})(HijriParser || (HijriParser = {}));","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/**\n * Date Format is a framework provides support for date formatting.\n * @private\n */\n\nvar DateFormat =\n/** @class */\nfunction () {\n  function DateFormat() {}\n  /**\n   * Returns the formatter function for given skeleton.\n   * @param {string} -  Specifies the culture name to be which formatting.\n   * @param {DateFormatOptions} - Specific the format in which date  will format.\n   * @param {cldr} - Specifies the global cldr data collection.\n   * @return Function.\n   */\n\n\n  DateFormat.dateFormat = function (culture, option, cldr) {\n    var _this = this;\n\n    var dependable = base.getDependables(cldr, culture, option.calendar);\n    var numObject = getValue('parserObject.numbers', dependable);\n    var dateObject = dependable.dateObject;\n    var formatOptions = {\n      isIslamic: base.islamicRegex.test(option.calendar)\n    };\n\n    if (isBlazor() && option.isServerRendered) {\n      option = base.compareBlazorDateFormats(option, culture);\n    }\n\n    var resPattern = option.format || base.getResultantPattern(option.skeleton, dependable.dateObject, option.type, false, isBlazor() ? culture : '');\n    formatOptions.dateSeperator = isBlazor() ? getValue('dateSeperator', dateObject) : base.getDateSeparator(dependable.dateObject);\n\n    if (isUndefined(resPattern)) {\n      throwError('Format options or type given must be invalid');\n    } else {\n      resPattern = base.ConvertDateToWeekFormat(resPattern);\n\n      if (isBlazor()) {\n        resPattern = resPattern.replace(/tt/, 'a');\n      }\n\n      formatOptions.pattern = resPattern;\n      formatOptions.numMapper = isBlazor() ? extend({}, numObject) : parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n      var patternMatch = resPattern.match(abbreviateRegexGlobal) || [];\n\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\n        if (char === 'K') {\n          char = 'h';\n        }\n        /* tslint:disable no-any */\n\n\n        var charKey = datePartMatcher[char];\n\n        switch (char) {\n          case 'E':\n          case 'c':\n            if (isBlazor()) {\n              formatOptions.weekday = getValue('days.' + base.monthIndex[len], dateObject);\n            } else {\n              formatOptions.weekday = dependable.dateObject[base.days][standalone][base.monthIndex[len]];\n            }\n\n            break;\n\n          case 'M':\n          case 'L':\n            if (isBlazor()) {\n              formatOptions.month = getValue('months.' + base.monthIndex[len], dateObject);\n            } else {\n              formatOptions.month = dependable.dateObject[base.month][standalone][base.monthIndex[len]];\n            }\n\n            break;\n\n          case 'a':\n            formatOptions.designator = isBlazor() ? getValue('dayPeriods', dateObject) : getValue('dayPeriods.format.wide', dateObject);\n            break;\n\n          case 'G':\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\n          case 'z':\n            formatOptions.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n            break;\n        }\n      }\n    }\n\n    return function (value) {\n      if (isNaN(value.getDate())) {\n        return null;\n      }\n\n      return _this.intDateFormatter(value, formatOptions);\n    };\n  };\n  /**\n   * Returns formatted date string based on options passed.\n   * @param {Date} value\n   * @param {FormatOptions} options\n   */\n  // tslint:disable-next-line:max-func-body-length\n\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\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\n      if (char === 'K') {\n        char = 'h';\n      }\n\n      var curval = void 0;\n      var curvalstr = '';\n      var isNumber = void 0;\n      var processNumber = void 0;\n      var curstr = '';\n\n      switch (char) {\n        case 'M':\n        case 'L':\n          curval = dObject.month;\n\n          if (length_1 > 2) {\n            ret += options.month[curval];\n          } else {\n            isNumber = true;\n          }\n\n          break;\n\n        case 'E':\n        case 'c':\n          ret += options.weekday[weekdayKey[value.getDay()]];\n          break;\n\n        case 'H':\n        case 'h':\n        case 'm':\n        case 's':\n        case 'd':\n        case 'f':\n          isNumber = true;\n\n          if (char === 'd') {\n            curval = dObject.date;\n          } else if (char === 'f') {\n            isNumber = false;\n            processNumber = true;\n            curvalstr = value[timeSetter[char]]().toString();\n            curvalstr = curvalstr.substring(0, length_1);\n            var curlength = curvalstr.length;\n\n            if (length_1 !== curlength) {\n              if (length_1 > 3) {\n                continue;\n              }\n\n              for (var i = 0; i < length_1 - curlength; i++) {\n                curvalstr = '0' + curvalstr.toString();\n              }\n            }\n\n            curstr += curvalstr;\n          } else {\n            curval = value[timeSetter[char]]();\n          }\n\n          if (char === 'h') {\n            curval = curval % 12 || 12;\n          }\n\n          break;\n\n        case 'y':\n          processNumber = true;\n          curstr += dObject.year;\n\n          if (length_1 === 2) {\n            curstr = curstr.substr(curstr.length - 2);\n          }\n\n          break;\n\n        case 'a':\n          var desig = value.getHours() < 12 ? 'am' : 'pm';\n          ret += options.designator[desig];\n          break;\n\n        case 'G':\n          var dec = value.getFullYear() < 0 ? 0 : 1;\n          var retu = options.era[dec];\n\n          if (isNullOrUndefined(retu)) {\n            retu = options.era[dec ? 0 : 1];\n          }\n\n          ret += retu || '';\n          break;\n\n        case '\\'':\n          ret += match === '\\'\\'' ? '\\'' : match.replace(/\\'/g, '');\n          break;\n\n        case 'z':\n          var timezone = value.getTimezoneOffset();\n          var pattern_1 = length_1 < 4 ? '+H;-H' : options.timeZone.hourFormat;\n          pattern_1 = pattern_1.replace(/:/g, options.numMapper.timeSeparator);\n\n          if (timezone === 0) {\n            ret += options.timeZone.gmtZeroFormat;\n          } else {\n            processNumber = true;\n            curstr = this.getTimeZoneValue(timezone, pattern_1);\n          }\n\n          curstr = options.timeZone.gmtFormat.replace(/\\{0\\}/, curstr);\n          break;\n\n        case ':':\n          ret += options.numMapper.numberSymbols[timeSeparator];\n          /* tslint:enable no-any */\n\n          break;\n\n        case '/':\n          ret += options.dateSeperator;\n          break;\n\n        case 'W':\n          isNumber = true;\n          curval = base.getWeekOfYear(value);\n          break;\n\n        default:\n          ret += match;\n      }\n\n      if (isNumber) {\n        processNumber = true;\n        curstr = this.checkTwodigitNumber(curval, length_1);\n      }\n\n      if (processNumber) {\n        ret += parser.convertValueParts(curstr, base.latnParseRegex, options.numMapper.mapper);\n      }\n    }\n\n    return ret;\n  };\n\n  DateFormat.getCurrentDateValue = function (value, isIslamic) {\n    if (isIslamic) {\n      return HijriParser.getHijriDate(value);\n    }\n\n    return {\n      year: value.getFullYear(),\n      month: value.getMonth() + 1,\n      date: value.getDate()\n    };\n  };\n  /**\n   * Returns two digit numbers for given value and length\n   */\n\n\n  DateFormat.checkTwodigitNumber = function (val, len) {\n    var ret = val + '';\n\n    if (len === 2 && ret.length !== 2) {\n      return '0' + ret;\n    }\n\n    return ret;\n  };\n  /**\n   * Returns the value of the Time Zone.\n   * @param {number} tVal\n   * @param {string} pattern\n   * @private\n   */\n\n\n  DateFormat.getTimeZoneValue = function (tVal, pattern) {\n    var _this = this;\n\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\n  return DateFormat;\n}();\n\nexport { DateFormat };","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 * @private\n */\n\nvar NumberFormat =\n/** @class */\nfunction () {\n  function NumberFormat() {}\n  /**\n   * Returns the formatter function for given skeleton.\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} object- Specifies the global cldr data collection.\n   * @return Function.\n   */\n\n\n  NumberFormat.numberFormatter = function (culture, option, cldr) {\n    var _this = this;\n\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) : 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    /* tslint:disable no-any */\n\n    dOptions.percentSymbol = isBlazor() ? getValue('numberSymbols.percentSign', numObject) : dOptions.numberMapper.numberSymbols[percentSign];\n    dOptions.minusSymbol = isBlazor() ? getValue('numberSymbols.minusSign', numObject) : dOptions.numberMapper.numberSymbols[minusSign];\n    var symbols = dOptions.numberMapper.numberSymbols;\n\n    if (option.format && !base.formatRegex.test(option.format)) {\n      cOptions = base.customFormat(option.format, dOptions, dependable.numericObject);\n    } else {\n      extend(fOptions, base.getProperNumericSkeleton(option.format || 'N'));\n      fOptions.isCurrency = fOptions.type === 'currency';\n      fOptions.isPercent = fOptions.type === 'percent';\n\n      if (!isBlazor()) {\n        symbolPattern = base.getSymbolPattern(fOptions.type, dOptions.numberMapper.numberSystem, dependable.numericObject, fOptions.isAccount);\n      }\n\n      fOptions.groupOne = this.checkValueRange(fOptions.maximumSignificantDigits, fOptions.minimumSignificantDigits, true);\n      this.checkValueRange(fOptions.maximumFractionDigits, fOptions.minimumFractionDigits, false, true);\n\n      if (!isUndefined(fOptions.fractionDigits)) {\n        fOptions.minimumFractionDigits = fOptions.maximumFractionDigits = fOptions.fractionDigits;\n      }\n\n      if (isUndefined(fOptions.useGrouping)) {\n        fOptions.useGrouping = true;\n      }\n\n      if (fOptions.isCurrency && !isBlazor()) {\n        symbolPattern = symbolPattern.replace(/\\u00A4/g, base.defaultCurrency);\n      }\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\n        if (fOptions.useGrouping) {\n          fOptions.groupSeparator = symbols[mapper[2]];\n          fOptions.groupData = this.getGroupingDetails(split[0]);\n        }\n      } else {\n        cOptions.nData = extend({}, {}, getValue(fOptions.type + 'nData', numObject));\n        cOptions.pData = extend({}, {}, getValue(fOptions.type + 'pData', numObject));\n\n        if (fOptions.type === 'currency' && option.currency) {\n          base.replaceBlazorCurrency([cOptions.pData, cOptions.nData], dOptions.currencySymbol, option.currency);\n        }\n      }\n\n      var minFrac = isUndefined(fOptions.minimumFractionDigits);\n\n      if (minFrac) {\n        fOptions.minimumFractionDigits = cOptions.nData.minimumFraction;\n      }\n\n      if (isUndefined(fOptions.maximumFractionDigits)) {\n        var mval = cOptions.nData.maximumFraction;\n        fOptions.maximumFractionDigits = isUndefined(mval) && fOptions.isPercent ? 0 : mval;\n      }\n\n      var mfrac = fOptions.minimumFractionDigits;\n      var lfrac = fOptions.maximumFractionDigits;\n\n      if (!isUndefined(mfrac) && !isUndefined(lfrac)) {\n        if (mfrac > lfrac) {\n          fOptions.maximumFractionDigits = mfrac;\n        }\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      } else if (!isFinite(value)) {\n        return symbols[mapper[0]];\n      }\n\n      return _this.intNumberFormatter(value, cOptions, dOptions);\n    };\n  };\n  /**\n   * Returns grouping details for the pattern provided\n   * @param {string} pattern\n   * @returns {GroupDetails}\n   */\n\n\n  NumberFormat.getGroupingDetails = function (pattern) {\n    var ret = {};\n    var match = pattern.match(base.negativeDataRegex);\n\n    if (match && match[4]) {\n      var pattern_1 = match[4];\n      var p = pattern_1.lastIndexOf(',');\n\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\n        if (s !== -1) {\n          ret.secondary = p - 1 - s;\n        }\n      }\n    }\n\n    return ret;\n  };\n  /**\n   * Returns if the provided integer range is valid.\n   * @param {number} val1\n   * @param {number} val2\n   * @param {boolean} checkbothExist\n   * @param {boolean} isFraction\n   * @returns {boolean}\n   */\n\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    var str2 = errorText['m' + decide];\n\n    if (!isUndefined(val1)) {\n      this.checkRange(val1, str1, isFraction);\n      dint++;\n    }\n\n    if (!isUndefined(val2)) {\n      this.checkRange(val2, str2, isFraction);\n      dint++;\n    }\n\n    if (dint === 2) {\n      if (val1 < val2) {\n        throwError(str2 + 'specified must be less than the' + str1);\n      } else {\n        return true;\n      }\n    } else if (checkbothExist && dint === 1) {\n      throwError('Both' + str2 + 'and' + str2 + 'must be present');\n    }\n\n    return false;\n  };\n  /**\n   * Check if the provided fraction range is valid\n   * @param {number} val\n   * @param {string} text\n   * @param {boolean} isFraction\n   * @returns {void}\n   */\n\n\n  NumberFormat.checkRange = function (val, text, isFraction) {\n    var range = isFraction ? [0, 20] : [1, 21];\n\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   * @param {number} value\n   * @param {base.GenericFormatOptions} fOptions\n   * @param {CommonOptions} dOptions\n   * @returns {string}\n   */\n\n\n  NumberFormat.intNumberFormatter = function (value, fOptions, dOptions) {\n    var curData;\n\n    if (isUndefined(fOptions.nData.type)) {\n      return undefined;\n    } else {\n      if (value < 0) {\n        value = value * -1;\n        curData = fOptions.nData;\n      } else if (value === 0) {\n        curData = fOptions.zeroData || fOptions.pData;\n      } else {\n        curData = fOptions.pData;\n      }\n\n      var fValue = '';\n\n      if (curData.isPercent) {\n        value = value * 100;\n      }\n\n      if (curData.groupOne) {\n        fValue = this.processSignificantDigits(value, curData.minimumSignificantDigits, curData.maximumSignificantDigits);\n      } else {\n        fValue = this.processFraction(value, curData.minimumFractionDigits, curData.maximumFractionDigits);\n\n        if (curData.minimumIntegerDigits) {\n          fValue = this.processMinimumIntegers(fValue, curData.minimumIntegerDigits);\n        }\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\n      fValue = fValue.replace('.', dOptions.numberMapper.numberSymbols[mapper[3]]);\n\n      if (curData.useGrouping) {\n        fValue = this.groupNumbers(fValue, curData.groupData.primary, curData.groupSeparator || ',', dOptions.numberMapper.numberSymbols[mapper[3]] || '.', curData.groupData.secondary);\n      }\n\n      fValue = parser.convertValueParts(fValue, base.latnParseRegex, dOptions.numberMapper.mapper);\n\n      if (curData.nlead === 'N/A') {\n        return curData.nlead;\n      } else {\n        return curData.nlead + fValue + curData.nend;\n      }\n    }\n  };\n  /**\n   * Returns significant digits processed numeric string\n   * @param {number} value\n   * @param {number} min\n   * @param {number} max\n   * @returns {string}\n   */\n\n\n  NumberFormat.processSignificantDigits = function (value, min, max) {\n    var temp = value + '';\n    var tn;\n    var length = temp.length;\n\n    if (length < min) {\n      return value.toPrecision(min);\n    } else {\n      temp = value.toPrecision(max);\n      tn = +temp;\n      return tn + '';\n    }\n  };\n  /**\n   * Returns grouped numeric string\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\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\n    while (length > level1) {\n      str = prefix.slice(length - level1, length) + (str.length ? sep + str : '');\n      length -= level1;\n\n      if (flag) {\n        level1 = level2;\n        flag = false;\n      }\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   * @param {number} value\n   * @param {number} min\n   * @param {number} max\n   * @returns {string}\n   */\n\n\n  NumberFormat.processFraction = function (value, min, max) {\n    var temp = (value + '').split('.')[1];\n    var length = temp ? temp.length : 0;\n\n    if (min && length < min) {\n      var ret = '';\n\n      if (length === 0) {\n        ret = value.toFixed(min);\n      } else {\n        ret += value;\n\n        for (var j = 0; j < min - length; j++) {\n          ret += '0';\n        }\n\n        return ret;\n      }\n\n      return value.toFixed(min);\n    } else if (!isNullOrUndefined(max) && (length > max || max === 0)) {\n      return value.toFixed(max);\n    }\n\n    return value + '';\n  };\n  /**\n   * Returns integer processed numeric string\n   * @param {string} value\n   * @param {number} min\n   * @returns {string}\n   */\n\n\n  NumberFormat.processMinimumIntegers = function (value, min) {\n    var temp = value.split('.');\n    var lead = temp[0];\n    var len = lead.length;\n\n    if (len < min) {\n      for (var i = 0; i < min - len; i++) {\n        lead = '0' + lead;\n      }\n\n      temp[0] = lead;\n    }\n\n    return temp.join('.');\n  };\n\n  return NumberFormat;\n}();\n\nexport { NumberFormat };","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 number = 'numbers';\nvar defNoSystem = 'defaultNumberingSystem';\nvar noSystem = 'numberingSystem';\nvar standalone = 'stand-alone';\nvar curWeekDay = 'curWeekDay';\nvar latnRegex = /^[0-9]*$/;\nvar abbreviateRegex = /\\/MMMMM|MMMM|MMM|a|LLLL|LLL|EEEEE|EEEE|E|ccc/;\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/**\n * Date Parser.\n * @private\n */\n\nvar DateParser =\n/** @class */\nfunction () {\n  function DateParser() {}\n  /**\n   * Returns the parser function for given skeleton.\n   * @param {string} -  Specifies the culture name to be which formatting.\n   * @param {DateFormatOptions} - Specific the format in which string date  will be parsed.\n   * @param {cldr} - Specifies the global cldr data collection.\n   *  @return Function.\n   */\n  // tslint:disable-next-line:max-func-body-length\n\n\n  DateParser.dateParser = function (culture, option, cldr) {\n    var _this = this;\n\n    var dependable = base.getDependables(cldr, culture, option.calendar); // tslint:disable-next-line\n\n    var numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), false, isBlazor());\n    var parseOptions = {};\n\n    if (isBlazor() && option.isServerRendered) {\n      option = base.compareBlazorDateFormats(option, culture);\n    }\n\n    var resPattern = option.format || base.getResultantPattern(option.skeleton, dependable.dateObject, option.type, false, isBlazor() ? culture : '');\n    var regexString = '';\n    var hourOnly;\n\n    if (isUndefined(resPattern)) {\n      throwError('Format options or type given must be invalid');\n    } else {\n      resPattern = base.ConvertDateToWeekFormat(resPattern);\n      parseOptions = {\n        isIslamic: base.islamicRegex.test(option.calendar),\n        pattern: resPattern,\n        evalposition: {},\n        culture: culture\n      };\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; // tslint:disable-next-line\n\n      var numMapper = isBlazor() ? dependable.parserObject.numbers : parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n\n      for (var i = 0; i < length_1; i++) {\n        var str = patternMatch[i];\n        var len = str.length;\n        var char = str[0] === 'K' ? 'h' : str[0];\n        var isNumber = void 0;\n        var canUpdate = void 0; // tslint:disable-next-line\n\n        var charKey = datePartMatcher[char];\n        var optional = len === 2 ? '' : '?';\n\n        if (isgmtTraversed) {\n          gmtCorrection = zCorrectTemp;\n          isgmtTraversed = false;\n        }\n\n        switch (char) {\n          case 'E':\n          case 'c':\n            // tslint:disable\n            var weekData = void 0;\n\n            if (isBlazor()) {\n              weekData = getValue('days.' + base.monthIndex[len], dependable.dateObject);\n            } else {\n              weekData = dependable.dateObject[base.days][standalone][base.monthIndex[len]];\n            }\n\n            var weekObject = parser.reverseObject(weekData); // tslint:enable\n\n            regexString += '(' + Object.keys(weekObject).join('|') + ')';\n            break;\n\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\n            if ((char === 'M' || char === 'L') && len > 2) {\n              var monthData = void 0;\n\n              if (isBlazor()) {\n                /* tslint:disable no-any */\n                monthData = getValue('months.' + base.monthIndex[len], dependable.dateObject);\n              } else {\n                /* tslint:disable no-any */\n                monthData = dependable.dateObject[month][standalone][base.monthIndex[len]];\n              } // tslint:disable-next-line\n\n\n              parseOptions[charKey] = parser.reverseObject(monthData);\n              /* tslint:disable no-any */\n\n              regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n            } else if (char === 'f') {\n              if (len > 3) {\n                continue;\n              }\n\n              isNumber = true;\n              regexString += '(' + nRegx + nRegx + '?' + nRegx + '?' + ')';\n            } else {\n              isNumber = true;\n              regexString += '(' + nRegx + nRegx + optional + ')';\n            }\n\n            if (char === 'h') {\n              parseOptions.hour12 = true;\n            }\n\n            break;\n\n          case 'W':\n            var opt = len === 1 ? '?' : '';\n            regexString += '(' + nRegx + opt + nRegx + ')';\n            break;\n\n          case 'y':\n            canUpdate = isNumber = true;\n\n            if (len === 2) {\n              regexString += '(' + nRegx + nRegx + ')';\n            } else {\n              regexString += '(' + nRegx + '{' + len + ',})';\n            }\n\n            break;\n\n          case 'a':\n            canUpdate = true;\n            var periodValur = isBlazor() ? getValue('dayPeriods', dependable.dateObject) : getValue('dayPeriods.format.wide', dependable.dateObject);\n            parseOptions[charKey] = parser.reverseObject(periodValur);\n            regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n            break;\n\n          case 'G':\n            canUpdate = true;\n            var eText = len <= 3 ? 'eraAbbr' : len === 4 ? 'eraNames' : 'eraNarrow';\n            parseOptions[charKey] = parser.reverseObject(isBlazor() ? getValue('eras', dependable.dateObject) : getValue('eras.' + eText, dependable.dateObject));\n            regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + '?)';\n            break;\n\n          case 'z':\n            var tval = new Date().getTimezoneOffset();\n            canUpdate = tval !== 0;\n            parseOptions[charKey] = getValue('dates.timeZoneNames', dependable.parserObject);\n            var tzone = parseOptions[charKey];\n            hourOnly = len < 4;\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\n          case '\\'':\n            var iString = str.replace(/\\'/g, '');\n            regexString += '(' + iString + ')?';\n            break;\n\n          default:\n            regexString += '([\\\\D])';\n            break;\n        }\n\n        if (canUpdate) {\n          parseOptions.evalposition[charKey] = {\n            isNumber: isNumber,\n            pos: i + 1 + gmtCorrection,\n            hourOnly: hourOnly\n          };\n        }\n\n        if (i === length_1 - 1 && !isNullOrUndefined(regexString)) {\n          parseOptions.parserRegex = new RegExp('^' + regexString + '$', 'i');\n        }\n      }\n    }\n\n    return function (value) {\n      var parsedDateParts = _this.internalDateParse(value, parseOptions, numOptions);\n\n      if (isNullOrUndefined(parsedDateParts) || !Object.keys(parsedDateParts).length) {\n        return null;\n      }\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\n        if (!tYear || !tMonth || !tDate || is2DigitYear) {\n          dobj = HijriParser.getHijriDate(new Date());\n        }\n\n        if (is2DigitYear) {\n          tYear = parseInt((dobj.year + '').slice(0, 2) + ystrig, 10);\n        } // tslint:disable-next-line\n\n\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\n      return _this.getDateObject(parsedDateParts);\n    };\n  };\n  /* tslint:disable */\n\n  /**\n   * Returns date object for provided date options\n   * @param {DateParts} options\n   * @param {Date} value\n   * @returns {Date}\n   */\n\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\n    if (!isUndefined(y)) {\n      var len = (y + '').length;\n\n      if (len <= 2) {\n        var century = Math.floor(res.getFullYear() / 100) * 100;\n        y += century;\n      }\n\n      res.setFullYear(y);\n    }\n\n    for (var _i = 0, tKeys_1 = tKeys; _i < tKeys_1.length; _i++) {\n      var key = tKeys_1[_i];\n      var tValue = options[key];\n\n      if (isUndefined(tValue) && key === \"day\") {\n        res.setDate(1);\n      }\n\n      if (!isUndefined(tValue)) {\n        if (key === 'month') {\n          tValue -= 1;\n\n          if (tValue < 0 || tValue > 11) {\n            return new Date('invalid');\n          }\n\n          var pDate = res.getDate();\n          res.setDate(1);\n          res[timeSetter[key]](tValue);\n          var lDate = new Date(res.getFullYear(), tValue + 1, 0).getDate();\n          res.setDate(pDate < lDate ? pDate : lDate);\n        } else {\n          if (key === 'day') {\n            var lastDay = new Date(res.getFullYear(), res.getMonth() + 1, 0).getDate();\n\n            if (tValue < 1 || tValue > lastDay) {\n              return null;\n            }\n          }\n\n          res[timeSetter[key]](tValue);\n        }\n      }\n    }\n\n    if (!isUndefined(desig)) {\n      var hour = res.getHours();\n\n      if (desig === 'pm') {\n        res.setHours(hour + (hour === 12 ? 0 : 12));\n      } else if (hour === 12) {\n        res.setHours(0);\n      }\n    }\n\n    if (!isUndefined(tzone)) {\n      var tzValue = tzone - res.getTimezoneOffset();\n\n      if (tzValue !== 0) {\n        res.setMinutes(res.getMinutes() + tzValue);\n      }\n    }\n\n    return res;\n  };\n  /**\n   * Returns date parsing options for provided value along with parse and numeric options\n   * @param {string} value\n   * @param {ParseOptions} parseOptions\n   * @param {NumericOptions} num\n   * @returns {DateParts}\n   */\n\n\n  DateParser.internalDateParse = function (value, parseOptions, num) {\n    var matches = value.match(parseOptions.parserRegex);\n    var retOptions = {\n      'hour': 0,\n      'minute': 0,\n      'second': 0\n    };\n    var nRegx = num.numericRegex;\n\n    if (isNullOrUndefined(matches)) {\n      return null;\n    } else {\n      var props = Object.keys(parseOptions.evalposition);\n\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\n        if (curObject.isNumber) {\n          retOptions[prop] = this.internalNumberParser(matchString, num);\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\n            if (curObject.hourOnly) {\n              val = this.getZoneValue(flag, tmatch, matches[pos + 4], num) * 60;\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\n            if (!isNullOrUndefined(val)) {\n              retOptions[prop] = val;\n            }\n          } else {\n            matchString = prop === 'month' && !parseOptions.isIslamic && (parseOptions.culture === 'en' || parseOptions.culture === 'en-GB' || parseOptions.culture === 'en-US') ? matchString[0].toUpperCase() + matchString.substring(1).toLowerCase() : matchString;\n            matchString = prop === 'designator' && /^(AM|PM)$/i.test(matchString) ? matchString.toUpperCase() : matchString;\n            retOptions[prop] = parseOptions[prop][matchString];\n          }\n        }\n      }\n\n      if (parseOptions.hour12) {\n        retOptions.hour12 = true;\n      }\n    }\n\n    return retOptions;\n  };\n  /**\n   * Returns parsed number for provided Numeric string and Numeric Options\n   * @param {string} value\n   * @param {NumericOptions} option\n   * @returns {number}\n   */\n\n\n  DateParser.internalNumberParser = function (value, option) {\n    value = parser.convertValueParts(value, option.numberParseRegex, option.numericPair);\n\n    if (latnRegex.test(value)) {\n      return +value;\n    }\n\n    return null;\n  };\n  /**\n   * Returns parsed time zone RegExp for provided hour format and time zone\n   * @param {string} hourFormat\n   * @param {base.TimeZoneOptions} tZone\n   * @param {string} nRegex\n   * @returns {string}\n   */\n\n\n  DateParser.parseTimeZoneRegx = function (hourFormat, tZone, nRegex) {\n    var pattern = tZone.gmtFormat;\n    var ret;\n    var result;\n    var cRegex = '(' + nRegex + ')' + '(' + nRegex + ')';\n    var splitStr;\n    ret = hourFormat.replace('+', '\\\\+');\n\n    if (hourFormat.indexOf('HH') !== -1) {\n      ret = ret.replace(/HH|mm/g, '(' + cRegex + ')');\n    } else {\n      ret = ret.replace(/H|m/g, '(' + cRegex + '?)');\n    }\n\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   * @param {boolean} flag\n   * @param {string} val1\n   * @param {string} val2\n   * @param {NumericOptions} num\n   * @returns {number}\n   */\n\n\n  DateParser.getZoneValue = function (flag, val1, val2, num) {\n    var ival = flag ? val1 : val2;\n\n    if (!ival) {\n      return 0;\n    }\n\n    var value = this.internalNumberParser(ival, num);\n\n    if (flag) {\n      return -value;\n    }\n\n    return value;\n  };\n\n  return DateParser;\n}();\n\nexport { DateParser };\n/* tslint:enable */","import { extend, isNullOrUndefined, isBlazor, getValue } from '../util';\nimport { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nvar formatRegex = /(^[ncpa]{1})([0-1]?[0-9]|20)?$/i;\nvar parseRegex = /^([^0-9]*)(([0-9,]*[0-9]+)(\\.[0-9]+)?)([Ee][+-]?[0-9]+)?([^0-9]*)$/;\nvar groupRegex = /,/g;\nvar latnDecimalRegex = /^[0-9]*(\\.[0-9]+)?$/;\nvar keys = ['minusSign', 'infinity'];\n/**\n * Module for Number Parser.\n * @private\n */\n\nvar NumberParser =\n/** @class */\nfunction () {\n  function NumberParser() {}\n  /**\n   * Returns the parser function for given skeleton.\n   * @param {string} -  Specifies the culture name to be which formatting.\n   * @param {NumberFormatOptions} - Specific the format in which number  will parsed.\n   * @param {cldr} - Specifies the global cldr data collection.\n   * @return Function.\n   */\n\n\n  NumberParser.numberParser = function (culture, option, cldr) {\n    var _this = this;\n\n    var dependable = base.getDependables(cldr, culture, '', true);\n    var parseOptions = {\n      custom: true\n    };\n    var numOptions;\n\n    if (base.formatRegex.test(option.format) || !option.format) {\n      extend(parseOptions, base.getProperNumericSkeleton(option.format || 'N'));\n      parseOptions.custom = false;\n\n      if (!parseOptions.fractionDigits) {\n        if (option.maximumFractionDigits) {\n          parseOptions.maximumFractionDigits = option.maximumFractionDigits;\n        }\n      }\n    } else {\n      extend(parseOptions, base.customFormat(option.format, null, null));\n    }\n\n    var numbers = getValue('numbers', dependable.parserObject);\n    numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), true, isBlazor());\n    parseOptions.symbolRegex = parser.getSymbolRegex(Object.keys(numOptions.symbolMatch)); // tslint:disable-next-line:no-any\n\n    parseOptions.infinity = numOptions.symbolNumberSystem[keys[1]];\n    var symbolpattern;\n\n    if (!isBlazor()) {\n      symbolpattern = base.getSymbolPattern(parseOptions.type, numOptions.numberSystem, dependable.numericObject, parseOptions.isAccount);\n\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    } else {\n      parseOptions.nData = extend({}, {}, getValue(parseOptions.type + 'nData', numbers));\n      parseOptions.pData = extend({}, {}, getValue(parseOptions.type + 'pData', numbers));\n\n      if (parseOptions.type === 'currency' && option.currency) {\n        base.replaceBlazorCurrency([parseOptions.pData, parseOptions.nData], getValue('currencySymbol', numbers), option.currency);\n      }\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   * @param {string} value\n   * @param {NumericParts} options\n   * @param {NumericOptions} numOptions\n   * @returns {number}\n   */\n\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\n    if (value.indexOf(options.infinity) !== -1) {\n      return Infinity;\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\n      if (value.indexOf('.') === 0) {\n        value = '0' + value;\n      }\n\n      var matches = value.match(parseRegex);\n\n      if (isNullOrUndefined(matches)) {\n        return NaN;\n      }\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 : lead.indexOf(options.nData.nlead) !== -1 && end.indexOf(options.nData.nend) !== -1;\n      isPercent = isNegative ? options.nData.isPercent : options.pData.isPercent;\n      tempValue = tempValue.replace(groupRegex, '');\n\n      if (exponent) {\n        tempValue += exponent;\n      }\n\n      ret = +tempValue;\n\n      if (options.type === 'percent' || isPercent) {\n        ret = ret / 100;\n      }\n\n      if (options.custom || options.fractionDigits) {\n        ret = parseFloat(ret.toFixed(options.custom ? isNegative ? options.nData.maximumFractionDigits : options.pData.maximumFractionDigits : options.fractionDigits));\n      }\n\n      if (options.maximumFractionDigits) {\n        ret = this.convertMaxFracDigits(tempValue, options, ret, isNegative);\n      }\n\n      if (isNegative) {\n        ret *= -1;\n      }\n\n      return ret;\n    }\n  };\n\n  NumberParser.convertMaxFracDigits = function (value, options, ret, isNegative) {\n    var decimalSplitValue = value.split('.');\n\n    if (decimalSplitValue[1] && decimalSplitValue[1].length > options.maximumFractionDigits) {\n      ret = +ret.toFixed(options.custom ? isNegative ? options.nData.maximumFractionDigits : options.pData.maximumFractionDigits : options.maximumFractionDigits);\n    }\n\n    return ret;\n  };\n\n  return NumberParser;\n}();\n\nexport { NumberParser };","import { isNullOrUndefined, getValue, extend, isBlazor } from './util';\n\nvar Observer =\n/** @class */\nfunction () {\n  function Observer(context) {\n    this.ranArray = [];\n    this.boundedEvents = {};\n\n    if (isNullOrUndefined(context)) {\n      return;\n    }\n\n    this.context = context;\n  }\n\n  ;\n  /**\n   * To attach handler for given property in current context.\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   * @return {void}\n   */\n\n  Observer.prototype.on = function (property, handler, context, id) {\n    if (isNullOrUndefined(handler)) {\n      return;\n    }\n\n    var cntxt = context || this.context;\n\n    if (this.notExist(property)) {\n      this.boundedEvents[property] = [{\n        handler: handler,\n        context: cntxt\n      }];\n      return;\n    }\n\n    if (!isNullOrUndefined(id)) {\n      if (this.ranArray.indexOf(id) === -1) {\n        this.ranArray.push(id);\n        this.boundedEvents[property].push({\n          handler: handler,\n          context: cntxt,\n          id: id\n        });\n      }\n    } else if (!this.isHandlerPresent(this.boundedEvents[property], handler)) {\n      this.boundedEvents[property].push({\n        handler: handler,\n        context: cntxt\n      });\n    }\n  };\n  /**\n   * To remove handlers from a event attached using on() function.\n   * @param {string} eventName - 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   * @return {void}\n   */\n\n\n  Observer.prototype.off = function (property, handler, id) {\n    if (this.notExist(property)) {\n      return;\n    }\n\n    var curObject = getValue(property, this.boundedEvents);\n\n    if (handler) {\n      for (var i = 0; i < curObject.length; i++) {\n        if (id) {\n          if (curObject[i].id === id) {\n            curObject.splice(i, 1);\n            var indexLocation = this.ranArray.indexOf(id);\n\n            if (indexLocation !== -1) {\n              this.ranArray.splice(indexLocation, 1);\n            }\n\n            break;\n          }\n        } else if (handler === curObject[i].handler) {\n          curObject.splice(i, 1);\n          break;\n        }\n      }\n    } else {\n      delete this.boundedEvents[property];\n    }\n  };\n  /**\n   * To notify the handlers in the specified event.\n   * @param {string} property - Specifies the event to be notify.\n   * @param {Object} args - 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   * @return {void}\n   */\n\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\n      return;\n    }\n\n    if (argument) {\n      argument.name = property;\n    }\n\n    var blazor = 'Blazor';\n    var curObject = getValue(property, this.boundedEvents).slice(0);\n\n    if (window[blazor]) {\n      return this.blazorCallback(curObject, argument, successHandler, errorHandler, 0);\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\n      if (successHandler) {\n        successHandler.call(this, argument);\n      }\n    }\n  };\n\n  Observer.prototype.blazorCallback = function (objs, argument, successHandler, errorHandler, index) {\n    var _this = this;\n\n    var isTrigger = index === objs.length - 1;\n\n    if (index < objs.length) {\n      var obj_1 = objs[index];\n      var promise = obj_1.handler.call(obj_1.context, argument);\n\n      if (promise && typeof promise.then === 'function') {\n        if (!successHandler) {\n          return promise;\n        }\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\n          if (successHandler && isTrigger) {\n            successHandler.call(obj_1.context, argument);\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' && _this.isJson(data) ? JSON.parse(data, _this.dateReviver) : data);\n          }\n        });\n      } else if (successHandler && isTrigger) {\n        successHandler.call(obj_1.context, argument);\n      } else {\n        return this.blazorCallback(objs, argument, successHandler, errorHandler, index + 1);\n      }\n    }\n  }; // tslint:disable-next-line:no-any\n\n\n  Observer.prototype.dateReviver = function (key, value) {\n    var dPattern = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/;\n\n    if (isBlazor && typeof value === 'string' && value.match(dPattern) !== null) {\n      return new Date(value);\n    }\n\n    return value;\n  };\n\n  Observer.prototype.isJson = function (value) {\n    try {\n      JSON.parse(value);\n    } catch (e) {\n      return false;\n    }\n\n    return true;\n  };\n  /**\n   * To destroy handlers in the event\n   */\n\n\n  Observer.prototype.destroy = function () {\n    this.boundedEvents = this.context = undefined;\n  };\n  /**\n   * Returns if the property exists.\n   */\n\n\n  Observer.prototype.notExist = function (prop) {\n    return this.boundedEvents.hasOwnProperty(prop) === false || this.boundedEvents[prop].length <= 0;\n  };\n  /**\n   * Returns if the handler is present.\n   */\n\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\n      if (cur.handler === handler) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  return Observer;\n}();\n\nexport { Observer };","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 */\n\nexport var onIntlChange = new Observer();\n/**\n * Specifies the default rtl status for EJ2 components.\n */\n\nexport var rightToLeft = false;\n/**\n * Specifies the CLDR data loaded for internationalization functionalities.\n * @private\n */\n\nexport var cldrData = {};\n/**\n * Specifies the default culture value to be considered.\n * @private\n */\n\nexport var defaultCulture = 'en-US';\n/**\n * Specifies default currency code to be considered\n * @private\n */\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 */\n\nvar Internationalization =\n/** @class */\nfunction () {\n  function Internationalization(cultureName) {\n    if (cultureName) {\n      this.culture = cultureName;\n    }\n  }\n  /**\n   * Returns the format function for given options.\n   * @param {DateFormatOptions} options - Specifies the format options in which the format function will return.\n   * @returns {Function}\n   */\n\n\n  Internationalization.prototype.getDateFormat = function (options) {\n    return DateFormat.dateFormat(this.getCulture(), options || {\n      type: 'date',\n      skeleton: 'short'\n    }, cldrData);\n  };\n  /**\n   * Returns the format function for given options.\n   * @param {NumberFormatOptions} options - Specifies the format options in which the format function will return.\n   * @returns {Function}\n   */\n\n\n  Internationalization.prototype.getNumberFormat = function (options) {\n    if (options && !options.currency) {\n      options.currency = defaultCurrencyCode;\n    }\n\n    if (isBlazor() && options && !options.format) {\n      options.minimumFractionDigits = 0;\n    }\n\n    return NumberFormat.numberFormatter(this.getCulture(), options || {}, cldrData);\n  };\n  /**\n   * Returns the parser function for given options.\n   * @param {DateFormatOptions} options - Specifies the format options in which the parser function will return.\n   * @returns {Function}\n   */\n\n\n  Internationalization.prototype.getDateParser = function (options) {\n    return DateParser.dateParser(this.getCulture(), options || {\n      skeleton: 'short',\n      type: 'date'\n    }, cldrData);\n  };\n  /**\n   * Returns the parser function for given options.\n   * @param {NumberFormatOptions} options - Specifies the format options in which the parser function will return.\n   * @returns {Function}\n   */\n\n\n  Internationalization.prototype.getNumberParser = function (options) {\n    if (isBlazor() && options && !options.format) {\n      options.minimumFractionDigits = 0;\n    }\n\n    return NumberParser.numberParser(this.getCulture(), options || {\n      format: 'N'\n    }, cldrData);\n  };\n  /**\n   * Returns the formatted string based on format options.\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\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   * @param {Number} 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\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   * @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\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   * @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\n\n  Internationalization.prototype.parseNumber = function (value, option) {\n    return this.getNumberParser(option)(value);\n  };\n  /**\n   * Returns Native Date Time Pattern\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\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   * @param {NumberFormatOptions} option - Specifies the parse options for resultant number pattern.\n   * @returns {string}\n   * @private\n   */\n\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   * @returns {number}\n   */\n\n\n  Internationalization.prototype.getFirstDayOfWeek = function () {\n    return IntlBase.getWeekData(this.getCulture(), cldrData);\n  };\n\n  Internationalization.prototype.getCulture = function () {\n    return this.culture || defaultCulture;\n  };\n\n  return Internationalization;\n}();\n\nexport { Internationalization };\n/**\n * Set the default culture to all EJ2 components\n * @param {string} cultureName - Specifies the culture name to be set as default culture.\n */\n\nexport function setCulture(cultureName) {\n  defaultCulture = cultureName;\n  onIntlChange.notify('notifyExternalChange', {\n    'locale': defaultCulture\n  });\n}\n/**\n * Set the default currency code to all EJ2 components\n * @param {string} currencyCode Specifies the culture name to be set as default culture.\n * @returns {void}\n */\n\nexport function setCurrencyCode(currencyCode) {\n  defaultCurrencyCode = currencyCode;\n  onIntlChange.notify('notifyExternalChange', {\n    'currencyCode': defaultCurrencyCode\n  });\n}\n/**\n * Load the CLDR data into context\n * @param {Object[]} obj Specifies the CLDR data's to be used for formatting and parser.\n * @returns {void}\n */\n\nexport function loadCldr() {\n  var data = [];\n\n  for (var _i = 0; _i < arguments.length; _i++) {\n    data[_i] = arguments[_i];\n  }\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 * @param {boolean} status - Optional argument Specifies the status value to enable or disable rtl option.\n * @returns {void}\n */\n\nexport function enableRtl(status) {\n  if (status === void 0) {\n    status = true;\n  }\n\n  rightToLeft = status;\n  onIntlChange.notify('notifyExternalChange', {\n    enableRtl: rightToLeft\n  });\n}\n/**\n * To get the numeric CLDR object for given culture\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @ignore\n * @private\n */\n\nexport function getNumericObject(locale, type) {\n  /* tslint:disable no-any */\n  var numObject = IntlBase.getDependables(cldrData, locale, '', true)[mapper[0]];\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), {\n    'dateSeparator': IntlBase.getDateSeparator(dateObject)\n  });\n}\n/**\n * To get the numeric CLDR  number base object for given culture\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 * @ignore\n * @private\n */\n\nexport function getNumberDependable(locale, currency) {\n  var numObject = IntlBase.getDependables(cldrData, locale, '', true);\n  return IntlBase.getCurrencySymbol(numObject.numericObject, currency);\n}\n/**\n * To get the default date CLDR object.\n * @ignore\n * @private\n */\n\nexport function getDefaultDateObject(mode) {\n  return IntlBase.getDependables(cldrData, '', mode, false)[mapper[1]];\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';\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\nexport var IntlBase;\n\n(function (IntlBase) {\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#]*)?)|([#,]*@+#*))(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 = /(^[ncpae]{1})([0-1]?[0-9]|20)?$/i;\n  IntlBase.currencyFormatRegex = /(^[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\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\n  IntlBase.monthIndex = {\n    3: 'abbreviated',\n    4: 'wide',\n    5: 'narrow',\n    1: 'abbreviated'\n  };\n  /**\n   *\n   */\n\n  IntlBase.month = 'months';\n  IntlBase.days = 'days';\n  /**\n   * Default numerber Object\n   */\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   * @private\n   * @param {string} skeleton\n   * @param {Object} dateObject\n   * @param {string} type\n   * @returns {string}\n   */\n\n  function getResultantPattern(skeleton, dateObject, type, isIslamic, blazorCulture) {\n    var resPattern;\n    var iType = type || 'date';\n\n    if (blazorCulture) {\n      resPattern = compareBlazorDateFormats({\n        skeleton: skeleton\n      }, blazorCulture).format || compareBlazorDateFormats({\n        skeleton: 'd'\n      }, 'en-US').format;\n    } else {\n      if (IntlBase.basicPatterns.indexOf(skeleton) !== -1) {\n        resPattern = getValue(iType + 'Formats.' + skeleton, dateObject);\n\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      } else {\n        resPattern = getValue('dateTimeFormats.availableFormats.' + skeleton, dateObject);\n      }\n\n      if (isUndefined(resPattern) && skeleton === 'yMd') {\n        resPattern = 'M/d/y';\n      }\n    }\n\n    return resPattern;\n  }\n\n  IntlBase.getResultantPattern = getResultantPattern;\n  /**\n   * Returns the dependable object for provided cldr data and culture\n   * @private\n   * @param {Object} cldr\n   * @param {string} culture\n   * @param {boolean} isNumber\n   * @returns {Dependables}\n   */\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\n    if (isNumber) {\n      ret.numericObject = getValue('numbers', ret.parserObject);\n    } else {\n      var dateString = isBlazor() ? 'dates' : 'dates.calendars.' + calendartype;\n      ret.dateObject = getValue(dateString, ret.parserObject);\n    }\n\n    return ret;\n  }\n\n  IntlBase.getDependables = getDependables;\n  /**\n   * Returns the symbol pattern for provided parameters\n   * @private\n   * @param {string} type\n   * @param {string} numSystem\n   * @param {Object} obj\n   * @param {boolean} isAccount\n   * @returns {string}\n   */\n\n  function getSymbolPattern(type, numSystem, obj, isAccount) {\n    return getValue(type + 'Formats-numberSystem-' + numSystem + (isAccount ? '.accounting' : '.standard'), obj) || (isAccount ? getValue(type + 'Formats-numberSystem-' + numSystem + '.standard', obj) : '');\n  }\n\n  IntlBase.getSymbolPattern = getSymbolPattern;\n\n  function ConvertDateToWeekFormat(format) {\n    var convertMapper = format.match(IntlBase.dateConverterMapper);\n\n    if (convertMapper && isBlazor()) {\n      var tempString = convertMapper[0].length === 3 ? 'EEE' : 'EEEE';\n      return format.replace(IntlBase.dateConverterMapper, tempString);\n    }\n\n    return format;\n  }\n\n  IntlBase.ConvertDateToWeekFormat = ConvertDateToWeekFormat;\n\n  function compareBlazorDateFormats(formatOptions, culture) {\n    var format = formatOptions.format || formatOptions.skeleton;\n    var curFormatMapper = getValue((culture || 'en-US') + '.' + format, blazorCultureFormats);\n\n    if (!curFormatMapper) {\n      curFormatMapper = getValue('en-US.' + format, blazorCultureFormats);\n    }\n\n    if (curFormatMapper) {\n      curFormatMapper = ConvertDateToWeekFormat(curFormatMapper);\n      formatOptions.format = curFormatMapper.replace(/tt/, 'a');\n    }\n\n    return formatOptions;\n  }\n\n  IntlBase.compareBlazorDateFormats = compareBlazorDateFormats;\n  /**\n   * Returns proper numeric skeleton\n   * @private\n   * @param {string} skeleton\n   * @returns {NumericSkeleton}\n   */\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    /* tslint:disable no-any */\n\n    ret.type = IntlBase.patternMatcher[pattern];\n\n    if (skeleton.length > 1) {\n      ret.fractionDigits = parseInt(matches[2], 10);\n    }\n\n    return ret;\n  }\n\n  IntlBase.getProperNumericSkeleton = getProperNumericSkeleton;\n  /**\n   * Returns format data for number formatting like minimum fraction, maximum fraction, etc..,\n   * @private\n   * @param {string} pattern\n   * @param {boolean} needFraction\n   * @param {string} cSymbol\n   * @param {boolean} fractionOnly\n   * @returns {NegativeData}\n   */\n\n  function getFormatData(pattern, needFraction, cSymbol, fractionOnly) {\n    var nData = fractionOnly ? {} : {\n      nlead: '',\n      nend: ''\n    };\n    var match = pattern.match(IntlBase.customRegex);\n\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\n      var fraction = match[7];\n\n      if (fraction && needFraction) {\n        var fmatch = fraction.match(fractionRegex);\n\n        if (!isNullOrUndefined(fmatch)) {\n          nData.minimumFraction = fmatch.length;\n        } else {\n          nData.minimumFraction = 0;\n        }\n\n        nData.maximumFraction = fraction.length - 1;\n      }\n    }\n\n    return nData;\n  }\n\n  IntlBase.getFormatData = getFormatData;\n  /**\n   * Changes currency symbol\n   * @private\n   * @param {string} val\n   * @param {string} sym\n   * @returns {string}\n   */\n\n  function changeCurrencySymbol(val, sym) {\n    if (val) {\n      return val.replace(IntlBase.defaultCurrency, sym);\n    }\n\n    return '';\n  }\n  /**\n   * Returns currency symbol based on currency code\n   * @private\n   * @param {Object} numericObject\n   * @param {string} currencyCode\n   * @returns {string}\n   */\n\n\n  function getCurrencySymbol(numericObject, currencyCode, altSymbol) {\n    var symbol = altSymbol ? '.' + altSymbol : '.symbol';\n    var getCurrency = getValue('currencies.' + currencyCode + symbol, numericObject) || getValue('currencies.' + currencyCode + '.symbol-alt-narrow', numericObject) || '$';\n    return getCurrency;\n  }\n\n  IntlBase.getCurrencySymbol = getCurrencySymbol;\n  /**\n   * Returns formatting options for custom number format\n   * @private\n   * @param {string} format\n   * @param {CommonOptions} dOptions\n   * @param {Dependables} obj\n   * @returns {GenericFormatOptions}\n   */\n\n  function customFormat(format, dOptions, obj) {\n    var options = {};\n    var formatSplit = format.split(';');\n    var data = ['pData', 'nData', 'zeroData'];\n\n    for (var i = 0; i < formatSplit.length; i++) {\n      options[data[i]] = customNumberFormat(formatSplit[i], dOptions, obj);\n    }\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\n    return options;\n  }\n\n  IntlBase.customFormat = customFormat;\n  /**\n   * Returns custom formatting options\n   * @private\n   * @param {string} format\n   * @param {CommonOptions} dOptions\n   * @param {Object} numObject\n   * @returns {NegativeData}\n   */\n\n  function customNumberFormat(format, dOptions, numObject) {\n    var cOptions = {\n      type: 'decimal',\n      minimumFractionDigits: 0,\n      maximumFractionDigits: 0\n    };\n    var pattern = format.match(IntlBase.customRegex);\n\n    if (isNullOrUndefined(pattern) || pattern[5] === '' && format !== 'N/A') {\n      cOptions.type = undefined;\n      return cOptions;\n    }\n\n    cOptions.nlead = pattern[1];\n    cOptions.nend = pattern[10];\n    var integerPart = pattern[6];\n    cOptions.useGrouping = integerPart.indexOf(',') !== -1;\n    integerPart = integerPart.replace(/,/g, '');\n    var fractionPart = pattern[7];\n\n    if (integerPart.indexOf('0') !== -1) {\n      cOptions.minimumIntegerDigits = integerPart.length - integerPart.indexOf('0');\n    }\n\n    if (!isNullOrUndefined(fractionPart)) {\n      cOptions.minimumFractionDigits = fractionPart.lastIndexOf('0');\n      cOptions.maximumFractionDigits = fractionPart.lastIndexOf('#');\n\n      if (cOptions.minimumFractionDigits === -1) {\n        cOptions.minimumFractionDigits = 0;\n      }\n\n      if (cOptions.maximumFractionDigits === -1 || cOptions.maximumFractionDigits < cOptions.minimumFractionDigits) {\n        cOptions.maximumFractionDigits = cOptions.minimumFractionDigits;\n      }\n    }\n\n    if (!isNullOrUndefined(dOptions)) {\n      extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '$', dOptions.currencySymbol));\n\n      if (!cOptions.isCurrency) {\n        extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', dOptions.percentSymbol));\n      }\n    } else {\n      extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', '%'));\n    }\n\n    if (!isNullOrUndefined(numObject)) {\n      var symbolPattern = getSymbolPattern(cOptions.type, dOptions.numberMapper.numberSystem, numObject, false);\n\n      if (cOptions.useGrouping) {\n        cOptions.groupSeparator = dOptions.numberMapper.numberSymbols[mapper[2]];\n        cOptions.groupData = NumberFormat.getGroupingDetails(symbolPattern.split(';')[0]);\n      }\n\n      cOptions.nlead = cOptions.nlead.replace(/\\'/g, '');\n      cOptions.nend = cOptions.nend.replace(/\\'/g, '');\n    }\n\n    return cOptions;\n  }\n  /**\n   * Returns formatting options for currency or percent type\n   * @private\n   * @param {string[]} parts\n   * @param {string} actual\n   * @param {string} symbol\n   * @returns {NegativeData}\n   */\n\n\n  function isCurrencyPercent(parts, actual, symbol) {\n    var options = {\n      nlead: parts[0],\n      nend: parts[1]\n    };\n\n    for (var i = 0; i < 2; i++) {\n      var part = parts[i];\n      var loc = part.indexOf(actual);\n\n      if (loc !== -1 && (loc < part.indexOf('\\'') || loc > part.lastIndexOf('\\''))) {\n        options[typeMapper[i]] = part.substr(0, loc) + symbol + part.substr(loc + 1);\n        options[typeMapper[actual]] = true;\n        options.type = options.isCurrency ? 'currency' : 'percent';\n        break;\n      }\n    }\n\n    return options;\n  }\n\n  IntlBase.isCurrencyPercent = isCurrencyPercent;\n  /**\n   * Returns culture based date separator\n   * @private\n   * @param {Object} dateObj\n   * @returns {string}\n   */\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\n  IntlBase.getDateSeparator = getDateSeparator;\n  /**\n   * Returns Native Date Time pattern\n   * @private\n   * @param {string} culture\n   * @param {DateFormatOptions} options\n   * @param {Object} cldr\n   * @returns {string}\n   */\n\n  function getActualDateTimeFormat(culture, options, cldr, isExcelFormat) {\n    var dependable = getDependables(cldr, culture, options.calendar);\n\n    if (isBlazor()) {\n      options = compareBlazorDateFormats(options, culture);\n    }\n\n    var actualPattern = options.format || getResultantPattern(options.skeleton, dependable.dateObject, options.type);\n\n    if (isExcelFormat) {\n      actualPattern = actualPattern.replace(patternRegex, function (pattern) {\n        return patternMatch[pattern];\n      });\n\n      if (actualPattern.indexOf('z') !== -1) {\n        var tLength = actualPattern.match(/z/g).length;\n        var timeZonePattern = void 0;\n        var options_1 = {\n          'timeZone': {}\n        };\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\n        if (timezone === 0) {\n          timeZonePattern = options_1.timeZone.gmtZeroFormat;\n        } else {\n          timeZonePattern = DateFormat.getTimeZoneValue(timezone, pattern);\n          timeZonePattern = options_1.timeZone.gmtFormat.replace(/\\{0\\}/, timeZonePattern);\n        }\n\n        actualPattern = actualPattern.replace(/[z]+/, '\"' + timeZonePattern + '\"');\n      }\n\n      actualPattern = actualPattern.replace(/ $/, '');\n    }\n\n    return actualPattern;\n  }\n\n  IntlBase.getActualDateTimeFormat = getActualDateTimeFormat; // tslint:disable-next-line:no-any\n\n  function processSymbol(actual, option) {\n    if (actual.indexOf(',') !== -1) {\n      // tslint:disable-next-line:no-any\n      var split = actual.split(',');\n      actual = split[0] + getValue('numberMapper.numberSymbols.group', option) + split[1].replace('.', getValue('numberMapper.numberSymbols.decimal', option));\n    } else {\n      actual = actual.replace('.', getValue('numberMapper.numberSymbols.decimal', option));\n    }\n\n    return actual;\n  }\n  /**\n   * Returns Native Number pattern\n   * @private\n   * @param {string} culture\n   * @param {NumberFormatOptions} options\n   * @param {Object} cldr\n   * @returns {string}\n   */\n\n\n  function getActualNumberFormat(culture, options, cldr, isExcel) {\n    var dependable = getDependables(cldr, culture, '', true);\n    var parseOptions = {\n      custom: true\n    };\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\n    if (curMatch) {\n      dOptions.numberMapper = isBlazor() ? extend({}, dependable.numericObject) : parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n      var curCode = isBlazor() ? getValue('currencySymbol', dependable.numericObject) : 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) : getFormatData(split[1] || '-' + split[0], true, curCode);\n      curObj.pData = isBlazor() ? getValue(type.type + 'pData', numrericObject) : getFormatData(split[0], false, curCode);\n\n      if (!curMatch[2] && !options.minimumFractionDigits && !options.maximumFractionDigits) {\n        minFrac = getFormatData(symbolPattern.split(';')[0], true, '', true).minimumFraction;\n      }\n    }\n\n    var actualPattern;\n\n    if (IntlBase.formatRegex.test(options.format) || !options.format) {\n      extend(parseOptions, getProperNumericSkeleton(options.format || 'N'));\n      parseOptions.custom = false;\n      actualPattern = '###0';\n\n      if (parseOptions.fractionDigits || options.minimumFractionDigits || options.maximumFractionDigits || minFrac) {\n        var defaultMinimum = 0;\n\n        if (parseOptions.fractionDigits) {\n          options.minimumFractionDigits = options.maximumFractionDigits = parseOptions.fractionDigits;\n        }\n\n        actualPattern = fractionDigitsPattern(actualPattern, minFrac || parseOptions.fractionDigits || options.minimumFractionDigits || defaultMinimum, options.maximumFractionDigits || defaultMinimum);\n      }\n\n      if (options.minimumIntegerDigits) {\n        actualPattern = minimumIntegerPattern(actualPattern, options.minimumIntegerDigits);\n      }\n\n      if (options.useGrouping) {\n        actualPattern = groupingPattern(actualPattern);\n      }\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\n        var cPattern = actualPattern;\n        actualPattern = curObj.pData.nlead + cPattern + curObj.pData.nend;\n\n        if (curObj.hasNegativePattern || isBlazor()) {\n          actualPattern += ';' + curObj.nData.nlead + cPattern + curObj.nData.nend;\n        }\n      }\n\n      if (parseOptions.type === 'percent' && !isBlazor()) {\n        actualPattern += ' %';\n      }\n    } else {\n      actualPattern = options.format.replace(/\\'/g, '\"');\n    }\n\n    if (Object.keys(dOptions).length > 0) {\n      actualPattern = !isExcel ? processSymbol(actualPattern, dOptions) : actualPattern;\n    }\n\n    return actualPattern;\n  }\n\n  IntlBase.getActualNumberFormat = getActualNumberFormat;\n\n  function fractionDigitsPattern(pattern, minDigits, maxDigits) {\n    pattern += '.';\n\n    for (var a = 0; a < minDigits; a++) {\n      pattern += '0';\n    }\n\n    if (minDigits < maxDigits) {\n      var diff = maxDigits - minDigits;\n\n      for (var b = 0; b < diff; b++) {\n        pattern += '#';\n      }\n    }\n\n    return pattern;\n  }\n\n  function minimumIntegerPattern(pattern, digits) {\n    var temp = pattern.split('.');\n    var integer = '';\n\n    for (var x = 0; x < digits; x++) {\n      integer += '0';\n    }\n\n    return temp[1] ? integer + '.' + temp[1] : integer;\n  }\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\n    for (var x = integer.length - 1; x > 0; x = x - 3) {\n      pattern = ',' + integer[x - 2] + integer[x - 1] + integer[x] + pattern;\n    }\n\n    pattern = pattern.slice(1);\n    return temp[1] ? pattern + '.' + temp[1] : pattern;\n  }\n\n  function getWeekData(culture, cldr) {\n    var firstDay = defaultFirstDay;\n    var mapper = getValue('supplemental.weekData.firstDay', cldr);\n    var iCulture = culture;\n\n    if (/en-/.test(iCulture)) {\n      iCulture = iCulture.slice(3);\n    }\n\n    iCulture = iCulture.slice(0, 2).toUpperCase() + iCulture.substr(2);\n\n    if (mapper) {\n      firstDay = mapper[iCulture] || defaultFirstDay;\n    }\n\n    return firstDayMapper[firstDay];\n  }\n\n  IntlBase.getWeekData = getWeekData;\n  /**\n   * @private\n   * @param pData\n   * @param aCurrency\n   * @param rCurrency\n   */\n\n  function replaceBlazorCurrency(pData, aCurrency, rCurrency) {\n    var iCurrency = getBlazorCurrencySymbol(rCurrency);\n\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\n  IntlBase.replaceBlazorCurrency = replaceBlazorCurrency;\n  /**\n   * @private\n   */\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() - (date.getTimezoneOffset() - newYear.getTimezoneOffset()) * 60000) / 86400000) + 1;\n\n    if (day < 4) {\n      weeknum = Math.floor((daynum + day - 1) / 7) + 1;\n\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    } else {\n      weeknum = Math.floor((daynum + day - 1) / 7);\n    }\n\n    return weeknum;\n  }\n\n  IntlBase.getWeekOfYear = getWeekOfYear;\n})(IntlBase || (IntlBase = {}));","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 */\n\nvar Ajax =\n/** @class */\nfunction () {\n  /**\n   * Constructor for Ajax class\n   * @param  {string|Object} options?\n   * @param  {string} type?\n   * @param  {boolean} async?\n   * @returns defaultType\n   */\n  function Ajax(options, type, async, contentType) {\n    /**\n     * A boolean value indicating whether the request should be sent asynchronous or not.\n     * @default true\n     */\n    this.mode = true;\n    /**\n     * A boolean value indicating whether to ignore the promise reject.\n     * @private\n     * @default true\n     */\n\n    this.emitError = true;\n    this.options = {};\n\n    if (typeof options === 'string') {\n      this.url = options;\n      this.type = type ? type.toUpperCase() : defaultType;\n      this.mode = !isNullOrUndefined(async) ? async : true;\n    } else if (typeof options === 'object') {\n      this.options = options;\n      merge(this, this.options);\n    }\n\n    this.type = this.type ? this.type.toUpperCase() : defaultType;\n    this.contentType = this.contentType !== undefined ? this.contentType : contentType;\n  }\n  /**\n   * Send the request to server.\n   * @param {any} data - To send the user data\n   * @return {Promise}\n   */\n\n\n  Ajax.prototype.send = function (data) {\n    var _this = this;\n\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\n      _this.httpRequest.onreadystatechange = function () {\n        _this.stateChange(resolve, reject);\n      };\n\n      if (!isNullOrUndefined(_this.onLoad)) {\n        _this.httpRequest.onload = _this.onLoad;\n      }\n\n      if (!isNullOrUndefined(_this.onProgress)) {\n        _this.httpRequest.onprogress = _this.onProgress;\n      }\n      /* istanbul ignore next */\n\n\n      if (!isNullOrUndefined(_this.onAbort)) {\n        _this.httpRequest.onabort = _this.onAbort;\n      }\n      /* istanbul ignore next */\n\n\n      if (!isNullOrUndefined(_this.onError)) {\n        _this.httpRequest.onerror = _this.onError;\n      } //** Upload Events **/\n\n      /* istanbul ignore next */\n\n\n      if (!isNullOrUndefined(_this.onUploadProgress)) {\n        _this.httpRequest.upload.onprogress = _this.onUploadProgress;\n      }\n\n      _this.httpRequest.open(_this.type, _this.url, _this.mode); // Set default headers\n\n\n      if (!isNullOrUndefined(_this.data) && _this.contentType !== null) {\n        _this.httpRequest.setRequestHeader('Content-Type', _this.contentType || 'application/json; charset=utf-8');\n      }\n\n      if (_this.beforeSend) {\n        eventArgs.httpRequest = _this.httpRequest;\n\n        _this.beforeSend(eventArgs);\n      }\n\n      if (!eventArgs.cancel) {\n        _this.httpRequest.send(!isNullOrUndefined(_this.data) ? _this.data : null);\n      }\n    });\n    return promise;\n  };\n\n  Ajax.prototype.successHandler = function (data) {\n    if (this.onSuccess) {\n      this.onSuccess(data, this);\n    }\n\n    return data;\n  };\n\n  Ajax.prototype.failureHandler = function (reason) {\n    if (this.onFailure) {\n      this.onFailure(this.httpRequest);\n    }\n\n    return reason;\n  };\n\n  Ajax.prototype.stateChange = function (resolve, reject) {\n    var data = this.httpRequest.responseText;\n\n    if (this.dataType && this.dataType.toLowerCase() === 'json') {\n      if (data === '') {\n        data = undefined;\n      } else {\n        try {\n          data = JSON.parse(data);\n        } catch (error) {// no exception handle\n        }\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      } else {\n        if (this.emitError) {\n          reject(new Error(this.failureHandler(this.httpRequest.statusText)));\n        } else {\n          resolve();\n        }\n      }\n    }\n  };\n  /**\n   * To get the response header from XMLHttpRequest\n   * @param  {string} key Key to search in the response header\n   * @returns {string}\n   */\n\n\n  Ajax.prototype.getResponseHeader = function (key) {\n    var responseHeaders;\n    var header;\n    responseHeaders = {};\n    var headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n\n    while (headers) {\n      responseHeaders[headers[1].toLowerCase()] = headers[2];\n      headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n    }\n\n    header = responseHeaders[key.toLowerCase()];\n    return isNullOrUndefined(header) ? null : header;\n  };\n\n  return Ajax;\n}();\n\nexport { Ajax };","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  */\n\nif (typeof window !== 'undefined') {\n  window.browserDetails = window.browserDetails || {};\n}\n/**\n * Get configuration details for Browser\n * @private\n */\n\n\nvar Browser =\n/** @class */\nfunction () {\n  function Browser() {}\n\n  Browser.extractBrowserDetail = function () {\n    var browserInfo = {\n      culture: {}\n    };\n    var keys = Object.keys(REGX_BROWSER);\n    var clientInfo = [];\n\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\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\n        if (!!Browser.userAgent.match(REGX_IE11)) {\n          browserInfo.name = 'msie';\n          break;\n        }\n\n        var version = Browser.userAgent.match(REGX_VERSION);\n\n        if (browserInfo.name === 'safari' && version) {\n          browserInfo.version = version[2];\n        }\n\n        break;\n      }\n    }\n\n    return browserInfo;\n  };\n  /**\n   * To get events from the browser\n   * @param {string} event - type of event triggered.\n   * @returns {Boolean}\n   */\n\n\n  Browser.getEvent = function (event) {\n    // tslint:disable-next-line:no-any\n    var events = {\n      start: {\n        isPointer: 'pointerdown',\n        isTouch: 'touchstart',\n        isDevice: 'mousedown'\n      },\n      move: {\n        isPointer: 'pointermove',\n        isTouch: 'touchmove',\n        isDevice: 'mousemove'\n      },\n      end: {\n        isPointer: 'pointerup',\n        isTouch: 'touchend',\n        isDevice: 'mouseup'\n      },\n      cancel: {\n        isPointer: 'pointercancel',\n        isTouch: 'touchcancel',\n        isDevice: 'mouseleave'\n      }\n    };\n    return Browser.isPointer && !Browser.isWindows ? events[event].isPointer : Browser.isTouch ? events[event].isTouch + (!Browser.isDevice ? ' ' + events[event].isDevice : '') : events[event].isDevice;\n  };\n  /**\n   * To get the Touch start event from browser\n   * @returns {string}\n   */\n\n\n  Browser.getTouchStartEvent = function () {\n    return Browser.getEvent('start');\n  };\n  /**\n   * To get the Touch end event from browser\n   * @returns {string}\n   */\n\n\n  Browser.getTouchEndEvent = function () {\n    return Browser.getEvent('end');\n  };\n  /**\n   * To get the Touch move event from browser\n   * @returns {string}\n   */\n\n\n  Browser.getTouchMoveEvent = function () {\n    return Browser.getEvent('move');\n  };\n  /**\n   * To cancel the touch event from browser\n   * @returns {string}\n   */\n\n\n  Browser.getTouchCancelEvent = function () {\n    return Browser.getEvent('cancel');\n  };\n  /**\n   * To get the value based on provided key and regX\n   * @param {string} key\n   * @param {RegExp} regX\n   * @returns {Object}\n   */\n\n\n  Browser.getValue = function (key, regX) {\n    var browserDetails = window.browserDetails;\n\n    if ('undefined' === typeof browserDetails[key]) {\n      return browserDetails[key] = regX.test(Browser.userAgent);\n    }\n\n    return browserDetails[key];\n  };\n\n  Object.defineProperty(Browser, \"userAgent\", {\n    get: function get() {\n      return Browser.uA;\n    },\n    //Properties \n\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    set: function set(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    /**\n     * Property is to get the browser information like Name, Version and Language\n     * @returns BrowserInfo\n     */\n    get: function get() {\n      if (isUndefined(window.browserDetails.info)) {\n        return window.browserDetails.info = Browser.extractBrowserDetail();\n      }\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    get: function get() {\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    get: function get() {\n      if (isUndefined(window.browserDetails.isTouch)) {\n        return window.browserDetails.isTouch = 'ontouchstart' in window.navigator || window && window.navigator && window.navigator.maxTouchPoints > 0 || 'ontouchstart' in window;\n      }\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    get: function get() {\n      if (isUndefined(window.browserDetails.isPointer)) {\n        return window.browserDetails.isPointer = 'pointerEnabled' in window.navigator;\n      }\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    get: function get() {\n      if (isUndefined(window.browserDetails.isMSPointer)) {\n        return window.browserDetails.isMSPointer = 'msPointerEnabled' in window.navigator;\n      }\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    get: function get() {\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    get: function get() {\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    get: function get() {\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    get: function get() {\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    get: function get() {\n      if (isUndefined(window.browserDetails.isWebView)) {\n        window.browserDetails.isWebView = !(isUndefined(window.cordova) && isUndefined(window.PhoneGap) && isUndefined(window.phonegap) && window.forge !== 'object');\n        return window.browserDetails.isWebView;\n      }\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    get: function get() {\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    get: function get() {\n      if (isUndefined(window.browserDetails.touchStartEvent)) {\n        return window.browserDetails.touchStartEvent = Browser.getTouchStartEvent();\n      }\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    get: function get() {\n      if (isUndefined(window.browserDetails.touchMoveEvent)) {\n        return window.browserDetails.touchMoveEvent = Browser.getTouchMoveEvent();\n      }\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    get: function get() {\n      if (isUndefined(window.browserDetails.touchEndEvent)) {\n        return window.browserDetails.touchEndEvent = Browser.getTouchEndEvent();\n      }\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    get: function get() {\n      if (isUndefined(window.browserDetails.touchCancelEvent)) {\n        return window.browserDetails.touchCancelEvent = Browser.getTouchCancelEvent();\n      }\n\n      return window.browserDetails.touchCancelEvent;\n    },\n    enumerable: true,\n    configurable: true\n  });\n  /* istanbul ignore next */\n\n  Browser.uA = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n  return Browser;\n}();\n\nexport { Browser };","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 * @private\n * ```html\n * <div id=\"Eventdiv\">  </div>\n * <script>\n *   let node: HTMLElement = document.querySelector(\"#Eventdiv\");\n *   EventHandler.addEventListener(node, \"click\", function(){\n *       // click handler function code\n *   });\n *   EventHandler.addEventListener(node, \"onmouseover\", function(){\n *       // mouseover handler function code\n *   });\n *   EventHandler.removeEventListener(node, \"click\", function(){\n *       // click handler function code\n *   });\n *   eventObj.clearEvents();\n * </script>\n * ```\n */\n\nvar EventHandler =\n/** @class */\nfunction () {\n  function EventHandler() {} // to get the event data based on element\n\n\n  EventHandler.addOrGetEventData = function (element) {\n    if ('__eventList' in element) {\n      return element.__eventList.events;\n    } else {\n      element.__eventList = {};\n      return element.__eventList.events = [];\n    }\n  };\n  /**\n   * Add an event to the specified DOM element.\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} debounce - Specifies at what interval given event listener should be triggered.\n   * @return {Function}\n   */\n\n\n  EventHandler.add = function (element, eventName, listener, bindTo, intDebounce) {\n    var eventData = EventHandler.addOrGetEventData(element);\n    var debounceListener;\n\n    if (intDebounce) {\n      debounceListener = debounce(listener, intDebounce);\n    } else {\n      debounceListener = listener;\n    }\n\n    if (bindTo) {\n      debounceListener = debounceListener.bind(bindTo);\n    }\n\n    var event = eventName.split(' ');\n\n    for (var i = 0; i < event.length; i++) {\n      eventData.push({\n        name: event[i],\n        listener: listener,\n        debounce: debounceListener\n      });\n\n      if (Browser.isIE) {\n        element.addEventListener(event[i], debounceListener);\n      } else {\n        element.addEventListener(event[i], debounceListener, {\n          passive: false\n        });\n      }\n    }\n\n    return debounceListener;\n  };\n  /**\n   * Remove an event listener that has been attached before.\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   * @return {void}\n   */\n\n\n  EventHandler.remove = function (element, eventName, listener) {\n    var eventData = EventHandler.addOrGetEventData(element);\n    var event = eventName.split(' ');\n\n    var _loop_1 = function _loop_1(j) {\n      var index = -1;\n      var debounceListener;\n\n      if (eventData && eventData.length !== 0) {\n        eventData.some(function (x, i) {\n          return x.name === event[j] && x.listener === listener ? (index = i, debounceListener = x.debounce, true) : false;\n        });\n      }\n\n      if (index !== -1) {\n        eventData.splice(index, 1);\n      }\n\n      if (debounceListener) {\n        element.removeEventListener(event[j], debounceListener);\n      }\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   * @param {any} element - Specifies the target html element to clear the events\n   * @return {void}\n   */\n\n\n  EventHandler.clearEvents = function (element) {\n    var eventData;\n    var copyData;\n    eventData = EventHandler.addOrGetEventData(element);\n    copyData = extend([], copyData, eventData);\n\n    for (var i = 0; i < copyData.length; i++) {\n      element.removeEventListener(copyData[i].name, copyData[i].debounce);\n      eventData.shift();\n    }\n  };\n  /**\n   * Trigger particular event of the element.\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   * @return {void}\n   */\n\n\n  EventHandler.trigger = function (element, eventName, eventProp) {\n    var eventData = EventHandler.addOrGetEventData(element);\n    var fn = null;\n\n    for (var _i = 0, eventData_1 = eventData; _i < eventData_1.length; _i++) {\n      var event_1 = eventData_1[_i];\n\n      if (event_1.name === eventName) {\n        event_1.debounce.call(this, eventProp);\n      }\n    }\n  };\n\n  return EventHandler;\n}();\n\nexport { EventHandler };","/**\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'); // let cachedTemplate: Object = {};\n\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 * @param  {RegExp} value - Value expression.\n * @private\n */\n\nexport function expression(value) {\n  if (value) {\n    exp = value;\n  }\n\n  return exp;\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/**\n * Compile the template string into template function.\n * @param  {string} template - The template string which is going to convert.\n * @param  {Object} helper? - Helper functions as an object.\n * @private\n */\n\nexport function compile(template, helper, ignorePrefix) {\n  var argName = 'data';\n  var evalExpResult = evalExp(template, argName, helper, ignorePrefix);\n  var fnCode = \"var str=\\\"\" + evalExpResult + \"\\\"; return str;\"; // tslint:disable-next-line:no-function-constructor-with-string-args\n\n  var fn = new Function(argName, fnCode);\n  return fn.bind(helper);\n} // function used to evaluate the function expression\n\nfunction evalExp(str, nameSpace, helper, ignorePrefix) {\n  var varCOunt = 0;\n  /**\n   * Variable containing Local Keys\n   */\n\n  var localKeys = [];\n  var isClass = str.match(/class=\"([^\\\"]+|)\\s{2}/g);\n  var singleSpace = '';\n\n  if (isClass) {\n    isClass.forEach(function (value) {\n      singleSpace = value.replace(/\\s\\s+/g, ' ');\n      str = str.replace(value, singleSpace);\n    });\n  }\n\n  return str.replace(LINES, '').replace(DBL_QUOTED_STR, '\\'$1\\'').replace(exp, function (match, cnt, offset, matchStr) {\n    var SPECIAL_CHAR = /\\@|\\#|\\$/gm;\n    var matches = cnt.match(CALL_FUNCTION); // matches to detect any function calls\n\n    if (matches) {\n      var rlStr = matches[1];\n\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      } 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      } else if (FOR_STMT.test(cnt)) {\n        //handling for condition\n        var rlStr_1 = matches[1].split(' of '); // replace for each into actual JavaScript\n\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; // tslint:disable-next-line\n\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) + '[i' + varCOunt + ']; \\n var ' + rlStr_1[0] + 'Index=i' + varCOunt + '; \\n str = str + \"';\n      } else {\n        //helper function handling\n        var fnStr = cnt.split('(');\n        var fNameSpace = helper && helper.hasOwnProperty(fnStr[0]) ? 'this.' : 'global';\n        fNameSpace = /\\./.test(fnStr[0]) ? '' : fNameSpace;\n        var ftArray = matches[1].split(',');\n\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\n        var splRegexp = /\\@|\\$|\\#/gm;\n        var arrObj = /\\]\\./gm;\n\n        if (WINDOWFUNC.test(cnt) && arrObj.test(cnt) || splRegexp.test(cnt)) {\n          var splArrRegexp = /\\@|\\$|\\#|\\]\\./gm;\n\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        } else {\n          cnt = '\" + ' + (fNameSpace === 'global' ? '' : fNameSpace) + 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    } else if (ELSE_STMT.test(cnt)) {\n      // handling else condition\n      cnt = '\"; ' + cnt.replace(ELSE_STMT, '} else { \\n str = str + \"');\n    } else if (!!cnt.match(IF_OR_FOR)) {\n      // close condition \n      cnt = cnt.replace(IF_OR_FOR, '\"; \\n } \\n str = str + \"');\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\n      cnt = '\"+' + NameSpaceForspecialChar(cnt, localKeys.indexOf(cnt) === -1, nameSpace, localKeys) + '\"]+\"';\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      } else {\n        // evaluate normal expression\n        cnt = '\"+' + addNameSpace(cnt.replace(/\\,/gi, '+' + nameSpace + '.'), localKeys.indexOf(cnt) === -1, nameSpace, localKeys, ignorePrefix) + '+\"';\n      }\n    }\n\n    return cnt;\n  });\n}\n\nfunction addNameSpace(str, addNS, nameSpace, ignoreList, ignorePrefix) {\n  return addNS && !NOT_NUMBER.test(str) && ignoreList.indexOf(str.split('.')[0]) === -1 && !ignorePrefix ? nameSpace + '.' + str : str;\n}\n\nfunction NameSpaceArrObj(str, addNS, nameSpace, ignoreList) {\n  var arrObjReg = /^\\..*/gm;\n  return addNS && !NOT_NUMBER.test(str) && ignoreList.indexOf(str.split('.')[0]) === -1 && !arrObjReg.test(str) ? nameSpace + '.' + str : str;\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\nfunction NameSpaceForspecialChar(str, addNS, nameSpace, ignoreList) {\n  return addNS && !NOT_NUMBER.test(str) && ignoreList.indexOf(str.split('.')[0]) === -1 ? nameSpace + '[\"' + str : str;\n} // tslint:disable-next-line\n\n\nfunction SlashReplace(tempStr) {\n  // tslint:disable-next-line\n  var double = \"\\\\\\\\\";\n\n  if (tempStr.match(DOUBLE_SLASH)) {\n    tempStr = tempStr;\n  } else {\n    tempStr = tempStr.replace(SINGLE_SLASH, double);\n  }\n\n  return tempStr;\n}\n\nfunction HandleSpecialCharArrObj(str, nameSpaceNew, keys, ignorePrefix) {\n  str = str.trim();\n  var windowFunc = /\\window\\./gm;\n\n  if (!windowFunc.test(str)) {\n    var quotes = /'|\"/gm;\n    var splRegexp = /\\@|\\$|\\#/gm;\n\n    if (splRegexp.test(str)) {\n      str = NameSpaceForspecialChar(str, keys.indexOf(str) === -1, nameSpaceNew, keys) + '\"]';\n    }\n\n    if (ARR_OBJ.test(str)) {\n      return NameSpaceArrObj(str, !quotes.test(str) && keys.indexOf(str) === -1, nameSpaceNew, keys);\n    } else {\n      return addNameSpace(str, !quotes.test(str) && keys.indexOf(str) === -1, nameSpaceNew, keys, ignorePrefix);\n    }\n  } else {\n    return str;\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.]+\\<tr|^\\<tr/;\nvar HAS_SVG = /^[\\n\\r.]+\\<svg|^\\<path|^\\<g/;\nexport var blazorTemplates = {};\nexport function getRandomId() {\n  return '-' + Math.random().toString(36).substr(2, 5);\n}\n/**\n * Compile the template string into template function.\n * @param  {string} templateString - The template string which is going to convert.\n * @param  {Object} helper? - Helper functions as an object.\n * @private\n */\n//tslint:disable-next-line\n\nexport function compile(templateString, helper, ignorePrefix) {\n  var compiler = engineObj.compile(templateString, helper, ignorePrefix); //tslint:disable-next-line\n\n  return function (data, component, propName, templateId, isStringTemplate, index, element) {\n    var result = compiler(data, component, propName, element);\n    var blazor = 'Blazor';\n    var blazorTemplateId = 'BlazorTemplateId';\n\n    if (isBlazor() && !isStringTemplate) {\n      var randomId = getRandomId();\n      var blazorId = templateId + randomId;\n\n      if (!blazorTemplates[templateId]) {\n        blazorTemplates[templateId] = [];\n      }\n\n      if (!isNullOrUndefined(index)) {\n        var keys = Object.keys(blazorTemplates[templateId][index]);\n\n        for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n          var key = keys_1[_i];\n\n          if (key !== blazorTemplateId && data[key]) {\n            blazorTemplates[templateId][index][key] = data[key];\n          }\n\n          if (key === blazorTemplateId) {\n            blazorId = blazorTemplates[templateId][index][key];\n          }\n        }\n      } else {\n        data[blazorTemplateId] = blazorId;\n        blazorTemplates[templateId].push(data);\n      } // tslint:disable-next-line:no-any\n\n\n      return propName === 'rowTemplate' ? [createElement('tr', {\n        id: blazorId,\n        className: 'e-blazor-template'\n      })] : // tslint:disable-next-line:no-any\n      [createElement('div', {\n        id: blazorId,\n        className: 'e-blazor-template'\n      })];\n    }\n\n    if (typeof result === 'string') {\n      if (HAS_SVG.test(result)) {\n        var ele = createElement('svg', {\n          innerHTML: result\n        });\n        return ele.childNodes;\n      } else {\n        var ele = createElement(HAS_ROW.test(result) ? 'table' : 'div', {\n          innerHTML: result\n        });\n        return ele.childNodes;\n      }\n    } else {\n      return result;\n    }\n  };\n}\nexport function updateBlazorTemplate(templateId, templateName, comp, isEmpty, callBack) {\n  var blazor = 'Blazor';\n\n  if (isBlazor()) {\n    var ejsIntrop = 'sfBlazor';\n    window[ejsIntrop].updateTemplate(templateName, blazorTemplates[templateId], templateId, comp, callBack);\n\n    if (isEmpty !== false) {\n      blazorTemplates[templateId] = [];\n    }\n  }\n}\nexport function resetBlazorTemplate(templateId, templateName, index) {\n  var templateDiv = document.getElementById(templateId);\n\n  if (templateDiv) {\n    // tslint:disable-next-line:no-any\n    var innerTemplates = templateDiv.getElementsByClassName('blazor-inner-template');\n\n    for (var i = 0; i < innerTemplates.length; i++) {\n      var tempId = ' ';\n\n      if (!isNullOrUndefined(index)) {\n        tempId = innerTemplates[index].getAttribute('data-templateId');\n      } else {\n        tempId = innerTemplates[i].getAttribute('data-templateId');\n      }\n\n      var tempElement = document.getElementById(tempId);\n\n      if (tempElement) {\n        var length_1 = tempElement.childNodes.length;\n\n        for (var j = 0; j < length_1; j++) {\n          if (!isNullOrUndefined(index)) {\n            innerTemplates[index].appendChild(tempElement.childNodes[0]);\n            i = innerTemplates.length;\n          } else {\n            innerTemplates[i].appendChild(tempElement.childNodes[0]);\n          }\n        }\n      }\n    }\n  }\n}\n/**\n * Set your custom template engine for template rendering.\n * @param  {ITemplateEngine} classObj - Class object for custom template.\n * @private\n */\n\nexport function setTemplateEngine(classObj) {\n  engineObj.compile = classObj.compile;\n}\n/**\n * Get current template engine for template rendering\n * @param  {ITemplateEngine} classObj - Class object for custom template.\n * @private\n */\n\nexport function getTemplateEngine() {\n  return engineObj.compile;\n} //Default Engine Class\n\nvar Engine =\n/** @class */\nfunction () {\n  function Engine() {}\n\n  Engine.prototype.compile = function (templateString, helper, ignorePrefix) {\n    if (helper === void 0) {\n      helper = {};\n    }\n\n    return render(templateString, helper);\n  };\n\n  return Engine;\n}();\n\nvar engineObj = {\n  compile: new Engine().compile\n};","import { isObject, getValue, extend, isNullOrUndefined } from './util';\nimport { getRandomId } from './template-engine';\nvar simpleRegex = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/;\nvar multipleSplitRegex = /(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))/g;\nvar idClassSelector = /^(\\.|#)/;\nvar selectMapper = {\n  '.': 'className',\n  '#': 'id'\n};\nvar classRegexString = '(?=.*?\\\\b{value}\\\\b)';\nvar assigner = {\n  className: 'attributes.className',\n  id: 'attributes.id',\n  tagName: 'tagName'\n};\nvar emptyElements = ['area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input', 'link', 'meta', 'param', 'embed', 'command', 'keygen', 'source', 'track', 'wbr'];\nvar blockElements = ['a', 'address', 'article', 'applet', 'aside', 'audio', 'blockquote', 'button', 'canvas', 'center', 'dd', 'del', 'dir', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'iframe', 'ins', 'isindex', 'li', 'map', 'menu', 'noframes', 'noscript', 'object', 'ol', 'output', 'p', 'pre', 'section', 'script', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'ul', 'video'];\nvar inlineElement = ['abbr', 'acronym', 'applet', 'b', 'basefont', 'bdo', 'big', 'br', 'button', 'cite', 'code', 'del', 'dfn', 'em', 'font', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'label', 'map', 'object', 'q', 's', 'samp', 'script', 'select', 'small', 'span', 'strike', 'strong', 'sub', 'sup', 'textarea', 'tt', 'u', 'var'];\nvar selfClosingElements = ['colgroup', 'dd', 'dt', 'li', 'options', 'p', 'td', 'tfoot', 'th', 'thead', 'tr'];\nvar fillAttrs = ['checked', 'compact', 'declare', 'defer', 'disabled', 'ismap', 'multiple', 'nohref', 'noresize', 'noshade', 'nowrap', 'readonly', 'selected'];\nvar cspElement = ['Script', 'style'];\nvar nameMapper = {\n  'tabindex': 'tabIndex'\n};\nvar startRegex = /^<([-A-Za-z0-9_]+)((?:\\s+[a-zA-Z_:][-a-zA-Z0-9_:.]*(?:\\s*=\\s*(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>\\s]+))?)*)\\s*(\\/?)>/;\nvar endRegex = /^<\\/([-A-Za-z0-9_]+)[^>]*>/;\nvar attributeRegex = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\\s*=\\s*(?:(?:\"((?:\\\\.|[^\"])*)\")|(?:'((?:\\\\.|[^'])*)')|([^>\\s]+)))?/g;\n/**\n * Namespace for VirtualDOM\n * @private\n */\n\nexport var VirtualDOM;\n\n(function (VirtualDOM) {\n  //tslint:disable:no-any\n  function createElement(tagName, properties) {\n    var children = [];\n    var extended = extend({}, {}, properties, true);\n\n    if (!isNullOrUndefined(properties)) {\n      var keys = Object.keys(properties);\n\n      if (keys.length) {\n        if (extended.innerHTML) {\n          children = ConvertHTMLToJSon(extended.innerHTML);\n          delete extended.innerHTML;\n        }\n\n        if (extended.attrs) {\n          extend(extended, extended.attrs);\n          delete extended.attrs;\n        }\n\n        if (extended.styles) {\n          var valArr = extended.styles.split(';');\n          var vObj = {};\n\n          for (var i = 0, length_1 = valArr.length; i < length_1; i++) {\n            var cVal = valArr[i];\n            var styleSplit = cVal.split(':');\n            vObj[styleSplit[0]] = styleSplit[1];\n          }\n\n          delete extended.styles;\n          extended.style = vObj;\n        }\n      }\n    }\n\n    return {\n      tagName: tagName,\n      attributes: extended || {},\n      children: children\n    };\n  }\n\n  VirtualDOM.createElement = createElement;\n\n  function assignParent(childrens, parent) {\n    if (parent && childrens) {\n      childrens.forEach(function (child) {\n        if (isObject(child)) {\n          if (child.parent) {\n            detach(child);\n          }\n\n          child.parent = parent;\n        }\n\n        return child;\n      });\n    }\n  }\n\n  VirtualDOM.assignParent = assignParent;\n\n  function append(fromElements, toElement) {\n    assignParent(fromElements, toElement);\n\n    if (toElement.children) {\n      toElement.children = toElement.children.concat(fromElements);\n    } else {\n      toElement.children = [].concat(fromElements);\n    }\n  }\n\n  VirtualDOM.append = append;\n\n  function prepend(child, toElement) {\n    assignParent(child, toElement);\n\n    if (!toElement.children || !toElement.children.length) {\n      toElement.children = [];\n      toElement.children.concat(child);\n    } else {\n      for (var i = child.length - 1; i >= 0; i--) {\n        toElement.children.unshift(child[i]);\n      }\n    }\n  }\n\n  VirtualDOM.prepend = prepend;\n\n  function detach(element) {\n    var parent = element.parent;\n\n    if (parent) {\n      var index = parent.children.indexOf(element);\n\n      if (index !== -1) {\n        parent.children.splice(index);\n      }\n    }\n\n    return parent;\n  }\n\n  VirtualDOM.detach = detach; //tslint:disable-next-line\n\n  function vDomSelector(_a) {\n    var ele = _a.ele,\n        selector = _a.selector,\n        selectAll = _a.selectAll,\n        immediateParent = _a.immediateParent;\n    var iSelector = selector.split(' ');\n    var curColl = ele;\n\n    for (var i = 0, length_2 = iSelector.length; i < length_2; i++) {\n      var isDescendant = false;\n      var parent_2 = curColl;\n      var curSelector = iSelector[i];\n      var simpleSelector = false;\n      var mapper = [];\n\n      if (simpleRegex.test(curSelector)) {\n        simpleSelector = true;\n        processSelector(curSelector, mapper);\n      } else if (curSelector.indexOf('>') === -1) {\n        var splitSelector = curSelector.match(multipleSplitRegex);\n\n        for (var _i = 0, splitSelector_1 = splitSelector; _i < splitSelector_1.length; _i++) {\n          var curMap = splitSelector_1[_i];\n          processSelector(curMap, mapper);\n        }\n      } else if (curSelector.indexOf('>') !== -1) {\n        isDescendant = true;\n        var dSelector = curSelector.split('>'); //tslint:disable-next-line\n\n        var dParent = ele;\n        var descendent = void 0;\n        var flag = 0;\n\n        for (var _b = 0, dSelector_1 = dSelector; _b < dSelector_1.length; _b++) {\n          var sel = dSelector_1[_b];\n\n          if (!dParent) {\n            break;\n          }\n\n          if (dParent.length) {\n            var descendentChild = [];\n\n            for (var _c = 0, dParent_1 = dParent; _c < dParent_1.length; _c++) {\n              var child = dParent_1[_c];\n              descendentChild = descendentChild.concat(vDomSelector({\n                ele: child,\n                selector: sel,\n                selectAll: selectAll,\n                immediateParent: !!flag\n              }));\n            }\n\n            descendent = descendentChild;\n          } else {\n            descendent = vDomSelector({\n              ele: dParent,\n              selector: sel,\n              selectAll: selectAll,\n              immediateParent: !!flag\n            });\n          }\n\n          flag++;\n          dParent = descendent;\n        }\n\n        if (descendent) {\n          curColl = descendent;\n        }\n      }\n\n      if (!isDescendant) {\n        if (parent_2.length) {\n          var iCurSelector = [];\n\n          for (var _d = 0, parent_1 = parent_2; _d < parent_1.length; _d++) {\n            var curParent = parent_1[_d];\n            iCurSelector = iCurSelector.concat(accessElement(curParent, mapper, selectAll, immediateParent));\n          }\n\n          curColl = iCurSelector;\n        } else {\n          curColl = accessElement(parent_2, mapper, selectAll, immediateParent);\n        }\n      }\n    }\n\n    if (selectAll) {\n      return curColl;\n    } else {\n      return curColl[0] || null;\n    }\n  }\n\n  VirtualDOM.vDomSelector = vDomSelector;\n\n  function processSelector(selector, mapper) {\n    var match = selector.match(idClassSelector);\n    var obj = {};\n\n    if (match) {\n      var curMapper = selectMapper[match[0]];\n\n      if (curMapper === 'className') {\n        var curObj = mapper.filter(function (obj) {\n          return obj.hasOwnProperty('className');\n        })[0];\n        var canPush = false;\n\n        if (!curObj) {\n          canPush = true;\n          curObj = {};\n        }\n\n        var existValue = curObj[curMapper] || '';\n        curObj[curMapper] = existValue + classRegexString.replace('{value}', selector.replace('.', ''));\n\n        if (canPush) {\n          mapper.push(curObj);\n        }\n      } else {\n        obj[curMapper] = selector.replace(match[0], '');\n        mapper.push(obj);\n      }\n    } else {\n      mapper.push({\n        tagName: selector\n      });\n    }\n  } //tslint:disable-next-line\n\n\n  function accessElement(ele, mapper, selectAll, immediateParent) {\n    if (ele.children) {\n      //tslint:disable-next-line\n      var temp_1 = ele.children.filter(function (child) {\n        if (typeof child !== 'string') {\n          var matched = true;\n\n          for (var _i = 0, mapper_1 = mapper; _i < mapper_1.length; _i++) {\n            var map = mapper_1[_i];\n            var key = Object.keys(map)[0];\n            var expected = map[key];\n            var actualValue = getValue(assigner[key], child);\n\n            if (key === 'className') {\n              if (!new RegExp('^' + expected + '.*$').test(actualValue)) {\n                matched = false;\n                break;\n              }\n            } else if (actualValue !== expected) {\n              matched = false;\n              break;\n            }\n          }\n\n          return matched;\n        } else {\n          return false;\n        }\n      });\n\n      if (!immediateParent && (!temp_1.length || selectAll)) {\n        ele.children.forEach(function (child) {\n          if (isObject(child)) {\n            temp_1 = temp_1.concat(accessElement(child, mapper, selectAll));\n          }\n        });\n      }\n\n      return temp_1;\n    } else {\n      return [];\n    }\n  }\n\n  VirtualDOM.accessElement = accessElement;\n\n  function ConvertHTMLToJSon(htmlString) {\n    var results = [];\n    var isText;\n    var tagArray = [];\n    var backup = htmlString;\n    var nodeArray = [];\n\n    while (htmlString) {\n      isText = true;\n      var lastVal = getLastValue(tagArray);\n\n      if (!lastVal || !contains(cspElement, lastVal)) {\n        if (htmlString.indexOf('</') === 0) {\n          var match = htmlString.match(endRegex);\n\n          if (match) {\n            htmlString = htmlString.substring(match[0].length); //tslint:disable-next-line\n\n            match[0].replace(endRegex, iterateEndTag);\n          }\n\n          isText = false;\n        } else if (htmlString.indexOf('<') === 0) {\n          var match = htmlString.match(startRegex);\n\n          if (match) {\n            htmlString = htmlString.substring(match[0].length); //tslint:disable-next-line\n\n            match[0].replace(startRegex, iterateStartTag);\n          }\n\n          isText = false;\n        }\n\n        if (isText) {\n          var tagIndex = htmlString.indexOf('<');\n          var text = tagIndex < 0 ? htmlString : htmlString.substring(0, tagIndex);\n          htmlString = tagIndex < 0 ? '' : htmlString.substring(tagIndex);\n          iterateText(text);\n        }\n      } else {\n        //tslint:disable-next-line\n        htmlString = htmlString.replace(new RegExp('([\\\\s\\\\S]*?)<\\/' + getLastValue(nodeArray) + '[^>]*>'), function (all, text) {\n          text = text.replace(/<!--([\\s\\S]*?)-->|<!\\[CDATA\\[([\\s\\S]*?)]]>/g, '$1$2');\n          iterateText(text);\n          return '';\n        });\n        iterateEndTag('', getLastValue(tagArray));\n      }\n\n      backup = htmlString;\n    }\n\n    function iterateStartTag(start, tagName, rest) {\n      tagName = tagName.toLowerCase();\n\n      if (contains(blockElements, tagName)) {\n        while (getLastValue(tagArray) && contains(inlineElement, getLastValue(tagArray))) {\n          iterateEndTag('', getLastValue(tagArray));\n        }\n      }\n\n      if (contains(selfClosingElements, tagName) && getLastValue(tagArray)) {\n        iterateEndTag('', tagName);\n      }\n\n      var isSelfTag = contains(emptyElements, tagName);\n\n      if (!isSelfTag) {\n        tagArray.push(tagName);\n      }\n\n      var attrs = {}; //tslint:disable-next-line\n\n      rest.replace(attributeRegex, function (match, name) {\n        var names = [];\n\n        for (var _i = 2; _i < arguments.length; _i++) {\n          names[_i - 2] = arguments[_i];\n        } //tslint:disable-next-line\n\n\n        var val = names[2] ? names[2] : names[3] ? names[3] : names[4] ? names[4] : contains(fillAttrs, name) ? name : '';\n\n        if (name === 'style') {\n          var valArr = val.split(';');\n          var vObj = {};\n\n          for (var i = 0, length_3 = valArr.length; i < length_3; i++) {\n            var cVal = valArr[i];\n            var styleSplit = cVal.split(':');\n            vObj[styleSplit[0]] = styleSplit[1];\n          }\n\n          val = vObj;\n        }\n\n        name = nameMapper[name] || name;\n        attrs[name] = val; //tslint:disable-next-line\n      });\n      attrs['data-id'] = getRandomId();\n      var tagObject = {\n        tagName: tagName,\n        attributes: attrs\n      };\n\n      if (isSelfTag) {\n        var parent_3 = nodeArray[0] || results;\n\n        if (parent_3.children === undefined) {\n          parent_3.children = [];\n        }\n\n        tagObject.parent = parent_3;\n        parent_3.children.push(tagObject);\n      } else {\n        nodeArray.unshift(tagObject);\n      }\n    }\n\n    function iterateEndTag(start, tagName) {\n      var pos;\n\n      if (!tagName) {\n        pos = 0;\n      } else {\n        for (pos = tagArray.length - 1; pos >= 0; pos--) {\n          if (tagArray[pos] === tagName) {\n            break;\n          }\n        }\n      }\n\n      if (pos >= 0) {\n        for (var j = nodeArray.length - 1; j >= pos; j--) {\n          //tslint:disable-next-line\n          var node = nodeArray.shift();\n\n          if (nodeArray.length === 0) {\n            results.push(node);\n          } else {\n            var parent_4 = nodeArray[0];\n\n            if (parent_4.children === undefined) {\n              parent_4.children = [];\n            }\n\n            node.parent = parent_4;\n            parent_4.children.push(node);\n          }\n        }\n\n        tagArray.length = pos;\n      }\n    }\n\n    function iterateText(text) {\n      if (nodeArray.length === 0) {\n        results.push(text);\n      } else {\n        var parent_5 = nodeArray[0];\n\n        if (parent_5.children === undefined) {\n          parent_5.children = [];\n        }\n\n        parent_5.children.push(text);\n      }\n    }\n\n    return results;\n  }\n\n  VirtualDOM.ConvertHTMLToJSon = ConvertHTMLToJSon; //tslint:disable-next-line \n\n  function getLastValue(arr) {\n    return arr[arr.length - 1];\n  }\n\n  function contains(arr, key) {\n    return arr.indexOf(key) !== -1;\n  } //tslint:disable-next-line\n\n\n  function cloneNode(ele, deep) {\n    if (isObject(ele)) {\n      if (deep) {\n        return extend({}, {}, ele, true);\n      } else {\n        return {\n          tagName: ele.tagName,\n          attributes: ele.attributes\n        };\n      }\n    } else {\n      return ele.cloneNode(deep);\n    }\n  }\n\n  VirtualDOM.cloneNode = cloneNode;\n\n  function setStyleAttribute(element, attrs) {\n    if (element.attributes.style) {\n      element.attributes.style = extend({}, attrs);\n    } else {\n      element.attributes.style = extend(element.attributes.style, attrs);\n    }\n  }\n\n  VirtualDOM.setStyleAttribute = setStyleAttribute; //tslint:enable:no-any\n})(VirtualDOM || (VirtualDOM = {}));","/**\n * Functions related to dom operations.\n */\nimport { EventHandler } from './event-handler';\nimport { isNullOrUndefined, getValue, setValue, isObject, extend } from './util';\nimport { VirtualDOM } from './virtual-dom';\nvar SVG_REG = /^svg|^path|^g/;\n/**\n * Function to create Html element.\n * @param tagName - Name of the tag, id and class names.\n * @param properties - Object to set properties in the element.\n * @param properties.id - To set the id to the created element.\n * @param properties.className - To add classes to the element.\n * @param properties.innerHTML - To set the innerHTML to element.\n * @param properties.styles - To set the some custom styles to element.\n * @param properties.attrs - To set the attributes to element.\n * @private\n */\n\nexport function createElement(tagName, properties) {\n  //tslint:disable-next-line\n  var element = SVG_REG.test(tagName) ? document.createElementNS('http://www.w3.org/2000/svg', tagName) : document.createElement(tagName);\n\n  if (typeof properties === 'undefined') {\n    return element;\n  }\n\n  element.innerHTML = properties.innerHTML ? properties.innerHTML : '';\n\n  if (properties.className !== undefined) {\n    element.className = properties.className;\n  }\n\n  if (properties.id !== undefined) {\n    element.id = properties.id;\n  }\n\n  if (properties.styles !== undefined) {\n    element.setAttribute('style', properties.styles);\n  }\n\n  if (properties.attrs !== undefined) {\n    attributes(element, properties.attrs);\n  }\n\n  return element;\n}\n/**\n * The function used to add the classes to array of elements\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 * @private\n */\n\nexport function addClass(elements, classes) {\n  var classList = getClassList(classes);\n\n  for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n    var ele = _a[_i];\n\n    for (var _b = 0, classList_1 = classList; _b < classList_1.length; _b++) {\n      var className = classList_1[_b];\n\n      if (isObject(ele)) {\n        var curClass = getValue('attributes.className', ele);\n\n        if (isNullOrUndefined(curClass)) {\n          setValue('attributes.className', className, ele);\n        } else if (!new RegExp('\\\\b' + className + '\\\\b', 'i').test(curClass)) {\n          setValue('attributes.className', curClass + ' ' + className, ele);\n        }\n      } else {\n        if (!ele.classList.contains(className)) {\n          ele.classList.add(className);\n        }\n      }\n    }\n  }\n\n  return elements;\n}\n/**\n * The function used to add the classes to array of elements\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 * @private\n */\n\nexport function removeClass(elements, classes) {\n  var classList = getClassList(classes);\n\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\n    if (canRemove) {\n      for (var _b = 0, classList_2 = classList; _b < classList_2.length; _b++) {\n        var className = classList_2[_b];\n        /* istanbul ignore next */\n\n        if (flag) {\n          var classes_1 = getValue('attributes.className', ele);\n          var classArr = classes_1.split(' ');\n          var index = classArr.indexOf(className);\n\n          if (index !== -1) {\n            classArr.splice(index, 1);\n          }\n\n          setValue('attributes.className', classArr.join(' '), ele);\n        } else {\n          ele.classList.remove(className);\n        }\n      }\n    }\n  }\n\n  return elements;\n}\n\nfunction getClassList(classes) {\n  var classList = [];\n\n  if (typeof classes === 'string') {\n    classList.push(classes);\n  } else {\n    classList = classes;\n  }\n\n  return classList;\n}\n/**\n * The function used to check element is visible or not.\n * @param  {Element|Node} element - An element the need to check visibility\n * @private\n */\n\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 * @param  {Element[]|NodeList} fromElements - An array of elements that need to prepend.\n * @param  {Element} toElement - An element that is going to prepend.\n * @private\n */\n\nexport function prepend(fromElements, toElement, isEval) {\n  //tslint:disable:no-any\n  if (isObject(toElement)) {\n    VirtualDOM.prepend(fromElements, toElement);\n  } else {\n    var docFrag = document.createDocumentFragment();\n\n    for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n      var ele = _a[_i];\n      docFrag.appendChild(ele);\n    }\n\n    toElement.insertBefore(docFrag, toElement.firstElementChild);\n\n    if (isEval) {\n      executeScript(toElement);\n    }\n  }\n\n  return fromElements;\n}\n/**\n * The function used to insert an array of elements into last of the element.\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 * @private\n */\n\nexport function append(fromElements, toElement, isEval) {\n  if (isObject(toElement)) {\n    VirtualDOM.append(fromElements, toElement);\n  } else {\n    var docFrag = document.createDocumentFragment();\n\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\n    if (isEval) {\n      executeScript(toElement);\n    }\n  }\n\n  return fromElements;\n}\n/**\n * The function is used to evaluate script from Ajax request\n * @param ele - An element is going to evaluate the script\n */\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 the\n * @param  {Element|Node|HTMLElement} element - An element that is going to detach from the Dom\n * @private\n */\n\n\nexport function detach(element) {\n  if (isObject(element)) {\n    return VirtualDOM.detach(element);\n  } else {\n    var parentNode = element.parentNode;\n\n    if (parentNode) {\n      return parentNode.removeChild(element);\n    }\n  }\n} //tslint: enable:no-any\n\n/**\n * The function used to remove the element from Dom also clear the bounded events\n * @param  {Element|Node|HTMLElement} element - An element remove from the Dom\n * @private\n */\n\nexport function remove(element) {\n  if (isObject(element)) {\n    VirtualDOM.detach(element);\n  } else {\n    var parentNode = element.parentNode;\n    EventHandler.clearEvents(element);\n    parentNode.removeChild(element);\n  }\n}\n/**\n * The function helps to set multiple attributes to an element\n * @param  {Element|Node} element - An element that need to set attributes.\n * @param  {{[key:string]:string}} attributes - JSON Object that is going to as attributes.\n * @private\n */\n\nexport function attributes(element, attributes) {\n  var keys = Object.keys(attributes);\n  var ele = element;\n\n  for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n    var key = keys_1[_i];\n    /* istanbul ignore next */\n\n    if (isObject(ele)) {\n      var iKey = key;\n\n      if (key === 'tabindex') {\n        iKey = 'tabIndex';\n      }\n\n      ele.attributes[iKey] = attributes[key];\n    } else {\n      ele.setAttribute(key, attributes[key]);\n    }\n  }\n\n  return ele;\n}\n/**\n * The function selects the element from giving context.\n * @param  {string} selector - Selector string need fetch element from the\n * @param  {Document|Element=document} context - It is an optional type, That specifies a Dom context.\n * @private\n */\n//tslint:disable-next-line\n\nexport function select(selector, context, needsVDOM) {\n  if (context === void 0) {\n    context = document;\n  }\n\n  if (isObject(context) && needsVDOM) {\n    //tslint:disable-next-line\n    return VirtualDOM.vDomSelector({\n      ele: context,\n      selector: selector,\n      selectAll: false\n    });\n  } else {\n    selector = querySelectId(selector);\n    return context.querySelector(selector);\n  }\n}\n/**\n * The function selects an array of element from the given context.\n * @param  {string} selector - Selector string need fetch element from the\n * @param  {Document|Element=document} context - It is an optional type, That specifies a Dom context.\n * @private\n */\n\nexport function selectAll(selector, context, needsVDOM) {\n  if (context === void 0) {\n    context = document;\n  }\n\n  if (isObject(context) && !needsVDOM) {\n    //tslint:disable-next-line\n    return VirtualDOM.vDomSelector({\n      ele: context,\n      selector: selector,\n      selectAll: true\n    });\n  } else {\n    selector = querySelectId(selector);\n    var nodeList = context.querySelectorAll(selector);\n    return nodeList;\n  }\n}\n\nfunction querySelectId(selector) {\n  var charRegex = /(!|\"|\\$|%|&|'|\\(|\\)|\\*|\\/|:|;|<|=|\\?|@|\\]|\\^|`|{|}|\\||\\+|~)/g;\n\n  if (selector.match(/#[0-9]/g) || selector.match(charRegex)) {\n    var idList = selector.split(',');\n\n    for (var i = 0; i < idList.length; i++) {\n      var list = idList[i].split(' ');\n\n      for (var j = 0; j < list.length; j++) {\n        if (list[j].indexOf('#') > -1) {\n          if (!list[j].match(/\\[.*\\]/)) {\n            var splitId = list[j].split('#');\n\n            if (splitId[1].match(/^\\d/) || splitId[1].match(charRegex)) {\n              var setId = list[j].split('.');\n              setId[0] = setId[0].replace(/#/, '[id=\\'') + '\\']';\n              list[j] = setId.join('.');\n            }\n          }\n        }\n      }\n\n      idList[i] = list.join(' ');\n    }\n\n    return idList.join(',');\n  }\n\n  return selector;\n}\n/**\n * Returns single closest parent element based on class selector.\n * @param  {Element} element - An element that need to find the closest element.\n * @param  {string} selector - A classSelector of closest element.\n * @private\n */\n\n\nexport function closest(element, selector) {\n  var el = element;\n\n  if (typeof el.closest === 'function') {\n    return el.closest(selector);\n  }\n  /* istanbul ignore next */\n\n\n  while (el && el.nodeType === 1) {\n    if (matches(el, selector)) {\n      return el;\n    }\n\n    el = el.parentNode;\n  }\n\n  return null;\n}\n/**\n * Returns all sibling elements of the given element.\n * @param  {Element|Node} element - An element that need to get siblings.\n * @private\n */\n\nexport function siblings(element) {\n  var siblings = [];\n  var childNodes = Array.prototype.slice.call(element.parentNode.childNodes);\n\n  for (var _i = 0, childNodes_1 = childNodes; _i < childNodes_1.length; _i++) {\n    var curNode = childNodes_1[_i];\n\n    if (curNode.nodeType === Node.ELEMENT_NODE && element !== curNode) {\n      siblings.push(curNode);\n    }\n  }\n\n  return siblings;\n}\n/**\n * set the value if not exist. Otherwise set the existing value\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 * @private\n */\n\n/* istanbul ignore next */\n\nexport function getAttributeOrDefault(element, property, value) {\n  var attrVal;\n  var isObj = isObject(element);\n\n  if (isObj) {\n    attrVal = getValue('attributes.' + property, element);\n  } else {\n    attrVal = element.getAttribute(property);\n  }\n\n  if (isNullOrUndefined(attrVal) && value) {\n    if (!isObj) {\n      element.setAttribute(property, value.toString());\n    } else {\n      element.attributes[property] = value;\n    }\n\n    attrVal = value;\n  }\n\n  return attrVal;\n}\n/**\n * Set the style attributes to Html element.\n * @param {HTMLElement} element - Element which we want to set attributes\n * @param {any} attrs - Set the given attributes to element\n * @return {void}\n * @private\n */\n\nexport function setStyleAttribute(element, attrs) {\n  if (attrs !== undefined) {\n    if (isObject(element)) {\n      // tslint:disable-next-line:no-any\n      VirtualDOM.setStyleAttribute(element, attrs);\n    } else {\n      Object.keys(attrs).forEach(function (key) {\n        // tslint:disable-next-line:no-any\n        element.style[key] = attrs[key];\n      });\n    }\n  }\n}\n/**\n * Method for add and remove classes to a dom element.\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 * @return {void}\n * @private\n */\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 * @param {Element} element - Element to compare with the selector.\n * @param {string} selector - String selector which element will satisfy.\n * @return {void}\n * @private\n */\n\nexport function matches(element, selector) {\n  //tslint:disable-next-line\n  var matches = element.matches || element.msMatchesSelector || element.webkitMatchesSelector;\n\n  if (matches) {\n    return matches.call(element, selector);\n  } else {\n    return [].indexOf.call(document.querySelectorAll(selector), element) !== -1;\n  }\n}\n/* istanbul ignore next */\n\nexport function includeInnerHTML(ele, innerHTML) {\n  if (isObject(ele)) {\n    if (innerHTML === '') {\n      ele.children = [];\n    } else {\n      var res = VirtualDOM.ConvertHTMLToJSon(innerHTML);\n\n      if (res.length) {\n        VirtualDOM.assignParent(res, ele);\n        ele.children = res;\n      }\n    }\n  } else {\n    ele.innerHTML = innerHTML;\n  }\n}\n/* istanbul ignore next */\n//tslint:disable-next-line\n\nexport function containsClass(ele, className) {\n  if (isObject(ele)) {\n    // tslint:disable-next-line:no-any\n    return new RegExp('\\\\b' + className + '\\\\b', 'i').test(ele.attributes.className);\n  } else {\n    return ele.classList.contains(className);\n  }\n}\n/**\n * Method to check whether the element matches the given selector.\n * @param {} element - Element to compare with the selector.\n * @param {string} selector - String selector which element will satisfy.\n * @return {Element | VirtualObject}\n * @private\n */\n\n/* istanbul ignore next */\n//tslint:disable:no-any\n\nexport function cloneNode(element, deep) {\n  if (isObject(element)) {\n    if (deep) {\n      return extend({}, {}, element, true);\n    } else {\n      return {\n        tagName: element.tagName,\n        attributes: element.attributes\n      };\n    }\n  } else {\n    return element.cloneNode(deep);\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/**\n * Base library module is common module for Framework modules like touch,keyboard and etc.,\n * @private\n */\n\nvar Base =\n/** @class */\nfunction () {\n  /**\n   * Base constructor accept options and 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; // tslint:disable-next-line:no-empty\n\n    this.finalUpdate = function () {};\n\n    this.childChangedProperties = {};\n    this.modelObserver = new Observer(this);\n\n    if (!isUndefined(element)) {\n      if ('string' === typeof element) {\n        this.element = document.querySelector(element);\n      } else {\n        this.element = element;\n      }\n\n      if (!isNullOrUndefined(this.element)) {\n        this.isProtectedOnChange = false;\n        this.addInstance();\n      }\n    }\n\n    if (!isUndefined(options)) {\n      this.setProperties(options, true);\n    }\n\n    this.isDestroyed = false;\n  }\n  /** Property base section */\n\n  /**\n   * Function used to set bunch of property at a time.\n   * @private\n   * @param  {Object} prop - JSON object which holds components properties.\n   * @param  {boolean} muteOnChange? - Specifies to true when we set properties.\n   */\n\n\n  Base.prototype.setProperties = function (prop, muteOnChange) {\n    var prevDetection = this.isProtectedOnChange;\n    this.isProtectedOnChange = !!muteOnChange;\n    merge(this, prop);\n\n    if (muteOnChange !== true) {\n      merge(this.changedProperties, prop);\n      this.dataBind();\n    } else if (isBlazor() && this.isRendered) {\n      this.serverDataBind(prop);\n    }\n\n    this.finalUpdate();\n    this.changedProperties = {};\n    this.oldProperties = {};\n    this.isProtectedOnChange = prevDetection;\n  };\n\n  ;\n  /**\n   * Calls for child element data bind\n   * @param {Object} obj\n   * @param {Object} parent\n   * @returns {void}\n   */\n  // tslint:disable-next-line:no-any\n\n  Base.callChildDataBind = function (obj, parent) {\n    var keys = Object.keys(obj);\n\n    for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n      var key = keys_1[_i];\n\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\n          if (obj_1.dataBind !== undefined) {\n            obj_1.dataBind();\n          }\n        }\n      } else {\n        parent[key].dataBind();\n      }\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\n\n  Base.prototype.dataBind = function () {\n    Base.callChildDataBind(this.childChangedProperties, this);\n\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\n  ;\n  /* tslint:disable:no-any */\n\n  Base.prototype.serverDataBind = function (newChanges) {\n    if (!isBlazor()) {\n      return;\n    }\n\n    newChanges = newChanges ? newChanges : {};\n    extend(this.bulkChanges, {}, newChanges, true);\n    var sfBlazor = 'sfBlazor';\n\n    if (this.allowServerDataBinding && window[sfBlazor].updateModel) {\n      window[sfBlazor].updateModel(this);\n      this.bulkChanges = {};\n    }\n  };\n  /* tslint:enable:no-any */\n\n\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\n    if (this.isProtectedOnChange) {\n      return;\n    }\n\n    this.oldProperties[key] = oldValue;\n    this.changedProperties[key] = newValue;\n    this.finalUpdate();\n    this.finalUpdate = setImmediate(this.dataBind.bind(this));\n  };\n\n  ;\n  /** Event Base Section */\n\n  /**\n   * Adds the handler to the given event listener.\n   * @param {string} eventName - A String that specifies the name of the event\n   * @param {Function} listener - Specifies the call to run when the event occurs.\n   * @return {void}\n   */\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   * @param {string} eventName - A String that specifies the name of the event to remove\n   * @param {Function} listener - Specifies the function to remove\n   * @return {void}\n   */\n\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   * @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   * @return {void}\n   */\n\n\n  Base.prototype.trigger = function (eventName, eventProp, successHandler, errorHandler) {\n    var _this = this;\n\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\n      if (isColEName.test(eventName)) {\n        var handler = getValue(eventName, this);\n\n        if (handler) {\n          var blazor = 'Blazor';\n\n          if (window[blazor]) {\n            var promise = handler.call(this, eventProp);\n\n            if (promise && typeof promise.then === 'function') {\n              if (!successHandler) {\n                data = promise;\n              } else {\n                promise.then(function (data) {\n                  if (successHandler) {\n                    data = typeof data === 'string' && _this.modelObserver.isJson(data) ? 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            } else if (successHandler) {\n              successHandler.call(this, eventProp);\n            }\n          } else {\n            handler.call(this, eventProp);\n\n            if (successHandler) {\n              successHandler.call(this, eventProp);\n            }\n          }\n        } else if (successHandler) {\n          successHandler.call(this, eventProp);\n        }\n      }\n\n      this.isProtectedOnChange = prevDetection;\n      return data;\n    }\n  };\n  /**\n   * To maintain instance in base class\n   */\n\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\n    if (!isNullOrUndefined(this.element.ej2_instances)) {\n      this.element.ej2_instances.push(this);\n    } else {\n      setValue('ej2_instances', [this], this.element);\n    }\n  };\n  /**\n   * To remove the instance from the element\n   */\n\n\n  Base.prototype.destroy = function () {\n    var _this = this;\n\n    this.element.ej2_instances = this.element.ej2_instances.filter(function (i) {\n      return i !== _this;\n    });\n    removeClass([this.element], ['e-' + this.getModuleName()]);\n\n    if (this.element.ej2_instances.length === 0) {\n      // Remove module class from the root element\n      removeClass([this.element], ['e-lib']);\n    }\n\n    this.clearChanges();\n    this.modelObserver.destroy();\n    this.isDestroyed = true;\n  };\n\n  return Base;\n}();\n\nexport { Base };\n/**\n * Global function to get the component instance from the rendered element.\n * @param elem Specifies the HTMLElement or element id string.\n * @param comp Specifies the component module name or Component.\n */\n// tslint:disable-next-line:no-any\n\nexport function getComponent(elem, comp) {\n  var instance;\n  var i;\n  var ele = typeof elem === 'string' ? document.getElementById(elem) : elem;\n\n  for (i = 0; i < ele.ej2_instances.length; i++) {\n    instance = ele.ej2_instances[i];\n\n    if (typeof comp === 'string') {\n      var compName = instance.getModuleName();\n\n      if (comp === compName) {\n        return instance;\n      }\n    } else {\n      // tslint:disable-next-line:no-any\n      if (instance instanceof comp) {\n        return instance;\n      }\n    }\n  }\n\n  return undefined;\n}\n/**\n * Function to remove the child instances.\n * @return {void}\n * @private\n */\n// tslint:disable-next-line:no-any\n\nexport function removeChildInstance(element) {\n  // tslint:disable-next-line:no-any\n  var childEle = [].slice.call(element.getElementsByClassName('e-control'));\n\n  for (var i = 0; i < childEle.length; i++) {\n    var compName = childEle[i].classList[1].split('e-')[1]; // tslint:disable-next-line:no-any\n\n    var compInstance = getComponent(childEle[i], compName);\n\n    if (!isUndefined(compInstance)) {\n      compInstance.destroy();\n    }\n  }\n}","import { createInstance, isUndefined, merge, extend, getValue } from './util';\n/**\n * Returns the Class Object\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 */\n\nfunction getObject(instance, curKey, defaultValue, type) {\n  if (!instance.properties.hasOwnProperty(curKey) || !(instance.properties[curKey] instanceof type)) {\n    instance.properties[curKey] = createInstance(type, [instance, curKey, defaultValue]);\n  }\n\n  return instance.properties[curKey];\n}\n/**\n * Returns object array\n * @param {ClassObject} instance\n * @param {string} curKey\n * @param {Object[]} defaultValue\n * @param type\n * @param {boolean} isSetter\n * @returns {Object[]}\n */\n\n\nfunction getObjectArray(instance, curKey, defaultValue, type, isSetter, isFactory) {\n  var result = [];\n  var len = defaultValue ? defaultValue.length : 0;\n\n  for (var i = 0; i < len; i++) {\n    var curType = type;\n\n    if (isFactory) {\n      curType = type(defaultValue[i], instance);\n    }\n\n    if (isSetter) {\n      var inst = createInstance(curType, [instance, curKey, {}, true]);\n      inst.setProperties(defaultValue[i], true);\n      result.push(inst);\n    } else {\n      result.push(createInstance(curType, [instance, curKey, defaultValue[i], false]));\n    }\n  }\n\n  return result;\n}\n/**\n * Returns the properties of the object\n * @param {Object} defaultValue\n * @param {string} curKey\n */\n\n\nfunction propertyGetter(defaultValue, curKey) {\n  return function () {\n    if (!this.properties.hasOwnProperty(curKey)) {\n      this.properties[curKey] = defaultValue;\n    }\n\n    return this.properties[curKey];\n  };\n}\n/**\n * Set the properties for the object\n * @param {Object} defaultValue\n * @param {string} curKey\n */\n\n\nfunction propertySetter(defaultValue, curKey) {\n  return function (newValue) {\n    if (this.properties[curKey] !== newValue) {\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\n\nfunction complexGetter(defaultValue, curKey, type) {\n  return function () {\n    return getObject(this, curKey, defaultValue, type);\n  };\n}\n/**\n * Sets complex objects\n */\n\n\nfunction complexSetter(defaultValue, curKey, type) {\n  return function (newValue) {\n    getObject(this, curKey, defaultValue, type).setProperties(newValue);\n  };\n}\n\nfunction complexFactoryGetter(defaultValue, curKey, type) {\n  return function () {\n    var curType = type({});\n\n    if (this.properties.hasOwnProperty(curKey)) {\n      return this.properties[curKey];\n    } else {\n      return getObject(this, curKey, defaultValue, curType);\n    }\n  };\n}\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\nfunction complexArrayGetter(defaultValue, curKey, type) {\n  return function () {\n    var _this = this;\n\n    if (!this.properties.hasOwnProperty(curKey)) {\n      var defCollection = getObjectArray(this, curKey, defaultValue, type, false);\n      this.properties[curKey] = defCollection;\n    }\n\n    var ignore = this.controlParent !== undefined && this.controlParent.ignoreCollectionWatch || this.ignoreCollectionWatch;\n\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\n    if (!this.properties[curKey].hasOwnProperty('isComplexArray')) {\n      Object.defineProperty(this.properties[curKey], 'isComplexArray', {\n        value: true\n      });\n    }\n\n    return this.properties[curKey];\n  };\n}\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\nfunction complexArrayFactorySetter(defaultValue, curKey, type) {\n  return function (newValue) {\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\nfunction complexArrayFactoryGetter(defaultValue, curKey, type) {\n  return function () {\n    var curType = type({});\n\n    if (!this.properties.hasOwnProperty(curKey)) {\n      var defCollection = getObjectArray(this, curKey, defaultValue, curType, false);\n      this.properties[curKey] = defCollection;\n    }\n\n    return this.properties[curKey];\n  };\n}\n\nfunction complexArrayDefinedCallback(dFunc, curKey, type, prop) {\n  /* tslint:disable no-function-expression */\n  return function () {\n    var newValue = [];\n\n    for (var _i = 0; _i < arguments.length; _i++) {\n      newValue[_i] = arguments[_i];\n    }\n\n    var keyString = this.propName ? this.getParentKey() + '.' + curKey + '-' : curKey + '-';\n\n    switch (dFunc) {\n      case 'push':\n        for (var i = 0; i < newValue.length; i++) {\n          Array.prototype[dFunc].apply(prop, [newValue[i]]);\n          var model_1 = getArrayModel(keyString + (prop.length - 1), newValue[i], !this.controlParent, dFunc);\n          this.serverDataBind(model_1, newValue[i], false, dFunc);\n        }\n\n        break;\n\n      case 'pop':\n        Array.prototype[dFunc].apply(prop);\n        var model = getArrayModel(keyString + prop.length, null, !this.controlParent, dFunc);\n        this.serverDataBind(model, {\n          ejsAction: 'pop'\n        }, false, dFunc);\n        break;\n    }\n\n    return prop;\n  };\n  /* tslint:enable no-function-expression */\n}\n\nfunction getArrayModel(keyString, value, isControlParent, arrayFunction) {\n  var modelObject = keyString;\n\n  if (isControlParent) {\n    modelObject = {};\n    modelObject[keyString] = value;\n\n    if (value && typeof value === 'object') {\n      var action = 'ejsAction';\n      modelObject[keyString][action] = arrayFunction;\n    }\n  }\n\n  return modelObject;\n}\n/**\n * Method used to create property. General syntax below.\n * @param  {T} defaultValue? - Specifies the default value of property.\n * ```\n * @Property('TypeScript')\n * propertyName: Type;\n * ```\n * @private\n */\n\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    }; //new property creation\n\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 * @param  {T} defaultValue - Specifies the default value of property.\n * @param  {Function} type - Specifies the class type of complex object.\n * ```\n * @Complex<Type>({},Type)\n * propertyName: Type;\n * ```\n * @private\n */\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    }; //new property creation\n\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 * @param  {Function} defaultType - Specifies the default value of property.\n * @param  {Function} type - Specifies the class factory type of complex object.\n * ```\n * @ComplexFactory(defaultType, factoryFunction)\n * propertyName: Type1 | Type2;\n * ```\n * @private\n */\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    }; //new property creation\n\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 * @param  {T[]} defaultValue - Specifies the default value of property.\n * @param  {Function} type - Specifies the class type of complex object.\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\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    }; //new property creation\n\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 * @param  {T[]} defaultType - Specifies the default type of property.\n * @param  {Function} type - Specifies the class type of complex object.\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\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    }; //new property creation\n\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 * @param  {Function} defaultValue? - Specifies the default value of property.\n * @param  {boolean} isComplex? - Specifies the whether it is complex object.\n * ```\n * @Event(()=>{return true;})\n * ```\n * @private\n */\n\nexport function Event() {\n  return function (target, key) {\n    var eventDescriptor = {\n      set: function set(newValue) {\n        var oldValue = this.properties[key];\n\n        if (oldValue !== newValue) {\n          var finalContext = getParentContext(this, key);\n\n          if (isUndefined(oldValue) === false) {\n            finalContext.context.removeEventListener(finalContext.prefix, oldValue);\n          }\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 * ```\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\nexport function NotifyPropertyChanges(classConstructor) {\n  /** Need to code */\n}\n/**\n * Method  used to create the builderObject for the target component.\n * @private\n */\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  /* tslint:disable no-any */\n\n\n  target.propList[propertyType + 's'].push({\n    propertyName: key,\n    defaultValue: defaultValue,\n    type: type\n  });\n  target.propList[propertyType + 'Names'].push(key);\n  /* tslint:enable no-any */\n}\n/**\n * Returns an object containing the builder properties\n * @param {Function} component\n * @private\n */\n\n\nfunction getBuilderProperties(component) {\n  if (isUndefined(component.prototype.builderObject)) {\n    component.prototype.builderObject = {\n      properties: {},\n      propCollections: [],\n      add: function add() {\n        this.isPropertyArray = true;\n        this.propCollections.push(extend({}, this.properties, {}));\n      }\n    };\n    var rex = /complex/;\n\n    for (var _i = 0, _a = Object.keys(component.prototype.propList); _i < _a.length; _i++) {\n      var key = _a[_i];\n\n      var _loop_1 = function _loop_1(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\n            if (!childType.isPropertyArray) {\n              tempValue = extend({}, childType.properties, {});\n            } else {\n              tempValue = childType.propCollections;\n            }\n\n            this.properties[prop.propertyName] = tempValue;\n            childType.properties = {};\n            childType.propCollections = [];\n            childType.isPropertyArray = false;\n            return this;\n          };\n        } else {\n          component.prototype.builderObject[prop.propertyName] = function (value) {\n            this.properties[prop.propertyName] = value;\n            return this;\n          };\n        }\n      };\n\n      for (var _b = 0, _c = component.prototype.propList[key]; _b < _c.length; _b++) {\n        var prop = _c[_b];\n\n        _loop_1(prop);\n      }\n    }\n  }\n\n  return component.prototype.builderObject;\n}\n/**\n * Method used to create builder for the components\n * @param {any} component -specifies the target component for which builder to be created.\n * @private\n */\n\n\nexport function CreateBuilder(component) {\n  var builderFunction = function builderFunction(element) {\n    this.element = element;\n    return this;\n  };\n\n  var instanceFunction = function instanceFunction(element) {\n    if (!builderFunction.prototype.hasOwnProperty('create')) {\n      builderFunction.prototype = getBuilderProperties(component);\n\n      builderFunction.prototype.create = function () {\n        var temp = extend({}, {}, this.properties);\n        this.properties = {};\n        return new component(temp, this.element);\n      };\n    }\n\n    return new builderFunction(element);\n  };\n\n  return instanceFunction;\n}\n/**\n * Returns parent options for the object\n * @param {Object} context\n * @param {string} prefix\n * @private\n */\n\nfunction getParentContext(context, prefix) {\n  if (context.hasOwnProperty('parentObj') === false) {\n    return {\n      context: context,\n      prefix: prefix\n    };\n  } else {\n    var curText = getValue('propName', context);\n\n    if (curText) {\n      prefix = curText + '-' + prefix;\n    }\n\n    return getParentContext(getValue('parentObj', context), prefix);\n  }\n}","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nvar __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\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 */\n\nvar Animation =\n/** @class */\nfunction (_super) {\n  __extends(Animation, _super);\n\n  function Animation(options) {\n    var _this = _super.call(this, options, undefined) || this;\n    /**\n     * @private\n     */\n\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\n  Animation_1 = Animation;\n  /**\n   * Applies animation to the current element.\n   * @param {string | HTMLElement} element - Element which needs to be animated.\n   * @param {AnimationModel} options - Overriding default animation settings.\n   * @return {void}\n   */\n\n  Animation.prototype.animate = function (element, options) {\n    options = !options ? {} : options;\n    var model = this.getModel(options);\n\n    if (typeof element === 'string') {\n      var elements = Array.prototype.slice.call(selectAll(element, document));\n\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    } else {\n      model.element = element;\n      Animation_1.delayAnimation(model);\n    }\n  };\n  /**\n   * Stop the animation effect on animated element.\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\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\n    if (animationId) {\n      var frameId = parseInt(animationId, 10);\n      cancelAnimationFrame(frameId);\n      element.removeAttribute('e-animation-id');\n    }\n\n    if (model && model.end) {\n      model.end.call(this, model);\n    }\n  };\n  /**\n   * Set delay to animation element\n   * @param {AnimationModel} model\n   * @returns {void}\n   */\n\n\n  Animation.delayAnimation = function (model) {\n    if (model.delay) {\n      setTimeout(function () {\n        Animation_1.applyAnimation(model);\n      }, model.delay);\n    } else {\n      Animation_1.applyAnimation(model);\n    }\n  };\n  /**\n   * Triggers animation\n   * @param {AnimationModel} model\n   * @returns {void}\n   */\n\n\n  Animation.applyAnimation = function (model) {\n    var _this = this;\n\n    model.timeStamp = 0;\n    var step = 0;\n    var timerId = 0;\n    var startTime = 0;\n    var prevTimeStamp = 0;\n    var duration = model.duration;\n    model.element.setAttribute('e-animate', 'true');\n\n    var startAnimation = function startAnimation(timeStamp) {\n      try {\n        if (timeStamp) {\n          // let step: number = model.timeStamp = timeStamp - startTime;\n\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\n          if (!step && model.begin) {\n            model.begin.call(_this, model);\n          }\n\n          step = step + 1;\n          var avg = model.timeStamp / step;\n\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\n            if (model.progress) {\n              model.progress.call(_this, model);\n            } // repeat requestAnimationFrame \n\n\n            requestAnimationFrame(startAnimation);\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\n            if (model.end) {\n              model.end.call(_this, model);\n            }\n          }\n        } else {\n          startTime = performance.now(); // set initial requestAnimationFrame\n\n          timerId = requestAnimationFrame(startAnimation);\n          model.element.setAttribute('e-animation-id', timerId.toString());\n        }\n      } catch (e) {\n        cancelAnimationFrame(timerId);\n        model.element.removeAttribute('e-animation-id');\n\n        if (model.fail) {\n          model.fail.call(_this, e);\n        }\n      }\n    };\n\n    startAnimation();\n  };\n  /**\n   * Returns Animation Model\n   * @param {AnimationModel} options\n   * @returns {AnimationModel}\n   */\n\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] : options.timingFunction || this.easing[this.timingFunction]\n    };\n  };\n  /**\n   * @private\n   */\n\n\n  Animation.prototype.onPropertyChanged = function (newProp, oldProp) {// no code needed\n  };\n  /**\n   * Returns module name as animation\n   * @private\n   */\n\n\n  Animation.prototype.getModuleName = function () {\n    return 'animation';\n  };\n  /**\n   * @private\n   */\n\n\n  Animation.prototype.destroy = function () {//Override base destroy;\n  };\n\n  var Animation_1;\n\n  __decorate([Property('FadeIn')], Animation.prototype, \"name\", void 0);\n\n  __decorate([Property(400)], Animation.prototype, \"duration\", void 0);\n\n  __decorate([Property('ease')], Animation.prototype, \"timingFunction\", void 0);\n\n  __decorate([Property(0)], Animation.prototype, \"delay\", void 0);\n\n  __decorate([Event()], Animation.prototype, \"progress\", void 0);\n\n  __decorate([Event()], Animation.prototype, \"begin\", void 0);\n\n  __decorate([Event()], Animation.prototype, \"end\", void 0);\n\n  __decorate([Event()], Animation.prototype, \"fail\", void 0);\n\n  Animation = Animation_1 = __decorate([NotifyPropertyChanges], Animation);\n  return Animation;\n}(Base);\n\nexport { Animation };\n/**\n * Ripple provides material theme's wave effect when an element is clicked\n * ```html\n * <div id='ripple'></div>\n * <script>\n *   rippleEffect(document.getElementById('ripple'));\n * </script>\n * ```\n * @private\n * @param HTMLElement element - Target element\n * @param RippleOptions rippleOptions - Ripple options .\n */\n\nexport function rippleEffect(element, rippleOptions, done) {\n  var rippleModel = getRippleModel(rippleOptions);\n\n  if (rippleModel.rippleFlag === false || rippleModel.rippleFlag === undefined && !isRippleEnabled) {\n    return Function;\n  }\n\n  element.setAttribute('data-ripple', 'true');\n  EventHandler.add(element, 'mousedown', rippleHandler, {\n    parent: element,\n    rippleOptions: rippleModel\n  });\n  EventHandler.add(element, 'mouseup', rippleUpHandler, {\n    parent: element,\n    rippleOptions: rippleModel,\n    done: done\n  });\n  EventHandler.add(element, 'mouseleave', rippleLeaveHandler, {\n    parent: element,\n    rippleOptions: rippleModel\n  });\n\n  if (Browser.isPointer) {\n    EventHandler.add(element, 'transitionend', rippleLeaveHandler, {\n      parent: element,\n      rippleOptions: rippleModel\n    });\n  }\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\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 * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\n\n\nfunction rippleHandler(e) {\n  var target = e.target;\n  var selector = this.rippleOptions.selector;\n  var element = selector ? closest(target, selector) : target;\n\n  if (!element || this.rippleOptions && closest(target, this.rippleOptions.ignore)) {\n    return;\n  }\n\n  var offset = element.getBoundingClientRect();\n  var offsetX = e.pageX - document.body.scrollLeft;\n  var offsetY = e.pageY - (!document.body.scrollTop && document.documentElement ? 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\n  if (this.rippleOptions && this.rippleOptions.isCenterRipple) {\n    x = 0;\n    y = 0;\n    diameter = '100%';\n  }\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;' + 'transition-duration: ' + duration + 'ms;';\n  var rippleElement = createElement('div', {\n    className: 'e-ripple-element',\n    styles: styles\n  });\n  element.appendChild(rippleElement);\n  window.getComputedStyle(rippleElement).getPropertyValue('opacity');\n  rippleElement.style.transform = 'scale(1)';\n\n  if (element !== this.parent) {\n    EventHandler.add(element, 'mouseleave', rippleLeaveHandler, {\n      parent: this.parent,\n      rippleOptions: this.rippleOptions\n    });\n  }\n}\n/**\n * Handler for ripple element mouse up event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\n\n\nfunction rippleUpHandler(e) {\n  removeRipple(e, this);\n}\n/**\n * Handler for ripple element mouse move event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\n\n\nfunction rippleLeaveHandler(e) {\n  removeRipple(e, this);\n}\n/**\n * Handler for removing ripple element\n * @param {MouseEvent} e\n * @param {rippleArgs} eventArgs\n * @returns {void}\n * @private\n */\n\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\n  if (!element || element && element.className.indexOf('e-ripple') === -1) {\n    return;\n  }\n\n  var rippleElements = selectAll('.e-ripple-element', element);\n  var rippleElement = rippleElements[rippleElements.length - 1];\n\n  if (rippleElement) {\n    rippleElement.style.opacity = '0.5';\n  }\n\n  if (eventArgs.parent !== element) {\n    EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n  }\n  /* tslint:disable:align */\n\n\n  setTimeout(function () {\n    if (rippleElement && rippleElement.parentNode) {\n      rippleElement.parentNode.removeChild(rippleElement);\n    }\n\n    if (!element.getElementsByClassName('e-ripple-element').length) {\n      element.classList.remove('e-ripple');\n    }\n\n    if (eventArgs.done) {\n      eventArgs.done(e);\n    }\n  }, duration);\n}\n\nexport var isRippleEnabled = false;\n/**\n * Animation Module provides support to enable ripple effect functionality to Essential JS 2 components.\n * @param {boolean} isRipple Specifies the boolean value to enable or disable ripple effect.\n * @returns {boolean}\n */\n\nexport function enableRipple(isRipple) {\n  isRippleEnabled = isRipple;\n  return isRippleEnabled;\n}","/**\n * Module loading operations\n */\nimport { createInstance, setValue, getValue, deleteObject } from './util';\nvar MODULE_SUFFIX = 'Module';\n\nvar ModuleLoader =\n/** @class */\nfunction () {\n  function ModuleLoader(parent) {\n    this.loadedModules = [];\n    this.parent = parent;\n  }\n\n  ;\n  /**\n   * Inject required modules in component library\n   * @return {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\n  ModuleLoader.prototype.inject = function (requiredModules, moduleList) {\n    var reqLength = requiredModules.length;\n\n    if (reqLength === 0) {\n      this.clean();\n      return;\n    }\n\n    if (this.loadedModules.length) {\n      this.clearUnusedModule(requiredModules);\n    }\n\n    for (var i = 0; i < reqLength; i++) {\n      var modl = requiredModules[i];\n\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\n        if (module.prototype.getModuleName() === modl.member && !this.isModuleLoaded(modName)) {\n          var moduleObject = createInstance(module, modl.args);\n          var memberName = this.getMemberName(modName);\n\n          if (modl.isProperty) {\n            setValue(memberName, module, this.parent);\n          } else {\n            setValue(memberName, moduleObject, this.parent);\n          }\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   * @return {void}\n   */\n\n\n  ModuleLoader.prototype.clean = function () {\n    for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n      var modules = _a[_i];\n\n      if (!modules.isProperty) {\n        getValue(modules.member, this.parent).destroy();\n      }\n    }\n\n    this.loadedModules = [];\n  };\n  /**\n   * Removes all unused modules\n   * @param {ModuleDeclaration[]} moduleList\n   * @returns {void}\n   */\n\n\n  ModuleLoader.prototype.clearUnusedModule = function (moduleList) {\n    var _this = this;\n\n    var usedModules = moduleList.map(function (arg) {\n      return _this.getMemberName(arg.member);\n    });\n    var removableModule = this.loadedModules.filter(function (module) {\n      return usedModules.indexOf(module.member) === -1;\n    });\n\n    for (var _i = 0, removableModule_1 = removableModule; _i < removableModule_1.length; _i++) {\n      var mod = removableModule_1[_i];\n\n      if (!mod.isProperty) {\n        getValue(mod.member, this.parent).destroy();\n      }\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   * @param {string} name\n   * @returns {string}\n   */\n\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   * @param {string} modName\n   * @returns {boolean}\n   */\n\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\n      if (mod.member === this.getMemberName(modName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  return ModuleLoader;\n}();\n\nexport { ModuleLoader };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nvar __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\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 { VirtualDOM } from './virtual-dom';\nimport { getRandomId } from './template-engine';\nvar componentCount = 0;\nvar lastPageID;\nvar lastHistoryLen = 0;\nexport var versionBasedStatePersistence = false;\n/**\n * To enable or disable version based statePersistence functionality for all components globally.\n * @param {boolean} status - Optional argument Specifies the status value to enable or disable versionBasedStatePersistence option.\n * @returns {void}\n */\n\n/* istanbul ignore next */\n\nexport function enableVersionBasedPersistence(status) {\n  versionBasedStatePersistence = status;\n}\n/**\n * Base class for all Essential JavaScript components\n */\n\nvar Component =\n/** @class */\nfunction (_super) {\n  __extends(Component, _super);\n  /**\n   * Initialize the constructor for component base\n   */\n\n\n  function Component(options, selector) {\n    var _this = _super.call(this, options, selector) || this;\n\n    _this.randomId = uniqueID();\n    /**\n     * string template option for Blazor template rendering\n     * @private\n     */\n\n    _this.isStringTemplate = false;\n    _this.needsID = false;\n    _this.isReactHybrid = false;\n\n    if (isNullOrUndefined(_this.enableRtl)) {\n      _this.setProperties({\n        'enableRtl': rightToLeft\n      }, true);\n    }\n\n    if (isNullOrUndefined(_this.locale)) {\n      _this.setProperties({\n        'locale': defaultCulture\n      }, true);\n    }\n\n    _this.moduleLoader = new ModuleLoader(_this);\n    _this.localObserver = new Observer(_this); // tslint:disable-next-line:no-function-constructor-with-string-args\n\n    onIntlChange.on('notifyExternalChange', _this.detectFunction, _this, _this.randomId);\n\n    if (!isUndefined(selector)) {\n      _this.appendTo();\n    }\n\n    return _this;\n  }\n\n  Component.prototype.requiredModules = function () {\n    return [];\n  };\n\n  ;\n  /**\n   * Destroys the sub modules while destroying the widget\n   */\n\n  Component.prototype.destroy = function () {\n    if (this.isDestroyed) {\n      return;\n    }\n\n    if (this.enablePersistence) {\n      this.setPersistData();\n    }\n\n    this.localObserver.destroy();\n\n    if (this.refreshing) {\n      return;\n    }\n\n    removeClass([this.element], ['e-control']);\n    this.trigger('destroyed', {\n      cancel: false\n    });\n\n    _super.prototype.destroy.call(this);\n\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\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  /* istanbul ignore next */\n\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\n  /* istanbul ignore next */\n\n\n  Component.prototype.getRootElement = function () {\n    if (this.isReactHybrid) {\n      return this.actualElement;\n    } else {\n      return this.element;\n    }\n  };\n  /**\n   * Returns the persistence data for component\n   */\n\n  /* istanbul ignore next */\n  //tslint:disable:no-any\n\n\n  Component.prototype.getLocalData = function () {\n    var eleId = this.getModuleName() + this.element.id;\n\n    if (versionBasedStatePersistence) {\n      return window.localStorage.getItem(eleId + this.ej2StatePersistenceVersion);\n    } else {\n      return window.localStorage.getItem(eleId);\n    }\n  };\n  /**\n   * Appends the control within the given HTML element\n   * @param {string | HTMLElement} selector - Target element where control needs to be appended\n   */\n\n\n  Component.prototype.appendTo = function (selector) {\n    if (!isNullOrUndefined(selector) && typeof selector === 'string') {\n      this.element = select(selector, document);\n    } else if (!isNullOrUndefined(selector)) {\n      this.element = selector;\n    }\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\n      if (this.needsID && !this.element.id) {\n        this.element.id = this.getUniqueID(this.getModuleName());\n      }\n\n      if (this.enablePersistence) {\n        this.mergePersistData();\n        window.addEventListener('unload', this.setPersistData.bind(this));\n      }\n\n      var inst = getValue('ej2_instances', this.element);\n\n      if (!inst || inst.indexOf(this) === -1) {\n        _super.prototype.addInstance.call(this);\n      }\n\n      this.preRender();\n      this.injectModules();\n      this.render();\n\n      if (!this.mount) {\n        this.trigger('created');\n      } else {\n        this.accessMount();\n      }\n    }\n  };\n  /**\n   * It is used to process the post rendering functionalities to a component.\n   */\n\n\n  Component.prototype.renderComplete = function (wrapperElement) {\n    if (isBlazor()) {\n      var sfBlazor = 'sfBlazor'; // tslint:disable-next-line:no-any\n\n      window[sfBlazor].renderComplete(this.element, wrapperElement);\n    }\n\n    this.isRendered = true;\n  };\n  /**\n   * When invoked, applies the pending property changes immediately to the component.\n   */\n\n\n  Component.prototype.dataBind = function () {\n    this.injectModules();\n\n    _super.prototype.dataBind.call(this);\n  };\n\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   * @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   * @return {void}\n   * @private\n   */\n\n  Component.prototype.on = function (event, handler, context) {\n    if (typeof event === 'string') {\n      this.localObserver.on(event, handler, context);\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   * @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   * @return {void}\n   * @private\n   */\n\n\n  Component.prototype.off = function (event, handler) {\n    if (typeof event === 'string') {\n      this.localObserver.off(event, handler);\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   * @param {string} property - Specifies the event to be notify.\n   * @param {Object} argument - Additional parameters to pass while calling the handler.\n   * @return {void}\n   * @private\n   */\n\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   * @private\n   */\n\n\n  Component.prototype.getInjectedModules = function () {\n    return this.injectedModules;\n  };\n\n  ;\n  /**\n   * Dynamically injects the required modules to the component.\n   */\n\n  Component.Inject = function () {\n    var moduleList = [];\n\n    for (var _i = 0; _i < arguments.length; _i++) {\n      moduleList[_i] = arguments[_i];\n    }\n\n    if (!this.prototype.injectedModules) {\n      this.prototype.injectedModules = [];\n    }\n\n    for (var i = 0; i < moduleList.length; i++) {\n      if (this.prototype.injectedModules.indexOf(moduleList[i]) === -1) {\n        this.prototype.injectedModules.push(moduleList[i]);\n      }\n    }\n  };\n  /**\n   * This is a instance method to create an element.\n   * @private\n   */\n\n  /* istanbul ignore next */\n  //tslint:disable:no-any\n\n\n  Component.prototype.createElement = function (tagName, prop, isVDOM) {\n    if (isVDOM && this.isReactHybrid) {\n      if (prop) {\n        prop = {};\n      }\n\n      prop['data-id'] = getRandomId();\n      return VirtualDOM.createElement(tagName, prop);\n    } else {\n      return createElement(tagName, prop);\n    }\n  };\n  /**\n   *\n   * @param handler - handler to be triggered after state Updated.\n   * @param argument - Arguments to be passed to caller.\n   * @private\n   */\n\n  /* istanbul ignore next */\n  //tslint:disable:no-any\n\n\n  Component.prototype.triggerStateChange = function (handler, argument) {\n    if (this.isReactHybrid) {\n      //tslint:disable:no-any\n      this.setState();\n      this.currentContext = {\n        calls: handler,\n        args: argument\n      };\n    }\n  }; // tslint: enable: no-any\n\n\n  Component.prototype.injectModules = function () {\n    if (this.injectedModules && this.injectedModules.length) {\n      this.moduleLoader.inject(this.requiredModules(), this.injectedModules);\n    }\n  };\n\n  Component.prototype.detectFunction = function (args) {\n    var prop = Object.keys(args);\n\n    if (prop.length) {\n      this[prop[0]] = args[prop[0]];\n    }\n  };\n\n  Component.prototype.mergePersistData = function () {\n    var data;\n\n    if (versionBasedStatePersistence) {\n      data = window.localStorage.getItem(this.getModuleName() + this.element.id + this.ej2StatePersistenceVersion);\n    } else {\n      data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n    }\n\n    if (!(isNullOrUndefined(data) || data === '')) {\n      this.setProperties(JSON.parse(data), true);\n    }\n  };\n\n  Component.prototype.setPersistData = function () {\n    if (!this.isDestroyed) {\n      if (versionBasedStatePersistence) {\n        window.localStorage.setItem(this.getModuleName() + this.element.id + this.ej2StatePersistenceVersion, this.getPersistData());\n      } else {\n        window.localStorage.setItem(this.getModuleName() + this.element.id, this.getPersistData());\n      }\n    }\n  }; //tslint:disable-next-line\n\n\n  Component.prototype.renderReactTemplates = function () {//No Code\n  }; //tslint:disable-next-line\n\n\n  Component.prototype.clearTemplate = function (templateName, index) {//No Code\n  };\n\n  Component.prototype.getUniqueID = function (definedName) {\n    if (this.isHistoryChanged()) {\n      componentCount = 0;\n    }\n\n    lastPageID = this.pageID(location.href);\n    lastHistoryLen = history.length;\n    return definedName + '_' + lastPageID + '_' + componentCount++;\n  };\n\n  Component.prototype.pageID = function (url) {\n    var hash = 0;\n\n    if (url.length === 0) {\n      return hash;\n    }\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\n    return Math.abs(hash);\n  };\n\n  Component.prototype.isHistoryChanged = function () {\n    return lastPageID !== this.pageID(location.href) || lastHistoryLen !== history.length;\n  };\n\n  Component.prototype.addOnPersist = function (options) {\n    var _this = this;\n\n    var persistObj = {};\n\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      objValue = getValue(key, this);\n\n      if (!isUndefined(objValue)) {\n        setValue(key, this.getActualProperties(objValue), persistObj);\n      }\n    }\n\n    return JSON.stringify(persistObj, function (key, value) {\n      return _this.getActualProperties(value);\n    });\n  };\n\n  Component.prototype.getActualProperties = function (obj) {\n    if (obj instanceof ChildProperty) {\n      return getValue('properties', obj);\n    } else {\n      return obj;\n    }\n  };\n\n  Component.prototype.ignoreOnPersist = function (options) {\n    return JSON.stringify(this.iterateJsonProperties(this.properties, options));\n  };\n\n  Component.prototype.iterateJsonProperties = function (obj, ignoreList) {\n    var newObj = {};\n\n    var _loop_1 = function _loop_1(key) {\n      if (ignoreList.indexOf(key) === -1) {\n        // tslint:disable-next-line:no-any\n        var value = obj[key];\n\n        if (typeof value === 'object' && !(value instanceof Array)) {\n          var newList = ignoreList.filter(function (str) {\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        } else {\n          newObj[key] = value;\n        }\n      }\n    };\n\n    var this_1 = this;\n\n    for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n      var key = _a[_i];\n\n      _loop_1(key);\n    }\n\n    return newObj;\n  };\n\n  __decorate([Property(false)], Component.prototype, \"enablePersistence\", void 0);\n\n  __decorate([Property()], Component.prototype, \"enableRtl\", void 0);\n\n  __decorate([Property()], Component.prototype, \"locale\", void 0);\n\n  Component = __decorate([NotifyPropertyChanges], Component);\n  return Component;\n}(Base);\n\nexport { Component }; //Function handling for page navigation detection \n\n/* istanbul ignore next */\n\n(function () {\n  if (typeof window !== 'undefined') {\n    window.addEventListener('popstate',\n    /* istanbul ignore next */\n    function () {\n      componentCount = 0;\n    });\n  }\n})();","import { getValue, setValue, merge, isBlazor } from './util';\nimport { Base } from './base';\n/**\n * To detect the changes for inner properties.\n * @private\n */\n\nvar ChildProperty =\n/** @class */\nfunction () {\n  function ChildProperty(parent, propName, defaultValue, isArray) {\n    this.isComplexArraySetter = false;\n    this.properties = {};\n    this.changedProperties = {};\n    this.childChangedProperties = {};\n    this.oldProperties = {}; // tslint:disable-next-line:no-empty\n\n    this.finalUpdate = function () {};\n\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   * @param {boolean} val\n   * @param {string} propName\n   * @returns {void}\n   */\n\n\n  ChildProperty.prototype.updateChange = function (val, propName) {\n    if (val === true) {\n      this.parentObj.childChangedProperties[propName] = val;\n    } else {\n      delete this.parentObj.childChangedProperties[propName];\n    }\n\n    if (this.parentObj.updateChange) {\n      this.parentObj.updateChange(val, this.parentObj.propName);\n    }\n  };\n  /**\n   * Updates time out duration\n   */\n\n\n  ChildProperty.prototype.updateTimeOut = function () {\n    if (this.parentObj.updateTimeOut) {\n      this.parentObj.finalUpdate();\n      this.parentObj.updateTimeOut();\n    } else {\n      var changeTime_1 = setTimeout(this.parentObj.dataBind.bind(this.parentObj));\n\n      var clearUpdate = function clearUpdate() {\n        clearTimeout(changeTime_1);\n      };\n\n      this.finalUpdate = clearUpdate;\n    }\n  };\n  /**\n   * Clears changed properties\n   */\n\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   * @param {Object} prop\n   * @param {boolean} muteOnChange\n   * {void}\n   */\n\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    } else {\n      merge(this, prop);\n    }\n  };\n  /**\n   * Binds data\n   */\n\n\n  ChildProperty.prototype.dataBind = function () {\n    this.callChildDataBind(this.childChangedProperties, this);\n\n    if (this.isParentArray) {\n      var curIndex = this.parentObj[this.propName].indexOf(this);\n\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    } else {\n      this.parentObj.changedProperties[this.propName] = this.changedProperties;\n      this.parentObj.oldProperties[this.propName] = this.oldProperties;\n    }\n\n    this.clearChanges();\n  };\n  /**\n   * Saves changes to newer values\n   * @param {string} key\n   * @param {Object} newValue\n   * @param {Object} oldValue\n   * @returns {void}\n   */\n\n\n  ChildProperty.prototype.saveChanges = function (key, newValue, oldValue, restrictServerDataBind) {\n    if (this.controlParent.isProtectedOnChange) {\n      return;\n    }\n\n    if (!restrictServerDataBind) {\n      this.serverDataBind(key, newValue, true);\n    }\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\n  ChildProperty.prototype.serverDataBind = function (key, value, isSaveChanges, action) {\n    if (isBlazor() && !this.parentObj.isComplexArraySetter) {\n      // tslint:disable-next-line:no-any\n      var parent_1;\n      var newChanges = {};\n      var parentKey = isSaveChanges ? this.getParentKey(true) + '.' + key : key;\n      /* istanbul ignore else  */\n\n      if (parentKey.indexOf('.') !== -1) {\n        var complexKeys = parentKey.split('.');\n        parent_1 = newChanges;\n\n        for (var i = 0; i < complexKeys.length; i++) {\n          var isFinal = i === complexKeys.length - 1;\n          parent_1[complexKeys[i]] = isFinal ? value : {};\n          parent_1 = isFinal ? parent_1 : parent_1[complexKeys[i]];\n        }\n      } else {\n        newChanges[parentKey] = {};\n        parent_1 = newChanges[parentKey];\n        newChanges[parentKey][key] = value;\n      }\n      /* istanbul ignore next */\n\n\n      if (this.isParentArray) {\n        var actionProperty = 'ejsAction';\n        parent_1[actionProperty] = action ? action : 'none';\n      }\n\n      this.controlParent.serverDataBind(newChanges);\n    }\n  };\n\n  ChildProperty.prototype.getParentKey = function (isSaveChanges) {\n    // tslint:disable-next-line:no-any\n    var index = '';\n    var propName = this.propName;\n    /* istanbul ignore next */\n\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\n    if (this.controlParent !== this.parentObj) {\n      propName = this.parentObj.getParentKey() + '.' + this.propName + index;\n    }\n\n    return propName;\n  };\n\n  return ChildProperty;\n}();\n\nexport { ChildProperty };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nvar __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\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 = {\n  left: 0,\n  top: 0,\n  bottom: 0,\n  right: 0\n};\nvar positionProp = ['offsetLeft', 'offsetTop'];\nvar axisMapper = ['x', 'y'];\nvar axisValueMapper = ['left', 'top'];\nvar isDraggedObject = {\n  isDragged: false\n};\n/**\n * Specifies the position coordinates\n */\n\nvar Position =\n/** @class */\nfunction (_super) {\n  __extends(Position, _super);\n\n  function Position() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n\n  __decorate([Property(0)], Position.prototype, \"left\", void 0);\n\n  __decorate([Property(0)], Position.prototype, \"top\", void 0);\n\n  return Position;\n}(ChildProperty);\n\nexport { Position };\n/**\n * Draggable Module provides support to enable draggable functionality in Dom Elements.\n * ```html\n * <div id='drag'>Draggable</div>\n * <script>\n * var ele = document.getElementById('drag');\n * var drag:Draggable = new Draggable(ele,{\n *     clone:false,\n *     drag: function(e) {\n *      //drag handler code.\n *      },\n *     handle:'.class'\n * });\n * </script>\n * ```\n */\n\nvar Draggable =\n/** @class */\nfunction (_super) {\n  __extends(Draggable, _super);\n\n  function Draggable(element, options) {\n    var _this = _super.call(this, options, element) || this;\n\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    /* tslint:disable no-any */\n\n    _this.tapHoldTimer = 0;\n    _this.externalInitialize = false;\n    _this.diffY = 0;\n    _this.parentScrollX = 0;\n    _this.parentScrollY = 0;\n    _this.droppables = {};\n\n    _this.bind();\n\n    return _this;\n  }\n\n  Draggable_1 = Draggable;\n\n  Draggable.prototype.bind = function () {\n    this.toggleEvents();\n\n    if (Browser.isIE) {\n      addClass([this.element], 'e-block-touch');\n    }\n\n    this.droppables[this.scope] = {};\n  };\n\n  Draggable.getDefaultPosition = function () {\n    return extend({}, defaultPosition);\n  };\n\n  Draggable.prototype.toggleEvents = function (isUnWire) {\n    var ele;\n\n    if (!isUndefined(this.handle)) {\n      ele = select(this.handle, this.element);\n    }\n\n    var handler = this.enableTapHold && Browser.isDevice && Browser.isTouch ? this.mobileInitialize : this.initialize;\n\n    if (isUnWire) {\n      EventHandler.remove(ele || this.element, Browser.touchStartEvent, handler);\n    } else {\n      EventHandler.add(ele || this.element, Browser.touchStartEvent, handler, this);\n    }\n  };\n  /* istanbul ignore next */\n\n\n  Draggable.prototype.mobileInitialize = function (evt) {\n    var _this = this;\n\n    var target = evt.currentTarget;\n    this.tapHoldTimer = setTimeout(function () {\n      _this.externalInitialize = true;\n\n      _this.removeTapholdTimer();\n\n      _this.initialize(evt, target);\n    }, this.tapHoldThreshold);\n    EventHandler.add(document, Browser.touchMoveEvent, this.removeTapholdTimer, this);\n    EventHandler.add(document, Browser.touchEndEvent, this.removeTapholdTimer, this);\n  };\n  /* istanbul ignore next */\n\n\n  Draggable.prototype.removeTapholdTimer = function () {\n    clearTimeout(this.tapHoldTimer);\n    EventHandler.remove(document, Browser.touchMoveEvent, this.removeTapholdTimer);\n    EventHandler.remove(document, Browser.touchEndEvent, this.removeTapholdTimer);\n  };\n  /* istanbul ignore next */\n\n\n  Draggable.prototype.getScrollableParent = function (element, axis) {\n    var scroll = {\n      'vertical': 'scrollHeight',\n      'horizontal': 'scrollWidth'\n    };\n    var client = {\n      'vertical': 'clientHeight',\n      'horizontal': 'clientWidth'\n    };\n\n    if (isNullOrUndefined(element)) {\n      return null;\n    }\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 + (this.parentScrollY === 0 ? element.scrollTop : element.scrollTop - this.parentScrollY);\n        } else {\n          this.parentScrollX = this.parentScrollX + (this.parentScrollX === 0 ? element.scrollLeft : element.scrollLeft - this.parentScrollX);\n        }\n\n        if (!isNullOrUndefined(element)) {\n          return this.getScrollableParent(element.parentNode, axis);\n        } else {\n          return element;\n        }\n      } else {\n        return this.getScrollableParent(element.parentNode, axis);\n      }\n    } else {\n      return this.getScrollableParent(element.parentNode, axis);\n    }\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\n  Draggable.prototype.initialize = function (evt, curTarget) {\n    this.currentStateTarget = evt.target;\n\n    if (this.isDragStarted()) {\n      return;\n    } else {\n      this.isDragStarted(true);\n      this.externalInitialize = false;\n    }\n\n    this.target = evt.currentTarget || curTarget;\n    this.dragProcessStarted = false;\n\n    if (this.abort) {\n      /* tslint:disable no-any */\n      var abortSelectors = this.abort;\n\n      if (typeof abortSelectors === 'string') {\n        abortSelectors = [abortSelectors];\n      }\n\n      for (var i = 0; i < abortSelectors.length; i++) {\n        if (!isNullOrUndefined(closest(evt.target, abortSelectors[i]))) {\n          /* istanbul ignore next */\n          if (this.isDragStarted()) {\n            this.isDragStarted(true);\n          }\n\n          return;\n        }\n      }\n    }\n\n    if (this.preventDefault && !isUndefined(evt.changedTouches) && evt.type !== 'touchstart') {\n      evt.preventDefault();\n    }\n\n    this.element.setAttribute('aria-grabbed', 'true');\n    var intCoord = this.getCoordinates(evt);\n    this.initialPosition = {\n      x: intCoord.pageX,\n      y: intCoord.pageY\n    };\n\n    if (!this.clone) {\n      var pos = this.element.getBoundingClientRect();\n      this.getScrollableValues();\n\n      if (evt.clientX === evt.pageX) {\n        this.parentScrollX = 0;\n      }\n\n      if (evt.clientY === evt.pageY) {\n        this.parentScrollY = 0;\n      }\n\n      this.relativeXPosition = intCoord.pageX - (pos.left + this.parentScrollX);\n      this.relativeYPosition = intCoord.pageY - (pos.top + this.parentScrollY);\n    }\n\n    if (this.externalInitialize) {\n      this.intDragStart(evt);\n    } else {\n      EventHandler.add(document, Browser.touchMoveEvent, this.intDragStart, this);\n      EventHandler.add(document, Browser.touchEndEvent, this.intDestroy, this);\n    }\n\n    this.toggleEvents(true);\n\n    if (evt.type !== 'touchstart' && this.isPreventSelect) {\n      document.body.classList.add('e-prevent-select');\n    }\n\n    this.externalInitialize = false;\n    EventHandler.trigger(document.documentElement, Browser.touchStartEvent, evt);\n  };\n\n  Draggable.prototype.intDragStart = function (evt) {\n    this.removeTapholdTimer();\n    var isChangeTouch = !isUndefined(evt.changedTouches);\n\n    if (isChangeTouch && evt.changedTouches.length !== 1) {\n      return;\n    }\n\n    if (isChangeTouch) {\n      evt.preventDefault();\n    }\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\n    if (this.clone && this.dragTarget) {\n      var intClosest = closest(evt.target, this.dragTarget);\n\n      if (!isNullOrUndefined(intClosest)) {\n        element = intClosest;\n      }\n    }\n    /* istanbul ignore next */\n\n\n    if (this.isReplaceDragEle) {\n      element = this.currentStateCheck(evt.target, element);\n    }\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\n    if (distance >= this.distance || this.externalInitialize) {\n      var ele = this.getHelperElement(evt);\n\n      if (!ele || isNullOrUndefined(ele)) {\n        return;\n      }\n\n      var dragTargetElement = this.helperElement = ele;\n      this.parentClientRect = this.calculateParentPosition(dragTargetElement.offsetParent);\n\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\n      if (this.dragArea) {\n        this.setDragArea();\n      } else {\n        this.dragLimit = {\n          left: 0,\n          right: 0,\n          bottom: 0,\n          top: 0\n        };\n        this.borderWidth = {\n          top: 0,\n          left: 0\n        };\n      }\n\n      pos = {\n        left: this.position.left - this.parentClientRect.left,\n        top: this.position.top - this.parentClientRect.top\n      };\n\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\n      this.getScrollableValues(); // when drag element has margin-top\n\n      var styles = getComputedStyle(element);\n      var marginTop = parseFloat(styles.marginTop);\n      /* istanbul ignore next */\n\n      if (this.clone && marginTop !== 0) {\n        pos.top += marginTop;\n      }\n\n      var posValue = this.getProcessedPositionValue({\n        top: pos.top - this.diffY + 'px',\n        left: pos.left - this.diffX + 'px'\n      });\n      this.dragElePosition = {\n        top: pos.top,\n        left: pos.left\n      };\n      setStyleAttribute(dragTargetElement, this.getDragPosition({\n        position: 'absolute',\n        left: posValue.left,\n        top: posValue.top\n      }));\n      EventHandler.remove(document, Browser.touchMoveEvent, this.intDragStart);\n      EventHandler.remove(document, Browser.touchEndEvent, this.intDestroy);\n\n      if (!isBlazor()) {\n        this.bindDragEvents(dragTargetElement);\n      }\n    }\n  };\n\n  Draggable.prototype.bindDragEvents = function (dragTargetElement) {\n    if (isVisible(dragTargetElement)) {\n      EventHandler.add(document, Browser.touchMoveEvent, this.intDrag, this);\n      EventHandler.add(document, Browser.touchEndEvent, this.intDragStop, this);\n      this.setGlobalDroppables(false, this.element, dragTargetElement);\n    } else {\n      this.toggleEvents();\n      document.body.classList.remove('e-prevent-select');\n    }\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\n    while (el.offsetParent) {\n      el = el.offsetParent;\n      this.top += el.offsetTop;\n      this.left += el.offsetLeft;\n    }\n\n    return this.top >= window.pageYOffset && this.left >= window.pageXOffset && this.top + this.height <= window.pageYOffset + window.innerHeight && this.left + this.width <= window.pageXOffset + window.innerWidth;\n  };\n\n  Draggable.prototype.getProcessedPositionValue = function (value) {\n    if (this.queryPositionInfo) {\n      return this.queryPositionInfo(value);\n    }\n\n    return value;\n  };\n\n  Draggable.prototype.calculateParentPosition = function (ele) {\n    if (isNullOrUndefined(ele)) {\n      return {\n        left: 0,\n        top: 0\n      };\n    }\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  }; // tslint:disable-next-line:max-func-body-length\n\n\n  Draggable.prototype.intDrag = function (evt) {\n    if (!isUndefined(evt.changedTouches) && evt.changedTouches.length !== 1) {\n      return;\n    }\n\n    var left;\n    var top;\n    this.position = this.getMousePosition(evt, this.isDragScroll);\n    var docHeight = this.getDocumentWidthHeight('Height');\n\n    if (docHeight < this.position.top) {\n      this.position.top = docHeight;\n    }\n\n    var docWidth = this.getDocumentWidthHeight('Width');\n\n    if (docWidth < this.position.left) {\n      this.position.left = docWidth;\n    }\n\n    if (this.drag) {\n      var curTarget = this.getProperTargetElement(evt);\n      this.trigger('drag', {\n        event: evt,\n        element: this.element,\n        target: curTarget\n      });\n    }\n\n    var eleObj = this.checkTargetElement(evt);\n\n    if (eleObj.target && eleObj.instance) {\n      /* tslint:disable no-any */\n      var flag = true;\n\n      if (this.hoverObject) {\n        if (this.hoverObject.instance !== eleObj.instance) {\n          this.triggerOutFunction(evt, eleObj);\n        } else {\n          flag = false;\n        }\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    } else if (this.hoverObject) {\n      this.triggerOutFunction(evt, eleObj);\n    }\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    var marginTop = parseFloat(styles.marginTop);\n\n    if (this.dragArea) {\n      if (this.pageX !== pagex || this.skipDistanceCheck) {\n        var helperWidth = helperElement.offsetWidth + (parseFloat(styles.marginLeft) + parseFloat(styles.marginRight));\n\n        if (this.dragLimit.left > dLeft && dLeft > 0) {\n          left = this.dragLimit.left;\n        } else if (this.dragLimit.right + window.pageXOffset < dLeft + helperWidth && dLeft > 0) {\n          left = dLeft - (dLeft - this.dragLimit.right) + window.pageXOffset - helperWidth;\n        } else {\n          left = dLeft < 0 ? this.dragLimit.left : dLeft;\n        }\n      }\n\n      if (this.pageY !== pagey || this.skipDistanceCheck) {\n        var helperHeight = helperElement.offsetHeight + (parseFloat(styles.marginTop) + parseFloat(styles.marginBottom));\n\n        if (this.dragLimit.top > dTop && dTop > 0) {\n          top = this.dragLimit.top;\n        } else if (this.dragLimit.bottom + window.pageYOffset < dTop + helperHeight && dTop > 0) {\n          top = dTop - (dTop - this.dragLimit.bottom) + window.pageYOffset - helperHeight;\n        } else {\n          top = dTop < 0 ? this.dragLimit.top : dTop;\n        }\n      }\n    } else {\n      left = dLeft;\n      top = dTop;\n    }\n\n    var iTop = tTop + this.borderWidth.top;\n    var iLeft = tLeft + this.borderWidth.left;\n\n    if (this.dragProcessStarted) {\n      if (isNullOrUndefined(top)) {\n        top = this.prevTop;\n      }\n\n      if (isNullOrUndefined(left)) {\n        left = this.prevLeft;\n      }\n    }\n\n    var draEleTop;\n    var draEleLeft;\n\n    if (this.dragArea) {\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 ? this.dragElePosition.left : left - iLeft; // when drag-element has margin-top\n\n      /* istanbul ignore next */\n\n      if (marginTop > 0) {\n        if (this.clone) {\n          draEleTop += this.element.offsetTop;\n\n          if (dTop < 0) {\n            if (this.element.offsetTop + dTop >= 0) {\n              draEleTop = this.element.offsetTop + dTop;\n            } else {\n              draEleTop -= this.element.offsetTop;\n            }\n          }\n\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\n            if (tempDraEleTop + marginTop + iTop < 0) {\n              draEleTop -= marginTop + iTop;\n            } else {\n              draEleTop = tempDraEleTop;\n            }\n          } else {\n            draEleTop -= marginTop + iTop;\n          }\n        }\n      }\n    } else {\n      draEleTop = top - iTop;\n      draEleLeft = left - iLeft;\n    }\n\n    var dragValue = this.getProcessedPositionValue({\n      top: draEleTop + 'px',\n      left: draEleLeft + 'px'\n    });\n    setStyleAttribute(helperElement, this.getDragPosition(dragValue));\n\n    if (!this.elementInViewport(helperElement) && this.enableAutoScroll) {\n      this.helperElement.scrollIntoView();\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\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\n  Draggable.prototype.getDragPosition = function (dragValue) {\n    var temp = extend({}, dragValue);\n\n    if (this.axis) {\n      if (this.axis === 'x') {\n        delete temp.top;\n      } else if (this.axis === 'y') {\n        delete temp.left;\n      }\n    }\n\n    return temp;\n  };\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\n  Draggable.prototype.intDragStop = function (evt) {\n    this.dragProcessStarted = false;\n\n    if (!isUndefined(evt.changedTouches) && evt.changedTouches.length !== 1) {\n      return;\n    }\n\n    var type = ['touchend', 'pointerup', 'mouseup'];\n\n    if (type.indexOf(evt.type) !== -1) {\n      if (this.dragStop) {\n        var curTarget = this.getProperTargetElement(evt);\n        this.trigger('dragStop', {\n          event: evt,\n          element: this.element,\n          target: curTarget,\n          helper: this.helperElement\n        });\n      }\n\n      this.intDestroy(evt);\n    } else {\n      this.element.setAttribute('aria-grabbed', 'false');\n    }\n\n    var eleObj = this.checkTargetElement(evt);\n\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\n    this.setGlobalDroppables(true);\n    document.body.classList.remove('e-prevent-select');\n  };\n  /**\n   * @private\n   */\n\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.touchMoveEvent, this.intDragStart);\n    EventHandler.remove(document, Browser.touchEndEvent, this.intDragStop);\n    EventHandler.remove(document, Browser.touchEndEvent, this.intDestroy);\n    EventHandler.remove(document, Browser.touchMoveEvent, this.intDrag);\n\n    if (this.isDragStarted()) {\n      this.isDragStarted(true);\n    }\n  }; // triggers when property changed\n\n\n  Draggable.prototype.onPropertyChanged = function (newProp, oldProp) {//No Code to handle\n  };\n\n  Draggable.prototype.getModuleName = function () {\n    return 'draggable';\n  };\n\n  Draggable.prototype.isDragStarted = function (change) {\n    if (change) {\n      isDraggedObject.isDragged = !isDraggedObject.isDragged;\n    }\n\n    return isDraggedObject.isDragged;\n  };\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\n    if (type === 'string') {\n      ele = select(this.dragArea);\n    } else {\n      ele = this.dragArea;\n    }\n\n    if (ele) {\n      var elementArea = ele.getBoundingClientRect();\n      eleWidthBound = ele.scrollWidth ? ele.scrollWidth : elementArea.right - elementArea.left;\n      eleHeightBound = ele.scrollHeight ? ele.scrollHeight : elementArea.bottom - elementArea.top;\n      var keys = ['Top', 'Left', 'Bottom', 'Right'];\n      var styles = getComputedStyle(ele);\n\n      for (var i = 0; i < keys.length; i++) {\n        var key = keys[i];\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\n      top = elementArea.top;\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\n  Draggable.prototype.getProperTargetElement = function (evt) {\n    var intCoord = this.getCoordinates(evt);\n    var ele;\n    var prevStyle = this.helperElement.style.pointerEvents || '';\n\n    if (compareElementParent(evt.target, this.helperElement) || evt.type.indexOf('touch') !== -1) {\n      this.helperElement.style.pointerEvents = 'none';\n      ele = document.elementFromPoint(intCoord.clientX, intCoord.clientY);\n      this.helperElement.style.pointerEvents = prevStyle;\n    } else {\n      ele = evt.target;\n    }\n\n    return ele;\n  };\n  /* istanbul ignore next */\n\n\n  Draggable.prototype.currentStateCheck = function (ele, oldEle) {\n    var elem;\n\n    if (!isNullOrUndefined(this.currentStateTarget) && this.currentStateTarget !== ele) {\n      elem = this.currentStateTarget;\n    } else {\n      elem = !isNullOrUndefined(oldEle) ? oldEle : ele;\n    }\n\n    return elem;\n  };\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\n    if (isdragscroll) {\n      pageX = this.clone ? intCoord.pageX : intCoord.pageX + (isOffsetParent ? 0 : dragEle.offsetParent.scrollLeft) - this.relativeXPosition;\n      pageY = this.clone ? intCoord.pageY : intCoord.pageY + (isOffsetParent ? 0 : dragEle.offsetParent.scrollTop) - this.relativeYPosition;\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\n    return {\n      left: pageX - (this.margin.left + this.cursorAt.left),\n      top: pageY - (this.margin.top + this.cursorAt.top)\n    };\n  };\n\n  Draggable.prototype.getCoordinates = function (evt) {\n    if (evt.type.indexOf('touch') > -1) {\n      return evt.changedTouches[0];\n    }\n\n    return evt;\n  };\n\n  Draggable.prototype.getHelperElement = function (evt) {\n    var element;\n\n    if (this.clone) {\n      if (this.helper) {\n        element = this.helper({\n          sender: evt,\n          element: this.target\n        });\n      } else {\n        element = createElement('div', {\n          className: 'e-drag-helper e-block-touch',\n          innerHTML: 'Draggable'\n        });\n        document.body.appendChild(element);\n      }\n    } else {\n      element = this.element;\n    }\n\n    return element;\n  };\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\n  Draggable.prototype.checkTargetElement = function (evt) {\n    var target = this.getProperTargetElement(evt);\n    var dropIns = this.getDropInstance(target);\n\n    if (!dropIns && target && !isNullOrUndefined(target.parentNode)) {\n      var parent_1 = closest(target.parentNode, '.e-droppable') || target.parentElement;\n\n      if (parent_1) {\n        dropIns = this.getDropInstance(parent_1);\n      }\n    }\n\n    return {\n      target: target,\n      instance: dropIns\n    };\n  };\n\n  Draggable.prototype.getDropInstance = function (ele) {\n    var name = 'getModuleName';\n    var drop;\n    var eleInst = ele && ele.ej2_instances;\n\n    if (eleInst) {\n      for (var _i = 0, eleInst_1 = eleInst; _i < eleInst_1.length; _i++) {\n        var inst = eleInst_1[_i];\n\n        if (inst[name]() === 'droppable') {\n          drop = inst;\n          break;\n        }\n      }\n    }\n\n    return drop;\n  };\n\n  Draggable.prototype.destroy = function () {\n    this.toggleEvents(true);\n\n    _super.prototype.destroy.call(this);\n  };\n\n  var Draggable_1;\n\n  __decorate([Complex({}, Position)], Draggable.prototype, \"cursorAt\", void 0);\n\n  __decorate([Property(true)], Draggable.prototype, \"clone\", void 0);\n\n  __decorate([Property()], Draggable.prototype, \"dragArea\", void 0);\n\n  __decorate([Property()], Draggable.prototype, \"isDragScroll\", void 0);\n\n  __decorate([Property()], Draggable.prototype, \"isReplaceDragEle\", void 0);\n\n  __decorate([Property(true)], Draggable.prototype, \"isPreventSelect\", void 0);\n\n  __decorate([Event()], Draggable.prototype, \"drag\", void 0);\n\n  __decorate([Event()], Draggable.prototype, \"dragStart\", void 0);\n\n  __decorate([Event()], Draggable.prototype, \"dragStop\", void 0);\n\n  __decorate([Property(1)], Draggable.prototype, \"distance\", void 0);\n\n  __decorate([Property()], Draggable.prototype, \"handle\", void 0);\n\n  __decorate([Property()], Draggable.prototype, \"abort\", void 0);\n\n  __decorate([Property()], Draggable.prototype, \"helper\", void 0);\n\n  __decorate([Property('default')], Draggable.prototype, \"scope\", void 0);\n\n  __decorate([Property('')], Draggable.prototype, \"dragTarget\", void 0);\n\n  __decorate([Property()], Draggable.prototype, \"axis\", void 0);\n\n  __decorate([Property()], Draggable.prototype, \"queryPositionInfo\", void 0);\n\n  __decorate([Property(false)], Draggable.prototype, \"enableTailMode\", void 0);\n\n  __decorate([Property(false)], Draggable.prototype, \"skipDistanceCheck\", void 0);\n\n  __decorate([Property(true)], Draggable.prototype, \"preventDefault\", void 0);\n\n  __decorate([Property(false)], Draggable.prototype, \"enableAutoScroll\", void 0);\n\n  __decorate([Property(false)], Draggable.prototype, \"enableTapHold\", void 0);\n\n  __decorate([Property(750)], Draggable.prototype, \"tapHoldThreshold\", void 0);\n\n  Draggable = Draggable_1 = __decorate([NotifyPropertyChanges], Draggable);\n  return Draggable;\n}(Base);\n\nexport { Draggable };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nvar __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\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 * <div id='drop'>Droppable</div>\n * <script>\n * let ele:HTMLElement = document.getElementById('drop');\n * var drag:Droppable = new Droppable(ele,{\n *     accept:'.drop',\n *     drop: function(e) {\n *      //drop handler code.\n *     }\n * });\n * </script>\n * ```\n */\n\nvar Droppable =\n/** @class */\nfunction (_super) {\n  __extends(Droppable, _super);\n\n  function Droppable(element, options) {\n    var _this = _super.call(this, options, element) || this;\n\n    _this.mouseOver = false;\n    _this.dragData = {};\n    _this.dragStopCalled = false;\n\n    _this.bind();\n\n    return _this;\n  }\n\n  Droppable.prototype.bind = function () {\n    this.wireEvents();\n  };\n\n  Droppable.prototype.wireEvents = function () {\n    EventHandler.add(this.element, Browser.touchEndEvent, this.intDrop, this);\n  }; // triggers when property changed\n\n\n  Droppable.prototype.onPropertyChanged = function (newProp, oldProp) {//No Code to handle\n  };\n\n  Droppable.prototype.getModuleName = function () {\n    return 'droppable';\n  };\n\n  Droppable.prototype.intOver = function (event, element) {\n    if (!this.mouseOver) {\n      var drag = this.dragData[this.scope];\n      this.trigger('over', {\n        event: event,\n        target: element,\n        dragData: drag\n      });\n      this.mouseOver = true;\n    }\n  };\n\n  Droppable.prototype.intOut = function (event, element) {\n    if (this.mouseOver) {\n      this.trigger('out', {\n        evt: event,\n        target: element\n      });\n      this.mouseOver = false;\n    }\n  };\n\n  Droppable.prototype.intDrop = function (evt, element) {\n    if (!this.dragStopCalled) {\n      return;\n    } else {\n      this.dragStopCalled = false;\n    }\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\n    if (isDrag) {\n      area = this.isDropArea(evt, drag.helper, element);\n\n      if (this.accept) {\n        accept = matches(drag.helper, this.accept);\n      }\n    }\n\n    if (isDrag && this.drop && area.canDrop && accept) {\n      this.trigger('drop', {\n        event: evt,\n        target: area.target,\n        droppedElement: drag.helper,\n        dragData: drag\n      });\n    }\n\n    this.mouseOver = false;\n  };\n\n  Droppable.prototype.isDropArea = function (evt, helper, element) {\n    var area = {\n      canDrop: true,\n      target: element || evt.target\n    };\n    var isTouch = evt.type === 'touchend';\n\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\n      if (area.canDrop) {\n        area.target = ele;\n      }\n\n      helper.style.display = '';\n    }\n\n    return area;\n  };\n\n  Droppable.prototype.destroy = function () {\n    EventHandler.remove(this.element, Browser.touchEndEvent, this.intDrop);\n\n    _super.prototype.destroy.call(this);\n  };\n\n  __decorate([Property()], Droppable.prototype, \"accept\", void 0);\n\n  __decorate([Property('default')], Droppable.prototype, \"scope\", void 0);\n\n  __decorate([Event()], Droppable.prototype, \"drop\", void 0);\n\n  __decorate([Event()], Droppable.prototype, \"over\", void 0);\n\n  __decorate([Event()], Droppable.prototype, \"out\", void 0);\n\n  Droppable = __decorate([NotifyPropertyChanges], Droppable);\n  return Droppable;\n}(Base);\n\nexport { Droppable };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nvar __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\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 * <div id='testEle'>  </div>;\n * <script>\n *   let node: HTMLElement = document.querySelector('#testEle');\n *   let kbInstance = new KeyboardEvents({\n *       element: node,\n *       keyConfigs:{ selectAll : 'ctrl+a' },\n *       keyAction: function (e:KeyboardEvent, action:string) {\n *           // handler function code\n *       }\n *   });\n * </script>\n * ```\n */\n\nvar KeyboardEvents =\n/** @class */\nfunction (_super) {\n  __extends(KeyboardEvents, _super);\n  /**\n   * Initializes the KeyboardEvents\n   * @param {HTMLElement} element\n   * @param {KeyboardEventsModel} options\n   */\n\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\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\n      for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n        var key = keys_1[_i];\n\n        var configCollection = _this.keyConfigs[key].split(',');\n\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\n          if (isAltKey === rKeyObj.altKey && isCtrlKey === rKeyObj.ctrlKey && isShiftKey === rKeyObj.shiftKey && curkeyCode === rKeyObj.keyCode) {\n            e.action = key;\n\n            if (_this.keyAction) {\n              _this.keyAction(e);\n            }\n          }\n        }\n      }\n    };\n\n    _this.bind();\n\n    return _this;\n  }\n\n  KeyboardEvents_1 = KeyboardEvents;\n  /**\n   * Unwire bound events and destroy the instance.\n   * @return {void}\n   */\n\n  KeyboardEvents.prototype.destroy = function () {\n    this.unwireEvents();\n\n    _super.prototype.destroy.call(this);\n  };\n  /**\n   * Function can be used to specify certain action if a property is changed\n   * @param newProp\n   * @param oldProp\n   * @returns {void}\n   * @private\n   */\n\n\n  KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {// No code are needed\n  };\n\n  ;\n\n  KeyboardEvents.prototype.bind = function () {\n    this.wireEvents();\n  };\n  /**\n   * To get the module name, returns 'keyboard'.\n   * @private\n   */\n\n\n  KeyboardEvents.prototype.getModuleName = function () {\n    return 'keyboard';\n  };\n  /**\n   * Wiring event handlers to events\n   */\n\n\n  KeyboardEvents.prototype.wireEvents = function () {\n    this.element.addEventListener(this.eventName, this.keyPressHandler);\n  };\n  /**\n   * Unwiring event handlers to events\n   */\n\n\n  KeyboardEvents.prototype.unwireEvents = function () {\n    this.element.removeEventListener(this.eventName, this.keyPressHandler);\n  };\n  /**\n   * To get the key configuration data\n   * @param {string} config - configuration data\n   * returns {KeyData}\n   */\n\n\n  KeyboardEvents.getKeyConfigData = function (config) {\n    if (config in this.configCache) {\n      return this.configCache[config];\n    }\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\n    if (keys[keys.length - 1].length > 1 && !!Number(keys[keys.length - 1])) {\n      keyData.keyCode = Number(keys[keys.length - 1]);\n    } else {\n      keyData.keyCode = KeyboardEvents_1.getKeyCode(keys[keys.length - 1]);\n    }\n\n    KeyboardEvents_1.configCache[config] = keyData;\n    return keyData;\n  }; // Return the keycode value as string \n\n\n  KeyboardEvents.getKeyCode = function (keyVal) {\n    return keyCode[keyVal] || keyVal.toUpperCase().charCodeAt(0);\n  };\n\n  var KeyboardEvents_1;\n  KeyboardEvents.configCache = {};\n\n  __decorate([Property({})], KeyboardEvents.prototype, \"keyConfigs\", void 0);\n\n  __decorate([Property('keyup')], KeyboardEvents.prototype, \"eventName\", void 0);\n\n  __decorate([Event()], KeyboardEvents.prototype, \"keyAction\", void 0);\n\n  KeyboardEvents = KeyboardEvents_1 = __decorate([NotifyPropertyChanges], KeyboardEvents);\n  return KeyboardEvents;\n}(Base);\n\nexport { KeyboardEvents };","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 */\n\nvar L10n =\n/** @class */\nfunction () {\n  /**\n   * Constructor\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   * @param {string} locale\n   * @returns {void}\n   */\n\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   * @param {Object} localeObject - specifies the localeObject to be set as global locale.\n   */\n\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   * @param {string} propertyName - specifies the property for which localize text to be returned.\n   * @return string\n   */\n\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    } else {\n      return this.localeStrings[prop] || '';\n    }\n  };\n  /**\n   * Returns the control constant object for current object and the locale specified.\n   * @param {Object} curObject\n   * @param {string} locale\n   * @returns {Object}\n   */\n\n\n  L10n.prototype.intGetControlConstant = function (curObject, locale) {\n    if (curObject[locale]) {\n      return curObject[locale][this.controlName];\n    }\n\n    return null;\n  };\n\n  L10n.locale = {};\n  return L10n;\n}();\n\nexport { L10n };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nvar __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\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 */\n\nvar SwipeSettings =\n/** @class */\nfunction (_super) {\n  __extends(SwipeSettings, _super);\n\n  function SwipeSettings() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n\n  __decorate([Property(50)], SwipeSettings.prototype, \"swipeThresholdDistance\", void 0);\n\n  return SwipeSettings;\n}(ChildProperty);\n\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 */\n\nvar Touch =\n/** @class */\nfunction (_super) {\n  __extends(Touch, _super);\n  /* End-Properties */\n\n\n  function Touch(element, options) {\n    var _this = _super.call(this, options, element) || this;\n\n    _this.touchAction = true;\n    _this.tapCount = 0;\n\n    _this.startEvent = function (evt) {\n      if (_this.touchAction === true) {\n        var point = _this.updateChangeTouches(evt);\n\n        if (evt.changedTouches !== undefined) {\n          _this.touchAction = false;\n        }\n\n        _this.isTouchMoved = false;\n        _this.movedDirection = '';\n        _this.startPoint = _this.lastMovedPoint = {\n          clientX: point.clientX,\n          clientY: point.clientY\n        };\n        _this.startEventData = point;\n        _this.hScrollLocked = _this.vScrollLocked = false;\n        _this.tStampStart = Date.now();\n        _this.timeOutTapHold = setTimeout(function () {\n          _this.tapHoldEvent(evt);\n        }, _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    _this.moveEvent = function (evt) {\n      var point = _this.updateChangeTouches(evt);\n\n      _this.movedPoint = point;\n      _this.isTouchMoved = !(point.clientX === _this.startPoint.clientX && point.clientY === _this.startPoint.clientY);\n      var eScrollArgs = {};\n\n      if (_this.isTouchMoved) {\n        clearTimeout(_this.timeOutTapHold);\n\n        _this.calcScrollPoints(evt);\n\n        var scrollArg = {\n          startEvents: _this.startEventData,\n          originalEvent: evt,\n          startX: _this.startPoint.clientX,\n          startY: _this.startPoint.clientY,\n          distanceX: _this.distanceX,\n          distanceY: _this.distanceY,\n          scrollDirection: _this.scrollDirection,\n          velocity: _this.getVelocity(point)\n        };\n        eScrollArgs = extend(eScrollArgs, {}, scrollArg);\n\n        _this.trigger('scroll', eScrollArgs);\n\n        _this.lastMovedPoint = {\n          clientX: point.clientX,\n          clientY: point.clientY\n        };\n      }\n    };\n\n    _this.cancelEvent = function (evt) {\n      clearTimeout(_this.timeOutTapHold);\n      clearTimeout(_this.timeOutTap);\n      _this.tapCount = 0;\n\n      _this.swipeFn(evt);\n\n      EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n    };\n\n    _this.endEvent = function (evt) {\n      _this.swipeFn(evt);\n\n      if (!_this.isTouchMoved) {\n        if (typeof _this.tap === 'function') {\n          _this.trigger('tap', {\n            originalEvent: evt,\n            tapCount: ++_this.tapCount\n          });\n\n          _this.timeOutTap = setTimeout(function () {\n            _this.tapCount = 0;\n          }, _this.tapThreshold);\n        }\n      }\n\n      _this.modeclear();\n    };\n\n    _this.swipeFn = function (evt) {\n      clearTimeout(_this.timeOutTapHold);\n      clearTimeout(_this.timeOutTap);\n\n      var point = _this.updateChangeTouches(evt);\n\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; // tslint:disable-next-line:no-any\n\n      var isFirefox = /Mozilla|Firefox|Mac OS/.test(Browser.userAgent);\n\n      if (isFirefox && point.clientX === 0 && point.clientY === 0 && evt.type === 'mouseup') {\n        _this.isTouchMoved = false;\n      }\n\n      _this.endPoint = point;\n\n      _this.calcPoints(evt);\n\n      var swipeArgs = {\n        originalEvent: evt,\n        startEvents: _this.startEventData,\n        startX: _this.startPoint.clientX,\n        startY: _this.startPoint.clientY,\n        distanceX: _this.distanceX,\n        distanceY: _this.distanceY,\n        swipeDirection: _this.movedDirection,\n        velocity: _this.getVelocity(point)\n      };\n\n      if (_this.isTouchMoved) {\n        var eSwipeArgs = void 0;\n        var tDistance = _this.swipeSettings.swipeThresholdDistance;\n        eSwipeArgs = extend(eSwipeArgs, _this.defaultArgs, swipeArgs);\n        var canTrigger = false;\n        var ele = _this.element;\n\n        var scrollBool = _this.isScrollable(ele);\n\n        var moved = swipeRegex.test(_this.movedDirection);\n\n        if (tDistance < _this.distanceX && !moved || tDistance < _this.distanceY && moved) {\n          if (!scrollBool) {\n            canTrigger = true;\n          } else {\n            canTrigger = _this.checkSwipe(ele, moved);\n          }\n        }\n\n        if (canTrigger) {\n          _this.trigger('swipe', eSwipeArgs);\n        }\n      }\n\n      _this.modeclear();\n    };\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\n    _this.bind();\n\n    return _this;\n  } // triggers when property changed \n\n  /**\n   * @private\n   * @param newProp\n   * @param oldProp\n   */\n\n\n  Touch.prototype.onPropertyChanged = function (newProp, oldProp) {//No Code to handle\n  };\n\n  Touch.prototype.bind = function () {\n    this.wireEvents();\n\n    if (Browser.isIE) {\n      this.element.classList.add('e-block-touch');\n    }\n  };\n  /**\n   * To destroy the touch instance.\n   * @return {void}\n   */\n\n\n  Touch.prototype.destroy = function () {\n    this.unwireEvents();\n\n    _super.prototype.destroy.call(this);\n  }; // Need to changes the event binding once we updated the event handler.\n\n\n  Touch.prototype.wireEvents = function () {\n    EventHandler.add(this.element, Browser.touchStartEvent, this.startEvent, this);\n  };\n\n  Touch.prototype.unwireEvents = function () {\n    EventHandler.remove(this.element, Browser.touchStartEvent, this.startEvent);\n  };\n  /**\n   * Returns module name as touch\n   * @returns {string}\n   * @private\n   */\n\n\n  Touch.prototype.getModuleName = function () {\n    return 'touch';\n  };\n  /**\n   * Returns if the HTML element is Scrollable.\n   * @param {HTMLElement} element - HTML Element to check if Scrollable.\n   * @returns {boolean}\n   */\n\n\n  Touch.prototype.isScrollable = function (element) {\n    var eleStyle = getComputedStyle(element);\n    var style = eleStyle.overflow + eleStyle.overflowX + eleStyle.overflowY;\n\n    if (/(auto|scroll)/.test(style)) {\n      return true;\n    }\n\n    return false;\n  };\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    eTapArgs = {\n      originalEvent: evt\n    };\n    this.trigger('tapHold', eTapArgs);\n    EventHandler.remove(this.element, Browser.touchCancelEvent, this.cancelEvent);\n  };\n\n  Touch.prototype.calcPoints = function (evt) {\n    var point = this.updateChangeTouches(evt);\n    this.defaultArgs = {\n      originalEvent: evt\n    };\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\n    if (this.distanceX > this.distanceY) {\n      this.movedDirection = point.clientX > this.startPoint.clientX ? 'Right' : 'Left';\n    } else {\n      this.movedDirection = point.clientY < this.startPoint.clientY ? 'Up' : 'Down';\n    }\n  };\n\n  Touch.prototype.calcScrollPoints = function (evt) {\n    var point = this.updateChangeTouches(evt);\n    this.defaultArgs = {\n      originalEvent: evt\n    };\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\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    } else {\n      this.scrollDirection = point.clientY < this.lastMovedPoint.clientY ? 'Up' : 'Down';\n      this.vScrollLocked = true;\n    }\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  }; // tslint:disable-next-line:no-any\n\n\n  Touch.prototype.checkSwipe = function (ele, flag) {\n    var keys = ['scroll', 'offset'];\n    var temp = flag ? ['Height', 'Top'] : ['Width', 'Left'];\n\n    if (ele[keys[0] + temp[0]] <= ele[keys[1] + temp[0]]) {\n      return true;\n    }\n\n    return ele[keys[0] + temp[1]] === 0 || ele[keys[1] + temp[0]] + ele[keys[0] + temp[1]] >= ele[keys[0] + temp[0]];\n  };\n\n  Touch.prototype.updateChangeTouches = function (evt) {\n    // tslint:disable-next-line:max-line-length\n    var point = evt.changedTouches && evt.changedTouches.length !== 0 ? evt.changedTouches[0] : evt;\n    return point;\n  };\n\n  __decorate([Event()], Touch.prototype, \"tap\", void 0);\n\n  __decorate([Event()], Touch.prototype, \"tapHold\", void 0);\n\n  __decorate([Event()], Touch.prototype, \"swipe\", void 0);\n\n  __decorate([Event()], Touch.prototype, \"scroll\", void 0);\n\n  __decorate([Property(350)], Touch.prototype, \"tapThreshold\", void 0);\n\n  __decorate([Property(750)], Touch.prototype, \"tapHoldThreshold\", void 0);\n\n  __decorate([Complex({}, SwipeSettings)], Touch.prototype, \"swipeSettings\", void 0);\n\n  Touch = __decorate([NotifyPropertyChanges], Touch);\n  return Touch;\n}(Base);\n\nexport { Touch };","/**\n * SanitizeHtmlHelper for sanitize the value.\n */\nimport { detach } from './dom';\nvar removeTags = ['script', 'style', 'iframe[src]', 'link[href*=\"javascript:\"]', 'object[type=\"text/x-scriptlet\"]', 'object[data^=\"data:text/html;base64\"]', 'img[src^=\"data:text/html;base64\"]', '[src^=\"javascript:\"]', '[dynsrc^=\"javascript:\"]', '[lowsrc^=\"javascript:\"]', '[type^=\"application/x-shockwave-flash\"]'];\nvar removeAttrs = [{\n  attribute: 'href',\n  selector: '[href*=\"javascript:\"]'\n}, {\n  attribute: 'background',\n  selector: '[background^=\"javascript:\"]'\n}, {\n  attribute: 'style',\n  selector: '[style*=\"javascript:\"]'\n}, {\n  attribute: 'style',\n  selector: '[style*=\"expression(\"]'\n}, {\n  attribute: 'href',\n  selector: 'a[href^=\"data:text/html;base64\"]'\n}];\nvar jsEvents = ['onchange', 'onclick', 'onmouseover', 'onmouseout', 'onkeydown', 'onload', 'onerror', 'onblur', 'onfocus', 'onbeforeload', 'onbeforeunload', 'onkeyup', 'onsubmit', 'onafterprint', 'onbeforeonload', 'onbeforeprint', 'onblur', 'oncanplay', 'oncanplaythrough', 'onchange', 'onclick', 'oncontextmenu', 'ondblclick', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'ondurationchange', 'onemptied', 'onended', 'onerror', 'onerror', 'onfocus', 'onformchange', 'onforminput', 'onhaschange', 'oninput', 'oninvalid', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onloadeddata', 'onloadedmetadata', 'onloadstart', 'onmessage', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onoffline', 'onoine', 'ononline', 'onpagehide', 'onpageshow', 'onpause', 'onplay', 'onplaying', 'onpopstate', 'onprogress', 'onratechange', 'onreadystatechange', 'onredo', 'onresize', 'onscroll', 'onseeked', 'onseeking', 'onselect', 'onstalled', 'onstorage', 'onsubmit', 'onsuspend', 'ontimeupdate', 'onundo', 'onunload', 'onvolumechange', 'onwaiting', 'onmouseenter', 'onmouseleave', 'onmousewheel', 'onstart', 'onpropertychange'];\n\nvar SanitizeHtmlHelper =\n/** @class */\nfunction () {\n  function SanitizeHtmlHelper() {}\n\n  SanitizeHtmlHelper.beforeSanitize = function () {\n    return {\n      selectors: {\n        tags: removeTags,\n        attributes: removeAttrs\n      }\n    };\n  };\n\n  ;\n\n  SanitizeHtmlHelper.sanitize = function (value) {\n    var item = this.beforeSanitize();\n    var output = this.serializeValue(item, value);\n    return output;\n  };\n\n  SanitizeHtmlHelper.serializeValue = function (item, value) {\n    this.removeAttrs = item.selectors.attributes;\n    this.removeTags = item.selectors.tags;\n    this.wrapElement = document.createElement('div');\n    this.wrapElement.innerHTML = value;\n    this.removeXssTags();\n    this.removeJsEvents();\n    this.removeXssAttrs();\n    var tempEleValue = this.wrapElement.innerHTML;\n    this.removeElement();\n    return tempEleValue;\n  };\n\n  SanitizeHtmlHelper.removeElement = function () {\n    // Removes an element's attibute to avoid html tag validation\n    var nodes = this.wrapElement.children;\n\n    for (var j = 0; j < nodes.length; j++) {\n      var attribute = nodes[j].attributes;\n\n      for (var i = 0; i < attribute.length; i++) {\n        this.wrapElement.children[j].removeAttribute(attribute[i].localName);\n      }\n    }\n  };\n\n  SanitizeHtmlHelper.removeXssTags = function () {\n    var elements = this.wrapElement.querySelectorAll(this.removeTags.join(','));\n\n    if (elements.length > 0) {\n      elements.forEach(function (element) {\n        detach(element);\n      });\n    } else {\n      return;\n    }\n  };\n\n  SanitizeHtmlHelper.removeJsEvents = function () {\n    var elements = this.wrapElement.querySelectorAll('[' + jsEvents.join('],[') + ']');\n\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    } else {\n      return;\n    }\n  };\n\n  SanitizeHtmlHelper.removeXssAttrs = function () {\n    var _this = this;\n\n    this.removeAttrs.forEach(function (item, index) {\n      var elements = _this.wrapElement.querySelectorAll(item.selector);\n\n      if (elements.length > 0) {\n        elements.forEach(function (element) {\n          element.removeAttribute(item.attribute);\n        });\n      }\n    });\n  };\n\n  return SanitizeHtmlHelper;\n}();\n\nexport { SanitizeHtmlHelper };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nvar __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\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';\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 * <button id=\"button\">Button</button>\n * ```\n * ```typescript\n * <script>\n * var btnObj = new Button();\n * btnObj.appendTo(\"#button\");\n * </script>\n * ```\n */\n\nvar Button =\n/** @class */\nfunction (_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\n\n  function Button(options, element) {\n    return _super.call(this, options, element) || this;\n  }\n\n  Button.prototype.preRender = function () {// pre render code snippets\n  };\n  /**\n   * Initialize the control rendering\n   *\n   * @returns {void}\n   * @private\n   */\n\n\n  Button.prototype.render = function () {\n    this.initialize();\n    this.removeRippleEffect = rippleEffect(this.element, {\n      selector: '.' + cssClassName.BUTTON\n    });\n    this.renderComplete();\n  };\n\n  Button.prototype.initialize = function () {\n    if (this.cssClass) {\n      addClass([this.element], this.cssClass.split(' '));\n    }\n\n    if (this.isPrimary) {\n      this.element.classList.add(cssClassName.PRIMARY);\n    }\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\n      this.setIconCss();\n    }\n\n    if (this.enableRtl) {\n      this.element.classList.add(cssClassName.RTL);\n    }\n\n    if (this.disabled) {\n      this.controlStatus(this.disabled);\n    } else {\n      this.wireEvents();\n    }\n  };\n\n  Button.prototype.controlStatus = function (disabled) {\n    this.element.disabled = disabled;\n  };\n\n  Button.prototype.setIconCss = function () {\n    if (this.iconCss) {\n      var span = this.createElement('span', {\n        className: 'e-btn-icon ' + this.iconCss\n      });\n\n      if (!this.element.textContent.trim()) {\n        this.element.classList.add(cssClassName.ICONBTN);\n      } else {\n        span.classList.add('e-icon-' + this.iconPosition.toLowerCase());\n\n        if (this.iconPosition === 'Top' || this.iconPosition === 'Bottom') {\n          this.element.classList.add('e-' + this.iconPosition.toLowerCase() + '-icon-btn');\n        }\n      }\n\n      var node = this.element.childNodes[0];\n\n      if (node && (this.iconPosition === 'Left' || this.iconPosition === 'Top')) {\n        this.element.insertBefore(span, node);\n      } else {\n        this.element.appendChild(span);\n      }\n    }\n  };\n\n  Button.prototype.wireEvents = function () {\n    if (this.isToggle) {\n      EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n    }\n  };\n\n  Button.prototype.unWireEvents = function () {\n    if (this.isToggle) {\n      EventHandler.remove(this.element, 'click', this.btnClickHandler);\n    }\n  };\n\n  Button.prototype.btnClickHandler = function () {\n    if (this.element.classList.contains('e-active')) {\n      this.element.classList.remove('e-active');\n    } else {\n      this.element.classList.add('e-active');\n    }\n  };\n  /**\n   * Destroys the widget.\n   *\n   * @returns {void}\n   */\n\n\n  Button.prototype.destroy = function () {\n    var classList = [cssClassName.PRIMARY, cssClassName.RTL, cssClassName.ICONBTN, 'e-success', 'e-info', 'e-danger', 'e-warning', 'e-flat', 'e-outline', 'e-small', 'e-bigger', 'e-active', 'e-round', 'e-top-icon-btn', 'e-bottom-icon-btn'];\n\n    if (this.cssClass) {\n      classList = classList.concat(this.cssClass.split(' '));\n    }\n\n    _super.prototype.destroy.call(this);\n\n    removeClass([this.element], classList);\n\n    if (!this.element.getAttribute('class')) {\n      this.element.removeAttribute('class');\n    }\n\n    if (this.disabled) {\n      this.element.removeAttribute('disabled');\n    }\n\n    if (this.content) {\n      this.element.innerHTML = this.element.innerHTML.replace(this.content, '');\n    }\n\n    var span = this.element.querySelector('span.e-btn-icon');\n\n    if (span) {\n      detach(span);\n    }\n\n    this.unWireEvents();\n\n    if (isRippleEnabled) {\n      this.removeRippleEffect();\n    }\n  };\n  /**\n   * Get component name.\n   *\n   * @returns {string} - Module name\n   * @private\n   */\n\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\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\n\n  Button.Inject = function () {// 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\n\n  Button.prototype.onPropertyChanged = function (newProp, oldProp) {\n    var span = this.element.querySelector('span.e-btn-icon');\n\n    for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n      var prop = _a[_i];\n\n      switch (prop) {\n        case 'isPrimary':\n          if (newProp.isPrimary) {\n            this.element.classList.add(cssClassName.PRIMARY);\n          } else {\n            this.element.classList.remove(cssClassName.PRIMARY);\n          }\n\n          break;\n\n        case 'disabled':\n          this.controlStatus(newProp.disabled);\n          break;\n\n        case 'iconCss':\n          {\n            if (span) {\n              if (newProp.iconCss) {\n                span.className = 'e-btn-icon ' + newProp.iconCss;\n\n                if (this.element.textContent.trim()) {\n                  if (this.iconPosition === 'Left') {\n                    span.classList.add('e-icon-left');\n                  } else {\n                    span.classList.add('e-icon-right');\n                  }\n                }\n              } else {\n                detach(span);\n              }\n            } else {\n              this.setIconCss();\n            }\n\n            break;\n          }\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\n          if (span) {\n            detach(span);\n          }\n\n          this.setIconCss();\n          break;\n\n        case 'cssClass':\n          if (oldProp.cssClass) {\n            removeClass([this.element], oldProp.cssClass.split(' '));\n          }\n\n          if (newProp.cssClass) {\n            addClass([this.element], newProp.cssClass.split(' '));\n          }\n\n          break;\n\n        case 'enableRtl':\n          if (newProp.enableRtl) {\n            this.element.classList.add(cssClassName.RTL);\n          } else {\n            this.element.classList.remove(cssClassName.RTL);\n          }\n\n          break;\n\n        case 'content':\n          {\n            var node = getTextNode(this.element);\n\n            if (!node) {\n              this.element.classList.remove(cssClassName.ICONBTN);\n            }\n\n            if (!isBlazor() || isBlazor() && !this.isServerRendered && this.getModuleName() !== 'progress-btn') {\n              if (this.enableHtmlSanitizer) {\n                newProp.content = SanitizeHtmlHelper.sanitize(newProp.content);\n              }\n\n              this.element.innerHTML = newProp.content;\n              this.setIconCss();\n            }\n\n            break;\n          }\n\n        case 'isToggle':\n          if (newProp.isToggle) {\n            EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n          } else {\n            EventHandler.remove(this.element, 'click', this.btnClickHandler);\n            removeClass([this.element], ['e-active']);\n          }\n\n          break;\n      }\n    }\n  };\n  /**\n   * Click the button element\n   * its native method\n   *\n   * @public\n   * @returns {void}\n   */\n\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\n\n  Button.prototype.focusIn = function () {\n    this.element.focus();\n  };\n\n  __decorate([Property('Left')], Button.prototype, \"iconPosition\", void 0);\n\n  __decorate([Property('')], Button.prototype, \"iconCss\", void 0);\n\n  __decorate([Property(false)], Button.prototype, \"disabled\", void 0);\n\n  __decorate([Property(false)], Button.prototype, \"isPrimary\", void 0);\n\n  __decorate([Property('')], Button.prototype, \"cssClass\", void 0);\n\n  __decorate([Property('')], Button.prototype, \"content\", void 0);\n\n  __decorate([Property(false)], Button.prototype, \"isToggle\", void 0);\n\n  __decorate([Property()], Button.prototype, \"locale\", void 0);\n\n  __decorate([Property(false)], Button.prototype, \"enableHtmlSanitizer\", void 0);\n\n  __decorate([Event()], Button.prototype, \"created\", void 0);\n\n  Button = __decorate([NotifyPropertyChanges], Button);\n  return Button;\n}(Component);\n\nexport { Button };","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 */\n\nexport function wrapperInitialize(createElement, tag, type, element, WRAPPER, role) {\n  var input = element;\n\n  if (element.tagName === tag) {\n    // eslint-disable-next-line\n    var ejInstance = getValue('ej2_instances', element);\n    input = createElement('input', {\n      attrs: {\n        'type': type\n      }\n    });\n    var props = ['change', 'cssClass', 'label', 'labelPosition', 'id'];\n\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\n    attributes(element, {\n      'class': WRAPPER,\n      'role': role,\n      'aria-checked': 'false'\n    });\n    element.appendChild(input);\n    setValue('ej2_instances', ejInstance, input);\n    deleteObject(element, 'ej2_instances');\n  }\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 */\n\nexport function getTextNode(element) {\n  var node;\n  var childnode = element.childNodes;\n\n  for (var i = 0; i < childnode.length; i++) {\n    node = childnode[i];\n\n    if (node.nodeType === 3) {\n      return node;\n    }\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 */\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  } 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 */\n\nexport function preRender(proxy, control, wrapper, element, moduleName) {\n  element = wrapperInitialize(proxy.createElement, control, 'checkbox', element, wrapper, moduleName);\n  proxy.element = element;\n\n  if (proxy.element.getAttribute('type') !== 'checkbox') {\n    proxy.element.setAttribute('type', 'checkbox');\n  }\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 */\n\nexport function createCheckBox(createElement, enableRipple, options) {\n  if (enableRipple === void 0) {\n    enableRipple = false;\n  }\n\n  if (options === void 0) {\n    options = {};\n  }\n\n  var wrapper = createElement('div', {\n    className: 'e-checkbox-wrapper e-css'\n  });\n\n  if (options.cssClass) {\n    addClass([wrapper], options.cssClass.split(' '));\n  }\n\n  if (options.enableRtl) {\n    wrapper.classList.add('e-rtl');\n  }\n\n  if (enableRipple) {\n    var rippleSpan = createElement('span', {\n      className: 'e-ripple-container'\n    });\n    rippleEffect(rippleSpan, {\n      isCenterRipple: true,\n      duration: 400\n    });\n    wrapper.appendChild(rippleSpan);\n  }\n\n  var frameSpan = createElement('span', {\n    className: 'e-frame e-icons'\n  });\n\n  if (options.checked) {\n    frameSpan.classList.add('e-check');\n  }\n\n  wrapper.appendChild(frameSpan);\n\n  if (options.label) {\n    var labelSpan = createElement('span', {\n      className: 'e-label'\n    });\n\n    if (options.disableHtmlEncode) {\n      labelSpan.textContent = options.label;\n    } else {\n      labelSpan.innerHTML = options.label;\n    }\n\n    wrapper.appendChild(labelSpan);\n  }\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 */\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 */\n\nexport function setHiddenInput(proxy, wrap) {\n  if (proxy.element.getAttribute('ejs-for')) {\n    wrap.appendChild(proxy.createElement('input', {\n      attrs: {\n        'name': proxy.name || proxy.element.name,\n        'value': 'false',\n        'type': 'hidden'\n      }\n    }));\n  }\n}","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nimport { merge, extend, isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { DataUtil } from './util';\nimport { Query, Predicate } from './query';\nvar consts = {\n  GroupGuid: '{271bbba0-1ee7}'\n};\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 * @hidden\n */\n\nvar Adaptor =\n/** @class */\nfunction () {\n  /**\n   * Constructor for Adaptor class\n   * @param  {DataOptions} 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     * @default Adaptor\n     */\n\n    this.type = Adaptor;\n    this.dataSource = ds;\n    this.pvt = {};\n  }\n  /**\n   * Returns the data from the query processing.\n   * @param  {Object} data\n   * @param  {DataOptions} ds?\n   * @param  {Query} query?\n   * @param  {XMLHttpRequest} xhr?\n   * @returns Object\n   */\n\n\n  Adaptor.prototype.processResponse = function (data, ds, query, xhr) {\n    return data;\n  };\n\n  return Adaptor;\n}();\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 * @hidden\n */\n\nvar JsonAdaptor =\n/** @class */\nfunction (_super) {\n  __extends(JsonAdaptor, _super);\n\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   * @param  {DataManager} dataManager\n   * @param  {Query} query\n   * @returns Object\n   */\n\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\n    for (var i = 0; i < query.lazyLoad.length; i++) {\n      keyCount++;\n      lazyLoad[query.lazyLoad[i].key] = query.lazyLoad[i].value;\n    }\n\n    var agg = {};\n\n    for (var i = 0; i < query.queries.length; i++) {\n      key = query.queries[i];\n\n      if ((key.fn === 'onPage' || key.fn === 'onGroup') && query.lazyLoad.length) {\n        if (key.fn === 'onGroup') {\n          group.push(key.e);\n        }\n\n        if (key.fn === 'onPage') {\n          page = key.e;\n        }\n\n        continue;\n      }\n\n      ret = this[key.fn].call(this, result, key.e, query);\n\n      if (key.fn === 'onAggregates') {\n        agg[key.e.field + ' - ' + key.e.type] = ret;\n      } else {\n        result = ret !== undefined ? ret : result;\n      }\n\n      if (key.fn === 'onPage' || key.fn === 'onSkip' || key.fn === 'onTake' || key.fn === 'onRange') {\n        countFlg = false;\n      }\n\n      if (countFlg) {\n        count = result.length;\n      }\n    }\n\n    if (keyCount) {\n      var args = {\n        query: query,\n        lazyLoad: lazyLoad,\n        result: result,\n        group: group,\n        page: page\n      };\n      var lazyLoadData = this.lazyLoadGroup(args);\n      result = lazyLoadData.result;\n      count = lazyLoadData.count;\n    }\n\n    if (query.isCountRequired) {\n      result = {\n        result: result,\n        count: count,\n        aggregates: agg\n      };\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   * @param  {LazyLoadGroupArgs} args\n   */\n\n\n  JsonAdaptor.prototype.lazyLoadGroup = function (args) {\n    var count = 0;\n    var agg = this.getAggregate(args.query);\n    var result = args.result;\n\n    if (!isNullOrUndefined(args.lazyLoad.onDemandGroupInfo)) {\n      var req = args.lazyLoad.onDemandGroupInfo;\n\n      for (var i = req.where.length - 1; i >= 0; i--) {\n        result = this.onWhere(result, req.where[i]);\n      }\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\n      count = result.length;\n      var data = result;\n      result = result.slice(req.skip);\n      result = result.slice(0, req.take);\n\n      if (args.group.length !== req.level) {\n        this.formGroupResult(result, data);\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\n      if (args.page) {\n        result = this.onPage(result, args.page, args.query);\n      }\n\n      this.formGroupResult(result, data);\n    }\n\n    return {\n      result: result,\n      count: count\n    };\n  };\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\n    return result;\n  };\n  /**\n   * Separate the aggregate query from the given queries\n   * @param  {Query} query\n   */\n\n\n  JsonAdaptor.prototype.getAggregate = function (query) {\n    var aggQuery = Query.filterQueries(query.queries, 'onAggregates');\n    var agg = [];\n\n    if (aggQuery.length) {\n      var tmp = void 0;\n\n      for (var i = 0; i < aggQuery.length; i++) {\n        tmp = aggQuery[i].e;\n        agg.push({\n          type: tmp.type,\n          field: DataUtil.getValue(tmp.field, query)\n        });\n      }\n    }\n\n    return agg;\n  };\n  /**\n   * Performs batch update in the JSON array which add, remove and update records.\n   * @param  {DataManager} dm\n   * @param  {CrudOptions} changes\n   * @param  {RemoteArgs} e\n   */\n\n\n  JsonAdaptor.prototype.batchRequest = function (dm, changes, e) {\n    var i;\n    var deletedRecordsLen = changes.deletedRecords.length;\n\n    for (i = 0; i < changes.addedRecords.length; i++) {\n      this.insert(dm, changes.addedRecords[i]);\n    }\n\n    for (i = 0; i < changes.changedRecords.length; i++) {\n      this.update(dm, e.key, changes.changedRecords[i]);\n    }\n\n    for (i = 0; i < deletedRecordsLen; i++) {\n      this.remove(dm, e.key, changes.deletedRecords[i]);\n    }\n\n    return changes;\n  };\n  /**\n   * Performs filter operation with the given data and where query.\n   * @param  {Object[]} ds\n   * @param  {{validate:Function}} e\n   */\n\n\n  JsonAdaptor.prototype.onWhere = function (ds, e) {\n    if (!ds || !ds.length) {\n      return ds;\n    }\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   * @param  {Object[]} ds\n   * @param  {{field:string} e\n   * @param  {string}} type\n   */\n\n\n  JsonAdaptor.prototype.onAggregates = function (ds, e) {\n    var fn = DataUtil.aggregates[e.type];\n\n    if (!ds || !fn || ds.length === 0) {\n      return null;\n    }\n\n    return fn(ds, e.field);\n  };\n  /**\n   * Performs search operation based on the given query.\n   * @param  {Object[]} ds\n   * @param  {QueryOptions} e\n   */\n\n\n  JsonAdaptor.prototype.onSearch = function (ds, e) {\n    if (!ds || !ds.length) {\n      return ds;\n    }\n\n    if (e.fieldNames.length === 0) {\n      DataUtil.getFieldList(ds[0], e.fieldNames);\n    }\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\n      return false;\n    });\n  };\n  /**\n   * Sort the data with given direction and field.\n   * @param  {Object[]} ds\n   * @param  {{comparer:(a:Object} e\n   * @param  {Object} b\n   */\n\n\n  JsonAdaptor.prototype.onSortBy = function (ds, e, query) {\n    if (!ds || !ds.length) {\n      return ds;\n    }\n\n    var fnCompare;\n    var field = DataUtil.getValue(e.fieldName, query);\n\n    if (!field) {\n      return ds.sort(e.comparer);\n    }\n\n    if (field instanceof Array) {\n      field = field.slice(0);\n\n      for (var i = field.length - 1; i >= 0; i--) {\n        if (!field[i]) {\n          continue;\n        }\n\n        fnCompare = e.comparer;\n\n        if (DataUtil.endsWith(field[i], ' desc')) {\n          fnCompare = DataUtil.fnSort('descending');\n          field[i] = field[i].replace(' desc', '');\n        }\n\n        ds = DataUtil.sort(ds, field[i], fnCompare);\n      }\n\n      return ds;\n    }\n\n    return DataUtil.sort(ds, field, e.comparer);\n  };\n  /**\n   * Group the data based on the given query.\n   * @param  {Object[]} ds\n   * @param  {QueryOptions} e\n   * @param  {Query} query\n   */\n\n\n  JsonAdaptor.prototype.onGroup = function (ds, e, query) {\n    if (!ds || !ds.length) {\n      return ds;\n    }\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   * @param  {Object[]} ds\n   * @param  {{pageSize:number} e\n   * @param  {number}} pageIndex\n   * @param  {Query} query\n   */\n\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\n    if (!ds || !ds.length) {\n      return ds;\n    }\n\n    return ds.slice(start, end);\n  };\n  /**\n   * Retrieves records based on the given start and end index from query.\n   * @param  {Object[]} ds\n   * @param  {{start:number} e\n   * @param  {number}} end\n   */\n\n\n  JsonAdaptor.prototype.onRange = function (ds, e) {\n    if (!ds || !ds.length) {\n      return ds;\n    }\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   * @param  {Object[]} ds\n   * @param  {{nos:number}} e\n   */\n\n\n  JsonAdaptor.prototype.onTake = function (ds, e) {\n    if (!ds || !ds.length) {\n      return ds;\n    }\n\n    return ds.slice(0, DataUtil.getValue(e.nos));\n  };\n  /**\n   * Skips the given count of records from the data source.\n   * @param  {Object[]} ds\n   * @param  {{nos:number}} e\n   */\n\n\n  JsonAdaptor.prototype.onSkip = function (ds, e) {\n    if (!ds || !ds.length) {\n      return ds;\n    }\n\n    return ds.slice(DataUtil.getValue(e.nos));\n  };\n  /**\n   * Selects specified columns from the data source.\n   * @param  {Object[]} ds\n   * @param  {{fieldNames:string}} e\n   */\n\n\n  JsonAdaptor.prototype.onSelect = function (ds, e) {\n    if (!ds || !ds.length) {\n      return ds;\n    }\n\n    return DataUtil.select(ds, DataUtil.getValue(e.fieldNames));\n  };\n  /**\n   * Inserts new record in the table.\n   * @param  {DataManager} dm\n   * @param  {Object} data\n   * @param  {number} position\n   */\n\n\n  JsonAdaptor.prototype.insert = function (dm, data, tableName, query, position) {\n    if (isNullOrUndefined(position)) {\n      return dm.dataSource.json.push(data);\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   * @param  {DataManager} dm\n   * @param  {string} keyField\n   * @param  {Object} value\n   * @param  {string} tableName?\n   * @returns null\n   */\n\n\n  JsonAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n    var ds = dm.dataSource.json;\n    var i;\n\n    if (typeof value === 'object' && !(value instanceof Date)) {\n      value = DataUtil.getObject(keyField, value);\n    }\n\n    for (i = 0; i < ds.length; i++) {\n      if (DataUtil.getObject(keyField, ds[i]) === value) {\n        break;\n      }\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   * @param  {DataManager} dm\n   * @param  {string} keyField\n   * @param  {Object} value\n   * @param  {string} tableName?\n   * @returns null\n   */\n\n\n  JsonAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n    var ds = dm.dataSource.json;\n    var i;\n    var key;\n\n    if (!isNullOrUndefined(keyField)) {\n      key = getValue(keyField, value);\n    }\n\n    for (i = 0; i < ds.length; i++) {\n      if (!isNullOrUndefined(keyField) && getValue(keyField, ds[i]) === key) {\n        break;\n      }\n    }\n\n    return i < ds.length ? merge(ds[i], value) : null;\n  };\n\n  return JsonAdaptor;\n}(Adaptor);\n\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 * @hidden\n */\n\nvar UrlAdaptor =\n/** @class */\nfunction (_super) {\n  __extends(UrlAdaptor, _super);\n\n  function UrlAdaptor() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n  /**\n   * Process the query to generate request body.\n   * @param  {DataManager} dm\n   * @param  {Query} query\n   * @param  {Object[]} hierarchyFilters?\n   * @returns p\n   */\n  // tslint:disable-next-line:max-func-body-length\n\n\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 = {\n      sorts: [],\n      groups: [],\n      filters: [],\n      searches: [],\n      aggregates: []\n    }; // calc Paging & Range\n\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    } else if ('onRange' in singles) {\n      temp = singles.onRange;\n      skip = temp.start;\n      take = temp.end - temp.start;\n    } // Sorting\n\n\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', {\n        name: temp,\n        direction: queries.sorts[i].e.direction\n      }, query));\n    } // hierarchy\n\n\n    if (hierarchyFilters) {\n      temp = this.getFiltersFrom(hierarchyFilters, query);\n\n      if (temp) {\n        request.filters.push(DataUtil.callAdaptorFunction(this, 'onEachWhere', temp.toJson(), query));\n      }\n    } // Filters\n\n\n    for (var i = 0; i < queries.filters.length; i++) {\n      var res = DataUtil.callAdaptorFunction(this, 'onEachWhere', queries.filters[i].e.toJson(), query);\n\n      if (this.getModuleName && this.getModuleName() === 'ODataV4Adaptor' && !isNullOrUndefined(queries.filters[i].e.key) && queries.filters.length > 1) {\n        res = \"(\" + res + \")\";\n      }\n\n      request.filters.push(res);\n      var keys_3 = typeof request.filters[i] === 'object' ? Object.keys(request.filters[i]) : [];\n\n      for (var _i = 0, keys_1 = keys_3; _i < keys_1.length; _i++) {\n        var prop = keys_1[_i];\n\n        if (DataUtil.isNull(request[prop])) {\n          delete request[prop];\n        }\n      }\n    } // Searches\n\n\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    } // Grouping\n\n\n    for (var i = 0; i < queries.groups.length; i++) {\n      request.groups.push(DataUtil.getValue(queries.groups[i].e.fieldName, query));\n    } // aggregates\n\n\n    for (var i = 0; i < queries.aggregates.length; i++) {\n      temp = queries.aggregates[i].e;\n      request.aggregates.push({\n        type: temp.type,\n        field: DataUtil.getValue(temp.field, query)\n      });\n    }\n\n    var req = {};\n    this.getRequestQuery(options, query, singles, request, req); // Params\n\n    DataUtil.callAdaptorFunction(this, 'addParams', {\n      dm: dm,\n      query: query,\n      params: params,\n      reqParams: req\n    });\n\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    } // cleanup\n\n\n    var keys = Object.keys(req);\n\n    for (var _a = 0, keys_2 = keys; _a < keys_2.length; _a++) {\n      var prop = keys_2[_a];\n\n      if (DataUtil.isNull(req[prop]) || req[prop] === '' || req[prop].length === 0) {\n        delete req[prop];\n      }\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\n    var p = this.pvt;\n    this.pvt = {};\n\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\n    temp = this.convertToQueryString(req, query, dm);\n    temp = (dm.dataSource.url.indexOf('?') !== -1 ? '&' : '/') + temp;\n    return {\n      type: 'GET',\n      url: temp.length ? url.replace(/\\/*$/, temp) : url,\n      pvtData: p\n    };\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\n    if (options.apply && query.distincts.length) {\n      req[options.apply] = 'onDistinct' in this ? DataUtil.callAdaptorFunction(this, 'onDistinct', query.distincts) : '';\n    }\n\n    if (!query.distincts.length && options.expand) {\n      req[options.expand] = 'onExpand' in this && 'onSelect' in singles ? DataUtil.callAdaptorFunction(this, 'onExpand', {\n        selects: DataUtil.getValue(singles.onSelect.fieldNames, query),\n        expands: query.expands\n      }, query) : query.expands;\n    }\n\n    req[options.select] = 'onSelect' in singles && !query.distincts.length ? 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 ? DataUtil.callAdaptorFunction(this, 'onSkip', DataUtil.getValue(singles.onSkip.nos, query), query) : '';\n    req[options.take] = 'onTake' in singles ? DataUtil.callAdaptorFunction(this, 'onTake', DataUtil.getValue(singles.onTake.nos, query), query) : '';\n    req[options.where] = request.filters.length || request.searches.length ? 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 ? 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   * @param  {Object} req\n   * @param  {Query} query\n   * @param  {DataManager} dm\n   */\n\n\n  UrlAdaptor.prototype.convertToQueryString = function (request, query, dm) {\n    return ''; // this needs to be overridden\n  };\n  /**\n   * Return the data from the data manager processing.\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   */\n\n\n  UrlAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n    if (xhr && xhr.getResponseHeader('Content-Type') && xhr.getResponseHeader('Content-Type').indexOf('application/json') !== -1) {\n      var handleTimeZone = DataUtil.timeZoneHandling;\n\n      if (ds && !ds.timeZoneHandling) {\n        DataUtil.timeZoneHandling = false;\n      }\n\n      data = DataUtil.parse.parseJson(data);\n      DataUtil.timeZoneHandling = handleTimeZone;\n    }\n\n    var requests = request;\n    var pvt = requests.pvtData || {};\n    var groupDs = data ? data.groupDs : [];\n\n    if (xhr && xhr.getResponseHeader('Content-Type') && xhr.getResponseHeader('Content-Type').indexOf('xml') !== -1) {\n      return query.isCountRequired ? {\n        result: [],\n        count: 0\n      } : [];\n    }\n\n    var d = JSON.parse(requests.data);\n\n    if (d && d.action === 'batch' && data && data.addedRecords) {\n      changes.addedRecords = data.addedRecords;\n      return changes;\n    }\n\n    if (data && data.d) {\n      data = data.d;\n    }\n\n    var args = {};\n\n    if (data && 'count' in data) {\n      args.count = data.count;\n    }\n\n    args.result = data && data.result ? data.result : data;\n    var isExpand = false;\n\n    if (Array.isArray(data.result) && data.result.length) {\n      var key = 'key';\n      var val = 'value';\n      var level = 'level';\n\n      if (!isNullOrUndefined(data.result[0][key])) {\n        args.result = this.formRemoteGroupedData(args.result, 1, pvt.groups.length - 1);\n      }\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\n            if (pvt.groups.length === value) {\n              isExpand = true;\n            }\n          }\n        }\n      }\n    }\n\n    if (!isExpand) {\n      this.getAggregateResult(pvt, data, args, groupDs, query);\n    }\n\n    return DataUtil.isNull(args.count) ? args.result : {\n      result: args.result,\n      count: args.count,\n      aggregates: args.aggregates\n    };\n  };\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\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\n  UrlAdaptor.prototype.getGroupedRecords = function (data, hasRecords) {\n    var childGroupedRecords = [];\n    var records = 'records';\n\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      } else {\n        childGroupedRecords = childGroupedRecords.concat(data[i].items[records]);\n      }\n    }\n\n    return childGroupedRecords;\n  };\n  /**\n   * Add the group query to the adaptor`s option.\n   * @param  {Object[]} e\n   * @returns void\n   */\n\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   * @param  {Aggregates[]} e\n   * @returns void\n   */\n\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   * @param  {DataManager} dm\n   * @param  {CrudOptions} changes\n   * @param  {Object} e\n   */\n\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   * @param  {DataManager} dm\n   * @param  {XMLHttpRequest} request\n   * @returns void\n   */\n\n\n  UrlAdaptor.prototype.beforeSend = function (dm, request) {// 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   * @param  {DataManager} dm\n   * @param  {Object} data\n   * @param  {string} tableName\n   */\n\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   * @param  {DataManager} dm\n   * @param  {string} keyField\n   * @param  {number|string} value\n   * @param  {string} tableName\n   */\n\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   * @param  {DataManager} dm\n   * @param  {string} keyField\n   * @param  {Object} value\n   * @param  {string} tableName\n   */\n\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   * @param  {Object[]|string[]|number[]} data\n   * @param  {Query} query\n   * @hidden\n   */\n\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\n    if (typeof data[0] !== 'object') {\n      prop = null;\n    }\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      } else {\n        value = data[i];\n      }\n\n      predicats.push(new Predicate(key, 'equal', value));\n    }\n\n    return Predicate.or(predicats);\n  };\n\n  UrlAdaptor.prototype.getAggregateResult = function (pvt, data, args, groupDs, query) {\n    var pData = data;\n\n    if (data && data.result) {\n      pData = data.result;\n    }\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\n      if (data.aggregate) {\n        aggregateData = data.aggregate;\n      }\n\n      for (var i = 0; i < agg.length; i++) {\n        fn = DataUtil.aggregates[agg[i].type];\n\n        if (fn) {\n          res[agg[i].field + ' - ' + agg[i].type] = fn(aggregateData, agg[i].field);\n        }\n      }\n\n      args.aggregates = res;\n    }\n\n    var key = 'key';\n    var isServerGrouping = Array.isArray(data.result) && data.result.length && !isNullOrUndefined(data.result[0][key]);\n\n    if (pvt && pvt.groups && pvt.groups.length && !isServerGrouping) {\n      var groups = pvt.groups;\n\n      for (var i = 0; i < groups.length; i++) {\n        var level = null;\n\n        if (!isNullOrUndefined(groupDs)) {\n          groupDs = DataUtil.group(groupDs, groups[i]);\n        }\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\n      args.result = pData;\n    }\n\n    return args;\n  };\n\n  UrlAdaptor.prototype.getQueryRequest = function (query) {\n    var req = {\n      sorts: [],\n      groups: [],\n      filters: [],\n      searches: [],\n      aggregates: []\n    };\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\n  UrlAdaptor.prototype.addParams = function (options) {\n    var req = options.reqParams;\n\n    if (options.params.length) {\n      req.params = {};\n    }\n\n    for (var _i = 0, _a = options.params; _i < _a.length; _i++) {\n      var tmp = _a[_i];\n\n      if (req[tmp.key]) {\n        throw new Error('Query() - addParams: Custom Param is conflicting other request arguments');\n      }\n\n      req[tmp.key] = tmp.value;\n\n      if (tmp.fn) {\n        req[tmp.key] = tmp.fn.call(options.query, tmp.key, options.query, options.dm);\n      }\n\n      req.params[tmp.key] = req[tmp.key];\n    }\n  };\n\n  return UrlAdaptor;\n}(Adaptor);\n\nexport { UrlAdaptor };\n/**\n * OData Adaptor that is extended from URL Adaptor, is used for consuming data through OData Service.\n * @hidden\n */\n\nvar ODataAdaptor =\n/** @class */\nfunction (_super) {\n  __extends(ODataAdaptor, _super);\n\n  function ODataAdaptor(props) {\n    var _this = _super.call(this) || this; // options replaced the default adaptor options\n\n\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\n  ODataAdaptor.prototype.getModuleName = function () {\n    return 'ODataAdaptor';\n  };\n  /**\n   * Generate request string based on the filter criteria from query.\n   * @param  {Predicate} pred\n   * @param  {boolean} requiresCast?\n   */\n\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\n    if (val instanceof Date) {\n      val = 'datetime\\'' + DataUtil.parse.replacer(val) + '\\'';\n    }\n\n    if (type === 'string') {\n      val = encodeURIComponent(val);\n      val = '\\'' + val + '\\'';\n\n      if (requiresCast) {\n        field = 'cast(' + field + ', \\'Edm.String\\')';\n      }\n\n      if (DataUtil.parse.isGuid(val)) {\n        guid = 'guid';\n      }\n\n      if (predicate.ignoreCase) {\n        if (!guid) {\n          field = 'tolower(' + field + ')';\n        }\n\n        val = val.toLowerCase();\n      }\n    }\n\n    operator = DataUtil.odBiOperator[predicate.operator];\n\n    if (operator) {\n      returnValue += field;\n      returnValue += operator;\n\n      if (guid) {\n        returnValue += guid;\n      }\n\n      return returnValue + val;\n    }\n\n    if (!isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor') {\n      operator = DataUtil.odv4UniOperator[predicate.operator];\n    } else {\n      operator = DataUtil.odUniOperator[predicate.operator];\n    }\n\n    if (operator === 'substringof') {\n      var temp = val;\n      val = field;\n      field = temp;\n    }\n\n    returnValue += operator + '(';\n    returnValue += field + ',';\n\n    if (guid) {\n      returnValue += guid;\n    }\n\n    returnValue += val + ')';\n    return returnValue;\n  };\n\n  ODataAdaptor.prototype.addParams = function (options) {\n    _super.prototype.addParams.call(this, options);\n\n    delete options.reqParams.params;\n  };\n  /**\n   * Generate request string based on the multiple filter criteria from query.\n   * @param  {Predicate} pred\n   * @param  {boolean} requiresCast?\n   */\n\n\n  ODataAdaptor.prototype.onComplexPredicate = function (predicate, query, requiresCast) {\n    var res = [];\n\n    for (var i = 0; i < predicate.predicates.length; i++) {\n      res.push('(' + this.onEachWhere(predicate.predicates[i], query, requiresCast) + ')');\n    }\n\n    return res.join(' ' + predicate.condition + ' ');\n  };\n  /**\n   * Generate query string based on the multiple filter criteria from query.\n   * @param  {Predicate} filter\n   * @param  {boolean} requiresCast?\n   */\n\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   * @param  {string[]} filters\n   */\n\n\n  ODataAdaptor.prototype.onWhere = function (filters) {\n    if (this.pvt.search) {\n      filters.push(this.onEachWhere(this.pvt.search, null, true));\n    }\n\n    return filters.join(' and ');\n  };\n  /**\n   * Generate query string based on the multiple search criteria from query.\n   * @param  {{fields:string[]} e\n   * @param  {string} operator\n   * @param  {string} key\n   * @param  {boolean}} ignoreCase\n   */\n\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\n    var filter = this.pvt.search || [];\n\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\n    this.pvt.search = filter;\n  };\n  /**\n   * Generate query string based on the search criteria from query.\n   * @param  {Object} e\n   */\n\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   * @param  {QueryOptions} e\n   */\n\n\n  ODataAdaptor.prototype.onEachSort = function (e) {\n    var res = [];\n\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    } else {\n      res.push(ODataAdaptor.getField(e.name) + (e.direction === 'descending' ? ' desc' : ''));\n    }\n\n    return res.join(',');\n  };\n  /**\n   * Returns sort query string.\n   * @param  {string[]} e\n   */\n\n\n  ODataAdaptor.prototype.onSortBy = function (e) {\n    return e.reverse().join(',');\n  };\n  /**\n   * Adds the group query to the adaptor option.\n   * @param  {Object[]} e\n   * @returns string\n   */\n\n\n  ODataAdaptor.prototype.onGroup = function (e) {\n    this.pvt.groups = e;\n    return [];\n  };\n  /**\n   * Returns the select query string.\n   * @param  {string[]} e\n   */\n\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\n    return e.join(',');\n  };\n  /**\n   * Add the aggregate query to the adaptor option.\n   * @param  {Object[]} e\n   * @returns string\n   */\n\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   * @param  {boolean} e\n   * @returns string\n   */\n\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   * @param  {DataManager} dm\n   * @param  {XMLHttpRequest} request\n   * @param  {Ajax} settings?\n   */\n\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    } else {\n      request.setRequestHeader('Accept', this.options.accept);\n    }\n\n    request.setRequestHeader('DataServiceVersion', '2.0');\n    request.setRequestHeader('MaxDataServiceVersion', '2.0');\n  };\n  /**\n   * Returns the data from the query processing.\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   * @returns aggregateResult\n   */\n\n\n  ODataAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n    var metaCheck = 'odata.metadata';\n\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\n    var pvtData = 'pvtData';\n\n    if (!isNullOrUndefined(data.d)) {\n      var dataCopy = query && query.isCountRequired ? data.d.results : data.d;\n      var metaData = '__metadata';\n\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\n    var pvt = request && request[pvtData];\n    var emptyAndBatch = this.processBatchResponse(data, query, xhr, request, changes);\n\n    if (emptyAndBatch) {\n      return emptyAndBatch;\n    }\n\n    var versionCheck = xhr && request.getResponseHeader('DataServiceVersion');\n    var count = null;\n    var version = versionCheck && parseInt(versionCheck, 10) || 2;\n\n    if (query && query.isCountRequired) {\n      var oDataCount = '__count';\n\n      if (data[oDataCount] || data['odata.count']) {\n        count = data[oDataCount] || data['odata.count'];\n      }\n\n      if (data.d) {\n        data = data.d;\n      }\n\n      if (data[oDataCount] || data['odata.count']) {\n        count = data[oDataCount] || data['odata.count'];\n      }\n    }\n\n    if (version === 3 && data.value) {\n      data = data.value;\n    }\n\n    if (data.d) {\n      data = data.d;\n    }\n\n    if (version < 3 && data.results) {\n      data = data.results;\n    }\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 : {\n      result: args.result,\n      count: args.count,\n      aggregates: args.aggregates\n    };\n  };\n  /**\n   * Converts the request object to query string.\n   * @param  {Object} req\n   * @param  {Query} query\n   * @param  {DataManager} dm\n   * @returns tableName\n   */\n\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\n    if (dm.dataSource.requiresFormat) {\n      request[format] = 'json';\n    }\n\n    var keys = Object.keys(request);\n\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\n    res = res.join('&');\n\n    if (dm.dataSource.url && dm.dataSource.url.indexOf('?') !== -1 && !tableName) {\n      return res;\n    }\n\n    return res.length ? tableName + '?' + res : tableName || '';\n  };\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\n      if (convertObj[prop] instanceof Date) {\n        convertObj[prop] = DataUtil.dateParse.toLocalTime(convertObj[prop]);\n      }\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   * @param  {DataManager} dm\n   * @param  {Object} data\n   * @param  {string} tableName?\n   */\n\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   * @param  {DataManager} dm\n   * @param  {string} keyField\n   * @param  {number} value\n   * @param  {string} tableName?\n   */\n\n\n  ODataAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n    var url;\n\n    if (typeof value === 'string' && !DataUtil.parse.isGuid(value)) {\n      url = \"('\" + value + \"')\";\n    } else {\n      url = \"(\" + value + \")\";\n    }\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   * @param  {DataManager} dm\n   * @param  {string} keyField\n   * @param  {Object} value\n   * @param  {string} tableName?\n   * @returns this\n   */\n\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\n    var url;\n\n    if (typeof value[keyField] === 'string' && !DataUtil.parse.isGuid(value[keyField])) {\n      url = \"('\" + value[keyField] + \"')\";\n    } else {\n      url = \"(\" + value[keyField] + \")\";\n    }\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   * @param  {DataManager} dm\n   * @param  {CrudOptions} changes\n   * @param  {RemoteArgs} e\n   * @returns {Object}\n   */\n\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 : 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   * @param  {Object[]} arr\n   * @param  {RemoteArgs} e\n   * @returns this\n   */\n\n\n  ODataAdaptor.prototype.generateDeleteRequest = function (arr, e, dm) {\n    if (!arr) {\n      return '';\n    }\n\n    var req = '';\n    var stat = {\n      'method': 'DELETE ',\n      'url': function url(data, i, key) {\n        var url = DataUtil.getObject(key, data[i]);\n\n        if (typeof url === 'number' || DataUtil.parse.isGuid(url)) {\n          return '(' + url + ')';\n        } else if (url instanceof Date) {\n          var dateTime = data[i][key];\n          return '(' + dateTime.toJSON() + ')';\n        } else {\n          return \"('\" + url + \"')\";\n        }\n      },\n      'data': function data(_data, i) {\n        return '';\n      }\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   * @param  {Object[]} arr\n   * @param  {RemoteArgs} e\n   */\n\n\n  ODataAdaptor.prototype.generateInsertRequest = function (arr, e, dm) {\n    if (!arr) {\n      return '';\n    }\n\n    var req = '';\n    var stat = {\n      'method': 'POST ',\n      'url': function url(data, i, key) {\n        return '';\n      },\n      'data': function data(_data2, i) {\n        return JSON.stringify(_data2[i]) + '\\n\\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   * @param  {Object[]} arr\n   * @param  {RemoteArgs} e\n   */\n\n\n  ODataAdaptor.prototype.generateUpdateRequest = function (arr, e, dm, org) {\n    var _this = this;\n\n    if (!arr) {\n      return '';\n    }\n\n    var req = '';\n    arr.forEach(function (change) {\n      return change = _this.compareAndRemove(change, org.filter(function (o) {\n        return DataUtil.getObject(e.key, o) === DataUtil.getObject(e.key, change);\n      })[0], e.key);\n    });\n    var stat = {\n      'method': this.options.updateType + ' ',\n      'url': function url(data, i, key) {\n        if (typeof data[i][key] === 'number' || DataUtil.parse.isGuid(data[i][key])) {\n          return '(' + data[i][key] + ')';\n        } else if (data[i][key] instanceof Date) {\n          var date = data[i][key];\n          return '(' + date.toJSON() + ')';\n        } else {\n          return \"('\" + data[i][key] + \"')\";\n        }\n      },\n      'data': function data(_data3, i) {\n        return JSON.stringify(_data3[i]) + '\\n\\n';\n      }\n    };\n    req = this.generateBodyContent(arr, e, stat, dm);\n    return req;\n  };\n\n  ODataAdaptor.getField = function (prop) {\n    return prop.replace(/\\./g, '/');\n  };\n\n  ODataAdaptor.prototype.generateBodyContent = function (arr, e, stat, dm) {\n    var req = '';\n\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\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      } 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      } 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\n      req += 'Accept: ' + this.options.accept + '\\n';\n      req += 'Content-Id: ' + this.pvt.changeSet++ + '\\n';\n      req += this.options.batchChangeSetContentType + '\\n';\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      } else {\n        req += '\\n';\n      }\n\n      req += stat.data(arr, i);\n    }\n\n    return req;\n  };\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 ? {\n        result: [],\n        count: 0\n      } : [];\n    }\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\n      if (d.length < 2) {\n        return {};\n      }\n\n      d = d[1];\n      var exVal = /(?:\\bContent-Type.+boundary=)(changesetresponse.+)/i.exec(d);\n\n      if (exVal) {\n        d.replace(exVal[0], '');\n      }\n\n      var changeGuid = exVal ? exVal[1] : '';\n      d = d.split(changeGuid);\n\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\n        cIdx = parseInt(/\\bContent-ID: (\\d+)/i.exec(d[i])[1], 10);\n\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\n      return changes;\n    }\n\n    return null;\n  };\n\n  ODataAdaptor.prototype.compareAndRemove = function (data, original, key) {\n    var _this = this;\n\n    if (isNullOrUndefined(original)) {\n      return data;\n    }\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\n          var final = Object.keys(data[prop]).filter(function (data) {\n            return data !== '@odata.etag';\n          });\n\n          if (final.length === 0) {\n            delete data[prop];\n          }\n        } else if (data[prop] === original[prop]) {\n          delete data[prop];\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\n  return ODataAdaptor;\n}(UrlAdaptor);\n\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 * @hidden\n */\n\nvar ODataV4Adaptor =\n/** @class */\nfunction (_super) {\n  __extends(ODataV4Adaptor, _super);\n\n  function ODataV4Adaptor(props) {\n    var _this = _super.call(this, props) || this; // options replaced the default adaptor options\n\n\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\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   * @param  {boolean} e\n   * @returns string\n   */\n\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   * @param  {Predicate} pred\n   * @param  {boolean} requiresCast?\n   */\n\n\n  ODataV4Adaptor.prototype.onPredicate = function (predicate, query, requiresCast) {\n    var returnValue = '';\n    var val = predicate.value;\n    var isDate = val instanceof Date;\n\n    if (query instanceof Query) {\n      var queries = this.getQueryRequest(query);\n\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\n    returnValue = _super.prototype.onPredicate.call(this, predicate, query, requiresCast);\n\n    if (isDate) {\n      returnValue = returnValue.replace(/datetime'(.*)'$/, '$1');\n    }\n\n    if (DataUtil.parse.isGuid(val)) {\n      returnValue = returnValue.replace('guid', '').replace(/'/g, '');\n    }\n\n    return returnValue;\n  };\n  /**\n   *  Generate query string based on the multiple search criteria from query.\n   * @param  {{fields:string[]} e\n   * @param  {string} operator\n   * @param  {string} key\n   * @param  {boolean}} ignoreCase\n   */\n\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   * @param  {Object} e\n   */\n\n\n  ODataV4Adaptor.prototype.onSearch = function (e) {\n    return this.pvt.searches.join(' OR ');\n  };\n  /**\n   * Returns the expand query string.\n   * @param  {string} e\n   */\n\n\n  ODataV4Adaptor.prototype.onExpand = function (e) {\n    var _this = this;\n\n    var selected = {};\n    var expanded = {};\n    var expands = e.expands.slice();\n    var exArr = [];\n    var selects = e.selects.filter(function (item) {\n      return item.indexOf('.') > -1;\n    });\n    selects.forEach(function (select) {\n      var splits = select.split('.');\n\n      if (!(splits[0] in selected)) {\n        selected[splits[0]] = [];\n      }\n\n      selected[splits[0]].push(splits[1]);\n    }); //Auto expand from select query\n\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 + \"(\" + _this.options.select + \"=\" + selected[expand].join(',') + \")\" : expand;\n    });\n    Object.keys(expanded).forEach(function (ex) {\n      return exArr.push(expanded[ex]);\n    });\n    return exArr.join(',');\n  };\n  /**\n   * Returns the groupby query string.\n   * @param  {string} e\n   */\n\n\n  ODataV4Adaptor.prototype.onDistinct = function (distinctFields) {\n    var fields = distinctFields.map(function (field) {\n      return ODataAdaptor.getField(field);\n    }).join(',');\n    return \"groupby((\" + fields + \"))\";\n  };\n  /**\n   * Returns the select query string.\n   * @param  {string[]} e\n   */\n\n\n  ODataV4Adaptor.prototype.onSelect = function (e) {\n    return _super.prototype.onSelect.call(this, e.filter(function (item) {\n      return item.indexOf('.') === -1;\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   * @param  {DataManager} dm\n   * @param  {XMLHttpRequest} request\n   * @param  {Ajax} settings\n   * @returns void\n   */\n\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\n    request.setRequestHeader('Accept', this.options.accept);\n  };\n  /**\n   * Returns the data from the query processing.\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   * @returns aggregateResult\n   */\n\n\n  ODataV4Adaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n    var metaName = '@odata.context';\n\n    if (request && request.type === 'GET' && !this.rootUrl && data[metaName]) {\n      var dataUrl = data[metaName].split('/$metadata#');\n      this.rootUrl = dataUrl[0];\n      this.resourceTableName = dataUrl[1];\n    }\n\n    var pvtData = 'pvtData';\n    var pvt = request && request[pvtData];\n\n    var emptyAndBatch = _super.prototype.processBatchResponse.call(this, data, query, xhr, request, changes);\n\n    if (emptyAndBatch) {\n      return emptyAndBatch;\n    }\n\n    var count = null;\n    var dataCount = '@odata.count';\n\n    if (query && query.isCountRequired) {\n      if (dataCount in data) {\n        count = data[dataCount];\n      }\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 : {\n      result: args.result,\n      count: count,\n      aggregates: args.aggregates\n    };\n  };\n\n  return ODataV4Adaptor;\n}(ODataAdaptor);\n\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 * @hidden\n */\n\nvar WebApiAdaptor =\n/** @class */\nfunction (_super) {\n  __extends(WebApiAdaptor, _super);\n\n  function WebApiAdaptor() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\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   * @param  {DataManager} dm\n   * @param  {Object} data\n   * @param  {string} tableName?\n   */\n\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   * @param  {DataManager} dm\n   * @param  {string} keyField\n   * @param  {number} value\n   * @param  {string} tableName?\n   */\n\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   * @param  {DataManager} dm\n   * @param  {string} keyField\n   * @param  {Object} value\n   * @param  {string} tableName?\n   */\n\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\n  WebApiAdaptor.prototype.batchRequest = function (dm, changes, e) {\n    var _this = this;\n\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\n    var _loop_1 = function _loop_1(i, x) {\n      changes.addedRecords.forEach(function (j, d) {\n        var stat = {\n          'method': 'POST ',\n          'url': function url(data, i, key) {\n            return '';\n          },\n          'data': function data(_data4, i) {\n            return JSON.stringify(_data4[i]) + '\\n\\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) + 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    }; //insertion\n\n\n    for (var i = 0, x = changes.addedRecords.length; i < x; i++) {\n      _loop_1(i, x);\n    }\n\n    var _loop_2 = function _loop_2(i, x) {\n      changes.changedRecords.forEach(function (j, d) {\n        var stat = {\n          'method': _this.options.updateType + ' ',\n          'url': function url(data, i, key) {\n            return '';\n          },\n          'data': function data(_data5, i) {\n            return JSON.stringify(_data5[i]) + '\\n\\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) + 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    }; //updation \n\n\n    for (var i = 0, x = changes.changedRecords.length; i < x; i++) {\n      _loop_2(i, x);\n    }\n\n    var _loop_3 = function _loop_3(i, x) {\n      changes.deletedRecords.forEach(function (j, d) {\n        var state = {\n          'mtd': 'DELETE ',\n          'url': function url(data, i, key) {\n            var url = DataUtil.getObject(key, data[i]);\n\n            if (typeof url === 'number' || DataUtil.parse.isGuid(url)) {\n              return '/' + url;\n            } else if (url instanceof Date) {\n              var datTime = data[i][key];\n              return '/' + datTime.toJSON();\n            } else {\n              return \"/'\" + url + \"'\";\n            }\n          },\n          'data': function data(_data6, i) {\n            return '';\n          }\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) + 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    }; //deletion\n\n\n    for (var i = 0, x = changes.deletedRecords.length; i < x; i++) {\n      _loop_3(i, x);\n    }\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   * @param  {DataManager} dm\n   * @param  {XMLHttpRequest} request\n   * @param  {Ajax} settings\n   * @returns void\n   */\n\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   * @param  {DataResult} data\n   * @param  {DataOptions} ds?\n   * @param  {Query} query?\n   * @param  {XMLHttpRequest} xhr?\n   * @param  {Ajax} request?\n   * @param  {CrudOptions} changes?\n   * @returns aggregateResult\n   */\n\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\n    if (request && request.type.toLowerCase() !== 'post') {\n      var versionCheck = xhr && request.getResponseHeader('DataServiceVersion');\n      var version = versionCheck && parseInt(versionCheck, 10) || 2;\n\n      if (query && query.isCountRequired) {\n        if (!DataUtil.isNull(data.Count)) {\n          count = data.Count;\n        }\n      }\n\n      if (version < 3 && data.Items) {\n        data = data.Items;\n      }\n\n      args.count = count;\n      args.result = data;\n      this.getAggregateResult(pvt, data, args, null, query);\n    }\n\n    args.result = args.result || data;\n    return DataUtil.isNull(count) ? args.result : {\n      result: args.result,\n      count: args.count,\n      aggregates: args.aggregates\n    };\n  };\n\n  return WebApiAdaptor;\n}(ODataAdaptor);\n\nexport { WebApiAdaptor };\n/**\n * WebMethodAdaptor can be used by DataManager to interact with web method.\n * @hidden\n */\n\nvar WebMethodAdaptor =\n/** @class */\nfunction (_super) {\n  __extends(WebMethodAdaptor, _super);\n\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   * @param  {DataManager} dm\n   * @param  {Query} query\n   * @param  {Object[]} hierarchyFilters?\n   * @returns application\n   */\n\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\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\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\n  return WebMethodAdaptor;\n}(UrlAdaptor);\n\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 * @hidden\n */\n\nvar RemoteSaveAdaptor =\n/** @class */\nfunction (_super) {\n  __extends(RemoteSaveAdaptor, _super);\n  /**\n   * @hidden\n   */\n\n\n  function RemoteSaveAdaptor() {\n    var _this = _super.call(this) || this;\n\n    setValue('beforeSend', UrlAdaptor.prototype.beforeSend, _this);\n    return _this;\n  }\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\n  RemoteSaveAdaptor.prototype.remove = function (dm, keyField, val, tableName, query) {\n    _super.prototype.remove.call(this, dm, keyField, val);\n\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\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\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\n    if (this.updateType === 'add') {\n      _super.prototype.insert.call(this, ds, data, null, null, this.pvt.position);\n    }\n\n    if (this.updateType === 'update') {\n      _super.prototype.update.call(this, ds, this.updateKey, data);\n    }\n\n    this.updateType = undefined;\n\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\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\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\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   * @param  {DataManager} dm\n   * @param  {CrudOptions} changes\n   * @param  {RemoteArgs} e\n   */\n\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\n  RemoteSaveAdaptor.prototype.addParams = function (options) {\n    var urlParams = new UrlAdaptor();\n    urlParams.addParams(options);\n  };\n\n  return RemoteSaveAdaptor;\n}(JsonAdaptor);\n\nexport { RemoteSaveAdaptor };\n/**\n * Ajax Adaptor that is extended from URL Adaptor, is used for handle data operations with user defined functions.\n * @hidden\n */\n\nvar CustomDataAdaptor =\n/** @class */\nfunction (_super) {\n  __extends(CustomDataAdaptor, _super);\n\n  function CustomDataAdaptor(props) {\n    var _this = _super.call(this) || this; // options replaced the default adaptor options\n\n\n    _this.options = extend({}, _this.options, {\n      getData: new Function(),\n      addRecord: new Function(),\n      updateRecord: new Function(),\n      deleteRecord: new Function(),\n      batchUpdate: new Function()\n    });\n    extend(_this.options, props || {});\n    return _this;\n  }\n\n  CustomDataAdaptor.prototype.getModuleName = function () {\n    return 'CustomDataAdaptor';\n  };\n\n  return CustomDataAdaptor;\n}(UrlAdaptor);\n\nexport { CustomDataAdaptor };\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 * @hidden\n */\n\nvar CacheAdaptor =\n/** @class */\nfunction (_super) {\n  __extends(CacheAdaptor, _super);\n  /**\n   * Constructor for CacheAdaptor class.\n   * @param  {CacheAdaptor} adaptor?\n   * @param  {number} timeStamp?\n   * @param  {number} pageSize?\n   * @hidden\n   */\n\n\n  function CacheAdaptor(adaptor, timeStamp, pageSize) {\n    var _this = _super.call(this) || this;\n\n    _this.isCrudAction = false;\n    _this.isInsertAction = false;\n\n    if (!isNullOrUndefined(adaptor)) {\n      _this.cacheAdaptor = adaptor;\n    }\n\n    _this.pageSize = pageSize;\n    _this.guidId = DataUtil.getGuid('cacheAdaptor');\n    var obj = {\n      keys: [],\n      results: []\n    };\n    window.localStorage.setItem(_this.guidId, JSON.stringify(obj));\n    var guid = _this.guidId;\n\n    if (!isNullOrUndefined(timeStamp)) {\n      setInterval(function () {\n        var data;\n        data = DataUtil.parse.parseJson(window.localStorage.getItem(guid));\n        var forDel = [];\n\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\n          if (currentTime - requestTime > timeStamp) {\n            forDel.push(i);\n          }\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\n        window.localStorage.removeItem(guid);\n        window.localStorage.setItem(guid, JSON.stringify(data));\n      }, timeStamp);\n    }\n\n    return _this;\n  }\n  /**\n   * It will generate the key based on the URL when we send a request to server.\n   * @param  {string} url\n   * @param  {Query} query?\n   * @hidden\n   */\n\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\n    if (page in singles) {\n      key += singles[page].pageIndex;\n    }\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\n    for (var filter = 0; filter < queries.filters.length; filter++) {\n      var currentFilter = queries.filters[filter];\n\n      if (currentFilter.e.isComplex) {\n        var newQuery = query.clone();\n        newQuery.queries = [];\n\n        for (var i = 0; i < currentFilter.e.predicates.length; i++) {\n          newQuery.queries.push({\n            fn: 'onWhere',\n            e: currentFilter.e.predicates[i],\n            filter: query.queries.filter\n          });\n        }\n\n        key += currentFilter.e.condition + this.generateKey(url, newQuery);\n      } else {\n        key += currentFilter.e.field + currentFilter.e.operator + currentFilter.e.value;\n      }\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   * @param  {DataManager} dm\n   * @param  {Query} query?\n   * @param  {Object[]} hierarchyFilters?\n   */\n\n\n  CacheAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n    var key = this.generateKey(dm.dataSource.url, query);\n    var cachedItems;\n    cachedItems = DataUtil.parse.parseJson(window.localStorage.getItem(this.guidId));\n    var data = cachedItems ? cachedItems.results[cachedItems.keys.indexOf(key)] : null;\n\n    if (data != null && !this.isCrudAction && !this.isInsertAction) {\n      return data;\n    }\n\n    this.isCrudAction = null;\n    this.isInsertAction = null;\n    return this.cacheAdaptor.processQuery.apply(this.cacheAdaptor, [].slice.call(arguments, 0));\n  };\n  /**\n   * Returns the data from the query processing.\n   * It will also cache the data for later usage.\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   */\n\n\n  CacheAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n    if (this.isInsertAction || request && this.cacheAdaptor.options.batch && 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\n    data = this.cacheAdaptor.processResponse.apply(this.cacheAdaptor, [].slice.call(arguments, 0));\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\n    if (index !== -1) {\n      obj.results.splice(index, 1);\n      obj.keys.splice(index, 1);\n    }\n\n    obj.results[obj.keys.push(key) - 1] = {\n      keys: key,\n      result: data.result,\n      timeStamp: new Date(),\n      count: data.count\n    };\n\n    while (obj.results.length > this.pageSize) {\n      obj.results.splice(0, 1);\n      obj.keys.splice(0, 1);\n    }\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   * @param  {DataManager} dm\n   * @param  {XMLHttpRequest} request\n   * @param  {Ajax} settings?\n   */\n\n\n  CacheAdaptor.prototype.beforeSend = function (dm, request, settings) {\n    if (!isNullOrUndefined(this.cacheAdaptor.options.batch) && DataUtil.endsWith(settings.url, this.cacheAdaptor.options.batch) && settings.type.toLowerCase() === 'post') {\n      request.setRequestHeader('Accept', this.cacheAdaptor.options.multipartAccept);\n    }\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   * @param  {DataManager} dm\n   * @param  {string} keyField\n   * @param  {Object} value\n   * @param  {string} tableName\n   */\n\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   * @param  {DataManager} dm\n   * @param  {Object} data\n   * @param  {string} tableName?\n   */\n\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   * @param  {DataManager} dm\n   * @param  {string} keyField\n   * @param  {Object} value\n   * @param  {string} tableName?\n   */\n\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   * @param  {DataManager} dm\n   * @param  {CrudOptions} changes\n   * @param  {RemoteArgs} e\n   */\n\n\n  CacheAdaptor.prototype.batchRequest = function (dm, changes, e) {\n    return this.cacheAdaptor.batchRequest(dm, changes, e);\n  };\n\n  return CacheAdaptor;\n}(UrlAdaptor);\n\nexport { CacheAdaptor };","import { Ajax } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataUtil } from './util';\nimport { Query } from './query';\nimport { ODataAdaptor, JsonAdaptor, CacheAdaptor, RemoteSaveAdaptor, CustomDataAdaptor } from './adaptors';\n/**\n * DataManager is used to manage and manipulate relational data.\n */\n\nvar DataManager =\n/** @class */\nfunction () {\n  /**\n   * Constructor for DataManager class\n   * @param  {DataOptions|JSON[]} dataSource?\n   * @param  {Query} query?\n   * @param  {AdaptorOptions|string} adaptor?\n   * @hidden\n   */\n  function DataManager(dataSource, query, adaptor) {\n    var _this = this;\n    /** @hidden */\n\n\n    this.dateParse = true;\n    /** @hidden */\n\n    this.timeZoneHandling = true;\n    this.requests = [];\n\n    if (!dataSource && !this.dataSource) {\n      dataSource = [];\n    }\n\n    adaptor = adaptor || dataSource.adaptor;\n\n    if (dataSource && dataSource.timeZoneHandling === false) {\n      this.timeZoneHandling = dataSource.timeZoneHandling;\n    }\n\n    var data;\n\n    if (dataSource instanceof Array) {\n      data = {\n        json: dataSource,\n        offline: true\n      };\n    } else if (typeof dataSource === 'object') {\n      if (!dataSource.json) {\n        dataSource.json = [];\n      }\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 : dataSource.adaptor instanceof RemoteSaveAdaptor || dataSource.adaptor instanceof CustomDataAdaptor ? false : dataSource.url ? false : true,\n        requiresFormat: dataSource.requiresFormat\n      };\n    } else {\n      DataUtil.throwError('DataManager: Invalid arguments');\n    }\n\n    if (data.requiresFormat === undefined && !DataUtil.isCors()) {\n      data.requiresFormat = isNullOrUndefined(data.crossDomain) ? true : data.crossDomain;\n    }\n\n    if (data.dataType === undefined) {\n      data.dataType = 'json';\n    }\n\n    this.dataSource = data;\n    this.defaultQuery = query;\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    } else {\n      this.adaptor = data.offline ? new JsonAdaptor() : new ODataAdaptor();\n    }\n\n    if (!data.jsonp && this.adaptor instanceof ODataAdaptor) {\n      data.jsonp = 'callback';\n    }\n\n    this.adaptor = adaptor || this.adaptor;\n\n    if (data.enableCaching) {\n      this.adaptor = new CacheAdaptor(this.adaptor, data.timeTillExpiration, data.cachingPageSize);\n    }\n\n    return this;\n  }\n  /**\n   * Overrides DataManager's default query with given query.\n   * @param  {Query} query - Defines the new default query.\n   */\n\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   * @param  {Query} query - Defines the query to retrieve data.\n   */\n\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\n    if (!this.dataSource.json) {\n      DataUtil.throwError('DataManager - executeLocal() : Json data is required to execute');\n    }\n\n    query = query || this.defaultQuery;\n    var result = this.adaptor.processQuery(this, query);\n\n    if (query.subQuery) {\n      var from = query.subQuery.fromTable;\n      var lookup = query.subQuery.lookups;\n      var res = query.isCountRequired ? result.result : result;\n\n      if (lookup && lookup instanceof Array) {\n        DataUtil.buildHierarchy(query.subQuery.fKey, from, res, lookup, query.subQuery.key);\n      }\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\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   * @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\n\n  DataManager.prototype.executeQuery = function (query, done, fail, always) {\n    var _this = this;\n\n    var makeRequest = 'makeRequest';\n\n    if (typeof query === 'function') {\n      always = fail;\n      fail = done;\n      done = query;\n      query = null;\n    }\n\n    if (!query) {\n      query = this.defaultQuery;\n    }\n\n    if (!(query instanceof Query)) {\n      DataUtil.throwError('DataManager - executeQuery() : A query is required to execute');\n    }\n\n    var deffered = new Deferred();\n    var args = {\n      query: query\n    };\n\n    if (!this.dataSource.offline && this.dataSource.url !== undefined && this.dataSource.url !== '' || !isNullOrUndefined(this.adaptor[makeRequest]) || this.isCustomDataAdaptor(this.adaptor)) {\n      var result = this.adaptor.processQuery(this, query);\n\n      if (!isNullOrUndefined(this.adaptor[makeRequest])) {\n        this.adaptor[makeRequest](result, deffered, args, query);\n      } else if (!isNullOrUndefined(result.url) || this.isCustomDataAdaptor(this.adaptor)) {\n        this.makeRequest(result, deffered, args, query);\n      } else {\n        args = DataManager.getDeferedArgs(query, result, args);\n        deffered.resolve(args);\n      }\n    } else {\n      DataManager.nextTick(function () {\n        var res = _this.executeLocal(query);\n\n        args = DataManager.getDeferedArgs(query, res, args);\n        deffered.resolve(args);\n      });\n    }\n\n    if (done || fail) {\n      deffered.promise.then(done, fail);\n    }\n\n    if (always) {\n      deffered.promise.then(always, always);\n    }\n\n    return deffered.promise;\n  };\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    } else {\n      args.result = result;\n    }\n\n    return args;\n  };\n\n  DataManager.nextTick = function (fn) {\n    (window.setImmediate || window.setTimeout)(fn, 0);\n  };\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  }; // tslint:disable-next-line:max-func-body-length\n\n\n  DataManager.prototype.makeRequest = function (url, deffered, args, query) {\n    var _this = this;\n\n    var isSelector = !!query.subQuerySelector;\n\n    var fnFail = function fnFail(e) {\n      args.error = e;\n      deffered.reject(args);\n    };\n\n    var process = function process(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\n    var fnQueryChild = function fnQueryChild(data, selector) {\n      var subDeffer = new Deferred();\n      var childArgs = {\n        parent: args\n      };\n      query.subQuery.isChild = true;\n\n      var subUrl = _this.adaptor.processQuery(_this, query.subQuery, data ? _this.adaptor.processResponse(data) : selector);\n\n      var childReq = _this.makeRequest(subUrl, subDeffer, childArgs, query.subQuery);\n\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\n      return childReq;\n    };\n\n    var fnSuccess = function fnSuccess(data, request) {\n      if (_this.isCustomDataAdaptor(_this.adaptor)) {\n        request = extend({}, _this.ajaxReqOption, request);\n      }\n\n      if (request.httpRequest.getResponseHeader('Content-Type').indexOf('xml') === -1 && _this.dateParse) {\n        data = DataUtil.parse.parseJson(data);\n      }\n\n      var result = _this.adaptor.processResponse(data, _this, query, request.httpRequest, request);\n\n      var count = 0;\n      var aggregates = null;\n      var virtualSelectRecords = 'virtualSelectRecords';\n      var virtualRecords = data[virtualSelectRecords];\n\n      if (query.isCountRequired) {\n        count = result.count;\n        aggregates = result.aggregates;\n        result = result.result;\n      }\n\n      if (!query.subQuery) {\n        process(result, count, request.httpRequest, request.type, data, aggregates, virtualRecords);\n        return;\n      }\n\n      if (!isSelector) {\n        fnQueryChild(result, request);\n      }\n    };\n\n    var req = this.extendRequest(url, fnSuccess, fnFail);\n\n    if (!this.isCustomDataAdaptor(this.adaptor)) {\n      var ajax_1 = new Ajax(req);\n\n      ajax_1.beforeSend = function () {\n        _this.beforeSend(ajax_1.httpRequest, ajax_1);\n      };\n\n      req = ajax_1.send();\n      req.catch(function (e) {\n        return true;\n      }); // to handle failure remote requests.        \n\n      this.requests.push(ajax_1);\n    } else {\n      this.ajaxReqOption = req;\n      var request = req;\n      this.adaptor.options.getData({\n        data: request.data,\n        onSuccess: request.onSuccess,\n        onFailure: request.onFailure\n      });\n    }\n\n    if (isSelector) {\n      var promise = void 0;\n      var res = query.subQuerySelector.call(this, {\n        query: query.subQuery,\n        parent: query\n      });\n\n      if (res && res.length) {\n        promise = Promise.all([req, fnQueryChild(null, res)]);\n        promise.then(function () {\n          var args = [];\n\n          for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n          }\n\n          var result = args[0];\n\n          var pResult = _this.adaptor.processResponse(result[0], _this, query, _this.requests[0].httpRequest, _this.requests[0]);\n\n          var count = 0;\n\n          if (query.isCountRequired) {\n            count = pResult.count;\n            pResult = pResult.result;\n          }\n\n          var cResult = _this.adaptor.processResponse(result[1], _this, query.subQuery, _this.requests[1].httpRequest, _this.requests[1]);\n\n          count = 0;\n\n          if (query.subQuery.isCountRequired) {\n            count = cResult.count;\n            cResult = cResult.result;\n          }\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      } else {\n        isSelector = false;\n      }\n    }\n\n    return req;\n  };\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\n    for (var i = 0; headers && i < headers.length; i++) {\n      props = [];\n      var keys = Object.keys(headers[i]);\n\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   * @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   */\n\n\n  DataManager.prototype.saveChanges = function (changes, key, tableName, query, original) {\n    var _this = this;\n\n    if (tableName instanceof Query) {\n      query = tableName;\n      tableName = null;\n    }\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\n    if (this.dataSource.offline) {\n      return req;\n    }\n\n    if (!isNullOrUndefined(this.adaptor[doAjaxRequest])) {\n      return this.adaptor[doAjaxRequest](req);\n    } else if (!this.isCustomDataAdaptor(this.adaptor)) {\n      var deff_1 = new Deferred();\n      var ajax_2 = new Ajax(req);\n\n      ajax_2.beforeSend = function () {\n        _this.beforeSend(ajax_2.httpRequest, ajax_2);\n      };\n\n      ajax_2.onSuccess = function (data, request) {\n        deff_1.resolve(_this.adaptor.processResponse(data, _this, null, request.httpRequest, request, changes, args));\n      };\n\n      ajax_2.onFailure = function (e) {\n        deff_1.reject([{\n          error: e\n        }]);\n      };\n\n      ajax_2.send().catch(function (e) {\n        return true;\n      }); // to handle the failure requests.        \n\n      return deff_1.promise;\n    } else {\n      return this.doAjaxRequest(req, this.adaptor.options.batchUpdate);\n    }\n  };\n  /**\n   * Inserts new record in the given table.\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   */\n\n\n  DataManager.prototype.insert = function (data, tableName, query, position) {\n    if (tableName instanceof Query) {\n      query = tableName;\n      tableName = null;\n    }\n\n    var req = this.adaptor.insert(this, data, tableName, query, position);\n    var doAjaxRequest = 'doAjaxRequest';\n\n    if (this.dataSource.offline) {\n      return req;\n    }\n\n    if (!isNullOrUndefined(this.adaptor[doAjaxRequest])) {\n      return this.adaptor[doAjaxRequest](req);\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   * @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\n\n  DataManager.prototype.remove = function (keyField, value, tableName, query) {\n    if (typeof value === 'object') {\n      value = DataUtil.getObject(keyField, value);\n    }\n\n    if (tableName instanceof Query) {\n      query = tableName;\n      tableName = null;\n    }\n\n    var res = this.adaptor.remove(this, keyField, value, tableName, query);\n    var doAjaxRequest = 'doAjaxRequest';\n\n    if (this.dataSource.offline) {\n      return res;\n    }\n\n    if (!isNullOrUndefined(this.adaptor[doAjaxRequest])) {\n      return this.adaptor[doAjaxRequest](res);\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   * @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\n\n  DataManager.prototype.update = function (keyField, value, tableName, query, original) {\n    if (tableName instanceof Query) {\n      query = tableName;\n      tableName = null;\n    }\n\n    var res = this.adaptor.update(this, keyField, value, tableName, query, original);\n    var doAjaxRequest = 'doAjaxRequest';\n\n    if (this.dataSource.offline) {\n      return res;\n    }\n\n    if (!isNullOrUndefined(this.adaptor[doAjaxRequest])) {\n      return this.adaptor[doAjaxRequest](res);\n    } else {\n      var update = this.adaptor.options.updateRecord;\n      return this.doAjaxRequest(res, update);\n    }\n  };\n\n  DataManager.prototype.isCustomDataAdaptor = function (dataSource) {\n    return this.adaptor.getModuleName && this.adaptor.getModuleName() === 'CustomDataAdaptor';\n  };\n\n  DataManager.prototype.successFunc = function (record, request) {\n    if (this.isCustomDataAdaptor(this.adaptor)) {\n      request = extend({}, this.ajaxReqOption, request);\n    }\n\n    try {\n      DataUtil.parse.parseJson(record);\n    } catch (e) {\n      record = [];\n    }\n\n    record = this.adaptor.processResponse(DataUtil.parse.parseJson(record), this, null, request.httpRequest, request);\n    this.ajaxDeffered.resolve(record);\n  };\n\n  ;\n\n  DataManager.prototype.failureFunc = function (e) {\n    this.ajaxDeffered.reject([{\n      error: e\n    }]);\n  };\n\n  ;\n\n  DataManager.prototype.doAjaxRequest = function (res, ajaxFunc) {\n    var _this = this;\n\n    res = extend({}, {\n      type: 'POST',\n      contentType: 'application/json; charset=utf-8',\n      processData: false\n    }, res);\n    this.ajaxDeffered = new Deferred();\n\n    if (!this.isCustomDataAdaptor(this.adaptor)) {\n      var ajax_3 = new Ajax(res);\n\n      ajax_3.beforeSend = function () {\n        _this.beforeSend(ajax_3.httpRequest, ajax_3);\n      };\n\n      ajax_3.onSuccess = this.successFunc.bind(this);\n      ajax_3.onFailure = this.failureFunc.bind(this);\n      ajax_3.send().catch(function (e) {\n        return true;\n      }); // to handle the failure requests.\n    } else {\n      this.ajaxReqOption = res;\n      ajaxFunc.call(this, {\n        data: res.data,\n        onSuccess: this.successFunc.bind(this),\n        onFailure: this.failureFunc.bind(this)\n      });\n    }\n\n    return this.ajaxDeffered.promise;\n  };\n\n  return DataManager;\n}();\n\nexport { DataManager };\n/**\n * Deferred is used to handle asynchronous operation.\n */\n\nvar Deferred =\n/** @class */\nfunction () {\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\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\n    this.then = this.promise.then.bind(this.promise);\n    /**\n     * Defines the callback function triggers when the Deferred object is rejected.\n     */\n\n    this.catch = this.promise.catch.bind(this.promise);\n  }\n\n  return Deferred;\n}();\n\nexport { Deferred };","import { 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 */\n\nvar Query =\n/** @class */\nfunction () {\n  /**\n   * Constructor for Query class.\n   * @param  {string|string[]} from?\n   * @hidden\n   */\n  function Query(from) {\n    /** @hidden */\n    this.subQuery = null;\n    /** @hidden */\n\n    this.isChild = false;\n    /** @hidden */\n\n    this.distincts = [];\n    this.queries = [];\n    this.key = '';\n    this.fKey = '';\n\n    if (typeof from === 'string') {\n      this.fromTable = from;\n    } else if (from && from instanceof Array) {\n      this.lookups = from;\n    }\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   * @param  {string} field - Defines the column field.\n   */\n\n\n  Query.prototype.setKey = function (field) {\n    this.key = field;\n    return this;\n  };\n  /**\n   * Sets default DataManager to execute query.\n   * @param  {DataManager} dataManager - Defines the DataManager.\n   */\n\n\n  Query.prototype.using = function (dataManager) {\n    this.dataManager = dataManager;\n    return this;\n  };\n  /**\n   * Executes query with the given DataManager.\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   * <pre>\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   * </pre>\n   */\n\n\n  Query.prototype.execute = function (dataManager, done, fail, always) {\n    dataManager = dataManager || this.dataManager;\n\n    if (dataManager) {\n      return dataManager.executeQuery(this, done, fail, always);\n    }\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   * @param  {DataManager} dataManager - Defines the DataManager.\n   */\n\n\n  Query.prototype.executeLocal = function (dataManager) {\n    dataManager = dataManager || this.dataManager;\n\n    if (dataManager) {\n      return dataManager.executeLocal(this);\n    }\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\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   * @param  {string} tableName - Defines the table name.\n   */\n\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   * @param  {string} key - Defines the key of additional parameter.\n   * @param  {Function|string} value - Defines the value for the key.\n   */\n\n\n  Query.prototype.addParams = function (key, value) {\n    if (typeof value === 'function') {\n      this.params.push({\n        key: key,\n        fn: value\n      });\n    } else {\n      this.params.push({\n        key: key,\n        value: value\n      });\n    }\n\n    return this;\n  };\n  /**\n   * @hidden\n   */\n\n\n  Query.prototype.distinct = function (fields) {\n    if (typeof fields === 'string') {\n      this.distincts = [].slice.call([fields], 0);\n    } else {\n      this.distincts = fields.slice(0);\n    }\n\n    return this;\n  };\n  /**\n   * Expands the related table.\n   * @param  {string|Object[]} tables\n   */\n\n\n  Query.prototype.expand = function (tables) {\n    if (typeof tables === 'string') {\n      this.expands = [].slice.call([tables], 0);\n    } else {\n      this.expands = tables.slice(0);\n    }\n\n    return this;\n  };\n  /**\n   * Filter data with given filter criteria.\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   */\n\n\n  Query.prototype.where = function (fieldName, operator, value, ignoreCase, ignoreAccent) {\n    operator = operator ? operator.toLowerCase() : null;\n    var predicate = null;\n\n    if (typeof fieldName === 'string') {\n      predicate = new Predicate(fieldName, operator, value, ignoreCase, ignoreAccent);\n    } else if (fieldName instanceof Predicate) {\n      predicate = fieldName;\n    }\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   * @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   */\n\n\n  Query.prototype.search = function (searchKey, fieldNames, operator, ignoreCase, ignoreAccent) {\n    if (typeof fieldNames === 'string') {\n      fieldNames = [fieldNames];\n    }\n\n    if (!operator || operator === 'none') {\n      operator = 'contains';\n    }\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   * @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   */\n\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   * @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  {string} direction - Defines the sort direction .\n   */\n\n\n  Query.prototype.sortByForeignKey = function (fieldName, comparer, isFromGroup, direction) {\n    var order = !isNullOrUndefined(direction) ? direction : 'ascending';\n    var sorts;\n    var temp;\n\n    if (typeof fieldName === 'string' && DataUtil.endsWith(fieldName.toLowerCase(), ' desc')) {\n      fieldName = fieldName.replace(/ desc$/i, '');\n      comparer = 'descending';\n    }\n\n    if (!comparer || typeof comparer === 'string') {\n      order = comparer ? comparer.toLowerCase() : 'ascending';\n      comparer = DataUtil.fnSort(comparer);\n    }\n\n    if (isFromGroup) {\n      sorts = Query.filterQueries(this.queries, 'onSortBy');\n\n      for (var i = 0; i < sorts.length; i++) {\n        temp = sorts[i].e.fieldName;\n\n        if (typeof temp === 'string') {\n          if (temp === fieldName) {\n            return this;\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\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   * @param  {string} fieldName - Defines the column field.\n   */\n\n\n  Query.prototype.sortByDesc = function (fieldName) {\n    return this.sortBy(fieldName, 'descending');\n  };\n  /**\n   * Groups data with the given field name.\n   * @param  {string} fieldName - Defines the column field.\n   */\n\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   * @param  {number} pageIndex - Defines the current page index.\n   * @param  {number} pageSize - Defines the no of records per page.\n   */\n\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   * @param  {number} start - Defines the start index of the datasource.\n   * @param  {number} end - Defines the end index of the datasource.\n   */\n\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   * @param  {number} nos - Defines the no of records to retrieve from datasource.\n   */\n\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   * @param  {number} nos - Defines the no of records skip in the datasource.\n   */\n\n\n  Query.prototype.skip = function (nos) {\n    this.queries.push({\n      fn: 'onSkip',\n      e: {\n        nos: nos\n      }\n    });\n    return this;\n  };\n  /**\n   * Selects specified columns from the data source.\n   * @param  {string|string[]} fieldNames - Defines the collection of column fields.\n   */\n\n\n  Query.prototype.select = function (fieldNames) {\n    if (typeof fieldNames === 'string') {\n      fieldNames = [].slice.call([fieldNames], 0);\n    }\n\n    this.queries.push({\n      fn: 'onSelect',\n      e: {\n        fieldNames: fieldNames\n      }\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   * @param  {Query} query - Defines the query to relate two tables.\n   * @param  {Function} selectorFn - Defines the custom function to select records.\n   */\n\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   * @param  {string} key - Defines the foreign key.\n   */\n\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\n\n  Query.prototype.requiresCount = function () {\n    this.isCountRequired = true;\n    return this;\n  }; //type - sum, avg, min, max\n\n  /**\n   * Aggregate the data with given type and field name.\n   * @param  {string} type - Defines the aggregate type.\n   * @param  {string} field - Defines the column field to aggregate.\n   */\n\n\n  Query.prototype.aggregate = function (type, field) {\n    this.queries.push({\n      fn: 'onAggregates',\n      e: {\n        field: field,\n        type: type\n      }\n    });\n    return this;\n  };\n  /**\n   * Pass array of filterColumn query for performing filter operation.\n   * @param  {QueryOptions[]} queries\n   * @param  {string} name\n   * @hidden\n   */\n\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   * @param  {Object[]} queries\n   * @param  {string[]} singles\n   * @hidden\n   */\n\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\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\n    return res;\n  };\n\n  return Query;\n}();\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 */\n\nvar Predicate =\n/** @class */\nfunction () {\n  /**\n   * Constructor for Predicate class.\n   * @param  {string|Predicate} field\n   * @param  {string} operator\n   * @param  {string|number|boolean|Predicate|Predicate[]} value\n   * @param  {boolean=false} ignoreCase\n   * @hidden\n   */\n  function Predicate(field, operator, value, ignoreCase, ignoreAccent) {\n    if (ignoreCase === void 0) {\n      ignoreCase = false;\n    }\n    /** @hidden */\n\n\n    this.ignoreAccent = false;\n    /** @hidden */\n\n    this.isComplex = false;\n\n    if (typeof field === 'string') {\n      this.field = field;\n      this.operator = operator.toLowerCase();\n      this.value = value;\n      this.ignoreCase = ignoreCase;\n      this.ignoreAccent = ignoreAccent;\n      this.isComplex = false;\n      this.comparer = DataUtil.fnOperators.processOperator(this.operator);\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\n      if (value instanceof Array) {\n        [].push.apply(this.predicates, value);\n      } else {\n        this.predicates.push(value);\n      }\n    }\n\n    return this;\n  }\n  /**\n   * Adds n-number of new predicates on existing predicate with “and” condition.\n   * @param  {Object[]} args - Defines the collection of predicates.\n   */\n\n\n  Predicate.and = function () {\n    var args = [];\n\n    for (var _i = 0; _i < arguments.length; _i++) {\n      args[_i] = arguments[_i];\n    }\n\n    return Predicate.combinePredicates([].slice.call(args, 0), 'and');\n  };\n  /**\n   * Adds new predicate on existing predicate with “and” condition.\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   */\n\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   * @param  {Object[]} args - Defines the collection of predicates.\n   */\n\n\n  Predicate.or = function () {\n    var args = [];\n\n    for (var _i = 0; _i < arguments.length; _i++) {\n      args[_i] = arguments[_i];\n    }\n\n    return Predicate.combinePredicates([].slice.call(args, 0), 'or');\n  };\n  /**\n   * Adds new predicate on existing predicate with “or” condition.\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   */\n\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   * Converts plain JavaScript object to Predicate object.\n   * @param  {Predicate[]|Predicate} json - Defines single or collection of Predicate.\n   */\n\n\n  Predicate.fromJson = function (json) {\n    if (json instanceof Array) {\n      var res = [];\n\n      for (var i = 0, len = json.length; i < len; i++) {\n        res.push(this.fromJSONData(json[i]));\n      }\n\n      return res;\n    }\n\n    var pred = json;\n    return this.fromJSONData(pred);\n  };\n  /**\n   * Validate the record based on the predicates.\n   * @param  {Object} record - Defines the datasource record.\n   */\n\n\n  Predicate.prototype.validate = function (record) {\n    var predicate = this.predicates ? this.predicates : [];\n    var isAnd;\n    var ret;\n\n    if (!this.isComplex && this.comparer) {\n      return this.comparer.call(this, DataUtil.getObject(this.field, record), this.value, this.ignoreCase, this.ignoreAccent);\n    }\n\n    isAnd = this.condition === 'and';\n\n    for (var i = 0; i < predicate.length; i++) {\n      ret = predicate[i].validate(record);\n\n      if (isAnd) {\n        if (!ret) {\n          return false;\n        }\n      } else {\n        if (ret) {\n          return true;\n        }\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\n\n  Predicate.prototype.toJson = function () {\n    var predicates;\n    var p;\n\n    if (this.isComplex) {\n      predicates = [];\n      p = this.predicates;\n\n      for (var i = 0; i < p.length; i++) {\n        predicates.push(p[i].toJson());\n      }\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    };\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\n      predicates = predicates[0];\n    }\n\n    return new Predicate(predicates[0], operator, predicates.slice(1));\n  };\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\n    if (typeof field === 'string') {\n      return Predicate[condition](pred, new Predicate(field, operator, value, ignoreCase, ignoreAccent));\n    }\n\n    return DataUtil.throwError('Predicate - ' + condition + ' : invalid arguments');\n  };\n\n  Predicate.fromJSONData = function (json) {\n    var preds = json.predicates || [];\n    var len = preds.length;\n    var predicates = [];\n    var result;\n\n    for (var i = 0; i < len; i++) {\n      predicates.push(this.fromJSONData(preds[i]));\n    }\n\n    if (!json.isComplex) {\n      result = new Predicate(json.field, json.operator, json.value, json.ignoreCase, json.ignoreAccent);\n    } else {\n      result = new Predicate(predicates[0], json.condition, predicates.slice(1));\n    }\n\n    return result;\n  };\n\n  return Predicate;\n}();\n\nexport { Predicate };","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from './manager';\nimport { Query } from './query';\nvar consts = {\n  GroupGuid: '{271bbba0-1ee7}'\n};\n/**\n * Data manager common utility methods.\n * @hidden\n */\n\nvar DataUtil =\n/** @class */\nfunction () {\n  function DataUtil() {}\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   * @param  {Function|string|string[]|number} value\n   * @param  {Object} inst?\n   * @hidden\n   */\n\n\n  DataUtil.getValue = function (value, inst) {\n    if (typeof value === 'function') {\n      return value.call(inst || {});\n    }\n\n    return value;\n  };\n  /**\n   * Returns true if the input string ends with given string.\n   * @param  {string} input\n   * @param  {string} substr\n   */\n\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 starts with given string.\n   * @param  {string} str\n   * @param  {string} startstr\n   */\n\n\n  DataUtil.startsWith = function (input, start) {\n    return input.slice(0, start.length) === start;\n  };\n  /**\n   * To return the sorting function based on the string.\n   * @param  {string} order\n   * @hidden\n   */\n\n\n  DataUtil.fnSort = function (order) {\n    order = order ? DataUtil.toLowerCase(order) : 'ascending';\n\n    if (order === 'ascending') {\n      return this.fnAscending;\n    }\n\n    return this.fnDescending;\n  };\n  /**\n   * Comparer function which is used to sort the data in ascending order.\n   * @param  {string|number} x\n   * @param  {string|number} y\n   * @returns number\n   */\n\n\n  DataUtil.fnAscending = function (x, y) {\n    if (isNullOrUndefined(x) && isNullOrUndefined(y)) {\n      return -1;\n    }\n\n    if (y === null || y === undefined) {\n      return -1;\n    }\n\n    if (typeof x === 'string') {\n      return x.localeCompare(y);\n    }\n\n    if (x === null || x === undefined) {\n      return 1;\n    }\n\n    return x - y;\n  };\n  /**\n   * Comparer function which is used to sort the data in descending order.\n   * @param  {string|number} x\n   * @param  {string|number} y\n   * @returns number\n   */\n\n\n  DataUtil.fnDescending = function (x, y) {\n    if (isNullOrUndefined(x) && isNullOrUndefined(y)) {\n      return -1;\n    }\n\n    if (y === null || y === undefined) {\n      return 1;\n    }\n\n    if (typeof x === 'string') {\n      return x.localeCompare(y) * -1;\n    }\n\n    if (x === null || x === undefined) {\n      return -1;\n    }\n\n    return y - x;\n  };\n\n  DataUtil.extractFields = function (obj, fields) {\n    var newObj = {};\n\n    for (var i = 0; i < fields.length; i++) {\n      newObj = this.setValue(fields[i], this.getObject(fields[i], obj), newObj);\n    }\n\n    return newObj;\n  };\n  /**\n   * Select objects by given fields from jsonArray.\n   * @param  {Object[]} jsonArray\n   * @param  {string[]} fields\n   */\n\n\n  DataUtil.select = function (jsonArray, fields) {\n    var newData = [];\n\n    for (var i = 0; i < jsonArray.length; i++) {\n      newData.push(this.extractFields(jsonArray[i], fields));\n    }\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   * @param  {Object[]} jsonArray\n   * @param  {string} field?\n   * @param  {Object[]} agg?\n   * @param  {number} level?\n   * @param  {Object[]} groupDs?\n   */\n\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\n    if (jsonData.GroupGuid === consts[guid]) {\n      var _loop_1 = function _loop_1(j) {\n        if (!isNullOrUndefined(groupDs)) {\n          var indx = -1;\n          var temp = groupDs.filter(function (e) {\n            return e.key === jsonData[j].key;\n          });\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        } 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\n      var this_1 = this;\n\n      for (var j = 0; j < jsonData.length; j++) {\n        _loop_1(j);\n      }\n\n      jsonData.childLevels += 1;\n      return jsonData;\n    }\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\n    var _loop_2 = function _loop_2(i) {\n      var val = this_2.getVal(jsonData, i, field);\n\n      if (!isNullOrUndefined(format)) {\n        val = format(val, field);\n      }\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\n        if (!isNullOrUndefined(groupDs)) {\n          var tempObj = groupDs.filter(function (e) {\n            return e.key === grouped[val].key;\n          });\n          grouped[val].count = tempObj[0].count;\n        }\n      }\n\n      grouped[val].count = !isNullOrUndefined(groupDs) ? grouped[val].count : grouped[val].count += 1;\n\n      if (!isLazyLoad || isLazyLoad && aggregates.length) {\n        grouped[val].items.push(jsonData[i]);\n      }\n    };\n\n    var this_2 = this;\n\n    for (var i = 0; i < jsonData.length; i++) {\n      _loop_2(i);\n    }\n\n    if (aggregates && aggregates.length) {\n      var _loop_3 = function _loop_3(i) {\n        var res = {};\n        var fn = void 0;\n        var aggs = aggregates;\n\n        for (var j = 0; j < aggregates.length; j++) {\n          fn = DataUtil.aggregates[aggregates[j].type];\n\n          if (!isNullOrUndefined(groupDs)) {\n            var temp = groupDs.filter(function (e) {\n              return e.key === groupedArray[i].key;\n            });\n\n            if (fn) {\n              res[aggs[j].field + ' - ' + aggs[j].type] = fn(temp[0].items, aggs[j].field);\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\n        groupedArray[i].aggregates = res;\n      };\n\n      for (var i = 0; i < groupedArray.length; i++) {\n        _loop_3(i);\n      }\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\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   * @param  {string} fKey\n   * @param  {string} from\n   * @param  {Object[]} source\n   * @param  {Group} lookup?\n   * @param  {string} pKey?\n   * @hidden\n   */\n\n\n  DataUtil.buildHierarchy = function (fKey, from, source, lookup, pKey) {\n    var i;\n    var grp = {};\n    var temp;\n\n    if (lookup.result) {\n      lookup = lookup.result;\n    }\n\n    if (lookup.GroupGuid) {\n      this.throwError('DataManager: Do not have support Grouping in hierarchy');\n    }\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\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   * @param  {Object} obj\n   * @param  {string[]} fields?\n   * @param  {string} prefix?\n   * @hidden\n   */\n\n\n  DataUtil.getFieldList = function (obj, fields, prefix) {\n    if (prefix === undefined) {\n      prefix = '';\n    }\n\n    if (fields === undefined || fields === null) {\n      return this.getFieldList(obj, [], prefix);\n    }\n\n    var copyObj = obj;\n    var keys = Object.keys(obj);\n\n    for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n      var prop = keys_1[_i];\n\n      if (typeof copyObj[prop] === 'object' && !(copyObj[prop] instanceof Array)) {\n        this.getFieldList(copyObj[prop], fields, prefix + prop + '.');\n      } else {\n        fields.push(prefix + prop);\n      }\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   * @param  {string} nameSpace - The name of the property to be accessed.\n   * @param  {Object} from - Defines the source object.\n   */\n\n\n  DataUtil.getObject = function (nameSpace, from) {\n    if (!nameSpace) {\n      return from;\n    }\n\n    if (!from) {\n      return undefined;\n    }\n\n    if (nameSpace.indexOf('.') === -1) {\n      return from[nameSpace];\n    }\n\n    var value = from;\n    var splits = nameSpace.split('.');\n\n    for (var i = 0; i < splits.length; i++) {\n      if (value == null) {\n        break;\n      }\n\n      value = value[splits[i]];\n    }\n\n    return value;\n  };\n  /**\n   * To set value for the nameSpace in desired object.\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\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\n    for (i = 0; i < length; i++) {\n      key = keys[i];\n\n      if (i + 1 === length) {\n        fromObj[key] = value === undefined ? undefined : value;\n      } else if (isNullOrUndefined(fromObj[key])) {\n        fromObj[key] = {};\n      }\n\n      fromObj = fromObj[key];\n    }\n\n    return start;\n  };\n  /**\n   * Sort the given data based on the field and comparer.\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\n\n  DataUtil.sort = function (ds, field, comparer) {\n    if (ds.length <= 1) {\n      return ds;\n    }\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\n  DataUtil.ignoreDiacritics = function (value) {\n    if (typeof value !== 'string') {\n      return value;\n    }\n\n    var result = value.split('');\n    var newValue = result.map(function (temp) {\n      return temp in DataUtil.diacritics ? DataUtil.diacritics[temp] : temp;\n    });\n    return newValue.join('');\n  };\n\n  DataUtil.merge = function (left, right, fieldName, comparer) {\n    var result = [];\n    var current;\n\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        } else {\n          current = left[0][fieldName] < left[0][fieldName] ? left : right;\n        }\n      } else {\n        current = left.length > 0 ? left : right;\n      }\n\n      result.push(current.shift());\n    }\n\n    return result;\n  };\n\n  DataUtil.getVal = function (array, index, field) {\n    return field ? this.getObject(field, array[index]) : array[index];\n  };\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   * @param  {Object} adaptor\n   * @param  {string} fnName\n   * @param  {Object} param1?\n   * @param  {Object} param2?\n   * @hidden\n   */\n\n\n  DataUtil.callAdaptorFunction = function (adaptor, fnName, param1, param2) {\n    if (fnName in adaptor) {\n      var res = adaptor[fnName](param1, param2);\n\n      if (!isNullOrUndefined(res)) {\n        param1 = res;\n      }\n    }\n\n    return param1;\n  };\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   * @param  {Object|Object[]} obj\n   */\n\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\n\n  DataUtil.isCors = function () {\n    var xhr = null;\n    var request = 'XMLHttpRequest';\n\n    try {\n      xhr = new window[request]();\n    } catch (e) {// No exception handling\n    }\n\n    return !!xhr && 'withCredentials' in xhr;\n  };\n  /**\n   * Generate random GUID value which will be prefixed with the given value.\n   * @param  {string} prefix\n   */\n\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      } else {\n        rand = Math.random() * 16 | 0;\n      }\n\n      return hexs[i === 19 ? rand & 0x3 | 0x8 : rand];\n    });\n  };\n  /**\n   * Checks wheather the given value is null or not.\n   * @param  {string|Object} val\n   * @returns boolean\n   */\n\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   * @param  {Object[]} array\n   * @param  {string} field\n   * @param  {Function} comparer\n   * @returns Object\n   * @hidden\n   */\n\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\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\n    for (; i < array.length; i++) {\n      current = DataUtil.getVal(array, i, field);\n\n      if (isNullOrUndefined(current)) {\n        continue;\n      }\n\n      if (castRequired) {\n        keyVal = +keyVal;\n        current = +current;\n      }\n\n      if (comparer(keyVal, current) > 0) {\n        keyVal = current;\n        key = array[i];\n      }\n    }\n\n    return key;\n  };\n  /**\n   * To get distinct values of Array or Array of Objects.\n   * @param  {Object[]} json\n   * @param  {string} field\n   * @param  {boolean} requiresCompleteRecord\n   * @returns Object[]\n   * * distinct array of objects is return when requiresCompleteRecord set as true.\n   * @hidden\n   */\n\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\n      if (!(val in tmp)) {\n        result.push(!requiresCompleteRecord ? val : json[index]);\n        tmp[val] = 1;\n      }\n    });\n    return result;\n  };\n  /**\n   * Specifies the value which will be used to adjust the date value to server timezone.\n   * @default null\n   */\n\n\n  DataUtil.serverTimezoneOffset = null;\n  /**\n   * Species whether are not to be parsed with serverTimezoneOffset value.\n   * @hidden\n   */\n\n  DataUtil.timeZoneHandling = true;\n  /**\n   * Throw error with the given string as message.\n   * @param  {string} er\n   */\n\n  DataUtil.throwError = function (error) {\n    try {\n      throw new Error(error);\n    } catch (e) {\n      throw e.message + '\\n' + e.stack;\n    }\n  };\n\n  DataUtil.aggregates = {\n    /**\n     * Calculate sum of the given field in the data.\n     * @param  {Object[]} ds\n     * @param  {string} field\n     */\n    sum: function sum(ds, field) {\n      var result = 0;\n      var val;\n      var castRequired = typeof DataUtil.getVal(ds, 0, field) !== 'number';\n\n      for (var i = 0; i < ds.length; i++) {\n        val = DataUtil.getVal(ds, i, field);\n\n        if (!isNaN(val) && val !== null) {\n          if (castRequired) {\n            val = +val;\n          }\n\n          result += val;\n        }\n      }\n\n      return result;\n    },\n\n    /**\n     * Calculate average value of the given field in the data.\n     * @param  {Object[]} ds\n     * @param  {string} field\n     */\n    average: function average(ds, field) {\n      return DataUtil.aggregates.sum(ds, field) / ds.length;\n    },\n\n    /**\n     * Returns the min value of the data based on the field.\n     * @param  {Object[]} ds\n     * @param  {string|Function} field\n     */\n    min: function min(ds, field) {\n      var comparer;\n\n      if (typeof field === 'function') {\n        comparer = field;\n        field = null;\n      }\n\n      return DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnAscending));\n    },\n\n    /**\n     * Returns the max value of the data based on the field.\n     * @param  {Object[]} ds\n     * @param  {string} field\n     * @returns number\n     */\n    max: function max(ds, field) {\n      var comparer;\n\n      if (typeof field === 'function') {\n        comparer = field;\n        field = null;\n      }\n\n      return DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnDescending));\n    },\n\n    /**\n     * Returns the total number of true value present in the data based on the given boolean field name.\n     * @param  {Object[]} ds\n     * @param  {string} field\n     */\n    truecount: function truecount(ds, field) {\n      return new DataManager(ds).executeLocal(new Query().where(field, 'equal', true, true)).length;\n    },\n\n    /**\n     * Returns the total number of false value present in the data based on the given boolean field name.\n     * @param  {Object[]} ds\n     * @param  {string} field\n     */\n    falsecount: function falsecount(ds, field) {\n      return new DataManager(ds).executeLocal(new Query().where(field, 'equal', false, true)).length;\n    },\n\n    /**\n     * Returns the length of the given data.\n     * @param  {Object[]} ds\n     * @param  {string} field?\n     * @returns number\n     */\n    count: function count(ds, field) {\n      return ds.length;\n    }\n  };\n  /**\n   * Specifies the Object with filter operators.\n   */\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\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\n  DataUtil.odUniOperator = {\n    '$=': 'endswith',\n    '^=': 'startswith',\n    '*=': 'substringof',\n    'endswith': 'endswith',\n    'startswith': 'startswith',\n    'contains': 'substringof'\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\n  DataUtil.odv4UniOperator = {\n    '$=': 'endswith',\n    '^=': 'startswith',\n    '*=': 'contains',\n    'endswith': 'endswith',\n    'startswith': 'startswith',\n    'contains': 'contains'\n  };\n  DataUtil.diacritics = {\n    \"\\u24B6\": 'A',\n    \"\\uFF21\": 'A',\n    \"\\xC0\": 'A',\n    \"\\xC1\": 'A',\n    \"\\xC2\": 'A',\n    \"\\u1EA6\": 'A',\n    \"\\u1EA4\": 'A',\n    \"\\u1EAA\": 'A',\n    \"\\u1EA8\": 'A',\n    \"\\xC3\": '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    \"\\xC4\": 'A',\n    \"\\u01DE\": 'A',\n    \"\\u1EA2\": 'A',\n    \"\\xC5\": '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    \"\\xC6\": '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    \"\\xC7\": '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    \"\\xC8\": 'E',\n    \"\\xC9\": 'E',\n    \"\\xCA\": '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    \"\\xCB\": '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    \"\\xCC\": 'I',\n    \"\\xCD\": 'I',\n    \"\\xCE\": 'I',\n    \"\\u0128\": 'I',\n    \"\\u012A\": 'I',\n    \"\\u012C\": 'I',\n    \"\\u0130\": 'I',\n    \"\\xCF\": '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    \"\\xD1\": '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    \"\\xD2\": 'O',\n    \"\\xD3\": 'O',\n    \"\\xD4\": 'O',\n    \"\\u1ED2\": 'O',\n    \"\\u1ED0\": 'O',\n    \"\\u1ED6\": 'O',\n    \"\\u1ED4\": 'O',\n    \"\\xD5\": '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    \"\\xD6\": '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    \"\\xD8\": '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    \"\\xD9\": 'U',\n    \"\\xDA\": 'U',\n    \"\\xDB\": 'U',\n    \"\\u0168\": 'U',\n    \"\\u1E78\": 'U',\n    \"\\u016A\": 'U',\n    \"\\u1E7A\": 'U',\n    \"\\u016C\": 'U',\n    \"\\xDC\": '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    \"\\xDD\": '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    \"\\xE0\": 'a',\n    \"\\xE1\": 'a',\n    \"\\xE2\": 'a',\n    \"\\u1EA7\": 'a',\n    \"\\u1EA5\": 'a',\n    \"\\u1EAB\": 'a',\n    \"\\u1EA9\": 'a',\n    \"\\xE3\": '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    \"\\xE4\": 'a',\n    \"\\u01DF\": 'a',\n    \"\\u1EA3\": 'a',\n    \"\\xE5\": '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    \"\\xE6\": '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    \"\\xE7\": '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    \"\\xE8\": 'e',\n    \"\\xE9\": 'e',\n    \"\\xEA\": '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    \"\\xEB\": '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    \"\\xEC\": 'i',\n    \"\\xED\": 'i',\n    \"\\xEE\": 'i',\n    \"\\u0129\": 'i',\n    \"\\u012B\": 'i',\n    \"\\u012D\": 'i',\n    \"\\xEF\": '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    \"\\xF1\": '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    \"\\xF2\": 'o',\n    \"\\xF3\": 'o',\n    \"\\xF4\": 'o',\n    \"\\u1ED3\": 'o',\n    \"\\u1ED1\": 'o',\n    \"\\u1ED7\": 'o',\n    \"\\u1ED5\": 'o',\n    \"\\xF5\": '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    \"\\xF6\": '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    \"\\xF8\": '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    \"\\xDF\": '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    \"\\xF9\": 'u',\n    \"\\xFA\": 'u',\n    \"\\xFB\": 'u',\n    \"\\u0169\": 'u',\n    \"\\u1E79\": 'u',\n    \"\\u016B\": 'u',\n    \"\\u1E7B\": 'u',\n    \"\\u016D\": 'u',\n    \"\\xFC\": '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    \"\\xFD\": 'y',\n    \"\\u0177\": 'y',\n    \"\\u1EF9\": 'y',\n    \"\\u0233\": 'y',\n    \"\\u1E8F\": 'y',\n    \"\\xFF\": '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     * @param  {string|number|boolean} actual\n     * @param  {string|number|boolean} expected\n     * @param  {boolean} ignoreCase?\n     * @param  {boolean} ignoreAccent?\n     */\n    equal: function equal(actual, expected, ignoreCase, ignoreAccent) {\n      if (ignoreAccent) {\n        actual = DataUtil.ignoreDiacritics(actual);\n        expected = DataUtil.ignoreDiacritics(expected);\n      }\n\n      if (ignoreCase) {\n        return DataUtil.toLowerCase(actual) === DataUtil.toLowerCase(expected);\n      }\n\n      return actual === expected;\n    },\n\n    /**\n     * Returns true when the actual input is not equal to the given input.\n     * @param  {string|number|boolean} actual\n     * @param  {string|number|boolean} expected\n     * @param  {boolean} ignoreCase?\n     */\n    notequal: function notequal(actual, expected, ignoreCase, ignoreAccent) {\n      if (ignoreAccent) {\n        actual = DataUtil.ignoreDiacritics(actual);\n        expected = DataUtil.ignoreDiacritics(expected);\n      }\n\n      return !DataUtil.fnOperators.equal(actual, expected, ignoreCase);\n    },\n\n    /**\n     * Returns true when the actual input is less than to the given input.\n     * @param  {string|number|boolean} actual\n     * @param  {string|number|boolean} expected\n     * @param  {boolean} ignoreCase?\n     */\n    lessthan: function lessthan(actual, expected, ignoreCase) {\n      if (ignoreCase) {\n        return DataUtil.toLowerCase(actual) < DataUtil.toLowerCase(expected);\n      }\n\n      if (isNullOrUndefined(actual)) {\n        actual = undefined;\n      }\n\n      return actual < expected;\n    },\n\n    /**\n     * Returns true when the actual input is greater than to the given input.\n     * @param  {string|number|boolean} actual\n     * @param  {string|number|boolean} expected\n     * @param  {boolean} ignoreCase?\n     */\n    greaterthan: function greaterthan(actual, expected, ignoreCase) {\n      if (ignoreCase) {\n        return DataUtil.toLowerCase(actual) > DataUtil.toLowerCase(expected);\n      }\n\n      return actual > expected;\n    },\n\n    /**\n     * Returns true when the actual input is less than or equal to the given input.\n     * @param  {string|number|boolean} actual\n     * @param  {string|number|boolean} expected\n     * @param  {boolean} ignoreCase?\n     */\n    lessthanorequal: function lessthanorequal(actual, expected, ignoreCase) {\n      if (ignoreCase) {\n        return DataUtil.toLowerCase(actual) <= DataUtil.toLowerCase(expected);\n      }\n\n      return actual <= expected;\n    },\n\n    /**\n     * Returns true when the actual input is greater than or equal to the given input.\n     * @param  {string|number|boolean} actual\n     * @param  {string|number|boolean} expected\n     * @param  {boolean} ignoreCase?\n     */\n    greaterthanorequal: function greaterthanorequal(actual, expected, ignoreCase) {\n      if (ignoreCase) {\n        return DataUtil.toLowerCase(actual) >= DataUtil.toLowerCase(expected);\n      }\n\n      return actual >= expected;\n    },\n\n    /**\n     * Returns true when the actual input contains the given string.\n     * @param  {string|number} actual\n     * @param  {string|number} expected\n     * @param  {boolean} ignoreCase?\n     */\n    contains: function contains(actual, expected, ignoreCase, ignoreAccent) {\n      if (ignoreAccent) {\n        actual = DataUtil.ignoreDiacritics(actual);\n        expected = DataUtil.ignoreDiacritics(expected);\n      }\n\n      if (ignoreCase) {\n        return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) && DataUtil.toLowerCase(actual).indexOf(DataUtil.toLowerCase(expected)) !== -1;\n      }\n\n      return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) && actual.toString().indexOf(expected) !== -1;\n    },\n\n    /**\n     * Returns true when the given input value is not null.\n     * @param  {string|number} actual\n     * @returns boolean\n     */\n    notnull: function notnull(actual) {\n      return actual !== null;\n    },\n\n    /**\n     * Returns true when the given input value is null.\n     * @param  {string|number} actual\n     * @returns boolean\n     */\n    isnull: function isnull(actual) {\n      return actual === null;\n    },\n\n    /**\n     * Returns true when the actual input starts with the given string\n     * @param  {string} actual\n     * @param  {string} expected\n     * @param  {boolean} ignoreCase?\n     */\n    startswith: function startswith(actual, expected, ignoreCase, ignoreAccent) {\n      if (ignoreAccent) {\n        actual = DataUtil.ignoreDiacritics(actual);\n        expected = DataUtil.ignoreDiacritics(expected);\n      }\n\n      if (ignoreCase) {\n        return actual && expected && DataUtil.startsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n      }\n\n      return actual && expected && DataUtil.startsWith(actual, expected);\n    },\n\n    /**\n     * Returns true when the actual input ends with the given string.\n     * @param  {string} actual\n     * @param  {string} expected\n     * @param  {boolean} ignoreCase?\n     */\n    endswith: function endswith(actual, expected, ignoreCase, ignoreAccent) {\n      if (ignoreAccent) {\n        actual = DataUtil.ignoreDiacritics(actual);\n        expected = DataUtil.ignoreDiacritics(expected);\n      }\n\n      if (ignoreCase) {\n        return actual && expected && DataUtil.endsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n      }\n\n      return actual && expected && DataUtil.endsWith(actual, expected);\n    },\n\n    /**\n     * It will return the filter operator based on the filter symbol.\n     * @param  {string} operator\n     * @hidden\n     */\n    processSymbols: function processSymbols(operator) {\n      var fnName = DataUtil.operatorSymbols[operator];\n\n      if (fnName) {\n        var fn = DataUtil.fnOperators[fnName];\n        return fn;\n      }\n\n      return DataUtil.throwError('Query - Process Operator : Invalid operator');\n    },\n\n    /**\n     * It will return the valid filter operator based on the specified operators.\n     * @param  {string} operator\n     * @hidden\n     */\n    processOperator: function processOperator(operator) {\n      var fn = DataUtil.fnOperators[operator];\n\n      if (fn) {\n        return fn;\n      }\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\n  DataUtil.parse = {\n    /**\n     * Parse the given string to the plain JavaScript object.\n     * @param  {string|Object|Object[]} jsonText\n     */\n    parseJson: function parseJson(jsonText) {\n      if (typeof jsonText === 'string') {\n        jsonText = JSON.parse(jsonText, DataUtil.parse.jsonReviver);\n      } else if (jsonText instanceof Array) {\n        DataUtil.parse.iterateAndReviveArray(jsonText);\n      } else if (typeof jsonText === 'object' && jsonText !== null) {\n        DataUtil.parse.iterateAndReviveJson(jsonText);\n      }\n\n      return jsonText;\n    },\n\n    /**\n     * It will perform on array of values.\n     * @param  {string[]|Object[]} array\n     * @hidden\n     */\n    iterateAndReviveArray: function iterateAndReviveArray(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        } else if (typeof array[i] === 'string' && !/^[\\s]*\\[|^[\\s]*\\{(.)+:|\\\"/g.test(array[i])) {\n          array[i] = DataUtil.parse.jsonReviver('', array[i]);\n        } else {\n          array[i] = DataUtil.parse.parseJson(array[i]);\n        }\n      }\n    },\n\n    /**\n     * It will perform on JSON values\n     * @param  {JSON} json\n     * @hidden\n     */\n    iterateAndReviveJson: function iterateAndReviveJson(json) {\n      var value;\n      var keys = Object.keys(json);\n\n      for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n        var prop = keys_2[_i];\n\n        if (DataUtil.startsWith(prop, '__')) {\n          continue;\n        }\n\n        value = json[prop];\n\n        if (typeof value === 'object') {\n          if (value instanceof Array) {\n            DataUtil.parse.iterateAndReviveArray(value);\n          } else if (value) {\n            DataUtil.parse.iterateAndReviveJson(value);\n          }\n        } else {\n          json[prop] = DataUtil.parse.jsonReviver(json[prop], value);\n        }\n      }\n    },\n\n    /**\n     * It will perform on JSON values\n     * @param  {string} field\n     * @param  {string|Date} value\n     * @hidden\n     */\n    jsonReviver: function jsonReviver(field, value) {\n      if (typeof value === 'string') {\n        var ms = /^\\/Date\\(([+-]?[0-9]+)([+-][0-9]{4})?\\)\\/$/.exec(value);\n        var offSet = DataUtil.timeZoneHandling ? DataUtil.serverTimezoneOffset : null;\n\n        if (ms) {\n          return DataUtil.dateParse.toTimeZone(new Date(parseInt(ms[1], 10)), offSet, true);\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\n          if (isUTC) {\n            value = DataUtil.dateParse.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)), DataUtil.serverTimezoneOffset, false);\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], 10));\n            var hrs = parseInt(arr[6], 10);\n            var mins = parseInt(arr[7], 10);\n\n            if (isNaN(hrs) && isNaN(mins)) {\n              return utcFormat;\n            }\n\n            if (value.indexOf('+') > -1) {\n              utcFormat.setHours(utcFormat.getHours() - hrs, utcFormat.getMinutes() - mins);\n            } else {\n              utcFormat.setHours(utcFormat.getHours() + hrs, utcFormat.getMinutes() + mins);\n            }\n\n            value = DataUtil.dateParse.toTimeZone(utcFormat, DataUtil.serverTimezoneOffset, false);\n          }\n\n          if (DataUtil.serverTimezoneOffset == null) {\n            value = DataUtil.dateParse.addSelfOffset(value);\n          }\n        }\n      }\n\n      return value;\n    },\n\n    /**\n     * Check wheather the given value is JSON or not.\n     * @param  {Object[]} jsonData\n     */\n    isJson: function isJson(jsonData) {\n      if (typeof jsonData[0] === 'string') {\n        return jsonData;\n      }\n\n      return DataUtil.parse.parseJson(jsonData);\n    },\n\n    /**\n     * Checks wheather the given value is GUID or not.\n     * @param  {string} value\n     */\n    isGuid: function isGuid(value) {\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    /**\n     * The method used to replace the value based on the type.\n     * @param  {Object} value\n     * @param  {boolean} stringify\n     * @hidden\n     */\n    replacer: function replacer(value, stringify) {\n      if (DataUtil.isPlainObject(value)) {\n        return DataUtil.parse.jsonReplacer(value, stringify);\n      }\n\n      if (value instanceof Array) {\n        return DataUtil.parse.arrayReplacer(value);\n      }\n\n      if (value instanceof Date) {\n        return DataUtil.parse.jsonReplacer({\n          val: value\n        }, stringify).val;\n      }\n\n      return value;\n    },\n\n    /**\n     * It will replace the JSON value.\n     * @param  {string} key\n     * @param  {Object} val\n     * @hidden\n     */\n    jsonReplacer: function jsonReplacer(val, stringify) {\n      var value;\n      var keys = Object.keys(val);\n\n      for (var _i = 0, keys_3 = keys; _i < keys_3.length; _i++) {\n        var prop = keys_3[_i];\n        value = val[prop];\n\n        if (!(value instanceof Date)) {\n          continue;\n        }\n\n        var d = value;\n\n        if (DataUtil.serverTimezoneOffset == null) {\n          val[prop] = DataUtil.dateParse.toTimeZone(d, null).toJSON();\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\n      return val;\n    },\n\n    /**\n     * It will replace the Array of value.\n     * @param  {string} key\n     * @param  {Object[]} val\n     * @hidden\n     */\n    arrayReplacer: function arrayReplacer(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        } else if (val[i] instanceof Date) {\n          val[i] = DataUtil.parse.jsonReplacer({\n            date: val[i]\n          }).date;\n        }\n      }\n\n      return val;\n    },\n\n    /**\n     * It will replace the Date object with respective to UTC format value.\n     * @param  {string} key\n     * @param  {any} value\n     * @hidden\n     */\n\n    /* tslint:disable-next-line:no-any */\n    jsonDateReplacer: function jsonDateReplacer(key, value) {\n      if (key === 'value' && value) {\n        if (typeof value === 'string') {\n          var ms = /^\\/Date\\(([+-]?[0-9]+)([+-][0-9]{4})?\\)\\/$/.exec(value);\n\n          if (ms) {\n            value = DataUtil.dateParse.toTimeZone(new Date(parseInt(ms[1], 10)), null, true);\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.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\n        if (value instanceof Date) {\n          value = DataUtil.dateParse.addSelfOffset(value);\n\n          if (DataUtil.serverTimezoneOffset === null) {\n            return DataUtil.dateParse.toTimeZone(DataUtil.dateParse.addSelfOffset(value), null).toJSON();\n          } else {\n            value = DataUtil.dateParse.toTimeZone(value, value.getTimezoneOffset() / 60 * 2 - DataUtil.serverTimezoneOffset, false);\n            return value.toJSON();\n          }\n        }\n      }\n\n      return value;\n    }\n  };\n  /**\n   * @hidden\n   */\n\n  DataUtil.dateParse = {\n    addSelfOffset: function addSelfOffset(input) {\n      return new Date(+input - input.getTimezoneOffset() * 60000);\n    },\n    toUTC: function toUTC(input) {\n      return new Date(+input + input.getTimezoneOffset() * 60000);\n    },\n    toTimeZone: function toTimeZone(input, offset, utc) {\n      if (offset === null) {\n        return input;\n      }\n\n      var unix = utc ? DataUtil.dateParse.toUTC(input) : input;\n      return new Date(+unix - offset * 3600000);\n    },\n    toLocalTime: function toLocalTime(input) {\n      var datefn = input;\n      var timeZone = -datefn.getTimezoneOffset();\n      var differenceString = timeZone >= 0 ? '+' : '-';\n\n      var localtimefn = function localtimefn(num) {\n        var norm = Math.floor(Math.abs(num));\n        return (norm < 10 ? '0' : '') + norm;\n      };\n\n      var val = datefn.getFullYear() + '-' + localtimefn(datefn.getMonth() + 1) + '-' + localtimefn(datefn.getDate()) + 'T' + localtimefn(datefn.getHours()) + ':' + localtimefn(datefn.getMinutes()) + ':' + localtimefn(datefn.getSeconds()) + differenceString + localtimefn(timeZone / 60) + ':' + localtimefn(timeZone % 60);\n      return val;\n    }\n  };\n  return DataUtil;\n}();\n\nexport { DataUtil };","import { Browser, remove, EventHandler, isUndefined, closest, classList } from '@syncfusion/ej2-base';\nimport { parentsUntil } from '../base/util';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\n/**\n * The `Clipboard` module is used to handle clipboard copy action.\n */\n\nvar Clipboard =\n/** @class */\nfunction () {\n  /**\n   * Constructor for the Grid clipboard module\n   * @hidden\n   */\n  function Clipboard(parent) {\n    this.copyContent = '';\n    this.isSelect = false;\n    this.parent = parent;\n    this.addEventListener();\n  }\n  /**\n   * @hidden\n   */\n\n\n  Clipboard.prototype.addEventListener = function () {\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    this.parent.on(events.contentReady, this.initialEnd, this);\n    this.parent.on(events.keyPressed, this.keyDownHandler, this);\n    this.parent.on(events.click, this.clickHandler, this);\n    EventHandler.add(this.parent.element, 'keydown', this.pasteHandler, this);\n  };\n  /**\n   * @hidden\n   */\n\n\n  Clipboard.prototype.removeEventListener = function () {\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    this.parent.off(events.keyPressed, this.keyDownHandler);\n    this.parent.off(events.contentReady, this.initialEnd);\n    this.parent.off(events.click, this.clickHandler);\n    EventHandler.remove(this.parent.element, 'keydown', this.pasteHandler);\n  };\n\n  Clipboard.prototype.clickHandler = function (e) {\n    var target = parentsUntil(e.target, literals.rowCell);\n  };\n\n  Clipboard.prototype.pasteHandler = function (e) {\n    var _this = this;\n\n    var grid = this.parent;\n    var isMacLike = /(Mac)/i.test(navigator.platform);\n\n    if (e.keyCode === 86 && (e.ctrlKey || isMacLike && e.metaKey) && !grid.isEdit) {\n      var target = closest(document.activeElement, '.' + literals.rowCell);\n\n      if (!target || !grid.editSettings.allowEditing || grid.editSettings.mode !== 'Batch' || grid.selectionSettings.mode !== 'Cell' || grid.selectionSettings.cellSelectionMode === 'Flow') {\n        return;\n      }\n\n      this.activeElement = document.activeElement;\n      this.clipBoardTextArea.value = '';\n      var x_1 = window.scrollX;\n      var y_1 = window.scrollY;\n      this.clipBoardTextArea.focus();\n      setTimeout(function () {\n        _this.activeElement.focus();\n\n        window.scrollTo(x_1, y_1);\n\n        _this.paste(_this.clipBoardTextArea.value, _this.parent.getSelectedRowCellIndexes()[0].rowIndex, _this.parent.getSelectedRowCellIndexes()[0].cellIndexes[0]);\n      }, 10);\n    }\n  };\n  /**\n   * Paste data from clipboard to selected cells.\n   * @param {boolean} data - Specifies the date for paste.\n   * @param {boolean} rowIndex - Specifies the row index.\n   * @param {boolean} colIndex - Specifies the column index.\n   */\n\n\n  Clipboard.prototype.paste = function (data, rowIndex, colIndex) {\n    var grid = this.parent;\n    var cIdx = colIndex;\n    var rIdx = rowIndex;\n    var col;\n    var value;\n    var isAvail;\n\n    if (!grid.editSettings.allowEditing || grid.editSettings.mode !== 'Batch' || grid.selectionSettings.mode !== 'Cell' || grid.selectionSettings.cellSelectionMode === 'Flow') {\n      return;\n    }\n\n    var rows = data.split('\\n');\n    var cols;\n    var dataRows = grid.getDataRows();\n    var mRows;\n    var frRows;\n    var isFrozen = this.parent.isFrozenGrid();\n\n    if (isFrozen) {\n      mRows = grid.getMovableDataRows();\n\n      if (grid.getFrozenRightColumnsCount()) {\n        frRows = grid.getFrozenRightDataRows();\n      }\n    }\n\n    for (var r = 0; r < rows.length; r++) {\n      cols = rows[r].split('\\t');\n      cIdx = colIndex;\n\n      if (r === rows.length - 1 && rows[r] === '' || isUndefined(grid.getRowByIndex(rIdx))) {\n        cIdx++;\n        break;\n      }\n\n      for (var c = 0; c < cols.length; c++) {\n        isAvail = grid.getCellFromIndex(rIdx, cIdx);\n\n        if (isFrozen) {\n          var fTr = dataRows[rIdx];\n          var mTr = mRows[rIdx];\n          isAvail = !fTr.querySelector('[aria-colindex=\"' + cIdx + '\"]') ? mTr.querySelector('[aria-colindex=\"' + cIdx + '\"]') : true;\n\n          if (frRows && !isAvail) {\n            var frTr = frRows[rIdx];\n            isAvail = frTr.querySelector('[aria-colindex=\"' + cIdx + '\"]');\n          }\n        }\n\n        if (!isAvail) {\n          cIdx++;\n          break;\n        }\n\n        col = grid.getColumnByIndex(cIdx);\n        value = col.getParser() ? col.getParser()(cols[c]) : cols[c];\n\n        if (col.allowEditing && !col.isPrimaryKey && !col.template) {\n          var args = {\n            column: col,\n            data: value,\n            rowIndex: rIdx\n          };\n          this.parent.trigger(events.beforePaste, args);\n          rIdx = args.rowIndex;\n\n          if (!args.cancel) {\n            if (grid.editModule) {\n              if (col.type === 'number') {\n                this.parent.editModule.updateCell(rIdx, col.field, parseFloat(args.data));\n              } else {\n                grid.editModule.updateCell(rIdx, col.field, args.data);\n              }\n            }\n          }\n        }\n\n        cIdx++;\n      }\n\n      rIdx++;\n    }\n\n    grid.selectionModule.selectCellsByRange({\n      rowIndex: rowIndex,\n      cellIndex: colIndex\n    }, {\n      rowIndex: rIdx - 1,\n      cellIndex: cIdx - 1\n    });\n    var cell = this.parent.getCellFromIndex(rIdx - 1, cIdx - 1);\n\n    if (cell) {\n      classList(cell, ['e-focus', 'e-focused'], []);\n    }\n  };\n\n  Clipboard.prototype.initialEnd = function () {\n    this.parent.off(events.contentReady, this.initialEnd);\n    this.clipBoardTextArea = this.parent.createElement('textarea', {\n      className: 'e-clipboard',\n      styles: 'opacity: 0',\n      attrs: {\n        tabindex: '-1',\n        'aria-label': 'clipboard'\n      }\n    });\n    this.parent.element.appendChild(this.clipBoardTextArea);\n  };\n\n  Clipboard.prototype.keyDownHandler = function (e) {\n    if (e.action === 'ctrlPlusC') {\n      this.copy();\n    } else if (e.action === 'ctrlShiftPlusH') {\n      this.copy(true);\n    }\n  };\n\n  Clipboard.prototype.setCopyData = function (withHeader) {\n    if (window.getSelection().toString() === '') {\n      var isFrozen = this.parent.isFrozenGrid();\n      this.clipBoardTextArea.value = this.copyContent = '';\n      var mRows = void 0;\n      var frRows = void 0;\n      var rows = this.parent.getRows();\n\n      if (isFrozen) {\n        mRows = this.parent.getMovableDataRows();\n\n        if (this.parent.getFrozenMode() === literals.leftRight) {\n          frRows = this.parent.getFrozenRightRows();\n        }\n      }\n\n      if (this.parent.selectionSettings.mode !== 'Cell') {\n        var selectedIndexes = this.parent.getSelectedRowIndexes().sort(function (a, b) {\n          return a - b;\n        });\n\n        if (withHeader) {\n          var headerTextArray = [];\n\n          for (var i = 0; i < this.parent.getVisibleColumns().length; i++) {\n            headerTextArray[i] = this.parent.getVisibleColumns()[i].headerText;\n          }\n\n          this.getCopyData(headerTextArray, false, '\\t', withHeader);\n          this.copyContent += '\\n';\n        }\n\n        for (var i = 0; i < selectedIndexes.length; i++) {\n          if (i > 0) {\n            this.copyContent += '\\n';\n          }\n\n          var cells = [].slice.call(rows[selectedIndexes[i]].querySelectorAll('.e-rowcell:not(.e-hide)'));\n\n          if (isFrozen) {\n            cells.push.apply(cells, [].slice.call(mRows[selectedIndexes[i]].querySelectorAll('.e-rowcell:not(.e-hide)')));\n\n            if (frRows) {\n              cells.push.apply(cells, [].slice.call(frRows[selectedIndexes[i]].querySelectorAll('.e-rowcell:not(.e-hide)')));\n            }\n          }\n\n          this.getCopyData(cells, false, '\\t', withHeader);\n        }\n      } else {\n        var obj = this.checkBoxSelection();\n\n        if (obj.status) {\n          if (withHeader) {\n            var headers = [];\n\n            for (var i = 0; i < obj.colIndexes.length; i++) {\n              headers.push(this.parent.getColumnHeaderByIndex(obj.colIndexes[i]));\n            }\n\n            this.getCopyData(headers, false, '\\t', withHeader);\n            this.copyContent += '\\n';\n          }\n\n          for (var i = 0; i < obj.rowIndexes.length; i++) {\n            if (i > 0) {\n              this.copyContent += '\\n';\n            }\n\n            var cells = [].slice.call(rows[obj.rowIndexes[i]].getElementsByClassName('e-cellselectionbackground'));\n\n            if (isFrozen) {\n              cells.push.apply(cells, [].slice.call(mRows[obj.rowIndexes[i]].getElementsByClassName('e-cellselectionbackground')));\n\n              if (frRows) {\n                cells.push.apply(cells, [].slice.call(frRows[obj.rowIndexes[i]].getElementsByClassName('e-cellselectionbackground')));\n              }\n            }\n\n            this.getCopyData(cells, false, '\\t', withHeader);\n          }\n        } else {\n          this.getCopyData([].slice.call(this.parent.element.getElementsByClassName('e-cellselectionbackground')), true, '\\n', withHeader);\n        }\n      }\n\n      var args = {\n        data: this.copyContent,\n        cancel: false\n      };\n      this.parent.trigger(events.beforeCopy, args);\n\n      if (args.cancel) {\n        return;\n      }\n\n      this.clipBoardTextArea.value = this.copyContent = args.data;\n\n      if (!Browser.userAgent.match(/ipad|ipod|iphone/i)) {\n        this.clipBoardTextArea.select();\n      } else {\n        this.clipBoardTextArea.setSelectionRange(0, this.clipBoardTextArea.value.length);\n      }\n\n      this.isSelect = true;\n    }\n  };\n\n  Clipboard.prototype.getCopyData = function (cells, isCell, splitKey, withHeader) {\n    var isElement = typeof cells[0] !== 'string';\n\n    for (var j = 0; j < cells.length; j++) {\n      if (withHeader && isCell) {\n        this.copyContent += this.parent.getColumns()[parseInt(cells[j].getAttribute(literals.ariaColIndex), 10)].headerText + '\\n';\n      }\n\n      if (isElement) {\n        if (!cells[j].classList.contains('e-hide')) {\n          this.copyContent += cells[j].innerText;\n        }\n      } else {\n        this.copyContent += cells[j];\n      }\n\n      if (j < cells.length - 1) {\n        this.copyContent += splitKey;\n      }\n    }\n  };\n  /**\n   * Copy selected rows or cells data into clipboard.\n   * @param {boolean} withHeader - Specifies whether the column header data need to be copied or not.\n   */\n\n\n  Clipboard.prototype.copy = function (withHeader) {\n    if (document.queryCommandSupported('copy')) {\n      this.setCopyData(withHeader);\n      document.execCommand('copy');\n      this.clipBoardTextArea.blur();\n    }\n\n    if (this.isSelect) {\n      window.getSelection().removeAllRanges();\n      this.isSelect = false;\n    }\n  };\n  /**\n   * For internal use only - Get the module name.\n   * @private\n   */\n\n\n  Clipboard.prototype.getModuleName = function () {\n    return 'clipboard';\n  };\n  /**\n   * To destroy the clipboard\n   * @return {void}\n   * @hidden\n   */\n\n\n  Clipboard.prototype.destroy = function () {\n    this.removeEventListener();\n\n    if (this.clipBoardTextArea) {\n      remove(this.clipBoardTextArea);\n    }\n  };\n\n  Clipboard.prototype.checkBoxSelection = function () {\n    var gridObj = this.parent;\n    var obj = {\n      status: false\n    };\n\n    if (gridObj.selectionSettings.mode === 'Cell') {\n      var rowCellIndxes = gridObj.getSelectedRowCellIndexes();\n      var str = void 0;\n      var rowIndexes = [];\n      var i = void 0;\n\n      for (i = 0; i < rowCellIndxes.length; i++) {\n        if (rowCellIndxes[i].cellIndexes.length) {\n          rowIndexes.push(rowCellIndxes[i].rowIndex);\n        }\n\n        if (rowCellIndxes[i].cellIndexes.length) {\n          if (!str) {\n            str = JSON.stringify(rowCellIndxes[i].cellIndexes.sort());\n          }\n\n          if (str !== JSON.stringify(rowCellIndxes[i].cellIndexes.sort())) {\n            break;\n          }\n        }\n      }\n\n      rowIndexes.sort(function (a, b) {\n        return a - b;\n      });\n\n      if (i === rowCellIndxes.length && rowIndexes[rowIndexes.length - 1] - rowIndexes[0] === rowIndexes.length - 1) {\n        obj = {\n          status: true,\n          rowIndexes: rowIndexes,\n          colIndexes: rowCellIndxes[0].cellIndexes\n        };\n      }\n    }\n\n    return obj;\n  };\n\n  return Clipboard;\n}();\n\nexport { Clipboard };","import { print as printWindow, createElement, detach, classList, selectAll, extend } from '@syncfusion/ej2-base';\nimport { getPrintGridModel } from '../base/util';\nimport { Grid } from '../base/grid';\nimport * as events from '../base/constant';\nimport { Deferred } from '@syncfusion/ej2-data';\nimport * as literals from '../base/string-literals';\n/**\n * @hidden\n */\n\nexport function getCloneProperties() {\n  return ['aggregates', 'allowGrouping', 'allowFiltering', 'allowMultiSorting', 'allowReordering', 'allowSorting', 'allowTextWrap', 'childGrid', 'columns', 'currentViewData', 'dataSource', 'detailTemplate', 'enableAltRow', 'enableColumnVirtualization', 'filterSettings', 'gridLines', 'groupSettings', 'height', 'locale', 'pageSettings', 'printMode', 'query', 'queryString', 'enableRtl', 'rowHeight', 'rowTemplate', 'sortSettings', 'textWrapSettings', 'allowPaging', 'hierarchyPrintMode', 'searchSettings', 'queryCellInfo', 'beforeDataBound'];\n}\n/**\n *\n * The `Print` module is used to handle print action.\n */\n\nvar Print =\n/** @class */\nfunction () {\n  /**\n   * Constructor for the Grid print module\n   * @hidden\n   */\n  function Print(parent, scrollModule) {\n    this.isAsyncPrint = false;\n    this.defered = new Deferred();\n    this.parent = parent;\n\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    this.parent.on(events.contentReady, this.isContentReady(), this);\n    this.parent.addEventListener(events.actionBegin, this.actionBegin.bind(this));\n    this.parent.on(events.onEmpty, this.onEmpty.bind(this));\n    this.parent.on(events.hierarchyPrint, this.hierarchyPrint, this);\n    this.scrollModule = scrollModule;\n  }\n\n  Print.prototype.isContentReady = function () {\n    var _this = this;\n\n    if (this.isPrintGrid() && (this.parent.hierarchyPrintMode === 'None' || !this.parent.childGrid)) {\n      return this.contentReady;\n    }\n\n    return function () {\n      _this.defered.promise.then(function () {\n        _this.contentReady();\n      });\n\n      if (_this.isPrintGrid()) {\n        _this.hierarchyPrint();\n      }\n    };\n  };\n\n  Print.prototype.hierarchyPrint = function () {\n    this.removeColGroup(this.parent);\n    var printGridObj = window.printGridObj;\n\n    if (printGridObj && !printGridObj.element.querySelector('[aria-busy=true')) {\n      printGridObj.printModule.defered.resolve();\n    }\n  };\n  /**\n   * By default, prints all the Grid pages and hides the pager.\n   * > You can customize print options using the\n   * [`printMode`](grid/#printmode-string/).\n   * @return {void}\n   */\n\n\n  Print.prototype.print = function () {\n    this.renderPrintGrid();\n    this.printWind = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');\n    this.printWind.moveTo(0, 0);\n    this.printWind.resizeTo(screen.availWidth, screen.availHeight);\n  };\n\n  Print.prototype.onEmpty = function () {\n    if (this.isPrintGrid()) {\n      this.contentReady();\n    }\n  };\n\n  Print.prototype.actionBegin = function () {\n    if (this.isPrintGrid()) {\n      this.isAsyncPrint = true;\n    }\n  };\n\n  Print.prototype.renderPrintGrid = function () {\n    var gObj = this.parent;\n    var element = createElement('div', {\n      id: this.parent.element.id + '_print',\n      className: gObj.element.className + ' e-print-grid'\n    });\n    element.classList.remove('e-gridhover');\n    document.body.appendChild(element);\n    var printGrid = new Grid(getPrintGridModel(gObj, gObj.hierarchyPrintMode));\n\n    if (gObj.isFrozenGrid() && !gObj.getFrozenColumns()) {\n      for (var i = 0; i < printGrid.columns.length; i++) {\n        printGrid.columns[i] = extend({}, printGrid.columns[i]);\n        printGrid.columns[i].freeze = undefined;\n      }\n    }\n    /* tslint:disable-next-line:no-any */\n\n\n    if (this.parent.isAngular) {\n      /* tslint:disable-next-line:no-any */\n      printGrid.viewContainerRef = this.parent.viewContainerRef;\n    }\n    /* tslint:disable:no-empty */\n\n\n    printGrid.load = function () {};\n\n    printGrid.query = gObj.getQuery().clone();\n    window.printGridObj = printGrid;\n    printGrid.isPrinting = true;\n    var modules = printGrid.getInjectedModules();\n    var injectedModues = gObj.getInjectedModules();\n\n    if (!modules || modules.length !== injectedModues.length) {\n      printGrid.setInjectedModules(injectedModues);\n    }\n\n    gObj.notify(events.printGridInit, {\n      element: element,\n      printgrid: printGrid\n    });\n    this.parent.log('exporting_begin', this.getModuleName());\n    printGrid.registeredTemplate = this.parent.registeredTemplate;\n    printGrid.appendTo(element);\n    printGrid.trigger = gObj.trigger;\n  };\n\n  Print.prototype.contentReady = function () {\n    if (this.isPrintGrid()) {\n      var gObj = this.parent;\n\n      if (this.isAsyncPrint) {\n        this.printGrid();\n        return;\n      }\n\n      var args = {\n        requestType: 'print',\n        element: gObj.element,\n        selectedRows: gObj.getContentTable().querySelectorAll('tr[aria-selected=\"true\"]'),\n        cancel: false,\n        hierarchyPrintMode: gObj.hierarchyPrintMode\n      };\n\n      if (!this.isAsyncPrint) {\n        gObj.trigger(events.beforePrint, args);\n      }\n\n      if (args.cancel) {\n        detach(gObj.element);\n        return;\n      }\n\n      if (!this.isAsyncPrint) {\n        this.printGrid();\n      }\n    }\n  };\n\n  Print.prototype.printGrid = function () {\n    var gObj = this.parent; // Height adjustment on print grid\n\n    if (gObj.height !== 'auto') {\n      // if scroller enabled\n      var cssProps = this.scrollModule.getCssProperties();\n      var contentDiv = gObj.element.querySelector('.' + literals.content);\n      var headerDiv = gObj.element.querySelector('.' + literals.gridHeader);\n      contentDiv.style.height = 'auto';\n      contentDiv.style.overflowY = 'auto';\n      headerDiv.style[cssProps.padding] = '';\n      headerDiv.firstElementChild.style[cssProps.border] = '';\n    } // Grid alignment adjustment on grouping\n\n\n    if (gObj.allowGrouping) {\n      if (!gObj.groupSettings.columns.length) {\n        gObj.element.querySelector('.e-groupdroparea').style.display = 'none';\n      } else {\n        this.removeColGroup(gObj);\n      }\n    } // hide horizontal scroll\n\n\n    for (var _i = 0, _a = [].slice.call(gObj.element.getElementsByClassName(literals.content)); _i < _a.length; _i++) {\n      var element = _a[_i];\n      element.style.overflowX = 'hidden';\n    } // Hide the waiting popup\n\n\n    var waitingPop = [].slice.call(gObj.element.getElementsByClassName('e-spin-show'));\n\n    for (var _b = 0, _c = [].slice.call(waitingPop); _b < _c.length; _b++) {\n      var element = _c[_b];\n      classList(element, ['e-spin-hide'], ['e-spin-show']);\n    }\n\n    this.printGridElement(gObj);\n    gObj.isPrinting = false;\n    delete window.printGridObj;\n    var args = {\n      element: gObj.element\n    };\n    gObj.trigger(events.printComplete, args);\n    this.parent.log('exporting_complete', this.getModuleName());\n  };\n\n  Print.prototype.printGridElement = function (gObj) {\n    classList(gObj.element, ['e-print-grid-layout'], ['e-print-grid']);\n\n    if (gObj.isPrinting) {\n      detach(gObj.element);\n    }\n\n    this.printWind = printWindow(gObj.element, this.printWind);\n  };\n\n  Print.prototype.removeColGroup = function (gObj) {\n    var depth = gObj.groupSettings.columns.length;\n    var element = gObj.element;\n    var id = '#' + gObj.element.id;\n\n    if (!depth) {\n      return;\n    }\n\n    var groupCaption = selectAll(id + \"captioncell.e-groupcaption\", element);\n    var colSpan = groupCaption[depth - 1].getAttribute('colspan');\n\n    for (var i = 0; i < groupCaption.length; i++) {\n      groupCaption[i].setAttribute('colspan', colSpan);\n    }\n\n    var colGroups = selectAll(\"colgroup\" + id + \"colGroup\", element);\n    var contentColGroups = selectAll('.e-content colgroup', element);\n    this.hideColGroup(colGroups, depth);\n    this.hideColGroup(contentColGroups, depth);\n  };\n\n  Print.prototype.hideColGroup = function (colGroups, depth) {\n    for (var i = 0; i < colGroups.length; i++) {\n      for (var j = 0; j < depth; j++) {\n        colGroups[i].children[j].style.display = 'none';\n      }\n    }\n  };\n  /**\n   * To destroy the print\n   * @hidden\n   */\n\n\n  Print.prototype.isPrintGrid = function () {\n    return this.parent.element.id.indexOf('_print') > 0 && this.parent.isPrinting;\n  };\n  /**\n   * To destroy the print\n   * @return {void}\n   * @hidden\n   */\n\n\n  Print.prototype.destroy = function () {\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    this.parent.off(events.contentReady, this.contentReady.bind(this));\n    this.parent.removeEventListener(events.actionBegin, this.actionBegin.bind(this));\n    this.parent.off(events.onEmpty, this.onEmpty.bind(this));\n    this.parent.off(events.hierarchyPrint, this.hierarchyPrint);\n  };\n  /**\n   * For internal use only - Get the module name.\n   * @private\n   */\n\n\n  Print.prototype.getModuleName = function () {\n    return 'print';\n  };\n\n  Print.printGridProp = getCloneProperties().concat([events.beforePrint, events.printComplete, events.load]);\n  return Print;\n}();\n\nexport { Print };","import { Browser, EventHandler } from '@syncfusion/ej2-base';\nimport { addClass, removeClass } from '@syncfusion/ej2-base';\nimport { formatUnit, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getScrollBarWidth, getUpdateUsingRaf } from '../base/util';\nimport { scroll, contentReady, uiUpdate, onEmpty, headerRefreshed, textWrapRefresh, virtualScrollEdit, infiniteScrollHandler, closeFilterDialog } from '../base/constant';\nimport { lazyLoadScrollHandler, checkScrollReset } from '../base/constant';\nimport { ColumnWidthService } from '../services/width-controller';\nimport * as literals from '../base/string-literals';\n/**\n * The `Scroll` module is used to handle scrolling behaviour.\n */\n\nvar Scroll =\n/** @class */\nfunction () {\n  /**\n   * Constructor for the Grid scrolling.\n   * @hidden\n   */\n  function Scroll(parent) {\n    this.lastScrollTop = 0; //To maintain scroll state on grid actions.\n\n    this.previousValues = {\n      top: 0,\n      left: 0\n    };\n    this.oneTimeReady = true;\n    this.parent = parent;\n    this.widthService = new ColumnWidthService(parent);\n    this.addEventListener();\n  }\n  /**\n   * For internal use only - Get the module name.\n   * @private\n   */\n\n\n  Scroll.prototype.getModuleName = function () {\n    return 'scroll';\n  };\n  /**\n   * @hidden\n   */\n\n\n  Scroll.prototype.setWidth = function (uiupdate) {\n    this.parent.element.style.width = formatUnit(this.parent.width);\n\n    if (uiupdate) {\n      this.widthService.setWidthToColumns();\n    }\n\n    if (this.parent.toolbarModule && this.parent.toolbarModule.toolbar && this.parent.toolbarModule.toolbar.element) {\n      this.parent.toolbarModule.toolbar.refreshOverflow();\n    }\n  };\n  /**\n   * @hidden\n   */\n\n\n  Scroll.prototype.setHeight = function () {\n    var mHdrHeight = 0;\n    var content = this.parent.getContent().querySelector('.' + literals.content);\n    var height = this.parent.height;\n\n    if (this.parent.isFrozenGrid() && this.parent.height !== 'auto' && this.parent.height.toString().indexOf('%') < 0) {\n      height = parseInt(height, 10) - Scroll.getScrollBarWidth();\n    }\n\n    if (!this.parent.enableVirtualization && this.parent.frozenRows && this.parent.height !== 'auto') {\n      var tbody = this.parent.getHeaderContent().querySelector(literals.tbody);\n      mHdrHeight = tbody ? tbody.offsetHeight : 0;\n\n      if (tbody && mHdrHeight) {\n        var add = tbody.getElementsByClassName(literals.addedRow).length;\n        var height_1 = add * this.parent.getRowHeight();\n        mHdrHeight -= height_1;\n      }\n\n      content.style.height = formatUnit(height - mHdrHeight);\n    } else {\n      content.style.height = formatUnit(height);\n    }\n\n    this.ensureOverflow(content);\n\n    if (this.parent.isFrozenGrid()) {\n      this.refresh();\n    }\n  };\n  /**\n   * @hidden\n   */\n\n\n  Scroll.prototype.setPadding = function () {\n    var content = this.parent.getHeaderContent();\n    var scrollWidth = Scroll.getScrollBarWidth() - this.getThreshold();\n    var cssProps = this.getCssProperties();\n    var padding = this.parent.getFrozenMode() === 'Right' || this.parent.getFrozenMode() === literals.leftRight ? '0.5px' : '1px';\n    content.querySelector('.' + literals.headerContent).style[cssProps.border] = scrollWidth > 0 ? padding : '0px';\n    content.style[cssProps.padding] = scrollWidth > 0 ? scrollWidth + 'px' : '0px';\n  };\n  /**\n   * @hidden\n   */\n\n\n  Scroll.prototype.removePadding = function (rtl) {\n    var cssProps = this.getCssProperties(rtl);\n    var hDiv = this.parent.getHeaderContent().querySelector('.' + literals.headerContent);\n    hDiv.style[cssProps.border] = '';\n    hDiv.parentElement.style[cssProps.padding] = '';\n    var footerDiv = this.parent.getFooterContent();\n\n    if (footerDiv && footerDiv.classList.contains('e-footerpadding')) {\n      footerDiv.classList.remove('e-footerpadding');\n    }\n  };\n  /**\n   * Refresh makes the Grid adoptable with the height of parent container.\n   *\n   * > The [`height`](grid/#height/) must be set to 100%.\n   * @return\n   */\n\n\n  Scroll.prototype.refresh = function () {\n    if (this.parent.height !== '100%') {\n      return;\n    }\n\n    var content = this.parent.getContent();\n    this.parent.element.style.height = '100%';\n    var height = this.widthService.getSiblingsHeight(content);\n    content.style.height = 'calc(100% - ' + height + 'px)'; //Set the height to the  '.' + literals.gridContent;\n\n    if (this.parent.isFrozenGrid()) {\n      content.firstElementChild.style.height = 'calc(100% - ' + getScrollBarWidth() + 'px)';\n    }\n  };\n\n  Scroll.prototype.getThreshold = function () {\n    /* Some browsers places the scroller outside the content,\n     * hence the padding should be adjusted.*/\n    var appName = Browser.info.name;\n\n    if (appName === 'mozilla') {\n      return 0.5;\n    }\n\n    return 1;\n  };\n  /**\n   * @hidden\n   */\n\n\n  Scroll.prototype.addEventListener = function () {\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    this.parent.on(onEmpty, this.wireEvents, this);\n    this.parent.on(contentReady, this.wireEvents, this);\n    this.parent.on(uiUpdate, this.onPropertyChanged, this);\n    this.parent.on(textWrapRefresh, this.wireEvents, this);\n    this.parent.on(headerRefreshed, this.setScrollLeft, this);\n  };\n  /**\n   * @hidden\n   */\n\n\n  Scroll.prototype.removeEventListener = function () {\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    this.parent.off(onEmpty, this.wireEvents);\n    this.parent.off(contentReady, this.wireEvents);\n    this.parent.off(uiUpdate, this.onPropertyChanged);\n    this.parent.off(textWrapRefresh, this.wireEvents);\n    this.parent.off(headerRefreshed, this.setScrollLeft);\n  };\n\n  Scroll.prototype.setScrollLeft = function () {\n    if (this.parent.isFrozenGrid()) {\n      this.parent.headerModule.getMovableHeader().scrollLeft = this.previousValues.left;\n    } else {\n      this.parent.getHeaderContent().querySelector('.' + literals.headerContent).scrollLeft = this.previousValues.left;\n    }\n  };\n\n  Scroll.prototype.onFrozenContentScroll = function () {\n    var _this = this;\n\n    return function (e) {\n      if (_this.content.querySelector(literals.tbody) === null || _this.parent.isPreventScrollEvent) {\n        return;\n      }\n\n      if (!isNullOrUndefined(_this.parent.infiniteScrollModule) && _this.parent.enableInfiniteScrolling) {\n        _this.parent.notify(infiniteScrollHandler, e);\n      }\n\n      _this.previousValues.top = e.target.scrollTop;\n    };\n  };\n\n  Scroll.prototype.onContentScroll = function (scrollTarget) {\n    var _this = this;\n\n    var element = scrollTarget;\n    var isHeader = element.classList.contains(literals.headerContent);\n    return function (e) {\n      if (_this.content.querySelector(literals.tbody) === null || _this.parent.isPreventScrollEvent) {\n        return;\n      }\n\n      var target = e.target;\n      var left = target.scrollLeft;\n\n      if (!isNullOrUndefined(_this.parent.infiniteScrollModule) && _this.parent.enableInfiniteScrolling) {\n        _this.parent.notify(infiniteScrollHandler, {\n          target: e.target,\n          isLeft: _this.previousValues.left !== left\n        });\n      }\n\n      if (_this.parent.groupSettings.columns.length && _this.parent.groupSettings.enableLazyLoading) {\n        var isDown = _this.previousValues.top < _this.parent.getContent().firstElementChild.scrollTop;\n\n        _this.parent.notify(lazyLoadScrollHandler, {\n          scrollDown: isDown\n        });\n      }\n\n      _this.parent.notify(virtualScrollEdit, {});\n\n      var sLimit = target.scrollWidth;\n      var isFooter = target.classList.contains('e-summarycontent');\n\n      if (_this.previousValues.left === left) {\n        _this.previousValues.top = !isHeader ? _this.previousValues.top : target.scrollTop;\n        return;\n      }\n\n      _this.parent.notify(closeFilterDialog, e);\n\n      element.scrollLeft = left;\n\n      if (isFooter) {\n        _this.header.scrollLeft = left;\n      }\n\n      _this.previousValues.left = left;\n\n      _this.parent.notify(scroll, {\n        left: left\n      });\n    };\n  };\n\n  Scroll.prototype.onCustomScrollbarScroll = function (mCont, mHdr) {\n    var _this = this;\n\n    var content = mCont;\n    var header = mHdr;\n    return function (e) {\n      if (_this.content.querySelector(literals.tbody) === null) {\n        return;\n      }\n\n      var target = e.target;\n      var left = target.scrollLeft;\n\n      if (_this.previousValues.left === left) {\n        return;\n      }\n\n      content.scrollLeft = left;\n      header.scrollLeft = left;\n      _this.previousValues.left = left;\n\n      _this.parent.notify(scroll, {\n        left: left\n      });\n\n      if (_this.parent.isDestroyed) {\n        return;\n      }\n    };\n  };\n\n  Scroll.prototype.onTouchScroll = function (scrollTarget) {\n    var _this = this;\n\n    var element = scrollTarget;\n    return function (e) {\n      if (e.pointerType === 'mouse') {\n        return;\n      }\n\n      var isFrozen = _this.parent.isFrozenGrid();\n\n      var pageXY = _this.getPointXY(e);\n\n      var left = element.scrollLeft + (_this.pageXY.x - pageXY.x);\n      var mHdr = isFrozen ? _this.parent.getHeaderContent().querySelector('.' + literals.movableHeader) : _this.parent.getHeaderContent().querySelector('.' + literals.headerContent);\n      var mCont = isFrozen ? _this.parent.getContent().querySelector('.' + literals.movableContent) : _this.parent.getContent().querySelector('.' + literals.content);\n\n      if (_this.previousValues.left === left || left < 0 || mHdr.scrollWidth - mHdr.clientWidth < left) {\n        return;\n      }\n\n      e.preventDefault();\n      mHdr.scrollLeft = left;\n      mCont.scrollLeft = left;\n\n      if (isFrozen) {\n        var scrollBar = _this.parent.getContent().querySelector('.e-movablescrollbar');\n\n        scrollBar.scrollLeft = left;\n      }\n\n      _this.pageXY.x = pageXY.x;\n      _this.previousValues.left = left;\n    };\n  };\n\n  Scroll.prototype.setPageXY = function () {\n    var _this = this;\n\n    return function (e) {\n      if (e.pointerType === 'mouse') {\n        return;\n      }\n\n      _this.pageXY = _this.getPointXY(e);\n    };\n  };\n\n  Scroll.prototype.getPointXY = function (e) {\n    var pageXY = {\n      x: 0,\n      y: 0\n    };\n\n    if (e.touches && e.touches.length) {\n      pageXY.x = e.touches[0].pageX;\n      pageXY.y = e.touches[0].pageY;\n    } else {\n      pageXY.x = e.pageX;\n      pageXY.y = e.pageY;\n    }\n\n    return pageXY;\n  };\n\n  Scroll.prototype.wireEvents = function () {\n    var _this = this;\n\n    if (this.oneTimeReady) {\n      var frzCols = this.parent.isFrozenGrid();\n      this.content = this.parent.getContent().querySelector('.' + literals.content);\n      this.header = this.parent.getHeaderContent().querySelector('.' + literals.headerContent);\n      var mCont = this.content.querySelector('.' + literals.movableContent);\n      var fCont = this.content.querySelector('.' + literals.frozenContent);\n      var mHdr = this.header.querySelector('.' + literals.movableHeader);\n      var mScrollBar = this.parent.getContent().querySelector('.e-movablescrollbar');\n\n      if (this.parent.frozenRows) {\n        EventHandler.add(frzCols ? mHdr : this.header, 'touchstart pointerdown', this.setPageXY(), this);\n        EventHandler.add(frzCols ? mHdr : this.header, 'touchmove pointermove', this.onTouchScroll(frzCols ? mCont : this.content), this);\n      }\n\n      if (this.parent.isFrozenGrid()) {\n        EventHandler.add(mScrollBar, 'scroll', this.onCustomScrollbarScroll(mCont, mHdr), this);\n        EventHandler.add(mCont, 'scroll', this.onCustomScrollbarScroll(mScrollBar, mHdr), this);\n        EventHandler.add(mHdr, 'scroll', this.onCustomScrollbarScroll(mScrollBar, mCont), this);\n        EventHandler.add(this.content, 'scroll', this.onFrozenContentScroll(), this);\n        EventHandler.add(mHdr, 'touchstart pointerdown', this.setPageXY(), this);\n        EventHandler.add(mHdr, 'touchmove pointermove', this.onTouchScroll(mCont), this);\n        EventHandler.add(mCont, 'touchstart pointerdown', this.setPageXY(), this);\n        EventHandler.add(mCont, 'touchmove pointermove', this.onTouchScroll(mHdr), this);\n      } else {\n        EventHandler.add(this.content, 'scroll', this.onContentScroll(this.header), this);\n        EventHandler.add(this.header, 'scroll', this.onContentScroll(this.content), this);\n      }\n\n      if (this.parent.aggregates.length) {\n        EventHandler.add(this.parent.getFooterContent().firstChild, 'scroll', this.onContentScroll(this.content), this);\n      }\n\n      this.refresh();\n      this.oneTimeReady = false;\n    }\n\n    var table = this.parent.getContentTable();\n    var sLeft;\n    var sHeight;\n    var clientHeight;\n    getUpdateUsingRaf(function () {\n      sLeft = _this.header.scrollLeft;\n      sHeight = table.scrollHeight;\n      clientHeight = _this.parent.getContent().clientHeight;\n    }, function () {\n      var args = {\n        cancel: false\n      };\n\n      _this.parent.notify(checkScrollReset, args);\n\n      if (!_this.parent.enableVirtualization && !_this.parent.enableInfiniteScrolling) {\n        if (sHeight < clientHeight) {\n          addClass(table.querySelectorAll('tr:last-child td'), 'e-lastrowcell');\n\n          if (_this.parent.isFrozenGrid()) {\n            addClass(_this.parent.getContent().querySelector('.' + literals.movableContent).querySelectorAll('tr:last-child td'), 'e-lastrowcell');\n          }\n        }\n\n        if (!args.cancel) {\n          if ((_this.parent.frozenRows > 0 || _this.parent.isFrozenGrid()) && _this.header.querySelector('.' + literals.movableHeader)) {\n            _this.header.querySelector('.' + literals.movableHeader).scrollLeft = _this.previousValues.left;\n          } else {\n            _this.header.scrollLeft = _this.previousValues.left;\n          }\n\n          _this.content.scrollLeft = _this.previousValues.left;\n          _this.content.scrollTop = _this.previousValues.top;\n        }\n      }\n\n      if (!_this.parent.enableColumnVirtualization) {\n        _this.content.scrollLeft = sLeft;\n      }\n\n      if (_this.parent.isFrozenGrid() && _this.header.querySelector('.' + literals.movableHeader)) {\n        _this.header.querySelector('.' + literals.movableHeader).scrollLeft = _this.content.querySelector('.' + literals.movableContent).scrollLeft;\n      }\n    });\n    this.parent.isPreventScrollEvent = false;\n  };\n  /**\n   * @hidden\n   */\n\n\n  Scroll.prototype.getCssProperties = function (rtl) {\n    var css = {};\n    var enableRtl = isNullOrUndefined(rtl) ? this.parent.enableRtl : rtl;\n    css.border = enableRtl ? 'borderLeftWidth' : 'borderRightWidth';\n    css.padding = enableRtl ? 'paddingLeft' : 'paddingRight';\n    return css;\n  };\n\n  Scroll.prototype.ensureOverflow = function (content) {\n    content.style.overflowY = this.parent.height === 'auto' ? 'auto' : 'scroll';\n  };\n\n  Scroll.prototype.onPropertyChanged = function (e) {\n    if (e.module !== this.getModuleName()) {\n      return;\n    }\n\n    this.setPadding();\n    this.oneTimeReady = true;\n\n    if (this.parent.height === 'auto') {\n      this.removePadding();\n    }\n\n    this.wireEvents();\n    this.setHeight();\n    var width = 'width';\n    this.setWidth(!isNullOrUndefined(e.properties[width]));\n  };\n  /**\n   * @hidden\n   */\n\n\n  Scroll.prototype.destroy = function () {\n    var gridElement = this.parent.element;\n\n    if (!gridElement || !gridElement.querySelector('.' + literals.gridHeader) && !gridElement.querySelector('.' + literals.gridContent)) {\n      return;\n    }\n\n    this.removeEventListener(); //Remove padding\n\n    this.removePadding();\n    var cont = this.parent.getContent().querySelector('.' + literals.content);\n    removeClass([this.parent.getHeaderContent().querySelector('.' + literals.headerContent)], literals.headerContent);\n    removeClass([cont], literals.content); //Remove height\n\n    cont.style.height = ''; //Remove width\n\n    this.parent.element.style.width = ''; //Remove Dom event\n\n    EventHandler.remove(cont, 'scroll', this.onContentScroll);\n  };\n  /**\n   * Function to get the scrollbar width of the browser.\n   * @return {number}\n   * @hidden\n   */\n\n\n  Scroll.getScrollBarWidth = function () {\n    return getScrollBarWidth();\n  };\n\n  return Scroll;\n}();\n\nexport { Scroll };","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { isActionPrevent } from '../base/util';\n/**\n * The `Search` module is used to handle search action.\n */\n\nvar Search =\n/** @class */\nfunction () {\n  /**\n   * Constructor for Grid search module.\n   * @hidden\n   */\n  function Search(parent) {\n    this.parent = parent;\n    this.addEventListener();\n  }\n  /**\n   * Searches Grid records by given key.\n   *\n   * > You can customize the default search action by using [`searchSettings`](grid/#searchsettings/).\n   * @param  {string} searchString - Defines the key.\n   * @return {void}\n   */\n\n\n  Search.prototype.search = function (searchString) {\n    var gObj = this.parent;\n    searchString = isNullOrUndefined(searchString) ? '' : searchString;\n\n    if (isActionPrevent(gObj)) {\n      gObj.notify(events.preventBatch, {\n        instance: this,\n        handler: this.search,\n        arg1: searchString\n      });\n      return;\n    }\n\n    if (searchString !== gObj.searchSettings.key) {\n      gObj.searchSettings.key = searchString.toString();\n      gObj.dataBind();\n    } else if (this.refreshSearch) {\n      gObj.refresh();\n    }\n  };\n  /**\n   * @hidden\n   */\n\n\n  Search.prototype.addEventListener = function () {\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n    this.parent.on(events.searchComplete, this.onSearchComplete, this);\n    this.parent.on(events.destroy, this.destroy, this);\n    this.actionCompleteFunc = this.onActionComplete.bind(this);\n    this.parent.addEventListener(events.actionComplete, this.actionCompleteFunc);\n    this.parent.on(events.cancelBegin, this.cancelBeginEvent, this);\n  };\n  /**\n   * @hidden\n   */\n\n\n  Search.prototype.removeEventListener = function () {\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n    this.parent.off(events.searchComplete, this.onSearchComplete);\n    this.parent.off(events.destroy, this.destroy);\n    this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunc);\n    this.parent.off(events.cancelBegin, this.cancelBeginEvent);\n  };\n  /**\n   * To destroy the print\n   * @return {void}\n   * @hidden\n   */\n\n\n  Search.prototype.destroy = function () {\n    this.removeEventListener();\n  };\n  /**\n   * @hidden\n   */\n\n\n  Search.prototype.onPropertyChanged = function (e) {\n    if (e.module !== this.getModuleName()) {\n      return;\n    }\n\n    if (!isNullOrUndefined(e.properties.key)) {\n      this.parent.notify(events.modelChanged, {\n        requestType: 'searching',\n        type: events.actionBegin,\n        searchString: this.parent.searchSettings.key\n      });\n    } else {\n      this.parent.notify(events.modelChanged, {\n        requestType: 'searching',\n        type: events.actionBegin\n      });\n    }\n  };\n  /**\n   * The function used to trigger onActionComplete\n   * @return {void}\n   * @hidden\n   */\n\n\n  Search.prototype.onSearchComplete = function (e) {\n    this.parent.trigger(events.actionComplete, extend(e, {\n      searchString: this.parent.searchSettings.key,\n      requestType: 'searching',\n      type: events.actionComplete\n    }));\n  };\n\n  Search.prototype.onActionComplete = function (e) {\n    this.refreshSearch = e.requestType !== 'searching';\n  };\n\n  Search.prototype.cancelBeginEvent = function (e) {\n    if (e.requestType === 'searching') {\n      this.parent.setProperties({\n        searchSettings: {\n          key: ''\n        }\n      }, true);\n    }\n  };\n  /**\n   * For internal use only - Get the module name.\n   * @private\n   */\n\n\n  Search.prototype.getModuleName = function () {\n    return 'search';\n  };\n\n  return Search;\n}();\n\nexport { Search };","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\n      for (var p in s) {\n        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n    }\n\n    return t;\n  };\n\n  return __assign.apply(this, arguments);\n};\n\nimport { Browser, EventHandler, createElement, isBlazor } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { remove, closest, select } from '@syncfusion/ej2-base';\nimport { Query } from '@syncfusion/ej2-data';\nimport { setCssInGridPopUp, getPosition, isGroupAdaptive, addRemoveActiveClasses, removeAddCboxClasses } from '../base/util';\nimport { getCellsByTableName, getCellByColAndRowIndex, parentsUntil, gridActionHandler } from '../base/util';\nimport * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { iterateExtend, setChecked } from '../base/util';\nimport { addRemoveEventListener } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n* The `Selection` module is used to handle cell and row selection.\n*/\n\nvar Selection =\n/** @class */\nfunction () {\n  /**\n   * Constructor for the Grid selection module\n   * @hidden\n   */\n  function Selection(parent, selectionSettings, locator) {\n    //Internal letiables       \n\n    /**\n     * @hidden\n     */\n    this.selectedRowIndexes = [];\n    /**\n     * @hidden\n     */\n\n    this.selectedRowCellIndexes = [];\n    /**\n     * @hidden\n     */\n\n    this.selectedRecords = [];\n    /**\n     * @hidden\n     */\n\n    this.preventFocus = false;\n    /**\n     *  @hidden\n     */\n\n    this.selectedColumnsIndexes = [];\n    this.checkBoxState = false;\n    this.isMultiShiftRequest = false;\n    this.isMultiCtrlRequest = false;\n    this.enableSelectMultiTouch = false;\n    this.clearRowCheck = false;\n    this.selectRowCheck = false;\n    this.selectedRowState = {};\n    this.totalRecordsCount = 0;\n    this.chkAllCollec = [];\n    this.isCheckedOnAdd = false;\n    this.persistSelectedData = [];\n    this.deSelectedData = [];\n    this.needColumnSelection = false;\n    this.isCancelDeSelect = false;\n    this.isPreventCellSelect = false;\n    this.disableUI = false;\n    this.isPersisted = false;\n    this.cmdKeyPressed = false;\n    this.cellselected = false;\n    this.isMultiSelection = false;\n    this.isAddRowsToSelection = false;\n    this.initialRowSelection = false;\n    this.isPrevRowSelection = false;\n    /**\n     * @hidden\n     */\n\n    this.autoFillRLselection = true;\n    this.bottom = \"0 0 2px 0\";\n    this.top = \"2px 0 0 0\";\n    this.right_bottom = \"0 2px 2px 0\";\n    this.bottom_left = \"0 0 2px 2px\";\n    this.top_right = \"2px 2px 0 0\";\n    this.top_left = \"2px 0 0 2px\";\n    this.top_bottom = \"2px 0 2px 0\";\n    this.top_right_bottom = \"2px 2px 2px 0\";\n    this.top_bottom_left = \"2px 0 2px 2px\";\n    this.top_right_left = \"2px 2px 0 2px\";\n    this.right_bottom_left = \"0 2px 2px 2px\";\n    this.all_border = \"2px\";\n    this.parent = parent;\n    this.selectionSettings = selectionSettings;\n    this.factory = locator.getService('rendererFactory');\n    this.focus = locator.getService('focus');\n    this.addEventListener();\n    this.wireEvents();\n  }\n\n  Selection.prototype.initializeSelection = function () {\n    this.parent.log('selection_key_missing');\n    this.render();\n  };\n  /**\n   * The function used to trigger onActionBegin\n   * @return {void}\n   * @hidden\n   */\n\n\n  Selection.prototype.onActionBegin = function (args, type) {\n    this.parent.trigger(type, this.fDataUpdate(args));\n  };\n\n  Selection.prototype.fDataUpdate = function (args) {\n    if (!this.isMultiSelection && (!isNullOrUndefined(args.cellIndex) || !isNullOrUndefined(args.rowIndex))) {\n      var rowObj = this.getRowObj(isNullOrUndefined(args.rowIndex) ? isNullOrUndefined(args.cellIndex) ? this.currentIndex : args.cellIndex.rowIndex : args.rowIndex);\n      args.foreignKeyData = rowObj.foreignKeyData;\n    }\n\n    return args;\n  };\n  /**\n   * The function used to trigger onActionComplete\n   * @return {void}\n   * @hidden\n   */\n\n\n  Selection.prototype.onActionComplete = function (args, type) {\n    this.parent.trigger(type, this.fDataUpdate(args));\n    this.isMultiSelection = false;\n  };\n  /**\n   * For internal use only - Get the module name.\n   * @private\n   */\n\n\n  Selection.prototype.getModuleName = function () {\n    return 'selection';\n  };\n  /**\n   * To destroy the selection\n   * @return {void}\n   * @hidden\n   */\n\n\n  Selection.prototype.destroy = function () {\n    var gridElement = this.parent.element;\n\n    if (!gridElement || !gridElement.querySelector('.' + literals.gridHeader) && !gridElement.querySelector('.' + literals.gridContent)) {\n      return;\n    }\n\n    this.hidePopUp();\n    this.clearSelection();\n    this.removeEventListener();\n    this.unWireEvents();\n    EventHandler.remove(this.parent.getContent(), 'mousedown', this.mouseDownHandler);\n    EventHandler.remove(this.parent.getHeaderContent(), 'mousedown', this.mouseDownHandler);\n  };\n\n  Selection.prototype.isEditing = function () {\n    return (this.parent.editSettings.mode === 'Normal' || this.parent.editSettings.mode === 'Batch' && this.parent.editModule && this.parent.editModule.formObj && !this.parent.editModule.formObj.validate()) && this.parent.isEdit && !this.parent.isPersistSelection;\n  };\n\n  Selection.prototype.getSelectedMovableRow = function (index) {\n    var gObj = this.parent;\n\n    if (gObj.isFrozenGrid() && this.parent.getContent().querySelector('.' + literals.movableContent)) {\n      return gObj.getMovableRowByIndex(index);\n    }\n\n    return null;\n  };\n\n  Selection.prototype.getSelectedFrozenRightRow = function (index) {\n    var gObj = this.parent;\n\n    if (gObj.isFrozenGrid() && gObj.getFrozenMode() === literals.leftRight && gObj.getFrozenRightContent()) {\n      return gObj.getFrozenRightRowByIndex(index);\n    }\n\n    return null;\n  };\n\n  Selection.prototype.getCurrentBatchRecordChanges = function () {\n    var gObj = this.parent;\n\n    if (gObj.editSettings.mode === 'Batch' && gObj.editModule) {\n      var currentRecords = iterateExtend(this.parent.getCurrentViewRecords());\n      currentRecords = gObj.editSettings.newRowPosition === 'Bottom' ? currentRecords.concat(this.parent.editModule.getBatchChanges()[literals.addedRecords]) : this.parent.editModule.getBatchChanges()[literals.addedRecords].concat(currentRecords);\n      var deletedRecords = this.parent.editModule.getBatchChanges()[literals.deletedRecords];\n      var primaryKey = this.parent.getPrimaryKeyFieldNames()[0];\n\n      for (var i = 0; i < deletedRecords.length; i++) {\n        for (var j = 0; j < currentRecords.length; j++) {\n          if (deletedRecords[i][primaryKey] === currentRecords[j][primaryKey]) {\n            currentRecords.splice(j, 1);\n            break;\n          }\n        }\n      }\n\n      return currentRecords;\n    } else {\n      return gObj.getCurrentViewRecords();\n    }\n  };\n  /**\n   * Selects a row by the given index.\n   * @param  {number} index - Defines the row index.\n   * @param  {boolean} isToggle - If set to true, then it toggles the selection.\n   * @return {void}\n   */\n\n\n  Selection.prototype.selectRow = function (index, isToggle) {\n    if (this.selectedRowIndexes.length && this.selectionSettings.enableSimpleMultiRowSelection) {\n      this.addRowsToSelection([index]);\n      return;\n    }\n\n    var gObj = this.parent;\n    var selectedRow = gObj.getRowByIndex(index);\n    var selectedMovableRow = this.getSelectedMovableRow(index);\n    var selectedFrozenRightRow = this.getSelectedFrozenRightRow(index);\n    var selectData;\n    var isRemoved = false;\n\n    if (gObj.enableVirtualization && index > -1) {\n      this.parent.notify(events.selectVirtualRow, {\n        selectedIndex: index\n      });\n      var frozenData = gObj.isFrozenGrid() ? gObj.contentModule.getRowObjectByIndex(index) : null;\n\n      if (selectedRow && (gObj.getRowObjectFromUID(selectedRow.getAttribute('data-uid')) || frozenData)) {\n        selectData = frozenData ? frozenData : gObj.getRowObjectFromUID(selectedRow.getAttribute('data-uid')).data;\n      } else {\n        var prevSelectedData = this.parent.getSelectedRecords();\n\n        if (prevSelectedData.length > 0) {\n          this.clearRowSelection();\n        }\n\n        return;\n      }\n    } else {\n      selectData = this.getCurrentBatchRecordChanges()[index];\n    }\n\n    if (!this.isRowType() || !selectedRow || this.isEditing()) {\n      // if (this.isEditing()) {\n      //     gObj.selectedRowIndex = index;\n      // }\n      return;\n    }\n\n    var isRowSelected = selectedRow.hasAttribute('aria-selected');\n    this.activeTarget();\n    isToggle = !isToggle ? isToggle : !this.selectedRowIndexes.length ? false : this.selectedRowIndexes.length === 1 ? index === this.selectedRowIndexes[0] : false;\n    var args;\n    var can = 'cancel';\n\n    if (!isToggle) {\n      args = {\n        data: selectData,\n        rowIndex: index,\n        isCtrlPressed: this.isMultiCtrlRequest,\n        isShiftPressed: this.isMultiShiftRequest,\n        row: selectedRow,\n        previousRow: gObj.getRowByIndex(this.prevRowIndex),\n        previousRowIndex: this.prevRowIndex,\n        target: this.actualTarget,\n        cancel: false,\n        isInteracted: this.isInteracted,\n        isHeaderCheckboxClicked: this.isHeaderCheckboxClicked\n      };\n      args = this.addMovableArgs(args, selectedMovableRow, selectedFrozenRightRow);\n      this.parent.trigger(events.rowSelecting, this.fDataUpdate(args), this.rowSelectingCallBack(args, isToggle, index, selectData, isRemoved, isRowSelected, can));\n    } else {\n      this.rowSelectingCallBack(args, isToggle, index, selectData, isRemoved, isRowSelected, can)(args);\n    }\n  };\n\n  Selection.prototype.rowSelectingCallBack = function (args, isToggle, index, selectData, isRemoved, isRowSelected, can) {\n    var _this = this;\n\n    return function (args) {\n      if (!isNullOrUndefined(args) && args[can] === true) {\n        _this.disableInteracted();\n\n        return;\n      }\n\n      _this.index = index;\n      _this.toggle = isToggle;\n      _this.data = selectData;\n      _this.removed = isRemoved;\n\n      if (isRowSelected && _this.selectionSettings.persistSelection && !(_this.selectionSettings.checkboxMode === 'ResetOnRowClick')) {\n        _this.clearSelectedRow(index);\n\n        _this.selectRowCallBack();\n      } else if (!isRowSelected && _this.selectionSettings.persistSelection && _this.selectionSettings.checkboxMode !== 'ResetOnRowClick') {\n        _this.selectRowCallBack();\n      }\n\n      if (_this.selectionSettings.checkboxMode === 'ResetOnRowClick') {\n        _this.clearSelection();\n      }\n\n      if (!_this.selectionSettings.persistSelection || _this.selectionSettings.checkboxMode === 'ResetOnRowClick' || !_this.parent.isCheckBoxSelection && _this.selectionSettings.persistSelection) {\n        _this.selectRowCheck = true;\n\n        _this.clearRow();\n      }\n    };\n  };\n\n  Selection.prototype.selectRowCallBack = function () {\n    var gObj = this.parent;\n    var args;\n    var index = this.index;\n    var isToggle = this.toggle;\n    var selectData = this.data;\n    var isRemoved = this.removed;\n    var selectedRow = gObj.getRowByIndex(index);\n    var selectedMovableRow = this.getSelectedMovableRow(index);\n    var selectedFrozenRightRow = this.getSelectedFrozenRightRow(index);\n\n    if (!isToggle && !isRemoved) {\n      if (this.selectedRowIndexes.indexOf(index) <= -1) {\n        this.updateRowSelection(selectedRow, index);\n        this.selectMovableRow(selectedMovableRow, selectedFrozenRightRow, index);\n      }\n\n      this.selectRowIndex(index);\n    }\n\n    if (!isToggle) {\n      args = {\n        data: selectData,\n        rowIndex: index,\n        row: selectedRow,\n        previousRow: gObj.getRowByIndex(this.prevRowIndex),\n        previousRowIndex: this.prevRowIndex,\n        target: this.actualTarget,\n        isInteracted: this.isInteracted,\n        isHeaderCheckBoxClicked: this.isHeaderCheckboxClicked\n      };\n      args = this.addMovableArgs(args, selectedMovableRow, selectedFrozenRightRow);\n      this.onActionComplete(args, events.rowSelected);\n    }\n\n    this.isInteracted = false;\n    this.updateRowProps(index);\n  };\n\n  Selection.prototype.selectMovableRow = function (selectedMovableRow, selectedFrozenRightRow, index) {\n    if (this.parent.isFrozenGrid()) {\n      this.updateRowSelection(selectedMovableRow, index);\n\n      if (this.parent.getFrozenMode() === literals.leftRight && selectedFrozenRightRow) {\n        this.updateRowSelection(selectedFrozenRightRow, index);\n      }\n    }\n  };\n\n  Selection.prototype.addMovableArgs = function (targetObj, mRow, frRow) {\n    if (this.parent.isFrozenGrid()) {\n      var mObj = {\n        mRow: mRow,\n        previousMovRow: this.parent.getMovableRows()[this.prevRowIndex]\n      };\n      var frozenRightRow = 'frozenRightRow';\n      var previousFrozenRightRow = 'previousFrozenRightRow';\n\n      if (this.parent.getFrozenMode() === literals.leftRight && frRow) {\n        mObj[frozenRightRow] = frRow;\n        mObj[previousFrozenRightRow] = this.parent.getFrozenRightDataRows()[this.prevRowIndex];\n      }\n\n      targetObj = __assign({}, targetObj, mObj);\n    }\n\n    return targetObj;\n  };\n  /**\n   * Selects a range of rows from start and end row indexes.\n   * @param  {number} startIndex - Specifies the start row index.\n   * @param  {number} endIndex - Specifies the end row index.\n   * @return {void}\n   */\n\n\n  Selection.prototype.selectRowsByRange = function (startIndex, endIndex) {\n    this.selectRows(this.getCollectionFromIndexes(startIndex, endIndex));\n    this.selectRowIndex(endIndex);\n  };\n  /**\n   * Selects a collection of rows by index.\n   * @param  {number[]} rowIndexes - Specifies an array of row indexes.\n   * @return {void}\n   */\n\n\n  Selection.prototype.selectRows = function (rowIndexes) {\n    var _this = this;\n\n    var gObj = this.parent;\n    var rowIndex = !this.isSingleSel() ? rowIndexes[0] : rowIndexes[rowIndexes.length - 1];\n    this.isMultiSelection = true;\n    var selectedRows = [];\n    var foreignKeyData = [];\n    var selectedMovableRow = this.getSelectedMovableRow(rowIndex);\n    var selectedFrozenRightRow = this.getSelectedFrozenRightRow(rowIndex);\n    var can = 'cancel';\n    var selectedData = [];\n\n    if (!this.isRowType() || this.isEditing()) {\n      return;\n    }\n\n    for (var i = 0, len = rowIndexes.length; i < len; i++) {\n      var currentRow = this.parent.getDataRows()[rowIndexes[i]];\n      var rowObj = this.getRowObj(currentRow);\n\n      if (rowObj) {\n        selectedData.push(rowObj.data);\n        selectedRows.push(currentRow);\n        foreignKeyData.push(rowObj.foreignKeyData);\n      }\n    }\n\n    var isHybrid = 'isHybrid';\n    this.activeTarget();\n    var args;\n\n    if (!isBlazor() || this.parent.isJsComponent || this.parent[isHybrid]) {\n      args = {\n        cancel: false,\n        rowIndexes: rowIndexes,\n        row: selectedRows,\n        rowIndex: rowIndex,\n        target: this.actualTarget,\n        prevRow: gObj.getRows()[this.prevRowIndex],\n        previousRowIndex: this.prevRowIndex,\n        isInteracted: this.isInteracted,\n        isCtrlPressed: this.isMultiCtrlRequest,\n        isShiftPressed: this.isMultiShiftRequest,\n        data: selectedData,\n        isHeaderCheckboxClicked: this.isHeaderCheckboxClicked,\n        foreignKeyData: foreignKeyData\n      };\n      args = this.addMovableArgs(args, selectedMovableRow, selectedFrozenRightRow);\n    } else {\n      args = {\n        cancel: false,\n        rowIndexes: rowIndexes,\n        rowIndex: rowIndex,\n        previousRowIndex: this.prevRowIndex,\n        isCtrlPressed: this.isMultiCtrlRequest,\n        isShiftPressed: this.isMultiShiftRequest,\n        data: selectedData,\n        isHeaderCheckboxClicked: this.isHeaderCheckboxClicked,\n        foreignKeyData: foreignKeyData\n      };\n    }\n\n    this.parent.trigger(events.rowSelecting, this.fDataUpdate(args), function (args) {\n      if (!isNullOrUndefined(args) && args[can] === true) {\n        _this.disableInteracted();\n\n        return;\n      }\n\n      _this.clearRow();\n\n      _this.selectRowIndex(rowIndexes.slice(-1)[0]);\n\n      var selectRowFn = function selectRowFn(index) {\n        _this.updateRowSelection(gObj.getRowByIndex(index), index);\n\n        if (gObj.isFrozenGrid()) {\n          var rightEle = _this.parent.getFrozenMode() === literals.leftRight ? gObj.getFrozenRightRowByIndex(index) : undefined;\n\n          _this.selectMovableRow(gObj.getMovableRowByIndex(index), rightEle, index);\n        }\n\n        _this.updateRowProps(rowIndex);\n      };\n\n      if (!_this.isSingleSel()) {\n        for (var _i = 0, rowIndexes_1 = rowIndexes; _i < rowIndexes_1.length; _i++) {\n          var rowIdx = rowIndexes_1[_i];\n          selectRowFn(rowIdx);\n        }\n      } else {\n        selectRowFn(rowIndex);\n      }\n\n      var isHybrid = 'isHybrid';\n\n      if (!isBlazor() || _this.parent.isJsComponent || _this.parent[isHybrid]) {\n        args = {\n          rowIndexes: rowIndexes,\n          row: selectedRows,\n          rowIndex: rowIndex,\n          target: _this.actualTarget,\n          prevRow: gObj.getRows()[_this.prevRowIndex],\n          previousRowIndex: _this.prevRowIndex,\n          data: _this.getSelectedRecords(),\n          isInteracted: _this.isInteracted,\n          isHeaderCheckboxClicked: _this.isHeaderCheckboxClicked,\n          foreignKeyData: foreignKeyData\n        };\n        args = _this.addMovableArgs(args, selectedMovableRow, selectedFrozenRightRow);\n      } else {\n        args = {\n          rowIndexes: rowIndexes,\n          rowIndex: rowIndex,\n          previousRowIndex: _this.prevRowIndex,\n          row: selectedRows,\n          prevRow: gObj.getRows()[_this.prevRowIndex],\n          data: _this.getSelectedRecords(),\n          isInteracted: _this.isInteracted,\n          isHeaderCheckboxClicked: _this.isHeaderCheckboxClicked,\n          foreignKeyData: foreignKeyData\n        };\n      }\n\n      if (_this.isRowSelected) {\n        _this.onActionComplete(args, events.rowSelected);\n      }\n\n      _this.isInteracted = false;\n    });\n  };\n  /**\n   * Select rows with existing row selection by passing row indexes.\n   * @param  {number} startIndex - Specifies the row indexes.\n   * @return {void}\n   * @hidden\n   */\n  // tslint:disable-next-line:max-func-body-length\n\n\n  Selection.prototype.addRowsToSelection = function (rowIndexes) {\n    var gObj = this.parent;\n    var can = 'cancel';\n    var target = this.target;\n    this.isMultiSelection = true;\n    var indexes = gObj.getSelectedRowIndexes().concat(rowIndexes);\n    var selectedRow = !this.isSingleSel() ? gObj.getRowByIndex(rowIndexes[0]) : gObj.getRowByIndex(rowIndexes[rowIndexes.length - 1]);\n    var selectedMovableRow = !this.isSingleSel() ? this.getSelectedMovableRow(rowIndexes[0]) : this.getSelectedMovableRow(rowIndexes[rowIndexes.length - 1]);\n    var selectedFrozenRightRow = !this.isSingleSel() ? this.getSelectedFrozenRightRow(rowIndexes[0]) : this.getSelectedFrozenRightRow(rowIndexes[rowIndexes.length - 1]);\n\n    if ((!this.isRowType() || this.isEditing()) && !this.selectionSettings.checkboxOnly) {\n      return;\n    }\n\n    var args;\n    var checkboxColumn = this.parent.getColumns().filter(function (col) {\n      return col.type === 'checkbox';\n    });\n\n    for (var _i = 0, rowIndexes_2 = rowIndexes; _i < rowIndexes_2.length; _i++) {\n      var rowIndex = rowIndexes_2[_i];\n      var rowObj = this.getRowObj(rowIndex);\n      var isUnSelected = this.selectedRowIndexes.indexOf(rowIndex) > -1;\n      this.selectRowIndex(rowIndex);\n\n      if (isUnSelected && ((checkboxColumn.length ? true : this.selectionSettings.enableToggle) || this.isMultiCtrlRequest)) {\n        this.isAddRowsToSelection = true;\n        this.rowDeselect(events.rowDeselecting, [rowIndex], [rowObj.data], [selectedRow], [rowObj.foreignKeyData], target);\n\n        if (this.isCancelDeSelect) {\n          return;\n        }\n\n        this.selectedRowIndexes.splice(this.selectedRowIndexes.indexOf(rowIndex), 1);\n        this.selectedRecords.splice(this.selectedRecords.indexOf(selectedRow), 1);\n        this.selectRowIndex(this.selectedRowIndexes.length ? this.selectedRowIndexes[this.selectedRowIndexes.length - 1] : -1);\n        selectedRow.removeAttribute('aria-selected');\n        this.addRemoveClassesForRow(selectedRow, false, null, 'e-selectionbackground', 'e-active');\n\n        if (selectedMovableRow) {\n          this.selectedRecords.splice(this.selectedRecords.indexOf(selectedMovableRow), 1);\n          selectedMovableRow.removeAttribute('aria-selected');\n          this.addRemoveClassesForRow(selectedMovableRow, false, null, 'e-selectionbackground', 'e-active');\n        }\n\n        if (selectedFrozenRightRow) {\n          this.selectedRecords.splice(this.selectedRecords.indexOf(selectedFrozenRightRow), 1);\n          selectedFrozenRightRow.removeAttribute('aria-selected');\n          this.addRemoveClassesForRow(selectedFrozenRightRow, false, null, 'e-selectionbackground', 'e-active');\n        }\n\n        this.rowDeselect(events.rowDeselected, [rowIndex], [rowObj.data], [selectedRow], [rowObj.foreignKeyData], target, [selectedMovableRow], undefined, [selectedFrozenRightRow]);\n        this.isInteracted = false;\n        this.isMultiSelection = false;\n        this.isAddRowsToSelection = false;\n      } else {\n        var isHybrid = 'isHybrid';\n        this.activeTarget();\n\n        if (!isBlazor() || this.parent.isJsComponent || this.parent[isHybrid]) {\n          args = {\n            cancel: false,\n            data: rowObj.data,\n            rowIndex: rowIndex,\n            row: selectedRow,\n            target: this.actualTarget,\n            prevRow: gObj.getRows()[this.prevRowIndex],\n            previousRowIndex: this.prevRowIndex,\n            isCtrlPressed: this.isMultiCtrlRequest,\n            isShiftPressed: this.isMultiShiftRequest,\n            foreignKeyData: rowObj.foreignKeyData,\n            isInteracted: this.isInteracted,\n            isHeaderCheckboxClicked: this.isHeaderCheckboxClicked,\n            rowIndexes: indexes\n          };\n          args = this.addMovableArgs(args, selectedMovableRow, selectedFrozenRightRow);\n        } else {\n          args = {\n            cancel: false,\n            data: rowObj.data,\n            rowIndex: rowIndex,\n            previousRowIndex: this.prevRowIndex,\n            isCtrlPressed: this.isMultiCtrlRequest,\n            isShiftPressed: this.isMultiShiftRequest,\n            foreignKeyData: rowObj.foreignKeyData,\n            isInteracted: this.isInteracted,\n            isHeaderCheckboxClicked: this.isHeaderCheckboxClicked,\n            rowIndexes: indexes\n          };\n        }\n\n        this.parent.trigger(events.rowSelecting, this.fDataUpdate(args));\n\n        if (!isNullOrUndefined(args) && args[can] === true) {\n          this.disableInteracted();\n          return;\n        }\n\n        if (this.isSingleSel()) {\n          this.clearRow();\n        }\n\n        this.updateRowSelection(selectedRow, rowIndex);\n        this.selectMovableRow(selectedMovableRow, selectedFrozenRightRow, rowIndex);\n      }\n\n      if (!isUnSelected) {\n        var isHybrid = 'isHybrid';\n\n        if (!isBlazor() || this.parent.isJsComponent || this.parent[isHybrid]) {\n          args = {\n            data: rowObj.data,\n            rowIndex: rowIndex,\n            row: selectedRow,\n            target: this.actualTarget,\n            prevRow: gObj.getRows()[this.prevRowIndex],\n            previousRowIndex: this.prevRowIndex,\n            foreignKeyData: rowObj.foreignKeyData,\n            isInteracted: this.isInteracted,\n            isHeaderCheckboxClicked: this.isHeaderCheckboxClicked,\n            rowIndexes: indexes\n          };\n          args = this.addMovableArgs(args, selectedMovableRow, selectedFrozenRightRow);\n        } else {\n          args = {\n            data: rowObj.data,\n            rowIndex: rowIndex,\n            previousRowIndex: this.prevRowIndex,\n            row: selectedRow,\n            prevRow: gObj.getRows()[this.prevRowIndex],\n            foreignKeyData: rowObj.foreignKeyData,\n            isInteracted: this.isInteracted,\n            isHeaderCheckboxClicked: this.isHeaderCheckboxClicked,\n            rowIndexes: indexes\n          };\n        }\n\n        this.onActionComplete(args, events.rowSelected);\n      }\n\n      this.isInteracted = false;\n      this.updateRowProps(rowIndex);\n\n      if (this.isSingleSel()) {\n        break;\n      }\n    }\n  };\n\n  Selection.prototype.getCollectionFromIndexes = function (startIndex, endIndex) {\n    var indexes = [];\n\n    var _a = startIndex <= endIndex ? {\n      i: startIndex,\n      max: endIndex\n    } : {\n      i: endIndex,\n      max: startIndex\n    },\n        i = _a.i,\n        max = _a.max;\n\n    for (; i <= max; i++) {\n      indexes.push(i);\n    }\n\n    if (startIndex > endIndex) {\n      indexes.reverse();\n    }\n\n    return indexes;\n  };\n\n  Selection.prototype.clearRow = function () {\n    this.clearRowCheck = true;\n    this.clearRowSelection();\n  };\n\n  Selection.prototype.clearRowCallBack = function () {\n    if (this.isCancelDeSelect && this.parent.checkAllRows !== 'Check') {\n      return;\n    }\n\n    this.selectedRowIndexes = [];\n    this.selectedRecords = [];\n    this.selectRowIndex(-1);\n\n    if (this.isSingleSel() && this.parent.isPersistSelection) {\n      this.selectedRowState = {};\n    }\n  };\n\n  Selection.prototype.clearSelectedRow = function (index) {\n    if (this.toggle) {\n      var selectedEle = this.parent.getRowByIndex(index);\n\n      if (!this.disableUI) {\n        selectedEle.removeAttribute('aria-selected');\n        this.addRemoveClassesForRow(selectedEle, false, true, 'e-selectionbackground', 'e-active');\n      }\n\n      this.removed = true;\n      this.updatePersistCollection(selectedEle, false);\n      this.updateCheckBoxes(selectedEle);\n      this.selectedRowIndexes.splice(this.selectedRowIndexes.indexOf(index), 1);\n      this.selectedRecords.splice(this.selectedRecords.indexOf(this.parent.getRowByIndex(index)), 1);\n    }\n  };\n\n  Selection.prototype.updateRowProps = function (startIndex) {\n    this.prevRowIndex = startIndex;\n    this.isRowSelected = this.selectedRowIndexes.length && true;\n  };\n\n  Selection.prototype.updatePersistCollection = function (selectedRow, chkState) {\n    var _this = this;\n\n    if ((this.parent.isPersistSelection || this.parent.selectionSettings.persistSelection && this.parent.getPrimaryKeyFieldNames().length > 0) && !isNullOrUndefined(selectedRow)) {\n      if (!this.parent.isPersistSelection) {\n        this.ensureCheckboxFieldSelection();\n      }\n\n      var rowObj = this.getRowObj(selectedRow);\n      var pKey_1 = rowObj.data ? rowObj.data[this.primaryKey] : null;\n\n      if (pKey_1 === null) {\n        return;\n      }\n\n      rowObj.isSelected = chkState;\n\n      if (chkState) {\n        this.selectedRowState[pKey_1] = chkState;\n\n        if (!this.persistSelectedData.some(function (data) {\n          return data[_this.primaryKey] === pKey_1;\n        })) {\n          this.persistSelectedData.push(rowObj.data);\n        }\n      } else {\n        this.updatePersistDelete(pKey_1);\n      }\n    }\n  };\n\n  Selection.prototype.updatePersistDelete = function (pKey) {\n    var _this = this;\n\n    delete this.selectedRowState[pKey];\n    var index;\n    var isPresent = this.persistSelectedData.some(function (data, i) {\n      index = i;\n      return data[_this.primaryKey] === pKey;\n    });\n\n    if (isPresent) {\n      this.persistSelectedData.splice(index, 1);\n    }\n  };\n\n  Selection.prototype.updateCheckBoxes = function (row, chkState, rowIndex) {\n    if (!isNullOrUndefined(row)) {\n      var chkBox = row.querySelector('.e-checkselect');\n\n      if (!isNullOrUndefined(chkBox)) {\n        removeAddCboxClasses(chkBox.nextElementSibling, chkState);\n        setChecked(chkBox, chkState);\n\n        if (isNullOrUndefined(this.checkedTarget) || !isNullOrUndefined(this.checkedTarget) && !this.checkedTarget.classList.contains('e-checkselectall')) {\n          this.setCheckAllState(rowIndex);\n        }\n      }\n    }\n  };\n\n  Selection.prototype.updateRowSelection = function (selectedRow, startIndex) {\n    if (!selectedRow) {\n      return;\n    }\n\n    this.selectedRowIndexes.push(startIndex);\n    var len = this.selectedRowIndexes.length;\n\n    if (this.parent.isFrozenGrid() && len > 1) {\n      if (this.selectedRowIndexes[len - 2] === this.selectedRowIndexes[len - 1]) {\n        this.selectedRowIndexes.pop();\n      }\n    }\n\n    this.selectedRecords.push(selectedRow);\n    selectedRow.setAttribute('aria-selected', 'true');\n    this.updatePersistCollection(selectedRow, true);\n    this.updateCheckBoxes(selectedRow, true);\n    this.addRemoveClassesForRow(selectedRow, true, null, 'e-selectionbackground', 'e-active');\n\n    if (!this.preventFocus) {\n      var target = this.focus.getPrevIndexes().cellIndex ? selectedRow.cells[this.focus.getPrevIndexes().cellIndex] : selectedRow.querySelector('.e-selectionbackground:not(.e-hide):not(.e-detailrowcollapse):not(.e-detailrowexpand)');\n\n      if (this.parent.contextMenuModule && this.mouseButton === 2) {\n        target = this.parent.contextMenuModule.cell;\n      }\n\n      if (!target) {\n        return;\n      }\n\n      this.focus.onClick({\n        target: target\n      }, true);\n    }\n  };\n  /**\n   * Deselects the currently selected rows and cells.\n   * @return {void}\n   */\n\n\n  Selection.prototype.clearSelection = function () {\n    if (this.selectionSettings.persistSelection && this.persistSelectedData.length) {\n      this.deSelectedData = iterateExtend(this.persistSelectedData);\n    }\n\n    if (!this.parent.isPersistSelection || this.parent.isPersistSelection && !this.parent.isEdit || !isNullOrUndefined(this.checkedTarget) && this.checkedTarget.classList.contains('e-checkselectall')) {\n      var span = this.parent.element.querySelector('.e-gridpopup').querySelector('span');\n\n      if (span.classList.contains('e-rowselect')) {\n        span.classList.remove('e-spanclicked');\n      }\n\n      if (this.parent.isPersistSelection) {\n        this.persistSelectedData = [];\n        this.selectedRowState = {};\n      }\n\n      this.clearRowSelection();\n      this.clearCellSelection();\n      this.clearColumnSelection();\n      this.prevRowIndex = undefined;\n      this.enableSelectMultiTouch = false;\n      this.isInteracted = false;\n    }\n  };\n  /**\n   * Deselects the currently selected rows.\n   * @return {void}\n   */\n  // tslint:disable-next-line:max-func-body-length\n\n\n  Selection.prototype.clearRowSelection = function () {\n    var _this = this;\n\n    if (this.isRowSelected) {\n      var gObj = this.parent;\n      var rows_1 = this.parent.getDataRows();\n      var data_1 = [];\n      var row_1 = [];\n      var mRow_1 = [];\n      var fRightRow_1 = [];\n      var rowIndex_1 = [];\n      var foreignKeyData_1 = [];\n      var target_1 = this.target;\n\n      for (var i = 0, len = this.selectedRowIndexes.length; i < len; i++) {\n        var currentRow = this.parent.editSettings.mode === 'Batch' ? this.parent.getRows()[this.selectedRowIndexes[i]] : this.parent.getDataRows()[this.selectedRowIndexes[i]];\n        var rowObj = this.getRowObj(currentRow);\n\n        if (rowObj) {\n          data_1.push(rowObj.data);\n          row_1.push(currentRow);\n          rowIndex_1.push(this.selectedRowIndexes[i]);\n          foreignKeyData_1.push(rowObj.foreignKeyData);\n        }\n\n        if (gObj.isFrozenGrid()) {\n          mRow_1.push(gObj.getMovableRows()[this.selectedRowIndexes[i]]);\n\n          if (gObj.getFrozenMode() === literals.leftRight) {\n            fRightRow_1.push(gObj.getFrozenRightRows()[this.selectedRowIndexes[i]]);\n          }\n        }\n      }\n\n      if (this.selectionSettings.persistSelection && this.selectionSettings.checkboxMode !== 'ResetOnRowClick') {\n        this.isRowClicked = this.checkSelectAllClicked ? true : false;\n      }\n\n      this.rowDeselect(events.rowDeselecting, rowIndex_1, data_1, row_1, foreignKeyData_1, target_1, mRow_1, function () {\n        if (_this.isCancelDeSelect && (_this.isRowClicked || _this.checkSelectAllClicked || _this.isInteracted && !_this.parent.isPersistSelection)) {\n          if (_this.parent.isPersistSelection) {\n            if (_this.getCheckAllStatus(_this.parent.element.querySelector('.e-checkselectall')) === 'Intermediate') {\n              for (var i = 0; i < _this.selectedRecords.length; i++) {\n                _this.updatePersistCollection(_this.selectedRecords[i], true);\n              }\n            } else {\n              _this.parent.checkAllRows = 'Check';\n\n              _this.updatePersistSelectedData(true);\n            }\n          }\n\n          if (_this.clearRowCheck) {\n            _this.clearRowCallBack();\n\n            _this.clearRowCheck = false;\n\n            if (_this.selectRowCheck) {\n              _this.selectRowCallBack();\n\n              _this.selectRowCheck = false;\n            }\n          }\n\n          return;\n        }\n\n        var element = [].slice.call(rows_1.filter(function (record) {\n          return record.hasAttribute('aria-selected');\n        }));\n\n        for (var j = 0; j < element.length; j++) {\n          if (!_this.disableUI || isBlazor()) {\n            element[j].removeAttribute('aria-selected');\n\n            _this.addRemoveClassesForRow(element[j], false, true, 'e-selectionbackground', 'e-active');\n          } // tslint:disable-next-line:align\n\n\n          if (!_this.isPrevRowSelection) {\n            _this.updatePersistCollection(element[j], false);\n          }\n\n          _this.updateCheckBoxes(element[j]);\n        }\n\n        for (var i = 0, len = _this.selectedRowIndexes.length; i < len; i++) {\n          var movableRow = _this.getSelectedMovableRow(_this.selectedRowIndexes[i]);\n\n          if (movableRow) {\n            if (!_this.disableUI || isBlazor()) {\n              movableRow.removeAttribute('aria-selected');\n\n              _this.addRemoveClassesForRow(movableRow, false, true, 'e-selectionbackground', 'e-active');\n            }\n\n            _this.updateCheckBoxes(movableRow);\n\n            if (!_this.isPrevRowSelection) {\n              _this.updatePersistCollection(movableRow, false);\n            }\n          }\n\n          var frRow = _this.getSelectedFrozenRightRow(_this.selectedRowIndexes[i]);\n\n          if (frRow) {\n            if (!_this.disableUI) {\n              frRow.removeAttribute('aria-selected');\n\n              _this.addRemoveClassesForRow(frRow, false, true, 'e-selectionbackground', 'e-active');\n            }\n\n            _this.updateCheckBoxes(frRow);\n\n            if (!_this.isPrevRowSelection) {\n              _this.updatePersistCollection(frRow, false);\n            }\n          }\n        }\n\n        _this.selectedRowIndexes = [];\n        _this.selectedRecords = [];\n        _this.isRowSelected = false;\n\n        _this.selectRowIndex(-1);\n\n        _this.isPrevRowSelection = false;\n\n        _this.rowDeselect(events.rowDeselected, rowIndex_1, data_1, row_1, foreignKeyData_1, target_1, mRow_1, undefined, fRightRow_1);\n\n        if (_this.clearRowCheck) {\n          _this.clearRowCallBack();\n\n          _this.clearRowCheck = false;\n\n          if (_this.selectRowCheck) {\n            _this.selectRowCallBack();\n\n            _this.selectRowCheck = false;\n          }\n        }\n      }, fRightRow_1);\n    } else {\n      if (this.clearRowCheck) {\n        this.clearRowCallBack();\n        this.clearRowCheck = false;\n\n        if (this.selectRowCheck) {\n          this.selectRowCallBack();\n          this.selectRowCheck = false;\n        }\n      }\n    }\n  };\n\n  Selection.prototype.rowDeselect = function (type, rowIndex, data, row, foreignKeyData, target, mRow, rowDeselectCallBack, frozenRightRow) {\n    var _this = this;\n\n    if (this.selectionSettings.persistSelection && (this.isRowClicked || this.checkSelectAllClicked) || !this.selectionSettings.persistSelection) {\n      var cancl_1 = 'cancel';\n      var isSingleDeSel = rowIndex.length === 1 && this.deSelectedData.length === 1;\n      var rowDeselectObj = {\n        rowIndex: rowIndex[0],\n        data: this.selectionSettings.persistSelection && this.parent.checkAllRows === 'Uncheck' && !isSingleDeSel && this.selectionSettings.checkboxMode !== 'ResetOnRowClick' ? this.deSelectedData : data,\n        foreignKeyData: foreignKeyData,\n        cancel: false,\n        isInteracted: this.isInteracted,\n        isHeaderCheckboxClicked: this.isHeaderCheckboxClicked\n      };\n\n      if (type === 'rowDeselected') {\n        delete rowDeselectObj.cancel;\n      }\n\n      var isHybrid = 'isHybrid';\n\n      if (!isBlazor() || this.parent.isJsComponent || this.parent[isHybrid]) {\n        var rowInString = 'row';\n        var target_2 = 'target';\n        var rowidx = 'rowIndex';\n        var rowidxex = 'rowIndexes';\n        var data_2 = 'data';\n        var foreignKey = 'foreignKeyData';\n        rowDeselectObj[rowInString] = row;\n        rowDeselectObj[target_2] = this.actualTarget;\n        var isHeaderCheckBxClick = this.actualTarget && !isNullOrUndefined(closest(this.actualTarget, 'thead'));\n\n        if (isHeaderCheckBxClick || rowIndex.length > 1) {\n          rowDeselectObj[rowidx] = rowIndex[0];\n          rowDeselectObj[rowidxex] = rowIndex;\n        } else if (rowIndex.length === 1) {\n          rowDeselectObj[data_2] = rowDeselectObj[data_2][0];\n          rowDeselectObj[rowInString] = rowDeselectObj[rowInString][0];\n          rowDeselectObj[foreignKey] = rowDeselectObj[foreignKey][0];\n\n          if (this.isAddRowsToSelection) {\n            rowDeselectObj[rowidxex] = rowIndex;\n          }\n        }\n      } else {\n        var rowIndex_2 = 'rowIndex';\n        var data_3 = 'data';\n        rowDeselectObj[rowIndex_2] = rowDeselectObj[rowIndex_2][rowDeselectObj[rowIndex_2].length - 1];\n        rowDeselectObj[data_3] = rowDeselectObj[data_3][rowDeselectObj[data_3].length - 1];\n      }\n\n      this.parent.trigger(type, (!isBlazor() || this.parent.isJsComponent) && this.parent.isFrozenGrid() ? __assign({}, rowDeselectObj, {\n        mRow: mRow,\n        frozenRightRow: frozenRightRow\n      }) : rowDeselectObj, function (args) {\n        _this.isCancelDeSelect = args[cancl_1];\n\n        if (!_this.isCancelDeSelect || !_this.isRowClicked && !_this.isInteracted && !_this.checkSelectAllClicked) {\n          _this.updatePersistCollection(row[0], false);\n\n          _this.updateCheckBoxes(row[0], undefined, rowIndex[0]);\n\n          if (mRow) {\n            _this.updateCheckBoxes(mRow[0], undefined, rowIndex[0]);\n          }\n\n          if (frozenRightRow) {\n            _this.updateCheckBoxes(frozenRightRow[0], undefined, rowIndex[0]);\n          }\n        }\n\n        if (rowDeselectCallBack !== undefined) {\n          rowDeselectCallBack();\n        }\n      });\n    } else if (this.selectionSettings.persistSelection && !this.isInteracted) {\n      if (rowDeselectCallBack !== undefined) {\n        rowDeselectCallBack();\n      }\n    }\n  };\n\n  Selection.prototype.getRowObj = function (row) {\n    if (row === void 0) {\n      row = this.currentIndex;\n    }\n\n    if (isNullOrUndefined(row)) {\n      return {};\n    }\n\n    if (typeof row === 'number') {\n      row = this.parent.getRowByIndex(row);\n    }\n\n    if (row) {\n      return this.parent.getRowObjectFromUID(row.getAttribute('data-uid')) || {};\n    }\n\n    return {};\n  };\n\n  Selection.prototype.getSelectedMovableCell = function (cellIndex) {\n    var gObj = this.parent;\n    var col = gObj.getColumnByIndex(cellIndex.cellIndex);\n    var frzCols = gObj.isFrozenGrid();\n\n    if (frzCols) {\n      if (col.getFreezeTableName() === 'movable') {\n        return gObj.getMovableCellFromIndex(cellIndex.rowIndex, this.getColIndex(cellIndex.rowIndex, cellIndex.cellIndex));\n      }\n\n      return null;\n    }\n\n    return null;\n  };\n  /**\n   * Selects a cell by the given index.\n   * @param  {IIndex} cellIndex - Defines the row and column indexes.\n   * @param  {boolean} isToggle - If set to true, then it toggles the selection.\n   * @return {void}\n   */\n\n\n  Selection.prototype.selectCell = function (cellIndex, isToggle) {\n    if (!this.isCellType()) {\n      return;\n    }\n\n    var gObj = this.parent;\n    var selectedCell = this.getSelectedMovableCell(cellIndex);\n    var args;\n\n    if (!selectedCell) {\n      selectedCell = gObj.getCellFromIndex(cellIndex.rowIndex, this.getColIndex(cellIndex.rowIndex, cellIndex.cellIndex));\n    }\n\n    this.currentIndex = cellIndex.rowIndex;\n    var selectedData = this.getCurrentBatchRecordChanges()[this.currentIndex];\n\n    if (!this.isCellType() || !selectedCell || this.isEditing()) {\n      return;\n    }\n\n    var isCellSelected = selectedCell.classList.contains('e-cellselectionbackground');\n    isToggle = !isToggle ? isToggle : !isUndefined(this.prevCIdxs) && cellIndex.rowIndex === this.prevCIdxs.rowIndex && cellIndex.cellIndex === this.prevCIdxs.cellIndex && isCellSelected;\n\n    if (!isToggle) {\n      args = {\n        data: selectedData,\n        cellIndex: cellIndex,\n        isCtrlPressed: this.isMultiCtrlRequest,\n        isShiftPressed: this.isMultiShiftRequest,\n        previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined,\n        cancel: false\n      };\n\n      if (!isBlazor() || this.parent.isJsComponent) {\n        var currentCell = 'currentCell';\n        args[currentCell] = selectedCell;\n        var previousRowCellIndex = 'previousRowCellIndex';\n        args[previousRowCellIndex] = this.prevECIdxs;\n      }\n\n      this.parent.trigger(events.cellSelecting, this.fDataUpdate(args), this.successCallBack(args, isToggle, cellIndex, selectedCell, selectedData));\n      this.cellselected = true;\n    } else {\n      this.successCallBack(args, isToggle, cellIndex, selectedCell, selectedData)(args);\n    }\n  };\n\n  Selection.prototype.successCallBack = function (cellSelectingArgs, isToggle, cellIndex, selectedCell, selectedData) {\n    var _this = this;\n\n    return function (cellSelectingArgs) {\n      var cncl = 'cancel';\n      var currentCell = 'currentCell';\n\n      if (!isNullOrUndefined(cellSelectingArgs) && cellSelectingArgs[cncl] === true) {\n        return;\n      }\n\n      if (!isToggle) {\n        cellSelectingArgs[currentCell] = cellSelectingArgs[currentCell] ? cellSelectingArgs[currentCell] : selectedCell;\n      }\n\n      _this.clearCell();\n\n      if (!isToggle) {\n        _this.updateCellSelection(selectedCell, cellIndex.rowIndex, cellIndex.cellIndex);\n      }\n\n      if (!isToggle) {\n        var args = void 0;\n        var isHybrid = 'isHybrid';\n\n        if (!isBlazor() || _this.parent.isJsComponent || _this.parent[isHybrid]) {\n          args = {\n            data: selectedData,\n            cellIndex: cellIndex,\n            currentCell: selectedCell,\n            selectedRowCellIndex: _this.selectedRowCellIndexes,\n            previousRowCell: _this.prevECIdxs ? _this.getCellIndex(_this.prevECIdxs.rowIndex, _this.prevECIdxs.cellIndex) : undefined\n          };\n          var previousRowCellIndex = 'previousRowCellIndex';\n          args[previousRowCellIndex] = _this.prevECIdxs;\n        } else {\n          args = {\n            data: selectedData,\n            cellIndex: cellIndex,\n            selectedRowCellIndex: _this.selectedRowCellIndexes\n          };\n        }\n\n        _this.updateCellProps(cellIndex, cellIndex);\n\n        _this.onActionComplete(args, events.cellSelected);\n      }\n    };\n  };\n\n  Selection.prototype.getCellIndex = function (rIdx, cIdx) {\n    return this.parent.getFrozenColumns() ? cIdx >= this.parent.getFrozenColumns() ? this.parent.getMovableCellFromIndex(rIdx, cIdx) : this.parent.getCellFromIndex(rIdx, cIdx) : this.parent.getCellFromIndex(rIdx, cIdx);\n  };\n  /**\n   * Selects a range of cells from start and end indexes.\n   * @param  {IIndex} startIndex - Specifies the row and column's start index.\n   * @param  {IIndex} endIndex - Specifies the row and column's end index.\n   * @return {void}\n   */\n\n\n  Selection.prototype.selectCellsByRange = function (startIndex, endIndex) {\n    var _this = this;\n\n    if (!this.isCellType()) {\n      return;\n    }\n\n    var gObj = this.parent;\n    var selectedCell = this.getSelectedMovableCell(startIndex);\n    var frzCols = gObj.getFrozenColumns();\n\n    if (!selectedCell) {\n      selectedCell = gObj.getCellFromIndex(startIndex.rowIndex, startIndex.cellIndex);\n    }\n\n    var min;\n    var max;\n    var stIndex = startIndex;\n    var edIndex = endIndex = endIndex ? endIndex : startIndex;\n    var cellIndexes;\n    this.currentIndex = startIndex.rowIndex;\n    var cncl = 'cancel';\n    var selectedData = this.getCurrentBatchRecordChanges()[this.currentIndex];\n\n    if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n      return;\n    }\n\n    var args = {\n      data: selectedData,\n      cellIndex: startIndex,\n      currentCell: selectedCell,\n      isCtrlPressed: this.isMultiCtrlRequest,\n      isShiftPressed: this.isMultiShiftRequest,\n      previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n    };\n\n    if (!isBlazor()) {\n      var previousRowCellIndex = 'previousRowCellIndex';\n      args[previousRowCellIndex] = this.prevECIdxs;\n    }\n\n    this.parent.trigger(events.cellSelecting, this.fDataUpdate(args), function (cellSelectingArgs) {\n      if (!isNullOrUndefined(cellSelectingArgs) && cellSelectingArgs[cncl] === true) {\n        return;\n      }\n\n      _this.clearCell();\n\n      if (startIndex.rowIndex > endIndex.rowIndex) {\n        var temp = startIndex;\n        startIndex = endIndex;\n        endIndex = temp;\n      }\n\n      for (var i = startIndex.rowIndex; i <= endIndex.rowIndex; i++) {\n        if (_this.selectionSettings.cellSelectionMode.indexOf('Box') < 0) {\n          min = i === startIndex.rowIndex ? startIndex.cellIndex : 0;\n          max = i === endIndex.rowIndex ? endIndex.cellIndex : _this.getLastColIndex(i);\n        } else {\n          min = startIndex.cellIndex;\n          max = endIndex.cellIndex;\n        }\n\n        cellIndexes = [];\n\n        for (var j = min < max ? min : max, len = min > max ? min : max; j <= len; j++) {\n          if (frzCols) {\n            if (j < frzCols) {\n              selectedCell = gObj.getCellFromIndex(i, j);\n            } else {\n              selectedCell = gObj.getMovableCellFromIndex(i, j);\n            }\n          } else {\n            selectedCell = gObj.getCellFromIndex(i, j);\n          }\n\n          if (!selectedCell) {\n            continue;\n          }\n\n          cellIndexes.push(j);\n\n          _this.updateCellSelection(selectedCell);\n\n          _this.addAttribute(selectedCell);\n        }\n\n        _this.selectedRowCellIndexes.push({\n          rowIndex: i,\n          cellIndexes: cellIndexes\n        });\n      }\n\n      var cellSelectedArgs;\n      var isHybrid = 'isHybrid';\n\n      if (!isBlazor() || _this.parent.isJsComponent || _this.parent[isHybrid]) {\n        cellSelectedArgs = {\n          data: selectedData,\n          cellIndex: edIndex,\n          currentCell: gObj.getCellFromIndex(edIndex.rowIndex, edIndex.cellIndex),\n          selectedRowCellIndex: _this.selectedRowCellIndexes,\n          previousRowCell: _this.prevECIdxs ? _this.getCellIndex(_this.prevECIdxs.rowIndex, _this.prevECIdxs.cellIndex) : undefined\n        };\n        var previousRowCellIndex = 'previousRowCellIndex';\n        cellSelectedArgs[previousRowCellIndex] = _this.prevECIdxs;\n      } else {\n        cellSelectedArgs = {\n          data: selectedData,\n          cellIndex: edIndex,\n          selectedRowCellIndex: _this.selectedRowCellIndexes\n        };\n      }\n\n      if (!_this.isDragged) {\n        _this.onActionComplete(cellSelectedArgs, events.cellSelected);\n\n        _this.cellselected = true;\n      }\n\n      _this.updateCellProps(stIndex, edIndex);\n    });\n  };\n  /**\n   * Selects a collection of cells by row and column indexes.\n   * @param  {ISelectedCell[]} rowCellIndexes - Specifies the row and column indexes.\n   * @return {void}\n   */\n\n\n  Selection.prototype.selectCells = function (rowCellIndexes) {\n    if (!this.isCellType()) {\n      return;\n    }\n\n    var gObj = this.parent;\n    var selectedCell = this.getSelectedMovableCell(rowCellIndexes[0]);\n    var frzCols = gObj.getFrozenColumns();\n\n    if (!selectedCell) {\n      selectedCell = gObj.getCellFromIndex(rowCellIndexes[0].rowIndex, rowCellIndexes[0].cellIndexes[0]);\n    }\n\n    this.currentIndex = rowCellIndexes[0].rowIndex;\n    var selectedData = this.getCurrentBatchRecordChanges()[this.currentIndex];\n\n    if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n      return;\n    }\n\n    var cellSelectArgs;\n    var isHybrid = 'isHybrid';\n\n    if (!isBlazor() || this.parent.isJsComponent || this.parent[isHybrid]) {\n      cellSelectArgs = {\n        data: selectedData,\n        cellIndex: rowCellIndexes[0].cellIndexes[0],\n        currentCell: selectedCell,\n        isCtrlPressed: this.isMultiCtrlRequest,\n        isShiftPressed: this.isMultiShiftRequest,\n        previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n      };\n      var previousRowCellIndex = 'previousRowCellIndex';\n      cellSelectArgs[previousRowCellIndex] = this.prevECIdxs;\n    } else {\n      cellSelectArgs = {\n        data: selectedData,\n        cellIndex: rowCellIndexes[0].cellIndexes[0],\n        isCtrlPressed: this.isMultiCtrlRequest,\n        isShiftPressed: this.isMultiShiftRequest\n      };\n    }\n\n    this.onActionBegin(cellSelectArgs, events.cellSelecting);\n\n    for (var i = 0, len = rowCellIndexes.length; i < len; i++) {\n      for (var j = 0, cellLen = rowCellIndexes[i].cellIndexes.length; j < cellLen; j++) {\n        if (frzCols) {\n          if (rowCellIndexes[i].cellIndexes[j] < frzCols) {\n            selectedCell = gObj.getCellFromIndex(rowCellIndexes[i].rowIndex, rowCellIndexes[i].cellIndexes[j]);\n          } else {\n            selectedCell = gObj.getMovableCellFromIndex(rowCellIndexes[i].rowIndex, rowCellIndexes[i].cellIndexes[j]);\n          }\n        } else {\n          selectedCell = gObj.getCellFromIndex(rowCellIndexes[i].rowIndex, rowCellIndexes[i].cellIndexes[j]);\n        }\n\n        if (!selectedCell) {\n          continue;\n        }\n\n        this.updateCellSelection(selectedCell);\n        this.addAttribute(selectedCell);\n        this.addRowCellIndex({\n          rowIndex: rowCellIndexes[i].rowIndex,\n          cellIndex: rowCellIndexes[i].cellIndexes[j]\n        });\n      }\n    }\n\n    this.updateCellProps({\n      rowIndex: rowCellIndexes[0].rowIndex,\n      cellIndex: rowCellIndexes[0].cellIndexes[0]\n    }, {\n      rowIndex: rowCellIndexes[0].rowIndex,\n      cellIndex: rowCellIndexes[0].cellIndexes[0]\n    });\n    var cellSelectedArgs;\n\n    if (!isBlazor() || this.parent.isJsComponent || this.parent[isHybrid]) {\n      cellSelectedArgs = {\n        data: selectedData,\n        cellIndex: rowCellIndexes[0].cellIndexes[0],\n        currentCell: selectedCell,\n        selectedRowCellIndex: this.selectedRowCellIndexes,\n        previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n      };\n      var previousRowCellIndex = 'previousRowCellIndex';\n      cellSelectedArgs[previousRowCellIndex] = this.prevECIdxs;\n    } else {\n      cellSelectedArgs = {\n        data: selectedData,\n        cellIndex: rowCellIndexes[0].cellIndexes[0],\n        selectedRowCellIndex: this.selectedRowCellIndexes\n      };\n    }\n\n    this.onActionComplete(cellSelectedArgs, events.cellSelected);\n  };\n  /**\n   * Select cells with existing cell selection by passing row and column index.\n   * @param  {IIndex} startIndex - Defines the collection of row and column index.\n   * @return {void}\n   * @hidden\n   */\n  // tslint:disable-next-line:max-func-body-length\n\n\n  Selection.prototype.addCellsToSelection = function (cellIndexes) {\n    if (!this.isCellType()) {\n      return;\n    }\n\n    var gObj = this.parent;\n    var selectedCell;\n    var index;\n    this.currentIndex = cellIndexes[0].rowIndex;\n    var cncl = 'cancel';\n    var selectedData = this.getCurrentBatchRecordChanges()[this.currentIndex];\n    var isHybrid = 'isHybrid';\n    var left = gObj.getFrozenLeftCount();\n    var movable = gObj.getMovableColumnsCount();\n\n    if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n      return;\n    }\n\n    this.hideAutoFill();\n    var col = gObj.getColumnByIndex(cellIndexes[0].cellIndex);\n    var rowObj;\n    gridActionHandler(this.parent, function (tableName, rows) {\n      rowObj = rows[cellIndexes[0].rowIndex];\n    }, [!col.getFreezeTableName() || col.getFreezeTableName() === literals.frozenLeft ? gObj.getRowsObject() : [], col.getFreezeTableName() === 'movable' ? gObj.getMovableRowsObject() : [], col.getFreezeTableName() === literals.frozenRight ? gObj.getFrozenRightRowsObject() : []]);\n    var foreignKeyData = [];\n\n    for (var _i = 0, cellIndexes_1 = cellIndexes; _i < cellIndexes_1.length; _i++) {\n      var cellIndex = cellIndexes_1[_i];\n\n      for (var i = 0, len = this.selectedRowCellIndexes.length; i < len; i++) {\n        if (this.selectedRowCellIndexes[i].rowIndex === cellIndex.rowIndex) {\n          index = i;\n          break;\n        }\n      }\n\n      selectedCell = this.getSelectedMovableCell(cellIndex);\n\n      if (!selectedCell) {\n        selectedCell = gObj.getCellFromIndex(cellIndex.rowIndex, this.getColIndex(cellIndex.rowIndex, cellIndex.cellIndex));\n      }\n\n      var idx = col.getFreezeTableName() === 'movable' ? cellIndex.cellIndex - left : col.getFreezeTableName() === literals.frozenRight ? cellIndex.cellIndex - (left + movable) : cellIndex.cellIndex;\n      foreignKeyData.push(rowObj.cells[idx].foreignKeyData);\n      var args = void 0;\n\n      if (!isBlazor() || this.parent.isJsComponent || this.parent[isHybrid]) {\n        args = {\n          cancel: false,\n          data: selectedData,\n          cellIndex: cellIndexes[0],\n          isShiftPressed: this.isMultiShiftRequest,\n          currentCell: selectedCell,\n          isCtrlPressed: this.isMultiCtrlRequest,\n          previousRowCell: this.prevECIdxs ? gObj.getCellFromIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n        };\n        var previousRowCellIndex = 'previousRowCellIndex';\n        args[previousRowCellIndex] = this.prevECIdxs;\n      } else {\n        args = {\n          cancel: false,\n          data: selectedData,\n          cellIndex: cellIndexes[0],\n          isShiftPressed: this.isMultiShiftRequest,\n          isCtrlPressed: this.isMultiCtrlRequest\n        };\n      }\n\n      var isUnSelected = index > -1;\n\n      if (isUnSelected) {\n        var selectedCellIdx = this.selectedRowCellIndexes[index].cellIndexes;\n\n        if (selectedCellIdx.indexOf(cellIndex.cellIndex) > -1) {\n          this.cellDeselect(events.cellDeselecting, [{\n            rowIndex: cellIndex.rowIndex,\n            cellIndexes: [cellIndex.cellIndex]\n          }], selectedData, [selectedCell], foreignKeyData);\n          selectedCellIdx.splice(selectedCellIdx.indexOf(cellIndex.cellIndex), 1);\n\n          if (selectedCellIdx.length === 0) {\n            this.selectedRowCellIndexes.splice(index, 1);\n          }\n\n          selectedCell.classList.remove('e-cellselectionbackground');\n          selectedCell.removeAttribute('aria-selected');\n          this.cellDeselect(events.cellDeselected, [{\n            rowIndex: cellIndex.rowIndex,\n            cellIndexes: [cellIndex.cellIndex]\n          }], selectedData, [selectedCell], foreignKeyData);\n        } else {\n          isUnSelected = false;\n          this.onActionBegin(args, events.cellSelecting);\n          this.addRowCellIndex({\n            rowIndex: cellIndex.rowIndex,\n            cellIndex: cellIndex.cellIndex\n          });\n          this.updateCellSelection(selectedCell);\n          this.addAttribute(selectedCell);\n        }\n      } else {\n        this.onActionBegin(args, events.cellSelecting);\n\n        if (!isNullOrUndefined(args) && args[cncl] === true) {\n          return;\n        }\n\n        this.updateCellSelection(selectedCell, cellIndex.rowIndex, cellIndex.cellIndex);\n      }\n\n      if (!isUnSelected) {\n        var cellSelectedArgs = void 0;\n\n        if (!isBlazor() || this.parent.isJsComponent || this.parent[isHybrid]) {\n          cellSelectedArgs = {\n            data: selectedData,\n            cellIndex: cellIndexes[0],\n            currentCell: selectedCell,\n            previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined,\n            selectedRowCellIndex: this.selectedRowCellIndexes\n          };\n          var previousRowCellIndex = 'previousRowCellIndex';\n          cellSelectedArgs[previousRowCellIndex] = this.prevECIdxs;\n        } else {\n          cellSelectedArgs = {\n            data: selectedData,\n            cellIndex: cellIndexes[0],\n            selectedRowCellIndex: this.selectedRowCellIndexes\n          };\n        }\n\n        this.onActionComplete(cellSelectedArgs, events.cellSelected);\n        this.cellselected = true;\n      }\n\n      this.updateCellProps(cellIndex, cellIndex);\n    }\n  };\n\n  Selection.prototype.getColIndex = function (rowIndex, index) {\n    var frzCols = this.parent.isFrozenGrid();\n    var col = this.parent.getColumnByIndex(index);\n    var cells = getCellsByTableName(this.parent, col, rowIndex);\n\n    if (cells) {\n      for (var m = 0; m < cells.length; m++) {\n        var colIndex = parseInt(cells[m].getAttribute(literals.ariaColIndex), 10);\n\n        if (colIndex === index) {\n          if (frzCols) {\n            if (col.getFreezeTableName() === 'movable') {\n              m += this.parent.getFrozenLeftCount();\n            } else if (col.getFreezeTableName() === literals.frozenRight) {\n              m += this.parent.getFrozenLeftColumnsCount() + this.parent.getMovableColumnsCount();\n            }\n          }\n\n          return m;\n        }\n      }\n    }\n\n    return -1;\n  };\n\n  Selection.prototype.getLastColIndex = function (rowIndex) {\n    var cells = this.parent.getFrozenColumns() ? this.parent.getMovableDataRows()[rowIndex].querySelectorAll('td.e-rowcell') : this.parent.getDataRows()[rowIndex].querySelectorAll('td.e-rowcell');\n    return parseInt(cells[cells.length - 1].getAttribute(literals.ariaColIndex), 10);\n  };\n\n  Selection.prototype.clearCell = function () {\n    this.clearCellSelection();\n  };\n\n  Selection.prototype.cellDeselect = function (type, cellIndexes, data, cells, foreignKeyData) {\n    var cancl = 'cancel';\n\n    if (cells[0] && cells[0].classList.contains(literals.gridChkBox)) {\n      this.updateCheckBoxes(closest(cells[0], 'tr'));\n    }\n\n    var args = {\n      cells: cells,\n      data: data,\n      cellIndexes: cellIndexes,\n      foreignKeyData: foreignKeyData,\n      cancel: false\n    };\n    this.parent.trigger(type, args);\n    this.isPreventCellSelect = args[cancl];\n  };\n\n  Selection.prototype.updateCellSelection = function (selectedCell, rowIndex, cellIndex) {\n    if (!isNullOrUndefined(rowIndex)) {\n      this.addRowCellIndex({\n        rowIndex: rowIndex,\n        cellIndex: cellIndex\n      });\n    }\n\n    selectedCell.classList.add('e-cellselectionbackground');\n\n    if (selectedCell.classList.contains(literals.gridChkBox)) {\n      this.updateCheckBoxes(closest(selectedCell, 'tr'), true);\n    }\n\n    this.addAttribute(selectedCell);\n  };\n\n  Selection.prototype.addAttribute = function (cell) {\n    this.target = cell;\n\n    if (!isNullOrUndefined(cell)) {\n      cell.setAttribute('aria-selected', 'true');\n\n      if (!this.preventFocus) {\n        this.focus.onClick({\n          target: cell\n        }, true);\n      }\n    }\n  };\n\n  Selection.prototype.updateCellProps = function (startIndex, endIndex) {\n    this.prevCIdxs = startIndex;\n    this.prevECIdxs = endIndex;\n    this.isCellSelected = this.selectedRowCellIndexes.length && true;\n  };\n\n  Selection.prototype.addRowCellIndex = function (rowCellIndex) {\n    var isRowAvail;\n    var index;\n\n    for (var i = 0, len = this.selectedRowCellIndexes.length; i < len; i++) {\n      if (this.selectedRowCellIndexes[i].rowIndex === rowCellIndex.rowIndex) {\n        isRowAvail = true;\n        index = i;\n        break;\n      }\n    }\n\n    if (isRowAvail) {\n      if (this.selectedRowCellIndexes[index].cellIndexes.indexOf(rowCellIndex.cellIndex) < 0) {\n        this.selectedRowCellIndexes[index].cellIndexes.push(rowCellIndex.cellIndex);\n      }\n    } else {\n      this.selectedRowCellIndexes.push({\n        rowIndex: rowCellIndex.rowIndex,\n        cellIndexes: [rowCellIndex.cellIndex]\n      });\n    }\n  };\n  /**\n   * Deselects the currently selected cells.\n   * @return {void}\n   */\n\n\n  Selection.prototype.clearCellSelection = function () {\n    if (this.isCellSelected) {\n      var gObj = this.parent;\n      var selectedCells = this.getSelectedCellsElement();\n      var rowCell = this.selectedRowCellIndexes;\n      var data = [];\n      var cells = [];\n      var foreignKeyData = [];\n      var currentViewData = this.getCurrentBatchRecordChanges();\n      var frzCols = gObj.isFrozenGrid();\n      this.hideAutoFill();\n\n      for (var i = 0, len = rowCell.length; i < len; i++) {\n        data.push(currentViewData[rowCell[i].rowIndex]);\n        var rowObj = this.getRowObj(rowCell[i].rowIndex);\n\n        for (var j = 0, cLen = rowCell[i].cellIndexes.length; j < cLen; j++) {\n          if (frzCols) {\n            var col = gObj.getColumnByIndex(rowCell[i].cellIndexes[j]);\n            cells.push(getCellByColAndRowIndex(this.parent, col, rowCell[i].rowIndex, rowCell[i].cellIndexes[j]));\n          } else {\n            if (rowObj.cells) {\n              foreignKeyData.push(rowObj.cells[rowCell[i].cellIndexes[j]].foreignKeyData);\n            }\n\n            cells.push(gObj.getCellFromIndex(rowCell[i].rowIndex, rowCell[i].cellIndexes[j]));\n          }\n        }\n      }\n\n      this.cellDeselect(events.cellDeselecting, rowCell, data, cells, foreignKeyData);\n\n      if (this.isPreventCellSelect === true) {\n        return;\n      }\n\n      for (var i = 0, len = selectedCells.length; i < len; i++) {\n        selectedCells[i].classList.remove('e-cellselectionbackground');\n        selectedCells[i].removeAttribute('aria-selected');\n      }\n\n      if (this.bdrElement) {\n        this.showHideBorders('none');\n      }\n\n      this.selectedRowCellIndexes = [];\n      this.isCellSelected = false;\n\n      if (!this.isDragged && this.cellselected) {\n        this.cellDeselect(events.cellDeselected, rowCell, data, cells, foreignKeyData);\n      }\n    }\n  };\n\n  Selection.prototype.getSelectedCellsElement = function () {\n    var gObj = this.parent;\n    var rows = gObj.getDataRows();\n    var mRows;\n\n    if (gObj.isFrozenGrid()) {\n      mRows = gObj.getMovableDataRows();\n      rows = gObj.addMovableRows(rows, mRows);\n\n      if (gObj.getFrozenMode() === literals.leftRight) {\n        rows = gObj.addMovableRows(rows, gObj.getFrozenRightDataRows());\n      }\n    }\n\n    var cells = [];\n\n    for (var i = 0, len = rows.length; i < len; i++) {\n      cells = cells.concat([].slice.call(rows[i].getElementsByClassName('e-cellselectionbackground')));\n    }\n\n    return cells;\n  };\n\n  Selection.prototype.mouseMoveHandler = function (e) {\n    e.preventDefault();\n    var gBRect = this.parent.element.getBoundingClientRect();\n    var x1 = this.x;\n    var y1 = this.y;\n    var position = getPosition(e);\n    var x2 = position.x - gBRect.left;\n    var y2 = position.y - gBRect.top;\n    var tmp;\n    var target = closest(e.target, 'tr');\n    this.isDragged = true;\n\n    if (!this.isCellDrag) {\n      if (!target) {\n        target = closest(document.elementFromPoint(this.parent.element.offsetLeft + 2, e.clientY), 'tr');\n      }\n\n      if (x1 > x2) {\n        tmp = x2;\n        x2 = x1;\n        x1 = tmp;\n      }\n\n      if (y1 > y2) {\n        tmp = y2;\n        y2 = y1;\n        y1 = tmp;\n      }\n\n      this.element.style.left = x1 + 'px';\n      this.element.style.top = y1 + 'px';\n      this.element.style.width = x2 - x1 + 'px';\n      this.element.style.height = y2 - y1 + 'px';\n    }\n\n    if (target && !e.ctrlKey && !e.shiftKey) {\n      var rowIndex = parseInt(target.getAttribute(literals.ariaRowIndex), 10);\n\n      if (!this.isCellDrag) {\n        this.hideAutoFill();\n        this.selectRowsByRange(this.startDIndex, rowIndex);\n      } else {\n        var td = parentsUntil(e.target, literals.rowCell);\n\n        if (td) {\n          this.startAFCell = this.startCell;\n          this.endAFCell = parentsUntil(e.target, literals.rowCell);\n          this.selectLikeExcel(e, rowIndex, parseInt(td.getAttribute(literals.ariaColIndex), 10));\n        }\n      }\n    }\n  };\n\n  Selection.prototype.selectLikeExcel = function (e, rowIndex, cellIndex) {\n    if (!this.isAutoFillSel) {\n      this.clearCellSelection();\n      this.selectCellsByRange({\n        rowIndex: this.startDIndex,\n        cellIndex: this.startDCellIndex\n      }, {\n        rowIndex: rowIndex,\n        cellIndex: cellIndex\n      });\n      this.drawBorders();\n    } else {\n      //Autofill\n      this.showAFBorders();\n      this.selectLikeAutoFill(e);\n    }\n  };\n\n  Selection.prototype.drawBorders = function () {\n    if (this.selectionSettings.cellSelectionMode === 'BoxWithBorder' && this.selectedRowCellIndexes.length && !this.parent.isEdit) {\n      this.parent.element.classList.add('e-enabledboxbdr');\n\n      if (!this.bdrElement) {\n        this.createBorders();\n      }\n\n      this.positionBorders();\n    } else {\n      this.showHideBorders('none');\n    }\n  };\n\n  Selection.prototype.isLastCell = function (cell) {\n    var cells = [].slice.call(cell.parentElement.querySelectorAll('.e-rowcell:not(.e-hide)'));\n    return cells[cells.length - 1] === cell;\n  };\n\n  Selection.prototype.isLastRow = function (cell) {\n    var rows = [].slice.call(closest(cell, literals.tbody).querySelectorAll('.e-row:not(.e-hiddenrow)'));\n    return cell.parentElement === rows[rows.length - 1];\n  };\n\n  Selection.prototype.isFirstRow = function (cell) {\n    var rows = [].slice.call(closest(cell, literals.tbody).querySelectorAll('.e-row:not(.e-hiddenrow)'));\n    return cell.parentElement === rows[0];\n  };\n\n  Selection.prototype.isFirstCell = function (cell) {\n    var cells = [].slice.call(cell.parentElement.querySelectorAll('.e-rowcell:not(.e-hide)'));\n    return cells[0] === cell;\n  };\n\n  Selection.prototype.setBorders = function (parentEle, border, bdrStr) {\n    var cells = [].slice.call(parentEle.getElementsByClassName('e-cellselectionbackground')).filter(function (ele) {\n      return ele.style.display === '';\n    });\n\n    if (cells.length) {\n      var isFrozen = this.parent.isFrozenGrid();\n      var start = cells[0];\n      var end = cells[cells.length - 1];\n      var stOff = start.getBoundingClientRect();\n      var endOff = end.getBoundingClientRect();\n      var parentOff = start.offsetParent.getBoundingClientRect();\n      var rowHeight = this.isLastRow(end) && (bdrStr === '1' || bdrStr === '2' || bdrStr === '5') ? 2 : 0;\n      var topOffSet = this.parent.frozenRows && (bdrStr === '1' || bdrStr === '2') && this.isFirstRow(start) ? 1.5 : 0;\n      var leftOffset = isFrozen && (bdrStr === '2' || bdrStr === '4') && this.isFirstCell(start) ? 1 : 0;\n      var rightOffset = (this.parent.getFrozenMode() === 'Right' && (bdrStr === '1' || bdrStr === '3') || this.parent.getFrozenMode() === literals.leftRight && (bdrStr === '5' || bdrStr === '6')) && this.isFirstCell(start) ? 1 : 0;\n\n      if (this.parent.enableRtl) {\n        border.style.right = parentOff.right - stOff.right - leftOffset + 'px';\n        border.style.width = stOff.right - endOff.left + leftOffset + 1 + 'px';\n      } else {\n        border.style.left = stOff.left - parentOff.left - leftOffset - rightOffset + 'px';\n        border.style.width = endOff.right - stOff.left + leftOffset - rightOffset + 1 + 'px';\n      }\n\n      border.style.top = stOff.top - parentOff.top - topOffSet + 'px';\n      border.style.height = endOff.top - stOff.top > 0 ? endOff.top - parentOff.top + endOff.height + 1 - (stOff.top - parentOff.top) - rowHeight + topOffSet + 'px' : endOff.height + topOffSet - rowHeight + 1 + 'px';\n      this.selectDirection += bdrStr;\n    } else {\n      border.style.display = 'none';\n    }\n  };\n\n  Selection.prototype.positionBorders = function () {\n    this.updateStartEndCells();\n\n    if (!this.startCell || !this.bdrElement || !this.selectedRowCellIndexes.length) {\n      return;\n    }\n\n    this.selectDirection = '';\n    this.showHideBorders('');\n    this.setBorders(this.parent.getContentTable(), this.bdrElement, '1');\n\n    if (this.parent.isFrozenGrid()) {\n      this.setBorders(this.parent.contentModule.getMovableContent(), this.mcBdrElement, '2');\n\n      if (this.parent.getFrozenMode() === literals.leftRight) {\n        this.setBorders(this.parent.contentModule.getFrozenRightContent(), this.frcBdrElement, '5');\n      }\n    }\n\n    if (this.parent.frozenRows) {\n      this.setBorders(this.parent.getHeaderTable(), this.fhBdrElement, '3');\n\n      if (this.parent.isFrozenGrid()) {\n        this.setBorders(this.parent.headerModule.getMovableHeader(), this.mhBdrElement, '4');\n\n        if (this.parent.getFrozenMode() === literals.leftRight) {\n          this.setBorders(this.parent.headerModule.getFrozenRightHeader(), this.frhBdrElement, '6');\n        }\n      }\n    }\n\n    this.applyBorders(this.selectDirection);\n  };\n\n  Selection.prototype.applyBothFrozenBorders = function (str) {\n    var rtl = this.parent.enableRtl;\n\n    switch (str.length) {\n      case 6:\n        {\n          this.bdrElement.style.borderWidth = rtl ? this.right_bottom : this.bottom_left;\n          this.mcBdrElement.style.borderWidth = this.bottom;\n          this.fhBdrElement.style.borderWidth = rtl ? this.top_right : this.top_left;\n          this.mhBdrElement.style.borderWidth = this.top;\n          this.frcBdrElement.style.borderWidth = rtl ? this.bottom_left : this.right_bottom;\n          this.frhBdrElement.style.borderWidth = rtl ? this.top_left : this.top_right;\n        }\n        break;\n\n      case 4:\n        {\n          if (str.includes('1') && str.includes('2') && str.includes('3') && str.includes('4')) {\n            this.fhBdrElement.style.borderWidth = rtl ? this.top_right : this.top_left;\n            this.mhBdrElement.style.borderWidth = rtl ? this.top_left : this.top_right;\n            this.bdrElement.style.borderWidth = rtl ? this.right_bottom : this.bottom_left;\n            this.mcBdrElement.style.borderWidth = rtl ? this.bottom_left : this.right_bottom;\n          }\n\n          if (str.includes('2') && str.includes('4') && str.includes('5') && str.includes('6')) {\n            this.mcBdrElement.style.borderWidth = rtl ? this.right_bottom : this.bottom_left;\n            this.mhBdrElement.style.borderWidth = rtl ? this.top_right : this.top_left;\n            this.frcBdrElement.style.borderWidth = rtl ? this.bottom_left : this.right_bottom;\n            this.frhBdrElement.style.borderWidth = rtl ? this.top_left : this.top_right;\n          }\n        }\n        break;\n\n      case 3:\n        {\n          this.bdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n          this.mcBdrElement.style.borderWidth = this.top_bottom;\n          this.frcBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n\n          if (this.parent.frozenRows) {\n            this.fhBdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n            this.mhBdrElement.style.borderWidth = this.top_bottom;\n            this.frcBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n          }\n        }\n        break;\n\n      case 2:\n        {\n          if (str.includes('1')) {\n            this.mcBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n\n            if (this.parent.frozenRows) {\n              this.fhBdrElement.style.borderWidth = this.top_right_left;\n            }\n          }\n\n          if (str.includes('2')) {\n            this.bdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n            this.frcBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n\n            if (this.parent.frozenRows) {\n              this.mhBdrElement.style.borderWidth = this.top_right_left;\n            }\n          }\n\n          if (str.includes('3')) {\n            this.mhBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n            this.bdrElement.style.borderWidth = this.right_bottom_left;\n          }\n\n          if (str.includes('4')) {\n            this.fhBdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n            this.frhBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n            this.mcBdrElement.style.borderWidth = this.right_bottom_left;\n          }\n\n          if (str.includes('5')) {\n            this.mcBdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n\n            if (this.parent.frozenRows) {\n              this.frhBdrElement.style.borderWidth = this.top_right_left;\n            }\n          }\n\n          if (str.includes('6')) {\n            this.mhBdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n            this.frcBdrElement.style.borderWidth = this.right_bottom_left;\n          }\n        }\n        break;\n\n      default:\n        this.bdrElement.style.borderWidth = this.all_border;\n        this.mcBdrElement.style.borderWidth = this.all_border;\n        this.frcBdrElement.style.borderWidth = this.all_border;\n\n        if (this.parent.frozenRows) {\n          this.fhBdrElement.style.borderWidth = this.all_border;\n          this.mhBdrElement.style.borderWidth = this.all_border;\n          this.frhBdrElement.style.borderWidth = this.all_border;\n        }\n\n        break;\n    }\n  };\n\n  Selection.prototype.applyBorders = function (str) {\n    var rtl = this.parent.enableRtl;\n\n    if (this.parent.getFrozenMode() === literals.leftRight) {\n      this.applyBothFrozenBorders(str);\n    } else {\n      switch (str.length) {\n        case 4:\n          {\n            if (this.parent.getFrozenMode() === 'Right') {\n              this.bdrElement.style.borderWidth = rtl ? this.bottom_left : this.right_bottom;\n              this.mcBdrElement.style.borderWidth = rtl ? this.right_bottom : this.bottom_left;\n              this.fhBdrElement.style.borderWidth = rtl ? this.top_left : this.top_right;\n              this.mhBdrElement.style.borderWidth = rtl ? this.top_right : this.top_left;\n            } else {\n              this.bdrElement.style.borderWidth = rtl ? this.right_bottom : this.bottom_left;\n              this.mcBdrElement.style.borderWidth = rtl ? this.bottom_left : this.right_bottom;\n              this.fhBdrElement.style.borderWidth = rtl ? this.top_right : this.top_left;\n              this.mhBdrElement.style.borderWidth = rtl ? this.top_left : this.top_right;\n            }\n          }\n          break;\n\n        case 2:\n          {\n            if (this.parent.getFrozenMode() === 'Right') {\n              this.bdrElement.style.borderWidth = str.includes('2') ? rtl ? this.top_bottom_left : this.top_right_bottom : this.right_bottom_left;\n              this.mcBdrElement.style.borderWidth = str.includes('1') ? rtl ? this.top_right_bottom : this.top_bottom_left : this.right_bottom_left;\n\n              if (this.parent.frozenRows) {\n                this.fhBdrElement.style.borderWidth = str.includes('1') ? this.top_right_left : rtl ? this.top_bottom_left : this.top_right_bottom;\n                this.mhBdrElement.style.borderWidth = str.includes('2') ? this.top_right_left : rtl ? this.top_right_bottom : this.top_bottom_left;\n              }\n            } else {\n              this.bdrElement.style.borderWidth = str.includes('2') ? rtl ? this.top_right_bottom : this.top_bottom_left : this.right_bottom_left;\n\n              if (this.parent.isFrozenGrid()) {\n                this.mcBdrElement.style.borderWidth = str.includes('1') ? rtl ? this.top_bottom_left : this.top_right_bottom : this.right_bottom_left;\n              }\n\n              if (this.parent.frozenRows) {\n                this.fhBdrElement.style.borderWidth = str.includes('1') ? this.top_right_left : rtl ? this.top_right_bottom : this.top_bottom_left;\n\n                if (this.parent.isFrozenGrid()) {\n                  this.mhBdrElement.style.borderWidth = str.includes('2') ? this.top_right_left : rtl ? this.top_bottom_left : this.top_right_bottom;\n                }\n              }\n            }\n          }\n          break;\n\n        default:\n          this.bdrElement.style.borderWidth = this.all_border;\n\n          if (this.parent.isFrozenGrid()) {\n            this.mcBdrElement.style.borderWidth = this.all_border;\n          }\n\n          if (this.parent.frozenRows) {\n            this.fhBdrElement.style.borderWidth = this.all_border;\n\n            if (this.parent.isFrozenGrid()) {\n              this.mhBdrElement.style.borderWidth = this.all_border;\n            }\n          }\n\n          break;\n      }\n    }\n  };\n\n  Selection.prototype.createBorders = function () {\n    if (!this.bdrElement) {\n      this.bdrElement = this.parent.getContentTable().parentElement.appendChild(createElement('div', {\n        className: 'e-xlsel',\n        id: this.parent.element.id + '_bdr',\n        styles: 'width: 2px; border-width: 0;'\n      }));\n\n      if (this.parent.isFrozenGrid()) {\n        this.mcBdrElement = this.parent.contentModule.getMovableContent().appendChild(createElement('div', {\n          className: 'e-xlsel',\n          id: this.parent.element.id + '_mcbdr',\n          styles: 'height: 2px; border-width: 0;'\n        }));\n\n        if (this.parent.getFrozenMode() === literals.leftRight) {\n          this.frcBdrElement = this.parent.contentModule.getFrozenRightContent().appendChild(createElement('div', {\n            className: 'e-xlsel',\n            id: this.parent.element.id + '_frcbdr',\n            styles: 'height: 2px; border-width: 0;'\n          }));\n        }\n      }\n\n      if (this.parent.frozenRows) {\n        this.fhBdrElement = this.parent.getHeaderTable().parentElement.appendChild(createElement('div', {\n          className: 'e-xlsel',\n          id: this.parent.element.id + '_fhbdr',\n          styles: 'height: 2px;'\n        }));\n      }\n\n      if (this.parent.frozenRows && this.parent.isFrozenGrid()) {\n        this.mhBdrElement = this.parent.headerModule.getMovableHeader().appendChild(createElement('div', {\n          className: 'e-xlsel',\n          id: this.parent.element.id + '_mhbdr',\n          styles: 'height: 2px;'\n        }));\n\n        if (this.parent.getFrozenMode() === literals.leftRight) {\n          this.frhBdrElement = this.parent.headerModule.getFrozenRightHeader().appendChild(createElement('div', {\n            className: 'e-xlsel',\n            id: this.parent.element.id + '_frhbdr',\n            styles: 'height: 2px;'\n          }));\n        }\n      }\n    }\n  };\n\n  Selection.prototype.showHideBorders = function (display) {\n    if (this.bdrElement) {\n      this.bdrElement.style.display = display;\n\n      if (this.parent.isFrozenGrid()) {\n        this.mcBdrElement.style.display = display;\n\n        if (this.parent.getFrozenMode() === literals.leftRight) {\n          this.frcBdrElement.style.display = display;\n        }\n      }\n\n      if (this.parent.frozenRows) {\n        this.fhBdrElement.style.display = display;\n      }\n\n      if (this.parent.frozenRows && this.parent.isFrozenGrid()) {\n        this.mhBdrElement.style.display = display;\n\n        if (this.parent.getFrozenMode() === literals.leftRight) {\n          this.frhBdrElement.style.display = display;\n        }\n      }\n    }\n  };\n\n  Selection.prototype.drawAFBorders = function () {\n    if (!this.bdrAFBottom) {\n      this.createAFBorders();\n    }\n\n    this.positionAFBorders();\n  };\n\n  Selection.prototype.positionAFBorders = function () {\n    if (!this.startCell || !this.bdrAFLeft) {\n      return;\n    }\n\n    var stOff = this.startAFCell.getBoundingClientRect();\n    var endOff = this.endAFCell.getBoundingClientRect();\n    var top = endOff.top - stOff.top > 0 ? 1 : 0;\n    var firstCellTop = endOff.top - stOff.top >= 0 && (parentsUntil(this.startAFCell, literals.movableContent) || parentsUntil(this.startAFCell, 'e-frozencontent')) && this.isFirstRow(this.startAFCell) ? 1.5 : 0;\n    var firstCellLeft = (parentsUntil(this.startAFCell, literals.movableContent) || parentsUntil(this.startAFCell, literals.movableHeader)) && this.isFirstCell(this.startAFCell) ? 1 : 0;\n    var rowHeight = this.isLastRow(this.endAFCell) && (parentsUntil(this.endAFCell, literals.movableContent) || parentsUntil(this.endAFCell, 'e-frozencontent')) ? 2 : 0;\n    var parentOff = this.startAFCell.offsetParent.getBoundingClientRect();\n    var parentRect = this.parent.element.getBoundingClientRect();\n    var sTop = this.startAFCell.offsetParent.parentElement.scrollTop;\n    var sLeft = this.startAFCell.offsetParent.parentElement.scrollLeft;\n    var scrollTop = sTop - this.startAFCell.offsetTop;\n    var scrollLeft = sLeft - this.startAFCell.offsetLeft;\n    var totalHeight = this.parent.element.clientHeight;\n    var totalWidth = this.parent.element.clientWidth;\n    scrollTop = scrollTop > 0 ? Math.floor(scrollTop) - 1 : 0;\n    scrollLeft = scrollLeft > 0 ? scrollLeft : 0;\n    var left = stOff.left - parentRect.left;\n\n    if (!this.parent.enableRtl) {\n      this.bdrAFLeft.style.left = left - firstCellLeft + scrollLeft - 1 + 'px';\n      this.bdrAFRight.style.left = endOff.left - parentRect.left - 2 + endOff.width + 'px';\n      this.bdrAFRight.style.width = totalWidth <= parseInt(this.bdrAFRight.style.left, 10) ? '0px' : '2px';\n      this.bdrAFTop.style.left = left + scrollLeft - 0.5 + 'px';\n      this.bdrAFTop.style.width = parseInt(this.bdrAFRight.style.left, 10) - parseInt(this.bdrAFLeft.style.left, 10) - firstCellLeft + 1 + 'px';\n\n      if (totalWidth <= parseInt(this.bdrAFTop.style.width, 10) + parseInt(this.bdrAFTop.style.left, 10)) {\n        var leftRemove = parseInt(this.bdrAFTop.style.width, 10) + parseInt(this.bdrAFTop.style.left, 10) - totalWidth;\n        this.bdrAFTop.style.width = parseInt(this.bdrAFTop.style.width, 10) - leftRemove + 'px';\n      }\n    } else {\n      var scrolloffSet = parentsUntil(this.startAFCell, literals.movableContent) || parentsUntil(this.startAFCell, literals.movableHeader) ? stOff.right - this.startAFCell.offsetParent.parentElement.getBoundingClientRect().width - parentRect.left : 0;\n      this.bdrAFLeft.style.right = parentRect.right - endOff.right - 2 + endOff.width + 'px';\n      this.bdrAFLeft.style.width = totalWidth <= parseInt(this.bdrAFLeft.style.right, 10) ? '0px' : '2px';\n      this.bdrAFRight.style.right = parentRect.right - stOff.right - firstCellLeft + scrolloffSet - 1 + 'px';\n      this.bdrAFTop.style.left = endOff.left - parentRect.left - 0.5 + 'px';\n      this.bdrAFTop.style.width = parseInt(this.bdrAFLeft.style.right, 10) - parseInt(this.bdrAFRight.style.right, 10) - firstCellLeft + 1 + 'px';\n\n      if (parseInt(this.bdrAFTop.style.left, 10) < 0) {\n        this.bdrAFTop.style.width = parseInt(this.bdrAFTop.style.width, 10) + parseInt(this.bdrAFTop.style.left, 10) + 'px';\n        this.bdrAFTop.style.left = '0px';\n      }\n    }\n\n    this.bdrAFLeft.style.top = stOff.top - parentRect.top - firstCellTop + scrollTop + 'px';\n    this.bdrAFLeft.style.height = endOff.top - stOff.top > 0 ? endOff.top - parentOff.top + endOff.height + 1 - (stOff.top - parentOff.top) + firstCellTop - rowHeight - scrollTop + 'px' : endOff.height + firstCellTop - rowHeight - scrollTop + 'px';\n    this.bdrAFRight.style.top = this.bdrAFLeft.style.top;\n    this.bdrAFRight.style.height = parseInt(this.bdrAFLeft.style.height, 10) + 'px';\n    this.bdrAFTop.style.top = this.bdrAFRight.style.top;\n    this.bdrAFBottom.style.left = this.bdrAFTop.style.left;\n    this.bdrAFBottom.style.top = parseFloat(this.bdrAFLeft.style.top) + parseFloat(this.bdrAFLeft.style.height) - top - 1 + 'px';\n    this.bdrAFBottom.style.width = totalHeight <= parseFloat(this.bdrAFBottom.style.top) ? '0px' : this.bdrAFTop.style.width;\n\n    if (totalHeight <= parseInt(this.bdrAFLeft.style.height, 10) + parseInt(this.bdrAFLeft.style.top, 10)) {\n      var topRemove = parseInt(this.bdrAFLeft.style.height, 10) + parseInt(this.bdrAFLeft.style.top, 10) - totalHeight;\n      this.bdrAFLeft.style.height = parseInt(this.bdrAFLeft.style.height, 10) - topRemove + 'px';\n      this.bdrAFRight.style.height = parseInt(this.bdrAFLeft.style.height, 10) + 'px';\n    }\n  };\n\n  Selection.prototype.createAFBorders = function () {\n    if (!this.bdrAFLeft) {\n      this.bdrAFLeft = this.parent.element.appendChild(createElement('div', {\n        className: 'e-xlselaf',\n        id: this.parent.element.id + '_bdrafleft',\n        styles: 'width: 2px;'\n      }));\n      this.bdrAFRight = this.parent.element.appendChild(createElement('div', {\n        className: 'e-xlselaf',\n        id: this.parent.element.id + '_bdrafright',\n        styles: 'width: 2px;'\n      }));\n      this.bdrAFBottom = this.parent.element.appendChild(createElement('div', {\n        className: 'e-xlselaf',\n        id: this.parent.element.id + '_bdrafbottom',\n        styles: 'height: 2px;'\n      }));\n      this.bdrAFTop = this.parent.element.appendChild(createElement('div', {\n        className: 'e-xlselaf',\n        id: this.parent.element.id + '_bdraftop',\n        styles: 'height: 2px;'\n      }));\n    }\n  };\n\n  Selection.prototype.showAFBorders = function () {\n    if (this.bdrAFLeft) {\n      this.bdrAFLeft.style.display = '';\n      this.bdrAFRight.style.display = '';\n      this.bdrAFBottom.style.display = '';\n      this.bdrAFTop.style.display = '';\n    }\n  };\n\n  Selection.prototype.hideAFBorders = function () {\n    if (this.bdrAFLeft) {\n      this.bdrAFLeft.style.display = 'none';\n      this.bdrAFRight.style.display = 'none';\n      this.bdrAFBottom.style.display = 'none';\n      this.bdrAFTop.style.display = 'none';\n    }\n  };\n\n  Selection.prototype.updateValue = function (rIdx, cIdx, cell) {\n    var args = this.createBeforeAutoFill(rIdx, cIdx, cell);\n\n    if (!args.cancel) {\n      var col = this.parent.getColumnByIndex(cIdx);\n\n      if (this.parent.editModule && cell) {\n        if (col.type === 'number') {\n          this.parent.editModule.updateCell(rIdx, col.field, parseInt(args.value, 10));\n        } else {\n          this.parent.editModule.updateCell(rIdx, col.field, args.value);\n        }\n      }\n    }\n  };\n\n  Selection.prototype.createBeforeAutoFill = function (rowIndex, colIndex, cell) {\n    var col = this.parent.getColumnByIndex(colIndex);\n    var args = {\n      column: col,\n      value: cell.innerText\n    };\n    this.parent.trigger(events.beforeAutoFill, args);\n    return args;\n  };\n\n  Selection.prototype.getAutoFillCells = function (rowIndex, startCellIdx) {\n    var cls = '.e-cellselectionbackground';\n    var cells = [].slice.call(this.parent.getDataRows()[rowIndex].querySelectorAll(cls));\n\n    if (this.parent.isFrozenGrid()) {\n      cells = cells.concat([].slice.call(this.parent.getMovableDataRows()[rowIndex].querySelectorAll(cls)));\n\n      if (this.parent.getFrozenMode() === literals.leftRight) {\n        cells = cells.concat([].slice.call(this.parent.getFrozenRightDataRows()[rowIndex].querySelectorAll(cls)));\n      }\n    }\n\n    return cells;\n  };\n  /* tslint:disable-next-line:max-func-body-length */\n\n\n  Selection.prototype.selectLikeAutoFill = function (e, isApply) {\n    var startrowIdx = parseInt(parentsUntil(this.startAFCell, literals.row).getAttribute(literals.ariaRowIndex), 10);\n    var startCellIdx = parseInt(this.startAFCell.getAttribute(literals.ariaColIndex), 10);\n    var endrowIdx = parseInt(parentsUntil(this.endAFCell, literals.row).getAttribute(literals.ariaRowIndex), 10);\n    var endCellIdx = parseInt(this.endAFCell.getAttribute(literals.ariaColIndex), 10);\n    var rowLen = this.selectedRowCellIndexes.length - 1;\n    var colLen = this.selectedRowCellIndexes[0].cellIndexes.length - 1;\n\n    switch (true) {\n      //direction         \n      case !isApply && this.endAFCell.classList.contains('e-cellselectionbackground') && !!parentsUntil(e.target, literals.rowCell):\n        this.startAFCell = this.parent.getCellFromIndex(startrowIdx, startCellIdx);\n        this.endAFCell = this.parent.getCellFromIndex(startrowIdx + rowLen, startCellIdx + colLen);\n        this.drawAFBorders();\n        break;\n\n      case this.autoFillRLselection && startCellIdx + colLen < endCellIdx && //right\n      endCellIdx - startCellIdx - colLen + 1 > endrowIdx - startrowIdx - rowLen // right bottom\n      && endCellIdx - startCellIdx - colLen + 1 > startrowIdx - endrowIdx:\n        //right top\n        this.endAFCell = this.parent.getCellFromIndex(startrowIdx + rowLen, endCellIdx);\n        endrowIdx = parseInt(parentsUntil(this.endAFCell, literals.row).getAttribute(literals.ariaRowIndex), 10);\n        endCellIdx = parseInt(this.endAFCell.getAttribute(literals.ariaColIndex), 10);\n\n        if (!isApply) {\n          this.drawAFBorders();\n        } else {\n          var cellIdx = parseInt(this.endCell.getAttribute(literals.ariaColIndex), 10);\n\n          for (var i = startrowIdx; i <= endrowIdx; i++) {\n            var cells = this.getAutoFillCells(i, startCellIdx);\n            var c = 0;\n\n            for (var j = cellIdx + 1; j <= endCellIdx; j++) {\n              if (c > colLen) {\n                c = 0;\n              }\n\n              this.updateValue(i, j, cells[c]);\n              c++;\n            }\n          }\n\n          this.selectCellsByRange({\n            rowIndex: startrowIdx,\n            cellIndex: this.startCellIndex\n          }, {\n            rowIndex: endrowIdx,\n            cellIndex: endCellIdx\n          });\n        }\n\n        break;\n\n      case this.autoFillRLselection && startCellIdx > endCellIdx && // left\n      startCellIdx - endCellIdx + 1 > endrowIdx - startrowIdx - rowLen && //left top\n      startCellIdx - endCellIdx + 1 > startrowIdx - endrowIdx:\n        // left bottom\n        this.startAFCell = this.parent.getCellFromIndex(startrowIdx, endCellIdx);\n        this.endAFCell = this.endCell;\n\n        if (!isApply) {\n          this.drawAFBorders();\n        } else {\n          for (var i = startrowIdx; i <= startrowIdx + rowLen; i++) {\n            var cells = this.getAutoFillCells(i, startCellIdx);\n            cells.reverse();\n            var c = 0;\n\n            for (var j = this.startCellIndex - 1; j >= endCellIdx; j--) {\n              if (c > colLen) {\n                c = 0;\n              }\n\n              this.updateValue(i, j, cells[c]);\n              c++;\n            }\n          }\n\n          this.selectCellsByRange({\n            rowIndex: startrowIdx,\n            cellIndex: endCellIdx\n          }, {\n            rowIndex: startrowIdx + rowLen,\n            cellIndex: this.startCellIndex + colLen\n          });\n        }\n\n        break;\n\n      case startrowIdx > endrowIdx:\n        //up\n        this.startAFCell = this.parent.getCellFromIndex(endrowIdx, startCellIdx);\n        this.endAFCell = this.endCell;\n\n        if (!isApply) {\n          this.drawAFBorders();\n        } else {\n          var trIdx = parseInt(this.endCell.parentElement.getAttribute(literals.ariaRowIndex), 10);\n          var r = trIdx;\n\n          for (var i = startrowIdx - 1; i >= endrowIdx; i--) {\n            if (r === this.startIndex - 1) {\n              r = trIdx;\n            }\n\n            var cells = this.getAutoFillCells(r, startCellIdx);\n            var c = 0;\n            r--;\n\n            for (var j = this.startCellIndex; j <= this.startCellIndex + colLen; j++) {\n              this.updateValue(i, j, cells[c]);\n              c++;\n            }\n          }\n\n          this.selectCellsByRange({\n            rowIndex: endrowIdx,\n            cellIndex: startCellIdx + colLen\n          }, {\n            rowIndex: startrowIdx + rowLen,\n            cellIndex: startCellIdx\n          });\n        }\n\n        break;\n\n      default:\n        //down\n        this.endAFCell = this.parent.getCellFromIndex(endrowIdx, startCellIdx + colLen);\n\n        if (!isApply) {\n          this.drawAFBorders();\n        } else {\n          var trIdx = parseInt(this.endCell.parentElement.getAttribute(literals.ariaRowIndex), 10);\n          var r = this.startIndex;\n\n          for (var i = trIdx + 1; i <= endrowIdx; i++) {\n            if (r === trIdx + 1) {\n              r = this.startIndex;\n            }\n\n            var cells = this.getAutoFillCells(r, startCellIdx);\n            r++;\n            var c = 0;\n\n            for (var m = this.startCellIndex; m <= this.startCellIndex + colLen; m++) {\n              this.updateValue(i, m, cells[c]);\n              c++;\n            }\n          }\n\n          this.selectCellsByRange({\n            rowIndex: trIdx - rowLen,\n            cellIndex: startCellIdx\n          }, {\n            rowIndex: endrowIdx,\n            cellIndex: startCellIdx + colLen\n          });\n        }\n\n        break;\n    }\n  };\n\n  Selection.prototype.mouseUpHandler = function (e) {\n    document.body.classList.remove('e-disableuserselect');\n\n    if (this.element) {\n      remove(this.element);\n    }\n\n    if (this.isDragged && this.selectedRowCellIndexes.length === 1 && this.selectedRowCellIndexes[0].cellIndexes.length === 1) {\n      this.mUPTarget = parentsUntil(e.target, literals.rowCell);\n    } else {\n      this.mUPTarget = null;\n    }\n\n    if (this.isDragged && !this.isAutoFillSel && this.selectionSettings.mode === 'Cell') {\n      var target = e.target;\n      var rowIndex = parseInt(target.parentElement.getAttribute(literals.ariaRowIndex), 10);\n      var cellIndex = parseInt(target.getAttribute(literals.ariaColIndex), 10);\n      this.isDragged = false;\n      this.clearCellSelection();\n      this.selectCellsByRange({\n        rowIndex: this.startDIndex,\n        cellIndex: this.startDCellIndex\n      }, {\n        rowIndex: rowIndex,\n        cellIndex: cellIndex\n      });\n    }\n\n    this.isDragged = false;\n    this.updateAutoFillPosition();\n\n    if (this.isAutoFillSel) {\n      var lastCell = parentsUntil(e.target, literals.rowCell);\n      this.endAFCell = lastCell ? lastCell : this.endCell === this.endAFCell ? this.startAFCell : this.endAFCell;\n      this.startAFCell = this.startCell;\n      this.updateStartCellsIndex();\n      this.selectLikeAutoFill(e, true);\n      this.updateAutoFillPosition();\n      this.hideAFBorders();\n      this.positionBorders();\n      this.isAutoFillSel = false;\n    }\n\n    EventHandler.remove(this.parent.getContent(), 'mousemove', this.mouseMoveHandler);\n\n    if (this.parent.frozenRows) {\n      EventHandler.remove(this.parent.getHeaderContent(), 'mousemove', this.mouseMoveHandler);\n    }\n\n    EventHandler.remove(document, 'mouseup', this.mouseUpHandler);\n  };\n\n  Selection.prototype.hideAutoFill = function () {\n    if (this.autofill) {\n      this.autofill.style.display = 'none';\n    }\n  };\n  /**\n   * @hidden\n   */\n\n\n  Selection.prototype.updateAutoFillPosition = function () {\n    if (this.parent.enableAutoFill && !this.parent.isEdit && this.selectionSettings.cellSelectionMode.indexOf('Box') > -1 && !this.isRowType() && !this.isSingleSel() && this.selectedRowCellIndexes.length) {\n      var index = parseInt(this.target.getAttribute(literals.ariaColIndex), 10);\n      var rindex = parseInt(this.target.getAttribute('index'), 10);\n      var rowIndex = this.selectedRowCellIndexes[this.selectedRowCellIndexes.length - 1].rowIndex;\n      var cells = this.getAutoFillCells(rowIndex, index).filter(function (ele) {\n        return ele.style.display === '';\n      });\n      var col = this.parent.getColumnByIndex(index);\n      var isFrozenCol = col.getFreezeTableName() === 'movable';\n      var isFrozenRow = rindex < this.parent.frozenRows;\n      var isFrozenRight = this.parent.getFrozenMode() === literals.leftRight && col.getFreezeTableName() === literals.frozenRight;\n\n      if (!select('#' + this.parent.element.id + '_autofill', parentsUntil(this.target, literals.table))) {\n        if (select('#' + this.parent.element.id + '_autofill', this.parent.element)) {\n          select('#' + this.parent.element.id + '_autofill', this.parent.element).remove();\n        }\n\n        this.autofill = createElement('div', {\n          className: 'e-autofill',\n          id: this.parent.element.id + '_autofill'\n        });\n        this.autofill.style.display = 'none';\n        !isFrozenRow ? !isFrozenCol ? this.parent.getContentTable().parentElement.appendChild(this.autofill) : this.parent.contentModule.getMovableContent().appendChild(this.autofill) : !isFrozenCol ? this.parent.getHeaderTable().parentElement.appendChild(this.autofill) : this.parent.headerModule.getMovableHeader().appendChild(this.autofill);\n\n        if (isFrozenRight) {\n          isFrozenRow ? this.parent.getFrozenRightHeader().appendChild(this.autofill) : this.parent.getFrozenRightContent().appendChild(this.autofill);\n        }\n      }\n\n      var cell = cells[cells.length - 1];\n\n      if (cell && cell.offsetParent) {\n        var clientRect = cell.getBoundingClientRect();\n        var parentOff = cell.offsetParent.getBoundingClientRect();\n        var colWidth = this.isLastCell(cell) ? 4 : 0;\n        var rowHeight = this.isLastRow(cell) ? 3 : 0;\n\n        if (!this.parent.enableRtl) {\n          this.autofill.style.left = clientRect.left - parentOff.left + clientRect.width - 4 - colWidth + 'px';\n        } else {\n          this.autofill.style.right = parentOff.right - clientRect.right + clientRect.width - 4 - colWidth + 'px';\n        }\n\n        this.autofill.style.top = clientRect.top - parentOff.top + clientRect.height - 5 - rowHeight + 'px';\n      }\n\n      this.autofill.style.display = '';\n    } else {\n      this.hideAutoFill();\n    }\n  };\n\n  Selection.prototype.mouseDownHandler = function (e) {\n    this.mouseButton = e.button;\n    var target = e.target;\n    var gObj = this.parent;\n    var isDrag;\n    var gridElement = parentsUntil(target, 'e-grid');\n\n    if (gridElement && gridElement.id !== gObj.element.id || parentsUntil(target, literals.headerContent) && !this.parent.frozenRows || parentsUntil(target, 'e-editedbatchcell') || parentsUntil(target, literals.editedRow)) {\n      return;\n    }\n\n    if (e.shiftKey || e.ctrlKey) {\n      e.preventDefault();\n    }\n\n    if (parentsUntil(target, literals.rowCell) && !e.shiftKey && !e.ctrlKey) {\n      if (gObj.selectionSettings.cellSelectionMode.indexOf('Box') > -1 && !this.isRowType() && !this.isSingleSel()) {\n        this.isCellDrag = true;\n        isDrag = true;\n      } else if (gObj.allowRowDragAndDrop && !gObj.isEdit && !this.parent.selectionSettings.checkboxOnly) {\n        if (!this.isRowType() || this.isSingleSel() || closest(target, 'td').classList.contains('e-selectionbackground')) {\n          this.isDragged = false;\n          return;\n        }\n\n        isDrag = true;\n        this.element = this.parent.createElement('div', {\n          className: 'e-griddragarea'\n        });\n        gObj.getContent().appendChild(this.element);\n      }\n\n      if (isDrag) {\n        this.enableDrag(e, true);\n      }\n    }\n\n    this.updateStartEndCells();\n\n    if (target.classList.contains('e-autofill') || target.classList.contains('e-xlsel')) {\n      this.isCellDrag = true;\n      this.isAutoFillSel = true;\n      this.enableDrag(e);\n    }\n  };\n\n  Selection.prototype.updateStartEndCells = function () {\n    var cells = [].slice.call(this.parent.element.getElementsByClassName('e-cellselectionbackground'));\n    this.startCell = cells[0];\n    this.endCell = cells[cells.length - 1];\n\n    if (this.startCell) {\n      this.startIndex = parseInt(this.startCell.parentElement.getAttribute(literals.ariaRowIndex), 10);\n      this.startCellIndex = parseInt(parentsUntil(this.startCell, literals.rowCell).getAttribute(literals.ariaColIndex), 10);\n    }\n  };\n\n  Selection.prototype.updateStartCellsIndex = function () {\n    if (this.startCell) {\n      this.startIndex = parseInt(this.startCell.parentElement.getAttribute(literals.ariaRowIndex), 10);\n      this.startCellIndex = parseInt(parentsUntil(this.startCell, literals.rowCell).getAttribute(literals.ariaColIndex), 10);\n    }\n  };\n\n  Selection.prototype.enableDrag = function (e, isUpdate) {\n    var gObj = this.parent;\n\n    if (isUpdate) {\n      var tr = closest(e.target, 'tr');\n      this.startDIndex = parseInt(tr.getAttribute(literals.ariaRowIndex), 10);\n      this.startDCellIndex = parseInt(parentsUntil(e.target, literals.rowCell).getAttribute(literals.ariaColIndex), 10);\n    }\n\n    document.body.classList.add('e-disableuserselect');\n    var gBRect = gObj.element.getBoundingClientRect();\n    var postion = getPosition(e);\n    this.x = postion.x - gBRect.left;\n    this.y = postion.y - gBRect.top;\n    EventHandler.add(gObj.getContent(), 'mousemove', this.mouseMoveHandler, this);\n\n    if (this.parent.frozenRows) {\n      EventHandler.add(gObj.getHeaderContent(), 'mousemove', this.mouseMoveHandler, this);\n    }\n\n    EventHandler.add(document, 'mouseup', this.mouseUpHandler, this);\n  };\n\n  Selection.prototype.clearSelAfterRefresh = function (e) {\n    var isInfiniteScroll = this.parent.enableInfiniteScrolling && e.requestType === 'infiniteScroll';\n\n    if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection && !isInfiniteScroll) {\n      this.clearSelection();\n    }\n  };\n  /**\n   * @hidden\n   */\n\n\n  Selection.prototype.addEventListener = function () {\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    this.evtHandlers = [{\n      event: events.uiUpdate,\n      handler: this.enableAfterRender\n    }, {\n      event: events.initialEnd,\n      handler: this.initializeSelection\n    }, {\n      event: events.rowSelectionComplete,\n      handler: this.onActionComplete\n    }, {\n      event: events.cellSelectionComplete,\n      handler: this.onActionComplete\n    }, {\n      event: events.inBoundModelChanged,\n      handler: this.onPropertyChanged\n    }, {\n      event: events.cellFocused,\n      handler: this.onCellFocused\n    }, {\n      event: events.beforeFragAppend,\n      handler: this.clearSelAfterRefresh\n    }, {\n      event: events.columnPositionChanged,\n      handler: this.columnPositionChanged\n    }, {\n      event: events.contentReady,\n      handler: this.initialEnd\n    }, {\n      event: events.rowsRemoved,\n      handler: this.rowsRemoved\n    }, {\n      event: events.headerRefreshed,\n      handler: this.refreshHeader\n    }];\n    addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n    this.actionBeginFunction = this.actionBegin.bind(this);\n    this.actionCompleteFunction = this.actionComplete.bind(this);\n    this.parent.addEventListener(events.actionBegin, this.actionBeginFunction);\n    this.parent.addEventListener(events.actionComplete, this.actionCompleteFunction);\n    this.addEventListener_checkbox();\n  };\n  /**\n   * @hidden\n   */\n\n\n  Selection.prototype.removeEventListener = function () {\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    addRemoveEventListener(this.parent, this.evtHandlers, false);\n    this.parent.removeEventListener(events.actionBegin, this.actionBeginFunction);\n    this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunction);\n    this.removeEventListener_checkbox();\n  };\n\n  Selection.prototype.wireEvents = function () {\n    this.isMacOS = navigator.userAgent.indexOf('Mac OS') !== -1;\n\n    if (this.isMacOS) {\n      EventHandler.add(this.parent.element, 'keydown', this.keyDownHandler, this);\n      EventHandler.add(this.parent.element, 'keyup', this.keyUpHandler, this);\n    }\n  };\n\n  Selection.prototype.unWireEvents = function () {\n    if (this.isMacOS) {\n      EventHandler.remove(this.parent.element, 'keydown', this.keyDownHandler);\n      EventHandler.remove(this.parent.element, 'keyup', this.keyUpHandler);\n    }\n  };\n\n  Selection.prototype.columnPositionChanged = function () {\n    if (!this.parent.isPersistSelection) {\n      this.clearSelection();\n    }\n  };\n\n  Selection.prototype.refreshHeader = function () {\n    this.setCheckAllState();\n  };\n\n  Selection.prototype.rowsRemoved = function (e) {\n    for (var i = 0; i < e.records.length; i++) {\n      delete this.selectedRowState[e.records[i][this.primaryKey]];\n      --this.totalRecordsCount;\n    }\n\n    this.setCheckAllState();\n  };\n\n  ;\n\n  Selection.prototype.beforeFragAppend = function (e) {\n    if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection) {\n      this.clearSelection();\n    }\n  };\n\n  ;\n\n  Selection.prototype.getCheckAllBox = function () {\n    return this.parent.getHeaderContent().querySelector('.e-checkselectall');\n  };\n\n  Selection.prototype.enableAfterRender = function (e) {\n    if (e.module === this.getModuleName() && e.enable) {\n      this.render();\n      this.initPerisistSelection();\n    }\n  };\n\n  Selection.prototype.render = function (e) {\n    EventHandler.add(this.parent.getContent(), 'mousedown', this.mouseDownHandler, this);\n    EventHandler.add(this.parent.getHeaderContent(), 'mousedown', this.mouseDownHandler, this);\n  };\n\n  Selection.prototype.onPropertyChanged = function (e) {\n    if (e.module !== this.getModuleName()) {\n      return;\n    }\n\n    var gObj = this.parent;\n\n    if (!isNullOrUndefined(e.properties.type) && this.selectionSettings.type === 'Single') {\n      if (this.selectedRowCellIndexes.length > 1) {\n        this.clearCellSelection();\n        this.prevCIdxs = undefined;\n      }\n\n      if (this.selectedRowIndexes.length > 1) {\n        this.clearRowSelection();\n        this.prevRowIndex = undefined;\n      }\n\n      if (this.selectedColumnsIndexes.length > 1) {\n        this.clearColumnSelection();\n        this.prevColIndex = undefined;\n      }\n\n      this.enableSelectMultiTouch = false;\n      this.hidePopUp();\n    }\n\n    if (!isNullOrUndefined(e.properties.mode) || !isNullOrUndefined(e.properties.cellSelectionMode)) {\n      this.clearSelection();\n      this.prevRowIndex = undefined;\n      this.prevCIdxs = undefined;\n      this.prevColIndex = undefined;\n    }\n\n    this.isPersisted = true;\n    this.checkBoxSelectionChanged();\n    this.isPersisted = false;\n    this.initPerisistSelection();\n    var checkboxColumn = this.parent.getColumns().filter(function (col) {\n      return col.type === 'checkbox';\n    });\n\n    if (checkboxColumn.length) {\n      gObj.isCheckBoxSelection = !(this.selectionSettings.checkboxMode === 'ResetOnRowClick');\n    }\n\n    this.drawBorders();\n  };\n\n  Selection.prototype.hidePopUp = function () {\n    if (this.parent.element.querySelector('.e-gridpopup').getElementsByClassName('e-rowselect').length) {\n      this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n    }\n  };\n\n  Selection.prototype.initialEnd = function (e) {\n    var isFrozen = this.parent.isFrozenGrid();\n    var isLeftRightFrozen = this.parent.getFrozenMode() === literals.leftRight;\n\n    if (!isFrozen || isFrozen && !isLeftRightFrozen && !e.args.isFrozen || isLeftRightFrozen && e.args.renderFrozenRightContent) {\n      this.parent.off(events.contentReady, this.initialEnd);\n      this.selectRow(this.parent.selectedRowIndex);\n    }\n  };\n\n  Selection.prototype.checkBoxSelectionChanged = function () {\n    this.parent.off(events.contentReady, this.checkBoxSelectionChanged);\n    var gobj = this.parent;\n    var checkboxColumn = gobj.getColumns().filter(function (col) {\n      return col.type === 'checkbox';\n    });\n\n    if (checkboxColumn.length > 0) {\n      gobj.isCheckBoxSelection = true;\n      this.chkField = checkboxColumn[0].field;\n      this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n\n      if (isNullOrUndefined(this.totalRecordsCount)) {\n        this.totalRecordsCount = this.getCurrentBatchRecordChanges().length;\n      }\n\n      if (this.isSingleSel()) {\n        gobj.selectionSettings.type = 'Multiple';\n        gobj.dataBind();\n      } else {\n        this.initPerisistSelection();\n      }\n    }\n\n    if (!gobj.isCheckBoxSelection && !this.isPersisted) {\n      this.chkField = null;\n      this.initPerisistSelection();\n    }\n  };\n\n  Selection.prototype.initPerisistSelection = function () {\n    var gobj = this.parent;\n\n    if (this.parent.selectionSettings.persistSelection && this.parent.getPrimaryKeyFieldNames().length > 0) {\n      gobj.isPersistSelection = true;\n      this.ensureCheckboxFieldSelection();\n    } else if (this.parent.getPrimaryKeyFieldNames().length > 0) {\n      gobj.isPersistSelection = false;\n      this.ensureCheckboxFieldSelection();\n    } else {\n      gobj.isPersistSelection = false;\n      this.selectedRowState = {};\n    }\n  };\n\n  Selection.prototype.ensureCheckboxFieldSelection = function () {\n    var gobj = this.parent;\n    this.primaryKey = this.parent.getPrimaryKeyFieldNames()[0];\n\n    if (!gobj.enableVirtualization && this.chkField && (gobj.isPersistSelection && Object.keys(this.selectedRowState).length === 0 || !gobj.isPersistSelection)) {\n      var data = this.parent.getDataModule();\n      var query = new Query().where(this.chkField, 'equal', true);\n\n      if (!query.params) {\n        query.params = this.parent.query.params;\n      }\n\n      var dataManager = data.getData({}, query);\n      var proxy_1 = this;\n      this.parent.showSpinner();\n      dataManager.then(function (e) {\n        proxy_1.dataSuccess(e.result);\n        proxy_1.refreshPersistSelection();\n        proxy_1.parent.hideSpinner();\n      });\n    }\n  };\n\n  Selection.prototype.dataSuccess = function (res) {\n    for (var i = 0; i < res.length; i++) {\n      if (isNullOrUndefined(this.selectedRowState[res[i][this.primaryKey]]) && res[i][this.chkField]) {\n        this.selectedRowState[res[i][this.primaryKey]] = res[i][this.chkField];\n      }\n    }\n\n    this.persistSelectedData = res;\n  };\n\n  Selection.prototype.setRowSelection = function (state) {\n    if (!this.parent.getDataModule().isRemote() && !isBlazor()) {\n      if (state) {\n        if (this.parent.groupSettings.columns.length) {\n          for (var _i = 0, _a = this.getData().records; _i < _a.length; _i++) {\n            var data = _a[_i];\n            this.selectedRowState[data[this.primaryKey]] = true;\n          }\n        } else {\n          for (var _b = 0, _c = this.getData(); _b < _c.length; _b++) {\n            var data = _c[_b];\n            this.selectedRowState[data[this.primaryKey]] = true;\n          }\n        }\n      } else {\n        this.selectedRowState = {};\n      } // (this.getData()).forEach(function (data) {\n      //     this.selectedRowState[data[this.primaryKey]] = true;\n      // })\n\n    }\n  };\n\n  Selection.prototype.getData = function () {\n    return this.parent.getDataModule().dataManager.executeLocal(this.parent.getDataModule().generateQuery(true));\n  };\n\n  Selection.prototype.refreshPersistSelection = function () {\n    var rows = this.parent.getRows();\n\n    if (this.parent.isCheckBoxSelection && this.parent.isFrozenGrid()) {\n      var mtbody = this.parent.getMovableContentTbody();\n\n      if (mtbody.querySelector('.e-checkselect')) {\n        rows = this.parent.getMovableRows();\n      }\n\n      if (this.parent.getFrozenMode() === literals.leftRight) {\n        var frtbody = this.parent.getFrozenRightContentTbody();\n\n        if (frtbody.querySelector('.e-checkselect')) {\n          rows = this.parent.getFrozenRightRows();\n        }\n      }\n    }\n\n    this.totalRecordsCount = this.parent.getCurrentViewRecords().length;\n\n    if (this.parent.allowPaging) {\n      this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n    }\n\n    if (rows !== null && rows.length > 0 && (this.parent.isPersistSelection || this.chkField)) {\n      var indexes = [];\n\n      for (var j = 0; j < rows.length; j++) {\n        var rowObj = this.getRowObj(rows[j]);\n        var pKey = rowObj ? rowObj.data ? rowObj.data[this.primaryKey] : null : null;\n\n        if (pKey === null) {\n          return;\n        }\n\n        var checkState = void 0;\n        var chkBox = rows[j].querySelector('.e-checkselect');\n\n        if (this.selectedRowState[pKey] || this.parent.checkAllRows === 'Check' && this.totalRecordsCount === Object.keys(this.selectedRowState).length && this.chkAllCollec.indexOf(pKey) < 0 || this.parent.checkAllRows === 'Uncheck' && this.chkAllCollec.indexOf(pKey) > 0 || this.parent.checkAllRows === 'Intermediate' && !isNullOrUndefined(this.chkField) && rowObj.data[this.chkField]) {\n          indexes.push(parseInt(rows[j].getAttribute(literals.ariaRowIndex), 10));\n          checkState = true;\n        } else {\n          checkState = false;\n\n          if (this.checkedTarget !== chkBox && this.parent.isCheckBoxSelection) {\n            removeAddCboxClasses(chkBox.nextElementSibling, checkState);\n          }\n        }\n\n        this.updatePersistCollection(rows[j], checkState);\n      }\n\n      this.isSingleSel() && indexes.length > 0 ? this.selectRow(indexes[0], true) : this.selectRows(indexes);\n    }\n\n    if (this.parent.isCheckBoxSelection && this.getCurrentBatchRecordChanges().length > 0) {\n      this.setCheckAllState();\n    }\n  };\n\n  Selection.prototype.actionBegin = function (e) {\n    if (e.requestType === 'save' && this.parent.isPersistSelection) {\n      var editChkBox = this.parent.element.querySelector('.e-edit-checkselect');\n\n      if (!isNullOrUndefined(editChkBox)) {\n        var row = closest(editChkBox, '.' + literals.editedRow);\n\n        if (row) {\n          if (this.parent.editSettings.mode === 'Dialog') {\n            row = this.parent.element.querySelector('.e-dlgeditrow');\n          }\n\n          var rowObj = this.getRowObj(row);\n\n          if (!rowObj) {\n            return;\n          }\n\n          this.selectedRowState[rowObj.data[this.primaryKey]] = rowObj.isSelected = editChkBox.checked;\n        } else {\n          this.isCheckedOnAdd = editChkBox.checked;\n        }\n      }\n    }\n  };\n\n  Selection.prototype.actionComplete = function (e) {\n    if (e.requestType === 'save' && this.parent.isPersistSelection) {\n      if (e.action === 'add' && this.isCheckedOnAdd) {\n        var rowObj = this.parent.getRowObjectFromUID(this.parent.getRows()[e.selectedRow].getAttribute('data-uid'));\n        this.selectedRowState[rowObj.data[this.primaryKey]] = rowObj.isSelected = this.isCheckedOnAdd;\n      }\n\n      this.refreshPersistSelection();\n    }\n\n    if (e.requestType === 'delete' && this.parent.isPersistSelection) {\n      var records = e.data;\n      var data = records.slice();\n\n      for (var i = 0; i < data.length; i++) {\n        if (!isNullOrUndefined(data[i][this.primaryKey])) {\n          this.updatePersistDelete(data[i][this.primaryKey]);\n        }\n      }\n\n      this.setCheckAllState();\n      this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n    }\n\n    if (e.requestType === 'paging') {\n      this.prevRowIndex = undefined;\n      this.prevCIdxs = undefined;\n      this.prevECIdxs = undefined;\n    }\n  };\n\n  Selection.prototype.onDataBound = function () {\n    if (!this.parent.enableVirtualization && this.parent.isPersistSelection) {\n      if (this.selectedRecords.length) {\n        this.isPrevRowSelection = true;\n      }\n\n      this.refreshPersistSelection();\n    }\n\n    if (this.parent.enableVirtualization) {\n      this.setCheckAllState();\n    }\n\n    this.initialRowSelection = this.isRowType() && this.parent.element.querySelectorAll('.e-selectionbackground') && this.parent.getSelectedRows().length ? true : false;\n\n    if (this.parent.isCheckBoxSelection && !this.initialRowSelection) {\n      var totalRecords = this.parent.getRowsObject();\n      var indexes = [];\n\n      for (var i = 0; i < totalRecords.length; i++) {\n        if (totalRecords[i].isSelected) {\n          indexes.push(i);\n        }\n      }\n\n      if (indexes.length) {\n        this.selectRows(indexes);\n      }\n\n      this.initialRowSelection = true;\n    }\n  };\n\n  Selection.prototype.updatePersistSelectedData = function (checkState) {\n    if (this.parent.isPersistSelection) {\n      var rows = this.parent.getRows();\n\n      for (var i = 0; i < rows.length; i++) {\n        this.updatePersistCollection(rows[i], checkState);\n      }\n\n      if (this.parent.checkAllRows === 'Uncheck') {\n        this.setRowSelection(false);\n        this.persistSelectedData = this.parent.getDataModule().isRemote() ? this.persistSelectedData : [];\n      } else if (this.parent.checkAllRows === 'Check') {\n        this.setRowSelection(true);\n        this.persistSelectedData = !this.parent.getDataModule().isRemote() && !isBlazor() ? this.parent.groupSettings.columns.length ? this.getData().records.slice() : this.getData().slice() : this.persistSelectedData;\n      }\n    }\n  };\n\n  Selection.prototype.checkSelectAllAction = function (checkState) {\n    var cRenderer = this.getRenderer();\n    var editForm = this.parent.element.querySelector('.e-gridform');\n    this.checkedTarget = this.getCheckAllBox();\n\n    if (checkState && this.getCurrentBatchRecordChanges().length) {\n      this.parent.checkAllRows = 'Check';\n      this.updatePersistSelectedData(checkState);\n      this.selectRowsByRange(cRenderer.getVirtualRowIndex(0), cRenderer.getVirtualRowIndex(this.getCurrentBatchRecordChanges().length - 1));\n    } else {\n      this.parent.checkAllRows = 'Uncheck';\n      this.updatePersistSelectedData(checkState);\n      this.clearSelection();\n    }\n\n    this.chkAllCollec = [];\n\n    if (!isNullOrUndefined(editForm)) {\n      var editChkBox = editForm.querySelector('.e-edit-checkselect');\n\n      if (!isNullOrUndefined(editChkBox)) {\n        removeAddCboxClasses(editChkBox.nextElementSibling, checkState);\n      }\n    }\n  };\n\n  Selection.prototype.checkSelectAll = function (checkBox) {\n    var _this = this;\n\n    var stateStr = this.getCheckAllStatus(checkBox);\n    var state = stateStr === 'Check';\n    this.isHeaderCheckboxClicked = true;\n\n    if (stateStr === 'Intermediate') {\n      state = this.getCurrentBatchRecordChanges().some(function (data) {\n        return data[_this.primaryKey] in _this.selectedRowState;\n      });\n    }\n\n    if (this.parent.isPersistSelection && this.parent.allowPaging) {\n      this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n    }\n\n    this.checkSelectAllAction(!state);\n    this.target = null;\n\n    if (this.getCurrentBatchRecordChanges().length > 0) {\n      this.setCheckAllState();\n    }\n\n    this.triggerChkChangeEvent(checkBox, !state);\n  };\n\n  Selection.prototype.getCheckAllStatus = function (ele) {\n    var classes = ele ? ele.nextElementSibling.classList : this.getCheckAllBox().nextElementSibling.classList;\n    var status;\n\n    if (classes.contains('e-check')) {\n      status = 'Check';\n    } else if (classes.contains('e-uncheck')) {\n      status = 'Uncheck';\n    } else if (classes.contains('e-stop')) {\n      status = 'Intermediate';\n    } else {\n      status = 'None';\n    }\n\n    return status;\n  };\n\n  Selection.prototype.checkSelect = function (checkBox) {\n    var target = closest(this.checkedTarget, '.' + literals.rowCell);\n    var gObj = this.parent;\n    this.isMultiCtrlRequest = true;\n    var rIndex = 0;\n    this.isHeaderCheckboxClicked = false;\n\n    if (isGroupAdaptive(gObj)) {\n      var uid = target.parentElement.getAttribute('data-uid');\n      rIndex = gObj.getRows().map(function (m) {\n        return m.getAttribute('data-uid');\n      }).indexOf(uid);\n    } else {\n      rIndex = parseInt(target.parentElement.getAttribute(literals.ariaRowIndex), 10);\n    }\n\n    if (this.parent.isPersistSelection && this.parent.element.getElementsByClassName(literals.addedRow).length > 0 && this.parent.editSettings.newRowPosition === 'Top') {\n      ++rIndex;\n    }\n\n    this.rowCellSelectionHandler(rIndex, parseInt(target.getAttribute(literals.ariaColIndex), 10));\n    this.moveIntoUncheckCollection(closest(target, '.' + literals.row));\n    this.setCheckAllState();\n    this.isMultiCtrlRequest = false;\n    this.triggerChkChangeEvent(checkBox, checkBox.nextElementSibling.classList.contains('e-check'));\n  };\n\n  Selection.prototype.moveIntoUncheckCollection = function (row) {\n    if (this.parent.checkAllRows === 'Check' || this.parent.checkAllRows === 'Uncheck') {\n      var rowObj = this.getRowObj(row);\n      var pKey = rowObj && rowObj.data ? rowObj.data[this.primaryKey] : null;\n\n      if (!pKey) {\n        return;\n      }\n\n      if (this.chkAllCollec.indexOf(pKey) < 0) {\n        this.chkAllCollec.push(pKey);\n      } else {\n        this.chkAllCollec.splice(this.chkAllCollec.indexOf(pKey), 1);\n      }\n    }\n  };\n\n  Selection.prototype.triggerChkChangeEvent = function (checkBox, checkState) {\n    this.parent.trigger(events.checkBoxChange, {\n      checked: checkState,\n      selectedRowIndexes: this.parent.getSelectedRowIndexes(),\n      target: checkBox\n    });\n\n    if (!this.parent.isEdit) {\n      this.checkedTarget = null;\n    }\n  };\n\n  Selection.prototype.updateSelectedRowIndex = function (index) {\n    if (this.parent.isCheckBoxSelection && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) && !this.parent.getDataModule().isRemote() && !(isBlazor() && this.parent.isServerRendered)) {\n      if (this.parent.checkAllRows === 'Check') {\n        this.selectedRowIndexes = [];\n        var dataLength = this.getData().length;\n\n        for (var data = 0; data < dataLength; data++) {\n          this.selectedRowIndexes.push(data);\n        }\n      } else if (this.parent.checkAllRows === 'Uncheck') {\n        this.selectedRowIndexes = [];\n      } else {\n        if (index && this.parent.getRowByIndex(index).getAttribute('aria-selected') === 'false') {\n          var selectedVal = this.selectedRowIndexes.indexOf(index);\n          this.selectedRowIndexes.splice(selectedVal, 1);\n        }\n      }\n    }\n  };\n\n  ;\n\n  Selection.prototype.setCheckAllState = function (index, isInteraction) {\n    if (this.parent.isCheckBoxSelection || this.parent.selectionSettings.checkboxMode === 'ResetOnRowClick') {\n      var checkToSelectAll = void 0;\n      var checkedLen = Object.keys(this.selectedRowState).length;\n\n      if (!this.parent.isPersistSelection) {\n        checkedLen = this.selectedRowIndexes.length;\n        this.totalRecordsCount = this.getCurrentBatchRecordChanges().length;\n      }\n\n      var input = this.getCheckAllBox();\n\n      if (input) {\n        var spanEle = input.nextElementSibling;\n        removeClass([spanEle], ['e-check', 'e-stop', 'e-uncheck']);\n        setChecked(input, false);\n        input.indeterminate = false;\n\n        if (checkToSelectAll || checkedLen === this.totalRecordsCount && this.totalRecordsCount || (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) && !this.parent.allowPaging && !this.parent.getDataModule().isRemote() && !(isBlazor() && this.parent.isServerRendered) && checkedLen === this.getData().length) {\n          addClass([spanEle], ['e-check']);\n          setChecked(input, true);\n\n          if (isInteraction) {\n            this.getRenderer().setSelection(null, true, true);\n          }\n\n          this.parent.checkAllRows = 'Check';\n        } else if (!this.selectedRowIndexes.length || checkedLen === 0 && this.getCurrentBatchRecordChanges().length === 0) {\n          addClass([spanEle], ['e-uncheck']);\n\n          if (isInteraction) {\n            this.getRenderer().setSelection(null, false, true);\n          }\n\n          this.parent.checkAllRows = 'Uncheck';\n\n          if (checkedLen === 0 && this.getCurrentBatchRecordChanges().length === 0) {\n            addClass([spanEle.parentElement], ['e-checkbox-disabled']);\n          } else {\n            removeClass([spanEle.parentElement], ['e-checkbox-disabled']);\n          }\n        } else {\n          addClass([spanEle], ['e-stop']);\n          this.parent.checkAllRows = 'Intermediate';\n          input.indeterminate = true;\n        }\n\n        if ((this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) && !this.parent.allowPaging && !this.parent.getDataModule().isRemote()) {\n          this.updateSelectedRowIndex(index);\n        }\n      }\n    }\n  };\n\n  Selection.prototype.keyDownHandler = function (e) {\n    // Below are keyCode for command key in MAC OS. Safari/Chrome(91-Left command, 93-Right Command), Opera(17), FireFox(224)\n    if ((Browser.info.name === 'chrome' || Browser.info.name === 'safari') && (e.keyCode === 91 || e.keyCode === 93) || Browser.info.name === 'opera' && e.keyCode === 17 || Browser.info.name === 'mozilla' && e.keyCode === 224) {\n      this.cmdKeyPressed = true;\n    }\n  };\n\n  Selection.prototype.keyUpHandler = function (e) {\n    if ((Browser.info.name === 'chrome' || Browser.info.name === 'safari') && (e.keyCode === 91 || e.keyCode === 93) || Browser.info.name === 'opera' && e.keyCode === 17 || Browser.info.name === 'mozilla' && e.keyCode === 224) {\n      this.cmdKeyPressed = false;\n    }\n  };\n\n  Selection.prototype.clickHandler = function (e) {\n    var target = e.target;\n    this.actualTarget = target;\n\n    if (this.selectionSettings.persistSelection) {\n      this.deSelectedData = iterateExtend(this.persistSelectedData);\n    }\n\n    if (parentsUntil(target, literals.row) || parentsUntil(target, 'e-headerchkcelldiv') || this.selectionSettings.allowColumnSelection && target.classList.contains('e-headercell')) {\n      this.isInteracted = true;\n    }\n\n    this.isMultiCtrlRequest = e.ctrlKey || this.enableSelectMultiTouch || this.isMacOS && this.cmdKeyPressed;\n    this.isMultiShiftRequest = e.shiftKey;\n    this.popUpClickHandler(e);\n    var chkSelect = false;\n    this.preventFocus = true;\n    var checkBox;\n    var checkWrap = parentsUntil(target, 'e-checkbox-wrapper');\n    this.checkSelectAllClicked = checkWrap && checkWrap.getElementsByClassName('e-checkselectall') || this.selectionSettings.persistSelection && parentsUntil(target, literals.row) ? true : false;\n\n    if (checkWrap && checkWrap.querySelectorAll('.e-checkselect,.e-checkselectall').length > 0) {\n      checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n      chkSelect = true;\n    }\n\n    this.drawBorders();\n    this.updateAutoFillPosition();\n    target = parentsUntil(target, literals.rowCell);\n\n    if (target && target.parentElement.classList.contains(literals.row) && !this.parent.selectionSettings.checkboxOnly || chkSelect) {\n      if (this.parent.isCheckBoxSelection) {\n        this.isMultiCtrlRequest = true;\n      }\n\n      this.target = target;\n\n      if (!isNullOrUndefined(checkBox)) {\n        this.checkedTarget = checkBox;\n\n        if (checkBox.classList.contains('e-checkselectall')) {\n          this.checkSelectAll(checkBox);\n        } else {\n          this.checkSelect(checkBox);\n        }\n      } else {\n        var gObj = this.parent;\n        var rIndex = 0;\n\n        if (isGroupAdaptive(gObj)) {\n          var uid = target.parentElement.getAttribute('data-uid');\n          rIndex = gObj.getRows().map(function (m) {\n            return m.getAttribute('data-uid');\n          }).indexOf(uid);\n        } else {\n          rIndex = parseInt(target.parentElement.getAttribute(literals.ariaRowIndex), 10);\n        }\n\n        if (this.parent.isPersistSelection && this.parent.element.getElementsByClassName(literals.addedRow).length > 0) {\n          ++rIndex;\n        }\n\n        if (!this.mUPTarget || !this.mUPTarget.isEqualNode(target)) {\n          this.rowCellSelectionHandler(rIndex, parseInt(target.getAttribute(literals.ariaColIndex), 10));\n        }\n\n        this.parent.hoverFrozenRows(e);\n\n        if (this.parent.isCheckBoxSelection) {\n          this.moveIntoUncheckCollection(closest(target, '.' + literals.row));\n          this.setCheckAllState();\n        }\n      }\n\n      if (!this.parent.isCheckBoxSelection && Browser.isDevice && !this.isSingleSel()) {\n        this.showPopup(e);\n      }\n    } else if (e.target.classList.contains('e-headercell') && !e.target.classList.contains('e-stackedheadercell')) {\n      var uid = e.target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n      this.headerSelectionHandler(this.parent.getColumnIndexByUid(uid));\n    }\n\n    this.isMultiCtrlRequest = false;\n    this.isMultiShiftRequest = false;\n\n    if (isNullOrUndefined(closest(e.target, '.e-unboundcell'))) {\n      this.preventFocus = false;\n    }\n  };\n\n  Selection.prototype.popUpClickHandler = function (e) {\n    var target = e.target;\n\n    if (closest(target, '.e-headercell') || e.target.classList.contains(literals.rowCell) || closest(target, '.e-gridpopup')) {\n      if (target.classList.contains('e-rowselect')) {\n        if (!target.classList.contains('e-spanclicked')) {\n          target.classList.add('e-spanclicked');\n          this.enableSelectMultiTouch = true;\n        } else {\n          target.classList.remove('e-spanclicked');\n          this.enableSelectMultiTouch = false;\n          this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n        }\n      }\n    } else {\n      this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n    }\n  };\n\n  Selection.prototype.showPopup = function (e) {\n    if (!this.selectionSettings.enableSimpleMultiRowSelection) {\n      setCssInGridPopUp(this.parent.element.querySelector('.e-gridpopup'), e, 'e-rowselect e-icons e-icon-rowselect' + (!this.isSingleSel() && (this.selectedRecords.length > (this.parent.getFrozenColumns() ? 2 : 1) || this.selectedRowCellIndexes.length > 1) ? ' e-spanclicked' : ''));\n    }\n  };\n\n  Selection.prototype.rowCellSelectionHandler = function (rowIndex, cellIndex) {\n    var gObj = this.parent;\n\n    if (!this.isMultiCtrlRequest && !this.isMultiShiftRequest || this.isSingleSel()) {\n      if (!this.isDragged) {\n        this.selectRow(rowIndex, this.selectionSettings.enableToggle);\n      }\n\n      this.selectCell({\n        rowIndex: rowIndex,\n        cellIndex: cellIndex\n      }, this.selectionSettings.enableToggle);\n\n      if (this.selectedRowCellIndexes.length) {\n        this.updateAutoFillPosition();\n      }\n\n      this.drawBorders();\n    } else if (this.isMultiShiftRequest) {\n      if (this.parent.isCheckBoxSelection || !this.parent.isCheckBoxSelection && !closest(this.target, '.' + literals.rowCell).classList.contains(literals.gridChkBox)) {\n        this.selectRowsByRange(isUndefined(this.prevRowIndex) ? rowIndex : this.prevRowIndex, rowIndex);\n      } else {\n        this.addRowsToSelection([rowIndex]);\n      }\n\n      this.selectCellsByRange(isUndefined(this.prevCIdxs) ? {\n        rowIndex: rowIndex,\n        cellIndex: cellIndex\n      } : this.prevCIdxs, {\n        rowIndex: rowIndex,\n        cellIndex: cellIndex\n      });\n      this.updateAutoFillPosition();\n      this.drawBorders();\n    } else {\n      this.addRowsToSelection([rowIndex]);\n      this.addCellsToSelection([{\n        rowIndex: rowIndex,\n        cellIndex: cellIndex\n      }]);\n      this.showHideBorders('none');\n    }\n\n    this.isDragged = false;\n  };\n  /* tslint:disable-next-line:max-func-body-length */\n\n\n  Selection.prototype.onCellFocused = function (e) {\n    if (this.parent.frozenRows && e.container.isHeader && e.byKey) {\n      if (e.keyArgs.action === 'upArrow') {\n        if (this.parent.allowFiltering) {\n          e.isJump = e.element.tagName === 'INPUT' ? true : false;\n        } else {\n          e.isJump = e.element.tagName === 'TH' ? true : false;\n        }\n      } else {\n        if (e.keyArgs.action === 'downArrow') {\n          var rIdx = Number(e.element.parentElement.getAttribute(literals.ariaRowIndex));\n          e.isJump = rIdx === 0 ? true : false;\n        } else {\n          if (e.keyArgs.action === 'ctrlHome') {\n            e.isJump = true;\n          }\n        }\n      }\n    }\n\n    var clear = this.parent.isFrozenGrid() ? (e.container.isHeader && e.element.tagName !== 'TD' && e.isJump && !this.selectionSettings.allowColumnSelection || (e.container.isContent || e.element.tagName === 'TD') && !(e.container.isSelectable || e.element.tagName === 'TD')) && !(e.byKey && e.keyArgs.action === 'space') : (e.container.isHeader && e.isJump || e.container.isContent && !e.container.isSelectable) && !(e.byKey && e.keyArgs.action === 'space') && !(e.element.classList.contains('e-detailrowexpand') || e.element.classList.contains('e-detailrowcollapse'));\n    var headerAction = e.container.isHeader && e.element.tagName !== 'TD' && !closest(e.element, '.' + literals.rowCell) && !(e.byKey && e.keyArgs.action === 'space');\n\n    if (!e.byKey || clear) {\n      if (clear && !this.parent.isCheckBoxSelection) {\n        this.clearSelection();\n      }\n\n      return;\n    }\n\n    var _a = e.container.isContent ? e.container.indexes : e.indexes,\n        rowIndex = _a[0],\n        cellIndex = _a[1];\n\n    var prev = this.focus.getPrevIndexes();\n\n    if (this.parent.frozenRows) {\n      if (e.container.isHeader && (e.element.tagName === 'TD' || closest(e.element, '.' + literals.rowCell))) {\n        var thLen = this.parent.getHeaderTable().querySelector('thead').childElementCount;\n        rowIndex -= thLen;\n        prev.rowIndex = !isNullOrUndefined(prev.rowIndex) ? prev.rowIndex - thLen : null;\n      } else {\n        rowIndex += this.parent.frozenRows;\n        prev.rowIndex = prev.rowIndex === 0 || !isNullOrUndefined(prev.rowIndex) ? prev.rowIndex + this.parent.frozenRows : null;\n      }\n    }\n\n    if (this.parent.isFrozenGrid()) {\n      var cIdx = Number(e.element.getAttribute(literals.ariaColIndex));\n      var selectedIndexes = this.parent.getSelectedRowCellIndexes();\n\n      if (selectedIndexes.length && prev.cellIndex === 0) {\n        prev.cellIndex = selectedIndexes[selectedIndexes.length - 1].cellIndexes[0];\n      }\n\n      prev.cellIndex = !isNullOrUndefined(prev.cellIndex) ? prev.cellIndex === cellIndex ? cIdx : cIdx - 1 : null;\n      cellIndex = cIdx;\n    }\n\n    if ((headerAction || ['ctrlPlusA', 'escape'].indexOf(e.keyArgs.action) === -1 && e.keyArgs.action !== 'space' && rowIndex === prev.rowIndex && cellIndex === prev.cellIndex) && !this.selectionSettings.allowColumnSelection) {\n      return;\n    }\n\n    this.preventFocus = true;\n    var columnIndex = this.getKeyColIndex(e);\n\n    if (this.needColumnSelection) {\n      cellIndex = columnIndex;\n    }\n\n    switch (e.keyArgs.action) {\n      case 'downArrow':\n      case 'upArrow':\n      case 'enter':\n      case 'shiftEnter':\n        this.target = e.element;\n        this.applyDownUpKey(rowIndex, cellIndex);\n        break;\n\n      case 'rightArrow':\n      case 'leftArrow':\n        this.applyRightLeftKey(rowIndex, cellIndex);\n        break;\n\n      case 'shiftDown':\n      case 'shiftUp':\n        this.shiftDownKey(rowIndex, cellIndex);\n        break;\n\n      case 'shiftLeft':\n      case 'shiftRight':\n        this.applyShiftLeftRightKey(rowIndex, cellIndex);\n        break;\n\n      case 'home':\n      case 'end':\n        cellIndex = e.keyArgs.action === 'end' ? this.getLastColIndex(rowIndex) : 0;\n        this.applyHomeEndKey(rowIndex, cellIndex);\n        break;\n\n      case 'ctrlHome':\n      case 'ctrlEnd':\n        this.applyCtrlHomeEndKey(rowIndex, cellIndex);\n        break;\n\n      case 'escape':\n        this.clearSelection();\n        break;\n\n      case 'ctrlPlusA':\n        this.ctrlPlusA();\n        break;\n\n      case 'space':\n        this.applySpaceSelection(e.element);\n        break;\n\n      case 'tab':\n        if (this.parent.editSettings.allowNextRowEdit) {\n          this.selectRow(rowIndex);\n        }\n\n        break;\n    }\n\n    this.needColumnSelection = false;\n    this.preventFocus = false;\n    this.positionBorders();\n    this.updateAutoFillPosition();\n  };\n\n  Selection.prototype.getKeyColIndex = function (e) {\n    var uid;\n    var index = null;\n    var stackedHeader = e.element.querySelector('.e-stackedheadercelldiv');\n\n    if (this.selectionSettings.allowColumnSelection && parentsUntil(e.element, 'e-columnheader')) {\n      this.needColumnSelection = e.container.isHeader ? true : false;\n\n      if (stackedHeader) {\n        if (e.keyArgs.action === 'rightArrow' || e.keyArgs.action === 'leftArrow') {\n          return index;\n        }\n\n        uid = stackedHeader.getAttribute('e-mappinguid');\n        var innerColumn = this.getstackedColumns(this.parent.getColumnByUid(uid).columns);\n        var lastIndex = this.parent.getColumnIndexByUid(innerColumn[innerColumn.length - 1].uid);\n        var firstIndex = this.parent.getColumnIndexByUid(innerColumn[0].uid);\n        index = this.prevColIndex >= lastIndex ? firstIndex : lastIndex;\n      } else {\n        index = this.parent.getColumnIndexByUid(e.element.querySelector('.e-headercelldiv').getAttribute('e-mappinguid'));\n      }\n    }\n\n    return index;\n  };\n  /**\n   * Apply ctrl + A key selection\n   * @return {void}\n   * @hidden\n   */\n\n\n  Selection.prototype.ctrlPlusA = function () {\n    if (this.isRowType() && !this.isSingleSel()) {\n      this.selectRowsByRange(0, this.getCurrentBatchRecordChanges().length - 1);\n    }\n\n    if (this.isCellType() && !this.isSingleSel()) {\n      this.selectCellsByRange({\n        rowIndex: 0,\n        cellIndex: 0\n      }, {\n        rowIndex: this.parent.getRows().length - 1,\n        cellIndex: this.parent.getColumns().length - 1\n      });\n    }\n  };\n\n  Selection.prototype.applySpaceSelection = function (target) {\n    if (target.classList.contains('e-checkselectall')) {\n      this.checkedTarget = target;\n      this.checkSelectAll(this.checkedTarget);\n    } else {\n      if (target.classList.contains('e-checkselect')) {\n        this.checkedTarget = target;\n        this.checkSelect(this.checkedTarget);\n      }\n    }\n  };\n\n  Selection.prototype.applyDownUpKey = function (rowIndex, cellIndex) {\n    var gObj = this.parent;\n\n    if (this.parent.isCheckBoxSelection && this.parent.checkAllRows === 'Check' && !this.selectionSettings.persistSelection) {\n      this.checkSelectAllAction(false);\n      this.checkedTarget = null;\n    }\n\n    if (this.isRowType()) {\n      if (this.parent.frozenRows) {\n        this.selectRow(rowIndex, true);\n        this.applyUpDown(gObj.selectedRowIndex);\n      } else {\n        this.selectRow(rowIndex, true);\n        this.applyUpDown(gObj.selectedRowIndex);\n      }\n    }\n\n    if (this.isCellType()) {\n      this.selectCell({\n        rowIndex: rowIndex,\n        cellIndex: cellIndex\n      }, true);\n    }\n\n    if (this.selectionSettings.allowColumnSelection && this.needColumnSelection) {\n      this.selectColumn(cellIndex);\n    }\n  };\n\n  Selection.prototype.applyUpDown = function (rowIndex) {\n    if (rowIndex < 0) {\n      return;\n    }\n\n    if (!this.target) {\n      this.target = this.parent.getRows()[0].children[this.parent.groupSettings.columns.length || 0];\n    }\n\n    var cIndex = parseInt(this.target.getAttribute(literals.ariaColIndex), 10);\n    var frzCols = this.parent.getFrozenColumns();\n\n    if (frzCols) {\n      if (cIndex >= frzCols) {\n        this.target = this.contentRenderer.getMovableRowByIndex(rowIndex).getElementsByClassName(literals.rowCell)[cIndex - frzCols];\n      } else {\n        this.target = this.contentRenderer.getRowByIndex(rowIndex).getElementsByClassName(literals.rowCell)[cIndex];\n      }\n    } else {\n      this.target = this.contentRenderer.getRowByIndex(rowIndex).getElementsByClassName(literals.rowCell)[cIndex];\n    }\n\n    this.addAttribute(this.target);\n  };\n\n  Selection.prototype.applyRightLeftKey = function (rowIndex, cellIndex) {\n    var gObj = this.parent;\n\n    if (this.selectionSettings.allowColumnSelection && this.needColumnSelection) {\n      this.selectColumn(cellIndex);\n    } else if (this.isCellType()) {\n      this.selectCell({\n        rowIndex: rowIndex,\n        cellIndex: cellIndex\n      }, true);\n      this.addAttribute(this.target);\n    }\n  };\n\n  Selection.prototype.applyHomeEndKey = function (rowIndex, cellIndex) {\n    if (this.isCellType()) {\n      this.selectCell({\n        rowIndex: rowIndex,\n        cellIndex: cellIndex\n      }, true);\n    } else {\n      this.addAttribute(this.parent.getCellFromIndex(rowIndex, cellIndex));\n    }\n  };\n  /**\n   * Apply shift+down key selection\n   * @return {void}\n   * @hidden\n   */\n\n\n  Selection.prototype.shiftDownKey = function (rowIndex, cellIndex) {\n    var gObj = this.parent;\n    this.isMultiShiftRequest = true;\n\n    if (this.isRowType() && !this.isSingleSel()) {\n      if (!isUndefined(this.prevRowIndex)) {\n        this.selectRowsByRange(this.prevRowIndex, rowIndex);\n        this.applyUpDown(rowIndex);\n      } else {\n        this.selectRow(0, true);\n      }\n    }\n\n    if (this.isCellType() && !this.isSingleSel()) {\n      this.selectCellsByRange(this.prevCIdxs || {\n        rowIndex: 0,\n        cellIndex: 0\n      }, {\n        rowIndex: rowIndex,\n        cellIndex: cellIndex\n      });\n    }\n\n    this.isMultiShiftRequest = false;\n  };\n\n  Selection.prototype.applyShiftLeftRightKey = function (rowIndex, cellIndex) {\n    var gObj = this.parent;\n    this.isMultiShiftRequest = true;\n\n    if (this.selectionSettings.allowColumnSelection && this.needColumnSelection) {\n      this.selectColumnsByRange(this.prevColIndex, cellIndex);\n    } else {\n      this.selectCellsByRange(this.prevCIdxs, {\n        rowIndex: rowIndex,\n        cellIndex: cellIndex\n      });\n    }\n\n    this.isMultiShiftRequest = false;\n  };\n\n  Selection.prototype.getstackedColumns = function (column) {\n    var innerColumnIndexes = [];\n\n    for (var i = 0, len = column.length; i < len; i++) {\n      if (column[i].columns) {\n        this.getstackedColumns(column[i].columns);\n      } else {\n        innerColumnIndexes.push(column[i]);\n      }\n    }\n\n    return innerColumnIndexes;\n  };\n\n  Selection.prototype.applyCtrlHomeEndKey = function (rowIndex, cellIndex) {\n    if (this.isRowType()) {\n      this.selectRow(rowIndex, true);\n      this.addAttribute(this.parent.getCellFromIndex(rowIndex, cellIndex));\n    }\n\n    if (this.isCellType()) {\n      this.selectCell({\n        rowIndex: rowIndex,\n        cellIndex: cellIndex\n      }, true);\n    }\n  };\n\n  Selection.prototype.addRemoveClassesForRow = function (row, isAdd, clearAll) {\n    var args = [];\n\n    for (var _i = 3; _i < arguments.length; _i++) {\n      args[_i - 3] = arguments[_i];\n    }\n\n    if (row) {\n      var cells = [].slice.call(row.getElementsByClassName(literals.rowCell));\n      var detailIndentCell = row.querySelector('.e-detailrowcollapse') || row.querySelector('.e-detailrowexpand');\n      var dragdropIndentCell = row.querySelector('.e-rowdragdrop');\n\n      if (detailIndentCell) {\n        cells.push(detailIndentCell);\n      }\n\n      if (dragdropIndentCell) {\n        cells.push(dragdropIndentCell);\n      }\n\n      addRemoveActiveClasses.apply(void 0, [cells, isAdd].concat(args));\n    }\n\n    this.getRenderer().setSelection(row ? row.getAttribute('data-uid') : null, isAdd, clearAll);\n  };\n\n  Selection.prototype.isRowType = function () {\n    return this.selectionSettings.mode === 'Row' || this.selectionSettings.mode === 'Both';\n  };\n\n  Selection.prototype.isCellType = function () {\n    return this.selectionSettings.mode === 'Cell' || this.selectionSettings.mode === 'Both';\n  };\n\n  Selection.prototype.isSingleSel = function () {\n    return this.selectionSettings.type === 'Single';\n  };\n\n  Selection.prototype.getRenderer = function () {\n    if (isNullOrUndefined(this.contentRenderer)) {\n      this.contentRenderer = this.factory.getRenderer(RenderType.Content);\n    }\n\n    return this.contentRenderer;\n  };\n  /**\n   * Gets the collection of selected records.\n   * @return {Object[]}\n   */\n\n\n  Selection.prototype.getSelectedRecords = function () {\n    var selectedData = [];\n\n    if (!this.selectionSettings.persistSelection) {\n      selectedData = this.parent.getRowsObject().filter(function (row) {\n        return row.isSelected;\n      }).map(function (m) {\n        return m.data;\n      });\n    } else {\n      selectedData = this.persistSelectedData;\n    }\n\n    return selectedData;\n  };\n  /**\n   * Select the column by passing start column index\n   * @param  {number} startIndex\n   */\n\n\n  Selection.prototype.selectColumn = function (index) {\n    var gObj = this.parent;\n\n    if (isNullOrUndefined(gObj.getColumns()[index])) {\n      return;\n    }\n\n    var column = gObj.getColumnByIndex(index);\n    var selectedCol = gObj.getColumnHeaderByUid(column.uid);\n    var isColSelected = selectedCol.classList.contains('e-columnselection');\n\n    if (!gObj.selectionSettings.allowColumnSelection) {\n      return;\n    }\n\n    var isMultiColumns = this.selectedColumnsIndexes.length > 1 && this.selectedColumnsIndexes.indexOf(index) > -1;\n    this.clearColDependency();\n\n    if (!isColSelected || !this.selectionSettings.enableToggle || isMultiColumns) {\n      var args = {\n        columnIndex: index,\n        headerCell: selectedCol,\n        column: column,\n        cancel: false,\n        target: this.actualTarget,\n        isInteracted: this.isInteracted,\n        previousColumnIndex: this.prevColIndex,\n        isCtrlPressed: this.isMultiCtrlRequest,\n        isShiftPressed: this.isMultiShiftRequest\n      };\n      this.onActionBegin(args, events.columnSelecting);\n\n      if (args.cancel) {\n        this.disableInteracted();\n        return;\n      }\n\n      if (!(gObj.selectionSettings.enableToggle && index === this.prevColIndex && isColSelected) || isMultiColumns) {\n        this.updateColSelection(selectedCol, index);\n      }\n\n      var selectedArgs = {\n        columnIndex: index,\n        headerCell: selectedCol,\n        column: column,\n        target: this.actualTarget,\n        isInteracted: this.isInteracted,\n        previousColumnIndex: this.prevColIndex\n      };\n      this.onActionComplete(selectedArgs, events.columnSelected);\n    }\n\n    this.updateColProps(index);\n  };\n  /**\n   * Select the columns by passing start and end column index\n   * @param  {number} startIndex\n   * @param  {number} endIndex\n   */\n\n\n  Selection.prototype.selectColumnsByRange = function (startIndex, endIndex) {\n    var gObj = this.parent;\n\n    if (isNullOrUndefined(gObj.getColumns()[startIndex])) {\n      return;\n    }\n\n    var indexes = [];\n\n    if (gObj.selectionSettings.type === 'Single' || isNullOrUndefined(endIndex)) {\n      indexes[0] = startIndex;\n    } else {\n      var min = startIndex < endIndex;\n\n      for (var i = startIndex; min ? i <= endIndex : i >= endIndex; min ? i++ : i--) {\n        indexes.push(i);\n      }\n    }\n\n    this.selectColumns(indexes);\n  };\n  /**\n   * Select the columns by passing column indexes\n   * @param  {number[]} columnIndexes\n   */\n\n\n  Selection.prototype.selectColumns = function (columnIndexes) {\n    var gObj = this.parent;\n    var selectedCol = this.getselectedCols();\n\n    if (gObj.selectionSettings.type === 'Single') {\n      columnIndexes = [columnIndexes[0]];\n    }\n\n    if (!gObj.selectionSettings.allowColumnSelection) {\n      return;\n    }\n\n    this.clearColDependency();\n    var selectingArgs = {\n      columnIndex: columnIndexes[0],\n      headerCell: selectedCol,\n      columnIndexes: columnIndexes,\n      column: gObj.getColumnByIndex(columnIndexes[0]),\n      cancel: false,\n      target: this.actualTarget,\n      isInteracted: this.isInteracted,\n      previousColumnIndex: this.prevColIndex,\n      isCtrlPressed: this.isMultiCtrlRequest,\n      isShiftPressed: this.isMultiShiftRequest\n    };\n    this.onActionBegin(selectingArgs, events.columnSelecting);\n\n    if (selectingArgs.cancel) {\n      this.disableInteracted();\n      return;\n    }\n\n    for (var i = 0, len = columnIndexes.length; i < len; i++) {\n      this.updateColSelection(gObj.getColumnHeaderByUid(gObj.getColumnByIndex(columnIndexes[i]).uid), columnIndexes[i]);\n    }\n\n    selectedCol = this.getselectedCols();\n    var selectedArgs = {\n      columnIndex: columnIndexes[0],\n      headerCell: selectedCol,\n      columnIndexes: columnIndexes,\n      column: gObj.getColumnByIndex(columnIndexes[0]),\n      target: this.actualTarget,\n      isInteracted: this.isInteracted,\n      previousColumnIndex: this.prevColIndex\n    };\n    this.onActionComplete(selectedArgs, events.columnSelected);\n    this.updateColProps(columnIndexes[0]);\n  };\n  /**\n   * Select the column with existing column by passing column index\n   * @param  {number} startIndex\n   */\n\n\n  Selection.prototype.selectColumnWithExisting = function (startIndex) {\n    var gObj = this.parent;\n\n    if (isNullOrUndefined(gObj.getColumns()[startIndex])) {\n      return;\n    }\n\n    var frzCols = gObj.getFrozenColumns();\n    var isFreeze = frzCols && startIndex >= frzCols;\n    var newCol = gObj.getColumnHeaderByUid(gObj.getColumnByIndex(startIndex).uid);\n    var selectedCol = this.getselectedCols();\n\n    if (gObj.selectionSettings.type === 'Single') {\n      this.clearColDependency();\n    }\n\n    if (!gObj.selectionSettings.allowColumnSelection) {\n      return;\n    }\n\n    if (this.selectedColumnsIndexes.indexOf(startIndex) > -1) {\n      this.clearColumnSelection(startIndex);\n    } else {\n      var selectingArgs = {\n        columnIndex: startIndex,\n        headerCell: selectedCol,\n        columnIndexes: this.selectedColumnsIndexes,\n        column: gObj.getColumnByIndex(startIndex),\n        cancel: false,\n        target: this.actualTarget,\n        isInteracted: this.isInteracted,\n        previousColumnIndex: this.prevColIndex,\n        isCtrlPressed: this.isMultiCtrlRequest,\n        isShiftPressed: this.isMultiShiftRequest\n      };\n      this.onActionBegin(selectingArgs, events.columnSelecting);\n\n      if (selectingArgs.cancel) {\n        this.disableInteracted();\n        return;\n      }\n\n      this.updateColSelection(newCol, startIndex);\n      selectedCol = this.getselectedCols();\n      var selectedArgs = {\n        columnIndex: startIndex,\n        headerCell: selectedCol,\n        column: gObj.getColumnByIndex(startIndex),\n        columnIndexes: this.selectedColumnsIndexes,\n        target: this.actualTarget,\n        isInteracted: this.isInteracted,\n        previousColumnIndex: this.prevColIndex\n      };\n      this.onActionComplete(selectedArgs, events.columnSelected);\n    }\n\n    this.updateColProps(startIndex);\n  };\n  /**\n   * Clear the column selection\n   */\n\n\n  Selection.prototype.clearColumnSelection = function (clearIndex) {\n    if (this.isColumnSelected) {\n      var gObj = this.parent;\n\n      if (!isNullOrUndefined(clearIndex) && this.selectedColumnsIndexes.indexOf(clearIndex) === -1) {\n        return;\n      }\n\n      var index = !isNullOrUndefined(clearIndex) ? clearIndex : this.selectedColumnsIndexes[this.selectedColumnsIndexes.length - 1];\n      var col = gObj.getColumnByIndex(index);\n      var selectedCol = void 0;\n      var column = gObj.getColumnByIndex(index);\n\n      if (col.getFreezeTableName() === literals.frozenRight) {\n        selectedCol = gObj.getFrozenRightColumnHeaderByIndex(index);\n      } else if (col.getFreezeTableName() === 'movable') {\n        selectedCol = gObj.getMovableColumnHeaderByIndex(index);\n      } else {\n        selectedCol = gObj.getColumnHeaderByUid(column.uid);\n      }\n\n      var deselectedArgs = {\n        columnIndex: index,\n        headerCell: selectedCol,\n        columnIndexes: this.selectedColumnsIndexes,\n        column: column,\n        cancel: false,\n        target: this.actualTarget,\n        isInteracted: this.isInteracted\n      };\n      var isCanceled = this.columnDeselect(deselectedArgs, events.columnDeselecting);\n\n      if (isCanceled) {\n        this.disableInteracted();\n        return;\n      }\n\n      var selectedHeader = !isNullOrUndefined(clearIndex) ? [selectedCol] : [].slice.call(gObj.getHeaderContent().getElementsByClassName('e-columnselection'));\n      var selectedCells = this.getSelectedColumnCells(clearIndex);\n\n      for (var i = 0, len = selectedHeader.length; i < len; i++) {\n        addRemoveActiveClasses([selectedHeader[i]], false, 'e-columnselection');\n      }\n\n      for (var i = 0, len = selectedCells.length; i < len; i++) {\n        addRemoveActiveClasses([selectedCells[i]], false, 'e-columnselection');\n      }\n\n      if (!isNullOrUndefined(clearIndex)) {\n        this.selectedColumnsIndexes.splice(this.selectedColumnsIndexes.indexOf(clearIndex), 1);\n        this.parent.getColumns()[clearIndex].isSelected = false;\n      } else {\n        this.columnDeselect(deselectedArgs, events.columnDeselected);\n        this.selectedColumnsIndexes = [];\n        this.isColumnSelected = false;\n        this.parent.getColumns().filter(function (col) {\n          return col.isSelected = false;\n        });\n      }\n    }\n  };\n\n  Selection.prototype.getselectedCols = function () {\n    var gObj = this.parent;\n    var selectedCol;\n\n    if (this.selectedColumnsIndexes.length > 1) {\n      selectedCol = [];\n\n      for (var i = 0; i < this.selectedColumnsIndexes.length; i++) {\n        selectedCol.push(gObj.getColumnHeaderByUid(gObj.getColumnByIndex(this.selectedColumnsIndexes[i]).uid));\n      }\n    } else {\n      selectedCol = gObj.getColumnHeaderByUid(gObj.getColumnByIndex(this.selectedColumnsIndexes[0]).uid);\n    }\n\n    return selectedCol;\n  };\n\n  Selection.prototype.getSelectedColumnCells = function (clearIndex) {\n    var gObj = this.parent;\n    var isRowTemplate = !isNullOrUndefined(this.parent.rowTemplate);\n    var rows = isRowTemplate ? gObj.getRows() : gObj.getDataRows();\n    var movableRows;\n    var frRows;\n\n    if (gObj.isFrozenGrid() && gObj.getContent().querySelector('.' + literals.movableContent)) {\n      movableRows = isRowTemplate ? gObj.getMovableRows() : gObj.getMovableDataRows();\n      rows = gObj.addMovableRows(rows, movableRows);\n\n      if (gObj.getFrozenMode() === literals.leftRight) {\n        frRows = isRowTemplate ? gObj.getFrozenRightRows() : gObj.getFrozenRightDataRows();\n        rows = gObj.addMovableRows(rows, frRows);\n      }\n    }\n\n    var seletedcells = [];\n    var selectionString = !isNullOrUndefined(clearIndex) ? '[aria-colindex=\"' + clearIndex + '\"]' : '.e-columnselection';\n\n    for (var i = 0, len = rows.length; i < len; i++) {\n      seletedcells = seletedcells.concat([].slice.call(rows[i].querySelectorAll(selectionString)));\n    }\n\n    return seletedcells;\n  };\n\n  Selection.prototype.columnDeselect = function (args, event) {\n    if (event === 'columnDeselected') {\n      delete args.cancel;\n    }\n\n    this.onActionComplete(args, event);\n    return args.cancel;\n  };\n\n  Selection.prototype.updateColProps = function (startIndex) {\n    this.prevColIndex = startIndex;\n    this.isColumnSelected = this.selectedColumnsIndexes.length && true;\n  };\n\n  Selection.prototype.clearColDependency = function () {\n    this.clearColumnSelection();\n    this.selectedColumnsIndexes = [];\n  };\n\n  Selection.prototype.updateColSelection = function (selectedCol, startIndex) {\n    if (isNullOrUndefined(this.parent.getColumns()[startIndex])) {\n      return;\n    }\n\n    var left = this.parent.getFrozenLeftCount();\n    var movable = this.parent.getMovableColumnsCount();\n    var col = this.parent.getColumnByIndex(startIndex);\n    var isRowTemplate = !isNullOrUndefined(this.parent.rowTemplate);\n    var rows;\n    this.selectedColumnsIndexes.push(startIndex);\n    this.parent.getColumns()[startIndex].isSelected = true;\n\n    if (col.getFreezeTableName() === literals.frozenRight) {\n      startIndex = startIndex - (left + movable);\n      rows = isRowTemplate ? this.parent.getFrozenRightRows() : this.parent.getFrozenRightDataRows();\n    } else if (col.getFreezeTableName() === 'movable') {\n      startIndex = startIndex - left;\n      rows = isRowTemplate ? this.parent.getMovableRows() : this.parent.getMovableDataRows();\n    } else {\n      startIndex = startIndex + this.parent.getIndentCount();\n      rows = isRowTemplate ? this.parent.getRows() : this.parent.getDataRows();\n    }\n\n    addRemoveActiveClasses([selectedCol], true, 'e-columnselection');\n\n    for (var j = 0, len = rows.length; j < len; j++) {\n      if (rows[j].classList.contains(literals.row)) {\n        if ((rows[j].classList.contains(literals.editedRow) || rows[j].classList.contains(literals.addedRow)) && this.parent.editSettings.mode === 'Normal' && !isNullOrUndefined(rows[j].querySelector('tr').childNodes[startIndex])) {\n          addRemoveActiveClasses([rows[j].querySelector('tr').childNodes[startIndex]], true, 'e-columnselection');\n        } else if (!isNullOrUndefined(rows[j].childNodes[startIndex])) {\n          addRemoveActiveClasses([rows[j].childNodes[startIndex]], true, 'e-columnselection');\n        }\n      }\n    }\n  };\n\n  Selection.prototype.headerSelectionHandler = function (colIndex) {\n    if (!this.isMultiCtrlRequest && !this.isMultiShiftRequest || this.isSingleSel()) {\n      this.selectColumn(colIndex);\n    } else if (this.isMultiShiftRequest) {\n      this.selectColumnsByRange(isUndefined(this.prevColIndex) ? colIndex : this.prevColIndex, colIndex);\n    } else {\n      this.selectColumnWithExisting(colIndex);\n    }\n  };\n\n  Selection.prototype.addEventListener_checkbox = function () {\n    var _this = this;\n\n    this.parent.on(events.dataReady, this.dataReady, this);\n    this.onDataBoundFunction = this.onDataBound.bind(this);\n    this.parent.addEventListener(events.dataBound, this.onDataBoundFunction);\n    this.parent.on(events.contentReady, this.checkBoxSelectionChanged, this);\n    this.parent.on(events.beforeRefreshOnDataChange, this.initPerisistSelection, this);\n    this.parent.on(events.onEmpty, this.setCheckAllForEmptyGrid, this);\n    this.actionCompleteFunc = this.actionCompleteHandler.bind(this);\n    this.parent.addEventListener(events.actionComplete, this.actionCompleteFunc);\n    this.parent.on(events.click, this.clickHandler, this);\n\n    this.resizeEndFn = function () {\n      _this.updateAutoFillPosition();\n\n      _this.drawBorders();\n    };\n\n    this.resizeEndFn.bind(this);\n    this.parent.addEventListener(events.resizeStop, this.resizeEndFn);\n  };\n\n  Selection.prototype.removeEventListener_checkbox = function () {\n    this.parent.off(events.dataReady, this.dataReady);\n    this.parent.removeEventListener(events.dataBound, this.onDataBoundFunction);\n    this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunc);\n    this.parent.off(events.onEmpty, this.setCheckAllForEmptyGrid);\n    this.parent.off(events.click, this.clickHandler);\n    this.parent.off(events.beforeRefreshOnDataChange, this.initPerisistSelection);\n  };\n\n  Selection.prototype.setCheckAllForEmptyGrid = function () {\n    var checkAllBox = this.getCheckAllBox();\n\n    if (checkAllBox) {\n      this.parent.isCheckBoxSelection = true;\n      var spanEle = checkAllBox.nextElementSibling;\n      removeClass([spanEle], ['e-check', 'e-stop', 'e-uncheck']);\n    }\n  };\n\n  Selection.prototype.dataReady = function (e) {\n    this.isHeaderCheckboxClicked = false;\n    var isInfinitecroll = this.parent.enableInfiniteScrolling && e.requestType === 'infiniteScroll';\n\n    if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection && !isInfinitecroll) {\n      this.disableUI = !this.parent.enableImmutableMode;\n      this.clearSelection();\n      this.setCheckAllState();\n      this.disableUI = false;\n    }\n  };\n\n  Selection.prototype.actionCompleteHandler = function (e) {\n    if (e.requestType === 'save' && this.parent.isPersistSelection) {\n      this.refreshPersistSelection();\n    }\n  };\n\n  Selection.prototype.selectRowIndex = function (index) {\n    this.parent.isSelectedRowIndexUpdating = true;\n    this.parent.selectedRowIndex = index;\n  };\n\n  Selection.prototype.disableInteracted = function () {\n    this.isInteracted = false;\n  };\n\n  Selection.prototype.activeTarget = function () {\n    this.actualTarget = this.isInteracted ? this.actualTarget : null;\n  };\n\n  return Selection;\n}();\n\nexport { Selection };","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { iterateArrayOrObject, isGroupAdaptive } from '../base/util';\nimport * as events from '../base/constant';\n/**\n * The `ShowHide` module is used to control column visibility.\n */\n\nvar ShowHide =\n/** @class */\nfunction () {\n  /**\n   * Constructor for the show hide module.\n   * @hidden\n   */\n  function ShowHide(parent) {\n    this.parent = parent;\n  }\n  /**\n   * Shows a column by column name.\n   * @param  {string|string[]} columnName - Defines a single or collection of column names to show.\n   * @param  {string} showBy - Defines the column key either as field name or header text.\n   * @return {void}\n   */\n\n\n  ShowHide.prototype.show = function (columnName, showBy) {\n    var keys = this.getToggleFields(columnName);\n    var columns = this.getColumns(keys, showBy);\n    this.parent.notify(events.tooltipDestroy, {\n      module: 'edit'\n    });\n\n    for (var i = 0; i < columns.length; i++) {\n      columns[i].visible = true;\n    }\n\n    this.setVisible(columns);\n  };\n  /**\n   * Hides a column by column name.\n   * @param  {string|string[]} columnName - Defines a single or collection of column names to hide.\n   * @param  {string} hideBy - Defines the column key either as field name or header text.\n   * @return {void}\n   */\n\n\n  ShowHide.prototype.hide = function (columnName, hideBy) {\n    var keys = this.getToggleFields(columnName);\n    var columns = this.getColumns(keys, hideBy);\n    this.parent.notify(events.tooltipDestroy, {\n      module: 'edit'\n    });\n\n    for (var i = 0; i < columns.length; i++) {\n      columns[i].visible = false;\n    }\n\n    this.setVisible(columns);\n  };\n\n  ShowHide.prototype.getToggleFields = function (key) {\n    var finalized = [];\n\n    if (typeof key === 'string') {\n      finalized = [key];\n    } else {\n      finalized = key;\n    }\n\n    return finalized;\n  };\n\n  ShowHide.prototype.getColumns = function (keys, getKeyBy) {\n    var _this = this;\n\n    var columns = iterateArrayOrObject(keys, function (key, index) {\n      return iterateArrayOrObject(_this.parent.columnModel, function (item, index) {\n        if (item[getKeyBy] === key) {\n          return item;\n        }\n\n        return undefined;\n      })[0];\n    });\n    return columns;\n  };\n  /**\n   * Shows or hides columns by given column collection.\n   * @private\n   * @param  {Column[]} columns - Specifies the columns.\n   * @return {void}\n   */\n\n\n  ShowHide.prototype.setVisible = function (columns, changedStateColumns) {\n    var _this = this;\n\n    if (changedStateColumns === void 0) {\n      changedStateColumns = [];\n    }\n\n    changedStateColumns = changedStateColumns.length > 0 ? changedStateColumns : columns;\n    var args = {\n      requestType: 'columnstate',\n      cancel: false,\n      columns: changedStateColumns\n    };\n    var cancel = 'cancel';\n    this.parent.trigger(events.actionBegin, args, function (showHideArgs) {\n      var currentViewCols = _this.parent.getColumns();\n\n      columns = isNullOrUndefined(columns) ? currentViewCols : columns;\n\n      if (showHideArgs[cancel]) {\n        _this.parent.notify(events.resetColumns, {\n          showHideArgs: showHideArgs\n        });\n\n        if (columns.length > 0) {\n          columns[0].visible = true;\n        }\n\n        return;\n      }\n\n      if (isGroupAdaptive(_this.parent)) {\n        _this.parent.contentModule.emptyVcRows();\n      }\n\n      if (_this.parent.allowSelection && _this.parent.getSelectedRecords().length && !_this.parent.selectionSettings.persistSelection) {\n        _this.parent.clearSelection();\n      }\n\n      if (_this.parent.enableColumnVirtualization) {\n        var colsInCurrentView = columns.filter(function (col1) {\n          return currentViewCols.some(function (col2) {\n            return col1.field === col2.field;\n          });\n        });\n\n        if (colsInCurrentView.length) {\n          _this.parent.notify(events.columnVisibilityChanged, columns);\n        }\n      } else {\n        _this.parent.notify(events.columnVisibilityChanged, columns);\n      }\n\n      var params = {\n        requestType: 'columnstate',\n        columns: changedStateColumns\n      };\n\n      _this.parent.trigger(events.actionComplete, params);\n\n      if (_this.parent.columnQueryMode !== 'All') {\n        _this.parent.refresh();\n      }\n    });\n  };\n\n  return ShowHide;\n}();\n\nexport { ShowHide };","/** @hidden */\nexport var created = 'create';\n/** @hidden */\n\nexport var destroyed = 'destroy';\n/** @hidden */\n\nexport var load = 'load';\n/** @hidden */\n\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\n\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\n\nexport var headerCellInfo = 'headerCellInfo';\n/** @hidden */\n\nexport var actionBegin = 'actionBegin';\n/** @hidden */\n\nexport var actionComplete = 'actionComplete';\n/** @hidden */\n\nexport var actionFailure = 'actionFailure';\n/** @hidden */\n\nexport var dataBound = 'dataBound';\n/** @hidden */\n\nexport var rowSelecting = 'rowSelecting';\n/** @hidden */\n\nexport var rowSelected = 'rowSelected';\n/** @hidden */\n\nexport var rowDeselecting = 'rowDeselecting';\n/** @hidden */\n\nexport var rowDeselected = 'rowDeselected';\n/** @hidden */\n\nexport var cellSelecting = 'cellSelecting';\n/** @hidden */\n\nexport var cellSelected = 'cellSelected';\n/** @hidden */\n\nexport var cellDeselecting = 'cellDeselecting';\n/** @hidden */\n\nexport var cellDeselected = 'cellDeselected';\n/** @hidden */\n\nexport var columnSelecting = 'columnSelecting';\n/** @hidden */\n\nexport var columnSelected = 'columnSelected';\n/** @hidden */\n\nexport var columnDeselecting = 'columnDeselecting';\n/** @hidden */\n\nexport var columnDeselected = 'columnDeselected';\n/** @hidden */\n\nexport var columnDragStart = 'columnDragStart';\n/** @hidden */\n\nexport var columnDrag = 'columnDrag';\n/** @hidden */\n\nexport var columnDrop = 'columnDrop';\n/** @hidden */\n\nexport var rowDragStartHelper = 'rowDragStartHelper';\n/** @hidden */\n\nexport var rowDragStart = 'rowDragStart';\n/** @hidden */\n\nexport var rowDrag = 'rowDrag';\n/** @hidden */\n\nexport var rowDrop = 'rowDrop';\n/** @hidden */\n\nexport var beforePrint = 'beforePrint';\n/** @hidden */\n\nexport var printComplete = 'printComplete';\n/** @hidden */\n\nexport var detailDataBound = 'detailDataBound';\n/** @hidden */\n\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\n\nexport var batchAdd = 'batchAdd';\n/** @hidden */\n\nexport var batchCancel = 'batchCancel';\n/** @hidden */\n\nexport var batchDelete = 'batchDelete';\n/** @hidden */\n\nexport var beforeBatchAdd = 'beforeBatchAdd';\n/** @hidden */\n\nexport var beforeBatchDelete = 'beforeBatchDelete';\n/** @hidden */\n\nexport var beforeBatchSave = 'beforeBatchSave';\n/** @hidden */\n\nexport var beginEdit = 'beginEdit';\n/** @hidden */\n\nexport var cellEdit = 'cellEdit';\n/** @hidden */\n\nexport var cellSave = 'cellSave';\n/** @hidden */\n\nexport var cellSaved = 'cellSaved';\n/** @hidden */\n\nexport var endAdd = 'endAdd';\n/** @hidden */\n\nexport var endDelete = 'endDelete';\n/** @hidden */\n\nexport var endEdit = 'endEdit';\n/** @hidden */\n\nexport var recordDoubleClick = 'recordDoubleClick';\n/** @hidden */\n\nexport var recordClick = 'recordClick';\n/** @hidden */\n\nexport var beforeDataBound = 'beforeDataBound';\n/** @hidden */\n\nexport var beforeOpenColumnChooser = 'beforeOpenColumnChooser';\n/** @hidden */\n\nexport var beforeOpenAdaptiveDialog = 'beforeOpenAdaptiveDialog';\n/** @hidden */\n\nexport var resizeStart = 'resizeStart';\n/** @hidden */\n\nexport var onResize = 'resizing';\n/** @hidden */\n\nexport var resizeStop = 'resizeStop';\n/** @hidden */\n\nexport var checkBoxChange = 'checkBoxChange';\n/** @hidden */\n\nexport var beforeCopy = 'beforeCopy';\n/** @hidden */\n\nexport var beforePaste = 'beforePaste';\n/** @hidden */\n\nexport var beforeAutoFill = 'beforeAutoFill';\n/** @hidden */\n\nexport var filterChoiceRequest = 'filterchoicerequest';\n/** @hidden */\n\nexport var filterAfterOpen = 'filterafteropen';\n/** @hidden */\n\nexport var filterBeforeOpen = 'filterbeforeopen';\n/** @hidden */\n\nexport var filterSearchBegin = 'filtersearchbegin';\n/** @hidden */\n\nexport var commandClick = 'commandClick';\n/** @hidden */\n\nexport var exportGroupCaption = 'exportGroupCaption';\n/** @hidden */\n\nexport var lazyLoadGroupExpand = 'lazyLoadGroupExpand';\n/** @hidden */\n\nexport var lazyLoadGroupCollapse = 'lazyLoadGroupCollapse';\n/**\n * Specifies grid internal events\n */\n\n/** @hidden */\n\nexport var initialLoad = 'initial-load';\n/** @hidden */\n\nexport var initialEnd = 'initial-end';\n/** @hidden */\n\nexport var dataReady = 'data-ready';\n/** @hidden */\n\nexport var contentReady = 'content-ready';\n/** @hidden */\n\nexport var uiUpdate = 'ui-update';\n/** @hidden */\n\nexport var onEmpty = 'on-empty';\n/** @hidden */\n\nexport var inBoundModelChanged = 'inbound-model-changed';\n/** @hidden */\n\nexport var modelChanged = 'model-changed';\n/** @hidden */\n\nexport var colGroupRefresh = 'colgroup-refresh';\n/** @hidden */\n\nexport var headerRefreshed = 'header-refreshed';\n/** @hidden */\n\nexport var pageBegin = 'paging-begin';\n/** @hidden */\n\nexport var pageComplete = 'paging-complete';\n/** @hidden */\n\nexport var sortBegin = 'sorting-begin';\n/** @hidden */\n\nexport var sortComplete = 'sorting-complete';\n/** @hidden */\n\nexport var filterBegin = 'filtering-begin';\n/** @hidden */\n\nexport var filterComplete = 'filtering-complete';\n/** @hidden */\n\nexport var searchBegin = 'searching-begin';\n/** @hidden */\n\nexport var searchComplete = 'searching-complete';\n/** @hidden */\n\nexport var reorderBegin = 'reorder-begin';\n/** @hidden */\n\nexport var reorderComplete = 'reorder-complete';\n/** @hidden */\n\nexport var rowDragAndDropBegin = 'rowdraganddrop-begin';\n/** @hidden */\n\nexport var rowDragAndDropComplete = 'rowdraganddrop-complete';\n/** @hidden */\n\nexport var groupBegin = 'grouping-begin';\n/** @hidden */\n\nexport var groupComplete = 'grouping-complete';\n/** @hidden */\n\nexport var ungroupBegin = 'ungrouping-begin';\n/** @hidden */\n\nexport var ungroupComplete = 'ungrouping-complete';\n/** @hidden */\n\nexport var groupAggregates = 'group-aggregates';\n/** @hidden */\n\nexport var refreshFooterRenderer = 'refresh-footer-rendered';\n/** @hidden */\n\nexport var refreshAggregateCell = 'refresh-aggregate-cell';\n/** @hidden */\n\nexport var refreshAggregates = 'refresh-aggregates';\n/** @hidden */\n\nexport var rowSelectionBegin = 'rowselecting';\n/** @hidden */\n\nexport var rowSelectionComplete = 'rowselected';\n/** @hidden */\n\nexport var columnSelectionBegin = 'columnselecting';\n/** @hidden */\n\nexport var columnSelectionComplete = 'columnselected';\n/** @hidden */\n\nexport var cellSelectionBegin = 'cellselecting';\n/** @hidden */\n\nexport var cellSelectionComplete = 'cellselected';\n/** @hidden */\n\nexport var beforeCellFocused = 'beforecellfocused';\n/** @hidden */\n\nexport var cellFocused = 'cellfocused';\n/** @hidden */\n\nexport var keyPressed = 'key-pressed';\n/** @hidden */\n\nexport var click = 'click';\n/** @hidden */\n\nexport var destroy = 'destroy';\n/** @hidden */\n\nexport var columnVisibilityChanged = 'column-visible-changed';\n/** @hidden */\n\nexport var scroll = 'scroll';\n/** @hidden */\n\nexport var columnWidthChanged = 'column-width-changed';\n/** @hidden */\n\nexport var columnPositionChanged = 'column-position-changed';\n/** @hidden */\n\nexport var rowDragAndDrop = 'row-drag-and-drop';\n/** @hidden */\n\nexport var rowsAdded = 'rows-added';\n/** @hidden */\n\nexport var rowsRemoved = 'rows-removed';\n/** @hidden */\n\nexport var columnDragStop = 'column-drag-stop';\n/** @hidden */\n\nexport var headerDrop = 'header-drop';\n/** @hidden */\n\nexport var dataSourceModified = 'datasource-modified';\n/** @hidden */\n\nexport var refreshComplete = 'refresh-complete';\n/** @hidden */\n\nexport var refreshVirtualBlock = 'refresh-virtual-block';\n/** @hidden */\n\nexport var dblclick = 'dblclick';\n/** @hidden */\n\nexport var toolbarRefresh = 'toolbar-refresh';\n/** @hidden */\n\nexport var bulkSave = 'bulk-save';\n/** @hidden */\n\nexport var autoCol = 'auto-col';\n/** @hidden */\n\nexport var tooltipDestroy = 'tooltip-destroy';\n/** @hidden */\n\nexport var updateData = 'update-data';\n/** @hidden */\n\nexport var editBegin = 'edit-begin';\n/** @hidden */\n\nexport var editComplete = 'edit-complete';\n/** @hidden */\n\nexport var addBegin = 'add-begin';\n/** @hidden */\n\nexport var addComplete = 'add-complete';\n/** @hidden */\n\nexport var saveComplete = 'save-complete';\n/** @hidden */\n\nexport var deleteBegin = 'delete-begin';\n/** @hidden */\n\nexport var deleteComplete = 'delete-complete';\n/** @hidden */\n\nexport var preventBatch = 'prevent-batch';\n/** @hidden */\n\nexport var dialogDestroy = 'dialog-destroy';\n/** @hidden */\n\nexport var crudAction = 'crud-Action';\n/** @hidden */\n\nexport var addDeleteAction = 'add-delete-Action';\n/** @hidden */\n\nexport var destroyForm = 'destroy-form';\n/** @hidden */\n\nexport var doubleTap = 'double-tap';\n/** @hidden */\n\nexport var beforeExcelExport = 'beforeExcelExport';\n/** @hidden */\n\nexport var excelExportComplete = 'excelExportComplete';\n/** @hidden */\n\nexport var excelQueryCellInfo = 'excelQueryCellInfo';\n/** @hidden */\n\nexport var excelHeaderQueryCellInfo = 'excelHeaderQueryCellInfo';\n/** @hidden */\n\nexport var exportDetailDataBound = 'exportdetaildatabound';\n/** @hidden */\n\nexport var beforePdfExport = 'beforePdfExport';\n/** @hidden */\n\nexport var pdfExportComplete = 'pdfExportComplete';\n/** @hidden */\n\nexport var pdfQueryCellInfo = 'pdfQueryCellInfo';\n/** @hidden */\n\nexport var pdfHeaderQueryCellInfo = 'pdfHeaderQueryCellInfo';\n/** @hidden */\n\nexport var accessPredicate = 'access-predicate';\n/** @hidden */\n\nexport var contextMenuClick = 'contextMenuClick';\n/** @hidden */\n\nexport var freezeRender = 'freezerender';\n/** @hidden */\n\nexport var freezeRefresh = 'freezerefresh';\n/** @hidden */\n\nexport var contextMenuOpen = 'contextMenuOpen';\n/** @hidden */\n\nexport var columnMenuClick = 'columnMenuClick';\n/** @hidden */\n\nexport var columnMenuOpen = 'columnMenuOpen';\n/** @hidden */\n\nexport var filterOpen = 'filterOpen';\n/** @hidden */\n\nexport var filterDialogCreated = 'filterDialogCreated';\n/** @hidden */\n\nexport var filterMenuClose = 'filter-menu-close';\n/** @hidden */\n\nexport var initForeignKeyColumn = 'initForeignKeyColumn';\n/** @hidden */\n\nexport var getForeignKeyData = 'getForeignKeyData';\n/** @hidden */\n\nexport var generateQuery = 'generateQuery';\n/** @hidden */\n\nexport var showEmptyGrid = 'showEmptyGrid';\n/** @hidden */\n\nexport var foreignKeyData = 'foreignKeyData';\n/** @hidden */\n\nexport var columnDataStateChange = 'columnDataStateChange';\n/** @hidden */\n\nexport var dataStateChange = 'dataStateChange';\n/** @hidden */\n\nexport var dataSourceChanged = 'dataSourceChanged';\n/** @hidden */\n\nexport var rtlUpdated = 'rtl-updated';\n/** @hidden */\n\nexport var beforeFragAppend = 'beforeFragAppend';\n/** @hidden */\n\nexport var frozenHeight = 'frozenHeight';\n/** @hidden */\n\nexport var textWrapRefresh = 'textWrapRefresh';\n/** @hidden */\n\nexport var recordAdded = 'recordAdded';\n/** @hidden */\n\nexport var cancelBegin = 'cancel-Begin';\n/** @hidden */\n\nexport var editNextValCell = 'editNextValCell';\n/** @hidden */\n\nexport var hierarchyPrint = 'hierarchyprint';\n/** @hidden */\n\nexport var expandChildGrid = 'expandchildgrid';\n/** @hidden */\n\nexport var printGridInit = 'printGrid-Init';\n/** @hidden */\n\nexport var exportRowDataBound = 'export-RowDataBound';\n/** @hidden */\n\nexport var exportDataBound = 'export-DataBound';\n/** @hidden */\n\nexport var rowPositionChanged = 'row-position-changed';\n/** @hidden */\n\nexport var columnChooserOpened = 'columnChooserOpened';\n/** @hidden */\n\nexport var batchForm = 'batchedit-form';\n/** @hidden */\n\nexport var beforeStartEdit = 'edit-form';\n/** @hidden */\n\nexport var beforeBatchCancel = 'before-batch-cancel';\n/** @hidden */\n\nexport var batchEditFormRendered = 'batcheditform-rendered';\n/** @hidden */\n\nexport var partialRefresh = 'partial-refresh';\n/** @hidden */\n\nexport var beforeCustomFilterOpen = 'beforeCustomFilterOpen';\n/** @hidden */\n\nexport var selectVirtualRow = 'select-virtual-Row';\n/** @hidden */\n\nexport var columnsPrepared = 'columns-prepared';\n/** @hidden */\n\nexport var cBoxFltrBegin = 'cbox-filter-begin';\n/** @hidden */\n\nexport var cBoxFltrComplete = 'cbox-filter-complete';\n/** @hidden */\n\nexport var fltrPrevent = 'filter-Prevent';\n/** @hidden */\n\nexport var beforeFltrcMenuOpen = 'before-filter-cmenu-open';\n/** @hidden */\n\nexport var valCustomPlacement = 'validation-custom-placement';\n/** @hidden */\n\nexport var filterCboxValue = 'filter-cbox-value';\n/** @hidden */\n\nexport var componentRendered = 'component-rendered';\n/** @hidden */\n\nexport var restoreFocus = 'restore-Focus';\n/** @hidden */\n\nexport var detailStateChange = 'detail-state-change';\n/** @hidden */\n\nexport var detailIndentCellInfo = 'detail-indentcell-info';\n/** @hidden */\n\nexport var virtaulKeyHandler = 'virtaul-key-handler';\n/** @hidden */\n\nexport var virtaulCellFocus = 'virtaul-cell-focus';\n/** @hidden */\n\nexport var virtualScrollEditActionBegin = 'virtual-scroll-edit-action-begin';\n/** @hidden */\n\nexport var virtualScrollEditSuccess = 'virtual-scroll-edit-success';\n/** @hidden */\n\nexport var virtualScrollEditCancel = 'virtual-scroll-edit-cancel';\n/** @hidden */\n\nexport var virtualScrollEdit = 'virtual-scroll-edit';\n/** @hidden */\n\nexport var refreshVirtualCache = 'refresh-virtual-cache';\n/** @hidden */\n\nexport var editReset = 'edit-reset';\n/** @hidden */\n\nexport var virtualScrollAddActionBegin = 'virtual-scroll-add-action-begin';\n/** @hidden */\n\nexport var getVirtualData = 'get-virtual-data';\n/** @hidden */\n\nexport var refreshInfiniteModeBlocks = 'refresh-infinite-mode-blocks';\n/** @hidden */\n\nexport var resetInfiniteBlocks = 'reset-infinite-blocks';\n/** @hidden */\n\nexport var infiniteScrollHandler = 'infinite-scroll-handler';\n/** @hidden */\n\nexport var infinitePageQuery = 'infinite-page-query';\n/** @hidden */\n\nexport var infiniteShowHide = 'infinite-show-hide';\n/** @hidden */\n\nexport var appendInfiniteContent = 'append-infinite-content';\n/** @hidden */\n\nexport var removeInfiniteRows = 'remove-infinite-rows';\n/** @hidden */\n\nexport var setInfiniteCache = 'set-infinite-cache';\n/** @hidden */\n\nexport var infiniteEditHandler = 'infinite-edit-handler';\n/** @hidden */\n\nexport var initialCollapse = 'initial-collapse';\n/** @hidden */\n\nexport var getAggregateQuery = 'get-aggregate-query';\n/** @hidden */\n\nexport var closeFilterDialog = 'close-filter-dialog';\n/** @hidden */\n\nexport var columnChooserCancelBtnClick = 'columnChooserCancelBtnClick';\n/** @hidden */\n\nexport var getFilterBarOperator = 'get-filterbar-operator';\n/** @hidden */\n\nexport var resetColumns = 'reset-columns';\n/** @hidden */\n\nexport var pdfAggregateQueryCellInfo = 'pdfAggregateQueryCellInfo';\n/** @hidden */\n\nexport var excelAggregateQueryCellInfo = 'excelAggregateQueryCellInfo';\n/** @hidden */\n\nexport var setGroupCache = 'group-cache';\n/** @hidden */\n\nexport var lazyLoadScrollHandler = 'lazy-load-scroll-handler';\n/** @hidden */\n\nexport var groupCollapse = 'group-collapse';\n/** @hidden */\n\nexport var beforeCheckboxRenderer = 'beforeCheckboxRenderer';\n/** @hidden */\n\nexport var refreshHandlers = 'refreshResizeHandlers';\n/** @hidden */\n\nexport var refreshFrozenColumns = 'refresh-frozen-columns';\n/** @hidden */\n\nexport var setReorderDestinationElement = 'set-reorder-destination-element';\n/** @hidden */\n\nexport var refreshVirtualFrozenHeight = 'refresh-virtual-frozen-height';\n/** @hidden */\n\nexport var setFreezeSelection = 'set-freeze-selection';\n/** @hidden */\n\nexport var setInfiniteFrozenHeight = 'set-infinite-frozen-height';\n/** @hidden */\n\nexport var setInfiniteColFrozenHeight = 'set-infinite-col-frozen-height';\n/** @hidden */\n\nexport var beforeRefreshOnDataChange = 'before-refresh-on-data-change';\n/** @hidden */\n\nexport var immutableBatchCancel = 'immutable-batch-cancel';\n/** @hidden */\n\nexport var refreshVirtualFrozenRows = 'refresh-virtual-frozenrows';\n/** @hidden */\n\nexport var checkScrollReset = 'check-scroll-reset';\n/** @hidden */\n\nexport var refreshFrozenHeight = 'refresh-frozen-height';\n/** @hidden */\n\nexport var setHeightToFrozenElement = 'set-height-to-frozen-element';\n/** @hidden */\n\nexport var preventFrozenScrollRefresh = 'prevent-frozen-scroll-refresh';\n/** @hidden */\n\nexport var nextCellIndex = 'next-cell-index';\n/** @hidden */\n\nexport var refreshInfiniteCurrentViewData = 'refresh-infinite-current-view-data';\n/** @hidden */\n\nexport var infiniteCrudCancel = 'infinite-crud-cancel';\n/** @hidden */\n\nexport var filterDialogClose = 'filter-dialog-close';\n/** @hidden */\n\nexport var refreshCustomFilterOkBtn = 'refresh-cutsom-filter-ok-button';\n/** @hidden */\n\nexport var refreshCustomFilterClearBtn = 'refresh-cutsom-filter-clear-button';\n/** @hidden */\n\nexport var renderResponsiveCmenu = 'render-responsive-cmenu';\n/** @hidden */\n\nexport var filterCmenuSelect = 'filter-cmenu-select';\n/** @hidden */\n\nexport var customFilterClose = 'custom-filter-close';\n/** @hidden */\n\nexport var setFullScreenDialog = 'set-fullscreen-dialog';\n/** @hidden */\n\nexport var refreshVirtualCacheOnRowDD = 'refresh-Virtual-Cache-On-RowDD';\n/** @hidden */\n\nexport var refreshExpandandCollapse = 'refresh-Expand-and-Collapse';\n/** @hidden */\n\nexport var rowModeChange = 'row-mode-change';\n/** @hidden */\n\nexport var enterKeyHandler = 'enter-key-handler';\n/** @hidden */\n\nexport var refreshVirtualMaxPage = 'refresh-virtual-max-page';\n/** @hidden */\n\nexport var selectRowOnContextOpen = 'select-row-on-context-open';\n/** @hidden */\n\nexport var pagerRefresh = 'pager-refresh';\n/** @hidden */\n\nexport var closeInline = 'closeinline';\n/** @hidden */\n\nexport var closeBatch = 'closebatch';\n/** @hidden */\n\nexport var closeEdit = 'close-edit';\n/** @hidden */\n\nexport var resetVirtualFocus = 'reset-virtual-focus';\n/** @hidden */\n\nexport var afterContentRender = 'after-content-renderer';","/**\n * Defines types of Cell\n * @hidden\n */\nexport var CellType;\n\n(function (CellType) {\n  /**  Defines CellType as Data */\n  CellType[CellType[\"Data\"] = 0] = \"Data\";\n  /**  Defines CellType as Header */\n\n  CellType[CellType[\"Header\"] = 1] = \"Header\";\n  /**  Defines CellType as Summary */\n\n  CellType[CellType[\"Summary\"] = 2] = \"Summary\";\n  /**  Defines CellType as GroupSummary */\n\n  CellType[CellType[\"GroupSummary\"] = 3] = \"GroupSummary\";\n  /**  Defines CellType as CaptionSummary */\n\n  CellType[CellType[\"CaptionSummary\"] = 4] = \"CaptionSummary\";\n  /**  Defines CellType as Filter */\n\n  CellType[CellType[\"Filter\"] = 5] = \"Filter\";\n  /**  Defines CellType as Indent */\n\n  CellType[CellType[\"Indent\"] = 6] = \"Indent\";\n  /**  Defines CellType as GroupCaption */\n\n  CellType[CellType[\"GroupCaption\"] = 7] = \"GroupCaption\";\n  /**  Defines CellType as GroupCaptionEmpty */\n\n  CellType[CellType[\"GroupCaptionEmpty\"] = 8] = \"GroupCaptionEmpty\";\n  /**  Defines CellType as Expand */\n\n  CellType[CellType[\"Expand\"] = 9] = \"Expand\";\n  /**  Defines CellType as HeaderIndent */\n\n  CellType[CellType[\"HeaderIndent\"] = 10] = \"HeaderIndent\";\n  /**  Defines CellType as StackedHeader */\n\n  CellType[CellType[\"StackedHeader\"] = 11] = \"StackedHeader\";\n  /**  Defines CellType as DetailHeader */\n\n  CellType[CellType[\"DetailHeader\"] = 12] = \"DetailHeader\";\n  /**  Defines CellType as DetailExpand */\n\n  CellType[CellType[\"DetailExpand\"] = 13] = \"DetailExpand\";\n  /**  Defines CellType as CommandColumn */\n\n  CellType[CellType[\"CommandColumn\"] = 14] = \"CommandColumn\";\n  /**  Defines CellType as DetailFooterIntent */\n\n  CellType[CellType[\"DetailFooterIntent\"] = 15] = \"DetailFooterIntent\";\n  /**  Defines CellType as RowDrag */\n\n  CellType[CellType[\"RowDragIcon\"] = 16] = \"RowDragIcon\";\n  /**  Defines CellType as RowDragHeader */\n\n  CellType[CellType[\"RowDragHIcon\"] = 17] = \"RowDragHIcon\";\n})(CellType || (CellType = {}));\n/**\n * Defines types of Render\n * @hidden\n */\n\n\nexport var RenderType;\n\n(function (RenderType) {\n  /**  Defines RenderType as Header */\n  RenderType[RenderType[\"Header\"] = 0] = \"Header\";\n  /**  Defines RenderType as Content */\n\n  RenderType[RenderType[\"Content\"] = 1] = \"Content\";\n  /**  Defines RenderType as Summary */\n\n  RenderType[RenderType[\"Summary\"] = 2] = \"Summary\";\n})(RenderType || (RenderType = {}));\n/**\n * Defines Predefined toolbar items.\n * @hidden\n */\n\n\nexport var ToolbarItem;\n\n(function (ToolbarItem) {\n  ToolbarItem[ToolbarItem[\"Add\"] = 0] = \"Add\";\n  ToolbarItem[ToolbarItem[\"Edit\"] = 1] = \"Edit\";\n  ToolbarItem[ToolbarItem[\"Update\"] = 2] = \"Update\";\n  ToolbarItem[ToolbarItem[\"Delete\"] = 3] = \"Delete\";\n  ToolbarItem[ToolbarItem[\"Cancel\"] = 4] = \"Cancel\";\n  ToolbarItem[ToolbarItem[\"Print\"] = 5] = \"Print\";\n  ToolbarItem[ToolbarItem[\"Search\"] = 6] = \"Search\";\n  ToolbarItem[ToolbarItem[\"ColumnChooser\"] = 7] = \"ColumnChooser\";\n  ToolbarItem[ToolbarItem[\"PdfExport\"] = 8] = \"PdfExport\";\n  ToolbarItem[ToolbarItem[\"ExcelExport\"] = 9] = \"ExcelExport\";\n  ToolbarItem[ToolbarItem[\"CsvExport\"] = 10] = \"CsvExport\";\n  ToolbarItem[ToolbarItem[\"WordExport\"] = 11] = \"WordExport\";\n})(ToolbarItem || (ToolbarItem = {}));\n/**\n * Defines types of responsive dialogs\n * @hidden\n */\n\n\nexport var ResponsiveDialogAction;\n\n(function (ResponsiveDialogAction) {\n  /**  Defines dialog type as Edit */\n  ResponsiveDialogAction[ResponsiveDialogAction[\"isEdit\"] = 0] = \"isEdit\";\n  /**  Defines dialog type as Add */\n\n  ResponsiveDialogAction[ResponsiveDialogAction[\"isAdd\"] = 1] = \"isAdd\";\n  /**  Defines dialog type as Sort */\n\n  ResponsiveDialogAction[ResponsiveDialogAction[\"isSort\"] = 2] = \"isSort\";\n  /**  Defines dialog type as Filter */\n\n  ResponsiveDialogAction[ResponsiveDialogAction[\"isFilter\"] = 3] = \"isFilter\";\n})(ResponsiveDialogAction || (ResponsiveDialogAction = {}));\n/**\n * Defines responsive toolbar actions\n * @hidden\n */\n\n\nexport var ResponsiveToolbarAction;\n\n(function (ResponsiveToolbarAction) {\n  /**  Defines initial responsive toolbar buttons */\n  ResponsiveToolbarAction[ResponsiveToolbarAction[\"isInitial\"] = 0] = \"isInitial\";\n  /**  Defines responsive toolbar search */\n\n  ResponsiveToolbarAction[ResponsiveToolbarAction[\"isSearch\"] = 1] = \"isSearch\";\n})(ResponsiveToolbarAction || (ResponsiveToolbarAction = {}));","/**\n * Specifies class names\n */\n\n/** @hidden */\nexport var rowCell = 'e-rowcell';\n/** @hidden */\n\nexport var gridHeader = 'e-gridheader';\n/** @hidden */\n\nexport var gridContent = 'e-gridcontent';\n/** @hidden */\n\nexport var gridFooter = 'e-gridfooter';\n/** @hidden */\n\nexport var headerContent = 'e-headercontent';\n/** @hidden */\n\nexport var movableContent = 'e-movablecontent';\n/** @hidden */\n\nexport var movableHeader = 'e-movableheader';\n/** @hidden */\n\nexport var frozenContent = 'e-frozencontent';\n/** @hidden */\n\nexport var frozenHeader = 'e-frozenheader';\n/** @hidden */\n\nexport var content = 'e-content';\n/** @hidden */\n\nexport var table = 'e-table';\n/** @hidden */\n\nexport var row = 'e-row';\n/** @hidden */\n\nexport var gridChkBox = 'e-gridchkbox';\n/** @hidden */\n\nexport var editedRow = 'e-editedrow';\n/** @hidden */\n\nexport var addedRow = 'e-addedrow';\n/**\n * Specifies repeated strings\n */\n\n/** @hidden */\n\nexport var changedRecords = 'changedRecords';\n/** @hidden */\n\nexport var addedRecords = 'addedRecords';\n/** @hidden */\n\nexport var deletedRecords = 'deletedRecords';\n/** @hidden */\n\nexport var leftRight = 'Left-Right';\n/** @hidden */\n\nexport var frozenRight = 'frozen-right';\n/** @hidden */\n\nexport var frozenLeft = 'frozen-left';\n/** @hidden */\n\nexport var ariaColIndex = 'aria-colindex';\n/** @hidden */\n\nexport var ariaRowIndex = 'aria-rowindex';\n/** @hidden */\n\nexport var tbody = 'tbody';\n/** @hidden */\n\nexport var colGroup = 'colgroup';","import { ChildProperty, compile as baseTemplateComplier, setValue, Internationalization, isUndefined, closest } from '@syncfusion/ej2-base';\nimport { extend as baseExtend, isNullOrUndefined, getValue, classList } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, addClass, attributes, remove, createElement, removeClass } from '@syncfusion/ej2-base';\nimport { isObject, isBlazor, Browser, select, selectAll } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager, Predicate, UrlAdaptor, Deferred } from '@syncfusion/ej2-data';\nimport { Column } from '../models/column';\nimport { calculateRelativeBasedPosition } from '@syncfusion/ej2-popups';\nimport { Print } from '../actions/print';\nimport * as literals from '../base/string-literals'; //https://typescript.codeplex.com/discussions/401501\n\n/**\n * Function to check whether target object implement specific interface\n * @param  {Object} target\n * @param  {string} checkFor\n * @returns no\n * @hidden\n */\n\nexport function doesImplementInterface(target, checkFor) {\n  /* tslint:disable:no-any */\n  return target.prototype && checkFor in target.prototype;\n}\n/**\n * Function to get value from provided data\n * @param  {string} field\n * @param  {Object} data\n * @param  {IColumn} column\n * @hidden\n */\n\nexport function valueAccessor(field, data, column) {\n  return isNullOrUndefined(field) || field === '' ? '' : DataUtil.getObject(field, data);\n}\n/**\n * Defines the method used to apply custom header cell values from external function and display this on each header cell rendered.\n * @param  {string} field\n * @param  {IColumn} column\n * @hidden\n */\n\nexport function headerValueAccessor(field, column) {\n  return isNullOrUndefined(field) || field === '' ? '' : DataUtil.getObject(field, column);\n}\n/**\n * The function used to update Dom using requestAnimationFrame.\n * @param  {Function} fn - Function that contains the actual action\n * @return {Promise<T>}\n * @hidden\n */\n\nexport function getUpdateUsingRaf(updateFunction, callBack) {\n  requestAnimationFrame(function () {\n    try {\n      callBack(null, updateFunction());\n    } catch (e) {\n      callBack(e);\n    }\n  });\n}\n/**\n * @hidden\n */\n\nexport function isExportColumns(exportProperties) {\n  return !isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.columns) && exportProperties.columns.length > 0;\n}\n/**\n * @hidden\n */\n\nexport function updateColumnTypeForExportColumns(exportProperties, gObj) {\n  var exportColumns = exportProperties.columns;\n  var gridColumns = gObj.columns;\n\n  for (var i = 0; i < exportColumns.length; i++) {\n    if (gridColumns.length - 1 >= i) {\n      if (gridColumns[i].columns) {\n        for (var j = 0; j < gridColumns[i].columns.length; j++) {\n          exportColumns[i].columns[j].type = gridColumns[i].columns[j].type;\n        }\n      } else {\n        exportColumns[i].type = gridColumns[i].type;\n      }\n    }\n  }\n}\n/**\n * @hidden\n */\n\nexport function updatecloneRow(grid) {\n  var nRows = [];\n  var actualRows = grid.vRows;\n\n  for (var i = 0; i < actualRows.length; i++) {\n    if (actualRows[i].isDataRow) {\n      nRows.push(actualRows[i]);\n    } else if (!actualRows[i].isDataRow) {\n      nRows.push(actualRows[i]);\n\n      if (!actualRows[i].isExpand && actualRows[i].isCaptionRow) {\n        i += getCollapsedRowsCount(actualRows[i], grid);\n      }\n    }\n  }\n\n  grid.vcRows = nRows;\n}\n/**\n * @hidden\n */\n\nvar count = 0;\nexport function getCollapsedRowsCount(val, grid) {\n  count = 0;\n  var gSummary = 'gSummary';\n  var total = 'count';\n  var gLen = grid.groupSettings.columns.length;\n  var records = 'records';\n  var items = 'items';\n  var value = val[gSummary];\n  var dataRowCnt = 0;\n  var agrCnt = 'aggregatesCount';\n\n  if (value === val.data[total]) {\n    if (grid.groupSettings.columns.length && !isNullOrUndefined(val[agrCnt]) && val[agrCnt]) {\n      if (grid.groupSettings.columns.length !== 1) {\n        count += val.indent !== 0 && value < 2 ? val[gSummary] * (gLen - val.indent + (gLen - val.indent) * val[agrCnt]) : val[gSummary] * (gLen - val.indent + (gLen - val.indent - 1) * val[agrCnt]) + val[agrCnt];\n      } else if (grid.groupSettings.columns.length === 1) {\n        count += val[gSummary] * (gLen - val.indent) + val[agrCnt];\n      }\n    } else if (grid.groupSettings.columns.length) {\n      if (grid.groupSettings.columns.length !== 1) {\n        count += val[gSummary] * (grid.groupSettings.columns.length - val.indent);\n      } else {\n        count += val[gSummary];\n      }\n    }\n\n    return count;\n  } else {\n    for (var i = 0, len = val.data[items].length; i < len; i++) {\n      var gLevel = val.data[items][i];\n      count += gLevel[items].length + (gLen !== grid.columns.length && !isNullOrUndefined(gLevel[items][records]) ? gLevel[items][records].length : 0);\n      dataRowCnt += !isNullOrUndefined(gLevel[items][records]) && !isNullOrUndefined(val[agrCnt]) ? gLevel[items][records].length : gLevel[items].length;\n\n      if (gLevel[items].GroupGuid && gLevel[items].childLevels !== 0) {\n        recursive(gLevel);\n      }\n    }\n\n    count += val.data[items].length;\n\n    if (!isNullOrUndefined(val[agrCnt])) {\n      if (val[agrCnt] && count && dataRowCnt !== 0) {\n        count += (count - dataRowCnt) * val[agrCnt] + val[agrCnt];\n      }\n    }\n  }\n\n  return count;\n}\n/**\n * @hidden\n */\n\nexport function recursive(row) {\n  var items = 'items';\n  var rCount = 'count';\n\n  for (var j = 0, length_1 = row[items].length; j < length_1; j++) {\n    var nLevel = row[items][j];\n    count += nLevel[rCount];\n\n    if (nLevel[items].childLevels !== 0) {\n      recursive(nLevel);\n    }\n  }\n}\n/**\n * @hidden\n */\n\nexport function iterateArrayOrObject(collection, predicate) {\n  var result = [];\n\n  for (var i = 0, len = collection.length; i < len; i++) {\n    var pred = predicate(collection[i], i);\n\n    if (!isNullOrUndefined(pred)) {\n      result.push(pred);\n    }\n  }\n\n  return result;\n}\n/** @hidden */\n\nexport function iterateExtend(array) {\n  var obj = [];\n\n  for (var i = 0; i < array.length; i++) {\n    obj.push(baseExtend({}, getActualProperties(array[i]), {}, true));\n  }\n\n  return obj;\n}\n/** @hidden */\n\nexport function templateCompiler(template) {\n  if (template) {\n    var e = void 0;\n\n    try {\n      if (document.querySelectorAll(template).length) {\n        return baseTemplateComplier(document.querySelector(template).innerHTML.trim());\n      }\n    } catch (e) {\n      return baseTemplateComplier(template);\n    }\n  }\n\n  return undefined;\n}\n/** @hidden */\n\nexport function setStyleAndAttributes(node, customAttributes) {\n  var copyAttr = {};\n  var literals = ['style', 'class']; //Dont touch the original object - make a copy\n\n  baseExtend(copyAttr, customAttributes, {});\n\n  if ('style' in copyAttr) {\n    setStyleAttribute(node, copyAttr[literals[0]]);\n    delete copyAttr[literals[0]];\n  }\n\n  if ('class' in copyAttr) {\n    addClass([node], copyAttr[literals[1]]);\n    delete copyAttr[literals[1]];\n  }\n\n  attributes(node, copyAttr);\n}\n/** @hidden */\n\nexport function extend(copied, first, second, exclude) {\n  var moved = baseExtend(copied, first, second);\n  var values = Object.keys(moved);\n\n  for (var i = 0; i < values.length; i++) {\n    if (exclude && exclude.indexOf(values[i]) !== -1) {\n      delete moved[values[i]];\n    }\n  }\n\n  return moved;\n}\n/** @hidden */\n\nexport function setColumnIndex(columnModel, ind) {\n  if (ind === void 0) {\n    ind = 0;\n  }\n\n  for (var i = 0, len = columnModel.length; i < len; i++) {\n    if (columnModel[i].columns) {\n      columnModel[i].index = isNullOrUndefined(columnModel[i].index) ? ind : columnModel[i].index;\n      ind++;\n      ind = setColumnIndex(columnModel[i].columns, ind);\n    } else {\n      columnModel[i].index = isNullOrUndefined(columnModel[i].index) ? ind : columnModel[i].index;\n      ind++;\n    }\n  }\n\n  return ind;\n}\n/** @hidden */\n\nexport function prepareColumns(columns, autoWidth, gObj) {\n  for (var c = 0, len = columns.length; c < len; c++) {\n    var column = void 0;\n\n    if (typeof columns[c] === 'string') {\n      column = new Column({\n        field: columns[c]\n      }, gObj);\n    } else if (!(columns[c] instanceof Column)) {\n      if (!columns[c].columns) {\n        column = new Column(columns[c], gObj);\n      } else {\n        columns[c].columns = prepareColumns(columns[c].columns, null, gObj);\n        column = new Column(columns[c], gObj);\n      }\n    } else {\n      column = columns[c];\n    }\n\n    if (column.type && column.type.toLowerCase() === 'checkbox') {\n      column.allowReordering = false;\n    }\n\n    column.headerText = isNullOrUndefined(column.headerText) ? column.foreignKeyValue || column.field || '' : column.headerText;\n    column.foreignKeyField = column.foreignKeyField || column.field;\n    column.valueAccessor = (typeof column.valueAccessor === 'string' ? getValue(column.valueAccessor, window) : column.valueAccessor) || valueAccessor;\n    column.width = autoWidth && isNullOrUndefined(column.width) ? 200 : column.width;\n\n    if (isNullOrUndefined(column.visible)) {\n      column.visible = true;\n    }\n\n    columns[c] = column;\n  }\n\n  return columns;\n}\n/** @hidden */\n\nexport function setCssInGridPopUp(popUp, e, className) {\n  var popUpSpan = popUp.querySelector('span');\n  var position = popUp.parentElement.getBoundingClientRect();\n  var targetPosition = e.target.getBoundingClientRect();\n  var isBottomTail;\n  popUpSpan.className = className;\n  popUp.style.display = '';\n  isBottomTail = (isNullOrUndefined(e.clientY) ? e.changedTouches[0].clientY : e.clientY) > popUp.offsetHeight + 10;\n  popUp.style.top = targetPosition.top - position.top + (isBottomTail ? -(popUp.offsetHeight + 10) : popUp.offsetHeight + 10) + 'px'; //10px for tail element\n\n  popUp.style.left = getPopupLeftPosition(popUp, e, targetPosition, position.left) + 'px';\n\n  if (isBottomTail) {\n    popUp.querySelector('.e-downtail').style.display = '';\n    popUp.querySelector('.e-uptail').style.display = 'none';\n  } else {\n    popUp.querySelector('.e-downtail').style.display = 'none';\n    popUp.querySelector('.e-uptail').style.display = '';\n  }\n}\n/** @hidden */\n\nfunction getPopupLeftPosition(popup, e, targetPosition, left) {\n  var width = popup.offsetWidth / 2;\n  var x = getPosition(e).x;\n\n  if (x - targetPosition.left < width) {\n    return targetPosition.left - left;\n  } else if (targetPosition.right - x < width) {\n    return targetPosition.right - left - width * 2;\n  } else {\n    return x - left - width;\n  }\n}\n/** @hidden */\n\n\nexport function getActualProperties(obj) {\n  if (obj instanceof ChildProperty) {\n    return getValue('properties', obj);\n  } else {\n    return obj;\n  }\n}\n/** @hidden */\n\nexport function parentsUntil(elem, selector, isID) {\n  var parent = elem;\n\n  while (parent) {\n    if (isID ? parent.id === selector : parent.classList.contains(selector)) {\n      break;\n    }\n\n    parent = parent.parentElement;\n  }\n\n  return parent;\n}\n/** @hidden */\n\nexport function getElementIndex(element, elements) {\n  var index = -1;\n\n  for (var i = 0, len = elements.length; i < len; i++) {\n    if (elements[i].isEqualNode(element)) {\n      index = i;\n      break;\n    }\n  }\n\n  return index;\n}\n/** @hidden */\n\nexport function inArray(value, collection) {\n  for (var i = 0, len = collection.length; i < len; i++) {\n    if (collection[i] === value) {\n      return i;\n    }\n  }\n\n  return -1;\n}\n/** @hidden */\n\nexport function getActualPropFromColl(collection) {\n  var coll = [];\n\n  for (var i = 0, len = collection.length; i < len; i++) {\n    if (collection[i].hasOwnProperty('properties')) {\n      coll.push(collection[i].properties);\n    } else {\n      coll.push(collection[i]);\n    }\n  }\n\n  return coll;\n}\n/** @hidden */\n\nexport function removeElement(target, selector) {\n  var elements = [].slice.call(target.querySelectorAll(selector));\n\n  for (var i = 0; i < elements.length; i++) {\n    remove(elements[i]);\n  }\n}\n/** @hidden */\n\nexport function getPosition(e) {\n  var position = {};\n  position.x = isNullOrUndefined(e.clientX) ? e.changedTouches[0].clientX : e.clientX;\n  position.y = isNullOrUndefined(e.clientY) ? e.changedTouches[0].clientY : e.clientY;\n  return position;\n}\nvar uid = 0;\n/** @hidden */\n\nexport function getUid(prefix) {\n  return prefix + uid++;\n}\n/** @hidden */\n\nexport function appendChildren(elem, children) {\n  for (var i = 0, len = children.length; i < len; i++) {\n    if (len === children.length) {\n      elem.appendChild(children[i]);\n    } else {\n      elem.appendChild(children[0]);\n    }\n  }\n\n  return elem;\n}\n/** @hidden */\n\nexport function parents(elem, selector, isID) {\n  var parent = elem;\n  var parents = [];\n\n  while (parent) {\n    if (isID ? parent.id === selector : parent.classList.contains(selector)) {\n      parents.push(parent);\n    }\n\n    parent = parent.parentElement;\n  }\n\n  return parents;\n}\n/** @hidden */\n\nexport function calculateAggregate(type, data, column, context) {\n  if (type === 'Custom') {\n    var temp = column.customAggregate;\n\n    if (typeof temp === 'string') {\n      temp = getValue(temp, window);\n    }\n\n    return temp ? temp.call(context, data, column) : '';\n  }\n\n  return column.field in data || data instanceof Array ? DataUtil.aggregates[type.toLowerCase()](data, column.field) : null;\n}\n/** @hidden */\n\nvar scrollWidth = null;\n/** @hidden */\n\nexport function getScrollBarWidth() {\n  if (scrollWidth !== null) {\n    return scrollWidth;\n  }\n\n  var divNode = document.createElement('div');\n  var value = 0;\n  divNode.style.cssText = 'width:100px;height: 100px;overflow: scroll;position: absolute;top: -9999px;';\n  document.body.appendChild(divNode);\n  value = divNode.offsetWidth - divNode.clientWidth | 0;\n  document.body.removeChild(divNode);\n  return scrollWidth = value;\n}\n/** @hidden */\n\nvar rowHeight;\n/** @hidden */\n\nexport function getRowHeight(element) {\n  if (rowHeight !== undefined) {\n    return rowHeight;\n  }\n\n  var table = createElement('table', {\n    className: literals.table,\n    styles: 'visibility: hidden'\n  });\n  table.innerHTML = '<tr><td class=\"e-rowcell\">A<td></tr>';\n  element.appendChild(table);\n  var rect = table.querySelector('td').getBoundingClientRect();\n  element.removeChild(table);\n  rowHeight = Math.ceil(rect.height);\n  return rowHeight;\n}\n/** @hidden */\n\nvar actualRowHeight;\n/** @hidden */\n\nexport function getActualRowHeight(element) {\n  if (actualRowHeight !== undefined) {\n    return rowHeight;\n  }\n\n  var table = createElement('table', {\n    className: literals.table,\n    styles: 'visibility: hidden'\n  });\n  table.innerHTML = '<tr><td class=\"e-rowcell\">A<td></tr>';\n  element.appendChild(table);\n  var rect = table.querySelector('tr').getBoundingClientRect();\n  element.removeChild(table);\n  return rect.height;\n}\n/** @hidden */\n\nexport function isComplexField(field) {\n  return field.split('.').length > 1;\n}\n/** @hidden */\n\nexport function getComplexFieldID(field) {\n  if (field === void 0) {\n    field = '';\n  }\n\n  return field.replace(/\\./g, '___');\n}\n/** @hidden */\n\nexport function setComplexFieldID(field) {\n  if (field === void 0) {\n    field = '';\n  }\n\n  return field.replace(/___/g, '.');\n}\n/** @hidden */\n\nexport function isEditable(col, type, elem) {\n  var row = parentsUntil(elem, literals.row);\n  var isOldRow = !row ? true : row && !row.classList.contains('e-insertedrow');\n\n  if (type === 'beginEdit' && isOldRow) {\n    if (col.isIdentity || col.isPrimaryKey || !col.allowEditing) {\n      return false;\n    }\n\n    return true;\n  } else if (type === 'add' && col.isIdentity) {\n    return false;\n  } else {\n    if (isOldRow && !col.allowEditing && !col.isIdentity && !col.isPrimaryKey) {\n      return false;\n    }\n\n    return true;\n  }\n}\n/** @hidden */\n\nexport function isActionPrevent(inst) {\n  var dlg = select('#' + inst.element.id + 'EditConfirm', inst.element);\n  return inst.editSettings.mode === 'Batch' && selectAll('.e-updatedtd', inst.element).length && inst.editSettings.showConfirmDialog && (dlg ? dlg.classList.contains('e-popup-close') : true);\n}\n/** @hidden */\n\nexport function wrap(elem, action) {\n  var clName = 'e-wrap';\n  elem = elem instanceof Array ? elem : [elem];\n\n  for (var i = 0; i < elem.length; i++) {\n    action ? elem[i].classList.add(clName) : elem[i].classList.remove(clName);\n  }\n}\n/** @hidden */\n\nexport function setFormatter(serviceLocator, column, isServerRendered) {\n  var fmtr = serviceLocator.getService('valueFormatter');\n  var format = 'format';\n  var args;\n\n  if (column.type === 'date' || column.type === 'datetime') {\n    args = {\n      type: column.type,\n      skeleton: column.format\n    };\n\n    if (isBlazor() && isServerRendered) {\n      var isServer = 'isServerRendered';\n      args[isServer] = isServerRendered;\n    }\n\n    if (typeof column.format === 'string' && column.format !== 'yMd') {\n      args[format] = column.format;\n    }\n  }\n\n  switch (column.type) {\n    case 'date':\n      column.setFormatter(fmtr.getFormatFunction(args));\n      column.setParser(fmtr.getParserFunction(args));\n      break;\n\n    case 'datetime':\n      column.setFormatter(fmtr.getFormatFunction(args));\n      column.setParser(fmtr.getParserFunction(args));\n      break;\n\n    case 'number':\n      column.setFormatter(fmtr.getFormatFunction({\n        format: column.format\n      }));\n      column.setParser(fmtr.getParserFunction({\n        format: column.format\n      }));\n      break;\n  }\n}\n/** @hidden */\n\nexport function addRemoveActiveClasses(cells, add) {\n  var args = [];\n\n  for (var _i = 2; _i < arguments.length; _i++) {\n    args[_i - 2] = arguments[_i];\n  }\n\n  for (var i = 0, len = cells.length; i < len; i++) {\n    if (add) {\n      classList(cells[i], args.slice(), []);\n      cells[i].setAttribute('aria-selected', 'true');\n    } else {\n      classList(cells[i], [], args.slice());\n      cells[i].removeAttribute('aria-selected');\n    }\n  }\n}\n/** @hidden */\n\nexport function distinctStringValues(result) {\n  var temp = {};\n  var res = [];\n\n  for (var i = 0; i < result.length; i++) {\n    if (!(result[i] in temp)) {\n      res.push(result[i].toString());\n      temp[result[i]] = 1;\n    }\n  }\n\n  return res;\n}\n/** @hidden */\n\nexport function getFilterMenuPostion(target, dialogObj, grid) {\n  var elementVisible = dialogObj.element.style.display;\n  dialogObj.element.style.display = 'block';\n  var dlgWidth = dialogObj.width;\n  var newpos;\n  newpos = calculateRelativeBasedPosition(target, dialogObj.element);\n  dialogObj.element.style.display = elementVisible;\n  dialogObj.element.style.top = newpos.top + target.getBoundingClientRect().height - 5 + 'px';\n  var leftPos = newpos.left - dlgWidth + target.clientWidth;\n\n  if (leftPos < 1) {\n    dialogObj.element.style.left = dlgWidth + leftPos - 16 + 'px'; // right calculation\n  } else {\n    dialogObj.element.style.left = leftPos + -4 + 'px';\n  }\n}\n/** @hidden */\n\nexport function getZIndexCalcualtion(args, dialogObj) {\n  args.popup.element.style.zIndex = (dialogObj.zIndex + 1).toString();\n}\n/** @hidden */\n\nexport function toogleCheckbox(elem) {\n  var span = elem.querySelector('.e-frame');\n  var input = span.previousSibling;\n\n  if (span.classList.contains('e-check')) {\n    input.checked = false;\n    classList(span, ['e-uncheck'], ['e-check']);\n  } else {\n    input.checked = true;\n    classList(span, ['e-check'], ['e-uncheck']);\n  }\n}\n/** @hidden */\n\nexport function setChecked(elem, checked) {\n  elem.checked = checked;\n}\n/** @hidden */\n\nexport function createCboxWithWrap(uid, elem, className) {\n  var div = createElement('div', {\n    className: className\n  });\n  div.appendChild(elem);\n  div.setAttribute('uid', uid);\n  return div;\n}\n/** @hidden */\n\nexport function removeAddCboxClasses(elem, checked) {\n  removeClass([elem], ['e-check', 'e-stop', 'e-uncheck']);\n\n  if (checked) {\n    elem.classList.add('e-check');\n  } else {\n    elem.classList.add('e-uncheck');\n  }\n}\n/**\n * Refresh the Row model's foreign data.\n * @param row - Grid Row model object.\n * @param columns - Foreign columns array.\n * @param data - Updated Row data.\n * @hidden\n */\n\nexport function refreshForeignData(row, columns, data) {\n  for (var i = 0; i < columns.length; i++) {\n    setValue(columns[i].field, getForeignData(columns[i], data), row.foreignKeyData);\n  }\n\n  var cells = row.cells;\n\n  for (var i = 0; i < cells.length; i++) {\n    if (cells[i].isForeignKey) {\n      setValue('foreignKeyData', getValue(cells[i].column.field, row.foreignKeyData), cells[i]);\n    }\n  }\n}\n/**\n * Get the foreign data for the corresponding cell value.\n * @param column - Foreign Key column\n * @param data - Row data.\n * @param lValue - cell value.\n * @param foreignData - foreign data source.\n * @hidden\n */\n\nexport function getForeignData(column, data, lValue, foreignKeyData) {\n  var fField = column.foreignKeyField;\n  var key = !isNullOrUndefined(lValue) ? lValue : valueAccessor(column.field, data, column);\n  key = isNullOrUndefined(key) ? '' : key;\n  var query = new Query();\n  var fdata = foreignKeyData || (column.dataSource instanceof DataManager && column.dataSource.dataSource.json.length ? column.dataSource.dataSource.json : column.columnData);\n\n  if (key.getDay) {\n    query.where(getDatePredicate({\n      field: fField,\n      operator: 'equal',\n      value: key,\n      matchCase: false\n    }));\n  } else {\n    query.where(fField, '==', key, false);\n  }\n\n  return new DataManager(fdata).executeLocal(query);\n}\n/**\n * To use to get the column's object by the foreign key value.\n * @param foreignKeyValue - Defines ForeignKeyValue.\n * @param columns - Array of column object.\n * @hidden\n */\n\nexport function getColumnByForeignKeyValue(foreignKeyValue, columns) {\n  var column;\n  return columns.some(function (col) {\n    column = col;\n    return col.foreignKeyValue === foreignKeyValue;\n  }) && column;\n}\n/**\n * @hidden\n * @param filterObject - Defines predicate model object\n */\n\nexport function getDatePredicate(filterObject, type) {\n  var datePredicate;\n  var prevDate;\n  var nextDate;\n  var prevObj = baseExtend({}, getActualProperties(filterObject));\n  var nextObj = baseExtend({}, getActualProperties(filterObject));\n\n  if (isNullOrUndefined(filterObject.value)) {\n    datePredicate = new Predicate(prevObj.field, prevObj.operator, prevObj.value, false);\n    return datePredicate;\n  }\n\n  var value = new Date(filterObject.value);\n\n  if (filterObject.operator === 'equal' || filterObject.operator === 'notequal') {\n    if (type === 'datetime') {\n      prevDate = new Date(value.setSeconds(value.getSeconds() - 1));\n      nextDate = new Date(value.setSeconds(value.getSeconds() + 2));\n      filterObject.value = new Date(value.setSeconds(nextDate.getSeconds() - 1));\n    } else {\n      prevDate = new Date(value.setHours(0) - 1);\n      nextDate = new Date(value.setHours(24));\n    }\n\n    prevObj.value = prevDate;\n    nextObj.value = nextDate;\n\n    if (filterObject.operator === 'equal') {\n      prevObj.operator = 'greaterthan';\n      nextObj.operator = 'lessthan';\n    } else if (filterObject.operator === 'notequal') {\n      prevObj.operator = 'lessthanorequal';\n      nextObj.operator = 'greaterthanorequal';\n    }\n\n    var predicateSt = new Predicate(prevObj.field, prevObj.operator, prevObj.value, false);\n    var predicateEnd = new Predicate(nextObj.field, nextObj.operator, nextObj.value, false);\n    datePredicate = filterObject.operator === 'equal' ? predicateSt.and(predicateEnd) : predicateSt.or(predicateEnd);\n  } else {\n    if (typeof prevObj.value === 'string') {\n      prevObj.value = new Date(prevObj.value);\n    }\n\n    var predicates = new Predicate(prevObj.field, prevObj.operator, prevObj.value, false);\n    datePredicate = predicates;\n  }\n\n  if (filterObject.setProperties) {\n    filterObject.setProperties({\n      ejpredicate: datePredicate\n    }, true);\n  } else {\n    filterObject.ejpredicate = datePredicate;\n  }\n\n  return datePredicate;\n}\n/**\n * @hidden\n */\n\nexport function renderMovable(ele, frzCols, gObj) {\n  frzCols = frzCols && gObj && gObj.isRowDragable() ? frzCols + 1 : frzCols;\n  var mEle = ele.cloneNode(true);\n\n  for (var i = 0; i < frzCols; i++) {\n    mEle.removeChild(mEle.children[0]);\n  }\n\n  for (var i = frzCols, len = ele.childElementCount; i < len; i++) {\n    ele.removeChild(ele.children[ele.childElementCount - 1]);\n  }\n\n  return mEle;\n}\n/**\n * @hidden\n */\n\nexport function isGroupAdaptive(grid) {\n  return grid.enableVirtualization && grid.groupSettings.columns.length > 0 && grid.isVirtualAdaptive;\n}\n/**\n * @hidden\n */\n\nexport function getObject(field, object) {\n  if (field === void 0) {\n    field = '';\n  }\n\n  if (field) {\n    var value = object;\n    var splits = field.split('.');\n\n    for (var i = 0; i < splits.length && !isNullOrUndefined(value); i++) {\n      value = value[splits[i]];\n    }\n\n    return value;\n  }\n}\n/**\n * @hidden\n */\n\nexport function getCustomDateFormat(format, colType) {\n  var intl = new Internationalization();\n  var formatvalue;\n  var formatter = 'format';\n  var type = 'type';\n\n  if (colType === 'date') {\n    formatvalue = typeof format === 'object' ? intl.getDatePattern({\n      type: format[type] ? format[type] : 'date',\n      format: format[formatter]\n    }, false) : isBlazor() ? intl.getDatePattern({\n      type: 'dateTime',\n      format: format\n    }, false) : intl.getDatePattern({\n      type: 'dateTime',\n      skeleton: format\n    }, false);\n  } else {\n    formatvalue = typeof format === 'object' ? intl.getDatePattern({\n      type: format[type] ? format[type] : 'dateTime',\n      format: format[formatter]\n    }, false) : isBlazor() ? intl.getDatePattern({\n      type: 'dateTime',\n      format: format\n    }, false) : intl.getDatePattern({\n      type: 'dateTime',\n      skeleton: format\n    }, false);\n  }\n\n  return formatvalue;\n}\n/**\n * @hidden\n */\n\nexport function getExpandedState(gObj, hierarchyPrintMode) {\n  var rows = gObj.getRowsObject();\n  var obj = {};\n\n  for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n    var row = rows_1[_i];\n\n    if (row.isExpand && !row.isDetailRow) {\n      var index = gObj.allowPaging && gObj.printMode === 'AllPages' ? row.index + gObj.pageSettings.currentPage * gObj.pageSettings.pageSize - gObj.pageSettings.pageSize : row.index;\n      obj[index] = {};\n      obj[index].isExpand = true;\n      obj[index].gridModel = getPrintGridModel(row.childGrid, hierarchyPrintMode);\n      obj[index].gridModel.query = gObj.childGrid.query;\n    }\n  }\n\n  return obj;\n}\n/**\n * @hidden\n */\n\nexport function getPrintGridModel(gObj, hierarchyPrintMode) {\n  if (hierarchyPrintMode === void 0) {\n    hierarchyPrintMode = 'Expanded';\n  }\n\n  var printGridModel = {};\n\n  if (!gObj) {\n    return printGridModel;\n  }\n\n  var isFrozen = gObj.isFrozenGrid() && !gObj.getFrozenColumns();\n\n  for (var _i = 0, _a = Print.printGridProp; _i < _a.length; _i++) {\n    var key = _a[_i];\n\n    if (key === 'columns') {\n      printGridModel[key] = getActualPropFromColl(isFrozen ? gObj.getColumns() : gObj[key]);\n    } else if (key === 'allowPaging') {\n      printGridModel[key] = gObj.printMode === 'CurrentPage';\n    } else {\n      printGridModel[key] = getActualProperties(gObj[key]);\n    }\n  }\n\n  printGridModel['enableHover'] = false;\n\n  if (gObj.childGrid && hierarchyPrintMode !== 'None') {\n    printGridModel.expandedRows = getExpandedState(gObj, hierarchyPrintMode);\n  }\n\n  return printGridModel;\n}\n/**\n * @hidden\n */\n\nexport function extendObjWithFn(copied, first, second, deep) {\n  var res = copied || {};\n  var len = arguments.length;\n\n  if (deep) {\n    len = len - 1;\n  }\n\n  for (var i = 1; i < len; i++) {\n    if (!arguments[i]) {\n      continue;\n    }\n\n    var obj1 = arguments[i];\n    var keys = Object.keys(Object.getPrototypeOf(obj1)).length ? Object.keys(obj1).concat(getPrototypesOfObj(obj1)) : Object.keys(obj1);\n\n    for (var i_1 = 0; i_1 < keys.length; i_1++) {\n      var source = res[keys[i_1]];\n      var cpy = obj1[keys[i_1]];\n      var cln = void 0;\n\n      if (deep && (isObject(cpy) || Array.isArray(cpy))) {\n        if (isObject(cpy)) {\n          cln = source ? source : {};\n          res[keys[i_1]] = baseExtend({}, cln, cpy, deep);\n        } else {\n          cln = source ? source : [];\n          res[keys[i_1]] = baseExtend([], cln, cpy, deep);\n        }\n      } else {\n        res[keys[i_1]] = cpy;\n      }\n    }\n  }\n\n  return res;\n}\n/**\n * @hidden\n */\n\nfunction getPrototypesOfObj(obj) {\n  var keys = [];\n\n  while (Object.getPrototypeOf(obj) && Object.keys(Object.getPrototypeOf(obj)).length) {\n    keys = keys.concat(Object.keys(Object.getPrototypeOf(obj)));\n    obj = Object.getPrototypeOf(obj);\n  }\n\n  return keys;\n}\n/**\n * @hidden\n */\n\n\nexport function measureColumnDepth(column) {\n  var max = 0;\n\n  for (var i = 0; i < column.length; i++) {\n    var depth = checkDepth(column[i], 0);\n\n    if (max < depth) {\n      max = depth;\n    }\n  }\n\n  return max + 1;\n}\n/**\n * @hidden\n */\n\nexport function checkDepth(col, index) {\n  var max = index;\n  var indices = [];\n\n  if (col.columns) {\n    index++;\n\n    for (var i = 0; i < col.columns.length; i++) {\n      indices[i] = checkDepth(col.columns[i], index);\n    }\n\n    for (var j = 0; j < indices.length; j++) {\n      if (max < indices[j]) {\n        max = indices[j];\n      }\n    }\n\n    index = max;\n  }\n\n  return index;\n}\n/**\n * @hidden\n */\n\nexport function refreshFilteredColsUid(gObj, filteredCols) {\n  for (var i = 0; i < filteredCols.length; i++) {\n    filteredCols[i].uid = filteredCols[i].isForeignKey ? getColumnByForeignKeyValue(filteredCols[i].field, gObj.getForeignKeyColumns()).uid : gObj.getColumnByField(filteredCols[i].field).uid;\n  }\n}\n/** @hidden */\n\nexport var Global;\n\n(function (Global) {\n  Global.timer = null;\n})(Global || (Global = {}));\n/**\n * @hidden\n */\n\n\nexport function getTransformValues(element) {\n  var style = document.defaultView.getComputedStyle(element, null);\n  var transformV = style.getPropertyValue('transform');\n  var replacedTv = transformV.replace(/,/g, '');\n  var translateX = parseFloat(replacedTv.split(' ')[4]);\n  var translateY = parseFloat(replacedTv.split(' ')[5]);\n  return {\n    width: translateX,\n    height: translateY\n  };\n}\n/** @hidden */\n\nexport function applyBiggerTheme(rootElement, element) {\n  if (rootElement.classList.contains('e-bigger')) {\n    element.classList.add('e-bigger');\n  }\n}\n/** @hidden */\n\nexport function alignFrozenEditForm(mTD, fTD) {\n  if (mTD && fTD) {\n    var mHeight = closest(mTD, '.' + literals.row).getBoundingClientRect().height;\n    var fHeight = closest(fTD, '.' + literals.row).getBoundingClientRect().height;\n\n    if (mHeight > fHeight) {\n      fTD.style.height = mHeight + 'px';\n    } else {\n      mTD.style.height = fHeight + 'px';\n    }\n  }\n}\n/** @hidden */\n\nexport function ensureLastRow(row, gridObj) {\n  var cntOffset = gridObj.getContent().firstElementChild.offsetHeight;\n  return row && row.getBoundingClientRect().top > cntOffset;\n}\n/** @hidden */\n\nexport function ensureFirstRow(row, rowTop) {\n  return row && row.getBoundingClientRect().top < rowTop;\n}\n/** @hidden */\n\nexport function isRowEnteredInGrid(index, gObj) {\n  var rowHeight = gObj.getRowHeight();\n  var startIndex = gObj.getContent().firstElementChild.scrollTop / rowHeight;\n  var endIndex = startIndex + gObj.getContent().firstElementChild.offsetHeight / rowHeight;\n  return index < endIndex && index > startIndex;\n}\n/** @hidden */\n\nexport function getEditedDataIndex(gObj, data) {\n  var keyField = gObj.getPrimaryKeyFieldNames()[0];\n  var dataIndex;\n  gObj.getCurrentViewRecords().filter(function (e, index) {\n    if (e[keyField] === data[keyField]) {\n      dataIndex = index;\n    }\n  });\n  return dataIndex;\n}\n/** @hidden */\n\nexport function eventPromise(args, query) {\n  var state;\n  state = getStateEventArgument(query);\n  var def = new Deferred();\n  state.dataSource = def.resolve;\n  state.action = args;\n  return {\n    state: state,\n    deffered: def\n  };\n}\n/** @hidden */\n\nexport function getStateEventArgument(query) {\n  var adaptr = new UrlAdaptor();\n  var dm = new DataManager({\n    url: '',\n    adaptor: new UrlAdaptor()\n  });\n  var state = adaptr.processQuery(dm, query);\n  var data = JSON.parse(state.data);\n  return data;\n}\n/** @hidden */\n\nexport function ispercentageWidth(gObj) {\n  var columns = gObj.getVisibleColumns();\n  var percentageCol = 0;\n  var undefinedWidthCol = 0;\n\n  for (var i = 0; i < columns.length; i++) {\n    if (isUndefined(columns[i].width)) {\n      undefinedWidthCol++;\n    } else if (columns[i].width.toString().indexOf('%') !== -1) {\n      percentageCol++;\n    }\n  }\n\n  return (gObj.width === 'auto' || typeof gObj.width === 'string' && gObj.width.indexOf('%') !== -1) && Browser.info.name !== 'chrome' && !gObj.groupSettings.showGroupedColumn && gObj.groupSettings.columns.length && percentageCol && !undefinedWidthCol;\n}\n/** @hidden */\n\nexport function resetRowIndex(gObj, rows, rowElms, index) {\n  var startIndex = index ? index : 0;\n\n  for (var i = 0; i < rows.length; i++) {\n    if (rows[i].isDataRow) {\n      rows[i].index = startIndex;\n      rows[i].isAltRow = gObj.enableAltRow ? startIndex % 2 !== 0 : false;\n      rowElms[i].setAttribute(literals.ariaRowIndex, startIndex.toString());\n      rows[i].isAltRow ? rowElms[i].classList.add('e-altrow') : rowElms[i].classList.remove('e-altrow');\n\n      for (var j = 0; j < rowElms[i].cells.length; j++) {\n        rowElms[i].cells[j].setAttribute('index', startIndex.toString());\n      }\n\n      startIndex++;\n    }\n  }\n\n  if (!rows.length) {\n    gObj.renderModule.emptyRow(true);\n  }\n}\n/** @hidden */\n\nexport function resetRowObjectIndex(gObj, rows, index) {\n  var startIndex = index ? index : 0;\n\n  for (var i = 0; i < rows.length; i++) {\n    rows[i].index = startIndex;\n    startIndex++;\n  }\n}\n/** @hidden */\n\nexport function compareChanges(gObj, changes, type, keyField) {\n  var newArray = gObj.dataToBeUpdated[type].concat(changes[type]).reduce(function (r, o) {\n    r[o[keyField]] = r[o[keyField]] === undefined ? o : Object.assign(r[o[keyField]], o);\n    return r;\n  }, {});\n  gObj.dataToBeUpdated[type] = Object.keys(newArray).map(function (k) {\n    return newArray[k];\n  });\n}\n/** @hidden */\n\nexport function setRowElements(gObj) {\n  if (gObj.isFrozenGrid()) {\n    gObj.contentModule.rowElements = [].slice.call(gObj.element.querySelectorAll('.e-movableheader .e-row, .e-movablecontent .e-row'));\n    var cls = gObj.getFrozenMode() === literals.leftRight ? '.e-frozen-left-header .e-row, .e-frozen-left-content .e-row' : '.e-frozenheader .e-row, .e-frozencontent .e-row';\n    gObj.contentModule.freezeRowElements = [].slice.call(gObj.element.querySelectorAll(cls));\n\n    if (gObj.getFrozenMode() === literals.leftRight) {\n      gObj.contentModule.frozenRightRowElements = [].slice.call(gObj.element.querySelectorAll('.e-frozen-right-header .e-row, .e-frozen-right-content .e-row'));\n    }\n  } else {\n    gObj.contentModule.rowElements = [].slice.call(gObj.element.querySelectorAll('.e-row:not(.e-addedrow)'));\n  }\n}\n/** @hidden */\n\nexport function splitFrozenRowObjectCells(gObj, cells, tableName) {\n  var left = gObj.getFrozenLeftCount();\n  var movable = gObj.getMovableColumnsCount();\n  var right = gObj.getFrozenRightColumnsCount();\n  var frozenMode = gObj.getFrozenMode();\n  var drag = gObj.isRowDragable() ? 1 : 0;\n  var rightIndex = frozenMode === 'Right' ? left + movable : left + movable + drag;\n  var mvblIndex = frozenMode === 'Right' ? left : left + drag;\n  var mvblEndIdx = frozenMode === 'Right' ? cells.length - right - drag : right ? cells.length - right : cells.length;\n\n  if (tableName === literals.frozenLeft) {\n    cells = cells.slice(0, left ? left + drag : cells.length);\n  } else if (tableName === literals.frozenRight) {\n    cells = cells.slice(rightIndex, cells.length);\n  } else if (tableName === 'movable') {\n    cells = cells.slice(mvblIndex, mvblEndIdx);\n  }\n\n  return cells;\n}\n/** @hidden */\n\nexport function gridActionHandler(gObj, callBack, rows, force, rowObj) {\n  if (rows[0].length || force) {\n    rowObj ? callBack(literals.frozenLeft, rows[0], rowObj[0]) : callBack(literals.frozenLeft, rows[0]);\n  }\n\n  if (gObj.isFrozenGrid() && (rows[1].length || force)) {\n    rowObj ? callBack('movable', rows[1], rowObj[1]) : callBack('movable', rows[1]);\n  }\n\n  if ((gObj.getFrozenMode() === literals.leftRight || gObj.getFrozenMode() === 'Right') && (rows[2].length || force)) {\n    rowObj ? callBack(literals.frozenRight, rows[2], rowObj[2]) : callBack(literals.frozenRight, rows[2]);\n  }\n}\n/** @hidden */\n\nexport function getGridRowObjects(gObj) {\n  return [gObj.getFrozenMode() !== 'Right' ? gObj.getRowsObject() : [], gObj.getMovableRowsObject(), gObj.getFrozenRightRowsObject()];\n}\n/** @hidden */\n\nexport function getGridRowElements(gObj) {\n  return [gObj.getFrozenMode() !== 'Right' ? gObj.getAllDataRows(true) : [], gObj.getAllMovableDataRows(true), gObj.getAllFrozenRightDataRows(true)];\n}\n/** @hidden */\n\nexport function sliceElements(row, start, end) {\n  var cells = row.children;\n  var len = cells.length;\n  var k = 0;\n\n  for (var i = 0; i < len; i++, k++) {\n    if (i >= start && i < end) {\n      continue;\n    }\n\n    row.removeChild(row.children[k]);\n    k--;\n  }\n}\n/** @hidden */\n\nexport function getCellsByTableName(gObj, col, rowIndex) {\n  if (col.getFreezeTableName() === 'movable') {\n    return [].slice.call(gObj.getMovableDataRows()[rowIndex].getElementsByClassName(literals.rowCell));\n  } else if (col.getFreezeTableName() === literals.frozenRight) {\n    return [].slice.call(gObj.getFrozenRightDataRows()[rowIndex].getElementsByClassName(literals.rowCell));\n  } else {\n    return [].slice.call(gObj.getDataRows()[rowIndex].getElementsByClassName(literals.rowCell));\n  }\n}\n/** @hidden */\n\nexport function getCellByColAndRowIndex(gObj, col, rowIndex, index) {\n  var left = gObj.getFrozenLeftCount();\n  var movable = gObj.getMovableColumnsCount();\n  index = col.getFreezeTableName() === 'movable' ? index - left : col.getFreezeTableName() === literals.frozenRight ? index - (left + movable) : index;\n  return getCellsByTableName(gObj, col, rowIndex)[index];\n}\n/** @hidden */\n\nexport function setValidationRuels(col, index, rules, mRules, frRules, len) {\n  if (col.getFreezeTableName() === literals.frozenLeft || !index && col.getFreezeTableName() === literals.frozenRight || len === 1) {\n    rules[getComplexFieldID(col.field)] = col.validationRules;\n  } else if (col.getFreezeTableName() === 'movable' || !col.getFreezeTableName()) {\n    mRules[getComplexFieldID(col.field)] = col.validationRules;\n  } else if (col.getFreezeTableName() === literals.frozenRight) {\n    frRules[getComplexFieldID(col.field)] = col.validationRules;\n  }\n}\n/** @hidden */\n\nexport function getMovableTbody(gObj) {\n  var tbody;\n\n  if (gObj.isFrozenGrid()) {\n    tbody = gObj.frozenRows && gObj.editSettings.newRowPosition === 'Top' ? gObj.getMovableHeaderTbody() : gObj.getMovableContentTbody();\n  }\n\n  return tbody;\n}\n/** @hidden */\n\nexport function getFrozenRightTbody(gObj) {\n  var tbody;\n\n  if (gObj.getFrozenMode() === literals.leftRight) {\n    tbody = gObj.frozenRows && gObj.editSettings.newRowPosition === 'Top' ? gObj.getFrozenRightHeaderTbody() : gObj.getFrozenRightContentTbody();\n  }\n\n  return tbody;\n}\nexport function setRowsInTbody(tbody, mTbody, frTbody, tr, mTr, frTr, callBack) {\n  if (tbody && tr) {\n    callBack(tbody, tr);\n  }\n\n  if (mTbody && mTr) {\n    callBack(mTbody, mTr);\n  }\n\n  if (frTbody && frTr) {\n    callBack(frTbody, frTr);\n  }\n}\n/** @hidden */\n\nexport function getNumberFormat(numberFormat, type, isExcel) {\n  var format;\n  var intl = new Internationalization();\n\n  if (type === 'number') {\n    try {\n      format = intl.getNumberPattern({\n        format: numberFormat,\n        currency: this.currency,\n        useGrouping: true\n      }, true);\n    } catch (error) {\n      format = numberFormat;\n    }\n  } else if (type === 'date' || type === 'time' || type === 'datetime') {\n    try {\n      format = intl.getDatePattern({\n        skeleton: numberFormat,\n        type: type\n      }, isExcel);\n\n      if (isNullOrUndefined(format)) {\n        throw 'error';\n      }\n    } catch (error) {\n      try {\n        format = intl.getDatePattern({\n          format: numberFormat,\n          type: type\n        }, isExcel);\n      } catch (error) {\n        format = numberFormat;\n      }\n    }\n  } else {\n    format = numberFormat;\n  }\n\n  if (type !== 'number') {\n    var patternRegex = /G|H|c|'| a|yy|y|EEEE|E/g;\n    var mtch_1 = {\n      'G': '',\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    format = format.replace(patternRegex, function (pattern) {\n      return mtch_1[pattern];\n    });\n  }\n\n  return format;\n}\n/** @hidden */\n\nexport function addBiggerDialog(gObj) {\n  if (gObj.enableAdaptiveUI) {\n    var dialogs = document.getElementsByClassName('e-responsive-dialog');\n\n    for (var i = 0; i < dialogs.length; i++) {\n      dialogs[i].classList.add('e-bigger');\n    }\n  }\n}\n/** @hidden */\n\nexport function performComplexDataOperation(value, mapObject) {\n  var returnObj;\n  var length = value.split('.').length;\n  var splits = value.split('.');\n  var duplicateMap = mapObject;\n\n  for (var i = 0; i < length; i++) {\n    returnObj = duplicateMap[splits[i]];\n    duplicateMap = returnObj;\n  }\n\n  return returnObj;\n}\n/** @hidden */\n\nexport function setDisplayValue(tr, idx, displayVal, rows, parent, isContent) {\n  var trs = Object.keys(tr);\n\n  for (var i = 0; i < trs.length; i++) {\n    var td = tr[trs[i]].querySelectorAll('td.e-rowcell')[idx];\n\n    if (tr[trs[i]].querySelectorAll('td.e-rowcell').length && td) {\n      setStyleAttribute(tr[trs[i]].querySelectorAll('td.e-rowcell')[idx], {\n        'display': displayVal\n      });\n\n      if (tr[trs[i]].querySelectorAll('td.e-rowcell')[idx].classList.contains('e-hide')) {\n        removeClass([tr[trs[i]].querySelectorAll('td.e-rowcell')[idx]], ['e-hide']);\n      }\n\n      if (isContent && parent.isRowDragable()) {\n        var index = parent.getFrozenColumns() ? idx : idx + 1;\n        rows[trs[i]].cells[index].visible = displayVal === '' ? true : false;\n      } else {\n        rows[trs[i]].cells[idx].visible = displayVal === '' ? true : false;\n      }\n    }\n  }\n}\n/** @hidden */\n\nexport function addRemoveEventListener(parent, evt, isOn, module) {\n  for (var _i = 0, evt_1 = evt; _i < evt_1.length; _i++) {\n    var inst = evt_1[_i];\n    isOn ? parent.on(inst.event, inst.handler, module) : parent.off(inst.event, inst.handler);\n  }\n}\n/** @hidden */\n\nexport function createEditElement(parent, column, classNames, attr) {\n  /* tslint:disable-next-line:no-any */\n  var complexFieldName = getComplexFieldID(column.field);\n  attr = Object.assign(attr, {\n    id: parent.element.id + complexFieldName,\n    name: complexFieldName,\n    'e-mappinguid': column.uid\n  });\n  return parent.createElement('input', {\n    className: classNames,\n    attrs: attr\n  });\n}","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nvar __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nimport { compile } from '@syncfusion/ej2-base';\nimport { getEnumValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { Property, Collection, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the Grid's aggregate column.\n */\n\nvar AggregateColumn =\n/** @class */\nfunction (_super) {\n  __extends(AggregateColumn, _super);\n\n  function AggregateColumn() {\n    var _this = _super !== null && _super.apply(this, arguments) || this;\n\n    _this.templateFn = {};\n    return _this;\n  }\n  /**\n   * @hidden\n   */\n\n\n  AggregateColumn.prototype.setFormatter = function (value) {\n    this.formatFn = value;\n  };\n  /**\n   * @hidden\n   */\n\n\n  AggregateColumn.prototype.getFormatter = function () {\n    return this.formatFn;\n  };\n  /**\n   * @hidden\n   */\n\n\n  AggregateColumn.prototype.setTemplate = function (helper) {\n    if (helper === void 0) {\n      helper = {};\n    }\n\n    if (this.footerTemplate !== undefined) {\n      this.templateFn[getEnumValue(CellType, CellType.Summary)] = {\n        fn: compile(this.footerTemplate, helper),\n        property: 'footerTemplate'\n      };\n    }\n\n    if (this.groupFooterTemplate !== undefined) {\n      this.templateFn[getEnumValue(CellType, CellType.GroupSummary)] = {\n        fn: compile(this.groupFooterTemplate, helper),\n        property: 'groupFooterTemplate'\n      };\n    }\n\n    if (this.groupCaptionTemplate !== undefined) {\n      this.templateFn[getEnumValue(CellType, CellType.CaptionSummary)] = {\n        fn: compile(this.groupCaptionTemplate, helper),\n        property: 'groupCaptionTemplate'\n      };\n    }\n  };\n  /**\n   * @hidden\n   */\n\n\n  AggregateColumn.prototype.getTemplate = function (type) {\n    return this.templateFn[getEnumValue(CellType, type)];\n  };\n  /**\n   * @hidden\n   */\n\n\n  AggregateColumn.prototype.setPropertiesSilent = function (prop) {\n    this.setProperties(prop, true);\n  };\n\n  __decorate([Property()], AggregateColumn.prototype, \"type\", void 0);\n\n  __decorate([Property()], AggregateColumn.prototype, \"field\", void 0);\n\n  __decorate([Property()], AggregateColumn.prototype, \"columnName\", void 0);\n\n  __decorate([Property()], AggregateColumn.prototype, \"format\", void 0);\n\n  __decorate([Property()], AggregateColumn.prototype, \"footerTemplate\", void 0);\n\n  __decorate([Property()], AggregateColumn.prototype, \"groupFooterTemplate\", void 0);\n\n  __decorate([Property()], AggregateColumn.prototype, \"groupCaptionTemplate\", void 0);\n\n  __decorate([Property()], AggregateColumn.prototype, \"customAggregate\", void 0);\n\n  return AggregateColumn;\n}(ChildProperty);\n\nexport { AggregateColumn };\n/**\n * Configures the aggregate rows.\n */\n\nvar AggregateRow =\n/** @class */\nfunction (_super) {\n  __extends(AggregateRow, _super);\n\n  function AggregateRow() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n\n  __decorate([Collection([], AggregateColumn)], AggregateRow.prototype, \"columns\", void 0);\n\n  return AggregateRow;\n}(ChildProperty);\n\nexport { AggregateRow };","import { merge } from '@syncfusion/ej2-base';\n/**\n * Cell\n * @hidden\n */\n\nvar Cell =\n/** @class */\nfunction () {\n  function Cell(options) {\n    this.isSpanned = false;\n    this.isRowSpanned = false;\n    merge(this, options);\n  }\n\n  Cell.prototype.clone = function () {\n    var cell = new Cell({});\n    merge(cell, this);\n    return cell;\n  };\n\n  return Cell;\n}();\n\nexport { Cell };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nvar __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the column chooser behavior of the Grid.\n */\n\nvar ColumnChooserSettings =\n/** @class */\nfunction (_super) {\n  __extends(ColumnChooserSettings, _super);\n\n  function ColumnChooserSettings() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n\n  __decorate([Property('startsWith')], ColumnChooserSettings.prototype, \"operator\", void 0);\n\n  __decorate([Property(false)], ColumnChooserSettings.prototype, \"ignoreAccent\", void 0);\n\n  return ColumnChooserSettings;\n}(ChildProperty);\n\nexport { ColumnChooserSettings };","var __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nimport { merge, isNullOrUndefined, extend, Property } from '@syncfusion/ej2-base';\nimport { isBlazor } from '@syncfusion/ej2-base';\nimport { Query, DataUtil } from '@syncfusion/ej2-data';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { getUid, templateCompiler, getForeignData, getObject } from '../base/util';\n/**\n * Represents Grid `Column` model class.\n */\n\nvar Column =\n/** @class */\nfunction () {\n  function Column(options, parent) {\n    var _this = this;\n    /**\n     * If `disableHtmlEncode` is set to true, it encodes the HTML of the header and content cells.\n     * @default true\n     */\n\n\n    this.disableHtmlEncode = true;\n    /**\n     * If `allowSorting` set to false, then it disables sorting option of a particular column.\n     * By default all columns are sortable.\n     * @default true\n     */\n\n    this.allowSorting = true;\n    /**\n     * If `allowResizing` is set to false, it disables resize option of a particular column.\n     * By default all the columns can be resized.\n     * @default true\n     */\n\n    this.allowResizing = true;\n    /**\n     * If `allowFiltering` set to false, then it disables filtering option and filter bar element of a particular column.\n     * By default all columns are filterable.\n     * @default true\n     */\n\n    this.allowFiltering = true;\n    /**\n     * If `allowGrouping` set to false, then it disables grouping of a particular column.\n     * By default all columns are groupable.\n     * @default true\n     */\n\n    this.allowGrouping = true;\n    /**\n     * If `allowReordering` set to false, then it disables reorder of a particular column.\n     * By default all columns can be reorder.\n     * @default true\n     */\n\n    this.allowReordering = true;\n    /**\n     * If `showColumnMenu` set to false, then it disable the column menu of a particular column.\n     * By default column menu will show for all columns\n     * @default true\n     */\n\n    this.showColumnMenu = true;\n    /**\n     * If `enableGroupByFormat` set to true, then it groups the particular column by formatted values.\n     * @default true\n     */\n\n    this.enableGroupByFormat = false;\n    /**\n     * If `allowEditing` set to false, then it disables editing of a particular column.\n     * By default all columns are editable.\n     * @default true\n     */\n\n    this.allowEditing = true;\n    /**\n     *  It is used to customize the default filter options for a specific columns.\n     * * type -  Specifies the filter type as menu or checkbox.\n     * * ui - to render custom component for specific column it has following functions.\n     * * ui.create – It is used for creating custom components.\n     * * ui.read -  It is used for read the value from the component.\n     * * ui.write - It is used to apply component model as dynamically.\n     * {% codeBlock src=\"grid/filter-menu-api/index.ts\" %}{% endcodeBlock %}\n     *\n     * > Check the [`Filter UI`](../../grid/filtering/#custom-component-in-filter-menu) for its customization.\n     *  @default {}\n     */\n\n    this.filter = {};\n    /**\n     * If `showInColumnChooser` set to false, then hide the particular column in column chooser.\n     *  By default all columns are displayed in column Chooser.\n     * @default true\n     */\n\n    this.showInColumnChooser = true;\n    /**\n     * Defines the `IEditCell` object to customize default edit cell.\n     * @default {}\n     */\n\n    this.edit = {};\n    /**\n     * If `allowSearching` set to false, then it disables Searching of a particular column.\n     * By default all columns allow Searching.\n     * @default true\n     */\n\n    this.allowSearching = true;\n    /**\n     * If `autoFit` set to true, then the particular column content width will be\n     * adjusted based on its content in the initial rendering itself.\n     * Setting this property as true is equivalent to calling `autoFitColumns` method in the `dataBound` event.\n     * @default false\n     */\n\n    this.autoFit = false;\n    this.sortDirection = 'Descending';\n    /** @hidden */\n\n    this.getEditTemplate = function () {\n      return _this.editTemplateFn;\n    };\n    /** @hidden */\n\n\n    this.getFilterTemplate = function () {\n      return _this.filterTemplateFn;\n    };\n\n    merge(this, options);\n    this.parent = parent;\n\n    if (this.type === 'none') {\n      this.type = isBlazor() && !isNullOrUndefined(this.template) && isNullOrUndefined(this.field) ? 'none' : null;\n    } else if (this.type) {\n      this.type = typeof this.type === 'string' ? this.type.toLowerCase() : undefined;\n    }\n\n    if (this.editType) {\n      this.editType = this.editType.toLowerCase();\n    }\n\n    if (isNullOrUndefined(this.uid)) {\n      this.uid = getUid('grid-column');\n    }\n\n    var valueFormatter = new ValueFormatter();\n\n    if (options.format && (options.format.skeleton || options.format.format)) {\n      this.setFormatter(valueFormatter.getFormatFunction(extend({}, options.format)));\n      this.setParser(valueFormatter.getParserFunction(options.format));\n    }\n\n    this.toJSON = function () {\n      var col = {};\n      var skip = ['filter', 'dataSource', isBlazor() ? ' ' : 'headerText', 'template', 'headerTemplate', 'edit', 'editTemplate', 'filterTemplate', 'commandsTemplate', 'parent'];\n      var keys = Object.keys(_this);\n\n      for (var i = 0; i < keys.length; i++) {\n        if (keys[i] === 'columns') {\n          col[keys[i]] = [];\n\n          for (var j = 0; j < _this[keys[i]].length; j++) {\n            col[keys[i]].push(_this[keys[i]][j].toJSON());\n          }\n        } else if (skip.indexOf(keys[i]) < 0) {\n          col[keys[i]] = _this[keys[i]];\n        }\n      }\n\n      return col;\n    };\n\n    if (!this.field) {\n      this.allowFiltering = false;\n      this.allowGrouping = false;\n      this.allowSorting = false;\n\n      if (this.columns) {\n        this.allowResizing = this.columns.some(function (col) {\n          return col.allowResizing;\n        });\n      }\n    }\n\n    if (this.commands && !this.textAlign) {\n      this.textAlign = 'Right';\n    }\n\n    if (this.template || this.commandsTemplate) {\n      this.templateFn = templateCompiler(this.template || this.commandsTemplate);\n    }\n\n    if (this.headerTemplate) {\n      this.headerTemplateFn = templateCompiler(this.headerTemplate);\n    }\n\n    if (!isNullOrUndefined(this.filter) && this.filter.itemTemplate) {\n      this.fltrTemplateFn = templateCompiler(this.filter.itemTemplate);\n    }\n\n    if (this.editTemplate) {\n      this.editTemplateFn = templateCompiler(this.editTemplate);\n    }\n\n    if (this.filterTemplate) {\n      this.filterTemplateFn = templateCompiler(this.filterTemplate);\n    }\n\n    if (this.isForeignColumn() && (isNullOrUndefined(this.editType) || this.editType === 'dropdownedit' || this.editType === 'defaultedit')) {\n      this.editType = 'dropdownedit';\n      this.edit.params = extend({\n        dataSource: this.dataSource,\n        query: new Query(),\n        fields: {\n          value: this.foreignKeyField || this.field,\n          text: this.foreignKeyValue\n        }\n      }, this.edit.params);\n    }\n\n    if (this.sortComparer) {\n      var a_1 = this.sortComparer;\n\n      this.sortComparer = function comparer(x, y, xObj, yObj) {\n        if (typeof a_1 === 'string') {\n          a_1 = getObject(a_1, window);\n        }\n\n        if (this.sortDirection === 'Descending') {\n          var z = x;\n          x = y;\n          y = z;\n          var obj = xObj;\n          xObj = yObj;\n          yObj = obj;\n        }\n\n        return a_1(x, y, xObj, yObj);\n      };\n    }\n\n    if (!this.sortComparer && this.isForeignColumn()) {\n      this.sortComparer = function (x, y) {\n        x = getObject(_this.foreignKeyValue, getForeignData(_this, {}, x)[0]);\n        y = getObject(_this.foreignKeyValue, getForeignData(_this, {}, y)[0]);\n        return _this.sortDirection === 'Descending' ? DataUtil.fnDescending(x, y) : DataUtil.fnAscending(x, y);\n      };\n    }\n  }\n  /** @hidden */\n\n\n  Column.prototype.getSortDirection = function () {\n    return this.sortDirection;\n  };\n  /** @hidden */\n\n\n  Column.prototype.setSortDirection = function (direction) {\n    this.sortDirection = direction;\n  };\n  /** @hidden */\n\n\n  Column.prototype.getFreezeTableName = function () {\n    return this.freezeTable;\n  };\n  /** @hidden */\n\n\n  Column.prototype.setProperties = function (column) {\n    //Angular two way binding\n    var keys = Object.keys(column);\n\n    for (var i = 0; i < keys.length; i++) {\n      this[keys[i]] = column[keys[i]]; //Refresh the react columnTemplates on state change\n\n      if (this.parent && this.parent.isReact && keys[i] === 'template') {\n        this.parent.refreshReactColumnTemplateByUid(this.uid);\n      }\n    }\n  };\n  /**\n   * @hidden\n   * It defines the column is foreign key column or not.\n   */\n\n\n  Column.prototype.isForeignColumn = function () {\n    return !!(this.dataSource && this.foreignKeyValue);\n  };\n  /** @hidden */\n\n\n  Column.prototype.getFormatter = function () {\n    return this.formatFn;\n  };\n  /** @hidden */\n\n\n  Column.prototype.setFormatter = function (value) {\n    this.formatFn = value;\n  };\n  /** @hidden */\n\n\n  Column.prototype.getParser = function () {\n    return this.parserFn;\n  };\n  /** @hidden */\n\n\n  Column.prototype.setParser = function (value) {\n    this.parserFn = value;\n  };\n  /** @hidden */\n\n\n  Column.prototype.getColumnTemplate = function () {\n    return this.templateFn;\n  };\n  /** @hidden */\n\n\n  Column.prototype.getHeaderTemplate = function () {\n    return this.headerTemplateFn;\n  };\n  /** @hidden */\n\n\n  Column.prototype.getFilterItemTemplate = function () {\n    return this.fltrTemplateFn;\n  };\n  /** @hidden */\n\n\n  Column.prototype.getDomSetter = function () {\n    return this.disableHtmlEncode ? 'textContent' : 'innerHTML';\n  };\n\n  return Column;\n}();\n\nexport { Column };\n/**\n * Define options for custom command buttons.\n */\n\nvar CommandColumnModel =\n/** @class */\nfunction () {\n  function CommandColumnModel() {}\n\n  __decorate([Property()], CommandColumnModel.prototype, \"title\", void 0);\n\n  __decorate([Property()], CommandColumnModel.prototype, \"type\", void 0);\n\n  __decorate([Property()], CommandColumnModel.prototype, \"buttonOption\", void 0);\n\n  return CommandColumnModel;\n}();\n\nexport { CommandColumnModel };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nvar __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the paging behavior of the Grid.\n */\n\nvar PageSettings =\n/** @class */\nfunction (_super) {\n  __extends(PageSettings, _super);\n\n  function PageSettings() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n\n  __decorate([Property(12)], PageSettings.prototype, \"pageSize\", void 0);\n\n  __decorate([Property(8)], PageSettings.prototype, \"pageCount\", void 0);\n\n  __decorate([Property(1)], PageSettings.prototype, \"currentPage\", void 0);\n\n  __decorate([Property()], PageSettings.prototype, \"totalRecordsCount\", void 0);\n\n  __decorate([Property(false)], PageSettings.prototype, \"enableQueryString\", void 0);\n\n  __decorate([Property(false)], PageSettings.prototype, \"pageSizes\", void 0);\n\n  __decorate([Property(null)], PageSettings.prototype, \"template\", void 0);\n\n  return PageSettings;\n}(ChildProperty);\n\nexport { PageSettings };","import { merge } from '@syncfusion/ej2-base';\n/**\n * Row\n * @hidden\n */\n\nvar Row =\n/** @class */\nfunction () {\n  function Row(options, parent) {\n    merge(this, options);\n    this.parent = parent;\n  }\n\n  Row.prototype.clone = function () {\n    var row = new Row({});\n    merge(row, this);\n    row.cells = this.cells.map(function (cell) {\n      return cell.clone();\n    });\n    return row;\n  };\n  /**\n   * Replaces the row data and grid refresh the particular row element only.\n   * @param  {Object} data - To update new data for the particular row.\n   * @return {void}\n   */\n\n\n  Row.prototype.setRowValue = function (data) {\n    if (!this.parent) {\n      return;\n    }\n\n    var key = this.data[this.parent.getPrimaryKeyFieldNames()[0]];\n    this.parent.setRowData(key, data);\n  };\n  /**\n   * Replaces the given field value and refresh the particular cell element only.\n   * @param {string} field - Specifies the field name which you want to update.\n   * @param {string | number | boolean | Date} value - To update new value for the particular cell.\n   * @return {void}\n   */\n\n\n  Row.prototype.setCellValue = function (field, value) {\n    if (!this.parent) {\n      return;\n    }\n\n    var isValDiff = !(this.data[field].toString() === value.toString());\n\n    if (isValDiff) {\n      var pKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n      var key = this.data[pKeyField];\n      this.parent.setCellValue(key, field, value);\n      this.makechanges(pKeyField, this.data);\n    } else {\n      return;\n    }\n  };\n\n  Row.prototype.makechanges = function (key, data) {\n    if (!this.parent) {\n      return;\n    }\n\n    var gObj = this.parent;\n    var dataManager = gObj.getDataModule().dataManager;\n    dataManager.update(key, data);\n  };\n\n  return Row;\n}();\n\nexport { Row };","import { isNullOrUndefined, attributes } from '@syncfusion/ej2-base';\nimport { iterateArrayOrObject } from '../base/util';\nimport { CellType } from '../base/enum';\n/**\n * `CellMergeRender` module.\n * @hidden\n */\n\nvar CellMergeRender =\n/** @class */\nfunction () {\n  function CellMergeRender(serviceLocator, parent) {\n    this.serviceLocator = serviceLocator;\n    this.parent = parent;\n  }\n\n  CellMergeRender.prototype.render = function (cellArgs, row, i, td) {\n    var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n    var cellRenderer = cellRendererFact.getCellRenderer(row.cells[i].cellType || CellType.Data);\n    var colSpan = row.cells[i].cellSpan ? row.cells[i].cellSpan : cellArgs.colSpan + i <= row.cells.length ? cellArgs.colSpan : row.cells.length - i;\n    var rowSpan = cellArgs.rowSpan;\n    var visible = 0;\n    var spannedCell;\n\n    if (row.index > 0) {\n      var cells = this.parent.groupSettings.columns.length > 0 && !this.parent.getRowsObject()[row.index - 1].isDataRow ? this.parent.getRowsObject()[row.index].cells : this.parent.getRowsObject()[row.index - 1].cells;\n      var targetCell_1 = row.cells[i];\n      var uid_1 = 'uid';\n      spannedCell = cells.filter(function (cell) {\n        return cell.column.uid === targetCell_1.column[uid_1];\n      })[0];\n    }\n\n    var colSpanLen = spannedCell && spannedCell.colSpanRange > 1 && spannedCell.rowSpanRange > 1 ? spannedCell.colSpanRange : colSpan;\n\n    for (var j = i + 1; j < i + colSpanLen && j < row.cells.length; j++) {\n      if (row.cells[j].visible === false) {\n        visible++;\n      } else {\n        row.cells[j].isSpanned = true;\n      }\n    }\n\n    if (visible > 0) {\n      for (var j = i + colSpan; j < i + colSpan + visible && j < row.cells.length; j++) {\n        row.cells[j].isSpanned = true;\n      }\n\n      if (i + colSpan + visible >= row.cells.length) {\n        colSpan -= i + colSpan + visible - row.cells.length;\n      }\n    }\n\n    if (row.cells[i].cellSpan) {\n      row.data[cellArgs.column.field] = row.cells[i].spanText;\n      td = cellRenderer.render(row.cells[i], row.data, {\n        'index': !isNullOrUndefined(row.index) ? row.index.toString() : ''\n      });\n    }\n\n    if (colSpan > 1) {\n      attributes(td, {\n        'colSpan': colSpan.toString(),\n        'aria-colSpan': colSpan.toString()\n      });\n    }\n\n    if (rowSpan > 1) {\n      attributes(td, {\n        'rowspan': rowSpan.toString(),\n        'aria-rowspan': rowSpan.toString()\n      });\n      row.cells[i].isRowSpanned = true;\n      row.cells[i].rowSpanRange = Number(rowSpan);\n\n      if (colSpan > 1) {\n        row.cells[i].colSpanRange = Number(colSpan);\n      }\n    }\n\n    if (row.index > 0 && spannedCell.rowSpanRange > 1) {\n      row.cells[i].isSpanned = true;\n      row.cells[i].rowSpanRange = Number(spannedCell.rowSpanRange - 1);\n      row.cells[i].colSpanRange = spannedCell.rowSpanRange > 0 ? spannedCell.colSpanRange : 1;\n    }\n\n    if (this.parent.enableColumnVirtualization && !row.cells[i].cellSpan && !this.containsKey(cellArgs.column.field, cellArgs.data[cellArgs.column.field])) {\n      this.backupMergeCells(cellArgs.column.field, cellArgs.data[cellArgs.column.field], cellArgs.colSpan);\n    }\n\n    return td;\n  };\n\n  CellMergeRender.prototype.backupMergeCells = function (fName, data, span) {\n    this.setMergeCells(this.generteKey(fName, data), span);\n  };\n\n  CellMergeRender.prototype.generteKey = function (fname, data) {\n    return fname + '__' + data.toString();\n  };\n\n  CellMergeRender.prototype.splitKey = function (key) {\n    return key.split('__');\n  };\n\n  CellMergeRender.prototype.containsKey = function (fname, data) {\n    return this.getMergeCells().hasOwnProperty(this.generteKey(fname, data));\n  };\n\n  CellMergeRender.prototype.getMergeCells = function () {\n    return this.parent.mergeCells;\n  };\n\n  CellMergeRender.prototype.setMergeCells = function (key, span) {\n    this.parent.mergeCells[key] = span;\n  };\n\n  CellMergeRender.prototype.updateVirtualCells = function (rows) {\n    var mCells = this.getMergeCells();\n\n    for (var _i = 0, _a = Object.keys(mCells); _i < _a.length; _i++) {\n      var key = _a[_i];\n      var value = mCells[key];\n      var merge = this.splitKey(key);\n      var columnIndex = this.getIndexFromAllColumns(merge[0]);\n      var vColumnIndices = this.parent.getColumnIndexesInView();\n      var span = value - (vColumnIndices[0] - columnIndex);\n\n      if (columnIndex < vColumnIndices[0] && span > 1) {\n        for (var _b = 0, rows_1 = rows; _b < rows_1.length; _b++) {\n          var row = rows_1[_b];\n\n          if (row.data[merge[0]].toString() === merge[1].toString()) {\n            row.cells[0].cellSpan = span;\n            row.cells[0].spanText = merge[1];\n            break;\n          }\n        }\n      }\n    }\n\n    return rows;\n  };\n\n  CellMergeRender.prototype.getIndexFromAllColumns = function (field) {\n    var index = iterateArrayOrObject(this.parent.getVisibleColumns(), function (item, index) {\n      if (item.field === field) {\n        return index;\n      }\n\n      return undefined;\n    })[0];\n    return index;\n  };\n\n  return CellMergeRender;\n}();\n\nexport { CellMergeRender };","import { remove } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { doesImplementInterface, setStyleAndAttributes, appendChildren, extendObjWithFn } from '../base/util';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { foreignKeyData } from '../base/constant';\nimport { CellType } from '../base/enum';\nimport * as literals from '../base/string-literals';\n/**\n * CellRenderer class which responsible for building cell content.\n * @hidden\n */\n\nvar CellRenderer =\n/** @class */\nfunction () {\n  function CellRenderer(parent, locator) {\n    this.localizer = locator.getService('localization');\n    this.formatter = locator.getService('valueFormatter');\n    this.parent = parent;\n    this.element = this.parent.createElement('TD', {\n      className: literals.rowCell,\n      attrs: {\n        role: 'gridcell',\n        tabindex: '-1'\n      }\n    });\n    this.rowChkBox = this.parent.createElement('input', {\n      className: 'e-checkselect',\n      attrs: {\n        'type': 'checkbox'\n      }\n    });\n  }\n  /**\n   * Function to return the wrapper for the TD content\n   * @returns string\n   */\n\n\n  CellRenderer.prototype.getGui = function () {\n    return '';\n  };\n  /**\n   * Function to format the cell value.\n   * @param  {Column} column\n   * @param  {Object} value\n   * @param  {Object} data\n   */\n\n\n  CellRenderer.prototype.format = function (column, value, data) {\n    if (!isNullOrUndefined(column.format)) {\n      if (column.type === 'number' && isNaN(parseInt(value, 10))) {\n        value = null;\n      }\n\n      value = this.formatter.toView(value, column.getFormatter());\n    }\n\n    return isNullOrUndefined(value) ? '' : value.toString();\n  };\n\n  CellRenderer.prototype.evaluate = function (node, cell, data, attributes, fData, isEdit) {\n    var _a;\n\n    var result;\n\n    if (cell.column.template) {\n      var isReactCompiler = this.parent.isReact && typeof cell.column.template !== 'string';\n      var literals_1 = ['index'];\n      var dummyData = extendObjWithFn({}, data, (_a = {}, _a[foreignKeyData] = fData, _a.column = cell.column, _a));\n      var templateID = this.parent.element.id + cell.column.uid;\n      var str = 'isStringTemplate';\n\n      if (isReactCompiler) {\n        var copied = {\n          'index': attributes[literals_1[0]]\n        };\n        cell.column.getColumnTemplate()(extend(copied, dummyData), this.parent, 'columnTemplate', templateID, this.parent[str], null, node);\n        this.parent.renderTemplates();\n      } else {\n        result = cell.column.getColumnTemplate()(extend({\n          'index': attributes[literals_1[0]]\n        }, dummyData), this.parent, 'template', templateID, this.parent[str]);\n      }\n\n      if (!isReactCompiler) {\n        appendChildren(node, result);\n      }\n\n      this.parent.notify('template-result', {\n        template: result\n      });\n      result = null;\n      node.setAttribute('aria-label', node.innerText + ' is template cell' + ' column header ' + cell.column.headerText);\n      return false;\n    }\n\n    return true;\n  };\n  /**\n   * Function to invoke the custom formatter available in the column object.\n   * @param  {Column} column\n   * @param  {Object} value\n   * @param  {Object} data\n   */\n\n\n  CellRenderer.prototype.invokeFormatter = function (column, value, data) {\n    if (!isNullOrUndefined(column.formatter)) {\n      if (doesImplementInterface(column.formatter, 'getValue')) {\n        var formatter = column.formatter;\n        value = new formatter().getValue(column, data);\n      } else if (typeof column.formatter === 'function') {\n        value = column.formatter(column, data);\n      } else {\n        value = column.formatter.getValue(column, data);\n      }\n    }\n\n    return value;\n  };\n  /**\n   * Function to render the cell content based on Column object.\n   * @param  {Column} column\n   * @param  {Object} data\n   * @param  {{[x:string]:Object}} attributes?\n   * @param  {Element}\n   */\n\n\n  CellRenderer.prototype.render = function (cell, data, attributes, isExpand, isEdit) {\n    return this.refreshCell(cell, data, attributes, isEdit);\n  };\n  /**\n   * Function to refresh the cell content based on Column object.\n   * @param  {Column} column\n   * @param  {Object} data\n   * @param  {{[x:string]:Object}} attributes?\n   * @param  {Element}\n   */\n\n\n  CellRenderer.prototype.refreshTD = function (td, cell, data, attributes) {\n    var isEdit = this.parent.editSettings.mode === 'Batch' && td.classList.contains('e-editedbatchcell');\n\n    if (this.parent.isReact) {\n      td.innerHTML = '';\n      var cellIndex = td.cellIndex;\n      var parentRow = td.parentElement;\n      remove(td);\n      var newTD = this.refreshCell(cell, data, attributes, isEdit);\n      this.cloneAttributes(newTD, td);\n      parentRow.cells.length !== cellIndex - 1 ? parentRow.insertBefore(newTD, parentRow.cells[cellIndex]) : parentRow.appendChild(newTD);\n    } else {\n      var node = this.refreshCell(cell, data, attributes, isEdit);\n      td.innerHTML = '';\n      td.setAttribute('aria-label', node.getAttribute('aria-label'));\n      var elements = [].slice.call(node.childNodes);\n\n      for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n        var elem = elements_1[_i];\n        td.appendChild(elem);\n      }\n    }\n  }; // tslint:disable-next-line:no-any\n\n\n  CellRenderer.prototype.cloneAttributes = function (target, source) {\n    // tslint:disable-next-line:no-any\n    var attrs = source.attributes; // tslint:disable-next-line:no-any\n\n    var i = attrs.length; // tslint:disable-next-line:no-any\n\n    var attr;\n\n    while (i--) {\n      attr = attrs[i];\n      target.setAttribute(attr.name, attr.value);\n    }\n  };\n\n  CellRenderer.prototype.refreshCell = function (cell, data, attributes, isEdit) {\n    var _a;\n\n    var node = this.element.cloneNode();\n    var column = cell.column;\n    var fData;\n\n    if (cell.isForeignKey) {\n      fData = cell.foreignKeyData[0] || (_a = {}, _a[column.foreignKeyValue] = column.format ? null : '', _a);\n    } //Prepare innerHtml\n\n\n    var innerHtml = this.getGui();\n    var value = cell.isForeignKey ? this.getValue(column.foreignKeyValue, fData, column) : this.getValue(column.field, data, column);\n\n    if ((column.type === 'date' || column.type === 'datetime') && !isNullOrUndefined(value)) {\n      value = new Date(value);\n    }\n\n    value = this.format(column, value, data);\n    innerHtml = value.toString();\n\n    if (column.type === 'boolean' && !column.displayAsCheckBox) {\n      var localeStr = value !== 'true' && value !== 'false' ? null : value === 'true' ? 'True' : 'False';\n      innerHtml = localeStr ? this.localizer.getConstant(localeStr) : innerHtml;\n    }\n\n    var fromFormatter = this.invokeFormatter(column, value, data);\n    innerHtml = !isNullOrUndefined(column.formatter) ? isNullOrUndefined(fromFormatter) ? '' : fromFormatter.toString() : innerHtml;\n    node.setAttribute('aria-label', innerHtml + ' column header ' + cell.column.headerText);\n\n    if (this.evaluate(node, cell, data, attributes, fData, isEdit) && column.type !== 'checkbox') {\n      this.appendHtml(node, innerHtml, column.getDomSetter ? column.getDomSetter() : 'innerHTML');\n    } else if (column.type === 'checkbox') {\n      node.classList.add(literals.gridChkBox);\n      node.setAttribute('aria-label', 'checkbox');\n\n      if (this.parent.selectionSettings.persistSelection) {\n        value = value === 'true';\n      } else {\n        value = false;\n      }\n\n      var checkWrap = createCheckBox(this.parent.createElement, false, {\n        checked: value,\n        label: ' '\n      });\n      checkWrap.insertBefore(this.rowChkBox.cloneNode(), checkWrap.firstChild);\n      node.appendChild(checkWrap);\n    }\n\n    if (this.parent.checkAllRows === 'Check' && this.parent.enableVirtualization) {\n      cell.isSelected = true;\n    }\n\n    this.setAttributes(node, cell, attributes);\n\n    if (column.type === 'boolean' && column.displayAsCheckBox) {\n      var checked = isNaN(parseInt(value.toString(), 10)) ? value === 'true' : parseInt(value.toString(), 10) > 0;\n      var checkWrap = createCheckBox(this.parent.createElement, false, {\n        checked: checked,\n        label: ' '\n      });\n      node.innerHTML = '';\n      checkWrap.classList.add('e-checkbox-disabled');\n      node.appendChild(checkWrap);\n      node.setAttribute('aria-label', checked + ' column header ' + cell.column.headerText);\n    }\n\n    return node;\n  };\n  /**\n   * Function to specifies how the result content to be placed in the cell.\n   * @param  {Element} node\n   * @param  {string|Element} innerHtml\n   * @returns Element\n   */\n\n\n  CellRenderer.prototype.appendHtml = function (node, innerHtml, property) {\n    if (property === void 0) {\n      property = 'innerHTML';\n    }\n\n    node[property] = innerHtml;\n    return node;\n  };\n  /**\n   * @hidden\n   */\n\n\n  CellRenderer.prototype.setAttributes = function (node, cell, attributes) {\n    var column = cell.column;\n    this.buildAttributeFromCell(node, cell, column.type === 'checkbox');\n    setStyleAndAttributes(node, attributes);\n    setStyleAndAttributes(node, cell.attributes);\n\n    if (column.customAttributes) {\n      setStyleAndAttributes(node, column.customAttributes);\n    }\n\n    if (this.parent.rowRenderingMode === 'Vertical') {\n      setStyleAndAttributes(node, {\n        'data-cell': column.headerText\n      });\n    }\n\n    if (column.textAlign) {\n      node.style.textAlign = column.textAlign;\n    }\n\n    if (column.clipMode === 'Clip' || !column.clipMode && this.parent.clipMode === 'Clip') {\n      node.classList.add('e-gridclip');\n    } else if (column.clipMode === 'EllipsisWithTooltip' || !column.clipMode && this.parent.clipMode === 'EllipsisWithTooltip') {\n      if (column.type !== 'checkbox') {\n        node.classList.add('e-ellipsistooltip');\n      }\n    }\n  };\n\n  CellRenderer.prototype.buildAttributeFromCell = function (node, cell, isCheckBoxType) {\n    var attr = {};\n    var prop = {\n      'colindex': literals.ariaColIndex\n    };\n    var classes = [];\n\n    if (cell.colSpan) {\n      attr.colSpan = cell.colSpan;\n    }\n\n    if (cell.rowSpan) {\n      attr.rowSpan = cell.rowSpan;\n    }\n\n    if (cell.isTemplate) {\n      classes.push('e-templatecell');\n    }\n\n    if (cell.isSelected) {\n      classes.push.apply(classes, ['e-selectionbackground', 'e-active']);\n\n      if (isCheckBoxType) {\n        node.querySelector('.e-frame').classList.add('e-check');\n      }\n    }\n\n    if (cell.isColumnSelected) {\n      classes.push.apply(classes, ['e-columnselection']);\n    }\n\n    if (cell.cellType === CellType.Header) {\n      attr[prop.colindex] = cell.colIndex;\n    } else if (!isNullOrUndefined(cell.index)) {\n      attr[prop.colindex] = cell.index;\n    }\n\n    if (!cell.visible) {\n      classes.push('e-hide');\n    }\n\n    attr.class = classes;\n    setStyleAndAttributes(node, attr);\n  };\n\n  CellRenderer.prototype.getValue = function (field, data, column) {\n    return column.valueAccessor(field, data, column);\n  };\n\n  return CellRenderer;\n}();\n\nexport { CellRenderer };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nimport { Row } from '../models/row';\nimport { Column } from '../models/column';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { calculateAggregate, getUid } from '../base/util';\nimport { CellType } from '../base/enum';\nimport { Cell } from '../models/cell';\n/**\n * Summary row model generator\n * @hidden\n */\n\nvar SummaryModelGenerator =\n/** @class */\nfunction () {\n  /**\n   * Constructor for Summary row model generator\n   */\n  function SummaryModelGenerator(parent) {\n    this.parent = parent;\n  }\n\n  SummaryModelGenerator.prototype.getData = function () {\n    var _this = this;\n\n    var rows = [];\n    var row = this.parent.aggregates.slice();\n\n    for (var i = 0; i < row.length; i++) {\n      var columns = row[i].columns.filter(function (column) {\n        return !(column.footerTemplate || column.groupFooterTemplate || column.groupCaptionTemplate) || _this.columnSelector(column);\n      });\n\n      if (columns.length) {\n        rows.push({\n          columns: columns\n        });\n      }\n    }\n\n    return rows;\n  };\n\n  SummaryModelGenerator.prototype.columnSelector = function (column) {\n    return column.footerTemplate !== undefined;\n  };\n\n  SummaryModelGenerator.prototype.getColumns = function (start, end) {\n    var columns = [];\n\n    if (this.parent.allowGrouping) {\n      for (var i = 0; i < this.parent.groupSettings.columns.length; i++) {\n        columns.push(new Column({}));\n      }\n    }\n\n    if (this.parent.detailTemplate || !isNullOrUndefined(this.parent.childGrid)) {\n      columns.push(new Column({}));\n    }\n\n    if (this.parent.isRowDragable() && !start) {\n      columns.push(new Column({}));\n    }\n\n    columns.push.apply(columns, this.parent.getColumns());\n    end = end ? end + this.parent.getIndentCount() : end;\n    return isNullOrUndefined(start) ? columns : columns.slice(start, end);\n  };\n\n  SummaryModelGenerator.prototype.generateRows = function (input, args, start, end, columns) {\n    if (input.length === 0) {\n      if (args === undefined || !args.count) {\n        return [];\n      }\n    }\n\n    var data = this.buildSummaryData(input, args);\n    var rows = [];\n    var row = this.getData();\n\n    for (var i = 0; i < row.length; i++) {\n      rows.push(this.getGeneratedRow(row[i], data[i], args ? args.level : undefined, start, end, args ? args.parentUid : undefined, columns));\n    }\n\n    return rows;\n  };\n\n  SummaryModelGenerator.prototype.getGeneratedRow = function (summaryRow, data, raw, start, end, parentUid, columns) {\n    var tmp = [];\n    var indents = this.getIndentByLevel(raw);\n    var isDetailGridAlone = !isNullOrUndefined(this.parent.childGrid);\n    var indentLength = this.parent.getIndentCount();\n\n    if (this.parent.isRowDragable()) {\n      indents = ['e-indentcelltop'];\n    }\n\n    var values = columns ? columns : this.getColumns(start, end);\n\n    for (var i = 0; i < values.length; i++) {\n      tmp.push(this.getGeneratedCell(values[i], summaryRow, i >= indentLength ? this.getCellType() : i < this.parent.groupSettings.columns.length ? CellType.Indent : CellType.DetailFooterIntent, indents[i], isDetailGridAlone));\n    }\n\n    var row = new Row({\n      data: data,\n      attributes: {\n        class: 'e-summaryrow'\n      }\n    });\n    row.cells = tmp;\n    row.uid = getUid('grid-row');\n    row.parentUid = parentUid;\n    row.visible = tmp.some(function (cell) {\n      return cell.isDataCell && cell.visible;\n    });\n    return row;\n  };\n\n  SummaryModelGenerator.prototype.getGeneratedCell = function (column, summaryRow, cellType, indent, isDetailGridAlone) {\n    //Get the summary column by display\n    var sColumn = summaryRow.columns.filter(function (scolumn) {\n      return scolumn.columnName === column.field;\n    })[0];\n    var attrs = {\n      'style': {\n        'textAlign': column.textAlign\n      },\n      'e-mappinguid': column.uid,\n      index: column.index\n    };\n\n    if (indent) {\n      attrs.class = indent;\n    }\n\n    if (isNullOrUndefined(indent) && isDetailGridAlone) {\n      attrs.class = 'e-detailindentcelltop';\n    }\n\n    var opt = {\n      'visible': column.visible,\n      'isDataCell': !isNullOrUndefined(sColumn),\n      'isTemplate': sColumn && !isNullOrUndefined(sColumn.footerTemplate || sColumn.groupFooterTemplate || sColumn.groupCaptionTemplate),\n      'column': sColumn || {},\n      'attributes': attrs,\n      'cellType': cellType\n    };\n    opt.column.headerText = column.headerText;\n    return new Cell(opt);\n  };\n\n  SummaryModelGenerator.prototype.buildSummaryData = function (data, args) {\n    var dummy = [];\n    var summaryRows = this.getData();\n    var single = {};\n    var key = '';\n\n    for (var i = 0; i < summaryRows.length; i++) {\n      single = {};\n      var column = summaryRows[i].columns;\n\n      for (var j = 0; j < column.length; j++) {\n        single = this.setTemplate(column[j], args && args.aggregates ? args : data, single);\n      }\n\n      dummy.push(single);\n    }\n\n    return dummy;\n  };\n\n  SummaryModelGenerator.prototype.getIndentByLevel = function (data) {\n    return this.parent.groupSettings.columns.map(function () {\n      return 'e-indentcelltop';\n    });\n  };\n\n  SummaryModelGenerator.prototype.setTemplate = function (column, data, single) {\n    var types = column.type;\n    var helper = {};\n\n    var formatFn = column.getFormatter() || function () {\n      return function (a) {\n        return a;\n      };\n    }();\n\n    var group = data;\n\n    if (!(types instanceof Array)) {\n      types = [column.type];\n    }\n\n    for (var i = 0; i < types.length; i++) {\n      var key = column.field + ' - ' + types[i].toLowerCase();\n      var disp = column.columnName;\n      var val = types[i] !== 'Custom' && group.aggregates && key in group.aggregates ? group.aggregates[key] : calculateAggregate(types[i], group.aggregates ? group : data, column, this.parent);\n      single[disp] = single[disp] || {};\n      single[disp][key] = val;\n      single[disp][types[i]] = !isNullOrUndefined(val) ? formatFn(val) : ' ';\n\n      if (group.field) {\n        single[disp].field = group.field;\n        single[disp].key = group.key;\n      }\n    }\n\n    helper.format = column.getFormatter();\n    column.setTemplate(helper);\n    return single;\n  };\n\n  SummaryModelGenerator.prototype.getCellType = function () {\n    return CellType.Summary;\n  };\n\n  return SummaryModelGenerator;\n}();\n\nexport { SummaryModelGenerator };\n\nvar GroupSummaryModelGenerator =\n/** @class */\nfunction (_super) {\n  __extends(GroupSummaryModelGenerator, _super);\n\n  function GroupSummaryModelGenerator() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n\n  GroupSummaryModelGenerator.prototype.columnSelector = function (column) {\n    return column.groupFooterTemplate !== undefined;\n  };\n\n  GroupSummaryModelGenerator.prototype.getIndentByLevel = function (level) {\n    if (level === void 0) {\n      level = this.parent.groupSettings.columns.length;\n    }\n\n    return this.parent.groupSettings.columns.map(function (v, indx) {\n      return indx <= level - 1 ? '' : 'e-indentcelltop';\n    });\n  };\n\n  GroupSummaryModelGenerator.prototype.getCellType = function () {\n    return CellType.GroupSummary;\n  };\n\n  return GroupSummaryModelGenerator;\n}(SummaryModelGenerator);\n\nexport { GroupSummaryModelGenerator };\n\nvar CaptionSummaryModelGenerator =\n/** @class */\nfunction (_super) {\n  __extends(CaptionSummaryModelGenerator, _super);\n\n  function CaptionSummaryModelGenerator() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n\n  CaptionSummaryModelGenerator.prototype.columnSelector = function (column) {\n    return column.groupCaptionTemplate !== undefined;\n  };\n\n  CaptionSummaryModelGenerator.prototype.getData = function () {\n    var initVal = {\n      columns: []\n    };\n    return [_super.prototype.getData.call(this).reduce(function (prev, cur) {\n      prev.columns = prev.columns.concat(cur.columns);\n      return prev;\n    }, initVal)];\n  };\n\n  CaptionSummaryModelGenerator.prototype.isEmpty = function () {\n    return (this.getData()[0].columns || []).length === 0;\n  };\n\n  CaptionSummaryModelGenerator.prototype.getCellType = function () {\n    return CellType.CaptionSummary;\n  };\n\n  return CaptionSummaryModelGenerator;\n}(SummaryModelGenerator);\n\nexport { CaptionSummaryModelGenerator };","/* tslint:disable-next-line:max-line-length */\nimport { EventHandler, isNullOrUndefined, extend, classList, addClass, removeClass, Browser, getValue, setValue } from '@syncfusion/ej2-base';\nimport { parentsUntil, getUid, appendChildren, getDatePredicate, getObject, extendObjWithFn, eventPromise, setChecked } from '../base/util';\nimport { remove, debounce } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport * as events from '../base/constant';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { getForeignData } from '../base/util';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { getFilterMenuPostion, toogleCheckbox, createCboxWithWrap, removeAddCboxClasses, getColumnByForeignKeyValue } from '../base/util';\n/**\n * @hidden\n * `CheckBoxFilterBase` module is used to handle filtering action.\n */\n\nvar CheckBoxFilterBase =\n/** @class */\nfunction () {\n  /**\n   * Constructor for checkbox filtering module\n   * @hidden\n   */\n  function CheckBoxFilterBase(parent) {\n    this.existingPredicate = {};\n    this.foreignKeyQuery = new Query();\n    /** @hidden */\n\n    this.filterState = true;\n    this.values = {};\n    this.renderEmpty = false;\n    this.parent = parent;\n    this.id = this.parent.element.id;\n    this.valueFormatter = new ValueFormatter(this.parent.locale);\n    this.cBoxTrue = createCheckBox(this.parent.createElement, false, {\n      checked: true,\n      label: ' '\n    });\n    this.cBoxFalse = createCheckBox(this.parent.createElement, false, {\n      checked: false,\n      label: ' '\n    });\n    this.cBoxTrue.insertBefore(this.parent.createElement('input', {\n      className: 'e-chk-hidden',\n      attrs: {\n        type: 'checkbox'\n      }\n    }), this.cBoxTrue.firstChild);\n    this.cBoxFalse.insertBefore(this.parent.createElement('input', {\n      className: 'e-chk-hidden',\n      attrs: {\n        'type': 'checkbox'\n      }\n    }), this.cBoxFalse.firstChild);\n    this.cBoxFalse.querySelector('.e-frame').classList.add('e-uncheck');\n\n    if (this.parent.enableRtl) {\n      addClass([this.cBoxTrue, this.cBoxFalse], ['e-rtl']);\n    }\n  }\n  /**\n   * To destroy the filter bar.\n   * @return {void}\n   * @hidden\n   */\n\n\n  CheckBoxFilterBase.prototype.destroy = function () {\n    this.closeDialog();\n  };\n\n  CheckBoxFilterBase.prototype.wireEvents = function () {\n    EventHandler.add(this.dlg, 'click', this.clickHandler, this);\n    EventHandler.add(this.dlg, 'keyup', this.keyupHandler, this);\n    this.searchHandler = debounce(this.searchBoxKeyUp, 200);\n    var elem = this.dialogObj.element.querySelector('.e-searchinput');\n\n    if (elem) {\n      EventHandler.add(elem, 'keyup', this.searchHandler, this);\n    }\n  };\n\n  CheckBoxFilterBase.prototype.unWireEvents = function () {\n    EventHandler.remove(this.dlg, 'click', this.clickHandler);\n    EventHandler.remove(this.dlg, 'keyup', this.keyupHandler);\n    var elem = this.dialogObj.element.querySelector('.e-searchinput');\n\n    if (elem) {\n      EventHandler.remove(elem, 'keyup', this.searchHandler);\n    }\n  };\n\n  CheckBoxFilterBase.prototype.foreignKeyFilter = function (args, fColl, mPredicate) {\n    var _this = this;\n\n    var fPredicate = {};\n    var filterCollection = [];\n    var query = this.foreignKeyQuery.clone();\n    this.options.column.dataSource.executeQuery(query.where(mPredicate)).then(function (e) {\n      _this.options.column.columnData = e.result;\n\n      _this.parent.notify(events.generateQuery, {\n        predicate: fPredicate,\n        column: _this.options.column\n      });\n\n      args.ejpredicate = fPredicate.predicate.predicates;\n      var fpred = fPredicate.predicate.predicates;\n\n      for (var i = 0; i < fpred.length; i++) {\n        filterCollection.push({\n          field: fpred[i].field,\n          predicate: 'or',\n          matchCase: fpred[i].ignoreCase,\n          ignoreAccent: fpred[i].ignoreAccent,\n          operator: fpred[i].operator,\n          value: fpred[i].value,\n          type: _this.options.type\n        });\n      }\n\n      args.filterCollection = filterCollection.length ? filterCollection : fColl.filter(function (col) {\n        return col.field = _this.options.field;\n      });\n\n      _this.options.handler(args);\n    });\n  };\n\n  CheckBoxFilterBase.prototype.foreignFilter = function (args, value) {\n    var operator = this.options.isRemote ? this.options.column.type === 'string' ? 'contains' : 'equal' : this.options.column.type ? 'contains' : 'equal';\n    var initalPredicate = new Predicate(this.options.column.foreignKeyValue, operator, value, true, this.options.ignoreAccent);\n    this.foreignKeyFilter(args, [args.filterCollection], initalPredicate);\n  };\n\n  CheckBoxFilterBase.prototype.searchBoxClick = function (e) {\n    var target = e.target;\n\n    if (target.classList.contains('e-searchclear')) {\n      this.sInput.value = '';\n      this.refreshCheckboxes();\n      this.updateSearchIcon();\n      this.sInput.focus();\n    }\n  };\n\n  CheckBoxFilterBase.prototype.searchBoxKeyUp = function (e) {\n    this.refreshCheckboxes();\n    this.updateSearchIcon();\n  };\n\n  CheckBoxFilterBase.prototype.updateSearchIcon = function () {\n    if (this.sInput.value.length) {\n      classList(this.sIcon, ['e-chkcancel-icon'], ['e-search-icon']);\n    } else {\n      classList(this.sIcon, ['e-search-icon'], ['e-chkcancel-icon']);\n    }\n  };\n  /**\n   * Gets the localized label by locale keyword.\n   * @param  {string} key\n   * @return {string}\n   */\n\n\n  CheckBoxFilterBase.prototype.getLocalizedLabel = function (key) {\n    return this.localeObj.getConstant(key);\n  };\n\n  CheckBoxFilterBase.prototype.updateDataSource = function () {\n    var dataSource = this.options.dataSource;\n    var str = 'object';\n\n    if (!(dataSource instanceof DataManager)) {\n      for (var i = 0; i < dataSource.length; i++) {\n        if (typeof dataSource !== str) {\n          var obj = {};\n          obj[this.options.field] = dataSource[i];\n          dataSource[i] = obj;\n        }\n      }\n    }\n  };\n\n  CheckBoxFilterBase.prototype.updateModel = function (options) {\n    this.options = options;\n    this.existingPredicate = options.actualPredicate || {};\n    this.options.dataSource = options.dataSource;\n    this.options.dataManager = options.dataManager ? options.dataManager : options.dataSource;\n    this.updateDataSource();\n    this.options.type = options.type;\n    this.options.format = options.format || '';\n    this.options.ignoreAccent = options.ignoreAccent || false;\n    this.options.filteredColumns = options.filteredColumns || this.parent.filterSettings.columns;\n    this.options.query = options.query || new Query();\n    this.options.allowCaseSensitive = options.allowCaseSensitive || false;\n    this.options.uid = options.column.uid;\n    this.values = {};\n    this.localeObj = options.localeObj;\n    this.isFiltered = options.filteredColumns.length;\n  };\n\n  CheckBoxFilterBase.prototype.getAndSetChkElem = function (options) {\n    this.dlg = this.parent.createElement('div', {\n      id: this.id + this.options.type + '_excelDlg',\n      attrs: {\n        uid: this.options.column.uid\n      },\n      className: 'e-checkboxfilter e-filter-popup'\n    });\n    this.sBox = this.parent.createElement('div', {\n      className: 'e-searchcontainer'\n    });\n\n    if (!options.hideSearchbox) {\n      this.sInput = this.parent.createElement('input', {\n        id: this.id + '_SearchBox',\n        className: 'e-searchinput'\n      });\n      this.sIcon = this.parent.createElement('span', {\n        className: 'e-searchclear e-search-icon e-icons e-input-group-icon',\n        attrs: {\n          type: 'text',\n          title: this.getLocalizedLabel('Search')\n        }\n      });\n      this.searchBox = this.parent.createElement('span', {\n        className: 'e-searchbox e-fields'\n      });\n      this.searchBox.appendChild(this.sInput);\n      this.sBox.appendChild(this.searchBox);\n      var inputargs = {\n        element: this.sInput,\n        floatLabelType: 'Never',\n        properties: {\n          placeholder: this.getLocalizedLabel('Search')\n        }\n      };\n      Input.createInput(inputargs, this.parent.createElement);\n      this.searchBox.querySelector('.e-input-group').appendChild(this.sIcon);\n    }\n\n    this.spinner = this.parent.createElement('div', {\n      className: 'e-spinner'\n    }); //for spinner\n\n    this.cBox = this.parent.createElement('div', {\n      id: this.id + this.options.type + '_CheckBoxList',\n      className: 'e-checkboxlist e-fields'\n    });\n    this.spinner.appendChild(this.cBox);\n    this.sBox.appendChild(this.spinner);\n    return this.sBox;\n  };\n\n  CheckBoxFilterBase.prototype.showDialog = function (options) {\n    var args = {\n      requestType: events.filterBeforeOpen,\n      columnName: this.options.field,\n      columnType: this.options.type,\n      cancel: false\n    };\n    var filterModel = 'filterModel';\n    args[filterModel] = this;\n    this.parent.notify(events.cBoxFltrBegin, args);\n\n    if (args.cancel) {\n      return;\n    }\n\n    this.dialogObj = new Dialog({\n      visible: false,\n      content: this.sBox,\n      close: this.closeDialog.bind(this),\n      enableRtl: this.parent.enableRtl,\n      width: !isNullOrUndefined(parentsUntil(options.target, 'e-bigger')) || this.parent.element.classList.contains('e-device') ? 260 : 255,\n      target: document.body,\n      animationSettings: {\n        effect: 'None'\n      },\n      buttons: [{\n        click: this.btnClick.bind(this),\n        buttonModel: {\n          content: this.getLocalizedLabel(this.isExcel ? 'OKButton' : 'FilterButton'),\n          cssClass: 'e-primary',\n          isPrimary: true\n        }\n      }, {\n        click: this.btnClick.bind(this),\n        buttonModel: {\n          cssClass: 'e-flat',\n          content: this.getLocalizedLabel(this.isExcel ? 'CancelButton' : 'ClearButton')\n        }\n      }],\n      created: this.dialogCreated.bind(this),\n      open: this.dialogOpen.bind(this)\n    });\n    var isStringTemplate = 'isStringTemplate';\n    this.dialogObj[isStringTemplate] = true;\n    this.renderResponsiveFilter(options);\n    this.dlg.setAttribute('aria-label', this.getLocalizedLabel('ExcelFilterDialogARIA'));\n\n    if (options.isResponsiveFilter) {\n      var responsiveCnt = document.querySelector('.e-responsive-dialog > .e-dlg-content > .e-mainfilterdiv');\n      responsiveCnt.appendChild(this.dlg);\n    } else {\n      this.parent.element.appendChild(this.dlg);\n    }\n\n    this.dialogObj.appendTo(this.dlg);\n    this.dialogObj.element.style.maxHeight = options.isResponsiveFilter ? 'none' : this.options.height + 'px';\n    this.dialogObj.show();\n    var content = this.dialogObj.element.querySelector('.e-dlg-content');\n    content.appendChild(this.sBox);\n    this.wireEvents();\n    createSpinner({\n      target: this.spinner\n    }, this.parent.createElement);\n    showSpinner(this.spinner);\n    this.getAllData();\n  };\n\n  CheckBoxFilterBase.prototype.renderResponsiveFilter = function (options) {\n    if (options.isResponsiveFilter) {\n      this.dialogObj.buttons = [{}];\n      this.dialogObj.position = {\n        X: '',\n        Y: ''\n      };\n      this.dialogObj.target = document.querySelector('.e-resfilter > .e-dlg-content > .e-mainfilterdiv');\n      this.dialogObj.width = '100%';\n    }\n  };\n\n  CheckBoxFilterBase.prototype.dialogCreated = function (e) {\n    if (this.options.isResponsiveFilter) {\n      this.dialogObj.element.style.left = '0px';\n    } else {\n      if (!Browser.isDevice) {\n        getFilterMenuPostion(this.options.target, this.dialogObj, this.parent);\n      } else {\n        this.dialogObj.position = {\n          X: 'center',\n          Y: 'center'\n        };\n      }\n    }\n\n    this.parent.notify(events.filterDialogCreated, e);\n  };\n\n  CheckBoxFilterBase.prototype.openDialog = function (options) {\n    this.updateModel(options);\n    this.getAndSetChkElem(options);\n    this.showDialog(options);\n  };\n\n  CheckBoxFilterBase.prototype.closeDialog = function () {\n    if (this.dialogObj && !this.dialogObj.isDestroyed) {\n      var filterTemplateCol = this.options.columns.filter(function (col) {\n        return col.getFilterItemTemplate();\n      }); // tslint:disable-next-line:no-any\n\n      var registeredTemplate = this.parent.registeredTemplate;\n\n      if (filterTemplateCol.length && !isNullOrUndefined(registeredTemplate) && registeredTemplate.filterItemTemplate) {\n        this.parent.destroyTemplate(['filterItemTemplate']);\n      }\n\n      if (this.parent.isReact) {\n        this.parent.destroyTemplate(['filterItemTemplate']);\n        this.parent.renderTemplates();\n      }\n\n      this.parent.notify(events.filterMenuClose, {\n        field: this.options.field\n      });\n      this.dialogObj.destroy();\n      this.unWireEvents();\n      remove(this.dlg);\n      this.dlg = null;\n      this.parent.notify(events.filterDialogClose, {});\n    }\n  };\n  /** @hidden */\n\n\n  CheckBoxFilterBase.prototype.clearFilter = function (col) {\n    /* tslint:disable-next-line:max-line-length */\n    var args = {\n      instance: this,\n      handler: this.clearFilter,\n      cancel: false\n    };\n    this.parent.notify(events.fltrPrevent, args);\n\n    if (args.cancel) {\n      return;\n    }\n\n    this.options.handler({\n      action: 'clear-filter',\n      field: col ? col.field : this.options.field\n    });\n  };\n\n  CheckBoxFilterBase.prototype.btnClick = function (e) {\n    if (this.filterState) {\n      if (e.target.tagName.toLowerCase() === 'input' && e.target.classList.contains('e-searchinput')) {\n        var value = e.target.value;\n\n        if (this.options.column.type === 'boolean') {\n          if (value !== '' && this.getLocalizedLabel('FilterTrue').toLowerCase().indexOf(value.toLowerCase()) !== -1) {\n            value = true;\n          } else if (value !== '' && this.getLocalizedLabel('FilterFalse').toLowerCase().indexOf(value.toLowerCase()) !== -1) {\n            value = false;\n          }\n        }\n\n        var args = {\n          action: 'filtering',\n          filterCollection: {\n            field: this.options.field,\n            operator: this.options.isRemote ? this.options.column.type === 'string' ? 'contains' : 'equal' : this.options.column.type === 'date' || this.options.column.type === 'datetime' || this.options.column.type === 'boolean' ? 'equal' : 'contains',\n            value: value,\n            matchCase: false,\n            type: this.options.column.type,\n            ignoreAccent: this.options.ignoreAccent\n          },\n          field: this.options.field\n        };\n        value !== undefined && value !== null && value !== '' ? this.isForeignColumn(this.options.column) ? this.foreignFilter(args, value) : this.options.handler(args) : this.closeDialog();\n      } else {\n        if (e.keyCode === 13) {\n          this.fltrBtnHandler();\n        } else {\n          var text = e.target.firstChild.textContent.toLowerCase();\n\n          if (this.getLocalizedLabel(this.isExcel ? 'OKButton' : 'FilterButton').toLowerCase() === text) {\n            this.fltrBtnHandler();\n          } else if (this.getLocalizedLabel('ClearButton').toLowerCase() === text) {\n            this.clearFilter();\n          }\n        }\n      }\n\n      this.closeDialog();\n    } else if (!(e.target.tagName.toLowerCase() === 'input')) {\n      this.clearFilter();\n      this.closeDialog();\n    }\n  };\n  /** @hidden */\n\n\n  CheckBoxFilterBase.prototype.fltrBtnHandler = function () {\n    var checked = [].slice.call(this.cBox.querySelectorAll('.e-check:not(.e-selectall)'));\n    var check = checked;\n    var optr = 'equal';\n    var ddlValue = this.dialogObj.element.querySelector('.e-dropdownlist');\n\n    if (ddlValue) {\n      this.options.operator = optr = ddlValue.ej2_instances[0].value;\n    }\n\n    this.isMenuNotEqual = this.options.operator === 'notequal';\n    var searchInput;\n\n    if (!this.options.hideSearchbox) {\n      searchInput = this.searchBox.querySelector('.e-searchinput');\n    }\n\n    var caseSen = this.options.allowCaseSensitive;\n    var defaults = {\n      field: this.options.field,\n      predicate: this.isMenuNotEqual ? 'and' : 'or',\n      uid: this.options.uid,\n      operator: optr,\n      type: this.options.type,\n      matchCase: caseSen,\n      ignoreAccent: this.options.ignoreAccent\n    };\n    var isNotEqual = this.itemsCnt !== checked.length && this.itemsCnt - checked.length < checked.length;\n\n    if (isNotEqual && searchInput && searchInput.value === '') {\n      optr = this.isMenuNotEqual ? 'equal' : 'notequal';\n      checked = [].slice.call(this.cBox.querySelectorAll('.e-uncheck:not(.e-selectall)'));\n      defaults.predicate = this.isMenuNotEqual ? 'or' : 'and';\n      defaults.operator = optr;\n    }\n\n    var value;\n    var val;\n    var length;\n    var fObj;\n    var coll = [];\n\n    if (checked.length !== this.itemsCnt || searchInput && searchInput.value && searchInput.value !== '') {\n      for (var i = 0; i < checked.length; i++) {\n        value = this.values[parentsUntil(checked[i], 'e-ftrchk').getAttribute('uid')];\n        fObj = extend({}, {\n          value: value\n        }, defaults);\n\n        if (value && !value.toString().length) {\n          fObj.operator = isNotEqual ? 'notequal' : 'equal';\n        }\n\n        if (value === '' || isNullOrUndefined(value)) {\n          coll = coll.concat(CheckBoxFilterBase.generateNullValuePredicates(defaults));\n        } else {\n          coll.push(fObj);\n        }\n\n        var args = {\n          instance: this,\n          handler: this.fltrBtnHandler,\n          arg1: fObj.field,\n          arg2: fObj.predicate,\n          arg3: fObj.operator,\n          arg4: fObj.matchCase,\n          arg5: fObj.ignoreAccent,\n          arg6: fObj.value,\n          cancel: false\n        };\n        this.parent.notify(events.fltrPrevent, args);\n\n        if (args.cancel) {\n          return;\n        }\n      }\n\n      if (this.options.type === 'date' || this.options.type === 'datetime') {\n        length = check.length - 1;\n        val = this.values[parentsUntil(check[length], 'e-ftrchk').getAttribute('uid')];\n\n        if (isNullOrUndefined(val) && isNotEqual) {\n          coll.push({\n            field: defaults.field,\n            matchCase: defaults.matchCase,\n            operator: 'equal',\n            predicate: 'and',\n            value: null\n          });\n        }\n      }\n\n      this.initiateFilter(coll);\n    } else {\n      this.clearFilter();\n    }\n  };\n  /** @hidden */\n\n\n  CheckBoxFilterBase.generateNullValuePredicates = function (defaults) {\n    var coll = [];\n\n    if (defaults.type === 'string') {\n      coll.push({\n        field: defaults.field,\n        ignoreAccent: defaults.ignoreAccent,\n        matchCase: defaults.matchCase,\n        operator: defaults.operator,\n        predicate: defaults.predicate,\n        value: ''\n      });\n    }\n\n    coll.push({\n      field: defaults.field,\n      matchCase: defaults.matchCase,\n      operator: defaults.operator,\n      predicate: defaults.predicate,\n      value: null\n    });\n    coll.push({\n      field: defaults.field,\n      matchCase: defaults.matchCase,\n      operator: defaults.operator,\n      predicate: defaults.predicate,\n      value: undefined\n    });\n    return coll;\n  };\n\n  CheckBoxFilterBase.prototype.initiateFilter = function (fColl) {\n    var firstVal = fColl[0];\n    var predicate;\n\n    if (!isNullOrUndefined(firstVal)) {\n      predicate = firstVal.ejpredicate ? firstVal.ejpredicate : new Predicate(firstVal.field, firstVal.operator, firstVal.value, !firstVal.matchCase, firstVal.ignoreAccent);\n\n      for (var j = 1; j < fColl.length; j++) {\n        predicate = fColl[j].ejpredicate !== undefined ? predicate[fColl[j].predicate](fColl[j].ejpredicate) : predicate[fColl[j].predicate](fColl[j].field, fColl[j].operator, fColl[j].value, !fColl[j].matchCase, fColl[j].ignoreAccent);\n      }\n\n      var args = {\n        action: 'filtering',\n        filterCollection: fColl,\n        field: this.options.field,\n        ejpredicate: Predicate.or(predicate)\n      };\n      this.options.handler(args);\n    }\n  };\n\n  CheckBoxFilterBase.prototype.isForeignColumn = function (col) {\n    return col.isForeignColumn ? col.isForeignColumn() : false;\n  };\n\n  CheckBoxFilterBase.prototype.refreshCheckboxes = function () {\n    var _this = this;\n\n    var val = this.sInput.value;\n    var column = this.options.column;\n    var query = this.isForeignColumn(column) ? this.foreignKeyQuery.clone() : this.options.query.clone();\n    var foreignQuery = this.options.query.clone();\n    var pred = query.queries.filter(function (e) {\n      return e && e.fn === 'onWhere';\n    })[0];\n    query.queries = [];\n    foreignQuery.queries = [];\n    var parsed = this.options.type !== 'string' && parseFloat(val) ? parseFloat(val) : val;\n    var operator = this.options.isRemote ? this.options.type === 'string' ? 'contains' : 'equal' : this.options.type ? 'contains' : 'equal';\n    var matchCase = true;\n    var ignoreAccent = this.options.ignoreAccent;\n    var field = this.isForeignColumn(column) ? column.foreignKeyValue : column.field;\n    parsed = parsed === '' || parsed === undefined ? undefined : parsed;\n    var predicte;\n    var moduleName = this.options.dataManager.adaptor.getModuleName;\n\n    if (this.options.type === 'boolean') {\n      if (parsed !== undefined && this.getLocalizedLabel('FilterTrue').toLowerCase().indexOf(parsed.toLowerCase()) !== -1) {\n        parsed = 'true';\n      } else if (parsed !== undefined && this.getLocalizedLabel('FilterFalse').toLowerCase().indexOf(parsed.toLowerCase()) !== -1) {\n        parsed = 'false';\n      }\n\n      if (parsed !== undefined && this.getLocalizedLabel('FilterTrue').toLowerCase().indexOf(parsed.toLowerCase()) !== -1 && moduleName) {\n        parsed = moduleName() === 'ODataAdaptor' || 'ODataV4Adaptor' ? true : 'true';\n      } else if (parsed !== undefined && this.getLocalizedLabel('FilterFalse').toLowerCase().indexOf(parsed.toLowerCase()) !== -1 && moduleName) {\n        parsed = moduleName() === 'ODataAdaptor' || 'ODataV4Adaptor' ? false : 'false';\n      }\n\n      operator = 'equal';\n    }\n\n    if (this.options.type === 'date' || this.options.type === 'datetime') {\n      parsed = this.valueFormatter.fromView(val, this.options.parserFn, this.options.type);\n    }\n\n    this.addDistinct(query);\n    /* tslint:disable-next-line:max-line-length */\n\n    var args = {\n      requestType: events.filterSearchBegin,\n      filterModel: this,\n      columnName: field,\n      column: column,\n      operator: operator,\n      matchCase: matchCase,\n      ignoreAccent: ignoreAccent,\n      filterChoiceCount: null,\n      query: query,\n      value: parsed\n    };\n    this.parent.trigger(events.actionBegin, args, function (filterargs) {\n      filterargs.operator = filterargs.operator;\n      predicte = new Predicate(field, filterargs.operator, parsed, filterargs.matchCase, filterargs.ignoreAccent);\n\n      if (_this.options.type === 'date' || _this.options.type === 'datetime') {\n        operator = 'equal';\n\n        if (isNullOrUndefined(parsed) && val.length) {\n          return;\n        }\n\n        var filterObj = {\n          field: field,\n          operator: operator,\n          value: parsed,\n          matchCase: matchCase,\n          ignoreAccent: ignoreAccent\n        };\n        predicte = getDatePredicate(filterObj, _this.options.type);\n      }\n\n      if (val.length) {\n        predicte = !isNullOrUndefined(pred) ? predicte.and(pred.e) : predicte;\n        query.where(predicte);\n      } else if (!isNullOrUndefined(pred)) {\n        query.where(pred.e);\n      }\n\n      filterargs.filterChoiceCount = !isNullOrUndefined(filterargs.filterChoiceCount) ? filterargs.filterChoiceCount : 1000;\n      var fPredicate = {};\n      showSpinner(_this.spinner);\n      _this.renderEmpty = false;\n\n      if (_this.isForeignColumn(column) && val.length) {\n        var colData = 'result' in column.dataSource ? new DataManager(column.dataSource.result) : column.dataSource; // tslint:disable-next-line:no-any\n\n        colData.executeQuery(query).then(function (e) {\n          var columnData = _this.options.column.columnData;\n          _this.options.column.columnData = e.result;\n\n          _this.parent.notify(events.generateQuery, {\n            predicate: fPredicate,\n            column: column\n          });\n\n          if (fPredicate.predicate.predicates.length) {\n            foreignQuery.where(fPredicate.predicate);\n          } else {\n            _this.renderEmpty = true;\n          }\n\n          _this.options.column.columnData = columnData;\n          foreignQuery.take(filterargs.filterChoiceCount);\n\n          _this.search(filterargs, foreignQuery);\n        });\n      } else {\n        query.take(filterargs.filterChoiceCount);\n\n        _this.search(filterargs, query);\n      }\n    });\n  };\n\n  CheckBoxFilterBase.prototype.search = function (args, query) {\n    if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n      this.filterEvent(args, query);\n    } else {\n      this.processSearch(query);\n    }\n  };\n\n  CheckBoxFilterBase.prototype.getPredicateFromCols = function (columns) {\n    var predicates = CheckBoxFilterBase.getPredicate(columns);\n    var predicateList = [];\n    var fPredicate = {};\n    var isGrid = this.parent.getForeignKeyColumns !== undefined;\n    var foreignColumn = isGrid ? this.parent.getForeignKeyColumns() : [];\n\n    for (var _i = 0, _a = Object.keys(predicates); _i < _a.length; _i++) {\n      var prop = _a[_i];\n      var col = void 0;\n\n      if (isGrid && this.parent.getColumnByField(prop).isForeignColumn()) {\n        col = getColumnByForeignKeyValue(prop, foreignColumn);\n      }\n\n      if (col) {\n        this.parent.notify(events.generateQuery, {\n          predicate: fPredicate,\n          column: col\n        });\n\n        if (fPredicate.predicate.predicates.length) {\n          predicateList.push(Predicate.or(fPredicate.predicate.predicates));\n        }\n      } else {\n        predicateList.push(predicates[prop]);\n      }\n    }\n\n    return predicateList.length && Predicate.and(predicateList);\n  };\n\n  CheckBoxFilterBase.prototype.getQuery = function () {\n    return this.parent.getQuery ? this.parent.getQuery().clone() : new Query();\n  };\n\n  CheckBoxFilterBase.prototype.getAllData = function () {\n    var _this = this;\n\n    var query = this.getQuery();\n    query.requiresCount(); //consider take query\n\n    this.addDistinct(query);\n    var args = {\n      requestType: events.filterChoiceRequest,\n      query: query,\n      filterChoiceCount: null\n    };\n    var filterModel = 'filterModel';\n    args[filterModel] = this;\n    this.parent.trigger(events.actionBegin, args, function (args) {\n      args.filterChoiceCount = !isNullOrUndefined(args.filterChoiceCount) ? args.filterChoiceCount : 1000;\n      query.take(args.filterChoiceCount);\n\n      if (_this.parent.dataSource && 'result' in _this.parent.dataSource) {\n        _this.filterEvent(args, query);\n      } else {\n        _this.processDataOperation(query, true);\n      }\n    });\n  };\n\n  CheckBoxFilterBase.prototype.addDistinct = function (query) {\n    var filteredColumn = DataUtil.distinct(this.options.filteredColumns, 'field');\n\n    if (filteredColumn.indexOf(this.options.column.field) <= -1) {\n      filteredColumn = filteredColumn.concat(this.options.column.field);\n    }\n\n    query.distinct(filteredColumn);\n    return query;\n  };\n\n  CheckBoxFilterBase.prototype.filterEvent = function (args, query) {\n    var _this = this;\n\n    var defObj = eventPromise(args, query);\n    this.parent.trigger(events.dataStateChange, defObj.state);\n    var def = defObj.deffered;\n    def.promise.then(function (e) {\n      _this.dataSuccess(e);\n    });\n  };\n\n  CheckBoxFilterBase.prototype.processDataOperation = function (query, isInitial) {\n    var _this = this;\n\n    this.options.dataSource = this.options.dataSource instanceof DataManager ? this.options.dataSource : new DataManager(this.options.dataSource);\n    var allPromise = [];\n    var runArray = [];\n\n    if (this.isForeignColumn(this.options.column) && isInitial) {\n      var colData = 'result' in this.options.column.dataSource ? new DataManager(this.options.column.dataSource.result) : this.options.column.dataSource;\n      this.foreignKeyQuery.params = query.params;\n      allPromise.push(colData.executeQuery(this.foreignKeyQuery));\n      runArray.push(function (data) {\n        return _this.foreignKeyData = data;\n      });\n    }\n\n    allPromise.push(this.options.dataSource.executeQuery(query));\n    runArray.push(this.dataSuccess.bind(this));\n    var i = 0;\n    Promise.all(allPromise).then(function (e) {\n      for (var j = 0; j < e.length; j++) {\n        runArray[i++](e[j].result);\n      }\n    });\n  };\n\n  CheckBoxFilterBase.prototype.dataSuccess = function (e) {\n    this.fullData = e;\n    var args1 = {\n      dataSource: this.fullData,\n      executeQuery: true,\n      field: this.options.field\n    };\n    this.parent.notify(events.beforeCheckboxRenderer, args1);\n\n    if (args1.executeQuery) {\n      var query = new Query();\n\n      if (this.parent.searchSettings && this.parent.searchSettings.key.length) {\n        var sSettings = this.parent.searchSettings;\n        var fields = sSettings.fields.length ? sSettings.fields : this.options.columns.map(function (f) {\n          return f.field;\n        });\n        /* tslint:disable-next-line:max-line-length */\n\n        query.search(sSettings.key, fields, sSettings.operator, sSettings.ignoreCase, sSettings.ignoreAccent);\n      }\n\n      if (this.options.filteredColumns.length) {\n        var cols = [];\n\n        for (var i = 0; i < this.options.filteredColumns.length; i++) {\n          var filterColumn = this.options.filteredColumns[i];\n\n          if (this.options.uid) {\n            filterColumn.uid = filterColumn.uid || this.parent.getColumnByField(filterColumn.field).uid;\n\n            if (filterColumn.uid !== this.options.uid) {\n              cols.push(this.options.filteredColumns[i]);\n            }\n          } else {\n            if (filterColumn.field !== this.options.field) {\n              cols.push(this.options.filteredColumns[i]);\n            }\n          }\n        }\n\n        var predicate = this.getPredicateFromCols(cols);\n\n        if (predicate) {\n          query.where(predicate);\n        }\n      } // query.select(this.options.field);\n\n\n      var result = new DataManager(args1.dataSource).executeLocal(query);\n      var col = this.options.column;\n      this.filteredData = CheckBoxFilterBase.getDistinct(result, this.options.field, col, this.foreignKeyData).records || [];\n    }\n\n    var data = args1.executeQuery ? this.filteredData : args1.dataSource;\n    this.processDataSource(null, true, data, args1);\n\n    if (this.sInput) {\n      this.sInput.focus();\n    }\n\n    var args = {\n      requestType: events.filterAfterOpen,\n      columnName: this.options.field,\n      columnType: this.options.type\n    };\n    var filterModel = 'filterModel';\n    args[filterModel] = this;\n    this.parent.notify(events.cBoxFltrComplete, args);\n  };\n\n  CheckBoxFilterBase.prototype.processDataSource = function (query, isInitial, dataSource, args) {\n    showSpinner(this.spinner); // query = query ? query : this.options.query.clone();\n    // query.requiresCount();\n    // let result: Object = new DataManager(dataSource as JSON[]).executeLocal(query);\n    // let res: { result: Object[] } = result as { result: Object[] };\n\n    this.updateResult();\n    this.createFilterItems(dataSource, isInitial, args);\n  };\n\n  CheckBoxFilterBase.prototype.processSearch = function (query) {\n    this.processDataOperation(query);\n  };\n\n  CheckBoxFilterBase.prototype.updateResult = function () {\n    this.result = {};\n    var predicate = this.getPredicateFromCols(this.options.filteredColumns);\n    var query = new Query();\n\n    if (predicate) {\n      query.where(predicate);\n    }\n\n    var result = new DataManager(this.fullData).executeLocal(query);\n\n    for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n      var res = result_1[_i];\n      this.result[getObject(this.options.field, res)] = true;\n    }\n  };\n\n  CheckBoxFilterBase.prototype.clickHandler = function (e) {\n    var target = e.target;\n    var elem = parentsUntil(target, 'e-checkbox-wrapper');\n\n    if (parentsUntil(target, 'e-searchbox')) {\n      this.searchBoxClick(e);\n    }\n\n    if (elem) {\n      var selectAll = elem.querySelector('.e-selectall');\n\n      if (selectAll) {\n        this.updateAllCBoxes(!selectAll.classList.contains('e-check'));\n      } else {\n        toogleCheckbox(elem.parentElement);\n      }\n\n      this.updateIndeterminatenBtn();\n      elem.querySelector('.e-chk-hidden').focus();\n    }\n\n    this.setFocus(parentsUntil(elem, 'e-ftrchk'));\n  };\n\n  CheckBoxFilterBase.prototype.keyupHandler = function (e) {\n    this.setFocus(parentsUntil(e.target, 'e-ftrchk'));\n  };\n\n  CheckBoxFilterBase.prototype.setFocus = function (elem) {\n    var prevElem = this.dlg.querySelector('.e-chkfocus');\n\n    if (prevElem) {\n      prevElem.classList.remove('e-chkfocus');\n    }\n\n    if (elem) {\n      elem.classList.add('e-chkfocus');\n    }\n  };\n\n  CheckBoxFilterBase.prototype.updateAllCBoxes = function (checked) {\n    var cBoxes = [].slice.call(this.cBox.getElementsByClassName('e-frame'));\n\n    for (var _i = 0, cBoxes_1 = cBoxes; _i < cBoxes_1.length; _i++) {\n      var cBox = cBoxes_1[_i];\n      removeAddCboxClasses(cBox, checked);\n      setChecked(cBox.previousSibling, checked);\n    }\n  };\n\n  CheckBoxFilterBase.prototype.dialogOpen = function () {\n    if (this.parent.element.classList.contains('e-device')) {\n      this.dialogObj.element.querySelector('.e-input-group').classList.remove('e-input-focus');\n\n      if (!this.options.isResponsiveFilter) {\n        this.dialogObj.element.querySelector('.e-btn').focus();\n      }\n    }\n  };\n\n  CheckBoxFilterBase.prototype.createCheckbox = function (value, checked, data) {\n    var elem = checked ? this.cBoxTrue.cloneNode(true) : this.cBoxFalse.cloneNode(true);\n    setChecked(elem.querySelector('input'), checked);\n    var label = elem.querySelector('.e-label');\n    var dummyData = extendObjWithFn({}, data, {\n      column: this.options.column,\n      parent: this.parent\n    });\n    label.innerHTML = !isNullOrUndefined(value) && value.toString().length ? value : this.getLocalizedLabel('Blanks');\n\n    if (typeof value === 'boolean') {\n      label.innerHTML = value === true ? this.getLocalizedLabel('FilterTrue') : this.getLocalizedLabel('FilterFalse');\n    }\n\n    addClass([label], ['e-checkboxfiltertext']);\n\n    if (this.options.template && data[this.options.column.field] !== this.getLocalizedLabel('SelectAll')) {\n      label.innerHTML = '';\n      var isReactCompiler = this.parent.isReact && this.options.column.filter && typeof this.options.column.filter.itemTemplate !== 'string';\n\n      if (isReactCompiler) {\n        this.options.template(dummyData, this.parent, 'filterItemTemplate', null, null, null, label);\n        this.parent.renderTemplates();\n      } else {\n        appendChildren(label, this.options.template(dummyData, this.parent, 'filterItemTemplate'));\n      }\n    }\n\n    return elem;\n  };\n\n  CheckBoxFilterBase.prototype.updateIndeterminatenBtn = function () {\n    var cnt = this.cBox.children.length - 1;\n    var className = [];\n    var disabled = false;\n    var elem = this.cBox.querySelector('.e-selectall');\n    var selected = this.cBox.querySelectorAll('.e-check:not(.e-selectall)').length;\n    var btn;\n\n    if (!this.options.isResponsiveFilter) {\n      btn = this.dialogObj.btnObj[0];\n      btn.disabled = false;\n    }\n\n    var input = elem.previousSibling;\n    setChecked(input, false);\n    input.indeterminate = false;\n\n    if (cnt === selected) {\n      className = ['e-check'];\n      setChecked(input, true);\n    } else if (selected) {\n      className = ['e-stop'];\n      input.indeterminate = true;\n    } else {\n      className = ['e-uncheck'];\n      disabled = true;\n\n      if (btn) {\n        btn.disabled = true;\n      }\n    }\n\n    if (btn) {\n      this.filterState = !btn.disabled;\n      btn.dataBind();\n    }\n\n    removeClass([elem], ['e-check', 'e-stop', 'e-uncheck']);\n    addClass([elem], className);\n    this.parent.notify(events.refreshCustomFilterOkBtn, {\n      disabled: disabled\n    });\n  };\n\n  CheckBoxFilterBase.prototype.createFilterItems = function (data, isInitial, args1) {\n    var _a;\n\n    var cBoxes = this.parent.createElement('div');\n    var btn;\n    var disabled = false;\n\n    if (!this.options.isResponsiveFilter) {\n      btn = this.dialogObj.btnObj[0];\n    }\n\n    var nullCounter = -1;\n    var key = 'ejValue';\n\n    if (!args1.executeQuery) {\n      key = args1.field;\n    }\n\n    for (var i = 0; i < data.length; i++) {\n      var val = getValue(key, data[i]);\n\n      if (val === '' || isNullOrUndefined(val)) {\n        nullCounter = nullCounter + 1;\n      }\n    }\n\n    this.itemsCnt = nullCounter !== -1 ? data.length - nullCounter : data.length;\n\n    if (data.length && !this.renderEmpty) {\n      var selectAllValue = this.getLocalizedLabel('SelectAll');\n      var checkBox = this.createCheckbox(selectAllValue, false, (_a = {}, _a[this.options.field] = selectAllValue, _a));\n      var selectAll = createCboxWithWrap(getUid('cbox'), checkBox, 'e-ftrchk');\n      selectAll.querySelector('.e-frame').classList.add('e-selectall');\n      cBoxes.appendChild(selectAll);\n      var predicate = new Predicate('field', 'equal', this.options.field);\n\n      if (this.options.foreignKeyValue) {\n        predicate = predicate.or('field', 'equal', this.options.foreignKeyValue);\n      }\n\n      var isColFiltered = new DataManager(this.options.filteredColumns).executeLocal(new Query().where(predicate)).length;\n      var isRndere = void 0;\n\n      for (var i = 0; i < data.length; i++) {\n        var uid = getUid('cbox');\n        this.values[uid] = getValue(key, data[i]);\n        var value = getValue(this.options.field, data[i]);\n\n        if (this.options.formatFn) {\n          value = this.valueFormatter.toView(value, this.options.formatFn);\n        }\n\n        var args_1 = {\n          value: value,\n          column: this.options.column,\n          data: data[i]\n        };\n        this.parent.notify(events.filterCboxValue, args_1);\n        value = args_1.value;\n\n        if (value === '' || isNullOrUndefined(value)) {\n          if (isRndere) {\n            continue;\n          }\n\n          isRndere = true;\n        }\n\n        var checkbox = this.createCheckbox(value, this.getCheckedState(isColFiltered, this.values[uid]), getValue('dataObj', data[i]));\n        cBoxes.appendChild(createCboxWithWrap(uid, checkbox, 'e-ftrchk'));\n      }\n\n      this.cBox.innerHTML = '';\n      appendChildren(this.cBox, [].slice.call(cBoxes.children));\n      this.updateIndeterminatenBtn();\n\n      if (btn) {\n        btn.disabled = false;\n      }\n\n      disabled = false;\n    } else {\n      cBoxes.appendChild(this.parent.createElement('span', {\n        innerHTML: this.getLocalizedLabel('NoResult')\n      }));\n      this.cBox.innerHTML = '';\n      appendChildren(this.cBox, [].slice.call(cBoxes.children));\n\n      if (btn) {\n        btn.disabled = true;\n      }\n\n      disabled = true;\n    }\n\n    if (btn) {\n      this.filterState = !btn.disabled;\n      btn.dataBind();\n    }\n\n    var args = {\n      requestType: events.filterChoiceRequest,\n      dataSource: this.renderEmpty ? [] : data\n    };\n    var filterModel = 'filterModel';\n    args[filterModel] = this;\n    this.parent.notify(events.cBoxFltrComplete, args);\n    this.parent.notify(events.refreshCustomFilterOkBtn, {\n      disabled: disabled\n    });\n    hideSpinner(this.spinner);\n  };\n\n  CheckBoxFilterBase.prototype.getCheckedState = function (isColFiltered, value) {\n    if (!this.isFiltered || !isColFiltered) {\n      return true;\n    } else {\n      var checkState = this.result[value];\n      return this.options.operator === 'notequal' ? !checkState : checkState;\n    }\n  };\n\n  CheckBoxFilterBase.getDistinct = function (json, field, column, foreignKeyData) {\n    var len = json.length;\n    var result = [];\n    var value;\n    var ejValue = 'ejValue';\n    var lookup = {};\n    var isForeignKey = column && column.isForeignColumn ? column.isForeignColumn() : false;\n\n    while (len--) {\n      value = json[len];\n      value = getObject(field, value); //local remote diff, check with mdu   \n\n      if (!(value in lookup)) {\n        var obj = {};\n        obj[ejValue] = value;\n        lookup[value] = true;\n\n        if (isForeignKey) {\n          var foreignDataObj = getForeignData(column, {}, value, foreignKeyData)[0];\n          setValue(events.foreignKeyData, foreignDataObj, json[len]);\n          value = getValue(column.foreignKeyValue, foreignDataObj);\n        }\n\n        setValue(field, isNullOrUndefined(value) ? null : value, obj);\n        setValue('dataObj', json[len], obj);\n        result.push(obj);\n      }\n    }\n\n    return DataUtil.group(DataUtil.sort(result, field, DataUtil.fnAscending), 'ejValue');\n  };\n\n  CheckBoxFilterBase.getPredicate = function (columns) {\n    var cols = DataUtil.distinct(columns, 'field', true) || [];\n    var collection = [];\n    var pred = {};\n\n    for (var i = 0; i < cols.length; i++) {\n      collection = new DataManager(columns).executeLocal(new Query().where('field', 'equal', cols[i].field));\n\n      if (collection.length !== 0) {\n        pred[cols[i].field] = CheckBoxFilterBase.generatePredicate(collection);\n      }\n    }\n\n    return pred;\n  };\n\n  CheckBoxFilterBase.generatePredicate = function (cols) {\n    var len = cols ? cols.length : 0;\n    var predicate;\n    var first;\n    var operate = 'or';\n    first = CheckBoxFilterBase.updateDateFilter(cols[0]);\n    first.ignoreAccent = !isNullOrUndefined(first.ignoreAccent) ? first.ignoreAccent : false;\n\n    if (first.type === 'date' || first.type === 'datetime') {\n      predicate = getDatePredicate(first, first.type);\n    } else {\n      predicate = first.ejpredicate ? first.ejpredicate : new Predicate(first.field, first.operator, first.value, !CheckBoxFilterBase.getCaseValue(first), first.ignoreAccent);\n    }\n\n    for (var p = 1; p < len; p++) {\n      cols[p] = CheckBoxFilterBase.updateDateFilter(cols[p]);\n\n      if (len > 2 && p > 1 && cols[p].predicate === 'or') {\n        if (cols[p].type === 'date' || cols[p].type === 'datetime') {\n          predicate.predicates.push(getDatePredicate(cols[p], cols[p].type));\n        } else {\n          predicate.predicates.push(new Predicate(cols[p].field, cols[p].operator, cols[p].value, !CheckBoxFilterBase.getCaseValue(cols[p]), cols[p].ignoreAccent));\n        }\n      } else {\n        if (cols[p].type === 'date' || cols[p].type === 'datetime') {\n          if (cols[p].predicate === 'and' && cols[p].operator === 'equal') {\n            predicate = predicate[operate](getDatePredicate(cols[p], cols[p].type), cols[p].type, cols[p].ignoreAccent);\n          } else {\n            predicate = predicate[cols[p].predicate](getDatePredicate(cols[p], cols[p].type), cols[p].type, cols[p].ignoreAccent);\n          }\n        } else {\n          /* tslint:disable-next-line:max-line-length */\n          predicate = cols[p].ejpredicate ? predicate[cols[p].predicate](cols[p].ejpredicate) : predicate[cols[p].predicate](cols[p].field, cols[p].operator, cols[p].value, !CheckBoxFilterBase.getCaseValue(cols[p]), cols[p].ignoreAccent);\n        }\n      }\n    }\n\n    return predicate || null;\n  };\n\n  CheckBoxFilterBase.getCaseValue = function (filter) {\n    if (isNullOrUndefined(filter.matchCase)) {\n      if (filter.type === 'string' || isNullOrUndefined(filter.type) && typeof filter.value === 'string') {\n        return false;\n      } else {\n        return true;\n      }\n    } else {\n      return filter.matchCase;\n    }\n  };\n\n  CheckBoxFilterBase.updateDateFilter = function (filter) {\n    if (filter.type === 'date' || filter.type === 'datetime' || filter.value instanceof Date) {\n      filter.type = filter.type || 'date';\n    }\n\n    return filter;\n  };\n\n  return CheckBoxFilterBase;\n}();\n\nexport { CheckBoxFilterBase };","import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { Query, DataManager, Predicate, Deferred, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { setFormatter, isGroupAdaptive, getColumnByForeignKeyValue, refreshFilteredColsUid } from '../base/util';\nimport * as events from '../base/constant';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { CheckBoxFilterBase } from '../common/checkbox-filter-base';\n/**\n * Grid data module is used to generate query and data source.\n * @hidden\n */\n\nvar Data =\n/** @class */\nfunction () {\n  /**\n   * Constructor for data module.\n   * @hidden\n   */\n  function Data(parent, serviceLocator) {\n    this.dataState = {\n      isPending: false,\n      resolver: null,\n      group: []\n    };\n    this.foreignKeyDataState = {\n      isPending: false,\n      resolver: null\n    };\n    this.parent = parent;\n    this.serviceLocator = serviceLocator;\n    this.initDataManager();\n\n    if (this.parent.isDestroyed || this.getModuleName() === 'foreignKey') {\n      return;\n    }\n\n    this.parent.on(events.rowsAdded, this.addRows, this);\n    this.parent.on(events.rowPositionChanged, this.reorderRows, this);\n    this.parent.on(events.rowsRemoved, this.removeRows, this);\n    this.parent.on(events.dataSourceModified, this.initDataManager, this);\n    this.parent.on(events.destroy, this.destroy, this);\n    this.parent.on(events.updateData, this.crudActions, this);\n    this.parent.on(events.addDeleteAction, this.getData, this);\n    this.parent.on(events.autoCol, this.refreshFilteredCols, this);\n    this.parent.on(events.columnsPrepared, this.refreshFilteredCols, this);\n  }\n\n  Data.prototype.reorderRows = function (e) {\n    this.dataManager.dataSource.json.splice(e.toIndex, 0, this.dataManager.dataSource.json.splice(e.fromIndex, 1)[0]);\n  };\n\n  Data.prototype.getModuleName = function () {\n    return 'data';\n  };\n  /**\n   * The function used to initialize dataManager and external query\n   * @return {void}\n   */\n\n\n  Data.prototype.initDataManager = function () {\n    var gObj = this.parent;\n    this.dataManager = gObj.dataSource instanceof DataManager ? gObj.dataSource : isNullOrUndefined(gObj.dataSource) ? new DataManager() : new DataManager(gObj.dataSource);\n\n    if (gObj.isAngular && !(gObj.query instanceof Query)) {\n      gObj.setProperties({\n        query: new Query()\n      }, true);\n    } else {\n      this.isQueryInvokedFromData = true;\n      gObj.query = gObj.query instanceof Query ? gObj.query : new Query();\n    }\n  };\n  /**\n   * The function is used to generate updated Query from Grid model.\n   * @return {Query}\n   * @hidden\n   */\n\n\n  Data.prototype.generateQuery = function (skipPage) {\n    var gObj = this.parent;\n    var query = gObj.getQuery().clone();\n\n    if (this.parent.columnQueryMode === 'ExcludeHidden') {\n      query.select(this.parent.getColumns().filter(function (column) {\n        return !(column.isPrimaryKey !== true && column.visible === false || column.field === undefined);\n      }).map(function (column) {\n        return column.field;\n      }));\n    } else if (this.parent.columnQueryMode === 'Schema') {\n      var selectQueryFields = [];\n      var columns = this.parent.columns;\n\n      for (var i = 0; i < columns.length; i++) {\n        selectQueryFields.push(columns[i].field);\n      }\n\n      query.select(selectQueryFields);\n    }\n\n    this.filterQuery(query);\n    this.searchQuery(query);\n    this.aggregateQuery(query);\n    this.sortQuery(query);\n\n    if (isGroupAdaptive(this.parent)) {\n      this.virtualGroupPageQuery(query);\n    } else {\n      this.pageQuery(query, skipPage);\n    }\n\n    this.groupQuery(query);\n    return query;\n  };\n  /** @hidden */\n\n\n  Data.prototype.aggregateQuery = function (query, isForeign) {\n    var rows = this.parent.aggregates;\n\n    for (var i = 0; i < rows.length; i++) {\n      var row = rows[i];\n\n      for (var j = 0; j < row.columns.length; j++) {\n        var cols = row.columns[j];\n        var types = cols.type instanceof Array ? cols.type : [cols.type];\n\n        for (var k = 0; k < types.length; k++) {\n          query.aggregate(types[k].toLowerCase(), cols.field);\n        }\n      }\n    }\n\n    return query;\n  };\n\n  Data.prototype.virtualGroupPageQuery = function (query) {\n    var gObj = this.parent;\n    var fName = 'fn';\n\n    if (query.queries.length) {\n      for (var i = 0; i < query.queries.length; i++) {\n        if (query.queries[i][fName] === 'onPage') {\n          query.queries.splice(i, 1);\n        }\n      }\n    }\n\n    return query;\n  };\n\n  Data.prototype.pageQuery = function (query, skipPage) {\n    var gObj = this.parent;\n    var fName = 'fn';\n\n    if ((gObj.allowPaging || gObj.enableVirtualization || gObj.enableInfiniteScrolling) && skipPage !== true) {\n      gObj.pageSettings.currentPage = Math.max(1, gObj.pageSettings.currentPage);\n\n      if (gObj.pageSettings.pageCount <= 0) {\n        gObj.pageSettings.pageCount = 8;\n      }\n\n      if (gObj.pageSettings.pageSize <= 0) {\n        gObj.pageSettings.pageSize = 12;\n      }\n\n      if (query.queries.length) {\n        for (var i = 0; i < query.queries.length; i++) {\n          if (query.queries[i][fName] === 'onPage') {\n            query.queries.splice(i, 1);\n          }\n        }\n      }\n\n      if (!isNullOrUndefined(gObj.infiniteScrollModule) && gObj.enableInfiniteScrolling) {\n        this.parent.notify(events.infinitePageQuery, query);\n      } else {\n        query.page(gObj.pageSettings.currentPage, gObj.pageSettings.pageSize);\n      }\n    }\n\n    return query;\n  };\n\n  Data.prototype.groupQuery = function (query) {\n    var gObj = this.parent;\n\n    if (gObj.allowGrouping && gObj.groupSettings.columns.length) {\n      if (this.parent.groupSettings.enableLazyLoading) {\n        query.lazyLoad.push({\n          key: 'isLazyLoad',\n          value: this.parent.groupSettings.enableLazyLoading\n        });\n      }\n\n      var columns = gObj.groupSettings.columns;\n\n      for (var i = 0, len = columns.length; i < len; i++) {\n        var column = this.getColumnByField(columns[i]);\n\n        if (!column) {\n          this.parent.log('initial_action', {\n            moduleName: 'group',\n            columnName: columns[i]\n          });\n        }\n\n        var isGrpFmt = column.enableGroupByFormat;\n        var format = column.format;\n\n        if (isGrpFmt) {\n          query.group(columns[i], this.formatGroupColumn.bind(this), format);\n        } else {\n          query.group(columns[i], null);\n        }\n      }\n    }\n\n    return query;\n  };\n\n  Data.prototype.sortQuery = function (query) {\n    var gObj = this.parent;\n\n    if ((gObj.allowSorting || gObj.allowGrouping) && gObj.sortSettings.columns.length) {\n      var columns = gObj.sortSettings.columns;\n      var sortGrp = [];\n\n      for (var i = columns.length - 1; i > -1; i--) {\n        var col = this.getColumnByField(columns[i].field);\n\n        if (col) {\n          col.setSortDirection(columns[i].direction);\n        } else {\n          this.parent.log('initial_action', {\n            moduleName: 'sort',\n            columnName: columns[i].field\n          });\n          return query;\n        }\n\n        var fn = columns[i].direction;\n\n        if (col.sortComparer) {\n          this.parent.log('grid_sort_comparer');\n          fn = !this.isRemote() ? col.sortComparer.bind(col) : columns[i].direction;\n        }\n\n        if (gObj.groupSettings.columns.indexOf(columns[i].field) === -1) {\n          if (col.isForeignColumn() || col.sortComparer) {\n            query.sortByForeignKey(col.field, fn, undefined, columns[i].direction.toLowerCase());\n          } else {\n            query.sortBy(col.field, fn);\n          }\n        } else {\n          sortGrp.push({\n            direction: fn,\n            field: col.field\n          });\n        }\n      }\n\n      for (var i = 0, len = sortGrp.length; i < len; i++) {\n        if (typeof sortGrp[i].direction === 'string') {\n          query.sortBy(sortGrp[i].field, sortGrp[i].direction);\n        } else {\n          var col = this.getColumnByField(sortGrp[i].field);\n          query.sortByForeignKey(sortGrp[i].field, sortGrp[i].direction, undefined, col.getSortDirection().toLowerCase());\n        }\n      }\n    }\n\n    return query;\n  };\n\n  Data.prototype.searchQuery = function (query, fcolumn, isForeignKey) {\n    var sSettings = this.parent.searchSettings;\n    var fields = sSettings.fields.length ? sSettings.fields : this.getSearchColumnFieldNames();\n    var predicateList = [];\n    var needForeignKeySearch = false;\n\n    if (this.parent.searchSettings.key.length) {\n      needForeignKeySearch = this.parent.getForeignKeyColumns().some(function (col) {\n        return fields.indexOf(col.field) > -1;\n      });\n      var adaptor = !isForeignKey ? this.dataManager.adaptor : fcolumn.dataSource.adaptor;\n\n      if (needForeignKeySearch || adaptor.getModuleName && adaptor.getModuleName() === 'ODataV4Adaptor') {\n        fields = isForeignKey ? [fcolumn.foreignKeyValue] : fields;\n\n        for (var i = 0; i < fields.length; i++) {\n          var column = isForeignKey ? fcolumn : this.getColumnByField(fields[i]);\n\n          if (column.isForeignColumn() && !isForeignKey) {\n            predicateList = this.fGeneratePredicate(column, predicateList);\n          } else {\n            predicateList.push(new Predicate(fields[i], sSettings.operator, sSettings.key, sSettings.ignoreCase, sSettings.ignoreAccent));\n          }\n        }\n\n        var predList = Predicate.or(predicateList);\n        predList.key = sSettings.key;\n        query.where(predList);\n      } else {\n        query.search(sSettings.key, fields, sSettings.operator, sSettings.ignoreCase, sSettings.ignoreAccent);\n      }\n    }\n\n    return query;\n  };\n\n  Data.prototype.filterQuery = function (query, column, skipFoerign) {\n    var gObj = this.parent;\n    var predicateList = [];\n    var actualFilter = [];\n    var foreignColumn = this.parent.getForeignKeyColumns();\n    var foreignColEmpty;\n\n    if (gObj.allowFiltering && gObj.filterSettings.columns.length) {\n      var columns = column ? column : gObj.filterSettings.columns;\n      var colType = {};\n\n      for (var _i = 0, _a = gObj.getColumns(); _i < _a.length; _i++) {\n        var col = _a[_i];\n        colType[col.field] = col.filter.type ? col.filter.type : gObj.filterSettings.type;\n      }\n\n      var foreignCols = [];\n      var defaultFltrCols = [];\n\n      for (var _b = 0, columns_1 = columns; _b < columns_1.length; _b++) {\n        var col = columns_1[_b];\n        var gridColumn = gObj.getColumnByField(col.field);\n\n        if (isNullOrUndefined(col.type) && gridColumn && (gridColumn.type === 'date' || gridColumn.type === 'datetime')) {\n          col.type = gObj.getColumnByField(col.field).type;\n        }\n\n        if (col.isForeignKey) {\n          foreignCols.push(col);\n        } else {\n          defaultFltrCols.push(col);\n        }\n      }\n\n      if (defaultFltrCols.length) {\n        if (gObj.filterSettings.type === 'FilterBar' || gObj.filterSettings.type === 'Menu') {\n          for (var i = 0, len = defaultFltrCols.length; i < len; i++) {\n            defaultFltrCols[i].uid = defaultFltrCols[i].uid || this.parent.grabColumnByFieldFromAllCols(defaultFltrCols[i].field).uid;\n          }\n        }\n\n        var excelPredicate = CheckBoxFilterBase.getPredicate(defaultFltrCols);\n\n        for (var _c = 0, _d = Object.keys(excelPredicate); _c < _d.length; _c++) {\n          var prop = _d[_c];\n          predicateList.push(excelPredicate[prop]);\n        }\n      }\n\n      if (foreignCols.length) {\n        for (var _e = 0, foreignCols_1 = foreignCols; _e < foreignCols_1.length; _e++) {\n          var col = foreignCols_1[_e];\n          col.uid = col.uid || this.parent.grabColumnByFieldFromAllCols(col.field).uid;\n          var column_1 = this.parent.grabColumnByUidFromAllCols(col.uid);\n\n          if (!column_1) {\n            this.parent.log('initial_action', {\n              moduleName: 'filter',\n              columnName: col.field\n            });\n          }\n\n          if (column_1.isForeignColumn() && getColumnByForeignKeyValue(col.field, foreignColumn) && !skipFoerign) {\n            actualFilter.push(col);\n\n            if (!column_1.columnData.length) {\n              foreignColEmpty = true;\n            }\n\n            predicateList = this.fGeneratePredicate(column_1, predicateList);\n          } else {\n            var excelPredicate = CheckBoxFilterBase.getPredicate(columns);\n\n            for (var _f = 0, _g = Object.keys(excelPredicate); _f < _g.length; _f++) {\n              var prop = _g[_f];\n              predicateList.push(excelPredicate[prop]);\n            }\n          }\n        }\n      }\n\n      if (predicateList.length && !foreignColEmpty) {\n        query.where(Predicate.and(predicateList));\n      } else {\n        this.parent.notify(events.showEmptyGrid, {});\n      }\n    }\n\n    return query;\n  };\n\n  Data.prototype.fGeneratePredicate = function (col, predicateList) {\n    var fPredicate = {};\n\n    if (col) {\n      this.parent.notify(events.generateQuery, {\n        predicate: fPredicate,\n        column: col\n      });\n\n      if (fPredicate.predicate.predicates.length) {\n        predicateList.push(fPredicate.predicate);\n      }\n    }\n\n    return predicateList;\n  };\n  /**\n   * The function is used to get dataManager promise by executing given Query.\n   * @param  {Query} query - Defines the query which will execute along with data processing.\n   * @return {Promise<Object>}\n   * @hidden\n   */\n\n\n  Data.prototype.getData = function (args, query) {\n    var _this = this;\n\n    if (args === void 0) {\n      args = {\n        requestType: ''\n      };\n    }\n\n    var key = this.getKey(args.foreignKeyData && Object.keys(args.foreignKeyData).length ? args.foreignKeyData : this.parent.getPrimaryKeyFieldNames());\n    this.parent.log('datasource_syntax_mismatch', {\n      dataState: this.parent\n    });\n\n    if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n      var def = this.eventPromise(args, query, key);\n      return def.promise;\n    } else {\n      var crud = void 0;\n\n      switch (args.requestType) {\n        case 'delete':\n          query = query ? query : this.generateQuery();\n          var len = Object.keys(args.data).length;\n\n          if (len === 1) {\n            crud = this.dataManager.remove(key, args.data[0], query.fromTable, query);\n          } else {\n            var changes = {\n              addedRecords: [],\n              deletedRecords: [],\n              changedRecords: []\n            };\n            changes.deletedRecords = args.data;\n            crud = this.dataManager.saveChanges(changes, key, query.fromTable, query.requiresCount());\n          }\n\n          break;\n\n        case 'save':\n          query = query ? query : this.generateQuery();\n          args.index = isNullOrUndefined(args.index) ? 0 : args.index;\n          crud = this.dataManager.insert(args.data, query.fromTable, query, args.index);\n          break;\n      }\n\n      var promise = 'promise';\n      args[promise] = crud;\n\n      if (crud && !Array.isArray(crud) && !crud.hasOwnProperty('deletedRecords')) {\n        return crud.then(function (result) {\n          return _this.insert(query, args);\n        });\n      } else {\n        return this.insert(query, args);\n      }\n    }\n  };\n\n  Data.prototype.insert = function (query, args) {\n    if (args.requestType === 'save') {\n      this.parent.notify(events.recordAdded, args);\n    }\n\n    return this.executeQuery(query);\n  };\n\n  Data.prototype.executeQuery = function (query) {\n    var _this = this;\n\n    if (this.dataManager.ready) {\n      var deferred_1 = new Deferred();\n      var ready = this.dataManager.ready;\n      ready.then(function (e) {\n        _this.dataManager.executeQuery(query).then(function (result) {\n          deferred_1.resolve(result);\n        });\n      }).catch(function (e) {\n        deferred_1.reject(e);\n      });\n      return deferred_1.promise;\n    } else {\n      return this.dataManager.executeQuery(query);\n    }\n  };\n\n  Data.prototype.formatGroupColumn = function (value, field) {\n    var gObj = this.parent;\n    var serviceLocator = this.serviceLocator;\n    var column = this.getColumnByField(field);\n    var date = value;\n\n    if (!column.type) {\n      column.type = date.getDay ? date.getHours() > 0 || date.getMinutes() > 0 || date.getSeconds() > 0 || date.getMilliseconds() > 0 ? 'datetime' : 'date' : typeof value;\n    }\n\n    if (isNullOrUndefined(column.getFormatter())) {\n      setFormatter(serviceLocator, column);\n    }\n\n    var formatVal = ValueFormatter.prototype.toView(value, column.getFormatter());\n    return formatVal;\n  };\n\n  Data.prototype.crudActions = function (args) {\n    var query = this.generateQuery();\n    var promise = null;\n    var pr = 'promise';\n    var key = this.getKey(args.foreignKeyData && Object.keys(args.foreignKeyData).length ? args.foreignKeyData : this.parent.getPrimaryKeyFieldNames());\n\n    if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n      this.eventPromise(args, query, key);\n    }\n\n    switch (args.requestType) {\n      case 'save':\n        promise = this.dataManager.update(key, args.data, query.fromTable, query, args.previousData);\n        break;\n    }\n\n    args[pr] = promise ? promise : args[pr];\n    this.parent.notify(events.crudAction, args);\n  };\n  /** @hidden */\n\n\n  Data.prototype.saveChanges = function (changes, key, original, query) {\n    if (query === void 0) {\n      query = this.generateQuery();\n    }\n\n    query.requiresCount();\n\n    if ('result' in this.parent.dataSource) {\n      var state = void 0;\n      state = this.getStateEventArgument(query);\n      var deff = new Deferred();\n      var args = {\n        requestType: 'batchsave',\n        changes: changes,\n        key: key,\n        query: query,\n        endEdit: deff.resolve\n      };\n      this.setState({\n        isPending: true,\n        resolver: deff.resolve\n      });\n      this.parent.trigger(events.dataSourceChanged, args);\n      return deff.promise;\n    } else {\n      var promise = this.dataManager.saveChanges(changes, key, query.fromTable, query, original);\n      return promise;\n    }\n  };\n\n  Data.prototype.getKey = function (keys) {\n    if (keys && keys.length) {\n      return keys[0];\n    }\n\n    return undefined;\n  };\n  /** @hidden */\n\n\n  Data.prototype.isRemote = function () {\n    return this.dataManager.dataSource.offline !== true && this.dataManager.dataSource.url !== undefined && this.dataManager.dataSource.url !== '';\n  };\n\n  Data.prototype.addRows = function (e) {\n    for (var i = e.records.length; i > 0; i--) {\n      this.dataManager.dataSource.json.splice(e.toIndex, 0, e.records[i - 1]);\n    }\n  };\n\n  Data.prototype.removeRows = function (e) {\n    var json = this.dataManager.dataSource.json;\n    this.dataManager.dataSource.json = json.filter(function (value, index) {\n      return e.records.indexOf(value) === -1;\n    });\n  };\n\n  Data.prototype.getColumnByField = function (field) {\n    var col;\n    return this.parent.columnModel.some(function (column) {\n      col = column;\n      return column.field === field;\n    }) && col;\n  };\n\n  Data.prototype.destroy = function () {\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    this.parent.off(events.rowsAdded, this.addRows);\n    this.parent.off(events.rowsRemoved, this.removeRows);\n    this.parent.off(events.dataSourceModified, this.initDataManager);\n    this.parent.off(events.destroy, this.destroy);\n    this.parent.off(events.updateData, this.crudActions);\n    this.parent.off(events.addDeleteAction, this.getData);\n    this.parent.off(events.autoCol, this.refreshFilteredCols);\n    this.parent.off(events.columnsPrepared, this.refreshFilteredCols);\n  };\n\n  Data.prototype.getState = function () {\n    return this.dataState;\n  };\n\n  Data.prototype.setState = function (state) {\n    return this.dataState = state;\n  };\n\n  Data.prototype.getForeignKeyDataState = function () {\n    return this.foreignKeyDataState;\n  };\n\n  Data.prototype.setForeignKeyDataState = function (state) {\n    this.foreignKeyDataState = state;\n  };\n\n  Data.prototype.getStateEventArgument = function (query) {\n    var adaptr = new UrlAdaptor();\n    var dm = new DataManager({\n      url: '',\n      adaptor: new UrlAdaptor()\n    });\n    var state = adaptr.processQuery(dm, query);\n    var data = JSON.parse(state.data);\n    return extend(data, state.pvtData);\n  };\n\n  Data.prototype.eventPromise = function (args, query, key) {\n    var _this = this;\n\n    var state;\n    var dataArgs = args;\n    state = this.getStateEventArgument(query);\n    var def = new Deferred();\n    var deff = new Deferred();\n\n    if (args.requestType !== undefined && this.dataState.isDataChanged !== false) {\n      state.action = args;\n\n      if (args.requestType === 'save' || args.requestType === 'delete') {\n        var editArgs_1 = args;\n        editArgs_1.key = key;\n        var promise = 'promise';\n        editArgs_1[promise] = deff.promise;\n        editArgs_1.state = state;\n        this.setState({\n          isPending: true,\n          resolver: deff.resolve\n        });\n        dataArgs.endEdit = deff.resolve;\n        dataArgs.cancelEdit = deff.reject;\n        this.parent.trigger(events.dataSourceChanged, editArgs_1);\n        deff.promise.then(function (e) {\n          _this.setState({\n            isPending: true,\n            resolver: def.resolve,\n            group: state.group,\n            aggregates: state.aggregates\n          });\n\n          if (editArgs_1.requestType === 'save') {\n            _this.parent.notify(events.recordAdded, editArgs_1);\n          }\n\n          _this.parent.trigger(events.dataStateChange, state);\n        }).catch(function () {\n          return void 0;\n        });\n      } else {\n        this.setState({\n          isPending: true,\n          resolver: def.resolve,\n          group: state.group,\n          aggregates: state.aggregates\n        });\n        this.parent.trigger(events.dataStateChange, state);\n      }\n    } else {\n      this.setState({});\n      def.resolve(this.parent.dataSource);\n    }\n\n    return def;\n  };\n  /**\n   * Gets the columns where searching needs to be performed from the Grid.\n   * @return {string[]}\n   */\n\n\n  Data.prototype.getSearchColumnFieldNames = function () {\n    var colFieldNames = [];\n    var columns = this.parent.getColumns();\n\n    for (var _i = 0, columns_2 = columns; _i < columns_2.length; _i++) {\n      var col = columns_2[_i];\n\n      if (col.allowSearching && !isNullOrUndefined(col.field)) {\n        colFieldNames.push(col.field);\n      }\n    }\n\n    return colFieldNames;\n  };\n\n  Data.prototype.refreshFilteredCols = function () {\n    if (this.parent.allowFiltering && this.parent.filterSettings.columns.length) {\n      refreshFilteredColsUid(this.parent, this.parent.filterSettings.columns);\n    }\n  };\n\n  return Data;\n}();\n\nexport { Data };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nimport { Row } from '../models/row';\nimport { isNullOrUndefined, extend, setValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\nimport { getForeignData, getUid } from '../../grid/base/util';\n/**\n * GroupModelGenerator is used to generate group caption rows and data rows.\n * @hidden\n */\n\nvar GroupModelGenerator =\n/** @class */\nfunction (_super) {\n  __extends(GroupModelGenerator, _super);\n\n  function GroupModelGenerator(parent) {\n    var _this = _super.call(this, parent) || this;\n\n    _this.rows = [];\n    /** @hidden */\n\n    _this.index = 0;\n    _this.parent = parent;\n    _this.summaryModelGen = new GroupSummaryModelGenerator(parent);\n    _this.captionModelGen = new CaptionSummaryModelGenerator(parent);\n    return _this;\n  }\n\n  GroupModelGenerator.prototype.generateRows = function (data, args) {\n    if (this.parent.groupSettings.columns.length === 0) {\n      return _super.prototype.generateRows.call(this, data, args);\n    }\n\n    this.isInfiniteScroll = args.requestType === 'infiniteScroll';\n    this.rows = [];\n    this.index = this.parent.enableVirtualization || this.isInfiniteScroll ? args.startIndex : 0;\n\n    for (var i = 0, len = data.length; i < len; i++) {\n      this.getGroupedRecords(0, data[i], data.level, i, undefined, this.rows.length);\n    }\n\n    this.index = 0;\n\n    if (this.parent.isCollapseStateEnabled()) {\n      this.ensureRowVisibility();\n    }\n\n    return this.rows;\n  };\n\n  GroupModelGenerator.prototype.getGroupedRecords = function (index, data, raw, parentid, childId, tIndex, parentUid) {\n    var _a;\n\n    var isRenderCaption = this.isInfiniteScroll && this.prevKey === data.key;\n    var level = raw;\n\n    if (isNullOrUndefined(data.items)) {\n      if (isNullOrUndefined(data.GroupGuid)) {\n        this.rows = this.rows.concat(this.generateDataRows(data, index, parentid, this.rows.length, parentUid));\n      } else {\n        for (var j = 0, len = data.length; j < len; j++) {\n          this.getGroupedRecords(index, data[j], data.level, parentid, index, this.rows.length, parentUid);\n        }\n      }\n    } else {\n      var captionRow = this.generateCaptionRow(data, index, parentid, childId, tIndex, parentUid);\n\n      if (!isRenderCaption) {\n        this.rows = this.rows.concat(captionRow);\n      }\n\n      if (data.items && data.items.length) {\n        this.getGroupedRecords(index + 1, data.items, data.items.level, parentid, index + 1, this.rows.length, captionRow.uid);\n      }\n\n      if (this.parent.aggregates.length) {\n        var rowCnt = this.rows.length;\n\n        (_a = this.rows).push.apply(_a, this.summaryModelGen.generateRows(data, {\n          level: level,\n          parentUid: captionRow.uid\n        }));\n\n        for (var i = rowCnt - 1; i >= 0; i--) {\n          if (this.rows[i].isCaptionRow) {\n            this.rows[i].aggregatesCount = this.rows.length - rowCnt;\n          } else if (!this.rows[i].isCaptionRow && !this.rows[i].isDataRow) {\n            break;\n          }\n        }\n      }\n    }\n\n    this.prevKey = data.key;\n  };\n\n  GroupModelGenerator.prototype.getCaptionRowCells = function (field, indent, data) {\n    var cells = [];\n    var visibles = [];\n    var column = this.parent.getColumnByField(field);\n    var indexes = this.parent.getColumnIndexesInView();\n\n    if (this.parent.enableColumnVirtualization) {\n      column = this.parent.columns.filter(function (c) {\n        return c.field === field;\n      })[0];\n    }\n\n    var groupedLen = this.parent.groupSettings.columns.length;\n    var gObj = this.parent;\n\n    if (!this.parent.enableColumnVirtualization || indexes.indexOf(indent) !== -1) {\n      for (var i = 0; i < indent; i++) {\n        cells.push(this.generateIndentCell());\n      }\n\n      cells.push(this.generateCell({}, null, CellType.Expand));\n    }\n\n    indent = this.parent.enableColumnVirtualization ? 1 : this.parent.getVisibleColumns().length + groupedLen + (gObj.detailTemplate || gObj.childGrid ? 1 : 0) - indent + (this.parent.getVisibleColumns().length ? -1 : 0); //Captionsummary cells will be added here.    \n\n    if (this.parent.aggregates.length && !this.captionModelGen.isEmpty()) {\n      var captionCells = this.captionModelGen.generateRows(data)[0];\n      extend(data, captionCells.data);\n      var cIndex_1 = 0;\n      captionCells.cells.some(function (cell, index) {\n        cIndex_1 = index;\n        return cell.visible && cell.isDataCell;\n      });\n      visibles = captionCells.cells.slice(cIndex_1).filter(function (cell) {\n        return cell.visible;\n      });\n\n      if (captionCells.visible && visibles[0].column.field === this.parent.getVisibleColumns()[0].field) {\n        visibles = visibles.slice(1);\n      }\n\n      if (this.parent.getVisibleColumns().length === 1) {\n        visibles = [];\n      }\n\n      indent = indent - visibles.length;\n    }\n\n    var cols = !this.parent.enableColumnVirtualization ? [column] : this.parent.getColumns();\n    var wFlag = true;\n\n    for (var j = 0; j < cols.length; j++) {\n      var tmpFlag = wFlag && indexes.indexOf(indent) !== -1;\n\n      if (tmpFlag) {\n        wFlag = false;\n      }\n\n      var cellType = !this.parent.enableColumnVirtualization || tmpFlag ? CellType.GroupCaption : CellType.GroupCaptionEmpty;\n      indent = this.parent.enableColumnVirtualization && cellType === CellType.GroupCaption ? indent + groupedLen : indent;\n\n      if (gObj.isRowDragable()) {\n        indent++;\n      }\n\n      cells.push(this.generateCell(column, null, cellType, indent));\n    }\n\n    cells.push.apply(cells, visibles);\n    return cells;\n  };\n  /** @hidden */\n\n\n  GroupModelGenerator.prototype.generateCaptionRow = function (data, indent, parentID, childID, tIndex, parentUid) {\n    var options = {};\n    var tmp = [];\n    var records = 'records';\n    var col = this.parent.getColumnByField(data.field);\n    options.data = extend({}, data);\n\n    if (col) {\n      options.data.field = data.field;\n    }\n\n    options.isDataRow = false;\n    options.isExpand = !this.parent.groupSettings.enableLazyLoading && !this.parent.isCollapseStateEnabled();\n    options.parentGid = parentID;\n    options.childGid = childID;\n    options.tIndex = tIndex;\n    options.isCaptionRow = true;\n    options.parentUid = parentUid;\n    options.gSummary = !isNullOrUndefined(data.items[records]) ? data.items[records].length : data.items.length;\n    options.uid = getUid('grid-row');\n    var row = new Row(options);\n    row.indent = indent;\n    this.getForeignKeyData(row);\n    row.cells = this.getCaptionRowCells(data.field, indent, row.data);\n    return row;\n  };\n\n  GroupModelGenerator.prototype.getForeignKeyData = function (row) {\n    var data = row.data;\n    var col = this.parent.getColumnByField(data.field);\n\n    if (col && col.isForeignColumn && col.isForeignColumn()) {\n      var fkValue = isNullOrUndefined(data.key) ? '' : col.valueAccessor(col.foreignKeyValue, getForeignData(col, {}, data.key)[0], col);\n      setValue('foreignKey', fkValue, row.data);\n    }\n  };\n  /** @hidden */\n\n\n  GroupModelGenerator.prototype.generateDataRows = function (data, indent, childID, tIndex, parentUid) {\n    var rows = [];\n    var indexes = this.parent.getColumnIndexesInView();\n\n    for (var i = 0, len = data.length; i < len; i++, tIndex++) {\n      rows[i] = this.generateRow(data[i], this.index, i ? undefined : 'e-firstchildrow', indent, childID, tIndex, parentUid);\n\n      for (var j = 0; j < indent; j++) {\n        if (this.parent.enableColumnVirtualization && indexes.indexOf(indent) === -1) {\n          continue;\n        }\n\n        rows[i].cells.unshift(this.generateIndentCell());\n      }\n\n      this.index++;\n    }\n\n    return rows;\n  };\n\n  GroupModelGenerator.prototype.generateIndentCell = function () {\n    return this.generateCell({}, null, CellType.Indent);\n  };\n\n  GroupModelGenerator.prototype.refreshRows = function (input) {\n    var indexes = this.parent.getColumnIndexesInView();\n\n    for (var i = 0; i < input.length; i++) {\n      if (input[i].isDataRow) {\n        input[i].cells = this.generateCells(input[i]);\n\n        for (var j = 0; j < input[i].indent; j++) {\n          if (this.parent.enableColumnVirtualization && indexes.indexOf(input[i].indent) === -1) {\n            continue;\n          }\n\n          input[i].cells.unshift(this.generateIndentCell());\n        }\n      } else {\n        var cRow = this.generateCaptionRow(input[i].data, input[i].indent);\n        input[i].cells = cRow.cells;\n      }\n    }\n\n    return input;\n  };\n\n  GroupModelGenerator.prototype.ensureRowVisibility = function () {\n    for (var i = 0; i < this.rows.length; i++) {\n      var row = this.rows[i];\n\n      if (!row.isCaptionRow) {\n        continue;\n      }\n\n      for (var j = i + 1; j < this.rows.length; j++) {\n        var childRow = this.rows[j];\n\n        if (row.uid === childRow.parentUid) {\n          this.rows[j].visible = row.isExpand;\n        }\n      }\n    }\n  };\n\n  return GroupModelGenerator;\n}(RowModelGenerator);\n\nexport { GroupModelGenerator };","import { Droppable } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, remove, updateBlazorTemplate } from '@syncfusion/ej2-base';\nimport { getUpdateUsingRaf, appendChildren, setDisplayValue } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from './row-renderer';\nimport { CellMergeRender } from './cell-merge-renderer';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupModelGenerator } from '../services/group-model-generator';\nimport { isGroupAdaptive } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * Content module is used to render grid content\n * @hidden\n */\n\nvar ContentRender =\n/** @class */\nfunction () {\n  /**\n   * Constructor for content renderer module\n   */\n  function ContentRender(parent, serviceLocator) {\n    var _this = this;\n\n    this.rows = [];\n    this.freezeRows = [];\n    this.movableRows = [];\n    this.freezeRowElements = [];\n    /** @hidden */\n\n    this.currentInfo = {};\n    /** @hidden */\n\n    this.prevCurrentView = [];\n    this.isLoaded = true;\n    this.viewColIndexes = [];\n\n    this.drop = function (e) {\n      _this.parent.notify(events.columnDrop, {\n        target: e.target,\n        droppedElement: e.droppedElement\n      });\n\n      remove(e.droppedElement);\n    };\n\n    this.infiniteCache = {};\n    this.isRemove = false;\n    this.visibleRows = [];\n    this.visibleFrozenRows = [];\n    this.rightFreezeRows = [];\n    this.isAddRows = false;\n    this.isInfiniteFreeze = false;\n    this.useGroupCache = false;\n    this.mutableData = false;\n\n    this.rafCallback = function (args) {\n      var arg = args;\n      return function () {\n        if (_this.parent.isFrozenGrid() && _this.parent.enableVirtualization) {\n          var mContentRows = [].slice.call(_this.parent.getMovableVirtualContent().getElementsByClassName(literals.row));\n          var fContentRows = [].slice.call(_this.parent.getFrozenVirtualContent().getElementsByClassName(literals.row));\n          _this.isLoaded = !mContentRows ? false : mContentRows.length === fContentRows.length;\n\n          if (_this.parent.enableColumnVirtualization && args.requestType === 'virtualscroll' && _this.isLoaded) {\n            var mHdr = [].slice.call(_this.parent.getMovableVirtualHeader().getElementsByClassName(literals.row));\n            var fHdr = [].slice.call(_this.parent.getFrozenVirtualHeader().getElementsByClassName(literals.row));\n            _this.isLoaded = mHdr.length === fHdr.length;\n          }\n        }\n\n        _this.ariaService.setBusy(_this.getPanel().querySelector('.' + literals.content), false);\n\n        if (_this.parent.isDestroyed) {\n          return;\n        }\n\n        var rows = _this.rows.slice(0);\n\n        if (_this.parent.isFrozenGrid()) {\n          rows = args.isFrozen ? _this.freezeRows : args.renderFrozenRightContent ? _this.parent.getFrozenRightRowsObject() : _this.movableRows;\n        }\n\n        _this.parent.notify(events.contentReady, {\n          rows: rows,\n          args: arg\n        });\n\n        if (_this.isLoaded) {\n          _this.parent.trigger(events.dataBound, {}, function () {\n            if (_this.parent.allowTextWrap) {\n              _this.parent.notify(events.freezeRender, {\n                case: 'textwrap'\n              });\n            }\n          });\n        }\n\n        if (arg) {\n          var action = (arg.requestType || '').toLowerCase() + '-complete';\n\n          _this.parent.notify(action, arg);\n\n          if (args.requestType === 'batchsave') {\n            args.cancel = false;\n\n            _this.parent.trigger(events.actionComplete, args);\n          }\n        }\n\n        if (_this.isLoaded) {\n          _this.parent.hideSpinner();\n        }\n      };\n    };\n\n    this.parent = parent;\n    this.serviceLocator = serviceLocator;\n    this.ariaService = this.serviceLocator.getService('ariaService');\n    this.mutableData = this.parent.getDataModule().isRemote();\n    this.generator = this.getModelGenerator();\n\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    if (!this.parent.enableColumnVirtualization && !this.parent.enableVirtualization && !this.parent.groupSettings.enableLazyLoading) {\n      this.parent.on(events.columnVisibilityChanged, this.setVisible, this);\n    }\n\n    this.parent.on(events.colGroupRefresh, this.colGroupRefresh, this);\n    this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n    this.parent.on(events.refreshInfiniteModeBlocks, this.refreshContentRows, this);\n    this.parent.on(events.beforeCellFocused, this.beforeCellFocused, this);\n    this.parent.on(events.destroy, this.droppableDestroy, this);\n  }\n\n  ContentRender.prototype.beforeCellFocused = function (e) {\n    if (e.byKey && (e.keyArgs.action === 'upArrow' || e.keyArgs.action === 'downArrow')) {\n      this.pressedKey = e.keyArgs.action;\n    } else {\n      this.pressedKey = undefined;\n    }\n  };\n  /**\n   * The function is used to render grid content div\n   */\n\n\n  ContentRender.prototype.renderPanel = function () {\n    var gObj = this.parent;\n    var div = this.parent.element.querySelector('.' + literals.gridContent);\n\n    if (div) {\n      this.ariaService.setOptions(this.parent.element.querySelector('.' + literals.content), {\n        busy: false\n      });\n      this.setPanel(div);\n      return;\n    }\n\n    div = this.parent.createElement('div', {\n      className: literals.gridContent\n    });\n    var innerDiv = this.parent.createElement('div', {\n      className: literals.content\n    });\n    this.ariaService.setOptions(innerDiv, {\n      busy: false\n    });\n    div.appendChild(innerDiv);\n    this.setPanel(div);\n    gObj.element.appendChild(div);\n  };\n  /**\n   * The function is used to render grid content table\n   */\n\n\n  ContentRender.prototype.renderTable = function () {\n    var contentDiv = this.getPanel();\n    var virtualTable = contentDiv.querySelector('.e-virtualtable');\n    var virtualTrack = contentDiv.querySelector('.e-virtualtrack');\n\n    if (this.parent.enableVirtualization && !isNullOrUndefined(virtualTable) && !isNullOrUndefined(virtualTrack)) {\n      remove(virtualTable);\n      remove(virtualTrack);\n    }\n\n    contentDiv.appendChild(this.createContentTable('_content_table'));\n    this.setTable(contentDiv.querySelector('.' + literals.table));\n    this.ariaService.setOptions(this.getTable(), {\n      multiselectable: this.parent.selectionSettings.type === 'Multiple'\n    });\n    this.initializeContentDrop();\n\n    if (this.parent.frozenRows) {\n      this.parent.getHeaderContent().classList.add('e-frozenhdrcont');\n    }\n  };\n  /**\n   * The function is used to create content table elements\n   * @return {Element}\n   * @hidden\n   */\n\n\n  ContentRender.prototype.createContentTable = function (id) {\n    var innerDiv = this.getPanel().firstElementChild;\n\n    if (this.getTable()) {\n      remove(this.getTable());\n    }\n\n    var table = innerDiv.querySelector('.' + literals.table) ? innerDiv.querySelector('.' + literals.table) : this.parent.createElement('table', {\n      className: literals.table,\n      attrs: {\n        cellspacing: '0.25px',\n        role: 'grid',\n        id: this.parent.element.id + id\n      }\n    });\n    this.setColGroup(this.parent.getHeaderTable().querySelector(literals.colGroup).cloneNode(true));\n    table.appendChild(this.getColGroup());\n    table.appendChild(this.parent.createElement(literals.tbody));\n    innerDiv.appendChild(table);\n    return innerDiv;\n  };\n  /**\n   * Refresh the content of the Grid.\n   * @return {void}\n   */\n  // tslint:disable-next-line:max-func-body-length\n\n\n  ContentRender.prototype.refreshContentRows = function (args) {\n    var _this = this;\n\n    if (args === void 0) {\n      args = {};\n    }\n\n    var gObj = this.parent;\n\n    if (gObj.currentViewData.length === 0) {\n      return;\n    }\n\n    var dataSource = this.currentMovableRows || gObj.currentViewData;\n    var contentModule = this.parent.contentModule;\n    var isReact = gObj.isReact && !isNullOrUndefined(gObj.rowTemplate);\n    var frag = isReact ? gObj.createElement(literals.tbody) : document.createDocumentFragment();\n\n    if (!this.initialPageRecords) {\n      this.initialPageRecords = extend([], dataSource);\n    }\n\n    var hdrfrag = isReact ? gObj.createElement(literals.tbody) : document.createDocumentFragment();\n    var columns = gObj.getColumns();\n    var tr;\n    var hdrTbody;\n    var frzCols = gObj.getFrozenColumns();\n    var isFrozenGrid = this.parent.isFrozenGrid();\n    var trElement;\n    var row = new RowRenderer(this.serviceLocator, null, this.parent);\n    var isInfiniteScroll = this.parent.enableInfiniteScrolling && args.requestType === 'infiniteScroll';\n    this.rowElements = [];\n    this.rows = [];\n    var fCont = this.getPanel().querySelector('.' + literals.frozenContent);\n    var mCont = this.getPanel().querySelector('.' + literals.movableContent);\n    var cont = this.getPanel().querySelector('.' + literals.content);\n    var tbdy;\n    var tableName;\n\n    if (isGroupAdaptive(gObj)) {\n      if (['sorting', 'filtering', 'searching', 'grouping', 'ungrouping', 'reorder'].some(function (value) {\n        return args.requestType === value;\n      })) {\n        this.emptyVcRows();\n      }\n    }\n\n    var modelData;\n\n    if (this.parent.enableVirtualization && this.parent.isFrozenGrid()) {\n      if (this.parent.enableColumnVirtualization && args.requestType === 'virtualscroll' && args.virtualInfo.sentinelInfo.axis === 'X') {\n        modelData = this.parent.contentModule.generateRows(dataSource, args);\n        args.renderMovableContent = true;\n      }\n\n      modelData = this.parent.contentModule.generateRows(dataSource, args);\n    } else {\n      modelData = this.checkCache(modelData, args);\n\n      if (!this.isAddRows && !this.useGroupCache) {\n        modelData = this.generator.generateRows(dataSource, args);\n      }\n    }\n\n    this.setGroupCache(modelData, args);\n    this.parent.notify(events.setInfiniteCache, {\n      isInfiniteScroll: isInfiniteScroll,\n      modelData: modelData,\n      args: args\n    });\n    var idx = modelData[0].cells[0].index;\n\n    if (isFrozenGrid) {\n      tableName = contentModule.setTbody(modelData, args);\n      tbdy = contentModule.getTbody(tableName);\n    }\n\n    var isFrozenLeft = this.parent.getFrozenMode() === literals.leftRight && tableName === literals.frozenRight;\n    /* tslint:disable:no-any */\n\n    if (args.requestType !== 'infiniteScroll' && this.parent.registeredTemplate && this.parent.registeredTemplate.template && !args.isFrozen && !isFrozenLeft) {\n      var templatetoclear = [];\n\n      for (var i = 0; i < this.parent.registeredTemplate.template.length; i++) {\n        for (var j = 0; j < this.parent.registeredTemplate.template[i].rootNodes.length; j++) {\n          if (isNullOrUndefined(this.parent.registeredTemplate.template[i].rootNodes[j].parentNode)) {\n            templatetoclear.push(this.parent.registeredTemplate.template[i]);\n            /* tslint:enable:no-any */\n          }\n        }\n      }\n\n      this.parent.destroyTemplate(['template'], templatetoclear);\n    }\n\n    if (this.parent.isReact && args.requestType !== 'infiniteScroll' && !args.isFrozen) {\n      this.parent.destroyTemplate(['columnTemplate', 'rowTemplate', 'detailTemplate', 'captionTemplate', 'commandsTemplate']);\n      this.parent.renderTemplates();\n    }\n\n    if (this.parent.enableColumnVirtualization) {\n      var cellMerge = new CellMergeRender(this.serviceLocator, this.parent);\n      cellMerge.updateVirtualCells(modelData);\n    }\n\n    if (!isFrozenGrid) {\n      this.tbody = this.getTable().querySelector(literals.tbody);\n    }\n\n    var startIndex = 0;\n    var blockLoad = true;\n\n    if (isGroupAdaptive(gObj) && gObj.vcRows.length) {\n      var top_1 = 'top';\n      var scrollTop = !isNullOrUndefined(args.virtualInfo.offsets) ? args.virtualInfo.offsets.top : !isNullOrUndefined(args.scrollTop) ? args.scrollTop[top_1] : 0;\n\n      if (scrollTop !== 0) {\n        var offsets_1 = gObj.vGroupOffsets;\n        var bSize = gObj.pageSettings.pageSize / 2;\n        var values = Object.keys(offsets_1).map(function (key) {\n          return offsets_1[key];\n        });\n\n        for (var m = 0; m < values.length; m++) {\n          if (scrollTop < values[m]) {\n            if (!isNullOrUndefined(args.virtualInfo) && args.virtualInfo.direction === 'up') {\n              args.virtualInfo.blockIndexes = m === 0 || m === 1 ? [1, 2] : [m, m + 1];\n              startIndex = m === 0 || m === 1 ? 0 : m * bSize;\n              break;\n            } else {\n              args.virtualInfo.blockIndexes = m === 0 || m === 1 ? [1, 2] : [m, m + 1];\n              startIndex = m === 0 || m === 1 ? 0 : m * bSize;\n              break;\n            }\n          }\n        }\n\n        if (Math.round(scrollTop + this.contentPanel.firstElementChild.offsetHeight) >= this.contentPanel.firstElementChild.scrollHeight && !args.rowObject) {\n          blockLoad = false;\n        }\n      }\n    }\n\n    var isVFFrozenOnly = gObj.frozenRows && !gObj.isFrozenGrid() && this.parent.enableVirtualization && args.requestType === 'reorder';\n\n    if (gObj.frozenRows && args.requestType === 'virtualscroll' && args.virtualInfo.sentinelInfo.axis === 'X' || isVFFrozenOnly) {\n      var bIndex = args.virtualInfo.blockIndexes;\n      var page = args.virtualInfo.page;\n      args.virtualInfo.blockIndexes = [1, 2];\n\n      if (isVFFrozenOnly) {\n        args.virtualInfo.page = 1;\n      }\n\n      var data = isVFFrozenOnly ? this.initialPageRecords : dataSource;\n      var mhdrData = this.vgenerator.generateRows(data, args);\n      mhdrData.splice(this.parent.frozenRows);\n\n      for (var i = 0; i < this.parent.frozenRows; i++) {\n        mhdrData[i].cells.splice(0, this.parent.getFrozenColumns());\n        tr = row.render(mhdrData[i], columns);\n        hdrfrag.appendChild(tr);\n      }\n\n      args.virtualInfo.blockIndexes = bIndex;\n      args.virtualInfo.page = page;\n\n      if (isVFFrozenOnly && args.virtualInfo.page === 1) {\n        modelData.splice(0, this.parent.frozenRows);\n      }\n    }\n\n    this.virtualFrozenHdrRefresh(hdrfrag, modelData, row, args, dataSource, columns);\n\n    for (var i = startIndex, len = modelData.length; i < len; i++) {\n      this.rows.push(modelData[i]);\n\n      if (this.parent.groupSettings.enableLazyLoading && !this.useGroupCache && this.parent.groupSettings.columns.length) {\n        this.setRowsInLazyGroup(modelData[i], i);\n\n        if (isNullOrUndefined(modelData[i].indent)) {\n          continue;\n        }\n      }\n\n      this.setInfiniteVisibleRows(args, modelData[i], tableName);\n\n      if (isGroupAdaptive(gObj) && this.rows.length >= gObj.pageSettings.pageSize && blockLoad) {\n        break;\n      }\n\n      if (!gObj.rowTemplate) {\n        tr = row.render(modelData[i], columns);\n        var isVFreorder = this.ensureFrozenHeaderRender(args);\n\n        if (gObj.frozenRows && i < gObj.frozenRows && !isInfiniteScroll && args.requestType !== 'virtualscroll' && isVFreorder && this.ensureVirtualFrozenHeaderRender(args)) {\n          hdrfrag.appendChild(tr);\n        } else {\n          frag.appendChild(tr);\n        }\n\n        if (modelData[i].isExpand) {\n          gObj.notify(events.expandChildGrid, tr.cells[gObj.groupSettings.columns.length]);\n        }\n      } else {\n        var rowTemplateID = gObj.element.id + 'rowTemplate';\n        var elements = void 0;\n\n        if (gObj.isReact) {\n          var isHeader = gObj.frozenRows && i < gObj.frozenRows;\n          var copied = extend({\n            index: i\n          }, dataSource[i]);\n          gObj.getRowTemplate()(copied, gObj, 'rowTemplate', rowTemplateID, null, null, isHeader ? hdrfrag : frag);\n          gObj.renderTemplates();\n        } else {\n          elements = gObj.getRowTemplate()(extend({\n            index: i\n          }, dataSource[i]), gObj, 'rowTemplate', rowTemplateID);\n        }\n\n        if (!gObj.isReact && elements[0].tagName === 'TBODY') {\n          for (var j = 0; j < elements.length; j++) {\n            var isTR = elements[j].nodeName.toLowerCase() === 'tr';\n\n            if (isTR || elements[j].querySelectorAll && elements[j].querySelectorAll('tr').length) {\n              tr = isTR ? elements[j] : elements[j].querySelector('tr');\n            }\n          }\n\n          if (gObj.frozenRows && i < gObj.frozenRows) {\n            hdrfrag.appendChild(tr);\n          } else {\n            frag.appendChild(tr);\n          }\n        } else {\n          if (gObj.frozenRows && i < gObj.frozenRows) {\n            tr = !gObj.isReact ? appendChildren(hdrfrag, elements) : hdrfrag.lastElementChild;\n          } else {\n            // frag.appendChild(tr);\n            if (!gObj.isReact) {\n              tr = appendChildren(frag, elements);\n            }\n\n            trElement = gObj.isReact ? frag.lastElementChild : tr.lastElementChild;\n          }\n        }\n\n        var arg = {\n          data: modelData[i].data,\n          row: trElement ? trElement : tr\n        };\n        this.parent.trigger(events.rowDataBound, arg);\n      }\n\n      if (modelData[i].isDataRow) {\n        this.rowElements.push(tr);\n      }\n\n      this.ariaService.setOptions(this.getTable(), {\n        colcount: gObj.getColumns().length.toString()\n      });\n    }\n\n    if (isFrozenGrid) {\n      contentModule.splitRows(tableName);\n    }\n\n    if (gObj.frozenRows && args.requestType !== 'virtualscroll' && !isInfiniteScroll && this.ensureVirtualFrozenHeaderRender(args) || args.requestType === 'virtualscroll' && args.virtualInfo.sentinelInfo && args.virtualInfo.sentinelInfo.axis === 'X') {\n      hdrTbody = isFrozenGrid ? contentModule.getFrozenHeader(tableName) : gObj.getHeaderTable().querySelector(literals.tbody);\n\n      if (isReact) {\n        var parentTable = hdrTbody.parentElement;\n        remove(hdrTbody);\n        parentTable.appendChild(hdrfrag);\n      } else {\n        hdrTbody.innerHTML = '';\n        hdrTbody.appendChild(hdrfrag);\n      }\n    }\n\n    if (!gObj.enableVirtualization && gObj.frozenRows && idx === 0 && cont.offsetHeight === Number(gObj.height)) {\n      cont.style.height = cont.offsetHeight - hdrTbody.offsetHeight + 'px';\n    }\n\n    args.rows = this.rows.slice(0);\n\n    if (isFrozenGrid) {\n      contentModule.setIsFrozen(args, tableName);\n    }\n\n    this.index = idx;\n    getUpdateUsingRaf(function () {\n      _this.parent.notify(events.beforeFragAppend, args);\n\n      var isVFTable = _this.parent.enableVirtualization && _this.parent.isFrozenGrid();\n\n      if (!_this.parent.enableVirtualization && !isInfiniteScroll) {\n        if (_this.parent.isFrozenGrid()) {\n          remove(tbdy);\n          tbdy = _this.parent.createElement(literals.tbody);\n        } else {\n          remove(_this.tbody);\n          _this.tbody = _this.parent.createElement(literals.tbody);\n        }\n      }\n\n      if (isFrozenGrid && !isVFTable && !_this.parent.enableInfiniteScrolling) {\n        _this.appendContent(tbdy, frag, args, tableName);\n      } else {\n        if (gObj.rowTemplate) {\n          updateBlazorTemplate(gObj.element.id + 'rowTemplate', 'RowTemplate', gObj);\n        }\n\n        if (isVFTable) {\n          if (args.renderFrozenRightContent) {\n            var frCont = gObj.getContent().querySelector('.e-frozen-right-content').querySelector(literals.tbody);\n\n            _this.appendContent(frCont, frag, args);\n          } else if (!args.renderMovableContent) {\n            _this.appendContent(fCont.querySelector(literals.tbody), frag, args);\n          } else {\n            _this.appendContent(mCont.querySelector(literals.tbody), frag, args);\n\n            args.renderMovableContent = false;\n          }\n\n          if (!_this.parent.getFrozenColumns()) {\n            contentModule.renderNextFrozentPart(args, tableName);\n          }\n        } else {\n          if (!isNullOrUndefined(_this.parent.infiniteScrollModule) && _this.parent.enableInfiniteScrolling) {\n            _this.isAddRows = false;\n\n            _this.parent.notify(events.removeInfiniteRows, {\n              args: args\n            });\n\n            _this.parent.notify(events.appendInfiniteContent, {\n              tbody: tbdy ? tbdy : _this.tbody,\n              frag: frag,\n              args: args,\n              rows: _this.rows,\n              rowElements: _this.rowElements,\n              visibleRows: _this.visibleRows,\n              tableName: tableName\n            });\n\n            if (!frzCols && isFrozenGrid) {\n              if (gObj.getFrozenMode() !== literals.leftRight && (tableName === literals.frozenLeft || tableName === literals.frozenRight) || gObj.getFrozenMode() === literals.leftRight && (tableName === literals.frozenLeft || tableName === 'movable')) {\n                _this.refreshContentRows(extend({}, args));\n              }\n            }\n          } else {\n            _this.useGroupCache = false;\n\n            _this.appendContent(_this.tbody, frag, args);\n          }\n        }\n      }\n\n      if (frzCols) {\n        contentModule.renderNextFrozentPart(args, tableName);\n      }\n\n      frag = null;\n    }, this.rafCallback(extend({}, args)));\n  };\n\n  ContentRender.prototype.emptyVcRows = function () {\n    this.parent.vcRows = [];\n    this.parent.vRows = [];\n  };\n\n  ContentRender.prototype.appendContent = function (tbody, frag, args, tableName) {\n    var isReact = this.parent.isReact && !isNullOrUndefined(this.parent.rowTemplate);\n\n    if (isReact) {\n      this.getTable().appendChild(frag);\n    } else {\n      tbody.appendChild(frag);\n      this.getTable().appendChild(tbody);\n    }\n  };\n\n  ContentRender.prototype.setRowsInLazyGroup = function (row, index) {\n    if (this.parent.groupSettings.enableLazyLoading && !this.useGroupCache && this.parent.groupSettings.columns.length) {\n      this.parent.contentModule.maintainRows(row, index);\n    }\n  };\n\n  ContentRender.prototype.setGroupCache = function (data, args) {\n    if (!this.useGroupCache && this.parent.groupSettings.enableLazyLoading) {\n      this.parent.notify(events.setGroupCache, {\n        args: args,\n        data: data\n      });\n    }\n  };\n\n  ContentRender.prototype.ensureFrozenHeaderRender = function (args) {\n    return !(this.parent.enableVirtualization && (args.requestType === 'reorder' || args.requestType === 'refresh') || this.parent.infiniteScrollSettings.enableCache && this.parent.frozenRows && this.parent.infiniteScrollModule.requestType === 'delete' && this.parent.pageSettings.currentPage !== 1);\n  };\n\n  ContentRender.prototype.ensureVirtualFrozenHeaderRender = function (args) {\n    return !(this.parent.enableVirtualization && args.requestType === 'delete');\n  };\n\n  ContentRender.prototype.checkCache = function (modelData, args) {\n    if (this.parent.infiniteScrollSettings.enableCache && args.requestType === 'infiniteScroll') {\n      var index = args.isFrozen ? 1 : 0;\n      var frozenCols = this.parent.isFrozenGrid();\n      this.isAddRows = !isNullOrUndefined(this.infiniteCache[this.parent.pageSettings.currentPage]);\n\n      if (frozenCols && !isNullOrUndefined(this.infiniteCache[this.parent.pageSettings.currentPage])) {\n        this.isAddRows = this.infiniteCache[this.parent.pageSettings.currentPage][index].length !== 0;\n      }\n\n      if (this.isAddRows) {\n        var data = !frozenCols ? this.infiniteCache[this.parent.pageSettings.currentPage] : this.infiniteCache[this.parent.pageSettings.currentPage][index];\n        modelData = this.parent.pageSettings.currentPage === 1 ? data.slice(this.parent.frozenRows) : data;\n      }\n\n      return modelData;\n    }\n\n    if (this.parent.groupSettings.enableLazyLoading && this.parent.groupSettings.columns.length && (args.requestType === 'paging' || args.requestType === 'columnstate' || args.requestType === 'reorder') && this.parent.contentModule.getGroupCache()[this.parent.pageSettings.currentPage]) {\n      this.useGroupCache = true;\n      return this.parent.contentModule.initialGroupRows(args.requestType === 'reorder');\n    }\n\n    return null;\n  };\n\n  ContentRender.prototype.setInfiniteVisibleRows = function (args, data, tableName) {\n    var frozenCols = this.parent.isFrozenGrid();\n\n    if (this.parent.enableInfiniteScrolling && !this.parent.infiniteScrollSettings.enableCache) {\n      if (frozenCols) {\n        if (tableName === literals.frozenLeft || this.parent.getFrozenMode() === 'Right' && tableName === literals.frozenRight) {\n          this.visibleFrozenRows.push(data);\n        } else if (tableName === 'movable') {\n          this.visibleRows.push(data);\n        } else {\n          this.rightFreezeRows.push(data);\n        }\n      } else if (!this.parent.infiniteScrollSettings.enableCache) {\n        this.visibleRows.push(data);\n      }\n    }\n  };\n\n  ContentRender.prototype.getCurrentBlockInfiniteRecords = function (isFreeze) {\n    var data = [];\n\n    if (this.parent.infiniteScrollSettings.enableCache) {\n      if (!Object.keys(this.infiniteCache).length) {\n        return [];\n      }\n\n      var frozenCols = this.parent.isFrozenGrid();\n      var rows = this.parent.getRows();\n      var index = parseInt(rows[this.parent.frozenRows].getAttribute(literals.ariaRowIndex), 10);\n      var first = Math.ceil((index + 1) / this.parent.pageSettings.pageSize);\n      index = parseInt(rows[rows.length - 1].getAttribute(literals.ariaRowIndex), 10);\n      var last = Math.ceil(index / this.parent.pageSettings.pageSize);\n\n      if (frozenCols) {\n        var idx = isFreeze ? 0 : 1;\n\n        for (var i = first; i <= last; i++) {\n          data = !data.length ? this.infiniteCache[i][idx] : data.concat(this.infiniteCache[i][idx]);\n        }\n\n        if (this.parent.frozenRows && this.parent.pageSettings.currentPage > 1) {\n          data = this.infiniteCache[1][idx].slice(0, this.parent.frozenRows).concat(data);\n        }\n      } else {\n        for (var i = first; i <= last; i++) {\n          data = !data.length ? this.infiniteCache[i] : data.concat(this.infiniteCache[i]);\n        }\n\n        if (this.parent.frozenRows && this.parent.pageSettings.currentPage > 1) {\n          data = this.infiniteCache[1].slice(0, this.parent.frozenRows).concat(data);\n        }\n      }\n    }\n\n    return data;\n  };\n\n  ContentRender.prototype.getReorderedVFRows = function (args) {\n    return this.parent.contentModule.getReorderedFrozenRows(args);\n  };\n\n  ContentRender.prototype.getReorderedRows = function (args) {\n    return this.parent.contentModule.getReorderedFrozenRows(args);\n  };\n\n  ContentRender.prototype.virtualFrozenHdrRefresh = function (hdrfrag, modelData, row, args, dataSource, columns) {\n    if (this.parent.frozenRows && this.parent.enableVirtualization && (args.requestType === 'reorder' || args.requestType === 'refresh')) {\n      var tr = void 0;\n      var fhdrData = [];\n\n      if (this.parent.isFrozenGrid()) {\n        this.currentMovableRows = dataSource;\n        fhdrData = this.getReorderedVFRows(args);\n      } else {\n        fhdrData = this.getReorderedRows(args);\n      }\n\n      for (var i = 0; i < fhdrData.length; i++) {\n        tr = row.render(fhdrData[i], columns);\n        hdrfrag.appendChild(tr);\n      }\n\n      if (args.virtualInfo.page === 1) {\n        modelData.splice(0, this.parent.frozenRows);\n      }\n\n      if (args.renderMovableContent) {\n        this.parent.currentViewData = this.currentMovableRows;\n        this.currentMovableRows = null;\n      }\n    }\n  };\n\n  ContentRender.prototype.getInfiniteRows = function () {\n    var rows = [];\n    var frozenCols = this.parent.isFrozenGrid();\n\n    if (this.parent.enableInfiniteScrolling) {\n      if (this.parent.infiniteScrollSettings.enableCache) {\n        var keys = Object.keys(this.infiniteCache);\n\n        for (var i = 0; i < keys.length; i++) {\n          rows = !frozenCols ? rows.concat(this.infiniteCache[keys[i]]) : rows.concat(this.infiniteCache[keys[i]][0]);\n        }\n      } else {\n        rows = frozenCols ? this.visibleFrozenRows : this.visibleRows;\n      }\n    }\n\n    return rows;\n  };\n\n  ContentRender.prototype.getInfiniteMovableRows = function () {\n    var infiniteCacheRows = this.getCurrentBlockInfiniteRecords();\n    var infiniteRows = this.parent.enableInfiniteScrolling ? infiniteCacheRows.length ? infiniteCacheRows : this.visibleRows : [];\n    return infiniteRows;\n  };\n  /**\n   * Get the content div element of grid\n   * @return {Element}\n   */\n\n\n  ContentRender.prototype.getPanel = function () {\n    return this.contentPanel;\n  };\n  /**\n   * Set the content div element of grid\n   * @param  {Element} panel\n   */\n\n\n  ContentRender.prototype.setPanel = function (panel) {\n    this.contentPanel = panel;\n  };\n  /**\n   * Get the content table element of grid\n   * @return {Element}\n   */\n\n\n  ContentRender.prototype.getTable = function () {\n    return this.contentTable;\n  };\n  /**\n   * Set the content table element of grid\n   * @param  {Element} table\n   */\n\n\n  ContentRender.prototype.setTable = function (table) {\n    this.contentTable = table;\n  };\n  /**\n   * Get the Row collection in the Grid.\n   * @returns {Row[] | HTMLCollectionOf<HTMLTableRowElement>}\n   */\n\n\n  ContentRender.prototype.getRows = function () {\n    var infiniteRows = this.getInfiniteRows();\n    return infiniteRows.length ? infiniteRows : this.parent.getFrozenColumns() ? this.freezeRows : this.rows;\n  };\n  /**\n   * Get the Movable Row collection in the Freeze pane Grid.\n   * @returns {Row[] | HTMLCollectionOf<HTMLTableRowElement>}\n   */\n\n\n  ContentRender.prototype.getMovableRows = function () {\n    var infiniteRows = this.getInfiniteMovableRows();\n    return infiniteRows.length ? infiniteRows : this.movableRows;\n  };\n  /**\n   * Get the content table data row elements\n   * @return {Element}\n   */\n\n\n  ContentRender.prototype.getRowElements = function () {\n    return this.parent.getFrozenColumns() ? this.freezeRowElements : this.rowElements;\n  };\n  /**\n   * Get the Freeze pane movable content table data row elements\n   * @return {Element}\n   */\n\n\n  ContentRender.prototype.getMovableRowElements = function () {\n    return this.rowElements;\n  };\n  /**\n   * Get the content table data row elements\n   * @return {Element}\n   */\n\n\n  ContentRender.prototype.setRowElements = function (elements) {\n    this.rowElements = elements;\n  };\n  /**\n   * Get the header colgroup element\n   * @returns {Element}\n   */\n\n\n  ContentRender.prototype.getColGroup = function () {\n    return this.colgroup;\n  };\n  /**\n   * Set the header colgroup element\n   * @param {Element} colgroup\n   * @returns {Element}\n   */\n\n\n  ContentRender.prototype.setColGroup = function (colGroup) {\n    if (!isNullOrUndefined(colGroup)) {\n      colGroup.id = 'content-' + colGroup.id;\n    }\n\n    return this.colgroup = colGroup;\n  };\n  /**\n   * Function to hide content table column based on visible property\n   * @param  {Column[]} columns?\n   */\n\n\n  ContentRender.prototype.setVisible = function (columns) {\n    var gObj = this.parent;\n    var isFrozenGrid = this.parent.isFrozenGrid();\n    var frzCols = gObj.getFrozenColumns();\n    var rows = [];\n\n    if (isFrozenGrid) {\n      var fRows = this.freezeRows;\n      var mRows = this.movableRows;\n      var rowLen = fRows.length;\n      var cellLen = void 0;\n      var rightRows = [];\n\n      if (gObj.getFrozenMode() === literals.leftRight) {\n        rightRows = gObj.getFrozenRightRowsObject();\n      }\n\n      for (var i = 0, row = void 0; i < rowLen; i++) {\n        cellLen = mRows[i].cells.length;\n        var rightLen = rightRows.length ? rightRows[i].cells.length : 0;\n        row = fRows[i].clone();\n\n        for (var j = 0; j < cellLen; j++) {\n          row.cells.push(mRows[i].cells[j]);\n        }\n\n        for (var k = 0; k < rightLen; k++) {\n          row.cells.push(rightRows[i].cells[k]);\n        }\n\n        rows.push(row);\n      }\n    } else {\n      rows = this.getRows();\n    }\n\n    var element;\n    var testRow;\n    rows.some(function (r) {\n      if (r.isDataRow) {\n        testRow = r;\n      }\n\n      return r.isDataRow;\n    });\n    var tasks = [];\n    var needFullRefresh = true;\n\n    if (!gObj.groupSettings.columns.length && testRow) {\n      needFullRefresh = false;\n    }\n\n    var tr = gObj.getDataRows();\n    var args = {};\n    var infiniteData = this.infiniteRowVisibility();\n    var contentrows = infiniteData ? infiniteData : this.rows.filter(function (row) {\n      return !row.isDetailRow;\n    });\n\n    for (var c = 0, clen = columns.length; c < clen; c++) {\n      var column = columns[c];\n      var idx = this.parent.getNormalizedColumnIndex(column.uid);\n      var colIdx = this.parent.getColumnIndexByUid(column.uid);\n      var displayVal = column.visible === true ? '' : 'none';\n\n      if (idx !== -1 && testRow && idx < testRow.cells.length) {\n        if (isFrozenGrid) {\n          if (column.getFreezeTableName() !== 'movable') {\n            if (column.getFreezeTableName() === literals.frozenRight) {\n              var left = this.parent.getFrozenLeftColumnsCount();\n              var movable = this.parent.getMovableColumnsCount();\n              colIdx = idx = idx - (left + movable);\n              var colG = this.parent.getContent().querySelector('.e-frozen-right-content').querySelector(literals.colGroup);\n              setStyleAttribute(colG.childNodes[idx], {\n                'display': displayVal\n              });\n              contentrows = gObj.getFrozenRightRowsObject();\n              tr = gObj.getFrozenRightDataRows();\n            } else {\n              setStyleAttribute(this.getColGroup().childNodes[idx], {\n                'display': displayVal\n              });\n              var infiniteFreezeData = this.infiniteRowVisibility(true);\n              contentrows = infiniteFreezeData ? infiniteFreezeData : this.freezeRows;\n              tr = gObj.getDataRows();\n            }\n          } else {\n            var mTable = gObj.getContent().querySelector('.' + literals.movableContent).querySelector(literals.colGroup);\n            colIdx = idx = idx - frzCols - this.parent.getFrozenLeftColumnsCount();\n            setStyleAttribute(mTable.childNodes[idx], {\n              'display': displayVal\n            });\n            tr = gObj.getMovableDataRows();\n            var infiniteMovableData = this.infiniteRowVisibility();\n            contentrows = infiniteMovableData ? infiniteMovableData : this.movableRows;\n          }\n        } else {\n          setStyleAttribute(this.getColGroup().childNodes[idx], {\n            'display': displayVal\n          });\n        }\n      }\n\n      if (!needFullRefresh) {\n        this.setDisplayNone(tr, colIdx, displayVal, contentrows);\n      }\n\n      if (!this.parent.invokedFromMedia && column.hideAtMedia) {\n        this.parent.updateMediaColumns(column);\n      }\n\n      this.parent.invokedFromMedia = false;\n    }\n\n    if (needFullRefresh) {\n      this.refreshContentRows({\n        requestType: 'refresh'\n      });\n    } else {\n      if (!this.parent.getFrozenColumns()) {\n        this.parent.notify(events.partialRefresh, {\n          rows: contentrows,\n          args: args\n        });\n      } else {\n        this.parent.notify(events.partialRefresh, {\n          rows: this.freezeRows,\n          args: {\n            isFrozen: true,\n            rows: this.freezeRows\n          }\n        });\n        this.parent.notify(events.partialRefresh, {\n          rows: this.movableRows,\n          args: {\n            isFrozen: false,\n            rows: this.movableRows\n          }\n        });\n      }\n    }\n  };\n  /**\n   * @hidden\n   */\n\n\n  ContentRender.prototype.setDisplayNone = function (tr, idx, displayVal, rows) {\n    setDisplayValue(tr, idx, displayVal, rows, this.parent, this.parent.isRowDragable());\n    this.parent.notify(events.infiniteShowHide, {\n      visible: displayVal,\n      index: idx,\n      isFreeze: this.isInfiniteFreeze\n    });\n  };\n\n  ContentRender.prototype.infiniteRowVisibility = function (isFreeze) {\n    var infiniteData;\n\n    if (this.parent.enableInfiniteScrolling) {\n      this.isInfiniteFreeze = isFreeze;\n\n      if (this.parent.infiniteScrollSettings.enableCache) {\n        infiniteData = isFreeze ? this.getCurrentBlockInfiniteRecords(true) : this.getCurrentBlockInfiniteRecords();\n      } else {\n        infiniteData = isFreeze ? this.visibleFrozenRows : this.visibleRows;\n      }\n    }\n\n    return infiniteData;\n  };\n\n  ContentRender.prototype.colGroupRefresh = function () {\n    if (this.getColGroup()) {\n      var colGroup = void 0;\n\n      if (this.parent.enableColumnVirtualization && this.parent.getFrozenColumns() && this.parent.contentModule.isXaxis()) {\n        colGroup = this.parent.getMovableVirtualHeader().querySelector(literals.colGroup).cloneNode(true);\n      } else {\n        colGroup = this.getHeaderColGroup();\n      }\n\n      this.getTable().replaceChild(colGroup, this.getColGroup());\n      this.setColGroup(colGroup);\n    }\n  };\n\n  ContentRender.prototype.getHeaderColGroup = function () {\n    return this.parent.element.querySelector('.' + literals.gridHeader).querySelector(literals.colGroup).cloneNode(true);\n  };\n\n  ContentRender.prototype.initializeContentDrop = function () {\n    var gObj = this.parent;\n    this.droppable = new Droppable(gObj.element, {\n      accept: '.e-dragclone',\n      drop: this.drop\n    });\n  };\n\n  ContentRender.prototype.droppableDestroy = function () {\n    if (this.droppable && !this.droppable.isDestroyed) {\n      this.droppable.destroy();\n    }\n  };\n\n  ContentRender.prototype.canSkip = function (column, row, index) {\n    /**\n     * Skip the toggle visiblity operation when one of the following success\n     * 1. Grid has empty records\n     * 2. column visible property is unchanged\n     * 3. cell`s isVisible property is same as column`s visible property.\n     */\n    return isNullOrUndefined(row) || //(1)\n    isNullOrUndefined(column.visible) || //(2)    \n    row.cells[index].visible === column.visible; //(3)\n  };\n\n  ContentRender.prototype.getModelGenerator = function () {\n    return this.generator = this.parent.allowGrouping ? new GroupModelGenerator(this.parent) : new RowModelGenerator(this.parent);\n  };\n\n  ContentRender.prototype.renderEmpty = function (tbody) {\n    this.getTable().appendChild(tbody);\n\n    if (this.parent.frozenRows) {\n      this.parent.getHeaderContent().querySelector(literals.tbody).innerHTML = '';\n    }\n  };\n\n  ContentRender.prototype.setSelection = function (uid, set, clearAll) {\n    this.parent.notify(events.setFreezeSelection, {\n      uid: uid,\n      set: set,\n      clearAll: clearAll\n    });\n    var isFrozen = this.parent.isFrozenGrid();\n\n    if (isFrozen && this.parent.enableVirtualization) {\n      return;\n    }\n\n    if (isFrozen) {\n      var rows = this.getMovableRows().filter(function (row) {\n        return clearAll || uid === row.uid;\n      });\n\n      for (var i = 0; i < rows.length; i++) {\n        rows[i].isSelected = set;\n      }\n    }\n\n    var row = this.getRows().filter(function (row) {\n      return clearAll || uid === row.uid;\n    });\n\n    for (var j = 0; j < row.length; j++) {\n      row[j].isSelected = set;\n      var cells = row[j].cells;\n\n      for (var k = 0; k < cells.length; k++) {\n        cells[k].isSelected = set;\n      }\n    }\n  };\n\n  ContentRender.prototype.getRowByIndex = function (index) {\n    index = this.getInfiniteRowIndex(index);\n    return this.parent.getDataRows()[index];\n  };\n\n  ContentRender.prototype.getInfiniteRowIndex = function (index) {\n    if (this.parent.infiniteScrollSettings.enableCache) {\n      var fRows = this.parent.frozenRows;\n      var idx = fRows > index ? 0 : fRows;\n      var firstRowIndex = parseInt(this.parent.getRows()[idx].getAttribute(literals.ariaRowIndex), 10);\n      index = fRows > index ? index : index - firstRowIndex + fRows;\n    }\n\n    return index;\n  };\n\n  ContentRender.prototype.getVirtualRowIndex = function (index) {\n    return index;\n  };\n\n  ContentRender.prototype.getMovableRowByIndex = function (index) {\n    index = this.getInfiniteRowIndex(index);\n    return this.parent.getMovableDataRows()[index];\n  };\n\n  ContentRender.prototype.enableAfterRender = function (e) {\n    if (e.module === 'group' && e.enable) {\n      this.generator = this.getModelGenerator();\n    }\n  };\n\n  ContentRender.prototype.setRowObjects = function (rows) {\n    this.rows = rows;\n  };\n  /** @hidden */\n\n\n  ContentRender.prototype.immutableModeRendering = function (args) {\n    var _this = this;\n\n    if (args === void 0) {\n      args = {};\n    }\n\n    var gObj = this.parent;\n    gObj.hideSpinner();\n    var key = gObj.getPrimaryKeyFieldNames()[0];\n    var oldKeys = {};\n    var newKeys = {};\n    var newRowObjs = [];\n    var oldIndexes = {};\n    var oldRowObjs = gObj.getRowsObject().slice();\n    var batchChangeKeys = this.getBatchEditedRecords(key, oldRowObjs);\n    var newIndexes = {};\n    var hasBatch = Object.keys(batchChangeKeys).length !== 0;\n\n    if (gObj.getContent().querySelector('.e-emptyrow') || args.requestType === 'reorder' || this.parent.groupSettings.columns.length) {\n      this.refreshContentRows(args);\n    } else {\n      if (gObj.currentViewData.length === 0) {\n        return;\n      }\n\n      var oldRowElements = {};\n      var tbody = gObj.createElement(literals.tbody);\n      var dataSource = gObj.currentViewData;\n      var trs = [].slice.call(this.getTable().querySelector(literals.tbody).children);\n\n      if (this.prevCurrentView.length) {\n        var prevLen = this.prevCurrentView.length;\n        var currentLen = dataSource.length;\n\n        if (prevLen === currentLen) {\n          for (var i = 0; i < currentLen; i++) {\n            if (this.parent.editSettings.mode === 'Batch' && trs[i].classList.contains('e-insertedrow')) {\n              trs.splice(i, 1);\n              --i;\n              continue;\n            }\n\n            newKeys[dataSource[i][key]] = oldKeys[this.prevCurrentView[i][key]] = i;\n            newIndexes[i] = dataSource[i][key];\n            oldRowElements[oldRowObjs[i].uid] = trs[i];\n            oldIndexes[i] = this.prevCurrentView[i][key];\n          }\n        } else {\n          for (var i = 0; i < currentLen; i++) {\n            newKeys[dataSource[i][key]] = i;\n            newIndexes[i] = dataSource[i][key];\n          }\n\n          for (var i = 0; i < prevLen; i++) {\n            if (this.parent.editSettings.mode === 'Batch' && trs[i].classList.contains('e-insertedrow')) {\n              trs.splice(i, 1);\n              --i;\n              continue;\n            }\n\n            oldRowElements[oldRowObjs[i].uid] = trs[i];\n            oldKeys[this.prevCurrentView[i][key]] = i;\n            oldIndexes[i] = this.prevCurrentView[i][key];\n          }\n        }\n      }\n\n      for (var i = 0; i < dataSource.length; i++) {\n        var oldIndex = oldKeys[dataSource[i][key]];\n\n        if (!isNullOrUndefined(oldIndex)) {\n          var isEqual = false;\n\n          if (this.mutableData) {\n            isEqual = this.objectEqualityChecker(this.prevCurrentView[i], dataSource[i]);\n          }\n\n          var tr = oldRowElements[oldRowObjs[oldIndex].uid];\n          newRowObjs.push(oldRowObjs[oldIndex]);\n\n          if (this.rowElements[i] && this.rowElements[i].getAttribute('data-uid') === newRowObjs[i].uid && (hasBatch && isNullOrUndefined(batchChangeKeys[newIndexes[i]]) || !hasBatch && (isEqual || this.prevCurrentView[i] === dataSource[i]))) {\n            if (oldIndex !== i) {\n              this.refreshImmutableContent(i, tr, newRowObjs[i]);\n            }\n\n            tbody.appendChild(tr);\n            continue;\n          }\n\n          if (hasBatch && !isNullOrUndefined(batchChangeKeys[newIndexes[i]]) || !this.mutableData && dataSource[i] !== this.prevCurrentView[oldIndex] || this.mutableData && !isEqual) {\n            oldRowObjs[oldIndex].setRowValue(dataSource[i]);\n          }\n\n          tbody.appendChild(tr);\n          this.refreshImmutableContent(i, tr, newRowObjs[i]);\n        } else {\n          var row = new RowRenderer(this.serviceLocator, null, gObj);\n          var modelData = this.generator.generateRows([dataSource[i]]);\n          newRowObjs.push(modelData[0]);\n          var tr = row.render(modelData[0], gObj.getColumns());\n          tbody.appendChild(tr);\n          this.refreshImmutableContent(i, tr, newRowObjs[i]);\n        }\n      }\n\n      this.rows = newRowObjs;\n      this.rowElements = [].slice.call(tbody.children);\n      remove(this.getTable().querySelector(literals.tbody));\n      this.getTable().appendChild(tbody);\n      this.parent.trigger(events.dataBound, {}, function () {\n        if (_this.parent.allowTextWrap) {\n          _this.parent.notify(events.freezeRender, {\n            case: 'textwrap'\n          });\n        }\n      });\n\n      if (args) {\n        var action = (args.requestType || '').toLowerCase() + '-complete';\n        this.parent.notify(action, args);\n      }\n    }\n  };\n  /** @hidden */\n\n\n  ContentRender.prototype.objectEqualityChecker = function (old, next) {\n    var keys = Object.keys(old);\n    var isEqual = true;\n\n    for (var i = 0; i < keys.length; i++) {\n      if (old[keys[i]] !== next[keys[i]]) {\n        isEqual = false;\n        break;\n      }\n    }\n\n    return isEqual;\n  };\n\n  ContentRender.prototype.getBatchEditedRecords = function (primaryKey, rows) {\n    var keys = {};\n    var changes = this.parent.getBatchChanges();\n    var changedRecords = [];\n    var addedRecords = [];\n\n    if (Object.keys(changes).length) {\n      changedRecords = changes.changedRecords;\n      addedRecords = changes.addedRecords;\n    }\n\n    var args = {\n      cancel: false\n    };\n    this.parent.notify(events.immutableBatchCancel, {\n      rows: rows,\n      args: args\n    });\n\n    if (addedRecords.length) {\n      if (this.parent.editSettings.newRowPosition === 'Bottom') {\n        rows.splice(rows.length - 1, addedRecords.length);\n      } else {\n        if (!args.cancel) {\n          rows.splice(0, addedRecords.length);\n        }\n      }\n    }\n\n    for (var i = 0; i < changedRecords.length; i++) {\n      keys[changedRecords[i][primaryKey]] = i;\n    }\n\n    return keys;\n  };\n\n  ContentRender.prototype.refreshImmutableContent = function (index, tr, row) {\n    row.isAltRow = this.parent.enableAltRow ? index % 2 !== 0 : false;\n    row.isAltRow ? tr.classList.add('e-altrow') : tr.classList.remove('e-altrow');\n    row.index = index;\n    row.edit = undefined;\n    row.isDirty = false;\n    tr.setAttribute(literals.ariaRowIndex, index.toString());\n    this.updateCellIndex(tr, index);\n  };\n\n  ContentRender.prototype.updateCellIndex = function (rowEle, index) {\n    for (var i = 0; i < rowEle.cells.length; i++) {\n      rowEle.cells[i].setAttribute('index', index.toString());\n    }\n  };\n\n  return ContentRender;\n}();\n\nexport { ContentRender };","import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, closest as getClosest, remove } from '@syncfusion/ej2-base';\nimport { classList } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowRenderer } from './row-renderer';\nimport { Cell } from '../models/cell';\nimport { Row } from '../models/row';\nimport * as events from '../base/constant';\nimport { Draggable, Droppable } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { parentsUntil, wrap, measureColumnDepth, appendChildren } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * Content module is used to render grid content\n * @hidden\n */\n\nvar HeaderRender =\n/** @class */\nfunction () {\n  /**\n   * Constructor for header renderer module\n   */\n  function HeaderRender(parent, serviceLocator) {\n    var _this = this;\n\n    this.frzIdx = 0;\n    this.notfrzIdx = 0;\n    this.isFirstCol = false;\n    this.isReplaceDragEle = true;\n\n    this.helper = function (e) {\n      var gObj = _this.parent;\n      var target = _this.draggable.currentStateTarget;\n      var parentEle = parentsUntil(target, 'e-headercell');\n\n      if (!(gObj.allowReordering || gObj.allowGrouping) || !isNullOrUndefined(parentEle) && parentEle.getElementsByClassName('e-checkselectall').length > 0) {\n        return false;\n      }\n\n      var visualElement = _this.parent.createElement('div', {\n        className: 'e-cloneproperties e-dragclone e-headerclone'\n      });\n\n      var element = target.classList.contains('e-headercell') ? target : parentEle;\n\n      if (!element || !gObj.allowReordering && element.classList.contains('e-stackedheadercell')) {\n        return false;\n      }\n\n      var height = element.offsetHeight;\n      var headercelldiv = element.querySelector('.e-headercelldiv') || element.querySelector('.e-stackedheadercelldiv');\n      var col;\n\n      if (headercelldiv) {\n        if (element.querySelector('.e-stackedheadercelldiv')) {\n          col = gObj.getStackedHeaderColumnByHeaderText(headercelldiv.innerText.trim(), gObj.columns);\n        } else {\n          col = gObj.getColumnByUid(headercelldiv.getAttribute('e-mappinguid'));\n        }\n\n        _this.column = col;\n\n        if (_this.column.lockColumn) {\n          return false;\n        }\n\n        visualElement.setAttribute('e-mappinguid', _this.column.uid);\n      }\n\n      if (col && !isNullOrUndefined(col.headerTemplate)) {\n        if (!isNullOrUndefined(col.headerTemplate)) {\n          var result = void 0;\n          var colIndex = gObj.getColumnIndexByField(col.field);\n          result = col.getHeaderTemplate()(extend({\n            'index': colIndex\n          }, col), gObj, 'headerTemplate');\n          appendChildren(visualElement, result);\n        } else {\n          visualElement.innerHTML = col.headerTemplate;\n        }\n      } else {\n        visualElement.innerHTML = headercelldiv ? col.headerText : element.firstElementChild.innerHTML;\n      }\n\n      visualElement.style.width = element.offsetWidth + 'px';\n      visualElement.style.height = element.offsetHeight + 'px';\n      visualElement.style.lineHeight = (height - 6).toString() + 'px';\n      gObj.element.appendChild(visualElement);\n      return visualElement;\n    };\n\n    this.dragStart = function (e) {\n      var gObj = _this.parent;\n      gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n      gObj.notify(events.columnDragStart, {\n        target: _this.draggable.currentStateTarget,\n        column: _this.column,\n        event: e.event\n      });\n    };\n\n    this.drag = function (e) {\n      var gObj = _this.parent;\n      var target = e.target;\n\n      if (target) {\n        var closest = getClosest(target, '.e-grid');\n\n        var cloneElement = _this.parent.element.querySelector('.e-cloneproperties');\n\n        if (!closest || closest.getAttribute('id') !== gObj.element.getAttribute('id')) {\n          classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n\n          if (gObj.allowReordering) {\n            gObj.element.querySelector('.e-reorderuparrow').style.display = 'none';\n            gObj.element.querySelector('.e-reorderdownarrow').style.display = 'none';\n          }\n\n          if (!gObj.groupSettings.allowReordering) {\n            return;\n          }\n        }\n\n        gObj.notify(events.columnDrag, {\n          target: e.target,\n          column: _this.column,\n          event: e.event\n        });\n      }\n    };\n\n    this.dragStop = function (e) {\n      var gObj = _this.parent;\n      var cancel;\n      gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n\n      if (!parentsUntil(e.target, 'e-headercell') && !parentsUntil(e.target, 'e-groupdroparea') || !gObj.allowReordering && parentsUntil(e.target, 'e-headercell') || !e.helper.getAttribute('e-mappinguid') && parentsUntil(e.target, 'e-groupdroparea')) {\n        remove(e.helper);\n        cancel = true;\n      }\n\n      gObj.notify(events.columnDragStop, {\n        target: e.target,\n        event: e.event,\n        column: _this.column,\n        cancel: cancel\n      });\n    };\n\n    this.drop = function (e) {\n      var gObj = _this.parent;\n      var uid = e.droppedElement.getAttribute('e-mappinguid');\n      var closest = getClosest(e.target, '.e-grid');\n      remove(e.droppedElement);\n\n      if (closest && closest.getAttribute('id') !== gObj.element.getAttribute('id') || !(gObj.allowReordering || gObj.allowGrouping)) {\n        return;\n      }\n\n      gObj.notify(events.headerDrop, {\n        target: e.target,\n        uid: uid,\n        droppedElement: e.droppedElement\n      });\n    };\n\n    this.parent = parent;\n    this.serviceLocator = serviceLocator;\n    this.ariaService = this.serviceLocator.getService('ariaService');\n    this.widthService = this.serviceLocator.getService('widthService');\n\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    if (!this.parent.enableColumnVirtualization && !this.parent.getFrozenLeftColumnsCount() && !this.parent.getFrozenRightColumnsCount()) {\n      this.parent.on(events.columnVisibilityChanged, this.setVisible, this);\n    }\n\n    this.parent.on(events.columnPositionChanged, this.colPosRefresh, this);\n    this.parent.on(events.initialEnd, this.renderCustomToolbar, this);\n\n    if (this.parent.rowRenderingMode === 'Vertical') {\n      this.parent.on(events.uiUpdate, this.updateCustomResponsiveToolbar, this);\n    }\n  }\n  /**\n   * The function is used to render grid header div\n   */\n\n\n  HeaderRender.prototype.renderPanel = function () {\n    var div = this.parent.element.querySelector('.' + literals.gridHeader);\n    var isRendered = div != null;\n    div = isRendered ? div : this.parent.createElement('div', {\n      className: 'e-gridheader'\n    });\n    var innerDiv = isRendered ? div.querySelector('.' + literals.headerContent) : this.parent.createElement('div', {\n      className: literals.headerContent\n    });\n    this.toggleStackClass(div);\n    div.appendChild(innerDiv);\n    this.setPanel(div);\n\n    if (!isRendered) {\n      this.parent.element.appendChild(div);\n    }\n  };\n  /**\n   * The function is used to render grid header table\n   */\n\n\n  HeaderRender.prototype.renderTable = function () {\n    var headerDiv = this.getPanel();\n    headerDiv.appendChild(this.createHeaderTable());\n    this.setTable(headerDiv.querySelector('.' + literals.table));\n\n    if (!this.parent.getFrozenColumns() && !this.parent.getFrozenRightColumnsCount() && !this.parent.getFrozenLeftColumnsCount()) {\n      this.initializeHeaderDrag();\n      this.initializeHeaderDrop();\n    }\n\n    this.parent.notify(events.headerRefreshed, {\n      rows: this.rows,\n      args: {\n        isFrozen: this.parent.isFrozenGrid()\n      }\n    });\n  };\n  /**\n   * Get the header content div element of grid\n   * @return {Element}\n   */\n\n\n  HeaderRender.prototype.getPanel = function () {\n    return this.headerPanel;\n  };\n  /**\n   * Set the header content div element of grid\n   * @param  {Element} panel\n   */\n\n\n  HeaderRender.prototype.setPanel = function (panel) {\n    this.headerPanel = panel;\n  };\n  /**\n   * Get the header table element of grid\n   * @return {Element}\n   */\n\n\n  HeaderRender.prototype.getTable = function () {\n    return this.headerTable;\n  };\n  /**\n   * Set the header table element of grid\n   * @param  {Element} table\n   */\n\n\n  HeaderRender.prototype.setTable = function (table) {\n    this.headerTable = table;\n  };\n  /**\n   * Get the header colgroup element\n   * @returns {Element}\n   */\n\n\n  HeaderRender.prototype.getColGroup = function () {\n    return this.colgroup;\n  };\n  /**\n   * Set the header colgroup element\n   * @param {Element} colgroup\n   * @returns {Element}\n   */\n\n\n  HeaderRender.prototype.setColGroup = function (colGroup) {\n    return this.colgroup = colGroup;\n  };\n  /**\n   * Get the header row element collection.\n   * @return {Element[]}\n   */\n\n\n  HeaderRender.prototype.getRows = function () {\n    var table = this.getTable();\n    return table.tHead.rows;\n  };\n  /**\n   * The function is used to create header table elements\n   * @return {Element}\n   * @hidden\n   */\n\n\n  HeaderRender.prototype.createHeaderTable = function () {\n    var table = this.createTable();\n    var innerDiv = this.getPanel().querySelector('.' + literals.headerContent);\n    innerDiv.appendChild(table);\n    return innerDiv;\n  };\n  /**\n   * @hidden\n   */\n\n\n  HeaderRender.prototype.createHeader = function (tableEle, tableName) {\n    if (tableEle === void 0) {\n      tableEle = null;\n    }\n\n    var gObj = this.parent;\n    var isFrozen = gObj.isFrozenGrid();\n\n    if (this.getTable() && !isFrozen) {\n      remove(this.getTable());\n    }\n\n    var table = this.parent.createElement('table', {\n      className: literals.table,\n      attrs: {\n        cellspacing: '0.25px',\n        role: 'grid'\n      }\n    });\n    var tblName = tableName ? tableName : gObj.getFrozenLeftCount() ? 'frozen-left' : 'frozen-right';\n    var findHeaderRow = this.createHeaderContent(tblName);\n    var thead = findHeaderRow.thead;\n    var tbody = this.parent.createElement(literals.tbody, {\n      className: this.parent.frozenRows ? '' : 'e-hide'\n    });\n    this.caption = this.parent.createElement('caption', {\n      innerHTML: this.parent.element.id + '_header_table',\n      className: 'e-hide'\n    });\n    var colGroup = this.parent.createElement(literals.colGroup);\n    var rowBody = this.parent.createElement('tr');\n    var bodyCell;\n    var rows = this.rows = findHeaderRow.rows;\n    var rowRenderer = new RowRenderer(this.serviceLocator, CellType.Header, this.parent);\n\n    for (var i = 0, len = rows.length; i < len; i++) {\n      for (var j = 0, len_1 = rows[i].cells.length; j < len_1; j++) {\n        var cell = rows[i].cells[j];\n        bodyCell = this.parent.createElement('td');\n        rowBody.appendChild(bodyCell);\n      }\n    }\n\n    if (gObj.allowFiltering || gObj.allowSorting || gObj.allowGrouping) {\n      table.classList.add('e-sortfilter');\n    }\n\n    this.updateColGroup(colGroup);\n    tbody.appendChild(rowBody);\n    table.appendChild(this.setColGroup(colGroup));\n    table.appendChild(thead);\n    table.appendChild(tbody);\n    table.appendChild(this.caption);\n    this.ariaService.setOptions(table, {\n      colcount: gObj.getColumns().length.toString()\n    });\n    return table;\n  };\n  /**\n   * @hidden\n   */\n\n\n  HeaderRender.prototype.createTable = function (tableEle) {\n    if (tableEle === void 0) {\n      tableEle = null;\n    }\n\n    return this.createHeader(tableEle);\n  };\n\n  HeaderRender.prototype.createHeaderContent = function (tableName) {\n    var gObj = this.parent;\n    var index = 1;\n    var frozenMode = gObj.getFrozenMode();\n    var columns = gObj.getColumns();\n    var thead = this.parent.createElement('thead');\n    var colHeader = this.parent.createElement('tr', {\n      className: 'e-columnheader'\n    });\n    var rowRenderer = new RowRenderer(this.serviceLocator, CellType.Header, gObj);\n    rowRenderer.element = colHeader;\n    var rows = [];\n    var headerRow;\n    this.colDepth = measureColumnDepth(gObj.columns);\n\n    for (var i = 0, len = this.colDepth; i < len; i++) {\n      rows[i] = this.generateRow(i);\n      rows[i].cells = [];\n    }\n\n    if (frozenMode !== 'Right') {\n      rows = this.ensureColumns(rows);\n    }\n\n    rows = this.getHeaderCells(rows, tableName);\n\n    if (frozenMode === 'Right') {\n      index = 0;\n      rows = this.ensureColumns(rows);\n    }\n\n    var frzCols = this.parent.getFrozenColumns();\n\n    if (this.parent.isRowDragable() && this.parent.isFrozenGrid() && rows[0].cells[index]) {\n      var colFreezeMode = rows[0].cells[index].column.getFreezeTableName();\n\n      if (colFreezeMode === 'movable' || frozenMode === literals.leftRight && colFreezeMode === literals.frozenRight) {\n        if (frozenMode === 'Right') {\n          rows[0].cells.pop();\n        } else {\n          rows[0].cells.shift();\n        }\n      } else if (!frzCols && colFreezeMode === literals.frozenLeft) {\n        rows[0].cells[0].column.freeze = colFreezeMode === literals.frozenLeft ? 'Left' : 'Right';\n      } else if (frozenMode === 'Right' && colFreezeMode === literals.frozenRight) {\n        rows[0].cells[rows[0].cells.length - 1].column.freeze = 'Right';\n      }\n    }\n\n    for (var i = 0, len = this.colDepth; i < len; i++) {\n      headerRow = rowRenderer.render(rows[i], columns);\n\n      if (this.parent.rowHeight && headerRow.querySelector('.e-headercell')) {\n        headerRow.style.height = this.parent.rowHeight + 'px';\n      }\n\n      thead.appendChild(headerRow);\n    }\n\n    var findHeaderRow = {\n      thead: thead,\n      rows: rows\n    };\n    return findHeaderRow;\n  };\n\n  HeaderRender.prototype.updateColGroup = function (colGroup) {\n    var cols = this.parent.getColumns();\n    var col;\n    var indexes = this.parent.getColumnIndexesInView();\n\n    if (this.parent.enableColumnVirtualization && this.parent.getFrozenColumns() && this.parent.contentModule.isXaxis()) {\n      cols = extend([], this.parent.getColumns());\n      cols.splice(0, this.parent.getFrozenColumns());\n    }\n\n    colGroup.id = this.parent.element.id + literals.colGroup;\n\n    if (this.parent.allowGrouping) {\n      for (var i = 0, len = this.parent.groupSettings.columns.length; i < len; i++) {\n        if (this.parent.enableColumnVirtualization && indexes.indexOf(i) === -1) {\n          continue;\n        }\n\n        col = this.parent.createElement('col', {\n          className: 'e-group-intent'\n        });\n        colGroup.appendChild(col);\n      }\n    }\n\n    if (this.parent.detailTemplate || this.parent.childGrid) {\n      col = this.parent.createElement('col', {\n        className: 'e-detail-intent'\n      });\n      colGroup.appendChild(col);\n    }\n\n    if (this.parent.isRowDragable() && this.parent.getFrozenMode() !== 'Right') {\n      col = this.parent.createElement('col', {\n        className: 'e-drag-intent'\n      });\n      colGroup.appendChild(col);\n    }\n\n    for (var i = 0, len = cols.length; i < len; i++) {\n      col = this.parent.createElement('col');\n\n      if (cols[i].visible === false) {\n        setStyleAttribute(col, {\n          'display': 'none'\n        });\n      }\n\n      colGroup.appendChild(col);\n    }\n\n    if (this.parent.isRowDragable() && this.parent.getFrozenMode() === 'Right') {\n      col = this.parent.createElement('col', {\n        className: 'e-drag-intent'\n      });\n      colGroup.appendChild(col);\n    }\n\n    return colGroup;\n  };\n\n  HeaderRender.prototype.ensureColumns = function (rows) {\n    //TODO: generate dummy column for group, detail, stacked row here; ensureColumns here\n    var gObj = this.parent;\n    var indexes = this.parent.getColumnIndexesInView();\n\n    for (var i = 0, len = rows.length; i < len; i++) {\n      if (gObj.allowGrouping) {\n        for (var c = 0, len_2 = gObj.groupSettings.columns.length; c < len_2; c++) {\n          if (this.parent.enableColumnVirtualization && indexes.indexOf(c) === -1) {\n            continue;\n          }\n\n          rows[i].cells.push(this.generateCell({}, CellType.HeaderIndent));\n        }\n      }\n\n      if (gObj.detailTemplate || gObj.childGrid) {\n        var args = {};\n        this.parent.notify(events.detailIndentCellInfo, args);\n        rows[i].cells.push(this.generateCell(args, CellType.DetailHeader));\n      }\n\n      if (gObj.isRowDragable()) {\n        rows[i].cells.push(this.generateCell({}, CellType.RowDragHIcon));\n      }\n    }\n\n    return rows;\n  };\n\n  HeaderRender.prototype.getHeaderCells = function (rows, tableName) {\n    var column;\n    var thead = this.parent.getHeaderTable() && this.parent.getHeaderTable().querySelector('thead');\n    var cols = this.parent.enableColumnVirtualization ? this.parent.getColumns(this.parent.enablePersistence) : this.parent.columns;\n    this.frzIdx = 0;\n    this.notfrzIdx = 0;\n\n    if (this.parent.lockcolPositionCount) {\n      for (var i = 0; i < cols.length; i++) {\n        this.lockColsRendered = false;\n        rows = this.appendCells(cols[i], rows, 0, i === 0, false, i === cols.length - 1, thead, tableName);\n      }\n    }\n\n    for (var i = 0, len = cols.length; i < len; i++) {\n      this.notfrzIdx = 0;\n      this.lockColsRendered = true;\n      rows = this.appendCells(cols[i], rows, 0, i === 0, false, i === len - 1, thead, tableName);\n    }\n\n    return rows;\n  };\n\n  HeaderRender.prototype.appendCells = function (cols, rows, index, isFirstObj, isFirstCol, isLastCol, isMovable, tableName) {\n    var lastCol = isLastCol ? 'e-lastcell' : '';\n    var isFrozen = this.parent.isFrozenGrid();\n    var isLockColumn = !this.parent.lockcolPositionCount || cols.lockColumn && !this.lockColsRendered || !cols.lockColumn && this.lockColsRendered;\n    var isFrozenLockColumn = !this.parent.lockcolPositionCount || cols.lockColumn && !this.lockColsRendered || !cols.lockColumn && this.lockColsRendered;\n    var scrollbar = this.parent.getContent().querySelector('.e-movablescrollbar');\n    var left;\n\n    if (isFrozen && scrollbar && this.parent.enableColumnVirtualization) {\n      left = scrollbar.scrollLeft;\n    }\n\n    if (!cols.columns) {\n      if (left && left > 0 && this.parent.contentModule.isXaxis() && this.parent.inViewIndexes[0] !== 0 && cols.getFreezeTableName() === 'movable') {\n        rows[index].cells.push(this.generateCell(cols, CellType.Header, this.colDepth - index, (isFirstObj ? '' : isFirstCol ? 'e-firstcell' : '') + lastCol, index, this.parent.getColumnIndexByUid(cols.uid)));\n      } else {\n        if (!isFrozen && isLockColumn || isFrozen && cols.getFreezeTableName() === tableName && isFrozenLockColumn) {\n          rows[index].cells.push(this.generateCell(cols, CellType.Header, this.colDepth - index, (isFirstObj ? '' : isFirstCol ? 'e-firstcell' : '') + lastCol, index, this.parent.getColumnIndexByUid(cols.uid)));\n        }\n      }\n\n      if (this.parent.lockcolPositionCount) {\n        if (this.frzIdx + this.notfrzIdx < this.parent.frozenColumns && (cols.lockColumn && !this.lockColsRendered || !cols.lockColumn && this.lockColsRendered)) {\n          this.frzIdx++;\n        } else {\n          this.notfrzIdx++;\n        }\n      } else {\n        this.frzIdx++;\n      }\n    } else {\n      this.isFirstCol = false;\n      var colSpan = this.getCellCnt(cols, 0);\n\n      if (colSpan) {\n        var stackedLockColsCount = this.getStackedLockColsCount(cols, 0);\n        var isStackedLockColumn = this.parent.lockcolPositionCount === 0 || !this.lockColsRendered && stackedLockColsCount !== 0 || this.lockColsRendered && colSpan - stackedLockColsCount !== 0;\n        var isFrozenStack = isFrozen && this.ensureStackedFrozen(cols.columns, tableName, false);\n\n        if (!isFrozen && isStackedLockColumn || isFrozenStack) {\n          rows[index].cells.push(new Cell({\n            cellType: CellType.StackedHeader,\n            column: cols,\n            colSpan: this.getColSpan(colSpan, stackedLockColsCount, cols.columns, tableName, isFrozen)\n          }));\n        }\n      }\n\n      if (this.parent.lockcolPositionCount && !this.lockColsRendered) {\n        for (var i = 0; i < cols.columns.length; i++) {\n          rows = this.appendCells(cols.columns[i], rows, index + 1, isFirstObj, i === 0, i === cols.columns.length - 1 && isLastCol, isMovable, tableName);\n        }\n      }\n\n      if (this.lockColsRendered) {\n        for (var i = 0, len = cols.columns.length; i < len; i++) {\n          var isFirstCol_1 = this.isFirstCol = cols.columns[i].visible && !this.isFirstCol && len !== 1;\n          var isLaststackedCol = i === len - 1;\n          rows = this.appendCells(cols.columns[i], rows, index + 1, isFirstObj, isFirstCol_1, isLaststackedCol && isLastCol, isMovable, tableName);\n        }\n      }\n    }\n\n    return rows;\n  };\n\n  HeaderRender.prototype.ensureStackedFrozen = function (columns, tableName, isTrue) {\n    var length = columns.length;\n\n    for (var i = 0; i < length; i++) {\n      if (columns[i].columns) {\n        isTrue = this.ensureStackedFrozen(columns[i].columns, tableName, isTrue);\n      } else if (columns[i].getFreezeTableName() === tableName) {\n        isTrue = true;\n        break;\n      }\n    }\n\n    return isTrue;\n  };\n\n  HeaderRender.prototype.getStackedLockColsCount = function (col, lockColsCount) {\n    if (col.columns) {\n      for (var i = 0; i < col.columns.length; i++) {\n        lockColsCount = this.getStackedLockColsCount(col.columns[i], lockColsCount);\n      }\n    } else if (col.lockColumn) {\n      lockColsCount++;\n    }\n\n    return lockColsCount;\n  };\n\n  HeaderRender.prototype.getColSpan = function (colSpan, stackedLockColsCount, columns, tableName, isFrozen) {\n    if (isFrozen) {\n      colSpan = this.getFrozenColSpan(columns, tableName, 0);\n    } else if (this.parent.lockcolPositionCount) {\n      colSpan = !this.lockColsRendered ? stackedLockColsCount : colSpan - stackedLockColsCount;\n    }\n\n    return colSpan;\n  };\n\n  HeaderRender.prototype.getFrozenColSpan = function (columns, tableName, count) {\n    var length = columns.length;\n\n    for (var i = 0; i < length; i++) {\n      if (columns[i].columns) {\n        count = this.getFrozenColSpan(columns[i].columns, tableName, count);\n      } else if (columns[i].getFreezeTableName() === tableName && columns[i].visible) {\n        count++;\n      }\n    }\n\n    return count;\n  };\n\n  HeaderRender.prototype.generateRow = function (index) {\n    return new Row({});\n  };\n\n  HeaderRender.prototype.generateCell = function (column, cellType, rowSpan, className, rowIndex, colIndex) {\n    var opt = {\n      'visible': column.visible,\n      'isDataCell': false,\n      'isTemplate': !isNullOrUndefined(column.headerTemplate),\n      'rowID': '',\n      'column': column,\n      'cellType': cellType,\n      'rowSpan': rowSpan,\n      'className': className,\n      'index': rowIndex,\n      'colIndex': colIndex\n    };\n\n    if (!opt.rowSpan || opt.rowSpan < 2) {\n      delete opt.rowSpan;\n    }\n\n    return new Cell(opt);\n  };\n  /**\n   * Function to hide header table column based on visible property\n   * @param  {Column[]} columns?\n   */\n\n\n  HeaderRender.prototype.setVisible = function (columns) {\n    var gObj = this.parent;\n    var rows = [].slice.call(this.getRows()); //NodeList -> Array        \n\n    var displayVal;\n    var idx;\n    var className;\n    var element;\n    var frzCols = gObj.getFrozenColumns();\n\n    for (var c = 0, clen = columns.length; c < clen; c++) {\n      var column = columns[c];\n      idx = gObj.getNormalizedColumnIndex(column.uid);\n      displayVal = column.visible ? '' : 'none';\n\n      if (frzCols) {\n        var normalizedfrzCols = this.parent.isRowDragable() ? frzCols + 1 : frzCols;\n\n        if (idx < normalizedfrzCols) {\n          setStyleAttribute(this.getColGroup().children[idx], {\n            'display': displayVal\n          });\n        } else {\n          var mTblColGrp = gObj.getHeaderContent().querySelector('.' + literals.movableHeader).querySelector(literals.colGroup);\n          var mTbl = gObj.getHeaderContent().querySelector('.' + literals.movableHeader).querySelector('table');\n          setStyleAttribute(mTblColGrp.children[idx - normalizedfrzCols], {\n            'display': displayVal\n          });\n        }\n      } else {\n        setStyleAttribute(this.getColGroup().children[idx], {\n          'display': displayVal\n        });\n      }\n    }\n\n    this.refreshUI();\n  };\n\n  HeaderRender.prototype.colPosRefresh = function () {\n    this.refreshUI();\n  };\n  /**\n   * Refresh the header of the Grid.\n   * @returns {void}\n   */\n\n\n  HeaderRender.prototype.refreshUI = function () {\n    var frzCols = this.parent.isFrozenGrid();\n    var isVFTable = this.parent.enableColumnVirtualization && frzCols;\n    var headerDiv = this.getPanel();\n    this.toggleStackClass(headerDiv);\n    var table = this.freezeReorder ? this.headerPanel.querySelector('.' + literals.movableHeader).querySelector('.' + literals.table) : this.getTable();\n    var tableName = this.parent.isFrozenGrid() ? this.parent.getFrozenLeftCount() ? 'frozen-left' : 'frozen-right' : undefined;\n\n    if (isVFTable) {\n      table = this.parent.contentModule.getVirtualFreezeHeader();\n      tableName = this.parent.contentModule.isXaxis() ? 'movable' : tableName;\n    }\n\n    if (table) {\n      remove(table);\n      table.removeChild(table.firstChild);\n      table.removeChild(table.childNodes[0]);\n      var colGroup = this.parent.createElement(literals.colGroup);\n      var findHeaderRow = this.createHeaderContent(tableName);\n      this.rows = findHeaderRow.rows;\n      table.insertBefore(findHeaderRow.thead, table.firstChild);\n      this.updateColGroup(colGroup);\n      table.insertBefore(this.setColGroup(colGroup), table.firstChild);\n\n      if (!isVFTable) {\n        this.setTable(table);\n      }\n\n      this.appendContent(table);\n      this.parent.notify(events.colGroupRefresh, {});\n      this.widthService.setWidthToColumns();\n      this.parent.updateDefaultCursor();\n\n      if (!frzCols || this.parent.enableColumnVirtualization && frzCols) {\n        this.initializeHeaderDrag();\n      }\n\n      var rows = [].slice.call(headerDiv.querySelectorAll('tr.e-columnheader'));\n\n      for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n        var row = rows_1[_i];\n        var gCells = [].slice.call(row.getElementsByClassName('e-grouptopleftcell'));\n\n        if (gCells.length) {\n          gCells[gCells.length - 1].classList.add('e-lastgrouptopleftcell');\n        }\n      }\n\n      if (!frzCols) {\n        this.parent.notify(events.headerRefreshed, {\n          rows: this.rows,\n          args: {\n            isFrozen: frzCols\n          }\n        });\n      }\n\n      if (this.parent.enableColumnVirtualization && parentsUntil(table, literals.movableHeader)) {\n        this.parent.notify(events.headerRefreshed, {\n          rows: this.rows,\n          args: {\n            isFrozen: false,\n            isXaxis: true\n          }\n        });\n      }\n\n      if (this.parent.allowTextWrap && this.parent.textWrapSettings.wrapMode === 'Header') {\n        wrap(rows, true);\n      }\n    }\n  };\n\n  HeaderRender.prototype.toggleStackClass = function (div) {\n    var column = this.parent.columns;\n    var stackedHdr = column.some(function (column) {\n      return !isNullOrUndefined(column.columns);\n    });\n\n    if (stackedHdr) {\n      div.classList.add('e-stackedheader');\n    } else {\n      div.classList.remove('e-stackedheader');\n    }\n  };\n\n  HeaderRender.prototype.appendContent = function (table) {\n    this.getPanel().querySelector('.' + literals.headerContent).appendChild(table);\n  };\n\n  HeaderRender.prototype.getCellCnt = function (col, cnt) {\n    if (col.columns) {\n      for (var i = 0, len = col.columns.length; i < len; i++) {\n        cnt = this.getCellCnt(col.columns[i], cnt);\n      }\n    } else {\n      if (col.visible) {\n        cnt++;\n      }\n    }\n\n    return cnt;\n  };\n\n  HeaderRender.prototype.initializeHeaderDrag = function () {\n    var gObj = this.parent;\n\n    if (!(this.parent.allowReordering || this.parent.allowGrouping && this.parent.groupSettings.showDropArea)) {\n      return;\n    }\n\n    this.draggable = new Draggable(gObj.getHeaderContent(), {\n      dragTarget: '.e-headercell',\n      distance: 5,\n      helper: this.helper,\n      dragStart: this.dragStart,\n      drag: this.drag,\n      dragStop: this.dragStop,\n      abort: '.e-rhandler',\n      isReplaceDragEle: this.isReplaceDragEle\n    });\n  };\n\n  HeaderRender.prototype.initializeHeaderDrop = function () {\n    var gObj = this.parent;\n    var drop = new Droppable(gObj.getHeaderContent(), {\n      accept: '.e-dragclone',\n      drop: this.drop\n    });\n  };\n\n  HeaderRender.prototype.renderCustomToolbar = function () {\n    var _this = this;\n\n    var gObj = this.parent;\n\n    if (gObj.rowRenderingMode === 'Vertical' && !gObj.toolbar && (gObj.allowSorting || gObj.allowFiltering && gObj.filterSettings.type !== 'FilterBar')) {\n      var div = gObj.createElement('div', {\n        className: 'e-res-toolbar e-toolbar'\n      });\n      var toolbarItems = gObj.createElement('div', {\n        className: 'e-toolbar-items'\n      });\n      var toolbarLeft = gObj.createElement('div', {\n        className: 'e-toolbar-left'\n      });\n      var count = this.parent.allowFiltering && this.parent.allowSorting ? 2 : 1;\n\n      for (var i = 0; i < count; i++) {\n        var toolbarItem = gObj.createElement('div', {\n          className: 'e-toolbar-item e-gridresponsiveicons e-icons e-tbtn-align'\n        });\n        var cls = count === 1 ? this.parent.allowSorting ? 'sort' : 'filter' : i === 1 ? 'sort' : 'filter';\n        var button = gObj.createElement('button', {\n          className: 'e-tbar-btn e-control e-btn e-lib e-icon-btn'\n        });\n        var span = gObj.createElement('span', {\n          className: 'e-btn-icon e-res' + cls + '-icon e-icons'\n        });\n        button.appendChild(span);\n        var btnObj = new Button({});\n        btnObj.appendTo(button);\n\n        button.onclick = function (e) {\n          if (e.target.classList.contains('e-ressort-btn') || e.target.classList.contains('e-ressort-icon')) {\n            _this.parent.showResponsiveCustomSort();\n          } else {\n            _this.parent.showResponsiveCustomFilter();\n          }\n        };\n\n        toolbarItem.appendChild(button);\n        toolbarLeft.appendChild(toolbarItem);\n      }\n\n      toolbarItems.appendChild(toolbarLeft);\n      div.appendChild(toolbarItems);\n      gObj.element.insertBefore(div, this.parent.element.querySelector('.' + literals.gridHeader));\n    } else {\n      if (!gObj.toolbar) {\n        gObj.getContent().classList.add('e-responsive-header');\n      }\n    }\n  };\n\n  HeaderRender.prototype.updateCustomResponsiveToolbar = function (args) {\n    var resToolbar = this.parent.element.querySelector('.e-responsive-toolbar');\n\n    if (args.module === 'toolbar') {\n      if (resToolbar) {\n        remove(resToolbar);\n      } else {\n        this.renderCustomToolbar();\n      }\n    }\n  };\n\n  return HeaderRender;\n}();\n\nexport { HeaderRender };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { attributes } from '@syncfusion/ej2-base';\nimport { setStyleAndAttributes, appendChildren } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\nimport { AriaService } from '../services/aria-service';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { headerCellInfo } from '../base/constant';\n/**\n * HeaderCellRenderer class which responsible for building header cell content.\n * @hidden\n */\n\nvar HeaderCellRenderer =\n/** @class */\nfunction (_super) {\n  __extends(HeaderCellRenderer, _super);\n\n  function HeaderCellRenderer() {\n    var _this = _super !== null && _super.apply(this, arguments) || this;\n\n    _this.element = _this.parent.createElement('TH', {\n      className: 'e-headercell',\n      attrs: {\n        role: 'columnheader',\n        tabindex: '-1'\n      }\n    });\n    _this.ariaService = new AriaService();\n    _this.hTxtEle = _this.parent.createElement('span', {\n      className: 'e-headertext'\n    });\n    _this.sortEle = _this.parent.createElement('div', {\n      className: 'e-sortfilterdiv e-icons'\n    });\n    _this.gui = _this.parent.createElement('div');\n    _this.chkAllBox = _this.parent.createElement('input', {\n      className: 'e-checkselectall',\n      attrs: {\n        'type': 'checkbox'\n      }\n    });\n    return _this;\n  }\n  /**\n   * Function to return the wrapper for the TH content.\n   * @returns string\n   */\n\n\n  HeaderCellRenderer.prototype.getGui = function () {\n    return this.gui.cloneNode();\n  };\n  /**\n   * Function to render the cell content based on Column object.\n   * @param  {Column} column\n   * @param  {Object} data\n   * @param  {Element}\n   */\n\n\n  HeaderCellRenderer.prototype.render = function (cell, data, attributes) {\n    var node = this.element.cloneNode();\n    var fltrMenuEle = this.parent.createElement('div', {\n      className: 'e-filtermenudiv e-icons e-icon-filter'\n    });\n    return this.prepareHeader(cell, node, fltrMenuEle);\n  };\n  /**\n   * Function to refresh the cell content based on Column object.\n   * @param  {Cell} cell\n   * @param  {Element} node\n   */\n\n\n  HeaderCellRenderer.prototype.refresh = function (cell, node) {\n    this.clean(node);\n    var fltrMenuEle = this.parent.createElement('div', {\n      className: 'e-filtermenudiv e-icons e-icon-filter'\n    });\n    return this.prepareHeader(cell, node, fltrMenuEle);\n  };\n\n  HeaderCellRenderer.prototype.clean = function (node) {\n    node.innerHTML = '';\n  };\n  /* tslint:disable-next-line:max-func-body-length */\n\n\n  HeaderCellRenderer.prototype.prepareHeader = function (cell, node, fltrMenuEle) {\n    var column = cell.column;\n    var ariaAttr = {}; //Prepare innerHtml\n\n    var innerDIV = this.getGui();\n    var hValueAccer;\n    attributes(innerDIV, {\n      'e-mappinguid': column.uid,\n      'class': 'e-headercelldiv'\n    });\n\n    if (!isNullOrUndefined(column.headerValueAccessor)) {\n      hValueAccer = this.getValue(column.headerText, column);\n    }\n\n    if (column.type !== 'checkbox') {\n      var value = column.headerText;\n\n      if (!isNullOrUndefined(hValueAccer)) {\n        value = hValueAccer;\n      }\n\n      var headerText = this.hTxtEle.cloneNode();\n      headerText[column.getDomSetter()] = value;\n      innerDIV.appendChild(headerText);\n    } else {\n      column.editType = 'booleanedit';\n      var checkAllWrap = createCheckBox(this.parent.createElement, false, {\n        checked: false,\n        label: ' '\n      });\n      checkAllWrap.insertBefore(this.chkAllBox.cloneNode(), checkAllWrap.firstChild);\n      innerDIV.appendChild(checkAllWrap);\n      innerDIV.classList.add('e-headerchkcelldiv');\n    }\n\n    this.buildAttributeFromCell(node, cell);\n    this.appendHtml(node, innerDIV);\n    node.appendChild(this.sortEle.cloneNode());\n\n    if (this.parent.allowFiltering && this.parent.filterSettings.type !== 'FilterBar' && column.allowFiltering && !isNullOrUndefined(column.field) && !(this.parent.showColumnMenu && column.showColumnMenu)) {\n      attributes(fltrMenuEle, {\n        'e-mappinguid': 'e-flmenu-' + column.uid\n      });\n      node.classList.add('e-fltr-icon');\n      var matchFlColumns = [];\n\n      if (this.parent.filterSettings.columns.length && this.parent.filterSettings.columns.length !== matchFlColumns.length) {\n        var foreignColumn = this.parent.getForeignKeyColumns();\n\n        for (var index = 0; index < this.parent.columns.length; index++) {\n          for (var count = 0; count < this.parent.filterSettings.columns.length; count++) {\n            if (this.parent.filterSettings.columns[count].field === column.field || foreignColumn.length && column.foreignKeyValue === this.parent.filterSettings.columns[count].field) {\n              fltrMenuEle.classList.add('e-filtered');\n              matchFlColumns.push(column.field);\n              break;\n            }\n          }\n        }\n      }\n\n      node.appendChild(fltrMenuEle.cloneNode());\n    }\n\n    if (cell.className) {\n      node.classList.add(cell.className);\n    }\n\n    if (column.customAttributes) {\n      setStyleAndAttributes(node, column.customAttributes);\n    }\n\n    if (column.allowSorting) {\n      ariaAttr.sort = 'none';\n    }\n\n    if (column.allowGrouping) {\n      ariaAttr.grabbed = false;\n    }\n\n    node = this.extendPrepareHeader(column, node);\n    var result;\n    var gridObj = this.parent;\n    var colIndex = gridObj.getColumnIndexByField(column.field);\n\n    if (!isNullOrUndefined(column.headerTemplate)) {\n      //need to pass the template id for blazor headertemplate\n      var headerTempID = gridObj.element.id + column.uid + 'headerTemplate';\n      var str = 'isStringTemplate';\n      var col = column;\n      var isReactCompiler = this.parent.isReact && typeof column.headerTemplate !== 'string';\n\n      if (isReactCompiler) {\n        var copied = {\n          'index': colIndex\n        };\n        node.firstElementChild.innerHTML = '';\n        column.getHeaderTemplate()(extend(copied, col), gridObj, 'headerTemplate', headerTempID, this.parent[str], null, node.firstElementChild);\n        this.parent.renderTemplates();\n      } else {\n        result = column.getHeaderTemplate()(extend({\n          'index': colIndex\n        }, col), gridObj, 'headerTemplate', headerTempID, this.parent[str]);\n        node.firstElementChild.innerHTML = '';\n        appendChildren(node.firstElementChild, result);\n      }\n    }\n\n    this.ariaService.setOptions(node, ariaAttr);\n\n    if (!isNullOrUndefined(column.headerTextAlign) || !isNullOrUndefined(column.textAlign)) {\n      var alignment = column.headerTextAlign || column.textAlign;\n      innerDIV.style.textAlign = alignment;\n\n      if (alignment === 'Right' || alignment === 'Left') {\n        node.classList.add(alignment === 'Right' ? 'e-rightalign' : 'e-leftalign');\n      } else if (alignment === 'Center') {\n        node.classList.add('e-centeralign');\n      }\n    }\n\n    if (column.clipMode === 'Clip' || !column.clipMode && this.parent.clipMode === 'Clip') {\n      node.classList.add('e-gridclip');\n    } else if (column.clipMode === 'EllipsisWithTooltip' || !column.clipMode && this.parent.clipMode === 'EllipsisWithTooltip') {\n      if (column.type !== 'checkbox') {\n        node.classList.add('e-ellipsistooltip');\n      }\n    }\n\n    node.setAttribute('aria-rowspan', (!isNullOrUndefined(cell.rowSpan) ? cell.rowSpan : 1).toString());\n    node.setAttribute('aria-colspan', '1');\n    this.parent.trigger(headerCellInfo, {\n      cell: cell,\n      node: node\n    });\n    return node;\n  };\n\n  HeaderCellRenderer.prototype.getValue = function (field, column) {\n    return column.headerValueAccessor(field, column);\n  };\n\n  HeaderCellRenderer.prototype.extendPrepareHeader = function (column, node) {\n    if (this.parent.showColumnMenu && column.showColumnMenu && !isNullOrUndefined(column.field)) {\n      var element = this.parent.createElement('div', {\n        className: 'e-icons e-columnmenu'\n      });\n      var matchFilteredColumns = [];\n\n      if (this.parent.filterSettings.columns.length && this.parent.filterSettings.columns.length !== matchFilteredColumns.length) {\n        for (var i = 0; i < this.parent.columns.length; i++) {\n          for (var j = 0; j < this.parent.filterSettings.columns.length; j++) {\n            if (this.parent.filterSettings.columns[j].field === column.field) {\n              element.classList.add('e-filtered');\n              matchFilteredColumns.push(column.field);\n              break;\n            }\n          }\n        }\n      }\n\n      node.classList.add('e-fltr-icon');\n      node.appendChild(element);\n    }\n\n    if (this.parent.allowResizing) {\n      var handler = this.parent.createElement('div');\n      handler.className = column.allowResizing ? 'e-rhandler e-rcursor' : 'e-rsuppress';\n      node.appendChild(handler);\n    }\n\n    return node;\n  };\n  /**\n   * Function to specifies how the result content to be placed in the cell.\n   * @param  {Element} node\n   * @param  {string|Element} innerHtml\n   * @returns Element\n   */\n\n\n  HeaderCellRenderer.prototype.appendHtml = function (node, innerHtml) {\n    node.appendChild(innerHtml);\n    return node;\n  };\n\n  return HeaderCellRenderer;\n}(CellRenderer);\n\nexport { HeaderCellRenderer };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { headerCellInfo } from '../base/constant';\nimport { setStyleAndAttributes, appendChildren } from '../base/util';\n/**\n * StackedHeaderCellRenderer class which responsible for building stacked header cell content.\n * @hidden\n */\n\nvar StackedHeaderCellRenderer =\n/** @class */\nfunction (_super) {\n  __extends(StackedHeaderCellRenderer, _super);\n\n  function StackedHeaderCellRenderer() {\n    var _this = _super !== null && _super.apply(this, arguments) || this;\n\n    _this.element = _this.parent.createElement('TH', {\n      className: 'e-headercell e-stackedheadercell',\n      attrs: {\n        role: 'columnheader',\n        tabindex: '-1'\n      }\n    });\n    return _this;\n  }\n  /**\n   * Function to render the cell content based on Column object.\n   * @param  {Column} column\n   * @param  {Object} data\n   * @param  {Element}\n   */\n\n\n  StackedHeaderCellRenderer.prototype.render = function (cell, data, attributes) {\n    var node = this.element.cloneNode();\n    var div = this.parent.createElement('div', {\n      className: 'e-stackedheadercelldiv',\n      attrs: {\n        'e-mappinguid': cell.column.uid\n      }\n    });\n    var column = cell.column;\n    node.appendChild(div);\n\n    if (!isNullOrUndefined(column.headerTemplate)) {\n      appendChildren(div, column.getHeaderTemplate()(column, this.parent, 'headerTemplate'));\n    } else {\n      this.appendHtml(div, column.headerText, column.getDomSetter());\n    }\n\n    if (cell.column.toolTip) {\n      node.setAttribute('title', cell.column.toolTip);\n    }\n\n    if (column.clipMode === 'Clip' || !column.clipMode && this.parent.clipMode === 'Clip') {\n      node.classList.add('e-gridclip');\n    } else if (column.clipMode === 'EllipsisWithTooltip' || !column.clipMode && this.parent.clipMode === 'EllipsisWithTooltip') {\n      node.classList.add('e-ellipsistooltip');\n    }\n\n    if (!isNullOrUndefined(cell.column.textAlign)) {\n      div.style.textAlign = cell.column.textAlign;\n    }\n\n    if (cell.column.customAttributes) {\n      setStyleAndAttributes(node, cell.column.customAttributes);\n    }\n\n    node.setAttribute('colspan', cell.colSpan.toString());\n    node.setAttribute('aria-colspan', cell.colSpan.toString());\n    node.setAttribute('aria-rowspan', '1');\n\n    if (this.parent.allowResizing) {\n      var handler = this.parent.createElement('div');\n      handler.className = cell.column.allowResizing ? 'e-rhandler e-rcursor' : 'e-rsuppress';\n      node.appendChild(handler);\n    }\n\n    this.parent.trigger(headerCellInfo, {\n      cell: cell,\n      node: node\n    });\n    return node;\n  };\n\n  return StackedHeaderCellRenderer;\n}(CellRenderer);\n\nexport { StackedHeaderCellRenderer };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nimport { setStyleAndAttributes } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\n/**\n * IndentCellRenderer class which responsible for building group indent cell.\n * @hidden\n */\n\nvar IndentCellRenderer =\n/** @class */\nfunction (_super) {\n  __extends(IndentCellRenderer, _super);\n\n  function IndentCellRenderer() {\n    var _this = _super !== null && _super.apply(this, arguments) || this;\n\n    _this.element = _this.parent.createElement('TD', {\n      className: 'e-indentcell'\n    });\n    return _this;\n  }\n  /**\n   * Function to render the indent cell\n   * @param  {Cell} cell\n   * @param  {Object} data\n   */\n\n\n  IndentCellRenderer.prototype.render = function (cell, data) {\n    var node = this.element.cloneNode();\n    setStyleAndAttributes(node, cell.attributes);\n    return node;\n  };\n\n  return IndentCellRenderer;\n}(CellRenderer);\n\nexport { IndentCellRenderer };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { appendChildren, templateCompiler } from '../base/util';\n/**\n * GroupCaptionCellRenderer class which responsible for building group caption cell.\n * @hidden\n */\n\nvar GroupCaptionCellRenderer =\n/** @class */\nfunction (_super) {\n  __extends(GroupCaptionCellRenderer, _super);\n\n  function GroupCaptionCellRenderer() {\n    var _this = _super !== null && _super.apply(this, arguments) || this;\n\n    _this.element = _this.parent.createElement('TD', {\n      className: 'e-groupcaption',\n      attrs: {\n        id: _this.parent.element.id + 'captioncell',\n        role: 'gridcell',\n        tabindex: '-1'\n      }\n    });\n    return _this;\n  }\n  /**\n   * Function to render the cell content based on Column object.\n   * @param  {Cell} cell\n   * @param  {Object} data\n   */\n\n\n  GroupCaptionCellRenderer.prototype.render = function (cell, data) {\n    var node = this.element.cloneNode();\n    var gObj = this.parent;\n    var result;\n    var helper = {};\n    var fKeyValue;\n    data.headerText = cell.column.headerText;\n\n    if (cell.isForeignKey) {\n      fKeyValue = this.format(cell.column, cell.column.valueAccessor('foreignKey', data, cell.column));\n    }\n\n    var value = cell.isForeignKey ? fKeyValue : cell.column.enableGroupByFormat ? data.key : this.format(cell.column, cell.column.valueAccessor('key', data, cell.column));\n\n    if (!isNullOrUndefined(gObj.groupSettings.captionTemplate)) {\n      var isReactCompiler = this.parent.isReact && typeof gObj.groupSettings.captionTemplate !== 'string';\n\n      if (isReactCompiler) {\n        var tempID = gObj.element.id + 'captionTemplate';\n        templateCompiler(gObj.groupSettings.captionTemplate)(data, this.parent, 'captionTemplate', tempID, null, null, node);\n        this.parent.renderTemplates();\n      } else if (this.parent.isVue) {\n        result = templateCompiler(gObj.groupSettings.captionTemplate)(data, this.parent);\n      } else {\n        result = templateCompiler(gObj.groupSettings.captionTemplate)(data);\n      }\n\n      if (!isReactCompiler) {\n        appendChildren(node, result);\n      }\n    } else {\n      if (gObj.groupSettings.enableLazyLoading) {\n        node.innerHTML = cell.column.headerText + ': ' + value;\n      } else {\n        node.innerHTML = cell.column.headerText + ': ' + value + ' - ' + data.count + ' ' + (data.count < 2 ? this.localizer.getConstant('Item') : this.localizer.getConstant('Items'));\n      }\n    }\n\n    node.setAttribute('colspan', cell.colSpan.toString());\n    node.setAttribute('aria-label', node.innerHTML + ' is groupcaption cell');\n    node.setAttribute('title', node.innerHTML);\n    return node;\n  };\n\n  return GroupCaptionCellRenderer;\n}(CellRenderer);\n\nexport { GroupCaptionCellRenderer };\n/**\n * GroupCaptionEmptyCellRenderer class which responsible for building group caption empty cell.\n * @hidden\n */\n\nvar GroupCaptionEmptyCellRenderer =\n/** @class */\nfunction (_super) {\n  __extends(GroupCaptionEmptyCellRenderer, _super);\n\n  function GroupCaptionEmptyCellRenderer() {\n    var _this = _super !== null && _super.apply(this, arguments) || this;\n\n    _this.element = _this.parent.createElement('TD', {\n      className: 'e-groupcaption'\n    });\n    return _this;\n  }\n  /**\n   * Function to render the cell content based on Column object.\n   * @param  {Cell} cell\n   * @param  {Object} data\n   */\n\n\n  GroupCaptionEmptyCellRenderer.prototype.render = function (cell, data) {\n    var node = this.element.cloneNode();\n    node.innerHTML = '&nbsp;';\n    node.setAttribute('colspan', cell.colSpan.toString());\n    return node;\n  };\n\n  return GroupCaptionEmptyCellRenderer;\n}(CellRenderer);\n\nexport { GroupCaptionEmptyCellRenderer };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nimport { IndentCellRenderer } from './indent-cell-renderer';\n/**\n * ExpandCellRenderer class which responsible for building group expand cell.\n * @hidden\n */\n\nvar ExpandCellRenderer =\n/** @class */\nfunction (_super) {\n  __extends(ExpandCellRenderer, _super);\n\n  function ExpandCellRenderer() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n  /**\n   * Function to render the expand cell\n   * @param  {Cell} cell\n   * @param  {Object} data\n   * @param  {{ [x: string]: string }} attr\n   * @param {boolean} isExpand\n   */\n\n\n  ExpandCellRenderer.prototype.render = function (cell, data, attr, isExpand) {\n    var node = this.element.cloneNode();\n    node.className = isExpand ? 'e-recordplusexpand' : 'e-recordpluscollapse';\n    node.setAttribute('ej-mappingname', data.field);\n    node.setAttribute('ej-mappingvalue', data.key);\n    node.setAttribute('aria-expanded', isExpand ? 'true' : 'false');\n    node.setAttribute('tabindex', '-1');\n    node.appendChild(this.parent.createElement('div', {\n      className: isExpand ? 'e-icons e-gdiagonaldown e-icon-gdownarrow' : 'e-icons e-gnextforward e-icon-grightarrow'\n    }));\n    return node;\n  };\n\n  return ExpandCellRenderer;\n}(IndentCellRenderer);\n\nexport { ExpandCellRenderer };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nimport { CellRenderer } from './cell-renderer';\n/**\n * HeaderIndentCellRenderer class which responsible for building header indent cell.\n * @hidden\n */\n\nvar HeaderIndentCellRenderer =\n/** @class */\nfunction (_super) {\n  __extends(HeaderIndentCellRenderer, _super);\n\n  function HeaderIndentCellRenderer() {\n    var _this = _super !== null && _super.apply(this, arguments) || this;\n\n    _this.element = _this.parent.createElement('TH', {\n      className: 'e-grouptopleftcell'\n    });\n    return _this;\n  }\n  /**\n   * Function to render the indent cell\n   * @param  {Cell} cell\n   * @param  {Object} data\n   */\n\n\n  HeaderIndentCellRenderer.prototype.render = function (cell, data) {\n    var node = this.element.cloneNode();\n    node.appendChild(this.parent.createElement('div', {\n      className: 'e-headercelldiv e-emptycell',\n      innerHTML: ''\n    }));\n    return node;\n  };\n\n  return HeaderIndentCellRenderer;\n}(CellRenderer);\n\nexport { HeaderIndentCellRenderer };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nimport { CellRenderer } from './cell-renderer';\n/**\n * DetailHeaderIndentCellRenderer class which responsible for building detail header indent cell.\n * @hidden\n */\n\nvar DetailHeaderIndentCellRenderer =\n/** @class */\nfunction (_super) {\n  __extends(DetailHeaderIndentCellRenderer, _super);\n\n  function DetailHeaderIndentCellRenderer() {\n    var _this = _super !== null && _super.apply(this, arguments) || this;\n\n    _this.element = _this.parent.createElement('TH', {\n      className: 'e-detailheadercell'\n    });\n    return _this;\n  }\n  /**\n   * Function to render the detail indent cell\n   * @param  {Cell} cell\n   * @param  {Object} data\n   */\n\n\n  DetailHeaderIndentCellRenderer.prototype.render = function (cell, data) {\n    var node = this.element.cloneNode();\n    node.appendChild(this.parent.createElement('div', {\n      className: 'e-emptycell'\n    }));\n    return node;\n  };\n\n  return DetailHeaderIndentCellRenderer;\n}(CellRenderer);\n\nexport { DetailHeaderIndentCellRenderer };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\n/**\n * ExpandCellRenderer class which responsible for building group expand cell.\n * @hidden\n */\n\nvar DetailExpandCellRenderer =\n/** @class */\nfunction (_super) {\n  __extends(DetailExpandCellRenderer, _super);\n\n  function DetailExpandCellRenderer() {\n    var _this = _super !== null && _super.apply(this, arguments) || this;\n\n    _this.element = _this.parent.createElement('TD', {\n      className: 'e-detailrowcollapse',\n      attrs: {\n        'aria-expanded': 'false',\n        role: 'gridcell',\n        tabindex: '-1'\n      }\n    });\n    return _this;\n  }\n  /**\n   * Function to render the detail expand cell\n   */\n\n\n  DetailExpandCellRenderer.prototype.render = function (cell, data, attributes) {\n    var node = this.element.cloneNode();\n\n    if (attributes && !isNullOrUndefined(attributes['class'])) {\n      node.className = '';\n      node.className = attributes['class'];\n      node.appendChild(this.parent.createElement('div', {\n        className: 'e-icons e-dtdiagonaldown e-icon-gdownarrow'\n      }));\n    } else {\n      node.appendChild(this.parent.createElement('div', {\n        className: 'e-icons e-dtdiagonalright e-icon-grightarrow'\n      }));\n    }\n\n    return node;\n  };\n\n  return DetailExpandCellRenderer;\n}(CellRenderer);\n\nexport { DetailExpandCellRenderer };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nimport { CellRenderer } from './cell-renderer';\n/**\n * ExpandCellRenderer class which responsible for building group expand cell.\n * @hidden\n */\n\nvar RowDragDropRenderer =\n/** @class */\nfunction (_super) {\n  __extends(RowDragDropRenderer, _super);\n\n  function RowDragDropRenderer() {\n    var _this = _super !== null && _super.apply(this, arguments) || this;\n\n    _this.element = _this.parent.createElement('TD', {\n      className: 'e-rowdragdrop',\n      attrs: {\n        role: 'gridcell',\n        tabindex: '-1'\n      }\n    });\n    return _this;\n  }\n  /**\n   * Function to render the detail expand cell\n   */\n\n\n  RowDragDropRenderer.prototype.render = function (cell, data) {\n    var nodeElement = this.element.cloneNode();\n    nodeElement.appendChild(this.parent.createElement('div', {\n      className: 'e-icons e-rowcelldrag e-dtdiagonalright e-icon-rowdragicon'\n    }));\n\n    if (cell.isSelected) {\n      nodeElement.classList.add('e-selectionbackground');\n      nodeElement.classList.add('e-active');\n    }\n\n    return nodeElement;\n  };\n\n  return RowDragDropRenderer;\n}(CellRenderer);\n\nexport { RowDragDropRenderer };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nimport { createElement } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\n/**\n * DetailHeaderIndentCellRenderer class which responsible for building detail header indent cell.\n * @hidden\n */\n\nvar RowDragDropHeaderRenderer =\n/** @class */\nfunction (_super) {\n  __extends(RowDragDropHeaderRenderer, _super);\n\n  function RowDragDropHeaderRenderer() {\n    var _this = _super !== null && _super.apply(this, arguments) || this;\n\n    _this.element = _this.parent.createElement('TH', {\n      className: 'e-rowdragheader'\n    });\n    return _this;\n  }\n  /**\n   * Function to render the detail indent cell\n   * @param  {Cell} cell\n   * @param  {Object} data\n   */\n\n\n  RowDragDropHeaderRenderer.prototype.render = function (cell, data) {\n    var node = this.element.cloneNode();\n    node.appendChild(createElement('div', {\n      className: 'e-emptycell'\n    }));\n    return node;\n  };\n\n  return RowDragDropHeaderRenderer;\n}(CellRenderer);\n\nexport { RowDragDropHeaderRenderer };","import { remove, resetBlazorTemplate, blazorTemplates } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Deferred, Predicate, DataUtil } from '@syncfusion/ej2-data';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { RenderType, CellType } from '../base/enum';\nimport { Data } from '../actions/data';\nimport { Column } from '../models/column';\nimport { Row } from '../models/row';\nimport { Cell } from '../models/cell';\nimport * as events from '../base/constant';\nimport { prepareColumns, setFormatter, isGroupAdaptive, getDatePredicate, getObject } from '../base/util';\nimport { ContentRender } from '../renderer/content-renderer';\nimport { HeaderRender } from '../renderer/header-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { HeaderCellRenderer } from '../renderer/header-cell-renderer';\nimport { StackedHeaderCellRenderer } from '../renderer/stacked-cell-renderer';\nimport { IndentCellRenderer } from '../renderer/indent-cell-renderer';\nimport { GroupCaptionCellRenderer, GroupCaptionEmptyCellRenderer } from '../renderer/caption-cell-renderer';\nimport { ExpandCellRenderer } from '../renderer/expand-cell-renderer';\nimport { HeaderIndentCellRenderer } from '../renderer/header-indent-renderer';\nimport { DetailHeaderIndentCellRenderer } from '../renderer/detail-header-indent-renderer';\nimport { DetailExpandCellRenderer } from '../renderer/detail-expand-cell-renderer';\nimport { RowDragDropRenderer } from './row-drag-drop-renderer';\nimport { RowDragDropHeaderRenderer } from '../renderer/row-drag-header-indent-render';\nimport * as literals from '../base/string-literals';\n/**\n * Content module is used to render grid content\n * @hidden\n */\n\nvar Render =\n/** @class */\nfunction () {\n  /**\n   * Constructor for render module\n   */\n  function Render(parent, locator) {\n    this.emptyGrid = false;\n    this.counter = 0;\n    this.parent = parent;\n    this.locator = locator;\n    this.data = new Data(parent, locator);\n    this.l10n = locator.getService('localization');\n    this.ariaService = this.locator.getService('ariaService');\n    this.renderer = this.locator.getService('rendererFactory');\n    this.addEventListener();\n  }\n  /**\n   * To initialize grid header, content and footer rendering\n   */\n\n\n  Render.prototype.render = function () {\n    var gObj = this.parent;\n    var isServerRendered = 'isServerRendered';\n    this.headerRenderer = this.renderer.getRenderer(RenderType.Header);\n    this.contentRenderer = this.renderer.getRenderer(RenderType.Content);\n    this.headerRenderer.renderPanel();\n    this.contentRenderer.renderPanel();\n\n    if (gObj.getColumns().length) {\n      this.isLayoutRendered = true;\n      this.headerRenderer.renderTable();\n      this.contentRenderer.renderTable();\n      this.emptyRow(false);\n    }\n\n    this.parent.scrollModule.setWidth();\n    this.parent.scrollModule.setHeight();\n\n    if (this.parent.height !== 'auto') {\n      this.parent.scrollModule.setPadding();\n    }\n\n    this.refreshDataManager();\n  };\n  /**\n   * Refresh the entire Grid.\n   * @return {void}\n   */\n\n\n  Render.prototype.refresh = function (e) {\n    var _this = this;\n\n    if (e === void 0) {\n      e = {\n        requestType: 'refresh'\n      };\n    }\n\n    var gObj = this.parent;\n    var preventUpdate = 'preventUpdate';\n    gObj.notify(e.requestType + \"-begin\", e);\n    var tempPreventUpdate = this.parent[preventUpdate];\n    gObj.trigger(events.actionBegin, e, function (args) {\n      if (args === void 0) {\n        args = {\n          requestType: 'refresh'\n        };\n      }\n\n      if (args.cancel) {\n        gObj.notify(events.cancelBegin, args);\n        return;\n      }\n\n      if (args.requestType === 'delete' && gObj.allowPaging) {\n        var dataLength = args.data.length;\n        var count = gObj.pageSettings.totalRecordsCount - dataLength;\n        var currentViewData = gObj.getCurrentViewRecords().length;\n\n        if (!(currentViewData - dataLength) && count && (gObj.pageSettings.currentPage - 1) * gObj.pageSettings.pageSize == count) {\n          gObj.prevPageMoving = true;\n          gObj.setProperties({\n            pageSettings: {\n              totalRecordsCount: count,\n              currentPage: Math.ceil(count / gObj.pageSettings.pageSize)\n            }\n          }, true);\n          gObj.pagerModule.pagerObj.totalRecordsCount = count;\n        }\n      }\n\n      if (args.requestType === 'reorder' && _this.parent.dataSource && 'result' in _this.parent.dataSource) {\n        _this.contentRenderer.refreshContentRows(args);\n      } else if ((args.requestType === 'paging' || args.requestType === 'columnstate' || args.requestType === 'reorder') && _this.parent.groupSettings.enableLazyLoading && _this.parent.groupSettings.columns.length && _this.parent.contentModule.getGroupCache()[_this.parent.pageSettings.currentPage]) {\n        _this.contentRenderer.refreshContentRows(args);\n      } else {\n        _this.refreshDataManager(args);\n      }\n    });\n  };\n  /**\n   * @hidden\n   */\n\n\n  Render.prototype.resetTemplates = function () {\n    var gObj = this.parent;\n    var gridColumns = gObj.getColumns();\n\n    if (gObj.detailTemplate) {\n      var detailTemplateID = gObj.element.id + 'detailTemplate';\n      blazorTemplates[detailTemplateID] = [];\n      resetBlazorTemplate(detailTemplateID, 'DetailTemplate');\n    }\n\n    if (gObj.groupSettings.captionTemplate) {\n      resetBlazorTemplate(gObj.element.id + 'captionTemplate', 'CaptionTemplate');\n    }\n\n    if (gObj.rowTemplate) {\n      resetBlazorTemplate(gObj.element.id + 'rowTemplate', 'RowTemplate');\n    }\n\n    if (gObj.toolbarTemplate) {\n      resetBlazorTemplate(gObj.element.id + 'toolbarTemplate', 'ToolbarTemplate');\n    }\n\n    if (gObj.pageSettings.template) {\n      resetBlazorTemplate(gObj.element.id + '_template', 'pageSettings');\n    }\n\n    for (var i = 0; i < gridColumns.length; i++) {\n      if (gridColumns[i].template) {\n        blazorTemplates[gObj.element.id + gridColumns[i].uid] = [];\n        resetBlazorTemplate(gObj.element.id + gridColumns[i].uid, 'Template');\n      }\n\n      if (gridColumns[i].headerTemplate) {\n        resetBlazorTemplate(gObj.element.id + gridColumns[i].uid + 'headerTemplate', 'HeaderTemplate');\n      }\n\n      if (gridColumns[i].filterTemplate) {\n        resetBlazorTemplate(gObj.element.id + gridColumns[i].uid + 'filterTemplate', 'FilterTemplate');\n      }\n    }\n\n    var guid = 'guid';\n\n    for (var k = 0; k < gObj.aggregates.length; k++) {\n      for (var j = 0; j < gObj.aggregates[k].columns.length; j++) {\n        if (gObj.aggregates[k].columns[j].footerTemplate) {\n          var tempID = gObj.element.id + gObj.aggregates[k].columns[j][guid] + 'footerTemplate';\n          resetBlazorTemplate(tempID, 'FooterTemplate');\n        }\n\n        if (gObj.aggregates[k].columns[j].groupFooterTemplate) {\n          var tempID = gObj.element.id + gObj.aggregates[k].columns[j][guid] + 'groupFooterTemplate';\n          resetBlazorTemplate(tempID, 'GroupFooterTemplate');\n        }\n\n        if (gObj.aggregates[k].columns[j].groupCaptionTemplate) {\n          var tempID = gObj.element.id + gObj.aggregates[k].columns[j][guid] + 'groupCaptionTemplate';\n          resetBlazorTemplate(tempID, 'GroupCaptionTemplate');\n        }\n      }\n    }\n  };\n\n  Render.prototype.refreshComplete = function (e) {\n    this.parent.trigger(events.actionComplete, e);\n  };\n  /**\n   * The function is used to refresh the dataManager\n   * @return {void}\n   */\n\n\n  Render.prototype.refreshDataManager = function (args) {\n    var _this = this;\n\n    if (args === void 0) {\n      args = {};\n    }\n\n    if (args.requestType !== 'virtualscroll') {\n      this.parent.showSpinner();\n    }\n\n    this.parent.notify(events.resetInfiniteBlocks, args);\n    this.emptyGrid = false;\n    var dataManager;\n    var isFActon = this.isNeedForeignAction();\n    this.ariaService.setBusy(this.parent.getContent().querySelector('.' + literals.content), true);\n\n    if (isFActon) {\n      var deffered = new Deferred();\n      dataManager = this.getFData(deffered, args);\n    }\n\n    if (!dataManager) {\n      dataManager = this.data.getData(args, this.data.generateQuery().requiresCount());\n    } else {\n      dataManager = dataManager.then(function (e) {\n        var query = _this.data.generateQuery().requiresCount();\n\n        if (_this.emptyGrid) {\n          var def = new Deferred();\n          def.resolve({\n            result: [],\n            count: 0\n          });\n          return def.promise;\n        }\n\n        return _this.data.getData(args, query);\n      });\n    }\n\n    if (this.parent.getForeignKeyColumns().length && (!isFActon || this.parent.searchSettings.key.length)) {\n      var deffered_1 = new Deferred();\n      dataManager = dataManager.then(function (e) {\n        _this.parent.notify(events.getForeignKeyData, {\n          dataManager: dataManager,\n          result: e,\n          promise: deffered_1,\n          action: args\n        });\n\n        return deffered_1.promise;\n      });\n    }\n\n    if (this.parent.groupSettings.disablePageWiseAggregates && this.parent.groupSettings.columns.length) {\n      dataManager = dataManager.then(function (e) {\n        return _this.validateGroupRecords(e);\n      });\n    }\n\n    dataManager.then(function (e) {\n      return _this.dataManagerSuccess(e, args);\n    }).catch(function (e) {\n      return _this.dataManagerFailure(e, args);\n    });\n  };\n\n  Render.prototype.getFData = function (deferred, args) {\n    this.parent.notify(events.getForeignKeyData, {\n      isComplex: true,\n      promise: deferred,\n      action: args\n    });\n    return deferred.promise;\n  };\n\n  Render.prototype.isNeedForeignAction = function () {\n    var gObj = this.parent;\n    return !!(gObj.allowFiltering && gObj.filterSettings.columns.length || gObj.searchSettings.key.length) && this.foreignKey(this.parent.getForeignKeyColumns());\n  };\n\n  Render.prototype.foreignKey = function (columns) {\n    var _this = this;\n\n    return columns.some(function (col) {\n      var fbool = false;\n      fbool = _this.parent.filterSettings.columns.some(function (value) {\n        return col.uid === value.uid;\n      });\n      return !!(fbool || _this.parent.searchSettings.key.length);\n    });\n  };\n\n  Render.prototype.sendBulkRequest = function (args) {\n    var _this = this;\n\n    args.requestType = 'batchsave';\n    var promise = this.data.saveChanges(args.changes, this.parent.getPrimaryKeyFieldNames()[0], args.original);\n    var query = this.data.generateQuery().requiresCount();\n\n    if (this.data.dataManager.dataSource.offline) {\n      this.refreshDataManager({\n        requestType: 'batchsave'\n      });\n      return;\n    } else {\n      promise.then(function (e) {\n        _this.data.getData(args, query).then(function (e) {\n          return _this.dmSuccess(e, args);\n        }).catch(function (e) {\n          return _this.dmFailure(e, args);\n        });\n      }).catch(function (e) {\n        return _this.dmFailure(e, args);\n      });\n    }\n  };\n\n  Render.prototype.dmSuccess = function (e, args) {\n    this.dataManagerSuccess(e, args);\n  };\n\n  Render.prototype.dmFailure = function (e, args) {\n    this.dataManagerFailure(e, args);\n  };\n  /**\n   * Render empty row to Grid which is used at the time to represent to no records.\n   * @return {void}\n   * @hidden\n   */\n\n\n  Render.prototype.renderEmptyRow = function () {\n    this.emptyRow(true);\n  };\n\n  Render.prototype.emptyRow = function (isTrigger) {\n    var gObj = this.parent;\n    var tbody = this.contentRenderer.getTable().querySelector(literals.tbody);\n    var tr;\n\n    if (!isNullOrUndefined(tbody)) {\n      remove(tbody);\n    }\n\n    tbody = this.parent.createElement(literals.tbody);\n    var spanCount = 0;\n\n    if (gObj.detailTemplate || gObj.childGrid) {\n      ++spanCount;\n    }\n\n    tr = this.parent.createElement('tr', {\n      className: 'e-emptyrow'\n    });\n    tr.appendChild(this.parent.createElement('td', {\n      innerHTML: this.l10n.getConstant('EmptyRecord'),\n      attrs: {\n        colspan: (gObj.getVisibleColumns().length + spanCount).toString()\n      }\n    }));\n    tbody.appendChild(tr);\n    this.contentRenderer.renderEmpty(tbody);\n\n    if (isTrigger) {\n      this.parent.trigger(events.dataBound, {});\n      this.parent.notify(events.onEmpty, {\n        rows: [new Row({\n          isDataRow: true,\n          cells: [new Cell({\n            isDataCell: true,\n            visible: true\n          })]\n        })]\n      });\n    }\n  };\n\n  Render.prototype.dynamicColumnChange = function () {\n    if (this.parent.getCurrentViewRecords().length) {\n      this.updateColumnType(this.parent.getCurrentViewRecords()[0]);\n    }\n  };\n\n  Render.prototype.updateColumnType = function (record) {\n    var columns = this.parent.getColumns();\n    var value;\n    var cFormat = 'customFormat';\n    var equalTo = 'equalTo';\n    var data = record && record.items ? record.items[0] : record;\n    var fmtr = this.locator.getService('valueFormatter');\n\n    for (var i = 0, len = columns.length; i < len; i++) {\n      value = getObject(columns[i].field || '', data);\n\n      if (!isNullOrUndefined(columns[i][cFormat])) {\n        columns[i].format = columns[i][cFormat];\n      }\n\n      if (!isNullOrUndefined(columns[i].validationRules) && !isNullOrUndefined(columns[i].validationRules[equalTo])) {\n        columns[i].validationRules[equalTo][0] = this.parent.element.id + columns[i].validationRules[equalTo][0];\n      }\n\n      if (columns[i].isForeignColumn() && columns[i].columnData) {\n        value = getObject(columns[i].foreignKeyValue || '', columns[i].columnData[0]);\n      }\n\n      if (!isNullOrUndefined(value)) {\n        this.isColTypeDef = true;\n\n        if (!columns[i].type) {\n          columns[i].type = value.getDay ? value.getHours() > 0 || value.getMinutes() > 0 || value.getSeconds() > 0 || value.getMilliseconds() > 0 ? 'datetime' : 'date' : typeof value;\n        }\n      } else {\n        columns[i].type = columns[i].type || null;\n      }\n\n      var valueFormatter = new ValueFormatter();\n\n      if (columns[i].format && (columns[i].format.skeleton || columns[i].format.format)) {\n        columns[i].setFormatter(valueFormatter.getFormatFunction(extend({}, columns[i].format)));\n        columns[i].setParser(valueFormatter.getParserFunction(columns[i].format));\n      }\n\n      if (typeof columns[i].format === 'string') {\n        var isServerRendered = 'isServerRendered';\n        var isServerDateMap = this.parent[isServerRendered] || this.parent.printModule.isPrintGrid();\n        setFormatter(this.locator, columns[i], isServerDateMap);\n      } else if (!columns[i].format && columns[i].type === 'number') {\n        columns[i].setParser(fmtr.getParserFunction({\n          format: 'n2'\n        }));\n      }\n    }\n  };\n  /** @hidden */\n  // tslint:disable-next-line:max-func-body-length\n\n\n  Render.prototype.dataManagerSuccess = function (e, args) {\n    var _this = this;\n\n    var gObj = this.parent;\n    this.contentRenderer = this.renderer.getRenderer(RenderType.Content);\n    this.headerRenderer = this.renderer.getRenderer(RenderType.Header);\n    e.actionArgs = args;\n    var isInfiniteDelete = this.parent.enableInfiniteScrolling && !this.parent.infiniteScrollSettings.enableCache && (args.requestType === 'delete' || args.requestType === 'save' && this.parent.infiniteScrollModule.requestType === 'add'); // tslint:disable-next-line:max-func-body-length\n\n    gObj.trigger(events.beforeDataBound, e, function (dataArgs) {\n      if (dataArgs.cancel) {\n        return;\n      }\n\n      dataArgs.result = isNullOrUndefined(dataArgs.result) ? [] : dataArgs.result;\n      var len = Object.keys(dataArgs.result).length;\n\n      if (_this.parent.isDestroyed) {\n        return;\n      }\n\n      if (!gObj.getColumns().length && !len && !(gObj.columns.length && gObj.columns[0] instanceof Column)) {\n        gObj.hideSpinner();\n        return;\n      }\n\n      if (_this.isInfiniteEnd(args) && !len) {\n        _this.parent.notify(events.infiniteEditHandler, {\n          e: args,\n          result: e.result,\n          count: e.count,\n          agg: e.aggregates\n        });\n\n        return;\n      }\n\n      _this.parent.isEdit = false;\n\n      _this.parent.notify(events.editReset, {});\n\n      _this.parent.notify(events.tooltipDestroy, {});\n\n      _this.contentRenderer.prevCurrentView = _this.parent.currentViewData.slice();\n      gObj.currentViewData = dataArgs.result;\n      gObj.notify(events.refreshInfiniteCurrentViewData, {\n        args: args,\n        data: dataArgs.result\n      });\n\n      if (!len && dataArgs.count && gObj.allowPaging && args && args.requestType !== 'delete') {\n        if (_this.parent.groupSettings.enableLazyLoading && (args.requestType === 'grouping' || args.requestType === 'ungrouping')) {\n          _this.parent.notify(events.groupComplete, args);\n        }\n\n        gObj.prevPageMoving = true;\n        gObj.pageSettings.totalRecordsCount = dataArgs.count;\n\n        if (args.requestType !== 'paging') {\n          gObj.pageSettings.currentPage = Math.ceil(dataArgs.count / gObj.pageSettings.pageSize);\n        }\n\n        gObj.dataBind();\n        return;\n      }\n\n      if ((!gObj.getColumns().length && len || !_this.isLayoutRendered) && !isGroupAdaptive(gObj)) {\n        _this.updatesOnInitialRender(dataArgs);\n      }\n\n      if (!_this.isColTypeDef && gObj.getCurrentViewRecords()) {\n        if (_this.data.dataManager.dataSource.offline && gObj.dataSource && gObj.dataSource.length) {\n          _this.updateColumnType(gObj.dataSource[0]);\n        } else {\n          _this.updateColumnType(gObj.getCurrentViewRecords()[0]);\n        }\n      }\n\n      if (!_this.parent.isInitialLoad && _this.parent.groupSettings.disablePageWiseAggregates && !_this.parent.groupSettings.columns.length) {\n        dataArgs.result = _this.parent.dataSource instanceof Array ? _this.parent.dataSource : _this.parent.currentViewData;\n      }\n\n      _this.parent.notify(events.dataReady, extend({\n        count: dataArgs.count,\n        result: dataArgs.result,\n        aggregates: dataArgs.aggregates\n      }, args));\n\n      if ((gObj.groupSettings.columns.length || args && args.requestType === 'ungrouping') && args && args.requestType !== 'filtering') {\n        _this.headerRenderer.refreshUI();\n      }\n\n      if (len) {\n        if (isGroupAdaptive(gObj)) {\n          var content = 'content';\n          args.scrollTop = {\n            top: _this.contentRenderer[content].scrollTop\n          };\n        }\n\n        if (!isInfiniteDelete) {\n          if (_this.parent.enableImmutableMode) {\n            _this.contentRenderer.immutableModeRendering(args);\n          } else {\n            _this.contentRenderer.refreshContentRows(args);\n          }\n        } else {\n          _this.parent.notify(events.infiniteEditHandler, {\n            e: args,\n            result: e.result,\n            count: e.count,\n            agg: e.aggregates\n          });\n        }\n      } else {\n        if (!gObj.getColumns().length) {\n          gObj.element.innerHTML = '';\n          alert(_this.l10n.getConstant('EmptyDataSourceError')); //ToDO: change this alert as dialog\n\n          return;\n        }\n\n        _this.contentRenderer.setRowElements([]);\n\n        _this.contentRenderer.setRowObjects([]);\n\n        _this.ariaService.setBusy(_this.parent.getContent().querySelector('.' + literals.content), false);\n\n        _this.renderEmptyRow();\n\n        if (args) {\n          var action = (args.requestType || '').toLowerCase() + '-complete';\n\n          _this.parent.notify(action, args);\n\n          if (args.requestType === 'batchsave') {\n            args.cancel = false;\n            args.rows = [];\n            args.isFrozen = _this.parent.getFrozenColumns() !== 0 && !args.isFrozen;\n\n            _this.parent.trigger(events.actionComplete, args);\n          }\n        }\n\n        _this.parent.hideSpinner();\n      }\n\n      _this.parent.notify(events.toolbarRefresh, {});\n\n      _this.setRowCount(_this.parent.getCurrentViewRecords().length);\n\n      _this.parent.getDataModule().isQueryInvokedFromData = false;\n    });\n  };\n  /** @hidden */\n\n\n  Render.prototype.dataManagerFailure = function (e, args) {\n    this.ariaService.setOptions(this.parent.getContent().querySelector('.' + literals.content), {\n      busy: false,\n      invalid: true\n    });\n    this.setRowCount(1);\n    this.parent.trigger(events.actionFailure, {\n      error: e\n    });\n    this.parent.hideSpinner();\n\n    if (args.requestType === 'save' || args.requestType === 'delete' || args.name === 'bulk-save') {\n      return;\n    }\n\n    this.parent.currentViewData = [];\n    this.renderEmptyRow();\n    this.parent.log('actionfailure', {\n      error: e\n    });\n  };\n\n  Render.prototype.setRowCount = function (dataRowCount) {\n    var gObj = this.parent;\n    this.ariaService.setOptions(this.parent.getHeaderTable(), {\n      rowcount: dataRowCount ? dataRowCount.toString() : '1'\n    });\n  };\n\n  Render.prototype.isInfiniteEnd = function (args) {\n    return this.parent.enableInfiniteScrolling && !this.parent.infiniteScrollSettings.enableCache && args.requestType === 'delete';\n  };\n\n  Render.prototype.updatesOnInitialRender = function (e) {\n    this.isLayoutRendered = true;\n\n    if (this.parent.columns.length < 1) {\n      this.buildColumns(e.result[0]);\n    }\n\n    prepareColumns(this.parent.columns, null, this.parent);\n    this.headerRenderer.renderTable();\n    this.contentRenderer.renderTable();\n    this.parent.isAutoGen = true;\n    this.parent.notify(events.autoCol, {});\n  };\n\n  Render.prototype.iterateComplexColumns = function (obj, field, split) {\n    var keys = Object.keys(obj);\n\n    for (var i = 0; i < keys.length; i++) {\n      var childKeys = typeof obj[keys[i]] === 'object' && obj[keys[i]] && !(obj[keys[i]] instanceof Date) ? Object.keys(obj[keys[i]]) : [];\n\n      if (childKeys.length) {\n        this.iterateComplexColumns(obj[keys[i]], field + (keys[i] + '.'), split);\n      } else {\n        split[this.counter] = field + keys[i];\n        this.counter++;\n      }\n    }\n  };\n\n  Render.prototype.buildColumns = function (record) {\n    var cols = [];\n    var complexCols = {};\n    this.iterateComplexColumns(record, '', complexCols);\n    var columns = Object.keys(complexCols).filter(function (e) {\n      return complexCols[e] !== 'BlazId';\n    }).map(function (field) {\n      return complexCols[field];\n    });\n\n    for (var i = 0, len = columns.length; i < len; i++) {\n      cols[i] = {\n        'field': columns[i]\n      };\n\n      if (this.parent.enableColumnVirtualization) {\n        cols[i].width = !isNullOrUndefined(cols[i].width) ? cols[i].width : 200;\n      }\n    }\n\n    this.parent.setProperties({\n      'columns': cols\n    }, true);\n  };\n\n  Render.prototype.instantiateRenderer = function () {\n    this.renderer.addRenderer(RenderType.Header, new HeaderRender(this.parent, this.locator));\n    this.renderer.addRenderer(RenderType.Content, new ContentRender(this.parent, this.locator));\n    var cellrender = this.locator.getService('cellRendererFactory');\n    cellrender.addCellRenderer(CellType.Header, new HeaderCellRenderer(this.parent, this.locator));\n    cellrender.addCellRenderer(CellType.Data, new CellRenderer(this.parent, this.locator));\n    cellrender.addCellRenderer(CellType.StackedHeader, new StackedHeaderCellRenderer(this.parent, this.locator));\n    cellrender.addCellRenderer(CellType.Indent, new IndentCellRenderer(this.parent, this.locator));\n    cellrender.addCellRenderer(CellType.GroupCaption, new GroupCaptionCellRenderer(this.parent, this.locator));\n    cellrender.addCellRenderer(CellType.GroupCaptionEmpty, new GroupCaptionEmptyCellRenderer(this.parent, this.locator));\n    cellrender.addCellRenderer(CellType.Expand, new ExpandCellRenderer(this.parent, this.locator));\n    cellrender.addCellRenderer(CellType.HeaderIndent, new HeaderIndentCellRenderer(this.parent, this.locator));\n    cellrender.addCellRenderer(CellType.StackedHeader, new StackedHeaderCellRenderer(this.parent, this.locator));\n    cellrender.addCellRenderer(CellType.DetailHeader, new DetailHeaderIndentCellRenderer(this.parent, this.locator));\n    cellrender.addCellRenderer(CellType.RowDragHIcon, new RowDragDropHeaderRenderer(this.parent, this.locator));\n    cellrender.addCellRenderer(CellType.DetailExpand, new DetailExpandCellRenderer(this.parent, this.locator));\n    cellrender.addCellRenderer(CellType.DetailFooterIntent, new IndentCellRenderer(this.parent, this.locator));\n    cellrender.addCellRenderer(CellType.RowDragIcon, new RowDragDropRenderer(this.parent, this.locator));\n  };\n\n  Render.prototype.addEventListener = function () {\n    var _this = this;\n\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n    this.parent.on('refreshdataSource', this.dataManagerSuccess, this);\n    this.parent.on(events.modelChanged, this.refresh, this);\n    this.parent.on(events.refreshComplete, this.refreshComplete, this);\n    this.parent.on(events.bulkSave, this.sendBulkRequest, this);\n    this.parent.on(events.showEmptyGrid, function () {\n      _this.emptyGrid = true;\n    }, this);\n    this.parent.on(events.autoCol, this.dynamicColumnChange, this);\n  };\n  /** @hidden */\n\n\n  Render.prototype.validateGroupRecords = function (e) {\n    var _this = this;\n\n    var index = e.result.length - 1;\n\n    if (index < 0) {\n      return Promise.resolve(e);\n    }\n\n    var group0 = e.result[0];\n    var groupN = e.result[index];\n    var predicate = [];\n\n    var addWhere = function addWhere(input) {\n      var groups = [group0, groupN];\n\n      for (var i = 0; i < groups.length; i++) {\n        predicate.push(new Predicate('field', '==', groups[i].field).and(_this.getPredicate('key', 'equal', groups[i].key)));\n      }\n\n      input.where(Predicate.or(predicate));\n    };\n\n    var query = new Query();\n    addWhere(query);\n    var curDm = new DataManager(e.result);\n    var curFilter = curDm.executeLocal(query);\n    var newQuery = this.data.generateQuery(true);\n    var rPredicate = [];\n\n    if (this.data.isRemote()) {\n      var groups = [group0, groupN];\n\n      for (var i = 0; i < groups.length; i++) {\n        rPredicate.push(this.getPredicate(groups[i].field, 'equal', groups[i].key));\n      }\n\n      newQuery.where(Predicate.or(rPredicate));\n    } else {\n      addWhere(newQuery);\n    }\n\n    var deferred = new Deferred();\n    this.data.getData({}, newQuery).then(function (r) {\n      _this.updateGroupInfo(curFilter, r.result);\n\n      deferred.resolve(e);\n    }).catch(function (e) {\n      return deferred.reject(e);\n    });\n    return deferred.promise;\n  };\n\n  Render.prototype.getPredicate = function (key, operator, value) {\n    if (value instanceof Date) {\n      return getDatePredicate({\n        field: key,\n        operator: operator,\n        value: value\n      });\n    }\n\n    return new Predicate(key, operator, value);\n  };\n\n  Render.prototype.updateGroupInfo = function (current, untouched) {\n    var dm = new DataManager(untouched);\n    var elements = current;\n\n    for (var i = 0; i < elements.length; i++) {\n      var uGroup = dm.executeLocal(new Query().where(new Predicate('field', '==', elements[i].field).and(this.getPredicate('key', 'equal', elements[i].key))))[0];\n      elements[i].count = uGroup.count;\n      var itemGroup = elements[i].items;\n      var uGroupItem = uGroup.items;\n\n      if (itemGroup.GroupGuid) {\n        elements[i].items = this.updateGroupInfo(elements[i].items, uGroup.items);\n      }\n\n      var rows = this.parent.aggregates;\n\n      for (var j = 0; j < rows.length; j++) {\n        var row = rows[j];\n\n        for (var k = 0; k < row.columns.length; k++) {\n          var types = row.columns[k].type instanceof Array ? row.columns[k].type : [row.columns[k].type];\n\n          for (var l = 0; l < types.length; l++) {\n            var key = row.columns[k].field + ' - ' + types[l].toLowerCase();\n            var data = itemGroup.level ? uGroupItem.records : uGroup.items;\n            var context = this.parent;\n\n            if (types[l] === 'Custom') {\n              var data_1 = itemGroup.level ? uGroupItem : uGroup;\n              elements[i].aggregates[key] = row.columns[k].customAggregate ? row.columns[k].customAggregate.call(context, data_1, row.columns[k]) : '';\n            } else {\n              elements[i].aggregates[key] = DataUtil.aggregates[types[l].toLowerCase()](data, row.columns[k].field);\n            }\n          }\n        }\n      }\n    }\n\n    return current;\n  };\n\n  return Render;\n}();\n\nexport { Render };","import { isNullOrUndefined, extend, addClass } from '@syncfusion/ej2-base';\nimport { attributes as addAttributes } from '@syncfusion/ej2-base';\nimport { rowDataBound, queryCellInfo } from '../base/constant';\nimport { setStyleAndAttributes, getObject, extendObjWithFn } from '../base/util';\nimport { CellType } from '../base/enum';\nimport { CellMergeRender } from './cell-merge-renderer';\nimport * as literals from '../base/string-literals';\n/**\n * RowRenderer class which responsible for building row content.\n * @hidden\n */\n\nvar RowRenderer =\n/** @class */\nfunction () {\n  function RowRenderer(serviceLocator, cellType, parent) {\n    this.isSpan = false;\n    this.cellType = cellType;\n    this.serviceLocator = serviceLocator;\n    this.parent = parent;\n    this.element = this.parent.createElement('tr', {\n      attrs: {\n        role: 'row'\n      }\n    });\n  }\n  /**\n   * Function to render the row content based on Column[] and data.\n   * @param  {Column[]} columns\n   * @param  {Object} data?\n   * @param  {{[x:string]:Object}} attributes?\n   * @param  {string} rowTemplate?\n   */\n\n\n  RowRenderer.prototype.render = function (row, columns, attributes, rowTemplate, cloneNode) {\n    return this.refreshRow(row, columns, attributes, rowTemplate, cloneNode);\n  };\n  /**\n   * Function to refresh the row content based on Column[] and data.\n   * @param  {Column[]} columns\n   * @param  {Object} data?\n   * @param  {{[x:string]:Object}} attributes?\n   * @param  {string} rowTemplate?\n   */\n\n\n  RowRenderer.prototype.refresh = function (row, columns, isChanged, attributes, rowTemplate) {\n    if (isChanged) {\n      row.data = extendObjWithFn({}, row.changes);\n      this.refreshMergeCells(row);\n    }\n\n    var node = this.parent.element.querySelector('[data-uid=' + row.uid + ']');\n    var tr = this.refreshRow(row, columns, attributes, rowTemplate, null, isChanged);\n    var cells = [].slice.call(tr.cells);\n    node.innerHTML = '';\n\n    for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n      var cell = cells_1[_i];\n      node.appendChild(cell);\n    }\n  }; // tslint:disable-next-line:max-func-body-length\n\n\n  RowRenderer.prototype.refreshRow = function (row, columns, attributes, rowTemplate, cloneNode, isEdit) {\n    var tr = !isNullOrUndefined(cloneNode) ? cloneNode : this.element.cloneNode();\n    var rowArgs = {\n      data: row.data\n    };\n    var cellArgs = {\n      data: row.data\n    };\n    var chekBoxEnable = this.parent.getColumns().filter(function (col) {\n      return col.type === 'checkbox' && col.field;\n    })[0];\n    var value = false;\n\n    if (chekBoxEnable) {\n      value = getObject(chekBoxEnable.field, rowArgs.data);\n    }\n\n    var selIndex = this.parent.getSelectedRowIndexes();\n\n    if (row.isDataRow) {\n      row.isSelected = selIndex.indexOf(row.index) > -1 || value;\n    }\n\n    if (row.isDataRow && this.parent.isCheckBoxSelection && this.parent.checkAllRows === 'Check' && this.parent.enableVirtualization) {\n      row.isSelected = true;\n\n      if (selIndex.indexOf(row.index) === -1) {\n        selIndex.push(row.index);\n      }\n    }\n\n    this.buildAttributeFromRow(tr, row);\n    addAttributes(tr, extend({}, attributes, {}));\n    setStyleAndAttributes(tr, row.attributes);\n    var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n\n    var _loop_1 = function _loop_1(i, len) {\n      var cell = row.cells[i];\n      cell.isSelected = row.isSelected;\n      cell.isColumnSelected = cell.column.isSelected;\n      var cellRenderer = cellRendererFact.getCellRenderer(row.cells[i].cellType || CellType.Data);\n      var attrs = {\n        'index': !isNullOrUndefined(row.index) ? row.index.toString() : ''\n      };\n\n      if (row.isExpand && row.cells[i].cellType === CellType.DetailExpand) {\n        attrs['class'] = this_1.parent.isPrinting ? 'e-detailrowcollapse' : 'e-detailrowexpand';\n      }\n\n      var td = cellRenderer.render(row.cells[i], row.data, attrs, row.isExpand, isEdit);\n\n      if (row.cells[i].cellType !== CellType.Filter) {\n        if (row.cells[i].cellType === CellType.Data || row.cells[i].cellType === CellType.CommandColumn) {\n          this_1.parent.trigger(queryCellInfo, extend(cellArgs, {\n            cell: td,\n            column: cell.column,\n            colSpan: 1,\n            rowSpan: 1,\n            foreignKeyData: row.cells[i].foreignKeyData,\n            requestType: this_1.parent.requestTypeAction\n          }));\n          var isRowSpanned = false;\n\n          if (row.index > 0 && this_1.isSpan) {\n            var prevRowCells = this_1.parent.groupSettings.columns.length > 0 && !this_1.parent.getRowsObject()[row.index - 1].isDataRow ? this_1.parent.getRowsObject()[row.index].cells : this_1.parent.getRowsObject()[row.index - 1].cells;\n            var uid_1 = 'uid';\n            var prevRowCell = prevRowCells.filter(function (cell) {\n              return cell.column.uid === row.cells[i].column[uid_1];\n            })[0];\n            isRowSpanned = prevRowCell.isRowSpanned ? prevRowCell.isRowSpanned : prevRowCell.rowSpanRange > 1;\n          }\n\n          if (cellArgs.colSpan > 1 || row.cells[i].cellSpan > 1 || cellArgs.rowSpan > 1 || isRowSpanned) {\n            this_1.isSpan = true;\n            var cellMerge = new CellMergeRender(this_1.serviceLocator, this_1.parent);\n            td = cellMerge.render(cellArgs, row, i, td);\n          }\n        }\n\n        if (!row.cells[i].isSpanned) {\n          tr.appendChild(td);\n        }\n      }\n    };\n\n    var this_1 = this;\n\n    for (var i = 0, len = row.cells.length; i < len; i++) {\n      _loop_1(i, len);\n    }\n\n    var args = {\n      row: tr,\n      rowHeight: this.parent.rowHeight\n    };\n\n    if (row.isDataRow) {\n      this.parent.trigger(rowDataBound, extend(rowArgs, args));\n\n      if (this.parent.childGrid || this.parent.isRowDragable() || this.parent.detailTemplate) {\n        var td = tr.querySelectorAll('.e-rowcell:not(.e-hide)')[0];\n\n        if (td) {\n          td.classList.add('e-detailrowvisible');\n        }\n      }\n    }\n\n    if (this.parent.enableVirtualization) {\n      rowArgs.rowHeight = this.parent.rowHeight;\n    }\n\n    if (rowArgs.rowHeight) {\n      tr.style.height = rowArgs.rowHeight + 'px';\n    } else if (this.parent.rowHeight && (tr.querySelector('.e-headercell') || tr.querySelector('.e-groupcaption'))) {\n      tr.style.height = this.parent.rowHeight + 'px';\n    }\n\n    if (row.cssClass) {\n      tr.classList.add(row.cssClass);\n    }\n\n    if (row.lazyLoadCssClass) {\n      tr.classList.add(row.lazyLoadCssClass);\n    }\n\n    var vFTable = this.parent.enableColumnVirtualization && this.parent.frozenColumns !== 0;\n\n    if (!vFTable && this.parent.element.scrollHeight > this.parent.height && this.parent.aggregates.length) {\n      for (var i = 0; i < this.parent.aggregates.length; i++) {\n        var property = 'properties';\n        var column = 'columns';\n\n        if (this.parent.aggregates[i][property][column][0].footerTemplate) {\n          var summarycell = [].slice.call(tr.getElementsByClassName('e-summarycell'));\n\n          if (summarycell.length) {\n            var lastSummaryCell = summarycell[summarycell.length - 1];\n            addClass([lastSummaryCell], ['e-lastsummarycell']);\n            var firstSummaryCell = summarycell[0];\n            addClass([firstSummaryCell], ['e-firstsummarycell']);\n          }\n        }\n      }\n    }\n\n    return tr;\n  };\n\n  RowRenderer.prototype.refreshMergeCells = function (row) {\n    for (var _i = 0, _a = row.cells; _i < _a.length; _i++) {\n      var cell = _a[_i];\n      cell.isSpanned = false;\n    }\n\n    return row;\n  };\n  /**\n   * Function to check and add alternative row css class.\n   * @param  {Element} tr\n   * @param  {{[x:string]:Object}} attr\n   */\n\n\n  RowRenderer.prototype.buildAttributeFromRow = function (tr, row) {\n    var attr = {};\n    var prop = {\n      'rowindex': literals.ariaRowIndex,\n      'dataUID': 'data-uid',\n      'ariaSelected': 'aria-selected'\n    };\n    var classes = [];\n\n    if (row.isDataRow) {\n      classes.push(literals.row);\n    }\n\n    if (row.isAltRow) {\n      classes.push('e-altrow');\n    }\n\n    if (!isNullOrUndefined(row.index)) {\n      attr[prop.rowindex] = row.index;\n    }\n\n    if (row.rowSpan) {\n      attr.rowSpan = row.rowSpan;\n    }\n\n    if (row.uid) {\n      attr[prop.dataUID] = row.uid;\n    }\n\n    if (row.isSelected) {\n      attr[prop.ariaSelected] = true;\n    }\n\n    if (row.visible === false) {\n      classes.push('e-hide');\n    }\n\n    attr.class = classes;\n    setStyleAndAttributes(tr, attr);\n  };\n\n  return RowRenderer;\n}();\n\nexport { RowRenderer };","/**\n * AriaService\n * @hidden\n */\nvar AriaService =\n/** @class */\nfunction () {\n  function AriaService() {}\n\n  AriaService.prototype.setOptions = function (target, options) {\n    var props = Object.keys(options);\n\n    for (var i = 0; i < props.length; i++) {\n      setStateAndProperties(target, config[props[i]], options[props[i]]);\n    }\n  };\n\n  AriaService.prototype.setExpand = function (target, expand) {\n    setStateAndProperties(target, config.expand, expand);\n  };\n\n  AriaService.prototype.setSort = function (target, direction) {\n    setStateAndProperties(target, config.sort, direction, typeof direction === 'boolean');\n  };\n\n  AriaService.prototype.setBusy = function (target, isBusy) {\n    setStateAndProperties(target, config.busy, isBusy);\n    setStateAndProperties(target, config.invalid, null, true);\n  };\n\n  AriaService.prototype.setGrabbed = function (target, isGrabbed, remove) {\n    setStateAndProperties(target, config.grabbed, isGrabbed, remove);\n  };\n\n  AriaService.prototype.setDropTarget = function (target, isTarget) {\n    setStateAndProperties(target, config.dropeffect, 'copy', !isTarget);\n  };\n\n  return AriaService;\n}();\n\nexport { AriaService };\n/**\n * @hidden\n */\n\nfunction setStateAndProperties(target, attribute, value, remove) {\n  if (remove && target) {\n    target.removeAttribute(attribute);\n    return;\n  }\n\n  if (target) {\n    target.setAttribute(attribute, value);\n  }\n}\n\nvar config = {\n  expand: 'aria-expanded',\n  role: 'role',\n  selected: 'aria-selected',\n  multiselectable: 'aria-multiselectable',\n  sort: 'aria-sort',\n  busy: 'aria-busy',\n  invalid: 'aria-invalid',\n  grabbed: 'aria-grabbed',\n  dropeffect: 'aria-dropeffect',\n  haspopup: 'aria-haspopup',\n  level: 'aria-level',\n  colcount: 'aria-colcount',\n  rowcount: 'aria-rowcount'\n};","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\n/**\n * CellRendererFactory\n * @hidden\n */\n\nvar CellRendererFactory =\n/** @class */\nfunction () {\n  function CellRendererFactory() {\n    this.cellRenderMap = {};\n  }\n\n  CellRendererFactory.prototype.addCellRenderer = function (name, type) {\n    name = typeof name === 'string' ? name : getEnumValue(CellType, name);\n\n    if (isNullOrUndefined(this.cellRenderMap[name])) {\n      this.cellRenderMap[name] = type;\n    }\n  };\n\n  CellRendererFactory.prototype.getCellRenderer = function (name) {\n    name = typeof name === 'string' ? name : getEnumValue(CellType, name);\n\n    if (isNullOrUndefined(this.cellRenderMap[name])) {\n      throw \"The cellRenderer \" + name + \" is not found\";\n    } else {\n      return this.cellRenderMap[name];\n    }\n  };\n\n  return CellRendererFactory;\n}();\n\nexport { CellRendererFactory };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nimport { EventHandler, getValue, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, extend, Browser } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport * as event from '../base/constant';\nimport { Row } from '../models/row';\nimport { RowModelGenerator } from './row-model-generator';\nimport { parentsUntil, addRemoveEventListener } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * FocusStrategy class\n * @hidden\n */\n\nvar FocusStrategy =\n/** @class */\nfunction () {\n  function FocusStrategy(parent) {\n    this.currentInfo = {};\n    this.oneTime = true;\n    this.swap = {};\n    this.forget = false;\n    this.skipFocus = true;\n    this.focusByClick = false;\n    this.prevIndexes = {};\n    this.refMatrix = this.refreshMatrix(true);\n    this.actions = ['downArrow', 'upArrow'];\n    this.isVirtualScroll = false;\n    this.parent = parent;\n    this.rowModelGen = new RowModelGenerator(this.parent);\n    this.addEventListener();\n  }\n\n  FocusStrategy.prototype.focusCheck = function (e) {\n    var target = e.target;\n    this.focusByClick = true;\n    this.skipFocus = target.classList.contains('e-grid');\n  };\n\n  FocusStrategy.prototype.onFocus = function () {\n    if (this.parent.isDestroyed || Browser.isDevice || this.parent.enableVirtualization) {\n      return;\n    }\n\n    this.setActive(!this.parent.enableHeaderFocus && this.parent.frozenRows === 0, this.parent.isFrozenGrid());\n\n    if (!this.parent.enableHeaderFocus && !this.parent.getCurrentViewRecords().length && (this.parent.editSettings.mode !== 'Batch' || this.parent.editSettings.mode === 'Batch' && !this.parent.editModule.getBatchChanges()[literals.addedRecords].length)) {\n      this.getContent().matrix.generate(this.rowModelGen.generateRows({\n        rows: [new Row({\n          isDataRow: true\n        })]\n      }), this.getContent().selector, false);\n    }\n\n    var current = this.getContent().matrix.get(0, -1, [0, 1], null, this.getContent().validator());\n    this.getContent().matrix.select(current[0], current[1]);\n\n    if (this.skipFocus) {\n      this.focus();\n      this.skipFocus = false;\n    }\n  };\n\n  FocusStrategy.prototype.passiveFocus = function (e) {\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    if (e.target && e.target.classList.contains('e-detailcell')) {\n      this.currentInfo.skipAction = false;\n      addClass([this.currentInfo.element], ['e-focused', 'e-focus']);\n    }\n  };\n\n  FocusStrategy.prototype.onBlur = function (e) {\n    if (this.parent.isEdit || e && (!e.relatedTarget || closest(e.relatedTarget, '.e-grid'))) {\n      return;\n    }\n\n    this.removeFocus();\n    this.skipFocus = false;\n    this.currentInfo.skipAction = false;\n\n    if (this.getContent().getFocusInfo().elementToFocus) {\n      this.getContent().getFocusInfo().elementToFocus.tabIndex = 0;\n    }\n  };\n\n  FocusStrategy.prototype.onClick = function (e, force) {\n    if (parentsUntil(e.target, 'e-filterbarcell') && e.target.classList.contains('e-input-group-icon')) {\n      return;\n    }\n\n    var isContent = !isNullOrUndefined(closest(e.target, '.' + literals.gridContent));\n    var isHeader = !isNullOrUndefined(closest(e.target, '.' + literals.gridHeader));\n    isContent = isContent && isHeader ? !isContent : isContent;\n    var isFrozen = !isNullOrUndefined(closest(e.target, '.' + literals.frozenContent)) || !isNullOrUndefined(closest(e.target, '.' + literals.frozenHeader));\n    var isFrozenRight = false;\n\n    if (this.parent.getFrozenMode() === literals.leftRight) {\n      isFrozenRight = !isNullOrUndefined(closest(e.target, '.e-frozen-right-content')) || !isNullOrUndefined(closest(e.target, '.e-frozen-right-header'));\n      isFrozen = isFrozen && !isFrozenRight;\n    }\n\n    if (!isContent && isNullOrUndefined(closest(e.target, '.' + literals.gridHeader)) || e.target.classList.contains(literals.content) || !isNullOrUndefined(closest(e.target, '.e-unboundcell'))) {\n      return;\n    }\n\n    this.setActive(isContent, isFrozen, isFrozenRight);\n\n    if (!isContent && isNullOrUndefined(closest(e.target, '.' + literals.gridHeader))) {\n      this.clearOutline();\n      return;\n    }\n\n    var beforeArgs = {\n      cancel: false,\n      byKey: false,\n      byClick: !isNullOrUndefined(e.target),\n      clickArgs: e\n    };\n    this.parent.notify(event.beforeCellFocused, beforeArgs);\n\n    if (beforeArgs.cancel || closest(e.target, '.e-inline-edit')) {\n      return;\n    }\n\n    this.setActive(isContent, isFrozen, isFrozenRight);\n\n    if (this.getContent()) {\n      var returnVal = this.getContent().onClick(e, force);\n\n      if (returnVal === false) {\n        return;\n      }\n\n      this.focus();\n    }\n  };\n\n  FocusStrategy.prototype.onKeyPress = function (e) {\n    if (this.skipOn(e)) {\n      return;\n    }\n\n    this.activeKey = e.action;\n    var beforeArgs = {\n      cancel: false,\n      byKey: true,\n      byClick: false,\n      keyArgs: e\n    };\n    this.parent.notify(event.beforeCellFocused, beforeArgs);\n\n    if (beforeArgs.cancel) {\n      return;\n    }\n\n    var bValue = this.getContent().matrix.current;\n    this.currentInfo.outline = true;\n    var swapInfo = this.getContent().jump(e.action, bValue);\n    this.swap = swapInfo;\n\n    if (swapInfo.swap) {\n      this.setActive(!swapInfo.toHeader, swapInfo.toFrozen, swapInfo.toFrozenRight);\n      this.getContent().matrix.current = this.getContent().getNextCurrent(bValue, swapInfo, this.active, e.action);\n      this.prevIndexes = {};\n    }\n\n    this.setActiveByKey(e.action, this.getContent());\n    var returnVal = this.content.lastIdxCell ? false : this.getContent().onKeyPress(e);\n\n    if (returnVal === false) {\n      this.clearIndicator();\n      return;\n    }\n\n    e.preventDefault();\n    this.focus(e);\n  };\n\n  FocusStrategy.prototype.skipOn = function (e) {\n    var target = e.target;\n\n    if (!target) {\n      return false;\n    }\n\n    if (this.currentInfo.skipAction) {\n      this.clearIndicator();\n      return true;\n    }\n\n    if (['pageUp', 'pageDown', 'altDownArrow'].indexOf(e.action) > -1) {\n      this.clearIndicator();\n      return true;\n    }\n\n    var th = closest(target, 'th') && !closest(target, 'th').tabIndex;\n\n    if (e.target.classList.contains('e-filterbaroperator') && (e.keyCode === 13 || e.keyCode === 27)) {\n      var inputTarget = closest(e.target, '.e-filterbarcell');\n      inputTarget.querySelector('input').focus();\n    }\n\n    if (th && closest(document.activeElement, '.e-filterbarcell') !== null) {\n      this.removeFocus();\n    }\n\n    var filterCell = closest(document.activeElement, '.e-filterbarcell') !== null;\n\n    if (this.parent.enableHeaderFocus && filterCell) {\n      var matrix = this.active.matrix;\n      var current = matrix.current;\n      filterCell = matrix.matrix[current[0]].lastIndexOf(1) !== current[1];\n    }\n\n    return e.action === 'delete' || this.parent.editSettings.mode !== 'Batch' && (this.parent.isEdit || ['insert', 'f2'].indexOf(e.action) > -1) || filterCell || closest(document.activeElement, '#' + this.parent.element.id + '_searchbar') !== null && ['enter', 'leftArrow', 'rightArrow', 'shiftLeft', 'shiftRight', 'ctrlPlusA'].indexOf(e.action) > -1 || closest(target, '.' + literals.gridContent) === null && closest(target, '.' + literals.gridHeader) === null || e.action === 'space' && !target.classList.contains(literals.gridChkBox) && closest(target, '.' + literals.gridChkBox) === null && closest(target, '.e-headerchkcelldiv') === null || closest(target, '.e-filter-popup') !== null;\n  };\n\n  FocusStrategy.prototype.focusVirtualElement = function (e) {\n    var _this = this;\n\n    if (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) {\n      var data = {\n        virtualData: {},\n        isAdd: false,\n        isCancel: false\n      };\n      this.parent.notify(event.getVirtualData, data);\n      var isKeyFocus = this.actions.some(function (value) {\n        return value === _this.activeKey;\n      });\n      var isSelected = this.parent.contentModule ? this.parent.contentModule.selectedRowIndex > -1 : false;\n\n      if (data.isAdd || Object.keys(data.virtualData).length || isKeyFocus || data.isCancel || isSelected) {\n        this.parent.notify(event.resetVirtualFocus, {\n          isCancel: false\n        });\n        data.isCancel = false;\n        this.parent.contentModule.selectedRowIndex = -1;\n\n        if (isKeyFocus) {\n          this.activeKey = this.empty;\n          this.parent.notify('virtaul-key-handler', e);\n        } // tslint:disable-next-line:no-any\n\n\n        this.currentInfo.elementToFocus.focus({\n          preventScroll: true\n        });\n      } else {\n        if (this.isVirtualScroll) {\n          // tslint:disable-next-line:no-any\n          this.currentInfo.elementToFocus.focus({\n            preventScroll: true\n          });\n        } else {\n          this.currentInfo.elementToFocus.focus();\n        }\n      }\n    }\n\n    this.isVirtualScroll = false;\n  };\n\n  FocusStrategy.prototype.getFocusedElement = function () {\n    return this.currentInfo.elementToFocus;\n  };\n\n  FocusStrategy.prototype.getContent = function () {\n    return this.active || this.content;\n  };\n\n  FocusStrategy.prototype.setActive = function (content, isFrozen, isFrozenRight) {\n    this.active = content ? isFrozen ? this.fContent : isFrozenRight ? this.frContent : this.content : isFrozen ? this.fHeader : isFrozenRight ? this.frHeader : this.header;\n  };\n\n  FocusStrategy.prototype.setFocusedElement = function (element, e) {\n    var _this = this;\n\n    this.currentInfo.elementToFocus = element;\n    setTimeout(function () {\n      if (!isNullOrUndefined(_this.currentInfo.elementToFocus)) {\n        if (_this.parent.enableVirtualization || _this.parent.enableInfiniteScrolling) {\n          _this.focusVirtualElement(e);\n        } else {\n          _this.currentInfo.elementToFocus.focus();\n        }\n      }\n    }, 0);\n  };\n\n  FocusStrategy.prototype.focus = function (e) {\n    this.parent.notify(event.virtaulCellFocus, e);\n    this.removeFocus();\n    this.addFocus(this.getContent().getFocusInfo(), e);\n  };\n\n  FocusStrategy.prototype.removeFocus = function (e) {\n    if (!this.currentInfo.element) {\n      return;\n    }\n\n    removeClass([this.currentInfo.element, this.currentInfo.elementToFocus], ['e-focused', 'e-focus']);\n    this.currentInfo.element.tabIndex = -1;\n  };\n  /** @hidden */\n\n\n  FocusStrategy.prototype.addOutline = function () {\n    var info = this.getContent().getFocusInfo();\n\n    if (info.element) {\n      addClass([info.element], ['e-focused']);\n      addClass([info.elementToFocus], ['e-focus']);\n    }\n  };\n  /** @hidden */\n\n\n  FocusStrategy.prototype.focusHeader = function () {\n    this.setActive(false, this.parent.isFrozenGrid());\n    this.resetFocus();\n  };\n  /** @hidden */\n\n\n  FocusStrategy.prototype.focusContent = function () {\n    this.setActive(true, this.parent.isFrozenGrid());\n    this.resetFocus();\n  };\n\n  FocusStrategy.prototype.resetFocus = function () {\n    var current = this.getContent().matrix.get(0, -1, [0, 1], null, this.getContent().validator());\n    this.getContent().matrix.select(current[0], current[1]);\n    this.focus();\n  };\n\n  FocusStrategy.prototype.addFocus = function (info, e) {\n    this.currentInfo = info;\n    this.currentInfo.outline = info.outline && !isNullOrUndefined(e);\n\n    if (!info.element) {\n      return;\n    }\n\n    var isFocused = info.elementToFocus.classList.contains('e-focus');\n\n    if (isFocused) {\n      return;\n    }\n\n    if (this.currentInfo.outline) {\n      addClass([info.element], ['e-focused']);\n    }\n\n    addClass([info.elementToFocus], ['e-focus']);\n    info.element.tabIndex = 0;\n\n    if (!isFocused) {\n      this.setFocusedElement(info.elementToFocus, e);\n    }\n\n    this.parent.notify(event.cellFocused, {\n      element: info.elementToFocus,\n      parent: info.element,\n      indexes: this.getContent().matrix.current,\n      byKey: !isNullOrUndefined(e),\n      byClick: isNullOrUndefined(e),\n      keyArgs: e,\n      isJump: this.swap.swap,\n      container: this.getContent().getInfo(e),\n      outline: !isNullOrUndefined(e),\n      swapInfo: this.swap\n    });\n    var _a = this.getContent().matrix.current,\n        rowIndex = _a[0],\n        cellIndex = _a[1];\n    this.prevIndexes = {\n      rowIndex: rowIndex,\n      cellIndex: cellIndex\n    };\n    this.focusedColumnUid = this.parent.getColumnByIndex(cellIndex).uid;\n    this.focusByClick = false;\n  };\n\n  FocusStrategy.prototype.refreshMatrix = function (content) {\n    var _this = this;\n\n    return function (e) {\n      if (content && e.args && e.args.isFrozen && !_this.fContent) {\n        _this.fContent = new FixedContentFocus(_this.parent);\n      } else if (content && !_this.frContent && e.args && e.args.renderFrozenRightContent) {\n        _this.frContent = new FixedRightContentFocus(_this.parent);\n      } else if (content && !_this.content) {\n        _this.content = new ContentFocus(_this.parent);\n      }\n\n      if (!content && e.args && e.args.isFrozen && !_this.fHeader) {\n        _this.fHeader = new FixedHeaderFocus(_this.parent);\n      } else if (!content && e.args && e.args.renderFrozenRightContent && !_this.frHeader) {\n        _this.frHeader = new FixedRightHeaderFocus(_this.parent);\n      } else if (!content && !_this.header) {\n        _this.header = new HeaderFocus(_this.parent);\n      }\n\n      var cFocus = content ? e.args && e.args.isFrozen ? _this.fContent : e.args && e.args.renderFrozenRightContent ? _this.frContent : _this.content : e.args && e.args.isFrozen ? _this.fHeader : e.args && e.args.renderFrozenRightContent ? _this.frHeader : _this.header;\n      var rows = content ? e.rows.slice(_this.parent.frozenRows) : e.rows;\n      var updateRow = content ? e.rows.slice(0, _this.parent.frozenRows) : e.rows;\n\n      if (_this.parent.isCollapseStateEnabled() && content) {\n        rows = rows.filter(function (x) {\n          return x.visible !== false;\n        });\n      }\n\n      var isRowTemplate = !isNullOrUndefined(_this.parent.rowTemplate);\n      var matrix = cFocus.matrix.generate(updateRow, cFocus.selector, isRowTemplate);\n\n      if (e.name === 'batchAdd' && _this.parent.isFrozenGrid()) {\n        var mRows = _this.parent.getMovableRowsObject();\n\n        var newMovableRows = mRows.map(function (row) {\n          return row.clone();\n        });\n        var newFrozenRows = rows.map(function (row) {\n          return row.clone();\n        });\n\n        _this.fContent.matrix.generate(newFrozenRows, _this.fContent.selector, isRowTemplate);\n\n        _this.content.matrix.generate(newMovableRows, _this.content.selector, isRowTemplate);\n\n        if (_this.parent.getFrozenMode() === literals.leftRight) {\n          var frRows = _this.parent.getFrozenRightRowsObject();\n\n          var newfrRows = frRows.map(function (row) {\n            return row.clone();\n          });\n\n          _this.frContent.matrix.generate(newfrRows, _this.frContent.selector, isRowTemplate);\n        }\n      } else {\n        cFocus.matrix.generate(rows, cFocus.selector, isRowTemplate);\n      }\n\n      cFocus.generateRows(updateRow, {\n        matrix: matrix,\n        handlerInstance: e.args && e.args.isFrozen ? _this.fHeader : e.args && e.args.renderFrozenRightContent ? _this.frHeader : _this.header\n      });\n\n      if (!Browser.isDevice && e && e.args) {\n        if (!_this.focusByClick && e.args.requestType === 'paging') {\n          _this.skipFocus = false;\n\n          _this.parent.element.focus();\n        }\n\n        if (e.args.requestType === 'grouping') {\n          _this.skipFocus = true;\n        }\n      }\n\n      if (e && e.args && e.args.requestType === 'virtualscroll') {\n        if (_this.currentInfo.uid) {\n          var index_1;\n          var bool = e.rows.some(function (row, i) {\n            index_1 = i;\n            return row.uid === _this.currentInfo.uid;\n          });\n\n          if (bool) {\n            _this.content.matrix.current[0] = index_1;\n            _this.content.matrix.current[1] = _this.parent.getColumnIndexByUid(_this.focusedColumnUid) || 0;\n\n            var focusElement = _this.getContent().getFocusInfo().elementToFocus;\n\n            if (focusElement) {\n              var cellPosition = focusElement.getBoundingClientRect();\n\n              var gridPosition = _this.parent.element.getBoundingClientRect();\n\n              if (cellPosition.top >= 0 && cellPosition.left >= 0 && cellPosition.right <= Math.min(gridPosition.right, window.innerWidth || document.documentElement.clientWidth) && cellPosition.bottom <= Math.min(gridPosition.bottom, window.innerHeight || document.documentElement.clientHeight)) {\n                _this.isVirtualScroll = true;\n\n                _this.focus();\n              }\n            }\n          }\n        } else if (e.args.focusElement && e.args.focusElement.classList.contains('e-filtertext')) {\n          var focusElement = _this.parent.element.querySelector('#' + e.args.focusElement.id);\n\n          if (focusElement) {\n            focusElement.focus();\n          }\n        }\n      }\n    };\n  };\n\n  FocusStrategy.prototype.addEventListener = function () {\n    var _this = this;\n\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    EventHandler.add(this.parent.element, 'mousedown', this.focusCheck, this);\n    EventHandler.add(this.parent.element, 'focus', this.onFocus, this);\n    this.parent.element.addEventListener('focus', this.passiveHandler = function (e) {\n      return _this.passiveFocus(e);\n    }, true);\n    EventHandler.add(this.parent.element, 'focusout', this.onBlur, this);\n    this.evtHandlers = [{\n      event: event.keyPressed,\n      handler: this.onKeyPress\n    }, {\n      event: event.click,\n      handler: this.onClick\n    }, {\n      event: event.contentReady,\n      handler: this.refMatrix\n    }, {\n      event: event.partialRefresh,\n      handler: this.refMatrix\n    }, {\n      event: event.refreshExpandandCollapse,\n      handler: this.refMatrix\n    }, {\n      event: event.headerRefreshed,\n      handler: this.refreshMatrix()\n    }, {\n      event: event.closeEdit,\n      handler: this.restoreFocus\n    }, {\n      event: event.restoreFocus,\n      handler: this.restoreFocus\n    }, {\n      event: 'start-edit',\n      handler: this.clearIndicator\n    }, {\n      event: 'start-add',\n      handler: this.clearIndicator\n    }, {\n      event: 'sorting-complete',\n      handler: this.restoreFocus\n    }, {\n      event: 'filtering-complete',\n      handler: this.filterfocus\n    }, {\n      event: 'grouping-complete',\n      handler: this.restoreFocusWithAction\n    }, {\n      event: 'ungrouping-complete',\n      handler: this.restoreFocusWithAction\n    }, {\n      event: event.batchAdd,\n      handler: this.refMatrix\n    }, {\n      event: event.batchCancel,\n      handler: this.refMatrix\n    }, {\n      event: event.batchDelete,\n      handler: this.refMatrix\n    }, {\n      event: event.detailDataBound,\n      handler: this.refMatrix\n    }, {\n      event: event.onEmpty,\n      handler: this.refMatrix\n    }, {\n      event: event.cellFocused,\n      handler: this.internalCellFocus\n    }];\n    addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n  };\n\n  FocusStrategy.prototype.filterfocus = function () {\n    if (this.parent.filterSettings.type !== 'FilterBar') {\n      this.restoreFocus();\n    }\n  };\n\n  FocusStrategy.prototype.removeEventListener = function () {\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    EventHandler.remove(this.parent.element, 'mousedown', this.focusCheck);\n    EventHandler.remove(this.parent.element, 'focus', this.onFocus);\n    EventHandler.remove(this.parent.element, 'focusout', this.onBlur);\n    this.parent.element.removeEventListener('focus', this.passiveHandler, true);\n    addRemoveEventListener(this.parent, this.evtHandlers, false);\n  };\n\n  FocusStrategy.prototype.destroy = function () {\n    this.removeEventListener();\n  };\n\n  FocusStrategy.prototype.restoreFocus = function () {\n    this.addFocus(this.getContent().getFocusInfo());\n  };\n\n  FocusStrategy.prototype.restoreFocusWithAction = function (e) {\n    if (!this.parent.enableInfiniteScrolling) {\n      var matrix = this.getContent().matrix;\n      var current = matrix.current;\n\n      switch (e.requestType) {\n        case 'grouping':\n        case 'ungrouping':\n          current[1] = current.length && !this.parent.groupSettings.showGroupedColumn && !isNullOrUndefined(matrix.matrix[current[0]]) ? matrix.matrix[current[0]].indexOf(1) : e.requestType === 'grouping' ? current[1] + 1 : current[1] - 1;\n          break;\n      }\n\n      this.getContent().matrix.current = current;\n      this.addFocus(this.getContent().getFocusInfo());\n    }\n  };\n\n  FocusStrategy.prototype.clearOutline = function () {\n    this.getContent().matrix.current = this.getContent().matrix.get(0, -1, [0, 1], 'downArrow', this.getContent().validator());\n    this.clearIndicator();\n  };\n\n  FocusStrategy.prototype.clearIndicator = function () {\n    if (!this.currentInfo.element || !this.currentInfo.elementToFocus) {\n      return;\n    }\n\n    removeClass([this.currentInfo.element, this.currentInfo.elementToFocus], ['e-focus', 'e-focused']);\n  };\n\n  FocusStrategy.prototype.getPrevIndexes = function () {\n    var forget = this.forget;\n    this.forget = false;\n    return forget || !Object.keys(this.prevIndexes).length ? {\n      rowIndex: null,\n      cellIndex: null\n    } : this.prevIndexes;\n  };\n\n  FocusStrategy.prototype.forgetPrevious = function () {\n    this.forget = true;\n  };\n\n  FocusStrategy.prototype.setActiveByKey = function (action, active) {\n    var _this = this;\n\n    if (!this.parent.isFrozenGrid() && this.parent.frozenRows === 0) {\n      return;\n    }\n\n    var info;\n    var actions = {\n      'home': function home() {\n        return {\n          toHeader: !info.isContent,\n          toFrozen: true\n        };\n      },\n      'end': function end() {\n        return {\n          toHeader: !info.isContent,\n          toFrozen: false\n        };\n      },\n      'ctrlHome': function ctrlHome() {\n        return {\n          toHeader: true,\n          toFrozen: _this.parent.isFrozenGrid()\n        };\n      },\n      'ctrlEnd': function ctrlEnd() {\n        return {\n          toHeader: false,\n          toFrozen: false\n        };\n      }\n    };\n\n    if (!(action in actions)) {\n      return;\n    }\n\n    info = active.getInfo();\n    var swap = actions[action]();\n    this.setActive(!swap.toHeader, swap.toFrozen);\n    this.getContent().matrix.current = active.matrix.current;\n  };\n\n  FocusStrategy.prototype.internalCellFocus = function (e) {\n    if (!(e.byKey && e.container.isContent && e.keyArgs.action === 'enter' && (e.parent.classList.contains('e-detailcell') || e.parent.classList.contains('e-unboundcell') || e.parent.classList.contains('e-templatecell')))) {\n      return;\n    }\n\n    this.clearIndicator();\n    var focusEle = this.getContent().getFocusable(this.getFocusedElement());\n    this.setFocusedElement(focusEle);\n    this.currentInfo.skipAction = true;\n  };\n\n  return FocusStrategy;\n}();\n\nexport { FocusStrategy };\n/**\n * Create matrix from row collection which act as mental model for cell navigation\n * @hidden\n */\n\nvar Matrix =\n/** @class */\nfunction () {\n  function Matrix() {\n    this.matrix = [];\n    this.current = [];\n  }\n\n  Matrix.prototype.set = function (rowIndex, columnIndex, allow) {\n    rowIndex = Math.max(0, Math.min(rowIndex, this.rows));\n    columnIndex = Math.max(0, Math.min(columnIndex, this.columns));\n    this.matrix[rowIndex] = this.matrix[rowIndex] || [];\n    this.matrix[rowIndex][columnIndex] = allow ? 1 : 0;\n  };\n\n  Matrix.prototype.get = function (rowIndex, columnIndex, navigator, action, validator) {\n    var tmp = columnIndex;\n\n    if (rowIndex + navigator[0] < 0) {\n      return [rowIndex, columnIndex];\n    }\n\n    rowIndex = Math.max(0, Math.min(rowIndex + navigator[0], this.rows));\n    var emptyTable = true;\n\n    if (isNullOrUndefined(this.matrix[rowIndex])) {\n      return null;\n    }\n\n    columnIndex = Math.max(0, Math.min(columnIndex + navigator[1], this.matrix[rowIndex].length - 1));\n\n    if (tmp + navigator[1] > this.matrix[rowIndex].length - 1 && validator(rowIndex, columnIndex, action)) {\n      return [rowIndex, tmp];\n    }\n\n    var first = this.first(this.matrix[rowIndex], columnIndex, navigator, true, action);\n    columnIndex = first === null ? tmp : first;\n    var val = getValue(rowIndex + \".\" + columnIndex, this.matrix);\n\n    if (rowIndex === this.rows && (action === 'downArrow' || action === 'enter')) {\n      navigator[0] = -1;\n    }\n\n    if (first === null) {\n      for (var i = 0; i < this.rows; i++) {\n        if (this.matrix[i].some(function (v) {\n          return v === 1;\n        })) {\n          emptyTable = false;\n          break;\n        }\n      }\n\n      if (emptyTable) {\n        rowIndex = this.current[0];\n        return [rowIndex, columnIndex];\n      }\n    }\n\n    return this.inValid(val) || !validator(rowIndex, columnIndex, action) ? this.get(rowIndex, tmp, navigator, action, validator) : [rowIndex, columnIndex];\n  };\n\n  Matrix.prototype.first = function (vector, index, navigator, moveTo, action) {\n    if ((index < 0 || index === vector.length) && this.inValid(vector[index]) && action !== 'upArrow' && action !== 'downArrow' || !vector.some(function (v) {\n      return v === 1;\n    })) {\n      return null;\n    }\n\n    return !this.inValid(vector[index]) ? index : this.first(vector, ['upArrow', 'downArrow', 'shiftUp', 'shiftDown'].indexOf(action) !== -1 ? moveTo ? 0 : ++index : index + navigator[1], navigator, false, action);\n  };\n\n  Matrix.prototype.select = function (rowIndex, columnIndex) {\n    rowIndex = Math.max(0, Math.min(rowIndex, this.rows));\n    columnIndex = Math.max(0, Math.min(columnIndex, this.matrix[rowIndex].length - 1));\n    this.current = [rowIndex, columnIndex];\n  };\n\n  Matrix.prototype.generate = function (rows, selector, isRowTemplate) {\n    this.rows = rows.length - 1;\n    this.matrix = [];\n\n    for (var i = 0; i < rows.length; i++) {\n      var cells = rows[i].cells.filter(function (c) {\n        return c.isSpanned !== true;\n      });\n      this.columns = Math.max(cells.length - 1, this.columns | 0);\n\n      for (var j = 0; j < cells.length; j++) {\n        this.set(i, j, rows[i].visible === false ? false : selector(rows[i], cells[j], isRowTemplate));\n      }\n    }\n\n    return this.matrix;\n  };\n\n  Matrix.prototype.inValid = function (value) {\n    return value === 0 || value === undefined;\n  };\n\n  return Matrix;\n}();\n\nexport { Matrix };\n/**\n * @hidden\n */\n\nvar ContentFocus =\n/** @class */\nfunction () {\n  function ContentFocus(parent) {\n    var _this = this;\n\n    this.matrix = new Matrix();\n    this.lastIdxCell = false;\n    this.parent = parent;\n    this.keyActions = {\n      'rightArrow': [0, 1],\n      'tab': [0, 1],\n      'leftArrow': [0, -1],\n      'shiftTab': [0, -1],\n      'upArrow': [-1, 0],\n      'downArrow': [1, 0],\n      'shiftUp': [-1, 0],\n      'shiftDown': [1, 0],\n      'shiftRight': [0, 1],\n      'shiftLeft': [0, -1],\n      'enter': [1, 0],\n      'shiftEnter': [-1, 0]\n    };\n\n    this.indexesByKey = function (action) {\n      var opt = {\n        'home': [_this.matrix.current[0], -1, 0, 1],\n        'end': [_this.matrix.current[0], _this.matrix.columns + 1, 0, -1],\n        'ctrlHome': [0, -1, 0, 1],\n        'ctrlEnd': [_this.matrix.rows, _this.matrix.columns + 1, 0, -1]\n      };\n      return opt[action] || null;\n    };\n  }\n\n  ContentFocus.prototype.getTable = function () {\n    return this.parent.isFrozenGrid() ? this.parent.getContent().querySelector('.e-movablecontent .e-table') : this.parent.getContentTable();\n  };\n\n  ContentFocus.prototype.onKeyPress = function (e) {\n    var navigator = this.keyActions[e.action];\n    var current = this.getCurrentFromAction(e.action, navigator, e.action in this.keyActions, e);\n\n    if (!current) {\n      return;\n    }\n\n    if ((['tab', 'shiftTab'].indexOf(e.action) > -1 && this.matrix.current || []).toString() === current.toString()) {\n      if (current.toString() === [this.matrix.rows, this.matrix.columns].toString() || current.toString() === [0, 0].toString() || this.matrix.current[0] === this.matrix.rows && this.matrix.current.toString() === current.toString()) {\n        return false;\n      } else {\n        current = this.editNextRow(current[0], current[1], e.action);\n      }\n    }\n\n    this.matrix.select(current[0], current[1]);\n  };\n\n  ContentFocus.prototype.editNextRow = function (rowIndex, cellIndex, action) {\n    var gObj = this.parent;\n    var editNextRow = gObj.editSettings.allowNextRowEdit && (gObj.isEdit || gObj.isLastCellPrimaryKey);\n    var visibleIndex = gObj.getColumnIndexByField(gObj.getVisibleColumns()[0].field);\n    var cell = this.getTable().rows[rowIndex].cells[cellIndex];\n\n    if (action === 'tab' && editNextRow) {\n      rowIndex++;\n      var index = this.getTable().rows[rowIndex].getElementsByClassName('e-indentcell').length + this.getTable().rows[rowIndex].getElementsByClassName('e-detailrowcollapse').length;\n      cellIndex = visibleIndex + index;\n    }\n\n    if (action === 'shiftTab' && editNextRow) {\n      rowIndex--;\n      cellIndex = gObj.getColumnIndexByField(gObj.getVisibleColumns()[gObj.getVisibleColumns().length - 1].field);\n    }\n\n    return !cell.classList.contains(literals.rowCell) && !cell.classList.contains('e-headercell') && !cell.classList.contains('e-groupcaption') ? this.editNextRow(rowIndex, cellIndex, action) : [rowIndex, cellIndex];\n  };\n\n  ContentFocus.prototype.getCurrentFromAction = function (action, navigator, isPresent, e) {\n    if (navigator === void 0) {\n      navigator = [0, 0];\n    }\n\n    if (!isPresent && !this.indexesByKey(action) || this.matrix.current.length === 0) {\n      return null;\n    }\n\n    if (!this.shouldFocusChange(e)) {\n      return this.matrix.current;\n    }\n\n    var _a = this.indexesByKey(action) || this.matrix.current.concat(navigator),\n        rowIndex = _a[0],\n        cellIndex = _a[1],\n        rN = _a[2],\n        cN = _a[3];\n\n    var current = this.matrix.get(rowIndex, cellIndex, [rN, cN], action, this.validator());\n    return current;\n  };\n\n  ContentFocus.prototype.onClick = function (e, force) {\n    var target = e.target;\n    this.target = target;\n    target = target.classList.contains(literals.rowCell) ? target : closest(target, 'td');\n    target = target ? target : closest(e.target, 'td.e-detailrowcollapse') || closest(e.target, 'td.e-detailrowexpand');\n    target = closest(e.target, 'td.e-detailcell') ? isNullOrUndefined(closest(closest(e.target, '.e-grid'), 'td.e-detailcell')) ? null : target : target;\n    target = target && closest(target, 'table').classList.contains(literals.table) ? target : null;\n\n    if (!target) {\n      return false;\n    }\n\n    var _a = [target.parentElement.rowIndex, target.cellIndex],\n        rowIndex = _a[0],\n        cellIndex = _a[1];\n    var _b = this.matrix.current,\n        oRowIndex = _b[0],\n        oCellIndex = _b[1];\n    var val = getValue(rowIndex + \".\" + cellIndex, this.matrix.matrix);\n\n    if (this.matrix.inValid(val) || !force && oRowIndex === rowIndex && oCellIndex === cellIndex || !parentsUntil(e.target, literals.rowCell) && !parentsUntil(e.target, 'e-groupcaption')) {\n      return false;\n    }\n\n    this.matrix.select(rowIndex, cellIndex);\n  };\n\n  ContentFocus.prototype.getFocusInfo = function () {\n    var info = {};\n    var _a = this.matrix.current,\n        _b = _a[0],\n        rowIndex = _b === void 0 ? 0 : _b,\n        _c = _a[1],\n        cellIndex = _c === void 0 ? 0 : _c;\n    this.matrix.current = [rowIndex, cellIndex];\n    info.element = !isNullOrUndefined(this.getTable().rows[rowIndex]) ? this.getTable().rows[rowIndex].cells[cellIndex] : null;\n\n    if (!info.element) {\n      return info;\n    }\n\n    info.elementToFocus = !info.element.classList.contains('e-unboundcell') && !info.element.classList.contains('e-detailcell') ? this.getFocusable(info.element) : info.element;\n    info.outline = true;\n    info.uid = info.element.parentElement.getAttribute('data-uid');\n    return info;\n  };\n\n  ContentFocus.prototype.getFocusable = function (element) {\n    var query = 'button, [href], input:not([type=\"hidden\"]), select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n    var isTemplate = !isNullOrUndefined(closest(element, '.e-templatecell'));\n\n    if (this.parent.isEdit) {\n      query = 'input:not([type=\"hidden\"]), select:not([aria-hidden=\"true\"]), textarea';\n    }\n\n    var child = [].slice.call(element.querySelectorAll(query));\n    /* Select the first focusable child element\n     * if no child found then select the cell itself.\n     * if Grid is in editable state, check for editable control inside child.\n     */\n\n    return child.length ? isTemplate ? this.target : child[0] : element;\n  };\n\n  ContentFocus.prototype.selector = function (row, cell, isRowTemplate) {\n    var types = [CellType.Expand, CellType.GroupCaption, CellType.CaptionSummary, CellType.GroupSummary];\n    return (row.isDataRow && cell.visible && (cell.isDataCell || cell.isTemplate) || row.isDataRow && cell.cellType === CellType.DetailExpand && isNullOrUndefined(cell.visible) || !row.isDataRow && types.indexOf(cell.cellType) > -1 || cell.column && cell.column.type === 'checkbox' || cell.cellType === CellType.CommandColumn || row.isDataRow && isRowTemplate) && !(row.edit === 'delete' && row.isDirty);\n  };\n\n  ContentFocus.prototype.nextRowFocusValidate = function (index) {\n    var lastIndex = index;\n\n    for (var i = index, len = this.matrix.rows; i < len; i++) {\n      if (this.matrix.matrix[index].indexOf(1) === -1) {\n        index = index + 1;\n      } else {\n        return index;\n      }\n    }\n\n    this.lastIdxCell = true;\n    return lastIndex;\n  };\n\n  ContentFocus.prototype.previousRowFocusValidate = function (index) {\n    var firstIndex = index;\n\n    for (var i = index, len = 0; i >= len; i--) {\n      if (this.matrix.matrix[index].indexOf(1) === -1) {\n        index = index - 1;\n\n        if (index < 0) {\n          this.lastIdxCell = true;\n          return firstIndex;\n        }\n      } else {\n        return index;\n      }\n    }\n\n    return firstIndex;\n  };\n\n  ContentFocus.prototype.jump = function (action, current) {\n    var frozenSwap = this.parent.getFrozenLeftCount() && (action === 'leftArrow' || action === 'shiftTab') && current[1] === 0;\n    var right = (action === 'rightArrow' || action === 'tab') && current[1] === this.matrix.columns;\n    var frSwap = this.parent.getFrozenMode() === literals.leftRight && right;\n\n    if (this.parent.getFrozenMode() === 'Right') {\n      frozenSwap = right;\n    }\n\n    this.lastIdxCell = false;\n    var enterFrozen = this.parent.frozenRows !== 0 && action === 'shiftEnter';\n\n    if (action === 'tab' && !this.parent.isEdit && current[1] === this.matrix.matrix[current[0]].lastIndexOf(1) && this.matrix.matrix.length - 1 !== current[0]) {\n      this.matrix.current[0] = this.nextRowFocusValidate(this.matrix.current[0] + 1);\n      this.matrix.current[1] = -1;\n      frozenSwap = this.parent.isFrozenGrid();\n    }\n\n    if (action === 'shiftTab' && !this.parent.isEdit && current[0] !== 0 && this.matrix.matrix[current[0]].indexOf(1) === current[1]) {\n      this.matrix.current[0] = this.previousRowFocusValidate(this.matrix.current[0] - 1);\n      this.matrix.current[1] = this.matrix.matrix[current[0]].length;\n    }\n\n    var isHeaderFocus = false;\n    var row = document.activeElement.parentElement;\n\n    if ((this.parent.enableVirtualization || this.parent.infiniteScrollSettings.enableCache) && row.classList.contains(literals.row)) {\n      var rowIndex = parseInt(row.getAttribute(literals.ariaRowIndex), 10);\n      isHeaderFocus = rowIndex > 0;\n    }\n\n    var info = {\n      swap: !isHeaderFocus ? (action === 'upArrow' || enterFrozen) && current[0] === 0 || frozenSwap || frSwap : false,\n      toHeader: (action === 'upArrow' || enterFrozen) && current[0] === 0,\n      toFrozen: frozenSwap,\n      toFrozenRight: frSwap\n    };\n    return info;\n  };\n\n  ContentFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n    if (previous === void 0) {\n      previous = [];\n    }\n\n    var current = [];\n\n    if (this.parent.getFrozenMode() === 'Right' || this.parent.getFrozenMode() === literals.leftRight) {\n      if (action === 'leftArrow' || action === 'shiftTab') {\n        current[0] = previous[0];\n        current[1] = active.matrix.columns + 1;\n      }\n\n      if (this.parent.getFrozenMode() === literals.leftRight && (action === 'rightArrow' || action === 'tab')) {\n        current[0] = previous[0];\n        current[1] = -1;\n      }\n    } else if (action === 'rightArrow' || action === 'tab') {\n      current[0] = previous[0];\n      current[1] = -1;\n    }\n\n    if (action === 'downArrow' || action === 'enter') {\n      current[0] = -1;\n      current[1] = previous[1];\n    }\n\n    return current;\n  };\n\n  ContentFocus.prototype.generateRows = function (rows, optionals) {\n    var _a;\n\n    var matrix = optionals.matrix,\n        handlerInstance = optionals.handlerInstance;\n    var len = handlerInstance.matrix.matrix.length;\n    var defaultLen = this.parent.allowFiltering && this.parent.filterSettings.type === 'FilterBar' ? len + 1 : len;\n    handlerInstance.matrix.matrix = handlerInstance.matrix.matrix.slice(0, defaultLen); //Header matrix update.\n\n    handlerInstance.matrix.rows = defaultLen;\n\n    (_a = handlerInstance.matrix.matrix).push.apply(_a, matrix);\n\n    handlerInstance.matrix.rows += matrix.length;\n  };\n\n  ContentFocus.prototype.getInfo = function (e) {\n    var info = this.getFocusInfo();\n    var _a = this.matrix.current,\n        rIndex = _a[0],\n        cIndex = _a[1];\n    var isData = info.element.classList.contains(literals.rowCell);\n    var isSelectable = isData || e && e.action !== 'enter' && (info.element.classList.contains('e-detailrowcollapse') || info.element.classList.contains('e-detailrowexpand'));\n    var _b = [Math.min(parseInt(info.element.parentElement.getAttribute(literals.ariaRowIndex), 10), rIndex), Math.min(parseInt(info.element.getAttribute(literals.ariaColIndex), 10), cIndex)],\n        rowIndex = _b[0],\n        cellIndex = _b[1];\n    return {\n      isContent: true,\n      isDataCell: isData,\n      indexes: [rowIndex, cellIndex],\n      isSelectable: isSelectable\n    };\n  };\n\n  ContentFocus.prototype.validator = function () {\n    var table = this.getTable();\n    return function (rowIndex, cellIndex, action) {\n      if (!isNullOrUndefined(table.rows[rowIndex])) {\n        var cell = void 0;\n        cellIndex = table.querySelector('.e-emptyrow') ? 0 : cellIndex;\n\n        if (table.rows[rowIndex].cells[0].classList.contains('e-editcell')) {\n          cell = table.rows[rowIndex].cells[0].querySelectorAll('td')[cellIndex];\n        } else {\n          cell = table.rows[rowIndex].cells[cellIndex];\n        }\n\n        var isCellWidth = cell.getBoundingClientRect().width !== 0;\n\n        if (action === 'enter' || action === 'shiftEnter') {\n          return isCellWidth && cell.classList.contains(literals.rowCell);\n        }\n\n        if ((action === 'shiftUp' || action === 'shiftDown') && cell.classList.contains(literals.rowCell)) {\n          return isCellWidth;\n        } else if (action !== 'shiftUp' && action !== 'shiftDown') {\n          return isCellWidth;\n        }\n      }\n\n      return false;\n    };\n  };\n\n  ContentFocus.prototype.shouldFocusChange = function (e) {\n    var _a = this.matrix.current,\n        _b = _a[0],\n        rIndex = _b === void 0 ? -1 : _b,\n        _c = _a[1],\n        cIndex = _c === void 0 ? -1 : _c;\n\n    if (rIndex < 0 || cIndex < 0) {\n      return true;\n    }\n\n    var cell = getValue(rIndex + \".cells.\" + cIndex, this.getTable().rows);\n\n    if (!cell) {\n      return true;\n    }\n\n    return e.action === 'enter' || e.action === 'shiftEnter' ? cell.classList.contains(literals.rowCell) && !cell.classList.contains('e-unboundcell') && (!cell.classList.contains('e-templatecell') || cell.classList.contains('e-editedbatchcell')) && !cell.classList.contains('e-detailcell') : true;\n  };\n\n  ContentFocus.prototype.getGridSeletion = function () {\n    return this.parent.allowSelection && this.parent.selectionSettings.allowColumnSelection;\n  };\n\n  return ContentFocus;\n}();\n\nexport { ContentFocus };\n/**\n * @hidden\n */\n\nvar HeaderFocus =\n/** @class */\nfunction (_super) {\n  __extends(HeaderFocus, _super);\n\n  function HeaderFocus(parent) {\n    return _super.call(this, parent) || this;\n  }\n\n  HeaderFocus.prototype.getTable = function () {\n    return this.parent.isFrozenGrid() ? this.parent.getHeaderContent().querySelector('.e-movableheader .e-table') : this.parent.getHeaderTable();\n  };\n\n  HeaderFocus.prototype.onClick = function (e) {\n    var target = e.target;\n    target = target.classList.contains('e-headercell') ? target : closest(target, 'th');\n\n    if (!target && this.parent.frozenRows !== 0) {\n      target = e.target.classList.contains(literals.rowCell) ? e.target : closest(e.target, 'td');\n    }\n\n    if (e.target.classList.contains('e-columnheader') || e.target.querySelector('.e-stackedheadercell')) {\n      return false;\n    }\n\n    if (!target) {\n      return;\n    }\n\n    var _a = [target.parentElement.rowIndex, target.cellIndex],\n        rowIndex = _a[0],\n        cellIndex = _a[1];\n    var val = getValue(rowIndex + \".\" + cellIndex, this.matrix.matrix);\n\n    if (this.matrix.inValid(val)) {\n      return false;\n    }\n\n    this.matrix.select(target.parentElement.rowIndex, target.cellIndex);\n  };\n\n  HeaderFocus.prototype.getFocusInfo = function () {\n    var info = {};\n    var _a = this.matrix.current,\n        _b = _a[0],\n        rowIndex = _b === void 0 ? 0 : _b,\n        _c = _a[1],\n        cellIndex = _c === void 0 ? 0 : _c;\n    info.element = this.getTable().rows[rowIndex].cells[cellIndex];\n\n    if (!isNullOrUndefined(info.element)) {\n      info.elementToFocus = this.getFocusable(info.element);\n      info.outline = !info.element.classList.contains('e-filterbarcell');\n    }\n\n    return info;\n  };\n\n  HeaderFocus.prototype.selector = function (row, cell) {\n    return cell.visible && (cell.column.field !== undefined || cell.isTemplate || !isNullOrUndefined(cell.column.template)) || cell.column.type === 'checkbox' || cell.cellType === CellType.StackedHeader;\n  };\n\n  HeaderFocus.prototype.jump = function (action, current) {\n    var frozenSwap = this.parent.getFrozenLeftCount() && (action === 'leftArrow' || action === 'shiftLeft' && this.getGridSeletion() || action === 'shiftTab') && current[1] === 0;\n    var right = (action === 'rightArrow' || action === 'shiftRight' && this.getGridSeletion() || action === 'tab') && current[1] === this.matrix.columns;\n    var frSwap = this.parent.getFrozenMode() === literals.leftRight && right;\n\n    if (this.parent.getFrozenMode() === 'Right') {\n      frozenSwap = right;\n    }\n\n    var enterFrozen = this.parent.frozenRows !== 0 && action === 'enter';\n    var isLastCell;\n    var lastRow;\n    var headerSwap = frozenSwap || frSwap;\n    var fMatrix = this.parent.focusModule.fHeader && this.parent.focusModule.fHeader.matrix.matrix;\n    var isPresent = fMatrix && !isNullOrUndefined(fMatrix[current[0]]);\n\n    if (this.parent.enableHeaderFocus && action === 'tab') {\n      lastRow = this.matrix.matrix.length - 1 === current[0];\n      isLastCell = current[1] === this.matrix.matrix[current[0]].lastIndexOf(1);\n\n      if (isLastCell) {\n        if (!lastRow) {\n          this.matrix.current[0] = this.matrix.current[0] + 1;\n        } else {\n          this.matrix.current[0] = 0;\n        }\n\n        this.matrix.current[1] = -1;\n      }\n\n      if (this.parent.isFrozenGrid() && lastRow && isLastCell) {\n        frozenSwap = true;\n        headerSwap = false;\n      }\n    }\n\n    return {\n      swap: (action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1 || isPresent && (frozenSwap || frSwap) || action === 'tab' && lastRow && isLastCell,\n      toHeader: headerSwap,\n      toFrozen: frozenSwap,\n      toFrozenRight: frSwap\n    };\n  };\n\n  HeaderFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n    if (previous === void 0) {\n      previous = [];\n    }\n\n    var current1 = [];\n\n    if (this.parent.getFrozenMode() === 'Right' || this.parent.getFrozenMode() === literals.leftRight) {\n      if (action === 'leftArrow' || action === 'shiftLeft' && this.getGridSeletion() || action === 'shiftTab') {\n        current1[0] = previous[0];\n        current1[1] = active.matrix.columns + 1;\n      }\n\n      if (this.parent.getFrozenMode() === literals.leftRight && (action === 'rightArrow' || action === 'shiftRight' && this.getGridSeletion() || action === 'tab')) {\n        current1[0] = previous[0];\n        current1[1] = -1;\n      }\n    } else if (action === 'rightArrow' || action === 'shiftRight' && this.getGridSeletion() || action === 'tab') {\n      current1[0] = previous[0];\n      current1[1] = -1;\n    }\n\n    if (action === 'upArrow' || action === 'shiftEnter') {\n      current1[0] = this.matrix.matrix.length;\n      current1[1] = previous[1];\n    }\n\n    return current1;\n  };\n\n  HeaderFocus.prototype.generateRows = function (rows) {\n    var length = this.matrix.matrix.length;\n\n    if (this.parent.allowFiltering && this.parent.filterSettings.type === 'FilterBar') {\n      this.matrix.rows = ++this.matrix.rows;\n      var cells = rows[0].cells;\n\n      for (var i = 0; i < cells.length; i++) {\n        this.matrix.set(length, i, cells[i].visible && cells[i].column.allowFiltering !== false);\n      }\n    }\n  };\n\n  HeaderFocus.prototype.getInfo = function (e) {\n    return extend(_super.prototype.getInfo.call(this, e), {\n      isContent: false,\n      isHeader: true\n    });\n  };\n\n  HeaderFocus.prototype.validator = function () {\n    return function () {\n      return true;\n    };\n  };\n\n  HeaderFocus.prototype.shouldFocusChange = function (e) {\n    var _a = this.matrix.current,\n        rowIndex = _a[0],\n        columnIndex = _a[1];\n\n    if (rowIndex < 0 || columnIndex < 0) {\n      return true;\n    }\n\n    var cell = getValue(rowIndex + \".cells.\" + columnIndex, this.getTable().rows);\n\n    if (!cell) {\n      return true;\n    }\n\n    return e.action === 'enter' || e.action === 'altDownArrow' ? !cell.classList.contains('e-headercell') : true;\n  };\n\n  return HeaderFocus;\n}(ContentFocus);\n\nexport { HeaderFocus };\n\nvar FixedContentFocus =\n/** @class */\nfunction (_super) {\n  __extends(FixedContentFocus, _super);\n\n  function FixedContentFocus() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n\n  FixedContentFocus.prototype.getTable = function () {\n    return this.parent.getContent().querySelector('.e-frozencontent .e-table');\n  };\n\n  FixedContentFocus.prototype.jump = function (action, current) {\n    var enterFrozen = this.parent.frozenRows !== 0 && action === 'shiftEnter';\n    var toHeader = (action === 'upArrow' || enterFrozen) && current[0] === 0;\n\n    if (this.parent.getFrozenMode() === 'Right') {\n      var swap = toHeader || (action === 'shiftTab' || action === 'leftArrow') && current[1] === 0;\n      return {\n        swap: swap,\n        toHeader: toHeader,\n        toFrozen: toHeader\n      };\n    }\n\n    return {\n      swap: toHeader || (action === 'tab' || action === 'rightArrow') && current[1] === this.matrix.columns,\n      toHeader: toHeader,\n      toFrozen: toHeader\n    };\n  };\n\n  FixedContentFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n    if (previous === void 0) {\n      previous = [];\n    }\n\n    var current2 = [];\n\n    if (this.parent.getFrozenMode() === 'Right') {\n      if (action === 'rightArrow' || action === 'tab') {\n        current2[0] = previous[0];\n        current2[1] = -1;\n      }\n    } else {\n      if (action === 'tab' && this.parent.enableHeaderFocus) {\n        current2[0] = previous[0];\n        current2[1] = -1;\n      }\n\n      if (action === 'leftArrow' || action === 'shiftTab') {\n        current2[0] = previous[0];\n        current2[1] = active.matrix.columns + 1;\n      }\n    }\n\n    if (action === 'downArrow' || action === 'enter') {\n      current2[0] = -1;\n      current2[1] = previous[1];\n    }\n\n    return current2;\n  };\n\n  return FixedContentFocus;\n}(ContentFocus);\n\nexport { FixedContentFocus };\n\nvar FixedHeaderFocus =\n/** @class */\nfunction (_super) {\n  __extends(FixedHeaderFocus, _super);\n\n  function FixedHeaderFocus() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n\n  FixedHeaderFocus.prototype.jump = function (action, current) {\n    var enterFrozen = this.parent.frozenRows !== 0 && action === 'enter';\n    var hMatrix = this.parent.focusModule.header && this.parent.focusModule.header.matrix.matrix;\n    var isPresent = hMatrix && !isNullOrUndefined(hMatrix[current[0]]);\n\n    if (this.parent.getFrozenMode() === 'Right') {\n      var frSwap = (action === 'leftArrow' || action === 'shiftLeft' && this.getGridSeletion() || action === 'shiftTab') && current[1] === 0;\n      var swap = (action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1 || isPresent && frSwap;\n      var toFrozen = (action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1;\n      return {\n        swap: swap,\n        toHeader: frSwap,\n        toFrozen: toFrozen\n      };\n    }\n\n    return {\n      swap: (action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1 || (action === 'rightArrow' || action === 'shiftRight' && this.getGridSeletion() || action === 'tab') && current[1] === this.matrix.columns && isPresent,\n      toHeader: (action === 'rightArrow' || action === 'shiftRight' && this.getGridSeletion() || action === 'tab') && current[1] === this.matrix.columns,\n      toFrozen: (action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1\n    };\n  };\n\n  FixedHeaderFocus.prototype.getTable = function () {\n    return this.parent.getHeaderContent().querySelector('.e-frozenheader .e-table');\n  };\n\n  FixedHeaderFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n    if (previous === void 0) {\n      previous = [];\n    }\n\n    var current3 = [];\n\n    if (this.parent.getFrozenMode() === 'Right') {\n      if (action === 'rightArrow' || action === 'shiftRight' && this.getGridSeletion() || action === 'tab') {\n        current3[0] = previous[0];\n        current3[1] = -1;\n      }\n    } else {\n      if (action === 'leftArrow' || action === 'shiftLeft' && this.getGridSeletion() || action === 'shiftTab') {\n        current3[0] = previous[0];\n        current3[1] = active.matrix.columns + 1;\n      }\n    }\n\n    if (action === 'upArrow' || action === 'shiftEnter') {\n      current3[0] = this.matrix.matrix.length;\n      current3[1] = previous[1];\n    }\n\n    return current3;\n  };\n\n  return FixedHeaderFocus;\n}(HeaderFocus);\n\nexport { FixedHeaderFocus };\n/** @hidden */\n\nvar SearchBox =\n/** @class */\nfunction () {\n  function SearchBox(searchBox) {\n    this.searchBox = searchBox;\n  }\n  /** @hidden */\n\n\n  SearchBox.prototype.searchFocus = function (args) {\n    args.target.parentElement.classList.add('e-input-focus');\n  };\n\n  SearchBox.prototype.searchBlur = function (args) {\n    args.target.parentElement.classList.remove('e-input-focus');\n  };\n\n  SearchBox.prototype.wireEvent = function () {\n    if (this.searchBox) {\n      EventHandler.add(this.searchBox, 'focus', this.searchFocus, this);\n      EventHandler.add(this.searchBox, 'blur', this.searchBlur, this);\n    }\n  };\n\n  SearchBox.prototype.unWireEvent = function () {\n    if (this.searchBox) {\n      EventHandler.remove(this.searchBox, 'focus', this.searchFocus);\n      EventHandler.remove(this.searchBox, 'blur', this.searchBlur);\n    }\n  };\n\n  return SearchBox;\n}();\n\nexport { SearchBox };\n\nvar FixedRightContentFocus =\n/** @class */\nfunction (_super) {\n  __extends(FixedRightContentFocus, _super);\n\n  function FixedRightContentFocus() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n\n  FixedRightContentFocus.prototype.getTable = function () {\n    return this.parent.getContent().querySelector('.e-frozen-right-content .e-table');\n  };\n\n  FixedRightContentFocus.prototype.jump = function (action, current) {\n    var enterFrozen = this.parent.frozenRows !== 0 && action === 'shiftEnter';\n    var toHeader = (action === 'upArrow' || enterFrozen) && current[0] === 0;\n    return {\n      swap: toHeader || (action === 'shiftTab' || action === 'leftArrow') && current[1] === 0,\n      toHeader: toHeader,\n      toFrozenRight: toHeader\n    };\n  };\n\n  FixedRightContentFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n    if (previous === void 0) {\n      previous = [];\n    }\n\n    var current2 = [];\n\n    if (action === 'rightArrow' || action === 'tab') {\n      current2[0] = previous[0];\n      current2[1] = -1;\n    }\n\n    if (action === 'downArrow' || action === 'enter') {\n      current2[0] = -1;\n      current2[1] = previous[1];\n    }\n\n    return current2;\n  };\n\n  return FixedRightContentFocus;\n}(ContentFocus);\n\nexport { FixedRightContentFocus };\n\nvar FixedRightHeaderFocus =\n/** @class */\nfunction (_super) {\n  __extends(FixedRightHeaderFocus, _super);\n\n  function FixedRightHeaderFocus() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n\n  FixedRightHeaderFocus.prototype.jump = function (action, current) {\n    var headerMat = this.parent.focusModule.header && this.parent.focusModule.header.matrix.matrix;\n    var isPresent = headerMat && !isNullOrUndefined(headerMat[current[0]]);\n    var enterFrozen = this.parent.frozenRows !== 0 && action === 'enter';\n    var frozenSwap = (action === 'leftArrow' || action === 'shiftLeft' && this.getGridSeletion() || action === 'shiftTab') && current[1] === 0;\n    var swap = (action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1 || isPresent && frozenSwap;\n    var toFrozen = (action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1;\n    return {\n      swap: swap,\n      toHeader: frozenSwap,\n      toFrozenRight: toFrozen\n    };\n  };\n\n  FixedRightHeaderFocus.prototype.getTable = function () {\n    return this.parent.getHeaderContent().querySelector('.e-frozen-right-header .e-table');\n  };\n\n  FixedRightHeaderFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n    if (previous === void 0) {\n      previous = [];\n    }\n\n    var current3 = [];\n\n    if (action === 'rightArrow' || action === 'shiftRight' && this.getGridSeletion() || action === 'tab') {\n      current3[0] = previous[0];\n      current3[1] = 0;\n    }\n\n    if (action === 'upArrow' || action === 'shiftEnter') {\n      current3[0] = this.matrix.matrix.length;\n      current3[1] = previous[1];\n    }\n\n    return current3;\n  };\n\n  return FixedRightHeaderFocus;\n}(HeaderFocus);\n\nexport { FixedRightHeaderFocus };","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\n/**\n * RendererFactory\n * @hidden\n */\n\nvar RendererFactory =\n/** @class */\nfunction () {\n  function RendererFactory() {\n    this.rendererMap = {};\n  }\n\n  RendererFactory.prototype.addRenderer = function (name, type) {\n    var rName = getEnumValue(RenderType, name);\n\n    if (isNullOrUndefined(this.rendererMap[rName])) {\n      this.rendererMap[rName] = type;\n    }\n  };\n\n  RendererFactory.prototype.getRenderer = function (name) {\n    var rName = getEnumValue(RenderType, name);\n\n    if (isNullOrUndefined(this.rendererMap[rName])) {\n      throw \"The renderer \" + rName + \" is not found\";\n    } else {\n      return this.rendererMap[rName];\n    }\n  };\n\n  return RendererFactory;\n}();\n\nexport { RendererFactory };","import { isNullOrUndefined, getValue, setValue } from '@syncfusion/ej2-base';\nimport { Row } from '../models/row';\nimport { CellType } from '../base/enum';\nimport { Cell } from '../models/cell';\nimport { getUid } from '../base/util';\nimport { getForeignData } from '../../grid/base/util';\nimport * as events from '../base/constant';\n/**\n * RowModelGenerator is used to generate grid data rows.\n * @hidden\n */\n\nvar RowModelGenerator =\n/** @class */\nfunction () {\n  /**\n   * Constructor for header renderer module\n   */\n  function RowModelGenerator(parent) {\n    this.parent = parent;\n  }\n\n  RowModelGenerator.prototype.generateRows = function (data, args) {\n    var rows = [];\n    var startIndex = this.parent.enableVirtualization && args ? args.startIndex : 0;\n    startIndex = this.parent.enableInfiniteScrolling && args ? this.getInfiniteIndex(args) : startIndex;\n\n    for (var i = 0, len = Object.keys(data).length; i < len; i++, startIndex++) {\n      rows[i] = this.generateRow(data[i], startIndex);\n    }\n\n    return rows;\n  };\n\n  RowModelGenerator.prototype.ensureColumns = function () {\n    //TODO: generate dummy column for group, detail here;\n    var cols = [];\n\n    if (this.parent.detailTemplate || this.parent.childGrid) {\n      var args = {};\n      this.parent.notify(events.detailIndentCellInfo, args);\n      cols.push(this.generateCell(args, null, CellType.DetailExpand));\n    }\n\n    if (this.parent.isRowDragable()) {\n      cols.push(this.generateCell({}, null, CellType.RowDragIcon));\n    }\n\n    return cols;\n  };\n\n  RowModelGenerator.prototype.generateRow = function (data, index, cssClass, indent, pid, tIndex, parentUid) {\n    var options = {};\n    options.foreignKeyData = {};\n    options.uid = getUid('grid-row');\n    options.data = data;\n    options.index = index;\n    options.indent = indent;\n    options.tIndex = tIndex;\n    options.isDataRow = true;\n    options.parentGid = pid;\n    options.parentUid = parentUid;\n\n    if (this.parent.isPrinting) {\n      if (this.parent.hierarchyPrintMode === 'All') {\n        options.isExpand = true;\n      } else if (this.parent.hierarchyPrintMode === 'Expanded' && this.parent.expandedRows && this.parent.expandedRows[index]) {\n        options.isExpand = this.parent.expandedRows[index].isExpand;\n      }\n    }\n\n    options.cssClass = cssClass;\n    options.isAltRow = this.parent.enableAltRow ? index % 2 !== 0 : false;\n    options.isAltRow = this.parent.enableAltRow ? index % 2 !== 0 : false;\n    options.isSelected = this.parent.getSelectedRowIndexes().indexOf(index) > -1;\n    this.refreshForeignKeyRow(options);\n    var cells = this.ensureColumns();\n    var row = new Row(options, this.parent);\n    row.cells = this.parent.getFrozenMode() === 'Right' ? this.generateCells(options).concat(cells) : cells.concat(this.generateCells(options));\n    return row;\n  };\n\n  RowModelGenerator.prototype.refreshForeignKeyRow = function (options) {\n    var foreignKeyColumns = this.parent.getForeignKeyColumns();\n\n    for (var i = 0; i < foreignKeyColumns.length; i++) {\n      setValue(foreignKeyColumns[i].field, getForeignData(foreignKeyColumns[i], options.data), options.foreignKeyData);\n    }\n  };\n\n  RowModelGenerator.prototype.generateCells = function (options) {\n    var dummies = this.parent.getColumns();\n    var tmp = [];\n\n    for (var i = 0; i < dummies.length; i++) {\n      tmp.push(this.generateCell(dummies[i], options.uid, isNullOrUndefined(dummies[i].commands) ? undefined : CellType.CommandColumn, null, i, options.foreignKeyData));\n    }\n\n    return tmp;\n  };\n\n  RowModelGenerator.prototype.generateCell = function (column, rowId, cellType, colSpan, oIndex, foreignKeyData) {\n    var opt = {\n      'visible': column.visible,\n      'isDataCell': !isNullOrUndefined(column.field || column.template),\n      'isTemplate': !isNullOrUndefined(column.template),\n      'rowID': rowId,\n      'column': column,\n      'cellType': !isNullOrUndefined(cellType) ? cellType : CellType.Data,\n      'colSpan': colSpan,\n      'commands': column.commands,\n      'isForeignKey': column.isForeignColumn && column.isForeignColumn(),\n      'foreignKeyData': column.isForeignColumn && column.isForeignColumn() && getValue(column.field, foreignKeyData)\n    };\n\n    if (opt.isDataCell || opt.column.type === 'checkbox' || opt.commands) {\n      opt.index = oIndex;\n    }\n\n    return new Cell(opt);\n  };\n\n  RowModelGenerator.prototype.refreshRows = function (input) {\n    for (var i = 0; i < input.length; i++) {\n      this.refreshForeignKeyRow(input[i]);\n      input[i].cells = this.generateCells(input[i]);\n    }\n\n    return input;\n  };\n\n  RowModelGenerator.prototype.getInfiniteIndex = function (args) {\n    return args.requestType === 'infiniteScroll' || args.requestType === 'delete' || args.action === 'add' ? args.startIndex : 0;\n  };\n\n  return RowModelGenerator;\n}();\n\nexport { RowModelGenerator };","import { Dialog } from '@syncfusion/ej2-popups';\nimport { EventHandler, remove } from '@syncfusion/ej2-base';\nimport { parentsUntil, addBiggerDialog, addRemoveEventListener } from '../base/util';\nimport * as events from '../base/constant';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { ResponsiveDialogAction } from '../base/enum';\n/**\n *\n * The `ResponsiveDialogRenderer` module is used to render the responsive dialogs.\n */\n\nvar ResponsiveDialogRenderer =\n/** @class */\nfunction () {\n  /**\n   * Constructor for Grid Responsive dialog renderer\n   * @hidden\n   */\n  function ResponsiveDialogRenderer(parent, serviceLocator) {\n    this.sortedCols = [];\n    this.sortPredicate = [];\n    /** @hidden */\n\n    this.isCustomDialog = false;\n    this.parent = parent;\n    this.serviceLocator = serviceLocator;\n    this.addEventListener();\n  }\n\n  ResponsiveDialogRenderer.prototype.addEventListener = function () {\n    this.evtHandlers = [{\n      event: events.filterDialogClose,\n      handler: this.closeCustomDialog\n    }, {\n      event: events.refreshCustomFilterOkBtn,\n      handler: this.refreshCustomFilterOkBtn\n    }, {\n      event: events.renderResponsiveCmenu,\n      handler: this.renderResponsiveContextMenu\n    }, {\n      event: events.filterCmenuSelect,\n      handler: this.renderCustomFilterDiv\n    }, {\n      event: events.customFilterClose,\n      handler: this.customExFilterClose\n    }, {\n      event: events.refreshCustomFilterClearBtn,\n      handler: this.refreshCustomFilterClearBtn\n    }];\n    addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n    this.onActionCompleteFn = this.editComplate.bind(this);\n    this.parent.addEventListener(events.actionComplete, this.onActionCompleteFn);\n  };\n\n  ResponsiveDialogRenderer.prototype.customExFilterClose = function () {\n    this.isCustomDlgRender = false;\n  };\n\n  ResponsiveDialogRenderer.prototype.renderCustomFilterDiv = function () {\n    var header = this.customResponsiveDlg.element.querySelector('.e-dlg-header-content');\n    var title = header.querySelector('.e-dlg-custom-header');\n    var closeBtn = header.querySelector('.e-dlg-closeicon-btn');\n    this.isCustomDlgRender = true;\n    this.parent.filterModule.filterModule.closeDialog();\n    this.saveBtn.element.style.display = '';\n    this.refreshCustomFilterOkBtn({\n      disabled: false\n    });\n    this.backBtn.element.style.display = 'none';\n    closeBtn.style.display = '';\n    title.innerHTML = this.parent.localeObj.getConstant('CustomFilter');\n    var content = this.customResponsiveDlg.element.querySelector('.e-dlg-content');\n    this.customExcelFilterParent = this.parent.createElement('div', {\n      className: 'e-xl-customfilterdiv e-default-filter'\n    });\n    content.appendChild(this.customExcelFilterParent);\n  };\n\n  ResponsiveDialogRenderer.prototype.renderResponsiveContextMenu = function (args) {\n    if (this.action === ResponsiveDialogAction.isFilter) {\n      var content = this.customResponsiveDlg.element.querySelector('.e-dlg-content');\n      var header = this.customResponsiveDlg.element.querySelector('.e-dlg-header-content');\n      var closeBtn = header.querySelector('.e-dlg-closeicon-btn');\n      var text = header.querySelector('.e-dlg-custom-header');\n\n      if (args.isOpen) {\n        content.firstChild.style.display = 'none';\n        content.appendChild(args.target);\n        closeBtn.style.display = 'none';\n        this.saveBtn.element.style.display = 'none';\n        this.filterClearBtn.element.style.display = 'none';\n        text.innerHTML = args.header;\n        var backBtn = this.parent.createElement('button');\n        var span = this.parent.createElement('span', {\n          className: 'e-btn-icon e-resfilterback e-icons'\n        });\n        backBtn.appendChild(span);\n        this.backBtn = new Button({\n          cssClass: 'e-res-back-btn'\n        });\n        this.backBtn.appendTo(backBtn);\n        text.parentElement.insertBefore(backBtn, text);\n      } else if (this.backBtn && !this.isCustomDlgRender) {\n        content.firstChild.style.display = '';\n        remove(this.backBtn.element);\n        closeBtn.style.display = '';\n        this.saveBtn.element.style.display = '';\n\n        if (this.isFiltered) {\n          this.filterClearBtn.element.style.display = '';\n        }\n\n        text.innerHTML = this.getHeaderTitle({\n          action: ResponsiveDialogAction.isFilter\n        }, args.col);\n      }\n    }\n  };\n\n  ResponsiveDialogRenderer.prototype.refreshCustomFilterClearBtn = function (args) {\n    if (this.filterClearBtn) {\n      this.isFiltered = args.isFiltered;\n      this.filterClearBtn.element.style.display = args.isFiltered ? '' : 'none';\n    }\n  };\n\n  ResponsiveDialogRenderer.prototype.refreshCustomFilterOkBtn = function (args) {\n    if (this.saveBtn) {\n      this.saveBtn.disabled = args.disabled;\n    }\n  };\n\n  ResponsiveDialogRenderer.prototype.renderResponsiveContent = function (col) {\n    var _this = this;\n\n    var gObj = this.parent;\n\n    if (col) {\n      this.filterParent = this.parent.createElement('div', {\n        className: 'e-mainfilterdiv e-default-filter',\n        id: col.uid + '-main-filter'\n      });\n      return this.filterParent;\n    } else {\n      var cols = gObj.getColumns();\n      this.customColumnDiv = gObj.createElement('div', {\n        className: 'columndiv',\n        styles: 'width: 100%'\n      });\n      var sortBtnParent = gObj.createElement('div', {\n        className: 'e-ressortbutton-parent'\n      });\n      var filteredCols = [];\n      var isSort = this.action === ResponsiveDialogAction.isSort;\n      var isFilter = this.action === ResponsiveDialogAction.isFilter;\n\n      if (isFilter) {\n        for (var i = 0; i < gObj.filterSettings.columns.length; i++) {\n          filteredCols.push(gObj.filterSettings.columns[i].field);\n        }\n      }\n\n      for (var i = 0; i < cols.length; i++) {\n        if (!cols[i].visible || !cols[i].allowSorting && isSort || !cols[i].allowFiltering && isFilter) {\n          continue;\n        }\n\n        var cDiv = gObj.createElement('div', {\n          className: 'e-responsivecoldiv'\n        });\n        cDiv.setAttribute('data-e-mappingname', cols[i].field);\n        cDiv.setAttribute('data-e-mappinguid', cols[i].uid);\n        var span = gObj.createElement('span', {\n          innerHTML: cols[i].headerText,\n          className: 'e-res-header-text'\n        });\n        cDiv.appendChild(span);\n        this.customColumnDiv.appendChild(cDiv);\n\n        if (isSort) {\n          var fields = this.getSortedFieldsAndDirections('field');\n          var index = fields.indexOf(cols[i].field);\n          var button = gObj.createElement('button', {\n            id: gObj.element.id + cols[i].field + 'sortbutton'\n          });\n          var clone = sortBtnParent.cloneNode();\n          clone.appendChild(button);\n          cDiv.appendChild(clone);\n          var btnObj = new Button({\n            cssClass: 'e-ressortbutton'\n          });\n          btnObj.appendTo(button);\n          button.innerHTML = index > -1 ? this.parent.sortSettings.columns[index].direction : 'None';\n\n          button.onclick = function (e) {\n            _this.sortButtonClickHandler(e.target);\n          };\n        }\n\n        if (isFilter && filteredCols.indexOf(cols[i].field) > -1) {\n          var divIcon = gObj.createElement('div', {\n            className: 'e-icons e-res-icon e-filtersetdiv'\n          });\n          var iconSpan = gObj.createElement('span', {\n            className: 'e-icons e-res-icon e-filterset'\n          });\n          iconSpan.setAttribute('colType', cols[i].type);\n          divIcon.appendChild(iconSpan);\n          cDiv.appendChild(divIcon);\n        }\n      }\n\n      EventHandler.add(this.customColumnDiv, 'click', this.customFilterColumnClickHandler, this);\n      return this.customColumnDiv;\n    }\n  };\n\n  ResponsiveDialogRenderer.prototype.getSortedFieldsAndDirections = function (name) {\n    var fields = [];\n\n    for (var i = 0; i < this.parent.sortSettings.columns.length; i++) {\n      fields.push(this.parent.sortSettings.columns[i][name]);\n    }\n\n    return fields;\n  };\n\n  ResponsiveDialogRenderer.prototype.sortButtonClickHandler = function (target) {\n    if (target) {\n      var columndiv = parentsUntil(target, 'e-responsivecoldiv');\n      var field = columndiv.getAttribute('data-e-mappingname');\n\n      if (!this.parent.allowMultiSorting) {\n        this.sortPredicate = [];\n        this.sortedCols = [];\n        this.isSortApplied = false;\n        this.resetSortButtons(target);\n      }\n\n      var txt = target.textContent;\n      var direction = txt === 'None' ? 'Ascending' : txt === 'Ascending' ? 'Descending' : 'None';\n      target.innerHTML = direction;\n      this.setSortedCols(field, direction);\n    }\n  };\n\n  ResponsiveDialogRenderer.prototype.resetSortButtons = function (target) {\n    var buttons = [].slice.call(this.customColumnDiv.getElementsByClassName('e-ressortbutton'));\n\n    for (var i = 0; i < buttons.length; i++) {\n      if (buttons[i] !== target) {\n        buttons[i].innerHTML = 'None';\n      }\n    }\n  };\n\n  ResponsiveDialogRenderer.prototype.setSortedCols = function (field, direction) {\n    var fields = this.getCurrentSortedFields();\n    var index = fields.indexOf(field);\n\n    if (this.parent.allowMultiSorting && index > -1) {\n      this.sortedCols.splice(index, 1);\n      this.sortPredicate.splice(index, 1);\n    }\n\n    this.isSortApplied = true;\n\n    if (direction !== 'None') {\n      this.sortedCols.push(field);\n      this.sortPredicate.push({\n        field: field,\n        direction: direction\n      });\n    }\n  };\n\n  ResponsiveDialogRenderer.prototype.getCurrentSortedFields = function () {\n    var fields = [];\n\n    for (var i = 0; i < this.sortedCols.length; i++) {\n      fields.push(this.sortedCols[i]);\n    }\n\n    return fields;\n  };\n\n  ResponsiveDialogRenderer.prototype.customFilterColumnClickHandler = function (e) {\n    if (this.action !== ResponsiveDialogAction.isFilter) {\n      return;\n    }\n\n    var gObj = this.parent;\n    var target = e.target;\n\n    if (gObj.filterSettings.type !== 'FilterBar') {\n      if (target.classList.contains('e-responsivecoldiv') || target.parentElement.classList.contains('e-responsivecoldiv')) {\n        var field = target.getAttribute('data-e-mappingname');\n\n        if (!field) {\n          field = target.parentElement.getAttribute('data-e-mappingname');\n        }\n\n        if (field) {\n          var col = gObj.getColumnByField(field);\n          this.isRowResponsive = true;\n          this.showResponsiveDialog(col);\n        }\n      } else if (target.classList.contains('e-filterset') || target.parentElement.classList.contains('e-filtersetdiv')) {\n        var colDiv = parentsUntil(target, 'e-responsivecoldiv');\n\n        if (colDiv) {\n          var field = colDiv.getAttribute('data-e-mappingname');\n          var col = gObj.getColumnByField(field);\n\n          if (col.filter.type === 'Menu' || !col.filter.type && gObj.filterSettings.type === 'Menu') {\n            this.isDialogClose = true;\n          }\n\n          this.parent.filterModule.filterModule.clearCustomFilter(col);\n          this.removeCustomDlgFilterEle(target);\n        }\n      }\n    }\n  };\n  /**\n   * To show the responsive custom filter dialog\n   * @return {void}\n   * @hidden\n   */\n\n\n  ResponsiveDialogRenderer.prototype.showResponsiveDialog = function (col) {\n    if (this.isCustomDialog && this.action === ResponsiveDialogAction.isFilter && !this.isRowResponsive) {\n      this.renderCustomFilterDialog();\n    } else {\n      this.filteredCol = col;\n      this.renderResponsiveDialog(col);\n\n      if (this.parent.enableAdaptiveUI && col) {\n        this.parent.filterModule.setFilterModel(col);\n        this.parent.filterModule.filterModule.openDialog(this.parent.filterModule.createOptions(col, undefined));\n      }\n\n      if (this.action === ResponsiveDialogAction.isSort) {\n        var args = {\n          cancel: false,\n          dialogObj: this.customResponsiveDlg,\n          requestType: 'beforeOpenAptiveSortDialog'\n        };\n        this.parent.trigger(events.beforeOpenAdaptiveDialog, args);\n\n        if (args.cancel) {\n          return;\n        }\n      }\n\n      this.customResponsiveDlg.show(true);\n      this.customResponsiveDlg.element.style.maxHeight = '100%';\n      this.setTopToChildDialog(this.customResponsiveDlg.element);\n    }\n  };\n\n  ResponsiveDialogRenderer.prototype.setTopToChildDialog = function (dialogEle) {\n    var child = dialogEle.querySelector('.e-dialog');\n\n    if (child) {\n      var top_1 = dialogEle.querySelector('.e-dlg-header-content').getBoundingClientRect().height;\n      child.style.top = top_1 + 'px';\n    }\n  };\n\n  ResponsiveDialogRenderer.prototype.renderCustomFilterDialog = function (col) {\n    var gObj = this.parent;\n\n    if (this.action === ResponsiveDialogAction.isFilter && gObj.filterSettings.type === 'FilterBar') {\n      return;\n    }\n\n    var outerDiv = this.parent.createElement('div', {\n      id: gObj.element.id + 'customfilter',\n      className: 'e-customfilterdiv e-responsive-dialog'\n    });\n    this.parent.element.appendChild(outerDiv);\n    this.customFilterDlg = this.getDialogOptions(col, true);\n    var args = {\n      cancel: false,\n      dialogObj: this.customFilterDlg,\n      requestType: 'beforeOpenAptiveFilterDialog'\n    };\n    this.parent.trigger(events.beforeOpenAdaptiveDialog, args);\n\n    if (args.cancel) {\n      return;\n    }\n\n    this.customFilterDlg.appendTo(outerDiv);\n    this.customFilterDlg.show(true);\n    this.customFilterDlg.element.style.maxHeight = '100%';\n  };\n\n  ResponsiveDialogRenderer.prototype.getDialogOptions = function (col, isCustomFilter, id) {\n    var options = new Dialog({\n      isModal: true,\n      showCloseIcon: true,\n      closeOnEscape: false,\n      locale: this.parent.locale,\n      target: this.parent.adaptiveDlgTarget ? this.parent.adaptiveDlgTarget : document.body,\n      visible: false,\n      enableRtl: this.parent.enableRtl,\n      content: this.renderResponsiveContent(col),\n      open: this.dialogOpen.bind(this),\n      created: this.dialogCreated.bind(this),\n      close: this.beforeDialogClose.bind(this),\n      width: '100%',\n      height: '100%',\n      animationSettings: {\n        effect: 'None'\n      }\n    });\n    var isStringTemplate = 'isStringTemplate';\n    options[isStringTemplate] = true;\n\n    if (isCustomFilter) {\n      options.header = this.renderResponsiveHeader(col, undefined, true);\n      options.cssClass = 'e-customfilter';\n    } else {\n      options.header = this.renderResponsiveHeader(col);\n      options.cssClass = this.parent.rowRenderingMode === 'Vertical' && this.action === ResponsiveDialogAction.isFilter ? 'e-res' + id + ' e-row-responsive-filter' : 'e-res' + id;\n    }\n\n    return options;\n  };\n\n  ResponsiveDialogRenderer.prototype.renderResponsiveDialog = function (col) {\n    var gObj = this.parent;\n\n    if (this.action === ResponsiveDialogAction.isFilter && gObj.filterSettings.type === 'FilterBar') {\n      return;\n    }\n\n    var id = this.action === ResponsiveDialogAction.isFilter ? 'filter' : 'sort';\n    var outerDiv = this.parent.createElement('div', {\n      id: gObj.element.id + 'responsive' + id,\n      className: 'e-res' + id + 'div e-responsive-dialog'\n    });\n    this.parent.element.appendChild(outerDiv);\n    this.customResponsiveDlg = this.getDialogOptions(col, false, id);\n    this.customResponsiveDlg.appendTo(outerDiv);\n  };\n\n  ResponsiveDialogRenderer.prototype.dialogCreated = function () {\n    addBiggerDialog(this.parent);\n  };\n\n  ResponsiveDialogRenderer.prototype.dialogOpen = function () {\n    if (this.action === ResponsiveDialogAction.isSort && this.parent.allowMultiSorting) {\n      for (var i = 0; i < this.parent.sortSettings.columns.length; i++) {\n        this.sortedCols.push(this.parent.sortSettings.columns[i].field);\n        var sortField = this.parent.sortSettings.columns[i].field;\n        var sortDirection = this.parent.sortSettings.columns[i].direction;\n        this.sortPredicate.push({\n          field: sortField,\n          direction: sortDirection\n        });\n      }\n    }\n  };\n\n  ResponsiveDialogRenderer.prototype.beforeDialogClose = function (args) {\n    this.isDialogClose = args.element && !args.element.querySelector('.e-xl-customfilterdiv') && args.element.classList.contains('e-resfilterdiv');\n\n    if (this.action === ResponsiveDialogAction.isFilter) {\n      if (args.element.classList.contains('e-resfilterdiv')) {\n        this.parent.filterModule.filterModule.closeResponsiveDialog(this.isCustomDlgRender);\n      } else if (args.element.classList.contains('e-customfilterdiv')) {\n        this.closeCustomFilter();\n      }\n    } else if (this.action === ResponsiveDialogAction.isSort) {\n      this.closeCustomDialog();\n    }\n\n    this.parent.off(events.enterKeyHandler, this.keyHandler);\n  };\n\n  ResponsiveDialogRenderer.prototype.sortColumn = function () {\n    if (!this.isSortApplied) {\n      this.closeCustomDialog();\n      return;\n    }\n\n    if (this.sortPredicate.length) {\n      this.parent.setProperties({\n        sortSettings: {\n          columns: []\n        }\n      }, true);\n    }\n\n    for (var i = 0; i < this.sortPredicate.length; i++) {\n      this.parent.sortColumn(this.sortPredicate[i].field, this.sortPredicate[i].direction, this.parent.allowMultiSorting);\n    }\n\n    if (!this.sortPredicate.length) {\n      this.parent.clearSorting();\n    }\n\n    this.closeCustomDialog();\n  };\n\n  ResponsiveDialogRenderer.prototype.getHeaderTitle = function (args, col) {\n    var gObj = this.parent;\n    var title;\n\n    if (this.action === ResponsiveDialogAction.isEdit) {\n      title = gObj.localeObj.getConstant('EditFormTitle') + args.primaryKeyValue[0];\n    } else if (this.action === ResponsiveDialogAction.isAdd) {\n      title = gObj.localeObj.getConstant('AddFormTitle');\n    } else if (this.action === ResponsiveDialogAction.isFilter) {\n      title = col ? col.headerText || col.field : gObj.localeObj.getConstant('FilterButton');\n    } else if (this.action === ResponsiveDialogAction.isSort) {\n      title = gObj.localeObj.getConstant('Sort');\n    }\n\n    return title;\n  };\n\n  ResponsiveDialogRenderer.prototype.getDialogName = function (action) {\n    var name;\n\n    if (action === ResponsiveDialogAction.isAdd || action === ResponsiveDialogAction.isEdit) {\n      name = 'dialogEdit_wrapper_title';\n    } else if (action === ResponsiveDialogAction.isFilter) {\n      name = 'responsive_filter_dialog_wrapper';\n    }\n\n    return name;\n  };\n\n  ResponsiveDialogRenderer.prototype.getButtonText = function (action) {\n    var text;\n\n    if (action === ResponsiveDialogAction.isAdd || action === ResponsiveDialogAction.isEdit) {\n      text = 'Save';\n    } else if (action === ResponsiveDialogAction.isFilter || this.action === ResponsiveDialogAction.isSort) {\n      text = 'OKButton';\n    }\n\n    return text;\n  };\n  /** @hidden */\n\n\n  ResponsiveDialogRenderer.prototype.renderResponsiveHeader = function (col, args, isCustomFilter) {\n    var _this = this;\n\n    var gObj = this.parent;\n    gObj.on(events.enterKeyHandler, this.keyHandler, this);\n    var id = gObj.element.id + this.getDialogName(this.action);\n    var header = gObj.createElement('div', {\n      className: 'e-res-custom-element'\n    });\n    var titleDiv = gObj.createElement('div', {\n      className: 'e-dlg-custom-header',\n      id: id\n    });\n    titleDiv.innerHTML = this.getHeaderTitle(args, col);\n    header.appendChild(titleDiv);\n    var saveBtn = gObj.createElement('button');\n\n    if (!isCustomFilter) {\n      this.saveBtn = new Button({\n        cssClass: 'e-primary e-flat e-res-apply-btn'\n      });\n      saveBtn.innerHTML = gObj.localeObj.getConstant(this.getButtonText(this.action));\n      this.saveBtn.appendTo(saveBtn);\n\n      saveBtn.onclick = function (e) {\n        _this.dialogHdrBtnClickHandler();\n      };\n    }\n\n    var isSort = this.action === ResponsiveDialogAction.isSort;\n    var isFilter = this.action === ResponsiveDialogAction.isFilter;\n\n    if (isFilter || isSort) {\n      var id_1 = isSort ? 'sort' : 'filter';\n      var clearBtn = gObj.createElement('button');\n      this.filterClearBtn = new Button({\n        cssClass: 'e-primary e-flat e-res-' + id_1 + '-clear-btn'\n      });\n\n      if (isFilter) {\n        var span = gObj.createElement('span', {\n          className: 'e-btn-icon e-icon-filter-clear e-icons'\n        });\n        clearBtn.appendChild(span);\n      } else {\n        clearBtn.innerHTML = gObj.localeObj.getConstant('Clear');\n      }\n\n      header.appendChild(clearBtn);\n      this.filterClearBtn.appendTo(clearBtn);\n\n      clearBtn.onclick = function (e) {\n        if (parentsUntil(e.target, 'e-customfilter')) {\n          _this.parent.filterModule.clearFiltering();\n\n          _this.removeCustomDlgFilterEle();\n        } else {\n          if (isFilter) {\n            _this.filterClear();\n          } else {\n            _this.resetSortButtons();\n\n            _this.sortedCols = [];\n            _this.sortPredicate = [];\n            _this.isSortApplied = true;\n          }\n        }\n      };\n\n      header.appendChild(clearBtn);\n    }\n\n    if (!isCustomFilter) {\n      header.appendChild(saveBtn);\n    }\n\n    return header;\n  };\n\n  ResponsiveDialogRenderer.prototype.filterClear = function () {\n    this.parent.filterModule.filterModule.clearCustomFilter(this.filteredCol);\n    this.parent.filterModule.filterModule.closeResponsiveDialog();\n  };\n\n  ResponsiveDialogRenderer.prototype.dialogHdrBtnClickHandler = function () {\n    if (this.action === ResponsiveDialogAction.isEdit || this.action === ResponsiveDialogAction.isAdd) {\n      this.parent.endEdit();\n    } else if (this.action === ResponsiveDialogAction.isFilter) {\n      this.parent.filterModule.filterModule.applyCustomFilter({\n        col: this.filteredCol,\n        isCustomFilter: this.isCustomDlgRender\n      });\n    } else if (this.action === ResponsiveDialogAction.isSort) {\n      this.sortColumn();\n    }\n  };\n\n  ResponsiveDialogRenderer.prototype.closeCustomDialog = function () {\n    if (this.isCustomDlgRender) {\n      var mainfilterdiv = this.customResponsiveDlg.element.querySelector('.e-mainfilterdiv');\n      remove(mainfilterdiv);\n      return;\n    }\n\n    this.isRowResponsive = false;\n    this.isCustomDlgRender = false;\n    this.destroyCustomFilterDialog();\n  };\n\n  ResponsiveDialogRenderer.prototype.destroyCustomFilterDialog = function () {\n    if (!this.customResponsiveDlg) {\n      return;\n    }\n\n    var elem = document.getElementById(this.customResponsiveDlg.element.id);\n\n    if (this.customResponsiveDlg && !this.customResponsiveDlg.isDestroyed && elem) {\n      this.customResponsiveDlg.destroy();\n      remove(elem);\n    }\n\n    this.closeCustomFilter();\n\n    if (this.action === ResponsiveDialogAction.isSort) {\n      this.sortPredicate = [];\n      this.sortedCols = [];\n      this.isSortApplied = false;\n    }\n  };\n\n  ResponsiveDialogRenderer.prototype.closeCustomFilter = function () {\n    if (!this.isDialogClose && this.customFilterDlg) {\n      var customEle = document.getElementById(this.customFilterDlg.element.id);\n\n      if (this.customFilterDlg && !this.customFilterDlg.isDestroyed && customEle) {\n        this.customFilterDlg.destroy();\n        remove(customEle);\n      }\n    }\n\n    this.isCustomDialog = false;\n    this.isDialogClose = false;\n  };\n\n  ResponsiveDialogRenderer.prototype.removeCustomDlgFilterEle = function (target) {\n    if (target) {\n      if (target.parentElement.classList.contains('e-filtersetdiv')) {\n        remove(target.parentElement);\n      } else {\n        remove(target);\n      }\n    } else {\n      var child = this.customColumnDiv.children;\n\n      for (var i = 0; i < child.length; i++) {\n        target = child[i].querySelector('.e-filtersetdiv');\n\n        if (target) {\n          remove(target);\n          i--;\n        }\n      }\n    }\n  };\n\n  ResponsiveDialogRenderer.prototype.keyHandler = function (e) {\n    if (e.keyCode === 13 && (this.action === ResponsiveDialogAction.isFilter && e.target.classList.contains('e-searchinput') || this.action === ResponsiveDialogAction.isEdit || this.action === ResponsiveDialogAction.isAdd)) {\n      this.dialogHdrBtnClickHandler();\n    }\n  };\n\n  ResponsiveDialogRenderer.prototype.editComplate = function (args) {\n    if (args.requestType === 'save' || args.requestType === 'cancel') {\n      this.parent.off(events.enterKeyHandler, this.keyHandler);\n    }\n  };\n\n  ResponsiveDialogRenderer.prototype.removeEventListener = function () {\n    if (this.customColumnDiv) {\n      EventHandler.remove(this.customColumnDiv, 'click', this.customFilterColumnClickHandler);\n    }\n\n    addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n    this.parent.removeEventListener(events.actionComplete, this.onActionCompleteFn);\n  };\n\n  return ResponsiveDialogRenderer;\n}();\n\nexport { ResponsiveDialogRenderer };","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ResponsiveDialogRenderer } from '../renderer/responsive-dialog-renderer';\n/**\n * ServiceLocator\n * @hidden\n */\n\nvar ServiceLocator =\n/** @class */\nfunction () {\n  function ServiceLocator() {\n    this.services = {};\n  }\n\n  ServiceLocator.prototype.register = function (name, type) {\n    if (isNullOrUndefined(this.services[name])) {\n      this.services[name] = type;\n    }\n  };\n\n  ServiceLocator.prototype.getService = function (name) {\n    if (isNullOrUndefined(this.services[name])) {\n      throw \"The service \" + name + \" is not registered\";\n    }\n\n    return this.services[name];\n  };\n\n  ServiceLocator.prototype.registerAdaptiveService = function (type, isAdaptiveUI, action) {\n    if (isAdaptiveUI) {\n      type.responsiveDialogRenderer = new ResponsiveDialogRenderer(type.parent, type.serviceLocator);\n      type.responsiveDialogRenderer.action = action;\n    } else {\n      if (type.responsiveDialogRenderer) {\n        type.responsiveDialogRenderer.removeEventListener();\n        type.responsiveDialogRenderer = undefined;\n      }\n    }\n  };\n\n  return ServiceLocator;\n}();\n\nexport { ServiceLocator };","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization, setCulture } from '@syncfusion/ej2-base';\n/**\n * ValueFormatter class to globalize the value.\n * @hidden\n */\n\nvar ValueFormatter =\n/** @class */\nfunction () {\n  function ValueFormatter(cultureName) {\n    this.intl = new Internationalization();\n\n    if (!isNullOrUndefined(cultureName)) {\n      this.intl.culture = cultureName;\n    }\n  }\n\n  ValueFormatter.prototype.getFormatFunction = function (format) {\n    if (format.type) {\n      return this.intl.getDateFormat(format);\n    } else {\n      return this.intl.getNumberFormat(format);\n    }\n  };\n\n  ValueFormatter.prototype.getParserFunction = function (format) {\n    if (format.type) {\n      return this.intl.getDateParser(format);\n    } else {\n      return this.intl.getNumberParser(format);\n    }\n  };\n\n  ValueFormatter.prototype.fromView = function (value, format, type) {\n    if ((type === 'date' || type === 'datetime' || type === 'number') && !isNullOrUndefined(format)) {\n      return format(value);\n    } else {\n      return value;\n    }\n  };\n\n  ValueFormatter.prototype.toView = function (value, format) {\n    var result = value;\n\n    if (!isNullOrUndefined(format) && !isNullOrUndefined(value)) {\n      result = format(value);\n    }\n\n    return result;\n  };\n\n  ValueFormatter.prototype.setCulture = function (cultureName) {\n    if (!isNullOrUndefined(cultureName)) {\n      setCulture(cultureName);\n    }\n  };\n\n  return ValueFormatter;\n}();\n\nexport { ValueFormatter };","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { formatUnit } from '@syncfusion/ej2-base';\nimport { columnWidthChanged, preventFrozenScrollRefresh } from '../base/constant';\nimport { Column } from '../models/column';\nimport { parentsUntil, ispercentageWidth, getScrollBarWidth } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * ColumnWidthService\n * @hidden\n */\n\nvar ColumnWidthService =\n/** @class */\nfunction () {\n  function ColumnWidthService(parent) {\n    this.parent = parent;\n  }\n\n  ColumnWidthService.prototype.setWidthToColumns = function () {\n    var i = 0;\n    var indexes = this.parent.getColumnIndexesInView();\n    var wFlag = true;\n    var totalColumnsWidth = 0;\n\n    if (this.parent.allowGrouping) {\n      for (var len = this.parent.groupSettings.columns.length; i < len; i++) {\n        if (this.parent.enableColumnVirtualization && indexes.indexOf(i) === -1) {\n          wFlag = false;\n          continue;\n        }\n\n        this.setColumnWidth(new Column({\n          width: '30px'\n        }), i);\n      }\n    }\n\n    if (this.parent.detailTemplate || this.parent.childGrid) {\n      this.setColumnWidth(new Column({\n        width: '30px'\n      }), i);\n      i++;\n    }\n\n    if (this.parent.isRowDragable() && this.parent.getFrozenMode() !== 'Right') {\n      this.setColumnWidth(new Column({\n        width: '30px'\n      }), i);\n      i++;\n    }\n\n    var columns = this.parent.getColumns();\n\n    for (var j = 0; j < columns.length; j++) {\n      this.setColumnWidth(columns[j], wFlag && this.parent.enableColumnVirtualization ? undefined : j + i);\n    }\n\n    if (this.parent.isRowDragable() && this.parent.getFrozenMode() === 'Right') {\n      this.setColumnWidth(new Column({\n        width: '30px'\n      }), columns.length);\n    }\n\n    totalColumnsWidth = this.getTableWidth(this.parent.getColumns());\n\n    if (this.parent.width !== 'auto' && this.parent.width.toString().indexOf('%') === -1) {\n      this.setMinwidthBycalculation(totalColumnsWidth);\n    }\n  };\n\n  ColumnWidthService.prototype.setMinwidthBycalculation = function (tWidth) {\n    var difference = 0;\n    var collection = this.parent.getColumns().filter(function (a) {\n      return isNullOrUndefined(a.width) || a.width === 'auto';\n    });\n\n    if (collection.length) {\n      if (!isNullOrUndefined(this.parent.width) && this.parent.width !== 'auto' && typeof this.parent.width === 'string' && this.parent.width.indexOf('%') === -1) {\n        difference = (typeof this.parent.width === 'string' ? parseInt(this.parent.width, 10) : this.parent.width) - tWidth;\n      } else {\n        difference = this.parent.element.getBoundingClientRect().width - tWidth;\n      }\n\n      var tmWidth = 0;\n\n      for (var _i = 0, collection_1 = collection; _i < collection_1.length; _i++) {\n        var cols = collection_1[_i];\n        tmWidth += !isNullOrUndefined(cols.minWidth) ? typeof cols.minWidth === 'string' ? parseInt(cols.minWidth, 10) : cols.minWidth : 0;\n      }\n\n      for (var i = 0; i < collection.length; i++) {\n        if (tWidth === 0 && this.parent.allowResizing && this.isWidthUndefined() && i !== collection.length - 1) {\n          this.setUndefinedColumnWidth(collection);\n        }\n\n        var index = this.parent.getColumnIndexByField(collection[i].field) + this.parent.getIndentCount();\n\n        if (tWidth !== 0 && difference < tmWidth) {\n          this.setWidth(collection[i].minWidth, index);\n        } else if (tWidth !== 0 && difference > tmWidth) {\n          this.setWidth('', index, true);\n        }\n      }\n    }\n  };\n\n  ColumnWidthService.prototype.setUndefinedColumnWidth = function (collection) {\n    for (var k = 0; k < collection.length; k++) {\n      if (k !== collection.length - 1) {\n        collection[k].width = 200;\n        this.setWidth(200, this.parent.getColumnIndexByField(collection[k].field));\n      }\n    }\n  };\n\n  ColumnWidthService.prototype.setColumnWidth = function (column, index, module) {\n    if (this.parent.getColumns().length < 1) {\n      return;\n    }\n\n    var columnIndex = isNullOrUndefined(index) ? this.parent.getNormalizedColumnIndex(column.uid) : index;\n    var cWidth = this.getWidth(column);\n    var tgridWidth = this.getTableWidth(this.parent.getColumns());\n\n    if (cWidth !== null) {\n      this.setWidth(cWidth, columnIndex);\n\n      if (this.parent.width !== 'auto' && this.parent.width.toString().indexOf('%') === -1) {\n        this.setMinwidthBycalculation(tgridWidth);\n      }\n\n      if (this.parent.allowResizing && module === 'resize' || this.parent.getFrozenColumns() && this.parent.allowResizing) {\n        this.setWidthToTable();\n      }\n\n      this.parent.notify(columnWidthChanged, {\n        index: columnIndex,\n        width: cWidth,\n        column: column,\n        module: module\n      });\n    }\n  };\n\n  ColumnWidthService.prototype.setWidth = function (width, index, clear) {\n    if (this.parent.groupSettings.columns.length > index && ispercentageWidth(this.parent)) {\n      var elementWidth = this.parent.element.offsetWidth;\n      width = (30 / elementWidth * 100).toFixed(1) + '%';\n    }\n\n    var header = this.parent.getHeaderTable();\n    var content = this.parent.getContentTable();\n    var fWidth = formatUnit(width);\n    var headerCol;\n    var frzCols = this.parent.getFrozenColumns();\n    var isDraggable = this.parent.isRowDragable();\n    frzCols = frzCols && isDraggable ? frzCols + 1 : frzCols;\n    var mHdr = this.parent.getHeaderContent().querySelector('.' + literals.movableHeader);\n    var mCont = this.parent.getContent().querySelector('.' + literals.movableContent);\n    var freezeLeft = this.parent.getFrozenLeftColumnsCount();\n    var freezeRight = this.parent.getFrozenRightColumnsCount();\n    var movableCount = this.parent.getMovableColumnsCount();\n    var isColFrozen = freezeLeft !== 0 || freezeRight !== 0;\n\n    if (frzCols && index >= frzCols && mHdr && mHdr.querySelector(literals.colGroup)) {\n      headerCol = mHdr.querySelector(literals.colGroup).children[index - frzCols];\n    } else if (this.parent.enableColumnVirtualization && frzCols && this.parent.contentModule.isXaxis() && mHdr.scrollLeft > 0) {\n      var colGroup = mHdr.querySelector(literals.colGroup);\n      headerCol = colGroup.children[colGroup.children.length - 1 - index];\n    } else if (isColFrozen) {\n      var target = void 0;\n\n      if (freezeLeft && !freezeRight) {\n        index = isDraggable ? index - 1 : index;\n        target = index < freezeLeft ? header : mHdr;\n      } else if (!freezeLeft && freezeRight) {\n        target = index >= movableCount ? header : mHdr;\n      } else if (freezeLeft && freezeRight) {\n        index = isDraggable ? index - 1 : index;\n        var frHdr = this.parent.getFrozenRightHeader();\n        target = index < freezeLeft ? header : index < freezeLeft + movableCount ? mHdr : frHdr;\n      }\n\n      headerCol = this.getColumnLevelFrozenColgroup(index, freezeLeft, movableCount, target);\n\n      if (!headerCol) {\n        return;\n      }\n    } else {\n      headerCol = header.querySelector(literals.colGroup).children[index];\n    }\n\n    if (headerCol && !clear) {\n      headerCol.style.width = fWidth;\n    } else if (headerCol && clear) {\n      headerCol.style.width = '';\n    }\n\n    var contentCol;\n\n    if (frzCols && index >= frzCols) {\n      contentCol = this.parent.getContent().querySelector('.' + literals.movableContent).querySelector(literals.colGroup).children[index - frzCols];\n    } else if (this.parent.enableColumnVirtualization && frzCols && this.parent.contentModule.isXaxis() && mCont.scrollLeft > 0) {\n      var colGroup = this.parent.getContent().querySelector('.' + literals.movableContent).querySelector(literals.colGroup);\n      contentCol = colGroup.children[colGroup.children.length - 1 - index];\n    } else if (isColFrozen) {\n      var target = void 0;\n\n      if (freezeLeft && !freezeRight) {\n        target = index < freezeLeft ? content : mCont;\n      }\n\n      if (!freezeLeft && freezeRight) {\n        target = index >= movableCount ? content : mCont;\n      }\n\n      if (freezeLeft && freezeRight) {\n        var frCont = this.parent.getContent().querySelector('.e-frozen-right-content');\n        target = index < freezeLeft ? content : index < freezeLeft + movableCount ? mCont : frCont;\n      }\n\n      contentCol = this.getColumnLevelFrozenColgroup(index, freezeLeft, movableCount, target);\n    } else {\n      contentCol = content.querySelector(literals.colGroup).children[index];\n    }\n\n    if (contentCol && !clear) {\n      contentCol.style.width = fWidth;\n    } else if (contentCol && clear) {\n      contentCol.style.width = '';\n    }\n\n    if (!this.parent.enableColumnVirtualization) {\n      var edit = this.parent.element.querySelectorAll('.e-table.e-inline-edit');\n      var editTableCol = [];\n\n      for (var i = 0; i < edit.length; i++) {\n        if (parentsUntil(edit[i], 'e-grid').id === this.parent.element.id) {\n          for (var j = 0; j < edit[i].querySelector('colgroup').children.length; j++) {\n            editTableCol.push(edit[i].querySelector('colgroup').children[j]);\n          }\n        }\n      }\n\n      if (edit.length && editTableCol.length) {\n        editTableCol[index].style.width = fWidth;\n      }\n    }\n\n    if (this.parent.isFrozenGrid()) {\n      this.refreshFrozenScrollbar();\n    }\n  };\n\n  ColumnWidthService.prototype.getColumnLevelFrozenColgroup = function (index, left, movable, ele) {\n    if (!ele || !ele.querySelector(literals.colGroup)) {\n      return null;\n    }\n\n    var columns = this.parent.getColumns();\n    var isDrag = this.parent.isRowDragable();\n    var frzMode = this.parent.getFrozenMode();\n    var headerCol;\n    var colGroup = [].slice.call(ele.querySelector(literals.colGroup).children);\n\n    if (frzMode === 'Right' && isDrag && index === movable + this.parent.getFrozenRightColumnsCount()) {\n      headerCol = colGroup[colGroup.length - 1];\n    } else if (isDrag && index === -1) {\n      headerCol = colGroup[0];\n    } else if (columns[index].freeze === 'Left') {\n      headerCol = colGroup[isDrag ? index + 1 : index];\n    } else if (columns[index].freeze === 'Right') {\n      headerCol = colGroup[index - (left + movable)];\n    } else {\n      headerCol = colGroup[index - left];\n    }\n\n    return headerCol;\n  };\n  /** @hidden */\n\n\n  ColumnWidthService.prototype.refreshFrozenScrollbar = function () {\n    var args = {\n      cancel: false\n    };\n    this.parent.notify(preventFrozenScrollRefresh, args);\n\n    if (args.cancel) {\n      return;\n    }\n\n    var scrollWidth = getScrollBarWidth();\n    var frozenScrollbar = this.parent.element.querySelector('.e-frozenscrollbar');\n    var movableScrollbar = this.parent.element.querySelector('.e-movablescrollbar');\n    var frozencontent = this.parent.getContent().querySelector('.' + literals.frozenContent);\n    var movableContent = this.parent.getContent().querySelector('.' + literals.movableContent);\n    var frozenWidth = frozencontent.firstElementChild.getBoundingClientRect().width;\n    var movableWidth = movableContent.firstElementChild.getBoundingClientRect().width;\n\n    if (this.parent.getFrozenMode() === 'Right') {\n      frozenWidth = frozenWidth + scrollWidth;\n    }\n\n    frozenScrollbar.style.width = frozenWidth + 'px';\n\n    if (this.parent.getFrozenMode() === literals.leftRight) {\n      var frozenRightScrollbar = this.parent.element.querySelector('.e-frozen-right-scrollbar');\n      var frozenRightWidth = this.parent.getContent().querySelector('.e-frozen-right-content').firstElementChild.getBoundingClientRect().width;\n\n      if (this.parent.height !== 'auto') {\n        frozenRightWidth = frozenRightWidth + scrollWidth;\n      }\n\n      frozenRightScrollbar.style.width = frozenRightWidth + 'px';\n    } else {\n      if (this.parent.enableColumnVirtualization) {\n        var placeHolder = this.parent.getMovableVirtualContent().querySelector('.e-virtualtrack');\n\n        if (placeHolder) {\n          movableWidth = placeHolder.scrollWidth;\n        }\n      }\n\n      if (this.parent.getFrozenMode() !== 'Right' && this.parent.height !== 'auto') {\n        movableWidth = movableWidth + scrollWidth;\n      }\n    }\n\n    movableScrollbar.firstElementChild.style.width = movableWidth + 'px';\n  };\n\n  ColumnWidthService.prototype.getSiblingsHeight = function (element) {\n    var previous = this.getHeightFromDirection(element, 'previous');\n    var next = this.getHeightFromDirection(element, 'next');\n    return previous + next;\n  };\n\n  ColumnWidthService.prototype.getHeightFromDirection = function (element, direction) {\n    var sibling = element[direction + 'ElementSibling'];\n    var result = 0;\n    var classList = [literals.gridHeader, literals.gridFooter, 'e-groupdroparea', 'e-gridpager', 'e-toolbar'];\n\n    while (sibling) {\n      if (classList.some(function (value) {\n        return sibling.classList.contains(value);\n      })) {\n        result += sibling.offsetHeight;\n      }\n\n      sibling = sibling[direction + 'ElementSibling'];\n    }\n\n    return result;\n  };\n\n  ColumnWidthService.prototype.isWidthUndefined = function () {\n    var isWidUndefCount = this.parent.getColumns().filter(function (col) {\n      return isNullOrUndefined(col.width) && isNullOrUndefined(col.minWidth);\n    }).length;\n    return this.parent.getColumns().length === isWidUndefCount;\n  };\n\n  ColumnWidthService.prototype.getWidth = function (column) {\n    if (isNullOrUndefined(column.width) && this.parent.allowResizing && isNullOrUndefined(column.minWidth) && !this.isWidthUndefined()) {\n      column.width = 200;\n    }\n\n    if (this.parent.isFrozenGrid() && isNullOrUndefined(column.width) && (column.getFreezeTableName() === literals.frozenLeft || column.getFreezeTableName() === literals.frozenRight)) {\n      column.width = 200;\n    }\n\n    if (!column.width) {\n      return null;\n    }\n\n    var width = parseInt(column.width.toString(), 10);\n\n    if (column.minWidth && width < parseInt(column.minWidth.toString(), 10)) {\n      return column.minWidth;\n    } else if (column.maxWidth && width > parseInt(column.maxWidth.toString(), 10)) {\n      return column.maxWidth;\n    } else {\n      return column.width;\n    }\n  };\n\n  ColumnWidthService.prototype.getTableWidth = function (columns) {\n    var tWidth = 0;\n\n    for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n      var column = columns_1[_i];\n      var cWidth = this.getWidth(column);\n\n      if (column.width === 'auto') {\n        cWidth = 0;\n      }\n\n      if (column.visible !== false && cWidth !== null) {\n        tWidth += parseInt(cWidth.toString(), 10);\n      }\n    }\n\n    return tWidth;\n  };\n\n  ColumnWidthService.prototype.calcMovableOrFreezeColWidth = function (tableType) {\n    var columns = this.parent.getColumns().slice();\n    var left = this.parent.getFrozenLeftColumnsCount() || this.parent.getFrozenColumns();\n    var movable = this.parent.getMovableColumnsCount();\n    var right = this.parent.getFrozenRightColumnsCount();\n\n    if (tableType === 'movable') {\n      if (right) {\n        columns.splice(left + movable, columns.length);\n      }\n\n      if (left) {\n        columns.splice(0, left);\n      }\n    } else if (tableType === 'freeze-left') {\n      columns.splice(left, columns.length);\n    } else if (tableType === 'freeze-right') {\n      columns.splice(0, left + movable);\n    }\n\n    return formatUnit(this.getTableWidth(columns));\n  };\n\n  ColumnWidthService.prototype.setWidthToFrozenRightTable = function () {\n    var freezeWidth = this.calcMovableOrFreezeColWidth('freeze-right');\n    freezeWidth = this.isAutoResize() ? '100%' : freezeWidth;\n    var headerTbl = this.parent.getHeaderContent().querySelector('.e-frozen-right-header').querySelector('.' + literals.table);\n    var cntTbl = this.parent.getContent().querySelector('.e-frozen-right-content').querySelector('.' + literals.table);\n    headerTbl.style.width = freezeWidth;\n    cntTbl.style.width = freezeWidth;\n  };\n\n  ColumnWidthService.prototype.setWidthToFrozenLeftTable = function () {\n    var freezeWidth = this.calcMovableOrFreezeColWidth('freeze-left');\n    freezeWidth = this.isAutoResize() ? '100%' : freezeWidth;\n    this.parent.getHeaderTable().style.width = freezeWidth;\n    this.parent.getContentTable().style.width = freezeWidth;\n  };\n\n  ColumnWidthService.prototype.setWidthToMovableTable = function () {\n    var movableWidth = '';\n    var isColUndefined = this.parent.getColumns().filter(function (a) {\n      return isNullOrUndefined(a.width);\n    }).length >= 1;\n    var isWidthAuto = this.parent.getColumns().filter(function (a) {\n      return a.width === 'auto';\n    }).length >= 1;\n\n    if (typeof this.parent.width === 'number' && !isColUndefined && !isWidthAuto) {\n      movableWidth = formatUnit(this.parent.width - parseInt(this.calcMovableOrFreezeColWidth('freeze').split('px')[0], 10) - 5);\n    } else if (!isColUndefined && !isWidthAuto) {\n      movableWidth = this.calcMovableOrFreezeColWidth('movable');\n    }\n\n    movableWidth = this.isAutoResize() ? '100%' : movableWidth;\n\n    if (this.parent.getHeaderContent().querySelector('.' + literals.movableHeader).firstElementChild) {\n      this.parent.getHeaderContent().querySelector('.' + literals.movableHeader).firstElementChild.style.width = movableWidth;\n    }\n\n    this.parent.getContent().querySelector('.' + literals.movableContent).firstElementChild.style.width = movableWidth;\n  };\n\n  ColumnWidthService.prototype.setWidthToFrozenEditTable = function () {\n    var freezeWidth = this.calcMovableOrFreezeColWidth('freeze');\n    freezeWidth = this.isAutoResize() ? '100%' : freezeWidth;\n    this.parent.element.querySelectorAll('.e-table.e-inline-edit')[0].style.width = freezeWidth;\n  };\n\n  ColumnWidthService.prototype.setWidthToMovableEditTable = function () {\n    var movableWidth = this.calcMovableOrFreezeColWidth('movable');\n    movableWidth = this.isAutoResize() ? '100%' : movableWidth;\n    this.parent.element.querySelectorAll('.e-table.e-inline-edit')[1].style.width = movableWidth;\n  };\n\n  ColumnWidthService.prototype.setWidthToTable = function () {\n    var tWidth = formatUnit(this.getTableWidth(this.parent.getColumns()));\n\n    if (this.parent.isFrozenGrid()) {\n      if (this.parent.getFrozenColumns() || this.parent.getFrozenLeftColumnsCount()) {\n        this.setWidthToFrozenLeftTable();\n      }\n\n      this.setWidthToMovableTable();\n\n      if (this.parent.getFrozenRightColumnsCount()) {\n        this.setWidthToFrozenRightTable();\n      }\n    } else {\n      if (this.parent.detailTemplate || this.parent.childGrid) {\n        this.setColumnWidth(new Column({\n          width: '30px'\n        }));\n      }\n\n      tWidth = this.isAutoResize() ? '100%' : tWidth;\n      this.parent.getHeaderTable().style.width = tWidth;\n      this.parent.getContentTable().style.width = tWidth;\n    }\n\n    var edit = this.parent.element.querySelector('.e-table.e-inline-edit');\n\n    if (edit && this.parent.getFrozenColumns()) {\n      this.setWidthToFrozenEditTable();\n      this.setWidthToMovableEditTable();\n    } else if (edit) {\n      edit.style.width = tWidth;\n    }\n  };\n\n  ColumnWidthService.prototype.isAutoResize = function () {\n    return this.parent.allowResizing && this.parent.resizeSettings.mode === 'Auto';\n  };\n\n  return ColumnWidthService;\n}();\n\nexport { ColumnWidthService };","/* 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  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\n\nexport var Input;\n\n(function (Input) {\n  var privateInputObj = {\n    container: null,\n    buttons: [],\n    clearButton: null\n  };\n  var floatType;\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\n  function createInput(args, internalCreateElement) {\n    var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n    var inputObject = {\n      container: null,\n      buttons: [],\n      clearButton: null\n    };\n    floatType = args.floatLabelType;\n\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    } else {\n      createFloatingInput(args, inputObject, makeElement);\n    }\n\n    bindInitialEvent(args);\n\n    if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.showClearButton) && args.properties.showClearButton && args.element.tagName !== 'TEXTAREA') {\n      setClearButton(args.properties.showClearButton, args.element, inputObject, true, makeElement);\n      inputObject.clearButton.setAttribute('role', 'button');\n\n      if (inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n        addClass([inputObject.container], CLASSNAMES.INPUTGROUP);\n      }\n    }\n\n    if (!isNullOrUndefined(args.buttons) && args.element.tagName !== 'TEXTAREA') {\n      for (var i = 0; i < args.buttons.length; i++) {\n        inputObject.buttons.push(appendSpan(args.buttons[i], inputObject.container, makeElement));\n      }\n    }\n\n    if (!isNullOrUndefined(args.element) && args.element.tagName === 'TEXTAREA') {\n      addClass([inputObject.container], CLASSNAMES.TEXTAREA);\n    }\n\n    validateInputType(inputObject.container, args.element);\n    inputObject = setPropertyValue(args, inputObject); // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n    privateInputObj = inputObject;\n    return inputObject;\n  }\n\n  Input.createInput = createInput;\n\n  function bindInitialEvent(args) {\n    checkInputValue(args.floatLabelType, args.element);\n    args.element.addEventListener('focus', function () {\n      var parent = getParentNode(this);\n\n      if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline') || parent.classList.contains('e-filled')) {\n        parent.classList.add('e-input-focus');\n      }\n    });\n    args.element.addEventListener('blur', function () {\n      var parent = getParentNode(this);\n\n      if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline') || parent.classList.contains('e-filled')) {\n        parent.classList.remove('e-input-focus');\n      }\n    });\n    args.element.addEventListener('input', function () {\n      checkInputValue(floatType, args.element);\n    });\n  }\n\n  Input.bindInitialEvent = bindInitialEvent;\n\n  function checkInputValue(floatLabelType, inputElement) {\n    var inputValue = inputElement.value;\n\n    if (inputValue !== '' && !isNullOrUndefined(inputValue) && inputElement.parentElement) {\n      inputElement.parentElement.classList.add('e-valid-input');\n    } else if (floatLabelType !== 'Always' && inputElement.parentElement) {\n      inputElement.parentElement.classList.remove('e-valid-input');\n    }\n  }\n\n  function _focusFn() {\n    var label = getParentNode(this).getElementsByClassName('e-float-text')[0];\n\n    if (!isNullOrUndefined(label)) {\n      addClass([label], CLASSNAMES.LABELTOP);\n\n      if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n        removeClass([label], CLASSNAMES.LABELBOTTOM);\n      }\n    }\n  }\n\n  function _blurFn() {\n    var parent = getParentNode(this);\n\n    if (parent.getElementsByTagName('textarea')[0] ? parent.getElementsByTagName('textarea')[0].value === '' : parent.getElementsByTagName('input')[0].value === '') {\n      var label = parent.getElementsByClassName('e-float-text')[0];\n\n      if (!isNullOrUndefined(label)) {\n        if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n          removeClass([label], CLASSNAMES.LABELTOP);\n        }\n\n        addClass([label], CLASSNAMES.LABELBOTTOM);\n      }\n    }\n  }\n\n  function wireFloatingEvents(element) {\n    element.addEventListener('focus', _focusFn);\n    element.addEventListener('blur', _blurFn);\n  }\n\n  Input.wireFloatingEvents = wireFloatingEvents;\n\n  function unwireFloatingEvents(element) {\n    element.removeEventListener('focus', _focusFn);\n    element.removeEventListener('blur', _blurFn);\n  }\n\n  function createFloatingInput(args, inputObject, internalCreateElement) {\n    var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n\n    if (args.floatLabelType === 'Auto') {\n      wireFloatingEvents(args.element);\n    }\n\n    if (isNullOrUndefined(inputObject.container)) {\n      inputObject.container = createInputContainer(args, CLASSNAMES.FLOATINPUT, CLASSNAMES.FLOATCUSTOMTAG, 'div', makeElement);\n      args.element.parentNode.insertBefore(inputObject.container, args.element);\n    } else {\n      if (!isNullOrUndefined(args.customTag)) {\n        inputObject.container.classList.add(CLASSNAMES.FLOATCUSTOMTAG);\n      }\n\n      inputObject.container.classList.add(CLASSNAMES.FLOATINPUT);\n    }\n\n    var floatLinelement = makeElement('span', {\n      className: CLASSNAMES.FLOATLINE\n    });\n    var floatLabelElement = makeElement('label', {\n      className: CLASSNAMES.FLOATTEXT\n    });\n\n    if (!isNullOrUndefined(args.element.id) && args.element.id !== '') {\n      floatLabelElement.id = 'label_' + args.element.id.replace(/ /g, '_');\n      attributes(args.element, {\n        'aria-labelledby': floatLabelElement.id\n      });\n    }\n\n    if (!isNullOrUndefined(args.element.placeholder) && args.element.placeholder !== '') {\n      floatLabelElement.innerText = encodePlaceHolder(args.element.placeholder);\n      args.element.removeAttribute('placeholder');\n    }\n\n    if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.placeholder) && args.properties.placeholder !== '') {\n      floatLabelElement.innerText = encodePlaceHolder(args.properties.placeholder);\n    }\n\n    if (!floatLabelElement.innerText) {\n      inputObject.container.classList.add(CLASSNAMES.NOFLOATLABEL);\n    }\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    } else {\n      inputObject.container.appendChild(args.element);\n      inputObject.container.appendChild(floatLinelement);\n      inputObject.container.appendChild(floatLabelElement);\n    }\n\n    updateLabelState(args.element.value, floatLabelElement);\n\n    if (args.floatLabelType === 'Always') {\n      if (floatLabelElement.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n        removeClass([floatLabelElement], CLASSNAMES.LABELBOTTOM);\n      }\n\n      addClass([floatLabelElement], CLASSNAMES.LABELTOP);\n    }\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);\n      }); // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n      args.element.addEventListener('blur', function (event) {\n        updateLabelState(args.element.value, floatLabelElement);\n      });\n    }\n\n    if (!isNullOrUndefined(args.element.getAttribute('id'))) {\n      floatLabelElement.setAttribute('for', args.element.getAttribute('id'));\n    }\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\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\n        switch (prop) {\n          case 'cssClass':\n            setCssClass(args.properties.cssClass, [inputObject.container]);\n            checkFloatLabelType(args.floatLabelType, inputObject.container);\n            break;\n\n          case 'enabled':\n            setEnabled(args.properties.enabled, args.element, args.floatLabelType, inputObject.container);\n            break;\n\n          case 'enableRtl':\n            setEnableRtl(args.properties.enableRtl, [inputObject.container]);\n            break;\n\n          case 'placeholder':\n            setPlaceholder(args.properties.placeholder, args.element);\n            break;\n\n          case 'readonly':\n            setReadonly(args.properties.readonly, args.element);\n            break;\n        }\n      }\n    }\n\n    return inputObject;\n  }\n\n  function updateIconState(value, button) {\n    if (value) {\n      removeClass([button], CLASSNAMES.CLEARICONHIDE);\n    } else {\n      addClass([button], CLASSNAMES.CLEARICONHIDE);\n    }\n  }\n\n  function updateLabelState(value, label) {\n    if (value) {\n      addClass([label], CLASSNAMES.LABELTOP);\n\n      if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n        removeClass([label], CLASSNAMES.LABELBOTTOM);\n      }\n    } else {\n      if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n        removeClass([label], CLASSNAMES.LABELTOP);\n      }\n\n      addClass([label], CLASSNAMES.LABELBOTTOM);\n    }\n  }\n\n  function getParentNode(element) {\n    var parentNode = isNullOrUndefined(element.parentNode) ? element : element.parentNode;\n\n    if (parentNode && parentNode.classList.contains('e-input-in-wrap')) {\n      parentNode = parentNode.parentNode;\n    }\n\n    return parentNode;\n  }\n  /**\n   * To create clear button.\n   */\n\n\n  function createClearButton(element, inputObject, initial, internalCreateElement) {\n    var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n    var button = makeElement('span', {\n      className: CLASSNAMES.CLEARICON\n    });\n    var container = inputObject.container;\n\n    if (!isNullOrUndefined(initial)) {\n      container.appendChild(button);\n    } else {\n      var baseElement = inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT) ? inputObject.container.querySelector('.' + CLASSNAMES.FLOATTEXT) : element;\n      baseElement.insertAdjacentElement('afterend', button);\n    }\n\n    if (!isNullOrUndefined(container) && container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n      addClass([container], CLASSNAMES.INPUTGROUP);\n    }\n\n    addClass([button], CLASSNAMES.CLEARICONHIDE);\n    wireClearBtnEvents(element, button, container);\n    button.setAttribute('aria-label', 'close');\n    return button;\n  } // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n\n  function wireClearBtnEvents(element, button, container) {\n    button.addEventListener('click', function (event) {\n      if (!(element.classList.contains(CLASSNAMES.DISABLE) || element.readOnly)) {\n        event.preventDefault();\n\n        if (element !== document.activeElement) {\n          element.focus();\n        }\n\n        element.value = '';\n        addClass([button], CLASSNAMES.CLEARICONHIDE);\n      }\n    }); // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n    element.addEventListener('input', function (event) {\n      updateIconState(element.value, button);\n    }); // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n    element.addEventListener('focus', function (event) {\n      updateIconState(element.value, button);\n    }); // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n    element.addEventListener('blur', function (event) {\n      setTimeout(function () {\n        addClass([button], CLASSNAMES.CLEARICONHIDE);\n      }, 200);\n    });\n  }\n\n  Input.wireClearBtnEvents = wireClearBtnEvents;\n\n  function validateLabel(element, floatLabelType) {\n    var parent = getParentNode(element);\n\n    if (parent.classList.contains(CLASSNAMES.FLOATINPUT) && floatLabelType === 'Auto') {\n      var label = getParentNode(element).getElementsByClassName('e-float-text')[0];\n      updateLabelState(element.value, label);\n    }\n  }\n  /**\n   * To create input box contianer.\n   */\n\n\n  function createInputContainer(args, className, tagClass, tag, internalCreateElement) {\n    var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n    var container;\n\n    if (!isNullOrUndefined(args.customTag)) {\n      container = makeElement(args.customTag, {\n        className: className\n      });\n      container.classList.add(tagClass);\n    } else {\n      container = makeElement(tag, {\n        className: className\n      });\n    }\n\n    container.classList.add('e-control-wrapper');\n    return container;\n  }\n\n  function encodePlaceHolder(placeholder) {\n    var result = '';\n\n    if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n      var spanEle = document.createElement('span');\n      spanEle.innerHTML = '<input  placeholder=\"' + placeholder + '\"/>';\n      var hiddenInput = spanEle.children[0];\n      result = hiddenInput.placeholder;\n    }\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\n\n  function setValue(value, element, floatLabelType, clearButton) {\n    element.value = value;\n\n    if (!isNullOrUndefined(floatLabelType) && floatLabelType === 'Auto') {\n      validateLabel(element, floatLabelType);\n    }\n\n    if (!isNullOrUndefined(clearButton) && clearButton) {\n      var parentElement = getParentNode(element);\n\n      if (!isNullOrUndefined(parentElement)) {\n        var button = parentElement.getElementsByClassName(CLASSNAMES.CLEARICON)[0];\n\n        if (!isNullOrUndefined(button)) {\n          if (element.value && parentElement.classList.contains('e-input-focus')) {\n            removeClass([button], CLASSNAMES.CLEARICONHIDE);\n          } else {\n            addClass([button], CLASSNAMES.CLEARICONHIDE);\n          }\n        }\n      }\n    }\n\n    checkInputValue(floatLabelType, element);\n  }\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\n  function setCssClass(cssClass, elements, oldClass) {\n    if (!isNullOrUndefined(oldClass) && oldClass !== '') {\n      removeClass(elements, oldClass.split(' '));\n    }\n\n    if (!isNullOrUndefined(cssClass) && cssClass !== '') {\n      addClass(elements, cssClass.split(' '));\n    }\n  }\n\n  Input.setCssClass = setCssClass;\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\n  function setWidth(width, container) {\n    if (typeof width === 'number') {\n      container.style.width = formatUnit(width);\n    } else if (typeof width === 'string') {\n      container.style.width = width.match(/px|%|em/) ? width : formatUnit(width);\n    }\n  }\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\n  function setPlaceholder(placeholder, element) {\n    placeholder = encodePlaceHolder(placeholder);\n    var parentElement = getParentNode(element);\n\n    if (parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n      if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n        parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = placeholder;\n        parentElement.classList.remove(CLASSNAMES.NOFLOATLABEL);\n        element.removeAttribute('placeholder');\n      } else {\n        parentElement.classList.add(CLASSNAMES.NOFLOATLABEL);\n        parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n      }\n    } else {\n      if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n        attributes(element, {\n          'placeholder': placeholder,\n          'aria-placeholder': placeholder\n        });\n      } else {\n        element.removeAttribute('placeholder');\n        element.removeAttribute('aria-placeholder');\n      }\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\n  function setReadonly(isReadonly, element, floatLabelType) {\n    if (isReadonly) {\n      attributes(element, {\n        readonly: ''\n      });\n    } else {\n      element.removeAttribute('readonly');\n    }\n\n    if (!isNullOrUndefined(floatLabelType)) {\n      validateLabel(element, floatLabelType);\n    }\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\n  function setEnableRtl(isRtl, elements) {\n    if (isRtl) {\n      addClass(elements, CLASSNAMES.RTL);\n    } else {\n      removeClass(elements, CLASSNAMES.RTL);\n    }\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\n  function setEnabled(isEnable, element, floatLabelType, inputContainer) {\n    var disabledAttrs = {\n      'disabled': 'disabled',\n      'aria-disabled': 'true'\n    };\n    var considerWrapper = isNullOrUndefined(inputContainer) ? false : true;\n\n    if (isEnable) {\n      element.classList.remove(CLASSNAMES.DISABLE);\n      removeAttributes(disabledAttrs, element);\n\n      if (considerWrapper) {\n        removeClass([inputContainer], CLASSNAMES.DISABLE);\n      }\n    } else {\n      element.classList.add(CLASSNAMES.DISABLE);\n      addAttributes(disabledAttrs, element);\n\n      if (considerWrapper) {\n        addClass([inputContainer], CLASSNAMES.DISABLE);\n      }\n    }\n\n    if (!isNullOrUndefined(floatLabelType)) {\n      validateLabel(element, floatLabelType);\n    }\n  }\n\n  Input.setEnabled = setEnabled;\n\n  function setClearButton(isClear, element, inputObject, initial, internalCreateElement) {\n    var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n\n    if (isClear) {\n      inputObject.clearButton = createClearButton(element, inputObject, initial, makeElement);\n    } else {\n      remove(inputObject.clearButton);\n      inputObject.clearButton = null;\n    }\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\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\n      if (key === 'disabled') {\n        element.classList.remove(CLASSNAMES.DISABLE);\n      }\n\n      if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n        parentElement.classList.remove(CLASSNAMES.DISABLE);\n      }\n\n      if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n        parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n      } else {\n        element.removeAttribute(key);\n      }\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\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\n      if (key === 'disabled') {\n        element.classList.add(CLASSNAMES.DISABLE);\n      }\n\n      if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n        parentElement.classList.add(CLASSNAMES.DISABLE);\n      }\n\n      if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n        parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = attrs[key];\n      } else {\n        element.setAttribute(key, attrs[key]);\n      }\n    }\n  }\n\n  Input.addAttributes = addAttributes;\n\n  function removeFloating(input) {\n    var container = input.container;\n\n    if (!isNullOrUndefined(container) && container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n      var inputEle = container.querySelector('textarea') ? container.querySelector('textarea') : 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, {\n        'placeholder': placeholder\n      });\n      inputEle.classList.add(CLASSNAMES.INPUT);\n\n      if (!clearButton && inputEle.tagName === 'INPUT') {\n        inputEle.removeAttribute('required');\n      }\n    }\n  }\n\n  Input.removeFloating = removeFloating;\n\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\n    if (type !== 'Never') {\n      var customTag = container.tagName;\n      customTag = customTag !== 'DIV' && customTag !== 'SPAN' ? customTag : null;\n      var args = {\n        element: input,\n        floatLabelType: type,\n        customTag: customTag,\n        properties: {\n          placeholder: placeholder\n        }\n      };\n      var iconEle = container.querySelector('.e-clear-icon');\n      var inputObj = {\n        container: container\n      };\n      input.classList.remove(CLASSNAMES.INPUT);\n      createFloatingInput(args, inputObj, makeElement);\n      var isPrependIcon = container.classList.contains('e-float-icon-left');\n\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        } else {\n          iconEle = container.querySelector('.e-input-group-icon');\n        }\n      }\n\n      if (isNullOrUndefined(iconEle)) {\n        if (isPrependIcon) {\n          iconEle = container.querySelector('.e-input-group-icon');\n        }\n\n        if (isNullOrUndefined(iconEle)) {\n          container.classList.remove(CLASSNAMES.INPUTGROUP);\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\n    checkFloatLabelType(type, input.parentElement);\n  }\n\n  Input.addFloating = addFloating;\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\n  function setRipple(isRipple, inputObj) {\n    for (var i = 0; i < inputObj.length; i++) {\n      _internalRipple(isRipple, inputObj[i].container);\n    }\n  }\n\n  Input.setRipple = setRipple;\n\n  function _internalRipple(isRipple, container, button) {\n    var argsButton = [];\n    argsButton.push(button);\n    var buttons = isNullOrUndefined(button) ? container.querySelectorAll('.e-input-group-icon') : argsButton;\n\n    if (isRipple && buttons.length > 0) {\n      for (var index = 0; index < buttons.length; index++) {\n        buttons[index].addEventListener('mousedown', _onMouseDownRipple, false);\n        buttons[index].addEventListener('mouseup', _onMouseUpRipple, false);\n      }\n    } else if (buttons.length > 0) {\n      for (var index = 0; index < buttons.length; index++) {\n        buttons[index].removeEventListener('mousedown', _onMouseDownRipple, this);\n        buttons[index].removeEventListener('mouseup', _onMouseUpRipple, this);\n      }\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\n  function _onMouseDownRipple() {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    var ele = this;\n    var parentEle = this.parentElement;\n\n    while (!parentEle.classList.contains('e-input-group')) {\n      parentEle = parentEle.parentElement;\n    }\n\n    _onMouseRipple(parentEle, ele);\n  }\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\n  function createIconEle(iconClass, makeElement) {\n    var button = makeElement('span', {\n      className: iconClass\n    });\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\n  /* eslint-disable @typescript-eslint/indent */\n\n\n  function addIcon(position, icons, container, input, internalCreate) {\n    /* eslint-enable @typescript-eslint/indent */\n    var result = typeof icons === 'string' ? icons.split(',') : icons;\n\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    } 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  }\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\n  /* eslint-disable @typescript-eslint/indent */\n\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\n    if (isNullOrUndefined(innerWrapper)) {\n      innerWrapper = makeElement('span', {\n        className: 'e-input-in-wrap'\n      });\n      inputElement.parentNode.insertBefore(innerWrapper, inputElement);\n      var result = container.querySelectorAll(inputElement.tagName + ' ~ *');\n      innerWrapper.appendChild(inputElement);\n\n      for (var i = 0; i < result.length; i++) {\n        innerWrapper.appendChild(result[i]);\n      }\n    }\n\n    innerWrapper.parentNode.insertBefore(button, innerWrapper);\n\n    if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n      container.classList.add(CLASSNAMES.INPUTGROUP);\n    }\n\n    _internalRipple(true, container, button);\n\n    return button;\n  }\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\n  function appendSpan(iconClass, container, internalCreateElement) {\n    var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n    var button = createIconEle(iconClass, makeElement);\n\n    if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n      container.classList.add(CLASSNAMES.INPUTGROUP);\n    }\n\n    var wrap = container.classList.contains('e-float-icon-left') ? container.querySelector('.e-input-in-wrap') : container;\n    wrap.appendChild(button);\n\n    _internalRipple(true, container, button);\n\n    return button;\n  }\n\n  Input.appendSpan = appendSpan;\n\n  function validateInputType(containerElement, input) {\n    if (input.type === 'hidden') {\n      containerElement.classList.add('e-hidden');\n    } else if (containerElement.classList.contains('e-hidden')) {\n      containerElement.classList.remove('e-hidden');\n    }\n  }\n\n  Input.validateInputType = validateInputType;\n})(Input || (Input = {}));\n/* eslint-enable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */","/**\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 */\n\nexport function fit(element, viewPortElement, axis, position) {\n  if (viewPortElement === void 0) {\n    viewPortElement = null;\n  }\n\n  if (axis === void 0) {\n    axis = {\n      X: false,\n      Y: false\n    };\n  }\n\n  if (!axis.Y && !axis.X) {\n    return {\n      left: 0,\n      top: 0\n    };\n  }\n\n  var elemData = element.getBoundingClientRect();\n  targetContainer = viewPortElement;\n  parentDocument = element.ownerDocument;\n\n  if (!position) {\n    position = calculatePosition(element, 'left', 'top');\n  }\n\n  if (axis.X) {\n    var containerWidth = targetContainer ? getTargetContainerWidth() : getViewPortWidth();\n    var containerLeft = ContainerLeft();\n    var containerRight = ContainerRight();\n    var overLeft = containerLeft - position.left;\n    var overRight = position.left + elemData.width - containerRight;\n\n    if (elemData.width > containerWidth) {\n      if (overLeft > 0 && overRight <= 0) {\n        position.left = containerRight - elemData.width;\n      } else if (overRight > 0 && overLeft <= 0) {\n        position.left = containerLeft;\n      } else {\n        position.left = overLeft > overRight ? containerRight - elemData.width : containerLeft;\n      }\n    } else if (overLeft > 0) {\n      position.left += overLeft;\n    } else if (overRight > 0) {\n      position.left -= overRight;\n    }\n  }\n\n  if (axis.Y) {\n    var containerHeight = targetContainer ? getTargetContainerHeight() : getViewPortHeight();\n    var containerTop = ContainerTop();\n    var containerBottom = ContainerBottom();\n    var overTop = containerTop - position.top;\n    var overBottom = position.top + elemData.height - containerBottom;\n\n    if (elemData.height > containerHeight) {\n      if (overTop > 0 && overBottom <= 0) {\n        position.top = containerBottom - elemData.height;\n      } else if (overBottom > 0 && overTop <= 0) {\n        position.top = containerTop;\n      } else {\n        position.top = overTop > overBottom ? containerBottom - elemData.height : containerTop;\n      }\n    } else if (overTop > 0) {\n      position.top += overTop;\n    } else if (overBottom > 0) {\n      position.top -= overBottom;\n    }\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 */\n\nexport function isCollide(element, viewPortElement, x, y) {\n  if (viewPortElement === void 0) {\n    viewPortElement = null;\n  }\n\n  var elemOffset = calculatePosition(element, 'left', 'top');\n\n  if (x) {\n    elemOffset.left = x;\n  }\n\n  if (y) {\n    elemOffset.top = y;\n  }\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; // eslint-disable-next-line\n\n  var topData = '',\n      leftData = '';\n  var yAxis = topCollideCheck(top, bottom);\n  var xAxis = leftCollideCheck(left, right);\n\n  if (yAxis.topSide) {\n    data.push('top');\n  }\n\n  if (xAxis.rightSide) {\n    data.push('right');\n  }\n\n  if (xAxis.leftSide) {\n    data.push('left');\n  }\n\n  if (yAxis.bottomSide) {\n    data.push('bottom');\n  }\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 */\n\nexport function flip(element, target, offsetX, offsetY, positionX, positionY, viewPortElement,\n/* eslint-disable */\naxis, fixedParent) {\n  if (viewPortElement === void 0) {\n    viewPortElement = null;\n  }\n\n  if (axis === void 0) {\n    axis = {\n      X: true,\n      Y: true\n    };\n  }\n\n  if (!target || !element || !positionX || !positionY || !axis.X && !axis.Y) {\n    return;\n  } // eslint-disable-next-line\n\n\n  var tEdge = {\n    TL: null,\n    TR: null,\n    BL: null,\n    BR: null\n  },\n      eEdge = {\n    TL: null,\n    TR: null,\n    BL: null,\n    BR: null\n    /* eslint-enable */\n\n  };\n  var elementRect;\n\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  } else {\n    elementRect = element.getBoundingClientRect();\n  }\n\n  var pos = {\n    posX: positionX,\n    posY: positionY,\n    offsetX: offsetX,\n    offsetY: offsetY,\n    position: {\n      left: 0,\n      top: 0\n    }\n  };\n  targetContainer = viewPortElement;\n  parentDocument = target.ownerDocument;\n  updateElementData(target, tEdge, pos, fixedParent, elementRect);\n  setPosition(eEdge, pos, elementRect);\n\n  if (axis.X) {\n    leftFlip(target, eEdge, tEdge, pos, elementRect, true);\n  }\n\n  if (axis.Y && tEdge.TL.top > -1) {\n    topFlip(target, eEdge, tEdge, pos, elementRect, true);\n  }\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 */\n\nfunction setPopup(element, pos, elementRect) {\n  //eslint-disable-next-line\n  var left = 0,\n      top = 0;\n\n  if (element.offsetParent != null && (getComputedStyle(element.offsetParent).position === 'absolute' || 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\n  element.style.top = pos.position.top + pos.offsetY - top + 'px';\n  element.style.left = pos.position.left + 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 */\n\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 */\n\n\nfunction setPosition(eStatus, pos, elementRect) {\n  eStatus.TL = {\n    top: pos.position.top + pos.offsetY,\n    left: pos.position.left + pos.offsetX\n  };\n  eStatus.TR = {\n    top: eStatus.TL.top,\n    left: eStatus.TL.left + elementRect.width\n  };\n  eStatus.BL = {\n    top: eStatus.TL.top + elementRect.height,\n    left: eStatus.TL.left\n  };\n  eStatus.BR = {\n    top: eStatus.TL.top + elementRect.height,\n    left: eStatus.TL.left + elementRect.width\n  };\n}\n/**\n *\n * @param {number} left - specifies the  number\n * @param {number} right - specifies the number\n * @returns {LeftCorners} - returns the value\n */\n\n\nfunction leftCollideCheck(left, right) {\n  //eslint-disable-next-line\n  var leftSide = false,\n      rightSide = false;\n\n  if (left - getBodyScrollLeft() < ContainerLeft()) {\n    leftSide = true;\n  }\n\n  if (right > ContainerRight()) {\n    rightSide = true;\n  }\n\n  return {\n    leftSide: leftSide,\n    rightSide: rightSide\n  };\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 */\n\n\nfunction leftFlip(target, edge, tEdge, pos, elementRect, deepCheck) {\n  var collideSide = leftCollideCheck(edge.TL.left, edge.TR.left);\n\n  if (tEdge.TL.left - getBodyScrollLeft() <= ContainerLeft()) {\n    collideSide.leftSide = false;\n  }\n\n  if (tEdge.TR.left > ContainerRight()) {\n    collideSide.rightSide = false;\n  }\n\n  if (collideSide.leftSide && !collideSide.rightSide || !collideSide.leftSide && collideSide.rightSide) {\n    if (pos.posX === 'right') {\n      pos.posX = 'left';\n    } else {\n      pos.posX = 'right';\n    }\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\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 */\n\n\nfunction topFlip(target, edge, tEdge, pos, elementRect, deepCheck) {\n  var collideSide = topCollideCheck(edge.TL.top, edge.BL.top);\n\n  if (tEdge.TL.top - getBodyScrollTop() <= ContainerTop()) {\n    collideSide.topSide = false;\n  }\n\n  if (tEdge.BL.top >= ContainerBottom() && target.getBoundingClientRect().bottom < window.innerHeight) {\n    collideSide.bottomSide = false;\n  }\n\n  if (collideSide.topSide && !collideSide.bottomSide || !collideSide.topSide && collideSide.bottomSide) {\n    if (pos.posY === 'top') {\n      pos.posY = 'bottom';\n    } else {\n      pos.posY = 'top';\n    }\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\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 */\n\n\nfunction topCollideCheck(top, bottom) {\n  //eslint-disable-next-line\n  var topSide = false,\n      bottomSide = false;\n\n  if (top - getBodyScrollTop() < ContainerTop()) {\n    topSide = true;\n  }\n\n  if (bottom > ContainerBottom()) {\n    bottomSide = true;\n  }\n\n  return {\n    topSide: topSide,\n    bottomSide: bottomSide\n  };\n}\n/**\n * @returns {void}\n */\n\n\nfunction getTargetContainerWidth() {\n  return targetContainer.getBoundingClientRect().width;\n}\n/**\n * @returns {void}\n */\n\n\nfunction getTargetContainerHeight() {\n  return targetContainer.getBoundingClientRect().height;\n}\n/**\n * @returns {void}\n */\n\n\nfunction getTargetContainerLeft() {\n  return targetContainer.getBoundingClientRect().left;\n}\n/**\n * @returns {void}\n */\n\n\nfunction getTargetContainerTop() {\n  return targetContainer.getBoundingClientRect().top;\n} //eslint-disable-next-line\n\n\nfunction ContainerTop() {\n  if (targetContainer) {\n    return getTargetContainerTop();\n  }\n\n  return 0;\n} //eslint-disable-next-line\n\n\nfunction ContainerLeft() {\n  if (targetContainer) {\n    return getTargetContainerLeft();\n  }\n\n  return 0;\n} //eslint-disable-next-line\n\n\nfunction ContainerRight() {\n  if (targetContainer) {\n    return getBodyScrollLeft() + getTargetContainerLeft() + getTargetContainerWidth();\n  }\n\n  return getBodyScrollLeft() + getViewPortWidth();\n} //eslint-disable-next-line\n\n\nfunction ContainerBottom() {\n  if (targetContainer) {\n    return getBodyScrollTop() + getTargetContainerTop() + getTargetContainerHeight();\n  }\n\n  return getBodyScrollTop() + getViewPortHeight();\n}\n/**\n * @returns {void}\n */\n\n\nfunction getBodyScrollTop() {\n  // if(targetContainer)\n  //     return targetContainer.scrollTop;\n  return parentDocument.documentElement.scrollTop || parentDocument.body.scrollTop;\n}\n/**\n * @returns {void}\n */\n\n\nfunction getBodyScrollLeft() {\n  // if(targetContainer)\n  //     return targetContainer.scrollLeft;\n  return parentDocument.documentElement.scrollLeft || parentDocument.body.scrollLeft;\n}\n/**\n * @returns {void}\n */\n\n\nfunction getViewPortHeight() {\n  return window.innerHeight;\n}\n/**\n * @returns {void}\n */\n\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 * 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 */\n\nexport function calculateRelativeBasedPosition(anchor, element) {\n  var fixedElement = false;\n  var anchorPos = {\n    left: 0,\n    top: 0\n  };\n  var tempAnchor = anchor;\n\n  if (!anchor || !element) {\n    return anchorPos;\n  }\n\n  if (isNullOrUndefined(element.offsetParent) && element.style.position === 'fixed') {\n    fixedElement = true;\n  }\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\n  anchor = tempAnchor;\n\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\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 */\n\nexport function calculatePosition(currentElement, positionX, positionY, parentElement, targetValues) {\n  //eslint-disable-next-line\n  popupRect = undefined;\n  popupRect = targetValues;\n  fixedParent = parentElement ? true : false;\n\n  if (!currentElement) {\n    return {\n      left: 0,\n      top: 0\n    };\n  }\n\n  if (!positionX) {\n    positionX = 'left';\n  }\n\n  if (!positionY) {\n    positionY = 'top';\n  }\n\n  parentDocument = currentElement.ownerDocument;\n  element = currentElement;\n  var pos = {\n    left: 0,\n    top: 0\n  };\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 */\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 */\n\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 */\n\n\nfunction updatePosition(posX, posY, pos) {\n  elementRect = element.getBoundingClientRect();\n\n  switch (posY + posX) {\n    case 'topcenter':\n      setPosx(getElementHCenter(), pos);\n      setPosy(getElementTop(), pos);\n      break;\n\n    case 'topright':\n      setPosx(getElementRight(), pos);\n      setPosy(getElementTop(), pos);\n      break;\n\n    case 'centercenter':\n      setPosx(getElementHCenter(), pos);\n      setPosy(getElementVCenter(), pos);\n      break;\n\n    case 'centerright':\n      setPosx(getElementRight(), pos);\n      setPosy(getElementVCenter(), pos);\n      break;\n\n    case 'centerleft':\n      setPosx(getElementLeft(), pos);\n      setPosy(getElementVCenter(), pos);\n      break;\n\n    case 'bottomcenter':\n      setPosx(getElementHCenter(), pos);\n      setPosy(getElementBottom(), pos);\n      break;\n\n    case 'bottomright':\n      setPosx(getElementRight(), pos);\n      setPosy(getElementBottom(), pos);\n      break;\n\n    case 'bottomleft':\n      setPosx(getElementLeft(), pos);\n      setPosy(getElementBottom(), pos);\n      break;\n\n    default:\n    case 'topleft':\n      setPosx(getElementLeft(), pos);\n      setPosy(getElementTop(), pos);\n      break;\n  }\n\n  return pos;\n}\n/**\n * @returns {number} - specifies the number value\n */\n\n\nfunction getBodyScrollTop() {\n  return parentDocument.documentElement.scrollTop || parentDocument.body.scrollTop;\n}\n/**\n * @returns {number} - specifies the number value\n */\n\n\nfunction getBodyScrollLeft() {\n  return parentDocument.documentElement.scrollLeft || parentDocument.body.scrollLeft;\n}\n/**\n * @returns {number} - specifies the number value\n */\n\n\nfunction getElementBottom() {\n  return fixedParent ? elementRect.bottom : elementRect.bottom + getBodyScrollTop();\n}\n/**\n * @returns {number} - specifies the number value\n */\n\n\nfunction getElementVCenter() {\n  return getElementTop() + elementRect.height / 2;\n}\n/**\n * @returns {number} - specifies the number value\n */\n\n\nfunction getElementTop() {\n  return fixedParent ? elementRect.top : elementRect.top + getBodyScrollTop();\n}\n/**\n * @returns {number} - specifies the number value\n */\n\n\nfunction getElementLeft() {\n  return elementRect.left + getBodyScrollLeft();\n}\n/**\n * @returns {number} - specifies the number value\n */\n\n\nfunction getElementRight() {\n  return elementRect.right + getBodyScrollLeft() - (popupRect && elementRect.width >= popupRect.width ? popupRect.width : 0);\n}\n/**\n * @returns {number} - specifies the number value\n */\n\n\nfunction getElementHCenter() {\n  return getElementLeft() + elementRect.width / 2;\n}","/**\n * Resize library\n */\nimport { isNullOrUndefined as isNOU, createElement, EventHandler, detach, Browser } from '@syncfusion/ej2-base';\n/* eslint-disable */\n\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 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;\n/* eslint-disable */\n\nvar resizeStart = null;\nvar resize = null;\nvar resizeEnd = null;\n/* eslint-enable */\n\nvar resizeWestWidth;\nvar setLeft = true;\nvar previousWidth = 0;\nvar setWidth = true; // eslint-disable-next-line\n\nvar proxy;\n/**\n *\n * @param {ResizeArgs} args - specifies the resize args\n * @returns {void}\n */\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\n  for (var i = 0; i < directions.length; i++) {\n    if (dialogBorderResize.indexOf(directions[i]) >= 0 && directions[i]) {\n      setBorderResizeElm(directions[i]);\n    } else if (directions[i].trim() !== '') {\n      var resizeHandler = createElement('div', {\n        className: 'e-icons ' + RESIZE_HANDLER + ' ' + 'e-' + directions[i]\n      });\n      targetElement.appendChild(resizeHandler);\n    }\n  }\n\n  minHeight = args.minHeight;\n  minWidth = args.minWidth;\n  maxWidth = args.maxWidth;\n  maxHeight = args.maxHeight;\n\n  if (args.proxy && args.proxy.element && args.proxy.element.classList.contains('e-dialog')) {\n    wireEvents(args.proxy);\n  } else {\n    wireEvents();\n  }\n}\n/**\n *\n * @param {string} direction - specifies the string\n * @returns {void}\n */\n\nfunction setBorderResizeElm(direction) {\n  calculateValues();\n  var borderBottom = createElement('span', {\n    attrs: {\n      'unselectable': 'on',\n      'contenteditable': 'false'\n    }\n  });\n  borderBottom.setAttribute('class', 'e-dialog-border-resize e-' + direction);\n\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\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\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\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\n  targetElement.appendChild(borderBottom);\n}\n/**\n *\n * @param {string} element - specifies the element\n * @returns {HTMLElement} - returns the element\n */\n\n\nfunction getDOMElement(element) {\n  var domElement;\n\n  if (!isNOU(element)) {\n    if (typeof element === 'string') {\n      domElement = document.querySelector(element);\n    } else {\n      domElement = element;\n    }\n  }\n\n  return domElement;\n} // eslint-disable-next-line\n\n\nfunction wireEvents(args) {\n  if (isNOU(args)) {\n    args = this;\n  }\n\n  var resizers = targetElement.querySelectorAll('.' + RESIZE_HANDLER);\n\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\n  var borderResizers = targetElement.querySelectorAll('.e-dialog-border-resize');\n\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 *\n * @param {string} e - specifies the string\n * @returns {string} - returns the string\n */\n\n\nfunction getEventType(e) {\n  return e.indexOf('mouse') > -1 ? 'mouse' : 'touch';\n}\n/* istanbul ignore next */\n\n/**\n *\n * @param {MouseEvent} e - specifies the mouse event\n * @returns {void}\n */\n\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\n  if (!isNOU(resizeStart)) {\n    proxy = this;\n\n    if (resizeStart(e, proxy) === true) {\n      return;\n    }\n  }\n\n  var target = isNOU(containerElement) ? document : containerElement;\n  EventHandler.add(target, 'mousemove', onMouseMove, this);\n  EventHandler.add(document, 'mouseup', onMouseUp, this);\n\n  for (var i = 0; i < RESTRICT_LEFT.length; i++) {\n    if (targetElement.classList.contains(RESTRICT_LEFT[i])) {\n      setLeft = false;\n    } else {\n      setLeft = true;\n    }\n  }\n}\n/* istanbul ignore next */\n\n/**\n *\n * @param {MouseEvent} e - specifies the event\n * @returns {void}\n */\n\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\n  if (!isNOU(document.body.querySelector('.' + FOCUSED_HANDLER))) {\n    document.body.querySelector('.' + FOCUSED_HANDLER).classList.remove(FOCUSED_HANDLER);\n  }\n\n  if (!isNOU(resizeEnd)) {\n    proxy = this;\n    resizeEnd(e, proxy);\n  }\n\n  EventHandler.remove(document, 'mouseup', onMouseUp);\n  EventHandler.remove(document, touchEndEvent, onMouseUp);\n}\n/* istanbul ignore next */\n\n/**\n * @returns {void}\n */\n\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 *\n * @param {MouseEvent} e - specifies the event\n * @returns {void}\n */\n\n\nfunction onTouchStart(e) {\n  targetElement = e.target.parentElement;\n  calculateValues();\n  var coordinates = e.touches ? e.changedTouches[0] : e;\n  originalMouseX = coordinates.pageX;\n  originalMouseY = coordinates.pageY;\n\n  if (!isNOU(resizeStart)) {\n    proxy = this;\n\n    if (resizeStart(e, proxy) === true) {\n      return;\n    }\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);\n}\n/* istanbul ignore next */\n\n/**\n *\n * @param {MouseEvent} e - specifies the event\n * @returns {void}\n */\n\n\nfunction onMouseMove(e) {\n  if (e.target.classList.contains(RESIZE_HANDLER) && e.target.classList.contains(FOCUSED_HANDLER)) {\n    selectedHandler = e.target;\n  } else if (!isNOU(document.body.querySelector('.' + FOCUSED_HANDLER))) {\n    selectedHandler = document.body.querySelector('.' + FOCUSED_HANDLER);\n  }\n\n  if (!isNOU(selectedHandler)) {\n    var resizeTowards = '';\n\n    for (var i = 0; i < elementClass.length; i++) {\n      if (selectedHandler.classList.contains('e-' + elementClass[i])) {\n        resizeTowards = elementClass[i];\n      }\n    }\n\n    if (!isNOU(resize)) {\n      proxy = this;\n      resize(e, proxy);\n    }\n\n    switch (resizeTowards) {\n      case 'south':\n        resizeSouth(e);\n        break;\n\n      case 'north':\n        resizeNorth(e);\n        break;\n\n      case 'west':\n        resizeWest(e);\n        break;\n\n      case 'east':\n        resizeEast(e);\n        break;\n\n      case 'south-east':\n        resizeSouth(e);\n        resizeEast(e);\n        break;\n\n      case 'south-west':\n        resizeSouth(e);\n        resizeWest(e);\n        break;\n\n      case 'north-east':\n        resizeNorth(e);\n        resizeEast(e);\n        break;\n\n      case 'north-west':\n        resizeNorth(e);\n        resizeWest(e);\n        break;\n\n      default:\n        break;\n    }\n  }\n}\n/* istanbul ignore next */\n\n/**\n *\n * @param {HTMLElement} element - specifies the eleemnt\n * @returns {ClientRect} - returns the client\n */\n\n\nfunction getClientRectValues(element) {\n  return element.getBoundingClientRect();\n}\n/* istanbul ignore next */\n// eslint-disable-next-line\n\n\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\n  if (!isNOU(containerElement)) {\n    containerRectValues = getClientRectValues(containerElement);\n  }\n\n  if (!isNOU(containerElement)) {\n    calculateValue = true;\n  } else if (isNOU(containerElement) && (documentHeight - currentpageY >= 0 || targetRectValues.top < 0)) {\n    calculateValue = true;\n  }\n\n  var calculatedHeight = originalHeight + (currentpageY - originalMouseY);\n  calculatedHeight = calculatedHeight > minHeight ? calculatedHeight : minHeight;\n  var containerTop = 0;\n\n  if (!isNOU(containerElement)) {\n    containerTop = containerRectValues.top;\n  }\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\n  if (targetRectValues.top > 0 && topWithoutborder + calculatedHeight > maxHeight) {\n    calculateValue = false;\n\n    if (targetElement.classList.contains(RESIZE_WITHIN_VIEWPORT)) {\n      return;\n    }\n\n    targetElement.style.height = maxHeight - parseInt(topWithoutborder.toString(), 10) + 'px';\n    return;\n  }\n\n  var targetTop = 0;\n\n  if (calculateValue) {\n    if (targetRectValues.top < 0 && documentHeight + (targetRectValues.height + targetRectValues.top) > 0) {\n      targetTop = targetRectValues.top;\n\n      if (calculatedHeight + targetTop <= 30) {\n        calculatedHeight = targetRectValues.height - (targetRectValues.height + targetRectValues.top) + 30;\n      }\n    }\n\n    if (calculatedHeight + targetRectValues.top >= maxHeight) {\n      targetElement.style.height = targetRectValues.height + (documentHeight - (targetRectValues.height + targetRectValues.top)) + 'px';\n    }\n\n    var calculatedTop = isNOU(containerElement) ? targetTop : topWithoutborder;\n\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\n\n\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\n  if (!isNOU(containerElement)) {\n    boundaryRectValues = getClientRectValues(containerElement);\n  }\n\n  if (!isNOU(containerElement) && targetRectValues.top - boundaryRectValues.top > 0) {\n    calculateValue = true;\n  } else if (isNOU(containerElement) && pageY > 0) {\n    calculateValue = true;\n  }\n\n  var currentHeight = originalHeight - (pageY - originalMouseY);\n\n  if (calculateValue) {\n    if (currentHeight >= minHeight && currentHeight <= maxHeight) {\n      var containerTop = 0;\n\n      if (!isNOU(containerElement)) {\n        containerTop = boundaryRectValues.top;\n      }\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\n\n\nfunction resizeWest(e) {\n  var documentWidth = document.documentElement.clientWidth;\n  var calculateValue = false;\n  var rectValues;\n\n  if (!isNOU(containerElement)) {\n    rectValues = getClientRectValues(containerElement);\n  }\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\n  var left = isNOU(containerElement) ? 0 : rectValues.left;\n  var containerWidth = isNOU(containerElement) ? 0 : rectValues.width;\n  /* eslint-enable */\n\n  if (isNOU(resizeWestWidth)) {\n    if (!isNOU(containerElement)) {\n      resizeWestWidth = targetRectValues.left - left - borderValue / 2 + targetRectValues.width;\n      resizeWestWidth = resizeWestWidth + (containerWidth - borderValue - resizeWestWidth);\n    } else {\n      resizeWestWidth = documentWidth;\n    }\n  }\n\n  if (!isNOU(containerElement) && Math.floor(targetRectValues.left - rectValues.left + targetRectValues.width + (rectValues.right - targetRectValues.right)) - borderValue <= maxWidth) {\n    calculateValue = true;\n  } else if (isNOU(containerElement) && pageX >= 0) {\n    calculateValue = true;\n  }\n\n  var calculatedWidth = originalWidth - (pageX - originalMouseX);\n\n  if (setLeft) {\n    calculatedWidth = calculatedWidth > resizeWestWidth ? resizeWestWidth : calculatedWidth;\n  }\n\n  if (calculateValue) {\n    if (calculatedWidth >= minWidth && calculatedWidth <= maxWidth) {\n      var containerLeft = 0;\n\n      if (!isNOU(containerElement)) {\n        containerLeft = rectValues.left;\n      }\n\n      var left_1 = originalX - containerLeft + (pageX - originalMouseX);\n      left_1 = left_1 > 0 ? left_1 : 1;\n\n      if (calculatedWidth !== previousWidth && setWidth) {\n        targetElement.style.width = calculatedWidth + 'px';\n      }\n\n      if (setLeft) {\n        targetElement.style.left = left_1 + 'px';\n\n        if (left_1 === 1) {\n          setWidth = false;\n        } else {\n          setWidth = true;\n        }\n      }\n    }\n  }\n\n  previousWidth = calculatedWidth;\n}\n/* istanbul ignore next */\n// eslint-disable-next-line\n\n\nfunction resizeEast(e) {\n  var documentWidth = document.documentElement.clientWidth;\n  var calculateValue = false;\n  var containerRectValues;\n\n  if (!isNOU(containerElement)) {\n    containerRectValues = getClientRectValues(containerElement);\n  }\n\n  var coordinates = e.touches ? e.changedTouches[0] : e;\n  var pageX = coordinates.pageX;\n  var targetRectValues = getClientRectValues(targetElement);\n\n  if (!isNOU(containerElement) && (targetRectValues.left - containerRectValues.left + targetRectValues.width < maxWidth || targetRectValues.right - containerRectValues.left > targetRectValues.width)) {\n    calculateValue = true;\n  } else if (isNOU(containerElement) && documentWidth - pageX > 0) {\n    calculateValue = true;\n  }\n\n  var calculatedWidth = originalWidth + (pageX - originalMouseX);\n  var containerLeft = 0;\n\n  if (!isNOU(containerElement)) {\n    containerLeft = containerRectValues.left;\n  }\n\n  if (targetRectValues.left - containerLeft + calculatedWidth > maxWidth) {\n    calculateValue = false;\n\n    if (targetElement.classList.contains(RESIZE_WITHIN_VIEWPORT)) {\n      return;\n    }\n\n    targetElement.style.width = maxWidth - (targetRectValues.left - containerLeft) + 'px';\n  }\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 *\n * @param {number} minimumHeight - specifies the number\n * @returns {void}\n */\n\n\nexport function setMinHeight(minimumHeight) {\n  minHeight = minimumHeight;\n}\n/**\n *\n * @param {number} value - specifies the number value\n * @returns {void}\n */\n\nexport function setMaxWidth(value) {\n  maxWidth = value;\n}\n/**\n *\n * @param {number} value - specifies the number value\n * @returns {void}\n */\n\nexport function setMaxHeight(value) {\n  maxHeight = value;\n}\n/**\n * @returns {void}\n */\n\nexport function removeResize() {\n  var handlers = targetElement.querySelectorAll('.' + RESIZE_HANDLER);\n\n  for (var i = 0; i < handlers.length; i++) {\n    detach(handlers[i]);\n  }\n\n  var borderResizers = targetElement.querySelectorAll('.e-dialog-border-resize');\n\n  if (!isNOU(borderResizers)) {\n    for (var i = 0; i < borderResizers.length; i++) {\n      detach(borderResizers[i]);\n    }\n  }\n}","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nvar __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\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';\n\nvar ButtonProps =\n/** @class */\nfunction (_super) {\n  __extends(ButtonProps, _super);\n\n  function ButtonProps() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n\n  __decorate([Property(true)], ButtonProps.prototype, \"isFlat\", void 0);\n\n  __decorate([Property()], ButtonProps.prototype, \"buttonModel\", void 0);\n\n  __decorate([Property('Button')], ButtonProps.prototype, \"type\", void 0);\n\n  __decorate([Event()], ButtonProps.prototype, \"click\", void 0);\n\n  return ButtonProps;\n}(ChildProperty);\n\nexport { ButtonProps };\n/**\n * Configures the animation properties for both open and close the dialog.\n */\n\nvar AnimationSettings =\n/** @class */\nfunction (_super) {\n  __extends(AnimationSettings, _super);\n\n  function AnimationSettings() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n\n  __decorate([Property('Fade')], AnimationSettings.prototype, \"effect\", void 0);\n\n  __decorate([Property(400)], AnimationSettings.prototype, \"duration\", void 0);\n\n  __decorate([Property(0)], AnimationSettings.prototype, \"delay\", void 0);\n\n  return AnimationSettings;\n}(ChildProperty);\n\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';\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 * <div id=\"dialog\"></div>\n * ```\n * ```typescript\n * <script>\n *   var dialogObj = new Dialog({ header: 'Dialog' });\n *   dialogObj.appendTo(\"#dialog\");\n * </script>\n * ```\n */\n\nvar Dialog =\n/** @class */\nfunction (_super) {\n  __extends(Dialog, _super);\n  /*\n   * * Constructor for creating the widget\n   *\n   * @param\n   * @param\n   * @hidden\n   */\n\n\n  function Dialog(options, element) {\n    return _super.call(this, options, element) || this;\n  }\n  /**\n   *Initialize the control rendering\n   *\n   * @returns {void}\n   * @private\n   */\n\n\n  Dialog.prototype.render = function () {\n    this.initialize();\n    this.initRender();\n    this.wireEvents();\n\n    if (this.width === '100%') {\n      this.element.style.width = '';\n    }\n\n    if (this.minHeight !== '') {\n      this.element.style.minHeight = formatUnit(this.minHeight);\n    }\n\n    if (this.enableResize) {\n      this.setResize();\n\n      if (this.animationSettings.effect === 'None') {\n        this.getMinHeight();\n      }\n    }\n\n    this.renderComplete();\n  };\n  /**\n   *Initialize the event handler\n   *\n   * @returns {void}\n   * @private\n   */\n\n\n  Dialog.prototype.preRender = function () {\n    var _this = this;\n\n    this.headerContent = null;\n    this.allowMaxHeight = true;\n    this.preventVisibility = true;\n    this.clonedEle = this.element.cloneNode(true);\n\n    this.closeIconClickEventHandler = function (event) {\n      _this.hide(event);\n    }; // eslint-disable-next-line\n\n\n    this.dlgOverlayClickEventHandler = function (event) {\n      event.preventFocus = false;\n\n      _this.trigger('overlayClick', event, function (overlayClickEventArgs) {\n        if (!overlayClickEventArgs.preventFocus) {\n          _this.focusContent();\n        }\n      });\n    }; // eslint-disable-next-line\n\n\n    var localeText = {\n      close: 'Close'\n    };\n    this.l10n = new L10n('dialog', localeText, this.locale);\n    this.checkPositionData();\n\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\n  Dialog.prototype.isNumberValue = function (value) {\n    var isNumber = /^[-+]?\\d*\\.?\\d+$/.test(value);\n    return isNumber;\n  };\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\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\n      if (!isNullOrUndefined(this.position.Y) && typeof this.position.Y !== 'number') {\n        var isNumber = this.isNumberValue(this.position.Y);\n\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\n  Dialog.prototype.getEle = function (list, selector) {\n    var element = undefined;\n\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\n    return element;\n  };\n  /* istanbul ignore next */\n\n\n  Dialog.prototype.getMinHeight = function () {\n    var computedHeaderHeight = '0px';\n    var computedFooterHeight = '0px';\n\n    if (!isNullOrUndefined(this.element.querySelector('.' + DLG_HEADER_CONTENT))) {\n      computedHeaderHeight = getComputedStyle(this.headerContent).height;\n    }\n\n    var footerEle = this.getEle(this.element.children, DLG_FOOTER_CONTENT);\n\n    if (!isNullOrUndefined(footerEle)) {\n      computedFooterHeight = getComputedStyle(footerEle).height;\n    }\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\n  Dialog.prototype.onResizeStart = function (args, dialogObj) {\n    dialogObj.trigger('resizeStart', args);\n    return args.cancel;\n  };\n\n  Dialog.prototype.onResizing = function (args, dialogObj) {\n    dialogObj.trigger('resizing', args);\n  };\n\n  Dialog.prototype.onResizeComplete = function (args, dialogObj) {\n    dialogObj.trigger('resizeStop', args);\n  };\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\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\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        } else {\n          var directionValue = '';\n\n          switch (this.resizeHandles[i].toString()) {\n            case 'SouthEast':\n              directionValue = 'south-east';\n              break;\n\n            case 'SouthWest':\n              directionValue = 'south-west';\n              break;\n\n            case 'NorthEast':\n              directionValue = 'north-east';\n              break;\n\n            case 'NorthWest':\n              directionValue = 'north-west';\n              break;\n\n            default:\n              directionValue = this.resizeHandles[i].toString();\n              break;\n          }\n\n          direction += directionValue.toLocaleLowerCase() + ' ';\n        }\n      }\n\n      if (this.enableRtl && direction.trim() === 'south-east') {\n        direction = 'south-west';\n      } else if (this.enableRtl && direction.trim() === 'south-west') {\n        direction = 'south-east';\n      }\n\n      if (this.isModal && this.enableRtl) {\n        this.element.classList.add(DLG_RESTRICT_LEFT_VALUE);\n      } else if (this.isModal && this.target === document.body) {\n        this.element.classList.add(DLG_RESTRICT_WIDTH_VALUE);\n      }\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    } else {\n      removeResize();\n      this.unWireWindowResizeEvent();\n\n      if (this.isModal) {\n        this.element.classList.remove(DLG_RESTRICT_LEFT_VALUE);\n      } else {\n        this.element.classList.remove(DLG_RESTRICT_WIDTH_VALUE);\n      }\n\n      this.element.classList.remove(DLG_RESIZABLE);\n    }\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 {\n      element: items[items.length - 1]\n    };\n  };\n  /* istanbul ignore next */\n\n\n  Dialog.prototype.keyDown = function (event) {\n    var _this = this;\n\n    if (event.keyCode === 9) {\n      if (this.isModal) {\n        var buttonObj = void 0;\n\n        if (!isNullOrUndefined(this.btnObj)) {\n          buttonObj = this.btnObj[this.btnObj.length - 1];\n        }\n\n        if (isNullOrUndefined(this.btnObj) && !isNullOrUndefined(this.ftrTemplateContent)) {\n          buttonObj = this.getFocusElement(this.ftrTemplateContent);\n        }\n\n        if (isNullOrUndefined(this.btnObj) && isNullOrUndefined(this.ftrTemplateContent) && !isNullOrUndefined(this.contentEle)) {\n          buttonObj = this.getFocusElement(this.contentEle);\n        }\n\n        if (!isNullOrUndefined(buttonObj) && document.activeElement === buttonObj.element && !event.shiftKey) {\n          event.preventDefault();\n          this.focusableElements(this.element).focus();\n        }\n\n        if (document.activeElement === this.focusableElements(this.element) && event.shiftKey) {\n          event.preventDefault();\n\n          if (!isNullOrUndefined(buttonObj)) {\n            buttonObj.element.focus();\n          }\n        }\n      }\n    }\n\n    var element = document.activeElement;\n    var isTagName = ['input', 'textarea'].indexOf(element.tagName.toLowerCase()) > -1;\n    var isContentEdit = false;\n\n    if (!isTagName) {\n      isContentEdit = element.hasAttribute('contenteditable') && element.getAttribute('contenteditable') === 'true';\n    }\n\n    if (event.keyCode === 27 && this.closeOnEscape) {\n      this.hide(event);\n    }\n\n    if (event.keyCode === 13 && !event.ctrlKey && element.tagName.toLowerCase() !== 'textarea' && isTagName && !isNullOrUndefined(this.primaryButtonEle) || event.keyCode === 13 && event.ctrlKey && (element.tagName.toLowerCase() === 'textarea' || isContentEdit) && !isNullOrUndefined(this.primaryButtonEle)) {\n      var buttonIndex_1; // eslint-disable-next-line\n\n      var firstPrimary = this.buttons.some(function (data, index) {\n        buttonIndex_1 = index; // eslint-disable-next-line\n\n        var buttonModel = data.buttonModel;\n        return !isNullOrUndefined(buttonModel) && buttonModel.isPrimary === true;\n      });\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\n\n  Dialog.prototype.initialize = function () {\n    if (!isNullOrUndefined(this.target)) {\n      this.targetEle = typeof this.target === 'string' ? document.querySelector(this.target) : this.target;\n    }\n\n    if (!this.isBlazorServerRender()) {\n      addClass([this.element], ROOT);\n    }\n\n    if (Browser.isDevice) {\n      addClass([this.element], DEVICE);\n    }\n\n    if (!this.isBlazorServerRender()) {\n      this.setCSSClass();\n    }\n\n    this.setMaxHeight();\n  };\n  /**\n   * Initialize the rendering\n   *\n   * @returns {void}\n   * @private\n   */\n\n\n  Dialog.prototype.initRender = function () {\n    var _this = this;\n\n    this.initialRender = true;\n\n    if (!this.isBlazorServerRender()) {\n      attributes(this.element, {\n        role: 'dialog'\n      });\n    }\n\n    if (this.zIndex === 1000) {\n      this.setzIndex(this.element, false);\n      this.calculatezIndex = true;\n    } else {\n      this.calculatezIndex = false;\n    }\n\n    if (this.isBlazorServerRender() && isNullOrUndefined(this.headerContent)) {\n      this.headerContent = this.element.getElementsByClassName('e-dlg-header-content')[0];\n    }\n\n    if (this.isBlazorServerRender() && isNullOrUndefined(this.contentEle)) {\n      this.contentEle = this.element.querySelector('#' + this.element.id + '_dialog-content');\n    }\n\n    if (!this.isBlazorServerRender()) {\n      this.setTargetContent();\n\n      if (this.header !== '' && !isNullOrUndefined(this.header)) {\n        this.setHeader();\n      }\n\n      if (this.showCloseIcon) {\n        this.renderCloseIcon();\n      }\n\n      this.setContent();\n\n      if (this.footerTemplate !== '' && !isNullOrUndefined(this.footerTemplate)) {\n        this.setFooterTemplate();\n      } else if (!isNullOrUndefined(this.buttons[0].buttonModel)) {\n        this.setButton();\n      }\n    }\n\n    if (this.isBlazorServerRender()) {\n      if (!isNullOrUndefined(this.buttons[0].buttonModel) && this.footerTemplate === '') {\n        this.setButton();\n      }\n    }\n\n    if (this.allowDragging && !isNullOrUndefined(this.headerContent)) {\n      this.setAllowDragging();\n    }\n\n    if (!this.isBlazorServerRender()) {\n      attributes(this.element, {\n        'aria-modal': this.isModal ? 'true' : 'false'\n      });\n\n      if (this.isModal) {\n        this.setIsModal();\n      }\n    }\n\n    if (this.isBlazorServerRender() && isNullOrUndefined(this.dlgContainer)) {\n      this.dlgContainer = this.element.parentElement;\n\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\n    if (this.element.classList.contains(DLG_UTIL_ALERT) !== true && this.element.classList.contains(DLG_UTIL_CONFIRM) !== true && !isNullOrUndefined(this.element.parentElement)) {\n      var parentEle = this.isModal ? this.dlgContainer.parentElement : this.element.parentElement;\n      this.refElement = this.createElement('div', {\n        className: DLG_REF_ELEMENT\n      });\n      parentEle.insertBefore(this.refElement, this.isModal ? this.dlgContainer : this.element);\n    }\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\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 open(event) {\n        // eslint-disable-next-line\n        var eventArgs = {\n          container: _this.isModal ? _this.dlgContainer : _this.element,\n          element: _this.element,\n          target: _this.target,\n          preventFocus: false\n        };\n\n        if (_this.enableResize) {\n          _this.resetResizeIcon();\n        } // eslint-disable-next-line\n\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 close(event) {\n        if (_this.isModal) {\n          addClass([_this.dlgOverlay], 'e-fade');\n        }\n\n        _this.unBindEvent(_this.element);\n\n        if (_this.isModal) {\n          _this.dlgContainer.style.display = 'none';\n        }\n\n        _this.trigger('close', _this.closeArgs);\n\n        var activeEle = document.activeElement;\n\n        if (!isNullOrUndefined(activeEle) && !isNullOrUndefined(activeEle.blur)) {\n          activeEle.blur();\n        }\n\n        if (!isNullOrUndefined(_this.storeActiveElement) && !isNullOrUndefined(_this.storeActiveElement.focus)) {\n          _this.storeActiveElement.focus();\n        }\n      }\n    });\n    this.positionChange();\n    this.setEnableRTL();\n\n    if (!this.isBlazorServerRender()) {\n      addClass([this.element], DLG_HIDE);\n\n      if (this.isModal) {\n        this.setOverlayZindex();\n      }\n    }\n\n    if (this.visible) {\n      this.show();\n    } else {\n      if (this.isModal) {\n        this.dlgOverlay.style.display = 'none';\n      }\n    }\n\n    this.initialRender = false;\n  };\n\n  Dialog.prototype.resetResizeIcon = function () {\n    var dialogConHeight = this.getMinHeight();\n\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\n      if (!isNullOrUndefined(resizeIcon)) {\n        resizeIcon.style.bottom = '-' + dialogConHeight.toString() + 'px';\n      }\n    }\n  };\n\n  Dialog.prototype.setOverlayZindex = function (zIndexValue) {\n    var zIndex;\n\n    if (isNullOrUndefined(zIndexValue)) {\n      zIndex = parseInt(this.element.style.zIndex, 10) ? parseInt(this.element.style.zIndex, 10) : this.zIndex;\n    } else {\n      zIndex = zIndexValue;\n    }\n\n    this.dlgOverlay.style.zIndex = (zIndex - 1).toString();\n    this.dlgContainer.style.zIndex = zIndex.toString();\n  };\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      } else if (!isNaN(parseFloat(this.position.X)) && isNaN(parseFloat(this.position.Y)) || isNaN(parseFloat(this.position.X)) && !isNaN(parseFloat(this.position.Y))) {\n        this.setPopupPosition();\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    } else {\n      this.setPopupPosition();\n    }\n  };\n\n  Dialog.prototype.setPopupPosition = function () {\n    this.popupObj.setProperties({\n      position: {\n        X: this.position.X,\n        Y: this.position.Y\n      }\n    });\n  };\n\n  Dialog.prototype.setAllowDragging = function () {\n    var _this = this;\n\n    var handleContent = '.' + DLG_HEADER_CONTENT;\n    this.dragObj = new Draggable(this.element, {\n      clone: false,\n      isDragScroll: true,\n      abort: '.e-dlg-closeicon-btn',\n      handle: handleContent,\n      // eslint-disable-next-line\n      dragStart: function dragStart(event) {\n        // eslint-disable-next-line\n        _this.trigger('dragStart', event, function (dragEventArgs) {\n          if (isBlazor()) {\n            dragEventArgs.bindEvents(event.dragElement);\n          }\n        });\n      },\n      // eslint-disable-next-line\n      dragStop: function dragStop(event) {\n        if (_this.isModal) {\n          if (!isNullOrUndefined(_this.position)) {\n            _this.dlgContainer.classList.remove('e-dlg-' + _this.position.X + '-' + _this.position.Y);\n          } // Reset the dialog position after drag completion.\n\n\n          _this.element.style.position = 'relative';\n        }\n\n        _this.trigger('dragStop', event);\n\n        _this.element.classList.remove(DLG_RESTRICT_LEFT_VALUE);\n      },\n      // eslint-disable-next-line\n      drag: function drag(event) {\n        _this.trigger('drag', event);\n      }\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 = []; // eslint-disable-next-line\n\n      var primaryBtnFlag = true;\n\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', {\n          attrs: {\n            type: buttonType\n          }\n        });\n        this.buttonContent.push(btn.outerHTML);\n      }\n\n      this.setFooterTemplate();\n    }\n\n    var footerBtn;\n\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\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\n      if (this.isBlazorServerRender()) {\n        this.ftrTemplateContent = this.element.querySelector('.' + DLG_FOOTER_CONTENT);\n      }\n\n      if (!isNullOrUndefined(this.ftrTemplateContent) && typeof this.buttons[i].click === 'function' && footerBtn.length > 0) {\n        EventHandler.add(footerBtn[i], 'click', this.buttons[i].click, this);\n      }\n\n      if (!this.isBlazorServerRender() && !isNullOrUndefined(this.ftrTemplateContent)) {\n        this.btnObj[i].appendTo(this.ftrTemplateContent.children[i]);\n\n        if (this.buttons[i].isFlat) {\n          this.btnObj[i].element.classList.add('e-flat');\n        }\n\n        this.primaryButtonEle = this.element.getElementsByClassName('e-primary')[0];\n      }\n    }\n  };\n\n  Dialog.prototype.setContent = function () {\n    attributes(this.element, {\n      'aria-describedby': this.element.id + '_dialog-content'\n    });\n    this.contentEle = this.createElement('div', {\n      className: DLG_CONTENT,\n      id: this.element.id + '_dialog-content'\n    });\n\n    if (this.innerContentElement) {\n      this.contentEle.appendChild(this.innerContentElement);\n    } else if (!isNullOrUndefined(this.content) && this.content !== '' || !this.initialRender) {\n      // eslint-disable-next-line\n      var blazorContain = Object.keys(window);\n\n      if (typeof this.content === 'string' && !isBlazor()) {\n        this.contentEle.innerHTML = this.sanitizeHelper(this.content);\n      } else if (this.content instanceof HTMLElement) {\n        this.contentEle.appendChild(this.content);\n      } else {\n        this.setTemplate(this.content, this.contentEle, 'content');\n      }\n    }\n\n    if (!isNullOrUndefined(this.headerContent)) {\n      this.element.insertBefore(this.contentEle, this.element.children[1]);\n    } else {\n      this.element.insertBefore(this.contentEle, this.element.children[0]);\n    }\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\n      this.setMaxHeight();\n    }\n  };\n\n  Dialog.prototype.setTemplate = function (template, toElement, prop) {\n    // eslint-disable-next-line\n    var templateFn;\n    var templateProps; // eslint-disable-next-line\n\n    var blazorContain = Object.keys(window);\n\n    if (toElement.classList.contains(DLG_HEADER)) {\n      templateProps = this.element.id + 'header';\n    } else if (toElement.classList.contains(DLG_FOOTER_CONTENT)) {\n      templateProps = this.element.id + 'footerTemplate';\n    } else {\n      templateProps = this.element.id + 'content';\n    }\n\n    var templateValue;\n\n    if (!isNullOrUndefined(template.outerHTML)) {\n      toElement.appendChild(template);\n    } else if (typeof template !== 'string' || isBlazor() && !this.isStringTemplate) {\n      templateFn = compile(template);\n      templateValue = template;\n    } else {\n      toElement.innerHTML = this.sanitizeHelper(template);\n    }\n\n    var fromElements = [];\n\n    if (!isNullOrUndefined(templateFn)) {\n      var isString = isBlazor() && !this.isStringTemplate && templateValue.indexOf('<div>Blazor') === 0 ? this.isStringTemplate : true;\n\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\n      append([].slice.call(fromElements), toElement);\n    }\n  };\n  /*\n   * @returns {void}\n   * @hidden\n   * @value\n   */\n\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\n      if (dialogItem.cancel && !isNullOrUndefined(dialogItem.helper)) {\n        value = dialogItem.helper(value);\n      } else if (!dialogItem.cancel) {\n        value = SanitizeHtmlHelper.serializeValue(dialogItem, value);\n      }\n    }\n\n    return value;\n  };\n\n  Dialog.prototype.setMaxHeight = function () {\n    if (!this.allowMaxHeight) {\n      return;\n    }\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 ? this.targetEle.offsetHeight - 20 + 'px' : window.innerHeight - 20 + 'px';\n    this.element.style.display = display;\n\n    if (Browser.isIE && this.height === 'auto' && !isNullOrUndefined(this.contentEle) && this.element.offsetHeight < this.contentEle.offsetHeight) {\n      this.element.style.height = 'inherit';\n    }\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\n    if (!isNullOrUndefined(this.element.querySelector('.e-resize-handle'))) {\n      removeResize();\n      this.setResize();\n    }\n  };\n\n  Dialog.prototype.setTargetContent = function () {\n    var _this = this;\n\n    if (isNullOrUndefined(this.content) || this.content === '') {\n      var isContent = this.element.innerHTML.replace(/\\s|<(\\/?|\\/?)(!--!--)>/g, '') !== '';\n\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\n  Dialog.prototype.setHeader = function () {\n    if (this.headerEle) {\n      this.headerEle.innerHTML = '';\n    } else {\n      this.headerEle = this.createElement('div', {\n        id: this.element.id + '_title',\n        className: DLG_HEADER\n      });\n    }\n\n    this.createHeaderContent();\n    this.headerContent.appendChild(this.headerEle);\n    this.setTemplate(this.header, this.headerEle, 'header');\n    attributes(this.element, {\n      'aria-labelledby': this.element.id + '_title'\n    });\n    this.element.insertBefore(this.headerContent, this.element.children[0]);\n  };\n\n  Dialog.prototype.setFooterTemplate = function () {\n    if (this.ftrTemplateContent) {\n      this.ftrTemplateContent.innerHTML = '';\n    } else {\n      this.ftrTemplateContent = this.createElement('div', {\n        className: DLG_FOOTER_CONTENT\n      });\n    }\n\n    if (this.footerTemplate !== '' && !isNullOrUndefined(this.footerTemplate)) {\n      this.setTemplate(this.footerTemplate, this.ftrTemplateContent, 'footerTemplate');\n    } else {\n      this.ftrTemplateContent.innerHTML = this.buttonContent.join('');\n    }\n\n    this.element.appendChild(this.ftrTemplateContent);\n  };\n\n  Dialog.prototype.createHeaderContent = function () {\n    if (isNullOrUndefined(this.headerContent)) {\n      this.headerContent = this.createElement('div', {\n        id: this.element.id + '_dialog-header',\n        className: DLG_HEADER_CONTENT\n      });\n    }\n  };\n\n  Dialog.prototype.renderCloseIcon = function () {\n    this.closeIcon = this.createElement('button', {\n      className: DLG_CLOSE_ICON_BTN,\n      attrs: {\n        type: 'button'\n      }\n    });\n    this.closeIconBtnObj = new Button({\n      cssClass: 'e-flat',\n      iconCss: DLG_CLOSE_ICON + ' ' + ICON\n    });\n    this.closeIconTitle();\n\n    if (!isNullOrUndefined(this.headerContent)) {\n      prepend([this.closeIcon], this.headerContent);\n    } else {\n      this.createHeaderContent();\n      prepend([this.closeIcon], this.headerContent);\n      this.element.insertBefore(this.headerContent, this.element.children[0]);\n    }\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\n  Dialog.prototype.setCSSClass = function (oldCSSClass) {\n    if (this.cssClass) {\n      addClass([this.element], this.cssClass.split(' '));\n    }\n\n    if (oldCSSClass) {\n      removeClass([this.element], oldCSSClass.split(' '));\n    }\n  };\n\n  Dialog.prototype.setIsModal = function () {\n    this.dlgContainer = this.createElement('div', {\n      className: DLG_CONTAINER\n    });\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', {\n      className: DLG_OVERLAY\n    });\n    this.dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n    this.dlgContainer.appendChild(this.dlgOverlay);\n  };\n\n  Dialog.prototype.getValidFocusNode = function (items) {\n    var node;\n\n    for (var u = 0; u < items.length; u++) {\n      node = items[u];\n\n      if ((node.clientHeight > 0 || node.tagName.toLowerCase() === 'a' && node.hasAttribute('href')) && node.tabIndex > -1 && !node.disabled && !this.disableElement(node, '[disabled],[aria-disabled=\"true\"],[type=\"hidden\"]')) {\n        return node;\n      } else {\n        node = null;\n      }\n    }\n\n    return node;\n  };\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\n    return null;\n  };\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\n    if (isBlazor()) {\n      this.primaryButtonEle = this.element.getElementsByClassName('e-primary')[0];\n    }\n\n    if (!isNullOrUndefined(validNode)) {\n      node = validNode;\n    } else {\n      validNode = this.focusableElements(this.contentEle);\n\n      if (!isNullOrUndefined(validNode)) {\n        return node = validNode;\n      } else if (!isNullOrUndefined(this.primaryButtonEle)) {\n        return this.element.querySelector('.' + DLG_PRIMARY_BUTTON);\n      }\n    }\n\n    return node;\n  };\n\n  Dialog.prototype.disableElement = function (element, t) {\n    // eslint-disable-next-line\n    var elementMatch = element ? element.matches || element.webkitMatchesSelector || element.msGetRegionContent : null;\n\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\n    return null;\n  };\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\n    if (userAgent.indexOf('MSIE ') > 0 || userAgent.indexOf('Trident/') > 0) {\n      this.element.focus();\n    }\n\n    node.focus();\n    this.bindEvent(this.element);\n  };\n\n  Dialog.prototype.bindEvent = function (element) {\n    EventHandler.add(element, 'keydown', this.keyDown, this);\n  };\n\n  Dialog.prototype.unBindEvent = function (element) {\n    EventHandler.remove(element, 'keydown', this.keyDown);\n  };\n\n  Dialog.prototype.updateSanitizeContent = function () {\n    if (!this.isBlazorServerRender()) {\n      this.contentEle.innerHTML = this.sanitizeHelper(this.content);\n    }\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\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\n\n  Dialog.prototype.onPropertyChanged = function (newProp, oldProp) {\n    if (!this.element.classList.contains(ROOT)) {\n      return;\n    }\n\n    for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n      var prop = _a[_i];\n\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\n            if (!isNullOrUndefined(this.contentEle) && this.contentEle.getAttribute('role') !== 'dialog') {\n              if (!this.isBlazorServerRender()) {\n                this.contentEle.innerHTML = '';\n              } // eslint-disable-next-line\n\n\n              if (typeof this.content === 'function') {\n                this.clearTemplate(['content']);\n                detach(this.contentEle);\n                this.contentEle = null;\n                this.setContent();\n              } else {\n                typeof this.content === 'string' ? this.isBlazorServerRender() && this.contentEle.innerText === '' ? this.contentEle.insertAdjacentHTML('beforeend', this.sanitizeHelper(this.content)) : this.updateSanitizeContent() : this.contentEle.appendChild(this.content);\n              }\n\n              this.setMaxHeight();\n            } else {\n              if (!this.isBlazorServerRender() || isNullOrUndefined(this.element.querySelector('.e-dlg-content'))) {\n                this.setContent();\n              }\n            }\n          } else if (!isNullOrUndefined(this.contentEle)) {\n            detach(this.contentEle);\n            this.contentEle = null;\n          }\n\n          break;\n\n        case 'header':\n          if (this.header === '' || isNullOrUndefined(this.header)) {\n            if (this.headerEle) {\n              detach(this.headerEle);\n              this.headerEle = null;\n            }\n          } else {\n            if (!this.isBlazorServerRender() || isNullOrUndefined(this.element.querySelector('.e-dlg-header-content'))) {\n              this.setHeader();\n            }\n          }\n\n          break;\n\n        case 'footerTemplate':\n          if (this.footerTemplate === '' || isNullOrUndefined(this.footerTemplate)) {\n            if (!this.ftrTemplateContent) {\n              return;\n            }\n\n            detach(this.ftrTemplateContent);\n            this.ftrTemplateContent = null;\n            this.buttons = [{}];\n          } else {\n            if (!this.isBlazorServerRender() || isNullOrUndefined(this.element.querySelector('.e-footer-content'))) {\n              this.setFooterTemplate();\n            }\n\n            this.buttons = [{}];\n          }\n\n          break;\n\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            } else if (!this.showCloseIcon) {\n              detach(this.closeIcon);\n            } else {\n              if (this.isBlazorServerRender()) {\n                this.wireEvents();\n              }\n            }\n          } else {\n            if (!this.isBlazorServerRender()) {\n              this.renderCloseIcon();\n            }\n\n            this.wireEvents();\n          }\n\n          break;\n\n        case 'locale':\n          if (this.showCloseIcon) {\n            this.closeIconTitle();\n          }\n\n          break;\n\n        case 'visible':\n          // eslint-disable-next-line\n          this.visible ? this.show() : this.hide();\n          break;\n\n        case 'isModal':\n          this.updateIsModal();\n          break;\n\n        case 'height':\n          setStyleAttribute(this.element, {\n            'height': formatUnit(newProp.height)\n          });\n          break;\n\n        case 'width':\n          setStyleAttribute(this.element, {\n            'width': formatUnit(newProp.width)\n          });\n          break;\n\n        case 'zIndex':\n          this.popupObj.zIndex = this.zIndex;\n\n          if (this.isModal) {\n            this.setOverlayZindex(this.zIndex);\n          }\n\n          if (this.element.style.zIndex !== this.zIndex.toString()) {\n            this.calculatezIndex = false;\n          }\n\n          break;\n\n        case 'cssClass':\n          this.setCSSClass(oldProp.cssClass);\n          break;\n\n        case 'buttons':\n          {\n            var buttonCount = this.buttons.length;\n\n            if (!isNullOrUndefined(this.ftrTemplateContent) && !this.isBlazorServerRender()) {\n              detach(this.ftrTemplateContent);\n              this.ftrTemplateContent = null;\n            }\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\n            break;\n          }\n\n        case 'allowDragging':\n          if (this.allowDragging && !isNullOrUndefined(this.headerContent)) {\n            this.setAllowDragging();\n          } else {\n            this.dragObj.destroy();\n          }\n\n          break;\n\n        case 'target':\n          this.setTarget(newProp.target);\n          break;\n\n        case 'position':\n          this.checkPositionData();\n\n          if (this.isModal) {\n            var positionX = isNullOrUndefined(oldProp.position.X) ? this.position.X : oldProp.position.X;\n            var positionY = isNullOrUndefined(oldProp.position.Y) ? this.position.Y : oldProp.position.Y;\n\n            if (this.dlgContainer.classList.contains('e-dlg-' + positionX + '-' + positionY)) {\n              this.dlgContainer.classList.remove('e-dlg-' + positionX + '-' + positionY);\n            }\n          }\n\n          this.positionChange();\n          break;\n\n        case 'enableRtl':\n          this.setEnableRTL();\n          break;\n\n        case 'enableResize':\n          this.setResize();\n          break;\n      }\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' ? document.querySelector(this.target) : this.target;\n\n    if (this.dragObj) {\n      this.dragObj.dragArea = this.targetEle;\n    }\n\n    this.setMaxHeight();\n\n    if (this.isModal) {\n      this.updateIsModal();\n    }\n\n    if (this.enableResize) {\n      this.setResize();\n    }\n  };\n\n  Dialog.prototype.updateIsModal = function () {\n    this.element.setAttribute('aria-modal', this.isModal ? 'true' : 'false');\n\n    if (this.isModal) {\n      this.setIsModal();\n      this.element.style.top = '0px';\n      this.element.style.left = '0px';\n\n      if (!isNullOrUndefined(this.targetEle)) {\n        this.targetEle.appendChild(this.dlgContainer);\n      }\n    } else {\n      removeClass([this.element], MODAL_DLG);\n      removeClass([document.body], [DLG_TARGET, SCROLL_DISABLED]);\n      detach(this.dlgOverlay);\n\n      while (this.dlgContainer.firstChild) {\n        this.dlgContainer.parentElement.insertBefore(this.dlgContainer.firstChild, this.dlgContainer);\n      }\n\n      this.dlgContainer.parentElement.removeChild(this.dlgContainer);\n    }\n\n    if (this.visible) {\n      this.show();\n    }\n\n    this.positionChange();\n\n    if (this.isModal && this.dlgOverlay) {\n      EventHandler.add(this.dlgOverlay, 'click', this.dlgOverlayClickEventHandler, this);\n    }\n  };\n\n  Dialog.prototype.setzIndex = function (zIndexElement, setPopupZindex) {\n    var prevOnChange = this.isProtectedOnChange;\n    this.isProtectedOnChange = true;\n    this.zIndex = getZindexPartial(zIndexElement);\n    this.isProtectedOnChange = prevOnChange;\n\n    if (setPopupZindex) {\n      this.popupObj.zIndex = this.zIndex;\n    }\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\n\n  Dialog.prototype.getPersistData = function () {\n    return this.addOnPersist([]);\n  };\n  /**\n   * To destroy the widget\n   *\n   * @returns {void}\n   */\n\n\n  Dialog.prototype.destroy = function () {\n    if (this.isDestroyed) {\n      return;\n    }\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\n    if (!isNullOrUndefined(this.element) && this.element.classList.contains(FULLSCREEN)) {\n      removeClass([document.body], [DLG_TARGET, SCROLL_DISABLED]);\n    }\n\n    if (this.isModal) {\n      removeClass([!isNullOrUndefined(this.targetEle) ? this.targetEle : document.body], SCROLL_DISABLED);\n    }\n\n    this.unWireEvents();\n\n    if (!isNullOrUndefined(this.btnObj)) {\n      for (var i = 0; i < this.btnObj.length; i++) {\n        this.btnObj[i].destroy();\n      }\n    }\n\n    if (!isNullOrUndefined(this.dragObj)) {\n      this.dragObj.destroy();\n    }\n\n    if (!isNullOrUndefined(this.popupObj.element) && this.popupObj.element.classList.contains(POPUP_ROOT)) {\n      this.popupObj.destroy();\n    }\n\n    removeClass([this.element], classArray);\n\n    if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n      removeClass([this.element], this.cssClass.split(' '));\n    }\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\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\n    if (!this.isBlazorServerRender()) {\n      this.element.innerHTML = this.clonedEle.innerHTML;\n    }\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\n    for (var i = 0; i < attrs.length; i++) {\n      this.element.removeAttribute(attrs[i]);\n    }\n\n    if (!this.isBlazorServerRender()) {\n      _super.prototype.destroy.call(this);\n    } else {\n      this.isDestroyed = true;\n    } // eslint-disable-next-line\n\n\n    if (this.isReact) {\n      this.clearTemplate();\n    }\n  };\n\n  Dialog.prototype.wireWindowResizeEvent = function () {\n    window.addEventListener('resize', this.windowResizeHandler.bind(this));\n  };\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\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\n    if (this.showCloseIcon) {\n      EventHandler.add(this.closeIcon, 'click', this.closeIconClickEventHandler, this);\n    }\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\n\n  Dialog.prototype.unWireEvents = function () {\n    if (this.showCloseIcon) {\n      EventHandler.remove(this.closeIcon, 'click', this.closeIconClickEventHandler);\n    }\n\n    if (this.isModal) {\n      EventHandler.remove(this.dlgOverlay, 'click', this.dlgOverlayClickEventHandler);\n    }\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\n\n  Dialog.prototype.refreshPosition = function () {\n    this.popupObj.refreshPosition();\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\n\n  Dialog.prototype.show = function (isFullScreen) {\n    var _this = this;\n\n    if (!this.element.classList.contains(ROOT)) {\n      return;\n    }\n\n    if (!this.element.classList.contains(DLG_SHOW) || !isNullOrUndefined(isFullScreen)) {\n      if (!isNullOrUndefined(isFullScreen)) {\n        this.fullScreen(isFullScreen);\n      }\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\n          _this.storeActiveElement = document.activeElement;\n          _this.element.tabIndex = -1;\n\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\n            if (!isNullOrUndefined(_this.targetEle)) {\n              if (_this.targetEle === document.body) {\n                _this.dlgContainer.style.position = 'fixed';\n              } else {\n                _this.dlgContainer.style.position = 'absolute';\n              }\n\n              _this.dlgOverlay.style.position = 'absolute';\n              _this.element.style.position = 'relative';\n              addClass([_this.targetEle], [DLG_TARGET, SCROLL_DISABLED]);\n            } else {\n              addClass([document.body], [DLG_TARGET, SCROLL_DISABLED]);\n            }\n          } // eslint-disable-next-line\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\n          if (_this.calculatezIndex) {\n            _this.setzIndex(zIndexElement, true);\n\n            setStyleAttribute(_this.element, {\n              'zIndex': _this.zIndex\n            });\n\n            if (_this.isModal) {\n              _this.setOverlayZindex(_this.zIndex);\n            }\n          } // eslint-disable-next-line\n\n\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    } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\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\n\n  Dialog.prototype.hide = function (event) {\n    var _this = this;\n\n    if (!this.element.classList.contains(ROOT)) {\n      return;\n    }\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      };\n      this.closeArgs = eventArgs;\n      this.trigger('beforeClose', eventArgs, function (beforeCloseArgs) {\n        if (!beforeCloseArgs.cancel) {\n          if (_this.isModal) {\n            // eslint-disable-next-line\n            !isNullOrUndefined(_this.targetEle) ? removeClass([_this.targetEle], [DLG_TARGET, SCROLL_DISABLED]) : removeClass([document.body], [DLG_TARGET, SCROLL_DISABLED]);\n          } // eslint-disable-next-line\n\n\n          var closeAnimation = {\n            name: _this.animationSettings.effect + 'Out',\n            duration: _this.animationSettings.duration,\n            delay: _this.animationSettings.delay\n          }; // eslint-disable-next-line\n\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      });\n    }\n  }; // eslint-disable-next-line\n\n  /**\n   * Specifies to view the Full screen Dialog.\n   *\n   * @returns {void}\n   * @private\n   */\n\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\n    if (args) {\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) ? this.targetEle.offsetHeight + 'px' : window.innerHeight + 'px';\n      this.element.style.display = display;\n      addClass([document.body], [DLG_TARGET, SCROLL_DISABLED]);\n\n      if (this.allowDragging && !isNullOrUndefined(this.dragObj)) {\n        this.dragObj.destroy();\n      }\n    } else {\n      removeClass([this.element], FULLSCREEN);\n      removeClass([document.body], [DLG_TARGET, SCROLL_DISABLED]);\n\n      if (this.allowDragging && !isNullOrUndefined(this.headerContent)) {\n        this.setAllowDragging();\n      }\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\n\n  Dialog.prototype.getButtons = function (index) {\n    if (!isNullOrUndefined(index)) {\n      return this.btnObj[index];\n    }\n\n    return this.btnObj;\n  };\n\n  __decorate([Property('')], Dialog.prototype, \"content\", void 0);\n\n  __decorate([Property(true)], Dialog.prototype, \"enableHtmlSanitizer\", void 0);\n\n  __decorate([Property(false)], Dialog.prototype, \"showCloseIcon\", void 0);\n\n  __decorate([Property(false)], Dialog.prototype, \"isModal\", void 0);\n\n  __decorate([Property('')], Dialog.prototype, \"header\", void 0);\n\n  __decorate([Property(true)], Dialog.prototype, \"visible\", void 0);\n\n  __decorate([Property(false)], Dialog.prototype, \"enableResize\", void 0);\n\n  __decorate([Property(['South-East'])], Dialog.prototype, \"resizeHandles\", void 0);\n\n  __decorate([Property('auto')], Dialog.prototype, \"height\", void 0);\n\n  __decorate([Property('')], Dialog.prototype, \"minHeight\", void 0);\n\n  __decorate([Property('100%')], Dialog.prototype, \"width\", void 0);\n\n  __decorate([Property('')], Dialog.prototype, \"cssClass\", void 0);\n\n  __decorate([Property(1000)], Dialog.prototype, \"zIndex\", void 0);\n\n  __decorate([Property(null)], Dialog.prototype, \"target\", void 0);\n\n  __decorate([Property('')], Dialog.prototype, \"footerTemplate\", void 0);\n\n  __decorate([Property(false)], Dialog.prototype, \"allowDragging\", void 0);\n\n  __decorate([Collection([{}], ButtonProps)], Dialog.prototype, \"buttons\", void 0);\n\n  __decorate([Property(true)], Dialog.prototype, \"closeOnEscape\", void 0);\n\n  __decorate([Complex({}, AnimationSettings)], Dialog.prototype, \"animationSettings\", void 0);\n\n  __decorate([Complex({\n    X: 'center',\n    Y: 'center'\n  }, PositionData)], Dialog.prototype, \"position\", void 0);\n\n  __decorate([Event()], Dialog.prototype, \"created\", void 0);\n\n  __decorate([Event()], Dialog.prototype, \"open\", void 0);\n\n  __decorate([Event()], Dialog.prototype, \"beforeSanitizeHtml\", void 0);\n\n  __decorate([Event()], Dialog.prototype, \"beforeOpen\", void 0);\n\n  __decorate([Event()], Dialog.prototype, \"close\", void 0);\n\n  __decorate([Event()], Dialog.prototype, \"beforeClose\", void 0);\n\n  __decorate([Event()], Dialog.prototype, \"dragStart\", void 0);\n\n  __decorate([Event()], Dialog.prototype, \"dragStop\", void 0);\n\n  __decorate([Event()], Dialog.prototype, \"drag\", void 0);\n\n  __decorate([Event()], Dialog.prototype, \"overlayClick\", void 0);\n\n  __decorate([Event()], Dialog.prototype, \"resizeStart\", void 0);\n\n  __decorate([Event()], Dialog.prototype, \"resizing\", void 0);\n\n  __decorate([Event()], Dialog.prototype, \"resizeStop\", void 0);\n\n  __decorate([Event()], Dialog.prototype, \"destroyed\", void 0);\n\n  Dialog = __decorate([NotifyPropertyChanges], Dialog);\n  return Dialog;\n}(Component);\n\nexport { Dialog };\n/**\n * Base for creating Alert and Confirmation Dialog through util method.\n */\n// eslint-disable-next-line\n\nexport var DialogUtility;\n\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\n  /* istanbul ignore next */\n\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', {\n      'className': DLG_UTIL_ALERT\n    });\n    document.body.appendChild(dialogElement);\n    var alertDialogObj;\n    var okButtonModel = [{\n      buttonModel: {\n        isPrimary: true,\n        content: 'OK'\n      },\n      click: function click() {\n        this.hide();\n      }\n    }];\n\n    if (typeof args === 'string') {\n      alertDialogObj = createDialog({\n        content: args,\n        position: {\n          X: 'center',\n          Y: 'top'\n        },\n        isModal: true,\n        header: DLG_UTIL_DEFAULT_TITLE,\n        buttons: okButtonModel\n      }, dialogElement);\n    } else {\n      alertDialogObj = createDialog(alertOptions(args), dialogElement);\n    }\n\n    alertDialogObj.close = function () {\n      if (args && args.close) {\n        args.close.apply(alertDialogObj);\n      }\n\n      alertDialogObj.destroy();\n\n      if (alertDialogObj.element.classList.contains('e-dlg-modal')) {\n        alertDialogObj.element.parentElement.remove();\n        alertDialogObj.target.classList.remove(DLG_UTIL_ROOT);\n      } else {\n        alertDialogObj.element.remove();\n      }\n    };\n\n    return alertDialogObj;\n  }\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\n  /* istanbul ignore next */\n\n  /**\n   *\n   * @param {ConfirmDialogArgs} args - specifies the args\n   * @returns {Dialog} - returns te element\n   */\n\n  function confirm(args) {\n    // eslint-disable-next-line\n    var dialogComponent;\n    var dialogElement = createElement('div', {\n      'className': DLG_UTIL_CONFIRM\n    });\n    document.body.appendChild(dialogElement);\n    var confirmDialogObj;\n    var okCancelButtonModel = [{\n      buttonModel: {\n        isPrimary: true,\n        content: 'OK'\n      },\n      click: function click() {\n        this.hide();\n      }\n    }, {\n      buttonModel: {\n        content: 'Cancel'\n      },\n      click: function click() {\n        this.hide();\n      }\n    }];\n\n    if (typeof args === 'string') {\n      confirmDialogObj = createDialog({\n        position: {\n          X: 'center',\n          Y: 'top'\n        },\n        content: args,\n        isModal: true,\n        header: DLG_UTIL_DEFAULT_TITLE,\n        buttons: okCancelButtonModel\n      }, dialogElement);\n    } else {\n      confirmDialogObj = createDialog(confirmOptions(args), dialogElement);\n    }\n\n    confirmDialogObj.close = function () {\n      if (args && args.close) {\n        args.close.apply(confirmDialogObj);\n      }\n\n      confirmDialogObj.destroy();\n\n      if (confirmDialogObj.element.classList.contains('e-dlg-modal')) {\n        confirmDialogObj.element.parentElement.remove();\n        confirmDialogObj.target.classList.remove(DLG_UTIL_ROOT);\n      } else {\n        confirmDialogObj.element.remove();\n      }\n    };\n\n    return confirmDialogObj;\n  }\n\n  DialogUtility.confirm = confirm; // eslint-disable-next-line\n\n  function createDialog(options, element) {\n    var dialogObject = new Dialog(options);\n    dialogObject.appendTo(element);\n    return dialogObject;\n  } // eslint-disable-next-line\n\n\n  function alertOptions(option) {\n    var options = {};\n    options.buttons = [];\n    options = formOptions(options, option);\n    options = setAlertButtonModel(options, option);\n    return options;\n  } // eslint-disable-next-line\n\n\n  function confirmOptions(option) {\n    var options = {};\n    options.buttons = [];\n    options = formOptions(options, option);\n    options = setConfirmButtonModel(options, option);\n    return options;\n  } // eslint-disable-next-line\n\n\n  function formOptions(options, option) {\n    options.header = !isNullOrUndefined(option.title) ? option.title : DLG_UTIL_DEFAULT_TITLE;\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 : {\n      X: 'center',\n      Y: 'top'\n    };\n    options.animationSettings = !isNullOrUndefined(option.animationSettings) ? option.animationSettings : {\n      effect: 'Fade',\n      duration: 400,\n      delay: 0\n    };\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    return options;\n  } // eslint-disable-next-line\n\n\n  function setAlertButtonModel(options, option) {\n    var alertButtonModel = [{\n      buttonModel: {\n        isPrimary: true,\n        content: 'OK'\n      },\n      click: function click() {\n        this.hide();\n      }\n    }];\n\n    if (!isNullOrUndefined(option.okButton)) {\n      options.buttons[0] = formButtonModel(options.buttons[0], option.okButton, alertButtonModel[0]);\n    } else {\n      options.buttons = alertButtonModel;\n    }\n\n    return options;\n  } // eslint-disable-next-line\n\n\n  function setConfirmButtonModel(options, option) {\n    var okButtonModel = {\n      buttonModel: {\n        isPrimary: true,\n        content: 'OK'\n      },\n      click: function click() {\n        this.hide();\n      }\n    };\n    var cancelButtonModel = {\n      buttonModel: {\n        content: 'Cancel'\n      },\n      click: function click() {\n        this.hide();\n      }\n    };\n\n    if (!isNullOrUndefined(option.okButton)) {\n      options.buttons[0] = formButtonModel(options.buttons[0], option.okButton, okButtonModel);\n    } else {\n      options.buttons[0] = okButtonModel;\n    }\n\n    if (!isNullOrUndefined(option.cancelButton)) {\n      options.buttons[1] = formButtonModel(options.buttons[1], option.cancelButton, cancelButtonModel);\n    } else {\n      options.buttons[1] = cancelButtonModel;\n    }\n\n    return options;\n  } // eslint-disable-next-line\n\n\n  function formButtonModel(buttonModel, option, buttonPropModel) {\n    var buttonProps = buttonPropModel;\n\n    if (!isNullOrUndefined(option.text)) {\n      buttonProps.buttonModel.content = option.text;\n    }\n\n    if (!isNullOrUndefined(option.icon)) {\n      buttonProps.buttonModel.iconCss = option.icon;\n    }\n\n    if (!isNullOrUndefined(option.cssClass)) {\n      buttonProps.buttonModel.cssClass = option.cssClass;\n    }\n\n    if (!isNullOrUndefined(option.click)) {\n      buttonProps.click = option.click;\n    }\n\n    return buttonProps;\n  }\n})(DialogUtility || (DialogUtility = {}));","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nvar __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\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 */\n\nvar PositionData =\n/** @class */\nfunction (_super) {\n  __extends(PositionData, _super);\n\n  function PositionData() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n\n  __decorate([Property('left')], PositionData.prototype, \"X\", void 0);\n\n  __decorate([Property('top')], PositionData.prototype, \"Y\", void 0);\n\n  return PositionData;\n}(ChildProperty);\n\nexport { PositionData }; // don't use space in classNames\n\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 * <div id=\"popup\" style=\"position:absolute;height:100px;width:100px;\">\n * <div style=\"margin:35px 25px;\">Popup Content</div></div>\n * ```\n * ```typescript\n * <script>\n *   var popupObj = new Popup();\n *   popupObj.appendTo(\"#popup\");\n * </script>\n * ```\n */\n\nvar Popup =\n/** @class */\nfunction (_super) {\n  __extends(Popup, _super);\n\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\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\n      switch (prop) {\n        case 'width':\n          setStyleAttribute(this.element, {\n            'width': formatUnit(newProp.width)\n          });\n          break;\n\n        case 'height':\n          setStyleAttribute(this.element, {\n            'height': formatUnit(newProp.height)\n          });\n          break;\n\n        case 'zIndex':\n          setStyleAttribute(this.element, {\n            'zIndex': newProp.zIndex\n          });\n          break;\n\n        case 'enableRtl':\n          this.setEnableRtl();\n          break;\n\n        case 'position':\n        case 'relateTo':\n          this.refreshPosition();\n          break;\n\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\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\n        case 'content':\n          this.setContent();\n          break;\n\n        case 'actionOnScroll':\n          if (newProp.actionOnScroll !== 'none') {\n            this.wireScrollEvents();\n          } else {\n            this.unwireScrollEvents();\n          }\n\n          break;\n      }\n    }\n  };\n  /**\n   * gets the Component module name.\n   *\n   * @returns {void}\n   * @private\n   */\n\n\n  Popup.prototype.getModuleName = function () {\n    return 'popup';\n  };\n  /**\n   * To resolve if any collision occurs.\n   *\n   * @returns {void}\n   */\n\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\n\n  Popup.prototype.getPersistData = function () {\n    return this.addOnPersist([]);\n  };\n  /**\n   * To destroy the control.\n   *\n   * @returns {void}\n   */\n\n\n  Popup.prototype.destroy = function () {\n    this.element.classList.remove(CLASSNAMES.ROOT, CLASSNAMES.RTL, CLASSNAMES.OPEN, CLASSNAMES.CLOSE);\n    this.unwireEvents();\n\n    _super.prototype.destroy.call(this);\n  };\n  /**\n   * To Initialize the control rendering\n   *\n   * @returns {void}\n   * @private\n   */\n\n\n  Popup.prototype.render = function () {\n    this.element.classList.add(CLASSNAMES.ROOT);\n    var styles = {};\n\n    if (this.zIndex !== 1000) {\n      styles.zIndex = this.zIndex;\n    }\n\n    if (this.width !== 'auto') {\n      styles.width = formatUnit(this.width);\n    }\n\n    if (this.height !== 'auto') {\n      styles.height = formatUnit(this.height);\n    }\n\n    setStyleAttribute(this.element, styles);\n    this.fixedParent = false;\n    this.setEnableRtl();\n    this.setContent();\n  };\n\n  Popup.prototype.wireEvents = function () {\n    if (Browser.isDevice) {\n      EventHandler.add(window, 'orientationchange', this.orientationOnChange, this);\n    }\n\n    if (this.actionOnScroll !== 'none') {\n      this.wireScrollEvents();\n    }\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\n  Popup.prototype.unwireEvents = function () {\n    if (Browser.isDevice) {\n      EventHandler.remove(window, 'orientationchange', this.orientationOnChange);\n    }\n\n    if (this.actionOnScroll !== 'none') {\n      this.unwireScrollEvents();\n    }\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\n  Popup.prototype.getRelateToElement = function () {\n    var relateToElement = this.relateTo === '' || isNullOrUndefined(this.relateTo) ? document.body : this.relateTo;\n    this.setProperties({\n      relateTo: relateToElement\n    }, true);\n    return typeof this.relateTo === 'string' ? document.querySelector(this.relateTo) : this.relateTo;\n  };\n\n  Popup.prototype.scrollRefresh = function (e) {\n    if (this.actionOnScroll === 'reposition') {\n      if (!isNullOrUndefined(this.element) && !(this.element.offsetParent === e.target || this.element.offsetParent && this.element.offsetParent.tagName === 'BODY' && e.target.parentElement == null)) {\n        this.refreshPosition();\n      }\n    } else if (this.actionOnScroll === 'hide') {\n      this.hide();\n    }\n\n    if (this.actionOnScroll !== 'none') {\n      if (this.getRelateToElement()) {\n        var targetVisible = this.isElementOnViewport(this.getRelateToElement(), e.target);\n\n        if (!targetVisible && !this.targetInvisibleStatus) {\n          this.trigger('targetExitViewport');\n          this.targetInvisibleStatus = true;\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\n\n  Popup.prototype.isElementOnViewport = function (relateToElement, scrollElement) {\n    var scrollParents = this.getScrollableParent(relateToElement);\n\n    for (var parent_3 = 0; parent_3 < scrollParents.length; parent_3++) {\n      if (this.isElementVisible(relateToElement, scrollParents[parent_3])) {\n        continue;\n      } else {\n        return false;\n      }\n    }\n\n    return true;\n  };\n\n  Popup.prototype.isElementVisible = function (relateToElement, scrollElement) {\n    var rect = this.checkGetBoundingClientRect(relateToElement);\n\n    if (!rect.height || !rect.width) {\n      return false;\n    }\n\n    if (!isNullOrUndefined(this.checkGetBoundingClientRect(scrollElement))) {\n      var parent_4 = scrollElement.getBoundingClientRect();\n      return !(rect.bottom < parent_4.top) && !(rect.bottom > parent_4.bottom) && !(rect.right > parent_4.right) && !(rect.left < parent_4.left);\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 && elementView.left > 0 && elementView.right > 0 && elementView.bottom > 0;\n    }\n  };\n  /**\n   * Initialize the event handler\n   *\n   * @returns {void}\n   * @private\n   */\n\n\n  Popup.prototype.preRender = function () {//There is no event handler\n  };\n\n  Popup.prototype.setEnableRtl = function () {\n    this.reposition(); // eslint-disable-next-line\n\n    this.enableRtl ? this.element.classList.add(CLASSNAMES.RTL) : this.element.classList.remove(CLASSNAMES.RTL);\n  };\n\n  Popup.prototype.setContent = function () {\n    if (!isNullOrUndefined(this.content)) {\n      this.element.innerHTML = '';\n\n      if (typeof this.content === 'string') {\n        this.element.textContent = this.content;\n      } else {\n        this.element.appendChild(this.content);\n      }\n    }\n  };\n\n  Popup.prototype.orientationOnChange = function () {\n    var _this = this;\n\n    setTimeout(function () {\n      _this.refreshPosition();\n    }, 200);\n  }; // eslint-disable-next-line\n\n  /**\n   * Based on the `relative` element and `offset` values, `Popup` element position will refreshed.\n   *\n   * @returns {void}\n   */\n\n\n  Popup.prototype.refreshPosition = function (target, collision) {\n    if (!isNullOrUndefined(target)) {\n      this.checkFixedParent(target);\n    }\n\n    this.reposition();\n\n    if (!collision) {\n      this.checkCollision();\n    }\n  };\n\n  Popup.prototype.reposition = function () {\n    var pos;\n    var position;\n    var relateToElement = this.getRelateToElement();\n\n    if (typeof this.position.X === 'number' && typeof this.position.Y === 'number') {\n      pos = {\n        left: this.position.X,\n        top: this.position.Y\n      };\n    } else if (typeof this.position.X === 'string' && typeof this.position.Y === 'number' || 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\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\n      position = this.getAnchorPosition(relateToElement, this.element, this.position, this.offsetX, this.offsetY);\n\n      if (typeof this.position.X === 'string') {\n        pos = {\n          left: position.left,\n          top: this.position.Y\n        };\n      } else {\n        pos = {\n          left: this.position.X,\n          top: position.top\n        };\n      }\n\n      this.element.style.display = display;\n\n      if (this.element.classList.contains('e-dlg-modal')) {\n        this.element.parentElement.style.display = parentDisplay;\n      }\n    } else if (relateToElement) {\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);\n      this.element.style.display = display;\n    } else {\n      pos = {\n        left: 0,\n        top: 0\n      };\n    }\n\n    if (!isNullOrUndefined(pos)) {\n      this.element.style.left = pos.left + 'px';\n      this.element.style.top = pos.top + 'px';\n    }\n  };\n\n  Popup.prototype.checkGetBoundingClientRect = function (ele) {\n    var eleRect;\n\n    try {\n      eleRect = ele.getBoundingClientRect();\n      return eleRect;\n    } catch (error) {\n      return null;\n    }\n  };\n\n  Popup.prototype.getAnchorPosition = function (anchorEle, ele, position, offsetX, offsetY) {\n    var eleRect = this.checkGetBoundingClientRect(ele);\n    var anchorRect = this.checkGetBoundingClientRect(anchorEle);\n\n    if (isNullOrUndefined(eleRect) || isNullOrUndefined(anchorRect)) {\n      return null;\n    }\n\n    var anchor = anchorEle;\n    var anchorPos = {\n      left: 0,\n      top: 0\n    };\n\n    if (ele.offsetParent && ele.offsetParent.tagName === 'BODY' && anchorEle.tagName === 'BODY') {\n      anchorPos = calculatePosition(anchorEle);\n    } else {\n      if (ele.classList.contains('e-dlg-modal') && anchor.tagName !== 'BODY') {\n        ele = ele.parentElement;\n      }\n\n      anchorPos = calculateRelativeBasedPosition(anchor, ele);\n    }\n\n    switch (position.X) {\n      default:\n      case 'left':\n        break;\n\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        } else if (this.targetType === 'container') {\n          anchorPos.left += anchorRect.width / 2 - eleRect.width / 2;\n        } else {\n          anchorPos.left += anchorRect.width / 2;\n        }\n\n        break;\n\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        } else if (this.targetType === 'container') {\n          anchorPos.left += anchorRect.width - eleRect.width;\n        } else {\n          anchorPos.left += anchorRect.width;\n        }\n\n        break;\n    }\n\n    switch (position.Y) {\n      default:\n      case 'top':\n        break;\n\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        } else if (this.targetType === 'container') {\n          anchorPos.top += anchorRect.height / 2 - eleRect.height / 2;\n        } else {\n          anchorPos.top += anchorRect.height / 2;\n        }\n\n        break;\n\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        } else if (this.targetType === 'container') {\n          anchorPos.top += anchorRect.height - eleRect.height;\n        } else {\n          anchorPos.top += anchorRect.height;\n        }\n\n        break;\n    }\n\n    anchorPos.left += offsetX;\n    anchorPos.top += offsetY;\n    return anchorPos;\n  };\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\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\n        if (param.X) {\n          this.element.style.left = data.left + 'px';\n        }\n\n        if (param.Y) {\n          this.element.style.top = data.top + 'px';\n        }\n      } else {\n        var elementRect = this.checkGetBoundingClientRect(this.element);\n        var viewPortRect = this.checkGetBoundingClientRect(this.viewPortElement);\n\n        if (isNullOrUndefined(elementRect) || isNullOrUndefined(viewPortRect)) {\n          return null;\n        }\n\n        if (param && param.Y === true) {\n          if (viewPortRect.top > elementRect.top) {\n            this.element.style.top = '0px';\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\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          } 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\n  Popup.prototype.checkCollision = function () {\n    var horz = this.collision.X;\n    var vert = this.collision.Y;\n\n    if (horz === 'none' && vert === 'none') {\n      return;\n    }\n\n    if (horz === 'flip' && vert === 'flip') {\n      this.callFlip({\n        X: true,\n        Y: true\n      });\n    } else if (horz === 'fit' && vert === 'fit') {\n      this.callFit({\n        X: true,\n        Y: true\n      });\n    } else {\n      if (horz === 'flip') {\n        this.callFlip({\n          X: true,\n          Y: false\n        });\n      } else if (vert === 'flip') {\n        this.callFlip({\n          Y: true,\n          X: false\n        });\n      }\n\n      if (horz === 'fit') {\n        this.callFit({\n          X: true,\n          Y: false\n        });\n      } else if (vert === 'fit') {\n        this.callFit({\n          X: false,\n          Y: true\n        });\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\n\n  Popup.prototype.show = function (animationOptions, relativeElement) {\n    var _this = this;\n\n    this.wireEvents();\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, {\n        'zIndex': this.zIndex\n      });\n    }\n\n    animationOptions = !isNullOrUndefined(animationOptions) && typeof animationOptions === 'object' ? animationOptions : this.showAnimation;\n\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\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\n      animationOptions.end = function () {\n        if (!_this.isDestroyed) {\n          _this.trigger('open');\n        }\n      };\n\n      new Animation(animationOptions).animate(this.element);\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\n\n  Popup.prototype.hide = function (animationOptions) {\n    var _this = this;\n\n    animationOptions = !isNullOrUndefined(animationOptions) && typeof animationOptions === 'object' ? animationOptions : this.hideAnimation;\n\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\n          _this.trigger('close');\n        }\n      };\n\n      new Animation(animationOptions).animate(this.element);\n    } else {\n      removeClass([this.element], CLASSNAMES.OPEN);\n      addClass([this.element], CLASSNAMES.CLOSE);\n      this.trigger('close');\n    }\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\n\n  Popup.prototype.getScrollableParent = function (element) {\n    this.checkFixedParent(element);\n    return getScrollableParent(element, this.fixedParent);\n  };\n\n  Popup.prototype.checkFixedParent = function (element) {\n    var parent = element.parentElement;\n\n    while (parent && parent.tagName !== 'HTML') {\n      var parentStyle = getComputedStyle(parent);\n\n      if (parentStyle.position === 'fixed' && !isNullOrUndefined(this.element) && this.element.offsetParent && this.element.offsetParent.tagName === 'BODY') {\n        this.element.style.top = window.scrollY > parseInt(this.element.style.top) ? formatUnit(window.scrollY - parseInt(this.element.style.top)) : formatUnit(parseInt(this.element.style.top) - window.scrollY);\n        this.element.style.position = 'fixed';\n        this.fixedParent = true;\n      }\n\n      parent = parent.parentElement;\n\n      if (!isNullOrUndefined(this.element) && isNullOrUndefined(this.element.offsetParent) && parentStyle.position === 'fixed' && this.element.style.position === 'fixed') {\n        this.fixedParent = true;\n      }\n    }\n  };\n\n  __decorate([Property('auto')], Popup.prototype, \"height\", void 0);\n\n  __decorate([Property('auto')], Popup.prototype, \"width\", void 0);\n\n  __decorate([Property(null)], Popup.prototype, \"content\", void 0);\n\n  __decorate([Property('container')], Popup.prototype, \"targetType\", void 0);\n\n  __decorate([Property(null)], Popup.prototype, \"viewPortElement\", void 0);\n\n  __decorate([Property({\n    X: 'none',\n    Y: 'none'\n  })], Popup.prototype, \"collision\", void 0);\n\n  __decorate([Property('')], Popup.prototype, \"relateTo\", void 0);\n\n  __decorate([Complex({}, PositionData)], Popup.prototype, \"position\", void 0);\n\n  __decorate([Property(0)], Popup.prototype, \"offsetX\", void 0);\n\n  __decorate([Property(0)], Popup.prototype, \"offsetY\", void 0);\n\n  __decorate([Property(1000)], Popup.prototype, \"zIndex\", void 0);\n\n  __decorate([Property(false)], Popup.prototype, \"enableRtl\", void 0);\n\n  __decorate([Property('reposition')], Popup.prototype, \"actionOnScroll\", void 0);\n\n  __decorate([Property(null)], Popup.prototype, \"showAnimation\", void 0);\n\n  __decorate([Property(null)], Popup.prototype, \"hideAnimation\", void 0);\n\n  __decorate([Event()], Popup.prototype, \"open\", void 0);\n\n  __decorate([Event()], Popup.prototype, \"close\", void 0);\n\n  __decorate([Event()], Popup.prototype, \"targetExitViewport\", void 0);\n\n  Popup = __decorate([NotifyPropertyChanges], Popup);\n  return Popup;\n}(Component);\n\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 */\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\n  while (parent && parent.tagName !== 'HTML') {\n    var parentStyle = getComputedStyle(parent);\n\n    if (!(eleStyle.position === 'absolute' && parentStyle.position === 'static') && overflowRegex.test(parentStyle.overflow + parentStyle.overflowY + parentStyle.overflowX)) {\n      scrollParents.push(parent);\n    }\n\n    parent = parent.parentElement;\n  }\n\n  if (!fixedParent) {\n    scrollParents.push(document);\n  }\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 */\n\nexport function getZindexPartial(element) {\n  // upto body traversal\n  var parent = element.parentElement;\n  var parentZindex = [];\n\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\n      if (index !== 'auto' && position !== 'static') {\n        parentZindex.push(index);\n      }\n\n      parent = parent.parentElement;\n    } else {\n      break;\n    }\n  }\n\n  var childrenZindex = [];\n\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\n      if (index !== 'auto' && position !== 'static') {\n        childrenZindex.push(index);\n      }\n    }\n  }\n\n  childrenZindex.push('999');\n  var siblingsZindex = [];\n\n  if (!isNullOrUndefined(element.parentElement) && element.parentElement.tagName !== 'BODY') {\n    var childNodes = [].slice.call(element.parentElement.children);\n\n    for (var i = 0; i < childNodes.length; 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\n      if (index !== 'auto' && position !== 'static') {\n        siblingsZindex.push(index);\n      }\n    }\n  }\n\n  var finalValue = parentZindex.concat(childrenZindex, siblingsZindex); // eslint-disable-next-line\n\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 */\n\nexport function getMaxZindex(tagName) {\n  if (tagName === void 0) {\n    tagName = ['*'];\n  }\n\n  var maxZindex = [];\n\n  for (var i = 0; i < tagName.length; i++) {\n    var elements = document.getElementsByTagName(tagName[i]);\n\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\n      if (index !== 'auto' && position !== 'static') {\n        maxZindex.push(index);\n      }\n    }\n  } // eslint-disable-next-line\n\n\n  var currentZindexValue = Math.max.apply(Math, maxZindex) + 1;\n  return currentZindexValue > 2147483647 ? 2147483647 : currentZindexValue;\n}","import { isNullOrUndefined, classList, createElement } from '@syncfusion/ej2-base';\nvar globalTimeOut = {};\nvar DEFT_MAT_WIDTH = 30;\nvar DEFT_FAB_WIDTH = 30;\nvar DEFT_BOOT_WIDTH = 30;\nvar DEFT_BOOT4_WIDTH = 36;\nvar CLS_SHOWSPIN = 'e-spin-show';\nvar CLS_HIDESPIN = 'e-spin-hide';\nvar CLS_MATERIALSPIN = 'e-spin-material';\nvar CLS_FABRICSPIN = 'e-spin-fabric';\nvar CLS_BOOTSPIN = 'e-spin-bootstrap';\nvar CLS_BOOT4SPIN = 'e-spin-bootstrap4';\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; // eslint-disable-next-line\n\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  */\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 = {\n        type: type,\n        target: element,\n        cssClass: options.cssClass,\n        label: options.label,\n        width: options.width\n      };\n      /* eslint-enable */\n\n      createSpinner(args);\n      break;\n\n    case 'Show':\n      showSpinner(document.querySelector(target));\n      break;\n\n    case 'Hide':\n      hideSpinner(document.querySelector(target));\n      break;\n\n    case 'Set':\n      // eslint-disable-next-line\n      var setArgs = {\n        cssClass: options.cssClass,\n        type: type\n      };\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 */\n\nexport function createSpinner(args, internalCreateElement) {\n  if (!args.target) {\n    return;\n  }\n\n  var radius;\n  var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement; // eslint-disable-next-line\n\n  var container = create_spinner_container(args.target, makeElement);\n\n  if (!isNullOrUndefined(args.cssClass)) {\n    container.wrap.classList.add(args.cssClass);\n  }\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  } 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\n    if (!isNullOrUndefined(args.label)) {\n      createLabel(container.inner_wrap, args.label, makeElement);\n    }\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 */\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 */\n\n\nfunction createMaterialSpinner(container, radius, makeElement) {\n  var uniqueID = random_generator();\n  globalTimeOut[uniqueID] = {\n    timeOut: 0,\n    type: 'Material',\n    radius: radius\n  };\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 */\n\n\nfunction createBootstrap4Spinner(container, radius, makeElement) {\n  var uniqueID = random_generator();\n  globalTimeOut[uniqueID] = {\n    timeOut: 0,\n    type: 'Bootstrap4',\n    radius: radius\n  };\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 {string} uniqueID - specifies the id.\n * @param {number} radius - specifies the radius\n * @returns {void}\n */\n\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); // eslint-disable-next-line\n\n  var spinnerInfo = {\n    uniqueID: uniqueID,\n    container: container,\n    globalInfo: globalObject,\n    timeOutVar: timeOutVar\n  };\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 */\n\n\nfunction createFabricSpinner(container, radius, makeElement) {\n  var uniqueID = random_generator();\n  globalTimeOut[uniqueID] = {\n    timeOut: 0,\n    type: 'Fabric',\n    radius: radius\n  };\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 */\n\n\nfunction createHighContrastSpinner(container, radius, makeElement) {\n  var uniqueID = random_generator();\n  globalTimeOut[uniqueID] = {\n    timeOut: 0,\n    type: 'HighContrast',\n    radius: radius\n  };\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 */\n\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 */\n\n\nfunction setTheme(theme, container, radius, makeElement) {\n  var innerContainer = container.querySelector('.' + CLS_SPININWRAP);\n  var svg = innerContainer.querySelector('svg');\n\n  if (!isNullOrUndefined(svg)) {\n    innerContainer.removeChild(svg);\n  }\n\n  switch (theme) {\n    case 'Material':\n      createMaterialSpinner(innerContainer, radius, makeElement);\n      break;\n\n    case 'Fabric':\n      createFabricSpinner(innerContainer, radius, makeElement);\n      break;\n\n    case 'Bootstrap':\n      createBootstrapSpinner(innerContainer, radius, makeElement);\n      break;\n\n    case 'HighContrast':\n      createHighContrastSpinner(innerContainer, radius, makeElement);\n      break;\n\n    case 'Bootstrap4':\n      createBootstrap4Spinner(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 */\n\n\nfunction createBootstrapSpinner(innerContainer, radius, makeElement) {\n  var uniqueID = random_generator();\n  globalTimeOut[uniqueID] = {\n    timeOut: 0,\n    type: 'Bootstrap',\n    radius: radius\n  };\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\n\n\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\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\n\n\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\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 */\n\n\nfunction generateSeries(begin, stop) {\n  var series = [];\n  var start = begin;\n  var end = stop; // eslint-disable-next-line\n\n  var increment = false,\n      count = 1;\n  formSeries(start);\n  /**\n   *\n   * @param {number} i - specifies the number\n   * @returns {void}\n   */\n\n  function formSeries(i) {\n    series.push(i);\n\n    if (i !== end || count === 1) {\n      if (i <= start && i > 1 && !increment) {\n        i = parseFloat((i - 0.2).toFixed(2));\n      } else if (i === 1) {\n        i = 7;\n        i = parseFloat((i + 0.2).toFixed(2));\n        increment = true;\n      } else if (i < 8 && increment) {\n        i = parseFloat((i + 0.2).toFixed(2));\n\n        if (i === 8) {\n          increment = false;\n        }\n      } else if (i <= 8 && !increment) {\n        i = parseFloat((i - 0.2).toFixed(2));\n      }\n\n      ++count;\n      formSeries(i);\n    }\n  }\n\n  return series;\n}\n/**\n *\n * @param {HTMLElement} innerContainer - specifies the element\n * @returns {void}\n */\n\n\nfunction animateBootstrap(innerContainer) {\n  var svg = innerContainer.querySelector('svg.e-spin-bootstrap');\n  var id = svg.getAttribute('id');\n\n  for (var i = 1; i <= 8; i++) {\n    var circleEle = innerContainer.getElementsByClassName('e-path-circle_' + (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\n\n  function rotation(circle, start, end, series, id) {\n    var count = 0;\n    boot_animate(start); // eslint-disable-next-line\n\n    function boot_animate(radius) {\n      if (globalTimeOut[id].isAnimate) {\n        ++count;\n        circle.setAttribute('r', radius + '');\n\n        if (count >= series.length) {\n          count = 0;\n        } // eslint-disable-next-line\n\n\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 */\n\n\nfunction replaceContent(container, template, cssClass) {\n  if (!isNullOrUndefined(cssClass)) {\n    container.classList.add(cssClass);\n  }\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 */\n\n\nfunction calculateRadius(width, theme) {\n  var defaultSize;\n\n  switch (theme) {\n    case 'Material':\n      defaultSize = DEFT_MAT_WIDTH;\n      break;\n\n    case 'Fabric':\n      defaultSize = DEFT_FAB_WIDTH;\n      break;\n\n    case 'Bootstrap4':\n      defaultSize = DEFT_BOOT4_WIDTH;\n      break;\n\n    default:\n      defaultSize = DEFT_BOOT_WIDTH;\n  }\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 */\n\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\n\n\nfunction random_generator() {\n  var random = '';\n  var combine = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\n  for (var i = 0; i < 5; i++) {\n    random += combine.charAt(Math.floor(Math.random() * combine.length));\n  }\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\n\n\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\n\n\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\n\n\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); // eslint-disable-next-line\n\n  return {\n    wrap: spinnerContainer,\n    inner_wrap: spinnerInnerContainer\n  };\n}\n/**\n *\n * @param {SpinnerInfo} spinnerInfo - specifies the spinner\n * @returns {void}\n */\n\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 */\n// eslint-disable-next-line\n\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); // eslint-disable-next-line\n\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\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    } 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\n\n  function updatePath(value, container) {\n    if (!isNullOrUndefined(container.querySelector('svg.e-spin-material')) && !isNullOrUndefined(container.querySelector('svg.e-spin-material').querySelector('path.e-path-circle'))) {\n      var svg = container.querySelector('svg.e-spin-material');\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 * @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\n\n\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\n  if (type === 'Material') {\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 */\n\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 */\n\n\nfunction drawArc(diameter, strokeSize) {\n  var radius = diameter / 2;\n  var offset = strokeSize / 2;\n  return 'M' + radius + ',' + offset + '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 */\n\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 */\n\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 */\n\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\n\n\nfunction fb_calculate_attributes(radius, innerConainer, trgClass) {\n  var centerX = radius;\n  var centerY = radius;\n  var diameter = radius * 2; // eslint-disable-next-line\n\n  var startArc = 315,\n      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 */\n\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 */\n\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 = ['M', start.x, start.y, 'A', radius, radius, 0, 0, 0, end.x, end.y].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 */\n\n\nfunction defineCircle(x, y, radius) {\n  var d = ['M', x, y, 'm', -radius, 0, 'a', radius, radius, 0, 1, 0, radius * 2, 0, 'a', radius, radius, 0, 1, 0, -radius * 2, 0].join(' ');\n  return d;\n} // eslint-disable-next-line\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 */\n\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 */\n\nfunction showHideSpinner(container, isHide) {\n  var spinnerWrap;\n\n  if (container) {\n    spinnerWrap = container.classList.contains(CLS_SPINWRAP) ? container : container.querySelector('.' + CLS_SPINWRAP);\n  }\n\n  if (container && spinnerWrap) {\n    var inner = spinnerWrap.querySelector('.' + CLS_SPININWRAP);\n    var spinCheck = void 0; // eslint-disable-next-line\n\n    spinCheck = isHide ? !spinnerWrap.classList.contains(CLS_SPINTEMPLATE) && !spinnerWrap.classList.contains(CLS_HIDESPIN) : !spinnerWrap.classList.contains(CLS_SPINTEMPLATE) && !spinnerWrap.classList.contains(CLS_SHOWSPIN);\n\n    if (spinCheck) {\n      var svgEle = spinnerWrap.querySelector('svg');\n\n      if (isNullOrUndefined(svgEle)) {\n        return;\n      }\n\n      var id = svgEle.getAttribute('id');\n      globalTimeOut[id].isAnimate = !isHide;\n\n      switch (globalTimeOut[id].type) {\n        case 'Material':\n          // eslint-disable-next-line\n          isHide ? clearTimeout(globalTimeOut[id].timeOut) : startMatAnimate(inner, id, globalTimeOut[id].radius);\n          break;\n\n        case 'Bootstrap':\n          // eslint-disable-next-line\n          isHide ? clearTimeout(globalTimeOut[id].timeOut) : animateBootstrap(inner);\n          break;\n      }\n    } // eslint-disable-next-line\n\n\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 */\n\n\nexport function hideSpinner(container) {\n  showHideSpinner(container, true);\n  container = null;\n} // eslint-disable-next-line\n\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  */\n\nexport function setSpinner(args, internalCreateElement) {\n  var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n\n  if (args.template !== undefined) {\n    spinTemplate = args.template;\n\n    if (args.template !== undefined) {\n      spinCSSClass = args.cssClass;\n    }\n  }\n\n  var container = document.querySelectorAll('.' + CLS_SPINWRAP);\n\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 */\n\nfunction ensureTemplate(template, container, theme, cssClass, makeEle) {\n  if (isNullOrUndefined(template) && !container.classList.contains(CLS_SPINTEMPLATE)) {\n    replaceTheme(container, theme, cssClass, makeEle);\n\n    if (container.classList.contains(CLS_SHOWSPIN)) {\n      container.classList.remove(CLS_SHOWSPIN);\n      showSpinner(container);\n    } else {\n      container.classList.remove(CLS_HIDESPIN);\n      hideSpinner(container);\n    }\n  } else {\n    spinTemplate = template;\n\n    if (!isNullOrUndefined(cssClass)) {\n      spinCSSClass = cssClass;\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 */\n\n\nfunction replaceTheme(container, theme, cssClass, makeEle) {\n  if (!isNullOrUndefined(cssClass)) {\n    container.classList.add(cssClass);\n  }\n\n  var svgElement = container.querySelector('svg');\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\n  if (svgClassList.indexOf('e-spin-material') >= 0) {\n    var id = svgElement.getAttribute('id');\n    clearTimeout(globalTimeOut[id].timeOut);\n  }\n\n  setTheme(theme, container, radius, makeEle);\n}","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nvar __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nimport { Component, Property, ChildProperty, Event, append, compile, isBlazor } from '@syncfusion/ej2-base';\nimport { EventHandler, Touch, Browser, Animation as PopupAnimation } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getUniqueID, formatUnit } from '@syncfusion/ej2-base';\nimport { attributes, closest, removeClass, addClass, remove, updateBlazorTemplate, resetBlazorTemplate } 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';\n\nvar Animation =\n/** @class */\nfunction (_super) {\n  __extends(Animation, _super);\n\n  function Animation() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n\n  __decorate([Property({\n    effect: 'FadeIn',\n    duration: 150,\n    delay: 0\n  })], Animation.prototype, \"open\", void 0);\n\n  __decorate([Property({\n    effect: 'FadeOut',\n    duration: 150,\n    delay: 0\n  })], Animation.prototype, \"close\", void 0);\n\n  return Animation;\n}(ChildProperty);\n\nexport { Animation };\n/**\n * Represents the Tooltip component that displays a piece of information about the target element on mouse hover.\n * ```html\n * <div id=\"tooltip\">Show Tooltip</div>\n * ```\n * ```typescript\n * <script>\n *   var tooltipObj = new Tooltip({ content: 'Tooltip text' });\n *   tooltipObj.appendTo(\"#tooltip\");\n * </script>\n * ```\n */\n\nvar Tooltip =\n/** @class */\nfunction (_super) {\n  __extends(Tooltip, _super);\n  /* eslint-enable */\n\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\n\n  function Tooltip(options, element) {\n    var _this = _super.call(this, options, element) || this;\n\n    _this.isBlazorTooltip = false;\n    _this.contentTargetValue = null;\n    _this.contentEvent = null;\n    _this.contentAnimation = null;\n    return _this;\n  }\n\n  Tooltip.prototype.initialize = function () {\n    this.formatPosition();\n\n    if (!this.isServerRender()) {\n      addClass([this.element], ROOT);\n    }\n  };\n\n  Tooltip.prototype.isServerRender = function () {\n    return isBlazor() && this.isServerRendered;\n  };\n\n  Tooltip.prototype.formatPosition = function () {\n    var _a, _b;\n\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    } else {\n      _b = this.position.split(/(?=[A-Z])/), this.tooltipPositionX = _b[0], this.tooltipPositionY = _b[1];\n    }\n  };\n\n  Tooltip.prototype.renderArrow = function () {\n    this.setTipClass(this.position);\n\n    if (!this.isServerRender()) {\n      var tip = this.createElement('div', {\n        className: ARROW_TIP + ' ' + this.tipClass\n      });\n      tip.appendChild(this.createElement('div', {\n        className: ARROW_TIP_OUTER + ' ' + this.tipClass\n      }));\n      tip.appendChild(this.createElement('div', {\n        className: ARROW_TIP_INNER + ' ' + this.tipClass\n      }));\n      this.tooltipEle.appendChild(tip);\n    } else {\n      var tip = this.tooltipEle.querySelector('.' + ARROW_TIP);\n      addClass([tip.querySelector('.' + ARROW_TIP_OUTER)], this.tipClass);\n      addClass([tip.querySelector('.' + ARROW_TIP_INNER)], this.tipClass);\n      this.tooltipEle.appendChild(tip);\n    }\n  };\n\n  Tooltip.prototype.setTipClass = function (position) {\n    if (position.indexOf('Right') === 0) {\n      this.tipClass = TIP_LEFT;\n    } else if (position.indexOf('Bottom') === 0) {\n      this.tipClass = TIP_TOP;\n    } else if (position.indexOf('Left') === 0) {\n      this.tipClass = TIP_RIGHT;\n    } else {\n      this.tipClass = TIP_BOTTOM;\n    }\n  };\n\n  Tooltip.prototype.renderPopup = function (target) {\n    var elePos = this.mouseTrail ? {\n      top: 0,\n      left: 0\n    } : 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: {\n        X: elePos.left,\n        Y: elePos.top\n      },\n      enableRtl: this.enableRtl,\n      open: this.openPopupHandler.bind(this),\n      close: this.closePopupHandler.bind(this)\n    });\n  };\n\n  Tooltip.prototype.getTooltipPosition = function (target) {\n    this.tooltipEle.style.display = 'block';\n    var pos = calculatePosition(target, this.tooltipPositionX, this.tooltipPositionY);\n    var offsetPos = this.calculateTooltipOffset(this.position);\n    var elePos = this.collisionFlipFit(target, pos.left + offsetPos.left, pos.top + offsetPos.top);\n    this.tooltipEle.style.display = '';\n    return elePos;\n  };\n\n  Tooltip.prototype.reposition = function (target) {\n    var elePos = this.getTooltipPosition(target);\n    this.popupObj.position = {\n      X: elePos.left,\n      Y: elePos.top\n    };\n    this.popupObj.dataBind();\n  };\n\n  Tooltip.prototype.openPopupHandler = function () {\n    if (!this.mouseTrail && this.needTemplateReposition()) {\n      this.reposition(this.findTarget());\n    }\n\n    this.trigger('afterOpen', this.tooltipEventArgs);\n  };\n\n  Tooltip.prototype.closePopupHandler = function () {\n    resetBlazorTemplate(this.element.id + 'content', 'Content');\n    this.clearTemplate(['content']);\n    this.clear();\n    this.trigger('afterClose', this.tooltipEventArgs);\n  };\n\n  Tooltip.prototype.calculateTooltipOffset = function (position) {\n    var pos = {\n      top: 0,\n      left: 0\n    };\n    var tooltipEleWidth = this.tooltipEle.offsetWidth;\n    var tooltipEleHeight = this.tooltipEle.offsetHeight;\n    var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n    var tipWidth = arrowEle ? arrowEle.offsetWidth : 0;\n    var tipHeight = arrowEle ? arrowEle.offsetHeight : 0;\n    var tipAdjust = this.showTipPointer ? SHOW_POINTER_TIP_GAP : HIDE_POINTER_TIP_GAP;\n    var tipHeightAdjust = tipHeight / 2 + POINTER_ADJUST + (this.tooltipEle.offsetHeight - this.tooltipEle.clientHeight);\n    var tipWidthAdjust = tipWidth / 2 + POINTER_ADJUST + (this.tooltipEle.offsetWidth - this.tooltipEle.clientWidth);\n\n    if (this.mouseTrail) {\n      tipAdjust += MOUSE_TRAIL_GAP;\n    }\n\n    switch (position) {\n      case 'RightTop':\n        pos.left += tipWidth + tipAdjust;\n        pos.top -= tooltipEleHeight - tipHeightAdjust;\n        break;\n\n      case 'RightCenter':\n        pos.left += tipWidth + tipAdjust;\n        pos.top -= tooltipEleHeight / 2;\n        break;\n\n      case 'RightBottom':\n        pos.left += tipWidth + tipAdjust;\n        pos.top -= tipHeightAdjust;\n        break;\n\n      case 'BottomRight':\n        pos.top += tipHeight + tipAdjust;\n        pos.left -= tipWidthAdjust;\n        break;\n\n      case 'BottomCenter':\n        pos.top += tipHeight + tipAdjust;\n        pos.left -= tooltipEleWidth / 2;\n        break;\n\n      case 'BottomLeft':\n        pos.top += tipHeight + tipAdjust;\n        pos.left -= tooltipEleWidth - tipWidthAdjust;\n        break;\n\n      case 'LeftBottom':\n        pos.left -= tipWidth + tooltipEleWidth + tipAdjust;\n        pos.top -= tipHeightAdjust;\n        break;\n\n      case 'LeftCenter':\n        pos.left -= tipWidth + tooltipEleWidth + tipAdjust;\n        pos.top -= tooltipEleHeight / 2;\n        break;\n\n      case 'LeftTop':\n        pos.left -= tipWidth + tooltipEleWidth + tipAdjust;\n        pos.top -= tooltipEleHeight - tipHeightAdjust;\n        break;\n\n      case 'TopLeft':\n        pos.top -= tooltipEleHeight + tipHeight + tipAdjust;\n        pos.left -= tooltipEleWidth - tipWidthAdjust;\n        break;\n\n      case 'TopRight':\n        pos.top -= tooltipEleHeight + tipHeight + tipAdjust;\n        pos.left -= tipWidthAdjust;\n        break;\n\n      default:\n        pos.top -= tooltipEleHeight + tipHeight + tipAdjust;\n        pos.left -= tooltipEleWidth / 2;\n        break;\n    }\n\n    pos.left += this.offsetX;\n    pos.top += this.offsetY;\n    return pos;\n  };\n\n  Tooltip.prototype.updateTipPosition = function (position) {\n    var selEle = this.tooltipEle.querySelectorAll('.' + ARROW_TIP + ',.' + ARROW_TIP_OUTER + ',.' + ARROW_TIP_INNER);\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\n  Tooltip.prototype.adjustArrow = function (target, position, tooltipPositionX, tooltipPositionY) {\n    if (this.showTipPointer === false) {\n      return;\n    }\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 = this.tooltipEle.querySelector('.' + ARROW_TIP);\n    var arrowInnerELe = this.tooltipEle.querySelector('.' + ARROW_TIP_INNER);\n    var tipWidth = arrowEle.offsetWidth;\n    var tipHeight = arrowEle.offsetHeight;\n    this.tooltipEle.style.display = '';\n\n    if (this.tipClass === TIP_BOTTOM || this.tipClass === TIP_TOP) {\n      if (this.tipClass === TIP_BOTTOM) {\n        topValue = '99.9%'; // Arrow icon aligned -2px height from ArrowOuterTip div\n\n        arrowInnerELe.style.top = '-' + (tipHeight - 2) + 'px';\n      } else {\n        topValue = -(tipHeight - 1) + 'px'; // Arrow icon aligned -6px height from ArrowOuterTip div\n\n        arrowInnerELe.style.top = '-' + (tipHeight - 6) + 'px';\n      }\n\n      if (target) {\n        var tipPosExclude = tooltipPositionX !== 'Center' || tooltipWidth > target.offsetWidth || this.mouseTrail;\n\n        if (tipPosExclude && tooltipPositionX === 'Left' || !tipPosExclude && this.tipPointerPosition === 'End') {\n          leftValue = tooltipWidth - tipWidth - POINTER_ADJUST + 'px';\n        } else if (tipPosExclude && tooltipPositionX === 'Right' || !tipPosExclude && this.tipPointerPosition === 'Start') {\n          leftValue = POINTER_ADJUST + 'px';\n        } else {\n          leftValue = tooltipWidth / 2 - tipWidth / 2 + 'px';\n        }\n      }\n    } else {\n      if (this.tipClass === TIP_RIGHT) {\n        leftValue = '99.9%'; // Arrow icon aligned -2px left from ArrowOuterTip div\n\n        arrowInnerELe.style.left = '-' + (tipWidth - 2) + 'px';\n      } else {\n        leftValue = -(tipWidth - 1) + 'px'; // Arrow icon aligned -2px from ArrowOuterTip width\n\n        arrowInnerELe.style.left = -tipWidth + (tipWidth - 2) + 'px';\n      }\n\n      var tipPosExclude = tooltipPositionY !== 'Center' || tooltipHeight > target.offsetHeight || this.mouseTrail;\n\n      if (tipPosExclude && tooltipPositionY === 'Top' || !tipPosExclude && this.tipPointerPosition === 'End') {\n        topValue = tooltipHeight - tipHeight - POINTER_ADJUST + 'px';\n      } else if (tipPosExclude && tooltipPositionY === 'Bottom' || !tipPosExclude && this.tipPointerPosition === 'Start') {\n        topValue = POINTER_ADJUST + 'px';\n      } else {\n        topValue = tooltipHeight / 2 - tipHeight / 2 + 'px';\n      }\n    }\n\n    arrowEle.style.top = topValue;\n    arrowEle.style.left = leftValue;\n  };\n\n  Tooltip.prototype.renderContent = function (target) {\n    var tooltipContent = this.tooltipEle.querySelector('.' + CONTENT);\n\n    if (this.cssClass) {\n      addClass([this.tooltipEle], this.cssClass.split(' '));\n    }\n\n    if (target && !isNullOrUndefined(target.getAttribute('title'))) {\n      target.setAttribute('data-content', target.getAttribute('title'));\n      target.removeAttribute('title');\n    }\n\n    if (!isNullOrUndefined(this.content)) {\n      if (this.isBlazorTooltip || !this.isServerRender()) {\n        tooltipContent.innerHTML = '';\n\n        if (this.content instanceof HTMLElement) {\n          tooltipContent.appendChild(this.content);\n        } else if (typeof this.content === 'string' && this.content.indexOf('<div>Blazor') < 0) {\n          if (this.enableHtmlSanitizer) {\n            this.setProperties({\n              content: SanitizeHtmlHelper.sanitize(this.content)\n            }, true);\n          }\n\n          tooltipContent[this.enableHtmlParse ? 'innerHTML' : 'textContent'] = this.content;\n        } else {\n          // eslint-disable-next-line\n          var templateFunction = compile(this.content);\n          var tempArr = templateFunction({}, this, 'content', this.element.id + 'content', undefined, undefined, tooltipContent);\n\n          if (tempArr) {\n            append(tempArr, tooltipContent);\n          }\n\n          this.renderReactTemplates();\n\n          if (typeof this.content === 'string' && this.content.indexOf('<div>Blazor') >= 0) {\n            this.isBlazorTemplate = true;\n            updateBlazorTemplate(this.element.id + 'content', 'Content', this);\n          }\n        }\n      }\n    } else {\n      if (target && !isNullOrUndefined(target.getAttribute('data-content'))) {\n        tooltipContent.innerHTML = target.getAttribute('data-content');\n      }\n    }\n  };\n\n  Tooltip.prototype.renderCloseIcon = function () {\n    if (!this.isSticky) {\n      return;\n    }\n\n    var tipClose = this.createElement('div', {\n      className: ICON + ' ' + CLOSE\n    });\n    this.tooltipEle.appendChild(tipClose);\n    EventHandler.add(tipClose, Browser.touchStartEvent, this.onStickyClose, this);\n  };\n\n  Tooltip.prototype.addDescribedBy = function (target, id) {\n    var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n\n    if (describedby.indexOf(id) < 0) {\n      describedby.push(id);\n    }\n\n    attributes(target, {\n      'aria-describedby': describedby.join(' ').trim(),\n      'data-tooltip-id': id\n    });\n  };\n\n  Tooltip.prototype.removeDescribedBy = function (target) {\n    var id = target.getAttribute('data-tooltip-id');\n    var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n    var index = describedby.indexOf(id);\n\n    if (index !== -1) {\n      describedby.splice(index, 1);\n    }\n\n    target.removeAttribute('data-tooltip-id');\n    var orgdescribedby = describedby.join(' ').trim();\n\n    if (orgdescribedby) {\n      target.setAttribute('aria-describedby', orgdescribedby);\n    } else {\n      target.removeAttribute('aria-describedby');\n    }\n  };\n\n  Tooltip.prototype.tapHoldHandler = function (evt) {\n    clearTimeout(this.autoCloseTimer);\n    this.targetHover(evt.originalEvent);\n  };\n\n  Tooltip.prototype.touchEndHandler = function (e) {\n    var _this = this;\n\n    if (this.isSticky) {\n      return;\n    } // eslint-disable-next-line\n\n\n    var close = function close() {\n      _this.close();\n    };\n\n    this.autoCloseTimer = setTimeout(close, TOUCHEND_HIDE_DELAY);\n  };\n\n  Tooltip.prototype.targetClick = function (e) {\n    var target;\n\n    if (this.target) {\n      target = closest(e.target, this.target);\n    } else {\n      target = this.element;\n    }\n\n    if (isNullOrUndefined(target)) {\n      return;\n    }\n\n    if (target.getAttribute('data-tooltip-id') === null) {\n      this.targetHover(e);\n    } else if (!this.isSticky) {\n      this.hideTooltip(this.animation.close, e, target);\n    }\n  };\n\n  Tooltip.prototype.targetHover = function (e) {\n    var target;\n\n    if (this.target) {\n      target = closest(e.target, this.target);\n    } else {\n      target = this.element;\n    }\n\n    if (isNullOrUndefined(target) || target.getAttribute('data-tooltip-id') !== null && this.closeDelay === 0) {\n      return;\n    }\n\n    var targetList = [].slice.call(document.querySelectorAll('[data-tooltip-id= ' + this.ctrlId + '_content]'));\n\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\n    this.showTooltip(target, this.animation.open, e);\n  };\n\n  Tooltip.prototype.showTooltip = function (target, showAnimation, e) {\n    var _this = this;\n\n    clearTimeout(this.showTimer);\n    clearTimeout(this.hideTimer);\n    this.tooltipEventArgs = {\n      type: e ? e.type : null,\n      cancel: false,\n      target: target,\n      event: e ? e : null,\n      element: this.tooltipEle,\n      isInteracted: !isNullOrUndefined(e)\n    }; // eslint-disable-next-line\n\n    var observeCallback = function observeCallback(beforeRenderArgs) {\n      _this.beforeRenderCallback(beforeRenderArgs, target, e, showAnimation);\n    };\n\n    this.trigger('beforeRender', this.tooltipEventArgs, observeCallback.bind(this));\n  };\n\n  Tooltip.prototype.beforeRenderCallback = function (beforeRenderArgs, target, e, showAnimation) {\n    var isBlazorTooltipRendered = false;\n\n    if (beforeRenderArgs.cancel) {\n      this.isHidden = true;\n      this.clear();\n    } else {\n      this.isHidden = false;\n\n      if (isNullOrUndefined(this.tooltipEle)) {\n        if (this.isServerRender()) {\n          this.contentTargetValue = target;\n          this.contentEvent = e;\n          this.contentAnimation = showAnimation; // eslint-disable-next-line\n\n          var args = {\n            'enableTooltip': 'true'\n          };\n          /* eslint-disable */\n\n          this.interopAdaptor.invokeMethodAsync('OnTooltipServerCall', args);\n          /* eslint-enable */\n\n          isBlazorTooltipRendered = true;\n        } else {\n          this.ctrlId = this.element.getAttribute('id') ? getUniqueID(this.element.getAttribute('id')) : getUniqueID('tooltip');\n          this.tooltipEle = this.createElement('div', {\n            className: TOOLTIP_WRAP + ' ' + POPUP_ROOT + ' ' + POPUP_LIB,\n            attrs: {\n              role: 'tooltip',\n              'aria-hidden': 'false',\n              'id': this.ctrlId + '_content'\n            },\n            styles: 'width:' + formatUnit(this.width) + ';height:' + formatUnit(this.height) + ';position:absolute;'\n          });\n          this.beforeRenderBlazor(target, this);\n        }\n\n        if (!isBlazorTooltipRendered) {\n          this.afterRenderBlazor(target, e, showAnimation, this);\n        }\n      } else {\n        if (this.isServerRender()) {\n          addClass([this.tooltipEle], POPUP_OPEN);\n          document.body.appendChild(this.tooltipEle);\n          this.renderCloseIcon();\n          this.renderPopup(target);\n        }\n\n        if (target) {\n          this.adjustArrow(target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n          this.addDescribedBy(target, this.ctrlId + '_content');\n          this.renderContent(target);\n          PopupAnimation.stop(this.tooltipEle);\n          this.reposition(target);\n          this.afterRenderBlazor(target, e, showAnimation, this);\n        }\n      }\n    }\n  };\n\n  Tooltip.prototype.contentUpdated = function (args) {\n    if (isNullOrUndefined(this.tooltipEle)) {\n      if (this.isServerRender()) {\n        this.ctrlId = this.element.id;\n        this.tooltipEle = document.querySelector('#' + this.ctrlId + '_content');\n\n        if (this.tooltipEle) {\n          this.tooltipEle.setAttribute('style', 'width:' + formatUnit(this.width) + ';height:' + formatUnit(this.height) + ';position:absolute;');\n          this.beforeRenderBlazor(this.contentTargetValue, this);\n          this.afterRenderBlazor(this.contentTargetValue, this.contentEvent, this.contentAnimation, this);\n          this.contentTargetValue = this.contentEvent = this.contentAnimation = null;\n        }\n      }\n    }\n  };\n\n  Tooltip.prototype.beforeRenderBlazor = function (target, ctrlObj) {\n    if (target) {\n      if (Browser.isDevice) {\n        addClass([ctrlObj.tooltipEle], DEVICE);\n      }\n\n      if (ctrlObj.width !== 'auto') {\n        ctrlObj.tooltipEle.style.maxWidth = formatUnit(ctrlObj.width);\n      }\n\n      if (!this.isServerRender()) {\n        ctrlObj.tooltipEle.appendChild(ctrlObj.createElement('div', {\n          className: CONTENT\n        }));\n      }\n\n      document.body.appendChild(ctrlObj.tooltipEle);\n      removeClass([ctrlObj.tooltipEle], HIDE_POPUP);\n      ctrlObj.addDescribedBy(target, ctrlObj.ctrlId + '_content');\n      ctrlObj.renderContent(target);\n      addClass([ctrlObj.tooltipEle], POPUP_OPEN);\n\n      if (ctrlObj.showTipPointer) {\n        ctrlObj.renderArrow();\n      }\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\n  Tooltip.prototype.afterRenderBlazor = 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,\n        cancel: false,\n        target: target,\n        event: e ? e : null,\n        element: ctrlObj.tooltipEle,\n        isInteracted: !isNullOrUndefined(e)\n      };\n\n      if (ctrlObj.needTemplateReposition() && !ctrlObj.mouseTrail) {\n        ctrlObj.tooltipEle.style.display = 'none';\n      } // eslint-disable-next-line\n\n\n      var observeCallback = function observeCallback(observedArgs) {\n        ctrlObj.beforeOpenCallback(observedArgs, target, showAnimation, e);\n      };\n\n      ctrlObj.trigger('beforeOpen', ctrlObj.tooltipEventArgs, observeCallback.bind(ctrlObj));\n    }\n  };\n\n  Tooltip.prototype.beforeOpenCallback = function (observedArgs, target, showAnimation, e) {\n    var _this = this;\n\n    if (observedArgs.cancel) {\n      this.isHidden = true;\n      this.clear();\n      this.restoreElement(target);\n    } else {\n      // eslint-disable-next-line\n      var openAnimation_1 = {\n        name: showAnimation.effect,\n        duration: showAnimation.duration,\n        delay: showAnimation.delay,\n        timingFunction: 'easeOut'\n      };\n\n      if (showAnimation.effect === 'None') {\n        openAnimation_1 = undefined;\n      }\n\n      if (this.openDelay > 0) {\n        // eslint-disable-next-line\n        var show = function show() {\n          if (_this.mouseTrail) {\n            EventHandler.add(target, 'mousemove touchstart mouseenter', _this.onMouseMove, _this);\n          }\n\n          if (_this.popupObj) {\n            _this.popupObj.show(openAnimation_1, target);\n          }\n        };\n\n        this.showTimer = setTimeout(show, this.openDelay);\n      } else {\n        if (this.popupObj) {\n          this.popupObj.show(openAnimation_1, target);\n        }\n      }\n    }\n\n    if (e) {\n      this.wireMouseEvents(e, target);\n    }\n  };\n\n  Tooltip.prototype.needTemplateReposition = function () {\n    // eslint-disable-next-line\n    var tooltip = this;\n    return !isNullOrUndefined(tooltip.viewContainerRef) && typeof tooltip.viewContainerRef !== 'string' || this.isServerRender() && this.isBlazorTemplate;\n  };\n\n  Tooltip.prototype.checkCollision = function (target, x, y) {\n    var elePos = {\n      left: x,\n      top: y,\n      position: this.position,\n      horizontal: this.tooltipPositionX,\n      vertical: this.tooltipPositionY\n    };\n    var affectedPos = isCollide(this.tooltipEle, this.checkCollideTarget(), x, y);\n\n    if (affectedPos.length > 0) {\n      elePos.horizontal = affectedPos.indexOf('left') >= 0 ? 'Right' : affectedPos.indexOf('right') >= 0 ? 'Left' : this.tooltipPositionX;\n      elePos.vertical = affectedPos.indexOf('top') >= 0 ? 'Bottom' : affectedPos.indexOf('bottom') >= 0 ? 'Top' : this.tooltipPositionY;\n    }\n\n    return elePos;\n  };\n\n  Tooltip.prototype.collisionFlipFit = function (target, x, y) {\n    var elePos = this.checkCollision(target, x, y);\n    var newpos = elePos.position;\n\n    if (this.tooltipPositionY !== elePos.vertical) {\n      newpos = this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0 ? elePos.vertical + this.tooltipPositionX : this.tooltipPositionX + elePos.vertical;\n    }\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\n      if (newpos.indexOf('Right') === 0) {\n        elePos.vertical = newpos === 'RightTop' || newpos === 'RightCenter' ? 'Top' : 'Bottom';\n        newpos = elePos.vertical + 'Right';\n      }\n\n      elePos.horizontal = this.tooltipPositionX;\n    }\n\n    this.tooltipEventArgs = {\n      type: null,\n      cancel: false,\n      target: target,\n      event: null,\n      element: this.tooltipEle,\n      collidedPosition: newpos\n    };\n    this.trigger('beforeCollision', this.tooltipEventArgs);\n\n    if (elePos.position !== newpos) {\n      var pos = calculatePosition(target, elePos.horizontal, elePos.vertical);\n      this.adjustArrow(target, newpos, elePos.horizontal, elePos.vertical);\n      var offsetPos = this.calculateTooltipOffset(newpos);\n      offsetPos.top -= 'TopBottom'.indexOf(this.position.split(/(?=[A-Z])/)[0]) !== -1 && 'TopBottom'.indexOf(newpos.split(/(?=[A-Z])/)[0]) !== -1 ? 2 * this.offsetY : 0;\n      offsetPos.left -= 'RightLeft'.indexOf(this.position.split(/(?=[A-Z])/)[0]) !== -1 && 'RightLeft'.indexOf(newpos.split(/(?=[A-Z])/)[0]) !== -1 ? 2 * this.offsetX : 0;\n      elePos.position = newpos;\n      elePos.left = pos.left + offsetPos.left;\n      elePos.top = pos.top + offsetPos.top;\n    } else {\n      this.adjustArrow(target, newpos, elePos.horizontal, elePos.vertical);\n    }\n\n    var eleOffset = {\n      left: elePos.left,\n      top: elePos.top\n    };\n    var left = fit(this.tooltipEle, this.checkCollideTarget(), {\n      X: true,\n      Y: false\n    }, eleOffset).left;\n    this.tooltipEle.style.display = 'block';\n\n    if (this.showTipPointer && (newpos.indexOf('Bottom') === 0 || newpos.indexOf('Top') === 0)) {\n      var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n      var arrowleft = parseInt(arrowEle.style.left, 10) - (left - elePos.left);\n\n      if (arrowleft < 0) {\n        arrowleft = 0;\n      } else if (arrowleft + arrowEle.offsetWidth > this.tooltipEle.clientWidth) {\n        arrowleft = this.tooltipEle.clientWidth - arrowEle.offsetWidth;\n      }\n\n      arrowEle.style.left = arrowleft.toString() + 'px';\n    }\n\n    this.tooltipEle.style.display = '';\n    eleOffset.left = left;\n    return eleOffset;\n  };\n\n  Tooltip.prototype.checkCollideTarget = function () {\n    return !this.windowCollision && this.target ? this.element : null;\n  };\n\n  Tooltip.prototype.hideTooltip = function (hideAnimation, e, targetElement) {\n    var _this = this;\n\n    if (this.closeDelay > 0) {\n      clearTimeout(this.hideTimer);\n      clearTimeout(this.showTimer); // eslint-disable-next-line\n\n      var hide = function hide() {\n        if (_this.closeDelay && _this.tooltipEle && _this.isTooltipOpen) {\n          return;\n        }\n\n        _this.tooltipHide(hideAnimation, e, targetElement);\n      };\n\n      this.hideTimer = setTimeout(hide, this.closeDelay);\n    } else {\n      this.tooltipHide(hideAnimation, e, targetElement);\n    }\n  };\n\n  Tooltip.prototype.tooltipHide = function (hideAnimation, e, targetElement) {\n    var _this = this;\n\n    var target;\n\n    if (e) {\n      target = this.target ? targetElement || e.target : this.element;\n    } else {\n      target = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n    }\n\n    this.tooltipEventArgs = {\n      type: e ? e.type : null,\n      cancel: false,\n      target: target,\n      event: e ? e : null,\n      element: this.tooltipEle,\n      isInteracted: !isNullOrUndefined(e)\n    }; // this line commented for close the tooltip popup element even the target element destroyed in a page.\n    //if (isNullOrUndefined(target)) { return; }\n\n    this.trigger('beforeClose', this.tooltipEventArgs, function (observedArgs) {\n      if (!observedArgs.cancel) {\n        if (_this.isServerRender()) {\n          _this.blazorHide(hideAnimation, target);\n        } else {\n          _this.popupHide(hideAnimation, target);\n        }\n      } else {\n        _this.isHidden = false;\n      }\n    });\n  };\n  /* istanbul ignore next */\n\n\n  Tooltip.prototype.blazorHide = function (hideAnimation, target) {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    var proxy = this; // eslint-disable-next-line\n\n    var hide = function hide() {\n      proxy.popupHide(hideAnimation, target);\n    };\n\n    if (this.popupObj) {\n      this.popupHide(hideAnimation, target);\n    } else {\n      setTimeout(hide, 200);\n    }\n  };\n\n  Tooltip.prototype.popupHide = function (hideAnimation, target) {\n    if (target) {\n      this.restoreElement(target);\n    }\n\n    this.isHidden = true; // eslint-disable-next-line\n\n    var closeAnimation = {\n      name: hideAnimation.effect,\n      duration: hideAnimation.duration,\n      delay: hideAnimation.delay,\n      timingFunction: 'easeIn'\n    };\n\n    if (hideAnimation.effect === 'None') {\n      closeAnimation = undefined;\n    }\n\n    if (this.popupObj) {\n      this.popupObj.hide(closeAnimation);\n    }\n  };\n\n  Tooltip.prototype.restoreElement = function (target) {\n    this.unwireMouseEvents(target);\n\n    if (!isNullOrUndefined(target.getAttribute('data-content'))) {\n      target.setAttribute('title', target.getAttribute('data-content'));\n      target.removeAttribute('data-content');\n    }\n\n    this.removeDescribedBy(target);\n  };\n\n  Tooltip.prototype.clear = function () {\n    if (this.tooltipEle) {\n      removeClass([this.tooltipEle], POPUP_CLOSE);\n      addClass([this.tooltipEle], POPUP_OPEN);\n    }\n\n    if (this.isHidden) {\n      if (this.popupObj) {\n        this.popupObj.destroy();\n      }\n\n      if (this.isServerRender() && this.tooltipEle) {\n        this.tooltipEle.style.display = 'none'; // eslint-disable-next-line\n\n        var args = {\n          'enableTooltip': 'false'\n        };\n        /* eslint-disable */\n\n        this.interopAdaptor.invokeMethodAsync('OnTooltipServerCall', args);\n        /* eslint-enable */\n\n        remove(this.tooltipEle);\n      } else if (this.tooltipEle) {\n        remove(this.tooltipEle);\n      }\n\n      this.tooltipEle = null;\n      this.popupObj = null;\n    }\n  };\n\n  Tooltip.prototype.tooltipHover = function (e) {\n    if (this.tooltipEle) {\n      this.isTooltipOpen = true;\n    }\n  };\n\n  Tooltip.prototype.tooltipMouseOut = function (e) {\n    this.isTooltipOpen = false;\n    this.hideTooltip(this.animation.close, e, this.findTarget());\n  };\n\n  Tooltip.prototype.onMouseOut = function (e) {\n    var enteredElement = e.relatedTarget; // don't close the tooltip only if it is tooltip content element\n\n    if (enteredElement && !this.mouseTrail) {\n      var checkForTooltipElement = closest(enteredElement, \".\" + TOOLTIP_WRAP + \".\" + POPUP_LIB + \".\" + POPUP_ROOT);\n\n      if (checkForTooltipElement) {\n        EventHandler.add(checkForTooltipElement, 'mouseleave', this.tooltipElementMouseOut, this);\n      } else {\n        this.hideTooltip(this.animation.close, e, this.findTarget());\n\n        if (this.closeDelay === 0) {\n          this.clear();\n        }\n      }\n    } else {\n      this.hideTooltip(this.animation.close, e, this.findTarget());\n      this.clear();\n    }\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\n  Tooltip.prototype.onStickyClose = function (e) {\n    this.close();\n  };\n\n  Tooltip.prototype.onMouseMove = function (event) {\n    var eventPageX = 0;\n    var eventPageY = 0;\n\n    if (event.type.indexOf('touch') > -1) {\n      event.preventDefault();\n      eventPageX = event.touches[0].pageX;\n      eventPageY = event.touches[0].pageY;\n    } else {\n      eventPageX = event.pageX;\n      eventPageY = event.pageY;\n    }\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 pos = this.calculateTooltipOffset(this.position);\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\n    if (this.tooltipPositionX !== elePos.horizontal || this.tooltipPositionY !== elePos.vertical) {\n      var newpos = this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0 ? 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);\n      elePos.left = eventPageX + colpos.left - this.offsetX;\n      elePos.top = eventPageY + colpos.top - this.offsetY;\n    }\n\n    this.tooltipEle.style.left = elePos.left + 'px';\n    this.tooltipEle.style.top = elePos.top + 'px';\n  };\n\n  Tooltip.prototype.keyDown = function (event) {\n    if (this.tooltipEle && event.keyCode === 27) {\n      this.close();\n    }\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\n  Tooltip.prototype.scrollHandler = function (e) {\n    if (this.tooltipEle) {\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\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\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\n\n  Tooltip.prototype.wireEvents = function (trigger) {\n    var triggerList = this.getTriggerList(trigger);\n\n    for (var _i = 0, triggerList_1 = triggerList; _i < triggerList_1.length; _i++) {\n      var opensOn = triggerList_1[_i];\n\n      if (opensOn === 'Custom') {\n        return;\n      }\n\n      if (opensOn === 'Focus') {\n        this.wireFocusEvents();\n      }\n\n      if (opensOn === 'Click') {\n        EventHandler.add(this.element, Browser.touchStartEvent, this.targetClick, this);\n      }\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        } else {\n          EventHandler.add(this.element, 'mouseover', this.targetHover, this);\n\n          if (this.isServerRender() && !this.isSticky) {\n            EventHandler.add(this.element, 'mouseleave', this.onMouseOut, this);\n          }\n        }\n      }\n    }\n\n    EventHandler.add(document, 'touchend', this.touchEnd, this);\n    EventHandler.add(document, 'scroll wheel', this.scrollHandler, this);\n    EventHandler.add(document, 'keydown', this.keyDown, this);\n  };\n\n  Tooltip.prototype.getTriggerList = function (trigger) {\n    if (trigger === 'Auto') {\n      trigger = Browser.isDevice ? 'Hover' : 'Hover Focus';\n    }\n\n    return trigger.split(' ');\n  };\n\n  Tooltip.prototype.wireFocusEvents = function () {\n    if (!isNullOrUndefined(this.target)) {\n      var targetList = [].slice.call(this.element.querySelectorAll(this.target));\n\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    } else {\n      EventHandler.add(this.element, 'focus', this.targetHover, this);\n    }\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\n        if (e.type === 'mouseover') {\n          if (!this.isServerRender()) {\n            EventHandler.add(target, 'mouseleave', this.onMouseOut, this);\n          }\n        }\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\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\n\n  Tooltip.prototype.unwireEvents = function (trigger) {\n    var triggerList = this.getTriggerList(trigger);\n\n    for (var _i = 0, triggerList_2 = triggerList; _i < triggerList_2.length; _i++) {\n      var opensOn = triggerList_2[_i];\n\n      if (opensOn === 'Custom') {\n        return;\n      }\n\n      if (opensOn === 'Focus') {\n        this.unwireFocusEvents();\n      }\n\n      if (opensOn === 'Click') {\n        EventHandler.remove(this.element, Browser.touchStartEvent, this.targetClick);\n      }\n\n      if (opensOn === 'Hover') {\n        if (Browser.isDevice) {\n          if (this.touchModule) {\n            this.touchModule.destroy();\n          }\n\n          EventHandler.remove(this.element, Browser.touchEndEvent, this.touchEndHandler);\n        } else {\n          EventHandler.remove(this.element, 'mouseover', this.targetHover);\n\n          if (this.isServerRender() && !this.isSticky) {\n            EventHandler.remove(this.element, 'mouseleave', this.onMouseOut);\n          }\n        }\n      }\n    }\n\n    EventHandler.remove(document, 'touchend', this.touchEnd);\n    EventHandler.remove(document, 'scroll wheel', this.scrollHandler);\n    EventHandler.remove(document, 'keydown', this.keyDown);\n  };\n\n  Tooltip.prototype.unwireFocusEvents = function () {\n    if (!isNullOrUndefined(this.target)) {\n      var targetList = [].slice.call(this.element.querySelectorAll(this.target));\n\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    } else {\n      EventHandler.remove(this.element, 'focus', this.targetHover);\n    }\n  };\n\n  Tooltip.prototype.unwireMouseEvents = function (target) {\n    if (!this.isSticky) {\n      var triggerList = this.getTriggerList(this.opensOn);\n\n      for (var _i = 0, triggerList_3 = triggerList; _i < triggerList_3.length; _i++) {\n        var opensOn = triggerList_3[_i];\n\n        if (opensOn === 'Focus') {\n          EventHandler.remove(target, 'blur', this.onMouseOut);\n        }\n\n        if (opensOn === 'Hover' && !Browser.isDevice) {\n          if (!this.isServerRender()) {\n            EventHandler.remove(target, 'mouseleave', this.onMouseOut);\n          }\n        }\n      }\n\n      if (this.closeDelay) {\n        EventHandler.remove(target, 'mouseenter', this.tooltipHover);\n        EventHandler.remove(target, 'mouseleave', this.tooltipMouseOut);\n      }\n    }\n\n    if (this.mouseTrail) {\n      EventHandler.remove(target, 'mousemove touchstart mouseenter', this.onMouseMove);\n    }\n  };\n\n  Tooltip.prototype.findTarget = function () {\n    var target = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\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\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\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\n\n  Tooltip.prototype.onPropertyChanged = function (newProp, oldProp) {\n    var targetElement = this.findTarget();\n\n    for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n      var prop = _a[_i];\n\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\n          break;\n\n        case 'height':\n          if (this.tooltipEle && targetElement) {\n            this.tooltipEle.style.height = formatUnit(newProp.height);\n            this.reposition(targetElement);\n          }\n\n          break;\n\n        case 'content':\n          if (this.tooltipEle) {\n            if (this.isServerRender()) {\n              this.isBlazorTooltip = true;\n            }\n\n            this.renderContent();\n          } else if (this.isServerRender()) {\n            // eslint-disable-next-line\n            var args = {\n              'content': newProp.content\n            };\n            /* eslint-disable */\n\n            this.interopAdaptor.invokeMethodAsync('OnTooltipServerCall', args);\n            /* eslint-enable */\n          }\n\n          break;\n\n        case 'opensOn':\n          this.unwireEvents(oldProp.opensOn);\n          this.wireEvents(newProp.opensOn);\n          break;\n\n        case 'position':\n          this.formatPosition();\n\n          if (this.tooltipEle && targetElement) {\n            var arrowInnerELe = this.tooltipEle.querySelector('.' + ARROW_TIP_INNER);\n            arrowInnerELe.style.top = arrowInnerELe.style.left = null;\n            this.reposition(targetElement);\n          }\n\n          break;\n\n        case 'tipPointerPosition':\n          if (this.tooltipEle && targetElement) {\n            this.reposition(targetElement);\n          }\n\n          break;\n\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\n          break;\n\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\n          break;\n\n        case 'cssClass':\n          if (this.tooltipEle) {\n            if (oldProp.cssClass) {\n              removeClass([this.tooltipEle], oldProp.cssClass.split(' '));\n            }\n\n            if (newProp.cssClass) {\n              addClass([this.tooltipEle], newProp.cssClass.split(' '));\n            }\n          }\n\n          break;\n\n        case 'enableRtl':\n          if (this.tooltipEle) {\n            if (this.enableRtl) {\n              addClass([this.tooltipEle], RTL);\n            } else {\n              removeClass([this.tooltipEle], RTL);\n            }\n          }\n\n          break;\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\n\n  Tooltip.prototype.open = function (element, animation) {\n    if (isNullOrUndefined(animation)) {\n      animation = this.animation.open;\n    }\n\n    if (isNullOrUndefined(element)) {\n      element = this.element;\n    }\n\n    if (element.style.display === 'none') {\n      return;\n    }\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\n\n  Tooltip.prototype.close = function (animation) {\n    if (!animation) {\n      animation = this.animation.close;\n    }\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\n\n  Tooltip.prototype.refresh = function (target) {\n    if (this.tooltipEle) {\n      this.renderContent(target);\n    }\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\n\n  Tooltip.prototype.destroy = function () {\n    if (!this.isServerRender()) {\n      _super.prototype.destroy.call(this);\n\n      if (this.tooltipEle) {\n        remove(this.tooltipEle);\n      }\n    }\n\n    if (this.isServerRender() && this.tooltipEle) {\n      var placeholder = document.querySelector('#' + this.ctrlId + '_content_placeholder');\n\n      if (placeholder) {\n        placeholder.appendChild(this.tooltipEle);\n      }\n    }\n\n    if (this.popupObj) {\n      this.popupObj.destroy();\n    }\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  };\n\n  __decorate([Property('auto')], Tooltip.prototype, \"width\", void 0);\n\n  __decorate([Property('auto')], Tooltip.prototype, \"height\", void 0);\n\n  __decorate([Property()], Tooltip.prototype, \"content\", void 0);\n\n  __decorate([Property()], Tooltip.prototype, \"target\", void 0);\n\n  __decorate([Property('TopCenter')], Tooltip.prototype, \"position\", void 0);\n\n  __decorate([Property(0)], Tooltip.prototype, \"offsetX\", void 0);\n\n  __decorate([Property(0)], Tooltip.prototype, \"offsetY\", void 0);\n\n  __decorate([Property(true)], Tooltip.prototype, \"showTipPointer\", void 0);\n\n  __decorate([Property(true)], Tooltip.prototype, \"enableHtmlParse\", void 0);\n\n  __decorate([Property(false)], Tooltip.prototype, \"windowCollision\", void 0);\n\n  __decorate([Property('Auto')], Tooltip.prototype, \"tipPointerPosition\", void 0);\n\n  __decorate([Property('Auto')], Tooltip.prototype, \"opensOn\", void 0);\n\n  __decorate([Property(false)], Tooltip.prototype, \"mouseTrail\", void 0);\n\n  __decorate([Property(false)], Tooltip.prototype, \"isSticky\", void 0);\n\n  __decorate([Complex({}, Animation)], Tooltip.prototype, \"animation\", void 0);\n\n  __decorate([Property(0)], Tooltip.prototype, \"openDelay\", void 0);\n\n  __decorate([Property(0)], Tooltip.prototype, \"closeDelay\", void 0);\n\n  __decorate([Property()], Tooltip.prototype, \"cssClass\", void 0);\n\n  __decorate([Property(false)], Tooltip.prototype, \"enableHtmlSanitizer\", void 0);\n\n  __decorate([Event()], Tooltip.prototype, \"beforeRender\", void 0);\n\n  __decorate([Event()], Tooltip.prototype, \"beforeOpen\", void 0);\n\n  __decorate([Event()], Tooltip.prototype, \"afterOpen\", void 0);\n\n  __decorate([Event()], Tooltip.prototype, \"beforeClose\", void 0);\n\n  __decorate([Event()], Tooltip.prototype, \"afterClose\", void 0);\n\n  __decorate([Event()], Tooltip.prototype, \"beforeCollision\", void 0);\n\n  __decorate([Event()], Tooltip.prototype, \"created\", void 0);\n\n  __decorate([Event()], Tooltip.prototype, \"destroyed\", void 0);\n\n  Tooltip = __decorate([NotifyPropertyChanges], Tooltip);\n  return Tooltip;\n}(Component);\n\nexport { Tooltip };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n/**\n * React Component Base\n */\n\n\nimport * as React from 'react';\nimport { extend, isNullOrUndefined, setValue, getValue, isObject } from '@syncfusion/ej2-base';\nvar defaulthtmlkeys = ['alt', 'className', 'disabled', 'form', 'id', 'readOnly', 'style', 'tabIndex', 'title', 'type', 'name', 'onClick', 'onFocus', 'onBlur'];\nvar delayUpdate = ['accordion', 'tab', 'splitter'];\nvar reactUid = 0;\nvar isColEName = new RegExp('\\]'); // tslint:disable\n\nvar ComponentBase =\n/** @class */\nfunction (_super) {\n  __extends(ComponentBase, _super);\n\n  function ComponentBase() {\n    var _this = _super !== null && _super.apply(this, arguments) || this;\n\n    _this.attrKeys = [];\n    _this.cachedTimeOut = 0;\n    _this.isAppendCalled = false;\n    _this.initRenderCalled = false;\n    _this.isReactForeceUpdate = false;\n    _this.isReact = true;\n    return _this;\n  } // Lifecycle methods are changed by React team and so we can deprecate this method and use\n  // Reference link:https://reactjs.org/docs/react-component.html#unsafe_componentWillMount\n  // tslint:disable-next-line:no-any\n\n\n  ComponentBase.prototype.componentDidMount = function () {\n    this.refreshChild(true);\n    this.canDelayUpdate = delayUpdate.indexOf(this.getModuleName()) !== -1; // Used timeout to resolve template binding\n    // Reference link: https://github.com/facebook/react/issues/10309#issuecomment-318433235\n    // tslint:disable-next-line:no-any\n\n    this.renderReactComponent();\n\n    if (this.portals && this.portals.length) {\n      this.renderReactTemplates();\n    }\n  };\n\n  ComponentBase.prototype.renderReactComponent = function () {\n    var ele = this.reactElement;\n\n    if (ele) {\n      this.isAppendCalled = true;\n      this.appendTo(ele);\n    }\n  }; // Lifecycle methods are changed by React team and so we can deprecate this method and use\n  // Reference link:https://reactjs.org/docs/react-component.html#unsafe_componentwillreceiveprops\n  // tslint:disable-next-line:no-any\n\n  /**\n   * @private\n   */\n\n\n  ComponentBase.prototype.shouldComponentUpdate = function (nextProps) {\n    if (!this.initRenderCalled) {\n      this.updateProperties(nextProps, true);\n      return true;\n    }\n\n    if (!this.isAppendCalled) {\n      clearTimeout(this.cachedTimeOut);\n      this.isAppendCalled = true;\n      this.appendTo(this.reactElement);\n    }\n\n    this.updateProperties(nextProps);\n    return true;\n  };\n  /**\n   * @private\n   */\n\n\n  ComponentBase.prototype.updateProperties = function (nextProps, silent) {\n    var _this = this;\n\n    var dProps = extend({}, nextProps);\n    var keys = Object.keys(nextProps);\n\n    for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n      var propkey = keys_1[_i];\n      var isClassName = propkey === 'className';\n\n      if (propkey === 'children') {\n        continue;\n      }\n\n      if (!isClassName && !isNullOrUndefined(this.htmlattributes[propkey]) && this.htmlattributes[propkey] !== dProps[propkey]) {\n        this.htmlattributes[propkey] = dProps[propkey];\n      }\n\n      if (this.compareValues(this.props[propkey], nextProps[propkey])) {\n        delete dProps[propkey];\n      } else if (this.attrKeys.indexOf(propkey) !== -1) {\n        if (isClassName) {\n          this.element.classList.remove(this.props[propkey]);\n          this.element.classList.add(dProps[propkey]);\n        } else if (propkey !== 'disabled') {\n          delete dProps[propkey];\n        }\n      }\n    }\n\n    if (dProps['children']) {\n      delete dProps['children'];\n    } // tslint:disable-next-line:no-any\n\n\n    if (this.initRenderCalled && (this.canDelayUpdate || this.props.delayUpdate)) {\n      setTimeout(function () {\n        _this.refreshProperties(dProps, nextProps, silent);\n      });\n    } else {\n      this.refreshProperties(dProps, nextProps, silent);\n    }\n  };\n\n  ComponentBase.prototype.refreshProperties = function (dProps, nextProps, silent) {\n    if (Object.keys(dProps).length) {\n      if (!silent) {\n        // tslint:disable-next-line:no-any\n        this.processComplexTemplate(dProps, this);\n      }\n\n      this.setProperties(dProps, silent);\n    }\n\n    this.refreshChild(silent, nextProps);\n  };\n\n  ComponentBase.prototype.processComplexTemplate = function (curObject, context) {\n    var compTemplate = context.complexTemplate;\n\n    if (compTemplate) {\n      for (var prop in compTemplate) {\n        var PropVal = compTemplate[prop];\n\n        if (curObject[prop]) {\n          setValue(PropVal, getValue(prop, curObject), curObject);\n        }\n      }\n    }\n  };\n\n  ComponentBase.prototype.getDefaultAttributes = function () {\n    var _this = this;\n\n    this.isReact = true;\n    var propKeys = Object.keys(this.props);\n\n    if (!this.htmlattributes) {\n      this.htmlattributes = {};\n    }\n\n    this.attrKeys = defaulthtmlkeys.concat(this.controlAttributes || []);\n\n    for (var _i = 0, propKeys_1 = propKeys; _i < propKeys_1.length; _i++) {\n      var prop = propKeys_1[_i];\n\n      if (prop.indexOf('data-') !== -1 || prop.indexOf('aria-') !== -1 || this.attrKeys.indexOf(prop) !== -1) {\n        if (this.htmlattributes[prop] !== this.props[prop]) {\n          this.htmlattributes[prop] = this.props[prop];\n        }\n      }\n    }\n\n    if (!this.htmlattributes.ref) {\n      /* tslint:disable:no-any */\n      this.htmlattributes.ref = function (ele) {\n        _this.reactElement = ele;\n      };\n\n      var keycompoentns = ['autocomplete', 'combobox', 'dropdownlist', 'dropdowntree', 'multiselect', 'listbox', 'colorpicker', 'numerictextbox', 'textbox', 'uploader', 'maskedtextbox', 'slider', 'datepicker', 'datetimepicker', 'daterangepicker', 'timepicker', 'checkbox', 'switch', 'radio'];\n\n      if (keycompoentns.indexOf(this.getModuleName()) !== -1) {\n        this.htmlattributes.key = '' + ComponentBase.reactUid;\n        ComponentBase.reactUid++;\n      }\n    }\n\n    return this.htmlattributes;\n  };\n  /* tslint:disable:no-any */\n\n\n  ComponentBase.prototype.trigger = function (eventName, eventProp, successHandler) {\n    var _this = this;\n\n    if (this.isDestroyed !== true && this.modelObserver) {\n      if (isColEName.test(eventName)) {\n        var handler = getValue(eventName, this);\n\n        if (handler) {\n          handler.call(this, eventProp);\n\n          if (successHandler) {\n            successHandler.call(this, eventProp);\n          }\n        } else if (successHandler) {\n          successHandler.call(this, eventProp);\n        }\n      }\n\n      if (eventName === 'change' || eventName === 'input') {\n        if (this.props.onChange && eventProp.event) {\n          this.props.onChange.call(undefined, {\n            syntheticEvent: eventProp.event,\n            nativeEvent: {\n              text: eventProp.value\n            },\n            value: eventProp.value,\n            target: this\n          });\n        }\n      }\n\n      var prevDetection = this.isProtectedOnChange;\n      this.isProtectedOnChange = false;\n\n      if (eventName === 'created') {\n        setTimeout(function () {\n          if (!_this.isDestroyed) {\n            _this.modelObserver.notify(eventName, eventProp, successHandler);\n          }\n        });\n      } else {\n        this.modelObserver.notify(eventName, eventProp, successHandler);\n      }\n\n      this.isProtectedOnChange = prevDetection;\n    }\n  };\n\n  ComponentBase.prototype.compareValues = function (value1, value2) {\n    var typeVal = typeof value1;\n    var typeVal2 = typeof value2;\n\n    if (typeVal === typeVal2) {\n      if (value1 === value2) {\n        return true;\n      }\n\n      if ((!isNullOrUndefined(value1) && value1.constructor) !== (!isNullOrUndefined(value2) && value2.constructor)) {\n        return false;\n      }\n\n      if (value1 instanceof Date || value1 instanceof RegExp || value1 instanceof String || value1 instanceof Number) {\n        return value1.toString() === value2.toString();\n      }\n\n      if (isObject(value1) || Array.isArray(value1)) {\n        var tempVal = value1;\n        var tempVal2 = value2;\n\n        if (isObject(tempVal)) {\n          tempVal = [value1];\n          tempVal2 = [value2];\n        }\n\n        return this.compareObjects(tempVal, tempVal2).status;\n      }\n    }\n\n    return false;\n  };\n\n  ComponentBase.prototype.compareObjects = function (oldProps, newProps, propName) {\n    var status = true;\n    var lenSimilarity = oldProps.length === newProps.length;\n    var diffArray = [];\n\n    if (lenSimilarity) {\n      for (var i = 0, len = newProps.length; i < len; i++) {\n        var curObj = {};\n        var oldProp = oldProps[i];\n        var newProp = newProps[i];\n        var keys = Object.keys(newProp);\n\n        if (keys.length !== 0) {\n          for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n            var key = keys_2[_i];\n            var oldValue = oldProp[key];\n            var newValue = newProp[key];\n\n            if (!oldProp.hasOwnProperty(key) || !this.compareValues(newValue, oldValue)) {\n              if (!propName) {\n                return {\n                  status: false\n                };\n              }\n\n              status = false;\n              curObj[key] = newValue;\n            }\n          }\n        } else {\n          if (!propName) {\n            return {\n              status: false\n            };\n          }\n\n          status = false;\n        }\n\n        if (Object.keys(curObj).length) {\n          diffArray.push({\n            index: i,\n            value: curObj,\n            key: propName\n          });\n        }\n      }\n    } else {\n      status = false;\n    }\n\n    return {\n      status: status,\n      changedProperties: diffArray\n    };\n  };\n\n  ComponentBase.prototype.refreshChild = function (silent, props) {\n    if (this.checkInjectedModules) {\n      var prevModule = this.getInjectedModules() || [];\n      var curModule = this.getInjectedServices() || [];\n\n      for (var _i = 0, curModule_1 = curModule; _i < curModule_1.length; _i++) {\n        var mod = curModule_1[_i];\n\n        if (prevModule.indexOf(mod) === -1) {\n          prevModule.push(mod);\n        }\n      }\n\n      this.injectedModules = prevModule;\n    }\n\n    if (this.directivekeys) {\n      var changedProps = [];\n      var directiveValue = this.validateChildren({}, this.directivekeys, props || this.props);\n\n      if (directiveValue && Object.keys(directiveValue).length) {\n        if (!silent && this.skipRefresh) {\n          for (var _a = 0, _b = this.skipRefresh; _a < _b.length; _a++) {\n            var fields = _b[_a];\n            delete directiveValue[fields];\n          }\n        }\n\n        if (this.prevProperties) {\n          var dKeys = Object.keys(this.prevProperties);\n\n          for (var i = 0; i < dKeys.length; i++) {\n            var key = dKeys[i];\n\n            if (!directiveValue.hasOwnProperty(key)) {\n              continue;\n            }\n\n            var compareOutput = this.compareObjects(this.prevProperties[key], directiveValue[key], key);\n\n            if (compareOutput.status) {\n              delete directiveValue[key];\n            } else {\n              if (compareOutput.changedProperties.length) {\n                changedProps = changedProps.concat(compareOutput.changedProperties);\n              }\n\n              var obj = {};\n              obj[key] = directiveValue[key];\n              this.prevProperties = extend(this.prevProperties, obj);\n            }\n          }\n        } else {\n          this.prevProperties = extend({}, directiveValue, {}, true);\n        }\n\n        if (changedProps.length) {\n          for (var _c = 0, changedProps_1 = changedProps; _c < changedProps_1.length; _c++) {\n            var changes = changedProps_1[_c];\n            var propInstance = getValue(changes.key + '.' + changes.index, this);\n\n            if (propInstance && propInstance.setProperties) {\n              propInstance.setProperties(changes.value);\n            } else {\n              extend(propInstance, changes.value);\n            }\n          }\n        } else {\n          this.setProperties(directiveValue, silent);\n        }\n      }\n    }\n  };\n\n  ComponentBase.prototype.componentWillUnmount = function () {\n    clearTimeout(this.cachedTimeOut); // tslint:disable-next-line:no-any\n\n    if (this.initRenderCalled && this.isAppendCalled && this.element && this.getModuleName() !== \"dropdowntree\" ? document.body.contains(this.element) : true && !this.isDestroyed) {\n      this.destroy();\n    }\n  }; // tslint:disable:no-any \n\n\n  ComponentBase.prototype.renderReactTemplates = function (callback) {\n    this.isReactForeceUpdate = true;\n\n    if (callback) {\n      this.forceUpdate(callback);\n    } else {\n      this.forceUpdate();\n    }\n\n    this.isReactForeceUpdate = false;\n  };\n\n  ; // tslint:disable:no-any \n\n  ComponentBase.prototype.clearTemplate = function (templateNames, index, callback) {\n    var _this = this;\n\n    var tempPortal = [];\n\n    if (templateNames && templateNames.length) {\n      Array.prototype.forEach.call(templateNames, function (propName) {\n        var indexCount = 0;\n        var propIndexCount = 0;\n\n        _this.portals.forEach(function (portal) {\n          if (portal.propName === propName) {\n            tempPortal.push(propIndexCount);\n            propIndexCount++;\n          }\n        });\n\n        if (index && _this.portals[tempPortal[index[indexCount]]].propName == propName) {\n          _this.portals.splice(index, 1);\n\n          indexCount++;\n        } else {\n          for (var i = 0; i < _this.portals.length; i++) {\n            if (_this.portals[i].propName == propName) {\n              _this.portals.splice(i, 1);\n\n              i--;\n            }\n          }\n        }\n      });\n    } else {\n      this.portals = [];\n    }\n\n    this.renderReactTemplates(callback);\n  };\n\n  ;\n  /* tslint:disable:no-any */\n\n  ComponentBase.prototype.validateChildren = function (childCache, mapper, props) {\n    var flag = false;\n    var childs = React.Children.toArray(props.children);\n\n    for (var _i = 0, childs_1 = childs; _i < childs_1.length; _i++) {\n      var child = childs_1[_i];\n      var ifield = this.getChildType(child);\n      var key = mapper[ifield];\n\n      if (ifield && mapper) {\n        // tslint:disable\n        var childProps = this.getChildProps(React.Children.toArray(child.props.children), key);\n\n        if (childProps.length) {\n          flag = true; // tslint:disable\n\n          childCache[child.type.propertyName || ifield] = childProps;\n        }\n      }\n    }\n\n    if (flag) {\n      return childCache;\n    }\n\n    return null;\n  }; // tslint:disable:no-any\n\n\n  ComponentBase.prototype.getChildType = function (child) {\n    if (child.type && child.type.isDirective) {\n      return child.type.moduleName || '';\n    }\n\n    return '';\n  };\n\n  ComponentBase.prototype.getChildProps = function (subChild, matcher) {\n    var ret = [];\n\n    for (var _i = 0, subChild_1 = subChild; _i < subChild_1.length; _i++) {\n      var child = subChild_1[_i];\n      var accessProp = false;\n      var key = void 0;\n\n      if (typeof matcher === 'string') {\n        accessProp = true;\n        key = matcher;\n      } else {\n        key = Object.keys(matcher)[0];\n      }\n\n      var prop = child.props; // tslint:disable-next-line:no-any\n\n      var field = this.getChildType(child);\n\n      if (field === key) {\n        if (accessProp || !prop.children) {\n          // tslint:disable\n          var cacheVal = extend({}, prop, {}, true); // tslint:disable\n\n          this.processComplexTemplate(cacheVal, child.type);\n          ret.push(cacheVal);\n        } else {\n          var cachedValue = this.validateChildren(extend({}, prop), matcher[key], prop) || prop;\n\n          if (cachedValue['children']) {\n            delete cachedValue['children'];\n          } // tslint:disable\n\n\n          this.processComplexTemplate(cachedValue, child.type);\n          ret.push(cachedValue);\n        }\n      }\n    }\n\n    return ret;\n  }; // tslint:disable:no-any\n\n\n  ComponentBase.prototype.getInjectedServices = function () {\n    var childs = React.Children.toArray(this.props.children);\n\n    for (var _i = 0, childs_2 = childs; _i < childs_2.length; _i++) {\n      var child = childs_2[_i];\n      /* tslint:disable:no-any */\n\n      if (child.type.isService) {\n        return child.props.services;\n      }\n    }\n\n    return [];\n  };\n  /**\n   * @private\n   */\n\n\n  ComponentBase.reactUid = 1;\n  return ComponentBase;\n}(React.Component);\n\nexport { ComponentBase };\n/* tslint:enable:no-any */","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nimport * as React from 'react';\n/**\n * Directory base\n */\n\nvar ComplexBase =\n/** @class */\nfunction (_super) {\n  __extends(ComplexBase, _super);\n\n  function ComplexBase() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n\n  ComplexBase.prototype.render = function () {\n    return null;\n  };\n\n  ComplexBase.isDirective = true;\n  return ComplexBase;\n}(React.PureComponent);\n\nexport { ComplexBase };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n/**\n * Dependency injection\n */\n\n\nimport * as React from 'react';\n\nvar Inject =\n/** @class */\nfunction (_super) {\n  __extends(Inject, _super);\n\n  function Inject() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  } // tslint:disable-next-line:no-any\n\n\n  Inject.prototype.render = function () {\n    return null;\n  };\n\n  Inject.isService = true;\n  return Inject;\n}(React.PureComponent);\n\nexport { Inject };","/**\n * Template compiler for react\n */\nimport { setTemplateEngine, getTemplateEngine, detach, extend } from '@syncfusion/ej2-base';\nimport * as ReactDOM from 'react-dom';\nimport * as React from 'react'; // tslint:disable:no-any\n\nvar stringCompiler = getTemplateEngine();\nexport function compile(templateElement, helper) {\n  if (typeof templateElement === 'string') {\n    return stringCompiler(templateElement, helper);\n  } else {\n    return function (data, component, prop, element) {\n      var actTemplate = templateElement;\n      var actData = data;\n\n      if (typeof actTemplate === 'object') {\n        actTemplate = templateElement.template;\n        actData = extend({}, data, templateElement.data || {});\n      }\n\n      var cEle;\n\n      if (element) {\n        cEle = element;\n      } else {\n        cEle = document.createElement('div');\n      }\n\n      if (component && component.isLegacyTemplate) {\n        ReactDOM.render(actTemplate(actData), cEle);\n\n        if (!element) {\n          detach(cEle);\n        }\n      } else {\n        var rele = React.createElement(actTemplate, actData);\n        var portal = ReactDOM.createPortal(rele, cEle);\n        portal.propName = prop;\n\n        if (!component.portals) {\n          component.portals = [portal];\n        } else {\n          component.portals.push(portal);\n        }\n      }\n\n      if (!element) {\n        return [cEle];\n      }\n    };\n  }\n}\nsetTemplateEngine({\n  compile: compile\n});","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nimport * as React from 'react';\nimport { Grid } from '@syncfusion/ej2-grids';\nimport { ComponentBase, applyMixins } from '@syncfusion/ej2-react-base';\n/**\n * `GridComponent` represents the react Grid.\n * ```tsx\n * <GridComponent dataSource={data} allowPaging={true} allowSorting={true}/>\n * ```\n */\n\nvar GridComponent =\n/** @class */\nfunction (_super) {\n  __extends(GridComponent, _super);\n\n  function GridComponent(props) {\n    var _this = _super.call(this, props) || this;\n\n    _this.initRenderCalled = false;\n    _this.checkInjectedModules = true;\n    _this.directivekeys = {\n      'columns': 'column',\n      'aggregates': {\n        'aggregate': {\n          'aggregateColumns': 'aggregateColumn'\n        }\n      }\n    };\n    _this.immediateRender = false;\n    _this.portals = [];\n    return _this;\n  }\n\n  GridComponent.prototype.render = function () {\n    if ((this.element && !this.initRenderCalled || this.refreshing) && !this.isReactForeceUpdate) {\n      _super.prototype.render.call(this);\n\n      this.initRenderCalled = true;\n    } else {\n      return React.createElement('div', this.getDefaultAttributes(), [].concat(this.props.children, this.portals));\n    }\n  };\n\n  return GridComponent;\n}(Grid);\n\nexport { GridComponent };\napplyMixins(GridComponent, [ComponentBase, React.Component]);","// tslint:disable-next-line:no-any\nexport function applyMixins(derivedClass, baseClass) {\n  // tslint:disable:typedef\n  baseClass.forEach(function (baseClass) {\n    Object.getOwnPropertyNames(baseClass.prototype).forEach(function (name) {\n      if (name !== 'isMounted' && name !== 'replaceState') {\n        derivedClass.prototype[name] = baseClass.prototype[name];\n      }\n    });\n  });\n}","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nimport { ComplexBase } from '@syncfusion/ej2-react-base';\n/**\n * `ColumnDirective` represent a column of the react Grid.\n * It must be contained in a Grid component(`GridComponent`).\n * ```tsx\n * <GridComponent dataSource={data} allowPaging={true} allowSorting={true}>\n * <ColumnsDirective>\n * <ColumnDirective field='ID' width='100'></ColumnDirective>\n * <ColumnDirective field='name' headerText='Name' width='100'></ColumnDirective>\n * <ColumnsDirective>\n * </GridComponent>\n * ```\n */\n\nvar ColumnDirective =\n/** @class */\nfunction (_super) {\n  __extends(ColumnDirective, _super);\n\n  function ColumnDirective() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n\n  ColumnDirective.moduleName = 'column';\n  ColumnDirective.complexTemplate = {\n    'filterItemTemplate': 'filter.itemTemplate'\n  };\n  return ColumnDirective;\n}(ComplexBase);\n\nexport { ColumnDirective };\n\nvar ColumnsDirective =\n/** @class */\nfunction (_super) {\n  __extends(ColumnsDirective, _super);\n\n  function ColumnsDirective() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n\n  ColumnsDirective.propertyName = 'columns';\n  ColumnsDirective.moduleName = 'columns';\n  return ColumnsDirective;\n}(ComplexBase);\n\nexport { ColumnsDirective };","import { isNullOrUndefined, isBlazor } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { createElement, classList, append } from '@syncfusion/ej2-base';\n/**\n * `NumericContainer` module handles rendering and refreshing numeric container.\n */\n\nvar NumericContainer =\n/** @class */\nfunction () {\n  /**\n   * Constructor for numericContainer module\n   * @hidden\n   */\n  function NumericContainer(pagerModule) {\n    this.pagerModule = pagerModule;\n  }\n  /**\n   * The function is used to render numericContainer\n   * @hidden\n   */\n\n\n  NumericContainer.prototype.render = function () {\n    this.pagerElement = this.pagerModule.element;\n    this.renderNumericContainer();\n    this.refreshNumericLinks();\n    this.wireEvents();\n  };\n  /**\n   * Refreshes the numeric container of Pager.\n   */\n\n\n  NumericContainer.prototype.refresh = function () {\n    this.pagerModule.updateTotalPages();\n\n    if (this.links.length) {\n      this.updateLinksHtml();\n    }\n\n    this.updateStyles();\n  };\n  /**\n   * The function is used to refresh refreshNumericLinks\n   * @hidden\n   */\n\n\n  NumericContainer.prototype.refreshNumericLinks = function () {\n    var link;\n    var pagerObj = this.pagerModule;\n    var div = pagerObj.element.querySelector('.e-numericcontainer');\n    var frag = document.createDocumentFragment();\n    div.innerHTML = '';\n\n    for (var i = 1; i <= pagerObj.pageCount; i++) {\n      link = createElement('a', {\n        className: 'e-link e-numericitem e-spacing e-pager-default',\n        attrs: {\n          role: 'link',\n          tabindex: '-1',\n          'aria-label': 'Goto Page ' + i,\n          href: 'javascript:void(0);',\n          name: 'Goto page' + i\n        }\n      });\n\n      if (pagerObj.currentPage === i) {\n        classList(link, ['e-currentitem', 'e-active'], ['e-pager-default']);\n      }\n\n      frag.appendChild(link);\n    }\n\n    div.appendChild(frag);\n    this.links = [].slice.call(div.childNodes);\n  };\n  /**\n   * Binding events to the element while component creation\n   * @hidden\n   */\n\n\n  NumericContainer.prototype.wireEvents = function () {\n    EventHandler.add(this.pagerElement, 'click', this.clickHandler, this);\n  };\n  /**\n   * Unbinding events from the element while component destroy\n   * @hidden\n   */\n\n\n  NumericContainer.prototype.unwireEvents = function () {\n    EventHandler.remove(this.pagerModule.element, 'click', this.clickHandler);\n  };\n  /**\n   * To destroy the PagerMessage\n   * @method destroy\n   * @return {void}\n   * @hidden\n   */\n\n\n  NumericContainer.prototype.destroy = function () {\n    this.unwireEvents();\n  };\n\n  NumericContainer.prototype.renderNumericContainer = function () {\n    this.element = createElement('div', {\n      className: 'e-pagercontainer',\n      attrs: {\n        'role': 'navigation'\n      }\n    });\n    this.renderFirstNPrev(this.element);\n    this.renderPrevPagerSet(this.element);\n    this.element.appendChild(createElement('div', {\n      className: 'e-numericcontainer'\n    }));\n    this.renderNextPagerSet(this.element);\n    this.renderNextNLast(this.element);\n    this.pagerModule.element.appendChild(this.element);\n  };\n\n  NumericContainer.prototype.renderFirstNPrev = function (pagerContainer) {\n    this.first = createElement('div', {\n      className: 'e-first e-icons e-icon-first',\n      attrs: {\n        title: isBlazor() ? this.pagerModule.getLocalizedLabel('FirstPageTooltip') : this.pagerModule.getLocalizedLabel('firstPageTooltip'),\n        'aria-label': isBlazor() ? this.pagerModule.getLocalizedLabel('FirstPageTooltip') : this.pagerModule.getLocalizedLabel('firstPageTooltip'),\n        tabindex: '-1'\n      }\n    });\n    this.prev = createElement('div', {\n      className: 'e-prev e-icons e-icon-prev',\n      attrs: {\n        title: isBlazor() ? this.pagerModule.getLocalizedLabel('PreviousPageTooltip') : this.pagerModule.getLocalizedLabel('previousPageTooltip'),\n        'aria-label': isBlazor() ? this.pagerModule.getLocalizedLabel('PreviousPageTooltip') : this.pagerModule.getLocalizedLabel('previousPageTooltip'),\n        tabindex: '-1'\n      }\n    });\n    append([this.first, this.prev], pagerContainer);\n  };\n\n  NumericContainer.prototype.renderPrevPagerSet = function (pagerContainer) {\n    var prevPager = createElement('div');\n    this.PP = createElement('a', {\n      className: 'e-link e-pp e-spacing',\n      innerHTML: '...',\n      attrs: {\n        title: isBlazor() ? this.pagerModule.getLocalizedLabel('PreviousPagerTooltip') : this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n        role: 'link',\n        'aria-label': isBlazor() ? this.pagerModule.getLocalizedLabel('PreviousPagerTooltip') : this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n        tabindex: '-1',\n        name: isBlazor() ? this.pagerModule.getLocalizedLabel('PreviousPagerTooltip') : this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n        href: 'javascript:void(0);'\n      }\n    });\n    prevPager.appendChild(this.PP);\n    pagerContainer.appendChild(prevPager);\n  };\n\n  NumericContainer.prototype.renderNextPagerSet = function (pagerContainer) {\n    var nextPager = createElement('div');\n    this.NP = createElement('a', {\n      className: 'e-link e-np e-spacing',\n      innerHTML: '...',\n      attrs: {\n        title: isBlazor() ? this.pagerModule.getLocalizedLabel('NextPagerTooltip') : this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n        role: 'link',\n        'aria-label': isBlazor() ? this.pagerModule.getLocalizedLabel('NextPagerTooltip') : this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n        tabindex: '-1',\n        name: isBlazor() ? this.pagerModule.getLocalizedLabel('NextPagerTooltip') : this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n        href: 'javascript:void(0);'\n      }\n    });\n    nextPager.appendChild(this.NP);\n    pagerContainer.appendChild(nextPager);\n  };\n\n  NumericContainer.prototype.renderNextNLast = function (pagerContainer) {\n    this.next = createElement('div', {\n      className: 'e-next e-icons e-icon-next',\n      attrs: {\n        title: isBlazor() ? this.pagerModule.getLocalizedLabel('NextPageTooltip') : this.pagerModule.getLocalizedLabel('nextPageTooltip'),\n        'aria-label': isBlazor() ? this.pagerModule.getLocalizedLabel('NextPageTooltip') : this.pagerModule.getLocalizedLabel('nextPageTooltip'),\n        tabindex: '-1'\n      }\n    });\n    this.last = createElement('div', {\n      className: 'e-last e-icons e-icon-last',\n      attrs: {\n        title: isBlazor() ? this.pagerModule.getLocalizedLabel('LastPageTooltip') : this.pagerModule.getLocalizedLabel('lastPageTooltip'),\n        'aria-label': isBlazor() ? this.pagerModule.getLocalizedLabel('LastPageTooltip') : this.pagerModule.getLocalizedLabel('lastPageTooltip'),\n        tabindex: '-1'\n      }\n    });\n    append([this.next, this.last], pagerContainer);\n  };\n\n  NumericContainer.prototype.clickHandler = function (e) {\n    var pagerObj = this.pagerModule;\n    var target = e.target;\n    pagerObj.previousPageNo = pagerObj.currentPage;\n\n    if (!target.classList.contains('e-disable') && !isNullOrUndefined(target.getAttribute('index'))) {\n      pagerObj.currentPage = parseInt(target.getAttribute('index'), 10);\n      pagerObj.dataBind();\n    }\n\n    return false;\n  };\n\n  NumericContainer.prototype.updateLinksHtml = function () {\n    var pagerObj = this.pagerModule;\n    var currentPageSet;\n    var pageNo;\n    pagerObj.currentPage = pagerObj.totalPages === 1 ? 1 : pagerObj.currentPage;\n\n    if (pagerObj.currentPage > pagerObj.totalPages && pagerObj.totalPages) {\n      pagerObj.currentPage = pagerObj.totalPages;\n    }\n\n    currentPageSet = parseInt((pagerObj.currentPage / pagerObj.pageCount).toString(), 10);\n\n    if (pagerObj.currentPage % pagerObj.pageCount === 0 && currentPageSet > 0) {\n      currentPageSet = currentPageSet - 1;\n    }\n\n    for (var i = 0; i < pagerObj.pageCount; i++) {\n      pageNo = currentPageSet * pagerObj.pageCount + 1 + i;\n\n      if (pageNo <= pagerObj.totalPages) {\n        this.links[i].style.display = '';\n        this.links[i].setAttribute('index', pageNo.toString());\n        this.links[i].innerHTML = !pagerObj.customText ? pageNo.toString() : pagerObj.customText + pageNo;\n\n        if (pagerObj.currentPage !== pageNo) {\n          this.links[i].classList.add('e-pager-default');\n        } else {\n          this.links[i].classList.remove('e-pager-default');\n        }\n      } else {\n        this.links[i].innerHTML = !pagerObj.customText ? pageNo.toString() : pagerObj.customText + pageNo;\n        this.links[i].style.display = 'none';\n      }\n\n      classList(this.links[i], [], ['e-currentitem', 'e-active']);\n    }\n\n    this.first.setAttribute('index', '1');\n    this.last.setAttribute('index', pagerObj.totalPages.toString());\n    this.prev.setAttribute('index', (pagerObj.currentPage - 1).toString());\n    this.next.setAttribute('index', (pagerObj.currentPage + 1).toString());\n    this.pagerElement.querySelector('.e-mfirst').setAttribute('index', '1');\n    this.pagerElement.querySelector('.e-mlast').setAttribute('index', pagerObj.totalPages.toString());\n    this.pagerElement.querySelector('.e-mprev').setAttribute('index', (pagerObj.currentPage - 1).toString());\n    this.pagerElement.querySelector('.e-mnext').setAttribute('index', (pagerObj.currentPage + 1).toString());\n    this.PP.setAttribute('index', (parseInt(this.links[0].getAttribute('index'), 10) - pagerObj.pageCount).toString());\n    this.NP.setAttribute('index', (parseInt(this.links[this.links.length - 1].getAttribute('index'), 10) + 1).toString());\n  };\n\n  NumericContainer.prototype.updateStyles = function () {\n    this.updateFirstNPrevStyles();\n    this.updatePrevPagerSetStyles();\n    this.updateNextPagerSetStyles();\n    this.updateNextNLastStyles();\n\n    if (this.links.length) {\n      classList(this.links[(this.pagerModule.currentPage - 1) % this.pagerModule.pageCount], ['e-currentitem', 'e-active'], []);\n    }\n  };\n\n  NumericContainer.prototype.updateFirstNPrevStyles = function () {\n    var firstPage = ['e-firstpage', 'e-pager-default'];\n    var firstPageDisabled = ['e-firstpagedisabled', 'e-disable'];\n    var prevPage = ['e-prevpage', 'e-pager-default'];\n    var prevPageDisabled = ['e-prevpagedisabled', 'e-disable'];\n\n    if (this.pagerModule.totalPages > 0 && this.pagerModule.currentPage > 1) {\n      classList(this.prev, prevPage, prevPageDisabled);\n      classList(this.first, firstPage, firstPageDisabled);\n      classList(this.pagerElement.querySelector('.e-mfirst'), firstPage, firstPageDisabled);\n      classList(this.pagerElement.querySelector('.e-mprev'), prevPage, prevPageDisabled);\n    } else {\n      classList(this.prev, prevPageDisabled, prevPage);\n      classList(this.first, firstPageDisabled, firstPage);\n      classList(this.pagerElement.querySelector('.e-mprev'), prevPageDisabled, prevPage);\n      classList(this.pagerElement.querySelector('.e-mfirst'), firstPageDisabled, firstPage);\n    }\n  };\n\n  NumericContainer.prototype.updatePrevPagerSetStyles = function () {\n    if (this.pagerModule.currentPage > this.pagerModule.pageCount) {\n      classList(this.PP, ['e-numericitem', 'e-pager-default'], ['e-nextprevitemdisabled', 'e-disable']);\n    } else {\n      classList(this.PP, ['e-nextprevitemdisabled', 'e-disable'], ['e-numericitem', 'e-pager-default']);\n    }\n  };\n\n  NumericContainer.prototype.updateNextPagerSetStyles = function () {\n    var pagerObj = this.pagerModule;\n    var firstPage = this.links[0].innerHTML.replace(pagerObj.customText, '');\n\n    if (!firstPage.length || !this.links.length || parseInt(firstPage, 10) + pagerObj.pageCount > pagerObj.totalPages) {\n      classList(this.NP, ['e-nextprevitemdisabled', 'e-disable'], ['e-numericitem', 'e-pager-default']);\n    } else {\n      classList(this.NP, ['e-numericitem', 'e-pager-default'], ['e-nextprevitemdisabled', 'e-disable']);\n    }\n  };\n\n  NumericContainer.prototype.updateNextNLastStyles = function () {\n    var lastPage = ['e-lastpage', 'e-pager-default'];\n    var lastPageDisabled = ['e-lastpagedisabled', 'e-disable'];\n    var nextPage = ['e-nextpage', 'e-pager-default'];\n    var nextPageDisabled = ['e-nextpagedisabled', 'e-disable'];\n    var pagerObj = this.pagerModule;\n\n    if (pagerObj.currentPage === pagerObj.totalPages || pagerObj.totalRecordsCount === 0) {\n      classList(this.last, lastPageDisabled, lastPage);\n      classList(this.next, nextPageDisabled, nextPage);\n      classList(this.pagerElement.querySelector('.e-mlast'), lastPageDisabled, lastPage);\n      classList(this.pagerElement.querySelector('.e-mnext'), nextPageDisabled, nextPage);\n    } else {\n      classList(this.last, lastPage, lastPageDisabled);\n      classList(this.next, nextPage, nextPageDisabled);\n      classList(this.pagerElement.querySelector('.e-mlast'), lastPage, lastPageDisabled);\n      classList(this.pagerElement.querySelector('.e-mnext'), nextPage, nextPageDisabled);\n    }\n  };\n\n  return NumericContainer;\n}();\n\nexport { NumericContainer };","import { createElement, append, isBlazor } from '@syncfusion/ej2-base';\n/**\n * `PagerMessage` module is used to display pager information.\n */\n\nvar PagerMessage =\n/** @class */\nfunction () {\n  /**\n   * Constructor for externalMessage module\n   * @hidden\n   */\n  function PagerMessage(pagerModule) {\n    this.pagerModule = pagerModule;\n  }\n  /**\n   * The function is used to render pager message\n   * @hidden\n   */\n\n\n  PagerMessage.prototype.render = function () {\n    var div = createElement('div', {\n      className: 'e-parentmsgbar',\n      attrs: {\n        'aria-label': 'Pager Information'\n      }\n    });\n    this.pageNoMsgElem = createElement('span', {\n      className: 'e-pagenomsg',\n      styles: 'textalign:right'\n    });\n    this.pageCountMsgElem = createElement('span', {\n      className: 'e-pagecountmsg',\n      styles: 'textalign:right'\n    });\n    append([this.pageNoMsgElem, this.pageCountMsgElem], div);\n    this.pagerModule.element.appendChild(div);\n    this.refresh();\n  };\n  /**\n   * Refreshes the pager information.\n   */\n\n\n  PagerMessage.prototype.refresh = function () {\n    var pagerObj = this.pagerModule;\n\n    if (isBlazor()) {\n      this.pageNoMsgElem.textContent = this.format(pagerObj.getLocalizedLabel('CurrentPageInfo'), [pagerObj.totalRecordsCount === 0 ? 0 : pagerObj.currentPage, pagerObj.totalPages || 0]) + ' ';\n      this.pageCountMsgElem.textContent = this.format(pagerObj.getLocalizedLabel('TotalItemsInfo'), [pagerObj.totalRecordsCount || 0]);\n    } else {\n      this.pageNoMsgElem.textContent = this.format(pagerObj.getLocalizedLabel('currentPageInfo'), [pagerObj.totalRecordsCount === 0 ? 0 : pagerObj.currentPage, pagerObj.totalPages || 0, pagerObj.totalRecordsCount || 0]) + ' ';\n      this.pageCountMsgElem.textContent = this.format(pagerObj.getLocalizedLabel(pagerObj.totalRecordsCount <= 1 ? 'totalItemInfo' : 'totalItemsInfo'), [pagerObj.totalRecordsCount || 0, pagerObj.totalRecordsCount ? pagerObj.pageSize * (pagerObj.currentPage - 1) + 1 : 0, pagerObj.pageSize * pagerObj.currentPage > pagerObj.totalRecordsCount ? pagerObj.totalRecordsCount : pagerObj.pageSize * pagerObj.currentPage]);\n    }\n\n    this.pageNoMsgElem.parentElement.setAttribute('aria-label', this.pageNoMsgElem.textContent + this.pageCountMsgElem.textContent);\n  };\n  /**\n   * Hides the Pager information.\n   */\n\n\n  PagerMessage.prototype.hideMessage = function () {\n    if (this.pageNoMsgElem) {\n      this.pageNoMsgElem.style.display = 'none';\n    }\n\n    if (this.pageCountMsgElem) {\n      this.pageCountMsgElem.style.display = 'none';\n    }\n  };\n  /**\n   * Shows the Pager information.\n   */\n\n\n  PagerMessage.prototype.showMessage = function () {\n    if (!this.pageNoMsgElem) {\n      this.render();\n    }\n\n    this.pageNoMsgElem.style.display = '';\n    this.pageCountMsgElem.style.display = '';\n  };\n  /**\n   * To destroy the PagerMessage\n   * @method destroy\n   * @return {void}\n   * @hidden\n   */\n\n\n  PagerMessage.prototype.destroy = function () {//destroy\n  };\n\n  PagerMessage.prototype.format = function (str, args) {\n    var regx;\n\n    for (var i = 0; i < args.length; i++) {\n      regx = new RegExp('\\\\{' + i + '\\\\}', 'gm');\n      str = str.replace(regx, args[i].toString());\n    }\n\n    return str;\n  };\n\n  return PagerMessage;\n}();\n\nexport { PagerMessage };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nvar __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nimport { Component, L10n, Browser, isBlazor } from '@syncfusion/ej2-base';\nimport { createElement, compile as templateCompiler } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Property, Event, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { NumericContainer } from './numeric-container';\nimport { PagerMessage } from './pager-message';\nimport { appendChildren } from '../grid/base/util';\n/**\n * Represents the `Pager` component.\n * ```html\n * <div id=\"pager\"/>\n * ```\n * ```typescript\n * <script>\n *   var pagerObj = new Pager({ totalRecordsCount: 50, pageSize:10 });\n *   pagerObj.appendTo(\"#pager\");\n * </script>\n * ```\n */\n\nvar Pager =\n/** @class */\nfunction (_super) {\n  __extends(Pager, _super);\n  /**\n   * Constructor for creating the component.\n   * @hidden\n   */\n\n\n  function Pager(options, element) {\n    var _this = _super.call(this, options, element) || this;\n    /** @hidden */\n\n\n    _this.hasParent = false;\n    _this.pageRefresh = 'pager-refresh';\n    return _this;\n  }\n  /**\n   * To provide the array of modules needed for component rendering\n   * @hidden\n   */\n\n\n  Pager.prototype.requiredModules = function () {\n    var modules = [];\n\n    if (this.enableExternalMessage) {\n      modules.push({\n        member: 'externalMessage',\n        args: [this]\n      });\n    }\n\n    if (this.checkpagesizes()) {\n      modules.push({\n        member: 'pagerdropdown',\n        args: [this]\n      });\n    }\n\n    return modules;\n  };\n  /**\n   * Initialize the event handler\n   * @hidden\n   */\n\n\n  Pager.prototype.preRender = function () {\n    //preRender\n    this.defaultConstants = {\n      currentPageInfo: '{0} of {1} pages',\n      totalItemsInfo: '({0} items)',\n      totalItemInfo: '({0} item)',\n      firstPageTooltip: 'Go to first page',\n      lastPageTooltip: 'Go to last page',\n      nextPageTooltip: 'Go to next page',\n      previousPageTooltip: 'Go to previous page',\n      nextPagerTooltip: 'Go to next pager',\n      previousPagerTooltip: 'Go to previous pager',\n      pagerDropDown: 'Items per page',\n      pagerAllDropDown: 'Items',\n      CurrentPageInfo: '{0} of {1} pages',\n      TotalItemsInfo: '({0} items)',\n      FirstPageTooltip: 'Go to first page',\n      LastPageTooltip: 'Go to last page',\n      NextPageTooltip: 'Go to next page',\n      PreviousPageTooltip: 'Go to previous page',\n      NextPagerTooltip: 'Go to next pager',\n      PreviousPagerTooltip: 'Go to previous pager',\n      PagerDropDown: 'Items per page',\n      PagerAllDropDown: 'Items',\n      All: 'All'\n    };\n    this.containerModule = new NumericContainer(this);\n    this.pagerMessageModule = new PagerMessage(this);\n  };\n  /**\n   * To Initialize the component rendering\n   */\n\n\n  Pager.prototype.render = function () {\n    if (this.template) {\n      if (this.isReactTemplate()) {\n        this.on(this.pageRefresh, this.pagerTemplate, this);\n        this.notify(this.pageRefresh, {});\n      } else {\n        this.pagerTemplate();\n      }\n    } else {\n      this.initLocalization();\n      this.updateRTL();\n      this.totalRecordsCount = this.totalRecordsCount || 0;\n      this.renderFirstPrevDivForDevice();\n      this.containerModule.render();\n\n      if (this.enablePagerMessage) {\n        this.pagerMessageModule.render();\n      }\n\n      this.renderNextLastDivForDevice();\n\n      if (this.checkpagesizes() && this.pagerdropdownModule) {\n        this.pagerdropdownModule.render();\n      }\n\n      this.addAriaLabel();\n\n      if (this.enableExternalMessage && this.externalMessageModule) {\n        this.externalMessageModule.render();\n      }\n\n      this.refresh();\n      this.trigger('created', {\n        'currentPage': this.currentPage,\n        'totalRecordsCount': this.totalRecordsCount\n      });\n    }\n  };\n  /**\n   * Get the properties to be maintained in the persisted state.\n   * @hidden\n   */\n\n\n  Pager.prototype.getPersistData = function () {\n    var keyEntity = ['currentPage', 'pageSize'];\n    return this.addOnPersist(keyEntity);\n  };\n  /**\n   * To destroy the Pager component.\n   * @method destroy\n   * @return {void}\n   */\n\n\n  Pager.prototype.destroy = function () {\n    if (this.isReactTemplate()) {\n      this.off(this.pageRefresh, this.pagerTemplate);\n\n      if (!this.hasParent) {\n        this.destroyTemplate(['template']);\n      }\n    }\n\n    _super.prototype.destroy.call(this);\n\n    this.containerModule.destroy();\n    this.pagerMessageModule.destroy();\n\n    if (!this.isReactTemplate()) {\n      this.element.innerHTML = '';\n    }\n  };\n  /**\n   * Destroys the given template reference.\n   * @param {string[]} propertyNames - Defines the collection of template name.\n   */\n  //tslint:disable-next-line:no-any\n\n\n  Pager.prototype.destroyTemplate = function (propertyNames, index) {\n    this.clearTemplate(propertyNames, index);\n  };\n  /**\n   * For internal use only - Get the module name.\n   * @private\n   */\n\n\n  Pager.prototype.getModuleName = function () {\n    return 'pager';\n  };\n  /**\n   * Called internally if any of the property value changed.\n   * @hidden\n   */\n\n\n  Pager.prototype.onPropertyChanged = function (newProp, oldProp) {\n    if (this.isDestroyed) {\n      return;\n    }\n\n    if (newProp.pageCount !== oldProp.pageCount) {\n      this.containerModule.refreshNumericLinks();\n      this.containerModule.refresh();\n    }\n\n    for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n      var prop = _a[_i];\n\n      switch (prop) {\n        case 'currentPage':\n          if (this.checkGoToPage(newProp.currentPage, oldProp.currentPage)) {\n            this.currentPageChanged(newProp, oldProp);\n          }\n\n          break;\n\n        case 'pageSize':\n        case 'totalRecordsCount':\n        case 'customText':\n          if (this.checkpagesizes() && this.pagerdropdownModule) {\n            if (oldProp.pageSize !== newProp.pageSize) {\n              this.currentPage = 1;\n            }\n\n            this.pagerdropdownModule.setDropDownValue('value', this.pageSize);\n          }\n\n          if (newProp.pageSize !== oldProp.pageSize) {\n            this.pageSize = newProp.pageSize;\n            this.currentPageChanged(newProp, oldProp);\n          } else {\n            this.refresh();\n          }\n\n          break;\n\n        case 'pageSizes':\n          if (this.checkpagesizes() && this.pagerdropdownModule) {\n            this.pagerdropdownModule.destroy();\n            this.pagerdropdownModule.render();\n          }\n\n          this.refresh();\n          break;\n\n        case 'template':\n          this.templateFn = this.compile(this.template);\n          this.refresh();\n          break;\n\n        case 'locale':\n          this.initLocalization();\n          this.refresh();\n          break;\n\n        case 'enableExternalMessage':\n          if (this.enableExternalMessage && this.externalMessageModule) {\n            this.externalMessageModule.render();\n          }\n\n          break;\n\n        case 'externalMessage':\n          if (this.externalMessageModule) {\n            this.externalMessageModule.refresh();\n          }\n\n          break;\n\n        case 'enableRtl':\n          this.updateRTL();\n          break;\n\n        case 'enablePagerMessage':\n          if (this.enablePagerMessage) {\n            this.pagerMessageModule.showMessage();\n          } else {\n            this.pagerMessageModule.hideMessage();\n          }\n\n          break;\n      }\n    }\n  };\n  /**\n   * Gets the localized label by locale keyword.\n   * @param  {string} key\n   * @return {string}\n   */\n\n\n  Pager.prototype.getLocalizedLabel = function (key) {\n    return this.localeObj.getConstant(key);\n  };\n  /**\n   * Navigate to target page by given number.\n   * @param  {number} pageNo - Defines page number.\n   * @return {void}\n   */\n\n\n  Pager.prototype.goToPage = function (pageNo) {\n    if (this.checkGoToPage(pageNo)) {\n      this.currentPage = pageNo;\n      this.dataBind();\n    }\n  };\n  /**\n   * @hidden\n   */\n\n\n  Pager.prototype.setPageSize = function (pageSize) {\n    this.pageSize = pageSize;\n    this.dataBind();\n  };\n\n  Pager.prototype.checkpagesizes = function () {\n    if (this.pageSizes === true || this.pageSizes.length) {\n      return true;\n    }\n\n    return false;\n  };\n\n  Pager.prototype.checkGoToPage = function (newPageNo, oldPageNo) {\n    if (newPageNo !== this.currentPage) {\n      this.previousPageNo = this.currentPage;\n    }\n\n    if (!isNullOrUndefined(oldPageNo)) {\n      this.previousPageNo = oldPageNo;\n    }\n\n    if (this.previousPageNo !== newPageNo && newPageNo >= 1 && newPageNo <= this.totalPages) {\n      return true;\n    }\n\n    return false;\n  };\n\n  Pager.prototype.currentPageChanged = function (newProp, oldProp) {\n    if (this.enableQueryString) {\n      this.updateQueryString(this.currentPage);\n    }\n\n    if (newProp.currentPage !== oldProp.currentPage || newProp.pageSize !== oldProp.pageSize) {\n      var args = {\n        currentPage: this.currentPage,\n        newProp: newProp,\n        oldProp: oldProp,\n        cancel: false\n      };\n      this.trigger('click', args);\n\n      if (!args.cancel) {\n        this.refresh();\n      }\n    }\n  };\n\n  Pager.prototype.pagerTemplate = function () {\n    if (this.isReactTemplate() && this.hasParent) {\n      return;\n    }\n\n    var result;\n    this.element.classList.add('e-pagertemplate');\n    this.compile(this.template);\n    var data = {\n      currentPage: this.currentPage,\n      pageSize: this.pageSize,\n      pageCount: this.pageCount,\n      totalRecordsCount: this.totalRecordsCount,\n      totalPages: this.totalPages\n    };\n    var tempId = this.element.parentElement.id + '_template';\n\n    if (this.isReactTemplate()) {\n      this.getPagerTemplate()(data, this, 'template', tempId, null, null, this.element);\n      this.renderReactTemplates();\n    } else {\n      result = isBlazor() ? this.getPagerTemplate()(data, this, 'template', tempId, this.isStringTemplate) : this.isVue ? this.getPagerTemplate()(data, this) : this.getPagerTemplate()(data);\n      appendChildren(this.element, result);\n    }\n  };\n  /** @hidden */\n\n\n  Pager.prototype.updateTotalPages = function () {\n    this.totalPages = this.totalRecordsCount % this.pageSize === 0 ? this.totalRecordsCount / this.pageSize : parseInt((this.totalRecordsCount / this.pageSize).toString(), 10) + 1;\n  };\n  /** @hidden */\n\n\n  Pager.prototype.getPagerTemplate = function () {\n    return this.templateFn;\n  };\n  /** @hidden */\n\n\n  Pager.prototype.compile = function (template) {\n    if (template) {\n      var e = void 0;\n\n      try {\n        if (document.querySelectorAll(template).length) {\n          this.templateFn = templateCompiler(document.querySelector(template).innerHTML.trim());\n        }\n      } catch (e) {\n        this.templateFn = templateCompiler(template);\n      }\n    }\n\n    return undefined;\n  };\n  /**\n   * Refreshes page count, pager information and external message.\n   * @return {void}\n   */\n\n\n  Pager.prototype.refresh = function () {\n    if (this.template) {\n      if (this.isReactTemplate()) {\n        this.updateTotalPages();\n        this.notify(this.pageRefresh, {});\n      } else {\n        this.element.innerHTML = '';\n        this.updateTotalPages();\n        this.pagerTemplate();\n      }\n    } else {\n      this.updateRTL();\n      this.containerModule.refresh();\n\n      if (this.enablePagerMessage) {\n        this.pagerMessageModule.refresh();\n      }\n\n      if (this.pagerdropdownModule) {\n        this.pagerdropdownModule.refresh();\n      }\n\n      if (this.enableExternalMessage && this.externalMessageModule) {\n        this.externalMessageModule.refresh();\n      }\n    }\n  };\n\n  Pager.prototype.updateRTL = function () {\n    if (this.enableRtl) {\n      this.element.classList.add('e-rtl');\n    } else {\n      this.element.classList.remove('e-rtl');\n    }\n  };\n\n  Pager.prototype.initLocalization = function () {\n    this.localeObj = new L10n(this.getModuleName(), this.defaultConstants, this.locale);\n  };\n\n  Pager.prototype.updateQueryString = function (value) {\n    var updatedUrl = this.getUpdatedURL(window.location.href, 'page', value.toString());\n    window.history.pushState({\n      path: updatedUrl\n    }, '', updatedUrl);\n  };\n\n  Pager.prototype.getUpdatedURL = function (uri, key, value) {\n    var regx = new RegExp('([?|&])' + key + '=.*?(&|#|$)', 'i');\n\n    if (uri.match(regx)) {\n      return uri.replace(regx, '$1' + key + '=' + value + '$2');\n    } else {\n      var hash = '';\n\n      if (uri.indexOf('#') !== -1) {\n        hash = uri.replace(/.*#/, '#');\n        uri = uri.replace(/#.*/, '');\n      }\n\n      return uri + (uri.indexOf('?') !== -1 ? '&' : '?') + key + '=' + value + hash;\n    }\n  };\n\n  Pager.prototype.renderFirstPrevDivForDevice = function () {\n    this.element.appendChild(createElement('div', {\n      className: 'e-mfirst e-icons e-icon-first',\n      attrs: {\n        title: isBlazor() ? this.getLocalizedLabel('FirstPageTooltip') : this.getLocalizedLabel('firstPageTooltip'),\n        tabindex: '-1'\n      }\n    }));\n    this.element.appendChild(createElement('div', {\n      className: 'e-mprev e-icons e-icon-prev',\n      attrs: {\n        title: isBlazor() ? this.getLocalizedLabel('PreviousPageTooltip') : this.getLocalizedLabel('previousPageTooltip'),\n        tabindex: '-1'\n      }\n    }));\n  };\n\n  Pager.prototype.renderNextLastDivForDevice = function () {\n    this.element.appendChild(createElement('div', {\n      className: 'e-mnext e-icons e-icon-next',\n      attrs: {\n        title: isBlazor() ? this.getLocalizedLabel('NextPageTooltip') : this.getLocalizedLabel('nextPageTooltip'),\n        tabindex: '-1'\n      }\n    }));\n    this.element.appendChild(createElement('div', {\n      className: 'e-mlast e-icons e-icon-last',\n      attrs: {\n        title: isBlazor() ? this.getLocalizedLabel('LastPageTooltip') : this.getLocalizedLabel('lastPageTooltip'),\n        tabindex: '-1'\n      }\n    }));\n  };\n\n  Pager.prototype.addAriaLabel = function () {\n    var classList = ['.e-mfirst', '.e-mprev', '.e-mnext', '.e-mlast'];\n\n    if (!Browser.isDevice) {\n      for (var i = 0; i < classList.length; i++) {\n        var element = this.element.querySelector(classList[i]);\n        element.setAttribute('aria-label', element.getAttribute('title'));\n      }\n    }\n  };\n\n  Pager.prototype.isReactTemplate = function () {\n    return this.isReact && this.template && typeof this.template !== 'string';\n  };\n\n  __decorate([Property(false)], Pager.prototype, \"enableQueryString\", void 0);\n\n  __decorate([Property(false)], Pager.prototype, \"enableExternalMessage\", void 0);\n\n  __decorate([Property(true)], Pager.prototype, \"enablePagerMessage\", void 0);\n\n  __decorate([Property(12)], Pager.prototype, \"pageSize\", void 0);\n\n  __decorate([Property(10)], Pager.prototype, \"pageCount\", void 0);\n\n  __decorate([Property(1)], Pager.prototype, \"currentPage\", void 0);\n\n  __decorate([Property()], Pager.prototype, \"totalRecordsCount\", void 0);\n\n  __decorate([Property()], Pager.prototype, \"externalMessage\", void 0);\n\n  __decorate([Property(false)], Pager.prototype, \"pageSizes\", void 0);\n\n  __decorate([Property()], Pager.prototype, \"template\", void 0);\n\n  __decorate([Property('')], Pager.prototype, \"customText\", void 0);\n\n  __decorate([Event()], Pager.prototype, \"click\", void 0);\n\n  __decorate([Event()], Pager.prototype, \"dropDownChanged\", void 0);\n\n  __decorate([Event()], Pager.prototype, \"created\", void 0);\n\n  Pager = __decorate([NotifyPropertyChanges], Pager);\n  return Pager;\n}(Component);\n\nexport { Pager };","/**\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 * @param {boolean} isBlazor - Specifies the platform is Blazor or not.\n * @returns {Element} Returns list item based on key code matches with list text content.\n */\n\nexport function incrementalSearch(keyCode, items, selectedIndex, ignoreCase, elementId, isBlazor) {\n  queryString += String.fromCharCode(keyCode);\n  setTimeout(function () {\n    queryString = '';\n  }, 1000);\n  var index;\n  queryString = ignoreCase ? queryString.toLowerCase() : queryString;\n\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\n    index = index + 1;\n    return matches[index];\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\n    do {\n      if (i === listItems.length) {\n        i = -1;\n      }\n\n      if (i === -1) {\n        index = 0;\n      } else {\n        index = i;\n      }\n\n      item = listItems[index];\n\n      if (isBlazor) {\n        text = ignoreCase ? item.textContent.trim().toLowerCase() : item.textContent.trim();\n      } else {\n        text = ignoreCase ? item.innerText.toLowerCase() : item.innerText;\n      }\n\n      if (text.substr(0, strLength) === queryString) {\n        matches.push(listItems[index]);\n      }\n\n      i++;\n    } while (i !== selectedIndex);\n\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 */\n\nexport function Search(inputVal, items, searchType, ignoreCase) {\n  var listItems = items;\n  ignoreCase = ignoreCase !== undefined && ignoreCase !== null ? ignoreCase : true;\n  var itemData = {\n    item: null,\n    index: null\n  };\n\n  if (inputVal && inputVal.length) {\n    var strLength = inputVal.length;\n    var queryStr = ignoreCase ? inputVal.toLocaleLowerCase() : inputVal;\n\n    for (var i = 0, itemsData = listItems; i < itemsData.length; i++) {\n      var item = itemsData[i];\n      var text = (ignoreCase ? item.textContent.toLocaleLowerCase() : item.textContent).replace(/^\\s+|\\s+$/g, '');\n\n      if (searchType === 'Equal' && text === queryStr || searchType === 'StartsWith' && text.substr(0, strLength) === queryStr) {\n        itemData.item = item;\n        itemData.index = i;\n        return {\n          item: item,\n          index: i\n        };\n      }\n    }\n\n    return itemData;\n  }\n\n  return itemData;\n}","/* eslint-disable no-inner-declarations */\nimport { extend, merge, isNullOrUndefined, getValue } 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\n\nexport var ListBase;\n\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  };\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\n  function createList(createElement, dataSource, // 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\n    if (type === 'string' || type === 'number') {\n      return createListFromArray(createElement, dataSource, isSingleLevel, options, componentInstance);\n    } else {\n      return createListFromJson(createElement, dataSource, options, ariaAttributes.level, isSingleLevel, componentInstance);\n    }\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\n  function createListFromArray(createElement, dataSource, // 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\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\n  function createListItemFromArray(createElement, dataSource, // 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\n    for (var i = 0; i < dataSource.length; i++) {\n      if (isNullOrUndefined(dataSource[i])) {\n        continue;\n      }\n\n      var li = void 0;\n\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\n      if (isSingleLevel) {\n        li = generateSingleLevelLI(createElement, dataSource[i], undefined, null, null, [], null, id, i, options);\n      } else {\n        li = generateLI(createElement, dataSource[i], undefined, null, null, options, componentInstance);\n      }\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\n      subChild.push(li);\n    }\n\n    return subChild;\n  }\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\n  function createListItemFromJson(createElement, dataSource, // eslint-disable-next-line\n  options, level, isSingleLevel, componentInstance) {\n    var curOpt = extend({}, defaultListBaseOptions, options);\n    cssClass = getModuleClass(curOpt.moduleName);\n    var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);\n    var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n    var id;\n    var checkboxElement = [];\n\n    if (level) {\n      ariaAttributes.level = level;\n    }\n\n    var child = [];\n    var li;\n    var anchorElement;\n\n    if (dataSource && dataSource.length && !isNullOrUndefined(typeofData(dataSource).item) && // 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\n    for (var i = 0; i < dataSource.length; i++) {\n      var fieldData = getFieldValues(dataSource[i], fields);\n\n      if (isNullOrUndefined(dataSource[i])) {\n        continue;\n      }\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\n      var curItem = dataSource[i];\n\n      if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n        fieldData = getFieldValues(dataSource[i], fields);\n      } // eslint-disable-next-line no-prototype-builtins\n\n\n      if (fieldData.hasOwnProperty(fields.id) && !isNullOrUndefined(fieldData[fields.id])) {\n        id = fieldData[fields.id];\n      }\n\n      var innerEle = [];\n\n      if (curOpt.showCheckBox) {\n        if (curOpt.itemNavigable && (fieldData[fields.url] || fieldData[fields.urlAttributes])) {\n          checkboxElement.push(createElement('input', {\n            className: cssClass.check,\n            attrs: {\n              type: 'checkbox'\n            }\n          }));\n        } else {\n          innerEle.push(createElement('input', {\n            className: cssClass.check,\n            attrs: {\n              type: 'checkbox'\n            }\n          }));\n        }\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', {\n            className: cssClass.icon + ' ' + fieldData[fields.iconCss]\n          }));\n        }\n\n        li = generateSingleLevelLI(createElement, curItem, fieldData, fields, curOpt.itemClass, innerEle, // eslint-disable-next-line no-prototype-builtins\n        curItem.hasOwnProperty('isHeader') && curItem.isHeader ? true : false, id, i, options);\n        anchorElement = li.querySelector('.' + cssClass.anchorWrap);\n\n        if (curOpt.itemNavigable && checkboxElement.length) {\n          prepend(checkboxElement, li.firstElementChild);\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        anchorElement = li.querySelector('.' + cssClass.anchorWrap); // eslint-disable-next-line no-prototype-builtins\n\n        if (fieldData.hasOwnProperty(fields.tooltip)) {\n          li.setAttribute('title', fieldData[fields.tooltip]);\n        } // eslint-disable-next-line no-prototype-builtins\n\n\n        if (fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n          setAttribute(li, fieldData[fields.htmlAttributes]);\n        } // eslint-disable-next-line no-prototype-builtins\n\n\n        if (fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled] === false) {\n          li.classList.add(cssClass.disabled);\n        } // eslint-disable-next-line no-prototype-builtins\n\n\n        if (fieldData.hasOwnProperty(fields.isVisible) && fieldData[fields.isVisible] === false) {\n          li.style.display = 'none';\n        } // eslint-disable-next-line no-prototype-builtins\n\n\n        if (fieldData.hasOwnProperty(fields.imageUrl) && !isNullOrUndefined(fieldData[fields.imageUrl]) && !curOpt.template) {\n          var attr = {\n            src: fieldData[fields.imageUrl]\n          };\n          merge(attr, fieldData[fields.imageAttributes]);\n          var imageElemnt = createElement('img', {\n            className: cssClass.image,\n            attrs: attr\n          });\n\n          if (anchorElement) {\n            anchorElement.insertAdjacentElement('afterbegin', imageElemnt);\n          } else {\n            prepend([imageElemnt], li.firstElementChild);\n          }\n        } // eslint-disable-next-line no-prototype-builtins\n\n\n        if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) && !isNullOrUndefined(fieldData[fields.iconCss]) && !curOpt.template) {\n          var iconElement = createElement('div', {\n            className: cssClass.icon + ' ' + fieldData[fields.iconCss]\n          });\n\n          if (anchorElement) {\n            anchorElement.insertAdjacentElement('afterbegin', iconElement);\n          } else {\n            prepend([iconElement], li.firstElementChild);\n          }\n        }\n\n        if (innerEle.length) {\n          prepend(innerEle, li.firstElementChild);\n        }\n\n        if (curOpt.itemNavigable && checkboxElement.length) {\n          prepend(checkboxElement, li.firstElementChild);\n        }\n\n        processSubChild(createElement, fieldData, fields, dataSource, curOpt, li, ariaAttributes.level);\n      }\n\n      if (anchorElement) {\n        addClass([li], [cssClass.navigable]);\n      }\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\n      checkboxElement = [];\n      child.push(li);\n    }\n\n    return child;\n  }\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\n  function createListFromJson(createElement, dataSource, // 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\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\n  function getSiblingLI(elementArray, element, isPrevious) {\n    cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n\n    if (!elementArray || !elementArray.length) {\n      return void 0;\n    }\n\n    var siblingLI;\n    var liIndex;\n    var liCollections = Array.prototype.slice.call(elementArray);\n\n    if (element) {\n      liIndex = indexOf(element, liCollections);\n    } else {\n      liIndex = isPrevious === true ? liCollections.length : -1;\n    }\n\n    siblingLI = liCollections[liIndex + (isPrevious === true ? -1 : 1)];\n\n    while (siblingLI && (!isVisible(siblingLI) || siblingLI.classList.contains(cssClass.disabled))) {\n      liIndex = liIndex + (isPrevious === true ? -1 : 1);\n      siblingLI = liCollections[liIndex];\n    }\n\n    return siblingLI;\n  }\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\n  function indexOf(item, elementArray) {\n    if (!elementArray || !item) {\n      return void 0;\n    } else {\n      var liCollections = elementArray;\n      liCollections = Array.prototype.slice.call(elementArray);\n      return liCollections.indexOf(item);\n    }\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\n  function groupDataSource(dataSource, fields, sortOrder) {\n    if (sortOrder === void 0) {\n      sortOrder = 'None';\n    }\n\n    var curFields = extend({}, ListBase.defaultMappedFields, fields);\n    var cusQuery = new Query().group(curFields.groupBy); // need to remove once sorting issues fixed in DataManager\n\n    cusQuery = addSorting(sortOrder, 'key', cusQuery);\n    var ds = getDataSource(dataSource, cusQuery);\n    dataSource = [];\n\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\n      if (newtext === 'id') {\n        newtext = 'text';\n        grpItem[newtext] = ds[j].key;\n      }\n\n      grpItem._id = 'group-list-item-' + (ds[j].key ? ds[j].key.toString().trim() : 'undefined');\n      grpItem.items = itemObj;\n      dataSource.push(grpItem);\n\n      for (var k = 0; k < itemObj.length; k++) {\n        dataSource.push(itemObj[k]);\n      }\n    }\n\n    return dataSource;\n  }\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\n  function addSorting(sortOrder, sortBy, query) {\n    if (query === void 0) {\n      query = new Query();\n    }\n\n    if (sortOrder === 'Ascending') {\n      query.sortBy(sortBy, 'ascending', true);\n    } else if (sortOrder === 'Descending') {\n      query.sortBy(sortBy, 'descending', true);\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\n    return query;\n  }\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\n  function getDataSource(dataSource, query) {\n    // eslint-disable-next-line\n    return new DataManager(dataSource).executeLocal(query);\n  }\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\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); // eslint-disable-next-line\n\n    var jsonAr = [];\n    curEle.classList.add('json-parent');\n    var childs = curEle.querySelectorAll('.json-parent>li');\n    curEle.classList.remove('json-parent');\n\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'); // eslint-disable-next-line\n\n      var json = {};\n      var childNodes = anchor ? anchor.childNodes : li.childNodes;\n      var keys = Object.keys(childNodes);\n\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\n      var attributes_1 = getAllAttributes(li);\n\n      if (attributes_1.id) {\n        json[fields.id] = attributes_1.id;\n        delete attributes_1.id;\n      } else {\n        json[fields.id] = generateId();\n      }\n\n      if (Object.keys(attributes_1).length) {\n        json[fields.htmlAttributes] = attributes_1;\n      }\n\n      if (anchor) {\n        attributes_1 = getAllAttributes(anchor);\n\n        if (Object.keys(attributes_1).length) {\n          json[fields.urlAttributes] = attributes_1;\n        }\n      }\n\n      if (ul) {\n        json[fields.child] = createJsonFromElement(ul, options);\n      }\n\n      jsonAr.push(json);\n    }\n\n    return jsonAr;\n  }\n\n  ListBase.createJsonFromElement = createJsonFromElement;\n\n  function typeofData(data) {\n    var match = {\n      typeof: null,\n      item: null\n    };\n\n    for (var i = 0; i < data.length; i++) {\n      if (!isNullOrUndefined(data[i])) {\n        return match = {\n          typeof: typeof data[i],\n          item: data[i]\n        };\n      }\n    }\n\n    return match;\n  }\n\n  function setAttribute(element, elementAttributes) {\n    var attr = {};\n    merge(attr, elementAttributes);\n\n    if (attr.class) {\n      addClass([element], attr.class.split(' '));\n      delete attr.class;\n    }\n\n    attributes(element, attr);\n  }\n\n  function getAllAttributes(element) {\n    var attributes = {};\n    var attr = element.attributes;\n\n    for (var index = 0; index < attr.length; index++) {\n      attributes[attr[index].nodeName] = attr[index].nodeValue;\n    }\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\n\n  function renderContentTemplate(createElement, template, dataSource, // eslint-disable-next-line\n  fields, options, componentInstance) {\n    cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n    var ulElement = createElement('ul', {\n      className: cssClass.ul,\n      attrs: {\n        role: 'presentation'\n      }\n    });\n    var curOpt = extend({}, defaultListBaseOptions, options);\n    var curFields = extend({}, ListBase.defaultMappedFields, fields); // eslint-disable-next-line\n\n    var compiledString = compile(template);\n    var liCollection = [];\n    var value;\n    var 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], curFields);\n      var curItem = dataSource[i];\n      var isHeader = curItem.isHeader;\n\n      if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n        value = curItem;\n      } else {\n        value = fieldData[curFields.value];\n      }\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\n      if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n        fieldData = getFieldValues(dataSource[i], curFields);\n\n        if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n          value = curItem;\n        } else {\n          value = fieldData[curFields.value];\n        }\n      }\n\n      var li = createElement('li', {\n        id: id + '-' + i,\n        className: isHeader ? cssClass.group : cssClass.li,\n        attrs: {\n          role: 'presentation'\n        }\n      });\n\n      if (isHeader) {\n        if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n          li.innerText = curItem;\n        } else {\n          li.innerText = fieldData[curFields.text];\n        }\n      } else {\n        var currentID = isHeader ? curOpt.groupTemplateID : curOpt.templateID;\n\n        if (isHeader) {\n          append(compiledString(curItem, componentInstance, 'headerTemplate', currentID, !!curOpt.isStringTemplate), li);\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\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\n      liCollection.push(li);\n    }\n\n    append(liCollection, ulElement);\n    return ulElement;\n  }\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\n  function renderGroupTemplate(groupTemplate, groupDataSource, fields, // eslint-disable-next-line\n  headerItems, options, componentInstance) {\n    // eslint-disable-next-line @typescript-eslint/ban-types\n    var compiledString = compile(groupTemplate);\n    var curFields = extend({}, ListBase.defaultMappedFields, fields);\n    var curOpt = extend({}, defaultListBaseOptions, options);\n    var category = curFields.groupBy;\n\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      append(compiledString(headerData, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate), header);\n    }\n\n    return headerItems;\n  }\n\n  ListBase.renderGroupTemplate = renderGroupTemplate;\n\n  function generateId() {\n    return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n  }\n\n  ListBase.generateId = generateId;\n\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]; //Create Sub child\n\n    if (subDS.length) {\n      hasChildren = true;\n      element.classList.add(cssClass.hasChild);\n\n      if (options.processSubChild) {\n        var subLi = createListFromJson(createElement, subDS, options, ++level);\n        element.appendChild(subLi);\n      }\n    } // Create expand and collapse node\n\n\n    if (!!options.expandCollapse && hasChildren && !options.template) {\n      element.firstElementChild.classList.add(cssClass.iconWrapper); // eslint-disable-next-line @typescript-eslint/ban-types\n\n      var expandElement = options.expandIconPosition === 'Left' ? prepend : append;\n      expandElement([createElement('div', {\n        className: 'e-icons ' + options.expandIconClass\n      })], element.querySelector('.' + cssClass.textContent));\n    }\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\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' ? fieldData[fields.text] : fieldData[fields.text] || '';\n      value = fieldData[fields.value];\n    }\n\n    var elementID;\n\n    if (!isNullOrUndefined(dataSource) && !isNullOrUndefined(fieldData[fields.id]) && fieldData[fields.id] !== '') {\n      elementID = id;\n    } else {\n      elementID = id + '-' + index;\n    }\n\n    var li = createElement('li', {\n      className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n      id: elementID,\n      attrs: ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ? {\n        role: grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole\n      } : {}\n    }); // eslint-disable-next-line no-prototype-builtins\n\n    if (dataSource && fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled].toString() === 'false') {\n      li.classList.add(cssClass.disabled);\n    }\n\n    if (grpLI) {\n      li.innerText = text;\n    } else {\n      li.setAttribute('data-value', isNullOrUndefined(value) ? 'null' : value);\n      li.setAttribute('role', 'option'); // eslint-disable-next-line no-prototype-builtins\n\n      if (dataSource && fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n        setAttribute(li, fieldData[fields.htmlAttributes]);\n      }\n\n      if (innerElements.length && !curOpt.itemNavigable) {\n        append(innerElements, li);\n      }\n\n      if (dataSource && (fieldData[fields.url] || fieldData[fields.urlAttributes] && fieldData[fields.urlAttributes].href)) {\n        li.appendChild(anchorTag(createElement, dataSource, fields, text, innerElements, curOpt.itemNavigable));\n      } else {\n        if (innerElements.length && curOpt.itemNavigable) {\n          append(innerElements, li);\n        }\n\n        li.appendChild(document.createTextNode(text));\n      }\n    }\n\n    return li;\n  }\n\n  function getModuleClass(moduleName) {\n    var moduleClass; // eslint-disable-next-line\n\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\n  function anchorTag(createElement, dataSource, fields, text, innerElements, isFullNavigation) {\n    var fieldData = getFieldValues(dataSource, fields);\n    var attr = {\n      href: fieldData[fields.url]\n    }; // eslint-disable-next-line no-prototype-builtins\n\n    if (fieldData.hasOwnProperty(fields.urlAttributes) && fieldData[fields.urlAttributes]) {\n      merge(attr, fieldData[fields.urlAttributes]);\n      attr.href = fieldData[fields.url] ? fieldData[fields.url] : fieldData[fields.urlAttributes].href;\n    }\n\n    var anchorTag;\n\n    if (!isFullNavigation) {\n      anchorTag = createElement('a', {\n        className: cssClass.text + ' ' + cssClass.url,\n        innerHTML: text\n      });\n    } else {\n      anchorTag = createElement('a', {\n        className: cssClass.text + ' ' + cssClass.url\n      });\n      var anchorWrapper = createElement('div', {\n        className: cssClass.anchorWrap\n      });\n\n      if (innerElements && innerElements.length) {\n        append(innerElements, anchorWrapper);\n      }\n\n      anchorWrapper.appendChild(document.createTextNode(text));\n      append([anchorWrapper], anchorTag);\n    }\n\n    setAttribute(anchorTag, attr);\n    return anchorTag;\n  } // tslint:disable-next-line\n\n  /* tslint:disable:align */\n\n\n  function generateLI(createElement, item, fieldData, // 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\n    if (typeof item !== 'string' && typeof item !== 'number') {\n      dataSource = item;\n      text = fieldData[fields.text] || ''; // tslint:disable-next-line\n\n      uID = isNullOrUndefined(fieldData['_id']) ? fieldData[fields.id] : fieldData['_id']; // eslint-disable-next-line no-prototype-builtins\n\n      grpLI = item.hasOwnProperty('isHeader') && item.isHeader ? true : false;\n    }\n\n    if (options && options.enableHtmlSanitizer) {\n      // eslint-disable-next-line no-self-assign\n      text = text;\n    }\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    });\n\n    if (!isNullOrUndefined(uID) === true) {\n      li.setAttribute('data-uid', uID);\n    } else {\n      li.setAttribute('data-uid', generateId());\n    }\n\n    var blazId = 'BlazId';\n\n    if (options && !!options.removeBlazorID && typeof item === 'object' // eslint-disable-next-line no-prototype-builtins\n    && item.hasOwnProperty(blazId)) {\n      delete item[blazId];\n    }\n\n    if (grpLI && options && options.groupTemplate) {\n      // eslint-disable-next-line @typescript-eslint/ban-types\n      var compiledString = compile(options.groupTemplate);\n      append(compiledString(item, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate), li);\n    } else if (!grpLI && options && options.template) {\n      // eslint-disable-next-line @typescript-eslint/ban-types\n      var compiledString = compile(options.template);\n      append(compiledString(item, componentInstance, 'template', curOpt.templateID, !!curOpt.isStringTemplate), li);\n    } else {\n      var innerDiv = createElement('div', {\n        className: cssClass.textContent,\n        attrs: ariaAttributes.wrapperRole !== '' ? {\n          role: ariaAttributes.wrapperRole\n        } : {}\n      });\n\n      if (dataSource && (fieldData[fields.url] || fieldData[fields.urlAttributes] && fieldData[fields.urlAttributes].href)) {\n        innerDiv.appendChild(anchorTag(createElement, dataSource, fields, text, null, curOpt.itemNavigable));\n      } else {\n        var element = createElement('span', {\n          className: cssClass.text,\n          attrs: ariaAttributes.itemText !== '' ? {\n            role: ariaAttributes.itemText\n          } : {}\n        });\n\n        if (options && options.enableHtmlSanitizer) {\n          element.innerText = text;\n        } else {\n          element.innerHTML = text;\n        }\n\n        innerDiv.appendChild(element);\n      }\n\n      li.appendChild(innerDiv);\n    }\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\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 !== '' ? {\n        role: ariaAttributes.listRole\n      } : {}\n    });\n    append(liElement, ulElement);\n    return ulElement;\n  }\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\n  function generateIcon(createElement, liElement, className, options) {\n    var curOpt = extend({}, defaultListBaseOptions, options);\n    cssClass = getModuleClass(curOpt.moduleName); // eslint-disable-next-line @typescript-eslint/ban-types\n\n    var expandElement = curOpt.expandIconPosition === 'Left' ? prepend : append;\n    expandElement([createElement('div', {\n      className: 'e-icons ' + curOpt.expandIconClass + ' ' + (isNullOrUndefined(className) ? '' : className)\n    })], liElement.querySelector('.' + cssClass.textContent));\n    return liElement;\n  }\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 */\n\n\nexport function getFieldValues(dataItem, fields) {\n  var fieldData = {};\n\n  if (isNullOrUndefined(dataItem) || typeof dataItem === 'string' || typeof dataItem === 'number' || !isNullOrUndefined(dataItem.isHeader)) {\n    return dataItem;\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) && typeof dataField === 'string' ? getValue(dataField, dataItem) : undefined;\n\n      if (!isNullOrUndefined(value)) {\n        fieldData[dataField] = value;\n      }\n    }\n  }\n\n  return fieldData;\n}","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nvar __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\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 { updateBlazorTemplate, resetBlazorTemplate, isBlazor, remove, select, selectAll } from '@syncfusion/ej2-base';\n\nvar FieldSettings =\n/** @class */\nfunction (_super) {\n  __extends(FieldSettings, _super);\n\n  function FieldSettings() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n\n  __decorate([Property()], FieldSettings.prototype, \"text\", void 0);\n\n  __decorate([Property()], FieldSettings.prototype, \"value\", void 0);\n\n  __decorate([Property()], FieldSettings.prototype, \"iconCss\", void 0);\n\n  __decorate([Property()], FieldSettings.prototype, \"groupBy\", void 0);\n\n  __decorate([Property()], FieldSettings.prototype, \"htmlAttributes\", void 0);\n\n  return FieldSettings;\n}(ChildProperty);\n\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 VALUETEMPLATE_PROPERTY = 'ValueTemplate';\nvar GROUPTEMPLATE_PROPERTY = 'GroupTemplate';\nvar HEADERTEMPLATE_PROPERTY = 'HeaderTemplate';\nvar FOOTERTEMPLATE_PROPERTY = 'FooterTemplate';\nvar NORECORDSTEMPLATE_PROPERTY = 'NoRecordsTemplate';\nvar ACTIONFAILURETEMPLATE_PROPERTY = 'ActionFailureTemplate';\n/**\n * DropDownBase component will generate the list items based on given data and act as base class to drop-down related components\n */\n\nvar DropDownBase =\n/** @class */\nfunction (_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\n\n  function DropDownBase(options, element) {\n    var _this = _super.call(this, options, element) || this;\n\n    _this.preventChange = false;\n    _this.isAngular = false;\n    _this.isPreventChange = false;\n    return _this;\n  }\n\n  DropDownBase.prototype.getPropObject = function (prop, newProp, oldProp) {\n    var newProperty = new Object();\n    var oldProperty = new Object();\n\n    var propName = function propName(prop) {\n      return prop;\n    };\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\n  DropDownBase.prototype.getValueByText = function (text, ignoreCase, ignoreAccent) {\n    var value = null;\n\n    if (!isNullOrUndefined(this.listData)) {\n      if (ignoreCase) {\n        value = this.checkValueCase(text, true, ignoreAccent);\n      } else {\n        value = this.checkValueCase(text, false, ignoreAccent);\n      }\n    }\n\n    return value;\n  };\n\n  DropDownBase.prototype.checkValueCase = function (text, ignoreCase, ignoreAccent, isTextByValue) {\n    var _this = this;\n\n    var value = null;\n\n    if (isTextByValue) {\n      value = text;\n    }\n\n    var dataSource = this.listData;\n    var fields = this.fields;\n    var type = this.typeOfData(dataSource).typeof;\n\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\n        if (!isNullOrUndefined(item)) {\n          if (ignoreAccent) {\n            value = this.checkingAccent(String(item), text, ignoreCase);\n          } else {\n            if (ignoreCase) {\n              if (this.checkIgnoreCase(String(item), text)) {\n                value = this.getItemValue(String(item), text, ignoreCase);\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    } else {\n      if (ignoreCase) {\n        dataSource.filter(function (item) {\n          var itemValue = getValue(fields.value, item);\n\n          if (!isNullOrUndefined(itemValue) && _this.checkIgnoreCase(getValue(fields.text, item).toString(), text)) {\n            value = getValue(fields.value, item);\n          }\n        });\n      } else {\n        if (isTextByValue) {\n          dataSource.filter(function (item) {\n            var itemValue = getValue(fields.value, item);\n\n            if (!isNullOrUndefined(itemValue) && !isNullOrUndefined(value) && itemValue.toString() === value.toString()) {\n              value = getValue(fields.text, item);\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\n    return value;\n  };\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\n    if (ignoreCase) {\n      if (this.checkIgnoreCase(dataItem, textItem)) {\n        value = this.getItemValue(String(item), text, ignoreCase);\n      }\n    } else {\n      if (this.checkNonIgnoreCase(String(item), text)) {\n        value = this.getItemValue(String(item), text, ignoreCase);\n      }\n    }\n\n    return value;\n  };\n\n  DropDownBase.prototype.checkIgnoreCase = function (item, text) {\n    return String(item).toLowerCase() === text.toString().toLowerCase() ? true : false;\n  };\n\n  DropDownBase.prototype.checkNonIgnoreCase = function (item, text) {\n    return String(item) === text.toString() ? true : false;\n  };\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\n    if (isTextByValue) {\n      value = dataItem.toString();\n    } else {\n      if (ignoreCase) {\n        value = type === 'string' ? String(dataItem) : this.getFormattedValue(String(dataItem));\n      } else {\n        value = type === 'string' ? typedText : this.getFormattedValue(typedText);\n      }\n    }\n\n    return value;\n  };\n\n  DropDownBase.prototype.templateCompiler = function (baseTemplate) {\n    var checkTemplate = false;\n\n    if (baseTemplate) {\n      try {\n        checkTemplate = selectAll(baseTemplate, document).length ? true : false;\n      } catch (exception) {\n        checkTemplate = false;\n      }\n    }\n\n    return checkTemplate;\n  };\n\n  DropDownBase.prototype.l10nUpdate = function (actionFailure) {\n    var ele = this.getModuleName() === 'listbox' ? this.ulElement : this.list;\n\n    if (this.noRecordsTemplate !== 'No records found' || this.actionFailureTemplate !== 'Request failed') {\n      this.DropDownBaseresetBlazorTemplates(false, false, true, true);\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\n      if (tempaltecheck) {\n        compiledString = compile(select(template, document).innerHTML.trim());\n      } else {\n        compiledString = compile(template);\n      }\n\n      var templateName = actionFailure ? 'actionFailureTemplate' : 'noRecordsTemplate'; // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n      var noDataCompTemp = compiledString({}, this, templateName, templateId, this.isStringTemplate, null, ele);\n\n      if (noDataCompTemp && noDataCompTemp.length > 0) {\n        for (var i = 0; i < noDataCompTemp.length; i++) {\n          ele.appendChild(noDataCompTemp[i]);\n        }\n      }\n\n      this.DropDownBaseupdateBlazorTemplates(false, false, !actionFailure, actionFailure, false, false, false, false);\n    } else {\n      var l10nLocale = {\n        noRecordsTemplate: 'No records found',\n        actionFailureTemplate: 'Request failed'\n      };\n      var componentLocale = new L10n(this.getLocaleName(), {}, this.locale);\n\n      if (componentLocale.getConstant('actionFailureTemplate') !== '') {\n        this.l10n = componentLocale;\n      } else {\n        this.l10n = new L10n(this.getModuleName() === 'listbox' ? 'listbox' : 'dropdowns', l10nLocale, this.locale);\n      }\n\n      var content = actionFailure ? this.l10n.getConstant('actionFailureTemplate') : this.l10n.getConstant('noRecordsTemplate');\n\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      } else {\n        ele.innerHTML = content;\n      }\n    }\n  };\n\n  DropDownBase.prototype.getLocaleName = function () {\n    return 'drop-down-base';\n  };\n\n  DropDownBase.prototype.getTextByValue = function (value) {\n    var text = this.checkValueCase(value, false, false, true);\n    return text;\n  };\n\n  DropDownBase.prototype.getFormattedValue = function (value) {\n    if (this.listData && this.listData.length) {\n      var item = this.typeOfData(this.listData);\n\n      if (isBlazor() && isNullOrUndefined(value) || value === 'null') {\n        return null;\n      }\n\n      if (typeof getValue(this.fields.value ? this.fields.value : 'value', item.item) === 'number' || item.typeof === 'number') {\n        return parseFloat(value);\n      }\n\n      if (typeof getValue(this.fields.value ? this.fields.value : 'value', item.item) === 'boolean' || item.typeof === 'boolean') {\n        return value === 'true' || '' + value === 'true';\n      }\n    }\n\n    return value;\n  };\n  /**\n   * Sets RTL to dropdownbase wrapper\n   *\n   * @returns {void}\n   */\n\n\n  DropDownBase.prototype.setEnableRtl = function () {\n    if (this.list) {\n      this.enableRtlElements.push(this.list);\n    }\n\n    if (this.enableRtl) {\n      addClass(this.enableRtlElements, dropDownBaseClasses.rtl);\n    } else {\n      removeClass(this.enableRtlElements, dropDownBaseClasses.rtl);\n    }\n  };\n  /**\n   * Initialize the Component.\n   *\n   * @returns {void}\n   */\n\n\n  DropDownBase.prototype.initialize = function () {\n    this.bindEvent = true;\n    this.actionFailureTemplateId = \"\" + this.element.id + ACTIONFAILURETEMPLATE_PROPERTY;\n\n    if (this.element.tagName === 'UL') {\n      var jsonElement = ListBase.createJsonFromElement(this.element);\n      this.setProperties({\n        fields: {\n          text: 'text',\n          value: 'text'\n        }\n      }, true);\n      this.resetList(jsonElement, this.fields);\n    } else if (this.element.tagName === 'SELECT') {\n      var dataSource = this.dataSource instanceof Array ? this.dataSource.length > 0 ? true : false : !isNullOrUndefined(this.dataSource) ? true : false;\n\n      if (!dataSource) {\n        this.renderItemsBySelect();\n      }\n    } else {\n      this.setListData(this.dataSource, this.fields, this.query);\n    }\n  };\n\n  DropDownBase.prototype.DropDownBaseupdateBlazorTemplates = function (item, group, noRecord, action, value, header, footer, isEmpty) {\n    if (!this.isStringTemplate) {\n      if (this.itemTemplate && item) {\n        updateBlazorTemplate(this.itemTemplateId, ITEMTEMPLATE_PROPERTY, this, isEmpty);\n      }\n\n      if (this.groupTemplate && group) {\n        updateBlazorTemplate(this.groupTemplateId, GROUPTEMPLATE_PROPERTY, this, isEmpty);\n      }\n\n      if (this.noRecordsTemplate && noRecord) {\n        updateBlazorTemplate(this.noRecordsTemplateId, NORECORDSTEMPLATE_PROPERTY, this, isEmpty);\n      }\n\n      if (this.actionFailureTemplate && action) {\n        updateBlazorTemplate(this.actionFailureTemplateId, ACTIONFAILURETEMPLATE_PROPERTY, this, isEmpty);\n      }\n\n      if (value) {\n        updateBlazorTemplate(this.valueTemplateId, VALUETEMPLATE_PROPERTY, this, isEmpty);\n      }\n\n      if (header) {\n        updateBlazorTemplate(this.headerTemplateId, HEADERTEMPLATE_PROPERTY, this);\n      }\n\n      if (footer) {\n        updateBlazorTemplate(this.footerTemplateId, FOOTERTEMPLATE_PROPERTY, this);\n      }\n    }\n  };\n\n  DropDownBase.prototype.DropDownBaseresetBlazorTemplates = function (item, group, noRecord, action, value, header, footer) {\n    if (!this.isStringTemplate) {\n      if (this.itemTemplate && item) {\n        resetBlazorTemplate(this.itemTemplateId, ITEMTEMPLATE_PROPERTY);\n      }\n\n      if (this.groupTemplate && group) {\n        resetBlazorTemplate(this.groupTemplateId, GROUPTEMPLATE_PROPERTY);\n      }\n\n      if (this.noRecordsTemplate && noRecord) {\n        resetBlazorTemplate(this.noRecordsTemplateId, NORECORDSTEMPLATE_PROPERTY);\n      }\n\n      if (this.actionFailureTemplate && action) {\n        resetBlazorTemplate(this.actionFailureTemplateId, ACTIONFAILURETEMPLATE_PROPERTY);\n      }\n\n      if (value) {\n        resetBlazorTemplate(this.valueTemplateId, VALUETEMPLATE_PROPERTY);\n      }\n\n      if (header) {\n        resetBlazorTemplate(this.headerTemplateId, HEADERTEMPLATE_PROPERTY);\n      }\n\n      if (footer) {\n        resetBlazorTemplate(this.footerTemplateId, FOOTERTEMPLATE_PROPERTY);\n      }\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\n\n  DropDownBase.prototype.getPersistData = function () {\n    return this.addOnPersist([]);\n  };\n  /**\n   * Sets the enabled state to DropDownBase.\n   *\n   * @returns {void}\n   */\n\n\n  DropDownBase.prototype.setEnabled = function () {\n    this.element.setAttribute('aria-disabled', this.enabled ? 'false' : 'true');\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\n\n  DropDownBase.prototype.updateDataAttribute = function (value) {\n    var invalidAttr = ['class', 'style', 'id', 'type'];\n    var attr = {};\n\n    for (var a = 0; a < this.element.attributes.length; a++) {\n      if (invalidAttr.indexOf(this.element.attributes[a].name) === -1 && !(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\n    extend(attr, value, attr);\n    this.setProperties({\n      htmlAttributes: attr\n    }, true);\n  };\n\n  DropDownBase.prototype.renderItemsBySelect = function () {\n    var element = this.element;\n    var fields = {\n      value: 'value',\n      text: 'text'\n    };\n    var jsonElement = [];\n    var group = element.querySelectorAll('select>optgroup');\n    var option = element.querySelectorAll('select>option');\n    this.getJSONfromOption(jsonElement, option, fields);\n\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\n      element.querySelectorAll('select>option');\n    }\n\n    this.updateFields(fields.text, fields.value, this.fields.groupBy, this.fields.htmlAttributes, this.fields.iconCss);\n    this.resetList(jsonElement, fields);\n  };\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\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)) ? 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\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.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\n\n  DropDownBase.prototype.setListData = function (dataSource, fields, query) {\n    var _this = this;\n\n    fields = fields ? fields : this.fields;\n    var ulElement;\n    this.isActive = true;\n    var eventArgs = {\n      cancel: false,\n      data: dataSource,\n      query: query\n    };\n    this.isPreventChange = this.isAngular && this.preventChange ? true : this.isPreventChange;\n    this.trigger('actionBegin', eventArgs, function (eventArgs) {\n      if (!eventArgs.cancel) {\n        _this.showSpinner();\n\n        if (dataSource instanceof DataManager) {\n          _this.isRequested = true;\n\n          if (_this.isDataFetched) {\n            _this.emptyDataRequest(fields);\n\n            return;\n          }\n\n          eventArgs.data.executeQuery(_this.getQuery(eventArgs.query)).then(function (e) {\n            _this.isPreventChange = _this.isAngular && _this.preventChange ? true : _this.isPreventChange;\n\n            _this.trigger('actionComplete', e, function (e) {\n              if (!e.cancel) {\n                var listItems = e.result;\n\n                if (listItems.length === 0) {\n                  _this.isDataFetched = true;\n                }\n\n                ulElement = _this.renderItems(listItems, fields);\n\n                _this.onActionComplete(ulElement, listItems, e);\n\n                if (_this.groupTemplate) {\n                  _this.renderGroupTemplate(ulElement);\n                }\n\n                _this.isRequested = false;\n\n                _this.bindChildItems(listItems, ulElement, fields, e);\n              }\n            });\n          }).catch(function (e) {\n            _this.isRequested = false;\n\n            _this.onActionFailure(e);\n\n            _this.hideSpinner();\n          });\n        } else {\n          var dataManager = new DataManager(eventArgs.data);\n\n          var listItems = _this.getQuery(eventArgs.query).executeLocal(dataManager);\n\n          var localDataArgs = {\n            cancel: false,\n            result: listItems\n          };\n          _this.isPreventChange = _this.isAngular && _this.preventChange ? true : _this.isPreventChange;\n\n          _this.trigger('actionComplete', localDataArgs, function (localDataArgs) {\n            if (!localDataArgs.cancel) {\n              ulElement = _this.renderItems(localDataArgs.result, fields);\n\n              _this.onActionComplete(ulElement, localDataArgs.result);\n\n              if (_this.groupTemplate) {\n                _this.renderGroupTemplate(ulElement);\n              }\n\n              _this.bindChildItems(localDataArgs.result, ulElement, fields);\n            }\n          });\n        }\n      }\n    });\n  };\n\n  DropDownBase.prototype.bindChildItems = function (listItems, ulElement, fields, e) {\n    var _this = this;\n\n    if (listItems.length >= 100 && this.getModuleName() === 'autocomplete') {\n      setTimeout(function () {\n        var childNode = _this.remainingItems(_this.sortedData, fields);\n\n        append(childNode, ulElement);\n\n        _this.DropDownBaseupdateBlazorTemplates(true, false, false, false);\n\n        _this.liCollections = _this.list.querySelectorAll('.' + dropDownBaseClasses.li);\n\n        _this.updateListValues();\n\n        _this.raiseDataBound(listItems, e);\n      }, 0);\n    } else {\n      this.raiseDataBound(listItems, e);\n    }\n  };\n\n  DropDownBase.prototype.updateListValues = function () {// Used this method in component side.\n  };\n\n  DropDownBase.prototype.findListElement = function (list, findNode, attribute, value) {\n    var liElement = null;\n\n    if (list) {\n      var listArr = [].slice.call(list.querySelectorAll(findNode));\n\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\n    return liElement;\n  };\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\n  DropDownBase.prototype.remainingItems = function (dataSource, fields) {\n    var spliceData = new DataManager(dataSource).executeLocal(new Query().skip(100));\n\n    if (this.itemTemplate) {\n      var listElements = this.templateListItem(spliceData, fields);\n      return [].slice.call(listElements.childNodes);\n    }\n\n    var type = this.typeOfData(spliceData).typeof;\n\n    if (type === 'string' || type === 'number' || type === 'boolean') {\n      return ListBase.createListItemFromArray(this.createElement, spliceData, true, this.listOption(spliceData, fields), this);\n    }\n\n    return ListBase.createListItemFromJson(this.createElement, spliceData, this.listOption(spliceData, fields), 1, true, this);\n  };\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\n  DropDownBase.prototype.showSpinner = function () {// Used this method in component side.\n  };\n\n  DropDownBase.prototype.hideSpinner = function () {// Used this method in component side.\n  };\n\n  DropDownBase.prototype.onActionFailure = function (e) {\n    this.liCollections = [];\n    this.trigger('actionFailure', e);\n    this.l10nUpdate(true);\n    addClass([this.list], dropDownBaseClasses.noData);\n  };\n  /* eslint-disable @typescript-eslint/no-unused-vars */\n\n\n  DropDownBase.prototype.onActionComplete = function (ulElement, list, e) {\n    /* eslint-enable @typescript-eslint/no-unused-vars */\n    this.listData = list;\n\n    if (isBlazor() && this.isServerRendered && this.getModuleName() === 'listbox') {\n      remove(this.list.querySelector('.e-list-parent'));\n      remove(this.list.querySelector('.e-hidden-select'));\n    } else {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      if (this.isReact) {\n        this.clearTemplate(['itemTemplate', 'groupTemplate', 'actionFailureTemplate', 'noRecordsTemplate']);\n      }\n\n      this.list.innerHTML = '';\n    }\n\n    this.fixedHeaderElement = isNullOrUndefined(this.fixedHeaderElement) ? this.fixedHeaderElement : null;\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  /* eslint-disable @typescript-eslint/no-unused-vars */\n\n\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\n    if (focusItem && !selectedItem) {\n      focusItem.classList.add(dropDownBaseClasses.focus);\n    }\n\n    if (list.length <= 0) {\n      this.l10nUpdate();\n      addClass([listElement], dropDownBaseClasses.noData);\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\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\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 = {\n        groupTemplateID: this.groupTemplateId,\n        isStringTemplate: this.isStringTemplate\n      };\n      var headerItems = listEle.querySelectorAll('.' + dropDownBaseClasses.group);\n      var groupcheck = this.templateCompiler(this.groupTemplate);\n\n      if (groupcheck) {\n        var groupValue = select(this.groupTemplate, document).innerHTML.trim(); // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n        var tempHeaders = ListBase.renderGroupTemplate(groupValue, dataSource, this.fields.properties, headerItems, option, this);\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      }\n\n      this.DropDownBaseupdateBlazorTemplates(false, true, false, false, false, false, false, false);\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\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\n        dataSource = ListBase.groupDataSource(dataSource, fields.properties, this.sortOrder);\n      }\n\n      addClass([this.list], dropDownBaseClasses.grouping);\n    } else {\n      dataSource = this.getSortedDataSource(dataSource);\n    }\n\n    var options = this.listOption(dataSource, fields);\n    var spliceData = dataSource.length > 100 ? new DataManager(dataSource).executeLocal(new Query().take(100)) : dataSource;\n    this.sortedData = dataSource;\n    return ListBase.createList(this.createElement, this.getModuleName() === 'autocomplete' ? spliceData : dataSource, options, true, this);\n  };\n\n  DropDownBase.prototype.listOption = function (dataSource, fields) {\n    var iconCss = isNullOrUndefined(fields.iconCss) ? false : true;\n    var fieldValues = !isNullOrUndefined(fields.properties) ? fields.properties : fields;\n    var options = fields.text !== null || fields.value !== null ? {\n      fields: fieldValues,\n      showIcon: iconCss,\n      ariaAttributes: {\n        groupItemRole: 'presentation'\n      }\n    } : {\n      fields: {\n        value: 'text'\n      }\n    };\n    return extend({}, options, fields, true);\n  };\n\n  DropDownBase.prototype.setFloatingHeader = function (e) {\n    if (isNullOrUndefined(this.fixedHeaderElement)) {\n      this.fixedHeaderElement = this.createElement('div', {\n        className: dropDownBaseClasses.fixedHead\n      });\n\n      if (!this.list.querySelector('li').classList.contains(dropDownBaseClasses.group)) {\n        this.fixedHeaderElement.style.display = 'none';\n      }\n\n      prepend([this.fixedHeaderElement], this.list);\n      this.setFixedHeader();\n    }\n\n    if (!isNullOrUndefined(this.fixedHeaderElement) && this.fixedHeaderElement.style.zIndex === '0') {\n      this.setFixedHeader();\n    }\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\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      } else {\n        this.fixedHeaderElement.style.display = 'none';\n        this.fixedHeaderElement.style.top = 'none';\n      }\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\n\n  DropDownBase.prototype.renderItems = function (listData, fields) {\n    var ulElement;\n\n    if (this.itemTemplate && listData) {\n      var dataSource = listData;\n\n      if (dataSource && fields.groupBy) {\n        if (this.sortOrder !== 'None') {\n          dataSource = this.getSortedDataSource(dataSource);\n        }\n\n        dataSource = ListBase.groupDataSource(dataSource, fields.properties, this.sortOrder);\n      } else {\n        dataSource = this.getSortedDataSource(dataSource);\n      }\n\n      this.sortedData = dataSource;\n      var spliceData = dataSource.length > 100 ? new DataManager(dataSource).executeLocal(new Query().take(100)) : dataSource;\n      ulElement = this.templateListItem(this.getModuleName() === 'autocomplete' ? spliceData : dataSource, fields);\n      var isTempEmpty = this.getModuleName() === 'listbox' ? true : false;\n      this.DropDownBaseupdateBlazorTemplates(true, false, false, false, false, false, false, isTempEmpty);\n    } else {\n      ulElement = this.createListItems(listData, fields);\n    }\n\n    return ulElement;\n  };\n\n  DropDownBase.prototype.templateListItem = function (dataSource, fields) {\n    this.DropDownBaseresetBlazorTemplates(true, false, false, false);\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\n    if (itemcheck) {\n      var itemValue = select(this.itemTemplate, document).innerHTML.trim();\n      return ListBase.renderContentTemplate(this.createElement, itemValue, dataSource, fields.properties, option, this);\n    } else {\n      return ListBase.renderContentTemplate(this.createElement, this.itemTemplate, dataSource, fields.properties, option, this);\n    }\n  };\n\n  DropDownBase.prototype.typeOfData = function (items) {\n    var item = {\n      typeof: null,\n      item: null\n    };\n\n    for (var i = 0; !isNullOrUndefined(items) && i < items.length; i++) {\n      if (!isNullOrUndefined(items[i])) {\n        var listDataType = typeof items[i] === 'string' || typeof items[i] === 'number' || typeof items[i] === 'boolean';\n        var isNullData = listDataType ? isNullOrUndefined(items[i]) : isNullOrUndefined(getValue(this.fields.value ? this.fields.value : 'value', items[i]));\n\n        if (!isNullData) {\n          return item = {\n            typeof: typeof items[i],\n            item: items[i]\n          };\n        }\n      }\n    }\n\n    return item;\n  };\n\n  DropDownBase.prototype.setFixedHeader = function () {\n    this.list.parentElement.style.display = 'block';\n    var borderWidth = 0;\n\n    if (this.list && this.list.parentElement) {\n      borderWidth = parseInt(document.defaultView.getComputedStyle(this.list.parentElement, null).getPropertyValue('border-width'), 10);\n    }\n\n    var liWidth = this.getValidLi().offsetWidth - borderWidth;\n    this.fixedHeaderElement.style.width = liWidth.toString() + 'px';\n    setStyleAttribute(this.fixedHeaderElement, {\n      zIndex: 10\n    });\n    var firstLi = this.ulElement.querySelector('.' + dropDownBaseClasses.group + ':not(.e-hide-listitem)');\n    this.fixedHeaderElement.innerHTML = firstLi.innerHTML;\n  };\n\n  DropDownBase.prototype.getSortedDataSource = function (dataSource) {\n    if (dataSource && this.sortOrder !== 'None') {\n      var textField = this.fields.text ? this.fields.text : 'text';\n\n      if (this.typeOfData(dataSource).typeof === 'string' || this.typeOfData(dataSource).typeof === 'number' || this.typeOfData(dataSource).typeof === 'boolean') {\n        textField = '';\n      }\n\n      dataSource = ListBase.getDataSource(dataSource, ListBase.addSorting(this.sortOrder, textField));\n    }\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\n\n  DropDownBase.prototype.getIndexByValue = function (value) {\n    var index;\n    var listItems = this.getItems();\n\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\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\n\n  DropDownBase.prototype.dispatchEvent = function (element, type) {\n    var evt = document.createEvent('HTMLEvents');\n    evt.initEvent(type, false, true);\n    element.dispatchEvent(evt);\n  };\n  /**\n   * To set the current fields\n   *\n   * @returns {void}\n   */\n\n\n  DropDownBase.prototype.setFields = function () {\n    if (this.fields.value && !this.fields.text) {\n      this.updateFields(this.fields.value, this.fields.value);\n    } else if (!this.fields.value && this.fields.text) {\n      this.updateFields(this.fields.text, this.fields.text);\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\n\n  DropDownBase.prototype.resetList = function (dataSource, fields, query) {\n    if (this.list) {\n      if (this.element.tagName === 'SELECT' && this.element.options.length > 0 || this.element.tagName === 'UL' && this.element.childNodes.length > 0) {\n        var data = dataSource instanceof Array ? dataSource.length > 0 : !isNullOrUndefined(dataSource);\n\n        if (!data && this.selectData && this.selectData.length > 0) {\n          dataSource = this.selectData;\n        }\n      }\n\n      this.setListData(dataSource, fields, query);\n    }\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\n  DropDownBase.prototype.updateSelection = function () {// This is for after added the item, need to update the selected index values.\n  };\n\n  DropDownBase.prototype.renderList = function () {\n    // This is for render the list items.\n    this.render();\n  }; // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n\n  DropDownBase.prototype.updateDataSource = function (props) {\n    this.resetList(this.dataSource);\n  };\n\n  DropDownBase.prototype.setUpdateInitial = function (props, newProp) {\n    this.isDataFetched = false;\n    var updateData = {};\n\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      } else if (newProp[props[j]]) {\n        updateData[props[j]] = newProp[props[j]];\n      }\n    }\n\n    if (Object.keys(updateData).length > 0) {\n      if (Object.keys(updateData).indexOf('dataSource') === -1) {\n        updateData.dataSource = this.dataSource;\n      }\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\n\n  DropDownBase.prototype.onPropertyChanged = function (newProp, oldProp) {\n    if (this.getModuleName() === 'dropdownbase') {\n      this.setUpdateInitial(['fields', 'query', 'dataSource'], newProp);\n    }\n\n    this.setUpdateInitial(['sortOrder', 'itemTemplate'], newProp);\n\n    for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n      var prop = _a[_i];\n\n      switch (prop) {\n        case 'query':\n        case 'sortOrder':\n        case 'dataSource':\n        case 'itemTemplate':\n          break;\n\n        case 'enableRtl':\n          this.setEnableRtl();\n          break;\n\n        case 'enabled':\n          this.setEnabled();\n          break;\n\n        case 'groupTemplate':\n          this.renderGroupTemplate(this.list);\n\n          if (this.ulElement && this.fixedHeaderElement) {\n            var firstLi = this.ulElement.querySelector('.' + dropDownBaseClasses.group);\n            this.fixedHeaderElement.innerHTML = firstLi.innerHTML;\n          }\n\n          break;\n\n        case 'locale':\n          if (this.list && !isNullOrUndefined(this.liCollections) && this.liCollections.length === 0) {\n            this.l10nUpdate();\n          }\n\n          break;\n\n        case 'zIndex':\n          this.setProperties({\n            zIndex: newProp.zIndex\n          }, 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\n\n  DropDownBase.prototype.render = function (isEmptyData) {\n    this.list = this.createElement('div', {\n      className: dropDownBaseClasses.content,\n      attrs: {\n        'tabindex': '0'\n      }\n    });\n    this.list.classList.add(dropDownBaseClasses.root);\n    this.setFields();\n    var rippleModel = {\n      duration: 300,\n      selector: '.' + dropDownBaseClasses.li\n    };\n    this.rippleFun = rippleEffect(this.list, rippleModel);\n    var group = this.element.querySelector('select>optgroup');\n\n    if ((this.fields.groupBy || !isNullOrUndefined(group)) && !this.isGroupChecking) {\n      EventHandler.add(this.list, 'scroll', this.setFloatingHeader, this);\n    }\n\n    if (this.getModuleName() === 'dropdownbase') {\n      if (this.element.getAttribute('tabindex')) {\n        this.list.setAttribute('tabindex', this.element.getAttribute('tabindex'));\n      }\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\n    this.setEnableRtl();\n    this.setEnabled();\n\n    if (!isEmptyData) {\n      this.initialize();\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\n\n  DropDownBase.prototype.getModuleName = function () {\n    return 'dropdownbase';\n  };\n  /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n\n  /**\n   * Gets all the list items bound on this component.\n   *\n   * @returns {Element[]}\n   */\n\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  /**\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\n  DropDownBase.prototype.addItem = function (items, itemIndex) {\n    if (!this.list || this.list.textContent === this.noRecordsTemplate && this.getModuleName() !== 'listbox') {\n      this.renderList();\n    }\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\n      if (this.fields.groupBy) {\n        newList = ListBase.groupDataSource(newList, this.fields.properties, this.sortOrder);\n        itemIndex = newList.indexOf(items);\n      } else {\n        itemIndex = newList.indexOf(items);\n      }\n    }\n\n    this.DropDownBaseresetBlazorTemplates(true, false, false, false);\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\n    if (items && fields.groupBy) {\n      items = ListBase.groupDataSource(items, fields.properties);\n    }\n\n    var liCollections = [];\n\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', {\n        className: isHeader ? dropDownBaseClasses.group : dropDownBaseClasses.li,\n        id: 'option-add-' + i\n      });\n      var itemText = item instanceof Object ? getValue(fields.text, item) : item;\n\n      if (isHeader) {\n        li.innerText = itemText;\n      }\n\n      if (this.itemTemplate && !isHeader) {\n        var compiledString = compile(this.itemTemplate); // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n        var addItemTemplate = compiledString(item, this, 'itemTemplate', this.itemTemplateId, this.isStringTemplate, null, li);\n\n        if (addItemTemplate) {\n          append(addItemTemplate, li);\n        }\n\n        this.DropDownBaseupdateBlazorTemplates(true, false, false, false);\n      } else if (!isHeader) {\n        li.appendChild(document.createTextNode(itemText));\n      }\n\n      li.setAttribute('data-value', item instanceof Object ? getValue(fields.value, item) : item);\n      li.setAttribute('role', 'option');\n      this.notify('addItem', {\n        module: 'CheckBoxSelection',\n        item: li\n      });\n      liCollections.push(li);\n      this.listData.push(item);\n\n      if (this.sortOrder === 'None' && isNullOrUndefined(itemIndex) && index === 0) {\n        index = null;\n      }\n\n      this.updateActionCompleteData(li, item, index); //Listbox event\n\n      this.trigger('beforeItemRender', {\n        element: li,\n        item: item\n      });\n    }\n\n    if (itemsCount === 0 && isNullOrUndefined(this.list.querySelector('ul'))) {\n      this.list.innerHTML = '';\n      this.list.classList.remove(dropDownBaseClasses.noData);\n      this.list.appendChild(this.ulElement);\n      this.liCollections = liCollections;\n      append(liCollections, this.ulElement);\n      this.updateAddItemList(this.list, itemsCount);\n    } else {\n      if (this.getModuleName() === 'listbox' && itemsCount === 0) {\n        this.ulElement.innerHTML = '';\n      }\n\n      var attr = [];\n\n      for (var i = 0; i < items.length; i++) {\n        var listGroupItem = this.ulElement.querySelectorAll('.e-list-group-item');\n\n        for (var j = 0; j < listGroupItem.length; j++) {\n          attr[j] = listGroupItem[j].innerText;\n        }\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              } else {\n                this.ulElement.insertBefore(liCollections[i + 1], this.ulElement.childNodes[itemIndex]);\n              }\n\n              i = i + 1;\n              break;\n            }\n          }\n        } else {\n          if (this.liCollections[index]) {\n            this.liCollections[index].parentNode.insertBefore(liCollections[i], this.liCollections[index]);\n          } else {\n            this.ulElement.appendChild(liCollections[i]);\n          }\n        }\n\n        var tempLi = [].slice.call(this.liCollections);\n        tempLi.splice(index, 0, liCollections[i]);\n        this.liCollections = tempLi;\n        index += 1;\n\n        if (this.getModuleName() === 'multiselect') {\n          this.updateDataList();\n        }\n      }\n    }\n\n    if (selectedItemValue || itemIndex === 0) {\n      this.updateSelection();\n    }\n  };\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\n    for (var i = 0; i < attributes.length; i++) {\n      if (!target.getAttribute(attributes[i])) {\n        continue;\n      }\n\n      var attr = target.getAttribute(attributes[i]);\n      hidden.setAttribute(attributes[i], attr);\n      target.removeAttribute(attributes[i]);\n    }\n  };\n\n  DropDownBase.prototype.setZIndex = function () {// this is for component wise\n  }; // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n\n  DropDownBase.prototype.updateActionCompleteData = function (li, item, index) {// this is for ComboBox custom value\n  }; // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n\n  DropDownBase.prototype.updateAddItemList = function (list, itemCount) {// this is for multiselect add item\n  };\n\n  DropDownBase.prototype.updateDataList = function () {// this is for multiselect update list items\n  };\n  /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\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   * @blazorType object\n   */\n\n\n  DropDownBase.prototype.getDataByValue = function (value) {\n    if (!isNullOrUndefined(this.listData)) {\n      var type = this.typeOfData(this.listData).typeof;\n\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\n          if (!isNullOrUndefined(item) && item === value) {\n            return item;\n          }\n        }\n      } else {\n        for (var _b = 0, _c = this.listData; _b < _c.length; _b++) {\n          var item = _c[_b];\n\n          if (!isNullOrUndefined(item) && getValue(this.fields.value ? this.fields.value : 'value', item) === value) {\n            return item;\n          }\n        }\n      }\n    }\n\n    return null;\n  };\n  /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n\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\n\n  DropDownBase.prototype.destroy = function () {\n    if (document.body.contains(this.list)) {\n      EventHandler.remove(this.list, 'scroll', this.setFloatingHeader);\n\n      if (!isNullOrUndefined(this.rippleFun)) {\n        this.rippleFun();\n      }\n\n      detach(this.list);\n    }\n\n    _super.prototype.destroy.call(this);\n  };\n\n  __decorate([Complex({\n    text: null,\n    value: null,\n    iconCss: null,\n    groupBy: null\n  }, FieldSettings)], DropDownBase.prototype, \"fields\", void 0);\n\n  __decorate([Property(false)], DropDownBase.prototype, \"enablePersistence\", void 0);\n\n  __decorate([Property(null)], DropDownBase.prototype, \"itemTemplate\", void 0);\n\n  __decorate([Property(null)], DropDownBase.prototype, \"groupTemplate\", void 0);\n\n  __decorate([Property('No records found')], DropDownBase.prototype, \"noRecordsTemplate\", void 0);\n\n  __decorate([Property('Request failed')], DropDownBase.prototype, \"actionFailureTemplate\", void 0);\n\n  __decorate([Property('None')], DropDownBase.prototype, \"sortOrder\", void 0);\n\n  __decorate([Property(true)], DropDownBase.prototype, \"enabled\", void 0);\n\n  __decorate([Property([])], DropDownBase.prototype, \"dataSource\", void 0);\n\n  __decorate([Property(null)], DropDownBase.prototype, \"query\", void 0);\n\n  __decorate([Property('StartsWith')], DropDownBase.prototype, \"filterType\", void 0);\n\n  __decorate([Property(true)], DropDownBase.prototype, \"ignoreCase\", void 0);\n\n  __decorate([Property(1000)], DropDownBase.prototype, \"zIndex\", void 0);\n\n  __decorate([Property(false)], DropDownBase.prototype, \"ignoreAccent\", void 0);\n\n  __decorate([Property()], DropDownBase.prototype, \"locale\", void 0);\n\n  __decorate([Event()], DropDownBase.prototype, \"actionBegin\", void 0);\n\n  __decorate([Event()], DropDownBase.prototype, \"actionComplete\", void 0);\n\n  __decorate([Event()], DropDownBase.prototype, \"actionFailure\", void 0);\n\n  __decorate([Event()], DropDownBase.prototype, \"select\", void 0);\n\n  __decorate([Event()], DropDownBase.prototype, \"dataBound\", void 0);\n\n  __decorate([Event()], DropDownBase.prototype, \"created\", void 0);\n\n  __decorate([Event()], DropDownBase.prototype, \"destroyed\", void 0);\n\n  DropDownBase = __decorate([NotifyPropertyChanges], DropDownBase);\n  return DropDownBase;\n}(Component);\n\nexport { DropDownBase };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nvar __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}; // eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// <reference path='../drop-down-base/drop-down-base-model.d.ts'/>\n\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, isBlazor } from '@syncfusion/ej2-base';\nimport { Popup, isCollide, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { incrementalSearch } from '../common/incremental-search';\nimport { DropDownBase, dropDownBaseClasses } from '../drop-down-base/drop-down-base';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data'; // don't use space in classnames\n\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 * <input type=\"text\" tabindex=\"1\" id=\"list\"> </input>\n * ```\n * ```typescript\n *   let dropDownListObj:DropDownList = new DropDownList();\n *   dropDownListObj.appendTo(\"#list\");\n * ```\n */\n\nvar DropDownList =\n/** @class */\nfunction (_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\n\n  function DropDownList(options, element) {\n    var _this = _super.call(this, options, element) || this;\n\n    _this.previousValue = null;\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\n\n  DropDownList.prototype.preRender = function () {\n    var checkBlazor = isBlazor() && this.isServerRendered;\n    this.isServerBlazor = checkBlazor ? true : false;\n    this.valueTempElement = null;\n\n    if (this.isServerBlazor) {\n      this.initializeData();\n    } else {\n      this.element.style.opacity = '0';\n      this.initializeData();\n\n      _super.prototype.preRender.call(this);\n    }\n\n    this.activeIndex = this.index;\n    this.queryString = '';\n  };\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 = {\n      isUpdated: false\n    };\n    this.actionData = {\n      isUpdated: false\n    };\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.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\n  DropDownList.prototype.setZIndex = function () {\n    if (this.popupObj) {\n      this.popupObj.setProperties({\n        'zIndex': this.zIndex\n      });\n    }\n  };\n\n  DropDownList.prototype.renderList = function (isEmptyData) {\n    if (!this.isServerBlazor) {\n      _super.prototype.render.call(this, isEmptyData);\n\n      this.unWireListEvents();\n      this.wireListEvents();\n    } else {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      this.interopAdaptor.invokeMethodAsync('OnServerRenderList', this.beforePopupOpen, false);\n    }\n  };\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\n      if (this.inputElement.value !== '' || this.isInteracted) {\n        classList(floatElement, ['e-label-top'], ['e-label-bottom']);\n      } else {\n        classList(floatElement, ['e-label-bottom'], ['e-label-top']);\n      }\n    }\n  };\n\n  DropDownList.prototype.resetHandler = function (e) {\n    e.preventDefault();\n    this.clearAll(e);\n  };\n\n  DropDownList.prototype.resetFocusElement = function () {\n    this.removeHover();\n    this.removeSelection();\n    this.removeFocus();\n    this.list.scrollTop = 0;\n\n    if (this.getModuleName() !== 'autocomplete' && !isNullOrUndefined(this.ulElement)) {\n      var li = this.ulElement.querySelector('.' + dropDownListClasses.li);\n\n      if (li) {\n        li.classList.add(dropDownListClasses.focus);\n      }\n    }\n  };\n\n  DropDownList.prototype.clearAll = function (e, properties) {\n    if (isNullOrUndefined(properties) || !isNullOrUndefined(properties) && (isNullOrUndefined(properties.dataSource) || !(properties.dataSource instanceof DataManager) && properties.dataSource.length === 0)) {\n      this.isActive = true;\n      this.resetSelection(properties);\n    }\n\n    var dataItem = this.getItemData();\n\n    if (this.previousValue === dataItem.value) {\n      return;\n    }\n\n    this.onChangeEvent(e);\n  };\n\n  DropDownList.prototype.resetSelection = function (properties) {\n    if (this.list) {\n      if (!isNullOrUndefined(properties) && (isNullOrUndefined(properties.dataSource) || !(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      } else {\n        if (this.allowFiltering && this.getModuleName() !== 'autocomplete' && !isNullOrUndefined(this.actionCompleteData.ulElement) && !isNullOrUndefined(this.actionCompleteData.list)) {\n          this.onActionComplete(this.actionCompleteData.ulElement.cloneNode(true), this.actionCompleteData.list);\n        }\n\n        this.resetFocusElement();\n      }\n    }\n\n    if (!this.isServerBlazor) {\n      this.hiddenElement.innerHTML = '';\n    }\n\n    this.inputElement.value = '';\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\n    if (this.valueTempElement) {\n      detach(this.valueTempElement);\n      this.inputElement.style.display = 'block';\n      this.valueTempElement = null;\n    }\n\n    this.setSelection(null, null);\n    this.isSelectCustom = false;\n    this.updateIconState();\n    this.cloneElements();\n  };\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\n        if (htmlAttr === 'class') {\n          var updatedClassValue = this.htmlAttributes[htmlAttr].replace(/\\s+/g, ' ').trim();\n\n          if (updatedClassValue !== '') {\n            addClass([this.inputWrapper.container], updatedClassValue.split(' '));\n          }\n        } else if (htmlAttr === 'disabled' && this.htmlAttributes[htmlAttr] === 'disabled') {\n          this.enabled = false;\n          this.setEnable();\n        } else if (htmlAttr === 'readonly' && !isNullOrUndefined(this.htmlAttributes[htmlAttr])) {\n          this.readonly = true;\n          this.dataBind();\n        } else if (htmlAttr === 'style') {\n          this.inputWrapper.container.setAttribute('style', this.htmlAttributes[htmlAttr]);\n        } else {\n          var defaultAttr = ['title', 'id', 'placeholder', 'aria-placeholder', 'role', 'autocorrect', 'autocomplete', 'autocapitalize', 'spellcheck', 'minlength', 'maxlength'];\n          var validateAttr = ['name', 'required'];\n\n          if (this.getModuleName() === 'autocomplete' || this.getModuleName() === 'combobox') {\n            defaultAttr.push('tabindex');\n          }\n\n          if (validateAttr.indexOf(htmlAttr) > -1 || htmlAttr.indexOf('data') === 0) {\n            this.hiddenElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n          } else if (defaultAttr.indexOf(htmlAttr) > -1) {\n            if (htmlAttr === 'placeholder') {\n              Input.setPlaceholder(this.htmlAttributes[htmlAttr], this.inputElement);\n            } else {\n              this.inputElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n            }\n          } else {\n            this.inputWrapper.container.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n          }\n        }\n      }\n    }\n\n    if (this.getModuleName() === 'autocomplete' || this.getModuleName() === 'combobox') {\n      this.inputWrapper.container.removeAttribute('tabindex');\n    }\n  };\n\n  DropDownList.prototype.getAriaAttributes = function () {\n    return {\n      'aria-disabled': 'false',\n      'aria-owns': this.element.id + '_options',\n      'role': 'listbox',\n      'aria-haspopup': 'true',\n      'aria-expanded': 'false',\n      'aria-activedescendant': 'null',\n      'aria-live': 'polite',\n      'aria-labelledby': this.hiddenElement.id\n    };\n  };\n\n  DropDownList.prototype.setEnableRtl = function () {\n    Input.setEnableRtl(this.enableRtl, [this.inputElement.parentElement]);\n\n    if (this.popupObj) {\n      this.popupObj.enableRtl = this.enableRtl;\n      this.popupObj.dataBind();\n    }\n  };\n\n  DropDownList.prototype.setEnable = function () {\n    Input.setEnabled(this.enabled, this.inputElement);\n\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    } 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\n\n  DropDownList.prototype.getPersistData = function () {\n    return this.addOnPersist(['value']);\n  };\n\n  DropDownList.prototype.getLocaleName = function () {\n    return 'drop-down-list';\n  };\n\n  DropDownList.prototype.preventTabIndex = function (element) {\n    if (this.getModuleName() === 'dropdownlist') {\n      element.tabIndex = -1;\n    }\n  };\n\n  DropDownList.prototype.targetElement = function () {\n    return this.inputWrapper.container;\n  };\n\n  DropDownList.prototype.getNgDirective = function () {\n    return 'EJS-DROPDOWNLIST';\n  };\n\n  DropDownList.prototype.getElementByText = function (text) {\n    return this.getElementByValue(this.getValueByText(text));\n  };\n\n  DropDownList.prototype.getElementByValue = function (value) {\n    var item;\n    var listItems = this.getItems();\n\n    for (var _i = 0, listItems_1 = listItems; _i < listItems_1.length; _i++) {\n      var liItem = listItems_1[_i];\n\n      if (this.getFormattedValue(liItem.getAttribute('data-value')) === value) {\n        item = liItem;\n        break;\n      }\n    }\n\n    return item;\n  };\n\n  DropDownList.prototype.initValue = function () {\n    this.renderList();\n\n    if (this.dataSource instanceof DataManager) {\n      this.initRemoteRender = true;\n    } else {\n      this.updateValues();\n    }\n  };\n\n  DropDownList.prototype.updateValues = function () {\n    if (!isNullOrUndefined(this.value)) {\n      this.setSelection(this.getElementByValue(this.value), null);\n    } else if (this.text && isNullOrUndefined(this.value)) {\n      var element = this.getElementByText(this.text);\n\n      if (isNullOrUndefined(element)) {\n        this.setProperties({\n          text: null\n        });\n        return;\n      } else {\n        this.setSelection(element, null);\n      }\n    } else {\n      this.setSelection(this.liCollections[this.activeIndex], null);\n    }\n\n    this.setHiddenValue();\n    Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n  };\n\n  DropDownList.prototype.onBlur = function (e) {\n    if (!this.enabled) {\n      return;\n    }\n\n    var target = e.relatedTarget;\n    var currentTarget = e.target;\n    var isPreventBlur = this.isPreventBlur;\n    this.isPreventBlur = false; //IE 11 - issue\n\n    if (isPreventBlur && !this.isDocumentClick && this.isPopupOpen && (!isNullOrUndefined(currentTarget) || !this.isFilterLayout() && isNullOrUndefined(target))) {\n      if (this.getModuleName() === 'dropdownlist' && this.allowFiltering && this.isPopupOpen) {\n        this.filterInput.focus();\n      } else {\n        this.targetElement().focus();\n      }\n\n      return;\n    }\n\n    if (this.isDocumentClick || !isNullOrUndefined(this.popupObj) && document.body.contains(this.popupObj.element) && this.popupObj.element.classList.contains(dropDownListClasses.mobileFilter)) {\n      if (!this.beforePopupOpen) {\n        this.isDocumentClick = false;\n      }\n\n      return;\n    }\n\n    if (this.getModuleName() === 'dropdownlist' && !this.isFilterFocus && target !== this.inputElement && (document.activeElement !== target || document.activeElement === target && currentTarget.classList.contains(dropDownListClasses.inputFocus)) || isNullOrUndefined(target) && this.getModuleName() === 'dropdownlist' && this.allowFiltering && currentTarget !== this.inputWrapper.container || this.getModuleName() !== 'dropdownlist' && !this.inputWrapper.container.contains(target) || this.isTabKey) {\n      this.isDocumentClick = this.isPopupOpen ? true : false;\n      this.focusOutAction(e);\n      this.isTabKey = false;\n    }\n\n    if (this.isRequested && !this.isPopupOpen && !this.isPreventBlur) {\n      this.isActive = false;\n      this.beforePopupOpen = false;\n    }\n  };\n\n  DropDownList.prototype.focusOutAction = function (e) {\n    this.isInteracted = false;\n    this.focusOut(e);\n    this.onFocusOut();\n  };\n\n  DropDownList.prototype.onFocusOut = function () {\n    if (!this.enabled) {\n      return;\n    }\n\n    if (this.isSelected) {\n      this.isSelectCustom = false;\n      this.onChangeEvent(null);\n    }\n\n    this.floatLabelChange();\n    this.dispatchEvent(this.hiddenElement, 'change');\n\n    if (this.getModuleName() === 'dropdownlist' && this.element.tagName !== 'INPUT') {\n      this.dispatchEvent(this.inputElement, 'blur');\n    }\n\n    if (this.inputWrapper.clearButton) {\n      addClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n    }\n\n    this.trigger('blur');\n  };\n\n  DropDownList.prototype.onFocus = function (e) {\n    if (!this.isInteracted) {\n      this.isInteracted = true;\n      var args = {\n        isInteracted: e ? true : false,\n        event: e\n      };\n      this.trigger('focus', args);\n    }\n\n    this.updateIconState();\n  };\n\n  DropDownList.prototype.resetValueHandler = function (e) {\n    var formElement = closest(this.inputElement, 'form');\n\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\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    this.bindCommonEvent();\n  };\n\n  DropDownList.prototype.bindCommonEvent = function () {\n    EventHandler.add(this.targetElement(), 'blur', this.onBlur, this);\n    var formElement = closest(this.inputElement, 'form');\n\n    if (formElement) {\n      EventHandler.add(formElement, 'reset', this.resetValueHandler, this);\n    }\n\n    if (!Browser.isDevice) {\n      this.keyboardModule = new KeyboardEvents(this.targetElement(), {\n        keyAction: this.keyActionHandler.bind(this),\n        keyConfigs: this.keyConfigure,\n        eventName: 'keydown'\n      });\n    } else {\n      this.keyboardModule = new KeyboardEvents(this.targetElement(), {\n        keyAction: this.mobileKeyActionHandler.bind(this),\n        keyConfigs: this.keyConfigure,\n        eventName: 'keydown'\n      });\n    }\n\n    this.bindClearEvent();\n  };\n\n  DropDownList.prototype.bindClearEvent = function () {\n    if (this.showClearButton) {\n      EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.resetHandler, this);\n    }\n  };\n\n  DropDownList.prototype.unBindCommonEvent = function () {\n    if (this.targetElement()) {\n      EventHandler.remove(this.targetElement(), 'blur', this.onBlur);\n    }\n\n    var formElement = this.inputElement && closest(this.inputElement, 'form');\n\n    if (formElement) {\n      EventHandler.remove(formElement, 'reset', this.resetValueHandler);\n    }\n\n    if (!Browser.isDevice) {\n      this.keyboardModule.destroy();\n    }\n\n    if (this.showClearButton) {\n      EventHandler.remove(this.inputWrapper.clearButton, 'mousedown', this.resetHandler);\n    }\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      } else {\n        addClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n      }\n    }\n  };\n  /**\n   * Event binding for list\n   *\n   * @returns {void}\n   */\n\n\n  DropDownList.prototype.wireListEvents = function () {\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        if (!this.isServerBlazor) {\n          this.renderList();\n        } else {\n          this.isServerIncrementalSearch = true; // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n          this.interopAdaptor.invokeMethodAsync('OnServerRenderList', true, false);\n        }\n      }\n\n      this.searchKeyEvent = e;\n      this.onServerIncrementalSearch(e);\n    }\n  };\n\n  DropDownList.prototype.onServerIncrementalSearch = function (e) {\n    if (!this.isRequested && !isNullOrUndefined(this.list) && !isNullOrUndefined(this.list.querySelector('li')) && this.enabled && !this.readonly) {\n      this.incrementalSearch(e);\n    }\n  };\n\n  DropDownList.prototype.onMouseClick = function (e) {\n    var target = e.target;\n    var li = closest(target, '.' + dropDownBaseClasses.li);\n\n    if (!this.isValidLI(li)) {\n      return;\n    }\n\n    this.setSelection(li, e);\n\n    if (Browser.isDevice && this.isFilterLayout()) {\n      history.back();\n    } else {\n      var delay = 100;\n      this.closePopup(delay);\n    }\n  };\n\n  DropDownList.prototype.onMouseOver = function (e) {\n    var currentLi = closest(e.target, '.' + dropDownBaseClasses.li);\n    this.setHover(currentLi);\n  };\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\n  DropDownList.prototype.onMouseLeave = function () {\n    this.removeHover();\n  };\n\n  DropDownList.prototype.removeHover = function () {\n    if (this.list) {\n      var hoveredItem = this.isServerBlazor && this.popupObj && this.popupObj.element ? this.popupObj.element.querySelectorAll('.' + dropDownBaseClasses.hover) : this.list.querySelectorAll('.' + dropDownBaseClasses.hover);\n\n      if (hoveredItem && hoveredItem.length) {\n        removeClass(hoveredItem, dropDownBaseClasses.hover);\n      }\n    }\n  };\n\n  DropDownList.prototype.isValidLI = function (li) {\n    return li && li.hasAttribute('role') && li.getAttribute('role') === 'option';\n  };\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, this.isServerBlazor);\n\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\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\n\n  DropDownList.prototype.showSpinner = function () {\n    if (isNullOrUndefined(this.spinnerElement)) {\n      this.spinnerElement = Browser.isDevice && !isNullOrUndefined(this.filterInputObj) && this.filterInputObj.buttons[1] || !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\n  DropDownList.prototype.keyActionHandler = function (e) {\n    if (!this.enabled) {\n      return;\n    }\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 isNavAction = e.action === 'down' || e.action === 'up' || e.action === 'home' || e.action === 'end';\n    var isNavigation = e.action === 'down' || e.action === 'up' || e.action === 'pageUp' || e.action === 'pageDown' || e.action === 'home' || e.action === 'end';\n\n    if ((this.isEditTextBox() || preventAction || preventHomeEnd) && !this.isPopupOpen) {\n      return;\n    }\n\n    if (!this.readonly) {\n      var isTabAction = e.action === 'tab' || e.action === 'close';\n\n      if (this.list === undefined && !this.isRequested && !isTabAction && e.action !== 'escape') {\n        this.searchKeyEvent = e;\n        this.renderList();\n      }\n\n      if (!(this.isServerBlazor && (e.action === 'open' || e.action === 'space')) && isNullOrUndefined(this.list) || !isNullOrUndefined(this.liCollections) && isNavigation && this.liCollections.length === 0 || this.isRequested) {\n        if (!(this.isServerBlazor && isNavAction)) {\n          return;\n        }\n      }\n\n      if (isTabAction && this.getModuleName() !== 'autocomplete' && this.isPopupOpen || e.action === 'escape') {\n        e.preventDefault();\n      }\n\n      this.isSelected = e.action === 'escape' ? false : this.isSelected;\n      this.isTyped = isNavigation || e.action === 'escape' ? false : this.isTyped;\n\n      switch (e.action) {\n        case 'down':\n        case 'up':\n          this.updateUpDownAction(e);\n          break;\n\n        case 'pageUp':\n          this.pageUpSelection(this.activeIndex - this.getPageCount(), e);\n          e.preventDefault();\n          break;\n\n        case 'pageDown':\n          this.pageDownSelection(this.activeIndex + this.getPageCount(), e);\n          e.preventDefault();\n          break;\n\n        case 'home':\n          this.updateHomeEndAction(e);\n          break;\n\n        case 'end':\n          this.updateHomeEndAction(e);\n          break;\n\n        case 'space':\n          if (this.getModuleName() === 'dropdownlist') {\n            if (!this.beforePopupOpen) {\n              this.showPopup();\n            }\n          }\n\n          break;\n\n        case 'open':\n          this.showPopup();\n          break;\n\n        case 'hide':\n          this.preventAltUp = this.isPopupOpen;\n          this.hidePopup(e);\n          this.focusDropDown(e);\n          break;\n\n        case 'enter':\n          this.selectCurrentItem(e);\n          break;\n\n        case 'tab':\n          this.selectCurrentValueOnTab(e);\n          break;\n\n        case 'escape':\n        case 'close':\n          if (this.isPopupOpen) {\n            this.hidePopup(e);\n            this.focusDropDown(e);\n          }\n\n          break;\n      }\n    }\n  };\n\n  DropDownList.prototype.updateUpDownAction = function (e) {\n    if (this.isServerBlazor && isNullOrUndefined(this.list)) {\n      this.isServerNavigation = true; // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n      this.interopAdaptor.invokeMethodAsync('OnServerRenderList', true, false);\n    } else {\n      this.isServerNavigation = false;\n      var focusEle = this.list.querySelector('.' + dropDownListClasses.focus);\n\n      if (this.isSelectFocusItem(focusEle)) {\n        this.setSelection(focusEle, e);\n      } else {\n        var index = e.action === 'down' ? this.activeIndex + 1 : this.activeIndex - 1;\n        var startIndex = 0;\n\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\n        var nextItem = isNullOrUndefined(this.activeIndex) ? this.liCollections[startIndex] : this.liCollections[index];\n\n        if (!isNullOrUndefined(nextItem)) {\n          this.setSelection(nextItem, e);\n        }\n      }\n\n      e.preventDefault();\n    }\n  };\n\n  DropDownList.prototype.updateHomeEndAction = function (e) {\n    if (this.getModuleName() === 'dropdownlist') {\n      if (this.isServerBlazor && isNullOrUndefined(this.list)) {\n        this.isServerNavigation = true; // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n        this.interopAdaptor.invokeMethodAsync('OnServerRenderList', true, false);\n      } else {\n        this.isServerNavigation = false;\n        var findLi = 0;\n\n        if (e.action === 'home') {\n          findLi = 0;\n        } else {\n          findLi = this.getItems().length - 1;\n        }\n\n        e.preventDefault();\n\n        if (this.activeIndex === findLi) {\n          return;\n        }\n\n        this.setSelection(this.liCollections[findLi], e);\n      }\n    }\n  };\n\n  DropDownList.prototype.selectCurrentValueOnTab = function (e) {\n    if (this.getModuleName() === 'autocomplete') {\n      this.selectCurrentItem(e);\n    } else {\n      if (this.isPopupOpen) {\n        this.hidePopup(e);\n        this.focusDropDown(e);\n      }\n    }\n  };\n\n  DropDownList.prototype.mobileKeyActionHandler = function (e) {\n    if (!this.enabled) {\n      return;\n    }\n\n    if (this.isEditTextBox() && !this.isPopupOpen) {\n      return;\n    }\n\n    if (!this.readonly) {\n      if (this.list === undefined && !this.isRequested) {\n        this.searchKeyEvent = e;\n        this.renderList();\n      }\n\n      if (isNullOrUndefined(this.list) || !isNullOrUndefined(this.liCollections) && this.liCollections.length === 0 || this.isRequested) {\n        return;\n      }\n\n      if (e.action === 'enter') {\n        this.selectCurrentItem(e);\n      }\n    }\n  };\n\n  DropDownList.prototype.selectCurrentItem = function (e) {\n    if (this.isPopupOpen) {\n      var li = this.list.querySelector('.' + dropDownListClasses.focus);\n\n      if (li) {\n        this.setSelection(li, e);\n        this.isTyped = false;\n      }\n\n      if (this.isSelected) {\n        this.isSelectCustom = false;\n        this.onChangeEvent(e);\n      }\n\n      this.hidePopup();\n      this.focusDropDown(e);\n    } else {\n      this.showPopup();\n    }\n  };\n\n  DropDownList.prototype.isSelectFocusItem = function (element) {\n    return !isNullOrUndefined(element);\n  };\n\n  DropDownList.prototype.getPageCount = function () {\n    var liHeight = this.list.classList.contains(dropDownBaseClasses.noData) ? null : getComputedStyle(this.getItems()[0], null).getPropertyValue('height');\n    return Math.round(this.list.getBoundingClientRect().height / parseInt(liHeight, 10));\n  };\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\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\n  DropDownList.prototype.unWireEvent = function () {\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    this.unBindCommonEvent();\n  };\n  /**\n   * Event un binding for list items.\n   *\n   * @returns {void}\n   */\n\n\n  DropDownList.prototype.unWireListEvents = function () {\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\n  DropDownList.prototype.onDocumentClick = function (e) {\n    var target = e.target;\n\n    if (!(!isNullOrUndefined(this.popupObj) && closest(target, this.checkSelector(this.popupObj.element.id))) && !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\n        if (!isActive) {\n          this.onFocusOut();\n          this.inputWrapper.container.classList.remove(dropDownListClasses.inputFocus);\n        }\n      }\n    } else if (target !== this.inputElement && !(this.allowFiltering && target === this.filterInput) && !(this.getModuleName() === 'combobox' && !this.allowFiltering && Browser.isDevice && target === this.inputWrapper.buttons[0])) {\n      this.isPreventBlur = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.targetElement() || document.activeElement === this.filterInput);\n      e.preventDefault();\n    }\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\n  DropDownList.prototype.focusDropDown = function (e) {\n    if (!this.initial && this.isFilterLayout()) {\n      this.focusIn(e);\n    }\n  };\n\n  DropDownList.prototype.dropDownClick = function (e) {\n    if (e.which === 3 || e.button === 2) {\n      return;\n    }\n\n    if (this.targetElement().classList.contains(dropDownListClasses.disable) || this.inputWrapper.clearButton === e.target) {\n      return;\n    }\n\n    var target = e.target;\n\n    if (target !== this.inputElement && !(this.allowFiltering && target === this.filterInput) && this.getModuleName() !== 'combobox') {\n      e.preventDefault();\n    }\n\n    if (!this.readonly) {\n      if (this.isPopupOpen) {\n        this.hidePopup();\n\n        if (this.isFilterLayout()) {\n          this.focusDropDown(e);\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();\n      } // eslint-disable-next-line @typescript-eslint/no-this-alias\n\n\n      var proxy_1 = this; // eslint-disable-next-line max-len\n\n      var duration = isBlazor() ? 1000 : this.element.tagName === this.getNgDirective() && this.itemTemplate ? 500 : 100;\n\n      if (!this.isSecondClick) {\n        setTimeout(function () {\n          proxy_1.cloneElements();\n          proxy_1.isSecondClick = true;\n        }, duration);\n      }\n    } else {\n      this.focusIn(e);\n    }\n  };\n\n  DropDownList.prototype.cloneElements = function () {\n    if (this.list) {\n      var ulElement = this.list.querySelector('ul');\n\n      if (ulElement) {\n        ulElement = ulElement.cloneNode ? ulElement.cloneNode(true) : ulElement;\n        this.actionCompleteData.ulElement = ulElement;\n      }\n    }\n  };\n\n  DropDownList.prototype.updateSelectedItem = function (li, e, preventSelect, isSelection) {\n    var _this = this;\n\n    this.removeSelection();\n    li.classList.add(dropDownBaseClasses.selected);\n    this.removeHover();\n    var value = this.getFormattedValue(li.getAttribute('data-value'));\n    var selectedData = this.getDataByValue(value);\n\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        } else {\n          _this.selectEventCallback(li, e, preventSelect, selectedData, value);\n\n          if (_this.isServerBlazor) {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            _this.interopAdaptor.invokeMethodAsync('OnServerItemData', _this.itemData);\n          }\n\n          if (isSelection) {\n            _this.setSelectOptions(li, e);\n          }\n        }\n      });\n    } else {\n      this.selectEventCallback(li, e, preventSelect, selectedData, value);\n\n      if (this.isServerBlazor) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        this.interopAdaptor.invokeMethodAsync('OnServerItemData', this.itemData);\n      }\n\n      if (isSelection) {\n        this.setSelectOptions(li, e);\n      }\n    }\n  };\n\n  DropDownList.prototype.selectEventCallback = function (li, e, preventSelect, selectedData, value) {\n    this.previousItemData = !isNullOrUndefined(this.itemData) ? this.itemData : null;\n    this.item = li;\n    this.itemData = selectedData;\n    var focusedItem = this.list.querySelector('.' + dropDownBaseClasses.focus);\n\n    if (focusedItem) {\n      removeClass([focusedItem], dropDownBaseClasses.focus);\n    }\n\n    li.setAttribute('aria-selected', 'true');\n    this.activeIndex = this.getIndexByValue(value);\n  };\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  }; // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n\n  DropDownList.prototype.setValue = function (e) {\n    var dataItem = this.getItemData();\n\n    if (dataItem.value === null) {\n      if (isBlazor() && dataItem.text !== null || dataItem.text !== '') {\n        Input.setValue(dataItem.text, this.inputElement, this.floatLabelType, this.showClearButton);\n      } else {\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\n    if (this.isServerBlazor) {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      this.interopAdaptor.invokeMethodAsync('OnServerValueTemplate', dataItem);\n    }\n\n    if (this.valueTemplate && this.itemData !== null && !this.isServerBlazor) {\n      this.DropDownBaseresetBlazorTemplates(false, false, false, false, true);\n      this.setValueTemplate();\n    } else if (this.inputElement.previousSibling === this.valueTempElement) {\n      detach(this.valueTempElement);\n      this.inputElement.style.display = 'block';\n    }\n\n    if (this.previousValue === dataItem.value) {\n      this.isSelected = false;\n      return true;\n    } else {\n      this.isSelected = !this.initial ? true : false;\n      this.isSelectCustom = false;\n\n      if (this.getModuleName() === 'dropdownlist') {\n        this.updateIconState();\n      }\n\n      return false;\n    }\n  };\n\n  DropDownList.prototype.setSelection = function (li, e) {\n    if (this.isValidLI(li) && (!li.classList.contains(dropDownBaseClasses.selected) || this.isPopupOpen && this.isSelected && li.classList.contains(dropDownBaseClasses.selected))) {\n      this.updateSelectedItem(li, e, false, true);\n    } else {\n      this.setSelectOptions(li, e);\n    }\n  };\n\n  DropDownList.prototype.setSelectOptions = function (li, e) {\n    if (this.list) {\n      this.removeHover();\n    }\n\n    this.previousSelectedLI = !isNullOrUndefined(this.selectedLI) ? this.selectedLI : null;\n    this.selectedLI = li;\n\n    if (this.setValue(e)) {\n      return;\n    }\n\n    if (this.isPopupOpen) {\n      attributes(this.targetElement(), {\n        'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null\n      });\n\n      if (this.isFilterLayout() && this.filterInput) {\n        attributes(this.filterInput, {\n          'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null\n        });\n      }\n    }\n\n    if (!this.isPopupOpen && !isNullOrUndefined(li) || this.isPopupOpen && !isNullOrUndefined(e) && (e.type !== 'keydown' || e.type === 'keydown' && e.action === 'enter')) {\n      this.isSelectCustom = false;\n      this.onChangeEvent(e);\n    }\n\n    if (this.isPopupOpen && !isNullOrUndefined(this.selectedLI) && this.itemData !== null && (!e || e.type !== 'click')) {\n      this.setScrollPosition(e);\n    }\n\n    if (Browser.info.name !== 'mozilla') {\n      attributes(this.inputElement, {\n        'aria-label': this.inputElement.value\n      });\n      attributes(this.targetElement(), {\n        'aria-describedby': this.inputElement.id\n      });\n      this.targetElement().removeAttribute('aria-live');\n    }\n  };\n\n  DropDownList.prototype.dropdownCompiler = function (dropdownTemplate) {\n    var checkTemplate = false;\n\n    if (dropdownTemplate) {\n      try {\n        checkTemplate = document.querySelectorAll(dropdownTemplate).length ? true : false;\n      } catch (exception) {\n        checkTemplate = false;\n      }\n    }\n\n    return checkTemplate;\n  };\n\n  DropDownList.prototype.setValueTemplate = function () {\n    var compiledString; // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n    if (this.isReact) {\n      this.clearTemplate(['valueTemplate']);\n    }\n\n    if (!this.valueTempElement) {\n      this.valueTempElement = this.createElement('span', {\n        className: dropDownListClasses.value\n      });\n      this.inputElement.parentElement.insertBefore(this.valueTempElement, this.inputElement);\n      this.inputElement.style.display = 'none';\n    }\n\n    this.valueTempElement.innerHTML = '';\n    var templateData = isBlazor() ? JSON.parse(JSON.stringify(this.itemData)) : this.itemData;\n    var valuecheck = this.dropdownCompiler(this.valueTemplate);\n\n    if (valuecheck) {\n      compiledString = compile(document.querySelector(this.valueTemplate).innerHTML.trim());\n    } else {\n      compiledString = compile(this.valueTemplate);\n    } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\n    var valueCompTemp = compiledString(templateData, this, 'valueTemplate', this.valueTemplateId, this.isStringTemplate, null, this.valueTempElement);\n\n    if (valueCompTemp && valueCompTemp.length > 0) {\n      for (var i = 0; i < valueCompTemp.length; i++) {\n        this.valueTempElement.appendChild(valueCompTemp[i]);\n      }\n    }\n\n    this.renderReactTemplates();\n    this.DropDownBaseupdateBlazorTemplates(false, false, false, false, true, true, true);\n  };\n\n  DropDownList.prototype.removeSelection = function () {\n    if (this.list) {\n      var selectedItems = this.list.querySelectorAll('.' + dropDownBaseClasses.selected);\n\n      if (selectedItems.length) {\n        removeClass(selectedItems, dropDownBaseClasses.selected);\n        selectedItems[0].removeAttribute('aria-selected');\n      }\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\n    if (!isNullOrUndefined(dataItem)) {\n      dataValue = getValue(fields.value, dataItem);\n      dataText = getValue(fields.text, dataItem);\n    }\n\n    var value = !isNullOrUndefined(dataItem) && !isUndefined(dataValue) ? dataValue : dataItem;\n    var text = !isNullOrUndefined(dataItem) && !isUndefined(dataValue) ? dataText : dataItem;\n    return {\n      value: value,\n      text: text\n    };\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\n\n  DropDownList.prototype.onChangeEvent = function (eve) {\n    var dataItem = this.getItemData();\n    var index = this.isSelectCustom ? null : this.activeIndex;\n    this.setProperties({\n      'index': index,\n      'text': dataItem.text,\n      'value': dataItem.value\n    }, true);\n    this.detachChangeEvent(eve);\n  };\n\n  DropDownList.prototype.detachChanges = function (value) {\n    var items;\n\n    if (typeof value === 'string' || typeof value === 'boolean' || 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    } else {\n      items = value;\n    }\n\n    return items;\n  };\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\n    if (!this.initial) {\n      var items = this.detachChanges(this.itemData);\n      var preItems = void 0;\n\n      if (typeof this.previousItemData === 'string' || typeof this.previousItemData === 'boolean' || 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      } else {\n        preItems = this.previousItemData;\n      }\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      };\n\n      if (this.isAngular && this.preventChange) {\n        this.preventChange = false;\n      } else {\n        this.trigger('change', eventArgs);\n      }\n\n      if (this.isServerBlazor && this.enablePersistence) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        this.interopAdaptor.invokeMethodAsync('ServerChange');\n      }\n    }\n\n    if ((isNullOrUndefined(this.value) || this.value === '') && this.floatLabelType !== 'Always') {\n      removeClass([this.inputWrapper.container], 'e-valid-input');\n    }\n  };\n\n  DropDownList.prototype.setHiddenValue = function () {\n    if (!isNullOrUndefined(this.value)) {\n      if (this.isServerBlazor && this.hiddenElement.querySelector('option')) {\n        var selectedElement = this.hiddenElement.querySelector('option');\n        selectedElement.textContent = this.text;\n        selectedElement.setAttribute('value', this.value.toString());\n      } else if (!this.isServerBlazor) {\n        this.hiddenElement.innerHTML = '<option selected>' + this.text + '</option>';\n        var selectedElement = this.hiddenElement.querySelector('option');\n        selectedElement.setAttribute('value', this.value.toString());\n      }\n    } else if (!this.isServerBlazor) {\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\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\n      switch (e.keyCode) {\n        case 38: //up arrow\n\n        case 40:\n          //down arrow\n          if (this.getModuleName() === 'autocomplete' && !this.isPopupOpen && !this.preventAltUp && !this.isRequested) {\n            this.preventAutoFill = true;\n            this.searchLists(e);\n          } else {\n            this.preventAutoFill = false;\n          }\n\n          this.preventAltUp = false;\n          e.preventDefault();\n          break;\n\n        case 46: //delete\n\n        case 8:\n          //backspace\n          this.typedString = this.filterInput.value;\n\n          if (!this.isPopupOpen && this.typedString !== '' || this.isPopupOpen && this.queryString.length > 0) {\n            this.preventAutoFill = true;\n            this.searchLists(e);\n          } else if (this.typedString === '' && this.queryString === '' && this.getModuleName() !== 'autocomplete') {\n            this.preventAutoFill = true;\n            this.searchLists(e);\n          } else if (this.typedString === '') {\n            if (this.list) {\n              this.resetFocusElement();\n            }\n\n            this.activeIndex = null;\n\n            if (this.getModuleName() !== 'dropdownlist') {\n              this.preventAutoFill = true;\n              this.searchLists(e);\n\n              if (this.getModuleName() === 'autocomplete') {\n                this.hidePopup();\n              }\n            }\n          }\n\n          e.preventDefault();\n          break;\n\n        default:\n          this.typedString = this.filterInput.value;\n          this.preventAutoFill = false;\n          this.searchLists(e);\n          break;\n      }\n    } else {\n      this.isValidKey = false;\n    }\n  };\n\n  DropDownList.prototype.onFilterDown = function (e) {\n    switch (e.keyCode) {\n      case 13:\n        //enter\n        break;\n\n      case 40: //down arrow\n\n      case 38:\n        //up arrow\n        this.queryString = this.filterInput.value;\n        e.preventDefault();\n        break;\n\n      case 9:\n        //tab\n        if (this.isPopupOpen && this.getModuleName() !== 'autocomplete') {\n          e.preventDefault();\n        }\n\n        break;\n\n      default:\n        this.prevSelectPoints = this.getSelectionPoints();\n        this.queryString = this.filterInput.value;\n        break;\n    }\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\n  DropDownList.prototype.getQuery = function (query) {\n    var filterQuery;\n\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\n      if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n        filterQuery.where('', filterType, this.typedString, this.ignoreCase, this.ignoreAccent);\n      } else {\n        var fields = this.fields.text ? this.fields.text : '';\n        filterQuery.where(fields, filterType, this.typedString, this.ignoreCase, this.ignoreAccent);\n      }\n    } else {\n      filterQuery = query ? query : this.query ? this.query : new Query();\n    }\n\n    return filterQuery;\n  };\n\n  DropDownList.prototype.getSelectionPoints = function () {\n    var input = this.inputElement;\n    return {\n      start: Math.abs(input.selectionStart),\n      end: Math.abs(input.selectionEnd)\n    };\n  };\n\n  DropDownList.prototype.searchLists = function (e) {\n    var _this = this;\n\n    this.isTyped = true;\n    this.activeIndex = null;\n    this.isListSearched = true;\n\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\n    this.isDataFetched = false;\n\n    if (this.isFiltering()) {\n      if (this.isServerBlazor) {\n        this.beforePopupOpen = this.getModuleName() === 'combobox' && this.isFiltering() && !this.beforePopupOpen ? !this.beforePopupOpen : this.beforePopupOpen;\n\n        if (this.filterInput.value === '' && this.getModuleName() !== 'dropdownlist') {\n          // eslint-disable-next-line @typescript-eslint/no-explicit-any\n          this.interopAdaptor.invokeMethodAsync('OnServerRenderList', this.beforePopupOpen, false);\n        } else {\n          // eslint-disable-next-line @typescript-eslint/no-explicit-any\n          this.interopAdaptor.invokeMethodAsync('OnServerFilter', this.filterInput.value);\n        }\n      } else {\n        var eventArgs_1 = {\n          preventDefaultAction: false,\n          text: this.filterInput.value,\n          updateData: function updateData(dataSource, query, fields) {\n            if (eventArgs_1.cancel) {\n              return;\n            }\n\n            _this.isCustomFilter = true;\n\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  /**\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\n  DropDownList.prototype.filter = function (dataSource, query, fields) {\n    this.isCustomFilter = true;\n    this.filteringAction(dataSource, query, fields);\n  };\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 === '' ? false : true;\n\n      if (this.filterInput.value.trim() === '' && !this.itemTemplate) {\n        this.actionCompleteData.isUpdated = false;\n        this.isTyped = false;\n\n        if (!isNullOrUndefined(this.actionCompleteData.ulElement) && !isNullOrUndefined(this.actionCompleteData.list)) {\n          this.onActionComplete(this.actionCompleteData.ulElement, this.actionCompleteData.list);\n        }\n\n        this.isTyped = true;\n\n        if (!isNullOrUndefined(this.itemData) && this.getModuleName() === 'dropdownlist') {\n          this.focusIndexItem();\n          this.setScrollPosition();\n        }\n\n        this.isNotSearchList = true;\n      } else {\n        this.isNotSearchList = false;\n        query = this.filterInput.value.trim() === '' ? null : query;\n        this.resetList(dataSource, fields, query);\n      }\n\n      this.renderReactTemplates();\n    }\n  };\n\n  DropDownList.prototype.setSearchBox = function (popupElement) {\n    if (this.isFiltering()) {\n      var parentElement = popupElement.querySelector('.' + dropDownListClasses.filterParent) ? popupElement.querySelector('.' + dropDownListClasses.filterParent) : this.createElement('span', {\n        className: dropDownListClasses.filterParent\n      });\n\n      if (this.isServerBlazor) {\n        parentElement.innerHTML = '';\n      }\n\n      this.filterInput = this.createElement('input', {\n        attrs: {\n          type: 'text'\n        },\n        className: dropDownListClasses.filterInput\n      });\n      this.element.parentNode.insertBefore(this.filterInput, this.element);\n      var backIcon = false;\n\n      if (Browser.isDevice) {\n        backIcon = true;\n      }\n\n      this.filterInputObj = Input.createInput({\n        element: this.filterInput,\n        buttons: backIcon ? [dropDownListClasses.backIcon, dropDownListClasses.filterBarClearIcon] : [dropDownListClasses.filterBarClearIcon],\n        properties: {\n          placeholder: this.filterBarPlaceholder\n        }\n      }, this.createElement);\n\n      if (!isNullOrUndefined(this.cssClass)) {\n        if (this.cssClass.split(' ').indexOf('e-outline') !== -1) {\n          addClass([this.filterInputObj.container], 'e-outline');\n        } else if (this.cssClass.split(' ').indexOf('e-filled') !== -1) {\n          addClass([this.filterInputObj.container], 'e-filled');\n        }\n      }\n\n      append([this.filterInputObj.container], parentElement);\n      prepend([parentElement], popupElement);\n      attributes(this.filterInput, {\n        'aria-disabled': 'false',\n        'aria-owns': this.element.id + '_options',\n        'role': 'listbox',\n        'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null,\n        'autocomplete': 'off',\n        'autocorrect': 'off',\n        'autocapitalize': 'off',\n        'spellcheck': 'false'\n      });\n      this.clearIconElement = this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon);\n\n      if (!Browser.isDevice && this.clearIconElement) {\n        EventHandler.add(this.clearIconElement, 'click', this.clearText, this);\n        this.clearIconElement.style.visibility = 'hidden';\n      }\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      } else {\n        this.searchKeyModule = new KeyboardEvents(this.filterInput, {\n          keyAction: this.mobileKeyActionHandler.bind(this),\n          keyConfigs: this.keyConfigure,\n          eventName: 'keydown'\n        });\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.onBlur, this);\n      EventHandler.add(this.filterInput, 'paste', this.pasteHandler, this);\n      return this.filterInputObj;\n    } else {\n      return inputObject;\n    }\n  };\n\n  DropDownList.prototype.onInput = function (e) {\n    this.isValidKey = true; // For filtering works in mobile firefox.\n\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\n  DropDownList.prototype.pasteHandler = function (e) {\n    var _this = this;\n\n    setTimeout(function () {\n      _this.typedString = _this.filterInput.value;\n\n      _this.searchLists(e);\n    });\n  };\n\n  DropDownList.prototype.onActionFailure = function (e) {\n    _super.prototype.onActionFailure.call(this, e);\n\n    if (this.beforePopupOpen) {\n      this.renderPopup();\n    }\n  }; // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n\n  DropDownList.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n    var _this = this;\n\n    if (this.isNotSearchList) {\n      this.isNotSearchList = false;\n      return;\n    }\n\n    if (this.isActive) {\n      var selectedItem = this.selectedLI ? this.selectedLI.cloneNode(true) : null;\n\n      _super.prototype.onActionComplete.call(this, ulElement, list, e);\n\n      this.updateSelectElementData(this.allowFiltering);\n\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\n      if (this.isRequested && !isNullOrUndefined(this.searchKeyEvent)) {\n        this.incrementalSearch(this.searchKeyEvent);\n        this.searchKeyEvent = null;\n      }\n\n      this.list.scrollTop = 0;\n\n      if (!isNullOrUndefined(ulElement)) {\n        attributes(ulElement, {\n          'id': this.element.id + '_options',\n          'role': 'listbox',\n          'aria-hidden': 'false'\n        });\n      }\n\n      if (this.initRemoteRender) {\n        this.initial = true;\n        this.activeIndex = this.index;\n        this.updateValues();\n        this.initRemoteRender = false;\n        this.initial = false;\n\n        if (this.value && this.dataSource instanceof DataManager) {\n          var checkField_1 = isNullOrUndefined(this.fields.value) ? this.fields.text : this.fields.value;\n          var checkVal = list.some(function (x) {\n            return x[checkField_1] === _this.value;\n          });\n\n          if (!checkVal) {\n            this.dataSource.executeQuery(this.getQuery(this.query).where(new Predicate(checkField_1, 'equal', this.value))).then(function (e) {\n              if (e.result.length > 0) {\n                _this.addItem(e.result, list.length);\n\n                _this.updateValues();\n              }\n            });\n          }\n        }\n      }\n\n      if (this.getModuleName() !== 'autocomplete' && this.isFiltering() && !this.isTyped) {\n        if (!this.actionCompleteData.isUpdated || !this.isCustomFilter && !this.isFilterFocus || isNullOrUndefined(this.itemData) && this.allowFiltering && (this.dataSource instanceof DataManager || !isNullOrUndefined(this.dataSource) && !isNullOrUndefined(this.dataSource.length) && 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          } else {\n            this.updateActionCompleteDataValues(ulElement, list);\n          }\n        }\n\n        this.addNewItem(list, selectedItem);\n\n        if (!isNullOrUndefined(this.itemData)) {\n          this.focusIndexItem();\n        }\n      }\n\n      if (this.beforePopupOpen) {\n        this.renderPopup();\n      }\n    }\n  };\n\n  DropDownList.prototype.updateActionCompleteDataValues = function (ulElement, list) {\n    this.actionCompleteData = {\n      ulElement: ulElement.cloneNode(true),\n      list: list,\n      isUpdated: true\n    };\n\n    if (isNullOrUndefined(this.actionData.ulElement) && isNullOrUndefined(this.actionData.list)) {\n      this.actionData = this.actionCompleteData;\n    }\n  };\n\n  DropDownList.prototype.addNewItem = function (listData, newElement) {\n    var _this = this;\n\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 || getValue(_this.fields.value, data) === value_1;\n      });\n\n      if (!isExist) {\n        this.addItem(this.itemData);\n      }\n    }\n  };\n\n  DropDownList.prototype.updateActionCompleteData = function (li, item, index) {\n    var _this = this;\n\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      } else {\n        this.actionCompleteDataUpdate(li, item, index);\n      }\n    }\n  };\n\n  DropDownList.prototype.actionCompleteDataUpdate = function (li, item, index) {\n    if (index != null) {\n      this.actionCompleteData.ulElement.insertBefore(li.cloneNode(true), this.actionCompleteData.ulElement.childNodes[index]);\n    } else {\n      this.actionCompleteData.ulElement.appendChild(li.cloneNode(true));\n    }\n\n    if (this.isFiltering() && this.actionCompleteData.list.indexOf(item) < 0) {\n      this.actionCompleteData.list.push(item);\n    }\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\n  DropDownList.prototype.updateSelection = function () {\n    var selectedItem = this.list.querySelector('.' + dropDownBaseClasses.selected);\n\n    if (selectedItem) {\n      this.setProperties({\n        'index': this.getIndexByValue(selectedItem.getAttribute('data-value'))\n      });\n      this.activeIndex = this.index;\n    } else {\n      this.removeFocus();\n      this.list.querySelector('.' + dropDownBaseClasses.li).classList.add(dropDownListClasses.focus);\n    }\n  };\n\n  DropDownList.prototype.removeFocus = function () {\n    var highlightedItem = this.list.querySelectorAll('.' + dropDownListClasses.focus);\n\n    if (highlightedItem && highlightedItem.length) {\n      removeClass(highlightedItem, dropDownListClasses.focus);\n    }\n  };\n\n  DropDownList.prototype.renderPopup = function () {\n    var _this = this;\n\n    if (this.popupObj && document.body.contains(this.popupObj.element)) {\n      this.refreshPopup();\n      return;\n    }\n\n    var args = {\n      cancel: false\n    };\n    this.trigger('beforeOpen', args, function (args) {\n      if (!args.cancel) {\n        var popupEle = _this.serverPopupEle ? _this.serverPopupEle : _this.createElement('div', {\n          id: _this.element.id + '_popup',\n          className: 'e-ddl e-popup ' + (_this.cssClass != null ? _this.cssClass : '')\n        });\n\n        var searchBox = _this.setSearchBox(popupEle);\n\n        _this.listHeight = formatUnit(_this.popupHeight);\n\n        if (_this.headerTemplate && !_this.isServerBlazor) {\n          _this.setHeaderTemplate(popupEle);\n        }\n\n        append([_this.list], popupEle);\n\n        if (_this.footerTemplate && !_this.isServerBlazor) {\n          _this.setFooterTemplate(popupEle);\n        }\n\n        if (_this.isServerRendered && popupEle && popupEle.querySelector('.e-ddl-footer')) {\n          popupEle.appendChild(popupEle.querySelector('.e-ddl-footer'));\n        }\n\n        document.body.appendChild(popupEle);\n\n        _this.updateServerPopup(popupEle);\n\n        popupEle.style.visibility = 'hidden';\n\n        if (_this.popupHeight !== 'auto') {\n          _this.searchBoxHeight = 0;\n\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\n          if (_this.headerTemplate || _this.isServerRendered && popupEle && popupEle.querySelector('.e-ddl-header')) {\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\n          if (_this.footerTemplate || _this.isServerRendered && popupEle && popupEle.querySelector('.e-ddl-footer')) {\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\n          _this.list.style.maxHeight = (parseInt(_this.listHeight, 10) - 2).toString() + 'px'; // due to box-sizing property\n\n          popupEle.style.maxHeight = formatUnit(_this.popupHeight);\n        } else {\n          popupEle.style.height = 'auto';\n        }\n\n        var offsetValue = 0;\n        var left = void 0;\n\n        if (!isNullOrUndefined(_this.selectedLI) && !isNullOrUndefined(_this.activeIndex) && _this.activeIndex >= 0) {\n          _this.setScrollPosition();\n        } else {\n          _this.list.scrollTop = 0;\n        }\n\n        if (Browser.isDevice && !_this.allowFiltering && (_this.getModuleName() === 'dropdownlist' || _this.isDropDownClick && _this.getModuleName() === 'combobox')) {\n          offsetValue = _this.getOffsetValue(popupEle);\n          var firstItem = _this.isEmptyList() ? _this.list : _this.liCollections[0];\n          left = -(parseInt(getComputedStyle(firstItem).textIndent, 10) - parseInt(getComputedStyle(_this.inputElement).paddingLeft, 10) + parseInt(getComputedStyle(_this.inputElement.parentElement).borderLeftWidth, 10));\n        }\n\n        _this.getFocusElement();\n\n        _this.createPopup(popupEle, offsetValue, left);\n\n        _this.checkCollision(popupEle);\n\n        if (Browser.isDevice) {\n          _this.popupObj.element.classList.add(dropDownListClasses.device);\n\n          if (_this.getModuleName() === 'dropdownlist' || _this.getModuleName() === 'combobox' && !_this.allowFiltering && _this.isDropDownClick) {\n            _this.popupObj.collision = {\n              X: 'fit',\n              Y: 'fit'\n            };\n          }\n\n          if (_this.isFilterLayout()) {\n            _this.popupObj.element.classList.add(dropDownListClasses.mobileFilter);\n\n            _this.popupObj.position = {\n              X: 0,\n              Y: 0\n            };\n\n            _this.popupObj.dataBind();\n\n            attributes(_this.popupObj.element, {\n              style: 'left:0px;right:0px;top:0px;bottom:0px;'\n            });\n            addClass([document.body, _this.popupObj.element], dropDownListClasses.popupFullScreen);\n\n            _this.setSearchBoxPosition();\n\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\n        popupEle.style.visibility = 'visible';\n        addClass([popupEle], 'e-popup-close');\n\n        var scrollParentElements = _this.popupObj.getScrollableParent(_this.inputWrapper.container);\n\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\n        if (Browser.isDevice && _this.isFilterLayout()) {\n          EventHandler.add(_this.list, 'scroll', _this.listScroll, _this);\n        }\n\n        if (!isNullOrUndefined(_this.list)) {\n          _this.unWireListEvents();\n\n          _this.wireListEvents();\n        }\n\n        attributes(_this.targetElement(), {\n          'aria-expanded': 'true'\n        });\n        var inputParent = _this.isFiltering() ? _this.filterInput.parentElement : _this.inputWrapper.container;\n        addClass([inputParent], [dropDownListClasses.inputFocus]);\n        var animModel = {\n          name: 'FadeIn',\n          duration: 100\n        };\n        _this.beforePopupOpen = true;\n        var popupInstance = isBlazor() && _this.isServerRendered ? null : _this.popupObj;\n        var eventArgs = {\n          popup: popupInstance,\n          cancel: false,\n          animation: animModel\n        };\n\n        _this.trigger('open', eventArgs, function (eventArgs) {\n          if (!eventArgs.cancel) {\n            _this.serverBlazorUpdateSelection();\n\n            _this.bindServerScrollEvent();\n\n            addClass([_this.inputWrapper.container], [dropDownListClasses.iconAnimation]);\n\n            _this.renderReactTemplates();\n\n            _this.popupObj.show(new Animation(eventArgs.animation), _this.zIndex === 1000 ? _this.element : null);\n          } else {\n            _this.beforePopupOpen = false;\n\n            _this.destroyPopup();\n          }\n        });\n      } else {\n        _this.beforePopupOpen = false;\n      }\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\n      if (collision.length > 0) {\n        popupEle.style.marginTop = -parseInt(getComputedStyle(popupEle).marginTop, 10) + 'px';\n      }\n\n      this.popupObj.resolveCollision();\n    }\n  };\n\n  DropDownList.prototype.serverBlazorUpdateSelection = function () {\n    if (this.isServerBlazor && (this.value !== null || this.index !== null || this.text !== null) || this.getModuleName() !== 'dropdownlist' && !this.isTyped) {\n      if (this.getModuleName() === 'dropdownlist') {\n        this.removeSelection();\n        this.removeFocus();\n        this.removeHover();\n        this.updateValues();\n      }\n\n      if (this.getModuleName() === 'combobox' && this.ulElement && this.findListElement(this.ulElement, 'li', 'data-value', this.value) && !this.isTyped) {\n        this.updateValues();\n      }\n\n      if (this.isServerBlazor && this.getModuleName() !== 'dropdownlist' && (this.text === '' || this.text === null) && this.ulElement) {\n        if (!this.ulElement.querySelector('li').classList.contains(dropDownBaseClasses.hover)) {\n          addClass([this.ulElement.querySelector('li')], dropDownBaseClasses.hover);\n        }\n      }\n    }\n  };\n\n  DropDownList.prototype.bindServerScrollEvent = function () {\n    if (this.isServerBlazor && this.list) {\n      if (this.fields.groupBy && !this.isGroupChecking) {\n        EventHandler.remove(this.list, 'scroll', this.setFloatingHeader);\n        EventHandler.add(this.list, 'scroll', this.setFloatingHeader, this);\n      }\n    }\n  };\n\n  DropDownList.prototype.updateServerPopup = function (popupEle) {\n    if (this.isServerBlazor) {\n      if (popupEle && popupEle.querySelector('li')) {\n        removeClass([popupEle.querySelector('.e-content')], ['e-nodata']);\n      }\n\n      this.initial = false;\n      popupEle.removeAttribute('style');\n    }\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\n  DropDownList.prototype.createPopup = function (element, offsetValue, left) {\n    var _this = this;\n\n    this.popupObj = new Popup(element, {\n      width: this.setWidth(),\n      targetType: 'relative',\n      relateTo: this.inputWrapper.container,\n      collision: {\n        X: 'flip',\n        Y: 'flip'\n      },\n      offsetY: offsetValue,\n      enableRtl: this.enableRtl,\n      offsetX: left,\n      position: {\n        X: 'left',\n        Y: 'bottom'\n      },\n      zIndex: this.zIndex,\n      close: function close() {\n        if (!_this.isDocumentClick) {\n          _this.focusDropDown();\n        } // eslint-disable-next-line\n\n\n        if (_this.isReact) {\n          _this.clearTemplate(['headerTemplate', 'footerTemplate']);\n        }\n\n        var isResetItem = _this.getModuleName() === 'autocomplete' ? true : false;\n\n        _this.DropDownBaseresetBlazorTemplates(isResetItem, isResetItem, true, true, false, true, true);\n\n        _this.isNotSearchList = false;\n        _this.isDocumentClick = false;\n\n        _this.destroyPopup();\n\n        if (_this.isFiltering() && _this.actionCompleteData.list && _this.actionCompleteData.list[0]) {\n          _this.isActive = true;\n\n          _this.onActionComplete(_this.actionCompleteData.ulElement, _this.actionCompleteData.list, null, true);\n        }\n      },\n      open: function open() {\n        EventHandler.add(document, 'mousedown', _this.onDocumentClick, _this);\n        _this.isPopupOpen = true;\n\n        var actionList = _this.actionCompleteData && _this.actionCompleteData.ulElement && _this.actionCompleteData.ulElement.querySelector('li');\n\n        var ulElement = _this.list.querySelector('ul li');\n\n        if (_this.isFiltering() && _this.itemTemplate && _this.element.tagName === _this.getNgDirective() && actionList && ulElement && actionList.textContent !== ulElement.textContent && _this.element.tagName !== 'EJS-COMBOBOX') {\n          _this.cloneElements();\n        }\n\n        if (_this.isFilterLayout()) {\n          removeClass([_this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n          _this.isFilterFocus = true;\n\n          _this.filterInput.focus();\n\n          if (_this.inputWrapper.clearButton) {\n            addClass([_this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n          }\n        }\n\n        _this.activeStateChange();\n      },\n      targetExitViewport: function targetExitViewport() {\n        if (!Browser.isDevice) {\n          _this.hidePopup();\n        }\n      }\n    });\n  };\n\n  DropDownList.prototype.isEmptyList = function () {\n    return !isNullOrUndefined(this.liCollections) && this.liCollections.length === 0;\n  };\n\n  DropDownList.prototype.getFocusElement = function () {// combo-box used this method\n  };\n\n  DropDownList.prototype.isFilterLayout = function () {\n    return this.getModuleName() === 'dropdownlist' && this.allowFiltering;\n  };\n\n  DropDownList.prototype.scrollHandler = function () {\n    if (Browser.isDevice && (this.getModuleName() === 'dropdownlist' && !this.isFilterLayout() || this.getModuleName() === 'combobox' && !this.allowFiltering && this.isDropDownClick)) {\n      this.hidePopup();\n    }\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\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\n    if (lastItemOffsetValue - listHeight < height && !isNullOrUndefined(this.liCollections) && 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    } else if (height > listHeight) {\n      offsetValue = listHeight - liHeight / 2;\n      this.list.scrollTop = height - listHeight + liHeight / 2;\n    } else {\n      offsetValue = height;\n    }\n\n    var inputHeight = this.inputWrapper.container.offsetHeight;\n    offsetValue = offsetValue + liHeight + popupOffset - (liHeight - inputHeight) / 2;\n    return -offsetValue;\n  };\n\n  DropDownList.prototype.setWidth = function () {\n    var width = formatUnit(this.popupWidth);\n\n    if (width.indexOf('%') > -1) {\n      var inputWidth = this.inputWrapper.container.offsetWidth * parseFloat(width) / 100;\n      width = inputWidth.toString() + 'px';\n    }\n\n    if (Browser.isDevice && !this.allowFiltering && (this.getModuleName() === 'dropdownlist' || 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) - parseInt(getComputedStyle(this.inputElement).paddingLeft, 10) + parseInt(getComputedStyle(this.inputElement.parentElement).borderLeftWidth, 10)) * 2 + 'px';\n    }\n\n    return width;\n  };\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) ? boxRange - this.fixedHeaderElement.offsetHeight : boxRange;\n\n      if (this.activeIndex === 0) {\n        this.list.scrollTop = 0;\n      } else if (nextBottom > currentOffset || !(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n        this.list.scrollTop = nextOffset;\n      }\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) ? nextOffset - this.fixedHeaderElement.offsetHeight : nextOffset;\n      var boxRange = this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop;\n\n      if (this.activeIndex === 0) {\n        this.list.scrollTop = 0;\n      } else if (nextOffset < 0) {\n        this.list.scrollTop = this.list.scrollTop + nextOffset;\n      } else if (!(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n        this.list.scrollTop = this.selectedLI.offsetTop - (this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ? this.fixedHeaderElement.offsetHeight : 0);\n      }\n    }\n  };\n\n  DropDownList.prototype.isEditTextBox = function () {\n    return false;\n  };\n\n  DropDownList.prototype.isFiltering = function () {\n    return this.allowFiltering;\n  };\n\n  DropDownList.prototype.isPopupButton = function () {\n    return true;\n  };\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\n        default:\n          this.scrollTop();\n          break;\n      }\n    } else {\n      this.scrollBottom(true);\n    }\n  };\n\n  DropDownList.prototype.clearText = function () {\n    this.filterInput.value = this.typedString = '';\n    this.searchLists(null);\n  };\n\n  DropDownList.prototype.listScroll = function () {\n    this.filterInput.blur();\n  };\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      } else if (typeof width === 'string') {\n        this.inputWrapper.container.style.width = width.match(/px|%|em/) ? width : formatUnit(width);\n      }\n    }\n  };\n\n  DropDownList.prototype.closePopup = function (delay) {\n    var _this = this;\n\n    this.isTyped = false;\n\n    if (!(this.popupObj && document.body.contains(this.popupObj.element) && this.beforePopupOpen)) {\n      return;\n    }\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\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\n    if (Browser.isDevice && this.isFilterLayout()) {\n      removeClass([document.body, this.popupObj.element], dropDownListClasses.popupFullScreen);\n      EventHandler.remove(this.list, 'scroll', this.listScroll);\n    }\n\n    if (this.isFilterLayout()) {\n      if (!Browser.isDevice) {\n        this.searchKeyModule.destroy();\n\n        if (this.clearIconElement) {\n          EventHandler.remove(this.clearIconElement, 'click', this.clearText);\n        }\n      }\n\n      if (this.backIconElement) {\n        EventHandler.remove(this.backIconElement, 'click', this.clickOnBackIcon);\n        EventHandler.remove(this.clearIconElement, 'click', this.clearText);\n      }\n\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.onBlur);\n      EventHandler.remove(this.filterInput, 'paste', this.pasteHandler);\n      this.filterInput = null;\n    }\n\n    attributes(this.targetElement(), {\n      'aria-expanded': 'false',\n      'aria-activedescendant': null\n    });\n    this.inputWrapper.container.classList.remove(dropDownListClasses.iconAnimation);\n\n    if (this.isFiltering()) {\n      this.actionCompleteData.isUpdated = false;\n    }\n\n    this.beforePopupOpen = false;\n    var animModel = {\n      name: 'FadeOut',\n      duration: 100,\n      delay: delay ? delay : 0\n    };\n    var popupInstance = isBlazor() && this.isServerRendered ? null : this.popupObj;\n    var eventArgs = {\n      popup: popupInstance,\n      cancel: false,\n      animation: animModel\n    };\n    this.trigger('close', eventArgs, function (eventArgs) {\n      if (!isNullOrUndefined(_this.popupObj) && !isNullOrUndefined(_this.popupObj.element.querySelector('.e-fixed-head'))) {\n        var fixedHeader = _this.popupObj.element.querySelector('.e-fixed-head');\n\n        fixedHeader.parentNode.removeChild(fixedHeader);\n        _this.fixedHeaderElement = null;\n      }\n\n      if (!eventArgs.cancel) {\n        if (_this.getModuleName() === 'autocomplete' && !_this.isServerBlazor) {\n          _this.rippleFun();\n        }\n\n        if (_this.isPopupOpen) {\n          _this.popupObj.hide(new Animation(eventArgs.animation));\n        } else {\n          _this.destroyPopup();\n        }\n      }\n    });\n  };\n\n  DropDownList.prototype.destroyPopup = function () {\n    var popupHolderEle = select('#' + this.element.id + '_popup_holder', document);\n\n    if (this.isServerBlazor && this.serverPopupEle && popupHolderEle) {\n      popupHolderEle.appendChild(this.serverPopupEle); // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n      this.interopAdaptor.invokeMethodAsync('OnServerClosePopup');\n    }\n\n    this.isPopupOpen = false;\n    this.isFilterFocus = false;\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\n\n  DropDownList.prototype.render = function () {\n    if (this.isServerBlazor) {\n      this.inputElement = this.element;\n      this.inputWrapper = {\n        container: this.element.parentElement\n      };\n      this.hiddenElement = this.inputWrapper.container.querySelector('select');\n      this.inputWrapper.buttons = [this.inputWrapper.container.querySelector('.e-input-group-icon.e-ddl-icon')];\n\n      if (this.showClearButton) {\n        this.inputWrapper.clearButton = this.inputWrapper.container.querySelector('.e-clear-icon');\n        Input.wireClearBtnEvents(this.element, this.inputWrapper.clearButton, this.inputWrapper.container);\n      }\n\n      if (this.floatLabelType === 'Auto') {\n        Input.wireFloatingEvents(this.element);\n      }\n\n      Input.bindInitialEvent({\n        element: this.element,\n        buttons: null,\n        customTag: null,\n        floatLabelType: this.floatLabelType,\n        properties: this.properties\n      });\n      this.setFields();\n      this.wireEvent();\n      this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n\n      if (!this.enabled) {\n        this.targetElement().tabIndex = -1;\n      }\n\n      if (this.element.hasAttribute('autofocus')) {\n        this.focusIn();\n      }\n\n      this.initial = false;\n    } else {\n      if (this.element.tagName === 'INPUT') {\n        this.inputElement = this.element;\n\n        if (isNullOrUndefined(this.inputElement.getAttribute('role'))) {\n          this.inputElement.setAttribute('role', 'textbox');\n        }\n\n        if (isNullOrUndefined(this.inputElement.getAttribute('type'))) {\n          this.inputElement.setAttribute('type', 'text');\n        }\n      } else {\n        this.inputElement = this.createElement('input', {\n          attrs: {\n            role: 'textbox',\n            type: 'text'\n          }\n        });\n\n        if (this.element.tagName !== this.getNgDirective()) {\n          this.element.style.display = 'none';\n        }\n\n        this.element.parentElement.insertBefore(this.inputElement, this.element);\n        this.preventTabIndex(this.inputElement);\n      }\n\n      var updatedCssClassValues = this.cssClass;\n\n      if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n        updatedCssClassValues = this.cssClass.replace(/\\s+/g, ' ').trim();\n      }\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\n      if (this.element.tagName === this.getNgDirective()) {\n        this.element.appendChild(this.inputWrapper.container);\n      } else {\n        this.inputElement.parentElement.insertBefore(this.element, this.inputElement);\n      }\n\n      this.hiddenElement = this.createElement('select', {\n        attrs: {\n          'aria-hidden': 'true',\n          'tabindex': '-1',\n          'class': dropDownListClasses.hiddenElement\n        }\n      });\n      prepend([this.hiddenElement], this.inputWrapper.container);\n      this.validationAttribute(this.element, this.hiddenElement);\n      this.setFields();\n      this.inputWrapper.container.style.width = formatUnit(this.width);\n      this.inputWrapper.container.classList.add('e-ddl');\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      attributes(this.targetElement(), this.getAriaAttributes());\n      this.updateDataAttribute(this.htmlAttributes);\n      this.setHTMLAttributes();\n\n      if (this.value !== null || this.activeIndex !== null || this.text !== null) {\n        this.initValue();\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\n      this.preventTabIndex(this.element);\n\n      if (!this.enabled) {\n        this.targetElement().tabIndex = -1;\n      }\n\n      this.initial = false;\n      this.element.style.opacity = '';\n\n      this.inputElement.onselect = function (e) {\n        e.stopImmediatePropagation();\n      };\n\n      this.inputElement.onchange = function (e) {\n        e.stopImmediatePropagation();\n      };\n\n      if (this.element.hasAttribute('autofocus')) {\n        this.focusIn();\n      }\n\n      if (!isNullOrUndefined(this.text)) {\n        this.inputElement.setAttribute('value', this.text);\n      }\n    }\n\n    if (this.element.hasAttribute('data-val')) {\n      this.element.setAttribute('data-val', 'false');\n    }\n\n    this.renderComplete();\n  };\n\n  DropDownList.prototype.setFooterTemplate = function (popupEle) {\n    var compiledString;\n\n    if (this.footer) {\n      this.footer.innerHTML = '';\n    } else {\n      this.footer = this.createElement('div');\n      addClass([this.footer], dropDownListClasses.footer);\n    }\n\n    var footercheck = this.dropdownCompiler(this.footerTemplate);\n\n    if (footercheck) {\n      compiledString = compile(select(this.footerTemplate, document).innerHTML.trim());\n    } else {\n      compiledString = compile(this.footerTemplate);\n    } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\n    var footerCompTemp = compiledString({}, this, 'footerTemplate', this.footerTemplateId, this.isStringTemplate, null, this.footer);\n\n    if (footerCompTemp && footerCompTemp.length > 0) {\n      for (var i = 0; i < footerCompTemp.length; i++) {\n        this.footer.appendChild(footerCompTemp[i]);\n      }\n    }\n\n    this.DropDownBaseupdateBlazorTemplates(false, false, false, false, false, false, true);\n    append([this.footer], popupEle);\n  };\n\n  DropDownList.prototype.setHeaderTemplate = function (popupEle) {\n    var compiledString;\n\n    if (this.header) {\n      this.header.innerHTML = '';\n    } else {\n      this.header = this.createElement('div');\n      addClass([this.header], dropDownListClasses.header);\n    }\n\n    var headercheck = this.dropdownCompiler(this.headerTemplate);\n\n    if (headercheck) {\n      compiledString = compile(select(this.headerTemplate, document).innerHTML.trim());\n    } else {\n      compiledString = compile(this.headerTemplate);\n    } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\n    var headerCompTemp = compiledString({}, this, 'headerTemplate', this.headerTemplateId, this.isStringTemplate, null, this.header);\n\n    if (headerCompTemp && headerCompTemp.length) {\n      for (var i = 0; i < headerCompTemp.length; i++) {\n        this.header.appendChild(headerCompTemp[i]);\n      }\n    }\n\n    this.DropDownBaseupdateBlazorTemplates(false, false, false, false, false, true, false);\n    var contentEle = popupEle.querySelector('div.e-content');\n    popupEle.insertBefore(this.header, contentEle);\n  };\n\n  DropDownList.prototype.setOldText = function (text) {\n    this.text = text;\n  };\n\n  DropDownList.prototype.setOldValue = function (value) {\n    this.value = value;\n  };\n\n  DropDownList.prototype.refreshPopup = function () {\n    if (!isNullOrUndefined(this.popupObj) && document.body.contains(this.popupObj.element) && (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\n  DropDownList.prototype.checkData = function (newProp) {\n    if (newProp.dataSource && !isNullOrUndefined(Object.keys(newProp.dataSource)) && this.itemTemplate && this.allowFiltering && !(this.isListSearched && newProp.dataSource instanceof DataManager)) {\n      this.list = null;\n      this.actionCompleteData = {\n        ulElement: null,\n        list: null,\n        isUpdated: false\n      };\n    }\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\n    if (this.getModuleName() !== 'autocomplete' && this.allowFiltering && (isChangeValue || isChangeText)) {\n      this.itemData = null;\n    }\n\n    if (this.allowFiltering && newProp.dataSource && !isNullOrUndefined(Object.keys(newProp.dataSource))) {\n      this.actionCompleteData = {\n        ulElement: null,\n        list: null,\n        isUpdated: false\n      };\n      this.actionData = this.actionCompleteData;\n    } else if (this.allowFiltering && newProp.query && !isNullOrUndefined(Object.keys(newProp.query))) {\n      this.actionData = this.actionCompleteData;\n    }\n  };\n\n  DropDownList.prototype.updateDataSource = function (props) {\n    if (this.inputElement.value !== '' || !isNullOrUndefined(props) && (isNullOrUndefined(props.dataSource) || !(props.dataSource instanceof DataManager) && props.dataSource.length === 0)) {\n      this.clearAll(null, props);\n    }\n\n    if (!(!isNullOrUndefined(props) && (isNullOrUndefined(props.dataSource) || !(props.dataSource instanceof DataManager) && props.dataSource.length === 0)) || !(props.dataSource === [])) {\n      this.typedString = '';\n      this.resetList(this.dataSource);\n    }\n\n    if (!this.isCustomFilter && !this.isFilterFocus && document.activeElement !== this.filterInput) {\n      this.checkCustomValue();\n    }\n  };\n\n  DropDownList.prototype.checkCustomValue = function () {\n    this.itemData = this.getDataByValue(this.value);\n    var dataItem = this.getItemData();\n    this.setProperties({\n      'value': dataItem.value,\n      'text': dataItem.text\n    });\n  };\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\n\n  DropDownList.prototype.onPropertyChanged = function (newProp, oldProp) {\n    if (this.getModuleName() === 'dropdownlist') {\n      if (!this.isServerBlazor) {\n        this.checkData(newProp);\n        this.setUpdateInitial(['fields', 'query', 'dataSource'], newProp);\n      }\n    }\n\n    for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n      var prop = _a[_i];\n\n      switch (prop) {\n        case 'query':\n        case 'dataSource':\n          break;\n\n        case 'htmlAttributes':\n          this.setHTMLAttributes();\n          break;\n\n        case 'width':\n          this.setEleWidth(newProp.width);\n          break;\n\n        case 'placeholder':\n          Input.setPlaceholder(newProp.placeholder, this.inputElement);\n          break;\n\n        case 'filterBarPlaceholder':\n          if (this.filterInput) {\n            Input.setPlaceholder(newProp.filterBarPlaceholder, this.filterInput);\n          }\n\n          break;\n\n        case 'readonly':\n          if (this.getModuleName() !== 'dropdownlist') {\n            Input.setReadonly(newProp.readonly, this.inputElement);\n          }\n\n          break;\n\n        case 'cssClass':\n          this.setCssClass(newProp.cssClass, oldProp.cssClass);\n          break;\n\n        case 'enableRtl':\n          this.setEnableRtl();\n          break;\n\n        case 'enabled':\n          this.setEnable();\n          break;\n\n        case 'text':\n          if (newProp.text === null) {\n            this.clearAll();\n            break;\n          }\n\n          if (!this.list) {\n            if (this.dataSource instanceof DataManager) {\n              this.initRemoteRender = true;\n            }\n\n            this.renderList();\n          }\n\n          if (!this.initRemoteRender) {\n            var li = this.getElementByText(newProp.text);\n\n            if (!this.checkValidLi(li)) {\n              if (this.liCollections && this.liCollections.length === 100 && this.getModuleName() === 'autocomplete' && this.listData.length > 100) {\n                this.setSelectionData(newProp.text, oldProp.text, 'text');\n              } else if (!this.isServerBlazor) {\n                this.setOldText(oldProp.text);\n              }\n            }\n\n            this.updateInputFields();\n          }\n\n          break;\n\n        case 'value':\n          if (newProp.value === null) {\n            this.clearAll();\n            break;\n          }\n\n          this.notify('beforeValueChange', {\n            newProp: newProp\n          }); // gird component value type change\n\n          if (!this.list) {\n            if (this.dataSource instanceof DataManager) {\n              this.initRemoteRender = true;\n            }\n\n            this.renderList();\n          }\n\n          if (!this.initRemoteRender) {\n            var item = this.getElementByValue(newProp.value);\n\n            if (!this.checkValidLi(item)) {\n              if (this.liCollections && this.liCollections.length === 100 && this.getModuleName() === 'autocomplete' && this.listData.length > 100) {\n                this.setSelectionData(newProp.value, oldProp.value, 'value');\n              } else if (!this.isServerBlazor) {\n                this.setOldValue(oldProp.value);\n              }\n            }\n\n            this.updateInputFields();\n            this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n          }\n\n          break;\n\n        case 'index':\n          if (newProp.index === null) {\n            this.clearAll();\n            break;\n          }\n\n          if (!this.list) {\n            if (this.dataSource instanceof DataManager) {\n              this.initRemoteRender = true;\n            }\n\n            this.renderList();\n          }\n\n          if (!this.initRemoteRender && this.liCollections) {\n            var element = this.liCollections[newProp.index];\n\n            if (!this.checkValidLi(element)) {\n              if (this.liCollections && this.liCollections.length === 100 && this.getModuleName() === 'autocomplete' && this.listData.length > 100) {\n                this.setSelectionData(newProp.index, oldProp.index, 'index');\n              } else if (!this.isServerBlazor) {\n                this.index = oldProp.index;\n              }\n            }\n\n            this.updateInputFields();\n          }\n\n          break;\n\n        case 'footerTemplate':\n          if (this.popupObj) {\n            this.setFooterTemplate(this.popupObj.element);\n          }\n\n          break;\n\n        case 'headerTemplate':\n          if (this.popupObj) {\n            this.setHeaderTemplate(this.popupObj.element);\n          }\n\n          break;\n\n        case 'valueTemplate':\n          if (!isNullOrUndefined(this.itemData) && this.valueTemplate != null) {\n            this.setValueTemplate();\n          }\n\n          break;\n\n        case 'allowFiltering':\n          if (this.allowFiltering) {\n            this.actionCompleteData = {\n              ulElement: this.ulElement,\n              list: this.listData,\n              isUpdated: true\n            };\n            this.actionData = this.actionCompleteData;\n            this.updateSelectElementData(this.allowFiltering);\n          }\n\n          break;\n\n        case 'floatLabelType':\n          Input.removeFloating(this.inputWrapper);\n          Input.addFloating(this.inputElement, newProp.floatLabelType, this.placeholder, this.createElement);\n          break;\n\n        case 'showClearButton':\n          Input.setClearButton(newProp.showClearButton, this.inputElement, this.inputWrapper, null, this.createElement);\n          this.bindClearEvent();\n          break;\n\n        default:\n          {\n            // eslint-disable-next-line max-len\n            var ddlProps = this.getPropObject(prop, newProp, oldProp);\n\n            _super.prototype.onPropertyChanged.call(this, ddlProps.newProperty, ddlProps.oldProperty);\n          }\n          break;\n      }\n    }\n  };\n\n  DropDownList.prototype.checkValidLi = function (element) {\n    if (this.isValidLI(element)) {\n      this.setSelection(element, null);\n      return true;\n    }\n\n    return false;\n  };\n\n  DropDownList.prototype.setSelectionData = function (newProp, oldProp, prop) {\n    var _this = this;\n\n    var li;\n\n    this.updateListValues = function () {\n      if (prop === 'text') {\n        li = _this.getElementByText(newProp);\n\n        if (!_this.checkValidLi(li)) {\n          _this.setOldText(oldProp);\n        }\n      } else if (prop === 'value') {\n        li = _this.getElementByValue(newProp);\n\n        if (!_this.checkValidLi(li)) {\n          _this.setOldValue(oldProp);\n        }\n      } else if (prop === 'index') {\n        li = _this.liCollections[newProp];\n\n        if (!_this.checkValidLi(li)) {\n          _this.index = oldProp;\n        }\n      }\n    };\n  };\n\n  DropDownList.prototype.setCssClass = function (newClass, oldClass) {\n    if (!isNullOrUndefined(oldClass)) {\n      oldClass = oldClass.replace(/\\s+/g, ' ').trim();\n    }\n\n    if (!isNullOrUndefined(newClass)) {\n      newClass = newClass.replace(/\\s+/g, ' ').trim();\n    }\n\n    Input.setCssClass(newClass, [this.inputWrapper.container], oldClass);\n\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\n\n  DropDownList.prototype.getModuleName = function () {\n    return 'dropdownlist';\n  };\n  /**\n   * Opens the popup that displays the list of items.\n   *\n   * @returns {void}\n   */\n\n\n  DropDownList.prototype.showPopup = function () {\n    if (!this.enabled) {\n      return;\n    }\n\n    if (isBlazor() && this.itemTemplate) {\n      this.DropDownBaseupdateBlazorTemplates(true, false, false, false);\n    }\n\n    if (this.isFiltering() && this.dataSource instanceof DataManager && this.actionData.list != this.actionCompleteData.list && this.actionData.list && this.actionData.ulElement) {\n      this.actionCompleteData = this.actionData;\n      this.onActionComplete(this.actionCompleteData.ulElement, this.actionCompleteData.list, null, true);\n    }\n\n    if (this.beforePopupOpen) {\n      this.refreshPopup();\n      return;\n    }\n\n    this.beforePopupOpen = true;\n\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    } else if (isNullOrUndefined(this.list) || !isUndefined(this.list) && (this.list.classList.contains(dropDownBaseClasses.noData) || this.list.querySelectorAll('.' + dropDownBaseClasses.li).length <= 0)) {\n      this.renderList();\n    } else if (this.isFiltering() && this.isServerBlazor) {\n      this.renderList();\n    }\n\n    if (!this.isServerBlazor) {\n      this.invokeRenderPopup();\n    }\n\n    var popupHolderEle = !this.isFiltering() || select('#' + this.element.id + '_popup_holder', document);\n    var isDropdownComp = this.getModuleName() === 'dropdownlist' || !this.isFiltering();\n\n    if (this.isServerBlazor && popupHolderEle && !isNullOrUndefined(this.list) && isDropdownComp) {\n      this.invokeRenderPopup();\n    }\n  };\n\n  DropDownList.prototype.invokeRenderPopup = function () {\n    if (Browser.isDevice && this.isFilterLayout()) {\n      // eslint-disable-next-line @typescript-eslint/no-this-alias\n      var proxy_2 = this;\n\n      window.onpopstate = function () {\n        proxy_2.hidePopup();\n      };\n\n      history.pushState({}, '');\n    }\n\n    if (!isNullOrUndefined(this.list.children[0]) || this.list.classList.contains(dropDownBaseClasses.noData)) {\n      this.renderPopup();\n    }\n\n    attributes(this.targetElement(), {\n      'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null\n    });\n  };\n\n  DropDownList.prototype.clientRenderPopup = function (data, popupEle) {\n    if (popupEle) {\n      this.serverPopupEle = popupEle;\n      this.list = popupEle.querySelector('.e-dropdownbase.e-content') ? popupEle.querySelector('.e-dropdownbase.e-content') : this.list;\n      this.ulElement = this.list.querySelector('ul');\n\n      if (isNullOrUndefined(this.ulElement) && !this.list.classList.contains(dropDownBaseClasses.noData)) {\n        addClass([this.list], [dropDownBaseClasses.noData]);\n      }\n\n      this.liCollections = this.ulElement ? this.ulElement.querySelectorAll('.' + dropDownBaseClasses.li) : [];\n      this.listData = data;\n\n      if (this.getModuleName() === 'autocomplete' && this.liCollections.length > 0) {\n        this.renderHightSearch();\n      }\n\n      this.initRemoteRender = false;\n\n      if (!this.isPopupOpen) {\n        this.serverBlazorUpdateSelection();\n      }\n\n      this.unWireListEvents();\n      this.wireListEvents();\n\n      if (this.isServerIncrementalSearch && this.searchKeyEvent) {\n        this.isServerIncrementalSearch = false;\n        this.initial = false;\n        this.onServerIncrementalSearch(this.searchKeyEvent);\n      }\n\n      if (this.isServerNavigation && this.searchKeyEvent) {\n        if (this.searchKeyEvent.action === 'down' || this.searchKeyEvent.action === 'up') {\n          this.isServerNavigation = false;\n          this.updateUpDownAction(this.searchKeyEvent);\n        } else if (this.searchKeyEvent.action === 'home' || this.searchKeyEvent.action === 'end') {\n          this.isServerNavigation = false;\n          this.updateHomeEndAction(this.searchKeyEvent);\n        }\n      }\n\n      if (this.beforePopupOpen) {\n        this.invokeRenderPopup();\n      }\n\n      if (this.getModuleName() !== 'dropdownlist') {\n        this.onActionComplete(this.ulElement, this.listData);\n      }\n    } else if (data != null && this.listData !== data) {\n      this.listData = data;\n      this.initRemoteRender = false;\n    }\n  };\n\n  DropDownList.prototype.renderHightSearch = function () {// update high light search\n  };\n\n  DropDownList.prototype.updateclientItemData = function (data) {\n    this.listData = data;\n  };\n\n  DropDownList.prototype.initValueItemData = function (selectData) {\n    this.itemData = selectData;\n    this.previousValue = this.value;\n    this.initial = false;\n  }; // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n\n  DropDownList.prototype.serverUpdateListElement = function (data, popupEle) {\n    this.listData = data;\n\n    if (this.ulElement) {\n      this.liCollections = this.ulElement.querySelectorAll('.' + dropDownBaseClasses.li);\n    }\n  };\n  /* eslint-disable valid-jsdoc, jsdoc/require-param */\n\n  /**\n   * Hides the popup if it is in an open state.\n   *\n   * @returns {void}\n   */\n\n\n  DropDownList.prototype.hidePopup = function (e) {\n    /* eslint-enable valid-jsdoc, jsdoc/require-param */\n    var isHeader = this.headerTemplate ? true : false;\n    var isFooter = this.headerTemplate ? true : false;\n    this.DropDownBaseresetBlazorTemplates(false, false, false, false, false, isHeader, isFooter);\n\n    if (this.isEscapeKey && this.getModuleName() === 'dropdownlist') {\n      Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n      this.isEscapeKey = false;\n\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\n        if (this.selectedLI) {\n          this.updateSelectedItem(this.selectedLI, null, true);\n\n          if (this.valueTemplate && this.itemData !== null) {\n            this.setValueTemplate();\n          }\n        }\n      } else {\n        this.resetSelection();\n      }\n    }\n\n    this.closePopup();\n    var dataItem = this.getItemData();\n    var isSelectVal = this.isServerBlazor ? !isNullOrUndefined(this.value) : !isNullOrUndefined(this.selectedLI);\n\n    if (this.inputElement && this.inputElement.value.trim() === '' && !this.isInteracted && (this.isSelectCustom || 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  /**\n   * Sets the focus on the component for interaction.\n   *\n   * @returns {void}\n   */\n\n\n  DropDownList.prototype.focusIn = function (e) {\n    if (!this.enabled) {\n      return;\n    }\n\n    if (this.targetElement().classList.contains(dropDownListClasses.disable)) {\n      return;\n    }\n\n    var isFocused = false;\n\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\n    if (!isFocused) {\n      this.targetElement().focus();\n    }\n\n    addClass([this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n    this.onFocus(e);\n  };\n  /**\n   * Moves the focus from the component if the component is already focused.\n   *\n   * @returns {void}\n   */\n\n\n  DropDownList.prototype.focusOut = function (e) {\n    /* eslint-enable valid-jsdoc, jsdoc/require-param */\n    if (!this.enabled) {\n      return;\n    }\n\n    this.isTyped = true;\n    this.hidePopup(e);\n\n    if (this.targetElement()) {\n      this.targetElement().blur();\n    }\n\n    removeClass([this.inputWrapper.container], [dropDownListClasses.inputFocus]);\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\n\n  DropDownList.prototype.destroy = function () {\n    this.isActive = false; // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n    if (this.isReact) {\n      this.clearTemplate();\n    }\n\n    if (!this.isServerBlazor || this.popupObj && document.body.contains(this.popupObj.element)) {\n      this.hidePopup();\n    }\n\n    this.unWireEvent();\n\n    if (this.list) {\n      this.unWireListEvents();\n\n      if (this.isServerBlazor) {\n        if (this.fields.groupBy && !this.isGroupChecking) {\n          EventHandler.remove(this.list, 'scroll', this.setFloatingHeader);\n        }\n      }\n    }\n\n    if (!this.isServerBlazor) {\n      if (this.element && !this.element.classList.contains('e-' + this.getModuleName())) {\n        return;\n      }\n\n      if (this.inputElement) {\n        var attrArray = ['readonly', 'aria-disabled', 'aria-placeholder', 'placeholder', 'aria-owns', 'aria-labelledby', 'aria-haspopup', 'aria-expanded', 'aria-activedescendant', 'autocomplete', 'aria-readonly', 'autocorrect', 'autocapitalize', 'spellcheck', 'aria-autocomplete', 'aria-live', 'aria-describedby', 'aria-label'];\n\n        for (var i = 0; i < attrArray.length; i++) {\n          this.inputElement.removeAttribute(attrArray[i]);\n        }\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\n      this.element.style.display = 'block';\n\n      if (this.inputWrapper.container.parentElement.tagName === this.getNgDirective()) {\n        detach(this.inputWrapper.container);\n      } else {\n        this.inputWrapper.container.parentElement.insertBefore(this.element, this.inputWrapper.container);\n        detach(this.inputWrapper.container);\n      }\n\n      _super.prototype.destroy.call(this);\n    }\n  };\n  /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n\n  /**\n   * Gets all the list items bound on this component.\n   *\n   * @returns {Element[]}\n   */\n\n\n  DropDownList.prototype.getItems = function () {\n    if (!this.list) {\n      if (this.dataSource instanceof DataManager) {\n        this.initRemoteRender = true;\n      }\n\n      this.renderList();\n    }\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   * @blazorType object\n   */\n\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  /**\n   * Allows you to clear the selected values from the component.\n   *\n   * @returns {void}\n   */\n\n\n  DropDownList.prototype.clear = function () {\n    this.value = null;\n  };\n\n  __decorate([Property(null)], DropDownList.prototype, \"cssClass\", void 0);\n\n  __decorate([Property('100%')], DropDownList.prototype, \"width\", void 0);\n\n  __decorate([Property('300px')], DropDownList.prototype, \"popupHeight\", void 0);\n\n  __decorate([Property('100%')], DropDownList.prototype, \"popupWidth\", void 0);\n\n  __decorate([Property(null)], DropDownList.prototype, \"placeholder\", void 0);\n\n  __decorate([Property(null)], DropDownList.prototype, \"filterBarPlaceholder\", void 0);\n\n  __decorate([Property({})], DropDownList.prototype, \"htmlAttributes\", void 0);\n\n  __decorate([Property(null)], DropDownList.prototype, \"query\", void 0);\n\n  __decorate([Property(null)], DropDownList.prototype, \"valueTemplate\", void 0);\n\n  __decorate([Property(null)], DropDownList.prototype, \"headerTemplate\", void 0);\n\n  __decorate([Property(null)], DropDownList.prototype, \"footerTemplate\", void 0);\n\n  __decorate([Property(false)], DropDownList.prototype, \"allowFiltering\", void 0);\n\n  __decorate([Property(false)], DropDownList.prototype, \"readonly\", void 0);\n\n  __decorate([Property(null)], DropDownList.prototype, \"text\", void 0);\n\n  __decorate([Property(null)], DropDownList.prototype, \"value\", void 0);\n\n  __decorate([Property(null)], DropDownList.prototype, \"index\", void 0);\n\n  __decorate([Property('Never')], DropDownList.prototype, \"floatLabelType\", void 0);\n\n  __decorate([Property(false)], DropDownList.prototype, \"showClearButton\", void 0);\n\n  __decorate([Event()], DropDownList.prototype, \"filtering\", void 0);\n\n  __decorate([Event()], DropDownList.prototype, \"change\", void 0);\n\n  __decorate([Event()], DropDownList.prototype, \"beforeOpen\", void 0);\n\n  __decorate([Event()], DropDownList.prototype, \"open\", void 0);\n\n  __decorate([Event()], DropDownList.prototype, \"close\", void 0);\n\n  __decorate([Event()], DropDownList.prototype, \"blur\", void 0);\n\n  __decorate([Event()], DropDownList.prototype, \"focus\", void 0);\n\n  DropDownList = __decorate([NotifyPropertyChanges], DropDownList);\n  return DropDownList;\n}(DropDownBase);\n\nexport { DropDownList };","import { createElement, remove, isBlazor } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\n/**\n * `PagerDropDown` module handles selected pageSize from DropDownList.\n */\n\nvar PagerDropDown =\n/** @class */\nfunction () {\n  /**\n   * Constructor for pager module\n   * @hidden\n   */\n  function PagerDropDown(pagerModule) {\n    this.pagerModule = pagerModule;\n  }\n  /**\n   * For internal use only - Get the module name.\n   * @private\n   * @hidden\n   */\n\n\n  PagerDropDown.prototype.getModuleName = function () {\n    return 'pagerdropdown';\n  };\n  /**\n   * The function is used to render pager dropdown\n   * @hidden\n   */\n\n\n  PagerDropDown.prototype.render = function () {\n    var pagerObj = this.pagerModule;\n    this.pagerDropDownDiv = createElement('div', {\n      className: 'e-pagesizes'\n    });\n    var dropDownDiv = createElement('div', {\n      className: 'e-pagerdropdown'\n    });\n    var defaultTextDiv = createElement('div', {\n      className: 'e-pagerconstant'\n    });\n    var input = createElement('input', {\n      attrs: {\n        type: 'text',\n        tabindex: '1'\n      }\n    });\n    this.pagerCons = createElement('span', {\n      className: 'e-constant',\n      innerHTML: isBlazor() ? this.pagerModule.getLocalizedLabel('PagerDropDown') : this.pagerModule.getLocalizedLabel('pagerDropDown')\n    });\n    dropDownDiv.appendChild(input);\n    defaultTextDiv.appendChild(this.pagerCons);\n    this.pagerDropDownDiv.appendChild(dropDownDiv);\n    this.pagerDropDownDiv.appendChild(defaultTextDiv);\n    this.pagerModule.element.appendChild(this.pagerDropDownDiv);\n    var pageSizesModule = this.pagerModule.pageSizes;\n    var pageSizesArray = pageSizesModule.length ? this.convertValue(pageSizesModule) : [this.pagerModule.getLocalizedLabel('All'), '5', '10', '12', '20'];\n    var defaultValue = this.pagerModule.pageSize;\n    this.dropDownListObject = new DropDownList({\n      dataSource: pageSizesArray,\n      value: defaultValue.toString(),\n      change: this.onChange.bind(this),\n      cssClass: 'e-alldrop'\n    });\n    this.dropDownListObject.appendTo(input);\n\n    if (pageSizesModule.length) {\n      this.dropDownListObject.element.value = this.pagerModule.pageSize.toString();\n    }\n\n    pagerObj.pageSize = defaultValue;\n    pagerObj.dataBind();\n    pagerObj.trigger('dropDownChanged', {\n      pageSize: defaultValue\n    });\n    this.addEventListener();\n  };\n  /**\n   * For internal use only - Get the pagesize.\n   * @private\n   * @hidden\n   */\n\n\n  PagerDropDown.prototype.onChange = function (e) {\n    if (this.dropDownListObject.value === this.pagerModule.getLocalizedLabel('All')) {\n      this.pagerModule.pageSize = this.pagerModule.totalRecordsCount;\n      this.refresh();\n      e.value = this.pagerModule.pageSize;\n\n      if (document.getElementsByClassName('e-popup-open e-alldrop').length) {\n        document.getElementsByClassName('e-popup-open e-alldrop')[0].style.display = 'none';\n      }\n    } else {\n      this.pagerModule.pageSize = parseInt(this.dropDownListObject.value, 10);\n\n      if (this.pagerCons.innerHTML !== this.pagerModule.getLocalizedLabel('pagerDropDown')) {\n        this.refresh();\n      }\n    }\n\n    this.pagerModule.dataBind();\n    this.pagerModule.trigger('dropDownChanged', {\n      pageSize: parseInt(this.dropDownListObject.value, 10)\n    });\n  };\n\n  PagerDropDown.prototype.refresh = function () {\n    if (this.pagerCons) {\n      if (this.pagerModule.pageSize === this.pagerModule.totalRecordsCount) {\n        this.pagerCons.innerHTML = isBlazor() ? this.pagerModule.getLocalizedLabel('PagerAllDropDown') : this.pagerModule.getLocalizedLabel('pagerAllDropDown');\n      } else {\n        this.pagerCons.innerHTML = isBlazor() ? this.pagerModule.getLocalizedLabel('PagerDropDown') : this.pagerModule.getLocalizedLabel('pagerDropDown');\n      }\n    }\n  };\n\n  PagerDropDown.prototype.beforeValueChange = function (prop) {\n    if (typeof prop.newProp.value === 'number') {\n      var val = prop.newProp.value.toString();\n      prop.newProp.value = val;\n    }\n  };\n\n  PagerDropDown.prototype.convertValue = function (pageSizeValue) {\n    var item = pageSizeValue;\n\n    for (var i = 0; i < item.length; i++) {\n      item[i] = parseInt(item[i], 10) ? item[i].toString() : this.pagerModule.getLocalizedLabel(item[i]) !== '' ? this.pagerModule.getLocalizedLabel(item[i]) : item[i];\n    }\n\n    return item;\n  };\n\n  PagerDropDown.prototype.setDropDownValue = function (prop, value) {\n    if (this.dropDownListObject) {\n      this.dropDownListObject[prop] = value;\n    }\n  };\n\n  PagerDropDown.prototype.addEventListener = function () {\n    this.dropDownListObject.on('beforeValueChange', this.beforeValueChange, this);\n  };\n\n  PagerDropDown.prototype.removeEventListener = function () {\n    this.dropDownListObject.off('beforeValueChange', this.beforeValueChange);\n  };\n  /**\n   * To destroy the Pagerdropdown\n   * @method destroy\n   * @return {void}\n   * @hidden\n   */\n\n\n  PagerDropDown.prototype.destroy = function (args) {\n    if (this.dropDownListObject && !this.dropDownListObject.isDestroyed) {\n      this.removeEventListener();\n      this.dropDownListObject.destroy();\n      remove(this.pagerDropDownDiv);\n    }\n  };\n\n  return PagerDropDown;\n}();\n\nexport { PagerDropDown };","import { createElement, remove, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * `ExternalMessage` module is used to display user provided message.\n */\n\nvar ExternalMessage =\n/** @class */\nfunction () {\n  /**\n   * Constructor for externalMessage module\n   * @param  {Pager} pagerModule?\n   * @returns defaultType\n   * @hidden\n   */\n  function ExternalMessage(pagerModule) {\n    this.pagerModule = pagerModule;\n  }\n  /**\n   * For internal use only - Get the module name.\n   * @private\n   */\n\n\n  ExternalMessage.prototype.getModuleName = function () {\n    return 'externalMessage';\n  };\n  /**\n   * The function is used to render pager externalMessage\n   * @hidden\n   */\n\n\n  ExternalMessage.prototype.render = function () {\n    this.element = createElement('div', {\n      className: 'e-pagerexternalmsg',\n      attrs: {\n        'aria-label': 'Pager external message'\n      }\n    });\n    this.pagerModule.element.appendChild(this.element);\n    this.refresh();\n  };\n  /**\n   * Refreshes the external message of Pager.\n   */\n\n\n  ExternalMessage.prototype.refresh = function () {\n    if (this.pagerModule.externalMessage && this.pagerModule.externalMessage.toString().length) {\n      this.showMessage();\n      this.element.innerHTML = this.pagerModule.externalMessage;\n    } else {\n      this.hideMessage();\n    }\n  };\n  /**\n   * Hides the external message of Pager.\n   */\n\n\n  ExternalMessage.prototype.hideMessage = function () {\n    if (!isNullOrUndefined(this.element)) {\n      this.element.style.display = 'none';\n    }\n  };\n  /**\n   * Shows the external message of the Pager.\n   */\n\n\n  ExternalMessage.prototype.showMessage = function () {\n    this.element.style.display = '';\n  };\n  /**\n   * To destroy the PagerMessage\n   * @method destroy\n   * @return {void}\n   * @hidden\n   */\n\n\n  ExternalMessage.prototype.destroy = function () {\n    remove(this.element);\n  };\n\n  return ExternalMessage;\n}();\n\nexport { ExternalMessage };","import { extend } from '@syncfusion/ej2-base';\nimport { remove, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Pager } from '../../pager/pager';\nimport { PagerDropDown } from '../../pager/pager-dropdown';\nimport { ExternalMessage } from '../../pager/external-message';\nimport { extend as gridExtend, getActualProperties, isActionPrevent, addRemoveEventListener } from '../base/util';\nimport * as events from '../base/constant';\n/**\n * The `Page` module is used to render pager and handle paging action.\n */\n\nvar Page =\n/** @class */\nfunction () {\n  /**\n   * Constructor for the Grid paging module\n   * @hidden\n   */\n  function Page(parent, pageSettings) {\n    this.isInitialRender = true;\n    Pager.Inject(ExternalMessage, PagerDropDown);\n    this.parent = parent;\n    this.pageSettings = pageSettings;\n    this.addEventListener();\n  }\n  /**\n   * For internal use only - Get the module name.\n   * @private\n   */\n\n\n  Page.prototype.getModuleName = function () {\n    return 'pager';\n  };\n  /**\n   * The function used to render pager from grid pageSettings\n   * @return {void}\n   * @hidden\n   */\n\n\n  Page.prototype.render = function () {\n    var gObj = this.parent;\n    var pagerObj;\n    this.pagerDestroy();\n\n    if (!isNullOrUndefined(this.parent.pagerTemplate)) {\n      this.pageSettings.template = this.parent.pagerTemplate;\n      this.parent.pageTemplateChange = true;\n    }\n\n    this.element = this.parent.createElement('div', {\n      className: 'e-gridpager'\n    });\n    pagerObj = gridExtend({}, extend({}, getActualProperties(this.pageSettings)), {\n      click: this.clickHandler.bind(this),\n      dropDownChanged: this.onSelect.bind(this),\n      enableRtl: gObj.enableRtl,\n      locale: gObj.locale,\n      created: this.addAriaAttr.bind(this)\n    }, ['parentObj', 'propName']);\n    this.pagerObj = new Pager(pagerObj);\n    this.pagerObj.hasParent = true;\n    this.pagerObj.on(events.pagerRefresh, this.renderReactPagerTemplate, this);\n    this.pagerObj.allowServerDataBinding = false;\n  };\n\n  Page.prototype.onSelect = function (e) {\n    this.pageSettings.pageSize = e.pageSize;\n\n    if (!this.isInitialLoad) {\n      this.pageSettings.currentPage = 1;\n    }\n  };\n\n  Page.prototype.addAriaAttr = function () {\n    if (!this.pageSettings.template) {\n      var numericContainerNew = this.parent.createElement('div', {\n        className: 'e-numericcontainer'\n      });\n      var pagerContainer = this.element.querySelector('.e-pagercontainer');\n      var frag = document.createDocumentFragment();\n      var numericContainer = this.element.querySelector('.e-numericcontainer');\n      var links = numericContainer.querySelectorAll('a');\n\n      for (var i = 0; i < links.length; i++) {\n        if (this.parent.getContentTable()) {\n          links[i].setAttribute('aria-owns', this.parent.getContentTable().id);\n        } else {\n          links[i].setAttribute('aria-owns', this.parent.element.getAttribute('id') + '_content_table');\n        }\n\n        var numericContainerDiv = this.parent.createElement('div');\n        numericContainerDiv.appendChild(links[i]);\n        frag.appendChild(numericContainerDiv);\n      }\n\n      numericContainerNew.appendChild(frag);\n      pagerContainer.replaceChild(numericContainerNew, numericContainer);\n      var classList = ['.e-mfirst', '.e-mprev', '.e-first', '.e-prev', '.e-next', '.e-last', '.e-mnext', '.e-mlast'];\n\n      for (var j = 0; j < classList.length; j++) {\n        var element = this.element.querySelector(classList[j]);\n\n        if (this.parent.getContentTable()) {\n          element.setAttribute('aria-owns', this.parent.getContentTable().id);\n        }\n      }\n    }\n  };\n\n  Page.prototype.dataReady = function (e) {\n    this.updateModel(e);\n  };\n  /**\n   * Refreshes the page count, pager information, and external message.\n   * @return {void}\n   */\n\n\n  Page.prototype.refresh = function () {\n    this.pagerObj.refresh();\n  };\n  /**\n   * Navigates to the target page according to the given number.\n   * @param  {number} pageNo - Defines the page number to navigate.\n   * @return {void}\n   */\n\n\n  Page.prototype.goToPage = function (pageNo) {\n    this.pagerObj.goToPage(pageNo);\n  };\n  /**\n   * @hidden\n   */\n\n\n  Page.prototype.setPageSize = function (pageSize) {\n    this.pagerObj.setPageSize(pageSize);\n  };\n  /**\n   * The function used to update pageSettings model\n   * @return {void}\n   * @hidden\n   */\n\n\n  Page.prototype.updateModel = function (e) {\n    this.parent.pageSettings.totalRecordsCount = e.count;\n    this.parent.dataBind();\n  };\n  /**\n   * The function used to trigger onActionComplete\n   * @return {void}\n   * @hidden\n   */\n\n\n  Page.prototype.onActionComplete = function (e) {\n    this.parent.trigger(events.actionComplete, extend(e, {\n      currentPage: this.parent.pageSettings.currentPage,\n      requestType: 'paging',\n      type: events.actionComplete\n    }));\n  };\n  /**\n   * @hidden\n   */\n\n\n  Page.prototype.onPropertyChanged = function (e) {\n    if (e.module !== this.getModuleName()) {\n      return;\n    }\n\n    var newProp = e.properties;\n\n    for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n      var prop = _a[_i];\n      this.pagerObj[prop] = newProp[prop];\n    }\n\n    this.pagerObj.dataBind();\n  };\n\n  Page.prototype.clickHandler = function (e) {\n    var gObj = this.parent;\n\n    if (this.isForceCancel || isActionPrevent(gObj) && !gObj.prevPageMoving) {\n      if (!this.isForceCancel) {\n        if (!isNullOrUndefined(e.newProp) && !isNullOrUndefined(e.newProp.pageSize)) {\n          gObj.notify(events.preventBatch, {\n            instance: this,\n            handler: this.setPageSize,\n            arg1: e.newProp.pageSize\n          });\n          this.pagerObj.pageSize = e.oldProp.pageSize;\n          gObj.pageSettings.pageSize = e.newProp.pageSize;\n        } else if (e.currentPage) {\n          gObj.notify(events.preventBatch, {\n            instance: this,\n            handler: this.goToPage,\n            arg1: e.currentPage\n          });\n          this.pagerObj.currentPage = gObj.pageSettings.currentPage === this.pagerObj.currentPage ? this.pagerObj.previousPageNo : gObj.pageSettings.currentPage;\n        }\n\n        this.isForceCancel = true;\n        this.pagerObj.dataBind();\n      } else {\n        this.isForceCancel = false;\n      }\n\n      e.cancel = true;\n      return;\n    }\n\n    gObj.pageSettings.pageSize = this.pagerObj.pageSize;\n    gObj.prevPageMoving = false;\n    var prevPage = this.pageSettings.currentPage;\n    this.pageSettings.currentPage = e.currentPage;\n    var args = {\n      cancel: false,\n      requestType: 'paging',\n      previousPage: prevPage,\n      currentPage: e.currentPage,\n      type: events.actionBegin\n    };\n    this.parent.notify(events.modelChanged, args);\n\n    if (args.cancel) {\n      e.cancel = true;\n    }\n\n    this.parent.requestTypeAction = 'paging';\n  };\n\n  Page.prototype.keyPressHandler = function (e) {\n    if (e.action in keyActions) {\n      e.preventDefault();\n      this.element.querySelector(keyActions[e.action]).click();\n    }\n  };\n  /**\n   * Defines the text of the external message.\n   * @param  {string} message - Defines the message to update.\n   * @return {void}\n   */\n\n\n  Page.prototype.updateExternalMessage = function (message) {\n    if (!this.pagerObj.enableExternalMessage) {\n      this.pagerObj.enableExternalMessage = true;\n      this.pagerObj.dataBind();\n    }\n\n    this.pagerObj.externalMessage = message;\n    this.pagerObj.dataBind();\n  };\n\n  Page.prototype.appendToElement = function (e) {\n    this.isInitialLoad = true;\n    this.parent.element.appendChild(this.element);\n    this.parent.setGridPager(this.element);\n    this.pagerObj.isReact = this.parent.isReact;\n    this.pagerObj.isVue = this.parent.isVue;\n    this.pagerObj.appendTo(this.element);\n    this.isInitialLoad = false;\n  };\n\n  Page.prototype.enableAfterRender = function (e) {\n    if (e.module === this.getModuleName() && e.enable) {\n      this.render();\n      this.appendToElement();\n\n      if (this.isReactTemplate()) {\n        this.pagerObj.updateTotalPages();\n        this.created();\n      }\n    }\n  };\n  /**\n   * @hidden\n   */\n\n\n  Page.prototype.addEventListener = function () {\n    this.handlers = {\n      load: this.render,\n      end: this.appendToElement,\n      ready: this.dataReady,\n      complete: this.onActionComplete,\n      updateLayout: this.enableAfterRender,\n      inboundChange: this.onPropertyChanged,\n      keyPress: this.keyPressHandler,\n      created: this.created\n    };\n\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    if (this.parent.isReact) {\n      this.parent.addEventListener(events.created, this.handlers.created.bind(this));\n    }\n\n    this.evtHandlers = [{\n      event: events.initialLoad,\n      handler: this.handlers.load\n    }, {\n      event: events.initialEnd,\n      handler: this.handlers.end\n    }, {\n      event: events.dataReady,\n      handler: this.handlers.ready\n    }, {\n      event: events.pageComplete,\n      handler: this.handlers.complete\n    }, {\n      event: events.uiUpdate,\n      handler: this.handlers.updateLayout\n    }, {\n      event: events.inBoundModelChanged,\n      handler: this.handlers.inboundChange\n    }, {\n      event: events.keyPressed,\n      handler: this.handlers.keyPress\n    }];\n    addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n  };\n\n  Page.prototype.created = function () {\n    if (this.isInitialRender && this.isReactTemplate()) {\n      this.isInitialRender = false;\n      this.renderReactPagerTemplate();\n    }\n  };\n\n  Page.prototype.isReactTemplate = function () {\n    return this.parent.isReact && this.pagerObj.template && typeof this.pagerObj.template !== 'string';\n  };\n\n  Page.prototype.renderReactPagerTemplate = function () {\n    if (!this.isInitialRender && this.isReactTemplate()) {\n      this.parent.destroyTemplate(['pagerTemplate']);\n      this.element.classList.add('e-pagertemplate');\n      this.pagerObj.compile(this.pagerObj.template);\n      var page = this.parent.pageSettings;\n      var data = {\n        currentPage: page.currentPage,\n        pageSize: page.pageSize,\n        pageCount: page.pageCount,\n        totalRecordsCount: page.totalRecordsCount,\n        totalPages: this.pagerObj.totalPages\n      };\n      var tempId = this.parent.id + '_pagertemplate';\n      this.pagerObj.templateFn(data, this.parent, 'pagerTemplate', tempId, null, null, this.pagerObj.element);\n      this.parent.renderTemplates();\n    }\n  };\n  /**\n   * @hidden\n   */\n\n\n  Page.prototype.removeEventListener = function () {\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    if (this.parent.isReact) {\n      this.parent.removeEventListener(events.created, this.handlers.created);\n    }\n\n    this.parent.off(events.pagerRefresh, this.renderReactPagerTemplate);\n    addRemoveEventListener(this.parent, this.evtHandlers, false);\n  };\n  /**\n   * To destroy the pager\n   * @return {void}\n   * @hidden\n   */\n\n\n  Page.prototype.destroy = function () {\n    this.removeEventListener();\n\n    if (this.isReactTemplate()) {\n      this.parent.destroyTemplate(['pagerTemplate']);\n    }\n\n    this.pagerObj.destroy();\n  };\n\n  Page.prototype.pagerDestroy = function () {\n    if (this.pagerObj && !this.pagerObj.isDestroyed) {\n      this.pagerObj.destroy();\n      remove(this.element);\n    }\n  };\n\n  return Page;\n}();\n\nexport { Page };\n/**\n * @hidden\n */\n\nvar keyActions = {\n  pageUp: '.e-prev',\n  pageDown: '.e-next',\n  ctrlAltPageDown: '.e-last',\n  ctrlAltPageUp: '.e-first',\n  altPageUp: '.e-pp',\n  altPageDown: '.e-np'\n};","import { Browser } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { closest, classList } from '@syncfusion/ej2-base';\nimport { ResponsiveDialogAction } from '../base/enum';\nimport { setCssInGridPopUp, getActualPropFromColl, isActionPrevent, iterateExtend, parentsUntil } from '../base/util';\nimport { addRemoveEventListener } from '../base/util';\nimport * as events from '../base/constant';\nimport { AriaService } from '../services/aria-service';\nimport * as literals from '../base/string-literals';\n/**\n *\n * The `Sort` module is used to handle sorting action.\n */\n\nvar Sort =\n/** @class */\nfunction () {\n  /**\n   * Constructor for Grid sorting module\n   * @hidden\n   */\n  function Sort(parent, sortSettings, sortedColumns, locator) {\n    this.contentRefresh = true;\n    this.isModelChanged = true;\n    this.aria = new AriaService();\n    this.currentTarget = null;\n    this.parent = parent;\n    this.sortSettings = sortSettings;\n    this.sortedColumns = sortedColumns;\n    this.serviceLocator = locator;\n    this.focus = locator.getService('focus');\n    this.addEventListener();\n    this.setFullScreenDialog();\n  }\n  /**\n   * The function used to update sortSettings\n   * @return {void}\n   * @hidden\n   */\n\n\n  Sort.prototype.updateModel = function () {\n    var sortedColumn = {\n      field: this.columnName,\n      direction: this.direction\n    };\n    var index;\n    var gCols = this.parent.groupSettings.columns;\n    var flag = false;\n\n    if (!this.isMultiSort) {\n      if (!gCols.length) {\n        this.sortSettings.columns = [sortedColumn];\n      } else {\n        var sortedCols = [];\n\n        for (var i = 0, len = gCols.length; i < len; i++) {\n          index = this.getSortedColsIndexByField(gCols[i], sortedCols);\n\n          if (this.columnName === gCols[i]) {\n            flag = true;\n            sortedCols.push(sortedColumn);\n          } else {\n            var sCol = this.getSortColumnFromField(gCols[i]);\n            sortedCols.push({\n              field: sCol.field,\n              direction: sCol.direction,\n              isFromGroup: sCol.isFromGroup\n            });\n          }\n        }\n\n        if (!flag) {\n          sortedCols.push(sortedColumn);\n        }\n\n        this.sortSettings.columns = sortedCols;\n      }\n    } else {\n      index = this.getSortedColsIndexByField(this.columnName);\n\n      if (index > -1) {\n        this.sortSettings.columns.splice(index, 1);\n      }\n\n      this.sortSettings.columns.push(sortedColumn);\n      this.sortSettings.columns = this.sortSettings.columns;\n    }\n\n    this.parent.dataBind();\n    this.lastSortedCol = this.columnName;\n  };\n  /**\n   * The function used to trigger onActionComplete\n   * @return {void}\n   * @hidden\n   */\n\n\n  Sort.prototype.onActionComplete = function (e) {\n    var args = !this.isRemove ? {\n      columnName: this.columnName,\n      direction: this.direction,\n      requestType: 'sorting',\n      type: events.actionComplete\n    } : {\n      requestType: 'sorting',\n      type: events.actionComplete\n    };\n    this.isRemove = false;\n    this.parent.trigger(events.actionComplete, extend(e, args));\n  };\n  /**\n   * Sorts a column with the given options.\n   * @param {string} columnName - Defines the column name to sort.\n   * @param {SortDirection} direction - Defines the direction of sorting field.\n   * @param {boolean} isMultiSort - Specifies whether the previously sorted columns are to be maintained.\n   * @return {void}\n   */\n\n\n  Sort.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n    var gObj = this.parent;\n\n    if (this.parent.getColumnByField(columnName).allowSorting === false || this.parent.isContextMenuOpen()) {\n      this.parent.log('action_disabled_column', {\n        moduleName: this.getModuleName(),\n        columnName: columnName\n      });\n      return;\n    }\n\n    if (!gObj.allowMultiSorting) {\n      isMultiSort = gObj.allowMultiSorting;\n    }\n\n    if (this.isActionPrevent()) {\n      gObj.notify(events.preventBatch, {\n        instance: this,\n        handler: this.sortColumn,\n        arg1: columnName,\n        arg2: direction,\n        arg3: isMultiSort\n      });\n      return;\n    }\n\n    this.backupSettings();\n    this.columnName = columnName;\n    this.direction = direction;\n    this.isMultiSort = isMultiSort;\n    this.removeSortIcons();\n    var column = gObj.getColumnHeaderByField(columnName);\n    this.updateSortedCols(columnName, isMultiSort);\n    this.updateModel();\n  };\n\n  Sort.prototype.setFullScreenDialog = function () {\n    if (this.serviceLocator) {\n      this.serviceLocator.registerAdaptiveService(this, this.parent.enableAdaptiveUI, ResponsiveDialogAction.isSort);\n    }\n  };\n\n  Sort.prototype.backupSettings = function () {\n    this.lastSortedCols = iterateExtend(this.sortSettings.columns);\n    this.lastCols = this.sortedColumns;\n  };\n\n  Sort.prototype.restoreSettings = function () {\n    this.isModelChanged = false;\n    this.isMultiSort = true;\n    this.parent.setProperties({\n      sortSettings: {\n        columns: this.lastSortedCols\n      }\n    }, true); //this.parent.sortSettings.columns =  this.lastSortedCols;        \n\n    this.sortedColumns = this.lastCols;\n    this.isModelChanged = true;\n  };\n\n  Sort.prototype.updateSortedCols = function (columnName, isMultiSort) {\n    if (!isMultiSort) {\n      if (this.parent.allowGrouping) {\n        for (var i = 0, len = this.sortedColumns.length; i < len; i++) {\n          if (this.parent.groupSettings.columns.indexOf(this.sortedColumns[i]) < 0) {\n            this.sortedColumns.splice(i, 1);\n            len--;\n            i--;\n          }\n        }\n      } else {\n        this.sortedColumns.splice(0, this.sortedColumns.length);\n      }\n    }\n\n    if (this.sortedColumns.indexOf(columnName) < 0) {\n      this.sortedColumns.push(columnName);\n    }\n  };\n  /**\n   * @hidden\n   */\n\n\n  Sort.prototype.onPropertyChanged = function (e) {\n    if (e.module !== this.getModuleName()) {\n      return;\n    }\n\n    if (this.contentRefresh) {\n      var args = this.sortSettings.columns.length ? {\n        columnName: this.columnName,\n        direction: this.direction,\n        requestType: 'sorting',\n        type: events.actionBegin,\n        target: this.currentTarget,\n        cancel: false\n      } : {\n        requestType: 'sorting',\n        type: events.actionBegin,\n        cancel: false,\n        target: this.currentTarget\n      };\n      this.parent.notify(events.modelChanged, args);\n    }\n\n    this.refreshSortSettings();\n    this.removeSortIcons();\n    this.addSortIcons();\n  };\n\n  Sort.prototype.refreshSortSettings = function () {\n    this.sortedColumns.length = 0;\n    var sortColumns = this.sortSettings.columns;\n\n    for (var i = 0; i < sortColumns.length; i++) {\n      if (!sortColumns[i].isFromGroup) {\n        this.sortedColumns.push(sortColumns[i].field);\n      }\n    }\n  };\n  /**\n   * Clears all the sorted columns of the Grid.\n   * @return {void}\n   */\n\n\n  Sort.prototype.clearSorting = function () {\n    var cols = getActualPropFromColl(this.sortSettings.columns);\n\n    if (this.isActionPrevent()) {\n      this.parent.notify(events.preventBatch, {\n        instance: this,\n        handler: this.clearSorting\n      });\n      return;\n    }\n\n    for (var i = 0, len = cols.length; i < len; i++) {\n      this.removeSortColumn(cols[i].field);\n    }\n  };\n\n  Sort.prototype.isActionPrevent = function () {\n    return isActionPrevent(this.parent);\n  };\n  /**\n   * Remove sorted column by field name.\n   * @param {string} field - Defines the column field name to remove sort.\n   * @return {void}\n   * @hidden\n   */\n\n\n  Sort.prototype.removeSortColumn = function (field) {\n    var gObj = this.parent;\n    var cols = this.sortSettings.columns;\n\n    if (cols.length === 0 && this.sortedColumns.indexOf(field) < 0) {\n      return;\n    }\n\n    if (this.isActionPrevent()) {\n      this.parent.notify(events.preventBatch, {\n        instance: this,\n        handler: this.removeSortColumn,\n        arg1: field\n      });\n      return;\n    }\n\n    this.backupSettings();\n    this.removeSortIcons();\n\n    for (var i = 0, len = cols.length; i < len; i++) {\n      if (cols[i].field === field) {\n        if (gObj.allowGrouping && gObj.groupSettings.columns.indexOf(cols[i].field) > -1) {\n          continue;\n        }\n\n        this.sortedColumns.splice(this.sortedColumns.indexOf(cols[i].field), 1);\n        cols.splice(i, 1);\n        this.isRemove = true;\n\n        if (this.isModelChanged) {\n          this.parent.notify(events.modelChanged, {\n            requestType: 'sorting',\n            type: events.actionBegin,\n            target: this.currentTarget\n          });\n        }\n\n        break;\n      }\n    }\n\n    this.addSortIcons();\n  };\n\n  Sort.prototype.getSortedColsIndexByField = function (field, sortedColumns) {\n    var cols = sortedColumns ? sortedColumns : this.sortSettings.columns;\n\n    for (var i = 0, len = cols.length; i < len; i++) {\n      if (cols[i].field === field) {\n        return i;\n      }\n    }\n\n    return -1;\n  };\n  /**\n   * For internal use only - Get the module name.\n   * @private\n   */\n\n\n  Sort.prototype.getModuleName = function () {\n    return 'sort';\n  };\n\n  Sort.prototype.initialEnd = function () {\n    this.parent.off(events.contentReady, this.initialEnd);\n    var isServerRendered = 'isServerRendered';\n\n    if (this.parent.getColumns().length && this.sortSettings.columns.length) {\n      var gObj = this.parent;\n      this.contentRefresh = false;\n      this.isMultiSort = this.sortSettings.columns.length > 1;\n\n      for (var _i = 0, _a = gObj.sortSettings.columns.slice(); _i < _a.length; _i++) {\n        var col = _a[_i];\n\n        if (this.sortedColumns.indexOf(col.field) > -1) {\n          this.sortColumn(col.field, col.direction, true);\n        }\n      }\n\n      this.isMultiSort = false;\n      this.contentRefresh = true;\n    }\n  };\n  /**\n   * @hidden\n   */\n\n\n  Sort.prototype.addEventListener = function () {\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    this.evtHandlers = [{\n      event: events.setFullScreenDialog,\n      handler: this.setFullScreenDialog\n    }, {\n      event: events.contentReady,\n      handler: this.initialEnd\n    }, {\n      event: events.sortComplete,\n      handler: this.onActionComplete\n    }, {\n      event: events.inBoundModelChanged,\n      handler: this.onPropertyChanged\n    }, {\n      event: events.click,\n      handler: this.clickHandler\n    }, {\n      event: events.headerRefreshed,\n      handler: this.refreshSortIcons\n    }, {\n      event: events.keyPressed,\n      handler: this.keyPressed\n    }, {\n      event: events.cancelBegin,\n      handler: this.cancelBeginEvent\n    }];\n    addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n  };\n  /**\n   * @hidden\n   */\n\n\n  Sort.prototype.removeEventListener = function () {\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    addRemoveEventListener(this.parent, this.evtHandlers, false);\n  };\n  /**\n   * To destroy the sorting\n   * @return {void}\n   * @hidden\n   */\n\n\n  Sort.prototype.destroy = function () {\n    this.isModelChanged = false;\n    var gridElement = this.parent.element;\n\n    if (!gridElement || !gridElement.querySelector('.' + literals.gridHeader) && !gridElement.querySelector('.' + literals.gridContent)) {\n      return;\n    }\n\n    if (this.parent.element.querySelector('.e-gridpopup').getElementsByClassName('e-sortdirect').length) {\n      this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n    } // tslint:disable-next-line:no-any\n\n\n    if (!this.parent.refreshing) {\n      this.clearSorting();\n    }\n\n    this.isModelChanged = true;\n    this.removeEventListener();\n  };\n\n  Sort.prototype.cancelBeginEvent = function (e) {\n    if (e.requestType === 'sorting') {\n      this.restoreSettings();\n      this.refreshSortIcons();\n      this.isMultiSort = true;\n    }\n  };\n\n  Sort.prototype.clickHandler = function (e) {\n    var gObj = this.parent;\n    this.currentTarget = null;\n    this.popUpClickHandler(e);\n    var target = closest(e.target, '.e-headercell');\n\n    if (target && !e.target.classList.contains('e-grptogglebtn') && !target.classList.contains('e-resized') && !e.target.classList.contains('e-rhandler') && !e.target.classList.contains('e-columnmenu') && !e.target.classList.contains('e-filtermenudiv') && !parentsUntil(e.target, 'e-stackedheadercell') && !(gObj.allowSelection && gObj.selectionSettings.allowColumnSelection && e.target.classList.contains('e-headercell'))) {\n      var gObj_1 = this.parent;\n      var colObj = gObj_1.getColumnByUid(target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid'));\n      var direction = !target.getElementsByClassName('e-ascending').length ? 'Ascending' : 'Descending';\n\n      if (colObj.type !== 'checkbox') {\n        this.initiateSort(target, e, colObj);\n\n        if (Browser.isDevice) {\n          this.showPopUp(e);\n        }\n      }\n    }\n\n    if (target) {\n      target.classList.remove('e-resized');\n    }\n\n    if (parentsUntil(e.target, 'e-excel-ascending') || parentsUntil(e.target, 'e-excel-descending')) {\n      var colUid = closest(e.target, '.e-filter-popup').getAttribute('uid');\n      var direction = isNullOrUndefined(parentsUntil(e.target, 'e-excel-descending')) ? 'Ascending' : 'Descending';\n      this.sortColumn(gObj.getColumnByUid(colUid).field, direction, false);\n    }\n  };\n\n  Sort.prototype.keyPressed = function (e) {\n    var ele = e.target;\n\n    if (!this.parent.isEdit && (e.action === 'enter' || e.action === 'ctrlEnter' || e.action === 'shiftEnter') && closest(ele, '.e-headercell')) {\n      var target = this.focus.getFocusedElement();\n\n      if (isNullOrUndefined(target) || !target.classList.contains('e-headercell') || !target.querySelector('.e-headercelldiv')) {\n        return;\n      }\n\n      var col = this.parent.getColumnByUid(target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid'));\n      this.initiateSort(target, e, col);\n    }\n  };\n\n  Sort.prototype.initiateSort = function (target, e, column) {\n    var gObj = this.parent;\n    var field = column.field;\n    this.currentTarget = e.target;\n    var direction = !target.getElementsByClassName('e-ascending').length ? 'Ascending' : 'Descending';\n\n    if (e.shiftKey || this.sortSettings.allowUnsort && target.getElementsByClassName('e-descending').length && !(gObj.groupSettings.columns.indexOf(field) > -1)) {\n      this.removeSortColumn(field);\n    } else {\n      this.sortColumn(field, direction, e.ctrlKey || this.enableSortMultiTouch || navigator.userAgent.indexOf('Mac OS') !== -1 && e.metaKey);\n    }\n  };\n\n  Sort.prototype.showPopUp = function (e) {\n    var target = closest(e.target, '.e-headercell');\n\n    if (this.parent.allowMultiSorting && (!isNullOrUndefined(target) || this.parent.isContextMenuOpen())) {\n      setCssInGridPopUp(this.parent.element.querySelector('.e-gridpopup'), e, 'e-sortdirect e-icons e-icon-sortdirect' + (this.sortedColumns.length > 1 ? ' e-spanclicked' : ''));\n    }\n  };\n\n  Sort.prototype.popUpClickHandler = function (e) {\n    var target = e.target;\n\n    if (closest(target, '.e-headercell') || e.target.classList.contains(literals.rowCell) || closest(target, '.e-gridpopup')) {\n      if (target.classList.contains('e-sortdirect')) {\n        if (!target.classList.contains('e-spanclicked')) {\n          target.classList.add('e-spanclicked');\n          this.enableSortMultiTouch = true;\n        } else {\n          target.classList.remove('e-spanclicked');\n          this.enableSortMultiTouch = false;\n          this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n        }\n      }\n    } else {\n      this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n    }\n  };\n\n  Sort.prototype.addSortIcons = function () {\n    var gObj = this.parent;\n    var header;\n    var filterElement;\n    var cols = this.sortSettings.columns;\n    var fieldNames = this.parent.getColumns().map(function (c) {\n      return c.field;\n    });\n\n    for (var i = 0, len = cols.length; i < len; i++) {\n      header = gObj.getColumnHeaderByField(cols[i].field);\n\n      if (fieldNames.indexOf(cols[i].field) === -1 || isNullOrUndefined(header)) {\n        continue;\n      }\n\n      this.aria.setSort(header, cols[i].direction);\n\n      if (this.isMultiSort && cols.length > 1) {\n        header.querySelector('.e-headercelldiv').insertBefore(this.parent.createElement('span', {\n          className: 'e-sortnumber',\n          innerHTML: (i + 1).toString()\n        }), header.querySelector('.e-headertext'));\n      }\n\n      filterElement = header.querySelector('.e-sortfilterdiv');\n\n      if (cols[i].direction === 'Ascending') {\n        classList(filterElement, ['e-ascending', 'e-icon-ascending'], []);\n      } else {\n        classList(filterElement, ['e-descending', 'e-icon-descending'], []);\n      }\n    }\n  };\n\n  Sort.prototype.removeSortIcons = function (position) {\n    var gObj = this.parent;\n    var header;\n    var cols = this.sortSettings.columns;\n    var fieldNames = this.parent.getColumns().map(function (c) {\n      return c.field;\n    });\n\n    for (var i = position ? position : 0, len = !isNullOrUndefined(position) ? position + 1 : cols.length; i < len; i++) {\n      header = gObj.getColumnHeaderByField(cols[i].field);\n\n      if (isNullOrUndefined(header) || gObj.allowGrouping && gObj.groupSettings.columns.indexOf(cols[i].field) > -1 && !header.querySelector('.e-sortfilterdiv')) {\n        continue;\n      }\n\n      if (fieldNames.indexOf(cols[i].field) === -1) {\n        continue;\n      }\n\n      this.aria.setSort(header, 'none');\n      classList(header.querySelector('.e-sortfilterdiv'), [], ['e-descending', 'e-icon-descending', 'e-ascending', 'e-icon-ascending']);\n\n      if (header.querySelector('.e-sortnumber')) {\n        header.querySelector('.e-headercelldiv').removeChild(header.querySelector('.e-sortnumber'));\n      }\n    }\n  };\n\n  Sort.prototype.getSortColumnFromField = function (field) {\n    for (var i = 0, len = this.sortSettings.columns.length; i < len; i++) {\n      if (this.sortSettings.columns[i].field === field) {\n        return this.sortSettings.columns[i];\n      }\n    }\n\n    return false;\n  };\n\n  Sort.prototype.updateAriaAttr = function () {\n    var fieldNames = this.parent.getColumns().map(function (c) {\n      return c.field;\n    });\n\n    for (var _i = 0, _a = this.sortedColumns; _i < _a.length; _i++) {\n      var col = _a[_i];\n\n      if (fieldNames.indexOf(col) === -1) {\n        continue;\n      }\n\n      var header = this.parent.getColumnHeaderByField(col);\n      this.aria.setSort(header, this.getSortColumnFromField(col).direction);\n    }\n  };\n\n  Sort.prototype.refreshSortIcons = function (params) {\n    if (params === void 0) {\n      params = {\n        args: {\n          isFrozen: false\n        }\n      };\n    }\n\n    if (!params.args.isFrozen) {\n      this.removeSortIcons();\n      this.isMultiSort = true;\n      this.removeSortIcons();\n      this.addSortIcons();\n      this.isMultiSort = false;\n      this.updateAriaAttr();\n    }\n  };\n  /**\n   * To show the responsive custom sort dialog\n   * @return {void}\n   * @hidden\n   */\n\n\n  Sort.prototype.showCustomSort = function (enable) {\n    this.responsiveDialogRenderer.isCustomDialog = enable;\n    this.responsiveDialogRenderer.showResponsiveDialog();\n  };\n\n  return Sort;\n}();\n\nexport { Sort };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nvar __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\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 * <div id=\"scroll\"/>\n * <script>\n *   var scrollObj = new HScroll();\n *   scrollObj.appendTo(\"#scroll\");\n * </script>\n * ```\n */\n\nvar HScroll =\n/** @class */\nfunction (_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\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\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\n    if (element.id === '') {\n      element.id = getUniqueID('hscroll');\n      this.uniqueId = true;\n    }\n\n    element.style.display = 'block';\n\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\n\n  HScroll.prototype.render = function () {\n    this.touchModule = new Touch(this.element, {\n      scroll: this.touchHandler.bind(this),\n      swipe: this.swipeHandler.bind(this)\n    });\n    EventHandler.add(this.scrollEle, 'scroll', this.scrollHandler, this);\n\n    if (!this.isDevice) {\n      this.createNavIcon(this.element);\n    } else {\n      this.element.classList.add(CLS_DEVICE);\n      this.createOverlay(this.element);\n    }\n\n    this.setScrollState();\n  };\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    } else {\n      this.customStep = true;\n    }\n  };\n\n  HScroll.prototype.initialize = function () {\n    var scrollEle = this.createElement('div', {\n      className: CLS_HSCROLLCON\n    });\n    var scrollDiv = this.createElement('div', {\n      className: CLS_HSCROLLBAR\n    });\n    scrollDiv.setAttribute('tabindex', '-1');\n    var ele = this.element;\n    var innerEle = [].slice.call(ele.children);\n\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\n    scrollDiv.appendChild(scrollEle);\n    ele.appendChild(scrollDiv);\n    scrollDiv.style.overflowX = 'hidden';\n    this.scrollEle = scrollDiv;\n    this.scrollItems = scrollEle;\n  };\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\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\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    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\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\n    if (this.uniqueId) {\n      this.element.removeAttribute('id');\n    }\n\n    detach(this.scrollEle);\n\n    if (nav.length > 0) {\n      detach(nav[0]);\n\n      if (!isNullOrUndefined(nav[1])) {\n        detach(nav[1]);\n      }\n    }\n\n    EventHandler.remove(this.scrollEle, 'scroll', this.scrollHandler);\n    this.touchModule.destroy();\n    this.touchModule = null;\n\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\n\n  HScroll.prototype.disable = function (value) {\n    var navEles = selectAll('.e-scroll-nav:not(.' + CLS_DISABLE + ')', this.element);\n\n    if (value) {\n      this.element.classList.add(CLS_DISABLE);\n    } else {\n      this.element.classList.remove(CLS_DISABLE);\n    }\n\n    [].slice.call(navEles).forEach(function (el) {\n      el.setAttribute('tabindex', !value ? '0' : '-1');\n    });\n  };\n\n  HScroll.prototype.createOverlay = function (element) {\n    var id = element.id.concat('_nav');\n    var rightOverlayEle = this.createElement('div', {\n      className: CLS_OVERLAY + ' ' + CLS_RIGHTOVERLAY\n    });\n    var clsRight = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVRIGHT);\n    var rightEle = this.createElement('div', {\n      id: id.concat('_right'),\n      className: clsRight\n    });\n    var navItem = this.createElement('div', {\n      className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons'\n    });\n    rightEle.appendChild(navItem);\n    var leftEle = this.createElement('div', {\n      className: CLS_OVERLAY + ' ' + CLS_LEFTOVERLAY\n    });\n\n    if (this.ieCheck) {\n      rightEle.classList.add('e-ie-align');\n    }\n\n    element.appendChild(rightOverlayEle);\n    element.appendChild(rightEle);\n    element.insertBefore(leftEle, element.firstChild);\n    this.eventBinding([rightEle]);\n  };\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 nav = this.createElement('div', {\n      id: id.concat('_right'),\n      className: clsRight\n    });\n    nav.setAttribute('aria-disabled', 'false');\n    var navItem = this.createElement('div', {\n      className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons'\n    });\n    var clsLeft = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVLEFT);\n    var navEle = this.createElement('div', {\n      id: id.concat('_left'),\n      className: clsLeft + ' ' + CLS_DISABLE\n    });\n    navEle.setAttribute('aria-disabled', 'true');\n    var navLeftItem = this.createElement('div', {\n      className: CLS_NAVLEFTARROW + ' ' + CLS_NAVARROW + ' e-icons'\n    });\n    navEle.appendChild(navLeftItem);\n    nav.appendChild(navItem);\n    element.appendChild(nav);\n    element.insertBefore(navEle, element.firstChild);\n\n    if (this.ieCheck) {\n      nav.classList.add('e-ie-align');\n      navEle.classList.add('e-ie-align');\n    }\n\n    this.eventBinding([nav, navEle]);\n  };\n\n  HScroll.prototype.onKeyPress = function (e) {\n    var _this = this;\n\n    if (e.key === 'Enter') {\n      var timeoutFun_1 = function timeoutFun_1() {\n        _this.keyTimeout = true;\n\n        _this.eleScrolling(10, e.target, true);\n      };\n\n      this.keyTimer = window.setTimeout(function () {\n        timeoutFun_1();\n      }, 100);\n    }\n  };\n\n  HScroll.prototype.onKeyUp = function (e) {\n    if (e.key !== 'Enter') {\n      return;\n    }\n\n    if (this.keyTimeout) {\n      this.keyTimeout = false;\n    } else {\n      e.target.click();\n    }\n\n    clearTimeout(this.keyTimer);\n  };\n\n  HScroll.prototype.eventBinding = function (ele) {\n    var _this = this;\n\n    [].slice.call(ele).forEach(function (el) {\n      new Touch(el, {\n        tapHold: _this.tabHoldHandler.bind(_this),\n        tapHoldThreshold: 500\n      });\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\n  HScroll.prototype.repeatScroll = function () {\n    clearInterval(this.timeout);\n  };\n\n  HScroll.prototype.tabHoldHandler = function (e) {\n    var _this = this;\n\n    var trgt = e.originalEvent.target;\n    trgt = this.contains(trgt, CLS_HSCROLLNAV) ? trgt.firstElementChild : trgt;\n    var scrollDis = 10;\n\n    var timeoutFun = function timeoutFun() {\n      _this.eleScrolling(scrollDis, trgt, true);\n    };\n\n    this.timeout = window.setInterval(function () {\n      timeoutFun();\n    }, 50);\n  };\n\n  HScroll.prototype.contains = function (ele, className) {\n    return ele.classList.contains(className);\n  };\n\n  HScroll.prototype.eleScrolling = function (scrollDis, trgt, isContinuous) {\n    var rootEle = this.element;\n    var classList = trgt.classList;\n\n    if (classList.contains(CLS_HSCROLLNAV)) {\n      classList = trgt.querySelector('.' + CLS_NAVARROW).classList;\n    }\n\n    if (this.contains(rootEle, CLS_RTL) && this.browserCheck) {\n      scrollDis = -scrollDis;\n    }\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      } else {\n        this.frameScrollRequest(scrollDis, '', isContinuous);\n      }\n    } else {\n      if (classList.contains(CLS_NAVLEFTARROW)) {\n        this.frameScrollRequest(scrollDis, 'add', isContinuous);\n      } else {\n        this.frameScrollRequest(scrollDis, '', isContinuous);\n      }\n    }\n  };\n\n  HScroll.prototype.clickEventHandler = function (e) {\n    this.eleScrolling(this.scrollStep, e.target, false);\n  };\n\n  HScroll.prototype.swipeHandler = function (e) {\n    var swipeEle = this.scrollEle;\n    var distance;\n\n    if (e.velocity <= 1) {\n      distance = e.distanceX / (e.velocity * 10);\n    } else {\n      distance = e.distanceX / e.velocity;\n    }\n\n    var start = 0.5;\n\n    var animate = function animate() {\n      var step = Math.sin(start);\n\n      if (step <= 0) {\n        window.cancelAnimationFrame(step);\n      } else {\n        if (e.swipeDirection === 'Left') {\n          swipeEle.scrollLeft += distance * step;\n        } else if (e.swipeDirection === 'Right') {\n          swipeEle.scrollLeft -= distance * step;\n        }\n\n        start -= 0.5;\n        window.requestAnimationFrame(animate);\n      }\n    };\n\n    animate();\n  };\n\n  HScroll.prototype.scrollUpdating = function (scrollVal, action) {\n    if (action === 'add') {\n      this.scrollEle.scrollLeft += scrollVal;\n    } else {\n      this.scrollEle.scrollLeft -= scrollVal;\n    }\n  };\n\n  HScroll.prototype.frameScrollRequest = function (scrollVal, action, isContinuous) {\n    var _this = this;\n\n    var step = 10;\n\n    if (isContinuous) {\n      this.scrollUpdating(scrollVal, action);\n      return;\n    }\n\n    if (!this.customStep) {\n      [].slice.call(selectAll('.' + CLS_OVERLAY, this.element)).forEach(function (el) {\n        scrollVal -= el.offsetWidth;\n      });\n    }\n\n    var animate = function animate() {\n      var scrollValue;\n      var scrollStep;\n\n      if (_this.contains(_this.element, CLS_RTL) && _this.browserCheck) {\n        scrollValue = -scrollVal;\n        scrollStep = -step;\n      } else {\n        scrollValue = scrollVal;\n        scrollStep = step;\n      }\n\n      if (scrollValue < step) {\n        window.cancelAnimationFrame(scrollStep);\n      } else {\n        _this.scrollUpdating(scrollStep, action);\n\n        scrollVal -= scrollStep;\n        window.requestAnimationFrame(animate);\n      }\n    };\n\n    animate();\n  };\n\n  HScroll.prototype.touchHandler = function (e) {\n    var ele = this.scrollEle;\n    var distance = e.distanceX;\n\n    if (this.ieCheck && this.contains(this.element, CLS_RTL)) {\n      distance = -distance;\n    }\n\n    if (e.scrollDirection === 'Left') {\n      ele.scrollLeft = ele.scrollLeft + distance;\n    } else if (e.scrollDirection === 'Right') {\n      ele.scrollLeft = ele.scrollLeft - distance;\n    }\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\n      if (isNullOrUndefined(addDisable)) {\n        classList(arrowIcon, [CLS_NAVRIGHTARROW], [CLS_NAVLEFTARROW]);\n      } else {\n        classList(arrowIcon, [CLS_NAVLEFTARROW], [CLS_NAVRIGHTARROW]);\n      }\n    } else {\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\n    this.repeatScroll();\n  };\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\n    if (scrollLeft <= 0) {\n      scrollLeft = -scrollLeft;\n    }\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\n      if (scrollLeft < OVERLAY_MAXWID) {\n        leftOverlay.style.width = scrollLeft + 'px';\n      } else {\n        leftOverlay.style.width = '40px';\n      }\n\n      if (target.scrollWidth - Math.ceil(width + scrollLeft) < OVERLAY_MAXWID) {\n        rightOverlay.style.width = target.scrollWidth - Math.ceil(width + scrollLeft) + 'px';\n      } else {\n        rightOverlay.style.width = '40px';\n      }\n    }\n\n    if (scrollLeft === 0) {\n      if (!this.contains(rootEle, CLS_RTL) || this.browserCheck || this.ieCheck) {\n        this.arrowDisabling(navLeftEle, navRightEle);\n      } else {\n        this.arrowDisabling(navRightEle, navLeftEle);\n      }\n    } else if (Math.ceil(width + scrollLeft + .1) >= target.scrollWidth) {\n      if (!this.contains(rootEle, CLS_RTL) || this.browserCheck || this.ieCheck) {\n        this.arrowDisabling(navRightEle, navLeftEle);\n      } else {\n        this.arrowDisabling(navLeftEle, navRightEle);\n      }\n    } else {\n      var disEle = this.element.querySelector('.' + CLS_HSCROLLNAV + '.' + CLS_DISABLE);\n\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\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\n      switch (prop) {\n        case 'scrollStep':\n          this.setScrollState();\n          break;\n\n        case 'enableRtl':\n          newProp.enableRtl ? this.element.classList.add(CLS_RTL) : this.element.classList.remove(CLS_RTL);\n          break;\n      }\n    }\n  };\n\n  __decorate([Property(null)], HScroll.prototype, \"scrollStep\", void 0);\n\n  HScroll = __decorate([NotifyPropertyChanges], HScroll);\n  return HScroll;\n}(Component);\n\nexport { HScroll };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nvar __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\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 * <div id=\"scroll\"/>\n * <script>\n *   var scrollObj = new VScroll();\n *   scrollObj.appendTo(\"#scroll\");\n * </script>\n * ```\n */\n\nvar VScroll =\n/** @class */\nfunction (_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\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\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\n    if (ele.id === '') {\n      ele.id = getUniqueID('vscroll');\n      this.uniqueId = true;\n    }\n\n    ele.style.display = 'block';\n\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\n\n  VScroll.prototype.render = function () {\n    this.touchModule = new Touch(this.element, {\n      scroll: this.touchHandler.bind(this),\n      swipe: this.swipeHandler.bind(this)\n    });\n    EventHandler.add(this.scrollEle, 'scroll', this.scrollEventHandler, this);\n\n    if (!this.isDevice) {\n      this.createNavIcon(this.element);\n    } else {\n      this.element.classList.add(CLS_DEVICE);\n      this.createOverlayElement(this.element);\n    }\n\n    this.setScrollState();\n    EventHandler.add(this.element, 'wheel', this.wheelEventHandler, this);\n  };\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    } else {\n      this.customStep = true;\n    }\n  };\n\n  VScroll.prototype.initialize = function () {\n    var scrollCnt = buildTag('div', {\n      className: CLS_VSCROLLCON\n    });\n    var scrollBar = buildTag('div', {\n      className: CLS_VSCROLLBAR\n    });\n    scrollBar.setAttribute('tabindex', '-1');\n    var ele = this.element;\n    var innerEle = [].slice.call(ele.children);\n\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\n    scrollBar.appendChild(scrollCnt);\n    ele.appendChild(scrollBar);\n    scrollBar.style.overflowY = 'hidden';\n    this.scrollEle = scrollBar;\n    this.scrollItems = scrollCnt;\n  };\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\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\n\n  VScroll.prototype.destroy = function () {\n    var el = this.element;\n    el.style.display = '';\n    removeClass([this.element], [CLS_ROOT, CLS_DEVICE]);\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\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\n    if (this.uniqueId) {\n      this.element.removeAttribute('id');\n    }\n\n    detach(this.scrollEle);\n\n    if (navs.length > 0) {\n      detach(navs[0]);\n\n      if (!isNullOrUndefined(navs[1])) {\n        detach(navs[1]);\n      }\n    }\n\n    EventHandler.remove(this.scrollEle, 'scroll', this.scrollEventHandler);\n    this.touchModule.destroy();\n    this.touchModule = null;\n\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\n\n  VScroll.prototype.disable = function (value) {\n    var navEle = selectAll('.e-scroll-nav:not(.' + CLS_DISABLE + ')', this.element);\n\n    if (value) {\n      this.element.classList.add(CLS_DISABLE);\n    } else {\n      this.element.classList.remove(CLS_DISABLE);\n    }\n\n    [].slice.call(navEle).forEach(function (el) {\n      el.setAttribute('tabindex', !value ? '0' : '-1');\n    });\n  };\n\n  VScroll.prototype.createOverlayElement = function (element) {\n    var id = element.id.concat('_nav');\n    var downOverlayEle = buildTag('div', {\n      className: CLS_OVERLAY + ' ' + CLS_DOWNOVERLAY\n    });\n    var clsDown = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVDOWN);\n    var downEle = buildTag('div', {\n      id: id.concat('down'),\n      className: clsDown\n    });\n    var navItem = buildTag('div', {\n      className: CLS_NAVDOWNARROW + ' ' + CLS_NAVARROW + ' e-icons'\n    });\n    downEle.appendChild(navItem);\n    var upEle = buildTag('div', {\n      className: CLS_OVERLAY + ' ' + CLS_UPOVERLAY\n    });\n\n    if (this.ieCheck) {\n      downEle.classList.add('e-ie-align');\n    }\n\n    element.appendChild(downOverlayEle);\n    element.appendChild(downEle);\n    element.insertBefore(upEle, element.firstChild);\n    this.eventBinding([downEle]);\n  };\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', {\n      id: id.concat('_down'),\n      className: clsDown\n    });\n    nav.setAttribute('aria-disabled', 'false');\n    var navItem = buildTag('div', {\n      className: CLS_NAVDOWNARROW + ' ' + CLS_NAVARROW + ' e-icons'\n    });\n    var clsUp = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVUP);\n    var navElement = buildTag('div', {\n      id: id.concat('_up'),\n      className: clsUp + ' ' + CLS_DISABLE\n    });\n    navElement.setAttribute('aria-disabled', 'true');\n    var navUpItem = buildTag('div', {\n      className: CLS_NAVUPARROW + ' ' + CLS_NAVARROW + ' e-icons'\n    });\n    navElement.appendChild(navUpItem);\n    nav.appendChild(navItem);\n    nav.setAttribute('tabindex', '0');\n    element.appendChild(nav);\n    element.insertBefore(navElement, element.firstChild);\n\n    if (this.ieCheck) {\n      nav.classList.add('e-ie-align');\n      navElement.classList.add('e-ie-align');\n    }\n\n    this.eventBinding([nav, navElement]);\n  };\n\n  VScroll.prototype.onKeyPress = function (ev) {\n    var _this = this;\n\n    if (ev.key === 'Enter') {\n      var timeoutFun_1 = function timeoutFun_1() {\n        _this.keyTimeout = true;\n\n        _this.eleScrolling(10, ev.target, true);\n      };\n\n      this.keyTimer = window.setTimeout(function () {\n        timeoutFun_1();\n      }, 100);\n    }\n  };\n\n  VScroll.prototype.onKeyUp = function (ev) {\n    if (ev.key !== 'Enter') {\n      return;\n    }\n\n    if (this.keyTimeout) {\n      this.keyTimeout = false;\n    } else {\n      ev.target.click();\n    }\n\n    clearTimeout(this.keyTimer);\n  };\n\n  VScroll.prototype.eventBinding = function (element) {\n    var _this = this;\n\n    [].slice.call(element).forEach(function (ele) {\n      new Touch(ele, {\n        tapHold: _this.tabHoldHandler.bind(_this),\n        tapHoldThreshold: 500\n      });\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\n  VScroll.prototype.repeatScroll = function () {\n    clearInterval(this.timeout);\n  };\n\n  VScroll.prototype.tabHoldHandler = function (ev) {\n    var _this = this;\n\n    var trgt = ev.originalEvent.target;\n    trgt = this.contains(trgt, CLS_VSCROLLNAV) ? trgt.firstElementChild : trgt;\n    var scrollDistance = 10;\n\n    var timeoutFun = function timeoutFun() {\n      _this.eleScrolling(scrollDistance, trgt, true);\n    };\n\n    this.timeout = window.setInterval(function () {\n      timeoutFun();\n    }, 50);\n  };\n\n  VScroll.prototype.contains = function (element, className) {\n    return element.classList.contains(className);\n  };\n\n  VScroll.prototype.eleScrolling = function (scrollDis, trgt, isContinuous) {\n    var classList = trgt.classList;\n\n    if (classList.contains(CLS_VSCROLLNAV)) {\n      classList = trgt.querySelector('.' + CLS_NAVARROW).classList;\n    }\n\n    if (classList.contains(CLS_NAVDOWNARROW)) {\n      this.frameScrollRequest(scrollDis, 'add', isContinuous);\n    } else if (classList.contains(CLS_NAVUPARROW)) {\n      this.frameScrollRequest(scrollDis, '', isContinuous);\n    }\n  };\n\n  VScroll.prototype.clickEventHandler = function (event) {\n    this.eleScrolling(this.scrollStep, event.target, false);\n  };\n\n  VScroll.prototype.wheelEventHandler = function (e) {\n    e.preventDefault();\n    this.frameScrollRequest(this.scrollStep, e.deltaY > 0 ? 'add' : '', false);\n  };\n\n  VScroll.prototype.swipeHandler = function (e) {\n    var swipeElement = this.scrollEle;\n    var distance;\n\n    if (e.velocity <= 1) {\n      distance = e.distanceY / (e.velocity * 10);\n    } else {\n      distance = e.distanceY / e.velocity;\n    }\n\n    var start = 0.5;\n\n    var animate = function animate() {\n      var step = Math.sin(start);\n\n      if (step <= 0) {\n        window.cancelAnimationFrame(step);\n      } else {\n        if (e.swipeDirection === 'Up') {\n          swipeElement.scrollTop += distance * step;\n        } else if (e.swipeDirection === 'Down') {\n          swipeElement.scrollTop -= distance * step;\n        }\n\n        start -= 0.02;\n        window.requestAnimationFrame(animate);\n      }\n    };\n\n    animate();\n  };\n\n  VScroll.prototype.scrollUpdating = function (scrollVal, action) {\n    if (action === 'add') {\n      this.scrollEle.scrollTop += scrollVal;\n    } else {\n      this.scrollEle.scrollTop -= scrollVal;\n    }\n  };\n\n  VScroll.prototype.frameScrollRequest = function (scrollValue, action, isContinuous) {\n    var _this = this;\n\n    var step = 10;\n\n    if (isContinuous) {\n      this.scrollUpdating(scrollValue, action);\n      return;\n    }\n\n    if (!this.customStep) {\n      [].slice.call(selectAll('.' + CLS_OVERLAY, this.element)).forEach(function (el) {\n        scrollValue -= el.offsetHeight;\n      });\n    }\n\n    var animate = function animate() {\n      if (scrollValue < step) {\n        window.cancelAnimationFrame(step);\n      } else {\n        _this.scrollUpdating(step, action);\n\n        scrollValue -= step;\n        window.requestAnimationFrame(animate);\n      }\n    };\n\n    animate();\n  };\n\n  VScroll.prototype.touchHandler = function (e) {\n    var el = this.scrollEle;\n    var distance = e.distanceY;\n\n    if (e.scrollDirection === 'Up') {\n      el.scrollTop = el.scrollTop + distance;\n    } else if (e.scrollDirection === 'Down') {\n      el.scrollTop = el.scrollTop - distance;\n    }\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\n      if (isNullOrUndefined(addDisableCls)) {\n        classList(arrowIcon, [CLS_NAVDOWNARROW], [CLS_NAVUPARROW]);\n      } else {\n        classList(arrowIcon, [CLS_NAVUPARROW], [CLS_NAVDOWNARROW]);\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\n    this.repeatScroll();\n  };\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\n    if (scrollTop <= 0) {\n      scrollTop = -scrollTop;\n    }\n\n    if (this.isDevice) {\n      if (scrollTop < OVERLAY_MAXWID) {\n        upOverlay.style.height = scrollTop + 'px';\n      } else {\n        upOverlay.style.height = '40px';\n      }\n\n      if (target.scrollHeight - Math.ceil(height + scrollTop) < OVERLAY_MAXWID) {\n        downOverlay.style.height = target.scrollHeight - Math.ceil(height + scrollTop) + 'px';\n      } else {\n        downOverlay.style.height = '40px';\n      }\n    }\n\n    if (scrollTop === 0) {\n      this.arrowDisabling(navUpEle, navDownEle);\n    } else if (Math.ceil(height + scrollTop + .1) >= target.scrollHeight) {\n      this.arrowDisabling(navDownEle, navUpEle);\n    } else {\n      var disEle = this.element.querySelector('.' + CLS_VSCROLLNAV + '.' + CLS_DISABLE);\n\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\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\n      switch (prop) {\n        case 'scrollStep':\n          this.setScrollState();\n          break;\n\n        case 'enableRtl':\n          if (newProp.enableRtl) {\n            this.element.classList.add(CLS_RTL);\n          } else {\n            this.element.classList.remove(CLS_RTL);\n          }\n\n          break;\n      }\n    }\n  };\n\n  __decorate([Property(null)], VScroll.prototype, \"scrollStep\", void 0);\n\n  VScroll = __decorate([NotifyPropertyChanges], VScroll);\n  return VScroll;\n}(Component);\n\nexport { VScroll };","var __extends = this && this.__extends || function () {\n  var _extendStatics = function extendStatics(d, b) {\n    _extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n      }\n    };\n\n    return _extendStatics(d, b);\n  };\n\n  return function (d, b) {\n    _extendStatics(d, b);\n\n    function __() {\n      this.constructor = d;\n    }\n\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\n\nvar __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n  var c = arguments.length,\n      r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n      d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n    if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  }\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\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 } 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 */\n\nvar Item =\n/** @class */\nfunction (_super) {\n  __extends(Item, _super);\n\n  function Item() {\n    return _super !== null && _super.apply(this, arguments) || this;\n  }\n\n  __decorate([Property('')], Item.prototype, \"id\", void 0);\n\n  __decorate([Property('')], Item.prototype, \"text\", void 0);\n\n  __decorate([Property('auto')], Item.prototype, \"width\", void 0);\n\n  __decorate([Property('')], Item.prototype, \"cssClass\", void 0);\n\n  __decorate([Property(false)], Item.prototype, \"showAlwaysInPopup\", void 0);\n\n  __decorate([Property(false)], Item.prototype, \"disabled\", void 0);\n\n  __decorate([Property('')], Item.prototype, \"prefixIcon\", void 0);\n\n  __decorate([Property('')], Item.prototype, \"suffixIcon\", void 0);\n\n  __decorate([Property(true)], Item.prototype, \"visible\", void 0);\n\n  __decorate([Property('None')], Item.prototype, \"overflow\", void 0);\n\n  __decorate([Property('')], Item.prototype, \"template\", void 0);\n\n  __decorate([Property('Button')], Item.prototype, \"type\", void 0);\n\n  __decorate([Property('Both')], Item.prototype, \"showTextOn\", void 0);\n\n  __decorate([Property(null)], Item.prototype, \"htmlAttributes\", void 0);\n\n  __decorate([Property('')], Item.prototype, \"tooltipText\", void 0);\n\n  __decorate([Property('Left')], Item.prototype, \"align\", void 0);\n\n  __decorate([Event()], Item.prototype, \"click\", void 0);\n\n  return Item;\n}(ChildProperty);\n\nexport { Item };\n/**\n * The Toolbar control contains a group of commands that are aligned horizontally.\n * ```html\n * <div id=\"toolbar\"/>\n * <script>\n *   var toolbarObj = new Toolbar();\n *   toolbarObj.appendTo(\"#toolbar\");\n * </script>\n * ```\n */\n\nvar Toolbar =\n/** @class */\nfunction (_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\n\n  function Toolbar(options, element) {\n    var _this = _super.call(this, options, element) || this;\n\n    _this.resizeContext = _this.resize.bind(_this);\n    /**\n     * Contains the keyboard configuration of the Toolbar.\n     */\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\n\n  Toolbar.prototype.destroy = function () {\n    var _this = this;\n\n    if (this.isReact) {\n      this.clearTemplate();\n    }\n\n    _super.prototype.destroy.call(this);\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\n    while (this.element.lastElementChild) {\n      this.element.removeChild(this.element.lastElementChild);\n    }\n\n    if (this.trgtEle) {\n      this.element.appendChild(this.ctrlTem);\n    }\n\n    this.clearProperty();\n    this.popObj = null;\n    this.tbarAlign = null;\n    this.remove(this.element, 'e-toolpop');\n\n    if (this.cssClass) {\n      removeClass([this.element], this.cssClass.split(' '));\n    }\n\n    this.element.removeAttribute('style');\n    ['aria-disabled', 'aria-orientation', 'aria-haspopup', 'role'].forEach(function (attrb) {\n      return _this.element.removeAttribute(attrb);\n    });\n  };\n  /**\n   * Initialize the event handler\n   *\n   * @private\n   * @returns {void}\n   */\n\n\n  Toolbar.prototype.preRender = function () {\n    var eventArgs = {\n      enableCollision: this.enableCollision,\n      scrollStep: this.scrollStep\n    };\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\n    if (this.enableRtl) {\n      this.add(this.element, CLS_RTL);\n    }\n  };\n\n  Toolbar.prototype.wireEvents = function () {\n    EventHandler.add(this.element, 'click', this.clickHandler, this);\n    window.addEventListener('resize', this.resizeContext);\n\n    if (this.allowKeyboard) {\n      this.wireKeyboardEvent();\n    }\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.element.setAttribute('tabIndex', '0');\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\n  Toolbar.prototype.docKeyDown = function (e) {\n    if (e.target.tagName === 'INPUT') {\n      return;\n    }\n\n    var popCheck = !isNOU(this.popObj) && isVisible(this.popObj.element) && this.overflowMode !== 'Extended';\n\n    if (e.keyCode === 9 && e.target.classList.contains('e-hor-nav') === true && popCheck) {\n      this.popObj.hide({\n        name: 'FadeOut',\n        duration: 100\n      });\n    }\n\n    var keyCheck = e.keyCode === 40 || e.keyCode === 38 || e.keyCode === 35 || e.keyCode === 36;\n\n    if (keyCheck) {\n      e.preventDefault();\n    }\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    EventHandler.remove(document, 'scroll', this.docEvent);\n    EventHandler.remove(document, 'click', this.docEvent);\n  };\n\n  Toolbar.prototype.clearProperty = function () {\n    this.tbarEle = [];\n    this.tbarAlgEle = {\n      lefts: [],\n      centers: [],\n      rights: []\n    };\n  };\n\n  Toolbar.prototype.docEvent = function (e) {\n    var popEle = closest(e.target, '.e-popup');\n\n    if (this.popObj && isVisible(this.popObj.element) && !popEle && this.overflowMode === 'Popup') {\n      this.popObj.hide({\n        name: 'FadeOut',\n        duration: 100\n      });\n    }\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\n      this.scrollModule.destroy();\n      this.scrollModule = null;\n    }\n  };\n\n  Toolbar.prototype.destroyItems = function () {\n    if (this.element) {\n      [].slice.call(this.element.querySelectorAll('.' + CLS_ITEM)).forEach(function (el) {\n        detach(el);\n      });\n    }\n\n    var tbarItems = this.element.querySelector('.' + CLS_ITEMS);\n\n    if (this.tbarAlign) {\n      [].slice.call(tbarItems.children).forEach(function (el) {\n        detach(el);\n      });\n      this.tbarAlign = false;\n      this.remove(tbarItems, CLS_TBARPOS);\n    }\n\n    this.clearProperty();\n  };\n\n  Toolbar.prototype.destroyMode = function () {\n    if (this.scrollModule) {\n      this.remove(this.scrollModule.element, CLS_RTL);\n      this.destroyScroll();\n    }\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\n    if (tempEle) {\n      this.remove(tempEle, CLS_MULTIROW);\n    }\n\n    if (this.popObj) {\n      this.popupRefresh(this.popObj.element, true);\n    }\n  };\n\n  Toolbar.prototype.add = function (ele, val) {\n    ele.classList.add(val);\n  };\n\n  Toolbar.prototype.remove = function (ele, val) {\n    ele.classList.remove(val);\n  };\n\n  Toolbar.prototype.elementFocus = function (ele) {\n    var fChild = ele.firstElementChild;\n\n    if (fChild) {\n      fChild.focus();\n      this.activeEleSwitch(ele);\n    } else {\n      ele.focus();\n    }\n  };\n\n  Toolbar.prototype.clstElement = function (tbrNavChk, trgt) {\n    var clst;\n\n    if (tbrNavChk && this.popObj && isVisible(this.popObj.element)) {\n      clst = this.popObj.element.querySelector('.' + CLS_ITEM);\n    } else if (this.element === trgt || tbrNavChk) {\n      clst = this.element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_DISABLE + ' ):not(.' + CLS_SEPARATOR + ' ):not(.' + CLS_HIDDEN + ' )');\n    } else {\n      clst = closest(trgt, '.' + CLS_ITEM);\n    }\n\n    return clst;\n  };\n\n  Toolbar.prototype.keyHandling = function (clst, e, trgt, navChk, scrollChk) {\n    var popObj = this.popObj;\n    var rootEle = this.element;\n    var popAnimate = {\n      name: 'FadeOut',\n      duration: 100\n    };\n    var value = e.action === 'moveUp' ? 'previous' : 'next';\n    var ele;\n    var nodes;\n\n    switch (e.action) {\n      case 'moveRight':\n        if (this.isVertical) {\n          return;\n        }\n\n        if (rootEle === trgt) {\n          this.elementFocus(clst);\n        } else if (!navChk) {\n          this.eleFocus(clst, 'next');\n        }\n\n        break;\n\n      case 'moveLeft':\n        if (this.isVertical) {\n          return;\n        }\n\n        if (!navChk) {\n          this.eleFocus(clst, 'previous');\n        }\n\n        break;\n\n      case 'home':\n      case 'end':\n        if (clst) {\n          var popupCheck = closest(clst, '.e-popup');\n\n          if (popupCheck) {\n            if (isVisible(this.popObj.element)) {\n              nodes = [].slice.call(popupCheck.children);\n\n              if (e.action === 'home') {\n                ele = nodes[0];\n              } else {\n                ele = nodes[nodes.length - 1];\n              }\n            }\n          } else {\n            nodes = this.element.querySelectorAll('.' + CLS_ITEMS + ' .' + CLS_ITEM);\n\n            if (e.action === 'home') {\n              ele = nodes[0];\n            } else {\n              ele = nodes[nodes.length - 1];\n            }\n          }\n\n          if (ele) {\n            this.elementFocus(ele);\n          }\n        }\n\n        break;\n\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\n            if (value === 'previous' && popFrstEle === clst || value === 'next' && popEle.lastElementChild === clst) {\n              return;\n            } else {\n              this.eleFocus(clst, value);\n            }\n          } else if (e.action === 'moveDown' && popObj && isVisible(popObj.element)) {\n            this.elementFocus(clst);\n          }\n        } else {\n          if (e.action === 'moveUp') {\n            this.eleFocus(clst, 'previous');\n          } else {\n            this.eleFocus(clst, 'next');\n          }\n        }\n\n        break;\n\n      case 'tab':\n        if (!scrollChk && !navChk) {\n          var ele_1 = clst.firstElementChild;\n\n          if (rootEle === trgt) {\n            if (this.activeEle) {\n              this.activeEle.focus();\n            } else {\n              this.activeEleRemove(ele_1);\n              ele_1.focus();\n            }\n\n            this.element.removeAttribute('tabindex');\n          }\n        }\n\n        break;\n\n      case 'popupClose':\n        if (popObj && this.overflowMode !== 'Extended') {\n          popObj.hide(popAnimate);\n        }\n\n        break;\n\n      case 'popupOpen':\n        if (!navChk) {\n          return;\n        }\n\n        if (popObj && !isVisible(popObj.element)) {\n          popObj.element.style.top = rootEle.offsetHeight + 'px';\n          popObj.show({\n            name: 'FadeIn',\n            duration: 100\n          });\n        } else {\n          popObj.hide(popAnimate);\n        }\n\n        break;\n    }\n  };\n\n  Toolbar.prototype.keyActionHandler = function (e) {\n    var trgt = e.target;\n\n    if (trgt.tagName === 'INPUT' || trgt.tagName === 'TEXTAREA' || this.element.classList.contains(CLS_DISABLE)) {\n      return;\n    }\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\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\n\n  Toolbar.prototype.disable = function (value) {\n    var rootEle = this.element;\n\n    if (value) {\n      rootEle.classList.add(CLS_DISABLE);\n    } else {\n      rootEle.classList.remove(CLS_DISABLE);\n    }\n\n    rootEle.setAttribute('tabindex', !value ? '0' : '-1');\n\n    if (this.activeEle) {\n      this.activeEle.setAttribute('tabindex', !value ? '0' : '-1');\n    }\n\n    if (this.scrollModule) {\n      this.scrollModule.disable(value);\n    }\n\n    if (this.popObj) {\n      if (isVisible(this.popObj.element) && this.overflowMode !== 'Extended') {\n        this.popObj.hide();\n      }\n\n      rootEle.querySelector('#' + rootEle.id + '_nav').setAttribute('tabindex', !value ? '0' : '-1');\n    }\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);\n  };\n\n  Toolbar.prototype.eleFocus = function (closest, pos) {\n    var sib = Object(closest)[pos + 'ElementSibling'];\n\n    if (sib) {\n      var skipEle = this.eleContains(sib);\n\n      if (skipEle) {\n        this.eleFocus(sib, pos);\n        return;\n      }\n\n      this.elementFocus(sib);\n    } else if (this.tbarAlign) {\n      var elem = Object(closest.parentElement)[pos + 'ElementSibling'];\n\n      if (!isNOU(elem) && elem.children.length === 0) {\n        elem = Object(elem)[pos + 'ElementSibling'];\n      }\n\n      if (!isNOU(elem) && elem.children.length > 0) {\n        if (pos === 'next') {\n          var el = elem.querySelector('.' + CLS_ITEM);\n\n          if (this.eleContains(el)) {\n            this.eleFocus(el, pos);\n          } else {\n            el.firstElementChild.focus();\n            this.activeEleSwitch(el);\n          }\n        } else {\n          var el = elem.lastElementChild;\n\n          if (this.eleContains(el)) {\n            this.eleFocus(el, pos);\n          } else {\n            this.elementFocus(el);\n          }\n        }\n      }\n    }\n  };\n\n  Toolbar.prototype.clickHandler = function (e) {\n    var _this = this;\n\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\n    if (!popupNav) {\n      popupNav = trgt;\n    }\n\n    if (!ele.children[0].classList.contains('e-hscroll') && !ele.children[0].classList.contains('e-vscroll') && clsList.contains(CLS_TBARNAV)) {\n      clsList = trgt.querySelector('.e-icons').classList;\n    }\n\n    if (clsList.contains(CLS_POPUPICON) || clsList.contains(CLS_POPUPDOWN)) {\n      this.popupClickHandler(ele, popupNav, CLS_RTL);\n    }\n\n    var itemObj;\n    var clst = closest(e.target, '.' + CLS_ITEM);\n\n    if ((isNOU(clst) || clst.classList.contains(CLS_DISABLE)) && !popupNav.classList.contains(CLS_TBARNAV)) {\n      return;\n    }\n\n    if (clst) {\n      var tempItem = this.items[this.tbarEle.indexOf(clst)];\n      itemObj = tempItem;\n    }\n\n    var eventArgs = {\n      originalEvent: e,\n      item: itemObj\n    };\n\n    if (itemObj && !isNOU(itemObj.click)) {\n      this.trigger('items[' + this.tbarEle.indexOf(clst) + '].click', eventArgs);\n    }\n\n    if (!eventArgs.cancel) {\n      this.trigger('clicked', eventArgs, function (clickedArgs) {\n        if (!isNOU(_this.popObj) && isPopupElement && !clickedArgs.cancel && _this.overflowMode === 'Popup' && clickedArgs.item && clickedArgs.item.type !== 'Input') {\n          _this.popObj.hide({\n            name: 'FadeOut',\n            duration: 100\n          });\n        }\n      });\n    }\n  };\n\n  Toolbar.prototype.popupClickHandler = function (ele, popupNav, CLS_RTL) {\n    var popObj = this.popObj;\n\n    if (isVisible(popObj.element)) {\n      popupNav.classList.remove(CLS_TBARNAVACT);\n      popObj.hide({\n        name: 'FadeOut',\n        duration: 100\n      });\n    } else {\n      if (ele.classList.contains(CLS_RTL)) {\n        popObj.enableRtl = true;\n        popObj.position = {\n          X: 'left',\n          Y: 'top'\n        };\n      }\n\n      if (popObj.offsetX === 0 && !ele.classList.contains(CLS_RTL)) {\n        popObj.enableRtl = false;\n        popObj.position = {\n          X: 'right',\n          Y: 'top'\n        };\n      }\n\n      popObj.dataBind();\n      popObj.refreshPosition();\n      popObj.element.style.top = this.getElementOffsetY() + 'px';\n\n      if (this.overflowMode === 'Extended') {\n        popObj.element.style.minHeight = '0px';\n      }\n\n      popupNav.classList.add(CLS_TBARNAVACT);\n      popObj.show({\n        name: 'FadeIn',\n        duration: 100\n      });\n    }\n  };\n  /**\n   * To Initialize the control rendering\n   *\n   * @private\n   * @returns {void}\n   */\n\n\n  Toolbar.prototype.render = function () {\n    this.initialize();\n    this.renderControl();\n    this.wireEvents();\n    this.renderComplete();\n  };\n\n  Toolbar.prototype.initialize = function () {\n    var width = formatUnit(this.width);\n    var height = formatUnit(this.height);\n\n    if (Browser.info.name !== 'msie' || this.height !== 'auto' || this.overflowMode === 'MultiRow') {\n      setStyle(this.element, {\n        'height': height\n      });\n    }\n\n    setStyle(this.element, {\n      'width': width\n    });\n    var ariaAttr = {\n      'role': 'toolbar',\n      'aria-disabled': 'false',\n      'aria-haspopup': 'false',\n      'aria-orientation': !this.isVertical ? 'horizontal' : 'vertical'\n    };\n    attributes(this.element, ariaAttr);\n\n    if (this.cssClass) {\n      addClass([this.element], this.cssClass.split(' '));\n    }\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 = {\n      lefts: [],\n      centers: [],\n      rights: []\n    };\n    this.renderItems();\n    this.renderLayout();\n  };\n\n  Toolbar.prototype.renderLayout = function () {\n    this.renderOverflowMode();\n\n    if (this.tbarAlign) {\n      this.itemPositioning();\n    }\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\n    this.separator();\n  };\n\n  Toolbar.prototype.itemsAlign = function (items, itemEleDom) {\n    var innerItem;\n    var innerPos;\n\n    if (!this.tbarEle) {\n      this.tbarEle = [];\n    }\n\n    for (var i = 0; i < items.length; i++) {\n      innerItem = this.renderSubComponent(items[i], i);\n\n      if (this.tbarEle.indexOf(innerItem) === -1) {\n        this.tbarEle.push(innerItem);\n      }\n\n      if (!this.tbarAlign) {\n        this.tbarItemAlign(items[i], itemEleDom, i);\n      }\n\n      innerPos = itemEleDom.querySelector('.e-toolbar-' + items[i].align.toLowerCase());\n\n      if (innerPos) {\n        if (!(items[i].showAlwaysInPopup && items[i].overflow !== 'Show')) {\n          this.tbarAlgEle[(items[i].align + 's').toLowerCase()].push(innerItem);\n        }\n\n        innerPos.appendChild(innerItem);\n      } else {\n        itemEleDom.appendChild(innerItem);\n      }\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\n\n  Toolbar.prototype.changeOrientation = function () {\n    var ele = this.element;\n\n    if (this.isVertical) {\n      ele.classList.remove(CLS_VERTICAL);\n      this.isVertical = false;\n\n      if (this.height === 'auto' || this.height === '100%') {\n        ele.style.height = this.height;\n      }\n\n      ele.setAttribute('aria-orientation', 'horizontal');\n    } else {\n      ele.classList.add(CLS_VERTICAL);\n      this.isVertical = true;\n      ele.setAttribute('aria-orientation', 'vertical');\n      setStyle(this.element, {\n        'height': formatUnit(this.height),\n        'width': formatUnit(this.width)\n      });\n    }\n\n    this.destroyMode();\n    this.refreshOverflow();\n  };\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\n      if (this.isVertical) {\n        this.scrollModule = new VScroll({\n          scrollStep: this.scrollStep,\n          enableRtl: this.enableRtl\n        }, innerItems[0]);\n      } else {\n        this.scrollModule = new HScroll({\n          scrollStep: this.scrollStep,\n          enableRtl: this.enableRtl\n        }, innerItems[0]);\n      }\n\n      this.remove(this.scrollModule.element, CLS_TBARPOS);\n      setStyle(this.element, {\n        overflow: 'hidden'\n      });\n    }\n  };\n\n  Toolbar.prototype.itemWidthCal = function (items) {\n    var _this = this;\n\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\n  Toolbar.prototype.getScrollCntEle = function (innerItem) {\n    var trgClass = this.isVertical ? '.e-vscroll-content' : '.e-hscroll-content';\n    return innerItem.querySelector(trgClass);\n  };\n\n  Toolbar.prototype.checkOverflow = function (element, innerItem) {\n    if (isNOU(element) || isNOU(innerItem) || !isVisible(element)) {\n      return false;\n    }\n\n    var eleWidth = this.isVertical ? element.offsetHeight : element.offsetWidth;\n    var itemWidth = this.isVertical ? innerItem.offsetHeight : innerItem.offsetWidth;\n\n    if (this.tbarAlign || this.scrollModule || eleWidth === itemWidth) {\n      itemWidth = this.itemWidthCal(this.scrollModule ? this.getScrollCntEle(innerItem) : innerItem);\n    }\n\n    var popNav = element.querySelector('.' + CLS_TBARNAV);\n    var scrollNav = element.querySelector('.' + CLS_TBARSCRLNAV);\n    var navEleWidth = 0;\n\n    if (popNav) {\n      navEleWidth = this.isVertical ? popNav.offsetHeight : popNav.offsetWidth;\n    } else if (scrollNav) {\n      navEleWidth = this.isVertical ? scrollNav.offsetHeight * 2 : scrollNav.offsetWidth * 2;\n    }\n\n    if (itemWidth > eleWidth - navEleWidth) {\n      return true;\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\n\n  Toolbar.prototype.refreshOverflow = function () {\n    this.resize();\n  };\n\n  Toolbar.prototype.toolbarAlign = function (innerItems) {\n    if (this.tbarAlign) {\n      this.add(innerItems, CLS_TBARPOS);\n      this.itemPositioning();\n    }\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\n    if (ele && ele.children.length > 0) {\n      this.offsetWid = ele.offsetWidth;\n      this.remove(this.element, 'e-toolpop');\n\n      if (Browser.info.name === 'msie' && this.height === 'auto') {\n        ele.style.height = '';\n      }\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\n          break;\n\n        case 'Popup':\n          this.add(this.element, 'e-toolpop');\n\n          if (this.tbarAlign) {\n            this.removePositioning();\n          }\n\n          if (this.checkOverflow(ele, innerItems) || priorityCheck) {\n            this.setOverflowAttributes(ele);\n          }\n\n          this.toolbarAlign(innerItems);\n          break;\n\n        case 'MultiRow':\n          this.add(innerItems, CLS_MULTIROW);\n\n          if (this.checkOverflow(ele, innerItems) && this.tbarAlign) {\n            this.removePositioning();\n            this.add(innerItems, CLS_MULTIROWPOS);\n          }\n\n          if (ele.style.overflow === 'hidden') {\n            ele.style.overflow = '';\n          }\n\n          if (Browser.info.name === 'msie' || ele.style.height !== 'auto') {\n            ele.style.height = 'auto';\n          }\n\n          break;\n\n        case 'Extended':\n          this.add(this.element, CLS_EXTEANDABLE_TOOLBAR);\n\n          if (this.checkOverflow(ele, innerItems) || priorityCheck) {\n            if (this.tbarAlign) {\n              this.removePositioning();\n            }\n\n            this.setOverflowAttributes(ele);\n          }\n\n          this.toolbarAlign(innerItems);\n      }\n    }\n  };\n\n  Toolbar.prototype.setOverflowAttributes = function (ele) {\n    this.createPopupEle(ele, [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, ele)));\n    this.element.querySelector('.' + CLS_TBARNAV).setAttribute('tabIndex', '0');\n    this.element.querySelector('.' + CLS_TBARNAV).setAttribute('role', 'list');\n  };\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\n    if (eleInlineItem !== null) {\n      if (this.overflowMode === 'MultiRow') {\n        eleInlineItem.classList.remove(CLS_MULTIROW_SEPARATOR);\n      } else if (this.overflowMode === 'Extended') {\n        eleInlineItem.classList.remove(CLS_EXTENDABLE_SEPARATOR);\n      }\n    }\n\n    for (var i = 0; i <= eleItem.length - 1; i++) {\n      if (eleItem[i].offsetLeft < 30 && eleItem[i].offsetLeft !== 0) {\n        if (this.overflowMode === 'MultiRow') {\n          eleItem[i].classList.add(CLS_MULTIROW_SEPARATOR);\n        } else if (this.overflowMode === 'Extended') {\n          eleItem[i].classList.add(CLS_EXTENDABLE_SEPARATOR);\n        }\n      }\n    }\n  };\n\n  Toolbar.prototype.createPopupEle = function (ele, innerEle) {\n    var innerNav = ele.querySelector('.' + CLS_TBARNAV);\n    var vertical = this.isVertical;\n\n    if (!innerNav) {\n      this.createPopupIcon(ele);\n    }\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, {\n      direction: 'initial'\n    });\n    this.checkPriority(ele, innerEle, eleWidth, true);\n\n    if (this.enableRtl) {\n      this.element.classList.add('e-rtl');\n    }\n\n    this.element.style.removeProperty('direction');\n    this.createPopup();\n  };\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\n      if (el.classList.contains(CLS_TBAROVERFLOW) && nodes.length > 0) {\n        if (tbarObj.tbResize && nodes.length > index) {\n          ele.insertBefore(el, nodes[index]);\n          ++nodePri;\n        } else {\n          ele.insertBefore(el, ele.children[nodes.length]);\n          ++nodePri;\n        }\n      } else if (el.classList.contains(CLS_TBAROVERFLOW)) {\n        ele.insertBefore(el, ele.firstChild);\n        ++nodePri;\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      } else if (el.classList.contains(CLS_POPOVERFLOW)) {\n        popupPri.push(el);\n      } else if (tbarObj.tbResize) {\n        ele.insertBefore(el, ele.childNodes[nodeIndex + nodePri]);\n        ++nodeIndex;\n      } else {\n        ele.appendChild(el);\n      }\n\n      if (el.classList.contains(CLS_SEPARATOR)) {\n        setStyle(el, {\n          display: '',\n          height: sepHeight + 'px'\n        });\n      } else {\n        setStyle(el, {\n          display: '',\n          height: eleHeight + 'px'\n        });\n      }\n    });\n    popupPri.forEach(function (el) {\n      ele.appendChild(el);\n    });\n    var tbarEle = selectAll('.' + CLS_ITEM, element.querySelector('.' + CLS_ITEMS));\n\n    for (var i = tbarEle.length - 1; i >= 0; i--) {\n      var tbarElement = tbarEle[i];\n\n      if (tbarElement.classList.contains(CLS_SEPARATOR) && this.overflowMode !== 'Extended') {\n        setStyle(tbarElement, {\n          display: 'none'\n        });\n      } else {\n        break;\n      }\n    }\n  };\n\n  Toolbar.prototype.createPopup = function () {\n    var element = this.element;\n    var sepHeight;\n    var sepItem;\n\n    if (this.overflowMode === 'Extended') {\n      sepItem = element.querySelector('.' + CLS_SEPARATOR + ':not(.' + CLS_POPUP + ')');\n      sepHeight = element.style.height === 'auto' || element.style.height === '' ? null : sepItem.offsetHeight;\n    }\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    var popupEle = document.getElementById(element.id + '_popup');\n\n    if (popupEle && popupEle.classList.contains(CLS_POPUPCLASS)) {\n      ele = popupEle;\n    } else {\n      var extendEle = this.createElement('div', {\n        id: element.id + '_popup',\n        className: CLS_POPUPCLASS + ' ' + CLS_EXTENDABLECLASS\n      });\n      var popupEle_1 = this.createElement('div', {\n        id: element.id + '_popup',\n        className: CLS_POPUPCLASS\n      });\n      ele = this.overflowMode === 'Extended' ? extendEle : popupEle_1;\n    }\n\n    this.pushingPoppedEle(this, popupPri, ele, eleHeight, sepHeight);\n    this.popupInit(element, ele);\n  };\n\n  Toolbar.prototype.getElementOffsetY = function () {\n    return this.overflowMode === 'Extended' && window.getComputedStyle(this.element).getPropertyValue('box-sizing') === 'border-box' ? this.element.clientHeight : this.element.offsetHeight;\n  };\n\n  Toolbar.prototype.popupInit = function (element, ele) {\n    if (!this.popObj) {\n      element.appendChild(ele);\n      setStyle(this.element, {\n        overflow: ''\n      });\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: {\n          Y: this.enableCollision ? 'flip' : 'none'\n        },\n        position: this.enableRtl ? {\n          X: 'left',\n          Y: 'top'\n        } : {\n          X: 'right',\n          Y: 'top'\n        }\n      });\n      popup.appendTo(ele);\n\n      if (this.overflowMode === 'Extended') {\n        popup.width = parseFloat(eleStyles.width) + parseFloat(eleStyles.borderRightWidth) * 2;\n        popup.offsetX = 0;\n      }\n\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\n      if (this.isVertical) {\n        popup.element.style.visibility = 'hidden';\n      }\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      } else {\n        popup.hide();\n      }\n\n      this.popObj = popup;\n      this.element.setAttribute('aria-haspopup', 'true');\n    } else {\n      var popupEle = this.popObj.element;\n      setStyle(popupEle, {\n        maxHeight: '',\n        display: 'block'\n      });\n      setStyle(popupEle, {\n        maxHeight: popupEle.offsetHeight + 'px',\n        display: ''\n      });\n    }\n  };\n\n  Toolbar.prototype.tbarPopupHandler = function (isOpen) {\n    if (this.overflowMode === 'Extended') {\n      isOpen ? this.add(this.element, CLS_EXTENDEDPOPOPEN) : this.remove(this.element, CLS_EXTENDEDPOPOPEN);\n    }\n  };\n\n  Toolbar.prototype.popupOpen = function (e) {\n    var popObj = this.popObj;\n\n    if (!this.isVertical) {\n      popObj.offsetY = this.getElementOffsetY();\n      popObj.dataBind();\n    }\n\n    var popupEle = this.popObj.element;\n    var toolEle = this.popObj.element.parentElement;\n    var popupNav = toolEle.querySelector('.' + CLS_TBARNAV);\n    setStyle(popObj.element, {\n      height: 'auto',\n      maxHeight: ''\n    });\n    popObj.element.style.maxHeight = popObj.element.offsetHeight + 'px';\n\n    if (this.overflowMode === 'Extended') {\n      popObj.element.style.minHeight = '';\n    }\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\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\n      for (var i = 0; i <= popupEle.childElementCount; i++) {\n        var ele = popupEle.children[i];\n\n        if (ele.offsetTop + ele.offsetHeight > overflowHeight) {\n          overflowHeight = ele.offsetTop;\n          break;\n        }\n      }\n\n      setStyle(popObj.element, {\n        maxHeight: overflowHeight + 'px'\n      });\n    } else if (this.isVertical) {\n      var tbEleData = this.element.getBoundingClientRect();\n      setStyle(popObj.element, {\n        maxHeight: tbEleData.top + this.element.offsetHeight + 'px',\n        bottom: 0,\n        visibility: ''\n      });\n    }\n\n    if (popObj) {\n      popObj.refreshPosition();\n    }\n  };\n\n  Toolbar.prototype.popupClose = function (e) {\n    var element = this.element;\n    var popupNav = element.querySelector('.' + CLS_TBARNAV);\n    var popIcon = popupNav.firstElementChild;\n    popupNav.classList.remove(CLS_TBARNAVACT);\n    classList(popIcon, [CLS_POPUPDOWN], [CLS_POPUPICON]);\n    this.tbarPopupHandler(false);\n  };\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\n    var checkClass = function checkClass(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\n    for (var i = len - 1; i >= 0; i--) {\n      var mrgn = void 0;\n      var compuStyle = window.getComputedStyle(inEle[i]);\n\n      if (this.isVertical) {\n        mrgn = parseFloat(compuStyle.marginTop);\n        mrgn += parseFloat(compuStyle.marginBottom);\n      } else {\n        mrgn = parseFloat(compuStyle.marginRight);\n        mrgn += parseFloat(compuStyle.marginLeft);\n      }\n\n      var fstEleCheck = inEle[i] === this.tbarEle[0];\n\n      if (fstEleCheck) {\n        this.tbarEleMrgn = mrgn;\n      }\n\n      eleOffset = this.isVertical ? inEle[i].offsetHeight : inEle[i].offsetWidth;\n      var eleWid_1 = fstEleCheck ? eleOffset + mrgn : eleOffset;\n\n      if (checkClass(inEle[i], [CLS_POPPRI]) && popPriority) {\n        inEle[i].classList.add(CLS_POPUP);\n\n        if (this.isVertical) {\n          setStyle(inEle[i], {\n            display: 'none',\n            minHeight: eleWid_1 + 'px'\n          });\n        } else {\n          setStyle(inEle[i], {\n            display: 'none',\n            minWidth: eleWid_1 + 'px'\n          });\n        }\n\n        itemPopCount++;\n      }\n\n      if (this.isVertical) {\n        checkoffset = inEle[i].offsetTop + inEle[i].offsetHeight + mrgn > eleWidth;\n      } else {\n        checkoffset = inEle[i].offsetLeft + inEle[i].offsetWidth + mrgn > eleWidth;\n      }\n\n      if (checkoffset) {\n        if (inEle[i].classList.contains(CLS_SEPARATOR)) {\n          if (this.overflowMode === 'Extended') {\n            if (itemCount === itemPopCount) {\n              var sepEle = inEle[i];\n\n              if (checkClass(sepEle, [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n                inEle[i].classList.add(CLS_POPUP);\n                itemPopCount++;\n              }\n            }\n\n            itemCount++;\n          } else if (this.overflowMode === 'Popup') {\n            if (sepCheck > 0 && itemCount === itemPopCount) {\n              var sepEle = inEle[i + itemCount + (sepCheck - 1)];\n\n              if (checkClass(sepEle, [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n                setStyle(sepEle, {\n                  display: 'none'\n                });\n              }\n            }\n\n            sepCheck++;\n            itemCount = 0;\n            itemPopCount = 0;\n          }\n        } else {\n          itemCount++;\n        }\n\n        if (inEle[i].classList.contains(CLS_TBAROVERFLOW) && pre) {\n          eleWidth -= (this.isVertical ? inEle[i].offsetHeight : inEle[i].offsetWidth) + mrgn;\n        } else if (!checkClass(inEle[i], [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n          inEle[i].classList.add(CLS_POPUP);\n\n          if (this.isVertical) {\n            setStyle(inEle[i], {\n              display: 'none',\n              minHeight: eleWid_1 + 'px'\n            });\n          } else {\n            setStyle(inEle[i], {\n              display: 'none',\n              minWidth: eleWid_1 + 'px'\n            });\n          }\n\n          itemPopCount++;\n        } else {\n          eleWidth -= (this.isVertical ? inEle[i].offsetHeight : inEle[i].offsetWidth) + mrgn;\n        }\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\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', {\n      id: id,\n      className: className\n    });\n\n    if (Browser.info.name === 'msie' || Browser.info.name === 'edge') {\n      nav.classList.add('e-ie-align');\n    }\n\n    var navItem = this.createElement('div', {\n      className: CLS_POPUPDOWN + ' e-icons'\n    });\n    nav.appendChild(navItem);\n    nav.setAttribute('tabindex', '0');\n    nav.setAttribute('role', 'list');\n    element.appendChild(nav);\n  };\n\n  Toolbar.prototype.tbarPriRef = function (inEle, indx, sepPri, el, des, elWid, wid, ig) {\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\n    var checkClass = function checkClass(ele, val) {\n      return ele.classList.contains(val);\n    };\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\n      if (!isNOU(eleSep) && checkClass(eleSep, CLS_SEPARATOR) && !isVisible(eleSep) || ignoreCheck) {\n        var sepDisplay = 'none';\n        eleSep.style.display = 'inherit';\n        var eleSepWidth = eleSep.offsetWidth + parseFloat(window.getComputedStyle(eleSep).marginRight) * 2;\n        var prevSep = eleSep.previousElementSibling;\n\n        if (elWid + eleSepWidth < wid || des) {\n          inEle.insertBefore(el, inEle.children[indx + ignoreCount - (indx - sepPri)]);\n\n          if (!isNOU(prevSep)) {\n            prevSep.style.display = '';\n          }\n        } else {\n          if (prevSep.classList.contains(CLS_SEPARATOR)) {\n            prevSep.style.display = sepDisplay;\n          }\n        }\n\n        eleSep.style.display = '';\n      } else {\n        inEle.insertBefore(el, inEle.children[indx + ignoreCount - (indx - sepPri)]);\n      }\n    } else {\n      inEle.insertBefore(el, inEle.children[indx + ignoreCount - priEleCnt]);\n    }\n  };\n\n  Toolbar.prototype.popupRefresh = function (popupEle, destroy) {\n    var _this = this;\n\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\n    if (isNOU(popNav)) {\n      return;\n    }\n\n    innerEle.removeAttribute('style');\n    popupEle.style.display = 'block';\n    var dimension;\n\n    if (isVer) {\n      dimension = ele.offsetHeight - (popNav.offsetHeight + innerEle.offsetHeight);\n    } else {\n      dimension = ele.offsetWidth - (popNav.offsetWidth + innerEle.offsetWidth);\n    }\n\n    var popupEleWidth = 0;\n    [].slice.call(popupEle.children).forEach(function (el) {\n      popupEleWidth += _this.popupEleWidth(el);\n      setStyle(el, {\n        'position': ''\n      });\n    });\n\n    if (dimension + (isVer ? popNav.offsetHeight : popNav.offsetWidth) > popupEleWidth && this.popupPriCount === 0) {\n      destroy = true;\n    }\n\n    this.popupEleRefresh(dimension, popupEle, destroy);\n    popupEle.style.display = '';\n\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      ele.setAttribute('aria-haspopup', 'false');\n    }\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\n    if (ignoreEle.length > 0) {\n      ignoreEle.forEach(function (ele) {\n        ignoreInx.push([].slice.call(innerEle.children).indexOf(ele));\n      });\n    } else {\n      return 0;\n    }\n\n    ignoreInx.forEach(function (val) {\n      if (val <= index) {\n        count++;\n      }\n    });\n    return count;\n  };\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\n    if (tbarWidth > elWid + tbarItemsWid) {\n      return true;\n    }\n\n    return false;\n  };\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\n    if (el.classList.contains('e-tbtn-align') || el.classList.contains(CLS_TBARTEXT)) {\n      var btn = el.children[0];\n\n      if (!isNOU(btnText) && el.classList.contains(CLS_TBARTEXT)) {\n        btnText.style.display = 'none';\n      } else if (!isNOU(btnText) && el.classList.contains(CLS_POPUPTEXT)) {\n        btnText.style.display = 'block';\n      }\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\n      if (!isNOU(btnText)) {\n        btnText.style.display = '';\n      }\n    }\n\n    return elWidth;\n  };\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\n    var _loop_1 = function _loop_1(el) {\n      if (el.classList.contains(CLS_POPPRI) && popPriority && !destroy) {\n        return \"continue\";\n      }\n\n      var elWidth = this_1.popupEleWidth(el);\n\n      if (el === this_1.tbarEle[0]) {\n        elWidth += this_1.tbarEleMrgn;\n      }\n\n      el.style.position = '';\n\n      if (elWidth < width || destroy) {\n        setStyle(el, {\n          minWidth: '',\n          height: '',\n          minHeight: ''\n        });\n\n        if (!el.classList.contains(CLS_POPOVERFLOW)) {\n          el.classList.remove(CLS_POPUP);\n        }\n\n        index = this_1.tbarEle.indexOf(el);\n\n        if (this_1.tbarAlign) {\n          var pos = this_1.items[index].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\n        var sepBeforePri_1 = 0;\n\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\n              sepBeforePri_1++;\n            }\n          });\n        }\n\n        ignoreCount = this_1.ignoreEleFetch(index, innerEle);\n\n        if (el.classList.contains(CLS_TBAROVERFLOW)) {\n          this_1.tbarPriRef(innerEle, index, sepBeforePri_1, el, destroy, elWidth, width, ignoreCount);\n          width -= el.offsetWidth;\n        } else if (index === 0) {\n          innerEle.insertBefore(el, innerEle.firstChild);\n          width -= el.offsetWidth;\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\n        el.style.height = '';\n      } else {\n        return \"break\";\n      }\n    };\n\n    var this_1 = this;\n\n    for (var _i = 0, _a = [].slice.call(popupEle.children); _i < _a.length; _i++) {\n      var el = _a[_i];\n\n      var state_1 = _loop_1(el);\n\n      if (state_1 === \"break\") break;\n    }\n\n    var checkOverflow = this.checkOverflow(this.element, this.element.getElementsByClassName(CLS_ITEMS)[0]);\n\n    if (checkOverflow && !destroy) {\n      this.renderOverflowMode();\n    }\n  };\n\n  Toolbar.prototype.removePositioning = function () {\n    var item = this.element.querySelector('.' + CLS_ITEMS);\n\n    if (isNOU(item) || !item.classList.contains(CLS_TBARPOS)) {\n      return;\n    }\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\n  Toolbar.prototype.refreshPositioning = function () {\n    var item = this.element.querySelector('.' + CLS_ITEMS);\n    this.add(item, CLS_TBARPOS);\n    this.itemPositioning();\n  };\n\n  Toolbar.prototype.itemPositioning = function () {\n    var item = this.element.querySelector('.' + CLS_ITEMS);\n    var margin;\n\n    if (isNOU(item) || !item.classList.contains(CLS_TBARPOS)) {\n      return;\n    }\n\n    var popupNav = this.element.querySelector('.' + CLS_TBARNAV);\n    var innerItem;\n\n    if (this.scrollModule) {\n      var trgClass = this.isVertical ? CLS_VSCROLLCNT : CLS_HSCROLLCNT;\n      innerItem = [].slice.call(item.querySelector('.' + trgClass).children);\n    } else {\n      innerItem = [].slice.call(item.childNodes);\n    }\n\n    if (this.isVertical) {\n      margin = innerItem[0].offsetHeight + innerItem[2].offsetHeight;\n    } else {\n      margin = innerItem[0].offsetWidth + innerItem[2].offsetWidth;\n    }\n\n    var tbarWid = this.isVertical ? this.element.offsetHeight : this.element.offsetWidth;\n\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\n      if (this.isVertical) {\n        this.enableRtl ? innerItem[2].style.top = popWid : innerItem[2].style.bottom = popWid;\n      } else {\n        this.enableRtl ? innerItem[2].style.left = popWid : innerItem[2].style.right = popWid;\n      }\n    }\n\n    if (tbarWid <= margin) {\n      return;\n    }\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\n    if (this.isVertical) {\n      this.enableRtl ? innerItem[1].style.marginBottom = mrgn : innerItem[1].style.marginTop = mrgn;\n    } else {\n      this.enableRtl ? innerItem[1].style.marginRight = mrgn : innerItem[1].style.marginLeft = mrgn;\n    }\n  };\n\n  Toolbar.prototype.tbarItemAlign = function (item, itemEle, pos) {\n    var _this = this;\n\n    if (item.showAlwaysInPopup && item.overflow !== 'Show') {\n      return;\n    }\n\n    var alignDiv = [];\n    alignDiv.push(this.createElement('div', {\n      className: CLS_TBARLEFT\n    }));\n    alignDiv.push(this.createElement('div', {\n      className: CLS_TBARCENTER\n    }));\n    alignDiv.push(this.createElement('div', {\n      className: CLS_TBARRIGHT\n    }));\n\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    } 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\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\n  Toolbar.prototype.ctrlTemplate = function () {\n    var _this = this;\n\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\n        ele.setAttribute('aria-disabled', 'false');\n\n        _this.add(ele, CLS_ITEM);\n      }\n    });\n  };\n\n  Toolbar.prototype.renderItems = function () {\n    var ele = this.element;\n    var items = this.items;\n\n    if (this.trgtEle != null) {\n      this.ctrlTemplate();\n    } else if (ele && items.length > 0) {\n      var itemEleDom = void 0;\n\n      if (ele && ele.children.length > 0) {\n        itemEleDom = ele.querySelector('.' + CLS_ITEMS);\n      }\n\n      if (!itemEleDom) {\n        itemEleDom = this.createElement('div', {\n          className: CLS_ITEMS\n        });\n      }\n\n      this.itemsAlign(items, itemEleDom);\n      ele.appendChild(itemEleDom);\n    }\n  };\n\n  Toolbar.prototype.setAttr = function (attr, element) {\n    var key = Object.keys(attr);\n    var keyVal;\n\n    for (var i = 0; i < key.length; i++) {\n      keyVal = key[i];\n      keyVal === 'class' ? this.add(element, attr[keyVal]) : element.setAttribute(keyVal, attr[keyVal]);\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\n\n  Toolbar.prototype.enableItems = function (items, isEnable) {\n    var elements = items;\n    var len = elements.length;\n    var ele;\n\n    if (isNOU(isEnable)) {\n      isEnable = true;\n    }\n\n    var enable = function enable(isEnable, ele) {\n      if (isEnable) {\n        ele.classList.remove(CLS_DISABLE);\n        ele.setAttribute('aria-disabled', 'false');\n      } else {\n        ele.classList.add(CLS_DISABLE);\n        ele.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[a];\n\n        if (typeof itemElement === 'number') {\n          ele = this.getElementByIndex(itemElement);\n\n          if (isNOU(ele)) {\n            return;\n          } else {\n            elements[a] = ele;\n          }\n        } else {\n          ele = itemElement;\n        }\n\n        enable(isEnable, ele);\n      }\n\n      isEnable ? removeClass(elements, CLS_DISABLE) : addClass(elements, CLS_DISABLE);\n    } else {\n      if (typeof elements === 'number') {\n        ele = this.getElementByIndex(elements);\n\n        if (isNOU(ele)) {\n          return;\n        }\n      } else {\n        ele = items;\n      }\n\n      enable(isEnable, ele);\n    }\n  };\n\n  Toolbar.prototype.getElementByIndex = function (index) {\n    if (this.tbarEle[index]) {\n      return this.tbarEle[index];\n    }\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\n\n  Toolbar.prototype.addItems = function (items, index) {\n    var innerItems;\n    this.extendedOpen();\n    var itemsDiv = this.element.querySelector('.' + CLS_ITEMS);\n\n    if (isNOU(itemsDiv)) {\n      this.itemsRerender(items);\n      return;\n    }\n\n    var innerEle;\n    var itemAgn = 'Left';\n\n    if (isNOU(index)) {\n      index = 0;\n    }\n\n    items.forEach(function (e) {\n      if (!isNOU(e.align) && e.align !== 'Left' && itemAgn === 'Left') {\n        itemAgn = e.align;\n      }\n    });\n\n    for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n      var item = items_1[_i];\n\n      if (isNOU(item.type)) {\n        item.type = 'Button';\n      }\n\n      innerItems = selectAll('.' + CLS_ITEM, this.element);\n      item.align = itemAgn;\n      innerEle = this.renderSubComponent(item, index);\n\n      if (this.tbarEle.length >= index && innerItems.length >= 0) {\n        if (isNOU(this.scrollModule)) {\n          this.destroyMode();\n        }\n\n        var algIndex = item.align[0] === 'L' ? 0 : item.align[0] === 'C' ? 1 : 2;\n        var ele = void 0;\n\n        if (!this.tbarAlign && itemAgn !== 'Left') {\n          this.tbarItemAlign(item, itemsDiv, 1);\n          this.tbarAlign = true;\n          ele = closest(innerItems[0], '.' + CLS_ITEMS).children[algIndex];\n          ele.appendChild(innerEle);\n          this.tbarAlgEle[(item.align + 's').toLowerCase()].push(innerEle);\n          this.refreshPositioning();\n        } else if (this.tbarAlign) {\n          ele = closest(innerItems[0], '.' + CLS_ITEMS).children[algIndex];\n          ele.insertBefore(innerEle, ele.children[index]);\n          this.tbarAlgEle[(item.align + 's').toLowerCase()].splice(index, 0, innerEle);\n          this.refreshPositioning();\n        } else if (innerItems.length === 0) {\n          innerItems = selectAll('.' + CLS_ITEMS, this.element);\n          innerItems[0].appendChild(innerEle);\n        } else {\n          innerItems[0].parentNode.insertBefore(innerEle, innerItems[index]);\n        }\n\n        this.items.splice(index, 0, item);\n        this.tbarEle.splice(index, 0, innerEle);\n        index++;\n        this.offsetWid = itemsDiv.offsetWidth;\n      }\n    }\n\n    itemsDiv.style.width = '';\n    this.renderOverflowMode();\n\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\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\n    if (typeof elements === 'number') {\n      index = parseInt(args.toString(), 10);\n      this.removeItemByIndex(index, innerItems);\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      } 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\n    this.resize();\n  };\n\n  Toolbar.prototype.removeItemByIndex = function (index, innerItems) {\n    if (this.tbarEle[index] && innerItems[index]) {\n      var eleIdx = this.tbarEle.indexOf(innerItems[index]);\n\n      if (this.tbarAlign) {\n        var indexAgn = this.tbarAlgEle[(this.items[eleIdx].align + 's').toLowerCase()].indexOf(this.tbarEle[eleIdx]);\n        this.tbarAlgEle[(this.items[eleIdx].align + 's').toLowerCase()].splice(indexAgn, 1);\n      }\n\n      if (this.isReact) {\n        this.clearTemplate();\n      }\n\n      detach(innerItems[index]);\n      this.items.splice(eleIdx, 1);\n      this.tbarEle.splice(eleIdx, 1);\n    }\n  };\n\n  Toolbar.prototype.templateRender = function (templateProp, innerEle, item, index) {\n    var itemType = item.type;\n    var eleObj = templateProp;\n    var isComponent;\n\n    if (typeof templateProp === 'object') {\n      isComponent = typeof eleObj.appendTo === 'function';\n    }\n\n    if (typeof templateProp === 'string' || !isComponent) {\n      var templateFn = void 0;\n      var val = templateProp;\n      val = typeof templateProp === 'string' ? templateProp.trim() : templateProp;\n\n      try {\n        if (typeof templateProp === 'object' && !isNOU(templateProp.tagName)) {\n          innerEle.appendChild(templateProp);\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\n          if (!isNOU(tempStr)) {\n            this.tempId.push(val);\n          }\n        }\n      } catch (e) {\n        templateFn = templateCompiler(val);\n      }\n\n      var tempArray = void 0;\n\n      if (!isNOU(templateFn)) {\n        var toolbarTemplateID = this.element.id + index + '_template';\n        tempArray = templateFn({}, this, 'template', toolbarTemplateID, this.isStringTemplate);\n      }\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\n          innerEle.appendChild(ele);\n        });\n      }\n    } else if (itemType === 'Input') {\n      var ele = this.createElement('input');\n      item.id ? ele.id = item.id : ele.id = getUniqueID('tbr-ipt');\n      innerEle.appendChild(ele);\n      eleObj.appendTo(ele);\n    }\n\n    this.add(innerEle, CLS_TEMPLATE);\n    this.tbarEle.push(innerEle);\n  };\n\n  Toolbar.prototype.buttonRendering = function (item, innerEle) {\n    var dom = this.createElement('button', {\n      className: CLS_TBARBTN\n    });\n    dom.setAttribute('type', 'button');\n    var textStr = item.text;\n    var iconCss;\n    var iconPos;\n    item.id ? dom.id = item.id : dom.id = getUniqueID('e-tbr-btn');\n    var btnTxt = this.createElement('span', {\n      className: 'e-tbar-btn-text'\n    });\n\n    if (textStr) {\n      btnTxt.innerHTML = this.enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(textStr) : textStr;\n      dom.appendChild(btnTxt);\n      dom.classList.add('e-tbtn-txt');\n    } else {\n      this.add(innerEle, 'e-tbtn-align');\n    }\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      } else {\n        iconCss = item.suffixIcon + ' e-icons';\n        iconPos = 'Right';\n      }\n    }\n\n    var btnObj = new Button({\n      iconCss: iconCss,\n      iconPosition: iconPos\n    });\n    btnObj.createElement = this.createElement;\n    btnObj.appendTo(dom);\n\n    if (item.width) {\n      setStyle(dom, {\n        'width': formatUnit(item.width)\n      });\n    }\n\n    return dom;\n  };\n\n  Toolbar.prototype.renderSubComponent = function (item, index) {\n    var dom;\n    var innerEle = this.createElement('div', {\n      className: CLS_ITEM\n    });\n    innerEle.setAttribute('aria-disabled', 'false');\n    var tempDom = this.createElement('div', {\n      innerHTML: this.enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(item.tooltipText) : item.tooltipText\n    });\n\n    if (!this.tbarEle) {\n      this.tbarEle = [];\n    }\n\n    if (item.htmlAttributes) {\n      this.setAttr(item.htmlAttributes, innerEle);\n    }\n\n    if (item.tooltipText) {\n      innerEle.setAttribute('title', tempDom.textContent);\n    }\n\n    if (item.cssClass) {\n      innerEle.className = innerEle.className + ' ' + item.cssClass;\n    }\n\n    if (item.template) {\n      this.templateRender(item.template, innerEle, item, index);\n    } else {\n      switch (item.type) {\n        case 'Button':\n          dom = this.buttonRendering(item, innerEle);\n          dom.setAttribute('tabindex', '-1');\n          dom.setAttribute('aria-label', item.text || item.tooltipText);\n          innerEle.appendChild(dom);\n          innerEle.addEventListener('click', this.itemClick.bind(this));\n          break;\n\n        case 'Separator':\n          this.add(innerEle, CLS_SEPARATOR);\n          break;\n      }\n    }\n\n    if (item.showTextOn) {\n      var sTxt = item.showTextOn;\n\n      if (sTxt === 'Toolbar') {\n        this.add(innerEle, CLS_POPUPTEXT);\n        this.add(innerEle, 'e-tbtn-align');\n      } else if (sTxt === 'Overflow') {\n        this.add(innerEle, CLS_TBARTEXT);\n      }\n    }\n\n    if (item.overflow) {\n      var overflow = item.overflow;\n\n      if (overflow === 'Show') {\n        this.add(innerEle, CLS_TBAROVERFLOW);\n      } else if (overflow === 'Hide') {\n        if (!innerEle.classList.contains(CLS_SEPARATOR)) {\n          this.add(innerEle, CLS_POPOVERFLOW);\n        }\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\n    if (item.disabled) {\n      this.add(innerEle, CLS_DISABLE);\n    }\n\n    if (item.visible === false) {\n      this.add(innerEle, CLS_HIDDEN);\n    }\n\n    return innerEle;\n  };\n\n  Toolbar.prototype.itemClick = function (e) {\n    this.activeEleSwitch(e.currentTarget);\n  };\n\n  Toolbar.prototype.activeEleSwitch = function (ele) {\n    this.activeEleRemove(ele.firstElementChild);\n    this.activeEle.focus();\n  };\n\n  Toolbar.prototype.activeEleRemove = function (curEle) {\n    if (!isNOU(this.activeEle)) {\n      this.activeEle.setAttribute('tabindex', '-1');\n    }\n\n    this.activeEle = curEle;\n\n    if (isNOU(this.trgtEle) && !curEle.parentElement.classList.contains(CLS_TEMPLATE)) {\n      curEle.removeAttribute('tabindex');\n    } else {\n      this.activeEle.setAttribute('tabindex', '0');\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\n\n  Toolbar.prototype.getModuleName = function () {\n    return 'toolbar';\n  };\n\n  Toolbar.prototype.itemsRerender = function (newProp) {\n    this.items = this.tbarItemsCol;\n\n    if (this.isReact) {\n      this.clearTemplate();\n    }\n\n    this.destroyMode();\n    this.destroyItems();\n    this.items = newProp;\n    this.tbarItemsCol = this.items;\n    this.renderItems();\n    this.renderOverflowMode();\n\n    if (this.isReact) {\n      this.renderReactTemplates();\n    }\n  };\n\n  Toolbar.prototype.resize = function () {\n    var ele = this.element;\n    this.tbResize = true;\n\n    if (this.tbarAlign) {\n      this.itemPositioning();\n    }\n\n    if (this.popObj && this.overflowMode === 'Popup') {\n      this.popObj.hide();\n    }\n\n    var checkOverflow = this.checkOverflow(ele, ele.getElementsByClassName(CLS_ITEMS)[0]);\n\n    if (!checkOverflow) {\n      this.destroyScroll();\n      var multirowele = ele.querySelector('.' + CLS_ITEMS);\n\n      if (!isNOU(multirowele)) {\n        this.remove(multirowele, CLS_MULTIROWPOS);\n\n        if (this.tbarAlign) {\n          this.add(multirowele, CLS_TBARPOS);\n        }\n      }\n    }\n\n    if (checkOverflow && this.scrollModule && this.offsetWid === ele.offsetWidth) {\n      return;\n    }\n\n    if (this.offsetWid > ele.offsetWidth || checkOverflow) {\n      this.renderOverflowMode();\n    }\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\n      if (this.tbarAlign) {\n        this.removePositioning();\n      }\n\n      this.popupRefresh(this.popObj.element, false);\n\n      if (this.tbarAlign) {\n        this.refreshPositioning();\n      }\n    }\n\n    if (this.element.querySelector('.' + CLS_HSCROLLBAR)) {\n      this.scrollStep = this.element.querySelector('.' + CLS_HSCROLLBAR).offsetWidth;\n    }\n\n    this.offsetWid = ele.offsetWidth;\n    this.tbResize = false;\n    this.separator();\n  };\n\n  Toolbar.prototype.extendedOpen = function () {\n    var sib = this.element.querySelector('.' + CLS_EXTENDABLECLASS);\n\n    if (this.overflowMode === 'Extended' && sib) {\n      this.isExtendedOpen = sib.classList.contains(CLS_POPUPOPEN);\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\n\n  Toolbar.prototype.onPropertyChanged = function (newProp, oldProp) {\n    var tEle = this.element;\n    var wid = tEle.offsetWidth;\n    this.extendedOpen();\n\n    for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n      var prop = _a[_i];\n\n      switch (prop) {\n        case 'items':\n          if (!(newProp.items instanceof Array && oldProp.items instanceof Array) && !this.isServerRendered) {\n            var changedProb = Object.keys(newProp.items);\n\n            for (var i = 0; i < changedProb.length; i++) {\n              var index = parseInt(Object.keys(newProp.items)[i], 10);\n              var property = Object.keys(newProp.items[index])[0];\n              var newProperty = Object(newProp.items[index])[property];\n\n              if (this.tbarAlign || property === 'align') {\n                this.refresh();\n                this.trigger('created');\n                break;\n              }\n\n              var popupPriCheck = property === 'showAlwaysInPopup' && !newProperty;\n              var booleanCheck = property === 'overflow' && this.popupPriCount !== 0;\n\n              if (popupPriCheck || this.items[index].showAlwaysInPopup && booleanCheck) {\n                --this.popupPriCount;\n              }\n\n              if (isNOU(this.scrollModule)) {\n                this.destroyMode();\n              }\n\n              var itemCol = [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, tEle));\n\n              if (this.isReact) {\n                this.clearTemplate();\n              }\n\n              detach(itemCol[index]);\n              this.tbarEle.splice(index, 1);\n              this.addItems([this.items[index]], index);\n              this.items.splice(index, 1);\n\n              if (this.items[index].template) {\n                this.tbarEle.splice(this.items.length, 1);\n              }\n            }\n          } else {\n            this.itemsRerender(newProp.items);\n          }\n\n          break;\n\n        case 'width':\n          setStyle(tEle, {\n            'width': formatUnit(newProp.width)\n          });\n          this.renderOverflowMode();\n\n          if (this.popObj && wid < tEle.offsetWidth) {\n            this.popupRefresh(this.popObj.element, false);\n          }\n\n          break;\n\n        case 'height':\n          setStyle(this.element, {\n            'height': formatUnit(newProp.height)\n          });\n          break;\n\n        case 'overflowMode':\n          this.destroyMode();\n          this.renderOverflowMode();\n\n          if (this.enableRtl) {\n            this.add(tEle, CLS_RTL);\n          }\n\n          this.refreshOverflow();\n          break;\n\n        case 'enableRtl':\n          newProp.enableRtl ? this.add(tEle, CLS_RTL) : this.remove(tEle, CLS_RTL);\n\n          if (!isNOU(this.scrollModule)) {\n            newProp.enableRtl ? this.add(this.scrollModule.element, CLS_RTL) : this.remove(this.scrollModule.element, CLS_RTL);\n          }\n\n          if (!isNOU(this.popObj)) {\n            newProp.enableRtl ? this.add(this.popObj.element, CLS_RTL) : this.remove(this.popObj.element, CLS_RTL);\n          }\n\n          if (this.tbarAlign) {\n            this.itemPositioning();\n          }\n\n          break;\n\n        case 'scrollStep':\n          if (this.scrollModule) {\n            this.scrollModule.scrollStep = this.scrollStep;\n          }\n\n          break;\n\n        case 'enableCollision':\n          if (this.popObj) {\n            this.popObj.collision = {\n              Y: this.enableCollision ? 'flip' : 'none'\n            };\n          }\n\n          break;\n\n        case 'cssClass':\n          if (oldProp.cssClass) {\n            removeClass([this.element], oldProp.cssClass.split(' '));\n          }\n\n          if (newProp.cssClass) {\n            addClass([this.element], newProp.cssClass.split(' '));\n          }\n\n          break;\n\n        case 'allowKeyboard':\n          this.unwireKeyboardEvent();\n\n          if (newProp.allowKeyboard) {\n            this.wireKeyboardEvent();\n          }\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\n\n  Toolbar.prototype.hideItem = function (index, value) {\n    var isElement = typeof index === 'object' ? true : false;\n    var eleIndex = index;\n    var initIndex;\n    var ele;\n    var innerItems = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n\n    if (isElement) {\n      ele = index;\n    } else if (this.tbarEle[eleIndex]) {\n      var innerItems_1 = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n      ele = innerItems_1[eleIndex];\n    }\n\n    if (ele) {\n      value ? ele.classList.add(CLS_HIDDEN) : ele.classList.remove(CLS_HIDDEN);\n\n      if (value && isNOU(this.element.getAttribute('tabindex')) && !ele.classList.contains(CLS_SEPARATOR)) {\n        if (isNOU(ele.firstElementChild.getAttribute('tabindex'))) {\n          ele.firstElementChild.setAttribute('tabindex', '-1');\n          var innerItems_2 = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n\n          if (isElement) {\n            eleIndex = innerItems_2.indexOf(ele);\n          }\n\n          var nextEle = innerItems_2[++eleIndex];\n\n          while (nextEle) {\n            var skipEle = this.eleContains(nextEle);\n\n            if (!skipEle) {\n              nextEle.firstElementChild.removeAttribute('tabindex');\n              break;\n            }\n\n            nextEle = innerItems_2[++eleIndex];\n          }\n        }\n      } else if (isNOU(this.element.getAttribute('tabindex')) && !ele.classList.contains(CLS_SEPARATOR)) {\n        initIndex = 0;\n        var setFlag = false;\n        var removeFlag = false;\n        var initELe = innerItems[initIndex];\n\n        while (initELe) {\n          if (!initELe.classList.contains(CLS_SEPARATOR)) {\n            if (isNOU(initELe.firstElementChild.getAttribute('tabindex'))) {\n              initELe.firstElementChild.setAttribute('tabindex', '-1');\n              setFlag = true;\n            } else {\n              if (setFlag && removeFlag) {\n                break;\n              }\n\n              var skipEle = this.eleContains(initELe);\n\n              if (!skipEle) {\n                initELe.firstElementChild.removeAttribute('tabindex');\n                removeFlag = true;\n              }\n\n              initELe = innerItems[++initIndex];\n            }\n          } else {\n            initELe = innerItems[++initIndex];\n          }\n        }\n      }\n\n      this.refreshOverflow();\n    }\n  };\n\n  __decorate([Collection([], Item)], Toolbar.prototype, \"items\", void 0);\n\n  __decorate([Property('auto')], Toolbar.prototype, \"width\", void 0);\n\n  __decorate([Property('auto')], Toolbar.prototype, \"height\", void 0);\n\n  __decorate([Property('')], Toolbar.prototype, \"cssClass\", void 0);\n\n  __decorate([Property('Scrollable')], Toolbar.prototype, \"overflowMode\", void 0);\n\n  __decorate([Property()], Toolbar.prototype, \"scrollStep\", void 0);\n\n  __decorate([Property(true)], Toolbar.prototype, \"enableCollision\", void 0);\n\n  __decorate([Property(true)], Toolbar.prototype, \"enableHtmlSanitizer\", void 0);\n\n  __decorate([Property(true)], Toolbar.prototype, \"allowKeyboard\", void 0);\n\n  __decorate([Event()], Toolbar.prototype, \"clicked\", void 0);\n\n  __decorate([Event()], Toolbar.prototype, \"created\", void 0);\n\n  __decorate([Event()], Toolbar.prototype, \"destroyed\", void 0);\n\n  __decorate([Event()], Toolbar.prototype, \"beforeCreate\", void 0);\n\n  Toolbar = __decorate([NotifyPropertyChanges], Toolbar);\n  return Toolbar;\n}(Component);\n\nexport { Toolbar };","import { EventHandler, extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { remove, isBlazor, select } from '@syncfusion/ej2-base';\nimport { Toolbar as tool } from '@syncfusion/ej2-navigations';\nimport * as events from '../base/constant';\nimport { templateCompiler, appendChildren, parentsUntil, addRemoveEventListener } from '../base/util';\nimport { ResponsiveToolbarAction } from '../base/enum';\nimport { SearchBox } from '../services/focus-strategy';\n/**\n * The `Toolbar` module is used to handle ToolBar actions.\n * @hidden\n */\n\nvar Toolbar =\n/** @class */\nfunction () {\n  function Toolbar(parent, serviceLocator) {\n    this.predefinedItems = {};\n    this.items = ['Add', 'Edit', 'Update', 'Delete', 'Cancel', 'Print', 'Search', 'ColumnChooser', 'PdfExport', 'ExcelExport', 'CsvExport', 'WordExport'];\n    this.parent = parent;\n    this.gridID = parent.element.id;\n    this.serviceLocator = serviceLocator;\n    this.addEventListener();\n  }\n\n  Toolbar.prototype.render = function () {\n    this.l10n = this.serviceLocator.getService('localization');\n    var preItems = ['Add', 'Edit', 'Update', 'Delete', 'Cancel', 'Print', 'PdfExport', 'ExcelExport', 'WordExport', 'CsvExport'];\n    var isAdaptive = this.parent.enableAdaptiveUI;\n    var excludingItems = ['Edit', 'Delete', 'Update', 'Cancel'];\n\n    for (var _i = 0, preItems_1 = preItems; _i < preItems_1.length; _i++) {\n      var item = preItems_1[_i];\n      var itemStr = item.toLowerCase();\n      var localeName = itemStr[0].toUpperCase() + itemStr.slice(1);\n      this.predefinedItems[item] = {\n        id: this.gridID + '_' + itemStr,\n        prefixIcon: 'e-' + itemStr,\n        text: this.l10n.getConstant(localeName),\n        tooltipText: this.l10n.getConstant(localeName)\n      };\n\n      if (isAdaptive) {\n        this.predefinedItems[item].text = '';\n        this.predefinedItems[item].visible = excludingItems.indexOf(item) === -1;\n      }\n    }\n\n    this.predefinedItems.Search = {\n      id: this.gridID + '_search',\n      tooltipText: this.l10n.getConstant('Search'),\n      align: 'Right',\n      cssClass: 'e-search-wrapper',\n      type: 'Input'\n    };\n    this.predefinedItems.ColumnChooser = {\n      id: this.gridID + '_' + 'columnchooser',\n      cssClass: 'e-cc e-ccdiv e-cc-toolbar',\n      suffixIcon: 'e-' + 'columnchooser-btn',\n      text: isAdaptive ? '' : this.l10n.getConstant('Columnchooser'),\n      tooltipText: this.l10n.getConstant('Columnchooser'),\n      align: 'Right'\n    };\n\n    if (this.parent.rowRenderingMode === 'Vertical') {\n      if (this.parent.allowFiltering && this.parent.filterSettings.type !== 'FilterBar') {\n        this.predefinedItems.responsiveFilter = {\n          id: this.gridID + '_' + 'responsivefilter',\n          cssClass: 'e-gridresponsiveicons e-icons',\n          suffixIcon: 'e-' + 'resfilter-icon',\n          tooltipText: this.l10n.getConstant('FilterButton')\n        };\n      }\n\n      if (this.parent.allowSorting) {\n        this.predefinedItems.responsiveSort = {\n          id: this.gridID + '_' + 'responsivesort',\n          cssClass: 'e-gridresponsiveicons e-icons',\n          suffixIcon: 'e-' + 'ressort-icon',\n          tooltipText: this.l10n.getConstant('Sort')\n        };\n      }\n    }\n\n    if (this.parent.enableAdaptiveUI && this.parent.toolbar.indexOf('Search') > -1) {\n      this.predefinedItems.responsiveBack = {\n        id: this.gridID + '_' + 'responsiveback',\n        cssClass: 'e-gridresponsiveicons e-icons',\n        suffixIcon: 'e-' + 'resback-icon',\n        visible: false\n      };\n    }\n\n    this.createToolbar();\n  };\n  /**\n   * Gets the toolbar of the Grid.\n   * @return {Element}\n   * @hidden\n   */\n\n\n  Toolbar.prototype.getToolbar = function () {\n    return this.toolbar.element;\n  };\n  /**\n   * Destroys the ToolBar.\n   * @method destroy\n   * @return {void}\n   */\n\n\n  Toolbar.prototype.destroy = function () {\n    if (this.toolbar && !this.toolbar.isDestroyed) {\n      if (!this.toolbar.element) {\n        this.parent.destroyTemplate(['toolbarTemplate']);\n\n        if (this.parent.isReact) {\n          this.parent.renderTemplates();\n        }\n      } else {\n        this.toolbar.off('render-react-toolbar-template', this.addReactToolbarPortals);\n        this.toolbar.destroy();\n      }\n\n      this.unWireEvent();\n      this.removeEventListener();\n      remove(this.element);\n    }\n  };\n\n  Toolbar.prototype.bindSearchEvents = function () {\n    this.searchElement = select('#' + this.gridID + '_searchbar', this.element);\n    this.wireEvent();\n    this.refreshToolbarItems();\n\n    if (this.parent.searchSettings) {\n      this.updateSearchBox();\n    }\n  };\n\n  Toolbar.prototype.toolbarCreated = function (isNormal) {\n    if (this.element.querySelector('.e-search-wrapper')) {\n      if (!this.parent.enableAdaptiveUI || isNormal) {\n        this.element.querySelector('.e-search-wrapper').innerHTML = '<div class=\"e-input-group e-search\" role=\"search\">\\\n                    <input id=\"' + this.gridID + '_searchbar\" class=\"e-input\" name=\"input\" type=\"search\" \\\n                    placeholder= \\\"' + this.l10n.getConstant('Search') + '\\\"/>\\\n                    <span id=\"' + this.gridID + '_searchbutton\" class=\"e-input-group-icon e-search-icon e-icons\" \\\n                    tabindex=\"-1\" title=\"' + this.l10n.getConstant('Search') + '\" aria-label= \"search\"></span> \\\n                    </div>';\n      } else {\n        this.element.querySelector('.e-search-wrapper').innerHTML = '<span id=\"' + this.gridID + '_searchbutton\" class=\"e-input-group-icon e-search-icon e-icons\" \\\n                    tabindex=\"-1\" title=\"' + this.l10n.getConstant('Search') + '\" aria-label= \"search\"></span> \\\n                    </div>';\n      }\n    }\n\n    this.bindSearchEvents();\n  };\n\n  Toolbar.prototype.createToolbar = function () {\n    var items = this.getItems();\n    this.toolbar = new tool({\n      items: items,\n      clicked: this.toolbarClickHandler.bind(this),\n      enablePersistence: this.parent.enablePersistence,\n      enableRtl: this.parent.enableRtl,\n      created: this.toolbarCreated.bind(this)\n    });\n    this.toolbar.isReact = this.parent.isReact;\n    this.toolbar.on('render-react-toolbar-template', this.addReactToolbarPortals, this);\n    var isStringTemplate = 'isStringTemplate';\n    this.toolbar[isStringTemplate] = true;\n    var viewStr = 'viewContainerRef';\n    var registerTemp = 'registeredTemplate';\n\n    if (this.parent[viewStr]) {\n      this.toolbar[registerTemp] = {};\n      this.toolbar[viewStr] = this.parent[viewStr];\n    }\n\n    this.element = this.parent.createElement('div', {\n      id: this.gridID + '_toolbarItems'\n    });\n\n    if (this.parent.enableAdaptiveUI) {\n      this.element.classList.add('e-res-toolbar');\n    }\n\n    if (this.parent.toolbarTemplate) {\n      if (!isBlazor() && typeof this.parent.toolbarTemplate === 'string') {\n        this.toolbar.appendTo(this.parent.toolbarTemplate);\n        this.element = this.toolbar.element;\n      } else {\n        var isReactCompiler = this.parent.isReact && typeof this.parent.toolbarTemplate !== 'string';\n        var ID = this.parent.element.id + 'toolbarTemplate';\n\n        if (isReactCompiler) {\n          templateCompiler(this.parent.toolbarTemplate)({}, this.parent, 'toolbarTemplate', ID, null, null, this.element);\n          this.parent.renderTemplates();\n        } else {\n          appendChildren(this.element, templateCompiler(this.parent.toolbarTemplate)({}, this.parent, 'toolbarTemplate'));\n        }\n      }\n    } else {\n      this.toolbar.appendTo(this.element);\n    }\n\n    this.parent.element.insertBefore(this.element, this.parent.getHeaderContent());\n  };\n\n  Toolbar.prototype.addReactToolbarPortals = function (args) {\n    if (this.parent.isReact && args) {\n      this.parent.portals = this.parent.portals.concat(args);\n      this.parent.renderTemplates();\n    }\n  };\n\n  Toolbar.prototype.renderResponsiveSearch = function (isRender) {\n    if (isRender) {\n      this.toolbarCreated(true);\n      this.refreshResponsiveToolbarItems(ResponsiveToolbarAction.isSearch);\n      this.searchElement = select('#' + this.gridID + '_searchbar', this.element);\n      var right = parentsUntil(this.searchElement, 'e-toolbar-right');\n      right.classList.add('e-responsive-right');\n\n      if (this.parent.searchSettings) {\n        this.updateSearchBox();\n      }\n\n      this.searchBoxObj.searchFocus({\n        target: this.searchElement\n      });\n      this.searchElement.focus();\n    } else {\n      this.refreshResponsiveToolbarItems(ResponsiveToolbarAction.isInitial);\n    }\n  };\n\n  Toolbar.prototype.refreshResponsiveToolbarItems = function (action) {\n    if (action === ResponsiveToolbarAction.isInitial) {\n      var id = this.parent.element.id;\n      var items = [id + '_edit', id + '_delete'];\n      var selectedRecords = this.parent.getSelectedRowIndexes();\n      var excludingItems = [id + '_responsiveback', id + '_update', id + '_cancel'];\n\n      for (var _i = 0, _a = this.toolbar.items; _i < _a.length; _i++) {\n        var item = _a[_i];\n        var toolbarEle = this.toolbar.element.querySelector('#' + item.id);\n\n        if (toolbarEle) {\n          if (items.indexOf(item.id) > -1) {\n            if (selectedRecords.length) {\n              toolbarEle.parentElement.classList.remove('e-hidden');\n            } else {\n              toolbarEle.parentElement.classList.add('e-hidden');\n            }\n          } else {\n            if (excludingItems.indexOf(item.id) === -1) {\n              toolbarEle.parentElement.classList.remove('e-hidden');\n            } else {\n              toolbarEle.parentElement.classList.add('e-hidden');\n            }\n          }\n        }\n      }\n\n      if (this.searchElement) {\n        var right = parentsUntil(this.searchElement, 'e-toolbar-right');\n        right.classList.remove('e-responsive-right');\n        this.toolbarCreated(false);\n        this.unWireEvent();\n        this.searchElement = undefined;\n      }\n    }\n\n    if (action === ResponsiveToolbarAction.isSearch) {\n      var items = [this.parent.element.id + '_responsiveback', this.parent.element.id + '_search'];\n\n      for (var _b = 0, _c = this.toolbar.items; _b < _c.length; _b++) {\n        var item = _c[_b];\n        var toolbarEle = this.toolbar.element.querySelector('#' + item.id);\n\n        if (toolbarEle) {\n          if (items.indexOf(item.id) > -1) {\n            toolbarEle.parentElement.classList.remove('e-hidden');\n          } else {\n            toolbarEle.parentElement.classList.add('e-hidden');\n          }\n        }\n      }\n    }\n  };\n\n  Toolbar.prototype.refreshToolbarItems = function (args) {\n    var gObj = this.parent;\n    var enableItems = [];\n    var disableItems = [];\n    var edit = gObj.editSettings;\n    var hasData = gObj.currentViewData && gObj.currentViewData.length;\n    edit.allowAdding ? enableItems.push(this.gridID + '_add') : disableItems.push(this.gridID + '_add');\n    edit.allowEditing && hasData ? enableItems.push(this.gridID + '_edit') : disableItems.push(this.gridID + '_edit');\n    edit.allowDeleting && hasData ? enableItems.push(this.gridID + '_delete') : disableItems.push(this.gridID + '_delete');\n\n    if (gObj.editSettings.mode === 'Batch') {\n      if (gObj.element.getElementsByClassName('e-updatedtd').length && (edit.allowAdding || edit.allowEditing)) {\n        enableItems.push(this.gridID + '_update');\n        enableItems.push(this.gridID + '_cancel');\n      } else {\n        disableItems.push(this.gridID + '_update');\n        disableItems.push(this.gridID + '_cancel');\n      }\n    } else {\n      if (gObj.isEdit && (edit.allowAdding || edit.allowEditing)) {\n        enableItems = [this.gridID + '_update', this.gridID + '_cancel'];\n        disableItems = [this.gridID + '_add', this.gridID + '_edit', this.gridID + '_delete'];\n      } else {\n        disableItems.push(this.gridID + '_update');\n        disableItems.push(this.gridID + '_cancel');\n      }\n    }\n\n    this.enableItems(enableItems, true);\n    this.enableItems(disableItems, false);\n  };\n\n  Toolbar.prototype.getItems = function () {\n    var items = [];\n    var toolbarItems = this.parent.toolbar || [];\n\n    if (typeof this.parent.toolbar === 'string') {\n      return [];\n    }\n\n    if (this.parent.rowRenderingMode === 'Vertical') {\n      if (this.parent.allowFiltering && this.parent.filterSettings.type !== 'FilterBar') {\n        items.push(this.getItemObject('responsiveFilter'));\n      }\n\n      if (this.parent.allowSorting) {\n        items.push(this.getItemObject('responsiveSort'));\n      }\n    }\n\n    for (var _i = 0, toolbarItems_1 = toolbarItems; _i < toolbarItems_1.length; _i++) {\n      var item = toolbarItems_1[_i];\n\n      switch (typeof item) {\n        case 'number':\n          items.push(this.getItemObject(this.items[item]));\n          break;\n\n        case 'string':\n          items.push(this.getItemObject(item));\n          break;\n\n        default:\n          items.push(this.getItem(item));\n      }\n    }\n\n    if (this.parent.enableAdaptiveUI && this.parent.toolbar.indexOf('Search') > -1) {\n      items.push(this.getItemObject('responsiveBack'));\n    }\n\n    return items;\n  };\n\n  Toolbar.prototype.getItem = function (itemObject) {\n    var item = this.predefinedItems[itemObject.text];\n    return item ? extend(item, item, itemObject) : itemObject;\n  };\n\n  Toolbar.prototype.getItemObject = function (itemName) {\n    return this.predefinedItems[itemName] || {\n      text: itemName,\n      id: this.gridID + '_' + itemName\n    };\n  };\n  /**\n   * Enables or disables ToolBar items.\n   * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n   * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n   * @return {void}\n   * @hidden\n   */\n\n\n  Toolbar.prototype.enableItems = function (items, isEnable) {\n    for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n      var item = items_1[_i];\n      var element = select('#' + item, this.element);\n\n      if (element) {\n        this.toolbar.enableItems(element.parentElement, isEnable);\n      }\n    }\n  };\n\n  Toolbar.prototype.toolbarClickHandler = function (args) {\n    var _this = this;\n\n    var gObj = this.parent;\n    var gID = this.gridID;\n    extend(args, {\n      cancel: false\n    });\n    var newArgs = args;\n    var originalEvent = args.originalEvent;\n    gObj.trigger(events.toolbarClick, newArgs, function (toolbarargs) {\n      toolbarargs.originalEvent = toolbarargs.originalEvent ? toolbarargs.originalEvent : originalEvent;\n\n      if (!toolbarargs.cancel) {\n        switch (!isNullOrUndefined(toolbarargs.item) && toolbarargs.item.id) {\n          case gID + '_print':\n            gObj.print();\n            break;\n\n          case gID + '_edit':\n            gObj.startEdit();\n            break;\n\n          case gID + '_update':\n            gObj.endEdit();\n            break;\n\n          case gID + '_cancel':\n            gObj.closeEdit();\n            break;\n\n          case gID + '_add':\n            gObj.addRecord();\n            break;\n\n          case gID + '_delete':\n            gObj.deleteRecord();\n            break;\n\n          case gID + '_search':\n            if (toolbarargs.originalEvent.target.id === gID + '_searchbutton' && _this.searchElement) {\n              _this.search();\n            } else if (gObj.enableAdaptiveUI && !_this.searchElement && (toolbarargs.originalEvent.target.classList.contains('e-search-wrapper') || toolbarargs.originalEvent.target.id === gID + '_searchbutton')) {\n              _this.renderResponsiveSearch(true);\n            }\n\n            break;\n\n          case gID + '_columnchooser':\n            var tarElement = _this.parent.element.querySelector('.e-ccdiv');\n\n            var y = tarElement.getBoundingClientRect().top;\n            var x = tarElement.getBoundingClientRect().left;\n            var targetEle = toolbarargs.originalEvent.target;\n            y = tarElement.getBoundingClientRect().top + tarElement.offsetTop;\n            gObj.createColumnchooser(x, y, targetEle);\n            break;\n\n          case gID + '_responsivefilter':\n            gObj.showResponsiveCustomFilter();\n            break;\n\n          case gID + '_responsivesort':\n            gObj.showResponsiveCustomSort();\n            break;\n\n          case gID + '_responsiveback':\n            _this.renderResponsiveSearch(false);\n\n            break;\n        }\n      }\n    });\n  };\n\n  Toolbar.prototype.modelChanged = function (e) {\n    if (e.module === 'edit') {\n      this.refreshToolbarItems();\n    }\n  };\n\n  Toolbar.prototype.onPropertyChanged = function (e) {\n    if (e.module !== this.getModuleName() || !this.parent.toolbar) {\n      return;\n    }\n\n    if (this.element) {\n      remove(this.element);\n    }\n\n    this.render();\n  };\n\n  Toolbar.prototype.keyUpHandler = function (e) {\n    if (e.keyCode === 13) {\n      this.search();\n    }\n  };\n\n  Toolbar.prototype.search = function () {\n    this.parent.search(this.searchElement.value);\n  };\n\n  Toolbar.prototype.updateSearchBox = function () {\n    if (this.searchElement) {\n      this.searchElement.value = this.parent.searchSettings.key;\n    }\n  };\n\n  Toolbar.prototype.wireEvent = function () {\n    if (this.searchElement) {\n      this.searchBoxObj = new SearchBox(this.searchElement);\n      EventHandler.add(this.searchElement, 'keyup', this.keyUpHandler, this);\n      this.searchBoxObj.wireEvent();\n    }\n  };\n\n  Toolbar.prototype.unWireEvent = function () {\n    if (this.searchElement) {\n      EventHandler.remove(this.searchElement, 'keyup', this.keyUpHandler);\n      this.searchBoxObj.unWireEvent();\n    }\n  };\n\n  Toolbar.prototype.reRenderToolbar = function () {\n    if (this.element) {\n      remove(this.element);\n    }\n\n    this.render();\n  };\n\n  Toolbar.prototype.addEventListener = function () {\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    this.evtHandlers = [{\n      event: events.setFullScreenDialog,\n      handler: this.reRenderToolbar\n    }, {\n      event: events.initialEnd,\n      handler: this.render\n    }, {\n      event: events.uiUpdate,\n      handler: this.onPropertyChanged\n    }, {\n      event: events.inBoundModelChanged,\n      handler: this.updateSearchBox.bind(this)\n    }, {\n      event: events.modelChanged,\n      handler: this.refreshToolbarItems\n    }, {\n      event: events.toolbarRefresh,\n      handler: this.refreshToolbarItems\n    }, {\n      event: events.inBoundModelChanged,\n      handler: this.modelChanged\n    }, {\n      event: events.dataBound,\n      handler: this.refreshToolbarItems\n    }, {\n      event: events.click,\n      handler: this.removeResponsiveSearch\n    }, {\n      event: events.rowModeChange,\n      handler: this.reRenderToolbar\n    }];\n    addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n    this.rowSelectedFunction = this.rowSelected.bind(this);\n    this.rowDeSelectedFunction = this.rowSelected.bind(this);\n    this.parent.addEventListener(events.rowSelected, this.rowSelectedFunction);\n    this.parent.addEventListener(events.rowDeselected, this.rowDeSelectedFunction);\n  };\n\n  Toolbar.prototype.removeEventListener = function () {\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    addRemoveEventListener(this.parent, this.evtHandlers, false);\n    this.parent.removeEventListener(events.rowSelected, this.rowSelectedFunction);\n    this.parent.removeEventListener(events.rowDeselected, this.rowDeSelectedFunction);\n  };\n\n  Toolbar.prototype.removeResponsiveSearch = function (e) {\n    var target = e.target;\n    var isSearch = target.classList.contains('e-search-icon') || target.classList.contains('e-search-wrapper');\n\n    if (this.parent.enableAdaptiveUI && !isSearch && this.searchElement && !parentsUntil(e.target, 'e-res-toolbar')) {\n      this.renderResponsiveSearch(false);\n    }\n  };\n\n  Toolbar.prototype.rowSelected = function () {\n    if (this.parent.enableAdaptiveUI) {\n      this.refreshResponsiveToolbarItems(ResponsiveToolbarAction.isInitial);\n    }\n  };\n  /**\n   * For internal use only - Get the module name.\n   */\n\n\n  Toolbar.prototype.getModuleName = function () {\n    return 'toolbar';\n  };\n\n  return Toolbar;\n}();\n\nexport { Toolbar };","import { removeClass, addClass } from '@syncfusion/ej2-base';\nimport { closest, classList } from '@syncfusion/ej2-base';\nimport { Grid } from '../base/grid';\nimport { parents, getUid, appendChildren } from '../base/util';\nimport * as events from '../base/constant';\nimport { AriaService } from '../services/aria-service';\nimport { Row } from '../models/row';\nimport { Cell } from '../models/cell';\nimport { CellType } from '../base/enum';\nimport * as literals from '../base/string-literals';\n/**\n * The `DetailRow` module is used to handle detail template and hierarchy Grid operations.\n */\n\nvar DetailRow =\n/** @class */\nfunction () {\n  /**\n   * Constructor for the Grid detail template module\n   * @hidden\n   */\n  function DetailRow(parent, locator) {\n    //Internal variables\n    this.aria = new AriaService();\n    this.parent = parent;\n\n    if (this.parent.isDestroyed) {\n      return;\n    }\n\n    this.focus = locator.getService('focus');\n    this.parent.on(events.click, this.clickHandler, this);\n    this.parent.on(events.destroy, this.destroy, this);\n    this.parent.on(events.keyPressed, this.keyPressHandler, this);\n    this.parent.on(events.expandChildGrid, this.expand, this);\n    this.parent.on(events.columnVisibilityChanged, this.refreshColSpan, this);\n  }\n\n  DetailRow.prototype.clickHandler = function (e) {\n    this.toogleExpandcollapse(closest(e.target, 'td'));\n  }; // tslint:disable-next-line:max-func-body-length\n\n\n  DetailRow.prototype.toogleExpandcollapse = function (target) {\n    var gObj = this.parent;\n    var table = this.parent.getContentTable();\n    var lastrowIdx = this.parent.getCurrentViewRecords().length - 1;\n    var parent = 'parentDetails';\n    var isServerRendered = 'isServerRendered';\n    var childGrid;\n    var isExpanded = target && target.classList.contains('e-detailrowcollapse');\n\n    if (!(target && (target.classList.contains('e-detailrowcollapse') || target.classList.contains('e-detailrowexpand')))) {\n      return;\n    }\n\n    var tr = target.parentElement;\n    var uid = tr.getAttribute('data-uid');\n    var rowObj = gObj.getRowObjectFromUID(uid);\n    var nextRow = this.parent.getContentTable().querySelector(literals.tbody).children[tr.rowIndex + 1];\n\n    if (target.classList.contains('e-detailrowcollapse')) {\n      var data = rowObj.data;\n\n      if (this.isDetailRow(nextRow)) {\n        nextRow.style.display = '';\n        gObj.notify(events.detailStateChange, {\n          data: data,\n          childGrid: gObj.childGrid,\n          detailElement: target,\n          isExpanded: isExpanded\n        });\n      } else if (gObj.getDetailTemplate() || gObj.childGrid) {\n        var rowId = getUid('grid-row');\n        var detailRow = this.parent.createElement('tr', {\n          className: 'e-detailrow',\n          attrs: {\n            'data-uid': rowId\n          }\n        });\n        var detailCell = this.parent.createElement('td', {\n          className: 'e-detailcell'\n        });\n        var colSpan = this.parent.getVisibleColumns().length;\n\n        if (this.parent.allowRowDragAndDrop) {\n          colSpan++;\n        }\n\n        detailCell.setAttribute('colspan', colSpan.toString());\n        var row = new Row({\n          isDataRow: true,\n          isExpand: true,\n          uid: rowId,\n          isDetailRow: true,\n          cells: [new Cell({\n            cellType: CellType.Indent\n          }), new Cell({\n            isDataCell: true,\n            visible: true\n          })]\n        });\n\n        for (var i = 0, len = gObj.groupSettings.columns.length; i < len; i++) {\n          detailRow.appendChild(this.parent.createElement('td', {\n            className: 'e-indentcell'\n          }));\n          row.cells.unshift(new Cell({\n            cellType: CellType.Indent\n          }));\n        }\n\n        detailRow.appendChild(this.parent.createElement('td', {\n          className: 'e-detailindentcell'\n        }));\n        detailRow.appendChild(detailCell);\n        tr.parentNode.insertBefore(detailRow, tr.nextSibling);\n\n        if (gObj.detailTemplate) {\n          var isReactCompiler = this.parent.isReact && typeof gObj.detailTemplate !== 'string';\n          var detailTemplateID = gObj.element.id + 'detailTemplate';\n\n          if (isReactCompiler) {\n            gObj.getDetailTemplate()(data, gObj, 'detailTemplate', detailTemplateID, null, null, detailCell);\n            this.parent.renderTemplates();\n          } else {\n            appendChildren(detailCell, gObj.getDetailTemplate()(data, gObj, 'detailTemplate', detailTemplateID));\n          }\n        } else {\n          childGrid = new Grid(this.getGridModel(gObj, rowObj, gObj.printMode));\n\n          if (childGrid.query) {\n            childGrid.query = childGrid.query.clone();\n          }\n\n          childGrid[parent] = {\n            parentID: gObj.element.id,\n            parentPrimaryKeys: gObj.getPrimaryKeyFieldNames(),\n            parentKeyField: gObj.childGrid.queryString,\n            parentKeyFieldValue: data[gObj.childGrid.queryString],\n            parentRowData: data\n          };\n          childGrid.isLegacyTemplate = gObj.isReact || gObj.isLegacyTemplate;\n\n          if (gObj.isPrinting) {\n            childGrid.isPrinting = true;\n            childGrid.on(events.contentReady, this.promiseResolve(childGrid), this);\n            childGrid.on(events.onEmpty, this.promiseResolve(childGrid), this);\n          }\n\n          rowObj.childGrid = childGrid;\n          var modules = childGrid.getInjectedModules();\n          var injectedModues = gObj.getInjectedModules();\n\n          if (!modules || modules.length !== injectedModues.length) {\n            childGrid.setInjectedModules(injectedModues);\n          }\n\n          var gridElem = this.parent.createElement('div', {\n            id: 'child' + parents(tr, 'e-grid').length + '_grid' + tr.rowIndex + getUid('')\n          });\n          detailCell.appendChild(gridElem);\n          childGrid.appendTo(gridElem);\n        }\n\n        detailRow.appendChild(detailCell);\n\n        if (tr.nextSibling) {\n          tr.parentNode.insertBefore(detailRow, tr.nextSibling);\n        } else {\n          tr.parentNode.appendChild(detailRow);\n        }\n\n        gObj.getRows().splice(tr.rowIndex + 1, 0, detailRow);\n        gObj.getRowsObject().splice(rowObj.index + 1, 0, row);\n        gObj.trigger(events.detailDataBound, {\n          detailElement: detailCell,\n          data: data,\n          childGrid: childGrid\n        });\n        gObj.notify(events.detailDataBound, {\n          rows: gObj.getRowsObject()\n        });\n      }\n\n      classList(target, ['e-detailrowexpand'], ['e-detailrowcollapse']);\n      classList(target.firstElementChild, ['e-dtdiagonaldown', 'e-icon-gdownarrow'], ['e-dtdiagonalright', 'e-icon-grightarrow']);\n      rowObj.isExpand = true;\n\n      if (target.classList.contains('e-lastrowcell') && this.parent.getContent().clientHeight > table.scrollHeight) {\n        removeClass(target.parentElement.querySelectorAll('td'), 'e-lastrowcell');\n        var detailrowIdx = table.querySelector(literals.tbody).getElementsByClassName('e-detailrow').length - 1;\n        addClass(table.querySelector(literals.tbody).getElementsByClassName('e-detailrow')[detailrowIdx].childNodes, ['e-lastrowcell']);\n        this.lastrowcell = true;\n      }\n\n      this.aria.setExpand(target, true);\n    } else {\n      if (this.isDetailRow(nextRow)) {\n        nextRow.style.display = 'none';\n        gObj.notify(events.detailStateChange, {\n          data: rowObj.data,\n          childGrid: gObj.childGrid,\n          detailElement: target,\n          isExpanded: isExpanded\n        });\n      }\n\n      classList(target, ['e-detailrowcollapse'], ['e-detailrowexpand']);\n      classList(target.firstElementChild, ['e-dtdiagonalright', 'e-icon-grightarrow'], ['e-dtdiagonaldown', 'e-icon-gdownarrow']);\n\n      if (parseInt(tr.getAttribute(literals.ariaRowIndex), 10) === lastrowIdx && this.lastrowcell) {\n        addClass(target.parentElement.querySelectorAll('td'), 'e-lastrowcell');\n        this.lastrowcell = false;\n      }\n\n      rowObj.isExpand = false;\n      this.aria.setExpand(target, false);\n    }\n  };\n  /**\n   * @hidden\n   * @param gObj\n   * @param rowObj\n   */\n\n\n  DetailRow.prototype.getGridModel = function (gObj, rowObj, printMode) {\n    var gridModel;\n\n    if (gObj.isPrinting && rowObj.isExpand && gObj.expandedRows && gObj.expandedRows[rowObj.index] && gObj.expandedRows[rowObj.index].gridModel) {\n      gObj.expandedRows[rowObj.index].gridModel.hierarchyPrintMode = gObj.childGrid.hierarchyPrintMode;\n      gridModel = gObj.expandedRows[rowObj.index].gridModel;\n    } else {\n      if (gObj.isPrinting && gObj.childGrid.allowPaging) {\n        gObj.childGrid.allowPaging = printMode === 'CurrentPage';\n        gridModel = gObj.childGrid;\n      } else {\n        gridModel = gObj.childGrid;\n      }\n    }\n\n    return gridModel;\n  };\n\n  DetailRow.prototype.promiseResolve = function (grid) {\n    var _this = this;\n\n    return function () {\n      grid.off(events.contentReady, _this.promiseResolve);\n      grid.off(events.onEmpty, _this.promiseResolve);\n      grid.notify(events.hierarchyPrint, {});\n    };\n  };\n\n  DetailRow.prototype.isDetailRow = function (row) {\n    return row && row.classList.contains('e-detailrow');\n  };\n\n  DetailRow.prototype.destroy = function () {\n    var gridElement = this.parent.element;\n\n    if (this.parent.isDestroyed || !gridElement || !gridElement.querySelector('.' + literals.gridHeader) && !gridElement.querySelector('.' + literals.gridContent)) {\n      return;\n    }\n\n    this.parent.off(events.click, this.clickHandler);\n    this.parent.off(events.destroy, this.destroy);\n    this.parent.off(events.keyPressed, this.keyPressHandler);\n    this.parent.off(events.expandChildGrid, this.expand);\n    this.parent.off(events.columnVisibilityChanged, this.refreshColSpan);\n  };\n\n  DetailRow.prototype.getTDfromIndex = function (index, className) {\n    var tr = this.parent.getDataRows()[index];\n\n    if (tr && tr.querySelector(className)) {\n      return tr.querySelector(className);\n    }\n\n    return null;\n  };\n  /**\n   * Expands a detail row with the given target.\n   * @param  {Element} target - Defines the collapsed element to expand.\n   * @return {void}\n   */\n\n\n  DetailRow.prototype.expand = function (target) {\n    if (!isNaN(target)) {\n      target = this.getTDfromIndex(target, '.e-detailrowcollapse');\n    }\n\n    if (target && target.classList.contains('e-detailrowcollapse')) {\n      this.toogleExpandcollapse(target);\n    }\n  };\n  /**\n   * Collapses a detail row with the given target.\n   * @param  {Element} target - Defines the expanded element to collapse.\n   * @return {void}\n   */\n\n\n  DetailRow.prototype.collapse = function (target) {\n    if (!isNaN(target)) {\n      target = this.getTDfromIndex(target, '.e-detailrowexpand');\n    }\n\n    if (target && target.classList.contains('e-detailrowexpand')) {\n      this.toogleExpandcollapse(target);\n    }\n  };\n  /**\n   * Expands all the detail rows of the Grid.\n   * @return {void}\n   */\n\n\n  DetailRow.prototype.expandAll = function () {\n    this.expandCollapse(true);\n    this.parent.trigger(events.actionComplete, {\n      requestType: 'expandAllComplete',\n      type: events.actionComplete,\n      moduleObj: this\n    });\n  };\n  /**\n   * Collapses all the detail rows of the Grid.\n   * @return {void}\n   */\n\n\n  DetailRow.prototype.collapseAll = function () {\n    this.expandCollapse(false);\n    this.parent.trigger(events.actionComplete, {\n      requestType: 'collapseAllComplete',\n      type: events.actionComplete,\n      moduleObj: this\n    });\n  };\n\n  DetailRow.prototype.expandCollapse = function (isExpand) {\n    var td;\n    var rows = this.parent.getDataRows();\n\n    for (var i = 0, len = rows.length; i < len; i++) {\n      td = rows[i].querySelector('.e-detailrowcollapse, .e-detailrowexpand');\n      isExpand ? this.expand(td) : this.collapse(td);\n    }\n  };\n\n  DetailRow.prototype.keyPressHandler = function (e) {\n    var gObj = this.parent;\n\n    switch (e.action) {\n      case 'ctrlDownArrow':\n        this.expandAll();\n        break;\n\n      case 'ctrlUpArrow':\n        this.collapseAll();\n        break;\n\n      case 'altUpArrow':\n      case 'altDownArrow':\n        var selected = gObj.allowSelection ? gObj.getSelectedRowIndexes() : [];\n\n        if (selected.length) {\n          var dataRow = gObj.getDataRows()[selected[selected.length - 1]];\n          var td = dataRow.querySelector('.e-detailrowcollapse, .e-detailrowexpand');\n          e.action === 'altDownArrow' ? this.expand(td) : this.collapse(td);\n        }\n\n        break;\n\n      case 'enter':\n        if (this.parent.isEdit) {\n          return;\n        }\n\n        var element = this.focus.getFocusedElement();\n\n        if (!e.target.classList.contains('e-detailrowcollapse') && !e.target.classList.contains('e-detailrowexpand')) {\n          break;\n        }\n\n        this.toogleExpandcollapse(element);\n        break;\n    }\n  };\n\n  DetailRow.prototype.refreshColSpan = function () {\n    var detailrows = this.parent.contentModule.getTable().querySelectorAll('tr.e-detailrow');\n    var colSpan = this.parent.getVisibleColumns().length;\n\n    for (var i = 0; i < detailrows.length; i++) {\n      detailrows[i].querySelector('.e-detailcell').setAttribute('colspan', colSpan + '');\n    }\n  };\n  /**\n   * For internal use only - Get the module name.\n   * @private\n   */\n\n\n  DetailRow.prototype.getModuleName = function () {\n    return 'detailRow';\n  };\n\n  return DetailRow;\n}();\n\nexport { DetailRow };","\r\nimport React from 'react'\r\nimport { Link} from 'gatsby'\r\nimport {DateDisplay} from '@utils/DateDisplay'\r\nimport Row from 'react-bootstrap/Row'\r\nimport Col from 'react-bootstrap/Col'\r\nimport SubjectBadge from '@components/SubjectBadge'\r\nimport '../../node_modules/@syncfusion/ej2-base/styles/material.css'\r\nimport '../../node_modules/@syncfusion/ej2-inputs/styles/material.css'\r\nimport '../../node_modules/@syncfusion/ej2-navigations/styles/material.css'\r\nimport '../../node_modules/@syncfusion/ej2-react-grids/styles/material.css'\r\nimport '../styles/material.css'\r\nimport '../styles/MaterialOverrides.css'\r\n\r\nimport {  ColumnDirective, ColumnsDirective, GridComponent, Page, Sort, Inject, Search, Toolbar, DetailRow  } from '@syncfusion/ej2-react-grids';\r\n\r\nconst ContentGrid = ({documents}) => {\r\n    if(!documents) return null;\r\n    //add flattened string of subjects to object so users can search by subject (use as a hidden field)\r\n    //also add the url in the data object so it's accessible to title template\r\n    documents.forEach(doc => {\r\n        doc.data.subjects_string = doc.data.body[0].items.map((item) => {\r\n            if (item.subject.type !== \"broken_type\") {\r\n                return item.subject.document.data.subject_name\r\n            }\r\n        }).join('| ');\r\n        doc.data.url = doc.url;\r\n    })\r\n\r\n    const toolBarOptions = ['Search'];\r\n\r\n    const detailTemplate = ({data}) => {\r\n        let sourceRendered;\r\n        let resourceTypeRendered;\r\n        let contentCategoryRendered;\r\n        let documentDesignationRendered;\r\n        if(data.source != null && data.source.length > 0){\r\n            sourceRendered = <p><span className=\"font-weight-bold\">Source: </span>{data.source}</p>\r\n        }\r\n        if(data.resource_type != null && data.resource_type.length > 0){\r\n            resourceTypeRendered = <p><span className=\"font-weight-bold\">Resource Type: </span>{data.resource_type}</p>\r\n        }\r\n        if(data.content_category != null && data.content_category.length > 0){\r\n            contentCategoryRendered = <p><span className=\"font-weight-bold\">Content Type: </span>{data.content_category}</p>\r\n        }\r\n        if(data.document_designation != null && data.document_designation.length > 0){\r\n            documentDesignationRendered = <p><span className=\"font-weight-bold\">Document Number: </span>{data.document_designation}</p>\r\n        }\r\n        return (\r\n            <Row className=\"detailtable\">\r\n                <Col>{sourceRendered}</Col>\r\n                <Col>{resourceTypeRendered}</Col>\r\n                <Col>{contentCategoryRendered}{documentDesignationRendered}</Col> \r\n            </Row>\r\n        )\r\n    }\r\n\r\n    const titleTemplate = ({data}) => {\r\n        return (\r\n            <Link className=\"animated\" to={ data.url}>\r\n                 { data.title }\r\n            </Link>      \r\n        )\r\n    }\r\n\r\n    const subjectTemplate = ({data}) => {\r\n        return data.body[0].items.map((item) => {\r\n            if(item.subject.type !== \"broken_type\"){\r\n                return <SubjectBadge subject= {item} key={ item.subject.document.id}/>\r\n            }\r\n            else {\r\n                return null\r\n            }\r\n        })\r\n    }\r\n\r\n    function getFormattedDate(field, data, column){\r\n        return DateDisplay(data.data.date_published)\r\n    }\r\n\r\n    return (\r\n        <>\r\n        <GridComponent dataSource={documents} detailTemplate={detailTemplate.bind(this)} allowPaging={true} pageSettings={{pageSize: 25}} toolbar={toolBarOptions} allowSorting={true} allowTextWrap={true}>\r\n            <ColumnsDirective>\r\n                <ColumnDirective field='data.title' headerText='Title' template={titleTemplate}  width='500' />\r\n                <ColumnDirective field='data.body' headerText='Subject(s)' width='200' allowSorting={false} template={subjectTemplate}/>\r\n                <ColumnDirective field='data.description' headerText='Description'/>\r\n                <ColumnDirective field='data.date_published' valueAccessor={getFormattedDate} headerText='Published' width='150'/>\r\n                <ColumnDirective field='data.subjects_string' visible={false} width='10'/>\r\n                <ColumnDirective field='data.content_category' visible={false} width='10'/>\r\n                <ColumnDirective field='data.document_designation' visible={false} width='10'/>\r\n                <ColumnDirective field='data.source' visible={false} width='10'/>\r\n            </ColumnsDirective>\r\n            <Inject services={[Page, Sort, Search, Toolbar, DetailRow]} />\r\n        </GridComponent>\r\n        </>\r\n    )\r\n}\r\n\r\nexport default ContentGrid;","import React from 'react'\r\nimport { Link} from 'gatsby'\r\n\r\n\r\nconst OtherOptionsMenu = ({isAllContent}) => {\r\n    \r\n    return (\r\n        <>\r\n        <p className=\"h5 font-weight-bold\" >Other Options</p>\r\n        { isAllContent === false &&\r\n            <p className=\"h6\">\r\n                <Link className=\"animated\" to=\"/allcontent\">Browse all Research Content</Link>\r\n            </p>\r\n        }\r\n        <p className=\"h6\">\r\n            <a className=\"animated\" href=\"/dbtw-wpd/SimpleSearch.htm\">Search for Legislative History</a>\r\n        </p>\r\n        <p className=\"h6\">\r\n            <a className=\"animated\" href=\"/dbtw-wpd/SearchCatalogBasic.htm\">Search the Library Catalog</a>\r\n        </p>\r\n        </>\r\n    )\r\n}\r\n\r\nexport default OtherOptionsMenu;"],"sourceRoot":""}