{"version":3,"sources":["webpack:///./src/components/Icons/FabricIcon.js","webpack:///./node_modules/@syncfusion/ej2-base/src/util.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/parser-base.js","webpack:///./node_modules/@syncfusion/ej2-base/src/hijri-parser.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/date-formatter.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/number-formatter.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/date-parser.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/number-parser.js","webpack:///./node_modules/@syncfusion/ej2-base/src/observer.js","webpack:///./node_modules/@syncfusion/ej2-base/src/internationalization.js","webpack:///./node_modules/@syncfusion/ej2-base/src/intl/intl-base.js","webpack:///./node_modules/@syncfusion/ej2-base/src/ajax.js","webpack:///./node_modules/@syncfusion/ej2-base/src/event-handler.js","webpack:///./node_modules/@syncfusion/ej2-base/src/dom.js","webpack:///./node_modules/@syncfusion/ej2-base/src/base.js","webpack:///./node_modules/@syncfusion/ej2-base/src/browser.js","webpack:///./node_modules/@syncfusion/ej2-base/src/notify-property-change.js","webpack:///./node_modules/@syncfusion/ej2-base/src/animation.js","webpack:///./node_modules/@syncfusion/ej2-base/src/module-loader.js","webpack:///./node_modules/@syncfusion/ej2-base/src/component.js","webpack:///./node_modules/@syncfusion/ej2-base/src/child-property.js","webpack:///./node_modules/@syncfusion/ej2-base/src/draggable.js","webpack:///./node_modules/@syncfusion/ej2-base/src/droppable.js","webpack:///./node_modules/@syncfusion/ej2-base/src/keyboard.js","webpack:///./node_modules/@syncfusion/ej2-base/src/l10n.js","webpack:///./node_modules/@syncfusion/ej2-base/src/touch.js","webpack:///./node_modules/@syncfusion/ej2-base/src/template.js","webpack:///./node_modules/@syncfusion/ej2-base/src/template-engine.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/common/position.js","webpack:///./node_modules/@syncfusion/ej2-base/src/sanitize-helper.js","webpack:///./node_modules/@syncfusion/ej2-data/src/query.js","webpack:///./node_modules/@syncfusion/ej2-data/src/adaptors.js","webpack:///./node_modules/@syncfusion/ej2-data/src/manager.js","webpack:///./node_modules/@syncfusion/ej2-data/src/util.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/spinner/spinner.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/common/collision.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/popup/popup.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/tooltip/tooltip.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/value-formatter.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/models/column.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/base/constant.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/print.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/base/util.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/base/enum.js","webpack:///./node_modules/@syncfusion/ej2-buttons/src/common/common.js","webpack:///./node_modules/@syncfusion/ej2-buttons/src/button/button.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/common/resize.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/dialog/dialog.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/input/input.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/common/checkbox-filter-base.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/data.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/models/row.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/models/cell.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/cell-merge-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/row-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/row-model-generator.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/summary-model-generator.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/group-model-generator.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/content-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/aria-service.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/stacked-cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/indent-cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/caption-cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/expand-cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-indent-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/detail-header-indent-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/detail-expand-cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/row-drag-drop-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/row-drag-header-indent-render.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/render.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/cell-render-factory.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/service-locator.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/renderer-factory.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/width-controller.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/focus-strategy.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/models/page-settings.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/models/column-chooser-settings.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/selection.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/search.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/show-hide.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/scroll.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/models/aggregate.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/clipboard.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/blazor-action.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/base/grid.js","webpack:///./node_modules/@syncfusion/ej2-react-base/src/component-base.js","webpack:///./node_modules/@syncfusion/ej2-react-base/src/complex-base.js","webpack:///./node_modules/@syncfusion/ej2-react-base/src/services.js","webpack:///./node_modules/@syncfusion/ej2-react-base/src/template.js","webpack:///./node_modules/@syncfusion/ej2-react-grids/src/grid/grid.component.js","webpack:///./node_modules/@syncfusion/ej2-react-base/src/util.js","webpack:///./node_modules/@syncfusion/ej2-react-grids/src/grid/columns-directive.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/group.js","webpack:///./src/components/DistrictPlans/PlansGrid.js","webpack:///./src/components/DistrictPlans/CurrentPlans.js","webpack:///./src/components/DistrictPlans/ProposedPlans.js","webpack:///./src/components/DistrictPlans/DistrictPlansBody.js","webpack:///./src/components/DistrictPlans/DistrictPlans.js","webpack:///./src/components/DistrictPlans/transformDistrictPlansPageData.js"],"names":["FabricIcon","props","className","iconName","isBlazorPlatform","createInstance","classFunction","params","arrayParam","unshift","undefined","Function","prototype","bind","apply","getValue","nameSpace","obj","value","splits","replace","split","i","length","isUndefined","key","keys","start","fromObj","isNullOrUndefined","deleteObject","isObject","constructor","getEnumValue","enumObject","enumValue","merge","source","destination","temrObj","tempProp","_i","keys_1","Object","indexOf","Array","isArray","extend","copied","first","second","deep","result","arguments","_loop_1","arguments_1","obj1","forEach","clone","src","copy","isArrayChanged","blazorEventExtend","isBlazor","Event","hasOwnProperty","getUniqueID","definedName","debounce","eventFunction","delay","out","_this","this","args","later","clearTimeout","setTimeout","compareElementParent","child","parent","document","parentNode","throwError","message","Error","e","stack","formatUnit","HijriParser","defaultNumberingSystem","defaultNumberSymbols","latnNumberSystem","ParserBase","getMainObject","cName","getNumberingSystem","numberingSystems","reverseObject","prop","res","propKeys_1","getSymbolRegex","regexStr","map","str","join","RegExp","getSymbolMatch","ret","matchKeys_1","constructRegex","val","len","convertValueParts","regex","getDefaultNumberingSystem","nSystem","getCurrentNumericOptions","curObj","numberSystem","needSymbols","cur","digits","numericPair","numberParseRegex","numericRegex","symbolNumberSystem","symbolMatch","getNumberMapper","isNumber","mapper","numberSymbols","timeSeparator","latnNumberSystem_1","nPair","nRegex","dateCorrection","getHijriDate","gDate","day","getDate","month","getMonth","year","getFullYear","tMonth","tYear","yPrefix","Math","floor","julilanOffset","julianNumber","b","c","d","tempMonth","modifiedJulianDate","z","cyc","j","iy","im","tempDay","iln","ii","hYear","hmonth","hDate","date","toGregorian","julianDate","a","gDay","gMonth","gYear","Date","abbreviateRegexGlobal","weekdayKey","timeSetter","m","h","H","s","f","datePartMatcher","DateFormat","dateFormat","culture","option","cldr","dependable","getDependables","calendar","formatOptions","isIslamic","islamicRegex","test","isServerRendered","compareBlazorDateFormats","resPattern","format","getResultantPattern","skeleton","dateObject","type","dateSeperator","getDateSeparator","pattern","numMapper","parserObject","patternMatch_1","match","char","weekday","days","monthIndex","designator","eText","era","timeZone","isNaN","intDateFormatter","options","matches","dateParseRegex","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","latnParseRegex","tVal","curPattern","no","abs","ishour","errorText","NumberFormat","numberFormatter","symbolPattern","fOptions","cOptions","dOptions","numberMapper","currencySymbol","getCurrencySymbol","numericObject","currency","defaultCurrencyCode","altSymbol","percentSymbol","minusSymbol","symbols","formatRegex","customFormat","getProperNumericSkeleton","isCurrency","isPercent","getSymbolPattern","isAccount","groupOne","checkValueRange","maximumSignificantDigits","minimumSignificantDigits","maximumFractionDigits","minimumFractionDigits","fractionDigits","useGrouping","defaultCurrency","nData","getFormatData","pData","groupSeparator","groupData","getGroupingDetails","minimumFraction","mval","maximumFraction","mfrac","lfrac","isFinite","intNumberFormatter","negativeDataRegex","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","slice","toFixed","lead","minute","hour","milliseconds","DateParser","dateParser","numOptions","parseOptions","hourOnly","regexString","evalposition","patternMatch","gmtCorrection","zCorrectTemp","isgmtTraversed","nRegx","canUpdate","charKey","optional","weekObject","hour12","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","tmatch","getZoneValue","tZone","splitStr","cRegex","ival","parseRegex","groupRegex","NumberParser","numberParser","custom","symbolRegex","infinity","symbolpattern","getParsedNumber","isNegative","tempValue","end","Infinity","NaN","exponent","parseFloat","Observer","context","ranArray","boundedEvents","on","property","handler","id","cntxt","notExist","isHandlerPresent","push","off","splice","indexLocation","notify","argument","successHandler","errorHandler","call","name","window","blazorCallback","curObject_1","objs","index","isTrigger","obj_1","promise","then","data","isJson","JSON","parse","catch","destroy","boundedEvents_1","onIntlChange","rightToLeft","cldrData","defaultCulture","Internationalization","cultureName","getDateFormat","getCulture","getNumberFormat","getDateParser","getNumberParser","formatNumber","formatDate","parseDate","parseNumber","getDatePattern","isExcelFormat","getActualDateTimeFormat","getNumberPattern","getActualNumberFormat","getFirstDayOfWeek","getWeekData","blazorCultureFormats","IntlBase","customRegex","fractionRegex","patternRegex","'","firstDayMapper","currencyFormatRegex","curWithoutNumberRegex","typeMapper","0","1","iType","basicPatterns","dPattern","tPattern","mode","calendartype","defaultObject","numSystem","curFormatMapper","toUpperCase","patternMatcher","needFraction","cSymbol","fractionOnly","changeCurrencySymbol","groupPattern","fraction","fmatch","sym","currencyCode","customNumberFormat","numObject","integerPart","fractionPart","isCurrencyPercent","parts","actual","symbol","part","loc","3","4","5","C","P","N","A","E","formatSplit","dateObj","actualPattern","tLength","timeZonePattern","options_1","minFrac","curMatch","curCode","hasNegativePattern","minDigits","maxDigits","diff","fractionDigitsPattern","integer","x","minimumIntegerPattern","groupingPattern","cPattern","firstDay","iCulture","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","open","setRequestHeader","beforeSend","onSuccess","failureHandler","reason","onFailure","responseText","dataType","toLowerCase","error","readyState","status","statusText","getResponseHeader","responseHeaders","header","headers","exec","getAllResponseHeaders","EventHandler","addOrGetEventData","element","__eventList","events","add","eventName","listener","bindTo","intDebounce","debounceListener","eventData","event","addEventListener","remove","some","removeEventListener","clearEvents","copyData","shift","trigger","eventProp","eventData_1","event_1","SVG_REG","tagName","properties","createElementNS","createElement","innerHTML","styles","setAttribute","attrs","addClass","elements","classes","classList","getClassList","_a","ele","_b","classList_1","contains","removeClass","classList_2","isVisible","style","visibility","offsetWidth","prepend","fromElements","toElement","isEval","docFrag","createDocumentFragment","appendChild","insertBefore","firstElementChild","executeScript","append","querySelectorAll","script","head","detach","removeChild","attributes","selector","querySelector","el","closest","nodeType","setStyleAttribute","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","filter","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","isPointer","isTouch","isDevice","move","getTouchStartEvent","getTouchEndEvent","getTouchMoveEvent","getTouchCancelEvent","regX","defineProperty","get","uA","set","enumerable","configurable","info","isMSPointer","isWebView","cordova","PhoneGap","phonegap","forge","touchStartEvent","touchMoveEvent","touchEndEvent","touchCancelEvent","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","propName","getParentKey","model_1","getArrayModel","model","ejsAction","isControlParent","arrayFunction","modelObject","Property","target","propertyDescriptor","addPropertyCollection","Complex","Collection","eventDescriptor","finalContext","getParentContext","curText","NotifyPropertyChanges","classConstructor","propertyType","propList","complexProps","colProps","propNames","complexPropNames","colPropNames","eventNames","propertyName","_extendStatics","__extends","setPrototypeOf","__proto__","__","create","__decorate","decorators","desc","r","getOwnPropertyDescriptor","Reflect","decorate","_super","Animation","easing","ease","linear","easeIn","easeOut","easeInOut","elasticInOut","elasticIn","elasticOut","Animation_1","animate","getModel","elements_1","element_1","delayAnimation","stop","animation","removeAttribute","animationId","getAttribute","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","offset","getBoundingClientRect","offsetX","pageX","body","scrollLeft","offsetY","pageY","scrollTop","documentElement","left","right","top","bottom","radius","sqrt","diameter","rippleElement","getComputedStyle","getPropertyValue","transform","removeRipple","rippleElements","opacity","getElementsByClassName","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","parent_1","parentKey","complexKeys","isFinal","valueLength","componentCount","lastHistoryLen","Component","randomId","uniqueID","isStringTemplate","needsID","enableRtl","locale","moduleLoader","localObserver","detectFunction","appendTo","enablePersistence","setPersistData","refresh","preRender","injectModules","render","mergePersistData","renderComplete","wrapperElement","event_2","getInjectedModules","injectedModules","Inject","localStorage","getItem","setItem","getPersistData","clearTemplate","templateName","isHistoryChanged","pageID","location","href","history","hash","charCodeAt","addOnPersist","persistObj","objValue","getActualProperties","stringify","ignoreOnPersist","iterateJsonProperties","ignoreList","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","isIE","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","isChangeTouch","intCordinate","styleProp","margin","marginLeft","marginTop","marginRight","marginBottom","dragTarget","intClosest","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","helper","tLeft","tTop","pagex","pagey","dLeft","dTop","skipDistanceCheck","helperWidth","helperHeight","draEleTop","draEleLeft","iTop","iLeft","dragValue","enableAutoScroll","scrollIntoView","intOut","docBody","docEle","dragStop","dragStopCalled","intDrop","change","eleWidthBound","eleHeightBound","elementArea","scrollWidth","scrollHeight","tborder","tpadding","lowerKey","prevStyle","pointerEvents","elementFromPoint","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","trim","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","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","getTime","eleStyle","overflow","overflowX","overflowY","eTapArgs","pnt","newX","newY","newT","xDist","yDist","interval","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","evalExpResult","varCOunt","localKeys","isClass","singleSpace","cnt","matchStr","rlStr","addNameSpace","strs","HandleSpecialCharArrObj","rlStr_1","mtc","fnStr","fNameSpace","ftArray","SlashReplace","NameSpaceForspecialChar","evalExp","addNS","tempStr","nameSpaceNew","quotes","NameSpaceArrObj","HAS_ROW","HAS_SVG","blazorTemplates","templateString","compiler","engineObj","component","templateId","blazorId","random","childNodes","updateBlazorTemplate","comp","isEmpty","callBack","updateTemplate","resetBlazorTemplate","templateDiv","getElementById","innerTemplates","tempId","tempElement","popupRect","parentDocument","Engine","removeTags","removeAttrs","attribute","jsEvents","SanitizeHtmlHelper","beforeSanitize","selectors","tags","sanitize","item","serializeValue","wrapElement","removeXssTags","removeJsEvents","removeXssAttrs","attr","hasAttribute","Query","from","subQuery","isChild","distincts","queries","fKey","fromTable","lookups","expands","sortedColumns","groupedColumns","setKey","field","using","dataManager","execute","always","executeQuery","executeLocal","cloned","subQuerySelector","isCountRequired","tableName","addParams","fn","distinct","fields","expand","tables","where","fieldName","operator","ignoreCase","ignoreAccent","predicate","search","searchKey","fieldNames","comparer","fnOperators","sortBy","isFromGroup","sorts","order","endsWith","fnSort","filterQueries","direction","sortByDesc","group","page","pageIndex","pageSize","take","nos","skip","select","hierarchy","query","selectorFn","foreignKey","requiresCount","aggregate","q","filterQueryLists","singles","filtered","Predicate","isComplex","processOperator","condition","predicates","and","combinePredicates","combine","or","fromJson","json","fromJSONData","pred","validate","record","isAnd","toJson","preds","Adaptor","ds","requestType","count","aggregates","dataSource","pvt","processResponse","xhr","JsonAdaptor","processQuery","countFlg","agg","batchRequest","dm","changes","deletedRecordsLen","deletedRecords","addedRecords","insert","changedRecords","update","onWhere","onAggregates","onSearch","getFieldList","onSortBy","fnCompare","sort","onGroup","aggQuery","tmp","onPage","size","onRange","onTake","onSkip","onSelect","keyField","UrlAdaptor","hierarchyFilters","getQueryRequest","request","groups","filters","searches","callAdaptorFunction","getFiltersFrom","isNull","req","getRequestQuery","reqParams","keys_2","jsonDateReplacer","pvtData","convertToQueryString","request1","selects","handleTimeZone","timeZoneHandling","parseJson","requests","groupDs","getAggregateResult","original","batchUrl","crudUrl","removeUrl","changed","added","deleted","table","getAddParams","insertUrl","keyColumn","updateUrl","pKey","predicats","aggregateData","groupQuery","ODataAdaptor","multipartAccept","batch","changeSet","batchPre","contentId","batchContent","changeSetContent","batchChangeSetContentType","updateType","onPredicate","requiresCast","guid","returnValue","getField","replacer","encodeURIComponent","isGuid","odBiOperator","odUniOperator","odv4UniOperator","onComplexPredicate","onEachWhere","onEachSearch","onEachSort","reverse","onCount","settings","overrideMimeType","rootUrl","dataUrls","resourceTableName","dataCopy","results","emptyAndBatch","processBatchResponse","versionCheck","requiresFormat","keys_4","localTimeReplacer","convertObj","dateParse","toLocalTime","localTime","compareAndRemove","initialGuid","getGuid","cid","cSet","generateInsertRequest","generateUpdateRequest","generateDeleteRequest","arr","stat","toJSON","_data","generateBodyContent","_data2","org","o","_data3","method","cIdx","jsonObj","exVal","changeGuid","isPlainObject","valueOf","ODataV4Adaptor","isDate","onExpand","selected","expanded","exArr","ex","onDistinct","distinctFields","dataUrl","WebApiAdaptor","host","_loop_2","_loop_3","state","Count","Items","WebMethodAdaptor","param","RemoteSaveAdaptor","updateKey","CacheAdaptor","adaptor","isCrudAction","isInsertAction","cacheAdaptor","guidId","setInterval","forDel","currentTime","requestTime","removeItem","generateKey","currentFilter","newQuery","cachedItems","crossDomain","DataManager","offline","timeTillExpiration","cachingPageSize","enableCaching","jsonp","isCors","defaultQuery","isDataAvailable","ready","setDefaultQuery","lookup","buildHierarchy","deffered","Deferred","getDeferedArgs","makeRequest","nextTick","extendRequest","fnSuccess","fnFail","cache","processData","isSelector","process","virtualSelectRecords","fnQueryChild","subDeffer","childArgs","subUrl","childReq","subData","virtualRecords","ajax","all","pResult","cResult","deff_1","ajax_1","doAjaxRequest","defer","consts","GroupGuid","DataUtil","input","startsWith","fnAscending","fnDescending","localeCompare","extractFields","setValue","jsonArray","newData","level","jsonData","items","indx","childLevels","grouped","groupedArray","records","this_2","getVal","tempObj","aggs","grp","fKeyData","copyObj","middle","ignoreDiacritics","diacritics","current","array","fnName","param1","param2","adp","rand","Uint8Array","getItemFromComparer","castRequired","requiresCompleteRecord","serverTimezoneOffset","sum","average","truecount","falsecount","operatorSymbols","equal","expected","notequal","lessthan","greaterthan","lessthanorequal","greaterthanorequal","notnull","isnull","startswith","endswith","processSymbols","jsonText","jsonReviver","iterateAndReviveArray","iterateAndReviveJson","ms","offSet","toTimeZone","isUTC","utcFormat","hrs","mins","addSelfOffset","jsonReplacer","arrayReplacer","keys_3","toUTC","utc","unix","datefn","differenceString","localtimefn","norm","getSeconds","globalTimeOut","spinTemplate","spinCSSClass","createSpinner","internalCreateElement","makeElement","container","spinnerContainer","spinnerInnerContainer","wrap","inner_wrap","create_spinner_container","cssClass","theme","getTheme","defaultSize","calculateRadius","setTheme","label","labelEle","textContent","createLabel","replaceContent","innerContainer","svg","random_generator","timeOut","create_material_element","mat_calculate_attributes","createMaterialSpinner","create_fabric_element","fb_calculate_attributes","createFabricSpinner","svgBoot","firstChild","bootCircle","CLS_SPINCIRCLE","defaultRadius","create_bootstrap_element","startArc","defineArcPoints","circleEle","boot_calculate_attributes","createBootstrapSpinner","createHighContrastSpinner","createBootstrap4Spinner","charAt","innerCon","themeClass","svgFabric","fabricCirclePath","fabricCircleArc","cls","svgMaterial","matCirclePath","animateMaterial","spinnerInfo","globalInfo","previousId","startTime","strokeSize","getStrokeSize","rotate","mat_animation","path","getDashOffset","updatePath","createCircle","easeAnimation","transformOrigin","drawArc","PI","timestamp","timecount","innerConainer","trgClass","centerX","centerY","circle","defineCircle","endArc","defineArc","angle","radians","cos","sin","showSpinner","showHideSpinner","isHide","spinnerWrap","inner","svgEle","isAnimate","globalObject","globalVariables","timeOutVar","startMatAnimate","series","increment","rotation","formSeries","boot_animate","animateBootstrap","hideSpinner","targetContainer","calculateRelativeBasedPosition","anchor","fixedElement","anchorPos","tempAnchor","calculatePosition","currentElement","positionX","positionY","targetValues","ownerDocument","posX","posY","setPosx","getElementHCenter","setPosy","getElementTop","getElementRight","getElementVCenter","getElementLeft","getElementBottom","updatePosition","getBodyScrollTop","getBodyScrollLeft","fit","viewPortElement","X","Y","elemData","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","fixedParent","tEdge","TL","TR","BL","BR","eEdge","edge","updateElementData","setPosition","leftFlip","deepCheck","collideSide","topFlip","setPopup","eStatus","getTargetContainerLeft","getTargetContainerTop","windowWidth","PositionData","CLASSNAMES","Popup","zIndex","setEnableRtl","refreshPosition","setContent","actionOnScroll","wireScrollEvents","unwireScrollEvents","orientationOnChange","getRelateToElement","scrollRefresh","parent_2","relateToElement","relateTo","hide","targetVisible","isElementOnViewport","targetInvisibleStatus","scrollElement","scrollParents","parent_3","isElementVisible","checkGetBoundingClientRect","win","windowView","scrollY","scrollX","outerWidth","outerHeight","elementView","parent_4","reposition","content","collision","checkFixedParent","checkCollision","parentDisplay","getAnchorPosition","anchorEle","eleRect","anchorRect","targetType","callFlip","callFit","viewPortRect","horz","vert","show","animationOptions","relativeElement","zIndexElement","getZindexPartial","showAnimation","hideAnimation","overflowRegex","parentStyle","parentZindex","defaultView","childrenZindex","children","isEqualNode","siblingsZindex","finalValue","concat","currentZindexValue","ROOT","effect","Tooltip","isBlazorTooltip","contentTargetValue","contentEvent","contentAnimation","formatPosition","tooltipPositionY","tooltipPositionX","renderArrow","tip","setTipClass","tooltipEle","tipClass","ARROW_TIP","ARROW_TIP_OUTER","ARROW_TIP_INNER","renderPopup","elePos","mouseTrail","getTooltipPosition","popupObj","openPopupHandler","close","closePopupHandler","offsetPos","calculateTooltipOffset","collisionFlipFit","needTemplateReposition","findTarget","tooltipEventArgs","clear","tooltipEleWidth","tooltipEleHeight","arrowEle","tipWidth","tipHeight","tipAdjust","showTipPointer","tipHeightAdjust","clientHeight","tipWidthAdjust","clientWidth","updateTipPosition","selEle","adjustArrow","leftValue","topValue","tipPosExclude","tooltipWidth","tooltipHeight","arrowInnerELe","tipPointerPosition","POINTER_ADJUST","renderContent","tooltipContent","HTMLElement","enableHtmlSanitizer","templateFunction","isBlazorTemplate","renderCloseIcon","isSticky","tipClose","ICON","onStickyClose","addDescribedBy","describedby","removeDescribedBy","orgdescribedby","tapHoldHandler","autoCloseTimer","targetHover","touchEndHandler","targetClick","hideTooltip","targetList_1","ctrlId","target_1","restoreElement","showTooltip","showTimer","hideTimer","beforeRenderArgs","beforeRenderCallback","isBlazorTooltipRendered","isHidden","interopAdaptor","invokeMethodAsync","TOOLTIP_WRAP","role","beforeRenderBlazor","afterRenderBlazor","contentUpdated","ctrlObj","maxWidth","observedArgs","beforeOpenCallback","openAnimation_1","openDelay","wireMouseEvents","viewContainerRef","horizontal","vertical","affectedPos","newpos","collidedPosition","eleOffset","arrowleft","targetElement","closeAnimation_1","closeDelay","unwireMouseEvents","onMouseOut","enteredElement","relatedTarget","checkForTooltipElement","tooltipElementMouseOut","onMouseMove","eventPageX","eventPageY","touches","colpos","keyDown","touchEnd","scrollHandler","opensOn","triggerList_1","getTriggerList","wireFocusEvents","touchModule","tapHold","targetList_2","triggerList_2","unwireFocusEvents","targetList_3","triggerList_3","ValueFormatter","intl","getFormatFunction","getParserFunction","fromView","toView","setCulture","Column","disableHtmlEncode","allowSorting","allowResizing","allowFiltering","allowGrouping","allowReordering","showColumnMenu","enableGroupByFormat","allowEditing","showInColumnChooser","edit","allowSearching","autoFit","sortDirection","getEditTemplate","editTemplateFn","getFilterTemplate","filterTemplateFn","editType","uid","getUid","valueFormatter","setFormatter","setParser","col","columns","commands","textAlign","commandsTemplate","templateFn","templateCompiler","headerTemplate","headerTemplateFn","itemTemplate","fltrTemplateFn","editTemplate","filterTemplate","isForeignColumn","foreignKeyField","foreignKeyValue","sortComparer","a_1","xObj","yObj","getForeignData","getSortDirection","setSortDirection","column","getFormatter","formatFn","getParser","parserFn","getColumnTemplate","getHeaderTemplate","getFilterItemTemplate","getDomSetter","contentReady","CommandColumnModel","uiUpdate","onEmpty","inBoundModelChanged","headerRefreshed","keyPressed","click","Print","scrollModule","isAsyncPrint","defered","isContentReady","actionBegin","hierarchyPrint","isPrintGrid","hierarchyPrintMode","childGrid","removeColGroup","printGridObj","printModule","print","renderPrintGrid","printWind","moveTo","resizeTo","screen","availWidth","availHeight","gObj","printGrid","getPrintGridModel","getQuery","isPrinting","injectedModues","setInjectedModules","printgrid","log","registeredTemplate","selectedRows","getContentTable","cssProps","getCssProperties","contentDiv","headerDiv","border","groupSettings","waitingPop","_c","printGridElement","printWindow","div","links","getElementsByTagName","reference","cloneNode","outerHTML","write","focus","clearInterval","depth","groupCaption","colSpan","colGroups","contentColGroups","hideColGroup","printGridProp","valueAccessor","getUpdateUsingRaf","updateFunction","getCollapsedRowsCount","grid","gLen","dataRowCnt","agrCnt","indent","gLevel","recursive","row","nLevel","iterateArrayOrObject","collection","setStyleAndAttributes","node","customAttributes","copyAttr","literals","setColumnIndex","columnModel","ind","prepareColumns","autoWidth","headerText","visible","setCssInGridPopUp","popUp","isBottomTail","popUpSpan","targetPosition","popup","getPosition","getPopupLeftPosition","parentsUntil","elem","isID","getActualPropFromColl","coll","appendChildren","calculateAggregate","customAggregate","Global","CellType","RenderType","ToolbarItem","getScrollBarWidth","divNode","cssText","isActionPrevent","dlg","editSettings","showConfirmDialog","serviceLocator","fmtr","getService","addRemoveActiveClasses","cells","createCboxWithWrap","removeAddCboxClasses","checked","lValue","foreignKeyData","fField","fdata","columnData","getDatePredicate","matchCase","getColumnByForeignKeyValue","filterObject","datePredicate","prevDate","nextDate","prevObj","nextObj","setSeconds","predicateSt","predicateEnd","ejpredicate","isGroupAdaptive","enableVirtualization","isVirtualAdaptive","object","printGridModel","printMode","expandedRows","rows_1","getRowsObject","isExpand","isDetailRow","allowPaging","pageSettings","currentPage","gridModel","getExpandedState","extendObjWithFn","getPrototypeOf","getPrototypesOfObj","i_1","cpy","cln","checkDepth","indices","getTextNode","childnode","createCheckBox","enableRipple","wrapper","rippleSpan","frameSpan","labelSpan","timer","selectedHandler","minHeight","maxHeight","minWidth","containerElement","resizeWestWidth","buttonObserver","cssClassName","Button","disabled","removeRippleEffect","isPrimary","tempContent","setIconCss","controlStatus","iconCss","span","iconPosition","isToggle","btnClickHandler","unWireEvents","focusIn","elementClass","originalWidth","originalHeight","originalX","originalY","originalMouseX","originalMouseY","RESTRICT_LEFT","resize","resizeEnd","setLeft","previousWidth","createResize","resizeBegin","resizing","resizeComplete","getDOMElement","boundary","directions","resizeHandler","resizers","onMouseDown","onTouchStart","domElement","getEventType","calculateValues","onMouseUp","resizeTowards","resizeSouth","resizeNorth","resizeWest","resizeEast","getClientRectValues","containerRectValues","documentHeight","calculateValue","currentpageY","targetRectValues","calculatedHeight","borderValue","topWithoutborder","targetTop","calculatedTop","boundaryRectValues","currentHeight","top_1","rectValues","documentWidth","calculatedWidth","left_1","removeResize","handlers","ButtonProps","AnimationSettings","DLG_TARGET","SCROLL_DISABLED","FULLSCREEN","Dialog","initRender","enableResize","setResize","animationSettings","getMinHeight","headerContent","allowMaxHeight","preventVisibility","clonedEle","closeIconClickEventHandler","dlgOverlayClickEventHandler","focusContent","l10n","checkPositionData","prevOnChange","isNumberValue","getEle","list","computedHeaderHeight","computedFooterHeight","footerEle","headerHeight","footerHeight","onResizeStart","onResizing","onResizeComplete","isBlazorServerRender","computedHeight","computedWidth","isModal","targetEle","buttonObj","btnObj","activeElement","focusableElements","buttonIndex_1","isTagName","isContentEdit","closeOnEscape","primaryButtonEle","buttons","buttonModel","setCSSClass","setMaxHeight","initialRender","setzIndex","calculatezIndex","setTargetContent","setHeader","showCloseIcon","footerTemplate","setButton","setFooterTemplate","allowDragging","setAllowDragging","setIsModal","dlgContainer","dlgOverlay","parentEle","refElement","preventFocus","openEventArgs","unBindEvent","closeArgs","activeEle","blur","storeActiveElement","positionChange","setEnableRTL","setOverlayZindex","zIndexValue","setPopupPosition","dragObj","dragEventArgs","buttonContent","buttonType","btn","footerBtn","ftrTemplateContent","contentEle","innerContentElement","blazorContain","sanitizeHelper","setTemplate","templateProps","templateValue","blazorTemplate","isContent","headerEle","createHeaderContent","closeIcon","closeIconBtnObj","DLG_CLOSE_ICON","closeIconTitle","oldCSSClass","getValidFocusNode","u","tabIndex","disableElement","getAutoFocusNode","validNode","t","elementMatch","Element","bindEvent","updateSanitizeContent","innerText","insertAdjacentHTML","updateIsModal","buttonCount","setPopupZindex","classArray","isFullScreen","fullScreen","eventArgs_1","beforeOpenArgs","openAnimation","dialogOpen","isInteraction","isInteracted","beforeCloseArgs","closeAnimation","getButtons","DialogUtility","createDialog","dialogObject","formOptions","title","isDraggable","formButtonModel","buttonPropModel","buttonProps","icon","alert","alertDialogObj","dialogElement","alertButtonModel","okButton","setAlertButtonModel","confirm","confirmDialogObj","okButtonModel","cancelButtonModel","cancelButton","setConfirmButtonModel","Input","floatType","bindInitialEvent","checkInputValue","floatLabelType","getParentNode","inputElement","inputValue","_focusFn","_blurFn","wireFloatingEvents","createFloatingInput","inputObject","floatLinelement","floatLabelElement","createInputContainer","customTag","placeholder","inputWrap","updateLabelState","checkFloatLabelType","updateIconState","button","wireClearBtnEvents","readOnly","validateLabel","tagClass","tag","setCssClass","oldClass","setPlaceholder","spanEle","encodePlaceHolder","setReadonly","isReadonly","readonly","isRtl","setEnabled","isEnable","inputContainer","disabledAttrs","considerWrapper","removeAttributes","addAttributes","setClearButton","isClear","initial","clearButton","insertAdjacentElement","createClearButton","_internalRipple","isRipple","argsButton","_onMouseDownRipple","_onMouseUpRipple","createIconEle","iconClass","prependSpan","innerWrapper","appendSpan","createInput","showClearButton","enabled","setPropertyValue","setWidth","removeFloating","inputEle","addFloating","iconEle","inputObj","isPrependIcon","floatLine","floatText","setRipple","addIcon","icons","internalCreate","result_1","result_2","CheckBoxFilterBase","existingPredicate","foreignKeyQuery","filterState","values","renderEmpty","cBoxTrue","cBoxFalse","closeDialog","clickHandler","searchHandler","searchBoxKeyUp","foreignKeyFilter","fColl","mPredicate","fPredicate","filterCollection","fpred","foreignFilter","isRemote","initalPredicate","searchBoxClick","sInput","refreshCheckboxes","updateSearchIcon","sIcon","getLocalizedLabel","localeObj","updateDataSource","actualPredicate","filteredColumns","filterSettings","allowCaseSensitive","isFiltered","getAndSetChkElem","sBox","hideSearchbox","searchBox","inputargs","spinner","cBox","showDialog","columnName","columnType","isJsComponent","dialogObj","btnClick","isExcel","created","dialogCreated","getAllData","elementVisible","dlgWidth","leftPos","getFilterMenuPostion","openDialog","filterTemplateCol","filterItemTemplate","destroyTemplate","clearFilter","fltrBtnHandler","fObj","optr","searchInput","caseSen","defaults","isNotEqual","itemsCnt","arg1","arg2","arg3","arg4","arg5","arg6","initiateFilter","firstVal","foreignQuery","predicte","parsed","moduleName","addDistinct","filterModel","filterChoiceCount","filterEvent","processSearch","getPredicateFromCols","getPredicate","predicateList","isGrid","getForeignKeyColumns","foreignColumn","getColumnByField","processDataOperation","filteredColumn","eventPromise","dataSuccess","getStateEventArgument","def","adaptr","isInitial","allPromise","runArray","fullData","searchSettings","sSettings","cols","filterColumn","filteredData","getDistinct","processDataSource","updateResult","createFilterItems","selectAll","updateAllCBoxes","toogleCheckbox","updateIndeterminatenBtn","cBoxes_1","createCheckbox","dummyData","cBoxes","nullCounter","selectAllValue","checkBox","isColFiltered","isRndere","args_1","checkbox","getCheckedState","isForeignKey","foreignDataObj","generatePredicate","updateDateFilter","getCaseValue","Data","dataState","isPending","resolver","initDataManager","addRows","reorderRows","removeRows","crudActions","getData","refreshFilteredCols","toIndex","fromIndex","isQueryInvokedFromData","generateQuery","skipPage","columnQueryMode","getColumns","isPrimaryKey","selectQueryFields","filterQuery","searchQuery","aggregateQuery","sortQuery","virtualGroupPageQuery","pageQuery","isForeign","rows","types","k","infiniteScrollSettings","enableScroll","pageCount","infiniteScrollModule","isGrpFmt","formatGroupColumn","sortSettings","sortGrp","getSearchColumnFieldNames","getModulename","fGeneratePredicate","skipFoerign","actualFilter","colType","checkBoxCols","defaultFltrCols","columns_1","excelPredicate","_d","_e","defaultFltrCols_1","grabColumnByFieldFromAllCols","column_1","grabColumnByUidFromAllCols","sType","getKey","getPrimaryKeyFieldNames","crud","deferred_1","getMilliseconds","pr","previousData","deff","endEdit","setState","getState","dataArgs","isDataChanged","editArgs_1","cancelEdit","colFieldNames","columns_2","filteredCols","refreshFilteredColsUid","Row","cell","Cell","isSpanned","isRowSpanned","CellMergeRender","cellArgs","td","spannedCell","cellRenderer","getCellRenderer","cellType","cellSpan","rowSpan","isDataRow","targetCell_1","colSpanLen","colSpanRange","rowSpanRange","spanText","enableColumnVirtualization","containsKey","backupMergeCells","fName","setMergeCells","generteKey","fname","splitKey","getMergeCells","mergeCells","updateVirtualCells","mCells","columnIndex","getIndexFromAllColumns","vColumnIndices","getColumnIndexesInView","getVisibleColumns","RowRenderer","isSpan","rowTemplate","refreshRow","isChanged","refreshMergeCells","tr","cells_1","isEdit","rowArgs","attrCopy","chekBoxEnable","isSelected","getSelectedRowIndexes","isCheckBoxSelection","checkAllRows","buildAttributeFromRow","cellRendererFact","DetailExpand","Filter","CommandColumn","requestTypeAction","prevRowCells","prevRowCell","rowHeight","isRowDragable","detailTemplate","frozenColumns","summarycell","isAltRow","class","RowModelGenerator","generateRows","isInifiniteScroll","startIndex","generateRow","ensureColumns","generateCell","RowDragIcon","pid","tIndex","parentUid","getRowUid","parentGid","enableAltRow","refreshForeignKeyRow","generateCells","foreignKeyColumns","dummies","rowId","oIndex","opt","isDataCell","refreshRows","SummaryModelGenerator","groupFooterTemplate","groupCaptionTemplate","columnSelector","buildSummaryData","getGeneratedRow","summaryRow","raw","indents","getIndentByLevel","isDetailGridAlone","indentLength","getIndentCount","getGeneratedCell","getCellType","Indent","DetailFooterIntent","sColumn","scolumn","dummy","summaryRows","single","disp","Summary","GroupSummaryModelGenerator","v","GroupSummary","CaptionSummaryModelGenerator","reduce","prev","CaptionSummary","GroupModelGenerator","summaryModelGen","captionModelGen","isInfiniteScroll","getGroupedRecords","isCollapseStateEnabled","ensureRowVisibility","parentid","childId","isRenderCaption","prevKey","generateDataRows","captionRow","generateCaptionRow","rowCnt","isCaptionRow","aggregatesCount","getCaptionRowCells","visibles","indexes","groupedLen","generateIndentCell","Expand","captionCells","cIndex_1","wFlag","tmpFlag","GroupCaption","GroupCaptionEmpty","parentID","childID","childGid","gSummary","getForeignKeyData","cRow","childRow","ContentRender","freezeRows","movableRows","freezeRowElements","isLoaded","viewColIndexes","infiniteCache","isRemove","visibleRows","isAddRows","rafCallback","getFrozenColumns","mContentRows","getMovableVirtualContent","fContentRows","getFrozenVirtualContent","mHdr","getMovableVirtualHeader","fHdr","getFrozenVirtualHeader","ariaService","setBusy","getPanel","isFrozen","allowTextWrap","case","generator","getModelGenerator","setVisible","colGroupRefresh","enableAfterRender","refreshContentRows","beforeCellFocused","byKey","keyArgs","pressedKey","renderPanel","setOptions","busy","setPanel","innerDiv","renderTable","virtualTable","virtualTrack","createContentTable","setTable","getTable","multiselectable","selectionSettings","initializeContentDrop","frozenRows","getHeaderContent","cellspacing","setColGroup","getColGroup","splitRows","idx","rowElements","currentViewData","hdrTbody","trElement","frag","hdrfrag","frzCols","modelData","fCont","mCont","cont","vcRows","vRows","mRow","sRow","borderRightWidth","isPersistSelection","selectRow","virtualInfo","sentinelInfo","contentModule","renderMovableContent","columnIndexes","setColumnIndexesInView","enableCache","templatetoclear","rootNodes","tbody","blockLoad","offsets","offsets_1","vGroupOffsets","bSize","blockIndexes","contentPanel","rowObject","bIndex","mhdrData","vgenerator","rowTemplateID","getRowTemplate","isTR","nodeName","lastElementChild","colcount","getHeaderTable","isVFTable","childElementCount","appendContent","panel","contentTable","getRows","getMovableRows","getRowElements","getMovableRowElements","setRowElements","colgroup","colGroup","testRow","fRows","mRows","rowLen","cellLen","needFullRefresh","getDataRows","contentrows","clen","getNormalizedColumnIndex","colIdx","getColumnIndexByUid","displayVal","getContent","getMovableDataRows","setDisplayNone","invokedFromMedia","hideAtMedia","updateMediaColumns","trs","replaceChild","canSkip","setSelection","clearAll","getRowByIndex","getInfiniteRowIndex","getVirtualRowIndex","getMovableRowByIndex","enable","setRowObjects","HeaderRender","frzIdx","notfrzIdx","visualElement","headercelldiv","getStackedHeaderColumnByHeaderText","getColumnByUid","lockColumn","colIndex","getColumnIndexByField","lineHeight","cloneElement","allowGroupReordering","widthService","colPosRefresh","toggleStackClass","createHeaderTable","initializeHeaderDrag","initializeHeaderDrop","headerPanel","headerTable","tHead","skipDom","createTable","tableEle","findHeaderRow","thead","caption","bodyCell","rowBody","Header","len_1","updateColGroup","colHeader","rowRenderer","headerRow","colDepth","measureColumnDepth","getHeaderCells","len_2","HeaderIndent","DetailHeader","RowDragHIcon","lockcolPositionCount","lockColsRendered","appendCells","isFirstObj","isFirstCol","isLastCol","isMovable","lastCol","getCellCnt","frzObj","refreshFrozenHdr","isPartial","isComp","stackedLockColsCount","getStackedLockColsCount","StackedHeader","getColSpan","inViewIndexes","lockColsCount","frozenCnt","frzCol","rowIndex","mTblColGrp","mTbl","refreshUI","freezeReorder","setFrozenTable","setWidthToColumns","updateDefaultCursor","gCells","textWrapSettings","wrapMode","showDropArea","headerRows","CellRenderer","locator","localizer","formatter","tabindex","rowChkBox","getGui","evaluate","fData","templateID","rNumber","invokeFormatter","checkFor","refreshCell","refreshTD","innerHtml","displayAsCheckBox","localeStr","fromFormatter","appendHtml","persistSelection","checkWrap","setAttributes","buildAttributeFromCell","clipMode","isCheckBoxType","isTemplate","AriaService","setStateAndProperties","setExpand","setSort","isBusy","invalid","setGrabbed","isGrabbed","grabbed","setDropTarget","isTarget","dropeffect","haspopup","HeaderCellRenderer","hTxtEle","sortEle","gui","chkAllBox","fltrMenuEle","prepareHeader","hValueAccer","ariaAttr","innerDIV","headerValueAccessor","checkAllWrap","matchFlColumns","extendPrepareHeader","gridObj","headerTempID","headerTextAlign","alignment","matchFilteredColumns","StackedHeaderCellRenderer","toolTip","IndentCellRenderer","GroupCaptionCellRenderer","fKeyValue","captionTemplate","tempID","GroupCaptionEmptyCellRenderer","ExpandCellRenderer","HeaderIndentCellRenderer","DetailHeaderIndentCellRenderer","DetailExpandCellRenderer","RowDragDropRenderer","nodeElement","RowDragDropHeaderRenderer","Render","emptyGrid","counter","renderer","headerRenderer","getRenderer","contentRenderer","Content","isLayoutRendered","emptyRow","setHeight","setPadding","refreshDataManager","resetTemplates","getSelectedRecords","dataLength","totalRecordsCount","prevPageMoving","ceil","pagerModule","pagerObj","gridColumns","detailTemplateID","toolbarTemplate","refreshComplete","isFActon","isNeedForeignAction","getFData","deffered_1","disablePageWiseAggregates","validateGroupRecords","dataManagerSuccess","dataManagerFailure","deferred","sendBulkRequest","query_1","dmSuccess","dmFailure","renderEmptyRow","spanCount","colspan","dynamicColumnChange","getCurrentViewRecords","updateColumnType","validationRules","isColTypeDef","isServerDateMap","actionArgs","updatesOnInitialRender","isInitialLoad","buildColumns","isAutoGen","iterateComplexColumns","complexCols","instantiateRenderer","addRenderer","cellrender","addCellRenderer","group0","groupN","addWhere","curFilter","rPredicate","updateGroupInfo","untouched","uGroup","itemGroup","uGroupItem","l","data_1","CellRendererFactory","cellRenderMap","ServiceLocator","services","register","RendererFactory","rendererMap","rName","ColumnWidthService","totalColumnsWidth","setColumnWidth","getTableWidth","setMinwidthBycalculation","tWidth","difference","tmWidth","collection_1","isWidthUndefined","setUndefinedColumnWidth","cWidth","getWidth","tgridWidth","setWidthToTable","Boolean","elementWidth","headerCol","contentCol","fWidth","editTableCol","getSiblingsHeight","getHeightFromDirection","sibling","isWidUndefCount","calcMovableOrFreezeColWidth","tableType","setWidthToFrozenTable","freezeWidth","setWidthToMovableTable","movableWidth","isColUndefined","isWidthAuto","setWidthToFrozenEditTable","setWidthToMovableEditTable","FocusStrategy","currentInfo","oneTime","swap","forget","skipFocus","focusByClick","prevIndexes","refMatrix","refreshMatrix","actions","rowModelGen","focusCheck","onFocus","setActive","enableHeaderFocus","matrix","generate","validator","passiveFocus","skipAction","onBlur","removeFocus","getFocusInfo","elementToFocus","onClick","force","isHeader","beforeArgs","byClick","clickArgs","clearOutline","onKeyPress","skipOn","activeKey","bValue","outline","swapInfo","jump","toHeader","toFrozen","getNextCurrent","active","setActiveByKey","clearIndicator","filterCell","focusVirtualElement","virtualData","isAdd","isCancel","isKeyFocus","empty","preventScroll","getFocusedElement","fContent","fHeader","setFocusedElement","addFocus","addOutline","focusHeader","resetFocus","isFocused","isJump","getInfo","cellIndex","focusedColumnUid","getColumnByIndex","FixedContentFocus","FixedHeaderFocus","cFocus","updateRow","index_1","isRowTemplate","frozenColumnsCount","newMovableRows","getMovableRowsObject","newFrozenRows","handlerInstance","focusElement","cellPosition","gridPosition","passiveHandler","restoreFocus","evts","actionsG","restoreFocusWithAction","internalCellFocus","showGroupedColumn","getPrevIndexes","forgetPrevious","focusEle","getFocusable","Matrix","allow","inValid","vector","ContentFocus","keyActions","indexesByKey","getCurrentFromAction","editNextRow","allowNextRowEdit","isLastCellPrimaryKey","visibleIndex","isPresent","shouldFocusChange","rN","cN","oRowIndex","oCellIndex","isDirty","frozenSwap","enterFrozen","isHeaderFocus","previous","optionals","defaultLen","rIndex","cIndex","isData","isSelectable","isCellWidth","HeaderFocus","isLastCell","lastRow","headerSwap","current1","current2","current3","SearchBox","searchFocus","searchBlur","wireEvent","unWireEvent","PageSettings","ColumnChooserSettings","__assign","assign","n","Selection","selectedRowIndexes","selectedRowCellIndexes","selectedRecords","isMultiShiftRequest","isMultiCtrlRequest","enableSelectMultiTouch","clearRowCheck","selectRowCheck","selectedRowState","chkAllCollec","isCheckedOnAdd","persistSelectedData","isCancelDeSelect","isPreventCellSelect","disableUI","isPersisted","cmdKeyPressed","autoFillRLselection","factory","initializeSelection","mouseDownHandler","onActionBegin","fDataUpdate","rowObj","getRowObj","currentIndex","onActionComplete","gridElement","hidePopUp","clearSelection","isEditing","editModule","formObj","getSelectedMovableRow","getCurrentBatchRecordChanges","currentRecords","iterateExtend","getBatchChanges","primaryKey","enableSimpleMultiRowSelection","addRowsToSelection","selectData","selectedRow","selectedMovableRow","clearRowSelection","selectedIndex","getRowObjectFromUID","isRowType","isRowSelected","actualTarget","rowSelectingCallBack","isCtrlPressed","isShiftPressed","previousRow","prevRowIndex","previousRowIndex","addMovableArgs","isRemoved","can","toggle","removed","clearSelectedRow","selectRowCallBack","clearRow","updateRowSelection","selectRowIndex","updateRowProps","targetObj","mObj","previousMovRow","selectRowsByRange","endIndex","selectRows","getCollectionFromIndexes","rowIndexes","isSingleSel","selectedData","prevRow","rowIndexes_1","rowIdx","checkboxColumn","isUnSelected","enableToggle","rowDeselect","addRemoveClassesForRow","rowIndexes_2","state_1","clearRowCallBack","selectedEle","updatePersistCollection","updateCheckBoxes","chkState","pKey_1","updatePersistDelete","chkBox","nextElementSibling","checkedTarget","setCheckAllState","pop","clearCellSelection","row_1","mRow_1","rowIndex_1","foreignKeyData_1","currentRow","checkSelectAllClicked","getCheckAllStatus","updatePersistSelectedData","movableRow","rowDeselectCallBack","rowDeselectObj","getSelectedMovableCell","getMovableCellFromIndex","getColIndex","selectCell","isCellType","selectedCell","getCellFromIndex","isCellSelected","prevCIdxs","successCallBack","previousRowCell","prevECIdxs","getCellIndex","cellSelectingArgs","clearCell","updateCellSelection","currentCell","selectedRowCellIndex","updateCellProps","rIdx","selectCellsByRange","cellIndexes","stIndex","edIndex","cellSelectionMode","getLastColIndex","addAttribute","cellSelectedArgs","selectCells","rowCellIndexes","cellSelectArgs","addRowCellIndex","addCellsToSelection","hideAutoFill","cellIndexes_1","selectedCellIdx","cellDeselect","rowCellIndex","isRowAvail","selectedCells","getSelectedCellsElement","rowCell","cLen","bdrBottom","hideBorders","addMovableRows","mouseMoveHandler","gBRect","x1","y1","x2","y2","isCellDrag","startAFCell","startCell","endAFCell","selectLikeExcel","startDIndex","isAutoFillSel","showAFBorders","selectLikeAutoFill","startDCellIndex","drawBorders","createBorders","positionBorders","isLastRow","updateStartEndCells","bdrLeft","showBorders","stOff","endOff","endCell","colWidth","parentOff","bdrRight","bdrTop","drawAFBorders","bdrAFBottom","createAFBorders","positionAFBorders","bdrAFLeft","bdrAFRight","bdrAFTop","hideAFBorders","updateValue","createBeforeAutoFill","updateCell","isApply","startrowIdx","startCellIdx","endrowIdx","endCellIdx","colLen","cellIdx","startCellIndex","trIdx","mouseUpHandler","mUPTarget","updateAutoFillPosition","lastCell","updateStartCellsIndex","autofill","enableAutoFill","clientRect","allowRowDragAndDrop","enableDrag","isUpdate","postion","clearSelAfterRefresh","onCellFocused","columnPositionChanged","initialEnd","actionBeginFunction","actionCompleteFunction","actionComplete","rowsRemoved","refreshHeader","addEventListener_checkbox","removeEventListener_checkbox","isMacOS","keyDownHandler","keyUpHandler","beforeFragAppend","getCheckAllBox","checkBoxSelectionChanged","initPerisistSelection","checkboxMode","selectedRowIndex","gobj","chkField","ensureCheckboxFieldSelection","getDataModule","proxy_1","refreshPersistSelection","setRowSelection","checkState","editChkBox","onDataBound","checkSelectAllAction","cRenderer","editForm","checkSelectAll","stateStr","triggerChkChangeEvent","checkSelect","rowCellSelectionHandler","moveIntoUncheckCollection","updateSelectedRowIndex","selectedVal","checkedLen","popUpClickHandler","chkSelect","checkboxOnly","showPopup","headerAction","thLen","applyDownUpKey","applyRightLeftKey","shiftDownKey","applyShiftLeftRightKey","applyHomeEndKey","applyCtrlHomeEndKey","ctrlPlusA","applySpaceSelection","applyUpDown","detailIndentCell","dragdropIndentCell","dataReady","onDataBoundFunction","setCheckAllForEmptyGrid","actionCompleteFunc","actionCompleteHandler","resizeEndFn","checkAllBox","isInfinitecroll","isSelectedRowIndexUpdating","Search","searchString","refreshSearch","onSearchComplete","cancelBeginEvent","ShowHide","showBy","getToggleFields","hideBy","getKeyBy","currentViewCols","allowSelection","col1","col2","Scroll","lastScrollTop","previousValues","oneTimeReady","uiupdate","toolbarModule","toolbar","refreshOverflow","mHdrHeight","ensureOverflow","getThreshold","removePadding","rtl","hDiv","footerDiv","getFooterContent","setScrollLeft","headerModule","getMovableHeader","onContentScroll","scrollTarget","isPreventScrollEvent","isFooter","onFreezeContentScroll","onWheelScroll","deltaMode","deltaY","onTouchScroll","pointerType","pageXY","getPointXY","setPageXY","sLeft","sHeight","css","AggregateColumn","getTemplate","setPropertiesSilent","AggregateRow","Clipboard","copyContent","isSelect","pasteHandler","clipBoardTextArea","x_1","y_1","scrollTo","paste","isAvail","dataRows","fTr","mTr","selectionModule","setCopyData","withHeader","getSelection","selectedIndexes","headerTextArray","getCopyData","checkBoxSelection","colIndexes","getColumnHeaderByIndex","setSelectionRange","isCell","isElement","queryCommandSupported","execCommand","removeAllRanges","rowCellIndxes","getSelectedRowCellIndexes","gridObserver","BlazorAction","aria","onDetailRowClick","addDeleteSuccess","editSuccess","setColumnVisibility","setServerOffSet","modelChanged","onGroupClick","currentAction","editArgs","rowData","gridRowId","gridRow","foreignColumnsData","aggRows","aggRow","aggr","aggrds","groupedCols","sign","setClientOffSet","batchChanges","renderModule","getMediaColumns","serverTimeZone","mergePersistGridData","resetPersistData","parseArgs","persistArgs","dataFailure","SortDescriptor","SortSettings","InfiniteScrollSettings","FilterSettings","SelectionSettings","SearchSettings","RowDropSettings","TextWrapSettings","GroupSettings","EditSettings","Grid","media","componentRefresh","rowUid","pageTemplateChange","mediaBindInstance","enableLogger","Grid_1","keyEntity","scrollPosition","currentObject","pagerTemplate","allowExcelExport","allowPdfExport","isDetail","isCommandColumn","allowAdding","allowDeleting","extendRequiredModules","contextMenuItems","showColumnChooser","isForeignKeyEnabled","initProperties","initializeServices","mediaCol","filterOperators","greaterThan","greaterThanOrEqual","lessThan","lessThanOrEqual","notEqual","defaultLocale","EmptyRecord","True","False","InvalidFilterMessage","GroupDropArea","UnGroup","GroupDisable","FilterbarTitle","EmptyDataSourceError","Add","Edit","Cancel","Update","Delete","Pdfexport","Excelexport","Wordexport","Csvexport","Columnchooser","Save","Item","EditOperationAlert","DeleteOperationAlert","SaveButton","OKButton","CancelButton","EditFormTitle","AddFormTitle","BatchSaveConfirm","BatchSaveLostChanges","ConfirmDelete","CancelEdit","ChooseColumns","SearchColumns","Matchs","FilterButton","ClearButton","StartsWith","EndsWith","Contains","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","ChooseDate","EnterValue","Copy","Group","Ungroup","autoFitAll","Export","FirstPage","LastPage","PreviousPage","NextPage","SortAscending","SortDescending","EditRecord","DeleteRecord","FilterMenu","SelectAll","Blanks","FilterTrue","FilterFalse","NoResult","ClearFilter","NumberFilter","TextFilter","DateFilter","DateTimeFilter","MatchCase","Between","CustomFilter","CustomFilterPlaceHolder","CustomFilterDatePlaceHolder","AND","OR","ShowRowsWhere","FilterMenuDialogARIA","ExcelFilterDialogARIA","DialogEditARIA","ColumnChooserDialogARIA","ColumnMenuDialogARIA","CustomFilterDialogARIA","downArrow","upArrow","rightArrow","leftArrow","shiftDown","shiftUp","shiftRight","shiftLeft","home","escape","ctrlHome","ctrlEnd","pageUp","pageDown","ctrlAltPageUp","ctrlAltPageDown","altPageUp","altPageDown","altDownArrow","altUpArrow","ctrlDownArrow","ctrlUpArrow","ctrlPlusP","delete","f2","enter","ctrlEnter","shiftEnter","tab","shiftTab","space","ctrlPlusC","ctrlShiftPlusH","ctrlSpace","ctrlLeftArrow","ctrlRightArrow","searchModule","checkLockColumns","processModel","gridRender","addListener","updateStackedFilter","gcol","getShowHideService","pushMediaColumn","matchMedia","mediaQueryUpdate","mediaColumn","showHider","refreshMediaCol","footerContent","removeMediaListener","removeListener","eventInitializer","hasGridChild","destroyDependentModules","toolTipObj","keyboardModule","focusModule","enableBoxSelection","checkCursor","requireRefresh","requireGridRefresh","freezeRefresh","updateColumnObject","properties_1","rowTemplateFn","detailTemplateFn","extendedPropertyChange","maintainSelection","updateRTL","getToolbar","contextMenuModule","getContextMenu","columnMenuModule","getColumnMenu","updateResizeLines","updateGridLines","columnMenuItems","applyTextWrap","removeTextWrap","isModeChg","pending_1","deepWatch","pKeyField","setRowData","gResult","names","enableHover","fn_1","filterModule","refreshFilter","headerCells","stdHdrCell","updateColumnModel","updateFrozenColumns","updateLockableColumns","frozenCount","movableCount","isRefresh","inview","vLen","stackedHeader","individualColumn","stackedColumn","getLocaleConstants","setGridHeaderContent","setGridContentTable","setGridContent","setGridHeaderTable","footerElement","getFooterContentTable","getPager","gridPager","setGridPager","getFrozenRowByIndex","getFrozenDataRows","getRowInfo","rowsObject","mrows","dRows","setCellValue","fieldIdx","pkName","movableSelectedRow","rowObjects","movableRowObjects","refreshForeignData","getColumnHeaderByField","getColumnHeaderByUid","getStackedColumns","getUidByColumnField","rowDropSettings","targetID","getColumnFieldNames","columnNames","getDetailTemplate","getEditHeaderTemplate","editHeaderTemplateFn","getEditFooterTemplate","editFooterTemplateFn","getSelectedRows","showColumns","hideColumns","getFrozenCount","getVisibleFrozenColumns","getVisibleFrozenColumnsCount","getVisibleFrozenCount","getFilterUIInfo","visibleFrozenColumns","goToPage","pageNo","updateExternalMessage","sortColumn","isMultiSort","sortModule","clearSorting","removeSortColumn","filterByColumn","filterOperator","filterValue","actualFilterValue","actualOperator","clearFiltering","removeFilteredColsByField","isClearFilterBar","deleteRecord","fieldname","startEdit","closeEdit","addRecord","deleteRow","editCell","saveCell","enableToolbarItems","enableItems","clipboardModule","recalcIndentWidth","indentWidth","perPixel","applyWidth","reorderColumns","fromFName","toFName","reorderModule","reorderColumnByIndex","reorderColumnByTargetIndex","fromIndexes","rowDragAndDropModule","refreshDataSource","disableRowDD","disValue","autoFitColumns","resizeModule","createColumnchooser","columnChooserModule","renderColumnChooser","valueFormatterService","gCols","sCols","sLen","parentDetails","parentKeyFieldValue","queryString","initForeignColumn","rendererFactory","createGridPopUpElement","createTooltip","gridLines","getTooltipStatus","htable","ctable","isEllipsisTooltip","prevElement","hoverFrozenRows","myTableDiv","mySubDiv","myTable","myTr","mytd","onKeyPressed","mouseClickHandler","focusOutHandler","dblClickHandler","allowKeyboard","keyActionHandler","tapEvent","dataBoundFunction","isChildGrid","checkEdit","clonedColumn","dataRow","filterClear","ariaOwns","keyPress","editFormValidate","persistedData","dataObj","mergeColumns","storedColumn","storedColumns","localCol","tCol","presskey","stopImmediatePropagation","getRowHeight","refreshColumns","fCnt","getMovableContent","excelExport","excelExportProperties","isMultipleExport","workbook","isBlob","excelExportModule","Map","csvExport","pdfExport","pdfExportProperties","pdfDoc","pdfExportModule","groupColumn","groupModule","groupExpandAll","expandAll","groupCollapseAll","collapseAll","clearGrouping","ungroupColumn","openColumnChooser","detailCollapseAll","detailRowModule","detailExpandAll","isContextMenuOpen","isOpen","ensureModuleInjected","propertyNames","loggerModule","applyBiggerTheme","getPreviousRowData","hideScroll","cTable","fTable","getRowIndexByPrimaryKey","getFilteredRecords","getUserAgent","getRowElementByUID","rowEle","cntRows","rows_2","getHiddenColumns","calculatePageSizeByParentHeight","pagesize","getNoncontentHeight","getSummaryValues","summaryCol","summaryData","updateRowValue","defaulthtmlkeys","delayUpdate","ComponentBase","attrKeys","cachedTimeOut","isAppendCalled","isReact","UNSAFE_componentWillMount","propKeys","htmlattributes","controlAttributes","componentDidMount","refreshChild","canDelayUpdate","immediateRender","renderReactComponent","UNSAFE_componentWillReceiveProps","nextProps","dProps","propkey","isClassName","delValue","addValue","refreshProperties","processComplexTemplate","compTemplate","complexTemplate","PropVal","getDefaultAttributes","onChange","syntheticEvent","nativeEvent","compareObjects","oldProps","newProps","silent","checkInjectedModules","prevModule","curModule_1","getInjectedServices","directivekeys","directiveValue","validateChildren","skipRefresh","prevProperties","dKeys","componentWillUnmount","childCache","childs_1","toArray","ifield","getChildType","childProps","getChildProps","isDirective","subChild","matcher","subChild_1","accessProp","cacheVal","cachedValue","childs_2","isService","classObj","ComplexBase","stringCompiler","templateElement","actTemplate","actData","derivedClass","GridComponent","initRenderCalled","baseClass","ColumnDirective","ColumnsDirective","sortRequired","isAppliedGroup","isAppliedUnGroup","reorderingColumns","animateDropper","draggableType","preventDrop","rearrangeGroup","dragField","dropTarget","dropField","dropIndex","dragIndex","addColToGroupDrop","addLabel","removeColFromGroupDrop","contentRefresh","groupGenerator","dragLabel","columnDrag","columnDragStart","dropArea","columnDrop","refreshSortIcons","onGroupAggregates","blazorActionBegin","updateExpand","updateGroupDropArea","grpRow","expandCollapseRows","applySortFromTarget","unGroupFromTarget","toogleGroupFromHeader","showToggleButton","gHeader","trgt","rowNodes","expandElem","toExpand","updateVirtualRows","rObj","nRows","actualRows","updatecloneRow","expandCollapse","renderGroupDropArea","initDragAndDrop","refreshToggleBtn","groupElem","initializeGHeaderDrop","initializeGHeaderDrag","colName","groupAddSortingQuery","animator","groupedColumn","childDiv","headerCell","showUngroupButton","createSeparator","getGHeaderCell","updateGroupedColumn","updateButtonVisibility","editedData","iterateGroupAggregates","updateSummaryRows","dataUid","updatedData","initData","deletedCols","changeds","mergeData","pKeyVal","cItem","eData","aggregateRows","closestParent","GridWrapper","styled","DocTemplate","documentName","rel","GroupCaptionTemplate","groupItem","docsText","displayText","PlansGrid","gridRef","plans","isExpandCollapseTarget","cleanTitlesAndAriaLabels","allCaptions","currentAriaLabel","addTextToEmptyControlsHeader","expandControlsHeader","srHeader","dataBoundHandler","collapsedElements","loadHandler","currentTd","previousSibling","shouldComponentUpdate","ref","dataBound","groupedRowsLength","React","CurrentPlans","mainBodyText","docs","ProposalWrapper","CollapseHeaderWrapper","CollapseHeader","targetId","data-toggle","data-target","aria-controls","Proposal","proposal","proposalHeaderId","collapseContainerId","aria-labelledby","billLink","titlePlainText","overviewMaps","maps","scrollToAndExpandCollapsableRegion","heading","collapseContainer","parentCollapse","dataset","collapseTarget","ProposedPlans","proposals","proposalGroups","containersQuery","useEffect","proposalContainers","useScrollToCollapsableHeadings","DistrictPlansBody","showCurrentDistrictsTab","currentDistricts","showFinalDistrictsTab","finalDistricts","showLegislativeProposalsTab","legislativeProposals","showPublicProposalsTab","publicProposals","forceUpdateToc","useContext","WrapPageContext","DistrictPlansNavWrapper","nav","tabs","showTab","useState","currentTabIndex","setCurrentTabIndex","currentTabs","locationHashTabIndex","aria-label","handleTabClick","renderCurrentDistrictsRichText","renderRichText","bulkRenderRichText","renderProposalsRichText","proposedDistricts","renderedProposals","proposalTextFields","mapGroups","renderRichTextFields","DistrictPlans","previewData","transformDistrictPlansPageData","pageContext","PageLayout","tocQuery","pageTitle","renderPage","pageProps","genId","require","assignIdsToHeaders","transformCurrentPlansGroup","allowOverrideDocumentLink","groupTitle","groupBody","doc","documentSizeGroup","docSize","sortOrder","documentDisplayText","overrideDocumentLink","acc","transformProposals","currentProposalId","proposalIndex","proposalGroup","proposalGroupRichText","body4","overviewMapsTitle","proposalTitle","proposalMapGroupTitle","proposedMapDocuments","exports","prismic","allReapredistDistrictPlansPages","edges","mainBodyTextCurrent","mainBodyTextLegislative","body1","mainBodyTextPublic","body2","mainBodyTextFinal","body3"],"mappings":"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O,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,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,MAA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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,KACV,IAAU,KACV,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,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,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","file":"component---src-components-district-plans-district-plans-js-15824ee503d7d18d0cc7.js","sourcesContent":["import React from \"react\";\r\nimport \"office-ui-fabric-core/dist/css/fabric.css\";\r\n\r\nconst FabricIcon = props => (\r\n\t\r\n);\r\n\r\nexport default FabricIcon;\r\n","import \"core-js/modules/es.typed-array.sort.js\";\nvar 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 clone = 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 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(' ' + reference + '' + div.innerHTML + '' + '');\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 === 'auto' || result.indexOf('%') !== -1 || result.indexOf('px') !== -1) {\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 } 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 = function () {\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 return getValue('main.' + cName, 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) {\n var ret = {};\n var cur = this.getDefaultNumberingSystem(curObj);\n\n if (!isUndefined(cur.nSystem)) {\n var digits = 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('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 * 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 } from '../util';\nvar abbreviateRegexGlobal = /\\/MMMMM|MMMM|MMM|a|LLL|EEEEE|EEEE|E|K|cccc|ccc|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 = function () {\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 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);\n formatOptions.dateSeperator = base.getDateSeparator(dependable.dateObject);\n\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n } else {\n formatOptions.pattern = resPattern;\n formatOptions.numMapper = 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 formatOptions.weekday = dependable.dateObject[base.days][standalone][base.monthIndex[len]];\n break;\n\n case 'M':\n case 'L':\n formatOptions.month = dependable.dateObject[base.month][standalone][base.monthIndex[len]];\n break;\n\n case 'a':\n formatOptions.designator = getValue('dayPeriods.format.wide', dependable.dateObject);\n break;\n\n case 'G':\n var eText = len <= 3 ? 'eraAbbr' : len === 4 ? 'eraNames' : 'eraNarrow';\n formatOptions.era = 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 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 } 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 = function () {\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 dOptions.numberMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n dOptions.currencySymbol = base.getCurrencySymbol(dependable.numericObject, fOptions.currency || defaultCurrencyCode, option.altSymbol);\n /* tslint:disable no-any */\n\n dOptions.percentSymbol = dOptions.numberMapper.numberSymbols[percentSign];\n dOptions.minusSymbol = 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 symbolPattern = base.getSymbolPattern(fOptions.type, dOptions.numberMapper.numberSystem, dependable.numericObject, fOptions.isAccount);\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) {\n symbolPattern = symbolPattern.replace(/\\u00A4/g, base.defaultCurrency);\n }\n\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\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|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 = function () {\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);\n var numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr));\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);\n var regexString = '';\n var hourOnly;\n\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n } else {\n parseOptions = {\n isIslamic: base.islamicRegex.test(option.calendar),\n pattern: resPattern,\n evalposition: {}\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;\n var numMapper = 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;\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-next-line\n var weekObject = parser.reverseObject(dependable.dateObject[base.days][standalone][base.monthIndex[len]]);\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 // tslint:disable-next-line\n parseOptions[charKey] = parser.reverseObject(dependable.dateObject[month][standalone][base.monthIndex[len]]);\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 '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 parseOptions[charKey] = parser.reverseObject(getValue('dayPeriods.format.wide', dependable.dateObject));\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(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 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 } 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 = function () {\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 } else {\n extend(parseOptions, base.customFormat(option.format, null, null));\n }\n\n numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), true);\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 = 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\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\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 (isNegative) {\n ret *= -1;\n }\n\n return ret;\n }\n };\n\n return NumberParser;\n}();\n\nexport { NumberParser };","import { isNullOrUndefined, getValue, extend } from './util';\n\nvar Observer = function () {\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) : 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) : 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 };\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 } 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 = function () {\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 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 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) {\n return IntlBase.getActualNumberFormat(this.getCulture(), option, cldrData);\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 = 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 } 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 't': 'h:mm a',\n 'T': 'h:m:s a'\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 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 /* 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) {\n var resPattern;\n var iType = type || 'date';\n\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 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) || IntlBase.defaultObject;\n\n if (isNumber) {\n ret.numericObject = getValue('numbers', ret.parserObject);\n } else {\n ret.dateObject = getValue('dates.calendars.' + calendartype, 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 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 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;\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 function getActualNumberFormat(culture, options, cldr) {\n var dependable = getDependables(cldr, culture, '', true);\n var parseOptions = {\n custom: true\n };\n var minFrac;\n var curObj = {};\n var curMatch = (options.format || '').match(IntlBase.currencyFormatRegex);\n\n if (curMatch) {\n var dOptions = {};\n dOptions.numberMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n var curCode = 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 = split.length > 1;\n curObj.nData = getFormatData(split[1] || '-' + split[0], true, curCode);\n curObj.pData = 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') {\n var cPattern = actualPattern;\n actualPattern = curObj.pData.nlead + cPattern + curObj.pData.nend;\n\n if (curObj.hasNegativePattern) {\n actualPattern += ';' + curObj.nData.nlead + cPattern + curObj.nData.nend;\n }\n }\n\n if (parseOptions.type === 'percent') {\n actualPattern += ' %';\n }\n } else {\n actualPattern = options.format.replace(/\\'/g, '\"');\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})(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 = function () {\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 { debounce, extend } from './util';\n/**\n * EventHandler class provides option to add, remove, clear and trigger events to a HTML DOM element\n * @private\n * ```html\n *
\n * \n * ```\n */\n\nvar EventHandler = function () {\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 element.addEventListener(event[i], debounceListener);\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 * Functions related to dom operations.\n */\nimport { EventHandler } from './event-handler';\nimport { isNullOrUndefined } from './util';\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 (!ele.classList.contains(className)) {\n ele.classList.add(className);\n }\n }\n }\n\n return elements;\n}\n/**\n * The function used to add the classes to array of elements\n * @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\n if (ele.className !== '') {\n for (var _b = 0, classList_2 = classList; _b < classList_2.length; _b++) {\n var className = classList_2[_b];\n ele.classList.remove(className);\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 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 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 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 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 var parentNode = element.parentNode;\n return parentNode.removeChild(element);\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 var parentNode = element.parentNode;\n EventHandler.clearEvents(element);\n parentNode.removeChild(element);\n}\n/**\n * The function helps to set multiple attributes to an element\n * @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 ele.setAttribute(key, attributes[key]);\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\nexport function select(selector, context) {\n if (context === void 0) {\n context = document;\n }\n\n return context.querySelector(selector);\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) {\n if (context === void 0) {\n context = document;\n }\n\n var nodeList = context.querySelectorAll(selector);\n return nodeList;\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\nexport function closest(element, selector) {\n var el = element;\n\n if (typeof el.closest === 'function') {\n return el.closest(selector);\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\nexport function getAttributeOrDefault(element, property, value) {\n var attrVal = element.getAttribute(property);\n\n if (isNullOrUndefined(attrVal)) {\n element.setAttribute(property, value.toString());\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 Object.keys(attrs).forEach(function (key) {\n // tslint:disable-next-line:no-any\n element.style[key] = attrs[key];\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 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}","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 = function () {\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\n if (this.allowServerDataBinding) {\n var ejsInterop = 'ejsInterop';\n window[ejsInterop].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 { 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 = function () {\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 ? 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;\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 { 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)\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 = function (_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 *
\n * \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 = function () {\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 } from './dom';\nvar componentCount = 0;\nvar lastPageID;\nvar lastHistoryLen = 0;\n/**\n * Base class for all Essential JavaScript components\n */\n\nvar Component = function (_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 /**\n * This is a instance method to create an element.\n * @private\n */\n\n _this.createElement = createElement;\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 /**\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 = document.querySelector(selector);\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 this.trigger('created');\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 ejsInterop = 'ejsInterop'; // tslint:disable-next-line:no-any\n\n window[ejsInterop].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 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 = window.localStorage.getItem(this.getModuleName() + this.element.id);\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 window.localStorage.setItem(this.getModuleName() + this.element.id, this.getPersistData());\n }\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 = function () {\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 = function (_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 *
Draggable
\n * \n * ```\n */\n\nvar Draggable = function (_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)) {\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 document.body.classList.add('e-prevent-select');\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\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();\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\n if (this.dragArea) {\n var styles = getComputedStyle(helperElement);\n\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 draEleTop = top - iTop < 0 ? this.dragLimit.top : top - iTop;\n draEleLeft = left - iLeft < 0 ? this.dragElePosition.left : left - iLeft;\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\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([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 *
Droppable
\n * \n * ```\n */\n\nvar Droppable = function (_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 *
;\n * \n * ```\n */\n\nvar KeyboardEvents = function (_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 = function () {\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 = function (_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 = function (_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 = evt.changedTouches ? evt.changedTouches[0] : 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 = evt.changedTouches ? evt.changedTouches[0] : evt;\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 var point = evt;\n\n if (evt.changedTouches) {\n point = evt.changedTouches[0];\n }\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;\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 = evt.changedTouches ? evt.changedTouches[0] : 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 = evt.changedTouches ? evt.changedTouches[0] : 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 __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 * 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) {\n var argName = 'data';\n var evalExpResult = evalExp(template, argName, helper);\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) {\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);\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);\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) + '.length; i' + varCOunt + '++';\n }) + '{ \\n ' + rlStr_1[0] + '= ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys) + '[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);\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)) + '+\"';\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) + '+\"';\n }\n }\n\n return cnt;\n });\n}\n\nfunction addNameSpace(str, addNS, nameSpace, ignoreList) {\n return addNS && !NOT_NUMBER.test(str) && ignoreList.indexOf(str.split('.')[0]) === -1 ? 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) {\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);\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.]+\\ 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 };","import { DataUtil } from './util';\n/**\n * Query class is used to build query which is used by the DataManager to communicate with datasource.\n */\n\nvar Query = function () {\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 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 *
\n   * let dataManager: DataManager = new DataManager([{ ID: '10' }, { ID: '2' }, { ID: '1' }, { ID: '20' }]);\n   * let query: Query = new Query();\n   * query.sortBy('ID', (x: string, y: string): number => { return parseInt(x, 10) - parseInt(y, 10) });\n   * let promise: Promise< Object > = query.execute(dataManager);\n   * promise.then((e: { result: Object }) => { });\n   * 
\n */\n\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 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 var order = '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 = function () {\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 \"core-js/modules/es.array.sort.js\";\n\nvar __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';\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 = function () {\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 = function (_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 agg = {};\n\n for (var i = 0; i < query.queries.length; i++) {\n key = query.queries[i];\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 (query.isCountRequired) {\n result = {\n result: result,\n count: count,\n aggregates: agg\n };\n }\n\n return result;\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 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 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 = value[keyField];\n }\n\n for (i = 0; i < ds.length; i++) {\n if (ds[i][keyField] === 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 = function (_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\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 request.filters.push(DataUtil.callAdaptorFunction(this, 'onEachWhere', queries.filters[i].e.toJson(), query));\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 }); // cleanup\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 this.getAggregateResult(pvt, data, args, groupDs, query);\n return DataUtil.isNull(args.count) ? args.result : {\n result: args.result,\n count: args.count,\n aggregates: args.aggregates\n };\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: value[keyField],\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 if (pvt && pvt.groups && pvt.groups.length) {\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 = function (_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 = function (_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 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 = function (_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 = function (_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 = function (_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\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 * 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 = function (_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 } from './adaptors';\n/**\n * DataManager is used to manage and manipulate relational data.\n */\n\nvar DataManager = function () {\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 ? 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])) {\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)) {\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 };\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 (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 var ajax = new Ajax(req);\n\n ajax.beforeSend = function () {\n _this.beforeSend(ajax.httpRequest, ajax);\n };\n\n req = ajax.send();\n req.catch(function (e) {\n return true;\n }); // to handle failure remote requests. \n\n this.requests.push(ajax);\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 {\n var deff_1 = new Deferred();\n var ajax_1 = new Ajax(req);\n\n ajax_1.beforeSend = function () {\n _this.beforeSend(ajax_1.httpRequest, ajax_1);\n };\n\n ajax_1.onSuccess = function (data, request) {\n deff_1.resolve(_this.adaptor.processResponse(data, _this, null, request.httpRequest, request, changes, args));\n };\n\n ajax_1.onFailure = function (e) {\n deff_1.reject([{\n error: e\n }]);\n };\n\n ajax_1.send().catch(function (e) {\n return true;\n }); // to handle the failure requests. \n\n return deff_1.promise;\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);\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 = value[keyField];\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 return this.doAjaxRequest(res);\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 return this.doAjaxRequest(res);\n }\n };\n\n DataManager.prototype.doAjaxRequest = function (res) {\n var _this = this;\n\n var defer = new Deferred();\n res = extend({}, {\n type: 'POST',\n contentType: 'application/json; charset=utf-8',\n processData: false\n }, res);\n var ajax = new Ajax(res);\n\n ajax.beforeSend = function () {\n _this.beforeSend(ajax.httpRequest, ajax);\n };\n\n ajax.onSuccess = function (record, request) {\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 defer.resolve(record);\n };\n\n ajax.onFailure = function (e) {\n defer.reject([{\n error: e\n }]);\n };\n\n ajax.send().catch(function (e) {\n return true;\n }); // to handle the failure requests.\n\n return defer.promise;\n };\n\n return DataManager;\n}();\n\nexport { DataManager };\n/**\n * Deferred is used to handle asynchronous operation.\n */\n\nvar Deferred = function () {\n function Deferred() {\n var _this = this;\n /**\n * Promise is an object that represents a value that may not be available yet, but will be resolved at some point in the future.\n */\n\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 \"core-js/modules/es.array.sort.js\";\nimport \"core-js/modules/es.typed-array.sort.js\";\nimport { 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 = function () {\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) {\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);\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);\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 grouped[val].items.push(jsonData[i]);\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 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 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 { isNullOrUndefined, classList, createElement } from '@syncfusion/ej2-base';\nvar globalTimeOut = {};\nvar spinTemplate = null;\nvar spinCSSClass = null;\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';\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 * @param args\n * @private\n */\n\nexport function blazorSpinner(action, options, target, type) {\n switch (action) {\n case 'Create':\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 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 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 * @param args\n * @private\n */\n\nexport function createSpinner(args, internalCreateElement) {\n var radius;\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\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\nfunction createLabel(container, label, makeElement) {\n var labelEle = makeElement('div', {});\n labelEle.classList.add(CLS_SPINLABEL);\n labelEle.textContent = label;\n container.appendChild(labelEle);\n return labelEle;\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\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\nfunction startMatAnimate(container, uniqueID, radius) {\n var globalObject = {};\n var timeOutVar = 0;\n globalTimeOut[uniqueID].timeOut = 0;\n globalObject[uniqueID] = globalVariables(uniqueID, radius, 0, 0);\n var spinnerInfo = {\n uniqueID: uniqueID,\n container: container,\n globalInfo: globalObject,\n timeOutVar: timeOutVar\n };\n animateMaterial(spinnerInfo);\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\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\nfunction getTheme(container) {\n var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n return theme.replace(/['\"]+/g, '');\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\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\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\nfunction boot_calculate_attributes(innerContainer, radius) {\n var svg = innerContainer.querySelector('svg.e-spin-bootstrap');\n svg.style.width = svg.style.height = radius + 'px';\n var x = 0;\n var y = 0;\n var rad = 24;\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\nfunction generateSeries(begin, stop) {\n var series = [];\n var start = begin;\n var end = stop;\n var increment = false;\n var count = 1;\n formSeries(start);\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\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 function rotation(circle, start, end, series, id) {\n var count = 0;\n boot_animate(start);\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 }\n\n globalTimeOut[id].timeOut = setTimeout(boot_animate.bind(null, series[count]), 18);\n }\n }\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\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\nfunction globalVariables(id, radius, count, previousId) {\n return {\n radius: radius,\n count: count,\n previousId: previousId\n };\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\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\nfunction create_material_element(innerContainer, uniqueID, makeElement, cls) {\n var svgMaterial = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svgMaterial.setAttribute('class', cls);\n svgMaterial.setAttribute('id', uniqueID);\n var matCirclePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n matCirclePath.setAttribute('class', CLS_SPINCIRCLE);\n innerContainer.insertBefore(svgMaterial, innerContainer.firstChild);\n svgMaterial.appendChild(matCirclePath);\n}\n\nfunction create_spinner_container(target, makeElement) {\n var spinnerContainer = makeElement('div', {});\n spinnerContainer.classList.add(CLS_SPINWRAP);\n var spinnerInnerContainer = makeElement('div', {});\n spinnerInnerContainer.classList.add(CLS_SPININWRAP);\n target.appendChild(spinnerContainer);\n spinnerContainer.appendChild(spinnerInnerContainer);\n return {\n wrap: spinnerContainer,\n inner_wrap: spinnerInnerContainer\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\nfunction createCircle(start, end, easing, duration, count, max, spinnerInfo) {\n var id = ++spinnerInfo.globalInfo[spinnerInfo.uniqueID].previousId;\n var startTime = new Date().getTime();\n var change = end - start;\n var diameter = getSize(spinnerInfo.globalInfo[spinnerInfo.uniqueID].radius * 2 + '');\n var strokeSize = getStrokeSize(diameter);\n var rotate = -90 * (spinnerInfo.globalInfo[spinnerInfo.uniqueID].count || 0);\n mat_animation(spinnerInfo);\n\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 globalTimeOut[spinnerInfo.uniqueID].timeOut = setTimeout(mat_animation.bind(null, spinnerInfo), 1);\n } else {\n animateMaterial(spinnerInfo);\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\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\nfunction getSize(value) {\n var parsed = parseFloat(value);\n return parsed;\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\nfunction getStrokeSize(diameter) {\n return 10 / 100 * diameter;\n}\n\nfunction getDashOffset(diameter, strokeSize, value, max) {\n return (diameter - strokeSize) * Math.PI * (3 * max / 100 - value / 100);\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\nfunction fb_calculate_attributes(radius, innerConainer, trgClass) {\n var centerX = radius;\n var centerY = radius;\n var diameter = radius * 2;\n var startArc = 315;\n var 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\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\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\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}\n/**\n * Function to show the Spinner.\n * @param container - Specify the target of the Spinner.\n * @private\n */\n\n\nexport function showSpinner(container) {\n showHideSpinner(container, false);\n container = null;\n}\n\nfunction showHideSpinner(container, isHide) {\n var spinnerWrap = container.classList.contains(CLS_SPINWRAP) ? container : container.querySelector('.' + CLS_SPINWRAP);\n var inner = spinnerWrap.querySelector('.' + CLS_SPININWRAP);\n var spinCheck;\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 isHide ? clearTimeout(globalTimeOut[id].timeOut) : startMatAnimate(inner, id, globalTimeOut[id].radius);\n break;\n\n case 'Bootstrap':\n isHide ? clearTimeout(globalTimeOut[id].timeOut) : animateBootstrap(inner);\n break;\n }\n }\n\n isHide ? classList(spinnerWrap, [CLS_HIDESPIN], [CLS_SHOWSPIN]) : classList(spinnerWrap, [CLS_SHOWSPIN], [CLS_HIDESPIN]);\n container = null;\n}\n/**\n * Function to hide the Spinner.\n * @param container - Specify the target of the Spinner.\n * @private\n */\n\n\nexport function hideSpinner(container) {\n showHideSpinner(container, true);\n container = null;\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 * @param args\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\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\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}","/**\n * Collision module.\n */\nimport { calculatePosition } from './position';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nvar parentDocument;\nvar targetContainer;\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}\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;\n var topData = '';\n var 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}\nexport function flip(element, target, offsetX, offsetY, positionX, positionY, viewPortElement, axis, 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 }\n\n var tEdge = {\n TL: null,\n TR: null,\n BL: null,\n BR: null\n };\n var eEdge = {\n TL: null,\n TR: null,\n BL: null,\n BR: null\n };\n var elementRect = element.getBoundingClientRect();\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\nfunction setPopup(element, pos, elementRect) {\n var left = 0;\n var 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\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\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\nfunction leftCollideCheck(left, right) {\n var leftSide = false;\n var 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\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\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()) {\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\nfunction topCollideCheck(top, bottom) {\n var topSide = false;\n var 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\nfunction getTargetContainerWidth() {\n return targetContainer.getBoundingClientRect().width;\n}\n\nfunction getTargetContainerHeight() {\n return targetContainer.getBoundingClientRect().height;\n}\n\nfunction getTargetContainerLeft() {\n return targetContainer.getBoundingClientRect().left;\n}\n\nfunction getTargetContainerTop() {\n return targetContainer.getBoundingClientRect().top;\n}\n\nfunction ContainerTop() {\n if (targetContainer) {\n return getTargetContainerTop();\n }\n\n return 0;\n}\n\nfunction ContainerLeft() {\n if (targetContainer) {\n return getTargetContainerLeft();\n }\n\n return 0;\n}\n\nfunction ContainerRight() {\n if (targetContainer) {\n return getBodyScrollLeft() + getTargetContainerLeft() + getTargetContainerWidth();\n }\n\n return getBodyScrollLeft() + getViewPortWidth();\n}\n\nfunction ContainerBottom() {\n if (targetContainer) {\n return getBodyScrollTop() + getTargetContainerTop() + getTargetContainerHeight();\n }\n\n return getBodyScrollTop() + getViewPortHeight();\n}\n\nfunction getBodyScrollTop() {\n // if(targetContainer)\n // return targetContainer.scrollTop;\n return parentDocument.documentElement.scrollTop || parentDocument.body.scrollTop;\n}\n\nfunction getBodyScrollLeft() {\n // if(targetContainer)\n // return targetContainer.scrollLeft;\n return parentDocument.documentElement.scrollLeft || parentDocument.body.scrollLeft;\n}\n\nfunction getViewPortHeight() {\n return window.innerHeight;\n}\n\nfunction getViewPortWidth() {\n var windowWidth = window.innerWidth;\n var offsetWidth = isNullOrUndefined(document.documentElement) ? 0 : document.documentElement.offsetWidth;\n return windowWidth - (windowWidth - offsetWidth);\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 { 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 = function (_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 *
\n *
Popup Content
\n * ```\n * ```typescript\n * \n * ```\n */\n\nvar Popup = function (_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 * @private\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 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 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 * @private\n */\n\n\n Popup.prototype.getModuleName = function () {\n return 'popup';\n };\n /**\n * gets the persisted state properties of the Component.\n */\n\n\n Popup.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To destroy the control.\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 * @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 (!(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\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 * @private\n */\n\n\n Popup.prototype.preRender = function () {//There is no event handler\n };\n\n Popup.prototype.setEnableRtl = function () {\n this.reposition();\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 };\n /**\n * Based on the `relative` element and `offset` values, `Popup` element position will refreshed.\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 display = this.element.style.display;\n var parentDisplay = void 0;\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 * @param { AnimationModel | Function } collisionOrAnimationOptions? - To pass animation options or collision function.\n * @param { Function } collision? - To pass the collision function.\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 * @param { AnimationModel } animationOptions? - To give the animation options.\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 * @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' && this.element.offsetParent && this.element.offsetParent.tagName === 'BODY') {\n this.element.style.position = 'fixed';\n this.fixedParent = true;\n }\n\n parent = parent.parentElement;\n\n if (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 * @param { HTMLElement } element - Specify the element to get the scrollable parents of it.\n * @private\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 * @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 } //Body direct children element traversal\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);\n var currentZindexValue = Math.max.apply(Math, finalValue) + 1; // Checking the max-zindex value\n\n return currentZindexValue > 2147483647 ? 2147483647 : currentZindexValue;\n}\n/**\n * Gets the maximum z-index of the page.\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 }\n\n var currentZindexValue = Math.max.apply(Math, maxZindex) + 1;\n return currentZindexValue > 2147483647 ? 2147483647 : currentZindexValue;\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 = function (_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 *
Show Tooltip
\n * ```\n * ```typescript\n * \n * ```\n */\n\nvar Tooltip = function (_super) {\n __extends(Tooltip, _super);\n /**\n * Constructor for creating the Tooltip Component\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 (!(isBlazor() && this.isServerRendered)) {\n addClass([this.element], ROOT);\n }\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 (!(isBlazor() && this.isServerRendered)) {\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\n if (isBlazor() && this.isServerRendered) {\n this.popupObj = new Popup(this.tooltipEle, {\n position: {\n X: elePos.left,\n Y: elePos.top\n },\n open: this.openPopupHandler.bind(this),\n close: this.closePopupHandler.bind(this),\n enableRtl: this.enableRtl\n });\n } else {\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\n Tooltip.prototype.getTooltipPosition = function (target) {\n this.tooltipEle.style.display = 'none';\n var pos = calculatePosition(target, this.tooltipPositionX, this.tooltipPositionY);\n this.tooltipEle.style.display = '';\n var offsetPos = this.calculateTooltipOffset(this.position);\n var elePos = this.collisionFlipFit(target, pos.left + offsetPos.left, pos.top + offsetPos.top);\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.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 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\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 || !(isBlazor() && this.isServerRendered)) {\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('
Blazor') < 0) {\n if (this.enableHtmlSanitizer) {\n this.setProperties({\n content: SanitizeHtmlHelper.sanitize(this.content)\n }, true);\n }\n\n tooltipContent.innerHTML = this.content;\n } else {\n var templateFunction = compile(this.content);\n append(templateFunction({}, null, null, this.element.id + 'content'), tooltipContent);\n\n if (typeof this.content === 'string' && this.content.indexOf('
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 }\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) {\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 = e ? {\n type: e.type,\n cancel: false,\n target: target,\n event: e,\n element: this.tooltipEle\n } : {\n type: null,\n cancel: false,\n target: target,\n event: null,\n element: this.tooltipEle\n };\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 (isBlazor() && this.isServerRendered) {\n this.contentTargetValue = target;\n this.contentEvent = e;\n this.contentAnimation = showAnimation;\n var args = {\n 'enableTooltip': 'true'\n }; // tslint:disable\n\n this.interopAdaptor.invokeMethodAsync('OnTooltipServerCall', args); // tslint: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 (isBlazor() && this.isServerRendered) {\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 ;\n\n Tooltip.prototype.contentUpdated = function (args) {\n if (isNullOrUndefined(this.tooltipEle)) {\n if (isBlazor() && this.isServerRendered) {\n this.ctrlId = this.element.id;\n this.tooltipEle = document.querySelector('#' + this.ctrlId + '_content');\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\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 (!(isBlazor() && this.isServerRendered)) {\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 = e ? {\n type: e.type,\n cancel: false,\n target: target,\n event: e,\n element: ctrlObj.tooltipEle\n } : {\n type: null,\n cancel: false,\n target: target,\n event: null,\n element: ctrlObj.tooltipEle\n };\n\n if (ctrlObj.needTemplateReposition() && !ctrlObj.mouseTrail) {\n ctrlObj.tooltipEle.style.display = 'none';\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 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 var show = function show() {\n if (_this.popupObj) {\n _this.popupObj.show(openAnimation_1, target);\n }\n };\n\n this.showTimer = setTimeout(show, this.openDelay);\n } else {\n this.popupObj.show(openAnimation_1, target);\n }\n }\n\n if (e) {\n this.wireMouseEvents(e, target);\n }\n };\n\n Tooltip.prototype.needTemplateReposition = function () {\n // tslint:disable-next-line:no-any\n var tooltip = this;\n return !isNullOrUndefined(tooltip.viewContainerRef) && typeof tooltip.viewContainerRef !== 'string' || isBlazor() && this.isServerRendered && 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.target ? this.element : null, 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.target ? this.element : null, {\n X: true,\n Y: false\n }, eleOffset).left;\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 eleOffset.left = left;\n return eleOffset;\n };\n\n Tooltip.prototype.hideTooltip = 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 this.tooltipEventArgs = {\n type: e.type,\n cancel: false,\n target: target,\n event: e,\n element: this.tooltipEle\n };\n } else {\n target = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n this.tooltipEventArgs = {\n type: null,\n cancel: false,\n target: target,\n event: null,\n element: this.tooltipEle\n };\n }\n\n if (isNullOrUndefined(target)) {\n return;\n }\n\n this.trigger('beforeClose', this.tooltipEventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.restoreElement(target);\n\n _this.isHidden = true;\n var closeAnimation_1 = {\n name: hideAnimation.effect,\n duration: hideAnimation.duration,\n delay: hideAnimation.delay,\n timingFunction: 'easeIn'\n };\n\n if (hideAnimation.effect === 'None') {\n closeAnimation_1 = undefined;\n }\n\n if (_this.closeDelay > 0) {\n var hide = function hide() {\n if (_this.popupObj) {\n _this.popupObj.hide(closeAnimation_1);\n }\n };\n\n _this.hideTimer = setTimeout(hide, _this.closeDelay);\n } else {\n _this.popupObj.hide(closeAnimation_1);\n }\n } else {\n _this.isHidden = false;\n }\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 (isBlazor() && this.isServerRendered && this.tooltipEle) {\n this.tooltipEle.style.display = 'none';\n this.tooltipEle = null;\n var args = {\n 'enableTooltip': 'false'\n }; // tslint:disable\n\n this.interopAdaptor.invokeMethodAsync('OnTooltipServerCall', args); // tslint: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.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 this.unwireMouseEvents(e.target);\n } else {\n this.hideTooltip(this.animation.close, e);\n }\n } else {\n this.hideTooltip(this.animation.close, e);\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 };\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) {\n this.close();\n }\n };\n\n Tooltip.prototype.scrollHandler = function (e) {\n if (this.tooltipEle) {\n this.close();\n }\n };\n /**\n * Core method that initializes the control rendering.\n * @private\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 * @private\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 * @hidden\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 }\n }\n\n EventHandler.add(document, 'touchend', this.touchEnd, this);\n EventHandler.add(document, 'scroll', 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 EventHandler.add(target, 'mouseleave', this.onMouseOut, this);\n }\n }\n\n if (this.mouseTrail) {\n EventHandler.add(target, 'mousemove touchstart mouseenter', this.onMouseMove, this);\n }\n }\n };\n /**\n * Unbinding events from the element on widget destroy.\n * @hidden\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 }\n }\n\n EventHandler.remove(document, 'touchend', this.touchEnd);\n EventHandler.remove(document, 'scroll', 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 EventHandler.remove(target, 'mouseleave', this.onMouseOut);\n }\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 * @private\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 * @private\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 * @private\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 (isBlazor() && this.isServerRendered) {\n this.isBlazorTooltip = true;\n }\n\n this.renderContent();\n } else if (isBlazor() && this.isServerRendered) {\n var args = {\n 'content': newProp.content\n }; // tslint:disable\n\n this.interopAdaptor.invokeMethodAsync('OnTooltipServerCall', args); // tslint: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 * @param element Target element where the Tooltip is to be displayed.\n * @param animation Sets the specific animation, while showing the Tooltip on the screen.\n * @return {void}\n */\n\n\n Tooltip.prototype.open = function (element, animation) {\n if (animation === void 0) {\n animation = this.animation.open;\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 * @param animation Sets the specific animation when hiding Tooltip from the screen.\n * @return {void}\n */\n\n\n Tooltip.prototype.close = function (animation) {\n if (animation === void 0) {\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 * @param target Target element where the Tooltip content or position needs to be refreshed.\n * @return {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 * @return {void}\n * @memberof Tooltip\n */\n\n\n Tooltip.prototype.destroy = function () {\n if (!isBlazor()) {\n _super.prototype.destroy.call(this);\n\n if (this.popupObj) {\n this.popupObj.destroy();\n }\n\n if (this.tooltipEle) {\n remove(this.tooltipEle);\n }\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('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 };","import { isNullOrUndefined, isBlazor } 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 = function () {\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 if (isBlazor()) {\n var isServerRendered = 'isServerRendered';\n format[isServerRendered] = true;\n }\n\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 if (isBlazor()) {\n var isServerRendered = 'isServerRendered';\n format[isServerRendered] = true;\n }\n\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 };","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 = function () {\n function Column(options) {\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\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 = this.type ? this.type.toLowerCase() : this.type;\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(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'];\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.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]];\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 = function () {\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 };","/** @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 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 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/**\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 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 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 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 initialCollapse = 'initial-collapse';","import { print as printWindow, createElement, detach, classList } 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';\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 = function () {\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 document.body.appendChild(element);\n var printGrid = new Grid(getPrintGridModel(gObj, gObj.hierarchyPrintMode));\n /* tslint:disable:no-empty */\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.appendTo(element);\n printGrid.registeredTemplate = this.parent.registeredTemplate;\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('.e-content');\n var headerDiv = gObj.element.querySelector('.e-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.querySelectorAll('.e-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 = gObj.element.querySelectorAll('.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 = element.querySelectorAll(id + \"captioncell.e-groupcaption\");\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 = element.querySelectorAll(\"colgroup\" + id + \"colGroup\");\n var contentColGroups = element.querySelector('.e-content').querySelectorAll('colgroup');\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].childNodes[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 { ChildProperty, compile as baseTemplateComplier, setValue, Internationalization } 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 } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { Column } from '../models/column';\nimport { calculateRelativeBasedPosition, calculatePosition } from '@syncfusion/ej2-popups';\nimport { Print } from '../actions/print'; //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}\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])) {\n if (grid.groupSettings.columns.length !== 1 && val[agrCnt]) {\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 (val[agrCnt] && 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) {\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 });\n } else if (!(columns[c] instanceof Column)) {\n if (!columns[c].columns) {\n column = new Column(columns[c]);\n } else {\n columns[c].columns = prepareColumns(columns[c].columns);\n column = new Column(columns[c]);\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: 'e-table',\n styles: 'visibility: hidden'\n });\n table.innerHTML = 'A';\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\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, 'e-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 = inst.element.querySelector('#' + inst.element.id + 'EditConfirm');\n return inst.editSettings.mode === 'Batch' && inst.element.querySelectorAll('.e-updatedtd').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\n if (!grid.enableRtl) {\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 } else {\n newpos = calculatePosition(target, 'left', 'bottom');\n dialogObj.element.style.top = newpos.top + target.getBoundingClientRect().height - 35 + 'px';\n dialogObj.element.style.display = elementVisible;\n var leftPos = newpos.left - dlgWidth + target.clientWidth;\n\n if (leftPos < 1) {\n dialogObj.element.style.left = dlgWidth + leftPos + -16 + 'px';\n } else {\n dialogObj.element.style.left = leftPos - 16 + 'px';\n }\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 span.classList.contains('e-check') ? classList(span, ['e-uncheck'], ['e-check']) : classList(span, ['e-check'], ['e-uncheck']);\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 (filterObject.value === null) {\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) {\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 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(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 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 = mTD.closest('.e-row').getBoundingClientRect().height;\n var fHeight = fTD.closest('.e-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 * 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 = {}));","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 * @private\n */\n\nexport function wrapperInitialize(createElement, tag, type, element, WRAPPER, role) {\n var input = element;\n\n if (element.tagName === tag) {\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}\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 * @private\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}\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 * @private\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 innerHTML: options.label\n });\n wrapper.appendChild(labelSpan);\n }\n\n return wrapper;\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 * @private\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\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 * \n * ```\n * ```typescript\n * \n * ```\n */\n\nvar Button = function (_super) {\n __extends(Button, _super);\n /**\n * Constructor for creating the widget\n * @param {ButtonModel} options?\n * @param {string|HTMLButtonElement} 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 * @returns void\n * @private\n */\n\n\n Button.prototype.render = function () {\n if (isBlazor() && this.isServerRendered) {\n if (!this.disabled) {\n this.wireEvents();\n }\n\n buttonObserver.notify('component-rendered', {\n id: this.element.id,\n instance: this\n });\n } else {\n this.initialize();\n }\n\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 * @returns void\n */\n\n\n Button.prototype.destroy = function () {\n if (!(isBlazor() && this.isServerRendered)) {\n var span = void 0;\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 span = this.element.querySelector('span.e-btn-icon');\n\n if (span) {\n detach(span);\n }\n }\n\n this.unWireEvents();\n\n if (isRippleEnabled) {\n this.removeRippleEffect();\n }\n };\n /**\n * Get component name.\n * @returns string\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 * @returns string\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 * @private\n */\n\n\n Button.Inject = function () {// Inject code snippets\n };\n /**\n * Called internally if any of the property value changed.\n * @param {ButtonModel} newProp\n * @param {ButtonModel} oldProp\n * @returns void\n * @private\n */\n\n\n Button.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 '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 var span = this.element.querySelector('span.e-btn-icon');\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 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 var node = getTextNode(this.element);\n\n if (!node) {\n this.element.classList.remove(cssClassName.ICONBTN);\n }\n\n if (!isBlazor()) {\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 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 * @public\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 * @public\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 };","/**\n * Resize library\n */\nimport { isNullOrUndefined, createElement, EventHandler, detach, Browser } from '@syncfusion/ej2-base';\nvar elementClass = ['north-west', 'north', 'north-east', 'west', 'east', 'south-west', 'south', 'south-east'];\nvar targetElement;\nvar selectedHandler;\nvar originalWidth = 0;\nvar originalHeight = 0;\nvar originalX = 0;\nvar originalY = 0;\nvar originalMouseX = 0;\nvar originalMouseY = 0;\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 minHeight;\nvar maxHeight;\nvar minWidth;\nvar maxWidth;\nvar containerElement;\nvar resizeStart = null;\nvar resize = null;\nvar resizeEnd = null;\nvar resizeWestWidth;\nvar setLeft = true;\nvar previousWidth = 0;\nvar setWidth = true;\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 var resizeHandler = createElement('div', {\n className: 'e-icons ' + RESIZE_HANDLER + ' ' + 'e-' + directions[i]\n });\n targetElement.appendChild(resizeHandler);\n }\n\n minHeight = args.minHeight;\n minWidth = args.minWidth;\n maxWidth = args.maxWidth;\n maxHeight = args.maxHeight;\n wireEvents();\n}\n\nfunction getDOMElement(element) {\n var domElement;\n\n if (!isNullOrUndefined(element)) {\n if (typeof element === 'string') {\n domElement = document.querySelector(element);\n } else {\n domElement = element;\n }\n }\n\n return domElement;\n}\n\nfunction wireEvents() {\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, this);\n var eventName = Browser.info.name === 'msie' ? 'pointerdown' : 'touchstart';\n EventHandler.add(selectedHandler, eventName, onTouchStart, this);\n }\n}\n/* istanbul ignore next */\n\n\nfunction getEventType(e) {\n return e.indexOf('mouse') > -1 ? 'mouse' : 'touch';\n}\n/* istanbul ignore next */\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 (!isNullOrUndefined(resizeStart)) {\n if (resizeStart(e) === true) {\n return;\n }\n }\n\n var target = isNullOrUndefined(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\nfunction onMouseUp(e) {\n var touchMoveEvent = Browser.info.name === 'msie' ? 'pointermove' : 'touchmove';\n var touchEndEvent = Browser.info.name === 'msie' ? 'pointerup' : 'touchend';\n var target = isNullOrUndefined(containerElement) ? document : containerElement;\n EventHandler.remove(target, 'mousemove', onMouseMove);\n EventHandler.remove(target, touchMoveEvent, onMouseMove);\n var eventName = Browser.info.name === 'msie' ? 'pointerdown' : 'touchstart';\n EventHandler.remove(target, eventName, onMouseMove);\n\n if (!isNullOrUndefined(document.body.querySelector('.' + FOCUSED_HANDLER))) {\n document.body.querySelector('.' + FOCUSED_HANDLER).classList.remove(FOCUSED_HANDLER);\n }\n\n if (!isNullOrUndefined(resizeEnd)) {\n resizeEnd(e);\n }\n\n EventHandler.remove(document, 'mouseup', onMouseUp);\n EventHandler.remove(document, touchEndEvent, onMouseUp);\n}\n/* istanbul ignore next */\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\nfunction onTouchStart(e) {\n targetElement = e.target.parentElement;\n calculateValues();\n originalMouseX = e.touches[0].pageX;\n originalMouseY = e.touches[0].pageY;\n\n if (!isNullOrUndefined(resizeStart)) {\n if (resizeStart(e) === 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 = isNullOrUndefined(containerElement) ? document : containerElement;\n EventHandler.add(target, touchMoveEvent, onMouseMove, this);\n EventHandler.add(document, touchEndEvent, onMouseUp);\n}\n/* istanbul ignore next */\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 (!isNullOrUndefined(document.body.querySelector('.' + FOCUSED_HANDLER))) {\n selectedHandler = document.body.querySelector('.' + FOCUSED_HANDLER);\n }\n\n if (!isNullOrUndefined(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 (!isNullOrUndefined(resize)) {\n resize(e);\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\nfunction getClientRectValues(element) {\n return element.getBoundingClientRect();\n}\n/* istanbul ignore next */\n// tslint:disable-next-line\n\n\nfunction resizeSouth(e) {\n var documentHeight = document.documentElement.clientHeight;\n var calculateValue = false;\n var containerRectValues;\n var currentpageY = getEventType(e.type) === 'mouse' ? e.pageY : e.touches[0].pageY;\n var targetRectValues = getClientRectValues(targetElement);\n\n if (!isNullOrUndefined(containerElement)) {\n containerRectValues = getClientRectValues(containerElement);\n }\n\n if (!isNullOrUndefined(containerElement)) {\n calculateValue = true;\n } else if (isNullOrUndefined(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 (!isNullOrUndefined(containerElement)) {\n containerTop = containerRectValues.top;\n }\n\n var borderValue = isNullOrUndefined(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 = isNullOrUndefined(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// tslint: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 (!isNullOrUndefined(containerElement)) {\n boundaryRectValues = getClientRectValues(containerElement);\n }\n\n if (!isNullOrUndefined(containerElement) && targetRectValues.top - boundaryRectValues.top > 0) {\n calculateValue = true;\n } else if (isNullOrUndefined(containerElement) && pageY > 0) {\n calculateValue = true;\n }\n\n var currentHeight = originalHeight - (pageY - originalMouseY);\n\n if (getClientRectValues(targetElement).bottom + currentHeight > maxHeight) {\n calculateValue = false;\n targetElement.style.height = maxHeight - getClientRectValues(targetElement).bottom + 'px';\n }\n\n if (calculateValue) {\n if (currentHeight >= minHeight && currentHeight <= maxHeight) {\n var containerTop = 0;\n\n if (!isNullOrUndefined(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// tslint:disable-next-line\n\n\nfunction resizeWest(e) {\n var documentWidth = document.documentElement.clientWidth;\n var calculateValue = false;\n var rectValues;\n\n if (!isNullOrUndefined(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 = isNullOrUndefined(containerElement) ? 0 : containerElement.offsetWidth - containerElement.clientWidth;\n var left = isNullOrUndefined(containerElement) ? 0 : rectValues.left;\n var containerWidth = isNullOrUndefined(containerElement) ? 0 : rectValues.width;\n\n if (isNullOrUndefined(resizeWestWidth)) {\n if (!isNullOrUndefined(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 (!isNullOrUndefined(containerElement) && targetRectValues.left - rectValues.left + targetRectValues.width + (rectValues.right - targetRectValues.right) - borderValue <= maxWidth) {\n calculateValue = true;\n } else if (isNullOrUndefined(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 (!isNullOrUndefined(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// tslint:disable-next-line\n\n\nfunction resizeEast(e) {\n var documentWidth = document.documentElement.clientWidth;\n var calculateValue = false;\n var containerRectValues;\n\n if (!isNullOrUndefined(containerElement)) {\n containerRectValues = getClientRectValues(containerElement);\n }\n\n var pageX = getEventType(e.type) === 'mouse' ? e.pageX : e.touches[0].pageX;\n var targetRectValues = getClientRectValues(targetElement);\n\n if (!isNullOrUndefined(containerElement) && (targetRectValues.left - containerRectValues.left + targetRectValues.width < maxWidth || targetRectValues.right - containerRectValues.left > targetRectValues.width)) {\n calculateValue = true;\n } else if (isNullOrUndefined(containerElement) && documentWidth - pageX > 0) {\n calculateValue = true;\n }\n\n var calculatedWidth = originalWidth + (pageX - originalMouseX);\n var containerLeft = 0;\n\n if (!isNullOrUndefined(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\nexport function setMinHeight(minimumHeight) {\n minHeight = minimumHeight;\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}","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, Browser, 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 { updateBlazorTemplate, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Popup, PositionData, getZindexPartial } from '../popup/popup';\nimport { createResize, removeResize, setMinHeight } from '../common/resize';\n\nvar ButtonProps = function (_super) {\n __extends(ButtonProps, _super);\n\n function ButtonProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\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 = function (_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 *
\n * ```\n * ```typescript\n * \n * ```\n */\n\nvar Dialog = function (_super) {\n __extends(Dialog, _super);\n /**\n * Constructor for creating the widget\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 * @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 = this.minHeight.toString();\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 * @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 };\n\n this.dlgOverlayClickEventHandler = function (event) {\n _this.trigger('overlayClick', event);\n\n _this.focusContent();\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 ;\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 + footerHeight);\n };\n\n Dialog.prototype.onResizeStart = function (args) {\n this.trigger('resizeStart', args);\n return args.cancel;\n };\n\n Dialog.prototype.onResizing = function (args) {\n this.trigger('resizing', args);\n };\n\n Dialog.prototype.onResizeComplete = function (args) {\n this.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 = this.enableRtl ? 'south-west' : 'south-east';\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 });\n } else {\n removeResize();\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 /* 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(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;\n var firstPrimary = this.buttons.some(function (data, index) {\n buttonIndex_1 = index;\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 * @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 * @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()) {\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 this.dlgOverlay = this.element.parentElement.getElementsByClassName('e-dlg-overlay')[0];\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 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 open: function open(event) {\n var eventArgs = {\n container: _this.isModal ? _this.dlgContainer : _this.element,\n element: _this.element,\n target: _this.target,\n preventFocus: false\n };\n\n if (_this.enableResize) {\n _this.getMinHeight();\n }\n\n _this.trigger('open', eventArgs, function (openEventArgs) {\n if (!openEventArgs.preventFocus) {\n _this.focusContent();\n }\n });\n },\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)) {\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.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 abort: '.e-dlg-closeicon-btn',\n handle: handleContent,\n dragStart: function dragStart(event) {\n _this.trigger('dragStart', event, function (dragEventArgs) {\n if (isBlazor()) {\n dragEventArgs.bindEvents(event.dragElement);\n }\n });\n },\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 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 = [];\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 footerEle = this.element.querySelector('.' + DLG_FOOTER_CONTENT);\n var footerBtn = !isNullOrUndefined(footerEle) && footerEle.querySelectorAll('button');\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 this.btnObj[i].element.classList.add('e-flat');\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 var blazorContain = Object.keys(window);\n\n if (typeof this.content === 'string' && blazorContain.indexOf('ejsInterop') === -1) {\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);\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) {\n var templateFn;\n var templateProps;\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 = blazorContain.indexOf('ejsInterop') !== -1 && !this.isStringTemplate && templateValue.indexOf('
Blazor') === 0 ? this.isStringTemplate : true;\n\n for (var _i = 0, _a = templateFn({}, null, null, 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 if (blazorContain.indexOf('ejsInterop') !== -1 && !this.isStringTemplate && templateValue.indexOf('
Blazor') === 0) {\n this.blazorTemplate(templateProps);\n }\n }\n };\n /**\n * @hidden\n */\n\n\n Dialog.prototype.sanitizeHelper = function (value) {\n if (this.enableHtmlSanitizer) {\n var item = SanitizeHtmlHelper.beforeSanitize();\n var beforeEvent = {\n cancel: false,\n helper: null\n };\n extend(item, item, beforeEvent);\n this.trigger('beforeSanitizeHtml', item);\n\n if (item.cancel && !isNullOrUndefined(item.helper)) {\n value = item.helper(value);\n } else if (!item.cancel) {\n value = SanitizeHtmlHelper.serializeValue(item, value);\n }\n }\n\n return value;\n };\n\n Dialog.prototype.blazorTemplate = function (templateProps) {\n if (templateProps === this.element.id + 'header') {\n updateBlazorTemplate(templateProps, 'Header', this);\n } else if (templateProps === this.element.id + 'footerTemplate') {\n updateBlazorTemplate(templateProps, 'FooterTemplate', this);\n } else {\n updateBlazorTemplate(templateProps, 'Content', this);\n }\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 = '100%';\n }\n };\n\n Dialog.prototype.setEnableRTL = function () {\n if (!this.isBlazorServerRender()) {\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);\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);\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 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 }\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 var elementMatch = element ? element.matches || element.webkitMatchesSelector || element.msMatchesSelector : 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 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 * @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 * @private\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 }\n\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 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 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 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 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.popupObj.relateTo = 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.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 * Get the properties to be maintained in the persisted state.\n * @private\n */\n\n\n Dialog.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}\n * @memberof dialog\n */\n\n\n Dialog.prototype.destroy = function () {\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 (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 (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 _super.prototype.destroy.call(this);\n };\n /**\n * Binding event to the element while widget creation\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 * @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 * @return {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 * @param { boolean } isFullScreen - Enable the fullScreen Dialog.\n * @return {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 }\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 }\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 }\n };\n /**\n * Closes the dialog if it is in visible state.\n * @return {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 isInteraction: event ? true : 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 isInteraction: event ? true : 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 !isNullOrUndefined(_this.targetEle) ? removeClass([_this.targetEle], [DLG_TARGET, SCROLL_DISABLED]) : removeClass([document.body], [DLG_TARGET, SCROLL_DISABLED]);\n }\n\n var closeAnimation = {\n name: _this.animationSettings.effect + 'Out',\n duration: _this.animationSettings.duration,\n delay: _this.animationSettings.delay\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 };\n /**\n * Specifies to view the Full screen Dialog.\n * @private\n */\n\n\n Dialog.prototype.fullScreen = function (args) {\n var top = this.element.offsetTop;\n var left = this.element.offsetLeft;\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 * @param { number } index - Index of the button.\n * @return {Button}\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('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\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 function alert(args) {\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 function confirm(args) {\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;\n\n function createDialog(options, element) {\n var dialogObject = new Dialog(options);\n dialogObject.appendTo(element);\n return dialogObject;\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 }\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 }\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 }\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 }\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 }\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 = {}));","import { createElement, attributes, addClass, removeClass, detach, classList } from '@syncfusion/ej2-base';\nimport { closest, formatUnit, isNullOrUndefined } 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\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 * @param args\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 inputObject = setPropertyValue(args, inputObject);\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)) {\n inputElement.parentElement.classList.add('e-valid-input');\n } else if (floatLabelType !== 'Always') {\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 var inputElement;\n var floatLinelement;\n var floatLabelElement;\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 floatLinelement = makeElement('span', {\n className: CLASSNAMES.FLOATLINE\n });\n 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.innerHTML = args.element.placeholder;\n args.element.removeAttribute('placeholder');\n }\n\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.placeholder) && args.properties.placeholder !== '') {\n floatLabelElement.innerHTML = args.properties.placeholder;\n }\n\n if (!floatLabelElement.innerHTML) {\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 args.element.addEventListener('input', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\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 }\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 });\n element.addEventListener('input', function (event) {\n updateIconState(element.value, button);\n });\n element.addEventListener('focus', function (event) {\n updateIconState(element.value, button);\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 = placeholder;\n result = spanEle.innerHTML;\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 * @param value - Specify the value of the input element.\n * @param element - The element on which the specified value is updated.\n * @param floatLabelType - Specify the float label type of the input element.\n * @param 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 (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 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 * @param cssClass - Css class names which are needed to add.\n * @param elements - The elements which are needed to add / remove classes.\n * @param oldClass - 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 * @param width - Width value which is need to add.\n * @param 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 * @param placeholder - Placeholder value which is need to add.\n * @param element - The element on which the placeholder is need to add.\n */\n\n function setPlaceholder(placeholder, element) {\n var parentElement;\n placeholder = encodePlaceHolder(placeholder);\n 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 * @param isReadonly\n * - Boolean value to specify whether to set read only. Setting \"True\" value enables read only.\n * @param 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 * @param isRtl\n * - Boolean value to specify whether to set RTL. Setting \"True\" value enables the RTL mode.\n * @param 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 * @param isEnable\n * - Boolean value to specify whether to enable or disable.\n * @param 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 inputObject.clearButton.remove();\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 * @param attrs\n * - Array of attributes which are need to removed from the element.\n * @param 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 = void 0;\n 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 * @param attrs\n * - Array of attributes which is added to element.\n * @param 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 = void 0;\n 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 * @param isRipple\n * - Boolean value to specify whether to enable the ripple effect.\n * @param inputObject\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 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 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 * @param position - Specify the icon placement on the input.Possible values are append and prepend.\n * @param 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 container - The container on which created span element is going to append.\n * @param inputElement - The inputElement on which created span element is going to prepend.\n */\n // tslint:disable\n\n\n function addIcon(position, icons, container, input, internalCreate) {\n // tslint:enable\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 * @param 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 container - The container on which created span element is going to append.\n * @param inputElement - The inputElement on which created span element is going to prepend.\n */\n // tslint:disable\n\n function prependSpan(iconClass, container, inputElement, internalCreateElement) {\n // tslint:enable\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 * @param 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 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})(Input || (Input = {}));","import \"core-js/modules/es.array.sort.js\";\n\n/* tslint:disable-next-line:max-line-length */\nimport { EventHandler, isNullOrUndefined, extend, classList, addClass, removeClass, Browser, getValue, setValue, isBlazor } from '@syncfusion/ej2-base';\nimport { parentsUntil, getUid, appendChildren, getDatePredicate, getObject, extendObjWithFn } from '../base/util';\nimport { remove, debounce } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager, Predicate, UrlAdaptor, Deferred } 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 = function () {\n /**\n * Constructor for checkbox filtering module\n * @hidden\n */\n function CheckBoxFilterBase(parent) {\n this.existingPredicate = {};\n this.foreignKeyQuery = new Query();\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 this.searchHandler = debounce(this.searchBoxKeyUp, 200);\n EventHandler.add(this.dlg.querySelector('.e-searchinput'), 'keyup', this.searchHandler, this);\n };\n\n CheckBoxFilterBase.prototype.unWireEvents = function () {\n EventHandler.remove(this.dlg, 'click', this.clickHandler);\n var elem = this.dlg.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 ? 'startswith' : 'contains';\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 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\n if (!isBlazor() || this.parent.isJsComponent) {\n var filterModel = 'filterModel';\n args[filterModel] = this;\n }\n\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 width: !isNullOrUndefined(parentsUntil(options.target, 'e-bigger')) || this.parent.element.classList.contains('e-device') ? 260 : 255,\n target: this.parent.element,\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.dlg.setAttribute('aria-label', this.getLocalizedLabel('ExcelFilterDialogARIA'));\n this.parent.element.appendChild(this.dlg);\n this.dialogObj.appendTo(this.dlg);\n this.dialogObj.element.style.maxHeight = this.options.height + 'px';\n this.dialogObj.show();\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.dialogCreated = function (e) {\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 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 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 }\n };\n\n CheckBoxFilterBase.prototype.clearFilter = function () {\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: this.options.field\n });\n };\n\n CheckBoxFilterBase.prototype.btnClick = function (e) {\n if (this.filterState) {\n if (e.target.tagName.toLowerCase() === 'input') {\n var value = e.target.value;\n\n if (this.options.column.type === 'boolean') {\n if (value !== undefined && this.getLocalizedLabel('FilterTrue').toLowerCase().indexOf(value.toLowerCase()) !== -1) {\n value = 'true';\n } else if (value !== undefined && 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 },\n field: this.options.field\n };\n value ? this.isForeignColumn(this.options.column) ? this.foreignFilter(args, value) : this.options.handler(args) : this.closeDialog();\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 this.closeDialog();\n } else if (!(e.target.tagName.toLowerCase() === 'input')) {\n this.clearFilter();\n this.closeDialog();\n }\n };\n\n CheckBoxFilterBase.prototype.fltrBtnHandler = function () {\n var checked = [].slice.call(this.cBox.querySelectorAll('.e-check:not(.e-selectall)'));\n var optr = 'equal';\n var searchInput = this.searchBox.querySelector('.e-searchinput');\n var caseSen = this.options.allowCaseSensitive;\n var defaults = {\n field: this.options.field,\n predicate: '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.value === '') {\n optr = 'notequal';\n checked = [].slice.call(this.cBox.querySelectorAll('.e-uncheck:not(.e-selectall)'));\n defaults.predicate = 'and';\n defaults.operator = 'notequal';\n }\n\n var value;\n var fObj;\n var coll = [];\n\n if (checked.length !== this.itemsCnt || 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 if (this.options.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 } 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 this.initiateFilter(coll);\n } else {\n this.clearFilter();\n }\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 ? 'startswith' : 'contains';\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 && 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\n if (isBlazor() && !this.parent.isJsComponent) {\n var filterModel = 'filterModel';\n args[filterModel] = {};\n }\n\n this.parent.notify(events.cBoxFltrBegin, args);\n predicte = new Predicate(field, args.operator, parsed, args.matchCase, args.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 args.filterChoiceCount = !isNullOrUndefined(args.filterChoiceCount) ? args.filterChoiceCount : 1000;\n var fPredicate = {};\n showSpinner(this.spinner);\n this.renderEmpty = false;\n\n if (this.isForeignColumn(column) && val.length) {\n // tslint:disable-next-line:no-any\n column.dataSource.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(args.filterChoiceCount);\n\n _this.search(args, foreignQuery);\n });\n } else {\n query.take(args.filterChoiceCount);\n this.search(args, query);\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\n if (!isBlazor() || this.parent.isJsComponent) {\n var filterModel = 'filterModel';\n args[filterModel] = this;\n }\n\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 def = this.eventPromise(args, query);\n def.promise.then(function (e) {\n _this.dataSuccess(e);\n });\n };\n\n CheckBoxFilterBase.prototype.eventPromise = function (args, query) {\n var state;\n state = this.getStateEventArgument(query);\n var def = new Deferred();\n state.dataSource = def.resolve;\n state.action = args;\n this.parent.trigger(events.dataStateChange, state);\n return def;\n };\n\n ;\n\n CheckBoxFilterBase.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 data;\n };\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 allPromise.push(this.options.column.dataSource.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 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(this.fullData).executeLocal(query);\n var col = this.options.column;\n this.filteredData = CheckBoxFilterBase.getDistinct(result, this.options.field, col, this.foreignKeyData).records || [];\n this.processDataSource(null, true, this.filteredData);\n this.sInput.focus();\n var args = {\n requestType: events.filterAfterOpen,\n columnName: this.options.field,\n columnType: this.options.type\n };\n\n if (!isBlazor() || this.parent.isJsComponent) {\n var filterModel = 'filterModel';\n args[filterModel] = this;\n }\n\n this.parent.notify(events.cBoxFltrComplete, args);\n };\n\n CheckBoxFilterBase.prototype.processDataSource = function (query, isInitial, dataSource) {\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);\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\n CheckBoxFilterBase.prototype.updateAllCBoxes = function (checked) {\n var cBoxes = [].slice.call(this.cBox.querySelectorAll('.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 }\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 this.dialogObj.element.querySelector('.e-btn').focus();\n }\n };\n\n CheckBoxFilterBase.prototype.createCheckbox = function (value, checked, data) {\n var elem = checked ? this.cBoxTrue.cloneNode(true) : this.cBoxFalse.cloneNode(true);\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 addClass([label], ['e-checkboxfiltertext']);\n\n if (this.options.template && data[this.options.column.field] !== this.getLocalizedLabel('SelectAll')) {\n label.innerHTML = '';\n appendChildren(label, this.options.template(dummyData, this.parent, 'filterItemTemplate'));\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 elem = this.cBox.querySelector('.e-selectall');\n var selected = this.cBox.querySelectorAll('.e-check:not(.e-selectall)').length;\n var btn = this.dialogObj.btnObj[0];\n btn.disabled = false;\n\n if (cnt === selected) {\n className = ['e-check'];\n } else if (selected) {\n className = ['e-stop'];\n } else {\n className = ['e-uncheck'];\n btn.disabled = true;\n }\n\n this.filterState = !btn.disabled;\n btn.dataBind();\n removeClass([elem], ['e-check', 'e-stop', 'e-uncheck']);\n addClass([elem], className);\n };\n\n CheckBoxFilterBase.prototype.createFilterItems = function (data, isInitial) {\n var _a;\n\n var cBoxes = this.parent.createElement('div');\n var btn = this.dialogObj.btnObj[0];\n var nullCounter = -1;\n\n for (var i = 0; i < data.length; i++) {\n var val = getValue('ejValue', 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('ejValue', 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 btn.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 btn.disabled = true;\n }\n\n this.filterState = !btn.disabled;\n btn.dataBind();\n var args = {\n requestType: events.filterChoiceRequest,\n dataSource: this.renderEmpty || isBlazor() && this.parent.isServerRendered ? [] : data\n };\n\n if (!isBlazor() || this.parent.isJsComponent) {\n var filterModel = 'filterModel';\n args[filterModel] = this;\n }\n\n this.parent.notify(events.cBoxFltrComplete, args);\n hideSpinner(this.spinner);\n };\n\n CheckBoxFilterBase.prototype.getCheckedState = function (isColFiltered, value) {\n if (!this.isFiltered || !isColFiltered) {\n return true;\n } else {\n return this.result[value];\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 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 predicate = predicate[cols[p].predicate](getDatePredicate(cols[p], cols[p].type), cols[p].type, cols[p].ignoreAccent);\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 return false;\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, isBlazor } from '@syncfusion/ej2-base';\nimport { Query, DataManager, Predicate, Deferred, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { setFormatter, getDatePredicate, 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 = function () {\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.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 this.isQueryInvokedFromData = true;\n gObj.query = gObj.query instanceof Query ? gObj.query : new Query();\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\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.infiniteScrollSettings.enableScroll) && 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.infiniteScrollSettings.enableScroll) {\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 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 query.sortBy(col.field, fn);\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 query.sortBy(sortGrp[i].field, sortGrp[i].direction);\n }\n }\n\n return query;\n };\n\n Data.prototype.searchQuery = function (query) {\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\n if (needForeignKeySearch && !(this.dataManager.adaptor.getModulename && this.dataManager.adaptor.getModulename() === 'ODataV4Adaptor')) {\n for (var i = 0; i < fields.length; i++) {\n var column = this.getColumnByField(fields[i]);\n\n if (column.isForeignColumn()) {\n predicateList = this.fGeneratePredicate(column, predicateList);\n } else {\n predicateList.push(new Predicate(column.field, sSettings.operator, sSettings.key, sSettings.ignoreCase, sSettings.ignoreAccent));\n }\n }\n\n query.where(Predicate.or(predicateList));\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 fPredicate = {};\n var actualFilter = [];\n var foreignColumn = this.parent.getForeignKeyColumns();\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 checkBoxCols = [];\n var defaultFltrCols = [];\n\n for (var _b = 0, columns_1 = columns; _b < columns_1.length; _b++) {\n var col = columns_1[_b];\n\n if (colType[col.field] === 'CheckBox' || colType[col.field] === 'Excel') {\n checkBoxCols.push(col);\n } else {\n defaultFltrCols.push(col);\n }\n }\n\n if (checkBoxCols.length) {\n var excelPredicate = CheckBoxFilterBase.getPredicate(checkBoxCols);\n\n for (var _c = 0, _d = Object.keys(excelPredicate); _c < _d.length; _c++) {\n var prop = _d[_c];\n var col = void 0;\n\n if (this.parent.getColumnByField(prop).isForeignColumn()) {\n col = getColumnByForeignKeyValue(prop, foreignColumn);\n }\n\n if (!col) {\n this.parent.log('initial_action', {\n moduleName: 'filter',\n columnName: prop\n });\n }\n\n if (col && !skipFoerign) {\n predicateList = this.fGeneratePredicate(col, predicateList);\n actualFilter.push(col);\n } else {\n predicateList.push(excelPredicate[prop]);\n }\n }\n }\n\n if (defaultFltrCols.length) {\n for (var _e = 0, defaultFltrCols_1 = defaultFltrCols; _e < defaultFltrCols_1.length; _e++) {\n var col = defaultFltrCols_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 var sType = column_1.type;\n\n if (column_1.isForeignColumn() && getColumnByForeignKeyValue(col.field, foreignColumn) && !skipFoerign) {\n actualFilter.push(col);\n predicateList = this.fGeneratePredicate(column_1, predicateList);\n } else {\n if (sType !== 'date' && sType !== 'datetime') {\n predicateList.push(new Predicate(col.field, col.operator, col.value, !col.matchCase, this.parent.filterSettings.ignoreAccent));\n } else {\n predicateList.push(getDatePredicate(col, sType));\n }\n }\n }\n }\n\n if (predicateList.length) {\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}\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 if (isBlazor() && this.parent.isServerRendered) {\n this.parent.notify('offset', args);\n }\n\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 if (isBlazor() && this.parent.isServerRendered) {\n this.parent.notify('offset', args);\n }\n\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 changedRecords = 'changedRecords';\n var addedRecords = 'addedRecords';\n var data = 'data';\n\n if (isBlazor() && this.parent.isServerRendered) {\n for (var i = 0; i < changes[changedRecords].length; i++) {\n var args = {\n data: changes[changedRecords][i]\n };\n this.parent.notify('offset', args);\n changes[changedRecords][i] = args[data];\n }\n\n for (var i = 0; i < changes[addedRecords].length; i++) {\n var args = {\n data: changes[addedRecords][i]\n };\n this.parent.notify('offset', args);\n changes[addedRecords][i] = args[data];\n }\n }\n\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.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 };","import { merge } from '@syncfusion/ej2-base';\n/**\n * Row\n * @hidden\n */\n\nvar Row = function () {\n function Row(options) {\n merge(this, options);\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 return Row;\n}();\n\nexport { Row };","import { merge } from '@syncfusion/ej2-base';\n/**\n * Cell\n * @hidden\n */\n\nvar Cell = function () {\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 };","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 = function () {\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 { 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';\n/**\n * RowRenderer class which responsible for building row content.\n * @hidden\n */\n\nvar RowRenderer = function () {\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 };\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 attrCopy = extend({}, attributes, {});\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 if (row.isDataRow) {\n row.isSelected = this.parent.getSelectedRowIndexes().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 (this.parent.getSelectedRowIndexes().indexOf(row.index) === -1) {\n this.parent.getSelectedRowIndexes().push(row.index);\n }\n }\n\n this.buildAttributeFromRow(tr, row);\n addAttributes(tr, attrCopy);\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 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 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 = tr.querySelectorAll('.e-summarycell');\n\n if (summarycell.length) {\n var lastSummaryCell = summarycell[summarycell.length - 1];\n addClass([lastSummaryCell], ['e-lastsummarycell']);\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': 'aria-rowindex',\n 'dataUID': 'data-uid',\n 'ariaSelected': 'aria-selected'\n };\n var classes = [];\n\n if (row.isDataRow) {\n classes.push('e-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 };","import { isNullOrUndefined, getValue, setValue, isBlazor } 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 = function () {\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 isInifiniteScroll = this.parent.infiniteScrollSettings.enableScroll && args.requestType === 'infiniteScroll';\n var startIndex = this.parent.enableVirtualization || isInifiniteScroll ? args.startIndex : 0;\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 var isServerRendered = 'isServerRendered';\n options.uid = isBlazor() && this.parent[isServerRendered] ? this.parent.getRowUid('grid-row') : 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.isSelected = this.parent.getSelectedRowIndexes().indexOf(index) > -1;\n this.refreshForeignKeyRow(options);\n var cells = this.ensureColumns();\n var row = new Row(options);\n row.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 return RowModelGenerator;\n}();\n\nexport { RowModelGenerator };","import \"core-js/modules/es.array.reduce.js\";\n\nvar __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 = function () {\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) || this.parent.isRowDragable()) {\n columns.push(new Column({}));\n }\n\n columns.push.apply(columns, this.parent.getColumns());\n return isNullOrUndefined(start) ? columns : columns.slice(start, end);\n };\n\n SummaryModelGenerator.prototype.generateRows = function (input, args, start, end) {\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));\n }\n\n return rows;\n };\n\n SummaryModelGenerator.prototype.getGeneratedRow = function (summaryRow, data, raw, start, end, parentUid) {\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 = 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 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 = function (_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 = function (_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 };","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, isBlazor } 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 = function (_super) {\n __extends(GroupModelGenerator, _super);\n\n function GroupModelGenerator(parent) {\n var _this = _super.call(this, parent) || this;\n\n _this.rows = [];\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 var isInfiniteScroll = this.parent.infiniteScrollSettings.enableScroll && args.requestType === 'infiniteScroll';\n this.rows = [];\n this.index = this.parent.enableVirtualization || 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.parent.infiniteScrollSettings.enableScroll && 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\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.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 = isBlazor() && this.parent.isServerRendered ? this.parent.getRowUid('grid-row') : 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\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, isBlazor } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, remove, updateBlazorTemplate, removeClass } from '@syncfusion/ej2-base';\nimport { getUpdateUsingRaf, appendChildren } from '../base/util';\nimport * as events from '../base/constant';\nimport { Row } from '../models/row';\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 { getScrollBarWidth, isGroupAdaptive } from '../base/util';\n/**\n * Content module is used to render grid content\n * @hidden\n */\n\nvar ContentRender = function () {\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 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.isAddRows = false;\n\n this.rafCallback = function (args) {\n var arg = args;\n return function () {\n if (_this.parent.getFrozenColumns() && _this.parent.enableVirtualization) {\n var mContentRows = [].slice.call(_this.parent.getMovableVirtualContent().querySelectorAll('.e-row'));\n var fContentRows = [].slice.call(_this.parent.getFrozenVirtualContent().querySelectorAll('.e-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().querySelectorAll('.e-row'));\n var fHdr = [].slice.call(_this.parent.getFrozenVirtualHeader().querySelectorAll('.e-row'));\n _this.isLoaded = mHdr.length === fHdr.length;\n }\n }\n\n _this.ariaService.setBusy(_this.getPanel().querySelector('.e-content'), false);\n\n if (_this.parent.isDestroyed) {\n return;\n }\n\n var rows = _this.rows.slice(0);\n\n if (_this.parent.getFrozenColumns() !== 0) {\n rows = args.isFrozen ? _this.freezeRows : _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, {});\n\n if (_this.parent.allowTextWrap) {\n _this.parent.notify(events.freezeRender, {\n case: 'textwrap'\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.generator = this.getModelGenerator();\n\n if (this.parent.isDestroyed) {\n return;\n }\n\n if (!this.parent.enableColumnVirtualization && !this.parent.enableVirtualization) {\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 }\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('.e-gridcontent');\n\n if (div) {\n this.ariaService.setOptions(this.parent.element.querySelector('.e-content'), {\n busy: false\n });\n this.setPanel(div);\n return;\n }\n\n div = this.parent.createElement('div', {\n className: 'e-gridcontent'\n });\n var innerDiv = this.parent.createElement('div', {\n className: 'e-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('.e-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 (!isBlazor()) {\n if (this.getTable()) {\n remove(this.getTable());\n }\n }\n\n var table = innerDiv.querySelector('.e-table') ? innerDiv.querySelector('.e-table') : this.parent.createElement('table', {\n className: 'e-table',\n attrs: {\n cellspacing: '0.25px',\n role: 'grid',\n id: this.parent.element.id + id\n }\n });\n this.setColGroup(this.parent.element.querySelector('.e-gridheader').querySelector('colgroup').cloneNode(true));\n table.appendChild(this.getColGroup());\n table.appendChild(this.parent.createElement('tbody'));\n innerDiv.appendChild(table);\n return innerDiv;\n };\n\n ContentRender.prototype.splitRows = function (idx) {\n if (this.parent.getFrozenColumns()) {\n if (idx === 0) {\n this.freezeRows = this.rows;\n this.freezeRowElements = this.rowElements;\n } else {\n this.movableRows = this.rows;\n }\n }\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 = gObj.currentViewData;\n var frag = document.createDocumentFragment();\n var hdrfrag = document.createDocumentFragment();\n var columns = gObj.getColumns();\n var tr;\n var hdrTbody;\n var frzCols = gObj.getFrozenColumns();\n var trElement;\n var row = new RowRenderer(this.serviceLocator, null, this.parent);\n var isInfiniteScroll = this.parent.infiniteScrollSettings.enableScroll && args.requestType === 'infiniteScroll';\n\n if (!isInfiniteScroll) {\n this.rowElements = [];\n this.rows = [];\n }\n\n var fCont = this.getPanel().querySelector('.e-frozencontent');\n var mCont = this.getPanel().querySelector('.e-movablecontent');\n var cont = this.getPanel().querySelector('.e-content');\n\n if (isGroupAdaptive(gObj)) {\n if (['sorting', 'filtering', 'searching', 'grouping', 'ungrouping', 'reorder'].some(function (value) {\n return args.requestType === value;\n })) {\n gObj.vcRows = [];\n gObj.vRows = [];\n }\n }\n\n var modelData;\n var isServerRendered = 'isServerRendered';\n\n if (isBlazor() && this.parent[isServerRendered]) {\n modelData = this.generator.generateRows(dataSource, args);\n this.rows = modelData;\n this.freezeRows = modelData;\n this.rowElements = [].slice.call(this.getTable().querySelectorAll('tr.e-row[data-uid]'));\n\n if (frzCols) {\n this.movableRows = modelData.map(function (mRow) {\n var sRow = new Row(mRow);\n sRow.cells = mRow.cells.slice(frzCols, mRow.cells.length);\n mRow.cells = mRow.cells.slice(0, frzCols);\n return sRow;\n });\n this.freezeRowElements = this.rowElements;\n }\n\n this.isLoaded = true;\n this.parent.hideSpinner();\n args.isFrozen = this.parent.getFrozenColumns() !== 0 && !args.isFrozen;\n var arg = extend({\n rows: this.rows\n }, args);\n\n if (this.getTable().querySelector('.e-emptyrow')) {\n remove(this.getTable().querySelector('.e-emptyrow'));\n }\n\n this.rafCallback(arg)();\n\n if (frzCols) {\n cont.style.overflowY = 'hidden';\n fCont.style.height = mCont.offsetHeight - getScrollBarWidth() + 'px';\n mCont.style.overflowY = this.parent.height !== 'auto' ? 'scroll' : 'auto';\n fCont.style.borderRightWidth = '1px';\n this.parent.notify(events.contentReady, {\n rows: this.movableRows,\n args: extend({}, arg, {\n isFrozen: false\n })\n });\n }\n\n if (!(this.parent.isCheckBoxSelection || this.parent.selectionSettings.type === 'Multiple') || !this.parent.isPersistSelection) {\n if (this.parent.editSettings.mode === 'Normal') {\n var rowIndex = 'editRowIndex';\n this.parent.selectRow(args[rowIndex]);\n }\n }\n\n return;\n }\n\n if (this.parent.enableVirtualization && this.parent.getFrozenColumns()) {\n if (this.parent.enableColumnVirtualization) {\n if (args.requestType === 'virtualscroll' && args.virtualInfo.sentinelInfo.axis === 'X') {\n modelData = this.parent.contentModule.generateRows(dataSource, args);\n args.renderMovableContent = true;\n } else if (mCont.scrollLeft > 0 && !args.renderMovableContent) {\n this.viewColIndexes = args.virtualInfo.columnIndexes;\n var indexes = [];\n\n for (var i = 0; i < this.parent.getFrozenColumns(); i++) {\n indexes.push(i);\n }\n\n this.parent.setColumnIndexesInView(indexes);\n args.virtualInfo.columnIndexes = indexes;\n }\n }\n\n modelData = this.parent.contentModule.generateRows(dataSource, args);\n } else {\n this.isAddRows = isInfiniteScroll && !isNullOrUndefined(this.infiniteCache[this.parent.pageSettings.currentPage]);\n\n if (this.isAddRows && this.parent.infiniteScrollSettings.enableCache) {\n modelData = this.infiniteCache[this.parent.pageSettings.currentPage];\n } else {\n this.isAddRows = false;\n modelData = this.generator.generateRows(dataSource, args);\n }\n }\n\n this.parent.notify(events.setInfiniteCache, {\n isInfiniteScroll: isInfiniteScroll,\n modelData: modelData\n });\n\n if (isNullOrUndefined(modelData[0].cells[0])) {\n mCont.querySelector('tbody').innerHTML = '';\n }\n\n var idx = modelData[0].cells[0].index;\n\n if (this.parent.enableColumnVirtualization && this.parent.getFrozenColumns() && args.renderMovableContent && args.requestType === 'virtualscroll' && mCont.scrollLeft > 0 && args.virtualInfo.columnIndexes[0] !== 0) {\n idx = this.parent.getFrozenColumns();\n }\n /* tslint:disable:no-any */\n\n\n if (this.parent.registeredTemplate && this.parent.registeredTemplate.template && !args.isFrozen) {\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.enableColumnVirtualization) {\n var cellMerge = new CellMergeRender(this.serviceLocator, this.parent);\n cellMerge.updateVirtualCells(modelData);\n }\n\n if (frzCols && idx >= frzCols) {\n this.tbody = mCont.querySelector('tbody');\n } else {\n this.tbody = this.getTable().querySelector('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 (scrollTop + this.contentPanel.firstElementChild.offsetHeight === this.contentPanel.firstElementChild.scrollHeight && !args.rowObject) {\n blockLoad = false;\n }\n }\n }\n\n if (gObj.frozenRows && args.requestType === 'virtualscroll' && args.virtualInfo.sentinelInfo.axis === 'X') {\n var bIndex = args.virtualInfo.blockIndexes;\n args.virtualInfo.blockIndexes = [1, 2];\n var mhdrData = this.vgenerator.generateRows(dataSource, args);\n mhdrData.splice(this.parent.frozenRows);\n\n for (var i = 0; i < this.parent.frozenRows; i++) {\n if (args.virtualInfo.columnIndexes[0] === 0) {\n mhdrData[i].cells.splice(0, this.parent.getFrozenColumns());\n }\n\n tr = row.render(mhdrData[i], columns);\n hdrfrag.appendChild(tr);\n }\n\n args.virtualInfo.blockIndexes = bIndex;\n }\n\n for (var i = startIndex, len = modelData.length; i < len; i++) {\n if (!this.isAddRows) {\n this.rows.push(modelData[i]);\n }\n\n if (!isNullOrUndefined(this.parent.infiniteScrollModule) && !this.isRemove) {\n this.visibleRows.push(modelData[i]);\n }\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\n if (gObj.frozenRows && i < gObj.frozenRows && args.requestType !== 'virtualscroll') {\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 = gObj.getRowTemplate()(extend({\n index: i\n }, dataSource[i]), gObj, 'rowTemplate', rowTemplateID);\n\n if (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 = appendChildren(hdrfrag, elements);\n } else {\n // frag.appendChild(tr);\n tr = appendChildren(frag, elements);\n trElement = 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 this.splitRows(idx);\n\n if (gObj.frozenRows && args.requestType !== 'virtualscroll' || args.requestType === 'virtualscroll' && args.virtualInfo.sentinelInfo && args.virtualInfo.sentinelInfo.axis === 'X') {\n hdrTbody = frzCols ? gObj.getHeaderContent().querySelector(idx === 0 ? '.e-frozenheader' : '.e-movableheader').querySelector('tbody') : gObj.getHeaderTable().querySelector('tbody');\n hdrTbody.innerHTML = '';\n hdrTbody.appendChild(hdrfrag);\n }\n\n if (gObj.frozenRows && idx === 0 && cont.offsetHeight === Number(gObj.height)) {\n cont.style.height = cont.offsetHeight - hdrTbody.offsetHeight + 'px';\n }\n\n if (frzCols && idx === 0) {\n this.getPanel().firstChild.style.overflowY = 'hidden';\n }\n\n if (!isBlazor() || this.parent.isJsComponent) {\n args.rows = this.rows.slice(0);\n }\n\n args.isFrozen = this.parent.getFrozenColumns() !== 0 && !args.isFrozen;\n this.index = idx;\n getUpdateUsingRaf(function () {\n _this.parent.notify(events.beforeFragAppend, args);\n\n var isVFTable = _this.parent.enableVirtualization && _this.parent.getFrozenColumns() !== 0;\n\n if (!_this.parent.enableVirtualization && !isInfiniteScroll) {\n remove(_this.tbody);\n _this.tbody = _this.parent.createElement('tbody');\n }\n\n if (frzCols && !isVFTable) {\n _this.tbody.appendChild(frag);\n\n if (_this.index === 0) {\n _this.isLoaded = false;\n fCont.querySelector('table').appendChild(_this.tbody);\n } else {\n if (_this.tbody.childElementCount < 1) {\n _this.tbody.appendChild(_this.parent.createElement('tr').appendChild(_this.parent.createElement('td')));\n }\n\n _this.isLoaded = true;\n mCont.querySelector('table').appendChild(_this.tbody);\n\n if (_this.parent.getFrozenColumns() !== 0 && !_this.parent.allowTextWrap) {\n _this.parent.notify(events.freezeRender, {\n case: 'refreshHeight'\n });\n }\n\n fCont.style.height = mCont.offsetHeight - getScrollBarWidth() + 'px';\n mCont.style.overflowY = _this.parent.height !== 'auto' ? 'scroll' : 'auto';\n fCont.style.borderRightWidth = '1px';\n }\n } else {\n if (gObj.rowTemplate) {\n updateBlazorTemplate(gObj.element.id + 'rowTemplate', 'RowTemplate', gObj);\n }\n\n if (isVFTable) {\n if (!args.renderMovableContent) {\n _this.appendContent(fCont.querySelector('tbody'), frag, args);\n\n if (_this.parent.enableColumnVirtualization && mCont.scrollLeft > 0) {\n _this.parent.setColumnIndexesInView(_this.viewColIndexes);\n\n args.virtualInfo.columnIndexes = _this.viewColIndexes;\n }\n } else {\n _this.appendContent(mCont.querySelector('tbody'), frag, args);\n\n if (args.virtualInfo && args.virtualInfo.direction !== 'right' && args.virtualInfo.direction !== 'left') {\n fCont.style.height = mCont.offsetHeight - getScrollBarWidth() + 'px';\n }\n\n args.renderMovableContent = false;\n }\n } else {\n if (!isNullOrUndefined(_this.parent.infiniteScrollModule) && _this.parent.infiniteScrollSettings.enableScroll) {\n _this.parent.notify(events.removeInfiniteRows, {\n args: args\n });\n\n _this.parent.notify(events.appendInfiniteContent, {\n tbody: _this.tbody,\n frag: frag,\n args: args,\n rows: _this.rows,\n rowElements: _this.rowElements,\n visibleRows: _this.visibleRows\n });\n } else {\n _this.appendContent(_this.tbody, frag, args);\n }\n }\n }\n\n if (frzCols && idx === 0) {\n if (isVFTable) {\n args.renderMovableContent = true;\n }\n\n _this.refreshContentRows(extend({}, args));\n }\n\n frag = null;\n }, this.rafCallback(extend({}, args)));\n };\n\n ContentRender.prototype.appendContent = function (tbody, frag, args) {\n tbody.appendChild(frag);\n this.getTable().appendChild(tbody);\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}\n */\n\n\n ContentRender.prototype.getRows = function () {\n return this.parent.getFrozenColumns() ? this.freezeRows : this.rows;\n };\n /**\n * Get the Movable Row collection in the Freeze pane Grid.\n * @returns {Row[] | HTMLCollectionOf}\n */\n\n\n ContentRender.prototype.getMovableRows = function () {\n return 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\n if (isBlazor() && gObj.isServerRendered) {\n this.parent.notify('setvisibility', columns);\n }\n\n var frzCols = gObj.getFrozenColumns();\n var rows = [];\n\n if (frzCols) {\n var fRows = this.freezeRows;\n var mRows = this.movableRows;\n var rowLen = fRows.length;\n var cellLen = void 0;\n\n for (var i = 0, row = void 0; i < rowLen; i++) {\n cellLen = mRows[i].cells.length;\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 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 contentrows = 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 (frzCols) {\n if (idx < frzCols) {\n setStyleAttribute(this.getColGroup().childNodes[idx], {\n 'display': displayVal\n });\n contentrows = this.freezeRows;\n } else {\n var mTable = gObj.getContent().querySelector('.e-movablecontent').querySelector('colgroup');\n colIdx = idx = idx - frzCols;\n setStyleAttribute(mTable.childNodes[idx], {\n 'display': displayVal\n });\n tr = gObj.getMovableDataRows();\n contentrows = 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 var trs = Object.keys(tr);\n\n for (var i = 0; i < trs.length; i++) {\n if (tr[trs[i]].querySelectorAll('td.e-rowcell').length) {\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 rows[trs[i]].cells[idx].visible = displayVal === '' ? true : false;\n }\n }\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()) {\n colGroup = this.parent.getMovableVirtualHeader().querySelector('colgroup').cloneNode(true);\n } else {\n colGroup = isBlazor() ? this.parent.getHeaderTable().querySelector('colgroup').cloneNode(true) : this.parent.element.querySelector('.e-gridheader').querySelector('colgroup').cloneNode(true);\n }\n\n this.getTable().replaceChild(colGroup, this.getColGroup());\n this.setColGroup(colGroup);\n }\n };\n\n ContentRender.prototype.initializeContentDrop = function () {\n var gObj = this.parent;\n var drop = new Droppable(gObj.getContent(), {\n accept: '.e-dragclone',\n drop: this.drop\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 if (isBlazor() && !this.parent.isJsComponent && this.parent.frozenRows) {\n return;\n }\n\n this.getTable().appendChild(tbody);\n\n if (this.parent.frozenRows) {\n this.parent.getHeaderContent().querySelector('tbody').innerHTML = '';\n }\n };\n\n ContentRender.prototype.setSelection = function (uid, set, clearAll) {\n if (this.parent.getFrozenColumns()) {\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 if (this.pressedKey !== 'upArrow' && this.pressedKey !== 'downArrow' && this.isRemove) {\n index = this.getInfiniteRowIndex(index);\n }\n\n return this.parent.getDataRows()[index];\n };\n\n ContentRender.prototype.getInfiniteRowIndex = function (index) {\n var firstRowIndex = parseInt(this.parent.getRows()[0].getAttribute('aria-rowindex'), 10);\n return index - firstRowIndex;\n };\n\n ContentRender.prototype.getVirtualRowIndex = function (index) {\n return index;\n };\n\n ContentRender.prototype.getMovableRowByIndex = function (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\n return ContentRender;\n}();\n\nexport { ContentRender };","import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, closest as getClosest, remove, isBlazor } 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 { parentsUntil, wrap, measureColumnDepth, appendChildren } from '../base/util';\n/**\n * Content module is used to render grid content\n * @hidden\n */\n\nvar HeaderRender = function () {\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\n this.helper = function (e) {\n var gObj = _this.parent;\n var target = e.sender.target;\n var parentEle = parentsUntil(target, 'e-headercell');\n\n if (!(gObj.allowReordering || gObj.allowGrouping) || !isNullOrUndefined(parentEle) && parentEle.querySelectorAll('.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: e.target,\n column: _this.column,\n event: e.event\n });\n\n if (isBlazor()) {\n e.bindEvents(e.dragElement);\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.allowGroupReordering) {\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) {\n this.parent.on(events.columnVisibilityChanged, this.setVisible, this);\n }\n\n this.parent.on(events.columnPositionChanged, this.colPosRefresh, this);\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('.e-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('.e-headercontent') : this.parent.createElement('div', {\n className: 'e-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('.e-table'));\n\n if (!this.parent.getFrozenColumns()) {\n this.initializeHeaderDrag();\n this.initializeHeaderDrop();\n }\n\n this.parent.notify(events.headerRefreshed, {\n rows: this.rows,\n args: {\n isFrozen: this.parent.getFrozenColumns() !== 0\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 skipDom = isBlazor() && this.parent.frozenRows !== 0;\n var table = this.createTable();\n var innerDiv = this.getPanel().querySelector('.e-headercontent');\n\n if (!skipDom) {\n innerDiv.appendChild(table);\n }\n\n return innerDiv;\n };\n /**\n * @hidden\n */\n\n\n HeaderRender.prototype.createTable = function (tableEle) {\n if (tableEle === void 0) {\n tableEle = null;\n }\n\n var skipDom = isBlazor() && this.parent.frozenRows !== 0;\n var gObj = this.parent;\n\n if (!(isBlazor() && !gObj.isJsComponent) && this.getTable() && !gObj.getFrozenColumns()) {\n remove(this.getTable());\n }\n\n var columns = gObj.getColumns();\n var innerDiv = this.getPanel().querySelector('.e-headercontent');\n var table = skipDom ? tableEle || innerDiv.querySelector('.e-table') : this.parent.createElement('table', {\n className: 'e-table',\n attrs: {\n cellspacing: '0.25px',\n role: 'grid'\n }\n });\n var findHeaderRow = this.createHeaderContent();\n var thead = findHeaderRow.thead;\n var tbody = this.parent.createElement('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('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\n if (!skipDom) {\n tbody.appendChild(rowBody);\n }\n\n table.appendChild(this.setColGroup(colGroup));\n table.appendChild(thead);\n\n if (!skipDom) {\n table.appendChild(tbody);\n }\n\n table.appendChild(this.caption);\n this.ariaService.setOptions(table, {\n colcount: gObj.getColumns().length.toString()\n });\n return table;\n };\n\n HeaderRender.prototype.createHeaderContent = function () {\n var gObj = this.parent;\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 rows = this.ensureColumns(rows);\n rows = this.getHeaderCells(rows);\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 colGroup.id = this.parent.element.id + '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()) {\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 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) {\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);\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);\n }\n\n return rows;\n };\n\n HeaderRender.prototype.appendCells = function (cols, rows, index, isFirstObj, isFirstCol, isLastCol, isMovable) {\n var lastCol = isLastCol ? 'e-lastcell' : '';\n var frzCols = this.parent.getFrozenColumns();\n var left;\n\n if (this.parent.enableColumnVirtualization && frzCols) {\n left = this.parent.getContent().querySelector('.e-movablecontent').scrollLeft;\n }\n\n if (!cols.columns) {\n if (left && left > 0 && this.parent.enableColumnVirtualization && this.parent.inViewIndexes[0] !== 0) {\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 (!frzCols && (!this.parent.lockcolPositionCount || cols.lockColumn && !this.lockColsRendered || !cols.lockColumn && this.lockColsRendered) || frzCols && (!isMovable && (this.frzIdx + this.notfrzIdx < this.parent.frozenColumns || cols.isFrozen) && (!this.parent.lockcolPositionCount || cols.lockColumn && !this.lockColsRendered || !cols.lockColumn && this.lockColsRendered) || isMovable && this.frzIdx + this.notfrzIdx >= this.parent.frozenColumns && !cols.isFrozen && (!this.parent.lockcolPositionCount || cols.lockColumn && !this.lockColsRendered || !cols.lockColumn && this.lockColsRendered))) {\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 var colSpan = this.getCellCnt(cols, 0);\n\n if (colSpan) {\n var frzObj = this.refreshFrozenHdr(cols.columns, {\n isPartial: false,\n isComp: true,\n cnt: 0\n });\n var stackedLockColsCount = this.getStackedLockColsCount(cols, 0);\n\n if (!frzCols && (!this.parent.lockcolPositionCount || !this.lockColsRendered && stackedLockColsCount || this.lockColsRendered && colSpan - stackedLockColsCount) || frzCols && (!isMovable && (this.parent.frozenColumns - this.frzIdx > 0 || frzObj.isPartial) || isMovable && colSpan + this.frzIdx > this.parent.frozenColumns && !frzObj.isComp)) {\n rows[index].cells.push(new Cell({\n cellType: CellType.StackedHeader,\n column: cols,\n colSpan: this.getColSpan(colSpan, isMovable, frzObj.cnt, stackedLockColsCount)\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);\n }\n }\n\n if (this.lockColsRendered) {\n for (var i = 0, len = cols.columns.length; i < len; i++) {\n rows = this.appendCells(cols.columns[i], rows, index + 1, isFirstObj, i === 0, i === len - 1 && isLastCol, isMovable);\n }\n }\n }\n\n return rows;\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.refreshFrozenHdr = function (cols, frzObj) {\n for (var i = 0; i < cols.length; i++) {\n if (cols[i].columns) {\n frzObj = this.refreshFrozenHdr(cols[i].columns, frzObj);\n } else {\n if (cols[i].isFrozen) {\n frzObj.isPartial = true;\n frzObj.cnt++;\n }\n\n frzObj.isComp = frzObj.isComp && (cols[i].isFrozen || this.parent.getColumnIndexByField(cols[i].field) < this.parent.frozenColumns);\n }\n }\n\n return frzObj;\n };\n\n HeaderRender.prototype.getColSpan = function (colSpan, isMovable, frozenCnt, stackedLockColsCount) {\n var frzCol = this.parent.frozenColumns;\n\n if (this.parent.getFrozenColumns() && this.frzIdx + colSpan > frzCol) {\n if (isMovable) {\n colSpan = colSpan - (frzCol > this.frzIdx ? frzCol - this.frzIdx : 0) - frozenCnt;\n } else {\n colSpan = colSpan - (colSpan - (frzCol > this.frzIdx ? frzCol + frozenCnt - this.frzIdx : frozenCnt));\n }\n } else if (this.parent.lockcolPositionCount) {\n colSpan = !this.lockColsRendered ? stackedLockColsCount : colSpan - stackedLockColsCount;\n }\n\n return colSpan;\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 if (idx < frzCols) {\n if (isBlazor() && gObj.isServerRendered) {\n setStyleAttribute(this.getTable().querySelector('colgroup').children[idx], {\n 'display': displayVal\n });\n setStyleAttribute(this.getTable().querySelectorAll('th')[idx], {\n 'display': displayVal\n });\n } else {\n setStyleAttribute(this.getColGroup().children[idx], {\n 'display': displayVal\n });\n }\n } else {\n var mTblColGrp = gObj.getHeaderContent().querySelector('.e-movableheader').querySelector('colgroup');\n var mTbl = gObj.getHeaderContent().querySelector('.e-movableheader').querySelector('table');\n setStyleAttribute(mTblColGrp.children[idx - frzCols], {\n 'display': displayVal\n });\n\n if (isBlazor() && gObj.isServerRendered) {\n setStyleAttribute(mTbl.querySelectorAll('th')[idx - frzCols], {\n 'display': displayVal\n });\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 if (isBlazor() && this.parent.isServerRendered && this.parent.frozenRows && this.parent.getFrozenColumns()) {\n this.freezeReorder = true;\n }\n\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.getFrozenColumns();\n var isVFTable = this.parent.enableColumnVirtualization && frzCols !== 0;\n var setFrozenTable = isBlazor() && this.parent.isServerRendered && this.parent.frozenRows !== 0 && frzCols !== 0;\n var headerDiv = this.getPanel();\n this.toggleStackClass(headerDiv);\n var table = this.parent.enableColumnVirtualization && frzCols || this.freezeReorder ? this.headerPanel.querySelector('.e-movableheader').querySelector('.e-table') : this.getTable();\n\n if (setFrozenTable && !isVFTable) {\n table = this.freezeReorder ? this.headerPanel.querySelector('.e-movableheader').querySelector('.e-table') : this.headerPanel.querySelector('.e-frozenheader').querySelector('.e-table');\n }\n\n if (table) {\n if (isBlazor() && this.parent.isServerRendered) {\n table.removeChild(table.querySelector('colgroup'));\n table.removeChild(table.querySelector('thead'));\n } else {\n remove(table);\n table.removeChild(table.firstChild);\n table.removeChild(table.childNodes[0]);\n }\n\n var colGroup = this.parent.createElement('colgroup');\n var findHeaderRow = this.createHeaderContent();\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 && !setFrozenTable) {\n this.setTable(table);\n }\n\n if (!(isBlazor() && this.parent.isServerRendered)) {\n this.appendContent(table);\n }\n\n this.parent.notify(events.colGroupRefresh, {});\n this.widthService.setWidthToColumns();\n this.parent.updateDefaultCursor();\n\n if (!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.querySelectorAll('.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: this.parent.getFrozenColumns() !== 0\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('.e-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 var headerRows = [].slice.call(gObj.getHeaderContent().querySelectorAll('.e-columnheader'));\n\n for (var i = 0, len = headerRows.length; i < len; i++) {\n var drag = new Draggable(headerRows[i], {\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 });\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 return HeaderRender;\n}();\n\nexport { HeaderRender };","import { isNullOrUndefined, extend, isBlazor, updateBlazorTemplate } from '@syncfusion/ej2-base';\nimport { doesImplementInterface, setStyleAndAttributes, appendChildren, extendObjWithFn } from '../base/util';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { foreignKeyData } from '../base/constant';\n/**\n * CellRenderer class which responsible for building cell content.\n * @hidden\n */\n\nvar CellRenderer = function () {\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: 'e-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 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 literals = ['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 var index = 'index';\n\n if (isBlazor() && isEdit) {\n var rNumber = this.parent.editSettings.mode !== 'Batch' ? parseInt(attributes[index], 10) : null;\n result = cell.column.getColumnTemplate()(extend({\n 'index': attributes[literals[0]]\n }, dummyData), this.parent, 'template', templateID, this.parent[str], rNumber);\n window[templateID] = null;\n\n if (this.parent.editSettings.mode !== 'Batch') {\n updateBlazorTemplate(templateID, 'Template', cell.column, false);\n }\n } else {\n result = cell.column.getColumnTemplate()(extend({\n 'index': attributes[literals[0]]\n }, dummyData), this.parent, 'template', templateID, this.parent[str]);\n }\n\n appendChildren(node, result);\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 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\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 === '' ? 'empty' : innerHtml) + ' column header ' + cell.column.headerText);\n\n if (!isNullOrUndefined(cell.column.headerText)) {\n node.setAttribute('aria-label', innerHtml + ' column header ' + cell.column.headerText);\n }\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('e-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 (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': 'aria-colindex'\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 (!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 };","import \"core-js/modules/es.array.sort.js\";\n\n/**\n * AriaService\n * @hidden\n */\nvar AriaService = function () {\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};","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 = function (_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\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 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) {\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 result = column.getHeaderTemplate()(extend({\n 'index': colIndex\n }, column), gridObj, 'headerTemplate', headerTempID, this.parent[str]);\n node.firstElementChild.innerHTML = '';\n appendChildren(node.firstElementChild, result);\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 = function (_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 = function (_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, isBlazor } 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 = function (_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 if (isBlazor()) {\n var tempID = gObj.element.id + 'captionTemplate';\n result = templateCompiler(gObj.groupSettings.captionTemplate)(data, null, null, tempID);\n } else {\n result = templateCompiler(gObj.groupSettings.captionTemplate)(data);\n }\n\n appendChildren(node, result);\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 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 = function (_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 = function (_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 = function (_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 = function (_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 = function (_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 = function (_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 = function (_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, updateBlazorTemplate, blazorTemplates, isBlazor } 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';\n/**\n * Content module is used to render grid content\n * @hidden\n */\n\nvar Render = function () {\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 if (!(isBlazor() && this.parent[isServerRendered])) {\n this.refreshDataManager();\n }\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\n if (isBlazor()) {\n this.resetTemplates();\n }\n\n if (isBlazor() && gObj.isServerRendered) {\n var bulkChanges = 'bulkChanges';\n\n if (gObj[bulkChanges].dataSource) {\n delete gObj[bulkChanges].dataSource;\n }\n\n gObj.notify('blazor-action-begin', e);\n\n if (e.requestType === 'filtering') {\n var columns = 'columns';\n e[columns] = null;\n }\n\n if (e.requestType === 'sorting') {\n var target = 'target';\n e[target] = null;\n }\n\n if (gObj.editSettings.mode === 'Normal' && gObj.isEdit) {\n gObj.notify('closeinline', {});\n } else if (gObj.editSettings.mode === 'Batch' && !gObj.isEdit) {\n gObj.notify('closebatch', {});\n }\n }\n\n gObj.trigger(events.actionBegin, e, function (args) {\n if (args === void 0) {\n args = {\n requestType: 'refresh'\n };\n }\n\n if (args.requestType === 'delete' && isBlazor() && !gObj.isJsComponent) {\n var data = 'data';\n args[data] = gObj.getSelectedRecords();\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\n if (!(gObj.currentViewData.length - dataLength) && 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 (isBlazor() && _this.parent.isServerRendered) {\n if (_this.parent[preventUpdate]) {\n return;\n }\n\n if (e.requestType === 'refresh') {\n _this.parent.notify('updateaction', args);\n }\n\n if (args.requestType !== 'virtualscroll') {\n _this.parent.showSpinner();\n }\n\n if (args.requestType === 'delete' || args.requestType === 'save') {\n _this.parent.notify(events.addDeleteAction, args);\n\n _this.parent.notify('add-delete-success', args);\n } else {\n _this.parent.allowServerDataBinding = true;\n\n _this.parent.serverDataBind();\n\n _this.parent.allowServerDataBinding = false;\n }\n } else {\n _this.refreshDataManager(args);\n }\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 if (isBlazor() && !this.parent.isJsComponent) {\n e.rows = null;\n }\n\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('.e-content'), true);\n\n if (isFActon) {\n var deffered = new Deferred();\n dataManager = this.getFData(deffered);\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 });\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) {\n this.parent.notify(events.getForeignKeyData, {\n isComplex: true,\n promise: deferred\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\n if (isBlazor() && !this.parent.isJsComponent) {\n promise.then(function (e) {\n _this.parent.notify('editsuccess', args);\n }).catch(function (e) {\n var error = 'error';\n var message = 'message';\n\n if (!isNullOrUndefined(e[error]) && !isNullOrUndefined(e[error][message])) {\n e[error] = e[error][message];\n }\n\n _this.parent.trigger(events.actionFailure, e);\n });\n } else {\n var query_1 = 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_1).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\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('tbody');\n var tr;\n\n if (!isNullOrUndefined(tbody)) {\n remove(tbody);\n }\n\n tbody = this.parent.createElement('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.getColumns().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(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\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 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 _this.parent.isEdit = false;\n\n _this.parent.notify(events.editReset, {});\n\n _this.parent.notify(events.tooltipDestroy, {});\n\n gObj.currentViewData = dataArgs.result;\n\n if (isBlazor() && gObj.filterSettings.type === 'FilterBar' && (isNullOrUndefined(gObj.currentViewData) || !isNullOrUndefined(gObj.currentViewData) && !gObj.currentViewData.length)) {\n var gridColumns = gObj.getColumns();\n\n for (var i = 0; i < gridColumns.length; i++) {\n if (gridColumns[i].filterTemplate) {\n var tempID = gObj.element.id + gridColumns[i].uid + 'filterTemplate';\n resetBlazorTemplate(tempID, 'FilterTemplate');\n var fieldName = gridColumns[i].field;\n var filteredColumns = gObj.filterSettings.columns;\n\n for (var k = 0; k < filteredColumns.length; k++) {\n if (fieldName === filteredColumns[k].field) {\n blazorTemplates[tempID][0][fieldName] = filteredColumns[k].value;\n }\n }\n\n updateBlazorTemplate(tempID, 'FilterTemplate', gridColumns[i], false);\n }\n }\n }\n\n if (!len && dataArgs.count && gObj.allowPaging && args && args.requestType !== 'delete') {\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 _this.updateColumnType(gObj.getCurrentViewRecords()[0]);\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 _this.contentRenderer.refreshContentRows(args);\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('.e-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 };\n /** @hidden */\n\n\n Render.prototype.dataManagerFailure = function (e, args) {\n this.ariaService.setOptions(this.parent.getContent().querySelector('.e-content'), {\n busy: false,\n invalid: true\n });\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.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);\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() || isBlazor()) {\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, getEnumValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\n/**\n * CellRendererFactory\n * @hidden\n */\n\nvar CellRendererFactory = function () {\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 };","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * ServiceLocator\n * @hidden\n */\n\nvar ServiceLocator = function () {\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 return ServiceLocator;\n}();\n\nexport { ServiceLocator };","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\n/**\n * RendererFactory\n * @hidden\n */\n\nvar RendererFactory = function () {\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 } from '@syncfusion/ej2-base';\nimport { formatUnit } from '@syncfusion/ej2-base';\nimport { columnWidthChanged } from '../base/constant';\nimport { Column } from '../models/column';\nimport { parentsUntil } from '../base/util';\n/**\n * ColumnWidthService\n * @hidden\n */\n\nvar ColumnWidthService = function () {\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()) {\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 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') {\n difference = (typeof this.parent.width === 'string' ? parseInt(this.parent.width, 10) : this.parent.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 if (tWidth !== 0 && difference < tmWidth) {\n this.setWidth(collection[i].minWidth, this.parent.getColumnIndexByField(collection[i].field));\n } else if (tWidth !== 0 && difference > tmWidth) {\n this.setWidth('', this.parent.getColumnIndexByField(collection[i].field), 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 var chrome = 'chrome';\n var webstore = 'webstore';\n\n if (typeof width === 'string' && width.indexOf('%') !== -1 && !(Boolean(window[chrome]) && Boolean(window[chrome][webstore])) && this.parent.allowGrouping) {\n var elementWidth = this.parent.element.offsetWidth;\n width = parseInt(width, 10) / 100 * elementWidth;\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 mHdr = this.parent.getHeaderContent().querySelector('.e-movableheader');\n var mCont = this.parent.getContent().querySelector('.e-movablecontent');\n\n if (frzCols && index >= frzCols && mHdr && mHdr.querySelector('colgroup')) {\n headerCol = mHdr.querySelector('colgroup').children[index - frzCols];\n } else if (this.parent.enableColumnVirtualization && frzCols && mHdr.scrollLeft > 0) {\n var colGroup = mHdr.querySelector('colgroup');\n headerCol = colGroup.children[colGroup.children.length - 1 - index];\n } else {\n headerCol = header.querySelector('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('.e-movablecontent').querySelector('colgroup').children[index - frzCols];\n } else if (this.parent.enableColumnVirtualization && frzCols && mCont.scrollLeft > 0) {\n var colGroup = this.parent.getContent().querySelector('.e-movablecontent').querySelector('colgroup');\n contentCol = colGroup.children[colGroup.children.length - 1 - index];\n } else {\n contentCol = content.querySelector('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 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 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 = ['e-gridheader', 'e-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.frozenColumns && isNullOrUndefined(column.width) && column.index < this.parent.frozenColumns) {\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\n if (tableType === 'movable') {\n columns.splice(0, this.parent.getFrozenColumns());\n } else if (tableType === 'freeze') {\n columns.splice(this.parent.getFrozenColumns(), columns.length);\n }\n\n return formatUnit(this.getTableWidth(columns));\n };\n\n ColumnWidthService.prototype.setWidthToFrozenTable = function () {\n var freezeWidth = this.calcMovableOrFreezeColWidth('freeze');\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 if (this.parent.getHeaderContent().querySelector('.e-movableheader').firstElementChild) {\n this.parent.getHeaderContent().querySelector('.e-movableheader').firstElementChild.style.width = movableWidth;\n }\n\n this.parent.getContent().querySelector('.e-movablecontent').firstElementChild.style.width = movableWidth;\n };\n\n ColumnWidthService.prototype.setWidthToFrozenEditTable = function () {\n var freezeWidth = this.calcMovableOrFreezeColWidth('freeze');\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 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.getFrozenColumns()) {\n this.setWidthToFrozenTable();\n this.setWidthToMovableTable();\n } else {\n if (this.parent.detailTemplate || this.parent.childGrid) {\n this.setColumnWidth(new Column({\n width: '30px'\n }));\n }\n\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 return ColumnWidthService;\n}();\n\nexport { ColumnWidthService };","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';\n/**\n * FocusStrategy class\n * @hidden\n */\n\nvar FocusStrategy = function () {\n function FocusStrategy(parent) {\n this.currentInfo = {};\n this.oneTime = true;\n this.swap = {};\n this.forget = true;\n this.skipFocus = true;\n this.focusByClick = false;\n this.prevIndexes = {};\n this.refMatrix = this.refreshMatrix(true);\n this.actions = ['downArrow', 'upArrow'];\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.frozenColumns !== 0);\n\n if (!this.parent.enableHeaderFocus && !this.parent.getCurrentViewRecords().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 var isContent = !isNullOrUndefined(closest(e.target, '.e-gridcontent'));\n var isHeader = !isNullOrUndefined(closest(e.target, '.e-gridheader'));\n isContent = isContent && isHeader ? !isContent : isContent;\n var isFrozen = !isNullOrUndefined(closest(e.target, '.e-frozencontent')) || !isNullOrUndefined(closest(e.target, '.e-frozenheader'));\n\n if (!isContent && isNullOrUndefined(closest(e.target, '.e-gridheader')) || e.target.classList.contains('e-content') || !isNullOrUndefined(closest(e.target, '.e-unboundcell'))) {\n return;\n }\n\n this.setActive(isContent, isFrozen);\n\n if (!isContent && isNullOrUndefined(closest(e.target, '.e-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);\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);\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.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 (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, '.e-gridcontent') === null && closest(target, '.e-gridheader') === null || e.action === 'space' && !target.classList.contains('e-gridchkbox') && closest(target, '.e-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.infiniteScrollSettings.enableScroll) {\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\n if (data.isAdd || Object.keys(data.virtualData).length || isKeyFocus || data.isCancel) {\n data.isCancel = false;\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 this.currentInfo.elementToFocus.focus();\n }\n }\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) {\n this.active = content ? isFrozen ? this.fContent : this.content : isFrozen ? this.fHeader : 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.infiniteScrollSettings.enableScroll) {\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.frozenColumns !== 0);\n this.resetFocus();\n };\n /** @hidden */\n\n\n FocusStrategy.prototype.focusContent = function () {\n this.setActive(true, this.parent.frozenColumns !== 0);\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.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 && !_this.header) {\n _this.header = new HeaderFocus(_this.parent);\n }\n\n var cFocus = content ? e.args && e.args.isFrozen ? _this.fContent : _this.content : e.args && e.args.isFrozen ? _this.fHeader : _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 var frozenColumnsCount = _this.parent.getFrozenColumns();\n\n if (e.name === 'batchAdd' && frozenColumnsCount) {\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 } 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 : _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.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.parent.on(event.keyPressed, this.onKeyPress, this);\n this.parent.on(event.click, this.onClick, this);\n this.parent.on(event.contentReady, this.refMatrix, this);\n this.parent.on(event.partialRefresh, this.refMatrix, this);\n this.parent.on(event.headerRefreshed, this.refreshMatrix(), this);\n this.parent.on('close-edit', this.restoreFocus, this);\n this.parent.on('restore-Focus', this.restoreFocus, this);\n var evts = ['start-edit', 'start-add'];\n\n for (var i = 0; i < evts.length; i++) {\n this.parent.on(evts[i], this.clearIndicator, this);\n }\n\n var actions = ['sorting', 'filtering'];\n\n for (var j = 0; j < actions.length; j++) {\n this.parent.on(actions[j] + \"-complete\", this.restoreFocus, this);\n }\n\n var actionsG = ['grouping', 'ungrouping'];\n\n for (var k = 0; k < actionsG.length; k++) {\n this.parent.on(actionsG[k] + \"-complete\", this.restoreFocusWithAction, this);\n }\n\n this.parent.on(event.batchAdd, this.refMatrix, this);\n this.parent.on(event.batchCancel, this.refMatrix, this);\n this.parent.on(event.batchDelete, this.refMatrix, this);\n this.parent.on(event.detailDataBound, this.refMatrix, this);\n this.parent.on(event.onEmpty, this.refMatrix, this);\n this.parent.on(event.cellFocused, this.internalCellFocus, this);\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 this.parent.off(event.keyPressed, this.onKeyPress);\n this.parent.off(event.click, this.onClick);\n this.parent.off(event.contentReady, this.refMatrix);\n this.parent.off(event.partialRefresh, this.refMatrix);\n this.parent.off(event.headerRefreshed, this.refreshMatrix());\n this.parent.off('close-edit', this.restoreFocus);\n this.parent.off('restore-focus', this.restoreFocus);\n var evts = ['start-edit', 'start-add'];\n\n for (var i = 0; i < evts.length; i++) {\n this.parent.off(evts[i], this.clearOutline);\n }\n\n var actions = ['sorting', 'filtering'];\n\n for (var j = 0; j < actions.length; j++) {\n this.parent.off(actions[j] + \"-complete\", this.restoreFocus);\n }\n\n var actionsG = ['grouping', 'ungrouping'];\n\n for (var k = 0; k < actionsG.length; k++) {\n this.parent.on(actionsG[k] + \"-complete\", this.restoreFocusWithAction);\n }\n\n this.parent.off(event.batchAdd, this.refMatrix);\n this.parent.off(event.batchDelete, this.refMatrix);\n this.parent.off(event.batchCancel, this.refMatrix);\n this.parent.off(event.detailDataBound, this.refMatrix);\n this.parent.off(event.onEmpty, this.refMatrix);\n this.parent.off(event.cellFocused, this.internalCellFocus);\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.infiniteScrollSettings.enableScroll) {\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 ? {\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.frozenColumns === 0 && 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.frozenColumns !== 0\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 = function () {\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\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 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, 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 = function () {\n function ContentFocus(parent) {\n var _this = this;\n\n this.matrix = new Matrix();\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.frozenColumns ? 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].querySelectorAll('.e-indentcell').length + this.getTable().rows[rowIndex].querySelectorAll('.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('e-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 target = target.classList.contains('e-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('e-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) {\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\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 ? 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.jump = function (action, current) {\n var frozenSwap = this.parent.frozenColumns > 0 && (action === 'leftArrow' || action === 'shiftTab') && current[1] === 0;\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.matrix.current[0] + 1;\n this.matrix.current[1] = -1;\n frozenSwap = this.parent.frozenColumns > 0;\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.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('e-row')) {\n var rowIndex = parseInt(row.getAttribute('aria-rowindex'), 10);\n isHeaderFocus = rowIndex > 0;\n }\n\n var info = {\n swap: !isHeaderFocus ? (action === 'upArrow' || enterFrozen) && current[0] === 0 || frozenSwap : false,\n toHeader: (action === 'upArrow' || enterFrozen) && current[0] === 0,\n toFrozen: frozenSwap\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 (action === 'rightArrow' || action === 'tab') {\n current[0] = previous[0];\n current[1] = -1;\n } else 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('e-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('aria-rowindex'), 10), rIndex), Math.min(parseInt(info.element.getAttribute('aria-colindex'), 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\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('e-rowcell');\n }\n\n if ((action === 'shiftUp' || action === 'shiftDown') && cell.classList.contains('e-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('e-rowcell') && !cell.classList.contains('e-unboundcell') && !cell.classList.contains('e-templatecell') && !cell.classList.contains('e-detailcell') : true;\n };\n\n return ContentFocus;\n}();\n\nexport { ContentFocus };\n/**\n * @hidden\n */\n\nvar HeaderFocus = function (_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.getFrozenColumns() ? 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('e-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 info.elementToFocus = this.getFocusable(info.element);\n info.outline = !info.element.classList.contains('e-filterbarcell');\n return info;\n };\n\n HeaderFocus.prototype.selector = function (row, cell) {\n return cell.visible && (cell.column.field !== undefined || cell.isTemplate) || cell.column.type === 'checkbox' || cell.cellType === CellType.StackedHeader;\n };\n\n HeaderFocus.prototype.jump = function (action, current) {\n var frozenSwap = this.parent.frozenColumns > 0 && (action === 'leftArrow' || action === 'shiftTab') && current[1] === 0;\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'enter';\n var isLastCell;\n var lastRow;\n var headerSwap = frozenSwap;\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.frozenColumns > 0 && 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 || frozenSwap || action === 'tab' && lastRow && isLastCell,\n toHeader: headerSwap,\n toFrozen: frozenSwap\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 (action === 'upArrow' || action === 'shiftEnter') {\n current1[0] = this.matrix.matrix.length;\n current1[1] = previous[1];\n } else if (action === 'rightArrow' || action === 'tab') {\n current1[0] = previous[0];\n current1[1] = -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 = function (_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 return {\n swap: (action === 'upArrow' || enterFrozen) && current[0] === 0 || (action === 'tab' || action === 'rightArrow') && current[1] === this.matrix.columns,\n toHeader: (action === 'upArrow' || enterFrozen) && current[0] === 0,\n toFrozen: (action === 'upArrow' || enterFrozen) && current[0] === 0\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 (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 } else 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 = function (_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 return {\n swap: (action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1 || (action === 'rightArrow' || action === 'tab') && current[1] === this.matrix.columns,\n toHeader: (action === 'rightArrow' || 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 (action === 'leftArrow' || action === 'shiftTab') {\n current3[0] = previous[0];\n current3[1] = active.matrix.columns + 1;\n } else 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 = function () {\n function SearchBox(searchBox) {\n this.searchBox = searchBox;\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 };","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 = function (_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 };","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 = function (_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 return ColumnChooserSettings;\n}(ChildProperty);\n\nexport { ColumnChooserSettings };","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 } from '@syncfusion/ej2-base';\nimport { Query } from '@syncfusion/ej2-data';\nimport { setCssInGridPopUp, getPosition, isGroupAdaptive, parentsUntil, addRemoveActiveClasses, removeAddCboxClasses } from '../base/util';\nimport * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { iterateExtend } from '../base/util';\n/**\n * The `Selection` module is used to handle cell and row selection.\n */\n\nvar Selection = function () {\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 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.isCancelDeSelect = false;\n this.isPreventCellSelect = false;\n this.disableUI = false;\n this.isPersisted = false;\n this.cmdKeyPressed = false;\n /**\n * @hidden\n */\n\n this.autoFillRLselection = true;\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 EventHandler.add(this.parent.getContent(), 'mousedown', this.mouseDownHandler, this);\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 (args.cellIndex || 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 };\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('.e-gridheader') && !gridElement.querySelector('.e-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 };\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.getFrozenColumns() && this.parent.getContent().querySelector('.e-movablecontent')) {\n return gObj.getMovableRowByIndex(index);\n }\n\n return null;\n };\n\n Selection.prototype.getCurrentBatchRecordChanges = function () {\n var gObj = this.parent;\n var added = 'addedRecords';\n var deleted = 'deletedRecords';\n\n if (gObj.editSettings.mode === 'Batch' && gObj.editModule) {\n var currentRecords = iterateExtend(this.parent.getCurrentViewRecords());\n currentRecords = this.parent.editModule.getBatchChanges()[added].concat(currentRecords);\n var deletedRecords = this.parent.editModule.getBatchChanges()[deleted];\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 selectData;\n var isRemoved = false;\n\n if (gObj.enableVirtualization && index > -1) {\n if (selectedRow) {\n selectData = 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 this.parent.notify(events.selectVirtualRow, {\n selectedIndex: index\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.actualTarget = this.isInteracted ? this.actualTarget : null;\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 };\n args = this.addMovableArgs(args, selectedMovableRow);\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 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) {\n _this.clearSelectedRow(index);\n\n isRemoved = true;\n _this.removed = isRemoved;\n\n _this.selectRowCallBack();\n } else if (!isRowSelected && _this.selectionSettings.persistSelection) {\n _this.selectRowCallBack();\n }\n\n if (!_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\n if (!isToggle && !isRemoved) {\n if (this.selectedRowIndexes.indexOf(index) <= -1) {\n this.updateRowSelection(selectedRow, index);\n\n if (gObj.getFrozenColumns()) {\n this.updateRowSelection(selectedMovableRow, index);\n }\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 };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionComplete(args, events.rowSelected);\n }\n\n this.isInteracted = false;\n this.updateRowProps(index);\n };\n\n Selection.prototype.addMovableArgs = function (targetObj, mRow) {\n if (this.parent.getFrozenColumns()) {\n var mObj = {\n mRow: mRow,\n previousMovRow: this.parent.getMovableRows()[this.prevRowIndex]\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 var selectedRow = gObj.getRowByIndex(rowIndex);\n var selectedMovableRow = this.getSelectedMovableRow(rowIndex);\n var frzCols = gObj.getFrozenColumns();\n var can = 'cancel';\n var selectedData = this.getCurrentBatchRecordChanges()[rowIndexes[0]];\n\n if (!this.isRowType() || this.isEditing()) {\n return;\n }\n\n var args = {\n cancel: false,\n rowIndexes: rowIndexes,\n row: selectedRow,\n rowIndex: rowIndex,\n target: this.actualTarget,\n prevRow: gObj.getRows()[this.prevRowIndex],\n previousRowIndex: this.prevRowIndex,\n isCtrlPressed: this.isMultiCtrlRequest,\n isShiftPressed: this.isMultiShiftRequest,\n data: selectedData\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.parent.trigger(events.rowSelecting, this.fDataUpdate(args), function (args) {\n if (!isNullOrUndefined(args) && args[can] === true) {\n return;\n }\n\n _this.clearRow();\n\n _this.selectRowIndex(rowIndexes.slice(-1)[0]);\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\n _this.updateRowSelection(gObj.getRowByIndex(rowIdx), rowIdx);\n\n if (frzCols) {\n _this.updateRowSelection(gObj.getMovableRowByIndex(rowIdx), rowIdx);\n }\n\n _this.updateRowProps(rowIndex);\n }\n } else {\n _this.updateRowSelection(gObj.getRowByIndex(rowIndex), rowIndex);\n\n if (frzCols) {\n _this.updateRowSelection(gObj.getMovableRowByIndex(rowIndex), rowIndex);\n }\n\n _this.updateRowProps(rowIndex);\n }\n\n args = {\n rowIndexes: rowIndexes,\n row: selectedRow,\n rowIndex: rowIndex,\n target: _this.actualTarget,\n prevRow: gObj.getRows()[_this.prevRowIndex],\n previousRowIndex: _this.prevRowIndex,\n data: isBlazor() ? selectedData : _this.getSelectedRecords(),\n isInteracted: _this.isInteracted\n };\n args = _this.addMovableArgs(args, selectedMovableRow);\n\n if (_this.isRowSelected) {\n _this.onActionComplete(args, events.rowSelected);\n }\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\n\n Selection.prototype.addRowsToSelection = function (rowIndexes) {\n var _this = this;\n\n var gObj = this.parent;\n var can = 'cancel';\n var target = this.target;\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 frzCols = gObj.getFrozenColumns();\n\n if (!this.isRowType() || this.isEditing()) {\n return;\n }\n\n var args;\n var checkboxColumn = this.parent.getColumns().filter(function (col) {\n return col.type === 'checkbox';\n });\n\n var _loop_1 = function _loop_1(rowIndex) {\n var rowObj = this_1.getRowObj(rowIndex);\n var isUnSelected = this_1.selectedRowIndexes.indexOf(rowIndex) > -1;\n this_1.selectRowIndex(rowIndex);\n\n if (isUnSelected && ((checkboxColumn.length ? true : this_1.selectionSettings.enableToggle) || this_1.isMultiCtrlRequest)) {\n this_1.rowDeselect(events.rowDeselecting, [rowIndex], [rowObj.data], [selectedRow], [rowObj.foreignKeyData], target);\n\n if (this_1.isCancelDeSelect) {\n return {\n value: void 0\n };\n }\n\n this_1.selectedRowIndexes.splice(this_1.selectedRowIndexes.indexOf(rowIndex), 1);\n this_1.selectedRecords.splice(this_1.selectedRecords.indexOf(selectedRow), 1);\n selectedRow.removeAttribute('aria-selected');\n this_1.addRemoveClassesForRow(selectedRow, false, null, 'e-selectionbackground', 'e-active');\n\n if (selectedMovableRow) {\n this_1.selectedRecords.splice(this_1.selectedRecords.indexOf(selectedMovableRow), 1);\n selectedMovableRow.removeAttribute('aria-selected');\n this_1.addRemoveClassesForRow(selectedMovableRow, false, null, 'e-selectionbackground', 'e-active');\n }\n\n this_1.rowDeselect(events.rowDeselected, [rowIndex], [rowObj.data], [selectedRow], [rowObj.foreignKeyData], target, [selectedMovableRow]);\n this_1.isInteracted = false;\n } else {\n args = {\n cancel: false,\n data: rowObj.data,\n rowIndex: rowIndex,\n row: selectedRow,\n target: this_1.actualTarget,\n prevRow: gObj.getRows()[this_1.prevRowIndex],\n previousRowIndex: this_1.prevRowIndex,\n isCtrlPressed: this_1.isMultiCtrlRequest,\n isShiftPressed: this_1.isMultiShiftRequest,\n foreignKeyData: rowObj.foreignKeyData,\n isInteracted: this_1.isInteracted\n };\n args = this_1.addMovableArgs(args, selectedMovableRow);\n this_1.parent.trigger(events.rowSelecting, this_1.fDataUpdate(args), function (args) {\n if (!isNullOrUndefined(args) && args[can] === true) {\n return;\n }\n\n if (_this.isSingleSel()) {\n _this.clearRow();\n }\n\n _this.updateRowSelection(selectedRow, rowIndex);\n\n if (frzCols) {\n _this.updateRowSelection(selectedMovableRow, rowIndex);\n }\n });\n }\n\n if (!isUnSelected) {\n args = {\n data: rowObj.data,\n rowIndex: rowIndex,\n row: selectedRow,\n target: this_1.actualTarget,\n prevRow: gObj.getRows()[this_1.prevRowIndex],\n previousRowIndex: this_1.prevRowIndex,\n foreignKeyData: rowObj.foreignKeyData,\n isInteracted: this_1.isInteracted\n };\n args = this_1.addMovableArgs(args, selectedMovableRow);\n this_1.onActionComplete(args, events.rowSelected);\n }\n\n this_1.isInteracted = false;\n this_1.updateRowProps(rowIndex);\n\n if (this_1.isSingleSel()) {\n return \"break\";\n }\n };\n\n var this_1 = this;\n\n for (var _i = 0, rowIndexes_2 = rowIndexes; _i < rowIndexes_2.length; _i++) {\n var rowIndex = rowIndexes_2[_i];\n\n var state_1 = _loop_1(rowIndex);\n\n if (typeof state_1 === \"object\") return state_1.value;\n if (state_1 === \"break\") break;\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.target) {\n var selectedEle = this.target.parentElement;\n\n if (!this.disableUI) {\n selectedEle.removeAttribute('aria-selected');\n this.addRemoveClassesForRow(selectedEle, false, true, 'e-selectionbackground', 'e-active');\n }\n\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 && !isNullOrUndefined(selectedRow)) {\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\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.getFrozenColumns() && 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 (!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.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 this.isInteracted = false;\n\n if (this.parent.isPersistSelection) {\n this.persistSelectedData = [];\n this.selectedRowState = {};\n }\n\n this.clearRowSelection();\n this.clearCellSelection();\n this.prevRowIndex = undefined;\n this.enableSelectMultiTouch = false;\n }\n };\n /**\n * Deselects the currently selected rows.\n * @return {void}\n */\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 rowIndex_1 = [];\n var frzCols = gObj.getFrozenColumns();\n var foreignKeyData_1 = [];\n var target_1 = this.target;\n var currentViewData = this.parent.getCurrentViewRecords();\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 (frzCols) {\n mRow_1.push(gObj.getMovableRows()[this.selectedRowIndexes[i]]);\n }\n }\n\n if (this.selectionSettings.persistSelection) {\n this.isInteracted = 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.isInteracted || _this.checkSelectAllClicked)) {\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 _this.updatePersistCollection(element[j], false);\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.updatePersistCollection(movableRow, false);\n }\n }\n\n _this.selectedRowIndexes = [];\n _this.selectedRecords = [];\n _this.isRowSelected = false;\n\n _this.selectRowIndex(-1);\n\n _this.rowDeselect(events.rowDeselected, rowIndex_1, data_1, row_1, foreignKeyData_1, target_1, mRow_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 });\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) {\n var _this = this;\n\n if (this.selectionSettings.persistSelection && this.isInteracted || !this.selectionSettings.persistSelection) {\n var cancl_1 = 'cancel';\n var rowDeselectObj = {\n rowIndex: rowIndex,\n data: this.selectionSettings.persistSelection && this.parent.checkAllRows === 'Uncheck' ? this.persistSelectedData : data,\n foreignKeyData: foreignKeyData,\n cancel: false,\n target: this.actualTarget,\n isInteracted: this.isInteracted\n };\n\n if (!isBlazor() || this.parent.isJsComponent) {\n var rowInString = 'row';\n rowDeselectObj[rowInString] = row;\n } else {\n var rowIndex_2 = 'rowIndex';\n var data_2 = 'data';\n rowDeselectObj[rowIndex_2] = rowDeselectObj[rowIndex_2][rowDeselectObj[rowIndex_2].length - 1];\n rowDeselectObj[data_2] = rowDeselectObj[data_2][rowDeselectObj[data_2].length - 1];\n }\n\n this.parent.trigger(type, this.parent.getFrozenColumns() ? __assign({}, rowDeselectObj, {\n mRow: mRow\n }) : rowDeselectObj, function (args) {\n _this.isCancelDeSelect = args[cancl_1];\n\n if (!_this.isCancelDeSelect || !_this.isInteracted && !_this.checkSelectAllClicked) {\n _this.updatePersistCollection(row[0], false);\n\n _this.updateCheckBoxes(row[0], undefined, rowIndex[0]);\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 frzCols = gObj.getFrozenColumns();\n\n if (frzCols) {\n if (cellIndex.cellIndex >= frzCols) {\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 var selectedTable;\n var cIdx;\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 } 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 = {\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\n if (!isBlazor()) {\n var previousRowCellIndex = 'previousRowCellIndex';\n args[previousRowCellIndex] = _this.prevECIdxs;\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 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\n if (!isBlazor()) {\n var previousRowCellIndex = 'previousRowCellIndex';\n cellSelectedArgs[previousRowCellIndex] = _this.prevECIdxs;\n }\n\n _this.onActionComplete(cellSelectedArgs, events.cellSelected);\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 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\n if (!isBlazor()) {\n var previousRowCellIndex = 'previousRowCellIndex';\n cellSelectArgs[previousRowCellIndex] = this.prevECIdxs;\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 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\n if (!isBlazor()) {\n var previousRowCellIndex = 'previousRowCellIndex';\n cellSelectedArgs[previousRowCellIndex] = this.prevECIdxs;\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\n\n Selection.prototype.addCellsToSelection = function (cellIndexes) {\n if (!this.isCellType()) {\n return;\n }\n\n var gObj = this.parent;\n var selectedTable;\n var cIdx;\n var selectedCell;\n var frzCols = gObj.getFrozenColumns();\n var index;\n this.currentIndex = cellIndexes[0].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 this.hideAutoFill();\n var rowObj;\n\n if (frzCols && cellIndexes[0].cellIndex >= frzCols) {\n rowObj = gObj.getMovableRowsObject()[cellIndexes[0].rowIndex];\n } else {\n rowObj = this.getRowObj(cellIndexes[0].rowIndex);\n }\n\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 foreignKeyData.push(rowObj.cells[frzCols && cellIndexes[0].cellIndex >= frzCols ? cellIndex.cellIndex - frzCols : cellIndex.cellIndex].foreignKeyData);\n var 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\n if (!isBlazor()) {\n var previousRowCellIndex = 'previousRowCellIndex';\n args[previousRowCellIndex] = this.prevECIdxs;\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 = {\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\n if (!isBlazor()) {\n var previousRowCellIndex = 'previousRowCellIndex';\n cellSelectedArgs[previousRowCellIndex] = this.prevECIdxs;\n }\n\n this.onActionComplete(cellSelectedArgs, events.cellSelected);\n }\n\n this.updateCellProps(cellIndex, cellIndex);\n }\n };\n\n Selection.prototype.getColIndex = function (rowIndex, index) {\n var cells;\n var frzCols = this.parent.getFrozenColumns();\n\n if (frzCols) {\n if (index >= frzCols) {\n cells = this.parent.getMovableDataRows()[rowIndex] && this.parent.getMovableDataRows()[rowIndex].querySelectorAll('td.e-rowcell');\n }\n }\n\n if (!cells) {\n cells = this.parent.getDataRows()[rowIndex] && this.parent.getDataRows()[rowIndex].querySelectorAll('td.e-rowcell');\n }\n\n if (cells) {\n for (var m = 0; m < cells.length; m++) {\n var colIndex = parseInt(cells[m].getAttribute('aria-colindex'), 10);\n\n if (colIndex === index) {\n if (frzCols) {\n if (index >= frzCols) {\n m += frzCols;\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('aria-colindex'), 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('e-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('e-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 selectedTable = void 0;\n var frzCols = gObj.getFrozenColumns();\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 if (rowCell[i].cellIndexes[j] < frzCols) {\n cells.push(gObj.getCellFromIndex(rowCell[i].rowIndex, rowCell[i].cellIndexes[j]));\n } else {\n cells.push(gObj.getMovableCellFromIndex(rowCell[i].rowIndex, rowCell[i].cellIndexes[j]));\n }\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.bdrBottom) {\n this.hideBorders();\n }\n\n this.selectedRowCellIndexes = [];\n this.isCellSelected = false;\n this.cellDeselect(events.cellDeselected, rowCell, data, cells, foreignKeyData);\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.getFrozenColumns()) {\n mRows = gObj.getMovableDataRows();\n rows = gObj.addMovableRows(rows, mRows);\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].querySelectorAll('.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('aria-rowindex'), 10);\n\n if (!this.isCellDrag) {\n this.hideAutoFill();\n this.selectRowsByRange(this.startDIndex, rowIndex);\n } else {\n var td = parentsUntil(e.target, 'e-rowcell');\n\n if (td) {\n this.startAFCell = this.startCell;\n this.endAFCell = parentsUntil(e.target, 'e-rowcell');\n this.selectLikeExcel(e, rowIndex, parseInt(td.getAttribute('aria-colindex'), 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 if (!this.bdrBottom) {\n this.createBorders();\n }\n\n this.positionBorders();\n } else {\n this.hideBorders();\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, 'tbody').querySelectorAll('.e-row:not(.e-hiddenrow)'));\n return cell.parentElement === rows[rows.length - 1];\n };\n\n Selection.prototype.positionBorders = function () {\n this.updateStartEndCells();\n\n if (!this.startCell || !this.bdrLeft || !this.selectedRowCellIndexes.length) {\n return;\n }\n\n this.showBorders();\n var stOff = this.startCell.getBoundingClientRect();\n var endOff = this.endCell.getBoundingClientRect();\n var colWidth = this.isLastCell(this.endCell) ? 2 : 0;\n var rowHeight = this.isLastRow(this.endCell) ? 2 : 0;\n var parentOff = this.startCell.offsetParent.getBoundingClientRect();\n this.bdrLeft.style.left = stOff.left - parentOff.left + 'px';\n this.bdrLeft.style.top = stOff.top - parentOff.top + 'px';\n this.bdrLeft.style.height = endOff.top - stOff.top > 0 ? endOff.top - parentOff.top + endOff.height + 1 - (stOff.top - parentOff.top) - rowHeight + 'px' : endOff.height + 'px';\n this.bdrRight.style.left = endOff.left - parentOff.left + endOff.width - colWidth + 'px';\n this.bdrRight.style.top = this.bdrLeft.style.top;\n this.bdrRight.style.height = parseInt(this.bdrLeft.style.height, 10) - rowHeight + 'px';\n this.bdrTop.style.left = this.bdrLeft.style.left;\n this.bdrTop.style.top = this.bdrRight.style.top;\n this.bdrTop.style.width = parseInt(this.bdrRight.style.left, 10) - parseInt(this.bdrLeft.style.left, 10) + 1 + 'px';\n this.bdrBottom.style.left = this.bdrLeft.style.left;\n this.bdrBottom.style.top = parseInt(this.bdrLeft.style.top, 10) + parseInt(this.bdrLeft.style.height, 10) - rowHeight + 'px';\n this.bdrBottom.style.width = this.bdrTop.style.width;\n };\n\n Selection.prototype.createBorders = function () {\n if (!this.bdrLeft) {\n this.bdrLeft = this.parent.getContentTable().parentElement.appendChild(createElement('div', {\n className: 'e-xlsel',\n id: this.parent.element.id + '_bdrleft',\n styles: 'width: 2px;'\n }));\n this.bdrRight = this.parent.getContentTable().parentElement.appendChild(createElement('div', {\n className: 'e-xlsel',\n id: this.parent.element.id + '_bdrright',\n styles: 'width: 2px;'\n }));\n this.bdrBottom = this.parent.getContentTable().parentElement.appendChild(createElement('div', {\n className: 'e-xlsel',\n id: this.parent.element.id + '_bdrbottom',\n styles: 'height: 2px;'\n }));\n this.bdrTop = this.parent.getContentTable().parentElement.appendChild(createElement('div', {\n className: 'e-xlsel',\n id: this.parent.element.id + '_bdrtop',\n styles: 'height: 2px;'\n }));\n }\n };\n\n Selection.prototype.showBorders = function () {\n if (this.bdrLeft) {\n this.bdrLeft.style.display = '';\n this.bdrRight.style.display = '';\n this.bdrBottom.style.display = '';\n this.bdrTop.style.display = '';\n }\n };\n\n Selection.prototype.hideBorders = function () {\n if (this.bdrLeft) {\n this.bdrLeft.style.display = 'none';\n this.bdrRight.style.display = 'none';\n this.bdrBottom.style.display = 'none';\n this.bdrTop.style.display = 'none';\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 this.showBorders();\n var stOff = this.startAFCell.getBoundingClientRect();\n var endOff = this.endAFCell.getBoundingClientRect();\n var colWidth = this.isLastCell(this.endAFCell) ? 2 : 0;\n var rowHeight = this.isLastRow(this.endAFCell) ? 2 : 0;\n var parentOff = this.startAFCell.offsetParent.getBoundingClientRect();\n this.bdrAFLeft.style.left = stOff.left - parentOff.left + 'px';\n this.bdrAFLeft.style.top = stOff.top - parentOff.top + 'px';\n this.bdrAFLeft.style.height = endOff.top - stOff.top > 0 ? endOff.top - parentOff.top + endOff.height + 1 - (stOff.top - parentOff.top) - rowHeight + 'px' : endOff.height + 'px';\n this.bdrAFRight.style.left = endOff.left - parentOff.left + endOff.width - colWidth + 'px';\n this.bdrAFRight.style.top = this.bdrAFLeft.style.top;\n this.bdrAFRight.style.height = parseInt(this.bdrAFLeft.style.height, 10) - rowHeight + 'px';\n this.bdrAFTop.style.left = this.bdrAFLeft.style.left;\n this.bdrAFTop.style.top = this.bdrAFRight.style.top;\n this.bdrAFTop.style.width = parseInt(this.bdrAFRight.style.left, 10) - parseInt(this.bdrAFLeft.style.left, 10) + 1 + 'px';\n this.bdrAFBottom.style.left = this.bdrAFLeft.style.left;\n this.bdrAFBottom.style.top = parseInt(this.bdrAFLeft.style.top, 10) + parseInt(this.bdrAFLeft.style.height, 10) - rowHeight + 'px';\n this.bdrAFBottom.style.width = this.bdrAFTop.style.width;\n };\n\n Selection.prototype.createAFBorders = function () {\n if (!this.bdrAFLeft) {\n this.bdrAFLeft = this.parent.getContentTable().parentElement.appendChild(createElement('div', {\n className: 'e-xlsel',\n id: this.parent.element.id + '_bdrafleft',\n styles: 'width: 2px;'\n }));\n this.bdrAFRight = this.parent.getContentTable().parentElement.appendChild(createElement('div', {\n className: 'e-xlsel',\n id: this.parent.element.id + '_bdrafright',\n styles: 'width: 2px;'\n }));\n this.bdrAFBottom = this.parent.getContentTable().parentElement.appendChild(createElement('div', {\n className: 'e-xlsel',\n id: this.parent.element.id + '_bdrafbottom',\n styles: 'height: 2px;'\n }));\n this.bdrAFTop = this.parent.getContentTable().parentElement.appendChild(createElement('div', {\n className: 'e-xlsel',\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 /* tslint:disable-next-line:max-func-body-length */\n\n\n Selection.prototype.selectLikeAutoFill = function (e, isApply) {\n var startrowIdx = parseInt(parentsUntil(this.startAFCell, 'e-row').getAttribute('aria-rowindex'), 10);\n var startCellIdx = parseInt(this.startAFCell.getAttribute('aria-colindex'), 10);\n var endrowIdx = parseInt(parentsUntil(this.endAFCell, 'e-row').getAttribute('aria-rowindex'), 10);\n var endCellIdx = parseInt(this.endAFCell.getAttribute('aria-colindex'), 10);\n var rowLen = this.selectedRowCellIndexes.length - 1;\n var colLen = this.selectedRowCellIndexes[0].cellIndexes.length - 1;\n var col;\n\n switch (true) {\n //direction \n case !isApply && this.endAFCell.classList.contains('e-cellselectionbackground') && !!parentsUntil(e.target, 'e-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, 'e-row').getAttribute('aria-rowindex'), 10);\n endCellIdx = parseInt(this.endAFCell.getAttribute('aria-colindex'), 10);\n\n if (!isApply) {\n this.drawAFBorders();\n } else {\n var cellIdx = parseInt(this.endCell.getAttribute('aria-colindex'), 10);\n\n for (var i = startrowIdx; i <= endrowIdx; i++) {\n var cells = [].slice.call(this.parent.getDataRows()[i].querySelectorAll('.e-cellselectionbackground'));\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 = [].slice.call(this.parent.getDataRows()[i].querySelectorAll('.e-cellselectionbackground'));\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('aria-rowindex'), 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 = [].slice.call(this.parent.getDataRows()[r].querySelectorAll('.e-cellselectionbackground'));\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('aria-rowindex'), 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 = [].slice.call(this.parent.getDataRows()[r].querySelectorAll('.e-cellselectionbackground'));\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, 'e-rowcell');\n } else {\n this.mUPTarget = null;\n }\n\n this.isDragged = false;\n this.updateAutoFillPosition();\n\n if (this.isAutoFillSel) {\n this.startAFCell = this.startCell;\n var lastCell = parentsUntil(e.target, 'e-rowcell');\n this.endAFCell = lastCell ? lastCell : this.endAFCell;\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 EventHandler.remove(document.body, '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 cells = [].slice.call(this.parent.getDataRows()[this.selectedRowCellIndexes[this.selectedRowCellIndexes.length - 1].rowIndex].querySelectorAll('.e-cellselectionbackground'));\n\n if (!this.parent.element.querySelector('#' + this.parent.element.id + '_autofill')) {\n this.autofill = createElement('div', {\n className: 'e-autofill',\n id: this.parent.element.id + '_autofill'\n });\n this.autofill.style.display = 'none';\n this.parent.getContentTable().parentElement.appendChild(this.autofill);\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) ? 5 : 0;\n this.autofill.style.left = clientRect.left - parentOff.left + clientRect.width - 4 - colWidth + 'px';\n this.autofill.style.top = clientRect.top - parentOff.top + clientRect.height - 3 - rowHeight + 'px';\n }\n\n this.autofill.style.display = '';\n } else {\n this.hideAutoFill();\n }\n };\n\n Selection.prototype.mouseDownHandler = function (e) {\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) {\n return;\n }\n\n if (e.shiftKey || e.ctrlKey) {\n e.preventDefault();\n }\n\n if (parentsUntil(target, 'e-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) {\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.querySelectorAll('.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('aria-rowindex'), 10);\n this.startCellIndex = parseInt(parentsUntil(this.startCell, 'e-rowcell').getAttribute('aria-colindex'), 10);\n }\n };\n\n Selection.prototype.updateStartCellsIndex = function () {\n if (this.startCell) {\n this.startIndex = parseInt(this.startCell.parentElement.getAttribute('aria-rowindex'), 10);\n this.startCellIndex = parseInt(parentsUntil(this.startCell, 'e-rowcell').getAttribute('aria-colindex'), 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('aria-rowindex'), 10);\n this.startDCellIndex = parseInt(parentsUntil(e.target, 'e-rowcell').getAttribute('aria-colindex'), 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 EventHandler.add(document.body, 'mouseup', this.mouseUpHandler, this);\n };\n\n Selection.prototype.clearSelAfterRefresh = function (e) {\n var isInfiniteScroll = this.parent.infiniteScrollSettings.enableScroll && 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.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.initialEnd, this.initializeSelection, this);\n this.parent.on(events.rowSelectionComplete, this.onActionComplete, this);\n this.parent.on(events.cellSelectionComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.cellFocused, this.onCellFocused, this);\n this.parent.on(events.beforeFragAppend, this.clearSelAfterRefresh, this);\n this.parent.on(events.columnPositionChanged, this.columnPositionChanged, this);\n this.parent.on(events.contentReady, this.initialEnd, 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.parent.on(events.rowsRemoved, this.rowsRemoved, this);\n this.parent.on(events.headerRefreshed, this.refreshHeader, this);\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 this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.initialEnd, this.initializeSelection);\n this.parent.off(events.rowSelectionComplete, this.onActionComplete);\n this.parent.off(events.cellSelectionComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.cellFocused, this.onCellFocused);\n this.parent.off(events.beforeFragAppend, this.clearSelAfterRefresh);\n this.parent.off(events.columnPositionChanged, this.columnPositionChanged);\n this.parent.removeEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.off(events.rowsRemoved, this.rowsRemoved);\n this.parent.off(events.headerRefreshed, this.refreshHeader);\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 }\n };\n\n Selection.prototype.render = function (e) {\n EventHandler.add(this.parent.getContent(), '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 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 }\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').querySelectorAll('.e-rowselect').length) {\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n };\n\n Selection.prototype.initialEnd = function () {\n this.parent.off(events.contentReady, this.initialEnd);\n this.selectRow(this.parent.selectedRowIndex);\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 for (var _i = 0, _a = this.getData(); _i < _a.length; _i++) {\n var data = _a[_i];\n this.selectedRowState[data[this.primaryKey]] = true;\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 (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.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('aria-rowindex'), 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, '.e-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 = [];\n\n if (!isBlazor()) {\n records = e.data;\n } else {\n records = this.getSelectedRecords();\n }\n\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 this.refreshPersistSelection();\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.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\n if (stateStr === 'Intermediate') {\n state = this.getCurrentBatchRecordChanges().some(function (data) {\n return data[_this.primaryKey] in _this.selectedRowState;\n });\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, '.e-rowcell');\n var checkObj = checkBox;\n var gObj = this.parent;\n this.isMultiCtrlRequest = true;\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('aria-rowindex'), 10);\n }\n\n if (this.parent.isPersistSelection && this.parent.element.querySelectorAll('.e-addedrow').length > 0) {\n ++rIndex;\n }\n\n this.rowCellSelectionHandler(rIndex, parseInt(target.getAttribute('aria-colindex'), 10));\n this.moveIntoUncheckCollection(closest(target, '.e-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.infiniteScrollSettings.enableScroll) && !this.parent.getDataModule().isRemote()) {\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 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 if (this.getCheckAllBox()) {\n var spanEle = this.getCheckAllBox().nextElementSibling;\n removeClass([spanEle], ['e-check', 'e-stop', 'e-uncheck']);\n\n if (checkedLen === this.totalRecordsCount && this.totalRecordsCount || (this.parent.enableVirtualization || this.parent.infiniteScrollSettings.enableScroll) && !this.parent.allowPaging && !this.parent.getDataModule().isRemote() && checkedLen === this.getData().length) {\n addClass([spanEle], ['e-check']);\n\n if (isInteraction) {\n this.getRenderer().setSelection(null, true, true);\n }\n\n this.parent.checkAllRows = 'Check';\n } else if (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 }\n\n if ((this.parent.enableVirtualization || this.parent.infiniteScrollSettings.enableScroll) && !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 (parentsUntil(target, 'e-row') || parentsUntil(target, 'e-headerchkcelldiv')) {\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.querySelectorAll('.e-checkselectall') ? 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 target = parentsUntil(target, 'e-rowcell');\n\n if (target && target.parentElement.classList.contains('e-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('aria-rowindex'), 10);\n }\n\n if (this.parent.isPersistSelection && this.parent.element.querySelectorAll('.e-addedrow').length > 0) {\n ++rIndex;\n }\n\n if (!this.mUPTarget || !this.mUPTarget.isEqualNode(target)) {\n this.rowCellSelectionHandler(rIndex, parseInt(target.getAttribute('aria-colindex'), 10));\n }\n\n if (this.parent.isCheckBoxSelection) {\n this.moveIntoUncheckCollection(closest(target, '.e-row'));\n this.setCheckAllState();\n }\n }\n\n if (!this.parent.isCheckBoxSelection && Browser.isDevice && !this.isSingleSel()) {\n this.showPopup(e);\n }\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('e-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, '.e-rowcell').classList.contains('e-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.hideBorders();\n }\n\n this.isDragged = false;\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('aria-rowindex'));\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.getFrozenColumns() ? (e.container.isHeader && e.element.tagName !== 'TD' && e.isJump || (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');\n var headerAction = e.container.isHeader && e.element.tagName !== 'TD' && !closest(e.element, '.e-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, '.e-rowcell'))) {\n var thLen = this.parent.getHeaderTable().querySelector('thead').childElementCount;\n rowIndex -= thLen;\n prev.rowIndex = 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.getFrozenColumns()) {\n var cIdx = Number(e.element.getAttribute('aria-colindex'));\n prev.cellIndex = 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) {\n return;\n }\n\n this.preventFocus = true;\n\n switch (e.keyArgs.action) {\n case 'downArrow':\n case 'upArrow':\n case 'enter':\n case 'shiftEnter':\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.preventFocus = false;\n this.positionBorders();\n this.updateAutoFillPosition();\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\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('aria-colindex'), 10);\n var frzCols = this.parent.getFrozenColumns();\n\n if (frzCols) {\n if (cIndex >= frzCols) {\n this.target = this.contentRenderer.getMovableRowByIndex(rowIndex).querySelectorAll('.e-rowcell')[cIndex - frzCols];\n } else {\n this.target = this.contentRenderer.getRowByIndex(rowIndex).querySelectorAll('.e-rowcell')[cIndex];\n }\n } else {\n this.target = this.contentRenderer.getRowByIndex(rowIndex).querySelectorAll('.e-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.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 this.selectCellsByRange(this.prevCIdxs, {\n rowIndex: rowIndex,\n cellIndex: cellIndex\n });\n this.isMultiShiftRequest = false;\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.querySelectorAll('.e-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 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.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 };\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 var isInfinitecroll = this.parent.infiniteScrollSettings.enableScroll && e.requestType === 'infiniteScroll';\n\n if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection && !isInfinitecroll) {\n this.disableUI = true;\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 return Selection;\n}();\n\nexport { Selection };","import { extend, isNullOrUndefined, isBlazor } 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 = function () {\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 if (isBlazor() && !this.parent.isJsComponent) {\n e.rows = null;\n }\n\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 };","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { iterateArrayOrObject, isActionPrevent } from '../base/util';\nimport * as events from '../base/constant';\n/**\n * The `ShowHide` module is used to control column visibility.\n */\n\nvar ShowHide = function () {\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) {\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, {\n instance: this,\n handler: this.setVisible,\n arg1: columns\n });\n return;\n }\n\n this.parent.trigger(events.actionBegin, {\n requestType: 'columnstate'\n });\n var currentViewCols = this.parent.getColumns();\n columns = isNullOrUndefined(columns) ? currentViewCols : columns;\n\n if (this.parent.allowSelection && this.parent.getSelectedRecords().length) {\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 if (this.parent.columnQueryMode !== 'All') {\n this.parent.refresh();\n }\n };\n\n return ShowHide;\n}();\n\nexport { ShowHide };","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 } from '../base/constant';\nimport { ColumnWidthService } from '../services/width-controller';\n/**\n * The `Scroll` module is used to handle scrolling behaviour.\n */\n\nvar Scroll = function () {\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('.e-content');\n\n if (this.parent.frozenRows && this.parent.height !== 'auto') {\n var tbody = this.parent.getHeaderContent().querySelector('tbody');\n mHdrHeight = tbody ? tbody.offsetHeight : 0;\n content.style.height = formatUnit(this.parent.height - mHdrHeight);\n } else {\n content.style.height = formatUnit(this.parent.height);\n }\n\n this.ensureOverflow(content);\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 content.querySelector('.e-headercontent').style[cssProps.border] = scrollWidth > 0 ? '1px' : '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('.e-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 '.e-gridcontent';\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.frozenColumns) {\n this.parent.headerModule.getMovableHeader().scrollLeft = this.previousValues.left;\n }\n };\n\n Scroll.prototype.onContentScroll = function (scrollTarget) {\n var _this = this;\n\n var element = scrollTarget;\n var isHeader = element.classList.contains('e-headercontent');\n return function (e) {\n if (_this.content.querySelector('tbody') === null || _this.parent.isPreventScrollEvent) {\n return;\n }\n\n if (!isNullOrUndefined(_this.parent.infiniteScrollModule) && _this.parent.infiniteScrollSettings.enableScroll) {\n _this.parent.notify(infiniteScrollHandler, e);\n }\n\n _this.parent.notify(virtualScrollEdit, {});\n\n var target = e.target;\n var left = target.scrollLeft;\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 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.onFreezeContentScroll = function (scrollTarget) {\n var _this = this;\n\n var element = scrollTarget;\n return function (e) {\n if (_this.content.querySelector('tbody') === null) {\n return;\n }\n\n var target = e.target;\n var top = target.scrollTop;\n\n if (_this.previousValues.top === top) {\n return;\n }\n\n element.scrollTop = top;\n _this.previousValues.top = top;\n\n if (_this.parent.isDestroyed) {\n return;\n }\n };\n };\n\n Scroll.prototype.onWheelScroll = function (scrollTarget) {\n var _this = this;\n\n var element = scrollTarget;\n return function (e) {\n if (_this.content.querySelector('tbody') === null) {\n return;\n }\n\n var top = element.scrollTop + (e.deltaMode === 1 ? e.deltaY * 30 : e.deltaY);\n\n if (_this.previousValues.top === top) {\n return;\n }\n\n e.preventDefault();\n _this.parent.getContent().querySelector('.e-frozencontent').scrollTop = top;\n element.scrollTop = top;\n _this.previousValues.top = top;\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 cont;\n var mHdr;\n\n var pageXY = _this.getPointXY(e);\n\n var top = element.scrollTop + (_this.pageXY.y - pageXY.y);\n var left = element.scrollLeft + (_this.pageXY.x - pageXY.x);\n\n if (_this.parent.getHeaderContent().contains(e.target)) {\n mHdr = _this.parent.getFrozenColumns() ? _this.parent.getHeaderContent().querySelector('.e-movableheader') : _this.parent.getHeaderContent().querySelector('.e-headercontent');\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 element.scrollLeft = left;\n _this.pageXY.x = pageXY.x;\n _this.previousValues.left = left;\n } else {\n cont = _this.parent.getContent().querySelector('.e-frozencontent');\n\n if (_this.previousValues.top === top && (top < 0 || cont.scrollHeight - cont.clientHeight < top) || top < 0 || cont.scrollHeight - cont.clientHeight < top) {\n return;\n }\n\n e.preventDefault();\n cont.scrollTop = top;\n element.scrollTop = top;\n _this.pageXY.y = pageXY.y;\n _this.previousValues.top = top;\n }\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.getFrozenColumns();\n this.content = this.parent.getContent().querySelector('.e-content');\n this.header = this.parent.getHeaderContent().querySelector('.e-headercontent');\n var mCont = this.content.querySelector('.e-movablecontent');\n var fCont = this.content.querySelector('.e-frozencontent');\n var mHdr = this.header.querySelector('.e-movableheader');\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 (frzCols) {\n EventHandler.add(mCont, 'scroll', this.onContentScroll(mHdr), this);\n EventHandler.add(mCont, 'scroll', this.onFreezeContentScroll(fCont), this);\n EventHandler.add(fCont, 'scroll', this.onFreezeContentScroll(mCont), this);\n EventHandler.add(mHdr, 'scroll', this.onContentScroll(mCont), this);\n EventHandler.add(fCont, 'wheel', this.onWheelScroll(mCont), this);\n EventHandler.add(fCont, 'touchstart pointerdown', this.setPageXY(), this);\n EventHandler.add(fCont, 'touchmove pointermove', this.onTouchScroll(mCont), 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 if (!_this.parent.enableVirtualization) {\n if (sHeight < clientHeight) {\n addClass(table.querySelectorAll('tr:last-child td'), 'e-lastrowcell');\n\n if (_this.parent.getFrozenColumns()) {\n addClass(_this.parent.getContent().querySelector('.e-movablecontent').querySelectorAll('tr:last-child td'), 'e-lastrowcell');\n }\n }\n\n if ((_this.parent.frozenRows > 0 || _this.parent.frozenColumns > 0) && _this.header.querySelector('.e-movableheader')) {\n _this.header.querySelector('.e-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 if (!_this.parent.enableColumnVirtualization) {\n _this.content.scrollLeft = sLeft;\n }\n\n if (_this.parent.frozenColumns && _this.header.querySelector('.e-movableheader')) {\n _this.header.querySelector('.e-movableheader').scrollLeft = _this.content.querySelector('.e-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 if (this.parent.getFrozenColumns()) {\n content.querySelector('.e-movablecontent').style.overflowY = this.parent.height === 'auto' ? 'auto' : 'scroll';\n\n if (content.querySelector('.e-movablecontent').style.overflowY === 'scroll') {\n this.setPadding();\n }\n } else {\n content.style.overflowY = this.parent.height === 'auto' ? 'auto' : 'scroll';\n }\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('.e-gridheader') && !gridElement.querySelector('.e-gridcontent')) {\n return;\n }\n\n this.removeEventListener(); //Remove padding\n\n this.removePadding();\n var cont = this.parent.getContent().querySelector('.e-content');\n removeClass([this.parent.getHeaderContent().querySelector('.e-headercontent')], 'e-headercontent');\n removeClass([cont], 'e-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 };","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';\nimport { ValueFormatter } from '../services/value-formatter';\n/**\n * Configures the Grid's aggregate column.\n */\n\nvar AggregateColumn = function (_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 (cultureName) {\n var valueFormatter = new ValueFormatter(cultureName);\n\n if (this.format && (this.format.skeleton || this.format.format)) {\n this.formatFn = valueFormatter.getFormatFunction(this.format);\n }\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 = function (_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 \"core-js/modules/es.array.sort.js\";\nimport { Browser, remove, EventHandler, isUndefined, closest, classList } from '@syncfusion/ej2-base';\nimport { parentsUntil } from '../base/util';\nimport * as events from '../base/constant';\n/**\n * The `Clipboard` module is used to handle clipboard copy action.\n */\n\nvar Clipboard = function () {\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 = e.target;\n target = parentsUntil(target, 'e-rowcell');\n };\n\n Clipboard.prototype.pasteHandler = function (e) {\n var _this = this;\n\n if (e.keyCode === 86 && e.ctrlKey && !this.parent.isEdit) {\n var target_1 = closest(document.activeElement, '.e-rowcell');\n\n if (!target_1) {\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, parseInt(target_1.parentElement.getAttribute('aria-rowindex'), 10), parseInt(target_1.getAttribute('aria-colindex'), 10));\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 isFrozen = this.parent.getFrozenColumns();\n\n if (isFrozen) {\n mRows = grid.getMovableDataRows();\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\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, parseInt(args.data, 10));\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.getFrozenColumns();\n this.clipBoardTextArea.value = this.copyContent = '';\n var mRows = void 0;\n var rows = this.parent.getRows();\n\n if (isFrozen) {\n mRows = this.parent.getMovableDataRows();\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'));\n\n if (isFrozen) {\n cells.push.apply(cells, [].slice.call(mRows[selectedIndexes[i]].querySelectorAll('.e-rowcell')));\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]].querySelectorAll('.e-cellselectionbackground'));\n\n if (isFrozen) {\n cells.push.apply(cells, [].slice.call(mRows[obj.rowIndexes[i]].querySelectorAll('.e-cellselectionbackground')));\n }\n\n this.getCopyData(cells, false, '\\t', withHeader);\n }\n } else {\n this.getCopyData([].slice.call(this.parent.element.querySelectorAll('.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('aria-colindex'), 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 isBox = 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 { Observer, isBlazor, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { Row } from '../models/row';\nimport { AriaService } from '../services/aria-service';\nimport { Cell } from '../models/cell';\nimport { CellType } from '../base/enum';\nimport { DataUtil } from '@syncfusion/ej2-data';\nexport var gridObserver = new Observer();\n/**\n * BlazorAction is used for performing Blazor related Grid Actions.\n * @hidden\n */\n\nvar BlazorAction = function () {\n function BlazorAction(parent) {\n this.aria = new AriaService();\n this.actionArgs = {};\n this.parent = parent;\n this.addEventListener();\n }\n\n BlazorAction.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n\n this.parent.on('detailclick', this.onDetailRowClick, this);\n this.parent.on('add-delete-success', this.addDeleteSuccess, this);\n this.parent.on('editsuccess', this.editSuccess, this);\n this.parent.on('setvisibility', this.setColumnVisibility, this);\n this.parent.on('offset', this.setServerOffSet, this);\n this.parent.on('updateaction', this.modelChanged, this);\n this.parent.on(events.modelChanged, this.modelChanged, this);\n this.parent.on('group-expand-collapse', this.onGroupClick, this);\n };\n\n BlazorAction.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n\n this.parent.off('detailclick', this.onDetailRowClick);\n this.parent.off('add-delete-success', this.addDeleteSuccess);\n this.parent.off('editsuccess', this.editSuccess);\n this.parent.off('setvisibility', this.setColumnVisibility);\n this.parent.off('offset', this.setServerOffSet);\n this.parent.off('updateaction', this.modelChanged);\n this.parent.off(events.modelChanged, this.modelChanged);\n this.parent.off('group-expand-collapse', this.onGroupClick);\n };\n\n BlazorAction.prototype.getModuleName = function () {\n return 'blazor';\n };\n\n ;\n\n BlazorAction.prototype.modelChanged = function (args) {\n this.actionArgs = args;\n this.parent.currentAction = args;\n };\n\n BlazorAction.prototype.addDeleteSuccess = function (args) {\n var _this = this;\n\n var editArgs;\n var action = 'name';\n var data = 'data';\n editArgs = {\n requestType: args.requestType,\n data: args[data],\n action: args[action]\n };\n args.promise.then(function (e) {\n return _this.editSuccess(editArgs);\n }).catch(function (e) {\n if (isBlazor() && _this.parent.isServerRendered) {\n var error = 'error';\n var message = 'message';\n\n if (!isNullOrUndefined(e[error]) && !isNullOrUndefined(e[error][message])) {\n e[error] = e[error][message];\n }\n }\n\n _this.parent.trigger(events.actionFailure, isBlazor() && e instanceof Array ? e[0] : e);\n\n _this.parent.hideSpinner();\n\n _this.parent.log('actionfailure', {\n error: e\n });\n });\n };\n\n BlazorAction.prototype.editSuccess = function (args) {\n this.actionArgs = args;\n this.parent.currentAction = args;\n this.parent.allowServerDataBinding = true;\n this.parent.serverDataBind();\n this.parent.allowServerDataBinding = false;\n };\n\n BlazorAction.prototype.onDetailRowClick = function (target) {\n var gObj = this.parent;\n var adaptor = 'interopAdaptor';\n var rIndex = 'rowIndex';\n var invokeMethodAsync = 'invokeMethodAsync';\n var tr = target.parentElement;\n var uid = tr.getAttribute('data-uid');\n var rowObj = gObj.getRowObjectFromUID(uid);\n var args = {\n uid: uid,\n classList: target.classList[0],\n index: tr.getAttribute('aria-rowindex'),\n rowIndex: gObj.getRowsObject().indexOf(rowObj),\n colSpan: this.parent.getVisibleColumns().length\n };\n gObj[adaptor][invokeMethodAsync]('OnDetailClick', args);\n\n if (target.classList.contains('e-detailrowcollapse')) {\n var rows = gObj.getRowsObject();\n var rowData = rowObj.data;\n var gridRowId = this.parent.getRowUid('grid-row');\n var len = gObj.groupSettings.columns.length;\n var gridRow = new Row({\n isDataRow: true,\n isExpand: true,\n uid: gridRowId,\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; i < len; i++) {\n gridRow.cells.unshift(new Cell({\n cellType: CellType.Indent\n }));\n }\n\n rows.splice(args[rIndex] + 1, 0, gridRow);\n gObj.trigger(events.detailDataBound, {\n data: rowData\n });\n gObj.notify(events.detailDataBound, {\n rows: gObj.getRowsObject()\n });\n rowObj.isExpand = true;\n this.aria.setExpand(target, true);\n } else {\n gObj.getRowsObject().splice(args[rIndex] + 1, 1);\n gObj.notify(events.detailDataBound, {\n rows: gObj.getRowsObject()\n });\n rowObj.isExpand = false;\n this.aria.setExpand(target, false);\n }\n };\n\n BlazorAction.prototype.setColumnVisibility = function (columns) {\n var visible = {};\n var adaptor = 'interopAdaptor';\n var invokeMethodAsync = 'invokeMethodAsync';\n\n for (var i = 0; i < columns.length; i++) {\n visible[columns[i].uid] = columns[i].visible;\n }\n\n this.parent[adaptor][invokeMethodAsync]('setColumnVisibility', {\n visible: visible\n });\n };\n\n BlazorAction.prototype.dataSuccess = function (args) {\n if (args.foreignColumnsData) {\n var columns = this.parent.getColumns();\n\n for (var i = 0; i < columns.length; i++) {\n if (args.foreignColumnsData[columns[i].field]) {\n columns[i].columnData = args.foreignColumnsData[columns[i].field];\n }\n }\n }\n\n if (this.parent.allowGrouping && this.parent.groupSettings.columns) {\n var agg = [];\n var aggRows = this.parent.aggregates;\n\n for (var i = 0; i < aggRows.length; i++) {\n var aggRow = aggRows[i];\n\n for (var j = 0; j < aggRow.columns.length; j++) {\n var aggr = {};\n var type = aggRow.columns[j].type.toString();\n aggr = {\n type: type.toLowerCase(),\n field: aggRow.columns[j].field\n };\n agg.push(aggr);\n }\n }\n\n var data = void 0;\n var aggrds = void 0;\n var groupedCols = this.parent.groupSettings.columns;\n\n for (var k = 0; k < groupedCols.length; k++) {\n aggrds = data ? data : args.result;\n data = DataUtil.group(aggrds, groupedCols[k], agg, null, null);\n }\n\n args.result = data ? data : args.result;\n }\n\n var rowUid = 'rowUid';\n var offsetTime = 'offsetTime';\n var off = 'offset';\n this.parent[rowUid] = args[rowUid];\n args[off] = Math.sign(args[off]) === 1 ? -Math.abs(args[off]) : Math.abs(args[off]);\n this.parent[offsetTime] = args[off];\n\n if (this.parent[offsetTime] !== new Date().getTimezoneOffset() / 60) {\n if (this.parent.editSettings.mode !== 'Batch') {\n var action = 'action';\n var rowIndex = 'rowIndex';\n var index = 'index';\n\n if (this.actionArgs[action] === 'edit') {\n this.setClientOffSet(args, this.actionArgs[rowIndex]);\n } else if (this.actionArgs[action] === 'add') {\n this.setClientOffSet(args, this.actionArgs[index]);\n }\n } else if (this.parent.editSettings.mode === 'Batch') {\n var changes = 'changes';\n var changedRecords = 'changedRecords';\n var addedRecords = 'addedRecords';\n var keyField = this.parent.getPrimaryKeyFieldNames()[0];\n var batchChanges = this.actionArgs[changes] || {\n changedRecords: [],\n addedRecords: []\n };\n\n for (var i = 0; i < batchChanges[changedRecords].length; i++) {\n for (var j = 0; j < args.result.length; j++) {\n if (batchChanges[changedRecords][i][keyField] === args.result[j][keyField]) {\n this.setClientOffSet(args, j);\n }\n }\n }\n\n for (var i = 0; i < batchChanges[addedRecords].length; i++) {\n for (var j = 0; j < args.result.length; j++) {\n if (batchChanges[addedRecords][i][keyField] === args.result[j][keyField]) {\n this.setClientOffSet(args, j);\n }\n }\n }\n }\n }\n\n this.parent.renderModule.dataManagerSuccess(args, this.actionArgs);\n this.parent.getMediaColumns();\n this.actionArgs = this.parent.currentAction = {};\n };\n\n BlazorAction.prototype.setClientOffSet = function (args, index) {\n var timeZone = DataUtil.serverTimezoneOffset;\n DataUtil.serverTimezoneOffset = 0;\n args.result[index] = DataUtil.parse.parseJson(JSON.stringify(args.result[index]));\n DataUtil.serverTimezoneOffset = timeZone;\n };\n\n BlazorAction.prototype.setServerOffSet = function (args) {\n var serverTimeZone = DataUtil.serverTimezoneOffset;\n var offsetTime = 'offsetTime';\n var data = 'data';\n var timeZone = new Date().getTimezoneOffset() / 60 * 2 + this.parent[offsetTime];\n DataUtil.serverTimezoneOffset = timeZone;\n args[data] = DataUtil.parse.parseJson(JSON.stringify(args[data]));\n DataUtil.serverTimezoneOffset = serverTimeZone;\n };\n\n BlazorAction.prototype.onGroupClick = function (args) {\n var _this = this;\n\n var adaptor = 'interopAdaptor';\n var content = 'contentModule';\n var invokeMethodAsync = 'invokeMethodAsync';\n this.parent[adaptor][invokeMethodAsync]('OnGroupExpandClick', args).then(function () {\n _this.parent[content].rowElements = [].slice.call(_this.parent.getContentTable().querySelectorAll('tr.e-row[data-uid]'));\n });\n };\n\n BlazorAction.prototype.setPersistData = function (args) {\n var gObj = this.parent;\n gObj.mergePersistGridData(args);\n var bulkChanges = 'bulkChanges';\n\n if (gObj[bulkChanges].columns) {\n delete gObj[bulkChanges].columns;\n }\n\n gObj.headerModule.refreshUI();\n gObj.notify('persist-data-changed', {});\n gObj.notify(events.columnVisibilityChanged, gObj.getColumns());\n };\n\n ;\n\n BlazorAction.prototype.resetPersistData = function (args) {\n var gObj = this.parent;\n var bulkChanges = 'bulkChanges';\n var parseArgs = JSON.parse(args);\n var persistArgs = {\n filterSettings: parseArgs.filterSettings,\n groupSettings: parseArgs.groupSettings,\n pageSettings: parseArgs.pageSettings,\n sortSettings: parseArgs.sortSettings,\n searchSettings: parseArgs.searchSettings,\n columns: parseArgs.columns\n };\n\n if (!persistArgs.sortSettings.columns) {\n persistArgs.sortSettings.columns = [];\n }\n\n if (!persistArgs.groupSettings.columns) {\n persistArgs.groupSettings.columns = [];\n }\n\n for (var i = 0; i < gObj.columns.length; i++) {\n if (gObj.groupSettings.columns.indexOf(gObj.columns[i].field) > -1) {\n gObj.columns[i].visible = true;\n }\n }\n\n gObj.mergePersistGridData(persistArgs);\n gObj.notify('persist-data-changed', {});\n\n if (gObj[bulkChanges].columns) {\n delete gObj[bulkChanges].columns;\n }\n\n gObj.headerModule.refreshUI();\n\n for (var i = 0; i < gObj.columns.length; i++) {\n gObj.columns[i].editType = gObj.columns[i].editType.toLowerCase();\n }\n\n gObj.setProperties({\n filterSettings: {\n columns: []\n }\n }, true);\n };\n\n BlazorAction.prototype.dataFailure = function (args) {\n this.parent.renderModule.dataManagerFailure(args, this.actionArgs);\n this.actionArgs = this.parent.currentAction = {};\n };\n\n BlazorAction.prototype.destroy = function () {\n this.removeEventListener();\n };\n\n return BlazorAction;\n}();\n\nexport { BlazorAction };","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, ChildProperty, Browser, closest, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setValue, getValue, isBlazor, blazorTemplates } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, append, remove, updateBlazorTemplate, classList, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { Property, Collection, Complex, Event, NotifyPropertyChanges, L10n } from '@syncfusion/ej2-base';\nimport { EventHandler, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { DataManager, DataUtil } from '@syncfusion/ej2-data';\nimport { createSpinner, hideSpinner, showSpinner, Tooltip } from '@syncfusion/ej2-popups';\nimport { iterateArrayOrObject, prepareColumns, parentsUntil, wrap, templateCompiler, isGroupAdaptive, refreshForeignData } from './util';\nimport { getRowHeight, setColumnIndex, Global } from './util';\nimport * as events from '../base/constant';\nimport { Render } from '../renderer/render';\nimport { RenderType } from './enum';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { CellRendererFactory } from '../services/cell-render-factory';\nimport { ServiceLocator } from '../services/service-locator';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { RendererFactory } from '../services/renderer-factory';\nimport { ColumnWidthService } from '../services/width-controller';\nimport { AriaService } from '../services/aria-service';\nimport { FocusStrategy } from '../services/focus-strategy';\nimport { PageSettings } from '../models/page-settings';\nimport { ColumnChooserSettings } from '../models/column-chooser-settings';\nimport { Selection } from '../actions/selection';\nimport { Search } from '../actions/search';\nimport { ShowHide } from '../actions/show-hide';\nimport { Scroll } from '../actions/scroll';\nimport { Print } from '../actions/print';\nimport { AggregateRow } from '../models/aggregate';\nimport { Clipboard } from '../actions/clipboard';\nimport { gridObserver } from '../actions/blazor-action';\n/**\n * Represents the field name and direction of sort column.\n */\n\nvar SortDescriptor = function (_super) {\n __extends(SortDescriptor, _super);\n\n function SortDescriptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n __decorate([Property()], SortDescriptor.prototype, \"field\", void 0);\n\n __decorate([Property()], SortDescriptor.prototype, \"direction\", void 0);\n\n __decorate([Property(false)], SortDescriptor.prototype, \"isFromGroup\", void 0);\n\n return SortDescriptor;\n}(ChildProperty);\n\nexport { SortDescriptor };\n/**\n * Configures the sorting behavior of Grid.\n */\n\nvar SortSettings = function (_super) {\n __extends(SortSettings, _super);\n\n function SortSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n __decorate([Collection([], SortDescriptor)], SortSettings.prototype, \"columns\", void 0);\n\n __decorate([Property(true)], SortSettings.prototype, \"allowUnsort\", void 0);\n\n return SortSettings;\n}(ChildProperty);\n\nexport { SortSettings };\n/**\n * Represents the predicate for the filter column.\n */\n\nvar Predicate = function (_super) {\n __extends(Predicate, _super);\n\n function Predicate() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n __decorate([Property()], Predicate.prototype, \"field\", void 0);\n\n __decorate([Property()], Predicate.prototype, \"operator\", void 0);\n\n __decorate([Property()], Predicate.prototype, \"value\", void 0);\n\n __decorate([Property()], Predicate.prototype, \"matchCase\", void 0);\n\n __decorate([Property()], Predicate.prototype, \"ignoreAccent\", void 0);\n\n __decorate([Property()], Predicate.prototype, \"predicate\", void 0);\n\n __decorate([Property({})], Predicate.prototype, \"actualFilterValue\", void 0);\n\n __decorate([Property({})], Predicate.prototype, \"actualOperator\", void 0);\n\n __decorate([Property()], Predicate.prototype, \"type\", void 0);\n\n __decorate([Property()], Predicate.prototype, \"ejpredicate\", void 0);\n\n __decorate([Property()], Predicate.prototype, \"uid\", void 0);\n\n __decorate([Property()], Predicate.prototype, \"isForeignKey\", void 0);\n\n return Predicate;\n}(ChildProperty);\n\nexport { Predicate };\n/**\n * Configures the infinite scroll behavior of Grid.\n */\n\nvar InfiniteScrollSettings = function (_super) {\n __extends(InfiniteScrollSettings, _super);\n\n function InfiniteScrollSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n __decorate([Property(false)], InfiniteScrollSettings.prototype, \"enableScroll\", void 0);\n\n __decorate([Property(false)], InfiniteScrollSettings.prototype, \"enableCache\", void 0);\n\n __decorate([Property(3)], InfiniteScrollSettings.prototype, \"maxBlock\", void 0);\n\n __decorate([Property(3)], InfiniteScrollSettings.prototype, \"initialBlocks\", void 0);\n\n return InfiniteScrollSettings;\n}(ChildProperty);\n\nexport { InfiniteScrollSettings };\n/**\n * Configures the filtering behavior of the Grid.\n */\n\nvar FilterSettings = function (_super) {\n __extends(FilterSettings, _super);\n\n function FilterSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n __decorate([Collection([], Predicate)], FilterSettings.prototype, \"columns\", void 0);\n\n __decorate([Property('FilterBar')], FilterSettings.prototype, \"type\", void 0);\n\n __decorate([Property()], FilterSettings.prototype, \"mode\", void 0);\n\n __decorate([Property(true)], FilterSettings.prototype, \"showFilterBarStatus\", void 0);\n\n __decorate([Property(1500)], FilterSettings.prototype, \"immediateModeDelay\", void 0);\n\n __decorate([Property()], FilterSettings.prototype, \"operators\", void 0);\n\n __decorate([Property(false)], FilterSettings.prototype, \"ignoreAccent\", void 0);\n\n __decorate([Property(false)], FilterSettings.prototype, \"enableCaseSensitivity\", void 0);\n\n return FilterSettings;\n}(ChildProperty);\n\nexport { FilterSettings };\n/**\n * Configures the selection behavior of the Grid.\n */\n\nvar SelectionSettings = function (_super) {\n __extends(SelectionSettings, _super);\n\n function SelectionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n __decorate([Property('Row')], SelectionSettings.prototype, \"mode\", void 0);\n\n __decorate([Property('Flow')], SelectionSettings.prototype, \"cellSelectionMode\", void 0);\n\n __decorate([Property('Single')], SelectionSettings.prototype, \"type\", void 0);\n\n __decorate([Property(false)], SelectionSettings.prototype, \"checkboxOnly\", void 0);\n\n __decorate([Property(false)], SelectionSettings.prototype, \"persistSelection\", void 0);\n\n __decorate([Property('Default')], SelectionSettings.prototype, \"checkboxMode\", void 0);\n\n __decorate([Property(false)], SelectionSettings.prototype, \"enableSimpleMultiRowSelection\", void 0);\n\n __decorate([Property(true)], SelectionSettings.prototype, \"enableToggle\", void 0);\n\n return SelectionSettings;\n}(ChildProperty);\n\nexport { SelectionSettings };\n/**\n * Configures the search behavior of the Grid.\n */\n\nvar SearchSettings = function (_super) {\n __extends(SearchSettings, _super);\n\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n __decorate([Property([])], SearchSettings.prototype, \"fields\", void 0);\n\n __decorate([Property('')], SearchSettings.prototype, \"key\", void 0);\n\n __decorate([Property('contains')], SearchSettings.prototype, \"operator\", void 0);\n\n __decorate([Property(true)], SearchSettings.prototype, \"ignoreCase\", void 0);\n\n __decorate([Property(false)], SearchSettings.prototype, \"ignoreAccent\", void 0);\n\n return SearchSettings;\n}(ChildProperty);\n\nexport { SearchSettings };\n/**\n * Configures the row drop settings of the Grid.\n */\n\nvar RowDropSettings = function (_super) {\n __extends(RowDropSettings, _super);\n\n function RowDropSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n __decorate([Property()], RowDropSettings.prototype, \"targetID\", void 0);\n\n return RowDropSettings;\n}(ChildProperty);\n\nexport { RowDropSettings };\n/**\n * Configures the text wrap settings of the Grid.\n */\n\nvar TextWrapSettings = function (_super) {\n __extends(TextWrapSettings, _super);\n\n function TextWrapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n __decorate([Property('Both')], TextWrapSettings.prototype, \"wrapMode\", void 0);\n\n return TextWrapSettings;\n}(ChildProperty);\n\nexport { TextWrapSettings };\n/**\n * Configures the group behavior of the Grid.\n */\n\nvar GroupSettings = function (_super) {\n __extends(GroupSettings, _super);\n\n function GroupSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n __decorate([Property(true)], GroupSettings.prototype, \"showDropArea\", void 0);\n\n __decorate([Property(false)], GroupSettings.prototype, \"allowGroupReordering\", void 0);\n\n __decorate([Property(false)], GroupSettings.prototype, \"showToggleButton\", void 0);\n\n __decorate([Property(false)], GroupSettings.prototype, \"showGroupedColumn\", void 0);\n\n __decorate([Property(true)], GroupSettings.prototype, \"showUngroupButton\", void 0);\n\n __decorate([Property(false)], GroupSettings.prototype, \"disablePageWiseAggregates\", void 0);\n\n __decorate([Property([])], GroupSettings.prototype, \"columns\", void 0);\n\n __decorate([Property()], GroupSettings.prototype, \"captionTemplate\", void 0);\n\n return GroupSettings;\n}(ChildProperty);\n\nexport { GroupSettings };\n/**\n * Configures the edit behavior of the Grid.\n */\n\nvar EditSettings = function (_super) {\n __extends(EditSettings, _super);\n\n function EditSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n __decorate([Property(false)], EditSettings.prototype, \"allowAdding\", void 0);\n\n __decorate([Property(false)], EditSettings.prototype, \"allowEditing\", void 0);\n\n __decorate([Property(false)], EditSettings.prototype, \"allowDeleting\", void 0);\n\n __decorate([Property('Normal')], EditSettings.prototype, \"mode\", void 0);\n\n __decorate([Property(true)], EditSettings.prototype, \"allowEditOnDblClick\", void 0);\n\n __decorate([Property(true)], EditSettings.prototype, \"showConfirmDialog\", void 0);\n\n __decorate([Property(false)], EditSettings.prototype, \"showDeleteConfirmDialog\", void 0);\n\n __decorate([Property('')], EditSettings.prototype, \"template\", void 0);\n\n __decorate([Property('')], EditSettings.prototype, \"headerTemplate\", void 0);\n\n __decorate([Property('')], EditSettings.prototype, \"footerTemplate\", void 0);\n\n __decorate([Property('Top')], EditSettings.prototype, \"newRowPosition\", void 0);\n\n __decorate([Property({})], EditSettings.prototype, \"dialog\", void 0);\n\n __decorate([Property(false)], EditSettings.prototype, \"allowNextRowEdit\", void 0);\n\n return EditSettings;\n}(ChildProperty);\n\nexport { EditSettings };\n/**\n * Represents the Grid component.\n * ```html\n *
\n * \n * ```\n */\n\nvar Grid = function (_super) {\n __extends(Grid, _super);\n /**\n * Constructor for creating the component\n * @hidden\n */\n\n\n function Grid(options, element) {\n var _this = _super.call(this, options, element) || this;\n\n _this.isPreventScrollEvent = false;\n _this.inViewIndexes = [];\n _this.media = {};\n _this.componentRefresh = Component.prototype.refresh;\n /** @hidden */\n\n _this.isVirtualAdaptive = false;\n /** @hidden */\n\n _this.vRows = [];\n /** @hidden */\n\n _this.vcRows = [];\n /** @hidden */\n\n _this.vGroupOffsets = {};\n /** @hidden */\n\n _this.rowUid = 0;\n /**\n * Gets the currently visible records of the Grid.\n */\n\n _this.currentViewData = [];\n /** @hidden */\n\n _this.lockcolPositionCount = 0;\n /** @hidden */\n\n _this.prevPageMoving = false;\n /** @hidden */\n\n _this.pageTemplateChange = false;\n /** @hidden */\n\n _this.isAutoGen = false;\n _this.mediaBindInstance = {}; // enable/disable logger for MVC & Core\n\n _this.enableLogger = true;\n _this.needsID = true;\n Grid_1.Inject(Selection);\n setValue('mergePersistData', _this.mergePersistGridData, _this);\n return _this;\n }\n\n Grid_1 = Grid;\n /**\n * Get the properties to be maintained in the persisted state.\n * @return {string}\n */\n\n Grid.prototype.getPersistData = function () {\n var keyEntity = ['pageSettings', 'sortSettings', 'filterSettings', 'groupSettings', 'columns', 'searchSettings', 'selectedRowIndex', 'scrollPosition'];\n var ignoreOnPersist = {\n pageSettings: ['template', 'pageSizes', 'enableQueryString', 'totalRecordsCount', 'pageCount'],\n filterSettings: ['type', 'mode', 'showFilterBarStatus', 'immediateModeDelay', 'ignoreAccent'],\n groupSettings: ['showDropArea', 'showToggleButton', 'showGroupedColumn', 'showUngroupButton', 'disablePageWiseAggregates', 'hideCaptionCount'],\n searchSettings: ['fields', 'operator', 'ignoreCase'],\n sortSettings: [],\n columns: [],\n selectedRowIndex: [],\n scrollPosition: []\n };\n var ignoreOnColumn = ['filter', 'edit', 'filterBarTemplate', 'headerTemplate', 'template', 'commandTemplate', 'commands', 'dataSource', 'headerText'];\n\n for (var i = 0; i < keyEntity.length; i++) {\n var currentObject = this[keyEntity[i]];\n\n for (var _i = 0, _a = ignoreOnPersist[keyEntity[i]]; _i < _a.length; _i++) {\n var val = _a[_i];\n delete currentObject[val];\n }\n }\n\n this.pageSettings.template = undefined;\n this.pageTemplateChange = !isNullOrUndefined(this.pagerTemplate);\n return this.addOnPersist(keyEntity);\n };\n /**\n * To provide the array of modules needed for component rendering\n * @return {ModuleDeclaration[]}\n * @hidden\n */\n\n\n Grid.prototype.requiredModules = function () {\n var modules = [];\n\n if (this.isDestroyed) {\n return modules;\n }\n\n if (this.allowFiltering) {\n modules.push({\n member: 'filter',\n args: [this, this.filterSettings, this.serviceLocator]\n });\n }\n\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport',\n args: [this, this.serviceLocator]\n });\n }\n\n if (this.allowPdfExport) {\n modules.push({\n member: 'PdfExport',\n args: [this]\n });\n }\n\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this, this.sortSettings, this.sortedColumns, this.serviceLocator]\n });\n }\n\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this, this.selectionSettings, this.serviceLocator]\n });\n }\n\n modules.push({\n member: 'resize',\n args: [this]\n });\n\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n\n if (this.allowRowDragAndDrop) {\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n\n if (this.allowGrouping) {\n modules.push({\n member: 'group',\n args: [this, this.groupSettings, this.sortedColumns, this.serviceLocator]\n });\n }\n\n if (this.aggregates.length) {\n modules.push({\n member: 'aggregate',\n args: [this, this.serviceLocator]\n });\n }\n\n if (this.isDetail()) {\n modules.push({\n member: 'detailRow',\n args: [this, this.serviceLocator]\n });\n }\n\n if (this.toolbar || this.toolbarTemplate) {\n modules.push({\n member: 'toolbar',\n args: [this, this.serviceLocator]\n });\n }\n\n if (this.enableVirtualization || this.enableColumnVirtualization) {\n modules.push({\n member: 'virtualscroll',\n args: [this, this.serviceLocator]\n });\n }\n\n if (this.getFrozenColumns() || this.frozenRows) {\n modules.push({\n member: 'freeze',\n args: [this, this.serviceLocator]\n });\n }\n\n if (this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this, this.serviceLocator]\n });\n }\n\n if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n modules.push({\n member: 'edit',\n args: [this, this.serviceLocator]\n });\n }\n\n this.extendRequiredModules(modules);\n return modules;\n };\n\n Grid.prototype.extendRequiredModules = function (modules) {\n if (this.infiniteScrollSettings.enableScroll) {\n modules.push({\n member: 'infiniteScroll',\n args: [this, this.serviceLocator]\n });\n }\n\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this, this.serviceLocator]\n });\n }\n\n if (this.showColumnMenu) {\n modules.push({\n member: 'columnMenu',\n args: [this, this.serviceLocator]\n });\n }\n\n if (this.showColumnChooser) {\n modules.push({\n member: 'columnChooser',\n args: [this, this.serviceLocator]\n });\n }\n\n if (this.isForeignKeyEnabled(this.columns)) {\n modules.push({\n member: 'foreignKey',\n args: [this, this.serviceLocator]\n });\n }\n\n if (this.enableLogger) {\n modules.push({\n member: 'logger',\n args: [this]\n });\n }\n\n if (isBlazor()) {\n modules.push({\n member: 'blazor',\n args: [this]\n });\n }\n };\n /**\n * For internal use only - Initialize the event handler;\n * @private\n */\n\n\n Grid.prototype.preRender = function () {\n this.serviceLocator = new ServiceLocator();\n this.initProperties();\n this.initializeServices();\n };\n\n Grid.prototype.initProperties = function () {\n /* tslint:disable */\n this.isInitial = true;\n this.sortedColumns = [];\n this.inViewIndexes = [];\n this.mediaCol = [];\n this.isInitialLoad = false;\n this.allowServerDataBinding = false;\n this.ignoreCollectionWatch = true;\n\n if (this.enableVirtualization || this.enableColumnVirtualization) {\n this.isServerRendered = false; //NEW\n }\n\n this.mergeCells = {};\n this.isEdit = false;\n this.checkAllRows = 'None';\n this.isCheckBoxSelection = false;\n this.isPersistSelection = false;\n this.componentRefresh = Component.prototype.refresh;\n this.filterOperators = {\n contains: 'contains',\n endsWith: 'endswith',\n equal: 'equal',\n greaterThan: 'greaterthan',\n greaterThanOrEqual: 'greaterthanorequal',\n lessThan: 'lessthan',\n lessThanOrEqual: 'lessthanorequal',\n notEqual: 'notequal',\n startsWith: 'startswith'\n };\n this.defaultLocale = {\n EmptyRecord: 'No records to display',\n True: 'true',\n False: 'false',\n InvalidFilterMessage: 'Invalid Filter Data',\n GroupDropArea: 'Drag a column header here to group its column',\n UnGroup: 'Click here to ungroup',\n GroupDisable: 'Grouping is disabled for this column',\n FilterbarTitle: '\\'s filter bar cell',\n EmptyDataSourceError: 'DataSource must not be empty at initial load since columns are generated from dataSource in AutoGenerate Column Grid',\n // Toolbar Items\n Add: 'Add',\n Edit: 'Edit',\n Cancel: 'Cancel',\n Update: 'Update',\n Delete: 'Delete',\n Print: 'Print',\n Pdfexport: 'PDF Export',\n Excelexport: 'Excel Export',\n Wordexport: 'Word Export',\n Csvexport: 'CSV Export',\n Search: 'Search',\n Columnchooser: 'Columns',\n Save: 'Save',\n Item: 'item',\n Items: 'items',\n EditOperationAlert: 'No records selected for edit operation',\n DeleteOperationAlert: 'No records selected for delete operation',\n SaveButton: 'Save',\n OKButton: 'OK',\n CancelButton: 'Cancel',\n EditFormTitle: 'Details of ',\n AddFormTitle: 'Add New Record',\n BatchSaveConfirm: 'Are you sure you want to save changes?',\n BatchSaveLostChanges: 'Unsaved changes will be lost. Are you sure you want to continue?',\n ConfirmDelete: 'Are you sure you want to Delete Record?',\n CancelEdit: 'Are you sure you want to Cancel the changes?',\n ChooseColumns: 'Choose Column',\n SearchColumns: 'search columns',\n Matchs: 'No Matches Found',\n FilterButton: 'Filter',\n ClearButton: 'Clear',\n StartsWith: 'Starts With',\n EndsWith: 'Ends With',\n Contains: 'Contains',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n ChooseDate: 'Choose a Date',\n EnterValue: 'Enter the value',\n Copy: 'Copy',\n Group: 'Group by this column',\n Ungroup: 'Ungroup by this column',\n autoFitAll: 'Autofit all columns',\n autoFit: 'Autofit this column',\n Export: 'Export',\n FirstPage: 'First Page',\n LastPage: 'Last Page',\n PreviousPage: 'Previous Page',\n NextPage: 'Next Page',\n SortAscending: 'Sort Ascending',\n SortDescending: 'Sort Descending',\n EditRecord: 'Edit Record',\n DeleteRecord: 'Delete Record',\n FilterMenu: 'Filter',\n SelectAll: 'Select All',\n Blanks: 'Blanks',\n FilterTrue: 'True',\n FilterFalse: 'False',\n NoResult: 'No Matches Found',\n ClearFilter: 'Clear Filter',\n NumberFilter: 'Number Filters',\n TextFilter: 'Text Filters',\n DateFilter: 'Date Filters',\n DateTimeFilter: 'DateTime Filters',\n MatchCase: 'Match Case',\n Between: 'Between',\n CustomFilter: 'Custom Filter',\n CustomFilterPlaceHolder: 'Enter the value',\n CustomFilterDatePlaceHolder: 'Choose a date',\n AND: 'AND',\n OR: 'OR',\n ShowRowsWhere: 'Show rows where:',\n FilterMenuDialogARIA: 'Filter menu dialog',\n ExcelFilterDialogARIA: 'Excel filter dialog',\n DialogEditARIA: 'Edit dialog',\n ColumnChooserDialogARIA: 'Column chooser dialog',\n ColumnMenuDialogARIA: 'Column menu dialog',\n CustomFilterDialogARIA: 'Customer filter dialog'\n };\n this.keyConfigs = {\n downArrow: 'downarrow',\n upArrow: 'uparrow',\n rightArrow: 'rightarrow',\n leftArrow: 'leftarrow',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n shiftRight: 'shift+rightarrow',\n shiftLeft: 'shift+leftarrow',\n home: 'home',\n end: 'end',\n escape: 'escape',\n ctrlHome: 'ctrl+home',\n ctrlEnd: 'ctrl+end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n ctrlAltPageUp: 'ctrl+alt+pageup',\n ctrlAltPageDown: 'ctrl+alt+pagedown',\n altPageUp: 'alt+pageup',\n altPageDown: 'alt+pagedown',\n altDownArrow: 'alt+downarrow',\n altUpArrow: 'alt+uparrow',\n ctrlDownArrow: 'ctrl+downarrow',\n ctrlUpArrow: 'ctrl+uparrow',\n ctrlPlusA: 'ctrl+A',\n ctrlPlusP: 'ctrl+P',\n insert: 'insert',\n delete: 'delete',\n f2: 'f2',\n enter: 'enter',\n ctrlEnter: 'ctrl+enter',\n shiftEnter: 'shift+enter',\n tab: 'tab',\n shiftTab: 'shift+tab',\n space: 'space',\n ctrlPlusC: 'ctrl+C',\n ctrlShiftPlusH: 'ctrl+shift+H',\n ctrlSpace: 'ctrl+space',\n ctrlLeftArrow: 'ctrl+leftarrow',\n ctrlRightArrow: 'ctrl+rightarrow'\n };\n /* tslint:enable */\n };\n /**\n * For internal use only - To Initialize the component rendering.\n * @private\n */\n\n\n Grid.prototype.render = function () {\n this.log(['module_missing', 'promise_enabled', 'locale_missing', 'check_datasource_columns']);\n this.ariaService.setOptions(this.element, {\n role: 'grid'\n });\n\n if (isBlazor()) {\n this.renderComplete();\n }\n\n createSpinner({\n target: this.element\n }, this.createElement);\n this.renderModule = new Render(this, this.serviceLocator);\n this.searchModule = new Search(this);\n this.scrollModule = new Scroll(this);\n this.notify(events.initialLoad, {});\n\n if (this.getDataModule().dataManager.dataSource.offline === true || this.getDataModule().dataManager.dataSource.url === undefined) {\n this.isVirtualAdaptive = true;\n }\n\n this.trigger(events.load);\n prepareColumns(this.columns, this.enableColumnVirtualization);\n\n if (this.enablePersistence) {\n this.notify(events.columnsPrepared, {});\n }\n\n if (!(isBlazor() && this.isServerRendered)) {\n this.getMediaColumns();\n setColumnIndex(this.columns);\n }\n\n this.checkLockColumns(this.columns);\n this.getColumns();\n this.processModel();\n this.gridRender();\n this.wireEvents();\n this.addListener();\n this.updateDefaultCursor();\n this.updateStackedFilter();\n this.showSpinner();\n this.notify(events.initialEnd, {});\n\n if (isBlazor() && this.isServerRendered) {\n gridObserver.notify(events.componentRendered, {\n id: this.element.id,\n grid: this\n });\n }\n };\n /**\n * By default, grid shows the spinner for all its actions. You can use this method to show spinner at your needed time.\n */\n\n\n Grid.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * Manually showed spinner needs to hide by `hideSpinnner`.\n */\n\n\n Grid.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n\n Grid.prototype.updateStackedFilter = function () {\n if (this.allowFiltering && this.filterSettings.type === 'FilterBar' && this.getHeaderContent().querySelectorAll('.e-stackedheadercell').length) {\n this.getHeaderContent().classList.add('e-stackedfilter');\n } else {\n this.getHeaderContent().classList.remove('e-stackedfilter');\n }\n };\n\n Grid.prototype.getMediaColumns = function () {\n if (!this.enableColumnVirtualization) {\n var gcol = this.getColumns();\n this.getShowHideService = this.serviceLocator.getService('showHideService');\n\n if (!isNullOrUndefined(gcol)) {\n for (var index = 0; index < gcol.length; index++) {\n if (!isNullOrUndefined(gcol[index].hideAtMedia) && (isNullOrUndefined(gcol[index].visible) || gcol[index].visible)) {\n this.pushMediaColumn(gcol[index], index);\n }\n }\n }\n }\n };\n\n Grid.prototype.pushMediaColumn = function (col, index) {\n this.mediaCol.push(col);\n this.media[col.uid] = window.matchMedia(col.hideAtMedia);\n this.mediaQueryUpdate(index, this.media[col.uid]);\n this.mediaBindInstance[index] = this.mediaQueryUpdate.bind(this, index);\n this.media[col.uid].addListener(this.mediaBindInstance[index]);\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.updateMediaColumns = function (col) {\n if (!this.enableColumnVirtualization) {\n var index = this.getColumnIndexByUid(col.uid);\n\n for (var i = 0; i < this.mediaCol.length; i++) {\n if (col.uid === this.mediaCol[i].uid) {\n this.mediaCol.splice(i, 1);\n return;\n }\n }\n\n this.pushMediaColumn(col, index);\n }\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.mediaQueryUpdate = function (columnIndex, e) {\n var col = this.getColumns()[columnIndex];\n\n if (this.mediaCol.some(function (mediaColumn) {\n return mediaColumn.uid === col.uid;\n })) {\n col.visible = e.matches;\n\n if (this.isInitialLoad) {\n this.invokedFromMedia = true;\n\n if (col.visible) {\n this.showHider.show(col.headerText, 'headerText');\n } else {\n this.showHider.hide(col.headerText, 'headerText');\n }\n }\n }\n };\n\n Grid.prototype.refreshMediaCol = function () {\n this.isInitialLoad = true;\n var footerContent = this.element.querySelector('.e-gridfooter');\n\n if (this.aggregates.length && this.element.scrollHeight > this.height && footerContent) {\n addClass([footerContent], ['e-footerpadding']);\n }\n\n var checkboxColumn = this.getColumns().filter(function (col) {\n return col.type === 'checkbox';\n });\n\n if (checkboxColumn.length && this.selectionSettings.checkboxMode === 'ResetOnRowClick') {\n this.isCheckBoxSelection = false;\n this.refreshHeader();\n }\n };\n\n Grid.prototype.removeMediaListener = function () {\n for (var i = 0; i < this.mediaCol.length; i++) {\n this.media[this.mediaCol[i].uid].removeListener(this.mediaBindInstance[this.mediaCol[i].index]);\n }\n };\n /**\n * For internal use only - Initialize the event handler\n * @private\n */\n\n\n Grid.prototype.eventInitializer = function () {//eventInitializer\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n * @method destroy\n * @return {void}\n */\n\n\n Grid.prototype.destroy = function () {\n var gridElement = this.element;\n\n if (!gridElement) {\n return;\n }\n\n var hasGridChild = gridElement.querySelector('.e-gridheader') && gridElement.querySelector('.e-gridcontent') ? true : false;\n\n if (hasGridChild) {\n this.unwireEvents();\n }\n\n this.removeListener();\n this.removeMediaListener();\n this.notify(events.destroy, {});\n this.destroyDependentModules();\n\n if (hasGridChild) {\n _super.prototype.destroy.call(this);\n }\n\n this.toolTipObj.destroy();\n var modules = ['renderModule', 'headerModule', 'contentModule', 'valueFormatterService', 'serviceLocator', 'ariaService', 'keyboardModule', 'widthService', 'searchModule', 'showHider', 'scrollModule', 'printModule', 'clipboardModule', 'focusModule'];\n\n for (var i = 0; i < modules.length; i++) {\n if (this[modules[i]]) {\n this[modules[i]] = null;\n }\n }\n\n this.element.innerHTML = '';\n classList(this.element, [], ['e-rtl', 'e-gridhover', 'e-responsive', 'e-default', 'e-device', 'e-grid-min-height']);\n };\n\n Grid.prototype.destroyDependentModules = function () {\n var gridElement = this.element;\n\n if (!gridElement || !gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent')) {\n return;\n }\n\n this.scrollModule.destroy();\n this.keyboardModule.destroy();\n this.focusModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n\n\n Grid.prototype.getModuleName = function () {\n return 'grid';\n };\n\n Grid.prototype.enableBoxSelection = function () {\n if (this.enableAutoFill) {\n this.selectionSettings.cellSelectionMode = 'BoxWithBorder';\n }\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n\n /* tslint:disable-next-line:max-line-length */\n // tslint:disable-next-line:max-func-body-length\n\n\n Grid.prototype.onPropertyChanged = function (newProp, oldProp) {\n var requireRefresh = false;\n var requireGridRefresh = false;\n var freezeRefresh = false;\n var checkCursor;\n var args = {\n requestType: 'refresh'\n };\n\n if (this.isDestroyed) {\n return;\n }\n\n this.log('module_missing');\n var properties = Object.keys(newProp);\n\n if (properties.indexOf('columns') > -1) {\n this.updateColumnObject();\n requireGridRefresh = true;\n }\n\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n\n switch (prop) {\n case 'allowPaging':\n this.notify(events.uiUpdate, {\n module: 'pager',\n enable: this.allowPaging\n });\n requireRefresh = true;\n break;\n\n case 'pageSettings':\n if (this.pageTemplateChange) {\n this.pageTemplateChange = false;\n this.notify(events.inBoundModelChanged, {\n module: 'pager',\n properties: newProp.pageSettings\n });\n break;\n }\n\n this.notify(events.inBoundModelChanged, {\n module: 'pager',\n properties: newProp.pageSettings\n });\n\n if (isNullOrUndefined(newProp.pageSettings.currentPage) && isNullOrUndefined(newProp.pageSettings.pageSize) && isNullOrUndefined(newProp.pageSettings.totalRecordsCount) || !isNullOrUndefined(oldProp.pageSettings) && newProp.pageSettings.currentPage !== oldProp.pageSettings.currentPage && !this.enableColumnVirtualization && !this.enableVirtualization && this.pageSettings.totalRecordsCount <= this.pageSettings.pageSize) {\n requireRefresh = true;\n }\n\n break;\n\n case 'allowSorting':\n this.notify(events.uiUpdate, {\n module: 'sort',\n enable: this.allowSorting\n });\n requireRefresh = true;\n checkCursor = true;\n break;\n\n case 'allowFiltering':\n this.updateStackedFilter();\n this.notify(events.uiUpdate, {\n module: 'filter',\n enable: this.allowFiltering\n });\n requireRefresh = true;\n\n if (this.filterSettings.type !== 'FilterBar') {\n this.refreshHeader();\n }\n\n break;\n\n case 'height':\n case 'width':\n this.notify(events.uiUpdate, {\n module: 'scroll',\n properties: {\n width: newProp.width,\n height: newProp.height\n }\n });\n break;\n\n case 'allowReordering':\n this.headerModule.refreshUI();\n checkCursor = true;\n break;\n\n case 'allowRowDragAndDrop':\n this.notify(events.uiUpdate, {\n module: 'rowDragAndDrop',\n enable: this.allowRowDragAndDrop\n });\n this.renderModule.refresh();\n this.headerModule.refreshUI();\n break;\n\n case 'allowSelection':\n this.notify(events.uiUpdate, {\n module: 'selection',\n enable: this.allowSelection\n });\n break;\n\n case 'enableAutoFill':\n if (this.selectionModule) {\n this.enableBoxSelection();\n this.selectionModule.updateAutoFillPosition();\n }\n\n break;\n\n case 'rowTemplate':\n this.rowTemplateFn = templateCompiler(this.rowTemplate);\n requireRefresh = true;\n break;\n\n case 'detailTemplate':\n this.detailTemplateFn = templateCompiler(this.detailTemplate);\n requireRefresh = true;\n break;\n\n case 'allowGrouping':\n this.notify(events.uiUpdate, {\n module: 'group',\n enable: this.allowGrouping\n });\n this.headerModule.refreshUI();\n requireRefresh = true;\n checkCursor = true;\n break;\n\n case 'childGrid':\n requireRefresh = true;\n break;\n\n case 'toolbar':\n this.notify(events.uiUpdate, {\n module: 'toolbar'\n });\n break;\n\n case 'groupSettings':\n this.notify(events.inBoundModelChanged, {\n module: 'group',\n properties: newProp.groupSettings,\n oldProperties: oldProp.groupSettings\n });\n break;\n\n case 'aggregates':\n if (!this.aggregates.length && this.allowGrouping && this.groupSettings.columns.length) {\n requireRefresh = true;\n }\n\n this.notify(events.uiUpdate, {\n module: 'aggregate',\n properties: newProp\n });\n break;\n\n case 'frozenColumns':\n case 'frozenRows':\n case 'enableVirtualization':\n case 'currencyCode':\n case 'locale':\n this.log('frozen_rows_columns');\n freezeRefresh = true;\n requireGridRefresh = true;\n break;\n\n case 'query':\n if (!this.getDataModule().isQueryInvokedFromData) {\n requireRefresh = true;\n }\n\n this.getDataModule().isQueryInvokedFromData = false;\n break;\n\n default:\n this.extendedPropertyChange(prop, newProp, requireGridRefresh);\n }\n }\n\n if (checkCursor) {\n this.updateDefaultCursor();\n }\n\n if (requireGridRefresh) {\n if (freezeRefresh || this.frozenColumns || this.frozenRows) {\n if (!(isBlazor() && this.isServerRendered)) {\n this.freezeRefresh();\n }\n } else {\n this.refresh();\n }\n } else if (requireRefresh) {\n this.notify(events.modelChanged, args);\n requireRefresh = false;\n this.maintainSelection(newProp.selectedRowIndex);\n }\n };\n /* tslint:disable */\n\n\n Grid.prototype.extendedPropertyChange = function (prop, newProp, requireGridRefresh) {\n switch (prop) {\n case 'enableRtl':\n this.updateRTL();\n\n if (this.allowPaging) {\n this.element.querySelector('.e-gridpager').ej2_instances[0].enableRtl = newProp.enableRtl;\n this.element.querySelector('.e-gridpager').ej2_instances[0].dataBind();\n }\n\n if (this.height !== 'auto') {\n this.scrollModule.removePadding(!newProp.enableRtl);\n this.scrollModule.setPadding();\n }\n\n if (this.toolbar && this.toolbarModule) {\n this.toolbarModule.getToolbar().ej2_instances[0].enableRtl = newProp.enableRtl;\n this.toolbarModule.getToolbar().ej2_instances[0].dataBind();\n }\n\n if (this.contextMenuItems && this.contextMenuModule) {\n this.contextMenuModule.getContextMenu().ej2_instances[0].enableRtl = newProp.enableRtl;\n this.contextMenuModule.getContextMenu().ej2_instances[0].dataBind();\n }\n\n if (this.showColumnMenu && this.columnMenuModule) {\n this.columnMenuModule.getColumnMenu().ej2_instances[0].enableRtl = newProp.enableRtl;\n this.columnMenuModule.getColumnMenu().ej2_instances[0].dataBind();\n }\n\n this.notify(events.rtlUpdated, {});\n break;\n\n case 'enableAltRow':\n this.renderModule.refresh();\n break;\n\n case 'allowResizing':\n this.headerModule.refreshUI();\n this.updateResizeLines();\n break;\n\n case 'rowHeight':\n if (this.rowHeight) {\n addClass([this.element], 'e-grid-min-height');\n } else {\n removeClass([this.element], 'e-grid-min-height');\n }\n\n this.renderModule.refresh();\n this.headerModule.refreshUI();\n break;\n\n case 'gridLines':\n this.updateGridLines();\n break;\n\n case 'showColumnMenu':\n this.headerModule.refreshUI();\n this.notify(events.uiUpdate, {\n module: 'columnMenu',\n enable: true\n });\n break;\n\n case 'columnMenuItems':\n this.notify(events.uiUpdate, {\n module: 'columnMenu',\n enable: this.columnMenuItems\n });\n break;\n\n case 'contextMenuItems':\n this.notify(events.uiUpdate, {\n module: 'contextMenu',\n enable: this.contextMenuItems\n });\n break;\n\n case 'showColumnChooser':\n this.notify(events.uiUpdate, {\n module: 'columnChooser',\n enable: this.showColumnChooser\n });\n break;\n\n case 'filterSettings':\n this.updateStackedFilter();\n this.notify(events.inBoundModelChanged, {\n module: 'filter',\n properties: newProp.filterSettings\n });\n break;\n\n case 'searchSettings':\n this.notify(events.inBoundModelChanged, {\n module: 'search',\n properties: newProp.searchSettings\n });\n break;\n\n case 'sortSettings':\n this.notify(events.inBoundModelChanged, {\n module: 'sort'\n });\n break;\n\n case 'selectionSettings':\n this.notify(events.inBoundModelChanged, {\n module: 'selection',\n properties: newProp.selectionSettings\n });\n break;\n\n case 'editSettings':\n this.notify(events.inBoundModelChanged, {\n module: 'edit',\n properties: newProp.editSettings\n });\n break;\n\n case 'allowTextWrap':\n case 'textWrapSettings':\n if (this.allowTextWrap) {\n this.applyTextWrap();\n } else {\n this.removeTextWrap();\n }\n\n this.notify(events.freezeRender, {\n case: 'textwrap',\n isModeChg: prop === 'textWrapSettings'\n });\n break;\n\n case 'dataSource':\n var pending_1 = this.getDataModule().getState();\n\n if (Object.getPrototypeOf(newProp).deepWatch) {\n var pKeyField = this.getPrimaryKeyFieldNames()[0];\n\n for (var i = 0, props = Object.keys(newProp.dataSource); i < props.length; i++) {\n this.setRowData(getValue(pKeyField, this.dataSource[props[i]]), this.dataSource[props[i]]);\n }\n } else if (pending_1.isPending) {\n var gResult = !isNullOrUndefined(this.dataSource) ? this.dataSource.result : [];\n var names = pending_1.group || [];\n\n for (var i = 0; i < names.length; i++) {\n gResult = DataUtil.group(gResult, names[i], pending_1.aggregates || []);\n }\n\n this.dataSource = {\n result: gResult,\n count: this.dataSource.count,\n aggregates: this.dataSource.aggregates\n };\n this.getDataModule().setState({});\n pending_1.resolver(this.dataSource);\n } else {\n this.getDataModule().setState({\n isDataChanged: false\n });\n this.notify(events.dataSourceModified, {});\n\n if (!requireGridRefresh) {\n this.renderModule.refresh();\n }\n }\n\n this.scrollRefresh();\n break;\n\n case 'enableHover':\n var action = newProp.enableHover ? addClass : removeClass;\n action([this.element], 'e-gridhover');\n break;\n\n case 'selectedRowIndex':\n if (!this.isSelectedRowIndexUpdating) {\n this.selectRow(newProp.selectedRowIndex);\n }\n\n this.isSelectedRowIndexUpdating = false;\n break;\n }\n };\n\n Grid.prototype.maintainSelection = function (index) {\n var _this = this;\n\n if (index !== -1) {\n var fn_1 = function fn_1() {\n _this.selectRow(index);\n\n _this.off(events.contentReady, fn_1);\n };\n\n this.on(events.contentReady, fn_1, this);\n }\n };\n /**\n * @private\n */\n\n\n Grid.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n\n var filterSettings = 'filterSettings';\n\n if (prop[filterSettings] && this.filterModule && muteOnChange) {\n this.filterModule.refreshFilter();\n }\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.updateDefaultCursor = function () {\n var headerCells = [].slice.call(this.getHeaderContent().querySelectorAll('.e-headercell:not(.e-stackedheadercell)'));\n var stdHdrCell = [].slice.call(this.getHeaderContent().querySelectorAll('.e-stackedheadercell'));\n var cols = this.getColumns();\n\n for (var i = 0; i < headerCells.length; i++) {\n var cell = headerCells[i];\n\n if (this.allowGrouping || this.allowReordering || this.allowSorting) {\n if (!cols[i].allowReordering || !cols[i].allowSorting || !cols[i].allowGrouping) {\n cell.classList.add('e-defaultcursor');\n } else {\n cell.classList.add('e-mousepointer');\n }\n }\n }\n\n for (var count = 0; count < stdHdrCell.length; count++) {\n if (this.allowReordering) {\n stdHdrCell[count].classList.add('e-mousepointer');\n }\n }\n };\n\n Grid.prototype.updateColumnModel = function (columns) {\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[i].columns) {\n this.updateColumnModel(columns[i].columns);\n } else {\n this.columnModel.push(columns[i]);\n }\n }\n\n this.updateFrozenColumns();\n this.updateLockableColumns();\n };\n\n Grid.prototype.updateFrozenColumns = function () {\n var cols = this.columnModel;\n var count = 0;\n\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].isFrozen) {\n cols.splice(this.frozenColumns + count, 0, cols.splice(i, 1)[0]);\n count++;\n }\n }\n };\n\n Grid.prototype.updateLockableColumns = function () {\n var cols = this.columnModel;\n var frozenCount = 0;\n var movableCount = 0;\n var frozenColumns = this.getFrozenColumns();\n\n for (var i = 0; i < cols.length; i++) {\n if (cols[i].lockColumn) {\n if (i < frozenColumns) {\n cols.splice(frozenCount, 0, cols.splice(i, 1)[0]);\n frozenCount++;\n } else {\n cols.splice(frozenColumns + movableCount, 0, cols.splice(i, 1)[0]);\n movableCount++;\n }\n }\n }\n };\n\n Grid.prototype.checkLockColumns = function (cols) {\n for (var i = 0; i < cols.length; i++) {\n if (cols[i].columns) {\n this.checkLockColumns(cols[i].columns);\n } else if (cols[i].lockColumn) {\n this.lockcolPositionCount++;\n }\n }\n };\n /**\n * Gets the columns from the Grid.\n * @return {Column[]}\n * @blazorType List\n */\n\n\n Grid.prototype.getColumns = function (isRefresh) {\n var _this = this;\n\n var inview = this.inViewIndexes.map(function (v) {\n return v - _this.groupSettings.columns.length;\n }).filter(function (v) {\n return v > -1;\n });\n var vLen = inview.length;\n\n if (!this.enableColumnVirtualization || isNullOrUndefined(this.columnModel) || this.columnModel.length === 0 || isRefresh) {\n this.columnModel = [];\n this.updateColumnModel(this.columns);\n }\n\n var columns = vLen === 0 ? this.columnModel : this.columnModel.slice(inview[0], inview[vLen - 1] + 1);\n return columns;\n };\n /**\n * @private\n */\n\n\n Grid.prototype.getStackedHeaderColumnByHeaderText = function (stackedHeader, col) {\n for (var i = 0; i < col.length; i++) {\n var individualColumn = col[i];\n\n if (individualColumn.field === stackedHeader || individualColumn.headerText === stackedHeader) {\n this.stackedColumn = individualColumn;\n break;\n } else if (individualColumn.columns) {\n this.getStackedHeaderColumnByHeaderText(stackedHeader, individualColumn.columns);\n }\n }\n\n return this.stackedColumn;\n };\n /**\n * @private\n */\n\n\n Grid.prototype.getColumnIndexesInView = function () {\n return this.inViewIndexes;\n };\n /**\n * @private\n */\n\n\n Grid.prototype.getQuery = function () {\n return this.query;\n };\n /**\n * @private\n */\n\n\n Grid.prototype.getLocaleConstants = function () {\n return this.defaultLocale;\n };\n /**\n * @private\n */\n\n\n Grid.prototype.setColumnIndexesInView = function (indexes) {\n this.inViewIndexes = indexes;\n };\n /**\n * Gets the visible columns from the Grid.\n * @return {Column[]}\n * @blazorType List\n */\n\n\n Grid.prototype.getVisibleColumns = function () {\n var cols = [];\n\n for (var _i = 0, _a = this.columnModel; _i < _a.length; _i++) {\n var col = _a[_i];\n\n if (col.visible) {\n cols.push(col);\n }\n }\n\n return cols;\n };\n /**\n * Gets the header div of the Grid.\n * @return {Element}\n */\n\n\n Grid.prototype.getHeaderContent = function () {\n return this.headerModule.getPanel();\n };\n /**\n * Sets the header div of the Grid to replace the old header.\n * @param {Element} element - Specifies the Grid header.\n * @return {void}\n */\n\n\n Grid.prototype.setGridHeaderContent = function (element) {\n this.headerModule.setPanel(element);\n };\n /**\n * Gets the content table of the Grid.\n * @return {Element}\n */\n\n\n Grid.prototype.getContentTable = function () {\n return this.contentModule.getTable();\n };\n /**\n * Sets the content table of the Grid to replace the old content table.\n * @param {Element} element - Specifies the Grid content table.\n * @return {void}\n */\n\n\n Grid.prototype.setGridContentTable = function (element) {\n this.contentModule.setTable(element);\n };\n /**\n * Gets the content div of the Grid.\n * @return {Element}\n */\n\n\n Grid.prototype.getContent = function () {\n return this.contentModule.getPanel();\n };\n /**\n * Sets the content div of the Grid to replace the old Grid content.\n * @param {Element} element - Specifies the Grid content.\n * @return {void}\n */\n\n\n Grid.prototype.setGridContent = function (element) {\n this.contentModule.setPanel(element);\n };\n /**\n * Gets the header table element of the Grid.\n * @return {Element}\n */\n\n\n Grid.prototype.getHeaderTable = function () {\n return this.headerModule.getTable();\n };\n /**\n * Sets the header table of the Grid to replace the old one.\n * @param {Element} element - Specifies the Grid header table.\n * @return {void}\n */\n\n\n Grid.prototype.setGridHeaderTable = function (element) {\n this.headerModule.setTable(element);\n };\n /**\n * Gets the footer div of the Grid.\n * @return {Element}\n */\n\n\n Grid.prototype.getFooterContent = function () {\n if (isNullOrUndefined(this.footerElement)) {\n this.footerElement = this.element.getElementsByClassName('e-gridfooter')[0];\n }\n\n return this.footerElement;\n };\n /**\n * Gets the footer table element of the Grid.\n * @return {Element}\n */\n\n\n Grid.prototype.getFooterContentTable = function () {\n if (isNullOrUndefined(this.footerElement)) {\n this.footerElement = this.element.getElementsByClassName('e-gridfooter')[0];\n }\n\n return this.footerElement.firstChild.firstChild;\n };\n /**\n * Gets the pager of the Grid.\n * @return {Element}\n */\n\n\n Grid.prototype.getPager = function () {\n return this.gridPager; //get element from pager\n };\n /**\n * Sets the pager of the Grid to replace the old pager.\n * @param {Element} element - Specifies the Grid pager.\n * @return {void}\n */\n\n\n Grid.prototype.setGridPager = function (element) {\n this.gridPager = element;\n };\n /**\n * Gets a row by index.\n * @param {number} index - Specifies the row index.\n * @return {Element}\n */\n\n\n Grid.prototype.getRowByIndex = function (index) {\n return this.contentModule.getRowByIndex(index);\n };\n /**\n * Gets a movable tables row by index.\n * @param {number} index - Specifies the row index.\n * @return {Element}\n */\n\n\n Grid.prototype.getMovableRowByIndex = function (index) {\n return this.contentModule.getMovableRowByIndex(index);\n };\n /**\n * Gets a frozen tables row by index.\n * @param {number} index - Specifies the row index.\n * @return {Element}\n */\n\n\n Grid.prototype.getFrozenRowByIndex = function (index) {\n return this.getFrozenDataRows()[index];\n };\n /**\n * Gets all the data rows of the Grid.\n * @return {Element[]}\n */\n\n\n Grid.prototype.getRows = function () {\n return this.contentModule.getRowElements();\n };\n /**\n * Get a row information based on cell\n * @param {Element}\n * @return RowInfo\n */\n\n\n Grid.prototype.getRowInfo = function (target) {\n var ele = target;\n var args = {\n target: target\n };\n\n if (!isNullOrUndefined(target) && isNullOrUndefined(parentsUntil(ele, 'e-detailrowcollapse') && isNullOrUndefined(parentsUntil(ele, 'e-recordplusexpand'))) && !this.isEdit) {\n var cell = closest(ele, '.e-rowcell');\n\n if (!cell) {\n return args;\n }\n\n var cellIndex = parseInt(cell.getAttribute('aria-colindex'), 10);\n\n if (!isNullOrUndefined(cell) && !isNaN(cellIndex)) {\n var row_1 = closest(cell, '.e-row');\n var rowIndex = parseInt(row_1.getAttribute('aria-rowindex'), 10);\n var frzCols = this.getFrozenColumns();\n var isMovable = frzCols ? cellIndex >= frzCols : false;\n var rows = isMovable ? this.contentModule.getMovableRows() : this.contentModule.getRows();\n var rowsObject = rows.filter(function (r) {\n return r.uid === row_1.getAttribute('data-uid');\n });\n var rowData = {};\n var column = void 0;\n\n if (Object.keys(rowsObject).length) {\n rowData = rowsObject[0].data;\n column = rowsObject[0].cells[isMovable ? cellIndex - frzCols : cellIndex].column;\n }\n\n args = {\n cell: cell,\n cellIndex: cellIndex,\n row: row_1,\n rowIndex: rowIndex,\n rowData: rowData,\n column: column,\n target: target\n };\n }\n }\n\n return args;\n };\n /**\n * Gets the Grid's movable content rows from frozen grid.\n * @return {Element[]}\n */\n\n\n Grid.prototype.getMovableRows = function () {\n return this.contentModule.getMovableRowElements();\n };\n /**\n * Gets all the Grid's data rows.\n * @return {Element[]}\n */\n\n\n Grid.prototype.getDataRows = function () {\n var rows = [].slice.call(this.getContentTable().querySelector('tbody').children);\n\n if (this.frozenRows) {\n var freezeRows = [].slice.call(this.getHeaderTable().querySelector('tbody').children);\n rows = this.addMovableRows(freezeRows, rows);\n }\n\n var dataRows = this.generateDataRows(rows);\n return dataRows;\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.addMovableRows = function (fRows, mrows) {\n for (var i = 0, len = mrows.length; i < len; i++) {\n fRows.push(mrows[i]);\n }\n\n return fRows;\n };\n\n Grid.prototype.generateDataRows = function (rows) {\n var dRows = [];\n\n for (var i = 0, len = rows.length; i < len; i++) {\n if (rows[i].classList.contains('e-row') && !rows[i].classList.contains('e-hiddenrow')) {\n if (this.isCollapseStateEnabled()) {\n dRows[parseInt(rows[i].getAttribute(\"aria-rowindex\"))] = rows[i];\n } else {\n dRows.push(rows[i]);\n }\n }\n }\n\n return dRows;\n };\n /**\n * Gets all the Grid's movable table data rows.\n * @return {Element[]}\n */\n\n\n Grid.prototype.getMovableDataRows = function () {\n var rows = [].slice.call(this.getContent().querySelector('.e-movablecontent').querySelector('tbody').children);\n\n if (this.frozenRows) {\n var freezeRows = [].slice.call(this.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody').children);\n rows = this.addMovableRows(freezeRows, rows);\n }\n\n var dataRows = this.generateDataRows(rows);\n return dataRows;\n };\n /**\n * Gets all the Grid's frozen table data rows.\n * @return {Element[]}\n */\n\n\n Grid.prototype.getFrozenDataRows = function () {\n var rows = [].slice.call(this.getContent().querySelector('.e-frozencontent').querySelector('tbody').children);\n\n if (this.frozenRows) {\n var freezeRows = [].slice.call(this.getHeaderContent().querySelector('.e-frozenheader').querySelector('tbody').children);\n rows = this.addMovableRows(freezeRows, rows);\n }\n\n var dataRows = this.generateDataRows(rows);\n return dataRows;\n };\n /**\n * Updates particular cell value based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\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 */\n\n\n Grid.prototype.setCellValue = function (key, field, value) {\n var cells = 'cells';\n var rowData = 'data';\n var rowIdx = 'index';\n var rowuID = 'uid';\n var fieldIdx;\n var col;\n var tr;\n var mTr;\n var pkName = this.getPrimaryKeyFieldNames()[0];\n var cell = new CellRenderer(this, this.serviceLocator);\n var selectedRow = {};\n var movableSelectedRow = {};\n var rowObjects = this.contentModule.getRows();\n var movableRowObjects = this.contentModule.getMovableRows();\n fieldIdx = this.getColumnIndexByField(field);\n\n if (this.groupSettings.columns.length) {\n fieldIdx = fieldIdx + this.groupSettings.columns.length;\n }\n\n if (this.childGrid || this.detailTemplate) {\n fieldIdx++;\n }\n\n if (this.allowRowDragAndDrop) {\n fieldIdx++;\n }\n\n col = this.getColumnByField(field);\n selectedRow = rowObjects.filter(function (r) {\n return getValue(pkName, r.data) === key;\n })[0];\n movableSelectedRow = movableRowObjects.filter(function (r) {\n return getValue(pkName, r.data) === key;\n })[0];\n tr = !isNullOrUndefined(selectedRow) ? this.element.querySelector('[data-uid=' + selectedRow[rowuID] + ']') : null;\n mTr = !isNullOrUndefined(movableSelectedRow) ? this.element.querySelector('[data-uid=' + movableSelectedRow[rowuID] + ']') : null;\n\n if (!isNullOrUndefined(tr)) {\n setValue(field, value, selectedRow[rowData]);\n var td = !isNullOrUndefined(tr.childNodes[fieldIdx]) ? tr.childNodes[fieldIdx] : mTr.childNodes[fieldIdx - this.frozenColumns];\n\n if (!isNullOrUndefined(td)) {\n var sRow = selectedRow[cells][fieldIdx];\n var mRow = void 0;\n\n if (this.frozenColumns) {\n mRow = movableSelectedRow[cells][fieldIdx - this.frozenColumns];\n }\n\n cell.refreshTD(td, !isNullOrUndefined(sRow) ? sRow : mRow, selectedRow[rowData], {\n index: selectedRow[rowIdx]\n });\n\n if (this.aggregates.length > 0) {\n this.notify(events.refreshFooterRenderer, {});\n\n if (this.groupSettings.columns.length > 0) {\n this.notify(events.groupAggregates, {});\n }\n }\n /* tslint:disable:no-string-literal */\n\n\n if (!isNullOrUndefined(movableSelectedRow) && !isNullOrUndefined(movableSelectedRow['changes'])) {\n movableSelectedRow['changes'][field] = value;\n }\n /* tslint:disable:no-string-literal */\n\n\n this.trigger(events.queryCellInfo, {\n cell: td,\n column: col,\n data: selectedRow[rowData]\n });\n }\n } else {\n return;\n }\n };\n /**\n * Updates and refresh the particular row values based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {Object} rowData - To update new data for the particular row.\n */\n\n\n Grid.prototype.setRowData = function (key, rowData) {\n var rwdata = 'data';\n var rowuID = 'uid';\n var rowObjects = this.contentModule.getRows();\n var selectedRow;\n var pkName = this.getPrimaryKeyFieldNames()[0];\n var rowRenderer = new RowRenderer(this.serviceLocator, null, this);\n\n if (this.groupSettings.columns.length > 0 && this.aggregates.length > 0) {\n rowObjects = rowObjects.filter(function (row) {\n return row.isDataRow;\n });\n }\n\n selectedRow = rowObjects.filter(function (r) {\n return getValue(pkName, r.data) === key;\n })[0];\n\n if (!isNullOrUndefined(selectedRow) && this.element.querySelectorAll('[data-uid=' + selectedRow[rowuID] + ']').length) {\n selectedRow.changes = rowData;\n refreshForeignData(selectedRow, this.getForeignKeyColumns(), selectedRow.changes);\n rowRenderer.refresh(selectedRow, this.getColumns(), true);\n\n if (this.aggregates.length > 0) {\n this.notify(events.refreshFooterRenderer, {});\n\n if (this.groupSettings.columns.length > 0) {\n this.notify(events.groupAggregates, {});\n }\n }\n } else {\n return;\n }\n };\n /**\n * Gets a cell by row and column index.\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @return {Element}\n */\n\n\n Grid.prototype.getCellFromIndex = function (rowIndex, columnIndex) {\n return this.getDataRows()[rowIndex] && this.getDataRows()[rowIndex].querySelectorAll('.e-rowcell')[columnIndex];\n };\n /**\n * Gets a movable table cell by row and column index.\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @return {Element}\n */\n\n\n Grid.prototype.getMovableCellFromIndex = function (rowIndex, columnIndex) {\n return this.getMovableDataRows()[rowIndex] && this.getMovableDataRows()[rowIndex].querySelectorAll('.e-rowcell')[columnIndex - this.getFrozenColumns()];\n };\n /**\n * Gets a column header by column index.\n * @param {number} index - Specifies the column index.\n * @return {Element}\n */\n\n\n Grid.prototype.getColumnHeaderByIndex = function (index) {\n return this.getHeaderTable().querySelectorAll('.e-headercell')[index];\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.getRowObjectFromUID = function (uid) {\n var rows = this.contentModule.getRows();\n var row = this.rowObject(rows, uid);\n\n if (this.getFrozenColumns()) {\n if (!row) {\n row = this.rowObject(this.contentModule.getMovableRows(), uid);\n return row;\n }\n }\n\n if (isNullOrUndefined(row) && this.enableVirtualization && this.groupSettings.columns.length > 0) {\n row = this.rowObject(this.vRows, uid);\n return row;\n }\n\n return row;\n };\n\n Grid.prototype.rowObject = function (rows, uid) {\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n\n if (row.uid === uid) {\n return row;\n }\n }\n\n return null;\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.getRowsObject = function () {\n return this.contentModule.getRows();\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.getMovableRowsObject = function () {\n return this.contentModule.getMovableRows();\n };\n /**\n * Gets a column header by column name.\n * @param {string} field - Specifies the column name.\n * @return {Element}\n */\n\n\n Grid.prototype.getColumnHeaderByField = function (field) {\n return this.getColumnHeaderByUid(this.getColumnByField(field).uid);\n };\n /**\n * Gets a column header by UID.\n * @param {string} field - Specifies the column uid.\n * @return {Element}\n */\n\n\n Grid.prototype.getColumnHeaderByUid = function (uid) {\n return this.getHeaderContent().querySelector('[e-mappinguid=' + uid + ']').parentElement;\n };\n /**\n * @hidden\n * @blazorType GridColumn\n */\n\n\n Grid.prototype.getColumnByIndex = function (index) {\n var column;\n this.getColumns().some(function (col, i) {\n column = col;\n return i === index;\n });\n return column;\n };\n /**\n * Gets a Column by column name.\n * @param {string} field - Specifies the column name.\n * @return {Column}\n * @blazorType GridColumn\n */\n\n\n Grid.prototype.getColumnByField = function (field) {\n return iterateArrayOrObject(this.getColumns(), function (item, index) {\n if (item.field === field) {\n return item;\n }\n\n return undefined;\n })[0];\n };\n /**\n * Gets a column index by column name.\n * @param {string} field - Specifies the column name.\n * @return {number}\n */\n\n\n Grid.prototype.getColumnIndexByField = function (field) {\n var cols = this.getColumns();\n\n for (var i = 0; i < cols.length; i++) {\n if (cols[i].field === field) {\n return i;\n }\n }\n\n return -1;\n };\n /**\n * Gets a column by UID.\n * @param {string} uid - Specifies the column UID.\n * @return {Column}\n * @blazorType GridColumn\n */\n\n\n Grid.prototype.getColumnByUid = function (uid) {\n return iterateArrayOrObject(this.getColumns().concat(this.getStackedColumns(this.columns)), function (item, index) {\n if (item.uid === uid) {\n return item;\n }\n\n return undefined;\n })[0];\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.getStackedColumns = function (columns, stackedColumn) {\n if (stackedColumn === void 0) {\n stackedColumn = [];\n }\n\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n\n if (column.columns) {\n stackedColumn.push(column);\n this.getStackedColumns(column.columns, stackedColumn);\n }\n }\n\n return stackedColumn;\n };\n /**\n * Gets a column index by UID.\n * @param {string} uid - Specifies the column UID.\n * @return {number}\n */\n\n\n Grid.prototype.getColumnIndexByUid = function (uid) {\n var index = iterateArrayOrObject(this.getColumns(), function (item, index) {\n if (item.uid === uid) {\n return index;\n }\n\n return undefined;\n })[0];\n return !isNullOrUndefined(index) ? index : -1;\n };\n /**\n * Gets UID by column name.\n * @param {string} field - Specifies the column name.\n * @return {string}\n */\n\n\n Grid.prototype.getUidByColumnField = function (field) {\n return iterateArrayOrObject(this.getColumns(), function (item, index) {\n if (item.field === field) {\n return item.uid;\n }\n\n return undefined;\n })[0];\n };\n /**\n * Gets TH index by column uid value.\n * @private\n * @param {string} uid - Specifies the column uid.\n * @return {number}\n */\n\n\n Grid.prototype.getNormalizedColumnIndex = function (uid) {\n var index = this.getColumnIndexByUid(uid);\n return index + this.getIndentCount();\n };\n /**\n * Gets indent cell count.\n * @private\n * @return {number}\n */\n\n\n Grid.prototype.getIndentCount = function () {\n var index = 0;\n\n if (this.allowGrouping) {\n index += this.groupSettings.columns.length;\n }\n\n if (this.isDetail()) {\n index++;\n }\n\n if (this.allowRowDragAndDrop && isNullOrUndefined(this.rowDropSettings.targetID)) {\n index++;\n }\n /**\n * TODO: index normalization based on the stacked header, grouping and detailTemplate\n * and frozen should be handled here\n */\n\n\n return index;\n };\n /**\n * Gets the collection of column fields.\n * @return {string[]}\n */\n\n\n Grid.prototype.getColumnFieldNames = function () {\n var columnNames = [];\n var column;\n\n for (var i = 0, len = this.getColumns().length; i < len; i++) {\n column = this.getColumns()[i];\n\n if (column.visible) {\n columnNames.push(column.field);\n }\n }\n\n return columnNames;\n };\n /**\n * Gets a compiled row template.\n * @return {Function}\n * @private\n */\n\n\n Grid.prototype.getRowTemplate = function () {\n return this.rowTemplateFn;\n };\n /**\n * Gets a compiled detail row template.\n * @private\n * @return {Function}\n */\n\n\n Grid.prototype.getDetailTemplate = function () {\n return this.detailTemplateFn;\n };\n /**\n * Gets a compiled detail row template.\n * @private\n * @return {Function}\n */\n\n\n Grid.prototype.getEditTemplate = function () {\n return this.editTemplateFn;\n };\n /**\n * Gets a compiled dialog edit header template.\n * @private\n * @return {Function}\n */\n\n\n Grid.prototype.getEditHeaderTemplate = function () {\n return this.editHeaderTemplateFn;\n };\n /**\n * Gets a compiled dialog edit footer template.\n * @private\n * @return {Function}\n */\n\n\n Grid.prototype.getEditFooterTemplate = function () {\n return this.editFooterTemplateFn;\n };\n /**\n * Get the names of the primary key columns of the Grid.\n * @return {string[]}\n */\n\n\n Grid.prototype.getPrimaryKeyFieldNames = function () {\n var keys = [];\n\n for (var k = 0; k < this.columnModel.length; k++) {\n if (this.columnModel[k].isPrimaryKey) {\n keys.push(this.columnModel[k].field);\n }\n }\n\n return keys;\n };\n /**\n * Refreshes the Grid header and content.\n */\n\n\n Grid.prototype.refresh = function () {\n this.headerModule.refreshUI();\n this.updateStackedFilter();\n this.renderModule.refresh();\n };\n /**\n * Refreshes the Grid header.\n */\n\n\n Grid.prototype.refreshHeader = function () {\n this.headerModule.refreshUI();\n };\n /**\n * Gets the collection of selected rows.\n * @return {Element[]}\n */\n\n\n Grid.prototype.getSelectedRows = function () {\n return this.selectionModule ? this.selectionModule.selectedRecords : [];\n };\n /**\n * Gets the collection of selected row indexes.\n * @return {number[]}\n */\n\n\n Grid.prototype.getSelectedRowIndexes = function () {\n return this.selectionModule ? this.selectionModule.selectedRowIndexes : [];\n };\n /**\n * Gets the collection of selected row and cell indexes.\n * @return {number[]}\n */\n\n\n Grid.prototype.getSelectedRowCellIndexes = function () {\n return this.selectionModule ? this.selectionModule.selectedRowCellIndexes : [];\n };\n /**\n * Gets the collection of selected records.\n * @return {Object[]}\n * @isGenericType true\n */\n\n\n Grid.prototype.getSelectedRecords = function () {\n return this.selectionModule ? this.selectionModule.getSelectedRecords() : [];\n };\n /**\n * Gets the data module.\n * @return {Data}\n */\n\n\n Grid.prototype.getDataModule = function () {\n return this.renderModule.data;\n };\n /**\n * Shows a column by its column name.\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} showBy - Defines the column key either as field name or header text.\n * @return {void}\n */\n\n\n Grid.prototype.showColumns = function (keys, showBy) {\n showBy = showBy ? showBy : 'headerText';\n this.showHider.show(keys, showBy);\n };\n /**\n * Hides a column by column name.\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} hideBy - Defines the column key either as field name or header text.\n * @return {void}\n */\n\n\n Grid.prototype.hideColumns = function (keys, hideBy) {\n hideBy = hideBy ? hideBy : 'headerText';\n this.showHider.hide(keys, hideBy);\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.getFrozenColumns = function () {\n return this.frozenColumns + this.getFrozenCount(this.columns, 0);\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.getVisibleFrozenColumns = function () {\n return this.getVisibleFrozenColumnsCount() + this.getVisibleFrozenCount(this.columns, 0);\n };\n /**\n * Get the current Filter operator and field.\n * @return {Object}\n */\n\n\n Grid.prototype.getFilterUIInfo = function () {\n return this.filterModule ? this.filterModule.getFilterUIInfo() : {};\n };\n\n Grid.prototype.getVisibleFrozenColumnsCount = function () {\n var visibleFrozenColumns = 0;\n var col = this.columns;\n\n for (var i = 0; i < this.frozenColumns; i++) {\n if (col[i].visible) {\n visibleFrozenColumns++;\n }\n }\n\n return visibleFrozenColumns;\n };\n\n Grid.prototype.getVisibleFrozenCount = function (cols, cnt) {\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].columns) {\n cnt = this.getVisibleFrozenCount(cols[i].columns, cnt);\n } else {\n if (cols[i].isFrozen && cols[i].visible) {\n cnt++;\n }\n }\n }\n\n return cnt;\n };\n\n Grid.prototype.getFrozenCount = function (cols, cnt) {\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].columns) {\n cnt = this.getFrozenCount(cols[i].columns, cnt);\n } else {\n if (cols[i].isFrozen) {\n cnt++;\n }\n }\n }\n\n return cnt;\n };\n /**\n * Navigates to the specified target page.\n * @param {number} pageNo - Defines the page number to navigate.\n * @return {void}\n */\n\n\n Grid.prototype.goToPage = function (pageNo) {\n if (this.pagerModule) {\n this.pagerModule.goToPage(pageNo);\n }\n };\n /**\n * Defines the text of external message.\n * @param {string} message - Defines the message to update.\n * @return {void}\n */\n\n\n Grid.prototype.updateExternalMessage = function (message) {\n if (this.pagerModule) {\n this.pagerModule.updateExternalMessage(message);\n }\n };\n /**\n * Sorts a column with the given options.\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @return {void}\n */\n\n\n Grid.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n if (this.sortModule) {\n this.sortModule.sortColumn(columnName, direction, isMultiSort);\n }\n };\n /**\n * Clears all the sorted columns of the Grid.\n * @return {void}\n */\n\n\n Grid.prototype.clearSorting = function () {\n if (this.sortModule) {\n this.sortModule.clearSorting();\n }\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 Grid.prototype.removeSortColumn = function (field) {\n if (this.sortModule) {\n this.sortModule.removeSortColumn(field);\n }\n };\n /**\n * Filters grid row by column name with the given options.\n * @param {string} fieldName - Defines the field name of the column.\n * @param {string} filterOperator - Defines the operator to filter records.\n * @param {string | number | Date | boolean} filterValue - Defines the value used to filter records.\n * @param {string} predicate - Defines the relationship between one filter query and another by using AND or OR predicate.\n * @param {boolean} matchCase - If match case is set to true, the grid filters the records with exact match. if false, it filters case\n * insensitive records (uppercase and lowercase letters treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent set to true,\n * then filter ignores the diacritic characters or accents while filtering.\n * @param {string} actualFilterValue - Defines the actual filter value for the filter column.\n * @param {string} actualOperator - Defines the actual filter operator for the filter column.\n * @return {void}\n */\n\n\n Grid.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n if (this.filterModule) {\n this.filterModule.filterByColumn(fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator);\n }\n };\n /**\n * Clears all the filtered rows of the Grid.\n * @return {void}\n */\n\n\n Grid.prototype.clearFiltering = function (fields) {\n if (this.filterModule) {\n this.filterModule.clearFiltering(fields);\n }\n };\n /**\n * Removes filtered column by field name.\n * @param {string} field - Defines column field name to remove filter.\n * @param {boolean} isClearFilterBar - Specifies whether the filter bar value needs to be cleared.\n * @return {void}\n * @hidden\n */\n\n\n Grid.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n if (this.filterModule) {\n this.filterModule.removeFilteredColsByField(field, isClearFilterBar);\n }\n };\n /**\n * Selects a row by 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 Grid.prototype.selectRow = function (index, isToggle) {\n if (this.selectionModule) {\n this.selectionModule.selectRow(index, isToggle);\n }\n };\n /**\n * Selects a collection of rows by indexes.\n * @param {number[]} rowIndexes - Specifies the row indexes.\n * @return {void}\n */\n\n\n Grid.prototype.selectRows = function (rowIndexes) {\n if (this.selectionModule) {\n this.selectionModule.selectRows(rowIndexes);\n }\n };\n /**\n * Deselects the current selected rows and cells.\n * @return {void}\n */\n\n\n Grid.prototype.clearSelection = function () {\n if (this.selectionModule) {\n this.selectionModule.clearSelection();\n }\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 Grid.prototype.selectCell = function (cellIndex, isToggle) {\n if (this.selectionModule) {\n this.selectionModule.selectCell(cellIndex, isToggle);\n }\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 Grid.prototype.selectCellsByRange = function (startIndex, endIndex) {\n this.selectionModule.selectCellsByRange(startIndex, endIndex);\n };\n /**\n * Searches Grid records using the given key.\n * You can customize the default search option by using the\n * [`searchSettings`](./#searchsettings/).\n * @param {string} searchString - Defines the key.\n * @return {void}\n */\n\n\n Grid.prototype.search = function (searchString) {\n if (this.searchModule) {\n this.searchModule.search(searchString);\n }\n };\n /**\n * By default, prints all the pages of the Grid and hides the pager.\n * > You can customize print options using the\n * [`printMode`](./#printmode).\n * @return {void}\n */\n\n\n Grid.prototype.print = function () {\n if (this.printModule) {\n this.printModule.print();\n }\n };\n /**\n * Delete a record with Given options. If fieldname and data is not given then grid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n * @param {string} fieldname - Defines the primary key field, 'Name of the column'.\n * @param {Object} data - Defines the JSON data of the record to be deleted.\n */\n\n\n Grid.prototype.deleteRecord = function (fieldname, data) {\n if (this.editModule) {\n this.editModule.deleteRecord(fieldname, data);\n }\n };\n /**\n * Starts edit the selected row. At least one row must be selected before invoking this method.\n * `editSettings.allowEditing` should be true.\n * @return {void}\n */\n\n\n Grid.prototype.startEdit = function () {\n if (this.editModule) {\n this.editModule.startEdit();\n }\n };\n /**\n * If Grid is in editable state, you can save a record by invoking endEdit.\n */\n\n\n Grid.prototype.endEdit = function () {\n if (this.editModule) {\n this.editModule.endEdit();\n }\n };\n /**\n * Cancels edited state.\n */\n\n\n Grid.prototype.closeEdit = function () {\n if (this.editModule) {\n this.editModule.closeEdit();\n }\n };\n /**\n * Adds a new record to the Grid. Without passing parameters, it adds empty rows.\n * > `editSettings.allowEditing` should be true.\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added\n */\n\n\n Grid.prototype.addRecord = function (data, index) {\n if (this.editModule) {\n this.editModule.addRecord(data, index);\n }\n };\n /**\n * Delete any visible row by TR element.\n * @param {HTMLTableRowElement} tr - Defines the table row element.\n */\n\n\n Grid.prototype.deleteRow = function (tr) {\n if (this.editModule) {\n this.editModule.deleteRow(tr);\n }\n };\n /**\n * Changes a particular cell into edited state based on the row index and field name provided in the `batch` mode.\n * @param {number} index - Defines row index to edit a particular cell.\n * @param {string} field - Defines the field name of the column to perform batch edit.\n */\n\n\n Grid.prototype.editCell = function (index, field) {\n if (this.editModule) {\n this.editModule.editCell(index, field);\n }\n };\n /**\n * Saves the cell that is currently edited. It does not save the value to the DataSource.\n */\n\n\n Grid.prototype.saveCell = function () {\n if (this.editModule) {\n this.editModule.saveCell();\n }\n };\n /**\n * To update the specified cell by given value without changing into edited state.\n * @param {number} rowIndex Defines the row index.\n * @param {string} field Defines the column field.\n * @param {string | number | boolean | Date} value - Defines the value to be changed.\n */\n\n\n Grid.prototype.updateCell = function (rowIndex, field, value) {\n if (this.editModule) {\n this.editModule.updateCell(rowIndex, field, value);\n }\n };\n /**\n * To update the specified row by given values without changing into edited state.\n * @param {number} index Defines the row index.\n * @param {Object} data Defines the data object to be updated.\n */\n\n\n Grid.prototype.updateRow = function (index, data) {\n if (this.editModule) {\n this.editModule.updateRow(index, data);\n }\n };\n /**\n * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.\n * @return {Object}\n */\n\n\n Grid.prototype.getBatchChanges = function () {\n if (this.editModule) {\n return this.editModule.getBatchChanges();\n }\n\n return {};\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 */\n\n\n Grid.prototype.enableToolbarItems = function (items, isEnable) {\n if (this.toolbarModule) {\n this.toolbarModule.enableItems(items, isEnable);\n }\n };\n /**\n * Copy the selected rows or cells data into clipboard.\n * @param {boolean} withHeader - Specifies whether the column header text needs to be copied along with rows or cells.\n */\n\n\n Grid.prototype.copy = function (withHeader) {\n if (this.clipboardModule) {\n this.clipboardModule.copy(withHeader);\n }\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.recalcIndentWidth = function () {\n var _this = this;\n\n if (!this.getHeaderTable().querySelector('.e-emptycell')) {\n return;\n }\n\n if (!this.groupSettings.columns.length && !this.isDetail() && !this.isRowDragable() || this.getHeaderTable().querySelector('.e-emptycell').getAttribute('indentRefreshed') || !this.getContentTable()) {\n return;\n }\n\n var indentWidth = this.getHeaderTable().querySelector('.e-emptycell').parentElement.offsetWidth;\n var headerCol = [].slice.call(this.getHeaderTable().querySelector('colgroup').childNodes);\n var contentCol = [].slice.call(this.getContentTable().querySelector('colgroup').childNodes);\n var perPixel = indentWidth / 30;\n var i = 0;\n\n var applyWidth = function applyWidth(index, width) {\n headerCol[index].style.width = width + 'px';\n contentCol[index].style.width = width + 'px';\n\n _this.notify(events.columnWidthChanged, {\n index: index,\n width: width\n });\n };\n\n if (perPixel >= 1) {\n indentWidth = 30 / perPixel;\n }\n\n if (this.enableColumnVirtualization || this.isAutoGen) {\n indentWidth = 30;\n }\n\n while (i < this.groupSettings.columns.length) {\n applyWidth(i, indentWidth);\n i++;\n }\n\n if (this.isDetail()) {\n applyWidth(i, indentWidth);\n i++;\n }\n\n if (this.isRowDragable()) {\n applyWidth(i, indentWidth);\n }\n\n this.isAutoGen = false;\n this.getHeaderTable().querySelector('.e-emptycell').setAttribute('indentRefreshed', 'true');\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.isRowDragable = function () {\n return this.allowRowDragAndDrop && !this.rowDropSettings.targetID;\n };\n /**\n * Changes the Grid column positions by field names.\n * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n * @return {void}\n */\n\n\n Grid.prototype.reorderColumns = function (fromFName, toFName) {\n if (this.reorderModule) {\n this.reorderModule.reorderColumns(fromFName, toFName);\n }\n };\n /**\n * Changes the Grid column positions by field index. If you invoke reorderColumnByIndex multiple times,\n * then you won't get the same results every time.\n * @param {number} fromIndex - Defines the origin field index.\n * @param {number} toIndex - Defines the destination field index.\n * @return {void}\n */\n\n\n Grid.prototype.reorderColumnByIndex = function (fromIndex, toIndex) {\n if (this.reorderModule) {\n this.reorderModule.reorderColumnByIndex(fromIndex, toIndex);\n }\n };\n /**\n * Changes the Grid column positions by field index. If you invoke reorderColumnByTargetIndex multiple times,\n * then you will get the same results every time.\n * @param {string} fieldName - Defines the field name.\n * @param {number} toIndex - Defines the destination field index.\n * @return {void}\n */\n\n\n Grid.prototype.reorderColumnByTargetIndex = function (fieldName, toIndex) {\n if (this.reorderModule) {\n this.reorderModule.reorderColumnByTargetIndex(fieldName, toIndex);\n }\n };\n /**\n * Changes the Grid Row position with given indexes.\n * @param {number} fromIndexes - Defines the origin Indexes.\n * @param {number} toIndex - Defines the destination Index.\n * @return {void}\n */\n\n\n Grid.prototype.reorderRows = function (fromIndexes, toIndex) {\n if (this.rowDragAndDropModule) {\n this.rowDragAndDropModule.reorderRows(fromIndexes, toIndex);\n }\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.refreshDataSource = function (e, args) {\n this.notify('refreshdataSource', e);\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.disableRowDD = function (enable) {\n var headerTable = this.getHeaderTable();\n var contentTable = this.getContentTable();\n var headerRows = headerTable.querySelectorAll('th.e-rowdragheader, th.e-mastercell');\n var rows = this.getRows();\n var disValue = enable ? 'none' : '';\n setStyleAttribute(headerTable.querySelector('colgroup').childNodes[0], {\n 'display': disValue\n });\n setStyleAttribute(contentTable.querySelector('colgroup').childNodes[0], {\n 'display': disValue\n });\n\n for (var i = 0; i < this.getRows().length; i++) {\n var ele = rows[i].firstElementChild;\n enable ? addClass([ele], 'e-hide') : removeClass([ele], ['e-hide']);\n }\n\n for (var j = 0; j < headerTable.querySelectorAll('th.e-rowdragheader, th.e-mastercell').length; j++) {\n var ele = headerRows[j];\n enable ? addClass([ele], 'e-hide') : removeClass([ele], ['e-hide']);\n }\n };\n /**\n * Changes the column width to automatically fit its content to ensure that the width shows the content without wrapping/hiding.\n * > * This method ignores the hidden columns.\n * > * Uses the `autoFitColumns` method in the `dataBound` event to resize at initial rendering.\n * @param {string |string[]} fieldNames - Defines the column names.\n * @return {void}\n *\n *\n * ```typescript\n *
\n * \n * ```\n *\n */\n\n\n Grid.prototype.autoFitColumns = function (fieldNames) {\n if (this.resizeModule) {\n this.resizeModule.autoFitColumns(fieldNames);\n }\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.createColumnchooser = function (x, y, target) {\n if (this.columnChooserModule) {\n this.columnChooserModule.renderColumnChooser(x, y, target);\n }\n };\n\n Grid.prototype.initializeServices = function () {\n this.serviceLocator.register('widthService', this.widthService = new ColumnWidthService(this));\n this.serviceLocator.register('cellRendererFactory', new CellRendererFactory());\n this.serviceLocator.register('rendererFactory', new RendererFactory());\n this.serviceLocator.register('localization', this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale));\n this.serviceLocator.register('valueFormatter', this.valueFormatterService = new ValueFormatter(this.locale));\n this.serviceLocator.register('showHideService', this.showHider = new ShowHide(this));\n this.serviceLocator.register('ariaService', this.ariaService = new AriaService());\n this.serviceLocator.register('focus', this.focusModule = new FocusStrategy(this));\n };\n\n Grid.prototype.processModel = function () {\n var gCols = this.groupSettings.columns;\n var sCols = this.sortSettings.columns;\n var flag;\n var j;\n\n if (this.allowGrouping) {\n var _loop_1 = function _loop_1(i, len) {\n j = 0;\n\n for (var sLen = sCols.length; j < sLen; j++) {\n if (sCols[j].field === gCols[i]) {\n flag = true;\n break;\n }\n }\n\n if (!flag) {\n sCols.push({\n field: gCols[i],\n direction: 'Ascending'\n });\n } else {\n if (this_1.allowSorting) {\n this_1.sortedColumns.push(sCols[j].field);\n } else {\n sCols[j].direction = 'Ascending';\n }\n }\n\n if (!this_1.groupSettings.showGroupedColumn) {\n var column = this_1.enableColumnVirtualization ? this_1.columns.filter(function (c) {\n return c.field === gCols[i];\n })[0] : this_1.getColumnByField(gCols[i]);\n\n if (column) {\n column.visible = false;\n } else {\n this_1.log('initial_action', {\n moduleName: 'group',\n columnName: gCols[i]\n });\n }\n }\n };\n\n var this_1 = this;\n\n for (var i = 0, len = gCols.length; i < len; i++) {\n _loop_1(i, len);\n }\n }\n\n if (!gCols.length) {\n for (var i = 0; i < sCols.length; i++) {\n this.sortedColumns.push(sCols[i].field);\n }\n }\n\n this.rowTemplateFn = templateCompiler(this.rowTemplate);\n this.detailTemplateFn = templateCompiler(this.detailTemplate);\n this.editTemplateFn = templateCompiler(this.editSettings.template);\n this.editHeaderTemplateFn = templateCompiler(this.editSettings.headerTemplate);\n this.editFooterTemplateFn = templateCompiler(this.editSettings.footerTemplate);\n\n if (!isNullOrUndefined(this.parentDetails)) {\n var value = isNullOrUndefined(this.parentDetails.parentKeyFieldValue) ? 'undefined' : this.parentDetails.parentKeyFieldValue;\n this.query.where(this.queryString, 'equal', value, true);\n }\n\n this.initForeignColumn();\n };\n\n Grid.prototype.initForeignColumn = function () {\n if (this.isForeignKeyEnabled(this.getColumns())) {\n this.notify(events.initForeignKeyColumn, this.getForeignKeyColumns());\n }\n };\n\n Grid.prototype.gridRender = function () {\n this.updateRTL();\n\n if (this.enableHover) {\n this.element.classList.add('e-gridhover');\n }\n\n if (Browser.isDevice) {\n this.element.classList.add('e-device');\n }\n\n if (this.rowHeight) {\n this.element.classList.add('e-grid-min-height');\n }\n\n classList(this.element, ['e-responsive', 'e-default'], []);\n var rendererFactory = this.serviceLocator.getService('rendererFactory');\n this.headerModule = rendererFactory.getRenderer(RenderType.Header);\n this.contentModule = rendererFactory.getRenderer(RenderType.Content);\n this.printModule = new Print(this, this.scrollModule);\n this.clipboardModule = new Clipboard(this);\n this.renderModule.render();\n this.eventInitializer();\n this.createGridPopUpElement();\n this.widthService.setWidthToColumns();\n this.updateGridLines();\n this.applyTextWrap();\n this.createTooltip(); //for clip mode ellipsis\n\n this.enableBoxSelection();\n };\n\n Grid.prototype.dataReady = function () {\n this.scrollModule.setWidth();\n this.scrollModule.setHeight();\n\n if (this.height !== 'auto') {\n this.scrollModule.setPadding();\n }\n };\n\n Grid.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 Grid.prototype.createGridPopUpElement = function () {\n var popup = this.createElement('div', {\n className: 'e-gridpopup',\n styles: 'display:none;'\n });\n var content = this.createElement('div', {\n className: 'e-content',\n attrs: {\n tabIndex: '-1'\n }\n });\n append([content, this.createElement('div', {\n className: 'e-uptail e-tail'\n })], popup);\n content.appendChild(this.createElement('span'));\n append([content, this.createElement('div', {\n className: 'e-downtail e-tail'\n })], popup);\n this.element.appendChild(popup);\n };\n\n Grid.prototype.updateGridLines = function () {\n classList(this.element, [], ['e-verticallines', 'e-horizontallines', 'e-hidelines', 'e-bothlines']);\n\n switch (this.gridLines) {\n case 'Horizontal':\n this.element.classList.add('e-horizontallines');\n break;\n\n case 'Vertical':\n this.element.classList.add('e-verticallines');\n break;\n\n case 'None':\n this.element.classList.add('e-hidelines');\n break;\n\n case 'Both':\n this.element.classList.add('e-bothlines');\n break;\n }\n\n this.updateResizeLines();\n };\n\n Grid.prototype.updateResizeLines = function () {\n if (this.allowResizing && !(this.gridLines === 'Vertical' || this.gridLines === 'Both')) {\n this.element.classList.add('e-resize-lines');\n } else {\n this.element.classList.remove('e-resize-lines');\n }\n };\n /**\n * The function is used to apply text wrap\n * @return {void}\n * @hidden\n */\n\n\n Grid.prototype.applyTextWrap = function () {\n if (this.allowTextWrap) {\n var headerRows = [].slice.call(this.element.querySelectorAll('.e-columnheader'));\n\n switch (this.textWrapSettings.wrapMode) {\n case 'Header':\n wrap(this.element, false);\n wrap(this.getContent(), false);\n wrap(headerRows, true);\n break;\n\n case 'Content':\n wrap(this.getContent(), true);\n wrap(this.element, false);\n wrap(headerRows, false);\n break;\n\n default:\n wrap(this.element, true);\n wrap(this.getContent(), false);\n wrap(headerRows, false);\n }\n }\n };\n /**\n * The function is used to remove text wrap\n * @return {void}\n * @hidden\n */\n\n\n Grid.prototype.removeTextWrap = function () {\n wrap(this.element, false);\n var headerRows = [].slice.call(this.element.querySelectorAll('.e-columnheader'));\n wrap(headerRows, false);\n wrap(this.getContent(), false);\n };\n /**\n * The function is used to add Tooltip to the grid cell that has ellipsiswithtooltip clip mode.\n * @return {void}\n * @hidden\n */\n\n\n Grid.prototype.createTooltip = function () {\n this.toolTipObj = new Tooltip({\n opensOn: 'custom',\n content: ''\n }, this.element);\n };\n /** @hidden */\n\n\n Grid.prototype.freezeRefresh = function () {\n if (this.enableVirtualization) {\n this.pageSettings.currentPage = 1;\n }\n\n this.componentRefresh();\n };\n\n Grid.prototype.getTooltipStatus = function (element) {\n var width;\n var headerTable = this.getHeaderTable();\n var contentTable = this.getContentTable();\n var headerDivTag = 'e-gridheader';\n var contentDivTag = 'e-gridcontent';\n var htable = this.createTable(headerTable, headerDivTag, 'header');\n var ctable = this.createTable(headerTable, headerDivTag, 'content');\n var td = element;\n var table = element.classList.contains('e-headercell') ? htable : ctable;\n var ele = element.classList.contains('e-headercell') ? 'th' : 'tr';\n table.querySelector(ele).className = element.className;\n table.querySelector(ele).innerHTML = element.innerHTML;\n width = table.querySelector(ele).getBoundingClientRect().width;\n document.body.removeChild(htable);\n document.body.removeChild(ctable);\n\n if (width > element.getBoundingClientRect().width) {\n return true;\n }\n\n return false;\n };\n\n Grid.prototype.mouseMoveHandler = function (e) {\n if (this.isEllipsisTooltip()) {\n var element = parentsUntil(e.target, 'e-ellipsistooltip');\n\n if (this.prevElement !== element || e.type === 'mouseout') {\n this.toolTipObj.close();\n }\n\n var tagName = e.target.tagName;\n var elemNames = ['A', 'BUTTON', 'INPUT'];\n\n if (element && e.type !== 'mouseout' && !(Browser.isDevice && elemNames.indexOf(tagName) !== -1)) {\n if (element.getAttribute('aria-describedby')) {\n return;\n }\n\n if (this.getTooltipStatus(element)) {\n if (element.getElementsByClassName('e-headertext').length) {\n this.toolTipObj.content = element.getElementsByClassName('e-headertext')[0].innerText;\n } else {\n this.toolTipObj.content = element.innerText;\n }\n\n this.prevElement = element;\n this.toolTipObj.open(element);\n }\n }\n }\n\n this.hoverFrozenRows(e);\n };\n\n Grid.prototype.hoverFrozenRows = function (e) {\n if (this.getFrozenColumns()) {\n var row = parentsUntil(e.target, 'e-row');\n\n if ([].slice.call(this.element.querySelectorAll('.e-frozenhover')).length && e.type === 'mouseout') {\n var rows = [].slice.call(this.element.querySelectorAll('.e-frozenhover'));\n\n for (var i = 0; i < rows.length; i++) {\n rows[i].classList.remove('e-frozenhover');\n }\n } else if (row) {\n var rows = [].slice.call(this.element.querySelectorAll('tr[aria-rowindex=\"' + row.getAttribute('aria-rowindex') + '\"]'));\n\n for (var i = 0; i < rows.length; i++) {\n rows[i].classList.add('e-frozenhover');\n }\n }\n }\n };\n\n Grid.prototype.isEllipsisTooltip = function () {\n var cols = this.getColumns();\n\n if (this.clipMode === 'EllipsisWithTooltip') {\n return true;\n }\n\n for (var i = 0; i < cols.length; i++) {\n if (cols[i].clipMode === 'EllipsisWithTooltip') {\n return true;\n }\n }\n\n return false;\n };\n\n Grid.prototype.scrollHandler = function () {\n if (this.isEllipsisTooltip()) {\n this.toolTipObj.close();\n }\n };\n /**\n * To create table for ellipsiswithtooltip\n * @hidden\n */\n\n\n Grid.prototype.createTable = function (table, tag, type) {\n var myTableDiv = this.createElement('div');\n myTableDiv.className = this.element.className;\n myTableDiv.style.cssText = 'display: inline-block;visibility:hidden;position:absolute';\n var mySubDiv = this.createElement('div');\n mySubDiv.className = tag;\n var myTable = this.createElement('table');\n myTable.className = table.className;\n myTable.style.cssText = 'table-layout: auto;width: auto';\n var ele = type === 'header' ? 'th' : 'td';\n var myTr = this.createElement('tr');\n var mytd = this.createElement(ele);\n myTr.appendChild(mytd);\n myTable.appendChild(myTr);\n mySubDiv.appendChild(myTable);\n myTableDiv.appendChild(mySubDiv);\n document.body.appendChild(myTableDiv);\n return myTableDiv;\n };\n\n Grid.prototype.onKeyPressed = function (e) {\n if (e.action === 'tab' || e.action === 'shiftTab') {\n this.toolTipObj.close();\n }\n };\n /**\n * Binding events to the element while component creation.\n * @hidden\n */\n\n\n Grid.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'touchend', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n EventHandler.add(this.element, 'dblclick', this.dblClickHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyPressHandler, this);\n\n if (this.allowKeyboard) {\n this.element.tabIndex = this.element.tabIndex === -1 ? 0 : this.element.tabIndex;\n }\n\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.getContent().firstElementChild, 'scroll', this.scrollHandler, this);\n EventHandler.add(this.element, 'mousemove', this.mouseMoveHandler, this);\n EventHandler.add(this.element, 'mouseout', this.mouseMoveHandler, this);\n EventHandler.add(this.getContent(), 'touchstart', this.tapEvent, this);\n EventHandler.add(document.body, 'keydown', this.keyDownHandler, this);\n };\n /**\n * Unbinding events from the element while component destroy.\n * @hidden\n */\n\n\n Grid.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.mouseClickHandler);\n EventHandler.remove(this.element, 'touchend', this.mouseClickHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n EventHandler.remove(this.element, 'dblclick', this.dblClickHandler);\n EventHandler.remove(this.getContent().firstElementChild, 'scroll', this.scrollHandler);\n EventHandler.remove(this.element, 'mousemove', this.mouseMoveHandler);\n EventHandler.remove(this.element, 'mouseout', this.mouseMoveHandler);\n EventHandler.remove(this.element, 'keydown', this.keyPressHandler);\n EventHandler.remove(this.getContent(), 'touchstart', this.tapEvent);\n EventHandler.remove(document.body, 'keydown', this.keyDownHandler);\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.addListener = function () {\n if (this.isDestroyed) {\n return;\n }\n\n this.on(events.dataReady, this.dataReady, this);\n this.on(events.contentReady, this.recalcIndentWidth, this);\n this.on(events.headerRefreshed, this.recalcIndentWidth, this);\n this.dataBoundFunction = this.refreshMediaCol.bind(this);\n this.addEventListener(events.dataBound, this.dataBoundFunction);\n this.on(events.keyPressed, this.onKeyPressed, this);\n this.on(events.contentReady, this.blazorTemplate, this);\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.removeListener = function () {\n if (this.isDestroyed) {\n return;\n }\n\n this.off(events.dataReady, this.dataReady);\n this.off(events.contentReady, this.recalcIndentWidth);\n this.off(events.headerRefreshed, this.recalcIndentWidth);\n this.removeEventListener(events.dataBound, this.dataBoundFunction);\n this.off(events.keyPressed, this.onKeyPressed);\n };\n\n Grid.prototype.blazorTemplate = function () {\n if (isBlazor()) {\n if (this.pageSettings.template) {\n updateBlazorTemplate(this.element.id + \"_template\", 'Template', this.pageSettings);\n }\n\n for (var i = 0; i < this.columnModel.length; i++) {\n if (this.columnModel[i].template) {\n updateBlazorTemplate(this.element.id + this.columnModel[i].uid, 'Template', this.columnModel[i], false);\n }\n\n if (this.columnModel[i].headerTemplate) {\n updateBlazorTemplate(this.element.id + this.columnModel[i].uid + 'headerTemplate', 'HeaderTemplate', this.columnModel[i], false);\n }\n\n if (this.filterSettings.type == 'FilterBar' && this.columnModel[i].filterTemplate) {\n var fieldName = this.columnModel[i].field;\n var tempID = this.element.id + this.columnModel[i].uid + 'filterTemplate';\n var filteredColumns = this.filterSettings.columns;\n\n for (var k = 0; k < filteredColumns.length; k++) {\n if (fieldName == filteredColumns[k].field) {\n blazorTemplates[tempID][0][fieldName] = filteredColumns[k].value;\n }\n }\n\n updateBlazorTemplate(this.element.id + this.columnModel[i].uid + 'filterTemplate', 'FilterTemplate', this.columnModel[i], false);\n }\n\n if (this.filterSettings.type != 'FilterBar' && this.columnModel[i].filterTemplate) {\n updateBlazorTemplate(this.element.id + this.columnModel[i].uid + 'filterTemplate', 'FilterTemplate', this.columnModel[i]);\n }\n }\n\n if (this.groupSettings.captionTemplate) {\n updateBlazorTemplate(this.element.id + 'captionTemplate', 'CaptionTemplate', this.groupSettings);\n }\n\n var guid = 'guid';\n\n for (var k = 0; k < this.aggregates.length; k++) {\n for (var j = 0; j < this.aggregates[k].columns.length; j++) {\n if (this.aggregates[k].columns[j].footerTemplate) {\n updateBlazorTemplate(this.element.id + this.aggregates[k].columns[j][guid] + 'footerTemplate', 'FooterTemplate', this.aggregates[k].columns[j]);\n }\n\n if (this.aggregates[k].columns[j].groupFooterTemplate) {\n updateBlazorTemplate(this.element.id + this.aggregates[k].columns[j][guid] + 'groupFooterTemplate', 'GroupFooterTemplate', this.aggregates[k].columns[j]);\n }\n\n if (this.aggregates[k].columns[j].groupCaptionTemplate) {\n updateBlazorTemplate(this.element.id + this.aggregates[k].columns[j][guid] + 'groupCaptionTemplate', 'GroupCaptionTemplate', this.aggregates[k].columns[j]);\n }\n }\n }\n }\n };\n /**\n * Get current visible data of grid.\n * @return {Object[]}\n * @isGenericType true\n */\n\n\n Grid.prototype.getCurrentViewRecords = function () {\n if (isGroupAdaptive(this)) {\n return isNullOrUndefined(this.currentViewData.records) ? this.currentViewData : this.currentViewData.records;\n }\n\n return this.allowGrouping && this.groupSettings.columns.length && this.currentViewData.length ? this.currentViewData.records : this.currentViewData;\n };\n\n Grid.prototype.mouseClickHandler = function (e) {\n if (this.isChildGrid(e) || parentsUntil(e.target, 'e-gridpopup') && e.touches || this.element.querySelectorAll('.e-cloneproperties').length || this.checkEdit(e)) {\n return;\n }\n\n if ((!this.allowRowDragAndDrop && (parentsUntil(e.target, 'e-gridcontent') || e.target.tagName === 'TD') || !(this.allowGrouping || this.allowReordering) && parentsUntil(e.target, 'e-gridheader')) && e.touches) {\n return;\n }\n\n if (parentsUntil(e.target, 'e-gridheader') && this.allowRowDragAndDrop) {\n e.preventDefault();\n }\n\n var args = this.getRowInfo(e.target);\n var cancel = 'cancel';\n args[cancel] = false;\n var isDataRow = false;\n var tr = closest(e.target, 'tr');\n\n if (tr && tr.getAttribute('data-uid')) {\n var rowObj = this.getRowObjectFromUID(tr.getAttribute('data-uid'));\n isDataRow = rowObj ? rowObj.isDataRow : false;\n }\n\n if (isBlazor()) {\n var clonedColumn = extend({}, args.column);\n args = {\n rowData: args.rowData,\n rowIndex: args.rowIndex,\n cellIndex: args.cellIndex,\n column: clonedColumn\n };\n }\n\n if (isDataRow) {\n this.trigger(events.recordClick, args);\n }\n\n this.notify(events.click, e);\n };\n\n Grid.prototype.checkEdit = function (e) {\n var tr = parentsUntil(e.target, 'e-row');\n var isEdit = this.editSettings.mode !== 'Batch' && this.isEdit && tr && (tr.classList.contains('e-editedrow') || tr.classList.contains('e-addedrow'));\n return !parentsUntil(e.target, 'e-unboundcelldiv') && (isEdit || parentsUntil(e.target, 'e-rowcell') && parentsUntil(e.target, 'e-rowcell').classList.contains('e-editedbatchcell'));\n };\n\n Grid.prototype.dblClickHandler = function (e) {\n var grid = parentsUntil(e.target, 'e-grid');\n\n if (isNullOrUndefined(grid) || grid.id !== this.element.id || closest(e.target, '.e-unboundcelldiv')) {\n return;\n }\n\n var dataRow = false;\n var tr = closest(e.target, 'tr');\n\n if (tr && tr.getAttribute('data-uid')) {\n var rowObj = this.getRowObjectFromUID(tr.getAttribute('data-uid'));\n dataRow = rowObj ? rowObj.isDataRow : false;\n }\n\n var args = this.getRowInfo(e.target);\n args.target = e.target;\n\n if (dataRow) {\n this.trigger(events.recordDoubleClick, args);\n }\n\n this.notify(events.dblclick, e);\n };\n\n Grid.prototype.focusOutHandler = function (e) {\n if (this.isChildGrid(e)) {\n return;\n }\n\n if (!parentsUntil(e.target, 'e-grid')) {\n this.element.querySelector('.e-gridpopup').style.display = 'None';\n }\n\n var filterClear = this.element.querySelector('.e-cancel:not(.e-hide)');\n\n if (filterClear) {\n filterClear.classList.add('e-hide');\n }\n\n var relatedTarget = e.relatedTarget;\n var ariaOwns = relatedTarget ? relatedTarget.getAttribute('aria-owns') : null;\n\n if ((!relatedTarget || !parentsUntil(relatedTarget, 'e-grid') && (!isNullOrUndefined(ariaOwns) && ariaOwns) !== e.target.getAttribute('aria-owns')) && !this.keyPress && this.isEdit && !Browser.isDevice) {\n if (this.editSettings.mode === 'Batch') {\n this.editModule.saveCell();\n this.notify(events.editNextValCell, {});\n }\n\n if (this.editSettings.mode === 'Normal') {\n this.editModule.editFormValidate();\n }\n }\n\n this.keyPress = false;\n };\n\n Grid.prototype.isChildGrid = function (e) {\n var gridElement = parentsUntil(e.target, 'e-grid');\n\n if (gridElement && gridElement.id !== this.element.id) {\n return true;\n }\n\n return false;\n };\n /**\n * hidden\n */\n\n\n Grid.prototype.mergePersistGridData = function (persistedData) {\n var data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n\n if (!(isNullOrUndefined(data) || data === '') || !isNullOrUndefined(persistedData)) {\n var dataObj = !isNullOrUndefined(persistedData) ? persistedData : JSON.parse(data);\n\n if (this.enableVirtualization) {\n dataObj.pageSettings.currentPage = 1;\n }\n\n var keys = Object.keys(dataObj);\n this.isProtectedOnChange = true;\n\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n\n if (typeof this[key] === 'object' && !isNullOrUndefined(this[key])) {\n if (Array.isArray(this[key]) && key === 'columns') {\n if (!(isBlazor() && this.isServerRendered)) {\n setColumnIndex(this[key]);\n }\n\n this.mergeColumns(dataObj[key], this[key]);\n this[key] = dataObj[key];\n } else {\n extend(this[key], dataObj[key]);\n }\n } else {\n this[key] = dataObj[key];\n }\n }\n\n this.isProtectedOnChange = false;\n }\n };\n\n Grid.prototype.mergeColumns = function (storedColumn, columns) {\n var storedColumns = storedColumn;\n\n var _loop_2 = function _loop_2(i) {\n var localCol = columns.filter(function (tCol) {\n return tCol.index === storedColumns[i].index;\n })[0];\n\n if (!isNullOrUndefined(localCol)) {\n if (localCol.columns && localCol.columns.length) {\n this_2.mergeColumns(storedColumns[i].columns, localCol.columns);\n storedColumns[i] = extend(localCol, storedColumns[i], {}, true);\n } else {\n if (isBlazor()) {\n var guid = 'guid';\n storedColumns[i][guid] = localCol[guid];\n storedColumns[i].uid = localCol.uid;\n }\n\n storedColumns[i] = extend(localCol, storedColumns[i], {}, true);\n }\n }\n };\n\n var this_2 = this;\n\n for (var i = 0; i < storedColumns.length; i++) {\n _loop_2(i);\n }\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.isDetail = function () {\n return !isNullOrUndefined(this.detailTemplate) || !isNullOrUndefined(this.childGrid);\n };\n\n Grid.prototype.isCommandColumn = function (columns) {\n var _this = this;\n\n return columns.some(function (col) {\n if (col.columns) {\n return _this.isCommandColumn(col.columns);\n }\n\n return !!(col.commands || col.commandsTemplate);\n });\n };\n\n Grid.prototype.isForeignKeyEnabled = function (columns) {\n var _this = this;\n\n return columns.some(function (col) {\n if (col.columns) {\n return _this.isForeignKeyEnabled(col.columns);\n }\n\n return !!(col.dataSource && col.foreignKeyValue);\n });\n };\n\n Grid.prototype.keyPressHandler = function (e) {\n var presskey = extend(e, {\n cancel: false\n });\n this.trigger(\"keyPressed\", presskey);\n\n if (presskey.cancel === true) {\n e.stopImmediatePropagation();\n }\n };\n\n Grid.prototype.keyDownHandler = function (e) {\n if (e.altKey) {\n if (e.keyCode === 74) {\n //alt j\n this.focusModule.focusHeader();\n this.focusModule.addOutline();\n }\n\n if (e.keyCode === 87) {\n //alt w\n this.focusModule.focusContent();\n this.focusModule.addOutline();\n }\n }\n };\n\n Grid.prototype.keyActionHandler = function (e) {\n this.keyPress = e.action !== 'space';\n\n if (this.isChildGrid(e) || this.isEdit && e.action !== 'escape' && e.action !== 'enter' && e.action !== 'shiftEnter' && e.action !== 'tab' && e.action !== 'shiftTab') {\n return;\n }\n\n if (this.allowKeyboard) {\n if (e.action === 'ctrlPlusP') {\n e.preventDefault();\n this.print();\n }\n\n this.notify(events.keyPressed, e);\n }\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.setInjectedModules = function (modules) {\n this.injectedModules = modules;\n };\n\n Grid.prototype.updateColumnObject = function () {\n prepareColumns(this.columns, this.enableColumnVirtualization);\n\n if (!(isBlazor() && this.isServerRendered)) {\n setColumnIndex(this.columns);\n }\n\n this.initForeignColumn();\n this.notify(events.autoCol, {});\n };\n /**\n * Gets the foreign columns from Grid.\n * @return {Column[]}\n * @blazorType List\n */\n\n\n Grid.prototype.getForeignKeyColumns = function () {\n return this.getColumns().filter(function (col) {\n return col.isForeignColumn();\n });\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.getRowHeight = function () {\n return this.rowHeight ? this.rowHeight : getRowHeight(this.element);\n };\n /**\n * Refreshes the Grid column changes.\n */\n\n\n Grid.prototype.refreshColumns = function () {\n var fCnt = this.getContent().querySelector('.e-frozencontent');\n\n if (this.getFrozenColumns() === 1 && !fCnt || this.getFrozenColumns() === 0 && fCnt) {\n if (this.enableColumnVirtualization) {\n this.columnModel = [];\n this.updateColumnModel(this.columns);\n }\n\n this.freezeRefresh();\n } else {\n this.isPreventScrollEvent = true;\n this.updateColumnObject();\n this.checkLockColumns(this.getColumns());\n this.refresh();\n\n if (this.getFrozenColumns()) {\n var mTbl = this.contentModule.getMovableContent().querySelector('.e-table');\n remove(mTbl.querySelector('colgroup'));\n var colGroup = this.getHeaderContent().querySelector('.e-movableheader').querySelector('colgroup').cloneNode(true);\n mTbl.insertBefore(colGroup, mTbl.querySelector('tbody'));\n }\n }\n\n if (this.getFrozenColumns()) {\n this.headerModule.getMovableHeader().scrollLeft = this.contentModule.getMovableContent().scrollLeft;\n }\n };\n /**\n * Export Grid data to Excel file(.xlsx).\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @return {Promise}\n * @blazorType void\n */\n\n\n Grid.prototype.excelExport = function (excelExportProperties, isMultipleExport,\n /* tslint:disable-next-line:no-any */\n workbook, isBlob) {\n if (isBlazor()) {\n this.excelExportModule.Map(this, excelExportProperties, isMultipleExport, workbook, false, isBlob);\n return null;\n }\n\n return this.excelExportModule ? this.excelExportModule.Map(this, excelExportProperties, isMultipleExport, workbook, false, isBlob) : null;\n };\n /**\n * Export Grid data to CSV file.\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @return {Promise}\n * @blazorType void\n */\n\n\n Grid.prototype.csvExport = function (excelExportProperties,\n /* tslint:disable-next-line:no-any */\n isMultipleExport, workbook, isBlob) {\n if (isBlazor()) {\n this.excelExportModule.Map(this, excelExportProperties, isMultipleExport, workbook, true, isBlob);\n return null;\n }\n\n return this.excelExportModule ? this.excelExportModule.Map(this, excelExportProperties, isMultipleExport, workbook, true, isBlob) : null;\n };\n /**\n * Export Grid data to PDF document.\n * @param {pdfExportProperties} PdfExportProperties - Defines the export properties of the Grid.\n * @param {isMultipleExport} isMultipleExport - Define to enable multiple export.\n * @param {pdfDoc} pdfDoc - Defined the Pdf Document if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @return {Promise}\n * @blazorType void\n */\n\n\n Grid.prototype.pdfExport = function (pdfExportProperties,\n /* tslint:disable-next-line:no-any */\n isMultipleExport, pdfDoc, isBlob) {\n if (isBlazor()) {\n this.pdfExportModule.Map(this, pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n return null;\n }\n\n return this.pdfExportModule ? this.pdfExportModule.Map(this, pdfExportProperties, isMultipleExport, pdfDoc, isBlob) : null;\n };\n /**\n * Groups a column by column name.\n * @param {string} columnName - Defines the column name to group.\n * @return {void}\n */\n\n\n Grid.prototype.groupColumn = function (columnName) {\n if (this.groupModule) {\n this.groupModule.groupColumn(columnName);\n }\n };\n /**\n * Expands all the grouped rows of the Grid.\n * @return {void}\n */\n\n\n Grid.prototype.groupExpandAll = function () {\n if (this.groupModule) {\n this.groupModule.expandAll();\n }\n };\n /**\n * Collapses all the grouped rows of the Grid.\n * @return {void}\n */\n\n\n Grid.prototype.groupCollapseAll = function () {\n if (this.groupModule) {\n this.groupModule.collapseAll();\n }\n };\n /**\n * Expands or collapses grouped rows by target element.\n * @param {Element} target - Defines the target element of the grouped row.\n * @return {void}\n */\n // public expandCollapseRows(target: Element): void {\n // if (this.groupModule) {\n // this.groupModule.expandCollapseRows(target);\n // }\n // }\n\n /**\n * Clears all the grouped columns of the Grid.\n * @return {void}\n */\n\n\n Grid.prototype.clearGrouping = function () {\n if (this.groupModule) {\n this.groupModule.clearGrouping();\n }\n };\n /**\n * Ungroups a column by column name.\n * @param {string} columnName - Defines the column name to ungroup.\n * @return {void}\n */\n\n\n Grid.prototype.ungroupColumn = function (columnName) {\n if (this.groupModule) {\n this.groupModule.ungroupColumn(columnName);\n }\n };\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n * @param {number} X - Defines the X axis.\n * @param {number} Y - Defines the Y axis.\n * @return {void}\n */\n\n\n Grid.prototype.openColumnChooser = function (x, y) {\n if (this.columnChooserModule) {\n this.columnChooserModule.openColumnChooser(x, y);\n }\n };\n\n Grid.prototype.scrollRefresh = function () {\n var _this = this;\n\n var refresh = function refresh() {\n _this.scrollModule.refresh();\n\n _this.off(events.contentReady, refresh);\n };\n\n this.on(events.contentReady, refresh, this);\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 // public detailCollapse(target: number | Element): void {\n // if (this.detailRowModule) {\n // this.detailRowModule.collapse(target);\n // }\n // }\n\n /**\n * Collapses all the detail rows of the Grid.\n * @return {void}\n */\n\n\n Grid.prototype.detailCollapseAll = function () {\n if (this.detailRowModule) {\n this.detailRowModule.collapseAll();\n }\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 // public detailExpand(target: number | Element): void {\n // if (this.detailRowModule) {\n // this.detailRowModule.expand(target);\n // }\n // }\n\n /**\n * Expands all the detail rows of the Grid.\n * @return {void}\n */\n\n\n Grid.prototype.detailExpandAll = function () {\n if (this.detailRowModule) {\n this.detailRowModule.expandAll();\n }\n };\n /**\n * Deselects the currently selected cells.\n * @return {void}\n */\n\n\n Grid.prototype.clearCellSelection = function () {\n if (this.selectionModule) {\n this.selectionModule.clearCellSelection();\n }\n };\n /**\n * Deselects the currently selected rows.\n * @return {void}\n */\n\n\n Grid.prototype.clearRowSelection = function () {\n if (this.selectionModule) {\n this.selectionModule.clearRowSelection();\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 Grid.prototype.selectCells = function (rowCellIndexes) {\n if (this.selectionModule) {\n this.selectionModule.selectCells(rowCellIndexes);\n }\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 Grid.prototype.selectRowsByRange = function (startIndex, endIndex) {\n if (this.selectionModule) {\n this.selectionModule.selectRowsByRange(startIndex, endIndex);\n }\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.isContextMenuOpen = function () {\n return this.contextMenuModule && this.contextMenuModule.isOpen;\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.ensureModuleInjected = function (module) {\n return this.getInjectedModules().indexOf(module) >= 0;\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 Grid.prototype.destroyTemplate = function (propertyNames, index) {\n this.clearTemplate(propertyNames, index);\n };\n /**\n * @hidden\n * @private\n */\n\n\n Grid.prototype.log = function (type, args) {\n this.loggerModule ? this.loggerModule.log(type, args) : function () {\n return 0;\n }();\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.applyBiggerTheme = function (element) {\n if (this.element.classList.contains('e-bigger')) {\n element.classList.add('e-bigger');\n }\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.getPreviousRowData = function () {\n var previousRowData = this.getRowsObject()[this.getRows().length - 1].data;\n return previousRowData;\n };\n /**\n * Hides the scrollbar placeholder of Grid content when grid content is not overflown.\n * @return {void}\n */\n\n\n Grid.prototype.hideScroll = function () {\n var content = this.getContent().querySelector('.e-content');\n var cTable = content.querySelector('.e-movablecontent') ? content.querySelector('.e-movablecontent') : content;\n var fTable = content.querySelector('.e-frozencontent') ? content.querySelector('.e-frozencontent') : content;\n\n if (cTable.scrollHeight <= cTable.clientHeight && fTable.scrollHeight <= fTable.clientHeight) {\n this.scrollModule.removePadding();\n cTable.style.overflowY = 'auto';\n }\n\n if (this.frozenColumns && cTable.scrollWidth <= cTable.clientWidth) {\n cTable.style.overflowX = 'auto';\n cTable.style.overflowY = 'auto';\n this.notify(events.frozenHeight, 0);\n }\n };\n /**\n * Get row index by primary key or row data.\n * @param {string} value - Defines the primary key value.\n * @param {Object} value - Defines the row data.\n */\n\n\n Grid.prototype.getRowIndexByPrimaryKey = function (value) {\n var pkName = this.getPrimaryKeyFieldNames()[0];\n value = typeof value === 'object' ? value[pkName] : value;\n\n for (var i = 0; i < this.getRowsObject().length; i++) {\n if (this.getRowsObject()[i].data[pkName] === value) {\n return this.getRowsObject()[i].index;\n }\n }\n\n return -1;\n };\n\n ;\n /**\n * @hidden\n */\n // Need to have all columns while filtering with ColumnVirtualization.\n\n Grid.prototype.grabColumnByFieldFromAllCols = function (field) {\n var column;\n this.columnModel = [];\n this.updateColumnModel(this.columns);\n var gCols = this.columnModel;\n\n for (var i = 0; i < gCols.length; i++) {\n if (field === gCols[i].field) {\n column = gCols[i];\n }\n }\n\n return column;\n };\n /**\n * @hidden\n */\n // Need to have all columns while filtering with ColumnVirtualization.\n\n\n Grid.prototype.grabColumnByUidFromAllCols = function (uid) {\n var column;\n this.columnModel = [];\n this.updateColumnModel(this.columns);\n var gCols = this.columnModel;\n\n for (var i = 0; i < gCols.length; i++) {\n if (uid === gCols[i].uid) {\n column = gCols[i];\n }\n }\n\n return column;\n };\n /**\n * Get all filtered records from the Grid and it returns array of objects for the local dataSource, returns a promise object if the Grid has remote data.\n * @return {Object[] | Promise}\n */\n\n\n Grid.prototype.getFilteredRecords = function () {\n if (this.allowFiltering && this.filterSettings.columns.length) {\n var query = this.renderModule.data.generateQuery(true);\n\n if (this.dataSource && this.renderModule.data.isRemote() && this.dataSource instanceof DataManager) {\n return this.renderModule.data.getData(this.dataSource, query);\n } else {\n if (this.dataSource instanceof DataManager) {\n return this.dataSource.executeLocal(query);\n } else {\n return new DataManager(this.dataSource, query).executeLocal(query);\n }\n }\n }\n\n return [];\n };\n\n Grid.prototype.getUserAgent = function () {\n var userAgent = Browser.userAgent.toLowerCase();\n return /iphone|ipod|ipad/.test(userAgent);\n };\n /**\n * @hidden\n */\n // Need to have all columns while filtering with ColumnVirtualization.\n\n\n Grid.prototype.tapEvent = function (e) {\n if (this.getUserAgent()) {\n if (!Global.timer) {\n Global.timer = setTimeout(function () {\n Global.timer = null;\n }, 300);\n } else {\n clearTimeout(Global.timer);\n Global.timer = null;\n this.dblClickHandler(e);\n this.notify(events.doubleTap, e);\n }\n }\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.getRowUid = function (prefix) {\n return \"\" + prefix + this.rowUid++;\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.getMovableVirtualContent = function () {\n return this.getContent().querySelector('.e-movablecontent');\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.getFrozenVirtualContent = function () {\n return this.getContent().querySelector('.e-frozencontent');\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.getMovableVirtualHeader = function () {\n return this.getHeaderContent().querySelector('.e-movableheader');\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.getFrozenVirtualHeader = function () {\n return this.getHeaderContent().querySelector('.e-frozenheader');\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.getRowElementByUID = function (uid) {\n var rowEle;\n var rows = [];\n\n if (this.getFrozenColumns()) {\n var fRows = [].slice.call(this.getFrozenVirtualContent().querySelector('tbody').children);\n var mRows = [].slice.call(this.getMovableVirtualContent().querySelector('tbody').children);\n\n if (this.frozenRows) {\n rows = [].slice.call(this.getFrozenVirtualHeader().querySelector('tbody').children);\n rows = rows.concat([].slice.call(this.getMovableVirtualHeader().querySelector('tbody').children));\n rows = rows.concat(fRows).concat(mRows);\n } else {\n rows = fRows.concat(mRows);\n }\n } else {\n var cntRows = [].slice.call(this.getContent().querySelector('tbody').children);\n\n if (this.frozenRows) {\n rows = [].slice.call(this.getHeaderContent().querySelector('tbody').children);\n rows = rows.concat(cntRows);\n } else {\n rows = cntRows;\n }\n }\n\n for (var _i = 0, rows_2 = rows; _i < rows_2.length; _i++) {\n var row = rows_2[_i];\n\n if (row.getAttribute('data-uid') === uid) {\n rowEle = row;\n break;\n }\n }\n\n return rowEle;\n };\n /**\n * Gets the hidden columns from the Grid.\n * @return {Column[]}\n * @blazorType List\n */\n\n\n Grid.prototype.getHiddenColumns = function () {\n var cols = [];\n\n for (var _i = 0, _a = this.columnModel; _i < _a.length; _i++) {\n var col = _a[_i];\n\n if (col.visible === false) {\n cols.push(col);\n }\n }\n\n return cols;\n };\n /**\n * calculatePageSizeByParentHeight\n */\n\n\n Grid.prototype.calculatePageSizeByParentHeight = function (containerHeight) {\n if (this.allowPaging) {\n if (this.allowTextWrap && this.textWrapSettings.wrapMode == 'Header' || !this.allowTextWrap) {\n var pagesize = 0;\n\n if (containerHeight.indexOf('%') != -1) {\n containerHeight = parseInt(containerHeight) / 100 * this.element.clientHeight;\n }\n\n var nonContentHeight = this.getNoncontentHeight() + this.getRowHeight();\n\n if (containerHeight > nonContentHeight) {\n var contentHeight = 0;\n contentHeight = containerHeight - this.getNoncontentHeight();\n pagesize = contentHeight / this.getRowHeight();\n }\n\n if (pagesize > 0) {\n return Math.floor(pagesize);\n }\n }\n }\n\n return 0;\n };\n\n Grid.prototype.getNoncontentHeight = function () {\n var height = 0;\n\n if (!isNullOrUndefined(this.getHeaderContent().clientHeight)) {\n height += this.getHeaderContent().clientHeight;\n }\n\n if (this.toolbar && !isNullOrUndefined(this.element.querySelector('.e-toolbar').clientHeight)) {\n height += this.element.querySelector('.e-toolbar').clientHeight;\n }\n\n if (this.allowPaging && !isNullOrUndefined(this.element.querySelector('.e-gridpager').clientHeight)) {\n height += this.element.querySelector('.e-gridpager').clientHeight;\n }\n\n if (this.showColumnChooser && !isNullOrUndefined(this.element.querySelector(\".e-columnheader\").clientHeight)) {\n height += this.element.querySelector(\".e-columnheader\").clientHeight;\n }\n\n if (this.allowGrouping && this.groupSettings.showDropArea && !isNullOrUndefined(this.element.querySelector('.e-groupdroparea').clientHeight)) {\n height += this.element.querySelector('.e-groupdroparea').clientHeight;\n }\n\n if (this.aggregates.length > 0 && !isNullOrUndefined(this.element.querySelector('.e-summaryrow').clientHeight)) {\n for (var i = 0; i < this.element.querySelectorAll('.e-summaryrow').length; i++) {\n height += this.element.querySelectorAll('.e-summaryrow')[i].clientHeight;\n }\n }\n\n return height;\n };\n /**\n *To perform aggregate operation on a column.\n *@param {AggregateColumnModel} summaryCol - Pass Aggregate Column details.\n *@param {Object} summaryData - Pass JSON Array for which its field values to be calculated.\n * */\n\n\n Grid.prototype.getSummaryValues = function (summaryCol, summaryData) {\n return DataUtil.aggregates[summaryCol.type.toLowerCase()](summaryData, summaryCol.field);\n };\n /**\n * @hidden\n */\n\n\n Grid.prototype.isCollapseStateEnabled = function () {\n var isExpanded = 'isExpanded';\n return this[isExpanded];\n };\n /**\n * @param {number} key - Defines the primary key value.\n * @param {Object} value - Defines the row data.\n */\n\n\n Grid.prototype.updateRowValue = function (key, rowData) {\n var args = {\n requestType: 'save',\n data: rowData\n };\n this.showSpinner();\n this.notify(events.updateData, args);\n this.refresh();\n };\n\n var Grid_1;\n\n __decorate([Property()], Grid.prototype, \"parentDetails\", void 0);\n\n __decorate([Property([])], Grid.prototype, \"columns\", void 0);\n\n __decorate([Property(true)], Grid.prototype, \"enableAltRow\", void 0);\n\n __decorate([Property(true)], Grid.prototype, \"enableHover\", void 0);\n\n __decorate([Property(false)], Grid.prototype, \"enableAutoFill\", void 0);\n\n __decorate([Property(true)], Grid.prototype, \"allowKeyboard\", void 0);\n\n __decorate([Property(false)], Grid.prototype, \"allowTextWrap\", void 0);\n\n __decorate([Complex({}, TextWrapSettings)], Grid.prototype, \"textWrapSettings\", void 0);\n\n __decorate([Property(false)], Grid.prototype, \"allowPaging\", void 0);\n\n __decorate([Complex({}, PageSettings)], Grid.prototype, \"pageSettings\", void 0);\n\n __decorate([Property(false)], Grid.prototype, \"enableVirtualization\", void 0);\n\n __decorate([Property(false)], Grid.prototype, \"enableColumnVirtualization\", void 0);\n\n __decorate([Complex({}, SearchSettings)], Grid.prototype, \"searchSettings\", void 0);\n\n __decorate([Property(false)], Grid.prototype, \"allowSorting\", void 0);\n\n __decorate([Property('Ellipsis')], Grid.prototype, \"clipMode\", void 0);\n\n __decorate([Property(true)], Grid.prototype, \"allowMultiSorting\", void 0);\n\n __decorate([Property(false)], Grid.prototype, \"allowExcelExport\", void 0);\n\n __decorate([Property(false)], Grid.prototype, \"allowPdfExport\", void 0);\n\n __decorate([Complex({}, SortSettings)], Grid.prototype, \"sortSettings\", void 0);\n\n __decorate([Complex({}, InfiniteScrollSettings)], Grid.prototype, \"infiniteScrollSettings\", void 0);\n\n __decorate([Property(true)], Grid.prototype, \"allowSelection\", void 0);\n\n __decorate([Property(-1)], Grid.prototype, \"selectedRowIndex\", void 0);\n\n __decorate([Complex({}, SelectionSettings)], Grid.prototype, \"selectionSettings\", void 0);\n\n __decorate([Property(false)], Grid.prototype, \"allowFiltering\", void 0);\n\n __decorate([Property(false)], Grid.prototype, \"allowReordering\", void 0);\n\n __decorate([Property(false)], Grid.prototype, \"allowResizing\", void 0);\n\n __decorate([Property(false)], Grid.prototype, \"allowRowDragAndDrop\", void 0);\n\n __decorate([Complex({}, RowDropSettings)], Grid.prototype, \"rowDropSettings\", void 0);\n\n __decorate([Complex({}, FilterSettings)], Grid.prototype, \"filterSettings\", void 0);\n\n __decorate([Property(false)], Grid.prototype, \"allowGrouping\", void 0);\n\n __decorate([Property(false)], Grid.prototype, \"showColumnMenu\", void 0);\n\n __decorate([Complex({}, GroupSettings)], Grid.prototype, \"groupSettings\", void 0);\n\n __decorate([Complex({}, EditSettings)], Grid.prototype, \"editSettings\", void 0);\n\n __decorate([Collection([], AggregateRow)], Grid.prototype, \"aggregates\", void 0);\n\n __decorate([Property(false)], Grid.prototype, \"showColumnChooser\", void 0);\n\n __decorate([Complex({}, ColumnChooserSettings)], Grid.prototype, \"columnChooserSettings\", void 0);\n\n __decorate([Property(false)], Grid.prototype, \"enableHeaderFocus\", void 0);\n\n __decorate([Property('auto')], Grid.prototype, \"height\", void 0);\n\n __decorate([Property('auto')], Grid.prototype, \"width\", void 0);\n\n __decorate([Property('Default')], Grid.prototype, \"gridLines\", void 0);\n\n __decorate([Property()], Grid.prototype, \"rowTemplate\", void 0);\n\n __decorate([Property()], Grid.prototype, \"detailTemplate\", void 0);\n\n __decorate([Property()], Grid.prototype, \"childGrid\", void 0);\n\n __decorate([Property()], Grid.prototype, \"queryString\", void 0);\n\n __decorate([Property('AllPages')], Grid.prototype, \"printMode\", void 0);\n\n __decorate([Property('Expanded')], Grid.prototype, \"hierarchyPrintMode\", void 0);\n\n __decorate([Property([])], Grid.prototype, \"dataSource\", void 0);\n\n __decorate([Property(null)], Grid.prototype, \"rowHeight\", void 0);\n\n __decorate([Property()], Grid.prototype, \"query\", void 0);\n\n __decorate([Property('USD')], Grid.prototype, \"currencyCode\", void 0);\n\n __decorate([Property()], Grid.prototype, \"toolbar\", void 0);\n\n __decorate([Property()], Grid.prototype, \"contextMenuItems\", void 0);\n\n __decorate([Property()], Grid.prototype, \"columnMenuItems\", void 0);\n\n __decorate([Property()], Grid.prototype, \"toolbarTemplate\", void 0);\n\n __decorate([Property()], Grid.prototype, \"pagerTemplate\", void 0);\n\n __decorate([Property(0)], Grid.prototype, \"frozenRows\", void 0);\n\n __decorate([Property(0)], Grid.prototype, \"frozenColumns\", void 0);\n\n __decorate([Property('All')], Grid.prototype, \"columnQueryMode\", void 0);\n\n __decorate([Property({})], Grid.prototype, \"currentAction\", void 0);\n\n __decorate([Event()], Grid.prototype, \"created\", void 0);\n\n __decorate([Event()], Grid.prototype, \"destroyed\", void 0);\n\n __decorate([Event()], Grid.prototype, \"load\", void 0);\n\n __decorate([Event()], Grid.prototype, \"rowDataBound\", void 0);\n\n __decorate([Event()], Grid.prototype, \"queryCellInfo\", void 0);\n\n __decorate([Event()], Grid.prototype, \"headerCellInfo\", void 0);\n\n __decorate([Event()], Grid.prototype, \"actionBegin\", void 0);\n\n __decorate([Event()], Grid.prototype, \"actionComplete\", void 0);\n\n __decorate([Event()], Grid.prototype, \"actionFailure\", void 0);\n\n __decorate([Event()], Grid.prototype, \"dataBound\", void 0);\n\n __decorate([Event()], Grid.prototype, \"recordDoubleClick\", void 0);\n\n __decorate([Event()], Grid.prototype, \"recordClick\", void 0);\n\n __decorate([Event()], Grid.prototype, \"rowSelecting\", void 0);\n\n __decorate([Event()], Grid.prototype, \"rowSelected\", void 0);\n\n __decorate([Event()], Grid.prototype, \"rowDeselecting\", void 0);\n\n __decorate([Event()], Grid.prototype, \"rowDeselected\", void 0);\n\n __decorate([Event()], Grid.prototype, \"cellSelecting\", void 0);\n\n __decorate([Event()], Grid.prototype, \"cellSelected\", void 0);\n\n __decorate([Event()], Grid.prototype, \"cellDeselecting\", void 0);\n\n __decorate([Event()], Grid.prototype, \"cellDeselected\", void 0);\n\n __decorate([Event()], Grid.prototype, \"columnDragStart\", void 0);\n\n __decorate([Event()], Grid.prototype, \"columnDrag\", void 0);\n\n __decorate([Event()], Grid.prototype, \"columnDrop\", void 0);\n\n __decorate([Event()], Grid.prototype, \"printComplete\", void 0);\n\n __decorate([Event()], Grid.prototype, \"beforePrint\", void 0);\n\n __decorate([Event()], Grid.prototype, \"pdfQueryCellInfo\", void 0);\n\n __decorate([Event()], Grid.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n\n __decorate([Event()], Grid.prototype, \"exportDetailDataBound\", void 0);\n\n __decorate([Event()], Grid.prototype, \"excelQueryCellInfo\", void 0);\n\n __decorate([Event()], Grid.prototype, \"excelHeaderQueryCellInfo\", void 0);\n\n __decorate([Event()], Grid.prototype, \"beforeExcelExport\", void 0);\n\n __decorate([Event()], Grid.prototype, \"excelExportComplete\", void 0);\n\n __decorate([Event()], Grid.prototype, \"beforePdfExport\", void 0);\n\n __decorate([Event()], Grid.prototype, \"pdfExportComplete\", void 0);\n\n __decorate([Event()], Grid.prototype, \"rowDragStartHelper\", void 0);\n\n __decorate([Event()], Grid.prototype, \"detailDataBound\", void 0);\n\n __decorate([Event()], Grid.prototype, \"rowDragStart\", void 0);\n\n __decorate([Event()], Grid.prototype, \"rowDrag\", void 0);\n\n __decorate([Event()], Grid.prototype, \"rowDrop\", void 0);\n\n __decorate([Event()], Grid.prototype, \"toolbarClick\", void 0);\n\n __decorate([Event()], Grid.prototype, \"beforeOpenColumnChooser\", void 0);\n\n __decorate([Event()], Grid.prototype, \"batchAdd\", void 0);\n\n __decorate([Event()], Grid.prototype, \"batchDelete\", void 0);\n\n __decorate([Event()], Grid.prototype, \"batchCancel\", void 0);\n\n __decorate([Event()], Grid.prototype, \"beforeBatchAdd\", void 0);\n\n __decorate([Event()], Grid.prototype, \"beforeBatchDelete\", void 0);\n\n __decorate([Event()], Grid.prototype, \"beforeBatchSave\", void 0);\n\n __decorate([Event()], Grid.prototype, \"beginEdit\", void 0);\n\n __decorate([Event()], Grid.prototype, \"commandClick\", void 0);\n\n __decorate([Event()], Grid.prototype, \"cellEdit\", void 0);\n\n __decorate([Event()], Grid.prototype, \"cellSave\", void 0);\n\n __decorate([Event()], Grid.prototype, \"cellSaved\", void 0);\n\n __decorate([Event()], Grid.prototype, \"resizeStart\", void 0);\n\n __decorate([Event()], Grid.prototype, \"resizing\", void 0);\n\n __decorate([Event()], Grid.prototype, \"resizeStop\", void 0);\n\n __decorate([Event()], Grid.prototype, \"keyPressed\", void 0);\n\n __decorate([Event()], Grid.prototype, \"beforeDataBound\", void 0);\n\n __decorate([Event()], Grid.prototype, \"contextMenuOpen\", void 0);\n\n __decorate([Event()], Grid.prototype, \"contextMenuClick\", void 0);\n\n __decorate([Event()], Grid.prototype, \"columnMenuOpen\", void 0);\n\n __decorate([Event()], Grid.prototype, \"columnMenuClick\", void 0);\n\n __decorate([Event()], Grid.prototype, \"checkBoxChange\", void 0);\n\n __decorate([Event()], Grid.prototype, \"beforeCopy\", void 0);\n\n __decorate([Event()], Grid.prototype, \"beforePaste\", void 0);\n\n __decorate([Event()], Grid.prototype, \"beforeAutoFill\", void 0);\n\n __decorate([Event()], Grid.prototype, \"dataStateChange\", void 0);\n\n __decorate([Event()], Grid.prototype, \"dataSourceChanged\", void 0);\n\n __decorate([Event()], Grid.prototype, \"exportGroupCaption\", void 0);\n\n Grid = Grid_1 = __decorate([NotifyPropertyChanges], Grid);\n return Grid;\n}(Component);\n\nexport { Grid };","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 * as ReactDOM from 'react-dom';\nimport { extend, isNullOrUndefined, setValue, getValue } 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']; // tslint:disable\n\nvar ComponentBase = function (_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.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 * @private\n */\n\n\n ComponentBase.prototype.UNSAFE_componentWillMount = function () {\n this.isReact = true;\n var propKeys = Object.keys(this.props);\n this.htmlattributes = {};\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 this.htmlattributes[prop] = this.props[prop];\n }\n }\n };\n\n ComponentBase.prototype.componentDidMount = function () {\n var _this = this;\n\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 if (this.props.immediateRender) {\n this.renderReactComponent();\n } else {\n this.cachedTimeOut = setTimeout(function () {\n _this.renderReactComponent();\n });\n }\n };\n\n ComponentBase.prototype.renderReactComponent = function () {\n var ele = ReactDOM.findDOMNode(this);\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.UNSAFE_componentWillReceiveProps = function (nextProps) {\n var _this = this;\n\n if (!this.isAppendCalled) {\n clearTimeout(this.cachedTimeOut);\n this.isAppendCalled = true;\n this.appendTo(ReactDOM.findDOMNode(this));\n }\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 (!isClassName && !isNullOrUndefined(this.htmlattributes[propkey]) && this.htmlattributes[propkey] !== dProps[propkey]) {\n this.htmlattributes[propkey] = dProps[propkey];\n }\n\n if (this.props[propkey] === nextProps[propkey]) {\n delete dProps[propkey];\n } else if (this.attrKeys.indexOf(propkey) !== -1) {\n if (isClassName) {\n var delCheck = this.props[propkey];\n var delSplit = delCheck.split(\" \");\n delSplit.forEach(function (delValue) {\n _this.element.classList.remove(delValue);\n });\n var addCheck = dProps[propkey];\n var addSplit = addCheck.split(\" \");\n addSplit.forEach(function (addValue) {\n _this.element.classList.add(addValue);\n });\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.canDelayUpdate || this.props.delayUpdate) {\n setTimeout(function () {\n _this.refreshProperties(dProps, nextProps);\n });\n } else {\n this.refreshProperties(dProps, nextProps);\n }\n };\n\n ComponentBase.prototype.refreshProperties = function (dProps, nextProps) {\n if (Object.keys(dProps).length) {\n // tslint:disable-next-line:no-any\n this.processComplexTemplate(dProps, this);\n this.setProperties(dProps);\n }\n\n this.refreshChild(false, 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 return this.htmlattributes;\n };\n /* tslint:disable:no-any */\n\n\n ComponentBase.prototype.trigger = function (eventName, eventProp, successHandler) {\n if (this.isDestroyed !== true) {\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 this.modelObserver.notify(eventName, eventProp, successHandler);\n this.isProtectedOnChange = prevDetection;\n }\n };\n\n ComponentBase.prototype.compareObjects = function (oldProps, newProps) {\n return JSON.stringify(oldProps) === JSON.stringify(newProps);\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 directiveValue = this.validateChildren({}, this.directivekeys, props || this.props);\n\n if (directiveValue) {\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 (this.compareObjects(this.prevProperties[key], directiveValue[key])) {\n delete directiveValue[key];\n } else {\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 this.setProperties(directiveValue, silent);\n }\n }\n };\n\n ComponentBase.prototype.componentWillUnmount = function () {\n clearTimeout(this.cachedTimeOut);\n this.destroy();\n };\n /* tslint:disable:no-any */\n\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 return ComponentBase;\n}(React.PureComponent);\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 = function (_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 = function (_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'; // 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) {\n var ele = document.createElement('div');\n document.body.appendChild(ele);\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 ReactDOM.render(actTemplate(actData), ele);\n detach(ele);\n return ele.children;\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 * \n * ```\n */\n\nvar GridComponent = function (_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 return _this;\n }\n\n GridComponent.prototype.render = function () {\n if (this.element && !this.initRenderCalled || this.refreshing) {\n _super.prototype.render.call(this);\n\n this.initRenderCalled = true;\n } else {\n return React.createElement('div', this.getDefaultAttributes(), this.props.children);\n }\n };\n\n return GridComponent;\n}(Grid);\n\nexport { GridComponent };\napplyMixins(GridComponent, [ComponentBase, React.PureComponent]);","// 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 derivedClass.prototype[name] = baseClass.prototype[name];\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 * \n * \n * \n * \n * \n * \n * ```\n */\n\nvar ColumnDirective = function (_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 = function (_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 { Draggable, Droppable, isBlazor } from '@syncfusion/ej2-base';\nimport { createElement, closest, remove, classList, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { parentsUntil, isActionPrevent, isGroupAdaptive, updatecloneRow } from '../base/util';\nimport * as events from '../base/constant';\nimport { AriaService } from '../services/aria-service';\nimport { GroupModelGenerator } from '../services/group-model-generator';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n *\n * The `Group` module is used to handle group action.\n */\n\nvar Group = function () {\n /**\n * Constructor for Grid group module\n * @hidden\n */\n function Group(parent, groupSettings, sortedColumns, serviceLocator) {\n var _this = this; //Internal variables\n\n\n this.sortRequired = true;\n this.isAppliedGroup = false;\n this.isAppliedUnGroup = false;\n this.reorderingColumns = [];\n this.visualElement = createElement('div', {\n className: 'e-cloneproperties e-dragclone e-gdclone',\n styles: 'line-height:23px',\n attrs: {\n action: 'grouping'\n }\n });\n\n this.helper = function (e) {\n var gObj = _this.parent;\n var target = e.sender.target;\n var element = target.classList.contains('e-groupheadercell') ? target : parentsUntil(target, 'e-groupheadercell');\n\n if (!element || !target.classList.contains('e-drag') && _this.parent.allowGroupReordering) {\n return false;\n }\n\n _this.column = gObj.getColumnByField(element.firstElementChild.getAttribute('ej-mappingname'));\n _this.visualElement.textContent = element.textContent;\n _this.visualElement.style.width = element.offsetWidth + 2 + 'px';\n _this.visualElement.style.height = element.offsetHeight + 2 + 'px';\n\n _this.visualElement.setAttribute('e-mappinguid', _this.column.uid);\n\n gObj.element.appendChild(_this.visualElement);\n return _this.visualElement;\n };\n\n this.dragStart = function (e) {\n _this.parent.element.classList.add('e-ungroupdrag');\n\n if (isBlazor()) {\n e.bindEvents(e.dragElement);\n }\n };\n\n this.drag = function (e) {\n if (_this.parent.allowGroupReordering) {\n _this.animateDropper(e);\n }\n\n var target = e.target;\n\n var cloneElement = _this.parent.element.querySelector('.e-cloneproperties');\n\n _this.parent.trigger(events.columnDrag, {\n target: target,\n draggableType: 'headercell',\n column: _this.column\n });\n\n if (!_this.parent.allowGroupReordering) {\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n\n if (!(parentsUntil(target, 'e-gridcontent') || parentsUntil(target, 'e-headercell'))) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n }\n };\n\n this.dragStop = function (e) {\n _this.parent.element.classList.remove('e-ungroupdrag');\n\n var preventDrop = !(parentsUntil(e.target, 'e-gridcontent') || parentsUntil(e.target, 'e-gridheader'));\n\n if (_this.parent.allowGroupReordering && preventDrop) {\n remove(e.helper);\n\n if (parentsUntil(e.target, 'e-groupdroparea')) {\n _this.rearrangeGroup(e);\n } else if (!parentsUntil(e.target, 'e-grid')) {\n var field = _this.parent.getColumnByUid(e.helper.getAttribute('e-mappinguid')).field;\n\n if (_this.groupSettings.columns.indexOf(field) !== -1) {\n _this.ungroupColumn(field);\n }\n }\n\n return;\n } else if (preventDrop) {\n remove(e.helper);\n return;\n }\n };\n\n this.animateDropper = function (e) {\n var uid = _this.parent.element.querySelector('.e-cloneproperties').getAttribute('e-mappinguid');\n\n var dragField = _this.parent.getColumnByUid(uid).field;\n\n var parent = parentsUntil(e.target, 'e-groupdroparea');\n var dropTarget = parentsUntil(e.target, 'e-group-animator'); // tslint:disable-next-line\n\n var grouped = [].slice.call(_this.element.querySelectorAll('.e-groupheadercell')).map(function (e) {\n return e.querySelector('div').getAttribute('ej-mappingname');\n });\n var cols = JSON.parse(JSON.stringify(grouped));\n\n if (dropTarget || parent) {\n if (dropTarget) {\n var dropField = dropTarget.querySelector('div[ej-mappingname]').getAttribute('ej-mappingname');\n var dropIndex = +dropTarget.getAttribute('index');\n\n if (dropField !== dragField) {\n var dragIndex = cols.indexOf(dragField);\n\n if (dragIndex !== -1) {\n cols.splice(dragIndex, 1);\n }\n\n var flag = dropIndex !== -1 && dragIndex === dropIndex;\n cols.splice(dropIndex + (flag ? 1 : 0), 0, dragField);\n }\n } else if (parent && cols.indexOf(dragField) === -1) {\n cols.push(dragField);\n }\n\n _this.element.innerHTML = '';\n\n if (cols.length && !_this.element.classList.contains('e-grouped')) {\n _this.element.classList.add('e-grouped');\n }\n\n _this.reorderingColumns = cols;\n\n for (var c = 0; c < cols.length; c++) {\n _this.addColToGroupDrop(cols[c]);\n }\n } else {\n _this.addLabel();\n\n _this.removeColFromGroupDrop(dragField);\n }\n };\n\n this.drop = function (e) {\n var gObj = _this.parent;\n var column = gObj.getColumnByUid(e.droppedElement.getAttribute('e-mappinguid'));\n\n _this.element.classList.remove('e-hover');\n\n remove(e.droppedElement);\n\n _this.aria.setDropTarget(_this.parent.element.querySelector('.e-groupdroparea'), false);\n\n _this.aria.setGrabbed(_this.parent.getHeaderTable().querySelector('[aria-grabbed=true]'), false);\n\n if (isNullOrUndefined(column) || column.allowGrouping === false || parentsUntil(gObj.getColumnHeaderByUid(column.uid), 'e-grid').getAttribute('id') !== gObj.element.getAttribute('id')) {\n _this.parent.log('action_disabled_column', {\n moduleName: _this.getModuleName(),\n columnName: column.headerText\n });\n\n return;\n }\n\n _this.groupColumn(column.field);\n };\n\n this.contentRefresh = true;\n this.aria = new AriaService();\n this.parent = parent;\n this.groupSettings = groupSettings;\n this.serviceLocator = serviceLocator;\n this.sortedColumns = sortedColumns;\n this.focus = serviceLocator.getService('focus');\n this.addEventListener();\n this.groupGenerator = new GroupModelGenerator(this.parent);\n }\n\n Group.prototype.addLabel = function () {\n if (!this.element.querySelectorAll('.e-group-animator').length) {\n var dragLabel = this.l10n.getConstant('GroupDropArea');\n this.element.innerHTML = dragLabel;\n this.element.classList.remove('e-grouped');\n }\n };\n\n Group.prototype.rearrangeGroup = function (e) {\n this.sortRequired = false;\n this.updateModel();\n };\n\n Group.prototype.columnDrag = function (e) {\n if (this.parent.allowGroupReordering) {\n this.animateDropper(e);\n }\n\n var gObj = this.parent;\n var cloneElement = this.parent.element.querySelector('.e-cloneproperties');\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n\n if (!parentsUntil(e.target, 'e-groupdroparea') && !(this.parent.allowReordering && parentsUntil(e.target, 'e-headercell'))) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n\n e.target.classList.contains('e-groupdroparea') ? this.element.classList.add('e-hover') : this.element.classList.remove('e-hover');\n };\n\n Group.prototype.columnDragStart = function (e) {\n if (e.target.classList.contains('e-stackedheadercell')) {\n return;\n }\n\n var gObj = this.parent;\n var dropArea = this.parent.element.querySelector('.e-groupdroparea');\n this.aria.setDropTarget(dropArea, e.column.allowGrouping);\n var element = e.target.classList.contains('e-headercell') ? e.target : parentsUntil(e.target, 'e-headercell');\n this.aria.setGrabbed(element, true, !e.column.allowGrouping);\n };\n\n Group.prototype.columnDrop = function (e) {\n var gObj = this.parent;\n\n if (e.droppedElement.getAttribute('action') === 'grouping') {\n var column = gObj.getColumnByUid(e.droppedElement.getAttribute('e-mappinguid'));\n\n if (isNullOrUndefined(column) || column.allowGrouping === false || parentsUntil(gObj.getColumnHeaderByUid(column.uid), 'e-grid').getAttribute('id') !== gObj.element.getAttribute('id')) {\n return;\n }\n\n this.ungroupColumn(column.field);\n }\n };\n /**\n * @hidden\n */\n\n\n Group.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.groupComplete, this.onActionComplete, this);\n this.parent.on(events.ungroupComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.columnDrag, this.columnDrag, this);\n this.parent.on(events.columnDragStart, this.columnDragStart, this);\n this.parent.on(events.headerDrop, this.columnDrop, this);\n this.parent.on(events.columnDrop, this.columnDrop, this);\n this.parent.on(events.headerRefreshed, this.refreshSortIcons, this);\n this.parent.on(events.sortComplete, this.refreshSortIcons, this);\n this.parent.on(events.keyPressed, this.keyPressHandler, this);\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.parent.on(events.onEmpty, this.initialEnd, this);\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.groupAggregates, this.onGroupAggregates, this);\n this.parent.on('blazor-action-begin', this.blazorActionBegin, this);\n this.parent.on('group-expand-collapse', this.updateExpand, this);\n this.parent.on('persist-data-changed', this.initialEnd, this);\n };\n /**\n * @hidden\n */\n\n\n Group.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.groupComplete, this.onActionComplete);\n this.parent.off(events.ungroupComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.columnDrag, this.columnDrag);\n this.parent.off(events.columnDragStart, this.columnDragStart);\n this.parent.off(events.columnDrop, this.columnDrop);\n this.parent.off(events.headerDrop, this.columnDrop);\n this.parent.off(events.headerRefreshed, this.refreshSortIcons);\n this.parent.off(events.sortComplete, this.refreshSortIcons);\n this.parent.off(events.keyPressed, this.keyPressHandler);\n this.parent.off(events.groupAggregates, this.onGroupAggregates);\n this.parent.off('blazor-action-begin', this.blazorActionBegin);\n this.parent.off('group-expand-collapse', this.updateExpand);\n };\n\n Group.prototype.blazorActionBegin = function () {\n if (this.parent.allowGrouping && this.parent.isCollapseStateEnabled()) {\n this.expandAll();\n }\n };\n\n Group.prototype.initialEnd = function () {\n var gObj = this.parent;\n this.parent.off(events.contentReady, this.initialEnd);\n this.parent.off(events.onEmpty, this.initialEnd);\n\n if (isBlazor() && gObj.isServerRendered) {\n for (var i = 0; i < gObj.columns.length; i++) {\n this.removeColFromGroupDrop(gObj.columns[i].field);\n }\n\n this.updateGroupDropArea();\n }\n\n if (this.parent.getColumns().length && this.groupSettings.columns.length) {\n this.contentRefresh = false;\n\n for (var _i = 0, _a = gObj.groupSettings.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n this.groupColumn(col);\n }\n\n this.contentRefresh = true;\n }\n };\n\n Group.prototype.keyPressHandler = function (e) {\n var gObj = this.parent;\n\n if (e.action !== 'ctrlSpace' && (!this.groupSettings.columns.length || ['altDownArrow', 'altUpArrow', 'ctrlDownArrow', 'ctrlUpArrow', 'enter'].indexOf(e.action) === -1)) {\n return;\n }\n\n e.preventDefault();\n\n switch (e.action) {\n case 'altDownArrow':\n case 'altUpArrow':\n var selected = gObj.allowSelection ? gObj.getSelectedRowIndexes() : [];\n\n if (selected.length) {\n var rows = gObj.getContentTable().querySelector('tbody').children;\n var dataRow = gObj.getDataRows()[selected[selected.length - 1]];\n var grpRow = void 0;\n\n for (var i = dataRow.rowIndex; i >= 0; i--) {\n if (!rows[i].classList.contains('e-row') && !rows[i].classList.contains('e-detailrow')) {\n grpRow = rows[i];\n break;\n }\n }\n\n this.expandCollapseRows(grpRow.querySelector(e.action === 'altUpArrow' ? '.e-recordplusexpand' : '.e-recordpluscollapse'));\n }\n\n break;\n\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n\n case 'enter':\n if (this.parent.isEdit || closest(e.target, '#' + this.parent.element.id + '_searchbar') !== null) {\n return;\n }\n\n var element = this.focus.getFocusedElement();\n var row = element ? element.parentElement.querySelector('[class^=\"e-record\"]') : null;\n\n if (!row) {\n break;\n }\n\n this.expandCollapseRows(row);\n break;\n\n case 'ctrlSpace':\n var elem = gObj.focusModule.currentInfo.element;\n\n if (elem && elem.classList.contains('e-headercell')) {\n var column = gObj.getColumnByUid(elem.firstElementChild.getAttribute('e-mappinguid'));\n column.field && gObj.groupSettings.columns.indexOf(column.field) < 0 ? this.groupColumn(column.field) : this.ungroupColumn(column.field);\n }\n\n break;\n }\n };\n\n Group.prototype.clickHandler = function (e) {\n this.expandCollapseRows(e.target);\n this.applySortFromTarget(e.target);\n this.unGroupFromTarget(e.target);\n this.toogleGroupFromHeader(e.target);\n };\n\n Group.prototype.unGroupFromTarget = function (target) {\n if (target.classList.contains('e-ungroupbutton')) {\n this.ungroupColumn(target.parentElement.getAttribute('ej-mappingname'));\n }\n };\n\n Group.prototype.toogleGroupFromHeader = function (target) {\n if (this.groupSettings.showToggleButton) {\n if (target.classList.contains('e-grptogglebtn')) {\n if (target.classList.contains('e-toggleungroup')) {\n this.ungroupColumn(this.parent.getColumnByUid(target.parentElement.getAttribute('e-mappinguid')).field);\n } else {\n this.groupColumn(this.parent.getColumnByUid(target.parentElement.getAttribute('e-mappinguid')).field);\n }\n } else {\n if (target.classList.contains('e-toggleungroup')) {\n this.ungroupColumn(target.parentElement.getAttribute('ej-mappingname'));\n }\n }\n }\n };\n\n Group.prototype.applySortFromTarget = function (target) {\n var gObj = this.parent;\n var gHeader = closest(target, '.e-groupheadercell');\n\n if (gObj.allowSorting && gHeader && !target.classList.contains('e-ungroupbutton') && !target.classList.contains('e-toggleungroup')) {\n var field = gHeader.firstElementChild.getAttribute('ej-mappingname');\n\n if (gObj.getColumnHeaderByField(field).querySelectorAll('.e-ascending').length) {\n gObj.sortColumn(field, 'Descending', true);\n } else {\n gObj.sortColumn(field, 'Ascending', true);\n }\n }\n };\n /**\n * Expands or collapses grouped rows by target element.\n * @param {Element} target - Defines the target element of the grouped row.\n * @return {void}\n */\n\n\n Group.prototype.expandCollapseRows = function (target) {\n var trgt = parentsUntil(target, 'e-recordplusexpand') || parentsUntil(target, 'e-recordpluscollapse');\n\n if (trgt) {\n var cellIdx = trgt.cellIndex;\n var rowIdx = trgt.parentElement.rowIndex;\n var rowNodes = this.parent.getContentTable().querySelector('tbody').children;\n var rows = [].slice.call(rowNodes).slice(rowIdx + 1, rowNodes.length);\n var isHide = void 0;\n var expandElem = void 0;\n var dataManager = void 0;\n var query = void 0;\n var toExpand = [];\n var gObj = this.parent;\n var indent = trgt.parentElement.querySelectorAll('.e-indentcell').length;\n var expand = false;\n\n if (isBlazor() && this.parent.isCollapseStateEnabled()) {\n this.parent.notify('group-expand-collapse', {\n uid: trgt.parentElement.getAttribute('data-uid'),\n isExpand: trgt.classList.contains('e-recordpluscollapse')\n });\n return;\n }\n\n if (trgt.classList.contains('e-recordpluscollapse')) {\n addClass([trgt], 'e-recordplusexpand');\n removeClass([trgt], 'e-recordpluscollapse');\n trgt.firstElementChild.className = 'e-icons e-gdiagonaldown e-icon-gdownarrow';\n expand = true;\n\n if (isGroupAdaptive(gObj)) {\n this.updateVirtualRows(gObj, target, expand, query, dataManager);\n }\n } else {\n isHide = true;\n removeClass([trgt], 'e-recordplusexpand');\n addClass([trgt], 'e-recordpluscollapse');\n trgt.firstElementChild.className = 'e-icons e-gnextforward e-icon-grightarrow';\n\n if (isGroupAdaptive(gObj)) {\n this.updateVirtualRows(gObj, target, !isHide, query, dataManager);\n }\n }\n\n this.aria.setExpand(trgt, expand);\n\n if (!isGroupAdaptive(gObj)) {\n for (var i = 0, len = rows.length; i < len; i++) {\n if (rows[i].querySelectorAll('td')[cellIdx] && rows[i].querySelectorAll('td')[cellIdx].classList.contains('e-indentcell') && rows) {\n if (isHide) {\n rows[i].style.display = 'none';\n } else {\n if (rows[i].querySelectorAll('.e-indentcell').length === indent + 1) {\n rows[i].style.display = '';\n expandElem = rows[i].querySelector('.e-recordplusexpand');\n\n if (expandElem) {\n toExpand.push(expandElem);\n }\n\n if (rows[i].classList.contains('e-detailrow')) {\n if (rows[i - 1].querySelectorAll('.e-detailrowcollapse').length) {\n rows[i].style.display = 'none';\n }\n }\n }\n }\n } else {\n break;\n }\n }\n }\n\n for (var i = 0, len = toExpand.length; i < len; i++) {\n removeClass([toExpand[i]], 'e-recordplusexpand');\n addClass([toExpand[i]], 'e-recordpluscollapse');\n toExpand[i].firstElementChild.className = 'e-icons e-gnextforward e-icon-grightarrow';\n this.expandCollapseRows(toExpand[i]);\n }\n }\n };\n\n Group.prototype.updateVirtualRows = function (gObj, target, isExpand, query, dataManager) {\n var rObj = gObj.getRowObjectFromUID(target.closest('tr').getAttribute('data-uid'));\n rObj.isExpand = isExpand;\n updatecloneRow(gObj);\n query = gObj.getDataModule().generateQuery(false);\n query.queries = [];\n var args = {\n requestType: 'virtualscroll',\n rowObject: rObj\n };\n dataManager = gObj.getDataModule().getData(args, query.requiresCount());\n dataManager.then(function (e) {\n return gObj.renderModule.dataManagerSuccess(e, args);\n });\n };\n\n Group.prototype.expandCollapse = function (isExpand) {\n if (isBlazor() && this.parent.isCollapseStateEnabled()) {\n this.parent.notify('group-expand-collapse', {\n isExpand: isExpand\n });\n return;\n }\n\n if (!isExpand) {\n this.parent.notify(events.initialCollapse, isExpand);\n }\n\n var rowNodes = this.parent.getContentTable().querySelector('tbody').children;\n var row;\n\n for (var i = 0, len = rowNodes.length; i < len; i++) {\n if (rowNodes[i].querySelectorAll('.e-recordplusexpand, .e-recordpluscollapse').length) {\n row = rowNodes[i].querySelector(isExpand ? '.e-recordpluscollapse' : '.e-recordplusexpand');\n\n if (row) {\n row.className = isExpand ? 'e-recordplusexpand' : 'e-recordpluscollapse';\n row.firstElementChild.className = isExpand ? 'e-icons e-gdiagonaldown e-icon-gdownarrow' : 'e-icons e-gnextforward e-icon-grightarrow';\n }\n\n if (!(rowNodes[i].firstElementChild.classList.contains('e-recordplusexpand') || rowNodes[i].firstElementChild.classList.contains('e-recordpluscollapse'))) {\n rowNodes[i].style.display = isExpand ? '' : 'none';\n }\n } else {\n rowNodes[i].style.display = isExpand ? '' : 'none';\n }\n }\n };\n /**\n * Expands all the grouped rows of the Grid.\n * @return {void}\n */\n\n\n Group.prototype.expandAll = function () {\n this.expandCollapse(true);\n };\n /**\n * Collapses all the grouped rows of the Grid.\n * @return {void}\n */\n\n\n Group.prototype.collapseAll = function () {\n this.expandCollapse(false);\n };\n /**\n * The function is used to render grouping\n * @return {Element}\n * @hidden\n */\n\n\n Group.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n this.renderGroupDropArea();\n this.initDragAndDrop();\n this.refreshToggleBtn();\n };\n\n Group.prototype.renderGroupDropArea = function () {\n var groupElem = this.parent.element.querySelector('.e-groupdroparea');\n\n if (groupElem) {\n remove(groupElem);\n }\n\n this.element = this.parent.createElement('div', {\n className: 'e-groupdroparea',\n attrs: {\n 'tabindex': '-1'\n }\n });\n\n if (this.parent.allowGroupReordering) {\n this.element.classList.add('e-group-animate');\n }\n\n this.updateGroupDropArea();\n this.parent.element.insertBefore(this.element, this.parent.element.firstChild);\n\n if (!this.groupSettings.showDropArea) {\n this.element.style.display = 'none';\n }\n };\n\n Group.prototype.updateGroupDropArea = function (clear) {\n if (this.groupSettings.showDropArea && !this.groupSettings.columns.length) {\n var dragLabel = this.l10n.getConstant('GroupDropArea');\n this.element.innerHTML = dragLabel;\n this.element.classList.remove('e-grouped');\n } else {\n if (this.element.innerHTML === this.l10n.getConstant('GroupDropArea') && (this.groupSettings.columns.length === 1 || !this.isAppliedGroup && !this.isAppliedUnGroup) || clear) {\n this.element.innerHTML = '';\n }\n\n this.element.classList.add('e-grouped');\n }\n };\n\n Group.prototype.initDragAndDrop = function () {\n this.initializeGHeaderDrop();\n this.initializeGHeaderDrag();\n };\n\n Group.prototype.initializeGHeaderDrag = function () {\n var drag = new Draggable(this.element, {\n dragTarget: this.parent.allowGroupReordering ? '.e-drag' : '.e-groupheadercell',\n distance: this.parent.allowGroupReordering ? -10 : 5,\n helper: this.helper,\n dragStart: this.dragStart,\n drag: this.drag,\n dragStop: this.dragStop\n });\n };\n\n Group.prototype.initializeGHeaderDrop = function () {\n var gObj = this.parent;\n var drop = new Droppable(this.element, {\n accept: '.e-dragclone',\n drop: this.drop\n });\n };\n /**\n * Groups a column by column name.\n * @param {string} columnName - Defines the column name to group.\n * @return {void}\n */\n\n\n Group.prototype.groupColumn = function (columnName) {\n var gObj = this.parent;\n var column = gObj.getColumnByField(columnName);\n\n if (isNullOrUndefined(column) || column.allowGrouping === false || this.contentRefresh && this.groupSettings.columns.indexOf(columnName) > -1) {\n this.parent.log('action_disabled_column', {\n moduleName: this.getModuleName(),\n columnName: column.headerText\n });\n return;\n }\n\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, {\n instance: this,\n handler: this.groupColumn,\n arg1: columnName\n });\n return;\n }\n\n column.visible = gObj.groupSettings.showGroupedColumn;\n this.colName = columnName;\n this.isAppliedGroup = true;\n\n if (this.contentRefresh) {\n this.updateModel();\n } else {\n this.addColToGroupDrop(columnName);\n }\n\n this.updateGroupDropArea();\n this.isAppliedGroup = false;\n };\n /**\n * Ungroups a column by column name.\n * @param {string} columnName - Defines the column name to ungroup.\n * @return {void}\n */\n\n\n Group.prototype.ungroupColumn = function (columnName) {\n var gObj = this.parent;\n var column = this.parent.enableColumnVirtualization ? this.parent.columns.filter(function (c) {\n return c.field === columnName;\n })[0] : gObj.getColumnByField(columnName);\n\n if (isNullOrUndefined(column) || column.allowGrouping === false || this.groupSettings.columns.indexOf(columnName) < 0) {\n return;\n }\n\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, {\n instance: this,\n handler: this.ungroupColumn,\n arg1: columnName\n });\n return;\n }\n\n column.visible = true;\n\n if (isBlazor() && gObj.isServerRendered) {\n var setVisible = [];\n setVisible[0] = column;\n this.parent.notify('setvisibility', setVisible);\n }\n\n this.colName = column.field;\n var columns = JSON.parse(JSON.stringify(this.groupSettings.columns));\n columns.splice(columns.indexOf(this.colName), 1);\n\n if (this.sortedColumns.indexOf(columnName) < 0) {\n for (var i = 0, len = gObj.sortSettings.columns.length; i < len; i++) {\n if (columnName === gObj.sortSettings.columns[i].field) {\n gObj.sortSettings.columns.splice(i, 1);\n break;\n }\n }\n }\n\n var isServerRendered = 'isServerRendered';\n\n if (isBlazor() && this.parent[isServerRendered]) {\n gObj.sortSettings.columns = gObj.sortSettings.columns;\n }\n\n if (this.parent.allowGroupReordering) {\n this.reorderingColumns = columns;\n }\n\n this.groupSettings.columns = columns;\n\n if (gObj.allowGrouping) {\n this.isAppliedUnGroup = true;\n this.parent.dataBind();\n }\n };\n /**\n * The function used to update groupSettings\n * @return {void}\n * @hidden\n */\n\n\n Group.prototype.updateModel = function () {\n var gObj = this.parent;\n var i = 0;\n var columns = JSON.parse(JSON.stringify(this.groupSettings.columns));\n columns = this.reorderingColumns.length ? JSON.parse(JSON.stringify(this.reorderingColumns)) : columns;\n\n if (this.sortRequired) {\n if (columns.indexOf(this.colName) === -1) {\n columns.push(this.colName);\n }\n\n this.groupAddSortingQuery(this.colName);\n }\n\n this.sortRequired = true;\n this.parent.groupSettings.columns = columns;\n this.parent.dataBind();\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n\n\n Group.prototype.onActionComplete = function (e) {\n if (isBlazor() && !this.parent.isJsComponent) {\n e.rows = null;\n }\n\n var gObj = this.parent;\n\n if (e.requestType === 'grouping') {\n this.addColToGroupDrop(this.colName);\n } else {\n this.removeColFromGroupDrop(this.colName);\n }\n\n var args = this.groupSettings.columns.indexOf(this.colName) > -1 ? {\n columnName: this.colName,\n requestType: 'grouping',\n type: events.actionComplete\n } : {\n requestType: 'ungrouping',\n type: events.actionComplete\n };\n this.parent.trigger(events.actionComplete, extend(e, args));\n this.colName = null;\n };\n\n Group.prototype.groupAddSortingQuery = function (colName) {\n var i = 0;\n\n while (i < this.parent.sortSettings.columns.length) {\n if (this.parent.sortSettings.columns[i].field === colName) {\n break;\n }\n\n i++;\n }\n\n if (this.parent.sortSettings.columns.length === i) {\n this.parent.sortSettings.columns.push({\n field: colName,\n direction: 'Ascending',\n isFromGroup: true\n });\n var isServerRendered = 'isServerRendered';\n\n if (isBlazor() && this.parent[isServerRendered]) {\n this.parent.sortSettings.columns = this.parent.sortSettings.columns;\n }\n } else if (!this.parent.allowSorting) {\n this.parent.sortSettings.columns[i].direction = 'Ascending';\n }\n };\n\n Group.prototype.createElement = function (field) {\n var gObj = this.parent;\n var direction = 'Ascending';\n var animator = this.parent.createElement('div', {\n className: 'e-grid-icon e-group-animator'\n });\n var groupedColumn = this.parent.createElement('div', {\n className: 'e-grid-icon e-groupheadercell'\n });\n var childDiv = this.parent.createElement('div', {\n attrs: {\n 'ej-mappingname': field\n }\n });\n var column = this.parent.getColumnByField(field); //Todo headerTemplateID for grouped column, disableHtmlEncode \n\n var headerCell = gObj.getColumnHeaderByUid(column.uid); // if (!isNullOrUndefined(column.headerTemplate)) {\n // if (column.headerTemplate.indexOf('#') !== -1) {\n // childDiv.innerHTML = document.querySelector(column.headerTemplate).innerHTML.trim();\n // } else {\n // childDiv.innerHTML = column.headerTemplate;\n // }\n // childDiv.firstElementChild.classList.add('e-grouptext');\n // } else {\n\n if (this.parent.allowGroupReordering) {\n childDiv.appendChild(this.parent.createElement('span', {\n className: 'e-drag e-icons e-icon-drag',\n innerHTML: ' ',\n attrs: {\n title: 'Drag',\n tabindex: '-1',\n 'aria-label': 'Drag the grouped column'\n }\n }));\n }\n\n childDiv.appendChild(this.parent.createElement('span', {\n className: 'e-grouptext',\n innerHTML: column.headerText,\n attrs: {\n tabindex: '-1',\n 'aria-label': 'sort the grouped column'\n }\n })); // }\n\n if (this.groupSettings.showToggleButton) {\n childDiv.appendChild(this.parent.createElement('span', {\n className: 'e-togglegroupbutton e-icons e-icon-ungroup e-toggleungroup',\n innerHTML: ' ',\n attrs: {\n tabindex: '-1',\n 'aria-label': 'ungroup button'\n }\n }));\n }\n\n if (headerCell.querySelectorAll('.e-ascending,.e-descending').length) {\n direction = headerCell.querySelector('.e-ascending') ? 'Ascending' : 'Descending';\n }\n\n childDiv.appendChild(this.parent.createElement('span', {\n className: 'e-groupsort e-icons ' + ('e-' + direction.toLowerCase() + ' e-icon-' + direction.toLowerCase()),\n innerHTML: ' ',\n attrs: {\n tabindex: '-1',\n 'aria-label': 'sort the grouped column'\n }\n }));\n childDiv.appendChild(this.parent.createElement('span', {\n className: 'e-ungroupbutton e-icons e-icon-hide',\n innerHTML: ' ',\n attrs: {\n title: this.l10n.getConstant('UnGroup'),\n tabindex: '-1',\n 'aria-label': 'ungroup the grouped column'\n },\n styles: this.groupSettings.showUngroupButton ? '' : 'display:none'\n }));\n groupedColumn.appendChild(childDiv);\n var index = this.groupSettings.columns.indexOf(field);\n\n if (this.parent.allowGroupReordering) {\n animator.appendChild(groupedColumn);\n animator.appendChild(this.createSeparator());\n groupedColumn = animator;\n }\n\n return groupedColumn;\n };\n\n Group.prototype.addColToGroupDrop = function (field) {\n if (this.parent.allowGroupReordering && this.parent.element.querySelector('.e-groupdroparea div[ej-mappingname=' + field + ']')) {\n return;\n }\n\n var column = this.parent.getColumnByField(field);\n\n if (isNullOrUndefined(column)) {\n return;\n }\n\n var groupedColumn = this.createElement(field);\n\n if (this.parent.allowGroupReordering) {\n var index = this.element.querySelectorAll('.e-group-animator').length;\n groupedColumn.setAttribute('index', index.toString());\n }\n\n this.element.appendChild(groupedColumn); //Todo: rtl \n };\n\n Group.prototype.createSeparator = function () {\n return this.parent.createElement('span', {\n className: 'e-nextgroup e-icons e-icon-next',\n innerHTML: ' ',\n attrs: {\n tabindex: '-1',\n 'aria-label': 'Separator for the grouped columns'\n },\n styles: this.groupSettings.showUngroupButton ? '' : 'display:none'\n });\n };\n\n Group.prototype.refreshToggleBtn = function (isRemove) {\n if (this.groupSettings.showToggleButton) {\n var headers = [].slice.call(this.parent.element.getElementsByClassName('e-headercelldiv'));\n\n for (var i = 0, len = headers.length; i < len; i++) {\n if (!(headers[i].classList.contains('e-emptycell') || headers[i].classList.contains('e-headerchkcelldiv'))) {\n var column = this.parent.getColumnByUid(headers[i].getAttribute('e-mappinguid'));\n\n if (!this.parent.showColumnMenu || this.parent.showColumnMenu && !column.showColumnMenu) {\n if (headers[i].querySelectorAll('.e-grptogglebtn').length) {\n remove(headers[i].querySelectorAll('.e-grptogglebtn')[0]);\n }\n\n if (!isRemove) {\n headers[i].appendChild(this.parent.createElement('span', {\n className: 'e-grptogglebtn e-icons ' + (this.groupSettings.columns.indexOf(column.field) > -1 ? 'e-toggleungroup e-icon-ungroup' : 'e-togglegroup e-icon-group'),\n attrs: {\n tabindex: '-1',\n 'aria-label': 'Group button'\n }\n }));\n }\n }\n }\n }\n }\n };\n\n Group.prototype.removeColFromGroupDrop = function (field) {\n if (!isNullOrUndefined(this.getGHeaderCell(field))) {\n var elem = this.getGHeaderCell(field);\n\n if (this.parent.allowGroupReordering) {\n var parent_1 = parentsUntil(elem, 'e-group-animator');\n remove(parent_1);\n } else {\n remove(elem);\n }\n\n this.updateGroupDropArea();\n }\n\n this.isAppliedUnGroup = false;\n };\n\n Group.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n\n for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n\n switch (prop) {\n case 'columns':\n var args = void 0;\n\n if (this.contentRefresh) {\n if (!this.isAppliedUnGroup) {\n if (!this.isAppliedGroup) {\n this.updateGroupDropArea(true);\n\n for (var i = 0; i < this.groupSettings.columns.length; i++) {\n this.colName = this.groupSettings.columns[i];\n var col = this.parent.getColumnByField(this.colName);\n col.visible = this.parent.groupSettings.showGroupedColumn;\n this.groupAddSortingQuery(this.colName);\n\n if (i < this.groupSettings.columns.length - 1) {\n this.addColToGroupDrop(this.groupSettings.columns[i]);\n }\n }\n }\n\n args = {\n columnName: this.colName,\n requestType: e.properties[prop].length ? 'grouping' : 'ungrouping',\n type: events.actionBegin\n };\n } else {\n args = {\n requestType: 'ungrouping',\n type: events.actionBegin\n };\n }\n\n if (!this.groupSettings.showGroupedColumn) {\n var columns = e.oldProperties[prop];\n\n for (var i = 0; i < columns.length; i++) {\n if (e.properties[prop].indexOf(columns[i]) === -1) {\n this.parent.getColumnByField(columns[i]).visible = true;\n }\n }\n }\n\n this.parent.notify(events.modelChanged, args);\n }\n\n break;\n\n case 'showDropArea':\n this.updateGroupDropArea();\n this.groupSettings.showDropArea ? this.element.style.display = '' : this.element.style.display = 'none';\n break;\n\n case 'showGroupedColumn':\n this.updateGroupedColumn(this.groupSettings.showGroupedColumn);\n this.parent.notify(events.modelChanged, {\n requestType: 'refresh'\n });\n break;\n\n case 'showUngroupButton':\n this.updateButtonVisibility(this.groupSettings.showUngroupButton, 'e-ungroupbutton');\n break;\n\n case 'showToggleButton':\n this.updateButtonVisibility(this.groupSettings.showToggleButton, 'e-togglegroupbutton ');\n this.parent.refreshHeader();\n break;\n }\n }\n };\n\n Group.prototype.updateGroupedColumn = function (isVisible) {\n for (var i = 0; i < this.groupSettings.columns.length; i++) {\n this.parent.getColumnByField(this.groupSettings.columns[i]).visible = isVisible;\n }\n };\n\n Group.prototype.updateButtonVisibility = function (isVisible, className) {\n var gHeader = [].slice.call(this.element.querySelectorAll('.' + className));\n\n for (var i = 0; i < gHeader.length; i++) {\n gHeader[i].style.display = isVisible ? '' : 'none';\n }\n };\n\n Group.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n }\n };\n /**\n * To destroy the reorder\n * @return {void}\n * @hidden\n */\n\n\n Group.prototype.destroy = function () {\n var gridElement = this.parent.element;\n\n if (!gridElement || !gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent')) {\n return;\n } // tslint:disable-next-line:no-any\n\n\n if (!this.parent.isDestroyed && !this.parent.refreshing) {\n this.clearGrouping();\n }\n\n this.removeEventListener();\n this.refreshToggleBtn(true);\n remove(this.element); //call ejdrag and drop destroy\n };\n /**\n * Clears all the grouped columns of the Grid.\n * @return {void}\n */\n\n\n Group.prototype.clearGrouping = function () {\n var cols = JSON.parse(JSON.stringify(this.groupSettings.columns));\n this.contentRefresh = false;\n\n for (var i = 0, len = cols.length; i < len; i++) {\n if (i === len - 1) {\n this.contentRefresh = true;\n }\n\n this.ungroupColumn(cols[i]);\n }\n\n this.contentRefresh = true;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n\n\n Group.prototype.getModuleName = function () {\n return 'group';\n };\n\n Group.prototype.refreshSortIcons = function (e) {\n var gObj = this.parent;\n var header;\n var cols = gObj.sortSettings.columns;\n var gCols = gObj.groupSettings.columns;\n var fieldNames = this.parent.getColumns().map(function (c) {\n return c.field;\n });\n this.refreshToggleBtn();\n\n for (var i = 0, len = cols.length; i < len; i++) {\n if (fieldNames.indexOf(cols[i].field) === -1) {\n continue;\n }\n\n header = gObj.getColumnHeaderByField(cols[i].field);\n\n if (!gObj.allowSorting && (this.sortedColumns.indexOf(cols[i].field) > -1 || this.groupSettings.columns.indexOf(cols[i].field) > -1)) {\n classList(header.querySelector('.e-sortfilterdiv'), ['e-ascending', 'e-icon-ascending'], []);\n\n if (cols.length > 1) {\n header.querySelector('.e-headercelldiv').appendChild(this.parent.createElement('span', {\n className: 'e-sortnumber',\n innerHTML: (i + 1).toString()\n }));\n }\n } else if (this.getGHeaderCell(cols[i].field) && this.getGHeaderCell(cols[i].field).querySelectorAll('.e-groupsort').length) {\n if (cols[i].direction === 'Ascending') {\n classList(this.getGHeaderCell(cols[i].field).querySelector('.e-groupsort'), ['e-ascending', 'e-icon-ascending'], ['e-descending', 'e-icon-descending']);\n } else {\n classList(this.getGHeaderCell(cols[i].field).querySelector('.e-groupsort'), ['e-descending', 'e-icon-descending'], ['e-ascending', 'e-icon-ascending']);\n }\n }\n }\n\n for (var i = 0, len = gCols.length; i < len; i++) {\n if (fieldNames.indexOf(gCols[i]) === -1) {\n continue;\n }\n\n gObj.getColumnHeaderByField(gCols[i]).setAttribute('aria-grouped', 'true');\n }\n };\n\n Group.prototype.getGHeaderCell = function (field) {\n if (this.element && this.element.querySelector('[ej-mappingname=\"' + field + '\"]')) {\n return this.element.querySelector('[ej-mappingname=\"' + field + '\"]').parentElement;\n }\n\n return null;\n };\n\n Group.prototype.onGroupAggregates = function (editedData) {\n var aggregates = this.iterateGroupAggregates(editedData);\n var rowData = this.groupGenerator.generateRows(aggregates, {});\n var summaryRows = this.parent.getRowsObject().filter(function (row) {\n return !row.isDataRow;\n });\n var updateSummaryRows = rowData.filter(function (data) {\n return !data.isDataRow;\n });\n\n for (var i = 0; i < updateSummaryRows.length; i++) {\n var row = updateSummaryRows[i];\n var cells = row.cells.filter(function (cell) {\n return cell.isDataCell;\n });\n var args = {\n cells: cells,\n data: row.data,\n dataUid: summaryRows[i] ? summaryRows[i].uid : ''\n };\n this.parent.notify(events.refreshAggregateCell, args);\n }\n };\n\n Group.prototype.iterateGroupAggregates = function (editedData) {\n var updatedData = editedData instanceof Array ? editedData : [];\n var rows = this.parent.getRowsObject();\n var initData = this.parent.getCurrentViewRecords();\n var deletedCols = [];\n var changeds = rows.map(function (row) {\n if (row.edit === 'delete') {\n deletedCols.push(row.data);\n }\n\n return row.changes instanceof Object ? row.changes : row.data;\n });\n var field = this.parent.getPrimaryKeyFieldNames()[0];\n changeds = updatedData.length === 0 ? changeds : updatedData;\n var mergeData = initData.map(function (item) {\n var pKeyVal = DataUtil.getObject(field, item);\n var value;\n var hasVal = changeds.some(function (cItem) {\n value = cItem;\n return pKeyVal === DataUtil.getObject(field, cItem);\n });\n return hasVal ? value : item;\n });\n var eData = editedData;\n\n if (!(eData.type && eData.type === 'cancel') && deletedCols.length > 0) {\n for (var i = 0; i < deletedCols.length; i++) {\n var index = mergeData.indexOf(deletedCols[i]);\n mergeData.splice(index, 1);\n }\n }\n\n var aggregates = [];\n var aggregateRows = this.parent.aggregates;\n\n for (var j = 0; j < aggregateRows.length; j++) {\n var row = aggregateRows[j];\n\n for (var k = 0; k < row.columns.length; k++) {\n var aggr = {};\n var type = row.columns[k].type.toString();\n aggr = {\n type: type.toLowerCase(),\n field: row.columns[k].field\n };\n aggregates.push(aggr);\n }\n }\n\n var result;\n var aggrds;\n var groupedCols = this.parent.groupSettings.columns;\n\n for (var l = 0; l < groupedCols.length; l++) {\n aggrds = result ? result : mergeData;\n result = DataUtil.group(aggrds, groupedCols[l], aggregates, null, null);\n }\n\n return result;\n };\n\n Group.prototype.updateExpand = function (args) {\n var uid = args.uid;\n var isExpand = args.isExpand;\n var rows = this.parent.getRowsObject();\n\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n\n if (row.uid === uid || isNullOrUndefined(uid)) {\n row.isExpand = isExpand;\n\n var _loop_1 = function _loop_1(j) {\n var childRow = rows[j];\n var closestParent = void 0;\n\n if (childRow.parentUid !== row.uid) {\n closestParent = rows.filter(function (x) {\n return x.uid === childRow.parentUid;\n })[0];\n }\n\n if (childRow.parentUid === row.uid) {\n childRow.visible = row.isExpand;\n } else if (!isNullOrUndefined(closestParent) && childRow.parentUid === closestParent.uid) {\n if (closestParent.isExpand && closestParent.visible === true) {\n childRow.visible = true;\n } else if (closestParent.isExpand && closestParent.visible === false) {\n childRow.visible = false;\n }\n }\n\n if (isNullOrUndefined(uid)) {\n return \"break\";\n }\n };\n\n for (var j = i + 1; j < rows.length; j++) {\n var state_1 = _loop_1(j);\n\n if (state_1 === \"break\") break;\n }\n }\n }\n\n this.parent.notify(events.contentReady, {\n rows: rows,\n args: {\n isFrozen: false,\n rows: rows\n }\n });\n };\n\n return Group;\n}();\n\nexport { Group };","import React from \"react\";\r\nimport styled from \"styled-components\";\r\nimport {\r\n\tGridComponent,\r\n\tColumnsDirective,\r\n\tColumnDirective,\r\n\tGroup,\r\n\tInject,\r\n} from \"@syncfusion/ej2-react-grids\";\r\n\r\nconst GridWrapper = styled.div`\r\n\t.e-group-intent {\r\n\t\tdisplay: block;\r\n\t}\r\n\r\n\t.e-grouptopleftcell {\r\n\t\twidth: 28px;\r\n\t}\r\n\r\n\t.e-groupcaption:hover,\r\n\t.e-recordpluscollapse:hover,\r\n\t.e-recordplusexpand:hover {\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t.e-recordplusexpand,\r\n\t.e-recordpluscollapse {\r\n\t\twidth: 28px !important;\r\n\t}\r\n`;\r\n\r\nconst DocTemplate = ({ documentName, url }) => (\r\n\t\r\n\t\t{documentName}\r\n\t\r\n);\r\n\r\nconst GroupCaptionTemplate = group => {\r\n\tconst groupItem = group.items[0].group;\r\n\tconst docsText = `document${group.count == 1 ? \"\" : \"s\"}`;\r\n\treturn (\r\n\t\t
\r\n\t\t\t{groupItem.displayText} \r\n\t\t\t\r\n\t\t\t\t({group.count} {docsText})\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n};\r\n\r\nclass PlansGrid extends React.Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t\tthis.initial = true;\r\n\t\tthis.gridRef = null;\r\n\t\tthis.plans = props.plans;\r\n\t\tthis.isExpandCollapseTarget = el =>\r\n\t\t\tel &&\r\n\t\t\t(el.classList.contains(\"e-recordpluscollapse\") ||\r\n\t\t\t\tel.classList.contains(\"e-recordplusexpand\"));\r\n\r\n\t\tthis.cleanTitlesAndAriaLabels = allCaptions => {\r\n\t\t\tlet currentAriaLabel;\r\n\t\t\tlet tempElement = document.createElement(\"div\");\r\n\r\n\t\t\tfor (let i = 0; i < allCaptions.length; i++) {\r\n\t\t\t\tallCaptions[i].title = \"\";\r\n\r\n\t\t\t\t// replace html strings in aria-label with plain text\r\n\t\t\t\tcurrentAriaLabel = allCaptions[i].getAttribute(\"aria-label\");\r\n\t\t\t\ttempElement.innerHTML = currentAriaLabel;\r\n\t\t\t\tallCaptions[i].setAttribute(\r\n\t\t\t\t\t\"aria-label\",\r\n\t\t\t\t\ttempElement.textContent || tempElement.innerText || \"\"\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.addTextToEmptyControlsHeader = text => {\r\n\t\t\tconst expandControlsHeader = this.gridRef.element.querySelectorAll(\r\n\t\t\t\t\"tr>th.e-grouptopleftcell\"\r\n\t\t\t)[0];\r\n\t\t\tconst srHeader = document.createElement(\"span\");\r\n\t\t\tsrHeader.classList.add(\"sr-only\");\r\n\t\t\tsrHeader.innerHTML = text;\r\n\t\t\texpandControlsHeader.appendChild(srHeader);\r\n\t\t};\r\n\r\n\t\tthis.dataBoundHandler = () => {\r\n\t\t\tif (this.gridRef && this.initial) {\r\n\t\t\t\tthis.gridRef.groupModule.collapseAll();\r\n\t\t\t\tthis.initial = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.gridRef) {\r\n\t\t\t\tthis.addTextToEmptyControlsHeader(\r\n\t\t\t\t\t\"Expand or Collapsing Group Controls\"\r\n\t\t\t\t);\r\n\r\n\t\t\t\t// remove html text in caption\r\n\t\t\t\tconst allCaptions = this.gridRef.element.getElementsByClassName(\r\n\t\t\t\t\t\"e-groupcaption\"\r\n\t\t\t\t);\r\n\t\t\t\tthis.cleanTitlesAndAriaLabels(allCaptions);\r\n\t\t\t}\r\n\r\n\t\t\tvar collapsedElements = this.gridRef.element.getElementsByClassName(\r\n\t\t\t\t\"e-recordpluscollapse\"\r\n\t\t\t);\r\n\t\t\tfor (let i = 0; i < collapsedElements.length; i++) {\r\n\t\t\t\tcollapsedElements[i].setAttribute(\"aria-expanded\", false);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.loadHandler = () => {\r\n\t\t\t// allow clicking caption row to expand group\r\n\t\t\tthis.gridRef.element.addEventListener(\"mousedown\", e => {\r\n\t\t\t\tlet currentTd = e.target;\r\n\r\n\t\t\t\twhile (currentTd && currentTd.tagName == \"TD\") {\r\n\t\t\t\t\tcurrentTd = currentTd.previousSibling;\r\n\t\t\t\t\tif (this.isExpandCollapseTarget(currentTd)) {\r\n\t\t\t\t\t\tthis.gridRef.groupModule.expandCollapseRows(currentTd);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t};\r\n\t}\r\n\r\n\tshouldComponentUpdate() {\r\n\t\treturn false;\r\n\t}\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t (this.gridRef = grid)}\r\n\t\t\t\t\tdataBound={this.dataBoundHandler}\r\n\t\t\t\t\tload={this.loadHandler}\r\n\t\t\t\t\tdataSource={this.plans}\r\n\t\t\t\t\tallowGrouping={true}\r\n\t\t\t\t\tselectionSettings={{\r\n\t\t\t\t\t\ttype: \"Single\",\r\n\t\t\t\t\t\tmode: \"Row\",\r\n\t\t\t\t\t\tcellSelectionMode: \"BoxWithBorder\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tgroupSettings={{\r\n\t\t\t\t\t\tshowGroupedColumn: false,\r\n\t\t\t\t\t\tcolumns: [\"group.sortOrder\"],\r\n\t\t\t\t\t\tshowDropArea: false,\r\n\t\t\t\t\t\tcaptionTemplate: GroupCaptionTemplate,\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\tminHeight: \"80px\",\r\n\t\t\t\t\t\tmaxHeight: \"400px\",\r\n\t\t\t\t\t\toverflowY: \"auto\",\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default PlansGrid;\r\n","import React from \"react\";\r\nimport PlansGrid from \"./PlansGrid\";\r\n\r\nconst CurrentPlans = ({ data }) => {\r\n\treturn (\r\n\t\t<>\r\n\t\t\t
\r\n\t\t\t\t{data.mainBodyText}\r\n\t\t\t\t{data.groups ? (\r\n\t\t\t\t\tdata.groups.map(group => (\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{group.title}\r\n\t\t\t\t\t\t\t{group.body}\r\n\t\t\t\t\t\t\t{group.docs.length > 0 ? (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t) : null}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t))\r\n\t\t\t\t) : (\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\t\t\t
\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default CurrentPlans;\r\n","import React, { useEffect } from \"react\";\r\n// import PlansGrid from \"./PlansGrid\";\r\nimport styled from \"styled-components\";\r\nimport FabricIcon from \"@components/Icons/FabricIcon\";\r\n\r\nconst ProposalWrapper = styled.div`\r\n\th3,\r\n\th4 {\r\n\t\tfont-size: 1.2em;\r\n\t\tpadding: 0;\r\n\t\tmargin: 0;\r\n\t}\r\n\r\n\th2 h5 {\r\n\t\tfont-size: 1.1em;\r\n\t\tmargin-top: 1.7em;\r\n\t}\r\n\r\n\tp,\r\n\ta {\r\n\t\tvertical-align: middle;\r\n\t\tmargin-bottom: 0.1em;\r\n\t}\r\n\r\n\t.overview-maps-container ul {\r\n\t\tlist-style: none;\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: row;\r\n\t\tmargin: 0;\r\n\t\tpadding-left: 0.5em;\r\n\t}\r\n\r\n\t.overview-maps-container li {\r\n\t\tmargin: 0.3em 0.7em;\r\n\t}\r\n\r\n\t.overview-maps-container h4 {\r\n\t\tmargin-top: auto;\r\n\t\tmargin-bottom: auto;\r\n\t\tmin-width: 240px;\r\n\t\tfont-size: 1.2em;\r\n\t}\r\n\r\n\t@media (max-width: 415px) {\r\n\t\t.overview-maps-container ul {\r\n\t\t\tflex-direction: column;\r\n\t\t}\r\n\t}\r\n`;\r\n\r\nconst CollapseHeaderWrapper = styled.div`\r\n\th3 {\r\n\t\tfont-size: 1.4em;\r\n\t\tmargin: 0;\r\n\t\tpadding: 0.3em;\r\n\t\ttext-align: left;\r\n\t}\r\n\r\n\th4 {\r\n\t\tfont-size: 1.1em;\r\n\t\tmargin: 0.5em 0;\r\n\t\tpadding: 0.3em;\r\n\t}\r\n\r\n\tbutton i {\r\n\t\ttransition: all 300ms ease;\r\n\t}\r\n\r\n\tbutton.collapsed i {\r\n\t\ttransform: rotate(-180deg);\r\n\t}\r\n\r\n\tbutton h2 + div > i {\r\n\t\tfont-size: 1.5em;\r\n\t}\r\n\r\n\tbutton h4 + div > i {\r\n\t\tfont-size: 1.2em;\r\n\t}\r\n`;\r\n\r\nconst CollapseHeader = props => {\r\n\tconst { targetId, children, className } = props;\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t{children}\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n};\r\n\r\n// Remove per Research request\r\n// const ProposalGroup = ({ mapGroups, title, targetId }) => {\r\n// \treturn (\r\n// \t\t
\r\n// \t\t\t
\r\n// \t\t\t\t{title}\r\n// \t\t\t
\r\n// \t\t\t\r\n// \t\t\t\t{mapGroups.map((group, i) => (\r\n// \t\t\t\t\t
\r\n// \t\t\t\t\t\t
{group.title}
\r\n// \t\t\t\t\t\t\r\n// \t\t\t\t\t
\r\n// \t\t\t\t))}\r\n// \t\t\t
\r\n// \t\t\r\n// \t);\r\n// };\r\n\r\nconst Proposal = ({ proposal, id }) => {\r\n\tconst proposalHeaderId = `header-${id}`;\r\n\tconst collapseContainerId = `collapseible-${id}`;\r\n\t// const proposalsGroupContainerId = `proposal-group-container-${id}`;\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{proposal.title}\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{proposal.billLink ? (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tView {proposal.titlePlainText} on NELIS\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t) : null}\r\n\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{proposal.overviewMaps.map(({ title, maps }, i) => (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{title}\r\n\t\t\t\t\t\t\t\t\t{maps}\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t{/* Remove per research request \r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\tIndividual District Maps\r\n\t\t\t\t\t\t

\r\n\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{proposal.proposals.map(\r\n\t\t\t\t\t\t\t\t({ title, mapGroups }, i) => (\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t
*/}\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n};\r\n\r\nconst scrollToAndExpandCollapsableRegion = (heading, container) => {\r\n\theading.scrollIntoView();\r\n\r\n\tconst collapseContainer = container.querySelectorAll(\".collapse\")[0];\r\n\r\n\tif (!collapseContainer.classList.contains(\"show\")) {\r\n\t\tcollapseContainer.classList.add(\"show\");\r\n\t}\r\n\r\n\tconst parentCollapse = container.querySelectorAll(\r\n\t\t'[data-toggle=\"collapse\"]'\r\n\t)[0];\r\n\tif (parentCollapse.classList.contains(\"collapsed\")) {\r\n\t\tparentCollapse.classList.remove(\"collapsed\");\r\n\t}\r\n\r\n\tconst parent = heading.parentElement;\r\n\tif (parent.dataset.toggle === \"collapse\") {\r\n\t\tconst collapseTarget = document.querySelector(parent.dataset.target);\r\n\t\tif (collapseTarget && !collapseTarget.classList.contains(\"show\")) {\r\n\t\t\tcollapseTarget.classList.add(\"show\");\r\n\t\t}\r\n\t\tif (parent.classList.contains(\"collapsed\")) {\r\n\t\t\tparent.classList.remove(\"collapsed\");\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst useScrollToCollapsableHeadings = (containersQuery, location) => {\r\n\tuseEffect(() => {\r\n\t\tconst proposalContainers = document.querySelectorAll(containersQuery);\r\n\r\n\t\tfor (let i = 0; i < proposalContainers.length; i++) {\r\n\t\t\tconst heading =\r\n\t\t\t\tlocation.hash !== \"\"\r\n\t\t\t\t\t? proposalContainers[i].querySelector(location.hash)\r\n\t\t\t\t\t: null;\r\n\r\n\t\t\tif (heading) {\r\n\t\t\t\tscrollToAndExpandCollapsableRegion(\r\n\t\t\t\t\theading,\r\n\t\t\t\t\tproposalContainers[i]\r\n\t\t\t\t);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n};\r\n\r\nconst ProposedPlans = ({ data: { proposals, mainBodyText }, location }) => {\r\n\tconst proposalGroups = proposals\r\n\t\t? Object.keys(proposals).map(k => ({\r\n\t\t\t\tproposal: proposals[k],\r\n\t\t\t\tid: k,\r\n\t\t }))\r\n\t\t: null;\r\n\r\n\tuseScrollToCollapsableHeadings(\".proposal-wrapper\", location);\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{mainBodyText}\r\n\t\t\t{proposals ? (\r\n\t\t\t\tproposalGroups.map(({ proposal, id }) => (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{proposal.type == \"group\" ? (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t
{proposal.body}
\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t
\r\n\t\t\t\t))\r\n\t\t\t) : (\r\n\t\t\t\t
\r\n\t\t\t)}\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default ProposedPlans;\r\n","import React, { useState, useEffect, useContext } from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { WrapPageContext } from \"../Layout/ContextWrapper\";\r\n\r\nimport CurrentPlans from \"./CurrentPlans\";\r\nimport ProposedPlans from \"./ProposedPlans\";\r\n\r\nconst DistrictPlansBody = ({ data, location }) => {\r\n\tconst {\r\n\t\tshowCurrentDistrictsTab,\r\n\t\tcurrentDistricts,\r\n\t\tshowFinalDistrictsTab,\r\n\t\tfinalDistricts,\r\n\t\tshowLegislativeProposalsTab,\r\n\t\tlegislativeProposals,\r\n\t\tshowPublicProposalsTab,\r\n\t\tpublicProposals,\r\n\t} = data;\r\n\r\n\tvar { forceUpdateToc } = useContext(WrapPageContext);\r\n\r\n\tconst DistrictPlansNavWrapper = styled.nav`\r\n\t\t@media (max-width: 740px) {\r\n\t\t\ta {\r\n\t\t\t\tfont-size: 0.85em !important;\r\n\t\t\t}\r\n\t\t}\r\n\t`;\r\n\r\n\tconst tabs = [\r\n\t\t{\r\n\t\t\tname: \"districts-final\",\r\n\t\t\tdisplay: \"Final Plans\",\r\n\t\t\tshowTab: showFinalDistrictsTab,\r\n\t\t\tcomponent: ,\r\n\t\t},\r\n\t\t{\r\n\t\t\tname: \"districts-proposed\",\r\n\t\t\tdisplay: \"Proposed Districts\",\r\n\t\t\tshowTab: showLegislativeProposalsTab,\r\n\t\t\tcomponent: (\r\n\t\t\t\t\r\n\t\t\t),\r\n\t\t},\r\n\t\t{\r\n\t\t\tname: \"districts-2011\",\r\n\t\t\tdisplay: \"2011 Districts\",\r\n\t\t\tshowTab: showCurrentDistrictsTab,\r\n\t\t\tcomponent: ,\r\n\t\t},\r\n\t\t{\r\n\t\t\tname: \"districts-public\",\r\n\t\t\tdisplay: \"Public Proposals\",\r\n\t\t\tshowTab: showPublicProposalsTab,\r\n\t\t\tcomponent: (\r\n\t\t\t\t\r\n\t\t\t),\r\n\t\t},\r\n\t];\r\n\r\n\tconst [currentTabIndex, setCurrentTabIndex] = useState(0);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst currentTabs = tabs.filter(tab => tab.showTab);\r\n\r\n\t\tlet locationHashTabIndex = -1;\r\n\r\n\t\tif (window.location.hash === \"\") {\r\n\t\t\twindow.location.hash = `#${currentTabs[0].name}`;\r\n\t\t\tlocationHashTabIndex = tabs\r\n\t\t\t\t.map(t => t.name)\r\n\t\t\t\t.indexOf(currentTabs[0].name);\r\n\t\t} else {\r\n\t\t\tlocationHashTabIndex = tabs\r\n\t\t\t\t.map(t => t.name)\r\n\t\t\t\t.indexOf(location.hash.replace(\"#\", \"\"));\r\n\t\t}\r\n\r\n\t\tsetCurrentTabIndex(\r\n\t\t\tlocationHashTabIndex === -1 ? 0 : locationHashTabIndex\r\n\t\t);\r\n\t}, []);\r\n\r\n\tconst handleTabClick = tabIndex => {\r\n\t\tsetCurrentTabIndex(tabIndex);\r\n\t\tforceUpdateToc();\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t

District Plans

\r\n\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t{tabs.map((tab, tabIndex) => {\r\n\t\t\t\t\t\treturn tab.showTab ? (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t handleTabClick(tabIndex)}\r\n\t\t\t\t\t\t\t\t\tclassName={`nav-link${\r\n\t\t\t\t\t\t\t\t\t\tcurrentTabIndex === tabIndex\r\n\t\t\t\t\t\t\t\t\t\t\t? \" active\"\r\n\t\t\t\t\t\t\t\t\t\t\t: \"\"\r\n\t\t\t\t\t\t\t\t\t}`}\r\n\t\t\t\t\t\t\t\t\thref={`#${tab.name}`}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{tab.display}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t) : null;\r\n\t\t\t\t\t})}\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t{tabs[currentTabIndex].component}\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default DistrictPlansBody;\r\n","import React from \"react\";\r\n\r\nimport \"@include/syncfusion-bootstrap4-base.css\";\r\nimport \"@include/syncfusion-bootstrap4-grids.css\";\r\n\r\nimport PageLayout from \"@layout/PageLayout\";\r\n\r\nimport DistrictPlansBody from \"./DistrictPlansBody\";\r\nimport { transformDistrictPlansPageData } from \"./transformDistrictPlansPageData\";\r\nimport {\r\n\trenderRichText,\r\n\tbulkRenderRichText,\r\n} from \"@utils/prismic-render-utils\";\r\n\r\nconst renderCurrentDistrictsRichText = currentDistricts => {\r\n\treturn {\r\n\t\tmainBodyText: renderRichText(currentDistricts.mainBodyText),\r\n\t\tgroups: currentDistricts.groups\r\n\t\t\t? currentDistricts.groups.map(group => ({\r\n\t\t\t\t\t...group,\r\n\t\t\t\t\t...bulkRenderRichText(group, [\"id\", \"docs\"]),\r\n\t\t\t }))\r\n\t\t\t: [],\r\n\t};\r\n};\r\n\r\nconst renderProposalsRichText = proposedDistricts => {\r\n\tconst renderedProposals = {};\r\n\tconst mainBodyText = renderRichText(proposedDistricts.mainBodyText);\r\n\r\n\tif (proposedDistricts.proposals) {\r\n\t\tObject.keys(proposedDistricts.proposals).map(key => {\r\n\t\t\tconst proposal = proposedDistricts.proposals[key];\r\n\r\n\t\t\tif (proposal.type == \"group\") {\r\n\t\t\t\tconst proposalTextFields = bulkRenderRichText(proposal, [\r\n\t\t\t\t\t\"titlePlainText\",\r\n\t\t\t\t\t\"billLink\",\r\n\t\t\t\t\t\"overviewMaps\",\r\n\t\t\t\t\t\"proposals\",\r\n\t\t\t\t\t\"type\",\r\n\t\t\t\t]);\r\n\t\t\t\tconst overviewMaps = proposal.overviewMaps.map(m =>\r\n\t\t\t\t\tbulkRenderRichText(m, [\"\"])\r\n\t\t\t\t);\r\n\t\t\t\tconst proposals = proposal.proposals.map(p => ({\r\n\t\t\t\t\t...p,\r\n\t\t\t\t\ttitle: renderRichText(p.title),\r\n\t\t\t\t\tmapGroups: p.mapGroups.map(group => ({\r\n\t\t\t\t\t\t...group,\r\n\t\t\t\t\t\ttitle: renderRichText(group.title),\r\n\t\t\t\t\t})),\r\n\t\t\t\t}));\r\n\t\t\t\trenderedProposals[key] = {\r\n\t\t\t\t\t...proposal,\r\n\t\t\t\t\t...proposalTextFields,\r\n\t\t\t\t\toverviewMaps: overviewMaps,\r\n\t\t\t\t\tproposals: proposals,\r\n\t\t\t\t};\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\trenderedProposals[key] = {\r\n\t\t\t\t...proposal,\r\n\t\t\t\tbody: renderRichText(proposal.body),\r\n\t\t\t};\r\n\t\t});\r\n\t}\r\n\treturn { mainBodyText: mainBodyText, proposals: renderedProposals };\r\n};\r\n\r\nconst renderRichTextFields = data => ({\r\n\t...data,\r\n\tcurrentDistricts: renderCurrentDistrictsRichText(data.currentDistricts),\r\n\tfinalDistricts: renderCurrentDistrictsRichText(data.finalDistricts),\r\n\tlegislativeProposals: renderProposalsRichText(data.legislativeProposals),\r\n\tpublicProposals: renderProposalsRichText(data.publicProposals),\r\n});\r\n\r\nconst DistrictPlans = props => {\r\n\tconst data = props.previewData\r\n\t\t? renderRichTextFields(\r\n\t\t\t\ttransformDistrictPlansPageData(props.previewData)\r\n\t\t )\r\n\t\t: renderRichTextFields(props.pageContext.data);\r\n\r\n\treturn (\r\n\t\t }\r\n\t\t/>\r\n\t);\r\n};\r\n\r\nexport default DistrictPlans;\r\n","const { generate: genId } = require(\"shortid\");\r\nconst { assignIdsToHeaders } = require(\"../../utils/prismic-data-utils\");\r\n\r\nconst transformCurrentPlansGroup = (\r\n\tgroup,\r\n\tallowOverrideDocumentLink = false\r\n) => ({\r\n\ttitle: assignIdsToHeaders(group.primary.groupTitle),\r\n\tbody: assignIdsToHeaders(group.primary.groupBody),\r\n\tid: genId(),\r\n\tdocs: group.fields\r\n\t\t.map((doc, i) =>\r\n\t\t\tdoc.documentSizeGroup.documentSizeGroup.map(docSize => ({\r\n\t\t\t\tgroup: {\r\n\t\t\t\t\tsortOrder: i,\r\n\t\t\t\t\tdisplayText: doc.documentSizeGroup.documentDisplayText,\r\n\t\t\t\t\tgroupedRowsLength: group.fields.length,\r\n\t\t\t\t},\r\n\t\t\t\turl:\r\n\t\t\t\t\tallowOverrideDocumentLink && docSize.overrideDocumentLink\r\n\t\t\t\t\t\t? docSize.overrideDocumentLink.url\r\n\t\t\t\t\t\t: `/Division/Research/Documents/${docSize.documentName}`,\r\n\t\t\t\t...docSize,\r\n\t\t\t}))\r\n\t\t)\r\n\t\t.reduce((acc, val) => acc.concat(val), []),\r\n});\r\n\r\nconst transformProposedPlansGroup = group => {\r\n\treturn group.map((doc, i) =>\r\n\t\tdoc.proposedMapDocuments.documentSizeGroup.map(docSize => ({\r\n\t\t\tgroup: {\r\n\t\t\t\tsortOrder: i,\r\n\t\t\t\tdisplayText: doc.proposedMapDocuments.documentDisplayText,\r\n\t\t\t\tgroupedRowsLength: group.length,\r\n\t\t\t},\r\n\t\t\turl: `/Division/Research/Documents/${docSize.documentName}`,\r\n\t\t\t...docSize,\r\n\t\t}))\r\n\t);\r\n};\r\n\r\nconst transformProposals = body => {\r\n\tconst proposalGroup = {};\r\n\tlet currentProposalId;\r\n\tlet proposalIndex;\r\n\r\n\tbody.forEach(slice => {\r\n\t\tswitch (slice.type) {\r\n\t\t\tcase \"proposal-group-text\":\r\n\t\t\t\tcurrentProposalId = genId();\r\n\t\t\t\tproposalGroup[currentProposalId] = {\r\n\t\t\t\t\ttype: \"rich-text\",\r\n\t\t\t\t\tbody: assignIdsToHeaders(\r\n\t\t\t\t\t\tslice.primary.proposalGroupRichText\r\n\t\t\t\t\t),\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"proposal\":\r\n\t\t\t\tcurrentProposalId = genId();\r\n\t\t\t\tproposalGroup[currentProposalId] = {\r\n\t\t\t\t\ttype: \"group\",\r\n\t\t\t\t\ttitle: assignIdsToHeaders(slice.primary.title),\r\n\t\t\t\t\ttitlePlainText: slice.primary.title[0].text,\r\n\t\t\t\t\tbillLink: slice.primary.billLink\r\n\t\t\t\t\t\t? slice.primary.billLink.url\r\n\t\t\t\t\t\t: null,\r\n\t\t\t\t\tbody: assignIdsToHeaders(slice.primary.body4),\r\n\t\t\t\t\toverviewMaps: slice.fields.map(\r\n\t\t\t\t\t\t({ overviewMaps, overviewMapsTitle }) => ({\r\n\t\t\t\t\t\t\ttitle: assignIdsToHeaders(overviewMapsTitle),\r\n\t\t\t\t\t\t\tmaps: assignIdsToHeaders(overviewMaps),\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t),\r\n\t\t\t\t\tproposals: [],\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"proposal-title\":\r\n\t\t\t\tproposalGroup[currentProposalId].proposals.push({\r\n\t\t\t\t\ttitle: assignIdsToHeaders(slice.primary.proposalTitle),\r\n\t\t\t\t\tmapGroups: [],\r\n\t\t\t\t});\r\n\t\t\t\tproposalIndex =\r\n\t\t\t\t\tproposalGroup[currentProposalId].proposals.length - 1;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"proposal-map-group\":\r\n\t\t\t\tproposalGroup[currentProposalId].proposals[\r\n\t\t\t\t\tproposalIndex\r\n\t\t\t\t].mapGroups.push({\r\n\t\t\t\t\ttitle: assignIdsToHeaders(\r\n\t\t\t\t\t\tslice.primary.proposalMapGroupTitle\r\n\t\t\t\t\t),\r\n\t\t\t\t\tgroups: transformProposedPlansGroup(slice.fields).reduce(\r\n\t\t\t\t\t\t(acc, val) => acc.concat(val),\r\n\t\t\t\t\t\t[]\r\n\t\t\t\t\t),\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\treturn proposalGroup;\r\n};\r\n\r\nmodule.exports.transformDistrictPlansPageData = data =>\r\n\tdata.prismic.allReapredistDistrictPlansPages.edges.map(({ node }) => ({\r\n\t\tshowCurrentDistrictsTab: node.showCurrentDistrictsTab,\r\n\t\tshowFinalDistrictsTab: node.showFinalDistrictsTab,\r\n\t\tshowLegislativeProposalsTab: node.showLegislativeProposalsTab,\r\n\t\tshowPublicProposalsTab: node.showPublicProposalsTab,\r\n\t\tcurrentDistricts: {\r\n\t\t\tmainBodyText: assignIdsToHeaders(node.mainBodyTextCurrent),\r\n\t\t\tgroups: node.body\r\n\t\t\t\t? node.body.map(group =>\r\n\t\t\t\t\t\ttransformCurrentPlansGroup(group, true)\r\n\t\t\t\t )\r\n\t\t\t\t: null,\r\n\t\t},\r\n\t\tlegislativeProposals: {\r\n\t\t\tmainBodyText: assignIdsToHeaders(node.mainBodyTextLegislative),\r\n\t\t\tproposals: node.body1 ? transformProposals(node.body1) : null,\r\n\t\t},\r\n\t\tpublicProposals: {\r\n\t\t\tmainBodyText: assignIdsToHeaders(node.mainBodyTextPublic),\r\n\t\t\tproposals: node.body2 ? transformProposals(node.body2) : null,\r\n\t\t},\r\n\t\tfinalDistricts: {\r\n\t\t\tmainBodyText: assignIdsToHeaders(node.mainBodyTextFinal),\r\n\t\t\tgroups: node.body3\r\n\t\t\t\t? node.body3.map(group =>\r\n\t\t\t\t\t\ttransformCurrentPlansGroup(group, true)\r\n\t\t\t\t )\r\n\t\t\t\t: null,\r\n\t\t},\r\n\t}))[0];\r\n"],"sourceRoot":""}