{"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 = ' ';\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":""}