{"version":3,"sources":["webpack:///./node_modules/@syncfusion/ej2-popups/src/tooltip/tooltip.js","webpack:///./node_modules/@syncfusion/ej2-calendars/src/datepicker/datepicker.js","webpack:///./src/views/Companies.vue?459e","webpack:///src/views/Companies.vue","webpack:///./src/views/Companies.vue?36c5","webpack:///./src/views/Companies.vue","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/foreign-key.js","webpack:///./node_modules/@syncfusion/ej2-compression/src/compression-writer.js","webpack:///./src/common/syncfusion.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/data.js","webpack:///./node_modules/@syncfusion/ej2-calendars/src/calendar/calendar.js","webpack:///./node_modules/@syncfusion/ej2-dropdowns/src/common/highlight-search.js","webpack:///./node_modules/@syncfusion/ej2-dropdowns/src/auto-complete/auto-complete.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/base/string-literals.js","webpack:///./node_modules/@syncfusion/ej2-buttons/src/radio-button/radio-button.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/models/column.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/scroll.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/summary-model-generator.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/worksheets.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/worksheet.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/cell-style.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/column.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/row.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/image.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/cell.js","webpack:///./node_modules/@syncfusion/ej2-compression/src/utils.js","webpack:///./node_modules/@syncfusion/ej2-compression/src/decompressor-huffman-tree.js","webpack:///./node_modules/@syncfusion/ej2-compression/src/checksum-calculator.js","webpack:///./node_modules/@syncfusion/ej2-compression/src/compression-reader.js","webpack:///./node_modules/@syncfusion/ej2-compression/src/zip-archive.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/value-formatter.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/csv-helper.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/blob-helper.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/auto-filters.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/workbook.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/aria-service.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/toolbar/toolbar.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/common/h-scroll.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/reorder.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/export-helper.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/excel-export.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/print.js","webpack:///./node_modules/@syncfusion/ej2-calendars/src/timepicker/timepicker.js","webpack:///./node_modules/@syncfusion/ej2-calendars/src/datetimepicker/datetimepicker.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/value-formatter.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/filter-cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/filter-menu-operator.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/string-filter-ui.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/number-filter-ui.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/boolean-filter-ui.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/date-filter-ui.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/filter-menu-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/checkbox-filter.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/common/excel-filter-base.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/excel-filter.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/filter.js","webpack:///./node_modules/@syncfusion/ej2-dropdowns/src/combo-box/combo-box.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/base/enum.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/common/v-scroll.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/form-validator/form-validator.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-renderer.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/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/search.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/show-hide.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/base/grid.js","webpack:///./node_modules/@syncfusion/ej2-buttons/src/check-box/check-box.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/numerictextbox/numerictextbox.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/common/checkbox-filter-base.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/inline-edit-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/batch-edit-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/dialog-edit-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/edit-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/edit-cell-base.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/boolean-edit-cell.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/dropdown-edit-cell.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/numeric-edit-cell.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/default-edit-cell.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/normal-edit.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/inline-edit.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/batch-edit.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/dialog-edit.js","webpack:///./node_modules/@syncfusion/ej2-calendars/src/maskbase/masked-date-time.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/datepicker-edit-cell.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/template-edit-cell.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/edit.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/responsive-dialog-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/pager/numeric-container.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/pager/pager-message.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/pager/pager.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/pager/pager-dropdown.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/pager/external-message.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/page.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/selection.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/width-controller.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/common/menu-scroll.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/common/menu-base.js","webpack:///./node_modules/@syncfusion/ej2-vue-grids/src/grid/stacked-column.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-grids/src/grid/columns.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-grids/src/grid/aggregate-columns.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-grids/src/grid/aggregates.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-grids/src/grid/grid.component.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/focus-strategy.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/base/constant.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/content-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/group-model-generator.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/base/util.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/cell-merge-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/toolbar.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/sort.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/actions/resize.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/textbox/textbox.js","webpack:///./node_modules/@syncfusion/ej2-file-utils/src/save.js","webpack:///./node_modules/@syncfusion/ej2-file-utils/src/encoding.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/context-menu/context-menu.js"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","TOUCHEND_HIDE_DELAY","TAPHOLD_THRESHOLD","SHOW_POINTER_TIP_GAP","HIDE_POINTER_TIP_GAP","MOUSE_TRAIL_GAP","POINTER_ADJUST","ROOT","RTL","DEVICE","ICON","CLOSE","TOOLTIP_WRAP","CONTENT","ARROW_TIP","ARROW_TIP_OUTER","ARROW_TIP_INNER","TIP_BOTTOM","TIP_TOP","TIP_LEFT","TIP_RIGHT","POPUP_ROOT","POPUP_OPEN","POPUP_CLOSE","POPUP_LIB","HIDE_POPUP","POPUP_CONTAINER","Animation","_super","apply","effect","duration","delay","Tooltip","options","element","_this","call","mouseMoveEvent","mouseMoveTarget","containerElement","isBodyContainer","initialize","formatPosition","_a","_b","position","indexOf","split","tooltipPositionY","tooltipPositionX","renderArrow","setTipClass","tip","createElement","className","tipClass","appendChild","tooltipEle","renderPopup","elePos","mouseTrail","top","left","getTooltipPosition","classList","remove","popupObj","height","width","X","Y","enableRtl","open","openPopupHandler","bind","close","closePopupHandler","getScalingFactor","x","y","scalingFactors","elementsWithTransform","closest","contains","computedStyle","window","getComputedStyle","transformValue","getPropertyValue","matrixValues","match","map","parseFloat","style","display","parentWithZoomStyle","zoom","pos","getBoundingClientRect","offsetPos","calculateTooltipOffset","collisionPosition","calculateElementPosition","collisionLeft","collisionTop","collisionFlipFit","windowResize","reposition","findTarget","dataBind","needTemplateReposition","trigger","tooltipEventArgs","isReact","opensOn","clearTemplate","clear","xScalingFactor","yScalingFactor","tipWidth","tipHeight","tooltipEleWidth","tooltipEleHeight","arrowEle","tipAdjust","tipHeightAdjust","tipWidthAdjust","tooltipEleRect","arrowEleRect","Math","round","showTipPointer","clientHeight","clientWidth","offsetWidth","offsetHeight","offsetX","offsetY","updateTipPosition","selEle","removeList","adjustArrow","leftValue","topValue","tooltipWidth","tooltipHeight","arrowInnerELe","tipPosExclude","tipPointerPosition","renderContent","tooltipContent","cssClass","getAttribute","setAttribute","removeAttribute","content","innerHTML","HTMLElement","enableHtmlSanitizer","setProperties","sanitize","enableHtmlParse","tempFunction","tempArr","id","undefined","root","templateFunction","renderReactTemplates","renderCloseIcon","isSticky","tipClose","add","touchStartEvent","onStickyClose","existingCloseIcon","querySelector","addDescribedBy","describedby","push","join","trim","removeDescribedBy","index","splice","orgdescribedby","tapHoldHandler","evt","clearTimeout","autoCloseTimer","targetHover","originalEvent","touchEndHandler","e","setTimeout","targetClick","hideTooltip","animation","closeDelay","targetList","slice","ctrlId","document","_i","targetList_1","target_1","restoreElement","showTooltip","mouseMoveBeforeOpen","mouseMoveBeforeRemove","showAnimation","showTimer","hideTimer","openDelay","type","cancel","event","isInteracted","observeCallback","beforeRenderArgs","beforeRenderCallback","isHidden","attrs","role","styles","tooltipBeforeRender","tooltipAfterRender","stop","appendContainer","ctrlObj","container","body","tagName","isDevice","maxWidth","observedArgs","beforeOpenCallback","openAnimation_1","name","timingFunction","show","onMouseMove","wireMouseEvents","tooltip","viewContainerRef","checkCollision","horizontal","vertical","affectedPos","checkCollideTarget","offsetLeft","pageXOffset","scrollLeft","offsetTop","pageYOffset","scrollTop","newpos","collidedPosition","elePosVertical","elePosHorizontal","getOffSetPosition","elePosition","eleOffset","windowCollision","arrowleft","parseInt","toString","positionString","newPos","offsetType","hideAnimation","targetElement","hide","isTooltipOpen","tooltipHide","popupHide","closeAnimation","unwireMouseEvents","destroy","tooltipHover","tooltipMouseOut","onMouseOut","enteredElement","relatedTarget","checkForTooltipElement","tooltipElementMouseOut","eventPageX","eventPageY","preventDefault","touches","pageX","pageY","colpos","keyDown","keyCode","touchEnd","scrollHandler","render","wireEvents","renderComplete","preRender","triggerList","getTriggerList","triggerList_1","wireFocusEvents","touchModule","tapHoldThreshold","tapHold","touchEndEvent","targetsList","targetList_2","unwireEvents","triggerList_2","unwireFocusEvents","targetList_3","triggerList_3","getModuleName","getPersistData","addOnPersist","onPropertyChanged","newProp","oldProp","keys","prop","refresh","target_2","currentTarget","currentTarget_1","DATEWRAPPER","LIBRARY","CONTROL","POPUPWRAPPER","INPUTWRAPPER","POPUP","INPUTCONTAINER","INPUTFOCUS","INPUTROOT","ERROR","ACTIVE","OVERFLOW","DATEICON","ICONS","OPENDURATION","OFFSETVALUE","SELECTED","FOCUSEDDATE","NONEDIT","containerAttr","DatePicker","isDateIconClicked","isAltKeyPressed","invalidValueString","checkPreviousValue","maskedDateValue","isAngular","preventChange","isIconClicked","isDynamicValueChanged","moduleName","isFocused","isBlur","isKeyAction","datepickerOptions","bindEvents","floatLabelType","calculateWidth","inputElement","inputWrapper","buttons","getElementsByClassName","disabled","enabled","setTimeZone","serverTimezoneOffset","offsetValue","value","clientTimeZoneDiff","Date","getTimezoneOffset","serverTimezoneDiff","timeZoneDiff","isDayLightSaving","getTime","updateInput","firstOffset","getFullYear","secondOffset","max","setAllowEdit","allowEdit","readonly","updateIconState","checkInvalidValue","enableMask","notify","module","createInput","updateHtmlAttributeToWrapper","placeholder","updateInputValue","previousElementValue","previousDate","inputValueCopy","ariaAttrs","l10nLocale","globalize","locale","l10n","getConstant","fullScreenMode","updatedCssClassValues","replace","isBindClearAction","bindClearAction","properties","showClearButton","setWidth","tabIndex","addAttributes","isDynamic","formatOptions","isCalendar","disabledDates","isNaN","checkValue","strictMode","validateDate","minMaxUpdates","minMaxUpdate","dateValue","dateString","tempFormat","formatString","dateTimeFormat","calendarMode","formatDate","format","skeleton","calendar","min","changedArgs","errorClass","checkStringValue","val","returnDate","formatDateTime","culture","getDatePattern","checkDateValue","parseDate","valueDate","valueString","invalid","extISOString","basicISOString","test","bindInputEvent","inputHandler","dateIconHandler","mouseUpHandler","inputFocusHandler","inputBlurHandler","keyupHandler","keydownHandler","inputChangeHandler","clearButton","resetHandler","formElement","resetFormHandler","defaultKeyConfigs","keyConfigs","keyboardModules","eventName","keyAction","inputKeyActionHandle","code","unBindEvents","restoreValue","currentDate","stopPropagation","bindClearEvent","clearedArgs","popupUpdate","changeEvent","keyupEvent","createEvent","initEvent","dispatchEvent","preventEventBubbling","interopAdaptor","invokeMethodAsync","setValue","blur","focus","htmlAttributes","updatedClassValues","setStyle","charAt","updateHtmlAttributeToElement","updateCssClass","newCssClass","oldCssClass","setCssClass","popupWrapper","calendarKeyActionHandle","action","children","selectionStart","selectionEnd","focusArguments","model","openOnFocus","isPopupClicked","strictModeUpdate","changeTrigger","activeElement","blurArguments","calendarKeyboardModules","calendarElement","firstElementChild","documentHandler","parentElement","depth","toLowerCase","generateTodayVal","focusOut","clickedView","currentView","start","end","length_1","headerTitleElement","defaultAction","keyActionHandle","setActiveDescendant","previousDateTime","querySelectorAll","targetdate","navigateTo","dateOptions","date","pattern","charPattern","len","modifiedValue","toLocaleUpperCase","setFullYear","setHours","getHours","getMinutes","getSeconds","getMilliseconds","createCalendar","modelHeader","modal","relateTo","targetType","zIndex","collision","iconRight","marginRight","swipe","CalendarSwipeHandler","TouchStartHandler","resetCalendar","preventArgs","setAriaAttributes","targetExitViewport","direction","swipeDirection","touchStart","navigateNext","navigatePrevious","setAriaDisabled","yearHeading","h2","daySpan","monthSpan","textContent","modelCloseIcon","modelCloseHandler","modelTodayButton","insertBefore","valueOf","navigatedEvent","navigatedArgs","selectCalendar","requiredModules","modules","args","member","prevent_1","outOfRange","mobilePopupWrapper","popup","appendTo","eventArgs","refreshPosition","openAnimation","setOverlayIndex","tableBodyElement","dlgOverlay","prevent_2","closeEventCallback","prevent","keyboardModule","outerHTML","focusIn","triggerEvent","view","removeAttributes","inputElementCopy","ensureInputAttribute","ngTag","insertAdjacentElement","attributes","cloneNode","validationAttribute","getDefaultKeyConfig","checkHtmlAttributes","hasAttribute","altUpArrow","altDownArrow","escape","enter","controlUp","controlDown","moveDown","moveUp","moveLeft","moveRight","select","home","pageUp","pageDown","shiftPageUp","shiftPageDown","controlHome","controlEnd","shiftTab","tab","nameAttribute","attribute","attr","checkFormat","skeletonString","dynamic","checkView","attributes_1","valueCopy","previousValCopy","renderDayCell","inputVal","dateIdString","isDisabledDate","setMilliseconds","setPlaceholder","setReadonly","setEnabled","setLocale","setEnableRtl","setClearButton","removeFloating","addFloating","day","month","year","hour","minute","second","dayOfTheWeek","_vm","_h","$createElement","_c","_self","staticStyle","ref","data","toolbar","pageSettings","filterOptions","toolbarClick","excelExportComplete","query","actionBegin","actionComplete","actionFailure","recordDoubleClick","staticRenderFns","component","ForeignKey","parent","serviceLocator","isDestroyed","on","initForeignKeyColumns","getForeignKeyData","generateQueryFormData","columns","dataSource","eventfPromise","column","state","getStateEventArgument","def","deff","dataModule","getDataModule","requestType","foreignKeyDataState","isDataChanged","setForeignKeyDataState","isPending","resolver","resolve","promise","then","setColumnData","setForeignKeyData","foreignColumns","getForeignKeyColumns","allPromise","_loop_1","isComplex","this_1","genarateColumnQuery","genarateQuery","result","params","ready","offline","executeQuery","Promise","all","responses","columnData","editType","edit","fields","foreignKeyField","field","text","foreignKeyValue","catch","log","reject","predicate","fromData","needQuery","gObj","predicates","allowPaging","enableVirtualization","allowGrouping","groupSettings","records","executeLocal","filteredValue","distinct","getDay","operator","matchCase","where","or","queryColumn","isFiltered","isTrue","filterQuery","searchSettings","sSettings","adaptor","searchQuery","search","ignoreCase","filterColumn","filterSettings","filter","fColumn","uid","destroyEvent","off","ARR_LITERAL_CODES","Int16Array","ARR_LITERAL_LENGTHS","Uint8Array","ARR_DISTANCE_CODES","ARR_DISTANCE_LENGTHS","CompressedStreamWriter","noWrap","pendingBuffer","pendingBufLength","pendingBufCache","pendingBufBitsInCache","bufferPosition","extraBits","currentHash","matchStart","matchLength","matchPrevAvail","blockStart","stringStart","lookAhead","totalBytesIn","inputOffset","inputEnd","windowSize","windowMask","hashSize","hashMask","hashShift","floor","maxDist","checkSum","isHuffmanTreeInitiated","initHuffmanTree","treeLiteral","CompressorHuffmanTree","treeDistances","treeCodeLengths","arrDistances","Uint16Array","arrLiterals","stream","dataWindow","hashHead","hashPrevious","writeZLibHeader","get","enumerable","configurable","compressedString","String","fromCharCode","write","offset","Error","encode","getBytes","inputBuffer","ChecksumCalculator","checksumUpdate","pendingBufferFlush","compressData","headerDate","pendingBufferWriteShortBytes","s","finish","success","fillWindow","canFlush","compressSlow","flush","lookAheadCompleted","slideWindow","prevMatch","prevLen","discardMatch","matchPreviousBest","matchPreviousAvailable","huffmanIsFull","insertString","findLongestMatch","huffmanTallyLit","huffmanTallyDist","huffmanFlushBlock","lastBlock","more","set","subarray","updateHash","m","hash","curMatch","chainLen","niceLen","scan","bestEnd","bestLength","limit","stringEnd","scanEnd1","scanEnd","literal","codeFrequencies","dist","lc","huffmanLengthCode","dc","huffmanDistanceCode","stored","storedOffset","storedLength","buildTree","calculateBLFreq","blTreeCodes","codeLengths","huffCodeLengthOrders","opt_len","getEncodedLength","static_len","huffmanFlushStoredBlock","pendingBufferWriteBits","setStaticCodes","huffmanCompressBlock","huffmanReset","huffmanSendAllTrees","pendingBufferAlignToByte","pendingBufferWriteShort","pendingBufferWriteByteBlock","distance","buildCodes","treeLength","rank","writeTree","reset","literalLen","writeCodeToStream","bits","count","uint","Uint32Array","pendingBufferFlushBits","isClose","array","bitReverse","writer","elementCount","minCodes","maxLength","codeMinCount","codeFrequency","lengthCount","Int32Array","codeCount","codeLength","codes","lengths","temp","lengthTemp","nextCode","bitsCount","reverseBits","blTree","maxCount","minCount","curLen","nextLen","maxRepeatCount","minRepeatCount","currentRepeatCount","currentCodeLength","codesCount","arrTree","n","freq","pPos","leafsCount","nodesCount","child","values","node","iIndex","constructHuffmanTree","buildLength","first","last","lastVal","path","minDepth","numNodes","numLeafs","overflow","calculateOptimalCodeLength","iIncreasableLength","recreateTree","nodePtr","childPtr","childIndex","bitLength","checksum","buffer","checksum_uint","s1","s2","checkSumBitOffset","steps","checksumIterationCount","checksumBase","CustomWebApiAdaptor","_WebApiAdaptor","_classCallCheck","_callSuper","_inherits","_createClass","dm","xhttp","p3","originalFail","onFailure","err","status","token","authToken","logger","apis","unprotectedApi","put","Token","resp","rules","getPermissions","checkUIPermissions","navigateToLogin","location","pathname","_superPropGet","WebApiAdaptor","SyncHelper","getDataManager","relativePath","queryString","DataManager","url","concat","urls","apiBaseUrl","crossDomain","headers","Authorization","Data","dataState","group","initDataManager","addRows","reorderRows","removeRows","crudActions","getData","refreshFilteredCols","dataManager","json","toIndex","fromIndex","isQueryInvokedFromData","isVue","generateQuery","skipPage","isAutoCompleteCall","getQuery","clone","columnQueryMode","getColumns","isPrimaryKey","visible","selectQueryFields","aggregateQuery","sortQuery","virtualGroupPageQuery","pageQuery","groupQuery","rows","aggregates","row","j","cols","types","k","aggregate","fName","queries","enableInfiniteScrolling","currentPage","pageCount","pageSize","infiniteScrollModule","page","pagerModule","pagerObj","isAllPage","isManualRefresh","enableLazyLoading","lazyLoad","getColumnByField","columnName","isGrpFmt","enableGroupByFormat","formatGroupColumn","allowSorting","sortSettings","sortGrp","col","setSortDirection","fn","sortComparer","isRemote","isForeignColumn","sortByForeignKey","sortBy","getSortDirection","fcolumn","isForeignKey","getSearchColumnFieldNames","predicateList","needForeignKeySearch","some","fGeneratePredicate","ignoreAccent","predList","skipFoerign","foreignColEmpty","actualFilter","foreignColumn","allowFiltering","colType","foreignCols","defaultFltrCols","columns_1","gridColumn","getColumnByUid","grabColumnByFieldFromAllCols","excelPredicate","getPredicate","_d","_e","foreignCols_1","column_1","grabColumnByUidFromAllCols","_f","_g","and","fPredicate","getKey","foreignKeyData","getPrimaryKeyFieldNames","eventPromise","crud","fromTable","changes","addedRecords","deletedRecords","changedRecords","saveChanges","requiresCount","insert","isArray","deferred_1","getFormatter","formatVal","toView","pr","update","previousData","original","endEdit","setState","getState","getForeignKeyDataState","adaptr","processQuery","JSON","parse","pvtData","dataArgs","disablePageWiseAggregates","editArgs_1","cancelEdit","colFieldNames","columns_2","allowSearching","OTHERMONTH","OTHERDECADE","HEADER","CONTENTTABLE","YEAR","MONTH","DECADE","PREVICON","NEXTICON","PREVSPAN","NEXTSPAN","ICONCONTAINER","DISABLED","OVERLAY","WEEKEND","WEEKNUMBER","FOCUSEDCELL","OTHERMONTHROW","TODAY","TITLE","LINK","CELL","WEEKHEADER","ZOOMIN","FOOTER","BTN","FLAT","CSS","PRIMARY","DAYHEADERLONG","dayMilliSeconds","minutesMilliSeconds","CalendarBase","isDateSelected","isTodayClicked","previousDates","rangeValidation","calendarEleCopy","setSeconds","firstDayOfWeek","getFirstDayOfWeek","todayDisabled","todayDate","createHeader","createContent","spacebar","altRightArrow","altLeftArrow","popupElement","ariaPrevAttrs","ariaNextAttrs","ariaTitleAttrs","tabIndexAttr","headerElement","iconContainer","previousIcon","selector","isCenterRipple","nextIcon","adjustLongHeaderSize","contentElement","table","createContentHeader","createContentBody","showTodayButton","createContentFooter","addContentFocus","removeContentFocus","focusedDate","selectedDate","getCultureValues","cldrObj","culShortNames","dayFormat","dayHeaderFormat","getCultureObjects","obj","toCapitalize","toUpperCase","daysCount","html","tableHeadElement","weekNumber","shortNames","shiftArray","days","renderYears","renderDecades","renderMonths","updateFooter","todayElement","l10","minimum","maximum","today","footer","todayButtonClick","keyConfig","navigateTitle","dateWireEvents","serverModuleName","isCustomDate","getViewNumber","renderDayCellArgs","multiSelection","depthValue","levelRestrict","keyboardNavigate","selectDate","contentClick","title","firstDay","lastDay","addMonths","addYears","number","isMonthYearRange","addDay","isMinMaxRange","navigatePreviousHandler","navigateNextHandler","navigateHandler","triggerNavigate","minMaxDate","localDate","minDate","maxDate","tdEles","numCells","renderDays","islamicModule","islamicRenderDays","renderTemplate","islamicRenderTemplate","isTodayDate","cellsCount","getDate","timezone","currentMonth","getMonth","titleUpdate","setStartDate","weekEle","weekAnchor","numberOfDays","weekRule","finalDate","getWeek","dateFormatOptions","tdEle","dayCell","dayLink","isDisabled","isOutOfRange","argument","renderDayCellEvent","argsDate","localDateString","tempDateString","otherMnthBool","disabledCls","clickHandler","getDateVal","tempValue","innerText","copyValues","type_1","formatOptions_1","localDateString_1","tempDateString_1","updateFocus","otherMonth","tableElement","removeTableHeadElement","valueUtil","curDate","mon","yr","curYrs","minYr","minMonth","maxYr","maxMonth","setMonth","setDate","localMonth","yearCell","localYr","startYr","endYr","startFullYr","endFullYr","startHdrYr","endHdrYr","startYear","rowIterator","collection","lastDate","timeOffset","abs","findLastDay","elements","classNm","trEle","weekNumCell","numberCell","otherMonthCell","iconHandler","islamicIconHandler","setAriaActiveDescendant","clickEventEmitter","eve","getIdValue","islamicPreviousHeader","islamicDate","getIslamicDate","toGregorian","switchView","keyEntity","validateValues","skipIndex","tempValueString","minFormatOption","minStringValue","minString","maxFormatOption","maxStringValue","maxString","setValueUpdate","dayFormatOptions","monthFormatOptions","focusedEle","selectedEle","previousIconHandler","compareMonth","nextIconHandler","compareYear","compareDecade","todayButtonEvent","stringVal","previous","islamicPrevious","next","islamicNext","ld","gregorianFormat","islamicFormat","mainVal","ceil","time","tzOffset","tzOffsetDiff","setTime","getMaxDays","setDateDecade","setDateYear","checkPresentDate","tempElement","selectedElement","dates","previousValue","checkPrevious","compare","startDate","endDate","modifier","findNextTD","rangeValue","tmpDate","inValue","toUTCString","toLocaleString","timeZone","Calendar","isMultiSelection","tempValues","copyDate","previousValues","setEnable","setClass","form","formResetHandler","enable","setMinutes","changeHandler","triggerChange","isMultiSelect","tempDays","islamicRenderYears","islamicRenderDecade","storeView","tempDate","addDate","tempDates","removeDate","setTodayDate","Number","NaN","highlightSearch","ignoreRegex","replaceQuery","findTextNode","RegExp","childNodes","nodeType","nodeValue","revertHighlightSearch","parent_1","parentNode","createTextNode","replaceChild","icon","AutoComplete","_this_1","searchList","getLocaleName","getNgDirective","filterType","dataType","typeOfData","typeof","virtualGroupDataSource","mapping","suggestionCount","queryElements","take","takeValue","getTakeValue","skip","virtualItemStartIndex","searchLists","isTyped","isDataFetched","isSelectCustom","checkAndResetCache","list","renderList","filterInput","beforePopupOpen","resetList","isSelected","activeIndex","preventDefaultAction","updateData","filterAction","isNoDataElement","minLength","isFiltering","isPreventScrollAction","previousStartIndex","virtualListInfo","getTransformValues","virualElement","GetVirtualTrackHeight","totalItemCount","getFilteringSkeletonCount","hidePopup","clearAll","property","onActionComplete","ulElement","isUpdated","fixedHeaderElement","item","li","postBackAction","autofill","liCollections","items","listData","searchItem","setAutoFill","setSelection","isValidLI","getFormattedValue","getIndexByValue","setHoverList","selectedLI","setScrollPosition","isPopupOpen","preventAutoFill","isKeyNavigate","listOption","fieldsSettings","itemCreated","highlight","itemTemplate","isHtmlElement","charCodeAt","itemCreated_1","isEditTextBox","isPopupButton","showPopupButton","isSelectFocusItem","setInputValue","oldValue","typedString","allowCustom","setOldText","setOldValue","checkFields_1_1","listLength_1","getItems","_this_2","addItem","updateValues","showPopup","refreshPopup","viewPortInfo","startIndex","previousEndIndex","endIndex","setUpdateInitial","button","appendSpan","dropDownClick","atcProps","getPropObject","newProperty","oldProperty","renderHightSearch","isHighlight","iconCss","groupBy","rowCell","gridHeader","gridContent","gridFooter","headerContent","movableContent","movableHeader","frozenContent","frozenHeader","gridChkBox","editedRow","addedRow","leftRight","frozenRight","frozenLeft","dataColIndex","ariaColIndex","dataRowIndex","ariaRowIndex","tbody","colGroup","change","beforeOpen","initialFrozenColumnIndex","LABEL","RIPPLE","WRAPPER","ATTRIBUTES","RadioButton","RadioButton_1","checked","updateChange","input","instance","radioGrp","getRadioGroup","angularValue","radioWrap","wrapper","unWireEvents","forEach","refreshing","focusHandler","focusOutHandler","label","getLabel","getSelectedValue","getWrapper","nextElementSibling","initialCheckedValue","initWrapper","updateHtmlAttribute","setDisabled","rippleSpan","for","setText","keyUpHandler","labelMouseDownHandler","labelMouseLeaveHandler","rippleElem","removeChild","labelMouseUpHandler","wrap","labelPosition","formControlName","textLabel","rippleLabel","getElementsByTagName","click","Column","disableHtmlEncode","allowResizing","allowReordering","showColumnMenu","allowEditing","showInColumnChooser","autoFit","sortDirection","getEditTemplate","editTemplateFn","getFilterTemplate","filterTemplateFn","valueFormatter","setFormatter","getFormatFunction","setParser","getParserFunction","toJSON","commands","textAlign","template","commandsTemplate","templateFn","headerTemplate","headerTemplateFn","fltrTemplateFn","editTemplate","filterTemplate","ddEditedData","a_1","xObj","yObj","z","fnDescending","fnAscending","getFreezeTableName","freezeTable","refreshReactColumnTemplateByUid","refreshReactHeaderTemplateByUid","formatFn","getParser","parserFn","getColumnTemplate","getHeaderTemplate","getFilterItemTemplate","getDomSetter","GridColumn","CommandColumnModel","StackedColumn","Scroll","oneTimeReady","widthService","addEventListener","uiupdate","setWidthToColumns","toolbarModule","tlbrElement","tlbrLeftElement","tlbrCenterElement","tlbrRightElement","tlbrItems","tlbrLeftWidth","tlbrCenterWidth","tlbrRightWidth","tlbrItemsWidth","tlbrWidth","enableAdaptiveUI","refreshOverflow","setHeight","mHdrHeight","getContent","enableColumnVirtualization","isFrozenGrid","getScrollBarWidth","frozenRows","getHeaderContent","height_1","getRowHeight","isInitialLoad","loadingIndicator","indicatorType","ensureOverflow","setPadding","scrollWidth","getThreshold","cssProps","getCssProperties","border","padding","removePadding","rtl","hDiv","footerDiv","getFooterContent","getSiblingsHeight","appName","info","setScrollLeft","removeEventListener","header","setPageXY","onTouchScroll","mScrollBar","onCustomScrollbarScroll","userAgent","contentScrollHandler","headerScrollHandler","firstChild","onContentScroll","scrollTarget","isHeader","isPreventScrollEvent","errorFreeze","errorFixed","getVisibleFrozenLeftCount","widthVal","getVisibleFrozenRightCount","isEdit","isLeft","isDown","scrollDown","isFooter","cont","hdr","pointerType","isFrozen","pageXY","getPointXY","mHdr","mCont","scrollBar","getScrollbleParent","scrollingElement","overflowY","defaultView","scrollHeight","addStickyListener","isAdd","eventElement","makeStickyHeader","resizeFrozenRowBorder","div","frzCols","enableStickyHeader","sLeft","sHeight","getContentTable","setLastRowCell","css","contentRect","getClientRects","headerEle","toolbarEle","groupHeaderEle","parentTop","top_1","colMenuEle","bottom","elemTop","showDropArea","setSticky","ccDlg","topStyle","ele","gridElement","SummaryModelGenerator","footerTemplate","groupFooterTemplate","groupCaptionTemplate","columnSelector","detailTemplate","childGrid","isRowDragable","generateRows","buildSummaryData","getGeneratedRow","level","parentUid","summaryRow","raw","tmp","indents","getIndentByLevel","isDetailGridAlone","indentLength","getIndentCount","allowRowDragAndDrop","getGeneratedCell","getCellType","DetailFooterIntent","Indent","class","cells","isAggregateRow","cell","isDataCell","cellType","indent","sColumn","scolumn","opt","headerText","dummy","summaryRows","single","setTemplate","helper","a","disp","Summary","GroupSummaryModelGenerator","v","indx","GroupSummary","CaptionSummaryModelGenerator","initVal","reduce","prev","cur","isEmpty","CaptionSummary","Worksheets","Worksheet","isSummaryRowBelow","showGridLines","HyperLink","Grouping","FreezePane","MergeCell","MergeCells","mergeCell","inserted","mCell","isIntersecting","intersectingCell","Width","Height","base","CellStyle","numFmtId","backColor","fontName","fontSize","fontColor","italic","bold","underline","strikeThrough","wrapText","hAlign","vAlign","rotation","numberFormat","borders","Borders","isGlobalStyle","Font","sz","u","color","strike","CellXfs","Alignment","CellStyleXfs","CellStyles","xfId","NumFmt","formatCode","Border","mLine","mColor","lineStyle","right","Row","Rows","Image","Cell","Cells","Utils","bitConverterToInt32","bitConverterToInt16","bitConverterToUInt32","bitConverterToUInt16","bitConverterUintToInt32","bitConverterInt32ToUint","bitConverterInt32ToInt16","byteToString","str","byteIntToString","arrayCopy","source","sourceIndex","destination","destinationIndex","dataToCopy","mergeArray","arrayOne","arrayTwo","mergedArray","encodedString","chr1","chr2","chr3","encode1","encode2","encode3","encode4","keyStr","resultIndex","totalLength","output","DecompressorHuffmanTree","init","m_LengthTree","m_DistanceTree","prepareData","blCount","treeSize","MAX_BITLEN","treeFromData","tree","pointer","increment","revcode","subTree","treeLen","m_Tree","unpackSymbol","lookahead","symbol","peekBits","skipBits","subtree","bitlen","availableBits","ChecksumUpdate","checkSumUInt","DEF_CHECKSUM_BIT_OFFSET","DEF_CHECKSUM_ITERATIONSCOUNT","DEF_CHECKSUM_BASE","ChecksumGenerate","CompressedStreamReader","bNoWrap","defaultHuffmanDynamicTree","DEF_HEADER_METHOD_MASK","DEF_HEADER_INFO_MASK","DEF_HEADER_FLAGS_FCHECK","DEF_HEADER_FLAGS_FDICT","DEF_HEADER_FLAGS_FLEVEL","DEF_MAX_WINDOW_SIZE","DEF_HUFFMAN_REPEATE_MAX","DEF_HUFFMAN_END_BLOCK","DEF_HUFFMAN_LENGTH_MINIMUMCODE","DEF_HUFFMAN_LENGTH_MAXIMUMCODE","DEF_HUFFMAN_DISTANCE_MAXIMUMCODE","mCheckSum","tBuffer","mBufferedBits","mTempBuffer","mBlockBuffer","mbNoWrap","mWindowSize","mCurrentPosition","mDataLength","mbCanReadNextBlock","mbCanReadMoreData","mbCheckSumRead","DOMException","mInputStream","readZLibHeader","decodeBlockHeader","fillBuffer","bitMask","mBuffer","bytesRead","read","readInt16","pow","readBits","bFinalBlock","blockType","mbReadingUncompressed","skipToBoundary","readInt16Inverted","lengthComplement","mUncompressedDataLength","mCurrentLengthTree","mCurrentDistanceTree","lengthTree","distanceTree","trees","decodeDynamicHeader","bLastSymbol","iLengthsCount","iDistancesCount","iCodeLengthsCount","iResultingCodeLengthsCount","arrResultingCodeLengths","arrDecoderCodeLengths","iCurrentCode","treeInternalDecoder","bNeedBreak","miRepSymbol","DEF_HUFFMAN_DYNTREE_REPEAT_BITS","DEF_HUFFMAN_DYNTREE_REPEAT_MINIMUMS","tempArray","readHuffman","free","dataRead","readdata","numDataRead","numReadMore","iRepeatLength","DEF_HUFFMAN_REPEAT_LENGTH_BASE","iRepeatExtraBits","DEF_HUFFMAN_REPEAT_LENGTH_EXTENSION","extra","DEF_HUFFMAN_REPEAT_DISTANCE_BASE","iRepeatDistance","DEF_HUFFMAN_REPEAT_DISTANCE_EXTENSION","initialLength","inBlockPosition","oldDataLength","dataToRead","readPackedBytes","readInt32","DEF_REVERSE_BITS","Stream","inputStream","byteLength","readByte","toByteArray","CRC32TABLE","INT_SIZE","SHORT_SIZE","CentralDirectoryEndSignature","CentralDirSizeOffset","CentralHeaderSignature","BufferSize","ZipArchive","initCrc32Table","files","isMicrosoftBrowser","navigator","msSaveBlob","file","ZipArchiveItem","addDirectory","directoryName","getItem","base64String","zipByteArray","lCentralDirEndPosition","findValueFromEnd","iCentralDirSize","ReadInt32","lCentralDirPosition","readCentralDirectoryDataAndExtractItems","itemHelper","readCentralDirectoryData","readData","checkCrc","decompressData","unCompressedStream","save","fileName","zipArchive","saveInternal","saveAsBlob","blob","skipFileSave","zipData","dirLength","compressedObject","getCompressedData","constructZippedObject","isDirectory","writeZippedContent","reader_1","FileReader","onload","crc32Value","compressedData","compressedSize","uncompressedDataSize","compressionType","calculateCrc32Value","readAsArrayBuffer","crc32Table","compressor","currentIndex","nextIndex","subArray","zipParts","extFileAttr","writeHeader","localHeader","centralDir","writeCentralDirectory","zipHeader","getModifiedTime","getModifiedDate","localDirLen","cenDirLen","getArrayBuffer","shift","writeFooter","Blob","externalFileAttribute","directoryHeader","centralLength","localLength","dirEnd","bytes","modTime","modiDate","lStreamSize","arrBuffer","lLastPos","lCurrentPosition","uiCurValue","bFound","ReadInt16","ReadUInt16","ZipArchiveItemHelper","headerSignature","crc32","compressionMethod","originalSize","iFileNameLength","iExtraFieldLenth","iCommentLength","externalAttributes","localHeaderOffset","m_strItemName","readLocalHeader","readCompressedData","decompressDataOld","decompressedData","reader","compressedStream","iReadBytes","iNameLength","iExtraLength","headerVal","dataStream","iBytesLeft","iBytesToRead","itemName","decompressedStream","ValueFormatter","cultureName","intl","isServerRendered","getDateFormat","getNumberFormat","displayText","CsvHelper","separator","csvStr","formatter","globalStyles","Map","worksheets","parseWorksheet","parseRows","rows_1","parseRow","parseCell","csv","parseCellValue","error","has","dataUrl_1","URL","createObjectURL","dwlLink","createElementNS","download","href","event_1","revokeObjectURL","encodingType","encoding","encodeString","BlobHelper","parts","append","part","getBlob","AutoFilters","Workbook","saveType","currencyString","sharedStringCount","unitsProportions","hyperlinkStyle","currency","mSaveType","mArchive","sharedString","mFonts","mBorders","mStyles","printTitles","cellStyles","mNumFmt","mFills","mCellXfs","mCellStyleXfs","drawingCount","imageCount","cellStyle","parserCellStyle","cellStylesIn","tFormat","parserWorksheets","builtInProperties","BuiltInProperties","parserBuiltInProperties","csvHelper","jsonBuiltInProperties","author","comments","category","company","manager","subject","createdDate","modifiedDate","tags","jsonSheet","sheet","mergeCells","mergedCellsStyle","mHyperLinks","parserColumns","parserRows","freeze","parserFreezePanes","printTitle","parserPrintTitle","pageSetup","images","parserImages","autoFilters","parseFilters","hyperLinks","mergeOptions","fromJson","toJson","applyProperties","sourceJson","destJson","getCellName","getColumnName","strColumnName","iCurrentDigit","titleRowName","titleColName","printTitleName","fromRow","toRow","fromColumn","toColumn","freezePanes","leftCell","columnsLength","rowsLength","rowId","parserRow","insertMergedCellsStyle","rowToInsert","createCell","insertIndex","styleIndex","cellToInsert","refName","rowIndex","grouping","parseGrouping","parseCells","outlineLevel","isCollapsed","cellsLength","spanMin","spanMax","cellId","jsonCell","rowSpan","colSpan","hyperlink","hyperLink","getCellValueType","rId","formula","parseCellType","processMergeCells","spans","GetColors","colors","processColor","colorVal","rgbColors","processCellValue","cellValue","processedVal","startindex","processString","substring","subString","subSplit","subSplit_1","applyGlobalStyle","defStyleIndex","parserBorder","leftBorder","rightBorder","topBorder","bottomBorder","processCellStyle","switchNumberFormat","numFmt","cellStyleXfs","cellXfs","changeNumberFormats","regex","returnFormat","getNumberPattern","useGrouping","processNumFormatId","compareResult","compareStyle","size","isNewFont","toCompareStyle","font","isNewBorder","bStyle","isAllBorder","toCompareBorder","allBorderStyle","baseStyle","toOADate","value_1","sstvalue","imagesLength","image","parserImage","lastRow","lastColumn","horizontalFlip","verticalFlip","blobSaveType","blobData","proxyUrl","xlsxMatch","csvMatch","saveWorkbook","saveWorksheets","saveSharedString","saveStyles","saveApp","saveCore","saveContentType","saveTopLevelRelation","saveWorkbookRelation","workbookTemp","sheets","sheetName","printTitle_1","addToArchive","saveWorksheet","sheetBlob","sheetString","saveSheetView","colString","pixelsToColumnWidth","rowString","pixelsToRowHeight","_j","hLink","saveDrawings","saveSheetRelations","drawings","sheetDrawingString","imgId","pic","updatelastRowOffset","updatelastColumnOffSet","lastRowOffset","lastColOffset","imageData","convertBase64toImage","saveDrawingRelations","picture","iCurHeight","iCurRow","iCurOffset","iRowHeight","convertToPixels","iSpaceInCell","rowHiddenHeight","iCurWidth","iCurCol","iColWidth","ColumnWidthToPixels","colHiddenWidth","img","byteStr","atob","ArrayBuffer","drawingRelation","pixels","dDigitWidth","trunc","fileWidth","relStr","paneString","sstStart","si","updateCellXfsStyleXfs","styleTemp","saveNumberFormats","saveFonts","saveFills","saveBorders","saveCellStyleXfs","saveCellXfs","saveCellStyles","compareFontResult","fontId","fillId","borderId","applyAlignment","alignment","numFmtStyle_1","fontStyle","fillsStyle","bordersStyle","cellStyleString","cellXfsStyle","cellStyleXf","saveAlignment","cellXf","alignString","appString","coreString","toISOString","topRelation","wbRelation","contentTypeString","sheetsOverride","drawingIndex","xmlString","archiveItem","startCell","endCell","updatedMergedCellStyles","sCell","eCell","dateToTicks","ticksPerDay","daysToMonth365","daysToMonth366","isLeapYear","timeToTicks","totalSeconds","ticks","daysTo1899","doubleDateOffset","oaDateMinAsTicks","millisPerDay","AriaService","setOptions","props","setStateAndProperties","config","setExpand","expand","setSort","sort","setBusy","isBusy","busy","setGrabbed","isGrabbed","grabbed","setDropTarget","isTarget","dropeffect","datarole","selected","multiselectable","haspopup","colcount","rowcount","CLS_VERTICAL","CLS_ITEMS","CLS_ITEM","CLS_RTL","CLS_SEPARATOR","CLS_POPUPICON","CLS_POPUPDOWN","CLS_POPUPOPEN","CLS_TEMPLATE","CLS_DISABLE","CLS_POPUPTEXT","CLS_TBARTEXT","CLS_TBAROVERFLOW","CLS_POPOVERFLOW","CLS_TBARBTN","CLS_TBARNAV","CLS_TBARSCRLNAV","CLS_TBARRIGHT","CLS_TBARLEFT","CLS_TBARCENTER","CLS_TBARPOS","CLS_HSCROLLCNT","CLS_VSCROLLCNT","CLS_HSCROLLBAR","CLS_POPUPNAV","CLS_POPUPCLASS","CLS_POPUP","CLS_TBARBTNTEXT","CLS_TBARNAVACT","CLS_TBARIGNORE","CLS_POPPRI","CLS_HIDDEN","CLS_MULTIROW","CLS_MULTIROWPOS","CLS_MULTIROW_SEPARATOR","CLS_EXTENDABLE_SEPARATOR","CLS_EXTEANDABLE_TOOLBAR","CLS_EXTENDABLECLASS","CLS_EXTENDPOPUP","CLS_EXTENDEDPOPOPEN","Item","Toolbar","resizeContext","resize","orientationChangeContext","orientationChange","popupOpen","popupClose","btnItems","el","ej2_instances","tempId","destroyItems","lastElementChild","trgtEle","ctrlTem","popObj","activeEle","tbarAlign","tbarItemsCol","attrb","enableCollision","scrollStep","scrollModule","isVertical","isExtendedOpen","popupPriCount","allowKeyboard","wireKeyboardEvent","keyModule","keyActionHandler","docKeyDown","updateTabIndex","dataTabIndex","unwireKeyboardEvent","popCheck","overflowMode","keyCheck","destroyScroll","docEvent","clearProperty","tbarEle","tbarAlgEle","lefts","centers","rights","popEle","tbarItems","destroyMode","tempEle","popupRefresh","elementFocus","fChild","activeEleSwitch","clstElement","tbrNavChk","trgt","clst","keyHandling","navChk","scrollChk","nodes","rootEle","popAnimate","eleFocus","popupCheck","extendedPopup","focusFirstVisibleEle","focusLastVisibleEle","popFrstEle","ele_1","activeEleRemove","tbarScrollChk","disable","eleContains","sib","skipEle","elem","tbrItems","itemObj","isPopupElement","clsList","popupNav","popupClickHandler","tempItem","clickedArgs","getElementOffsetY","minHeight","renderControl","portals","ariaAttr","renderItems","renderLayout","renderOverflowMode","itemPositioning","childElementCount","checkPopupRefresh","itemsAlign","itemEleDom","innerItem","innerPos","renderSubComponent","tbarItemAlign","align","showAlwaysInPopup","changeOrientation","initScroll","innerItems","checkOverflow","scrollEle","itemWidthCal","marginTop","marginBottom","marginLeft","getScrollCntEle","trgClass","eleWidth","itemWidth","popNav","scrollNav","navEleWidth","toolbarAlign","priorityCheck","offsetWid","removePositioning","setOverflowAttributes","createPopupEle","eleItem","multiVar","extendVar","eleInlineItem","innerEle","innerNav","createPopupIcon","innerNavDom","checkPriority","removeProperty","createPopup","pushingPoppedEle","tbarObj","popupPri","eleHeight","sepHeight","poppedEle","nodeIndex","nodePri","tbResize","tbarElement","sepItem","extendEle","popupEle","popupInit","maxHeight","eleStyles","borderRightWidth","visibility","tbarPopupHandler","isOpen","toolEle","popupElePos","popIcon","scrollVal","scrollY","innerHeight","overflowHeight","tbEleData","popupOffset","documentElement","inEle","pre","checkoffset","popPriority","eleWid","sepCheck","itemCount","itemPopCount","checkClass","rVal","cls","mrgn","compuStyle","fstEleCheck","tbarEleMrgn","eleWid_1","minWidth","sepEle","popedEle","nav","navItem","tbarPriRef","sepPri","des","elWid","wid","ig","ignoreCount","priEleCnt","eleSep","ignoreCheck","eleSepWidth","prevSep","previousElementSibling","isVer","dimension","popupEleWidth","popupEleRefresh","ignoreEleFetch","ignoreEle","ignoreInx","tbarWidth","tbarItemsWid","elWidth","btnText","btn","eleSplice","inlineStyles","sepBeforePri_1","state_1","refreshPositioning","margin","tbarWid","popWid","itemEle","alignDiv","alignEle","leftAlign_1","ctrlTemplate","setAttr","keyVal","enableItems","isEnable","itemElement","getElementByIndex","addItems","extendedOpen","itemsDiv","itemsRerender","itemAgn","items_1","algIndex","removeItems","removeItemByIndex","eleIdx","indexAgn","clearToolbarTemplate","btnItem","templateRender","templateProp","isComponent","itemType","eleObj","regEx","tempStr","toolbarTemplateID","isStringTemplate","getDataTabindex","buttonRendering","dom","iconPos","textStr","btnTxt","prefixIcon","suffixIcon","btnObj","iconPosition","tempDom","tooltipText","itemClick","showTextOn","sTxt","curEle","multirowele","updateHideEleTabIndex","isElement","eleIndex","nextEle","templateEle","registeredTemplate","registeredTemplates","registeredItem","rootNodes","closestItem","portalItem","containerInfo","tEle","changedProb","popupPriCheck","booleanCheck","itemCol","hideItem","innerItems_1","CLS_ROOT","CLS_HSCROLLCON","CLS_NAVARROW","CLS_NAVRIGHTARROW","CLS_NAVLEFTARROW","CLS_HSCROLLNAV","CLS_HSCROLLNAVRIGHT","CLS_HSCROLLNAVLEFT","CLS_DEVICE","CLS_OVERLAY","CLS_RIGHTOVERLAY","CLS_LEFTOVERLAY","OVERLAY_MAXWID","HScroll","browser","browserCheck","customStep","ieCheck","uniqueId","scroll","touchHandler","swipeHandler","createOverlay","createNavIcon","setScrollState","scrollDiv","innerEle_1","overflowX","scrollItems","overlay","navEles","rightOverlayEle","clsRight","rightEle","leftEle","eventBinding","rightAttributes","clsLeft","leftAttributes","navEle","navLeftItem","onKeyPress","timeoutFun_1","keyTimeout","eleScrolling","keyTimer","onKeyUp","tabHoldHandler","repeatScroll","clickEventHandler","clearInterval","timeout","scrollDis","timeoutFun","setInterval","isContinuous","frameScrollRequest","swipeEle","velocity","distanceX","animate","step","sin","cancelAnimationFrame","requestAnimationFrame","scrollUpdating","scrollValue","scrollDirection","arrowDisabling","addDisable","removeDisable","arrowIcon","navLeftEle","navRightEle","leftOverlay","rightOverlay","disEle","Reorder","idx","headerDrop","enableAfterRender","drag","dragStart","dragStop","createReorderElement","keyPressHandler","chkDropPosition","srcElem","destElem","bool","lockColumn","isEqualNode","targetParentContainerIndex","chkDropAllCols","isFound","getHeaderCells","pop","findColParent","cnt","getColumnsModel","isNotStackedHeader","columnModel","subCols","dropElement","uId","destElemDiv","destElemUid","destColumn","sourceUid_1","colMatchIndex_1","destUid_1","moveColumns","newIndex","destElement","oldIdx","isActionPrevent","destIndex","reorderByColumn","preventRefresh","handler","arg1","arg2","getColParent","srcIdx","lockcolPositionCount","frozenColumns","getFrozenLeftCount","getFrozenRightColumnsCount","toColumnUid","cols_1","refreshColumnIndex","stackedHdrColumn","getStackedColumns","stackedCols","getAllStackedheaderParentColumns","flatColumns","parents","reorderSingleColumn","fromFName","toFName","reorderMultipleColumns","fromFNames","getColumnIndexByField","getColumnByIndex","moveTargetColumn","reorderSingleColumnByTarget","fieldName","reorderMultipleColumnByTarget","reorderColumns","fromCol","reorderColumnByIndex","reorderColumnByTargetIndex","isXaxis","setDisplay","upArrow","downArrow","getColumnHeaderByField","focusModule","onClick","isMacLike","platform","metaKey","currentInfo","visibleCols","getVisibleColumns","toCol","cloneElement","getHeaderTable","stopTimer","updateScrollPostion","updateArrowPosition","draggableType","cliRect","cliRectBaseRight","cliRectBaseLeft","scrollElem","timer","cliRectBase","ExportHelper","hideColumnInclude","parentDetails","totalRecordsCount","getFData","getGridRowModel","isExpand","hierarchyPrintMode","expandedRows","generateCells","processColumns","childGridLevel","generateCell","getColumnData","gridObj","columnPromise","fColumns","colData","getHeaders","isHideColumnInclude","colDepth","processHeaderCells","generateActualColumns","getConvertedWidth","actualColumns","getCellCount","appendGridCells","gridRows","StackedHeader","isIgnoreFirstCell","Header","option","columnIndexes","getColumnIndexesInView","len_1","HeaderIndent","checkAndExport","gridPool","globalResolve","failureHandler","childGridObj","createChildGrid","exportType","detailRowModule","getGridModel","isPrinting","parentID","parentPrimaryKeys","parentKeyField","parentKeyFieldValue","parentRowData","exportId","isExportGrid","getGridExportColumns","actualGridColumns","gridColumns","ExportValueFormatter","internationalization","returnFormattedValue","customFormat","formatCellValue","cFormat","ExcelExport","locator","book","workSheet","rowLength","expType","includeHiddenColumn","isCsvExport","isChild","isElementIdChanged","grpFooterTemplates","footerTemplates","aggIndex","totalAggregates","getService","isExporting","exportValueFormatter","grid","exportProperties","isMultipleExport","workbook","isCsv","isBlob","isBlb","Child","workbk","isMultiEx","hierarchyExportMode","gridObject","processRecords","exportingSuccess","blobPromise","gridInstance","allPromise_1","processInnerRecords","getCurrentViewRecords","query_1","isCountRequired","groupedColLength","blankRows","isExportPropertiesPresent","multipleExport","processExcelHeader","stringify","processGridExport","organisedRows","organiseRows","processExcelFooter","enableFilter","headerRowLen","headerRows","initialIndex","childRows","excelRows","theme","gColumns","headerRow","groupIndent","processHeaderContent","groupData","lazyloadData","acc","curr","lazQuery","contentModule","lazyLoadQuery","currentViewData","processRecordContent","capTemplate","returnType","currentViewRecords","excelRow","record","processRecordRows","processGroupedRows","GroupGuid","processAggregates","excelExportProperties","dataSource_1","cArgs","captionText","getCaptionThemeStyle","captionModelGen","groupCaptionSummaryRows","fillAggregates","childLevels","lIndex","hIndex","tCell","span","col_1","templateRowHeight","gCell","valueAccessor","arr","fkData","excelCellArgs","base64","setImage","getColumnStyle","parentRow","processDetailTemplate","returnVal","beforeDataBound","childGridCell","rowObj","templateData","detailCellIndex","detailIndent","columnHeader","processCell_1","currentCell","getHeaderThemeStyle","getRecordThemeStyle","excelHAlign","excelVAlign","excelRotation","excelBorders","excelNumberFormat","excelType","processRow","currentRow","excelDetailCells","detailCell","excelImage","excelExportProps","gRow","intent","rec","byGroup","summaryModel","aggregateModule","prepareSummaryInfo","groupSummaryModel","groupSummaryRows","sRows","customIndex","rows_2","columnsDetails","getAggreateValue","Sum","Average","Max","Min","Count","TrueCount","FalseCount","Custom","aggregateStyle","gridCellStyle","row_1","dummyOutlineLevel","dummyGrouping","txt","isVue3","JSON1","JSON2","attrname","columnIndex","headerRotation","degree","spannedCells","parseStyles","currentCellIndex","gridCell","DetailHeader","getIndex","spannedCell","headerTextAlign","excelHeaderCellArgs","updateThemeStyle","themestyle","caption","noRows","updatedCellIndex","footerRows","spannedCells_1","getCloneProperties","Print","isAsyncPrint","defered","isContentReady","actionBeginFunction","onEmpty","hierarchyPrint","isPrintGrid","contentReady","removeColGroup","printGridObj","printModule","print","renderPrintGrid","printGrid","getFrozenColumns","load","getInjectedModules","injectedModues","setInjectedModules","printgrid","selectedRows","contentDiv","headerDiv","waitingPop","printGridElement","printWind","outerHeight","outerWidth","moveTo","resizeTo","screen","availWidth","availHeight","groupCaption","colGroups","contentColGroups","footerColGroups","hideColGroup","printGridProp","WRAPPERCLASS","POPUPDIMENSION","DAY","HOVER","NAVIGATION","ICONANIMATION","FOCUS","LISTCLASS","HALFPOSITION","ANIMATIONDURATION","OFFSETVAL","EDITABLE","wrapperAttributes","TimePickerBase","createListItems","createdEl","timeFormat","interval","listItems","timeCollections","listTag","createList","TimeMaskPlaceholder","TimePicker","disableItemCollection","timeOptions","keyConfigure","down","up","angularTag","openPopupEventArgs","createInputElement","setTimeAllowEdit","validateInterval","validateDisable","checkErrorState","anchor","inputEleValue","getDateObject","clearIconState","setMinMax","initMin","initMax","popupCreation","valueIsDisable","resetState","initValue","defaultCulture","checkTimeFormat","checkInValue","scrollTo","checkAttributes","localeText","isNavigate","isPreventBlur","isTextSelected","valueWithMinutes","prevDate","updatedCssClassesValue","isNullOrEmpty","inputStyle","getCldrDateTimeFormat","cldrTime","dateFormat","cldrFormat","isInvalid","valueExpression","valueExp","setCurrentDate","cldrDateTimeString","getCultureTimeObject","ariaAttribute","enableElement","rippleFn","propertyList","generateList","listWrapper","addSelection","getPopupHeight","popupHeight","wireListEvents","rippleModel","containerStyle","setPopupWidth","unWireListEvents","modelTitleSpan","timePopupCloseHandler","createDateObj","updatedClassesValue","timeStyle","cssClassNew","cssClassOld","removeErrorClass","validateState","disableTimeIcon","disableElement","selectInputText","setSelectionRange","setCursorToEnd","getMeridianText","meridian","getCursorSelection","getActiveElement","inputWidth","setScrollTo","findScrollTop","listHeight","liHeight","initialTime","scrollTime","getText","getValue","cldrTimeFormat","cldrDateFormat","cldrDate","getCultureDateObject","dateToNumeric","getExactDateTime","validateMinMax","compareFormatChange","updatePlaceHolder","popupHandler","closePopup","mouseDownHandler","curPos","cursorDetails","focusSelection","isSeparator","keyHandler","updateValue","objToString","createMask","previousState","onMouseClick","animModel","documentClickHandler","mobileTimePopupWrap","disposeServerPopup","checkValueChange","isNavigation","valueProcess","prevValue","onMouseOver","currentLi","setHover","removeHover","onMouseLeave","minVal","maxVal","dateVal","strictOperation","maxValue","minValue","inputEventHandler","clearHandler","inputEvent","timeValue","raiseClearedEvent","setZIndex","getTextFormat","strArray","removeSelection","validateValue","newval","findNextElement","textVal","timeVal","collections","selectNextItem","validLiElement","elementValue","backward","elementIndex","isCheck","nextItem","isUpdate","hoveredItem","getHoverItem","setActiveClass","formatStr","timeParse","listBaseOptions","isIE","getProperty","popupAlignment","timePopupElement","formatValues","DATEPICKERROOT","DATETIMEWRAPPER","HOUR","MINUTE","SECOND","MILLISECOND","DATETIMEPOPUPWRAPPER","DateTimePicker","scrollInvoked","formatRegex","dateFormatString","dateTimeOptions","blurHandler","isTimePopupOpen","popupObject","dateTimeWrapper","keyboardHandler","unBindInputEvents","timeIcon","timekeyConfigure","cldrDateTimeFormat","bindInputEvents","validateMinMaxRange","isDateObject","disablePopupButton","checkValidState","isValidState","isDisable","renderTimeIcon","timeHandler","dateHandler","inputKeyAction","getCldrFormat","cldrDateTime","isDatePopupOpen","toggle","listCreation","dateObject","TimePopupFormat","startTime","endTime","listDetails","wireTimeListEvents","addTimeSelection","setTimeScrollPosition","openPopup","timeModal","timeKeyActionHandle","unWireTimeListEvents","modelWrapper","dateTimeCloseHandler","timeContent","setDimension","setTimeHover","removeTimeHover","nextElement","lineHeight","listContent","getFullDateTime","tempVal","combineDateTime","minutes","seconds","setTimeActiveClass","setTimeActiveDescendant","removeTimeSelection","getTimeHoverItem","calculateStartEnd","range","method","hours","milliseconds","tempStartValue","tempMin","formatCount","proxy","formatValueSpecifier","formattext","tempEndValue","tempMax","getUTCFullYear","dateTimeCloseEventCallback","maskedDateModule","getTimeActiveElement","status_1","millisecond","findNextTimeElement","dateTimeVal","listCount","timeElementValue","setTimeValue","timeKeyHandler","nextItemValue","getDateParser","getNumberParser","fromView","setCulture","FilterCellRenderer","getGui","tr","innerDIV","fltrData","isReactCompiler","isReactChild","parentInstObj","tempID","renderTemplates","filterBarTemplate","Element","clearIconElem","localeObj","appendHtml","showFilterBarOperator","operatorIconRender","templateWrite","innerHtml","operators","fbicon","filterModule","dropOptr","popupWidth","internalEvent","customOperators","spanElmt","FlMenuOptrUI","customFltrOperators","ddOpen","dropDownOpen","customFilterOperators","destroyDropDownList","renderOperatorUI","dlgConetntEle","dlgObj","dialogObj","optr","optrData","customOptr","dropDatasource","selectedValue","dropSelectedVal","optrDiv","optrInput","valInput","renderResponsiveDropDownList","selValue","selectedField","optrLen","getFlOperator","StringFilterUI","serLocator","processDataOperation","getAutoCompleteOptions","foreignColumnQuery","filteredData","getDistinct","enableCaseSensitivity","autoComplete","sortOrder","localizeText","acFocus","acComplete","acOpen","defObj","deffered","actObj","afterRenderFilterUI","struiObj","filterOptr","filterObj","actuiObj","filterValue","filterByColumn","getOptrInstance","mapObj","NumberFilterUI","keyEventHandler","numericTxtObj","numberuiObj","BooleanFilterUI","dropInstance","ddComplete","drpuiObj","DateFilterUI","dpOpen","fltrSettings","inputElem","datePickerObj","dateuiObj","FilterMenuRenderer","fltrObj","isDialogOpen","isMenuCheck","colTypes","flMuiObj","menuFilterBase","clearCustomFilter","clearBtnClick","applyCustomFilter","filterBtnClick","openDialog","renderDlgContent","closeDialog","getElementById","columnType","filterModel","mainDiv","dlgDiv","responsiveCnt","showCloseIcon","closeOnEscape","created","dialogCreated","buttonModel","isPrimary","animationSettings","renderResponsiveDialog","isModal","currentDialogCreatedColumn","renderFilterUI","ui","writeMethod","renderFlValueUI","menuOperator","valueDiv","fObj","instanceofFilterUI","valueInString","compElement","cBox","getAllData","dlgContentEle","flValue","targ","flOptrValue","fltrValue","eControl","closeResponsiveDialog","removeFilteredColsByField","getFilterUIInfo","renderCheckBoxMenu","updateModel","getAndSetChkElem","btnClick","getLocalizedLabel","dlg","sBox","CheckBoxFilter","isresetFocus","checkBoxBase","actionPrevent","clearFilter","fltrBtnHandler","ExcelFilterBase","childRefs","eventHandlers","focusedMenuItem","isExcel","getCMenuDS","string","datetime","dateonly","unwireExEvents","menuObj","destroyCMenu","removeDialog","createMenu","isCheckIcon","eleOptions","menu","ul","isResponsiveFilter","hdrele","getColumnHeaderByUid","colIsSort","isAsc","isDesc","ascName","descName","createMenuElem","ensureTextFilter","iconName","isSubMenu","wireExEvents","hoverHandler","clickExHandler","keyUp","menuItem","focusNextOrPrevElement","focusableElements","focusClassName","shiftKey","focusClass","excelSetFocus","altKey","from","prevElem","isCMenuOpen","contextKeyDownHandler","cmenu","focused","submenu","selectedMenu","menuOptions","selectHandler","onClose","beforeClose","preventClose","client","contextRect","getContextBounds","innerWidth","getCMenuYPosition","existingPredicate","isFilterBack","MouseEvent","contextWidth","targetPosition","leftPos","targetBorder","showDialog","filterLength","filteredColumns","renderDialogue","complexFieldName","overlayClick","dropDownList","templateField_1","createdDialog","rowResponsiveDlg","destroyTemplate","removeObjects","renderCustomFilter","dialog","dlgFields","fieldSet","displayName","checkBoxValue","colValue","fValue","fOperator","sValue","sOperator","checkBox","andRadio","firstOperator","firstValue","secondOperator","secondValue","mPredicate","fColl","arg","arg3","arg4","arg5","arg6","arg7","arg8","filterCollection","ejpredicate","actualPredicate","foreignKeyFilter","elementID","isFirst","fieldElement","xlfloptr","menuText","dropDownValueChange","removeHandlersFromComponent","includes","getSelectedText","renderRadioButton","td","radioDiv","frstpredicate","secndpredicate","renderMatchCase","orRadio","elements_1","elementId","isFilteredCol","fltrPredicates","columnObj","getExcelFilterData","valueInput","renderAutoComplete","renderNumericTextBox","renderDate","renderDateTime","predIndex","matchCaseDiv","matchCaseInput","checkbox","inputValue","isRtl","datePicker","dateTimePicker","completeAction","numericTextBox","colObj","acActionComplete","mapObject","columnvalue","ExcelFilter","excelFilterBase","isCustomFilter","Filter","contentRefresh","filterByMethod","cellText","nextFlMenuOpen","filterOperators","endsWith","equal","greaterThan","greaterThanOrEqual","lessThan","lessThanOrEqual","notEqual","startsWith","wildCard","isNull","notNull","like","fltrDlgDetails","skipNumberInput","skipStringInput","setFullScreenDialog","getObject","getLocalizedCustomOperators","fltrElem","rowRenderer","cellrender","addCellRenderer","generateRow","rowdrag","detail","gCells","case","showCustomFilter","responsiveDialogRenderer","isCustomDialog","showResponsiveDialog","renderResponsiveChangeAction","setFilterModel","updateFilterMsg","dropdownlist","filterBarElement","registerAdaptiveService","isFilter","getFrozenMode","RowDragHIcon","filterObjIndex","getFilteredColsIndexByField","prevFilterObject","arrayVal","isMenuNotEqual","currentFilterObject","actualFilterValue","actualOperator","i_1","isRemove","currentFilteringColumn","keyUpHandlerImmediate","refreshFilterValue","refreshFilterValueFn","initialEnd","initialLoad","columnPositionChanged","filterMenuClose","docClickHandler","refreshClearIcon","columnMenuFilter","filterIconClickHandler","targetText","mode","filterOperator","filterCell","getOperatorName","checkForSkipInput","filterStatusMsg","applyColumnFormat","predObj","checkAlreadyColFiltered","getFlvalue","setFormatForFlColumn","skipUid","flag","colLen","actualData","checkboxPrevFilterObject","checkboxFilterObject","iconClass","filterIconElement","updateFilterIcon","refreshFilterSettings","updateFilter","updateExternalMessage","refreshHeader","filterElement","getFilterBarElement","fltrIconElement","refreshFilter","clearFiltering","renderModule","colUid","f","filteredcols","fltrElement","filterDialogOpen","createOptions","hideSearchbox","filterHandler","localizedStrings","getLocaleConstants","allowCaseSensitive","parentTotalDataCount","totalDataRecordsCount","getFilteredRecords","parentCurrentViewDataCount","parentFilteredLocalRecords","isClearFilterBar","fCell","filteredColsUid","currentPred","currentFilterColumn","closeHeaderEle","dropDownListInput","processFilter","openMenuByField","clearIndicator","updateCrossIcon","getFormatFlValue","showFilterBarStatus","formater","isSkip","operatorSymbols","startTimer","onTimerTick","immediateModeDelay","templateRead","validateFilterValue","skipInput","getOperator","singleOp","multipleOp","numOptr","stringOperator","numberOperator","dateOperator","datetimeOperator","dateonlyOperator","booleanOperator","gClient","fClient","filterOperatorElement","inputId","datepickerEle","hasDialog","hasDialogClosed","refreshFilterIcon","addFilteredClass","renderCheckboxOnFilterMenu","SPINNER_CLASS","inputObject","ComboBox","wireEvent","preventBlur","onBlurHandler","targetFocus","onInput","onFilterUp","onFilterDown","pasteHandler","bindCommonEvent","customValue","valueMuteChange","setHiddenValue","dataItem","itemData","detachChangeEvent","getElementByText","getElementByValue","isExistItem","getItemData","clearIconHide","getAriaAttributes","ariaAttributes","hiddenElement","incrementalSearch","setSearchBox","searchBoxContainer","inlineSearch","getFocusElement","isDropDownClick","sortedData","activeItem","updatingincrementalindex","incrementalEndIndex","incrementalStartIndex","updateIncrementalInfo","updateIncrementalView","incrementalLiCollections","index_1","skeletonCount","removeFocus","fixedHead","selectedLiOffsetTop","removeFillSelection","checkCustomValue","getDataByValue","showSpinner","spinnerElement","disableIcon","hideSpinner","isHover","currentValue","getTextByValue","currentFillValue","updateSelectedItem","isAndroidAutoFill","setAutoFillSelection","isAndroid","currentPoints","getSelectionPoints","prevEnd","prevSelectPoints","curEnd","prevStart","curStart","focusItem","selection","substr","getValueByText","unWireEvent","unBindCommonEvent","selectCurrentItem","onChangeEvent","preventFocus","onFocus","previousValue_1","initial","updateCustomValueCallback","changeData","checkData","setReadOnly","comboProps","itemIndex","isEscape","isEscapeKey","RowRenderer","isSpan","rowTemplate","refreshRow","isChanged","refreshMergeCells","tempCells","cells_1","rowArgs","cellArgs","chekBoxEnable","selIndex","getSelectedRowIndexes","isDataRow","isCheckBoxSelection","checkAllRows","buildAttributeFromRow","cellRendererFact","_loop_2","isColumnSelected","cellRenderer","getCellRenderer","DetailExpand","CommandColumn","requireTemplateRef","isTemplate","thisRef_1","requestTypeAction","isRowSpanned","rowsObject","getRowsObject","prevRowCells","uid_1","prevRowCell","rowSpanRange","cellSpan","cellMerge","isSpanned","emptyColspan","getFrozenLeftColumnsCount","freezeCells","oldColspan","colspan","tabindex","rowHeight","eventArg_1","isSelectable","cellTemplate","thisRef_2","disableRowSelection","isDraggable","selectionSettings","persistSelection","primaryKey_1","pKey_1","SelectedRecords","partialSelectedRecords","disableSelectedRecords","lazyLoadCssClass","rowRenderingMode","allowTextWrap","textWrapSettings","wrapMode","vFTable","summarycell","lastSummaryCell","firstSummaryCell","thisRef","eventArg","selectionModule","isPartialSelection","selRowIndex","chkBox","isDrag","cellIdx","isDetail","classes","isAltRow","isCaptionRow","rowindex","dataUID","ariaSelected","RowModelGenerator","getInfiniteIndex","enableImmutableMode","ensureColumns","RowDragIcon","pid","tIndex","parentGid","enableAltRow","refreshForeignKeyRow","foreignKeyColumns","dummies","oIndex","refreshRows","CellType","RenderType","ToolbarItem","ResponsiveDialogAction","ResponsiveToolbarAction","CLS_VSCROLLBAR","CLS_VSCROLLCON","CLS_NAVUPARROW","CLS_NAVDOWNARROW","CLS_VSCROLLNAV","CLS_VSCROLLNAVUP","CLS_VSCROLLNAVDOWN","CLS_UPOVERLAY","CLS_DOWNOVERLAY","VScroll","scrollEventHandler","createOverlayElement","wheelEventHandler","scrollCnt","navs","overlays","downOverlayEle","clsDown","downEle","upEle","clsUp","navElement","navUpItem","ev","scrollDistance","deltaY","swipeElement","distanceY","addDisableCls","removeDisableCls","navUpEle","navDownEle","upOverlay","downOverlay","ErrorOption","EMAIL","DATE_ISO","DIGITS","PHONE","CREDITCARD","FormValidator","validated","errorRules","allowSubmit","required","infoElement","selectQuery","localyMessage","defaultMessages","email","dateIso","creditcard","digits","rangeLength","tel","equalTo","localeFunc","afterLocalization","inputElements","createHTML5Rules","FormValidator_1","addRules","removeRules","validate","validateRules","rules_1","name_1","clearForm","getInputElement","validClass","elements_2","inputParent","grandParent","getErrorElement","hideMessage","defRules","acceptedTypes","allRule","defRules_1","rule","defRule","annotationRule","ruleCon","ruleName","rulesList","ruleFirstName","ruleSecondName","minvalue","maxvalue","customMessage","message","annotationMessage","getErrorMessage","isCheckable","submitHandler","clearEvents","excludeKeys","which","hiddenType","validateHiddenType","vhPos","hPos","rules_2","errorMessage","errorRule","inputName","isValid","ignore","removeErrorRules","showMessage","createErrorElement","errorElement","optionalValidationStatus","refer","param","currentRule","checkValidator","ruleValue","formats","errorOption","Message","errorContainer","containerId","divElement","customPlacement","nextSibling","checkRequired","inputType","uNum","compareTo","Label","HeaderRender","frzIdx","notfrzIdx","isFirstCol","isReplaceDragEle","draggable","currentStateTarget","parentEle","visualElement","headercelldiv","getStackedHeaderColumnByHeaderText","colIndex","pointerEvents","drop","droppedElement","ariaService","setVisible","colPosRefresh","renderCustomToolbar","updateCustomResponsiveToolbar","renderPanel","isRendered","innerDiv","toggleStackClass","setPanel","renderTable","getPanel","createHeaderTable","setTable","initializeHeaderDrag","initializeHeaderDrop","headerPanel","panel","getTable","headerTable","getColGroup","colgroup","setColGroup","getRows","tHead","createTable","tableEle","tableName","cellspacing","findHeaderRow","createHeaderContent","thead","bodyCell","rowBody","updateColGroup","colHeader","indexes","len_2","enablePersistence","lockColsRendered","appendCells","isFirstObj","isLastCol","isMovable","isStackLastCol","lastCol","isLockColumn","getCellCnt","stackedLockColsCount","getStackedLockColsCount","isStackedLockColumn","getColSpan","isFirstCol_1","isLaststackedCol","getColumnIndexByUid","lockColsCount","displayVal","clen","getNormalizedColumnIndex","refreshUI","freezeReorder","appendContent","updateDefaultCursor","firstHeaderCell","stackedHdr","dragTarget","abort","droppableDestroy","droppable","accept","toolbarItems","toolbarLeft","toolbarItem","onclick","showResponsiveCustomSort","showResponsiveCustomFilter","resToolbar","HeaderCellRenderer","hTxtEle","sortEle","gui","chkAllBox","localizer","fltrMenuEle","prepareHeader","clean","hValueAccer","elementDesc","headerValueAccessor","checkAllWrap","buildAttributeFromCell","matchFlColumns","customAttributes","extendPrepareHeader","headerTempID","isReactChild_1","copied","clipMode","titleElem","matchFilteredColumns","StackedHeaderCellRenderer","toolTip","IndentCellRenderer","GroupCaptionCellRenderer","cellUid","fKeyValue","gTemplateValue","domSetter","gCaptionTemp","tempObj","getTemplate","tempValue_1","captionTemplate","GroupCaptionEmptyCellRenderer","ExpandCellRenderer","infiniteScrollSettings","enableCache","HeaderIndentCellRenderer","DetailHeaderIndentCellRenderer","DetailExpandCellRenderer","RowDragDropRenderer","nodeElement","RowDragDropHeaderRenderer","Render","emptyGrid","counter","renderer","headerRenderer","getRenderer","contentRenderer","Content","isLayoutRendered","emptyRow","refreshDataManager","flIcon","Columns","headerCell","allowSelection","searchString","pageSizes","checkAll","dataLength","prevPageMoving","lazyLoadRender","getGroupCache","refreshContentRows","resetTemplates","detailTemplateID","toolbarTemplate","guid","refreshComplete","maskRow","enableVirtualMaskRow","isCaptionCollapse","showMaskRow","virtualInfo","sentinelInfo","axis","isFActon","isNeedForeignAction","deffered_1","validateGroupRecords","dataManagerSuccess","dataManagerFailure","deferred","foreignKey","fbool","sendBulkRequest","dmSuccess","dmFailure","renderEmptyRow","isTrigger","spanCount","rowDropSettings","targetID","emptyRecordTemplate","emptyRecordTemplateID","getEmptyRecordTemplate","renderEmpty","dynamicColumnChange","updateColumnType","fmtr","validationRules","isColTypeDef","actionArgs","isInfiniteDelete","isInfiniteEnd","prevCurrentView","removeMaskRow","updatesOnInitialRender","agg","immutableModeRendering","alert","setRowElements","setRowObjects","preventAdjustColumns","setRowCount","setFirstFocusableTabIndex","dataRowCount","isEmptyCol","buildColumns","isAutoGen","iterateComplexColumns","childKeys","complexCols","instantiateRenderer","addRenderer","GroupCaption","GroupCaptionEmpty","Expand","group0","groupN","addWhere","groups","curDm","curFilter","newQuery","rPredicate","updateGroupInfo","current","untouched","uGroup","itemGroup","uGroupItem","l","context","data_1","customAggregate","CellRendererFactory","cellRenderMap","ServiceLocator","services","register","isAdaptiveUI","RendererFactory","rendererMap","rName","PageSettings","ColumnChooserSettings","Search","refreshSearch","onSearchComplete","actionCompleteFunc","cancelBeginEvent","ShowHide","colName","isShowHide","evtHandlers","batchChanges","resetColumnState","changedCol","showBy","getToggleFields","hideBy","finalized","getKeyBy","batchActionPrevent","changedStateColumns","closeEdit","groupModule","visibleRows","showHideArgs","currentViewCols","emptyVcRows","getSelectedRecords","clearSelection","colsInCurrentView","col1","col2","isModeChg","AggregateColumn","setPropertiesSilent","AggregateRow","Clipboard","copyContent","isSelect","keyDownHandler","selectedRowCellIndexes","getSelectedRowCellIndexes","copy","ctrlKey","clipBoardTextArea","editSettings","cellSelectionMode","x_1","scrollX","y_1","paste","cellIndexes","isAvail","cIdx","rIdx","getRowByIndex","getCellFromIndex","editModule","updateCell","selectCellsByRange","cellIndex","setCopyData","withHeader","getSelection","getDataRows","selectedIndexes","headerTextArray","getCopyData","leftCols","checkBoxSelection","colIndexes","getColumnHeaderByIndex","rowIndexes","isCell","splitKey","colIdx","queryCommandSupported","execCommand","removeAllRanges","rowCellIndxes","SortDescriptor","SortSettings","Predicate","InfiniteScrollSettings","FilterSettings","SelectionSettings","SearchSettings","RowDropSettings","TextWrapSettings","ResizeSettings","GroupSettings","EditSettings","LoadingIndicator","Grid","inViewIndexes","keyA","frozenRightCount","freezeColumnRefresh","rightcount","frozenLeftCount","leftcount","tablesCount","movableCount","movablecount","fixedcount","fixedCount","visibleFrozenLeft","visibleFrozenFixed","isPreparedFrozenColumns","visibleFrozenRight","visibleMovable","frozenLeftColumns","frozenRightColumns","movableColumns","fixedColumns","stackedLeft","stackedRight","stackedFixed","stackedMovable","stackedarrayLeft","stackedarrayRight","stackedarrayFixed","stackedarrayMovable","media","tableIndex","componentRefresh","isChangeDataSourceCall","mergedColumns","isVirtualAdaptive","vRows","vcRows","vGroupOffsets","rowUid","translateX","isAutoFitColumns","enableDeepCompare","islazyloadRequest","pageTemplateChange","isAutoGenerateColumns","mediaBindInstance","commandDelIndex","asyncTimeOut","enableLogger","needsID","Grid_1","Inject","mergePersistGridData","ignoreOnPersist","selectedRowIndex","scrollPosition","currentObject","settings","assign","pagerTemplate","persistData","setFrozenCount","enableInfiniteAggrgate","allowExcelExport","allowPdfExport","sortedColumns","isCommandColumn","allowAdding","allowDeleting","extendRequiredModules","contextMenuItems","showColumnChooser","isForeignKeyEnabled","initProperties","initializeServices","isInitial","mediaCol","allowServerDataBinding","ignoreCollectionWatch","isPersistSelection","defaultLocale","EmptyRecord","True","False","InvalidFilterMessage","GroupDropArea","UnGroup","UnGroupButton","GroupDisable","FilterbarTitle","EmptyDataSourceError","Add","Edit","Cancel","Update","Delete","Pdfexport","Excelexport","Wordexport","Csvexport","Columnchooser","Save","Items","EditOperationAlert","DeleteOperationAlert","SaveButton","OKButton","CancelButton","EditFormTitle","AddFormTitle","BatchSaveConfirm","BatchSaveLostChanges","ConfirmDelete","CancelEdit","ChooseColumns","ColumnMenu","SearchColumns","Matchs","FilterButton","ClearButton","StartsWith","NotStartsWith","Like","EndsWith","NotEndsWith","Contains","NotContains","IsNull","NotNull","IsEmpty","IsNotEmpty","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","ChooseDate","EnterValue","Copy","Group","Ungroup","GroupButton","UnGroupAria","GroupSeperator","UnGroupIcon","GroupedSortIcon","GroupedDrag","CheckBoxLabel","SelectAllCheckbox","SelectRow","autoFitAll","AutoFitAll","AutoFit","Export","FirstPage","LastPage","PreviousPage","NextPage","SortAscending","SortDescending","EditRecord","DeleteRecord","FilterMenu","SelectAll","AddCurrentSelection","Blanks","FilterTrue","FilterFalse","NoResult","ClearFilter","Clear","NumberFilter","TextFilter","DateFilter","DateTimeFilter","MatchCase","Between","CustomFilter","CustomFilterPlaceHolder","CustomFilterDatePlaceHolder","AND","OR","ShowRowsWhere","ToolbarMenuDialogARIA","FilterMenuDialogARIA","ExcelFilterDialogARIA","CheckBoxFilterDialogARIA","DialogEditARIA","ColumnMenuDialogARIA","CustomFilterDialogARIA","SortAtoZ","SortZtoA","SortByOldest","SortByNewest","SortSmallestToLargest","SortLargestToSmallest","Sort","FilterDescription","SortDescription","ColumnMenuDescription","GroupDescription","ColumnHeader","TemplateCell","CommandColumnAria","DialogEdit","ClipBoard","AscendingText","DescendingText","NoneText","Expanded","Collapsed","rightArrow","leftArrow","shiftDown","shiftUp","shiftRight","shiftLeft","ctrlHome","ctrlEnd","ctrlAltPageUp","ctrlAltPageDown","altPageUp","altPageDown","ctrlDownArrow","ctrlUpArrow","ctrlPlusA","ctrlPlusP","delete","f2","ctrlEnter","shiftEnter","space","ctrlPlusC","ctrlShiftPlusH","ctrlSpace","ctrlLeftArrow","ctrlRightArrow","searchModule","updateColumnModel","getMediaColumns","setInitialFrozenColumnIndex","checkLockColumns","processModel","gridRender","addListener","updateStackedFilter","refreshMaskRow","axisDirection","dialogElement","headerModule","dialogHolder","maskRowCount","maskTemplate","getShimmerTemplate","maskSpan","paddingRight","paddingLeft","contentHeight","maskTableHeight","contentRowCount","headerMaskTable","createEmptyMaskTable","contentMaskTable","maskRowContentScroll","createMaskTable","getContentMaskColumns","gridFooterContent","footerContentMaskTable","footerContent","translateMaskRow","maskElement","rowCount","gridContentScrollHeight","maskTable","transform","maskColgroup","createMaskRow","frzTd","valueX","maskTHead","maskTBody","rowCountElement","altRow","altNumber","rowsQuery","addEditRow","addEditRowIndex","applyMaskRow","addEditMaskRow","tfoot","maskTFoot","minScrollTop","maskCells","maskCell","displayAsCheckBoxCell","refColgroup","refColumns","localTD","displayAsCheckBox","addShimmerEffect","maskTables","refreshMaskRowColgroupWidth","gcol","getShowHideService","hideAtMedia","pushMediaColumn","updateFrozenColumnsWidth","matchMedia","mediaQueryUpdate","updateMediaColumns","mediaColumn","matches","invokedFromMedia","showHider","refreshMediaCol","checkboxColumn","checkboxMode","enableHover","removeMediaListener","removeListener","eventInitializer","hasGridChild","destroyDependentModules","toolTipObj","clipboardModule","enableBoxSelection","enableAutoFill","setCSSClass","oldCSSClass","checkCursor","requireRefresh","requireGridRefresh","freezeRefresh","childGridParent","parentInstance","isEllipsisTooltip","updateColumnObject","properties_1","isCancel","updateAutoFillPosition","rowTemplateFn","emptyRecordTemplateFn","detailTemplateFn","childGridObject","currentParent","currentParentInstance","currentChildObject","oldProperties","restoreAdjustColumns","extendedPropertyChange","maintainSelection","updateRTL","getToolbar","contextMenuModule","getContextMenu","columnMenuModule","getColumnMenu","updateResizeLines","updateGridLines","columnMenuItems","applyTextWrap","removeTextWrap","pending_1","getPrototypeOf","deepWatch","pKeyField","setRowData","gResult","names","scrollRefresh","isSelectedRowIndexUpdating","selectRow","setWidthToTable","enableVerticalRendering","fn_1","muteOnChange","getTablesCount","headerCells","stdHdrCell","isRecursion","updateLockableColumns","frozenName","frozenCount","leftrightColumnWidth","getFrozenLeftColumns","getFrozenRightColumns","isRefresh","inview","vLen","movable","isLeftRightFrozen","stackedHeader","individualColumn","stackedColumn","setColumnIndexesInView","getCurrentVisibleColumns","setGridHeaderContent","setGridContentTable","setGridContent","setGridHeaderTable","footerElement","getFooterContentTable","getPager","gridPager","setGridPager","getMovableRowByIndex","getFrozenRowByIndex","getRowElements","getFrozenRightRowByIndex","getRowInfo","getRowObjectFromUID","rowData","row_2","getMovableRows","getFrozenRightRows","getAllDataRows","includeAdd","hdrTbody","freezeRows","addMovableRows","dataRows","generateDataRows","fRows","mrows","includAdd","dRows","isCollapseStateEnabled","getMovableDataRows","getAllMovableDataRows","getFrozenDataRows","getAllFrozenDataRows","getFrozenRightDataRows","getAllFrozenRightDataRows","setCellValue","rowIdx","rowuID","pkName","fieldIdx","rowObjects","selectedRow","Idx","sRow","refreshTD","columnUid","isChildGrid","refreshReactTemplateTD","childIndent","isChildRow","rowsObj","refreshGroupCaptionFooterTemplate","dataUid","headerCellRenderer","findIndex","selectRowEle","fRowTr","setFrozenRowData","fTr","getMovableCellFromIndex","getFrozenRightCellFromIndex","getMovableColumnHeaderByIndex","getFrozenRightColumnHeaderByIndex","getFrozenLeftColumnHeaderByIndex","rowObject","getMovableRowsObject","getFrozenRightRowsObject","getUidByColumnField","getColumnFieldNames","columnNames","getRowTemplate","getDetailTemplate","getEditHeaderTemplate","editHeaderTemplateFn","getEditFooterTemplate","editFooterTemplateFn","getSelectedRows","selectedRecords","selectedRowIndexes","getSelectedColumnsUid","selectedColumnsIndexes","showColumns","hideColumns","getFrozenCount","getMovableColumnsCount","isAutoWidth","autoCol_1","difference_1","autoWidth_1","tWidth_1","gWidth","this_2","isPercentageWidthGrid","refreshSplitFrozenColumn","splitFrozenCount","getVisibleMovableCount","getMovableColumns","splitStackedColumns","pushStackedColumns","stackedcol","stockCol","pushallcol","text1","resetStackedColumns","headercol","gridcolumns","tempHead","firstcol","changedProperties","removeBorder","frozenLeftBorderColumns","lastVisibleLeftCol","frozenRightBorderColumns","firstVisibleRightCol","isVisibleColumns","getVisibleFrozenColumns","getVisibleFrozenColumnsCount","getVisibleFrozenCount","visibleFrozenColumns","goToPage","pageNo","sortColumn","isMultiSort","sortModule","changeDataSource","clearSorting","removeSortColumn","clearGridActions","isToggle","selectRows","selectCell","deleteRecord","fieldname","startEdit","addRecord","deleteRow","editCell","saveCell","updateRow","getBatchChanges","enableToolbarItems","recalcIndentWidth","indentWidth","headerCol","contentCol","perPixel","parentOffset","applyWidth","newWidth","toFixed","resetIndentWidth","tgridWidth","getTableWidth","setMinwidthBycalculation","refreshFrozenScrollbar","reorderModule","fromIndexes","rowDragAndDropModule","refreshDataSource","disableRowDD","contentTable","disValue","autoFitColumns","fieldNames","resizeModule","resizeSettings","tableWidth","percentageWidth","unit","widthUnit","defaultIndentWidth","indentWidthUnitFormat","headerIndentCol","contentIndentCol","setProperty","tableWidthUnitFormat","indentWidthUnitFormat_1","createColumnchooser","columnChooserModule","renderColumnChooser","valueFormatterService","gCols","sCols","_loop_3","sLen","this_3","isFromGroup","showGroupedColumn","initForeignColumn","rendererFactory","createGridPopUpElement","createTooltip","dataReady","gridLines","getTooltipStatus","headerDivTag","htable","ctable","mouseMoveHandler","prevElement","elemNames","innerElement","tag","myTableDiv","cssText","mySubDiv","myTable","myTr","mytd","onKeyPressed","mouseClickHandler","dblClickHandler","tapEvent","refreshFrozenPosition","dataBoundFunction","checkEdit","dataRow","filterClear","ariaOwns","keyPress","editFormValidate","persistedData","getLocalData","dataObj","isProtectedOnChange","keys_1","mergeColumns","storedColumn","storedColumns","_loop_4","localCol","tCol","this_4","presskey","stopImmediatePropagation","collapse","elementToFocus","focusContent","addOutline","injectedModules","refreshColumns","excelExport","exportGrids","gridIds","exportMultipleExcelGrids","excelExportModule","csvExport","pdfExport","pdfExportProperties","pdfDoc","exportMultiplePdfGrids","pdfExportModule","currentGridId","currentGridInstance","exportPromise","exportedGridResults","groupColumn","groupExpandAll","expandAll","groupCollapseAll","collapseAll","clearGrouping","ungroupColumn","openColumnChooser","detailCollapseAll","detailExpandAll","clearCellSelection","clearRowSelection","selectCells","rowCellIndexes","selectRowsByRange","isContextMenuOpen","ensureModuleInjected","propertyNames","loggerModule","applyBiggerTheme","getPreviousRowData","previousRowData","hideScroll","getRowIndexByPrimaryKey","isDetailRow","pKvalue","getUserAgent","getRowUid","prefix","getRowElementByUID","rowEle","cntRows","getHiddenColumns","calculatePageSizeByParentHeight","containerHeight","pagesize","nonContentHeight","getNoncontentHeight","getSummaryValues","summaryCol","summaryData","serverExcelExport","exportGrid","serverPdfExport","serverCsvExport","gridModel","include","sorted","setHeaderText","gridInput","submit","getFormat","isExpanded","updateRowValue","colpending","resetFilterDlgPosition","filterDlg","callBack","batchUpdate","processRowChanges","batchAsyncUpdate","processBulkRowChanges","dataToBeUpdated","loopstring","keyField","setNewData","oldValues","bulkRefresh","deleteRowElement","out_i_1","_loop_5","this_5","_loop_6","isRowExist","this_6","renderRowElement","modelData","addRowObject","updateVisibleExpandCollapseRows","getHeight","isInteger","getFrozenRightContent","getFrozenRightHeader","getMovableHeaderTbody","getMovableContentTbody","getFrozenHeaderTbody","getFrozenLeftContentTbody","getFrozenRightHeaderTbody","getFrozenRightContentTbody","isCustom","showCustomSort","showResponsiveCustomColumnChooser","showCustomColumnChooser","showAdaptiveFilterDialog","showAdaptiveSortDialog","isColVirtualization","gridCols","gridCols_1","CHECK","FRAME","INDETERMINATE","RIPPLECHECK","RIPPLEINDETERMINATE","CheckBox","isMouseClick","clickTriggered","validCheck","changeState","isInitialize","frameSpan","indeterminate","changeEventArgs","updateVueArrayModel","labelWrap","formElem","SPINICON","SPINUP","SPINDOWN","INCREMENT","DECREMENT","INTREGEXP","DECIMALSEPARATOR","COMPONENT","NUMERIC_FOCUS","HIDDENELEMENT","selectionTimeOut","NumericTextBox","isDynamicChange","numericOptions","isPrevFocused","decimalSeparator","intRegExp","isCalled","ejInstance","angularTagName","formEle","attributeName","nodeName","incrementTitle","decrementTitle","cultureInfo","initCultureInfo","initCultureFunc","updateHTMLAttrToElement","validateStep","updatePlaceholder","createWrapper","showSpinButton","spinBtnCreation","setElementWidth","changeValue","trimValue","decimals","roundNumber","hiddenInput","elementPrevValue","setNumber","stepValue","currencyCode","updatedCssClassValue","getNumericValidClassList","inputObj","updateHTMLAttrToWrapper","updateDataAttribute","pro","newClass","oldClass","numericClassName","updatedClassValue","numericStyle","spinDown","spinUp","wireSpinBtnEvents","MAX_VALUE","formattedValue","maximumFractionDigits","minimumFractionDigits","operation","isInteract","performAction","raiseChangeEvent","checkErrorClass","setElementValue","setSpinButton","mouseDownOnSpinner","mouseUpOnSpinner","touchMoveEvent","touchMoveOnSpinner","unwireSpinBtnEvents","parsedInput","isInteraction","beforeUpdate","numericRegex","preventHandler","iOS","currentPos","prevPos","valArray","numericObject","ignoreKeyCode","prevVal","lastIndexOf","cursorPosChanged","validateDecimalOnType","parseValue","numerictextboxObj","fireFox","parsedValue","localChange","nonZeroRegex","updatedValue","correctRounding","floatExp","floatValue","floatStep","valueCount","exec","stepCount","roundValue","precision","divide","updateCurrency","propVal","numberOfDecimals","getNumberOfDecimals","modifyText","formatNumber","serverDecimalSeparator","EXPREGEXP","decimalPart","result1","result2","cancelEvent","version","currentChar","isAlterNumPadDecimalChar","fractionRule","mouseWheel","delta","rawEvent","wheelDelta","focusEventArgs","formatValue_1","isIos","blurEventArgs","focusEvent","getElementData","mouseUpClick","timeOut","touchEvent","elementFromPoint","clientX","clientY","floatLabelTypeUpdate","decrement","attrArray","validateInputType","updateSpinButton","updateClearButton","propValue","CheckBoxFilterBase","isExecuteLocal","foreignKeyQuery","filterState","isCheckboxFilterTemplate","infiniteRenderMod","infiniteInitialLoad","infiniteSearchValChange","infinitePermenantLocalData","infiniteQueryExecutionPending","infiniteSkipCnt","infiniteScrollAppendDiff","prevInfiniteScrollDirection","infiniteLoadedElem","infiniteDataCount","infiniteLocalSelectAll","localInfiniteSelectAllClicked","localInfiniteSelectionInteracted","infiniteManualSelectMaintainPred","cBoxTrue","cBoxFalse","searchHandler","searchBoxKeyUp","fpred","foreignFilter","initalPredicate","searchBoxClick","sInput","refreshCheckboxes","updateSearchIcon","sIcon","updateDataSource","infiniteUnloadParentExistPred","searchBox","inputargs","spinner","dialogOpen","renderResponsiveFilter","dialogLabel","showMask","getListHeight","isBlanks","filterTemplateCol","filterItemTemplate","searchInput","check","ddlValue","caseSen","defaults","isNotEqual","itemsCnt","coll","infiniteFltrBtnHandler","generateNullValuePredicates","notifyFilterPrevEvent","addCurrSelection","existingPredicate_1","initiateFilter","isClearFilter","pred","dummyDefaults","unshift","infiniteSearchPred","firstVal","foreignQuery","parsed","predicte","addDistinct","filterChoiceCount","itemsCount","filterargs","emptyValPredicte","generatePredicate","fullData","makeInfiniteScrollRequest","filterEvent","processSearch","getPredicateFromCols","isGrid","customQuery","distincts","queryGenerate","filteredColumn","dataSuccess","infiniteScrollMouseKeyDownHandler","infiniteScrollHandler","infiniteScrollMouseKeyUpHandler","listDiv","rect","maskItemHeight","maskList","wrapperElem","removeMask","backgroundColor","borderStyle","borderWidth","borderColor","insertAdjacentHTML","maskLists","maskParent","infiniteRemoveElements","infiniteAppendElements","removeElem","appendElem","infiniteQuery","existQuery","runArray","executeQueryOperations","args1","processDataSource","updateResult","createFilterItems","result_1","res","selectAll","updateAllCBoxes","previousSibling","updateInfiniteManualSelectPred","updateIndeterminatenBtn","setFocus","predmdl","focusNextOrPrev","cBoxes","cBoxes_1","createCheckbox","dummyData","checkboxUid","nullCounter","selectAllValue","isColFiltered","predicateCheckBox","predicateElement","checkBoxListElem","reduceHeight","increaseHeight","isRndere","args_1","updateInfiniteUnLoadedCheckboxExistPred","getCheckedState","lastChild","selectAllParent","addCurrSelectionParent","updatePredArr","checkState","checkboxFilter","ejValue","lookup","currentFilterValue","foreignDataObj","operate","updateDateFilter","getCaseValue","CellRenderer","rowChkBox","evaluate","fData","CSPTemplate","literals_1","templateID","invokeFormatter","refreshCell","newTD","cloneAttributes","arialabelText","localeStr","fromFormatter","checkWrap","rowID","setAttributes","isCheckBoxType","colindex","InlineEditRender","addNew","newRowPosition","getEditElement","checkLastRow","tdElement","gLen","appendChildren","isCustomFormValidation","td_1","editTemplateID","BatchEditRender","columnObject","newTd","DialogEditRender","setLocaleObj","createDialog","createDialogHeader","responsiveDlgRenderer","renderResponsiveHeader","getDialogEditTemplateElement","primaryKeyValue","allowDragging","dialogClose","adaptiveDlgTarget","dialogEditTemplates","templateName","dialogTemp","tempDiv","setRules","formObj","checkColumnIsGrouped","dataCell","EditRender","getEditElements","convertWidget","focusElement","isFocus","preventScroll","tArgs","tempData","isInput","isIdentity","EditCellBase","removeEventHandler","BooleanEditCell","activeClasses","classNames","selectChkBox","chkState","editRow","cbChange","checkBoxChange","DropDownEditCell","isInline","dropDownClose","editCellDialogClose","ddCreated","dropdownCreated","ddBeforeOpen","dropdownBeforeOpen","ddActionComplete","dlgElement","NumericEditCell","instances","DefaultEditCell","Event","bubbles","cancelable","NormalEdit","currentVirtualData","allowEditOnDblClick","editComplete","editRowIndex","getEditArgs","editedData","isScroll","primaryKeys","primaryKeyValues","primaryKey","virtualRow","rObj","inlineEditHandler","prevData","argsCreator","begineditargs","editargs","applyFormValidation","edFail","validationArgs","editIdx","addIdx","addedRowIndex","isDlg","dlgWrapper","dlgForm","virtualData","getCurrentEditedData","eleLength","endEditArgs","destroyElements","destroyWidgets","destroyForm","editHandler","edSucc","editSuccess","editFailure","updateCurrentViewData","requestSuccess","stopEditStatus","isLastRow","blazorTemplate","dragRow","dragRowUid","dragRowObject_1","groupedColumn","comparer1","comparer2","dropRowObject","groupedRowReorder","checkboxOnly","getGroupAggregateTemplates","closeForm","cloneRow","originalRow","cloneFrozen","frozen","needRefresh","leftrightCells","closeEditArgs","isLazyLoad","defaultValue","inlineAddHandler","addArgs","dataLen","tmpRecord","contained","addElements","editElements","InlineEdit","BatchEdit","cellDetails","originalCell","cloneCell","editNext","preventSaveCell","initialRender","validationColObj","addBatchRow","prevEditedBatchCell","onBeforeCellFocused","onCellFocused","editNextValCell","dataBound","batchCancelFunction","batchCancel","restoreFocus","mouseDownElement","setCellIdx","isAddRow","validateFormObj","byClick","keyArgs","clickArgs","isContent","active","matrix","prevEditedBatchCellMatrix","crtRowIndex","byKey","actualIndex","isLastCellPrimaryKey","editCellFromIndex","isAdded","isInsert","isDirty","removeBatchElementChanges","refreshRowIdx","isInstertedRemoved","bulkDelete","bulkAddRow","batchSave","checkAllBox","removeSelectedData","beforeBatchSaveArgs","removeRowObjectFromUID","isTop","rowClone","deleteRowUid","beforeBatchDeleteArgs","uniqueid","dataObjects","visibleColumns","defaultData","getDefaultData","beforeBatchAddArgs","forgetPrevious","btmIdx","getBottomIndex","findNextEditableCell","isValOnly","validation","dValues","editCellExtend","getDataByIndex","getColIndex","getCellIdx","cellEditArgs","isColored","rowObj_1","newReactTd_1","newReactTd","setChanges","rowcell","insertedRows","isSingleInsert","escapeCellEdit","generateCellArgs","successCallBack","cloneEditedData","isForceSave","cellSaveArgs","isEscapeCellEdit","editedBatchCellMatrix","editedBatchCell","addCancelWhilePaging","ARROWLEFT","ARROWRIGHT","ARROWUP","ARROWDOWN","TAB","SHIFTTAB","END","HOME","MaskedDateTime","mask","defaultConstant","hiddenMask","validCharacters","isDayPart","isMonthPart","isYearPart","isHourPart","isMinutePart","isSecondsPart","isMilliSecondsPart","monthCharacter","periodCharacter","isHiddenMask","isComplete","navigated","isDeletion","isShortYear","isDeleteKey","isDateZero","isMonthZero","isYearZero","isLeadingZero","dayTypeCount","monthTypeCount","hourTypeCount","minuteTypeCount","secondTypeCount","dateformat","getCulturedFormat","maskDateValue","validCharacterCheck","maskInputHandler","maskKeydownHandler","maskPlaceholder","getCUltureMaskFormat","formatCheck","previousHiddenMask","setDynamicValue","objectString","validChar","navigateSelection","formatText","dateAlteration","isPersist","differenceCheck","previousVal","newVal","newDateValue","handleDeletion","monthString","getCulturedValue","monthValue","monthValue_1","previousMaxDate","currentMaxDate","yearValue","periodString","periodkeys","daysAbbreviated","dayKeyAbbreviated","daysWide","dayKeyWide","daysNarrow","dayKeyNarrow","monthAbbreviated","monthWide","zeroCheck","roundOff","hiddenChar","isbackward","formatIndex","valueText","isZero","resultValue","isSegment","isDecrement","incrementValue","newMonth","DatePickerEditCell","dateanddatetimerender","datePickerEditCell","datePickerClose","TemplateEditCell","updateEditObj","createAlertDlg","createConfirmDlg","updateColTypeObj","templteCell","editCellType","alertDObj","lastTr","refreshToolbar","showConfirmDialog","showDeleteConfirmDialog","endEditing","form1","form2","mFormObj","form3","frFormObj","getCurrentEditCellData","getValueFromType","destroyToolTip","dlgWidget","dlgOk","dlgCancel","alertClick","btnOptions","isForceCancel","executeAction","destroyEditComponents","eventDetails","preventBatch","onActionBegin","actionCompleteFunction","actions","inputs","addRow","restrictedRequestTypes","isRestrict","isDestroyVirtualForm","formObjects","virtualFormObj","curretRowFocus","focusableEditCells","commandColCell","preventObj","newRule","mRules","frRules","createFormObj","validationComplete","valErrorPlacement","getElemTable","isFHdr","resetElemPosition","tdRight","elemRight","offSet","customForm","validationForBottomRowPos","gcontent","isFHdrLastRow","isBatchModeLastRow","viewPortRowCount","fHearderRows","insertRow","inputClient","arrow","getEditCell","gHeight","rowsCount","rowsHeight","AddEditors","editors","ResponsiveDialogRenderer","sortedCols","sortPredicate","closeCustomDialog","refreshCustomFilterOkBtn","renderResponsiveContextMenu","renderCustomFilterDiv","customExFilterClose","refreshCustomFilterClearBtn","onActionCompleteFn","editComplate","isCustomDlgRender","customResponsiveDlg","closeBtn","saveBtn","backBtn","customExcelFilterParent","filterClearBtn","getHeaderTitle","columnMenuResponsiveContent","cDiv","customColumnDiv","renderResponsiveContent","isColumnChooser","filterParent","isColMenu","sortColumns","sortBtnParent","filteredCols","isSort","getSortedFieldsAndDirections","buttonInnerText","sortButtonClickHandler","divIcon","iconSpan","customFilterColumnClickHandler","columndiv","allowMultiSorting","isSortApplied","resetSortButtons","directionTxt","setSortedCols","getCurrentSortedFields","menuCol","filteredCol","closeCustomFilter","isRowResponsive","colDiv","isDialogClose","removeCustomDlgFilterEle","renderCustomFilterDialog","setTopToChildDialog","dialogEle","colMenu","outerDiv","customFilterDlg","getDialogOptions","beforeDialogClose","sortField","custom","getDialogName","getButtonText","titleDiv","dialogHdrBtnClickHandler","id_1","clearBtn","removeCustomFilterElement","custommenu","mainfilterdiv","destroyCustomFilterDialog","customEle","NumericContainer","pagerElement","renderNumericContainer","refreshNumericLinks","updateTotalPages","links","updateLinksHtml","refreshAriaAttrLabel","updateStyles","link","frag","createDocumentFragment","totalPages","auxiliaryClickHandler","numericContainer","renderFirstNPrev","renderPrevPagerSet","renderNextPagerSet","renderNextNLast","pagerContainer","prevPager","PP","nextPager","NP","previousPageNo","currentPageSet","isLastSet","numItems","isPagerResized","focusedItem","focusedorTarget","prevFocused","nextFocused","firstFocused","lastFocused","numItemFocused","npFocused","ppFocused","classList_1","isPageAvailable","customText","ppIndex","avgNumItems","NPIndex","updateFirstNPrevStyles","updatePrevPagerSetStyles","updateNextPagerSetStyles","updateNextNLastStyles","currentPageIndex","firstPage","firstPageDisabled","prevPage","prevPageDisabled","lastPage","lastPageDisabled","nextPage","nextPageDisabled","PagerMessage","pageNoMsgElem","pageCountMsgElem","regx","Pager","hasParent","pageRefresh","firstPagerFocus","enableExternalMessage","checkpagesizes","defaultConstants","currentPageInfo","totalItemsInfo","totalItemInfo","firstPageTooltip","lastPageTooltip","nextPageTooltip","previousPageTooltip","nextPagerTooltip","previousPagerTooltip","pagerDropDown","pagerAllDropDown","CurrentPageInfo","TotalItemsInfo","FirstPageTooltip","LastPageTooltip","NextPageTooltip","PreviousPageTooltip","NextPagerTooltip","PreviousPagerTooltip","PagerDropDown","PagerAllDropDown","All","Container","Information","ExternalMsg","Page","Of","Pages","containerModule","pagerMessageModule","initLocalization","isReactTemplate","renderFirstPrevDivForDevice","enablePagerMessage","renderNextLastDivForDevice","pagerdropdownModule","addAriaLabel","externalMessageModule","checkGoToPage","currentPageChanged","setDropDownValue","compile","resizePager","onFocusIn","onFocusOut","focusedTabIndexElement","getFocusedTabindexElement","dropDownPage","getDropDownPage","focusablePagerElements","getFocusablePagerElements","addFocus","focusedElement","getFocusedElement","setTabIndexForFocusLastElement","checkPagerHasFocus","changePagerFocus","setPagerFocus","setPagerContainerFocus","setPagerFocusForActiveElement","currentActivePage","offsetParent","changeFocusByShiftTab","changeFocusByTab","navigateToPageByEnterOrSpace","navigateToPageByKey","tabindexElements","currentItemPagerFocus","incrementNumber","decrementNumber","lastCell","checkFirstPagerFocus","selectedClass","getClass","classElement","getElementByClass","checkFocusInAdaptiveMode","changeFocusInAdaptiveMode","actionClass","pagingItem","mPrev","removeTabindexLastElements","tabIndexElements","dropDownPageHolder","currentClass","previousElements","targetChildrens","pagerElements","element_1","tabindexElement","addFocusClass","removeFocusClass","setPageSize","newPageNo","oldPageNo","enableQueryString","updateQueryString","getPagerTemplate","updatedUrl","getUpdatedURL","history","pushState","uri","calculateActualWidth","actualWidth","isStyleApplied","pagerWidth","hiddenNumItems","hideFrom","showFrom","bufferWidth","detailItems","totDetailWidth_1","averageDetailWidth","totalWidth","numericItemWidth","diff","numToHide","hideIndex","pagerDetailItemsWidth","detailtoHide","hiddenDetailItems","numToShow","lesserIndexItems","greaterIndexItems","showItems","showItem","pagerDropDownDiv","dropDownDiv","defaultTextDiv","pagerCons","pageSizesModule","pageSizesArray","convertValue","dropDownListObject","onChange","isPageSizeAll","beforeValueChange","pageSizeValue","pageSizeNum","isbeforeAll","ExternalMessage","externalMessage","isInitialRender","pagerDestroy","dropDownChanged","onSelect","addAriaAttr","renderReactPagerTemplate","numericContainerNew","numericContainerDiv","previousPage","keyActions","appendToElement","handlers","complete","updateLayout","inboundChange","Selection","checkBoxState","isMultiShiftRequest","isMultiCtrlRequest","isMultiCtrlRequestCell","enableSelectMultiTouch","clearRowCheck","selectRowCheck","selectedRowState","unSelectedRowState","chkAllCollec","isCheckedOnAdd","persistSelectedData","deSelectedData","isHdrSelectAllClicked","needColumnSelection","isCancelDeSelect","isPreventCellSelect","disableUI","isPersisted","cmdKeyPressed","cellselected","isAddRowsToSelection","initialRowSelection","isPrevRowSelection","isRowDragSelected","rmtHdrChkbxClicked","isCheckboxReset","autoFillRLselection","right_bottom","bottom_left","top_right","top_left","top_bottom","top_right_bottom","top_bottom_left","top_right_left","right_bottom_left","all_border","factory","initializeSelection","fDataUpdate","getRowObj","hidePopUp","isEditing","getCurrentBatchRecordChanges","currentRecords","selectedGroupedData","enableSimpleMultiRowSelection","addRowsToSelection","selectData","isRemoved","selectedIndex","isAvailable","prevSelectedData","isRowType","isRowSelected","activeTarget","can","rowSelectingCallBack","isCtrlPressed","isShiftPressed","previousRow","prevRowIndex","previousRowIndex","actualTarget","isHeaderCheckboxClicked","removed","clearSelectedRow","selectRowCallBack","clearRow","disableInteracted","updateRowSelection","selectRowIndex","isHeaderCheckBoxClicked","updateRowProps","getCollectionFromIndexes","selectedDataUpdate","selectedData","selectableRowIndex","isSingleSel","prevRow","isDragged","selectRowFn","selectableRowIndex_1","rowIndexes_1","isUnSelected","enableToggle","rowDeselect","addRemoveClassesForRow","reverse","clearRowCallBack","updatePersistCollection","updateCheckBoxes","getPkValue","pkField","ensureCheckboxFieldSelection","updatePersistDelete","pKey","isPresent","checkedTarget","setCheckAllState","getPrevIndexes","mouseButton","checkSelectAllClicked","clearColumnSelection","prevCIdxs","prevECIdxs","rowIndex_1","foreignKeyData_1","isRowClicked","getCheckAllStatus","updatePersistSelectedData","mRow","rowDeselectCallBack","frozenRightRow","cancl_1","isSingleDeSel","rowDeselectObj","rowInString","rowidx","rowidxex","dataTxt","isHeaderCheckBxClick","isCellType","selectedCell","isCellSelected","previousRowCell","getCellIndex","previousRowCellIndex","cellSelectingArgs","cncl","clearCell","updateCellSelection","selectedRowCellIndex","updateCellProps","stIndex","edIndex","getLastColIndex","addAttribute","cellSelectedArgs","cellSelectArgs","cellLen","addRowCellIndex","prvRowCellIndex","addCellsToSelection","hideAutoFill","cellIndexes_1","selectedCellIdx","cellDeselect","cancl","rowCellIndex","isRowAvail","selectedCells","getSelectedCellsElement","cLen","bdrElement","showHideBorders","gBRect","x1","y1","x2","y2","isCellDrag","startAFCell","endAFCell","selectLikeExcel","startDIndex","updateScrollPosition","timer1","timer2","isAutoFillSel","findNextCell","e_1","colInd","rowInd","siblingEles","nextEleInd","showAFBorders","selectLikeAutoFill","startDCellIndex","drawBorders","setFrozenBorders","bdrStr","strCell","fixedCells","firstRowIdx","firstColIdx","lastRowIdx","lastColIdx","preCell","nextCell","refreshFrozenBorders","frcBdrElement","fhBdrElement","frhBdrElement","createBorders","positionBorders","isLastCell","isFirstRow","isFirstCell","setBorders","stOff","endOff","parentOff","topOffSet","leftOffset","rightOffset","selectDirection","updateStartEndCells","mcBdrElement","mhBdrElement","applyBorders","applyBothFrozenBorders","drawAFBorders","bdrAFBottom","createAFBorders","positionAFBorders","bdrAFLeft","firstCellTop","firstCellLeft","parentRect","sTop","totalHeight","scrolloffSet","bdrAFRight","bdrAFTop","leftRemove","topRemove","hideAFBorders","createBeforeAutoFill","getAutoFillCells","startCellIdx","isApply","startrowIdx","endrowIdx","endCellIdx","rowLen","startCellIndex","trIdx","mUPTarget","closeRowCell","updateStartCellsIndex","rindex","isFrozenRow","isFrozenRight","clientRect","colWidth","enableDrag","postion","clearSelAfterRefresh","isInfiniteScroll","pkValue","rowsRemoved","addEventListener_checkbox","removeEventListener_checkbox","isMacOS","beforeFragAppend","getCheckAllBox","initPerisistSelection","prevColIndex","checkBoxSelectionChanged","gobj","chkField","proxy_1","refreshPersistSelection","setRowSelection","selectedStateKeys","unSelectedRowStateKeys","rowData_1","selectedData_1","getAvailableSelectedData","filteredSearchedSelectedData","editChkBox","onDataBound","totalRecords","checkSelectAllAction","cRenderer","editForm","getVirtualRowIndex","checkSelectAll","stateStr","updateSelectedRowIndexes","triggerChkChangeEvent","checkSelect","rIndex","rowCellSelectionHandler","moveIntoUncheckCollection","rowObj_2","rowObj_3","updateSelectedRowIndex","selectedVal","isAllSelected","isSelectAllRowCount","someDataSelected","checkToSelectAll","checkedLen","spanEle","getRecord","targetHeadCell","targetRowCell","isCheckBox","allowColumnSelection","popUpClickHandler","chkSelect","headerSelectionHandler","find","checkboxColumnIndexCheck","isJump","headerAction","thLen","getKeyColIndex","targetLabel","applyDownUpKey","applyRightLeftKey","shiftDownKey","applyShiftLeftRightKey","applyHomeEndKey","applyCtrlHomeEndKey","writeText","applySpaceSelection","allowNextRowEdit","innerColumn","getstackedColumns","lastIndex","firstIndex","applyUpDown","selectColumn","cIndex","selectColumnsByRange","innerColumnIndexes","detailIndentCell","dragdropIndentCell","selectedCol","isColSelected","isMultiColumns","clearColDependency","previousColumnIndex","updateColSelection","selectedArgs","updateColProps","selectColumns","getselectedCols","selectingArgs","selectColumnWithExisting","newCol","clearIndex","deselectedArgs","isCanceled","columnDeselect","selectedHeader","getSelectedColumnCells","isRowTemplate","seletedcells","selectionString","onDataBoundFunction","setCheckAllForEmptyGrid","actionCompleteHandler","resizeEndFn","isInfinitecroll","ColumnWidthService","wFlag","totalColumnsWidth","setColumnWidth","tWidth","difference","tmWidth","collection_1","isWidthUndefined","setUndefinedColumnWidth","cWidth","getWidth","elementWidth","fWidth","editTableCol","movableScrollbar","movableWidth","placeHolder","getHeightFromDirection","sibling","isWidUndefCount","isAutoResize","addScrolling","scrollType","containerOffset","contentOffset","parentElem","createScrollbar","scrollObj","ENTER","ESCAPE","FOCUSED","SEPARATOR","UPARROW","DOWNARROW","LEFTARROW","RIGHTARROW","CARET","ITEM","HIDE","TEMPLATE_PROPERTY","FieldSettings","MenuItem","MenuAnimationSettings","MenuBase","navIdx","isTapHold","showSubMenuOn","isMenu","ejInst","clonedElement","refEle","enableScrolling","hamburgerMode","createHeaderContainer","defaultOption","showItemOnClick","createJsonFromElement","removeChildElement","createItems","setBlankIconStyle","targetElems","menuHeaderClickHandler","cmenuHandler","delegateMoverHandler","moverHandler","delegateMouseDownHandler","delegateClickHandler","downarrow","uparrow","leftarrow","rightarrow","keyBoardHandler","closeMenu","actionName","actionNeeded","removeLIStateByClass","upDownKeyHandler","rightEnterKeyHandler","leftEscKeyHandler","cul","getUlByNavIdx","defaultIdx","fliIdx","fli","getLIByClass","getIdx","cli","navIdxLen","popups_1","allPopup","keyType","openMenu","aEle","sli","isCMenu","changedTouches","canOpen","ulIndex","isIterated","isMenuVisible","item_1","wrapper_1","beforeCloseArgs","popups","getPopups","ul_1","liElem_1","getLI","parentItem","observedCloseArgs","closeArgs","trgtliId","closedLi","trgtLi","popupId","unWireKeyboardEvent","toggleAnimation","showSubMenu","updateReactTemplate","trgtpopUp","submenus","afterCloseMenu","isMenusClosed","sli_1","cliIdx","item_2","removeStateWrapper","getMenuItemModel","getFields","lItem","elemId","uList","getField","hdata","hli","isNestedOrVertical","generatePopup","calculateIndentSize","hoverDelay","triggerBeforeOpen","targetEvent","copyObject","srcElement","liStyle","liIndent","textIndent","blankIconElem","menuIconElem","menuIconElemStyle","blankIconIndent","actionOnScroll","triggerOpen","spanElem","tempTitle","spanTitle","spanIcon","openHamburgerMenu","closeHamburgerMenu","observedHamburgerCloseArgs","callFit","menuType","observedOpenArgs","checkScrollOffset","animationOptions","easing","setPosition","eventArgs_1","collide","offWidth","blankIconList","iconLi","cssProp","iconCssProps","iconSize","offsetEle","offsetRight","px","toggleVisiblity","newTop","xCollision","isVisible","showIcon","hasField","itemNavigable","itemCreating","curData","liTrgt","ulId","hdrWrapper","isDifferentElem","isClosed","propName","cliWrapper","isInstLI","cliWrapperId","setLISelected","culIdx","classname","getItemIndex","isUniqueId","isText","setItem","newItem","setItems","newItems","skipHdr","updateItemsByNavIdx","updateItem","ul_2","ul_3","getChangedItemIndex","insertAfter","removeItem","wrapper1","ul1","lis","popStr","uls","targetSelctor","parent_2","isMenuOpen","pUlHeight","pElement","begin","progress","nIndex","isCallBack","skipItem","showHideItems","hideItems","ishide","validUl","iitems","insertItems","isAfter","menuitem","itemId","parentId","StackedColumnsDirective","inject","default","h","slots","$slots","updated","methods","getTag","StackedColumnsPlugin","install","Vue","StackedColumnDirective","StackedColumnPlugin","ColumnsDirective","ColumnsPlugin","ColumnDirective","ColumnPlugin","AggregateColumnsDirective","AggregateColumnsPlugin","AggregateColumnDirective","AggregateColumnPlugin","AggregatesDirective","AggregatesPlugin","AggregateDirective","AggregatePlugin","modelProps","testProp","watch","emitProbs","modelProps_1","props_1","GridComponent","mixins","emits","provide","ej2Instances","propKeys","models","hasChildDirective","hasInjectedModules","tagMapper","tagNameMapper","templateCollection","_trigger","bindProperties","_setProperties","templateNames","templateNames_1","tempName","elementCollection","elementCollection_1","__vue__","$destroy","referModels","vueInstance","$emit","eventProp","successHandler","propKey","$props","isLazyUpdate","GridPlugin","FocusStrategy","oneTime","swap","forget","skipFocus","focusByClick","firstHeaderCellClick","prevIndexes","refMatrix","refreshMatrix","isVirtualScroll","rowModelGen","focusCheck","setActive","enableHeaderFocus","generate","validator","passiveFocus","firstHeaderCellIndex","skipAction","onBlur","isGantt","setLastContentCellTabIndex","focusableGroupedItems","getFocusableGroupedItems","toolbarElement","focusableToolbarItems","getFocusableToolbarItems","force","beforeArgs","clearOutline","handleFilterNavigation","inputSelector","buttonSelector","allowToPaging","lastHeaderCellIndex","isValidBatchEditCell","findBatchEditCell","parentCell","skipOn","setLastContentCellActive","focusOutFromChildGrid","focusFirstHeaderCell","activeKey","bValue","prevBatchValue","outline","swapInfo","jump","toHeader","getNextCurrent","setActiveByKey","lastIdxCell","nextHeaderCellIndex","firstContentCellIndex","previousCellIndex","focusOutFromHeader","cellColIndex","cellCol","limitRow","tempCellIndex","cellIndexObtain","prevTempCellIndex","lastContentCellIndex","parentTable","parentGrid","parentRows","parentRowIndex","nextFocusCell","rowCells","th","inputTarget","focusVirtualElement","isKeyFocus","empty","setFocusedElement","getFocusInfo","cellElem","focusHeader","resetFocus","getInfo","focusedColumnUid","ContentFocus","HeaderFocus","cFocus","frozenRow","batchLen","matrixcs","hdrLen","handlerInstance","cellPosition","gridPosition","passiveHandler","filterfocus","restoreFocusWithAction","internalCellFocus","groupSortFocus","groupTextFocus","groupCancelFocus","toFrozen","focusEle","getFocusable","Matrix","allow","emptyTable","inValid","vector","columnsCount","rowColumns","currentColumnCount","indexesByKey","navigators","getCurrentFromAction","editNextRow","visibleIndex","shouldFocusChange","rN","cN","oRowIndex","oCellIndex","nextRowFocusValidate","previousRowFocusValidate","enterFrozen","headerSwap","isHeaderFocus","optionals","defaultLen","isData","isCellWidth","getGridSeletion","current1","checkFilterColumn","getHeaderType","SearchBox","searchFocus","cursor","searchBlur","rowDataBound","queryCellInfo","headerCellInfo","rowSelecting","rowSelected","rowDeselecting","rowDeselected","cellSelecting","cellSelected","cellDeselecting","cellDeselected","columnSelecting","columnSelected","columnDeselecting","columnDeselected","columnDragStart","columnDrag","columnDrop","rowDragStartHelper","rowDragStart","rowDrag","rowDrop","beforePrint","printComplete","detailDataBound","batchAdd","batchDelete","beforeBatchAdd","beforeBatchDelete","beforeBatchSave","beginEdit","cellEdit","cellSave","cellSaved","recordClick","beforeOpenColumnChooser","beforeOpenAdaptiveDialog","resizeStart","onResize","resizeStop","beforeCopy","beforePaste","beforeAutoFill","filterChoiceRequest","filterAfterOpen","filterBeforeOpen","filterSearchBegin","commandClick","exportGroupCaption","uiUpdate","inBoundModelChanged","modelChanged","colGroupRefresh","headerRefreshed","pageComplete","sortComplete","filterComplete","searchComplete","reorderComplete","rowDragAndDropComplete","groupComplete","ungroupComplete","groupAggregates","refreshFooterRenderer","refreshAggregateCell","refreshAggregates","rowSelectionComplete","cellSelectionComplete","beforeCellFocused","cellFocused","keyPressed","columnVisibilityChanged","columnWidthChanged","rowsAdded","columnDragStop","dataSourceModified","dblclick","toolbarRefresh","bulkSave","autoCol","tooltipDestroy","saveComplete","deleteComplete","dialogDestroy","crudAction","addDeleteAction","doubleTap","beforeExcelExport","excelQueryCellInfo","excelHeaderQueryCellInfo","exportDetailDataBound","exportDetailTemplate","freezeRender","columnMenuClick","columnMenuOpen","filterOpen","filterDialogCreated","initForeignKeyColumn","showEmptyGrid","columnDataStateChange","dataStateChange","dataSourceChanged","rtlUpdated","textWrapRefresh","recordAdded","cancelBegin","expandChildGrid","printGridInit","exportRowDataBound","exportDataBound","rowPositionChanged","columnChooserOpened","batchForm","beforeStartEdit","beforeBatchCancel","batchEditFormRendered","partialRefresh","beforeCustomFilterOpen","selectVirtualRow","columnsPrepared","cBoxFltrBegin","cBoxFltrComplete","fltrPrevent","beforeFltrcMenuOpen","valCustomPlacement","filterCboxValue","detailIndentCellInfo","virtaulCellFocus","virtualScrollEditActionBegin","virtualScrollEditSuccess","virtualScrollEditCancel","virtualScrollEdit","refreshVirtualCache","editReset","virtualScrollAddActionBegin","getVirtualData","refreshInfiniteModeBlocks","resetInfiniteBlocks","infinitePageQuery","infiniteShowHide","appendInfiniteContent","removeInfiniteRows","setInfiniteCache","infiniteEditHandler","initialCollapse","closeFilterDialog","columnChooserCancelBtnClick","getFilterBarOperator","resetColumns","excelAggregateQueryCellInfo","setGroupCache","lazyLoadScrollHandler","groupCollapse","beforeCheckboxRenderer","refreshHandlers","refreshFrozenColumns","setReorderDestinationElement","setFreezeSelection","beforeRefreshOnDataChange","immutableBatchCancel","checkScrollReset","preventFrozenScrollRefresh","nextCellIndex","refreshInfiniteCurrentViewData","filterDialogClose","renderResponsiveCmenu","filterCmenuSelect","customFilterClose","refreshExpandandCollapse","rowModeChange","enterKeyHandler","refreshVirtualMaxPage","setVirtualPageQuery","pagerRefresh","closeInline","resetVirtualFocus","beforeCheckboxRendererQuery","createVirtualValidationForm","validateVirtualForm","destroyChildGrid","stickyScrollComplete","captionActionComplete","refreshInfinitePersistSelection","refreshInfiniteEditrowindex","afterFilterColumnMenuClose","beforeCheckboxfilterRenderer","commandColumnDestroy","batchCnfrmDlgCancel","refreshResizePosition","renderResponsiveColumnChooserDiv","ContentRender","movableRows","freezeRowElements","isLoaded","infiniteCache","visibleFrozenRows","rightFreezeRows","isAddRows","isInfiniteFreeze","useGroupCache","tempFreezeRows","rafCallback","setRowsInLazyGroup","maxBlock","maxBlocks","rowElements","startIdx","generator","getModelGenerator","pressedKey","renderHorizontalScrollbar","scrollbarHeight","setScrollbarHeight","virtualTable","virtualTrack","createContentTable","initializeContentDrop","currentMovableRows","initialPageRecords","refFrag","refHdrfrag","hdrfrag","trElement","tbdy","isGroupFrozenHdr","checkCache","isFrozenLeft","templatetoclear","templates","updateVirtualCells","blockLoad","offsets","offsets_1","bSize","isEndBlock","blockIndexes","contentPanel","isVFFrozenOnly","bIndex","mhdrData","vgenerator","virtualFrozenHdrRefresh","refRowsObj","setInfiniteVisibleRows","getBlockSize","rowTemplateID","isTR","isVFreorder","ensureFrozenHeaderRender","ensureVirtualFrozenHeaderRender","headerCellHeight","cellHeight","boxSizing","maintainRows","initialGroupRows","getCurrentBlockInfiniteRecords","getReorderedRows","getReorderedFrozenRows","fhdrData","getInfiniteRows","getInfiniteMovableRows","infiniteCacheRows","infiniteRows","testRow","needFullRefresh","infiniteData","infiniteRowVisibility","contentrows","setDisplayNone","isFreeze","getHeaderColGroup","canSkip","getInfiniteRowIndex","firstRowIndex","oldKeys","newKeys","newRowObjs","oldIndexes","oldRowObjs","batchChangeKeys","getBatchEditedRecords","newIndexes","hasBatch","oldRowElements","trs","currentLen","oldIndex","refreshImmutableContent","isEqual","objectEqualityChecker","setRowValue","old","isDate","updateCellIndex","GroupModelGenerator","infiniteChildCount","renderInfiniteAgg","summaryModelGen","getGroupedRecords","ensureRowVisibility","parentid","childId","preCaption","captionRow","generateCaptionRow","getPreCaption","isRenderAggregate","rowCnt","aggregatesCount","setInfiniteRowVisibility","preCap","getCaptionRowCells","visibles","groupedLen","generateIndentCell","captionCells","cIndex_1","tmpFlag","childID","childGid","gSummary","fkValue","cRow","childRow","doesImplementInterface","checkFor","getUpdateUsingRaf","updateFunction","isExportColumns","updateColumnTypeForExportColumns","exportColumns","updatecloneRow","nRows","actualRows","getCollapsedRowsCount","total","dataRowCnt","agrCnt","gLevel","recursive","rCount","nLevel","iterateArrayOrObject","iterateExtend","getActualProperties","templateCompiler","validSelector","setStyleAndAttributes","copyAttr","literals","extend","exclude","moved","setColumnIndex","ind","prepareColumns","autoWidth","setCssInGridPopUp","popUp","popUpSpan","isBottomTail","getPopupLeftPosition","getPosition","parentsUntil","isID","getElementIndex","inArray","getActualPropFromColl","removeElement","getUid","calculateAggregate","Global","divNode","isComplexField","getComplexFieldID","getParsedFieldID","setComplexFieldID","isEditable","isOldRow","inst","clName","addRemoveActiveClasses","distinctStringValues","getFilterMenuPostion","elementVisible","dlgWidth","getZIndexCalcualtion","toogleCheckbox","setChecked","createCboxWithWrap","removeAddCboxClasses","refreshForeignData","getForeignData","lValue","fField","fdata","getDatePredicate","getColumnByForeignKeyValue","padZero","filterObject","datePredicate","nextDate","prevObj","nextObj","predicateSt","predicateEnd","dateOnlyString","isGroupAdaptive","object","splits","newCase","getCustomDateFormat","formatvalue","getExpandedState","printMode","getPrintGridModel","printGridModel","extendObjWithFn","deep","obj1","getPrototypesOfObj","cpy","cln","measureColumnDepth","checkDepth","indices","refreshFilteredColsUid","getColumnModelByFieldName","transformV","replacedTv","translateY","rootElement","getScrollWidth","resetColspanGroupCaption","gridWidth","groupCaptionRowLeftRightPos","applyStickyLeftRightPosition","newColspan","ispercentageWidth","percentageCol","undefinedWidthCol","resetRowIndex","rowElms","startRowIndex","compareChanges","newArray","o","isChildColumn","uids","pushuid","frozenDirection","addFixedColumnBorder","addStickyColumnPosition","getCellsByTableName","getCellByColAndRowIndex","setValidationRuels","patternRegex","mtch_1","'","addBiggerDialog","dialogs","performComplexDataOperation","returnObj","duplicateMap","setDisplayValue","addRemoveEventListener","isOn","evt_1","createEditElement","registerEventHandlers","evts","removeEventHandlers","clearReactVueTemplates","generateExpandPredicates","filterCols","getPredicates","findCellIndex","checkActiveMatrix","checkCellIndex","activeMatrix","currentCellIndexPass","capitalizeFirstLetter","CellMergeRender","targetCell_1","colSpanLen","colSpanRange","spanText","containsKey","backupMergeCells","setMergeCells","generteKey","fname","getMergeCells","mCells","merge","getIndexFromAllColumns","vColumnIndices","predefinedItems","isSearched","isRightToolbarMenu","gridID","preItems","isAdaptive","excludingItems","preItems_1","itemStr","localeName","isResponsiveToolbarMenuItems","responsiveToolbarItems","ColumnChooser","responsiveFilter","responsiveSort","responsiveBack","createToolbar","responsiveToolbarMenu","renderResponsiveToolbarpopup","isRight","addReactToolbarPortals","bindSearchEvents","searchElement","refreshToolbarItems","updateSearchBox","toolbarCreated","isNormal","clicked","toolbarClickHandler","viewStr","registerTemp","ID","renderResponsiveSearch","isRender","refreshResponsiveToolbarItems","isSearch","searchBoxObj","disableItems","hasData","getItemObject","toolbarItems_1","itemObject","gID","openResponsiveToolbarMenuPopup","newArgs","toolbarargs","tarElement","targetEle","toolbarMenuElement","getMenuItems","toolbarItems_2","getLocaleText","ResponsiveToolbarMenuItemClick","setFocusToolbarItem","getFocusToolbarElements","getFocusToolbarItems","keyPressedHandler","targetParent","reRenderToolbar","removeResponsiveSearch","rowSelectedFunction","rowDeSelectedFunction","isModelChanged","aria","sortedColumn","getSortedColsIndexByField","sCol","getSortColumnFromField","lastSortedCol","backupSettings","removeSortIcons","updateSortedCols","lastSortedCols","lastCols","restoreSettings","refreshSortSettings","addSortIcons","refreshSortIcons","gObj_1","initiateSort","showPopUp","enableSortMultiTouch","allowUnsort","updateAriaAttr","isValDiff","makechanges","resizeClassList","suppress","Resize","tapped","isDblClk","resizeProcess","findColumn","newarray","resizeColumn","footerTable","footerTextClone","contentDivTag","footerDivTag","headerTextClone","contentTextClone","columnIndexByField","indentWidthClone","detailsElement","contentText","footerText","wHeader","wFooter","wContent","columnbyindex","colMaxWidth","calcTableWidth","contentwidth","refreshResizefrzCols","adaptiveClass","offsetWidthValue","refreshHeight","setHandlerHeight","getResizeHandlers","touchResizeStart","callAutoFit","getTargetColumn","refreshColumnWidth","refreshStackedColumnWidth","parentElementWidth","appendHelper","getPointX","minMove","removeHelper","cancelResizeAction","resizeEnd","resizing","updateCursor","removeEvents","updateResizeEleHeight","getColData","mousemove","refreshResizeFixedCols","isAutoFitCol","width_1","frzHdrRefresh","width_2","columnsRight","refreshGroupCaptionRow","capRow","getParticularCol","w","setHelperHeight","finalColumns","getSubColumns","calulateColumnsWidth","finalColumns_1","updateHelper","subColumns","cTable","isFrozenColResized","doubleTapEvent","getStackedWidth","headerRows_1","calcPos","doc","ownerDocument","timeoutHandler","HIDE_CLEAR","TEXTBOX_FOCUS","TextBox","isHiddenInput","isForm","inputPreviousValue","textboxOptions","textboxWrapper","respectiveElement","prevOnChange","isBlank","multiline","textarea","autocomplete","apiAttributes","attrs_1","autoCompleteTxt","getInputValidClassList","initialValue","setInitialValue","inputClassName","resetForm","animationHandler","resetValue","textboxObj","interaction","resetInputHandler","addIcon","icons","extension","mimeType","getMimeType","downloadLink","hasDownloadAttribute","isPopupBlocked","onloadend","readAsDataURL","Encoding","includeBom","emitBOM","initBOM","getByteCount","chars","validateNullOrUndefined","byte","utf8Len","getByteCountInternal","codePoint","isHighSurrogate","codeUnit","toCodepoint","highCodeUnit","lowCodeUnit","charIndex","charCount","byteCount","isUtf8","charCode","high","low","RangeError","getBytesOfUtf8Encoding","getBytesOfUnicodeEncoding","getBytesOfAnsiEncoding","getString","out","byteCal","getStringOfUtf8Encoding","byteUnicode","getStringofUnicodeEncoding","bufview","charcode","uint16","byteUni","byte16","ContextMenu"],"mappings":"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","file":"js/chunk-70115930.c7ac7954.js","sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, ChildProperty, Event, append, compile } from '@syncfusion/ej2-base';\nimport { EventHandler, Touch, Browser, Animation as PopupAnimation, animationMode } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getUniqueID, formatUnit, select, selectAll } from '@syncfusion/ej2-base';\nimport { attributes, closest, removeClass, addClass, remove } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Complex, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Popup } from '../popup/popup';\nimport { calculatePosition } from '../common/position';\nimport { isCollide, fit } from '../common/collision';\nvar TOUCHEND_HIDE_DELAY = 1500;\nvar TAPHOLD_THRESHOLD = 500;\nvar SHOW_POINTER_TIP_GAP = 0;\nvar HIDE_POINTER_TIP_GAP = 8;\nvar MOUSE_TRAIL_GAP = 2;\nvar POINTER_ADJUST = 2;\nvar ROOT = 'e-tooltip';\nvar RTL = 'e-rtl';\nvar DEVICE = 'e-bigger';\nvar ICON = 'e-icons';\nvar CLOSE = 'e-tooltip-close';\nvar TOOLTIP_WRAP = 'e-tooltip-wrap';\nvar CONTENT = 'e-tip-content';\nvar ARROW_TIP = 'e-arrow-tip';\nvar ARROW_TIP_OUTER = 'e-arrow-tip-outer';\nvar ARROW_TIP_INNER = 'e-arrow-tip-inner';\nvar TIP_BOTTOM = 'e-tip-bottom';\nvar TIP_TOP = 'e-tip-top';\nvar TIP_LEFT = 'e-tip-left';\nvar TIP_RIGHT = 'e-tip-right';\nvar POPUP_ROOT = 'e-popup';\nvar POPUP_OPEN = 'e-popup-open';\nvar POPUP_CLOSE = 'e-popup-close';\nvar POPUP_LIB = 'e-lib';\nvar HIDE_POPUP = 'e-hidden';\nvar POPUP_CONTAINER = 'e-tooltip-popup-container';\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property({ effect: 'FadeIn', duration: 150, delay: 0 })\n ], Animation.prototype, \"open\", void 0);\n __decorate([\n Property({ effect: 'FadeOut', duration: 150, delay: 0 })\n ], Animation.prototype, \"close\", void 0);\n return Animation;\n}(ChildProperty));\nexport { Animation };\n/**\n * Represents the Tooltip component that displays a piece of information about the target element on mouse hover.\n * ```html\n *
Show Tooltip
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n /* eslint-enable */\n /**\n * Constructor for creating the Tooltip Component\n *\n * @param {TooltipModel} options - specifies the options for the constructor\n * @param {string| HTMLElement} element - specifies the element for the constructor\n *\n */\n function Tooltip(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.mouseMoveEvent = null;\n _this.mouseMoveTarget = null;\n _this.containerElement = null;\n _this.isBodyContainer = true;\n return _this;\n }\n Tooltip.prototype.initialize = function () {\n this.formatPosition();\n addClass([this.element], ROOT);\n };\n Tooltip.prototype.formatPosition = function () {\n var _a, _b;\n if (this.position.indexOf('Top') === 0 || this.position.indexOf('Bottom') === 0) {\n _a = this.position.split(/(?=[A-Z])/), this.tooltipPositionY = _a[0], this.tooltipPositionX = _a[1];\n }\n else {\n _b = this.position.split(/(?=[A-Z])/), this.tooltipPositionX = _b[0], this.tooltipPositionY = _b[1];\n }\n };\n Tooltip.prototype.renderArrow = function () {\n this.setTipClass(this.position);\n var tip = this.createElement('div', { className: ARROW_TIP + ' ' + this.tipClass });\n tip.appendChild(this.createElement('div', { className: ARROW_TIP_OUTER + ' ' + this.tipClass }));\n tip.appendChild(this.createElement('div', { className: ARROW_TIP_INNER + ' ' + this.tipClass }));\n this.tooltipEle.appendChild(tip);\n };\n Tooltip.prototype.setTipClass = function (position) {\n if (position.indexOf('Right') === 0) {\n this.tipClass = TIP_LEFT;\n }\n else if (position.indexOf('Bottom') === 0) {\n this.tipClass = TIP_TOP;\n }\n else if (position.indexOf('Left') === 0) {\n this.tipClass = TIP_RIGHT;\n }\n else {\n this.tipClass = TIP_BOTTOM;\n }\n };\n Tooltip.prototype.renderPopup = function (target) {\n var elePos = this.mouseTrail ? { top: 0, left: 0 } : this.getTooltipPosition(target);\n this.tooltipEle.classList.remove(POPUP_LIB);\n this.popupObj = new Popup(this.tooltipEle, {\n height: this.height,\n width: this.width,\n position: { X: elePos.left, Y: elePos.top },\n enableRtl: this.enableRtl,\n open: this.openPopupHandler.bind(this),\n close: this.closePopupHandler.bind(this)\n });\n };\n Tooltip.prototype.getScalingFactor = function (target) {\n if (!target) {\n return { x: 1, y: 1 };\n }\n var scalingFactors = { x: 1, y: 1 };\n var elementsWithTransform = target.closest('[style*=\"transform: scale\"]');\n if (elementsWithTransform && elementsWithTransform != this.tooltipEle && elementsWithTransform.contains(this.tooltipEle)) {\n var computedStyle = window.getComputedStyle(elementsWithTransform);\n var transformValue = computedStyle.getPropertyValue(\"transform\");\n var matrixValues = transformValue.match(/matrix\\(([^)]+)\\)/)[1].split(\",\").map(parseFloat);\n scalingFactors.x = matrixValues[0];\n scalingFactors.y = matrixValues[3];\n }\n return scalingFactors;\n };\n Tooltip.prototype.getTooltipPosition = function (target) {\n this.tooltipEle.style.display = 'block';\n var parentWithZoomStyle = this.element.closest('[style*=\"zoom\"]');\n if (parentWithZoomStyle) {\n if (!parentWithZoomStyle.contains(this.tooltipEle)) {\n this.tooltipEle.style.zoom = getComputedStyle(parentWithZoomStyle).zoom;\n }\n }\n var pos = calculatePosition(target, this.tooltipPositionX, this.tooltipPositionY, !this.isBodyContainer, this.isBodyContainer ? null : this.containerElement.getBoundingClientRect());\n var scalingFactors = this.getScalingFactor(target);\n var offsetPos = this.calculateTooltipOffset(this.position, scalingFactors.x, scalingFactors.y);\n var collisionPosition = this.calculateElementPosition(pos, offsetPos);\n var collisionLeft = collisionPosition[0];\n var collisionTop = collisionPosition[1];\n var elePos = this.collisionFlipFit(target, collisionLeft, collisionTop);\n if (!this.isBodyContainer) {\n elePos.top -= this.containerElement.getBoundingClientRect().top;\n }\n elePos.left = elePos.left / scalingFactors.x;\n elePos.top = elePos.top / scalingFactors.y;\n this.tooltipEle.style.display = '';\n return elePos;\n };\n Tooltip.prototype.windowResize = function () {\n this.reposition(this.findTarget());\n };\n Tooltip.prototype.reposition = function (target) {\n if (this.popupObj && target) {\n var elePos = this.getTooltipPosition(target);\n this.popupObj.position = { X: elePos.left, Y: elePos.top };\n this.popupObj.dataBind();\n }\n };\n Tooltip.prototype.openPopupHandler = function () {\n if (!this.mouseTrail && this.needTemplateReposition()) {\n this.reposition(this.findTarget());\n }\n this.trigger('afterOpen', this.tooltipEventArgs);\n this.tooltipEventArgs = null;\n };\n Tooltip.prototype.closePopupHandler = function () {\n if (this.isReact && !(this.opensOn === 'Click' && typeof (this.content) === 'function')) {\n this.clearTemplate(['content']);\n }\n this.clear();\n this.trigger('afterClose', this.tooltipEventArgs);\n this.tooltipEventArgs = null;\n };\n Tooltip.prototype.calculateTooltipOffset = function (position, xScalingFactor, yScalingFactor) {\n if (xScalingFactor === void 0) { xScalingFactor = 1; }\n if (yScalingFactor === void 0) { yScalingFactor = 1; }\n var pos = { top: 0, left: 0 };\n var tipWidth, tipHeight, tooltipEleWidth, tooltipEleHeight, arrowEle;\n var tipAdjust, tipHeightAdjust, tipWidthAdjust;\n if (xScalingFactor != 1 || yScalingFactor != 1) {\n var tooltipEleRect = this.tooltipEle.getBoundingClientRect();\n var arrowEleRect = void 0;\n tooltipEleWidth = Math.round(tooltipEleRect.width);\n tooltipEleHeight = Math.round(tooltipEleRect.height);\n arrowEle = select('.' + ARROW_TIP, this.tooltipEle);\n if (arrowEle) {\n arrowEleRect = arrowEle.getBoundingClientRect();\n }\n tipWidth = arrowEle ? Math.round(arrowEleRect.width) : 0;\n tipHeight = arrowEle ? Math.round(arrowEleRect.height) : 0;\n tipAdjust = (this.showTipPointer ? SHOW_POINTER_TIP_GAP : HIDE_POINTER_TIP_GAP);\n tipHeightAdjust = (tipHeight / 2) + POINTER_ADJUST + (tooltipEleHeight - (this.tooltipEle.clientHeight * yScalingFactor));\n tipWidthAdjust = (tipWidth / 2) + POINTER_ADJUST + (tooltipEleWidth - (this.tooltipEle.clientWidth * xScalingFactor));\n }\n else {\n tooltipEleWidth = this.tooltipEle.offsetWidth;\n tooltipEleHeight = this.tooltipEle.offsetHeight;\n arrowEle = select('.' + ARROW_TIP, this.tooltipEle);\n tipWidth = arrowEle ? arrowEle.offsetWidth : 0;\n tipHeight = arrowEle ? arrowEle.offsetHeight : 0;\n tipAdjust = (this.showTipPointer ? SHOW_POINTER_TIP_GAP : HIDE_POINTER_TIP_GAP);\n tipHeightAdjust = (tipHeight / 2) + POINTER_ADJUST + (this.tooltipEle.offsetHeight - this.tooltipEle.clientHeight);\n tipWidthAdjust = (tipWidth / 2) + POINTER_ADJUST + (this.tooltipEle.offsetWidth - this.tooltipEle.clientWidth);\n }\n if (this.mouseTrail) {\n tipAdjust += MOUSE_TRAIL_GAP;\n }\n switch (position) {\n case 'RightTop':\n pos.left += tipWidth + tipAdjust;\n pos.top -= tooltipEleHeight - tipHeightAdjust;\n break;\n case 'RightCenter':\n pos.left += tipWidth + tipAdjust;\n pos.top -= (tooltipEleHeight / 2);\n break;\n case 'RightBottom':\n pos.left += tipWidth + tipAdjust;\n pos.top -= (tipHeightAdjust);\n break;\n case 'BottomRight':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tipWidthAdjust);\n break;\n case 'BottomCenter':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth / 2);\n break;\n case 'BottomLeft':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth - tipWidthAdjust);\n break;\n case 'LeftBottom':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tipHeightAdjust);\n break;\n case 'LeftCenter':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tooltipEleHeight / 2);\n break;\n case 'LeftTop':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tooltipEleHeight - tipHeightAdjust);\n break;\n case 'TopLeft':\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth - tipWidthAdjust);\n break;\n case 'TopRight':\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tipWidthAdjust);\n break;\n default:\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth / 2);\n break;\n }\n pos.left += this.offsetX;\n pos.top += this.offsetY;\n return pos;\n };\n Tooltip.prototype.updateTipPosition = function (position) {\n var selEle = selectAll('.' + ARROW_TIP + ',.' + ARROW_TIP_OUTER + ',.' + ARROW_TIP_INNER, this.tooltipEle);\n var removeList = [TIP_BOTTOM, TIP_TOP, TIP_LEFT, TIP_RIGHT];\n removeClass(selEle, removeList);\n this.setTipClass(position);\n addClass(selEle, this.tipClass);\n };\n Tooltip.prototype.adjustArrow = function (target, position, tooltipPositionX, tooltipPositionY) {\n var arrowEle = select('.' + ARROW_TIP, this.tooltipEle);\n if (this.showTipPointer === false || arrowEle === null) {\n return;\n }\n this.updateTipPosition(position);\n var leftValue;\n var topValue;\n this.tooltipEle.style.display = 'block';\n var tooltipWidth = this.tooltipEle.clientWidth;\n var tooltipHeight = this.tooltipEle.clientHeight;\n var arrowInnerELe = select('.' + ARROW_TIP_INNER, this.tooltipEle);\n var tipWidth = arrowEle.offsetWidth;\n var tipHeight = arrowEle.offsetHeight;\n this.tooltipEle.style.display = '';\n if (this.tipClass === TIP_BOTTOM || this.tipClass === TIP_TOP) {\n if (this.tipClass === TIP_BOTTOM) {\n topValue = '99.9%';\n // Arrow icon aligned -2px height from ArrowOuterTip div\n arrowInnerELe.style.top = '-' + (tipHeight - 2) + 'px';\n }\n else {\n topValue = -(tipHeight - 1) + 'px';\n // Arrow icon aligned -6px height from ArrowOuterTip div\n arrowInnerELe.style.top = '-' + (tipHeight - 6) + 'px';\n }\n if (target) {\n var tipPosExclude = tooltipPositionX !== 'Center' || (tooltipWidth > target.offsetWidth) || this.mouseTrail;\n if ((tipPosExclude && tooltipPositionX === 'Left') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n leftValue = (tooltipWidth - tipWidth - POINTER_ADJUST) + 'px';\n }\n else if ((tipPosExclude && tooltipPositionX === 'Right') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n leftValue = POINTER_ADJUST + 'px';\n }\n else if ((tipPosExclude) && (this.tipPointerPosition === 'End' || this.tipPointerPosition === 'Start')) {\n leftValue = (this.tipPointerPosition === 'End') ? ((target.offsetWidth + ((this.tooltipEle.offsetWidth - target.offsetWidth) / 2)) - (tipWidth / 2)) - POINTER_ADJUST + 'px'\n : ((this.tooltipEle.offsetWidth - target.offsetWidth) / 2) - (tipWidth / 2) + POINTER_ADJUST + 'px';\n }\n else {\n leftValue = ((tooltipWidth / 2) - (tipWidth / 2)) + 'px';\n }\n }\n }\n else {\n if (this.tipClass === TIP_RIGHT) {\n leftValue = '99.9%';\n // Arrow icon aligned -2px left from ArrowOuterTip div\n arrowInnerELe.style.left = '-' + (tipWidth - 2) + 'px';\n }\n else {\n leftValue = -(tipWidth - 1) + 'px';\n // Arrow icon aligned -2px from ArrowOuterTip width\n arrowInnerELe.style.left = (-(tipWidth) + (tipWidth - 2)) + 'px';\n }\n var tipPosExclude = tooltipPositionY !== 'Center' || (tooltipHeight > target.offsetHeight) || this.mouseTrail;\n if ((tipPosExclude && tooltipPositionY === 'Top') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n topValue = (tooltipHeight - tipHeight - POINTER_ADJUST) + 'px';\n }\n else if ((tipPosExclude && tooltipPositionY === 'Bottom') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n topValue = POINTER_ADJUST + 'px';\n }\n else {\n topValue = ((tooltipHeight / 2) - (tipHeight / 2)) + 'px';\n }\n }\n arrowEle.style.top = topValue;\n arrowEle.style.left = leftValue;\n };\n Tooltip.prototype.renderContent = function (target) {\n var tooltipContent = select('.' + CONTENT, this.tooltipEle);\n if (this.cssClass) {\n addClass([this.tooltipEle], this.cssClass.split(' '));\n }\n if (target && !isNullOrUndefined(target.getAttribute('title'))) {\n target.setAttribute('data-content', target.getAttribute('title'));\n target.removeAttribute('title');\n }\n if (!isNullOrUndefined(this.content)) {\n tooltipContent.innerHTML = '';\n if (this.content instanceof HTMLElement) {\n tooltipContent.appendChild(this.content);\n }\n else if (typeof this.content === 'string') {\n if (this.enableHtmlSanitizer) {\n this.setProperties({ content: SanitizeHtmlHelper.sanitize(this.content) }, true);\n }\n if (this.enableHtmlParse) {\n var tempFunction = compile(this.content);\n var tempArr = tempFunction({}, this, 'content', this.element.id + 'content', undefined, undefined, tooltipContent, this.root);\n if (tempArr) {\n append(tempArr, tooltipContent);\n }\n }\n else {\n tooltipContent['textContent'] = this.content;\n }\n }\n else {\n var templateFunction = compile(this.content);\n var tempArr = templateFunction({}, this, 'content', this.element.id + 'content', undefined, undefined, tooltipContent);\n if (tempArr) {\n append(tempArr, tooltipContent);\n }\n this.renderReactTemplates();\n }\n }\n else {\n if (target && !isNullOrUndefined(target.getAttribute('data-content'))) {\n tooltipContent.innerHTML = target.getAttribute('data-content');\n }\n }\n };\n Tooltip.prototype.renderCloseIcon = function () {\n if (!this.isSticky) {\n var existingCloseIcon = this.tooltipEle.querySelector('.' + ICON + '.' + CLOSE);\n if (existingCloseIcon) {\n remove(existingCloseIcon);\n }\n return;\n }\n var tipClose = this.createElement('div', { className: ICON + ' ' + CLOSE });\n this.tooltipEle.appendChild(tipClose);\n EventHandler.add(tipClose, Browser.touchStartEvent, this.onStickyClose, this);\n };\n Tooltip.prototype.addDescribedBy = function (target, id) {\n var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n if (describedby.indexOf(id) < 0) {\n describedby.push(id);\n }\n attributes(target, { 'aria-describedby': describedby.join(' ').trim(), 'data-tooltip-id': id });\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 if (index !== -1) {\n describedby.splice(index, 1);\n }\n target.removeAttribute('data-tooltip-id');\n var orgdescribedby = describedby.join(' ').trim();\n if (orgdescribedby) {\n target.setAttribute('aria-describedby', orgdescribedby);\n }\n else {\n target.removeAttribute('aria-describedby');\n }\n };\n Tooltip.prototype.tapHoldHandler = function (evt) {\n clearTimeout(this.autoCloseTimer);\n this.targetHover(evt.originalEvent);\n };\n Tooltip.prototype.touchEndHandler = function (e) {\n var _this = this;\n if (this.isSticky) {\n return;\n }\n var close = function () {\n _this.close();\n };\n this.autoCloseTimer = setTimeout(close, TOUCHEND_HIDE_DELAY);\n };\n Tooltip.prototype.targetClick = function (e) {\n var target;\n if (this.target) {\n target = closest(e.target, this.target);\n }\n else {\n target = this.element;\n }\n if (isNullOrUndefined(target)) {\n return;\n }\n if (target.getAttribute('data-tooltip-id') === null) {\n this.targetHover(e);\n }\n else if (!this.isSticky) {\n this.hideTooltip(this.animation.close, e, target);\n }\n };\n Tooltip.prototype.targetHover = function (e) {\n var target;\n if (this.target) {\n target = closest(e.target, this.target);\n }\n else {\n target = this.element;\n }\n if (isNullOrUndefined(target) || (target.getAttribute('data-tooltip-id') !== null && this.closeDelay === 0)) {\n return;\n }\n var targetList = [].slice.call(selectAll('[data-tooltip-id= \"' + this.ctrlId + '_content\"]', document));\n for (var _i = 0, targetList_1 = targetList; _i < targetList_1.length; _i++) {\n var target_1 = targetList_1[_i];\n this.restoreElement(target_1);\n }\n this.showTooltip(target, this.animation.open, e);\n };\n Tooltip.prototype.mouseMoveBeforeOpen = function (e) {\n this.mouseMoveEvent = e;\n };\n Tooltip.prototype.mouseMoveBeforeRemove = function () {\n if (this.mouseMoveTarget) {\n EventHandler.remove(this.mouseMoveTarget, 'mousemove touchstart', this.mouseMoveBeforeOpen);\n }\n };\n Tooltip.prototype.showTooltip = function (target, showAnimation, e) {\n var _this = this;\n clearTimeout(this.showTimer);\n clearTimeout(this.hideTimer);\n if (this.openDelay && this.mouseTrail) {\n this.mouseMoveBeforeRemove();\n this.mouseMoveTarget = target;\n EventHandler.add(this.mouseMoveTarget, 'mousemove touchstart', this.mouseMoveBeforeOpen, this);\n }\n this.tooltipEventArgs = {\n type: e ? e.type : null, cancel: false, target: target, event: e ? e : null,\n element: this.tooltipEle, isInteracted: !isNullOrUndefined(e)\n };\n var observeCallback = function (beforeRenderArgs) {\n _this.beforeRenderCallback(beforeRenderArgs, target, e, showAnimation);\n };\n this.trigger('beforeRender', this.tooltipEventArgs, observeCallback.bind(this));\n };\n Tooltip.prototype.beforeRenderCallback = function (beforeRenderArgs, target, e, showAnimation) {\n if (beforeRenderArgs.cancel) {\n this.isHidden = true;\n this.clear();\n this.mouseMoveBeforeRemove();\n }\n else {\n this.isHidden = false;\n if (isNullOrUndefined(this.tooltipEle)) {\n this.ctrlId = this.element.getAttribute('id') ?\n getUniqueID(this.element.getAttribute('id')) : getUniqueID('tooltip');\n this.tooltipEle = this.createElement('div', {\n className: TOOLTIP_WRAP + ' ' + POPUP_ROOT + ' ' + POPUP_LIB, attrs: {\n role: 'tooltip', 'aria-hidden': 'false', 'id': this.ctrlId + '_content'\n }, styles: 'width:' +\n formatUnit(this.width) + ';height:' + formatUnit(this.height) + ';position:absolute;'\n });\n this.tooltipBeforeRender(target, this);\n this.tooltipAfterRender(target, e, showAnimation, this);\n }\n else {\n if (target) {\n this.adjustArrow(target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n this.addDescribedBy(target, this.ctrlId + '_content');\n this.renderContent(target);\n PopupAnimation.stop(this.tooltipEle);\n this.reposition(target);\n this.tooltipAfterRender(target, e, showAnimation, this);\n }\n }\n }\n };\n Tooltip.prototype.appendContainer = function (ctrlObj) {\n if (typeof this.container == 'string') {\n if (this.container === 'body') {\n this.containerElement = document.body;\n }\n else {\n this.isBodyContainer = false;\n this.containerElement = select(this.container, document);\n }\n }\n else if (this.container instanceof HTMLElement) {\n this.containerElement = this.container;\n this.isBodyContainer = this.containerElement.tagName === 'BODY';\n }\n if (!this.isBodyContainer) {\n addClass([this.containerElement], POPUP_CONTAINER);\n }\n this.containerElement.appendChild(ctrlObj.tooltipEle);\n };\n Tooltip.prototype.tooltipBeforeRender = function (target, ctrlObj) {\n if (target) {\n if (Browser.isDevice) {\n addClass([ctrlObj.tooltipEle], DEVICE);\n }\n if (ctrlObj.width !== 'auto') {\n ctrlObj.tooltipEle.style.maxWidth = formatUnit(ctrlObj.width);\n }\n ctrlObj.tooltipEle.appendChild(ctrlObj.createElement('div', { className: CONTENT }));\n this.appendContainer(ctrlObj);\n removeClass([ctrlObj.tooltipEle], HIDE_POPUP);\n ctrlObj.addDescribedBy(target, ctrlObj.ctrlId + '_content');\n ctrlObj.renderContent(target);\n addClass([ctrlObj.tooltipEle], POPUP_OPEN);\n if (ctrlObj.showTipPointer) {\n ctrlObj.renderArrow();\n }\n ctrlObj.renderCloseIcon();\n ctrlObj.renderPopup(target);\n ctrlObj.adjustArrow(target, ctrlObj.position, ctrlObj.tooltipPositionX, ctrlObj.tooltipPositionY);\n PopupAnimation.stop(ctrlObj.tooltipEle);\n ctrlObj.reposition(target);\n }\n };\n Tooltip.prototype.tooltipAfterRender = function (target, e, showAnimation, ctrlObj) {\n if (target) {\n removeClass([ctrlObj.tooltipEle], POPUP_OPEN);\n addClass([ctrlObj.tooltipEle], POPUP_CLOSE);\n ctrlObj.tooltipEventArgs = {\n type: e ? e.type : null, cancel: false, target: target, event: e ? e : null,\n element: ctrlObj.tooltipEle, isInteracted: !isNullOrUndefined(e)\n };\n if (ctrlObj.needTemplateReposition() && !ctrlObj.mouseTrail) {\n ctrlObj.tooltipEle.style.display = 'none';\n }\n var observeCallback = function (observedArgs) {\n ctrlObj.beforeOpenCallback(observedArgs, target, showAnimation, e);\n };\n ctrlObj.trigger('beforeOpen', ctrlObj.tooltipEventArgs, observeCallback.bind(ctrlObj));\n }\n };\n Tooltip.prototype.beforeOpenCallback = function (observedArgs, target, showAnimation, e) {\n var _this = this;\n if (observedArgs.cancel) {\n this.isHidden = true;\n this.clear();\n this.mouseMoveBeforeRemove();\n this.restoreElement(target);\n }\n else {\n var openAnimation_1 = {\n name: (showAnimation.effect === 'None' && animationMode === 'Enable') ? 'FadeIn' : this.animation.open.effect,\n duration: showAnimation.duration,\n delay: showAnimation.delay,\n timingFunction: 'easeOut'\n };\n if (showAnimation.effect === 'None') {\n openAnimation_1 = undefined;\n }\n if (this.openDelay > 0) {\n var show = function () {\n if (_this.mouseTrail) {\n EventHandler.add(target, 'mousemove touchstart mouseenter', _this.onMouseMove, _this);\n }\n if (_this.popupObj) {\n _this.popupObj.show(openAnimation_1, target);\n if (_this.mouseMoveEvent && _this.mouseTrail) {\n _this.onMouseMove(_this.mouseMoveEvent);\n }\n }\n };\n this.showTimer = setTimeout(show, this.openDelay);\n }\n else {\n if (this.popupObj) {\n this.popupObj.show(openAnimation_1, target);\n }\n }\n }\n if (e) {\n this.wireMouseEvents(e, target);\n }\n };\n Tooltip.prototype.needTemplateReposition = function () {\n // eslint-disable-next-line\n var tooltip = this;\n return !isNullOrUndefined(tooltip.viewContainerRef)\n && typeof tooltip.viewContainerRef !== 'string' || this.isReact;\n };\n Tooltip.prototype.checkCollision = function (target, x, y) {\n var elePos = {\n left: x, top: y, position: this.position,\n horizontal: this.tooltipPositionX, vertical: this.tooltipPositionY\n };\n var affectedPos = isCollide(this.tooltipEle, this.checkCollideTarget(), x, y);\n if (affectedPos.length > 0) {\n elePos.horizontal = affectedPos.indexOf('left') >= 0 ? 'Right' : affectedPos.indexOf('right') >= 0 ? 'Left' :\n this.tooltipPositionX;\n elePos.vertical = affectedPos.indexOf('top') >= 0 ? 'Bottom' : affectedPos.indexOf('bottom') >= 0 ? 'Top' :\n this.tooltipPositionY;\n }\n return elePos;\n };\n Tooltip.prototype.calculateElementPosition = function (pos, offsetPos) {\n return [this.isBodyContainer ? pos.left + offsetPos.left :\n (pos.left - this.containerElement.offsetLeft) + offsetPos.left + window.pageXOffset + this.containerElement.scrollLeft,\n this.isBodyContainer ? pos.top + offsetPos.top :\n (pos.top - this.containerElement.offsetTop) + offsetPos.top + window.pageYOffset + this.containerElement.scrollTop];\n };\n Tooltip.prototype.collisionFlipFit = function (target, x, y) {\n var elePos = this.checkCollision(target, x, y);\n var newpos = elePos.position;\n if (this.tooltipPositionY !== elePos.vertical) {\n newpos = ((this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n elePos.vertical + this.tooltipPositionX : this.tooltipPositionX + elePos.vertical);\n }\n if (this.tooltipPositionX !== elePos.horizontal) {\n if (newpos.indexOf('Left') === 0) {\n elePos.vertical = (newpos === 'LeftTop' || newpos === 'LeftCenter') ? 'Top' : 'Bottom';\n newpos = (elePos.vertical + 'Left');\n }\n if (newpos.indexOf('Right') === 0) {\n elePos.vertical = (newpos === 'RightTop' || newpos === 'RightCenter') ? 'Top' : 'Bottom';\n newpos = (elePos.vertical + 'Right');\n }\n elePos.horizontal = this.tooltipPositionX;\n }\n this.tooltipEventArgs = {\n type: null, cancel: false, target: target, event: null,\n element: this.tooltipEle, collidedPosition: newpos\n };\n this.trigger('beforeCollision', this.tooltipEventArgs);\n if (this.tooltipEventArgs.cancel) {\n newpos = this.position;\n }\n else {\n var elePosVertical = elePos.vertical;\n var elePosHorizontal = elePos.horizontal;\n if (elePos.position !== newpos) {\n var pos = calculatePosition(target, elePosHorizontal, elePosVertical, !this.isBodyContainer, this.isBodyContainer ? null : this.containerElement.getBoundingClientRect());\n this.adjustArrow(target, newpos, elePosHorizontal, elePosVertical);\n var scalingFactors = this.getScalingFactor(target);\n var offsetPos = this.calculateTooltipOffset(newpos, scalingFactors.x, scalingFactors.y);\n offsetPos.top -= this.getOffSetPosition('TopBottom', newpos, this.offsetY);\n offsetPos.left -= this.getOffSetPosition('RightLeft', newpos, this.offsetX);\n elePos.position = newpos;\n var elePosition = this.calculateElementPosition(pos, offsetPos);\n elePos.left = elePosition[0];\n elePos.top = elePosition[1];\n }\n else {\n this.adjustArrow(target, newpos, elePosHorizontal, elePosVertical);\n }\n }\n var eleOffset = { left: elePos.left, top: elePos.top };\n var position = fit(this.tooltipEle, this.checkCollideTarget(), { X: true, Y: this.windowCollision }, eleOffset);\n this.tooltipEle.style.display = 'block';\n var arrowEle = select('.' + ARROW_TIP, this.tooltipEle);\n if (this.showTipPointer && arrowEle != null && (newpos.indexOf('Bottom') === 0 || newpos.indexOf('Top') === 0)) {\n var arrowleft = parseInt(arrowEle.style.left, 10) - (position.left - elePos.left);\n if (arrowleft < 0) {\n arrowleft = 0;\n }\n else if ((arrowleft + arrowEle.offsetWidth) > this.tooltipEle.clientWidth) {\n arrowleft = this.tooltipEle.clientWidth - arrowEle.offsetWidth;\n }\n arrowEle.style.left = arrowleft.toString() + 'px';\n }\n this.tooltipEle.style.display = '';\n eleOffset.left = position.left;\n eleOffset.top = position.top;\n return eleOffset;\n };\n Tooltip.prototype.getOffSetPosition = function (positionString, newPos, offsetType) {\n return ((positionString.indexOf(this.position.split(/(?=[A-Z])/)[0]) !== -1) &&\n (positionString.indexOf(newPos.split(/(?=[A-Z])/)[0]) !== -1)) ? (2 * offsetType) : 0;\n };\n Tooltip.prototype.checkCollideTarget = function () {\n return !this.windowCollision && this.target ? this.element : null;\n };\n Tooltip.prototype.hideTooltip = function (hideAnimation, e, targetElement) {\n var _this = this;\n if (this.closeDelay > 0) {\n clearTimeout(this.hideTimer);\n clearTimeout(this.showTimer);\n var hide = function () {\n if (_this.closeDelay && _this.tooltipEle && _this.isTooltipOpen) {\n return;\n }\n _this.tooltipHide(hideAnimation, e, targetElement);\n };\n this.hideTimer = setTimeout(hide, this.closeDelay);\n }\n else {\n this.tooltipHide(hideAnimation, e, targetElement);\n }\n };\n Tooltip.prototype.tooltipHide = function (hideAnimation, e, targetElement) {\n var _this = this;\n var target;\n if (e) {\n target = this.target ? (targetElement || e.target) : this.element;\n }\n else {\n target = select('[data-tooltip-id= \"' + this.ctrlId + '_content\"]', document);\n }\n this.tooltipEventArgs = {\n type: e ? e.type : null, cancel: false, target: target, event: e ? e : null,\n element: this.tooltipEle, isInteracted: !isNullOrUndefined(e)\n };\n // this line commented for close the tooltip popup element even the target element destroyed in a page.\n //if (isNullOrUndefined(target)) { return; }\n this.trigger('beforeClose', this.tooltipEventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.mouseMoveBeforeRemove();\n _this.popupHide(hideAnimation, target, e);\n }\n else {\n _this.isHidden = false;\n }\n });\n this.tooltipEventArgs = null;\n };\n Tooltip.prototype.popupHide = function (hideAnimation, target, e) {\n if (target && e) {\n this.restoreElement(target);\n }\n this.isHidden = true;\n var closeAnimation = {\n name: (hideAnimation.effect === 'None' && animationMode === 'Enable') ? 'FadeOut' : this.animation.close.effect,\n duration: hideAnimation.duration,\n delay: hideAnimation.delay,\n timingFunction: 'easeIn'\n };\n if (hideAnimation.effect === 'None') {\n closeAnimation = undefined;\n }\n if (this.popupObj) {\n this.popupObj.hide(closeAnimation);\n }\n };\n Tooltip.prototype.restoreElement = function (target) {\n this.unwireMouseEvents(target);\n if (!isNullOrUndefined(target.getAttribute('data-content'))) {\n target.setAttribute('title', target.getAttribute('data-content'));\n target.removeAttribute('data-content');\n }\n this.removeDescribedBy(target);\n };\n Tooltip.prototype.clear = function () {\n var target = this.findTarget();\n if (target) {\n this.restoreElement(target);\n }\n if (this.tooltipEle) {\n removeClass([this.tooltipEle], POPUP_CLOSE);\n addClass([this.tooltipEle], POPUP_OPEN);\n }\n if (this.isHidden) {\n if (this.popupObj) {\n this.popupObj.destroy();\n }\n if (this.tooltipEle) {\n remove(this.tooltipEle);\n }\n this.tooltipEle = null;\n this.popupObj = null;\n }\n };\n Tooltip.prototype.tooltipHover = function (e) {\n if (this.tooltipEle) {\n this.isTooltipOpen = true;\n }\n };\n Tooltip.prototype.tooltipMouseOut = function (e) {\n this.isTooltipOpen = false;\n this.hideTooltip(this.animation.close, e, this.findTarget());\n };\n Tooltip.prototype.onMouseOut = function (e) {\n var enteredElement = e.relatedTarget;\n // don't close the tooltip only if it is tooltip content element\n if (enteredElement && !this.mouseTrail) {\n var checkForTooltipElement = closest(enteredElement, \".\" + TOOLTIP_WRAP + \".\" + POPUP_LIB + \".\" + POPUP_ROOT);\n if (checkForTooltipElement) {\n EventHandler.add(checkForTooltipElement, 'mouseleave', this.tooltipElementMouseOut, this);\n }\n else {\n this.hideTooltip(this.animation.close, e, this.findTarget());\n if (this.closeDelay === 0) {\n this.clear();\n }\n }\n }\n else {\n this.hideTooltip(this.animation.close, e, this.findTarget());\n this.clear();\n }\n };\n Tooltip.prototype.tooltipElementMouseOut = function (e) {\n this.hideTooltip(this.animation.close, e, this.findTarget());\n EventHandler.remove(this.element, 'mouseleave', this.tooltipElementMouseOut);\n this.clear();\n };\n Tooltip.prototype.onStickyClose = function (e) {\n this.close();\n };\n Tooltip.prototype.onMouseMove = function (event) {\n var eventPageX = 0;\n var eventPageY = 0;\n if (event.type.indexOf('touch') > -1) {\n event.preventDefault();\n eventPageX = event.touches[0].pageX;\n eventPageY = event.touches[0].pageY;\n }\n else {\n eventPageX = event.pageX;\n eventPageY = event.pageY;\n }\n PopupAnimation.stop(this.tooltipEle);\n removeClass([this.tooltipEle], POPUP_CLOSE);\n addClass([this.tooltipEle], POPUP_OPEN);\n this.adjustArrow(event.target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n var scalingFactors = this.getScalingFactor(event.target);\n var pos = this.calculateTooltipOffset(this.position, scalingFactors.x, scalingFactors.y);\n var x = eventPageX + pos.left + this.offsetX;\n var y = eventPageY + pos.top + this.offsetY;\n var elePos = this.checkCollision(event.target, x, y);\n if (this.tooltipPositionX !== elePos.horizontal || this.tooltipPositionY !== elePos.vertical) {\n var newpos = (this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n elePos.vertical + elePos.horizontal : elePos.horizontal + elePos.vertical;\n elePos.position = newpos;\n this.adjustArrow(event.target, elePos.position, elePos.horizontal, elePos.vertical);\n var colpos = this.calculateTooltipOffset(elePos.position, scalingFactors.x, scalingFactors.y);\n elePos.left = eventPageX + colpos.left - this.offsetX;\n elePos.top = eventPageY + colpos.top - this.offsetY;\n }\n this.tooltipEle.style.left = elePos.left + 'px';\n this.tooltipEle.style.top = elePos.top + 'px';\n };\n Tooltip.prototype.keyDown = function (event) {\n if (this.tooltipEle && event.keyCode === 27) {\n this.close();\n }\n };\n Tooltip.prototype.touchEnd = function (e) {\n if (this.tooltipEle && closest(e.target, '.' + ROOT) === null && !this.isSticky) {\n this.close();\n }\n };\n Tooltip.prototype.scrollHandler = function (e) {\n if (this.tooltipEle && !this.isSticky) {\n if (!(closest(e.target, \".\" + TOOLTIP_WRAP + \".\" + POPUP_LIB + \".\" + POPUP_ROOT))) {\n this.close();\n }\n }\n };\n /**\n * Core method that initializes the control rendering.\n *\n * @private\n * @returns {void}\n */\n Tooltip.prototype.render = function () {\n this.initialize();\n this.wireEvents(this.opensOn);\n this.renderComplete();\n };\n /**\n * Initializes the values of private members.\n *\n * @private\n * @returns {void}\n */\n Tooltip.prototype.preRender = function () {\n this.tipClass = TIP_BOTTOM;\n this.tooltipPositionX = 'Center';\n this.tooltipPositionY = 'Top';\n this.isHidden = true;\n };\n /**\n * Binding events to the Tooltip element.\n *\n * @hidden\n * @param {string} trigger - specify the trigger string to the function\n * @returns {void}\n *\n */\n Tooltip.prototype.wireEvents = function (trigger) {\n var triggerList = this.getTriggerList(trigger);\n for (var _i = 0, triggerList_1 = triggerList; _i < triggerList_1.length; _i++) {\n var opensOn = triggerList_1[_i];\n if (opensOn === 'Custom') {\n return;\n }\n if (opensOn === 'Focus') {\n this.wireFocusEvents();\n }\n if (opensOn === 'Click') {\n EventHandler.add(this.element, Browser.touchStartEvent, this.targetClick, this);\n }\n if (opensOn === 'Hover') {\n if (Browser.isDevice) {\n this.touchModule = new Touch(this.element, {\n tapHoldThreshold: TAPHOLD_THRESHOLD,\n tapHold: this.tapHoldHandler.bind(this)\n });\n EventHandler.add(this.element, Browser.touchEndEvent, this.touchEndHandler, this);\n }\n else {\n EventHandler.add(this.element, 'mouseover', this.targetHover, this);\n }\n }\n }\n EventHandler.add(document, 'touchend', this.touchEnd, this);\n EventHandler.add(document, 'scroll wheel', this.scrollHandler, this);\n EventHandler.add(window, 'resize', this.windowResize, this);\n EventHandler.add(document, 'keydown', this.keyDown, this);\n };\n Tooltip.prototype.getTriggerList = function (trigger) {\n if (trigger === 'Auto') {\n trigger = (Browser.isDevice) ? 'Hover' : 'Hover Focus';\n }\n return trigger.split(' ');\n };\n Tooltip.prototype.wireFocusEvents = function () {\n if (!isNullOrUndefined(this.target)) {\n var targetList = [].slice.call(selectAll(this.target, this.element));\n this.targetsList = targetList;\n for (var _i = 0, targetList_2 = targetList; _i < targetList_2.length; _i++) {\n var target = targetList_2[_i];\n EventHandler.add(target, 'focus', this.targetHover, this);\n }\n }\n else {\n EventHandler.add(this.element, 'focusin', this.targetHover, this);\n }\n };\n Tooltip.prototype.wireMouseEvents = function (e, target) {\n if (this.tooltipEle) {\n if (!this.isSticky) {\n if (e.type === 'focus') {\n EventHandler.add(target, 'blur', this.onMouseOut, this);\n }\n if (e.type === 'focusin') {\n EventHandler.add(target, 'focusout', this.onMouseOut, this);\n }\n if (e.type === 'mouseover') {\n EventHandler.add(target, 'mouseleave', this.onMouseOut, this);\n }\n if (this.closeDelay) {\n EventHandler.add(this.tooltipEle, 'mouseenter', this.tooltipHover, this);\n EventHandler.add(this.tooltipEle, 'mouseleave', this.tooltipMouseOut, this);\n }\n }\n if (this.mouseTrail && this.openDelay === 0) {\n EventHandler.add(target, 'mousemove touchstart mouseenter', this.onMouseMove, this);\n }\n }\n };\n /**\n * Unbinding events from the element on widget destroy.\n *\n * @hidden\n *\n * @param {string} trigger - specify the trigger string to the function\n * @returns {void}\n *\n */\n Tooltip.prototype.unwireEvents = function (trigger) {\n var triggerList = this.getTriggerList(trigger);\n for (var _i = 0, triggerList_2 = triggerList; _i < triggerList_2.length; _i++) {\n var opensOn = triggerList_2[_i];\n if (opensOn === 'Custom') {\n return;\n }\n if (opensOn === 'Focus') {\n this.unwireFocusEvents();\n }\n if (opensOn === 'Click') {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.targetClick);\n }\n if (opensOn === 'Hover') {\n if (Browser.isDevice) {\n if (this.touchModule) {\n this.touchModule.destroy();\n }\n EventHandler.remove(this.element, Browser.touchEndEvent, this.touchEndHandler);\n }\n else {\n EventHandler.remove(this.element, 'mouseover', this.targetHover);\n }\n }\n }\n EventHandler.remove(document, 'touchend', this.touchEnd);\n EventHandler.remove(document, 'scroll wheel', this.scrollHandler);\n EventHandler.remove(window, 'resize', this.windowResize);\n EventHandler.remove(document, 'keydown', this.keyDown);\n };\n Tooltip.prototype.unwireFocusEvents = function () {\n if (!isNullOrUndefined(this.target)) {\n var targetList = [].slice.call(selectAll(this.target, this.element));\n for (var _i = 0, targetList_3 = targetList; _i < targetList_3.length; _i++) {\n var target = targetList_3[_i];\n EventHandler.remove(target, 'focus', this.targetHover);\n }\n }\n else {\n EventHandler.remove(this.element, 'focusin', this.targetHover);\n }\n };\n Tooltip.prototype.unwireMouseEvents = function (target) {\n if (!this.isSticky) {\n var triggerList = this.getTriggerList(this.opensOn);\n for (var _i = 0, triggerList_3 = triggerList; _i < triggerList_3.length; _i++) {\n var opensOn = triggerList_3[_i];\n if (opensOn === 'Focus') {\n EventHandler.remove(target, 'blur', this.onMouseOut);\n EventHandler.remove(target, 'focusout', this.onMouseOut);\n }\n if (opensOn === 'Hover' && !Browser.isDevice) {\n EventHandler.remove(target, 'mouseleave', this.onMouseOut);\n }\n }\n if (this.closeDelay) {\n EventHandler.remove(target, 'mouseenter', this.tooltipHover);\n EventHandler.remove(target, 'mouseleave', this.tooltipMouseOut);\n }\n }\n if (this.mouseTrail) {\n EventHandler.remove(target, 'mousemove touchstart mouseenter', this.onMouseMove);\n }\n };\n Tooltip.prototype.findTarget = function () {\n var target = select('[data-tooltip-id= \"' + this.ctrlId + '_content\"]', document);\n return target;\n };\n /**\n * Core method to return the component name.\n *\n * @private\n *\n * @returns {string} - this method returns module name.\n */\n Tooltip.prototype.getModuleName = function () {\n return 'tooltip';\n };\n /**\n * Returns the properties to be maintained in the persisted state.\n *\n * @private\n *\n * @returns {string} - this method returns persisted data.\n */\n Tooltip.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Called internally, if any of the property value changed.\n *\n * @private\n *\n * @param {TooltipModel} newProp - this param gives new property values to the method\n * @param {TooltipModel} oldProp - this param gives old property values to the method\n * @returns {void}\n *\n */\n Tooltip.prototype.onPropertyChanged = function (newProp, oldProp) {\n var targetElement = this.findTarget();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n if (this.tooltipEle && targetElement) {\n this.tooltipEle.style.width = this.tooltipEle.style.maxWidth = formatUnit(newProp.width);\n this.reposition(targetElement);\n }\n break;\n case 'height':\n if (this.tooltipEle && targetElement) {\n this.tooltipEle.style.height = formatUnit(newProp.height);\n this.reposition(targetElement);\n }\n break;\n case 'content':\n if (this.tooltipEle) {\n this.renderContent();\n }\n break;\n case 'opensOn':\n this.unwireEvents(oldProp.opensOn);\n this.wireEvents(newProp.opensOn);\n break;\n case 'position':\n this.formatPosition();\n if (this.tooltipEle && targetElement) {\n var arrowInnerELe = select('.' + ARROW_TIP_INNER, this.tooltipEle);\n if (arrowInnerELe) {\n arrowInnerELe.style.top = arrowInnerELe.style.left = null;\n }\n this.reposition(targetElement);\n }\n break;\n case 'tipPointerPosition':\n if (this.tooltipEle && targetElement) {\n this.reposition(targetElement);\n }\n break;\n case 'offsetX':\n if (this.tooltipEle) {\n var x = newProp.offsetX - oldProp.offsetX;\n this.tooltipEle.style.left = (parseInt(this.tooltipEle.style.left, 10) + (x)).toString() + 'px';\n }\n break;\n case 'offsetY':\n if (this.tooltipEle) {\n var y = newProp.offsetY - oldProp.offsetY;\n this.tooltipEle.style.top = (parseInt(this.tooltipEle.style.top, 10) + (y)).toString() + 'px';\n }\n break;\n case 'cssClass':\n if (this.tooltipEle) {\n if (oldProp.cssClass) {\n removeClass([this.tooltipEle], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.tooltipEle], newProp.cssClass.split(' '));\n }\n }\n break;\n case 'enableRtl':\n if (this.tooltipEle) {\n if (this.enableRtl) {\n addClass([this.tooltipEle], RTL);\n }\n else {\n removeClass([this.tooltipEle], RTL);\n }\n }\n break;\n case 'isSticky':\n if (this.tooltipEle && targetElement) {\n this.renderCloseIcon();\n this.reposition(targetElement);\n }\n break;\n case 'container':\n if (!isNullOrUndefined(this.containerElement)) {\n removeClass([this.containerElement], POPUP_CONTAINER);\n }\n this.container = newProp.container;\n if (this.tooltipEle && targetElement) {\n this.appendContainer(this);\n this.reposition(targetElement);\n }\n }\n }\n };\n /**\n * It is used to show the Tooltip on the specified target with specific animation settings.\n *\n * @param {HTMLElement} element - Target element where the Tooltip is to be displayed. (It is an optional parameter)\n * @param {TooltipAnimationSettings} animation - Sets the specific animation, while showing the Tooltip on the screen. (It is an optional parameter)\n * @returns {void}\n */\n Tooltip.prototype.open = function (element, animation) {\n if (isNullOrUndefined(animation)) {\n animation = this.animation.open;\n }\n if (isNullOrUndefined(element)) {\n element = this.element;\n }\n if (element.style.display === 'none') {\n return;\n }\n this.showTooltip(element, animation);\n };\n /**\n * It is used to hide the Tooltip with specific animation effect.\n *\n * @param {TooltipAnimationSettings} animation - Sets the specific animation when hiding Tooltip from the screen. (It is an optional parameter)\n * @returns {void}\n */\n Tooltip.prototype.close = function (animation) {\n if (!animation) {\n animation = this.animation.close;\n }\n this.hideTooltip(animation);\n };\n /**\n * It is used to refresh the Tooltip content and its position.\n *\n * @param {HTMLElement} target - Target element where the Tooltip content or position needs to be refreshed.\n * @returns {void}\n */\n Tooltip.prototype.refresh = function (target) {\n if (this.tooltipEle) {\n this.renderContent(target);\n }\n if (this.popupObj && target) {\n this.reposition(target);\n }\n if (!isNullOrUndefined(this.targetsList) && !isNullOrUndefined(this.target)) {\n var target_2 = selectAll(this.target, this.element);\n if (target_2.length !== this.targetsList.length) {\n this.unwireEvents(this.opensOn);\n this.wireEvents(this.opensOn);\n }\n }\n };\n /**\n * It is used to destroy the Tooltip component.\n * @method destroy\n * @returns {void}\n * @memberof Tooltip\n */\n Tooltip.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.tooltipEle) {\n remove(this.tooltipEle);\n }\n if (this.popupObj) {\n this.popupObj.destroy();\n }\n removeClass([this.element], ROOT);\n this.unwireEvents(this.opensOn);\n this.unwireMouseEvents(this.element);\n this.tooltipEle = null;\n this.popupObj = null;\n var currentTarget = selectAll('[data-tooltip-id= \"' + this.ctrlId + '_content\"]', this.element);\n for (var _i = 0, currentTarget_1 = currentTarget; _i < currentTarget_1.length; _i++) {\n var target = currentTarget_1[_i];\n this.restoreElement(target);\n }\n };\n __decorate([\n Property('auto')\n ], Tooltip.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Tooltip.prototype, \"height\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"content\", void 0);\n __decorate([\n Property('body')\n ], Tooltip.prototype, \"container\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"target\", void 0);\n __decorate([\n Property('TopCenter')\n ], Tooltip.prototype, \"position\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offsetY\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"showTipPointer\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"enableHtmlParse\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"windowCollision\", void 0);\n __decorate([\n Property('Auto')\n ], Tooltip.prototype, \"tipPointerPosition\", void 0);\n __decorate([\n Property('Auto')\n ], Tooltip.prototype, \"opensOn\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"mouseTrail\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isSticky\", void 0);\n __decorate([\n Complex({}, Animation)\n ], Tooltip.prototype, \"animation\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"openDelay\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"closeDelay\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property('')\n ], Tooltip.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeRender\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"afterOpen\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"afterClose\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeCollision\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"destroyed\", void 0);\n Tooltip = __decorate([\n NotifyPropertyChanges\n ], Tooltip);\n return Tooltip;\n}(Component));\nexport { Tooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// \nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Event, extend, L10n, Browser, formatUnit } from '@syncfusion/ej2-base';\nimport { detach, addClass, removeClass, closest, attributes, Touch } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setValue, getUniqueID } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { Calendar } from '../calendar/calendar';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar ROOT = 'e-datepicker';\nvar LIBRARY = 'e-lib';\nvar CONTROL = 'e-control';\nvar POPUPWRAPPER = 'e-popup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar INPUTCONTAINER = 'e-input-group';\nvar INPUTFOCUS = 'e-input-focus';\nvar INPUTROOT = 'e-input';\nvar ERROR = 'e-error';\nvar ACTIVE = 'e-active';\nvar OVERFLOW = 'e-date-overflow';\nvar DATEICON = 'e-date-icon';\nvar CLEARICON = 'e-clear-icon';\nvar ICONS = 'e-icons';\nvar OPENDURATION = 300;\nvar OFFSETVALUE = 4;\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar NONEDIT = 'e-non-edit';\nvar containerAttr = ['title', 'class', 'style'];\n/**\n * Represents the DatePicker component that allows user to select\n * or enter a date value.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DatePicker = /** @class */ (function (_super) {\n __extends(DatePicker, _super);\n /**\n * Constructor for creating the widget.\n *\n * @param {DatePickerModel} options - Specifies the DatePicker model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function DatePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isDateIconClicked = false;\n _this.isAltKeyPressed = false;\n _this.isInteracted = true;\n _this.invalidValueString = null;\n _this.checkPreviousValue = null;\n _this.maskedDateValue = '';\n _this.isAngular = false;\n _this.preventChange = false;\n _this.isIconClicked = false;\n _this.isDynamicValueChanged = false;\n _this.moduleName = _this.getModuleName();\n _this.isFocused = false;\n _this.isBlur = false;\n _this.isKeyAction = false;\n _this.datepickerOptions = options;\n return _this;\n }\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n DatePicker.prototype.render = function () {\n this.initialize();\n this.bindEvents();\n if (this.floatLabelType === 'Auto') {\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.renderComplete();\n this.setTimeZone(this.serverTimezoneOffset);\n };\n DatePicker.prototype.setTimeZone = function (offsetValue) {\n if (!isNullOrUndefined(this.serverTimezoneOffset) && this.value) {\n var clientTimeZoneDiff = new Date().getTimezoneOffset() / 60;\n var serverTimezoneDiff = offsetValue;\n var timeZoneDiff = serverTimezoneDiff + clientTimeZoneDiff;\n timeZoneDiff = this.isDayLightSaving() ? timeZoneDiff-- : timeZoneDiff;\n this.value = new Date((this.value).getTime() + (timeZoneDiff * 60 * 60 * 1000));\n this.updateInput();\n }\n };\n DatePicker.prototype.isDayLightSaving = function () {\n var firstOffset = new Date(this.value.getFullYear(), 0, 1).getTimezoneOffset();\n var secondOffset = new Date(this.value.getFullYear(), 6, 1).getTimezoneOffset();\n return (this.value.getTimezoneOffset() < Math.max(firstOffset, secondOffset));\n };\n DatePicker.prototype.setAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n this.updateIconState();\n };\n DatePicker.prototype.updateIconState = function () {\n if (!this.allowEdit && this.inputWrapper && !this.readonly) {\n if (this.inputElement.value === '') {\n removeClass([this.inputWrapper.container], [NONEDIT]);\n }\n else {\n addClass([this.inputWrapper.container], [NONEDIT]);\n }\n }\n else if (this.inputWrapper) {\n removeClass([this.inputWrapper.container], [NONEDIT]);\n }\n };\n DatePicker.prototype.initialize = function () {\n this.checkInvalidValue(this.value);\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n this.createInput();\n this.updateHtmlAttributeToWrapper();\n this.setAllowEdit();\n if (this.enableMask && !this.value && this.maskedDateValue && (this.floatLabelType === 'Always' || !this.floatLabelType || !this.placeholder)) {\n this.updateInput(true);\n this.updateInputValue(this.maskedDateValue);\n }\n else if (!this.enableMask) {\n this.updateInput(true);\n }\n this.previousElementValue = this.inputElement.value;\n this.previousDate = !isNullOrUndefined(this.value) ? new Date(+this.value) : null;\n this.inputElement.setAttribute('value', this.inputElement.value);\n this.inputValueCopy = this.value;\n };\n DatePicker.prototype.createInput = function () {\n var ariaAttrs = {\n 'aria-atomic': 'true', 'aria-expanded': 'false',\n 'role': 'combobox', 'autocomplete': 'off', 'autocorrect': 'off',\n 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-invalid': 'false', 'aria-label': this.getModuleName()\n };\n if (this.getModuleName() === 'datepicker') {\n var l10nLocale = { placeholder: this.placeholder };\n this.globalize = new Internationalization(this.locale);\n this.l10n = new L10n('datepicker', l10nLocale, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n if (this.fullScreenMode && Browser.isDevice) {\n this.cssClass += ' ' + \"e-popup-expand\";\n }\n var updatedCssClassValues = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValues = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n var isBindClearAction = this.enableMask ? false : true;\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n bindClearAction: isBindClearAction,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassValues,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton\n },\n buttons: [INPUTWRAPPER + ' ' + DATEICON + ' ' + ICONS]\n }, this.createElement);\n this.setWidth(this.width);\n if (this.inputElement.name !== '') {\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute('name'));\n }\n else {\n this.inputElement.setAttribute('name', '' + this.element.id);\n }\n attributes(this.inputElement, ariaAttrs);\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n this.inputElement.tabIndex = -1;\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n Input.addAttributes({ 'aria-label': 'select', 'role': 'button' }, this.inputWrapper.buttons[0]);\n addClass([this.inputWrapper.container], DATEWRAPPER);\n };\n DatePicker.prototype.updateInput = function (isDynamic, isBlur) {\n if (isDynamic === void 0) { isDynamic = false; }\n if (isBlur === void 0) { isBlur = false; }\n var formatOptions;\n if (this.value && !this.isCalendar()) {\n this.disabledDates(isDynamic, isBlur);\n }\n if (isNaN(+new Date(this.checkValue(this.value)))) {\n this.setProperties({ value: null }, true);\n }\n if (this.strictMode) {\n //calls the Calendar processDate protected method to update the date value according to the strictMode true behaviour.\n _super.prototype.validateDate.call(this);\n this.minMaxUpdates();\n _super.prototype.minMaxUpdate.call(this);\n }\n if (!isNullOrUndefined(this.value)) {\n var dateValue = this.value;\n var dateString = void 0;\n var tempFormat = !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n dateString = this.globalize.formatDate(this.value, {\n format: tempFormat, type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n dateString = this.globalize.formatDate(this.value, {\n format: tempFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n });\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n dateString = this.globalize.formatDate(this.value, formatOptions);\n }\n if ((+dateValue <= +this.max) && (+dateValue >= +this.min)) {\n this.updateInputValue(dateString);\n }\n else {\n var value = (+dateValue >= +this.max || !+this.value) || (!+this.value || +dateValue <= +this.min);\n if (!this.strictMode && value) {\n this.updateInputValue(dateString);\n }\n }\n }\n if (isNullOrUndefined(this.value) && this.strictMode) {\n if (!this.enableMask) {\n this.updateInputValue('');\n }\n else {\n this.updateInputValue(this.maskedDateValue);\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n }\n if (!this.strictMode && isNullOrUndefined(this.value) && this.invalidValueString) {\n this.updateInputValue(this.invalidValueString);\n }\n this.changedArgs = { value: this.value };\n this.errorClass();\n this.updateIconState();\n };\n DatePicker.prototype.minMaxUpdates = function () {\n if (!isNullOrUndefined(this.value) && this.value < this.min && this.min <= this.max && this.strictMode) {\n this.setProperties({ value: this.min }, true);\n this.changedArgs = { value: this.value };\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value > this.max && this.min <= this.max && this.strictMode) {\n this.setProperties({ value: this.max }, true);\n this.changedArgs = { value: this.value };\n }\n }\n };\n DatePicker.prototype.checkStringValue = function (val) {\n var returnDate = null;\n var formatOptions = null;\n var formatDateTime = null;\n if (this.getModuleName() === 'datetimepicker') {\n var culture = new Internationalization(this.locale);\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd' };\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime' };\n }\n else {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime', calendar: 'islamic' };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n }\n returnDate = this.checkDateValue(this.globalize.parseDate(val, formatOptions));\n if (isNullOrUndefined(returnDate) && (this.getModuleName() === 'datetimepicker')) {\n returnDate = this.checkDateValue(this.globalize.parseDate(val, formatDateTime));\n }\n return returnDate;\n };\n DatePicker.prototype.checkInvalidValue = function (value) {\n if (!(value instanceof Date) && !isNullOrUndefined(value)) {\n var valueDate = null;\n var valueString = value;\n if (typeof value === 'number') {\n valueString = value.toString();\n }\n var formatOptions = null;\n var formatDateTime = null;\n if (this.getModuleName() === 'datetimepicker') {\n var culture = new Internationalization(this.locale);\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd' };\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime' };\n }\n else {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime', calendar: 'islamic' };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n }\n var invalid = false;\n if (typeof valueString !== 'string') {\n valueString = null;\n invalid = true;\n }\n else {\n if (typeof valueString === 'string') {\n valueString = valueString.trim();\n }\n valueDate = this.checkStringValue(valueString);\n if (!valueDate) {\n var extISOString = null;\n var basicISOString = null;\n // eslint-disable-next-line\n extISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n // eslint-disable-next-line\n basicISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n if ((!extISOString.test(valueString) && !basicISOString.test(valueString))\n || (/^[a-zA-Z0-9- ]*$/).test(valueString) || isNaN(+new Date(this.checkValue(valueString)))) {\n invalid = true;\n }\n else {\n valueDate = new Date(valueString);\n }\n }\n }\n if (invalid) {\n if (!this.strictMode) {\n this.invalidValueString = valueString;\n }\n this.setProperties({ value: null }, true);\n }\n else {\n this.setProperties({ value: valueDate }, true);\n }\n }\n };\n DatePicker.prototype.bindInputEvent = function () {\n if (!isNullOrUndefined(this.formatString) || this.enableMask) {\n if (this.enableMask || this.formatString.indexOf('y') === -1) {\n EventHandler.add(this.inputElement, 'input', this.inputHandler, this);\n }\n else {\n EventHandler.remove(this.inputElement, 'input', this.inputHandler);\n }\n }\n };\n DatePicker.prototype.bindEvents = function () {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.dateIconHandler, this);\n EventHandler.add(this.inputElement, 'mouseup', this.mouseUpHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n EventHandler.add(this.inputElement, 'keyup', this.keyupHandler, this);\n if (this.enableMask) {\n EventHandler.add(this.inputElement, 'keydown', this.keydownHandler, this);\n }\n this.bindInputEvent();\n // To prevent the twice triggering.\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.resetFormHandler, this);\n }\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n this.keyboardModules = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputKeyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n };\n DatePicker.prototype.keydownHandler = function (e) {\n switch (e.code) {\n case 'ArrowLeft':\n case 'ArrowRight':\n case 'ArrowUp':\n case 'ArrowDown':\n case 'Home':\n case 'End':\n case 'Delete':\n if (this.enableMask && !this.popupObj && !this.readonly) {\n if (e.code !== 'Delete') {\n e.preventDefault();\n }\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: e\n });\n }\n break;\n default:\n break;\n }\n };\n DatePicker.prototype.unBindEvents = function () {\n if (!isNullOrUndefined(this.inputWrapper)) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.dateIconHandler);\n }\n EventHandler.remove(this.inputElement, 'mouseup', this.mouseUpHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n EventHandler.remove(this.inputElement, 'keyup', this.keyupHandler);\n if (this.enableMask) {\n EventHandler.remove(this.inputElement, 'keydown', this.keydownHandler);\n }\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler);\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.resetFormHandler);\n }\n };\n DatePicker.prototype.resetFormHandler = function () {\n if (!this.enabled) {\n return;\n }\n if (!this.inputElement.disabled) {\n var value = this.inputElement.getAttribute('value');\n if (this.element.tagName === 'EJS-DATEPICKER' || this.element.tagName === 'EJS-DATETIMEPICKER') {\n value = '';\n this.inputValueCopy = null;\n this.inputElement.setAttribute('value', '');\n }\n this.setProperties({ value: this.inputValueCopy }, true);\n this.restoreValue();\n if (this.inputElement) {\n this.updateInputValue(value);\n this.errorClass();\n }\n }\n };\n DatePicker.prototype.restoreValue = function () {\n this.currentDate = this.value ? this.value : new Date();\n this.previousDate = this.value;\n this.previousElementValue = (isNullOrUndefined(this.inputValueCopy)) ? '' :\n this.globalize.formatDate(this.inputValueCopy, {\n format: this.formatString, type: 'dateTime', skeleton: 'yMd'\n });\n };\n DatePicker.prototype.inputChangeHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.stopPropagation();\n };\n DatePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n DatePicker.prototype.resetHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.preventDefault();\n this.clear(e);\n };\n DatePicker.prototype.mouseUpHandler = function (e) {\n if (this.enableMask) {\n e.preventDefault();\n this.notify('setMaskSelection', {\n module: 'MaskedDateTime'\n });\n }\n };\n DatePicker.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n if (!this.enableMask) {\n this.updateInputValue('');\n }\n var clearedArgs = {\n event: event\n };\n this.trigger('cleared', clearedArgs);\n this.invalidValueString = '';\n this.updateInput();\n this.popupUpdate();\n this.changeEvent(event);\n if (this.enableMask) {\n this.notify('clearHandler', {\n module: 'MaskedDateTime'\n });\n }\n if (closest(this.element, 'form')) {\n var element = this.element;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n DatePicker.prototype.preventEventBubbling = function (e) {\n e.preventDefault();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.interopAdaptor.invokeMethodAsync('OnDateIconClick');\n };\n DatePicker.prototype.updateInputValue = function (value) {\n Input.setValue(value, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n DatePicker.prototype.dateIconHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n this.isIconClicked = true;\n if (Browser.isDevice) {\n this.inputElement.setAttribute('readonly', '');\n this.inputElement.blur();\n }\n e.preventDefault();\n if (!this.readonly) {\n if (this.isCalendar()) {\n this.hide(e);\n }\n else {\n this.isDateIconClicked = true;\n this.show(null, e);\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n addClass(this.inputWrapper.buttons, ACTIVE);\n }\n }\n this.isIconClicked = false;\n };\n DatePicker.prototype.updateHtmlAttributeToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (!isNullOrUndefined(this.htmlAttributes[\"\" + key])) {\n if (containerAttr.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValues = (this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ')).trim();\n if (updatedClassValues !== '') {\n addClass([this.inputWrapper.container], updatedClassValues.split(' '));\n }\n }\n else if (key === 'style') {\n var setStyle = this.inputWrapper.container.getAttribute(key);\n if (!isNullOrUndefined(setStyle)) {\n if (setStyle.charAt(setStyle.length - 1) === ';') {\n setStyle = setStyle + this.htmlAttributes[\"\" + key];\n }\n else {\n setStyle = setStyle + ';' + this.htmlAttributes[\"\" + key];\n }\n }\n else {\n setStyle = this.htmlAttributes[\"\" + key];\n }\n this.inputWrapper.container.setAttribute(key, setStyle);\n }\n else {\n this.inputWrapper.container.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n }\n };\n DatePicker.prototype.updateHtmlAttributeToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (containerAttr.indexOf(key) < 0) {\n this.inputElement.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n DatePicker.prototype.updateCssClass = function (newCssClass, oldCssClass) {\n if (!isNullOrUndefined(oldCssClass)) {\n oldCssClass = (oldCssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(newCssClass)) {\n newCssClass = (newCssClass.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(newCssClass, [this.inputWrapper.container], oldCssClass);\n if (this.popupWrapper) {\n Input.setCssClass(newCssClass, [this.popupWrapper], oldCssClass);\n }\n };\n DatePicker.prototype.calendarKeyActionHandle = function (e) {\n switch (e.action) {\n case 'escape':\n if (this.isCalendar()) {\n this.hide(e);\n }\n else {\n this.inputWrapper.container.children[this.index].blur();\n }\n break;\n case 'enter':\n if (!this.isCalendar()) {\n this.show(null, e);\n }\n else {\n if (+this.value !== +this.currentDate && !this.isCalendar()) {\n this.inputWrapper.container.children[this.index].focus();\n }\n }\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n break;\n }\n };\n DatePicker.prototype.inputFocusHandler = function () {\n this.isFocused = true;\n if (!this.enabled) {\n return;\n }\n if (this.enableMask && !this.inputElement.value && this.placeholder) {\n if (this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue(this.maskedDateValue);\n this.inputElement.selectionStart = 0;\n this.inputElement.selectionEnd = this.inputElement.value.length;\n }\n }\n var focusArguments = {\n model: this\n };\n this.isDateIconClicked = false;\n this.trigger('focus', focusArguments);\n this.updateIconState();\n if (this.openOnFocus && !this.isIconClicked) {\n this.show();\n }\n };\n DatePicker.prototype.inputHandler = function () {\n this.isPopupClicked = false;\n if (this.enableMask) {\n this.notify('inputHandler', {\n module: 'MaskedDateTime'\n });\n }\n };\n DatePicker.prototype.inputBlurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n this.strictModeUpdate();\n if (this.inputElement.value === '' && isNullOrUndefined(this.value)) {\n this.invalidValueString = null;\n this.updateInputValue('');\n }\n this.isBlur = true;\n this.updateInput(false, true);\n this.isBlur = false;\n this.popupUpdate();\n this.changeTrigger(e);\n if (this.enableMask && this.maskedDateValue && this.placeholder && this.floatLabelType !== 'Always') {\n if (this.inputElement.value === this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue('');\n }\n }\n this.errorClass();\n if (this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n if (this.getModuleName() === 'datepicker') {\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n if (this.isCalendar()) {\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n this.calendarKeyboardModules = new KeyboardEvents(this.calendarElement.children[1].firstElementChild, {\n eventName: 'keydown',\n keyAction: this.calendarKeyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n }\n this.isPopupClicked = false;\n };\n DatePicker.prototype.documentHandler = function (e) {\n if ((!isNullOrUndefined(this.popupObj) && !isNullOrUndefined(this.inputWrapper) && (this.inputWrapper.container.contains(e.target) && e.type !== 'mousedown' ||\n (this.popupObj.element && this.popupObj.element.contains(e.target)))) && e.type !== 'touchstart') {\n e.preventDefault();\n }\n var target = e.target;\n if (!(closest(target, '.e-datepicker.e-popup-wrapper')) && !isNullOrUndefined(this.inputWrapper)\n && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)\n && (!target.classList.contains('e-day'))\n && (!target.classList.contains('e-dlg-overlay'))) {\n this.hide(e);\n this.focusOut();\n }\n else if (closest(target, '.e-datepicker.e-popup-wrapper')) {\n // Fix for close the popup when select the previously selected value.\n if (target.classList.contains('e-day')\n && !isNullOrUndefined(e.target.parentElement)\n && e.target.parentElement.classList.contains('e-selected')\n && closest(target, '.e-content')\n && closest(target, '.e-content').classList.contains('e-' + this.depth.toLowerCase())) {\n this.hide(e);\n }\n else if (closest(target, '.e-footer-container')\n && target.classList.contains('e-today')\n && target.classList.contains('e-btn')\n && (+new Date(+this.value) === +_super.prototype.generateTodayVal.call(this, this.value))) {\n this.hide(e);\n }\n }\n };\n DatePicker.prototype.inputKeyActionHandle = function (e) {\n var clickedView = this.currentView();\n switch (e.action) {\n case 'altUpArrow':\n this.isAltKeyPressed = false;\n this.hide(e);\n this.inputElement.focus();\n break;\n case 'altDownArrow':\n this.isAltKeyPressed = true;\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger(e);\n if (this.getModuleName() === 'datepicker') {\n this.show(null, e);\n }\n break;\n case 'escape':\n this.hide(e);\n break;\n case 'enter':\n this.strictModeUpdate();\n this.updateInput();\n this.popupUpdate();\n this.changeTrigger(e);\n this.errorClass();\n if (!this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n if (this.isCalendar()) {\n e.preventDefault();\n e.stopPropagation();\n }\n break;\n case 'tab':\n case 'shiftTab':\n {\n var start = this.inputElement.selectionStart;\n var end = this.inputElement.selectionEnd;\n if (this.enableMask && !this.popupObj && !this.readonly) {\n var length_1 = this.inputElement.value.length;\n if ((start === 0 && end === length_1) || (end !== length_1 && e.action === 'tab') || (start !== 0 && e.action === 'shiftTab')) {\n e.preventDefault();\n }\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: e\n });\n start = this.inputElement.selectionStart;\n end = this.inputElement.selectionEnd;\n }\n this.strictModeUpdate();\n this.updateInput();\n this.popupUpdate();\n this.changeTrigger(e);\n this.errorClass();\n if (this.enableMask) {\n this.inputElement.selectionStart = start;\n this.inputElement.selectionEnd = end;\n }\n if (e.action === 'tab' && e.target === this.inputElement && this.isCalendar() && document.activeElement === this.inputElement) {\n e.preventDefault();\n this.headerTitleElement.focus();\n }\n if (e.action === 'shiftTab' && e.target === this.inputElement && this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n break;\n }\n default:\n this.defaultAction(e);\n // Fix for close the popup when select the previously selected value.\n if (e.action === 'select' && clickedView === this.depth) {\n this.hide(e);\n }\n }\n };\n DatePicker.prototype.defaultAction = function (e) {\n this.previousDate = ((!isNullOrUndefined(this.value) && new Date(+this.value)) || null);\n if (this.isCalendar()) {\n _super.prototype.keyActionHandle.call(this, e);\n if (this.isCalendar()) {\n attributes(this.inputElement, {\n 'aria-activedescendant': '' + this.setActiveDescendant()\n });\n }\n }\n };\n DatePicker.prototype.popupUpdate = function () {\n if ((isNullOrUndefined(this.value)) && (!isNullOrUndefined(this.previousDate)) ||\n (((this.getModuleName() !== 'datetimepicker') && (+this.value !== +this.previousDate)) || ((this.getModuleName() === 'datetimepicker') && (+this.value !== +this.previousDateTime)))) {\n if (this.popupObj) {\n if (this.popupObj.element.querySelectorAll('.' + SELECTED).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + SELECTED), [SELECTED]);\n }\n }\n if (!isNullOrUndefined(this.value)) {\n if ((+this.value >= +this.min) && (+this.value <= +this.max)) {\n var targetdate = new Date(this.checkValue(this.value));\n _super.prototype.navigateTo.call(this, 'Month', targetdate);\n }\n }\n }\n };\n DatePicker.prototype.strictModeUpdate = function () {\n var format;\n var pattern = /^y/;\n var charPattern = /[^a-zA-Z]/;\n var formatOptions;\n if (this.getModuleName() === 'datetimepicker') {\n format = !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat;\n }\n else if (!pattern.test(this.formatString) || charPattern.test(this.formatString)) {\n format = isNullOrUndefined(this.formatString) ? this.formatString : this.formatString.replace('dd', 'd');\n }\n if (!isNullOrUndefined(format)) {\n var len = format.split('M').length - 1;\n if (len < 3) {\n format = format.replace('MM', 'M');\n }\n }\n else {\n format = this.formatString;\n }\n var dateOptions;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n dateOptions = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n dateOptions = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n dateOptions = formatOptions;\n }\n var date;\n if (typeof this.inputElement.value === 'string') {\n this.inputElement.value = this.inputElement.value.trim();\n }\n if ((this.getModuleName() === 'datetimepicker')) {\n if (this.checkDateValue(this.globalize.parseDate(this.inputElement.value, dateOptions))) {\n var modifiedValue = this.inputElement.value.replace(/(am|pm|Am|aM|pM|Pm)/g, function (match) { return match.toLocaleUpperCase(); });\n date = this.globalize.parseDate(modifiedValue, dateOptions);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n date = this.globalize.parseDate(this.inputElement.value, formatOptions);\n }\n }\n else {\n date = this.globalize.parseDate(this.inputElement.value, dateOptions);\n date = (!isNullOrUndefined(date) && isNaN(+date)) ? null : date;\n if (!isNullOrUndefined(this.formatString) && this.inputElement.value !== '' && this.strictMode) {\n if ((this.isPopupClicked || (!this.isPopupClicked && this.inputElement.value === this.previousElementValue))\n && this.formatString.indexOf('y') === -1) {\n date.setFullYear(this.value.getFullYear());\n }\n }\n }\n // EJ2-35061 - To prevent change event from triggering twice when using strictmode and format property\n if ((this.getModuleName() === 'datepicker') && (this.value && !isNaN(+this.value)) && date) {\n date.setHours(this.value.getHours(), this.value.getMinutes(), this.value.getSeconds(), this.value.getMilliseconds());\n }\n if (this.strictMode && date) {\n this.updateInputValue(this.globalize.formatDate(date, dateOptions));\n if (this.inputElement.value !== this.previousElementValue) {\n this.setProperties({ value: date }, true);\n }\n }\n else if (!this.strictMode) {\n if (this.inputElement.value !== this.previousElementValue) {\n this.setProperties({ value: date }, true);\n }\n }\n if (this.strictMode && !date && this.inputElement.value === (this.enableMask ? this.maskedDateValue : '')) {\n this.setProperties({ value: null }, true);\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: null }, true);\n }\n if (isNullOrUndefined(this.value)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n };\n DatePicker.prototype.createCalendar = function () {\n var _this = this;\n this.popupWrapper = this.createElement('div', { className: '' + ROOT + ' ' + POPUPWRAPPER, id: this.inputElement.id + '_options' });\n this.popupWrapper.setAttribute('aria-label', this.element.id);\n this.popupWrapper.setAttribute('role', 'dialog');\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.className += ' ' + this.cssClass;\n }\n if (Browser.isDevice) {\n this.modelHeader();\n this.modal = this.createElement('div');\n this.modal.className = '' + ROOT + ' e-date-modal';\n document.body.className += ' ' + OVERFLOW;\n this.modal.style.display = 'block';\n document.body.appendChild(this.modal);\n }\n //this.calendarElement represent the Calendar object from the Calendar class.\n this.calendarElement.querySelector('table tbody').className = '';\n this.popupObj = new Popup(this.popupWrapper, {\n content: this.calendarElement,\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : (this.enableRtl ? { X: 'right', Y: 'bottom' } : { X: 'left', Y: 'bottom' }),\n offsetY: OFFSETVALUE,\n targetType: 'container',\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : (this.enableRtl ? { X: 'fit', Y: 'flip' } : { X: 'flip', Y: 'flip' }),\n open: function () {\n if (Browser.isDevice && _this.fullScreenMode) {\n _this.iconRight = parseInt(window.getComputedStyle(_this.calendarElement.querySelector('.e-header.e-month .e-prev')).marginRight, 10) > 16 ? true : false;\n _this.touchModule = new Touch(_this.calendarElement.querySelector(\".e-content.e-month\"), {\n swipe: _this.CalendarSwipeHandler.bind(_this)\n });\n EventHandler.add(_this.calendarElement.querySelector(\".e-content.e-month\"), \"touchstart\", _this.TouchStartHandler, _this);\n }\n if (_this.getModuleName() !== 'datetimepicker') {\n if (document.activeElement !== _this.inputElement) {\n _this.defaultKeyConfigs = extend(_this.defaultKeyConfigs, _this.keyConfigs);\n _this.calendarElement.children[1].firstElementChild.focus();\n _this.calendarKeyboardModules = new KeyboardEvents(_this.calendarElement.children[1].firstElementChild, {\n eventName: 'keydown',\n keyAction: _this.calendarKeyActionHandle.bind(_this),\n keyConfigs: _this.defaultKeyConfigs\n });\n _this.calendarKeyboardModules = new KeyboardEvents(_this.inputWrapper.container.children[_this.index], {\n eventName: 'keydown',\n keyAction: _this.calendarKeyActionHandle.bind(_this),\n keyConfigs: _this.defaultKeyConfigs\n });\n }\n }\n }, close: function () {\n if (_this.isDateIconClicked) {\n _this.inputWrapper.container.children[_this.index].focus();\n }\n if (_this.value) {\n _this.disabledDates();\n }\n if (_this.popupObj) {\n _this.popupObj.destroy();\n }\n _this.resetCalendar();\n detach(_this.popupWrapper);\n _this.popupObj = _this.popupWrapper = null;\n _this.preventArgs = null;\n _this.calendarKeyboardModules = null;\n _this.setAriaAttributes();\n }, targetExitViewport: function () {\n if (!Browser.isDevice) {\n _this.hide();\n }\n }\n });\n this.popupObj.element.className += ' ' + this.cssClass;\n this.setAriaAttributes();\n };\n DatePicker.prototype.CalendarSwipeHandler = function (e) {\n var direction = 0;\n if (this.iconRight) {\n switch (e.swipeDirection) {\n case \"Left\":\n direction = 1;\n break;\n case \"Right\":\n direction = -1;\n break;\n default:\n break;\n }\n }\n else {\n switch (e.swipeDirection) {\n case \"Up\":\n direction = 1;\n break;\n case \"Down\":\n direction = -1;\n break;\n default:\n break;\n }\n }\n if (this.touchStart) {\n if (direction === 1) {\n this.navigateNext(e);\n }\n else if (direction === -1) {\n this.navigatePrevious(e);\n }\n this.touchStart = false;\n }\n };\n DatePicker.prototype.TouchStartHandler = function (e) {\n this.touchStart = true;\n };\n DatePicker.prototype.setAriaDisabled = function () {\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n this.inputElement.tabIndex = -1;\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n };\n DatePicker.prototype.modelHeader = function () {\n var dateOptions;\n var modelHeader = this.createElement('div', { className: 'e-model-header' });\n var yearHeading = this.createElement('h1', { className: 'e-model-year' });\n var h2 = this.createElement('div');\n var daySpan = this.createElement('span', { className: 'e-model-day' });\n var monthSpan = this.createElement('span', { className: 'e-model-month' });\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: 'y', skeleton: 'dateTime' };\n }\n else {\n dateOptions = { format: 'y', skeleton: 'dateTime', calendar: 'islamic' };\n }\n yearHeading.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions);\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: 'E', skeleton: 'dateTime' };\n }\n else {\n dateOptions = { format: 'E', skeleton: 'dateTime', calendar: 'islamic' };\n }\n daySpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions) + ', ';\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: 'MMM d', skeleton: 'dateTime' };\n }\n else {\n dateOptions = { format: 'MMM d', skeleton: 'dateTime', calendar: 'islamic' };\n }\n monthSpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions);\n if (this.fullScreenMode) {\n var modelCloseIcon = this.createElement(\"span\", { className: \"e-popup-close\" });\n EventHandler.add(modelCloseIcon, 'mousedown touchstart', this.modelCloseHandler, this);\n var modelTodayButton = this.calendarElement.querySelector(\"button.e-today\");\n h2.classList.add(\"e-day-wrapper\");\n modelTodayButton.classList.add(\"e-outline\");\n modelHeader.appendChild(modelCloseIcon);\n modelHeader.appendChild(modelTodayButton);\n }\n if (!this.fullScreenMode)\n modelHeader.appendChild(yearHeading);\n h2.appendChild(daySpan);\n h2.appendChild(monthSpan);\n modelHeader.appendChild(h2);\n this.calendarElement.insertBefore(modelHeader, this.calendarElement.firstElementChild);\n };\n DatePicker.prototype.modelCloseHandler = function (e) {\n this.hide();\n };\n DatePicker.prototype.changeTrigger = function (event) {\n if (this.inputElement.value !== this.previousElementValue) {\n if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n if (this.isDynamicValueChanged && this.isCalendar()) {\n this.popupUpdate();\n }\n this.changedArgs.value = this.value;\n this.changedArgs.event = event || null;\n this.changedArgs.element = this.element;\n this.changedArgs.isInteracted = !isNullOrUndefined(event);\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', this.changedArgs);\n }\n this.previousElementValue = this.inputElement.value;\n this.previousDate = !isNaN(+new Date(this.checkValue(this.value))) ? new Date(this.checkValue(this.value)) : null;\n this.isInteracted = true;\n }\n }\n this.isKeyAction = false;\n };\n DatePicker.prototype.navigatedEvent = function () {\n this.trigger('navigated', this.navigatedArgs);\n };\n DatePicker.prototype.keyupHandler = function (e) {\n this.isKeyAction = (this.inputElement.value !== this.previousElementValue) ? true : false;\n };\n DatePicker.prototype.changeEvent = function (event) {\n if (!this.isIconClicked && !(this.isBlur || this.isKeyAction)) {\n this.selectCalendar(event);\n }\n if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n this.changedArgs.event = event ? event : null;\n this.changedArgs.element = this.element;\n this.changedArgs.isInteracted = this.isInteracted;\n if (!this.isDynamicValueChanged) {\n this.trigger('change', this.changedArgs);\n }\n this.previousDate = this.value && new Date(+this.value);\n if (!this.isDynamicValueChanged) {\n this.hide(event);\n }\n this.previousElementValue = this.inputElement.value;\n this.errorClass();\n }\n else if (event) {\n this.hide(event);\n }\n this.isKeyAction = false;\n };\n DatePicker.prototype.requiredModules = function () {\n var modules = [];\n if (this) {\n modules.push({ args: [this], member: 'islamic' });\n }\n if (this.enableMask) {\n modules.push({ args: [this], member: 'MaskedDateTime' });\n }\n return modules;\n };\n DatePicker.prototype.selectCalendar = function (e) {\n var date;\n var tempFormat;\n var formatOptions;\n if (this.getModuleName() === 'datetimepicker') {\n tempFormat = !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat;\n }\n else {\n tempFormat = this.formatString;\n }\n if (this.value) {\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: tempFormat, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: tempFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n date = this.globalize.formatDate(this.changedArgs.value, formatOptions);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n date = this.globalize.formatDate(this.changedArgs.value, formatOptions);\n }\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n }\n if (!isNullOrUndefined(date)) {\n this.updateInputValue(date);\n if (this.enableMask) {\n this.notify('setMaskSelection', {\n module: 'MaskedDateTime'\n });\n }\n }\n };\n DatePicker.prototype.isCalendar = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + POPUPWRAPPER)) {\n return true;\n }\n return false;\n };\n DatePicker.prototype.setWidth = function (width) {\n if (typeof width === 'number') {\n this.inputWrapper.container.style.width = formatUnit(this.width);\n }\n else if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (width.match(/px|%|em/)) ? (this.width) : (formatUnit(this.width));\n }\n else {\n this.inputWrapper.container.style.width = '100%';\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Shows the Calendar.\n *\n * @returns {void}\n\n */\n DatePicker.prototype.show = function (type, e) {\n var _this = this;\n if ((this.enabled && this.readonly) || !this.enabled || this.popupObj) {\n return;\n }\n else {\n var prevent_1 = true;\n var outOfRange = void 0;\n if (!isNullOrUndefined(this.value) && !(+this.value >= +new Date(this.checkValue(this.min))\n && +this.value <= +new Date(this.checkValue(this.max)))) {\n outOfRange = new Date(this.checkValue(this.value));\n this.setProperties({ 'value': null }, true);\n }\n else {\n outOfRange = this.value || null;\n }\n if (!this.isCalendar()) {\n _super.prototype.render.call(this);\n this.setProperties({ 'value': outOfRange || null }, true);\n this.previousDate = outOfRange;\n this.createCalendar();\n }\n if (Browser.isDevice) {\n this.mobilePopupWrapper = this.createElement('div', { className: 'e-datepick-mob-popup-wrap' });\n document.body.appendChild(this.mobilePopupWrapper);\n }\n this.preventArgs = {\n preventDefault: function () {\n prevent_1 = false;\n },\n popup: this.popupObj,\n event: e || null,\n cancel: false,\n appendTo: Browser.isDevice ? this.mobilePopupWrapper : document.body\n };\n var eventArgs = this.preventArgs;\n this.trigger('open', eventArgs, function (eventArgs) {\n _this.preventArgs = eventArgs;\n if (prevent_1 && !_this.preventArgs.cancel) {\n addClass(_this.inputWrapper.buttons, ACTIVE);\n _this.preventArgs.appendTo.appendChild(_this.popupWrapper);\n _this.popupObj.refreshPosition(_this.inputElement);\n var openAnimation = {\n name: 'FadeIn',\n duration: Browser.isDevice ? 0 : OPENDURATION\n };\n if (_this.zIndex === 1000) {\n _this.popupObj.show(new Animation(openAnimation), _this.element);\n }\n else {\n _this.popupObj.show(new Animation(openAnimation), null);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _super.prototype.setOverlayIndex.call(_this, _this.mobilePopupWrapper, _this.popupObj.element, _this.modal, Browser.isDevice);\n _this.setAriaAttributes();\n }\n else {\n _this.popupObj.destroy();\n _this.popupWrapper = _this.popupObj = null;\n }\n if (!isNullOrUndefined(_this.inputElement) && _this.inputElement.value === '') {\n if (!isNullOrUndefined(_this.tableBodyElement) && _this.tableBodyElement.querySelectorAll('td.e-selected').length > 0) {\n addClass([_this.tableBodyElement.querySelector('td.e-selected')], FOCUSEDDATE);\n removeClass(_this.tableBodyElement.querySelectorAll('td.e-selected'), SELECTED);\n }\n }\n EventHandler.add(document, 'mousedown touchstart', _this.documentHandler, _this);\n });\n if (Browser.isDevice) {\n var dlgOverlay = this.createElement('div', { className: 'e-dlg-overlay' });\n dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n this.mobilePopupWrapper.appendChild(dlgOverlay);\n }\n }\n };\n /**\n * Hide the Calendar.\n *\n * @returns {void}\n\n */\n DatePicker.prototype.hide = function (event) {\n var _this = this;\n if (!isNullOrUndefined(this.popupWrapper)) {\n var prevent_2 = true;\n this.preventArgs = {\n preventDefault: function () {\n prevent_2 = false;\n },\n popup: this.popupObj,\n event: event || null,\n cancel: false\n };\n removeClass(this.inputWrapper.buttons, ACTIVE);\n removeClass([document.body], OVERFLOW);\n var eventArgs = this.preventArgs;\n if (this.isCalendar()) {\n this.trigger('close', eventArgs, function (eventArgs) {\n _this.closeEventCallback(prevent_2, eventArgs);\n });\n }\n else {\n this.closeEventCallback(prevent_2, eventArgs);\n }\n }\n else {\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n DatePicker.prototype.closeEventCallback = function (prevent, eventArgs) {\n this.preventArgs = eventArgs;\n if (this.isCalendar() && (prevent && !this.preventArgs.cancel)) {\n this.popupObj.hide();\n this.isAltKeyPressed = false;\n this.keyboardModule.destroy();\n removeClass(this.inputWrapper.buttons, ACTIVE);\n }\n this.setAriaAttributes();\n if (Browser.isDevice && this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n if (Browser.isDevice) {\n if (!isNullOrUndefined(this.mobilePopupWrapper) && (prevent && (isNullOrUndefined(this.preventArgs) || !this.preventArgs.cancel))) {\n this.mobilePopupWrapper.remove();\n this.mobilePopupWrapper = null;\n }\n }\n EventHandler.remove(document, 'mousedown touchstart', this.documentHandler);\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n };\n /* eslint-disable jsdoc/require-param */\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DatePicker.prototype.focusIn = function (triggerEvent) {\n if (document.activeElement !== this.inputElement && this.enabled) {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n };\n /* eslint-enable jsdoc/require-param */\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n DatePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.inputElement.blur();\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the current view of the DatePicker.\n *\n * @returns {string}\n\n */\n DatePicker.prototype.currentView = function () {\n var currentView;\n if (this.calendarElement) {\n // calls the Calendar currentView public method\n currentView = _super.prototype.currentView.call(this);\n }\n return currentView;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Navigates to specified month or year or decade view of the DatePicker.\n *\n * @param {string} view - Specifies the view of the calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns {void}\n\n */\n DatePicker.prototype.navigateTo = function (view, date) {\n if (this.calendarElement) {\n // calls the Calendar navigateTo public method\n _super.prototype.navigateTo.call(this, view, date);\n }\n };\n /**\n * To destroy the widget.\n *\n * @returns {void}\n */\n DatePicker.prototype.destroy = function () {\n this.unBindEvents();\n _super.prototype.destroy.call(this);\n if (!isNullOrUndefined(this.keyboardModules)) {\n this.keyboardModules.destroy();\n }\n if (this.popupObj && this.popupObj.element.classList.contains(POPUP)) {\n _super.prototype.destroy.call(this);\n }\n var ariaAttrs = {\n 'aria-atomic': 'true', 'aria-disabled': 'true',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-label': this.getModuleName()\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttrs, this.inputElement);\n if (!isNullOrUndefined(this.inputElementCopy.getAttribute('tabindex'))) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.removeAttribute('tabindex');\n }\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n this.ensureInputAttribute();\n }\n if (this.isCalendar()) {\n if (this.popupWrapper) {\n detach(this.popupWrapper);\n }\n this.popupObj = this.popupWrapper = null;\n this.keyboardModule.destroy();\n }\n if (this.ngTag === null) {\n if (this.inputElement) {\n if (!isNullOrUndefined(this.inputWrapper)) {\n this.inputWrapper.container.insertAdjacentElement('afterend', this.inputElement);\n }\n removeClass([this.inputElement], [INPUTROOT]);\n }\n removeClass([this.element], [ROOT]);\n if (!isNullOrUndefined(this.inputWrapper)) {\n detach(this.inputWrapper.container);\n }\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.resetFormHandler);\n }\n this.inputWrapper = null;\n this.keyboardModules = null;\n };\n DatePicker.prototype.ensureInputAttribute = function () {\n var prop = [];\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n prop[i] = this.inputElement.attributes[i].name;\n }\n for (var i = 0; i < prop.length; i++) {\n if (isNullOrUndefined(this.inputElementCopy.getAttribute(prop[i]))) {\n if (prop[i].toLowerCase() === 'value') {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop[i]);\n }\n else {\n if (prop[i].toLowerCase() === 'value') {\n this.inputElement.value = this.inputElementCopy.getAttribute(prop[i]);\n }\n this.inputElement.setAttribute(prop[i], this.inputElementCopy.getAttribute(prop[i]));\n }\n }\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n DatePicker.prototype.preRender = function () {\n this.inputElementCopy = this.element.cloneNode(true);\n removeClass([this.inputElementCopy], [ROOT, CONTROL, LIBRARY]);\n this.inputElement = this.element;\n this.formElement = closest(this.inputElement, 'form');\n this.index = this.showClearButton ? 2 : 1;\n this.ngTag = null;\n if (this.element.tagName === 'EJS-DATEPICKER' || this.element.tagName === 'EJS-DATETIMEPICKER') {\n this.ngTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n if (this.element.getAttribute('id')) {\n if (this.ngTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n if (this.getModuleName() === 'datetimepicker') {\n this.element.id = getUniqueID('ej2-datetimepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n else {\n this.element.id = getUniqueID('ej2-datepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n }\n if (this.ngTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.updateHtmlAttributeToElement();\n this.defaultKeyConfigs = this.getDefaultKeyConfig();\n this.checkHtmlAttributes(false);\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n _super.prototype.preRender.call(this);\n };\n DatePicker.prototype.getDefaultKeyConfig = function () {\n this.defaultKeyConfigs = {\n altUpArrow: 'alt+uparrow',\n altDownArrow: 'alt+downarrow',\n escape: 'escape',\n enter: 'enter',\n controlUp: 'ctrl+38',\n controlDown: 'ctrl+40',\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n select: 'enter',\n home: 'home',\n end: 'end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n shiftPageUp: 'shift+pageup',\n shiftPageDown: 'shift+pagedown',\n controlHome: 'ctrl+home',\n controlEnd: 'ctrl+end',\n shiftTab: 'shift+tab',\n tab: 'tab'\n };\n return this.defaultKeyConfigs;\n };\n DatePicker.prototype.validationAttribute = function (target, inputElement) {\n var nameAttribute = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n inputElement.setAttribute('name', nameAttribute);\n target.removeAttribute('name');\n var attribute = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attribute.length; i++) {\n if (isNullOrUndefined(target.getAttribute(attribute[i]))) {\n continue;\n }\n var attr = target.getAttribute(attribute[i]);\n inputElement.setAttribute(attribute[i], attr);\n target.removeAttribute(attribute[i]);\n }\n };\n DatePicker.prototype.checkFormat = function () {\n var culture = new Internationalization(this.locale);\n if (this.format) {\n if (typeof this.format === 'string') {\n this.formatString = this.format;\n }\n else if (this.format.skeleton !== '' && !isNullOrUndefined(this.format.skeleton)) {\n var skeletonString = this.format.skeleton;\n if (this.getModuleName() === 'datetimepicker') {\n this.formatString = culture.getDatePattern({ skeleton: skeletonString, type: 'dateTime' });\n }\n else {\n this.formatString = culture.getDatePattern({ skeleton: skeletonString, type: 'date' });\n }\n }\n else {\n if (this.getModuleName() === 'datetimepicker') {\n this.formatString = this.dateTimeFormat;\n }\n else {\n this.formatString = null;\n }\n }\n }\n else {\n this.formatString = null;\n }\n };\n DatePicker.prototype.checkHtmlAttributes = function (dynamic) {\n this.globalize = new Internationalization(this.locale);\n this.checkFormat();\n this.checkView();\n var attributes = dynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['value', 'min', 'max', 'disabled', 'readonly', 'style', 'name', 'placeholder', 'type'];\n var options;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n options = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n options = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n options = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n options = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n }\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['enabled'] === undefined)) || dynamic)) {\n var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '' ||\n this.inputElement.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !dynamic);\n }\n break;\n case 'readonly':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['readonly'] === undefined)) || dynamic)) {\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !dynamic);\n }\n break;\n case 'placeholder':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['placeholder'] === undefined)) || dynamic)) {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !dynamic);\n }\n break;\n case 'style':\n this.inputElement.setAttribute('style', '' + this.inputElement.getAttribute(prop));\n break;\n case 'name':\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute(prop));\n break;\n case 'value':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['value'] === undefined)) || dynamic)) {\n var value = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(value, options), {}), !dynamic);\n }\n break;\n case 'min':\n if ((+this.min === +new Date(1900, 0, 1)) || dynamic) {\n var min = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(min), {}), !dynamic);\n }\n break;\n case 'max':\n if ((+this.max === +new Date(2099, 11, 31)) || dynamic) {\n var max = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(max), {}), !dynamic);\n }\n break;\n case 'type':\n if (this.inputElement.getAttribute(prop) !== 'text') {\n this.inputElement.setAttribute('type', 'text');\n }\n break;\n }\n }\n }\n };\n /**\n * To get component name.\n *\n * @returns {string} Returns the component name.\n * @private\n */\n DatePicker.prototype.getModuleName = function () {\n return 'datepicker';\n };\n DatePicker.prototype.disabledDates = function (isDynamic, isBlur) {\n if (isDynamic === void 0) { isDynamic = false; }\n if (isBlur === void 0) { isBlur = false; }\n var formatOptions;\n var globalize;\n var valueCopy = this.checkDateValue(this.value) ? new Date(+this.value) : new Date(this.checkValue(this.value));\n var previousValCopy = this.previousDate;\n //calls the Calendar render method to check the disabled dates through renderDayCell event and update the input value accordingly.\n this.minMaxUpdates();\n if (!isDynamic || (isDynamic && !isNullOrUndefined(this.renderDayCell))) {\n _super.prototype.render.call(this);\n }\n this.previousDate = previousValCopy;\n var date = valueCopy && +(valueCopy);\n var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + date);\n if (!this.strictMode) {\n if (typeof this.value === 'string' || ((typeof this.value === 'object') && (+this.value) !== (+valueCopy))) {\n this.setProperties({ value: valueCopy }, true);\n }\n }\n if (!isNullOrUndefined(this.calendarElement) && !isNullOrUndefined(this.calendarElement.querySelectorAll(dateIdString)[0])) {\n if (this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled')) {\n if (!this.strictMode) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n }\n }\n var inputVal;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n globalize = this.globalize.formatDate(valueCopy, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n globalize = this.globalize.formatDate(valueCopy, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n });\n }\n inputVal = globalize;\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n inputVal = this.globalize.formatDate(valueCopy, formatOptions);\n }\n if (!this.popupObj) {\n this.updateInputValue(inputVal);\n if (this.enableMask) {\n this.updateInputValue(this.maskedDateValue);\n this.notify('createMask', {\n module: 'MaskedDateTime', isBlur: isBlur\n });\n }\n }\n };\n DatePicker.prototype.setAriaAttributes = function () {\n if (this.isCalendar()) {\n Input.addAttributes({ 'aria-expanded': 'true' }, this.inputElement);\n attributes(this.inputElement, { 'aria-owns': this.inputElement.id + '_options' });\n attributes(this.inputElement, { 'aria-controls': this.inputElement.id });\n if (this.value) {\n attributes(this.inputElement, { 'aria-activedescendant': '' + this.setActiveDescendant() });\n }\n }\n else {\n Input.addAttributes({ 'aria-expanded': 'false' }, this.inputElement);\n this.inputElement.removeAttribute('aria-owns');\n this.inputElement.removeAttribute('aria-controls');\n this.inputElement.removeAttribute('aria-activedescendant');\n }\n };\n DatePicker.prototype.errorClass = function () {\n var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + (+this.value));\n var isDisabledDate = this.calendarElement &&\n this.calendarElement.querySelectorAll(dateIdString)[0] &&\n this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled');\n if ((!isNullOrUndefined(this.value) && !isNullOrUndefined(this.min) &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n !isNullOrUndefined(this.max) && !(new Date(this.value).setMilliseconds(0) >= new Date(this.min).setMilliseconds(0)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n && new Date(this.value).setMilliseconds(0) <= new Date(this.max).setMilliseconds(0)))\n || (!this.strictMode && this.inputElement.value !== '' && this.inputElement.value !== this.maskedDateValue && isNullOrUndefined(this.value) || isDisabledDate)) {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n else if (!isNullOrUndefined(this.inputWrapper)) {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {DatePickerModel} newProp - Returns the dynamic property value of the component.\n * @param {DatePickerModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n DatePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n this.isDynamicValueChanged = true;\n this.isInteracted = false;\n this.invalidValueString = null;\n this.checkInvalidValue(newProp.value);\n newProp.value = this.value;\n this.previousElementValue = this.inputElement.value;\n if (isNullOrUndefined(this.value)) {\n if (this.enableMask) {\n this.updateInputValue(this.maskedDateValue);\n }\n else {\n this.updateInputValue('');\n }\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n this.updateInput(true);\n if (+this.previousDate !== +this.value) {\n this.changeTrigger(null);\n }\n this.isInteracted = true;\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'format':\n this.checkFormat();\n this.bindInputEvent();\n this.updateInput();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n if (!this.value) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n break;\n case 'allowEdit':\n this.setAllowEdit();\n break;\n case 'placeholder':\n Input.setPlaceholder(this.placeholder, this.inputElement);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.inputElement);\n this.setAriaDisabled();\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToElement();\n this.updateHtmlAttributeToWrapper();\n this.checkHtmlAttributes(true);\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n if (this.datepickerOptions && this.datepickerOptions.placeholder == null) {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n }\n this.updateInput();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'start':\n case 'depth':\n this.checkView();\n if (this.calendarElement) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n }\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n this.index = this.showClearButton ? 2 : 1;\n break;\n case 'strictMode':\n this.invalidValueString = null;\n this.updateInput();\n break;\n case 'width':\n this.setWidth(newProp.width);\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'enableMask':\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n this.updateInputValue(this.maskedDateValue);\n this.bindInputEvent();\n }\n else {\n if (this.inputElement.value === this.maskedDateValue) {\n this.updateInputValue('');\n }\n }\n break;\n default:\n if (this.calendarElement && this.isCalendar()) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n }\n break;\n }\n if (!this.isDynamicValueChanged) {\n this.hide(null);\n }\n this.isDynamicValueChanged = false;\n }\n };\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"fullScreenMode\", void 0);\n __decorate([\n Property({})\n ], DatePicker.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"values\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(1000)\n ], DatePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Never')\n ], DatePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"openOnFocus\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"enableMask\", void 0);\n __decorate([\n Property({ day: 'day', month: 'month', year: 'year', hour: 'hour', minute: 'minute', second: 'second', dayOfTheWeek: 'day of the week' })\n ], DatePicker.prototype, \"maskPlaceholder\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"cleared\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"destroyed\", void 0);\n DatePicker = __decorate([\n NotifyPropertyChanges\n ], DatePicker);\n return DatePicker;\n}(Calendar));\nexport { DatePicker };\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('CRow',[_c('CCol',[_c('div',{staticStyle:{\"width\":\"100%\",\"height\":\"80vh\"}},[_c('ejs-grid',{ref:\"grid\",attrs:{\"dataSource\":_vm.data,\"allowFiltering\":true,\"allowPaging\":true,\"allowResizing\":true,\"allowReordering\":true,\"allowSorting\":true,\"toolbar\":_vm.toolbar,\"pageSettings\":_vm.pageSettings,\"filterSettings\":_vm.filterOptions,\"toolbarClick\":_vm.toolbarClick,\"allowExcelExport\":true,\"excelExportComplete\":_vm.excelExportComplete,\"query\":_vm.query,\"actionBegin\":_vm.actionBegin,\"actionComplete\":_vm.actionComplete,\"actionFailure\":_vm.actionFailure,\"enablePersistence\":true,\"recordDoubleClick\":_vm.recordDoubleClick,\"width\":\"100%\",\"height\":\"100%\"}},[_c('e-columns',[_c('e-column',{attrs:{\"field\":\"clientId\",\"headerText\":\"Id\",\"isPrimaryKey\":true,\"visible\":true,\"width\":\"160\",\"type\":\"number\"}}),_c('e-column',{attrs:{\"field\":\"parentName\",\"headerText\":\"Client\",\"width\":\"270\",\"type\":\"string\"}}),_c('e-column',{attrs:{\"field\":\"clientName\",\"headerText\":\"Company\",\"width\":\"270\",\"type\":\"string\"}}),_c('e-column',{attrs:{\"field\":\"stateName\",\"headerText\":\"Country\",\"width\":\"150\",\"type\":\"string\"}}),_c('e-column',{attrs:{\"field\":\"sectorName\",\"headerText\":\"Classification\",\"width\":\"160\",\"type\":\"string\"}}),_c('e-column',{attrs:{\"field\":\"status\",\"headerText\":\"Status\",\"width\":\"120\",\"type\":\"string\"}})],1)],1)],1)])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Companies.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Companies.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Companies.vue?vue&type=template&id=f8144d72&scoped=true\"\nimport script from \"./Companies.vue?vue&type=script&lang=js\"\nexport * from \"./Companies.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"f8144d72\",\n null\n \n)\n\nexport default component.exports","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Deferred, Predicate, DataUtil } from '@syncfusion/ej2-data';\nimport { initForeignKeyColumn, getForeignKeyData, generateQuery } from '../base/constant';\nimport { getDatePredicate } from '../base/util';\nimport { Data } from './data';\nimport * as events from '../base/constant';\n/**\n * `ForeignKey` module is used to handle foreign key column's actions.\n */\nvar ForeignKey = /** @class */ (function (_super) {\n __extends(ForeignKey, _super);\n function ForeignKey(parent, serviceLocator) {\n var _this = _super.call(this, parent, serviceLocator) || this;\n _this.parent = parent;\n _this.serviceLocator = serviceLocator;\n _this.initEvent();\n return _this;\n }\n ForeignKey.prototype.initEvent = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(initForeignKeyColumn, this.initForeignKeyColumns, this);\n this.parent.on(getForeignKeyData, this.getForeignKeyData, this);\n this.parent.on(generateQuery, this.generateQueryFormData, this);\n };\n ForeignKey.prototype.initForeignKeyColumns = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n columns[parseInt(i.toString(), 10)].dataSource = (columns[parseInt(i.toString(), 10)].dataSource instanceof DataManager ?\n columns[parseInt(i.toString(), 10)].dataSource :\n (isNullOrUndefined(columns[parseInt(i.toString(), 10)].dataSource) ? new DataManager() :\n 'result' in columns[parseInt(i.toString(), 10)].dataSource ? columns[parseInt(i.toString(), 10)].dataSource :\n new DataManager(columns[parseInt(i.toString(), 10)].dataSource)));\n }\n };\n ForeignKey.prototype.eventfPromise = function (args, query, key, column) {\n var state = this.getStateEventArgument(query);\n var def = new Deferred();\n var deff = new Deferred();\n state.action = args.action;\n var dataModule = this.parent.getDataModule();\n if (!isNullOrUndefined(args.action) && args.action.requestType && dataModule.foreignKeyDataState.isDataChanged !== false) {\n dataModule.setForeignKeyDataState({\n isPending: true, resolver: deff.resolve\n });\n deff.promise.then(function () {\n def.resolve(column.dataSource);\n });\n state.setColumnData = this.parent.setForeignKeyData.bind(this.parent);\n this.parent.trigger(events.columnDataStateChange, state);\n }\n else {\n dataModule.setForeignKeyDataState({});\n def.resolve(key);\n }\n return def;\n };\n ForeignKey.prototype.getForeignKeyData = function (args) {\n var _this = this;\n var foreignColumns = args.column ? [args.column] : this.parent.getForeignKeyColumns();\n var allPromise = [];\n var _loop_1 = function (i) {\n var promise = void 0;\n var query = args.isComplex ? this_1.genarateColumnQuery(foreignColumns[parseInt(i.toString(), 10)]) :\n this_1.genarateQuery(foreignColumns[parseInt(i.toString(), 10)], args.result.result, false, true);\n query.params = this_1.parent.query.params;\n var dataSource = foreignColumns[parseInt(i.toString(), 10)].dataSource;\n if (dataSource && 'result' in dataSource) {\n var def = this_1.eventfPromise(args, query, dataSource, foreignColumns[parseInt(i.toString(), 10)]);\n promise = def.promise;\n }\n else if (!dataSource.ready || dataSource.dataSource.offline) {\n promise = dataSource.executeQuery(query);\n }\n else {\n promise = dataSource.ready.then(function () {\n return dataSource.executeQuery(query);\n });\n }\n allPromise.push(promise);\n };\n var this_1 = this;\n for (var i = 0; i < foreignColumns.length; i++) {\n _loop_1(i);\n }\n Promise.all(allPromise).then(function (responses) {\n for (var i = 0; i < responses.length; i++) {\n foreignColumns[parseInt(i.toString(), 10)].columnData = responses[parseInt(i.toString(), 10)].result;\n if (foreignColumns[parseInt(i.toString(), 10)].editType === 'dropdownedit' && 'result' in foreignColumns[parseInt(i.toString(), 10)].dataSource) {\n foreignColumns[parseInt(i.toString(), 10)].edit.params = extend(foreignColumns[parseInt(i.toString(), 10)]\n .edit.params, {\n dataSource: responses[parseInt(i.toString(), 10)].result,\n query: new Query(), fields: {\n value: foreignColumns[parseInt(i.toString(), 10)].foreignKeyField ||\n foreignColumns[parseInt(i.toString(), 10)].field,\n text: foreignColumns[parseInt(i.toString(), 10)].foreignKeyValue\n }\n });\n }\n }\n args.promise.resolve(args.result);\n }).catch(function (e) {\n _this.parent.log(['actionfailure', 'foreign_key_failure']);\n if (args.promise && args.promise.reject) {\n args.promise.reject(e);\n }\n return e;\n });\n };\n ForeignKey.prototype.generateQueryFormData = function (args) {\n args.predicate.predicate = this.genarateQuery(args.column, args.column.columnData, true);\n };\n ForeignKey.prototype.genarateQuery = function (column, e, fromData, needQuery) {\n var gObj = this.parent;\n var predicates = [];\n var query = new Query();\n var field = fromData ? column.foreignKeyField : column.field;\n if (gObj.allowPaging || gObj.enableVirtualization || fromData) {\n e = new DataManager(((gObj.allowGrouping && gObj.groupSettings.columns.length && !fromData) ?\n e.records : e)).executeLocal(new Query().select(field));\n var filteredValue = DataUtil.distinct(e, field, false);\n field = fromData ? column.field : column.foreignKeyField;\n for (var i = 0; i < filteredValue.length; i++) {\n if (filteredValue[parseInt(i.toString(), 10)] && filteredValue[parseInt(i.toString(), 10)].getDay) {\n predicates.push(getDatePredicate({ field: field, operator: 'equal', value: filteredValue[parseInt(i.toString(), 10)], matchCase: false }));\n }\n else {\n predicates.push(new Predicate(field, 'equal', filteredValue[parseInt(i.toString(), 10)], false));\n }\n }\n }\n if (needQuery) {\n return predicates.length ? query.where(Predicate.or(predicates)) : query;\n }\n return (predicates.length ? Predicate.or(predicates) : { predicates: [] });\n };\n ForeignKey.prototype.genarateColumnQuery = function (column) {\n var gObj = this.parent;\n var query = new Query();\n var queryColumn = this.isFiltered(column);\n if (queryColumn.isTrue) {\n query = this.filterQuery(query, queryColumn.column, true);\n }\n if (gObj.searchSettings.key.length) {\n var sSettings = gObj.searchSettings;\n if (column.dataSource instanceof DataManager && (column.dataSource.adaptor.getModuleName &&\n column.dataSource.adaptor.getModuleName() === 'ODataV4Adaptor')) {\n query = this.searchQuery(query, column, true);\n }\n else {\n query.search(sSettings.key, column.foreignKeyValue, sSettings.operator, sSettings.ignoreCase);\n }\n }\n return query;\n };\n ForeignKey.prototype.isFiltered = function (column) {\n var filterColumn = this.parent.filterSettings.columns.filter(function (fColumn) {\n return (fColumn.field === column.foreignKeyValue && fColumn.uid === column.uid);\n });\n return {\n column: filterColumn, isTrue: !!filterColumn.length\n };\n };\n ForeignKey.prototype.getModuleName = function () {\n return 'foreignKey';\n };\n ForeignKey.prototype.destroy = function () {\n this.destroyEvent();\n };\n ForeignKey.prototype.destroyEvent = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(initForeignKeyColumn, this.initForeignKeyColumns);\n this.parent.off(getForeignKeyData, this.getForeignKeyData);\n this.parent.off(generateQuery, this.generateQueryFormData);\n };\n return ForeignKey;\n}(Data));\nexport { ForeignKey };\n","/* eslint-disable */\nimport { Encoding } from '@syncfusion/ej2-file-utils';\n/**\n * array literal codes\n */\nvar ARR_LITERAL_CODES = new Int16Array(286);\nvar ARR_LITERAL_LENGTHS = new Uint8Array(286);\nvar ARR_DISTANCE_CODES = new Int16Array(30);\nvar ARR_DISTANCE_LENGTHS = new Uint8Array(30);\n/**\n * represent compression stream writer\n * ```typescript\n * let compressedWriter = new CompressedStreamWriter();\n * let text: string = 'Hello world!!!';\n * compressedWriter.write(text, 0, text.length);\n * compressedWriter.close();\n * ```\n */\nvar CompressedStreamWriter = /** @class */ (function () {\n /**\n * Initializes compressor and writes ZLib header if needed.\n * @param {boolean} noWrap - optional if true, ZLib header and checksum will not be written.\n */\n function CompressedStreamWriter(noWrap) {\n this.pendingBuffer = new Uint8Array(1 << 16);\n this.pendingBufLength = 0;\n this.pendingBufCache = 0;\n this.pendingBufBitsInCache = 0;\n this.bufferPosition = 0;\n this.extraBits = 0;\n this.currentHash = 0;\n this.matchStart = 0;\n this.matchLength = 0;\n this.matchPrevAvail = false;\n this.blockStart = 0;\n this.stringStart = 0;\n this.lookAhead = 0;\n this.totalBytesIn = 0;\n this.inputOffset = 0;\n this.inputEnd = 0;\n this.windowSize = 1 << 15;\n this.windowMask = this.windowSize - 1;\n this.hashSize = 1 << 15;\n this.hashMask = this.hashSize - 1;\n this.hashShift = Math.floor((15 + 3 - 1) / 3);\n this.maxDist = this.windowSize - 262;\n this.checkSum = 1;\n this.noWrap = false;\n if (!CompressedStreamWriter.isHuffmanTreeInitiated) {\n CompressedStreamWriter.initHuffmanTree();\n CompressedStreamWriter.isHuffmanTreeInitiated = true;\n }\n this.treeLiteral = new CompressorHuffmanTree(this, 286, 257, 15);\n this.treeDistances = new CompressorHuffmanTree(this, 30, 1, 15);\n this.treeCodeLengths = new CompressorHuffmanTree(this, 19, 4, 7);\n this.arrDistances = new Uint16Array((1 << 14));\n this.arrLiterals = new Uint8Array((1 << 14));\n this.stream = [];\n this.dataWindow = new Uint8Array(2 * this.windowSize);\n this.hashHead = new Int16Array(this.hashSize);\n this.hashPrevious = new Int16Array(this.windowSize);\n this.blockStart = this.stringStart = 1;\n this.noWrap = noWrap;\n if (!noWrap) {\n this.writeZLibHeader();\n }\n }\n Object.defineProperty(CompressedStreamWriter.prototype, \"compressedData\", {\n /**\n * get compressed data\n */\n get: function () {\n return this.stream;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CompressedStreamWriter.prototype, \"getCompressedString\", {\n get: function () {\n var compressedString = '';\n if (this.stream !== undefined) {\n for (var i = 0; i < this.stream.length; i++) {\n compressedString += String.fromCharCode.apply(null, this.stream[i]);\n }\n }\n return compressedString;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Compresses data and writes it to the stream.\n * @param {Uint8Array} data - data to compress\n * @param {number} offset - offset in data\n * @param {number} length - length of the data\n * @returns {void}\n */\n CompressedStreamWriter.prototype.write = function (data, offset, length) {\n if (data === undefined || data === null) {\n throw new Error('ArgumentException: data cannot null or undefined');\n }\n var end = offset + length;\n if (0 > offset || offset > end || end > data.length) {\n throw new Error('ArgumentOutOfRangeException: Offset or length is incorrect');\n }\n if (typeof data === 'string') {\n var encode = new Encoding(false);\n encode.type = 'Utf8';\n data = new Uint8Array(encode.getBytes(data, 0, data.length));\n end = offset + data.length;\n }\n this.inputBuffer = data;\n this.inputOffset = offset;\n this.inputEnd = end;\n if (!this.noWrap) {\n this.checkSum = ChecksumCalculator.checksumUpdate(this.checkSum, this.inputBuffer, this.inputOffset, end);\n }\n while (!(this.inputEnd === this.inputOffset) || !(this.pendingBufLength === 0)) {\n this.pendingBufferFlush();\n this.compressData(false);\n }\n };\n /**\n * write ZLib header to the compressed data\n * @return {void}\n */\n CompressedStreamWriter.prototype.writeZLibHeader = function () {\n /* Initialize header.*/\n var headerDate = (8 + (7 << 4)) << 8;\n /* Save compression level.*/\n headerDate |= ((5 >> 2) & 3) << 6;\n /* Align header.*/\n headerDate += 31 - (headerDate % 31);\n /* Write header to stream.*/\n this.pendingBufferWriteShortBytes(headerDate);\n };\n /**\n * Write Most Significant Bytes in to stream\n * @param {number} s - check sum value\n */\n CompressedStreamWriter.prototype.pendingBufferWriteShortBytes = function (s) {\n this.pendingBuffer[this.pendingBufLength++] = s >> 8;\n this.pendingBuffer[this.pendingBufLength++] = s;\n };\n CompressedStreamWriter.prototype.compressData = function (finish) {\n var success;\n do {\n this.fillWindow();\n var canFlush = (finish && this.inputEnd === this.inputOffset);\n success = this.compressSlow(canFlush, finish);\n } while (this.pendingBufLength === 0 && success);\n return success;\n };\n CompressedStreamWriter.prototype.compressSlow = function (flush, finish) {\n if (this.lookAhead < 262 && !flush) {\n return false;\n }\n while (this.lookAhead >= 262 || flush) {\n if (this.lookAhead === 0) {\n return this.lookAheadCompleted(finish);\n }\n if (this.stringStart >= 2 * this.windowSize - 262) {\n this.slideWindow();\n }\n var prevMatch = this.matchStart;\n var prevLen = this.matchLength;\n if (this.lookAhead >= 3) {\n this.discardMatch();\n }\n if (prevLen >= 3 && this.matchLength <= prevLen) {\n prevLen = this.matchPreviousBest(prevMatch, prevLen);\n }\n else {\n this.matchPreviousAvailable();\n }\n if (this.bufferPosition >= (1 << 14)) {\n return this.huffmanIsFull(finish);\n }\n }\n return true;\n };\n CompressedStreamWriter.prototype.discardMatch = function () {\n var hashHead = this.insertString();\n if (hashHead !== 0 && this.stringStart - hashHead <= this.maxDist && this.findLongestMatch(hashHead)) {\n if (this.matchLength <= 5 && (this.matchLength === 3 && this.stringStart - this.matchStart > 4096)) {\n this.matchLength = 3 - 1;\n }\n }\n };\n CompressedStreamWriter.prototype.matchPreviousAvailable = function () {\n if (this.matchPrevAvail) {\n this.huffmanTallyLit(this.dataWindow[this.stringStart - 1] & 0xff);\n }\n this.matchPrevAvail = true;\n this.stringStart++;\n this.lookAhead--;\n };\n CompressedStreamWriter.prototype.matchPreviousBest = function (prevMatch, prevLen) {\n this.huffmanTallyDist(this.stringStart - 1 - prevMatch, prevLen);\n prevLen -= 2;\n do {\n this.stringStart++;\n this.lookAhead--;\n if (this.lookAhead >= 3) {\n this.insertString();\n }\n } while (--prevLen > 0);\n this.stringStart++;\n this.lookAhead--;\n this.matchPrevAvail = false;\n this.matchLength = 3 - 1;\n return prevLen;\n };\n CompressedStreamWriter.prototype.lookAheadCompleted = function (finish) {\n if (this.matchPrevAvail) {\n this.huffmanTallyLit(this.dataWindow[this.stringStart - 1] & 0xff);\n }\n this.matchPrevAvail = false;\n this.huffmanFlushBlock(this.dataWindow, this.blockStart, this.stringStart - this.blockStart, finish);\n this.blockStart = this.stringStart;\n return false;\n };\n CompressedStreamWriter.prototype.huffmanIsFull = function (finish) {\n var len = this.stringStart - this.blockStart;\n if (this.matchPrevAvail) {\n len--;\n }\n var lastBlock = (finish && this.lookAhead === 0 && !this.matchPrevAvail);\n this.huffmanFlushBlock(this.dataWindow, this.blockStart, len, lastBlock);\n this.blockStart += len;\n return !lastBlock;\n };\n CompressedStreamWriter.prototype.fillWindow = function () {\n if (this.stringStart >= this.windowSize + this.maxDist) {\n this.slideWindow();\n }\n while (this.lookAhead < 262 && this.inputOffset < this.inputEnd) {\n var more = 2 * this.windowSize - this.lookAhead - this.stringStart;\n if (more > this.inputEnd - this.inputOffset) {\n more = this.inputEnd - this.inputOffset;\n }\n this.dataWindow.set(this.inputBuffer.subarray(this.inputOffset, this.inputOffset + more), this.stringStart + this.lookAhead);\n this.inputOffset += more;\n this.totalBytesIn += more;\n this.lookAhead += more;\n }\n if (this.lookAhead >= 3) {\n this.updateHash();\n }\n };\n CompressedStreamWriter.prototype.slideWindow = function () {\n this.dataWindow.set(this.dataWindow.subarray(this.windowSize, this.windowSize + this.windowSize), 0);\n this.matchStart -= this.windowSize;\n this.stringStart -= this.windowSize;\n this.blockStart -= this.windowSize;\n for (var i = 0; i < this.hashSize; ++i) {\n var m = this.hashHead[i] & 0xffff;\n this.hashHead[i] = (((m >= this.windowSize) ? (m - this.windowSize) : 0));\n }\n for (var i = 0; i < this.windowSize; i++) {\n var m = this.hashPrevious[i] & 0xffff;\n this.hashPrevious[i] = ((m >= this.windowSize) ? (m - this.windowSize) : 0);\n }\n };\n CompressedStreamWriter.prototype.insertString = function () {\n var match;\n var hash = ((this.currentHash << this.hashShift) ^ this.dataWindow[this.stringStart + (3 - 1)]) & this.hashMask;\n this.hashPrevious[this.stringStart & this.windowMask] = match = this.hashHead[hash];\n this.hashHead[hash] = this.stringStart;\n this.currentHash = hash;\n return match & 0xffff;\n };\n CompressedStreamWriter.prototype.findLongestMatch = function (curMatch) {\n var chainLen = 4096;\n var niceLen = 258;\n var scan = this.stringStart;\n var match;\n var bestEnd = this.stringStart + this.matchLength;\n var bestLength = Math.max(this.matchLength, 3 - 1);\n var limit = Math.max(this.stringStart - this.maxDist, 0);\n var stringEnd = this.stringStart + 258 - 1;\n var scanEnd1 = this.dataWindow[bestEnd - 1];\n var scanEnd = this.dataWindow[bestEnd];\n var data = this.dataWindow;\n if (bestLength >= 32) {\n chainLen >>= 2;\n }\n if (niceLen > this.lookAhead) {\n niceLen = this.lookAhead;\n }\n do {\n if (data[curMatch + bestLength] !== scanEnd ||\n data[curMatch + bestLength - 1] !== scanEnd1 ||\n data[curMatch] !== data[scan] ||\n data[curMatch + 1] !== data[scan + 1]) {\n continue;\n }\n match = curMatch + 2;\n scan += 2;\n /* tslint:disable */\n while (data[++scan] === data[++match] && data[++scan] === data[++match] &&\n data[++scan] === data[++match] && data[++scan] === data[++match] &&\n data[++scan] === data[++match] && data[++scan] === data[++match] &&\n data[++scan] === data[++match] && data[++scan] === data[++match] && scan < stringEnd) {\n /* tslint:disable */\n }\n if (scan > bestEnd) {\n this.matchStart = curMatch;\n bestEnd = scan;\n bestLength = scan - this.stringStart;\n if (bestLength >= niceLen) {\n break;\n }\n scanEnd1 = data[bestEnd - 1];\n scanEnd = data[bestEnd];\n }\n scan = this.stringStart;\n } while ((curMatch = (this.hashPrevious[curMatch & this.windowMask] & 0xffff)) > limit && --chainLen !== 0);\n this.matchLength = Math.min(bestLength, this.lookAhead);\n return this.matchLength >= 3;\n };\n CompressedStreamWriter.prototype.updateHash = function () {\n this.currentHash = (this.dataWindow[this.stringStart] << this.hashShift) ^ this.dataWindow[this.stringStart + 1];\n };\n CompressedStreamWriter.prototype.huffmanTallyLit = function (literal) {\n this.arrDistances[this.bufferPosition] = 0;\n this.arrLiterals[this.bufferPosition++] = literal;\n this.treeLiteral.codeFrequencies[literal]++;\n return this.bufferPosition >= (1 << 14);\n };\n CompressedStreamWriter.prototype.huffmanTallyDist = function (dist, len) {\n this.arrDistances[this.bufferPosition] = dist;\n this.arrLiterals[this.bufferPosition++] = (len - 3);\n var lc = this.huffmanLengthCode(len - 3);\n this.treeLiteral.codeFrequencies[lc]++;\n if (lc >= 265 && lc < 285) {\n this.extraBits += Math.floor((lc - 261) / 4);\n }\n var dc = this.huffmanDistanceCode(dist - 1);\n this.treeDistances.codeFrequencies[dc]++;\n if (dc >= 4) {\n this.extraBits += Math.floor((dc / 2 - 1));\n }\n return this.bufferPosition >= (1 << 14);\n };\n CompressedStreamWriter.prototype.huffmanFlushBlock = function (stored, storedOffset, storedLength, lastBlock) {\n this.treeLiteral.codeFrequencies[256]++;\n this.treeLiteral.buildTree();\n this.treeDistances.buildTree();\n this.treeLiteral.calculateBLFreq(this.treeCodeLengths);\n this.treeDistances.calculateBLFreq(this.treeCodeLengths);\n this.treeCodeLengths.buildTree();\n var blTreeCodes = 4;\n for (var i = 18; i > blTreeCodes; i--) {\n if (this.treeCodeLengths.codeLengths[CompressorHuffmanTree.huffCodeLengthOrders[i]] > 0) {\n blTreeCodes = i + 1;\n }\n }\n var opt_len = 14 + blTreeCodes * 3 + this.treeCodeLengths.getEncodedLength() +\n this.treeLiteral.getEncodedLength() + this.treeDistances.getEncodedLength() + this.extraBits;\n var static_len = this.extraBits;\n for (var i = 0; i < 286; i++) {\n static_len += this.treeLiteral.codeFrequencies[i] * ARR_LITERAL_LENGTHS[i];\n }\n for (var i = 0; i < 30; i++) {\n static_len += this.treeDistances.codeFrequencies[i] * ARR_DISTANCE_LENGTHS[i];\n }\n if (opt_len >= static_len) {\n // Force static trees.\n opt_len = static_len;\n }\n if (storedOffset >= 0 && storedLength + 4 < opt_len >> 3) {\n this.huffmanFlushStoredBlock(stored, storedOffset, storedLength, lastBlock);\n }\n else if (opt_len == static_len) {\n // Encode with static tree.\n this.pendingBufferWriteBits((1 << 1) + (lastBlock ? 1 : 0), 3);\n this.treeLiteral.setStaticCodes(ARR_LITERAL_CODES, ARR_LITERAL_LENGTHS);\n this.treeDistances.setStaticCodes(ARR_DISTANCE_CODES, ARR_DISTANCE_LENGTHS);\n this.huffmanCompressBlock();\n this.huffmanReset();\n }\n else {\n this.pendingBufferWriteBits((2 << 1) + (lastBlock ? 1 : 0), 3);\n this.huffmanSendAllTrees(blTreeCodes);\n this.huffmanCompressBlock();\n this.huffmanReset();\n }\n };\n CompressedStreamWriter.prototype.huffmanFlushStoredBlock = function (stored, storedOffset, storedLength, lastBlock) {\n this.pendingBufferWriteBits((0 << 1) + (lastBlock ? 1 : 0), 3);\n this.pendingBufferAlignToByte();\n this.pendingBufferWriteShort(storedLength);\n this.pendingBufferWriteShort(~storedLength);\n this.pendingBufferWriteByteBlock(stored, storedOffset, storedLength);\n this.huffmanReset();\n };\n CompressedStreamWriter.prototype.huffmanLengthCode = function (len) {\n if (len === 255) {\n return 285;\n }\n var code = 257;\n while (len >= 8) {\n code += 4;\n len >>= 1;\n }\n return code + len;\n };\n CompressedStreamWriter.prototype.huffmanDistanceCode = function (distance) {\n var code = 0;\n while (distance >= 4) {\n code += 2;\n distance >>= 1;\n }\n return code + distance;\n };\n CompressedStreamWriter.prototype.huffmanSendAllTrees = function (blTreeCodes) {\n this.treeCodeLengths.buildCodes();\n this.treeLiteral.buildCodes();\n this.treeDistances.buildCodes();\n this.pendingBufferWriteBits(this.treeLiteral.treeLength - 257, 5);\n this.pendingBufferWriteBits(this.treeDistances.treeLength - 1, 5);\n this.pendingBufferWriteBits(blTreeCodes - 4, 4);\n for (var rank = 0; rank < blTreeCodes; rank++) {\n this.pendingBufferWriteBits(this.treeCodeLengths.codeLengths[CompressorHuffmanTree.huffCodeLengthOrders[rank]], 3);\n }\n this.treeLiteral.writeTree(this.treeCodeLengths);\n this.treeDistances.writeTree(this.treeCodeLengths);\n };\n CompressedStreamWriter.prototype.huffmanReset = function () {\n this.bufferPosition = 0;\n this.extraBits = 0;\n this.treeLiteral.reset();\n this.treeDistances.reset();\n this.treeCodeLengths.reset();\n };\n CompressedStreamWriter.prototype.huffmanCompressBlock = function () {\n for (var i = 0; i < this.bufferPosition; i++) {\n var literalLen = this.arrLiterals[i] & 255;\n var dist = this.arrDistances[i];\n if (dist-- !== 0) {\n var lc = this.huffmanLengthCode(literalLen);\n this.treeLiteral.writeCodeToStream(lc);\n var bits = Math.floor((lc - 261) / 4);\n if (bits > 0 && bits <= 5) {\n this.pendingBufferWriteBits(literalLen & ((1 << bits) - 1), bits);\n }\n var dc = this.huffmanDistanceCode(dist);\n this.treeDistances.writeCodeToStream(dc);\n bits = Math.floor(dc / 2 - 1);\n if (bits > 0) {\n this.pendingBufferWriteBits(dist & ((1 << bits) - 1), bits);\n }\n }\n else {\n this.treeLiteral.writeCodeToStream(literalLen);\n }\n }\n this.treeLiteral.writeCodeToStream(256);\n };\n /**\n * write bits in to internal buffer\n * @param {number} b - source of bits\n * @param {number} count - count of bits to write\n */\n CompressedStreamWriter.prototype.pendingBufferWriteBits = function (b, count) {\n var uint = new Uint32Array(1);\n uint[0] = this.pendingBufCache | (b << this.pendingBufBitsInCache);\n this.pendingBufCache = uint[0];\n this.pendingBufBitsInCache += count;\n this.pendingBufferFlushBits();\n };\n CompressedStreamWriter.prototype.pendingBufferFlush = function (isClose) {\n this.pendingBufferFlushBits();\n if (this.pendingBufLength > 0) {\n var array = new Uint8Array(this.pendingBufLength);\n array.set(this.pendingBuffer.subarray(0, this.pendingBufLength), 0);\n this.stream.push(array);\n }\n this.pendingBufLength = 0;\n };\n CompressedStreamWriter.prototype.pendingBufferFlushBits = function () {\n var result = 0;\n while (this.pendingBufBitsInCache >= 8 && this.pendingBufLength < (1 << 16)) {\n this.pendingBuffer[this.pendingBufLength++] = this.pendingBufCache;\n this.pendingBufCache >>= 8;\n this.pendingBufBitsInCache -= 8;\n result++;\n }\n return result;\n };\n CompressedStreamWriter.prototype.pendingBufferWriteByteBlock = function (data, offset, length) {\n var array = data.subarray(offset, offset + length);\n this.pendingBuffer.set(array, this.pendingBufLength);\n this.pendingBufLength += length;\n };\n CompressedStreamWriter.prototype.pendingBufferWriteShort = function (s) {\n this.pendingBuffer[this.pendingBufLength++] = s;\n this.pendingBuffer[this.pendingBufLength++] = (s >> 8);\n };\n CompressedStreamWriter.prototype.pendingBufferAlignToByte = function () {\n if (this.pendingBufBitsInCache > 0) {\n this.pendingBuffer[this.pendingBufLength++] = this.pendingBufCache;\n }\n this.pendingBufCache = 0;\n this.pendingBufBitsInCache = 0;\n };\n /**\n * Huffman Tree literal calculation\n * @private\n */\n CompressedStreamWriter.initHuffmanTree = function () {\n var i = 0;\n while (i < 144) {\n ARR_LITERAL_CODES[i] = CompressorHuffmanTree.bitReverse((0x030 + i) << 8);\n ARR_LITERAL_LENGTHS[i++] = 8;\n }\n while (i < 256) {\n ARR_LITERAL_CODES[i] = CompressorHuffmanTree.bitReverse((0x190 - 144 + i) << 7);\n ARR_LITERAL_LENGTHS[i++] = 9;\n }\n while (i < 280) {\n ARR_LITERAL_CODES[i] = CompressorHuffmanTree.bitReverse((0x000 - 256 + i) << 9);\n ARR_LITERAL_LENGTHS[i++] = 7;\n }\n while (i < 286) {\n ARR_LITERAL_CODES[i] = CompressorHuffmanTree.bitReverse((0x0c0 - 280 + i) << 8);\n ARR_LITERAL_LENGTHS[i++] = 8;\n }\n for (i = 0; i < 30; i++) {\n ARR_DISTANCE_CODES[i] = CompressorHuffmanTree.bitReverse(i << 11);\n ARR_DISTANCE_LENGTHS[i] = 5;\n }\n };\n /**\n * close the stream and write all pending buffer in to stream\n * @returns {void}\n */\n CompressedStreamWriter.prototype.close = function () {\n do {\n this.pendingBufferFlush(true);\n if (!this.compressData(true)) {\n this.pendingBufferFlush(true);\n this.pendingBufferAlignToByte();\n if (!this.noWrap) {\n this.pendingBufferWriteShortBytes(this.checkSum >> 16);\n this.pendingBufferWriteShortBytes(this.checkSum & 0xffff);\n }\n this.pendingBufferFlush(true);\n }\n } while (!(this.inputEnd === this.inputOffset) ||\n !(this.pendingBufLength === 0));\n };\n /**\n * release allocated un-managed resource\n * @returns {void}\n */\n CompressedStreamWriter.prototype.destroy = function () {\n this.stream = [];\n this.stream = undefined;\n this.pendingBuffer = undefined;\n this.treeLiteral = undefined;\n this.treeDistances = undefined;\n this.treeCodeLengths = undefined;\n this.arrLiterals = undefined;\n this.arrDistances = undefined;\n this.hashHead = undefined;\n this.hashPrevious = undefined;\n this.dataWindow = undefined;\n this.inputBuffer = undefined;\n this.pendingBufLength = undefined;\n this.pendingBufCache = undefined;\n this.pendingBufBitsInCache = undefined;\n this.bufferPosition = undefined;\n this.extraBits = undefined;\n this.currentHash = undefined;\n this.matchStart = undefined;\n this.matchLength = undefined;\n this.matchPrevAvail = undefined;\n this.blockStart = undefined;\n this.stringStart = undefined;\n this.lookAhead = undefined;\n this.totalBytesIn = undefined;\n this.inputOffset = undefined;\n this.inputEnd = undefined;\n this.windowSize = undefined;\n this.windowMask = undefined;\n this.hashSize = undefined;\n this.hashMask = undefined;\n this.hashShift = undefined;\n this.maxDist = undefined;\n this.checkSum = undefined;\n this.noWrap = undefined;\n };\n CompressedStreamWriter.isHuffmanTreeInitiated = false;\n return CompressedStreamWriter;\n}());\nexport { CompressedStreamWriter };\n/**\n * represent the Huffman Tree\n */\nvar CompressorHuffmanTree = /** @class */ (function () {\n /**\n * Create new Huffman Tree\n * @param {CompressedStreamWriter} writer instance\n * @param {number} elementCount - element count\n * @param {number} minCodes - minimum count\n * @param {number} maxLength - maximum count\n */\n function CompressorHuffmanTree(writer, elementCount, minCodes, maxLength) {\n this.writer = writer;\n this.codeMinCount = minCodes;\n this.maxLength = maxLength;\n this.codeFrequency = new Uint16Array(elementCount);\n this.lengthCount = new Int32Array(maxLength);\n }\n Object.defineProperty(CompressorHuffmanTree.prototype, \"treeLength\", {\n get: function () {\n return this.codeCount;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CompressorHuffmanTree.prototype, \"codeLengths\", {\n get: function () {\n return this.codeLength;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CompressorHuffmanTree.prototype, \"codeFrequencies\", {\n get: function () {\n return this.codeFrequency;\n },\n enumerable: true,\n configurable: true\n });\n CompressorHuffmanTree.prototype.setStaticCodes = function (codes, lengths) {\n var temp = new Int16Array(codes.length);\n temp.set(codes, 0);\n this.codes = temp;\n var lengthTemp = new Uint8Array(lengths.length);\n lengthTemp.set(lengths, 0);\n this.codeLength = lengthTemp;\n };\n /**\n * reset all code data in tree\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.reset = function () {\n for (var i = 0; i < this.codeFrequency.length; i++) {\n this.codeFrequency[i] = 0;\n }\n this.codes = undefined;\n this.codeLength = undefined;\n };\n /**\n * write code to the compressor output stream\n * @param {number} code - code to be written\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.writeCodeToStream = function (code) {\n this.writer.pendingBufferWriteBits(this.codes[code] & 0xffff, this.codeLength[code]);\n };\n /**\n * calculate code from their frequencies\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.buildCodes = function () {\n var nextCode = new Int32Array(this.maxLength);\n this.codes = new Int16Array(this.codeCount);\n var code = 0;\n for (var bitsCount = 0; bitsCount < this.maxLength; bitsCount++) {\n nextCode[bitsCount] = code;\n code += this.lengthCount[bitsCount] << (15 - bitsCount);\n }\n for (var i = 0; i < this.codeCount; i++) {\n var bits = this.codeLength[i];\n if (bits > 0) {\n this.codes[i] = CompressorHuffmanTree.bitReverse(nextCode[bits - 1]);\n nextCode[bits - 1] += 1 << (16 - bits);\n }\n }\n };\n CompressorHuffmanTree.bitReverse = function (value) {\n return (CompressorHuffmanTree.reverseBits[value & 15] << 12\n | CompressorHuffmanTree.reverseBits[(value >> 4) & 15] << 8\n | CompressorHuffmanTree.reverseBits[(value >> 8) & 15] << 4\n | CompressorHuffmanTree.reverseBits[value >> 12]);\n };\n /**\n * calculate length of compressed data\n * @returns {number}\n */\n CompressorHuffmanTree.prototype.getEncodedLength = function () {\n var len = 0;\n for (var i = 0; i < this.codeFrequency.length; i++) {\n len += this.codeFrequency[i] * this.codeLength[i];\n }\n return len;\n };\n /**\n * calculate code frequencies\n * @param {CompressorHuffmanTree} blTree\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.calculateBLFreq = function (blTree) {\n var maxCount;\n var minCount;\n var count;\n var curLen = -1;\n var i = 0;\n while (i < this.codeCount) {\n count = 1;\n var nextLen = this.codeLength[i];\n if (nextLen === 0) {\n maxCount = 138;\n minCount = 3;\n }\n else {\n maxCount = 6;\n minCount = 3;\n if (curLen !== nextLen) {\n blTree.codeFrequency[nextLen]++;\n count = 0;\n }\n }\n curLen = nextLen;\n i++;\n while (i < this.codeCount && curLen === this.codeLength[i]) {\n i++;\n if (++count >= maxCount) {\n break;\n }\n }\n if (count < minCount) {\n blTree.codeFrequency[curLen] += count;\n }\n else if (curLen !== 0) {\n blTree.codeFrequency[16]++;\n }\n else if (count <= 10) {\n blTree.codeFrequency[17]++;\n }\n else {\n blTree.codeFrequency[18]++;\n }\n }\n };\n /**\n * @param {CompressorHuffmanTree} blTree - write tree to output stream\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.writeTree = function (blTree) {\n var maxRepeatCount;\n var minRepeatCount;\n var currentRepeatCount;\n var currentCodeLength = -1;\n var i = 0;\n while (i < this.codeCount) {\n currentRepeatCount = 1;\n var nextLen = this.codeLength[i];\n if (nextLen === 0) {\n maxRepeatCount = 138;\n minRepeatCount = 3;\n }\n else {\n maxRepeatCount = 6;\n minRepeatCount = 3;\n if (currentCodeLength !== nextLen) {\n blTree.writeCodeToStream(nextLen);\n currentRepeatCount = 0;\n }\n }\n currentCodeLength = nextLen;\n i++;\n while (i < this.codeCount && currentCodeLength === this.codeLength[i]) {\n i++;\n if (++currentRepeatCount >= maxRepeatCount) {\n break;\n }\n }\n if (currentRepeatCount < minRepeatCount) {\n while (currentRepeatCount-- > 0) {\n blTree.writeCodeToStream(currentCodeLength);\n }\n }\n else if (currentCodeLength !== 0) {\n blTree.writeCodeToStream(16);\n this.writer.pendingBufferWriteBits(currentRepeatCount - 3, 2);\n }\n else if (currentRepeatCount <= 10) {\n blTree.writeCodeToStream(17);\n this.writer.pendingBufferWriteBits(currentRepeatCount - 3, 3);\n }\n else {\n blTree.writeCodeToStream(18);\n this.writer.pendingBufferWriteBits(currentRepeatCount - 11, 7);\n }\n }\n };\n /**\n * Build huffman tree\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.buildTree = function () {\n var codesCount = this.codeFrequency.length;\n var arrTree = new Int32Array(codesCount);\n var treeLength = 0;\n var maxCount = 0;\n for (var n = 0; n < codesCount; n++) {\n var freq = this.codeFrequency[n];\n if (freq !== 0) {\n var pos = treeLength++;\n var pPos = 0;\n while (pos > 0 && this.codeFrequency[arrTree[pPos = Math.floor((pos - 1) / 2)]] > freq) {\n arrTree[pos] = arrTree[pPos];\n pos = pPos;\n }\n arrTree[pos] = n;\n maxCount = n;\n }\n }\n while (treeLength < 2) {\n arrTree[treeLength++] =\n (maxCount < 2) ? ++maxCount : 0;\n }\n this.codeCount = Math.max(maxCount + 1, this.codeMinCount);\n var leafsCount = treeLength;\n var nodesCount = leafsCount;\n var child = new Int32Array(4 * treeLength - 2);\n var values = new Int32Array(2 * treeLength - 1);\n for (var i = 0; i < treeLength; i++) {\n var node = arrTree[i];\n var iIndex = 2 * i;\n child[iIndex] = node;\n child[iIndex + 1] = -1;\n values[i] = (this.codeFrequency[node] << 8);\n arrTree[i] = i;\n }\n this.constructHuffmanTree(arrTree, treeLength, values, nodesCount, child);\n this.buildLength(child);\n };\n CompressorHuffmanTree.prototype.constructHuffmanTree = function (arrTree, treeLength, values, nodesCount, child) {\n do {\n var first = arrTree[0];\n var last = arrTree[--treeLength];\n var lastVal = values[last];\n var pPos = 0;\n var path = 1;\n while (path < treeLength) {\n if (path + 1 < treeLength && values[arrTree[path]] > values[arrTree[path + 1]]) {\n path++;\n }\n arrTree[pPos] = arrTree[path];\n pPos = path;\n path = pPos * 2 + 1;\n }\n while ((path = pPos) > 0 && values[arrTree[pPos = Math.floor((path - 1) / 2)]] > lastVal) {\n arrTree[path] = arrTree[pPos];\n }\n arrTree[path] = last;\n var second = arrTree[0];\n last = nodesCount++;\n child[2 * last] = first;\n child[2 * last + 1] = second;\n var minDepth = Math.min(values[first] & 0xff, values[second] & 0xff);\n values[last] = lastVal = values[first] + values[second] - minDepth + 1;\n pPos = 0;\n path = 1;\n /* tslint:disable */\n while (path < treeLength) {\n if (path + 1 < treeLength && values[arrTree[path]] > values[arrTree[path + 1]]) {\n path++;\n }\n arrTree[pPos] = arrTree[path];\n pPos = path;\n path = pPos * 2 + 1;\n } /* tslint:disable */\n while ((path = pPos) > 0 && values[arrTree[pPos = Math.floor((path - 1) / 2)]] > lastVal) {\n arrTree[path] = arrTree[pPos];\n }\n arrTree[path] = last;\n } while (treeLength > 1);\n };\n CompressorHuffmanTree.prototype.buildLength = function (child) {\n this.codeLength = new Uint8Array(this.codeFrequency.length);\n var numNodes = Math.floor(child.length / 2);\n var numLeafs = Math.floor((numNodes + 1) / 2);\n var overflow = 0;\n for (var i = 0; i < this.maxLength; i++) {\n this.lengthCount[i] = 0;\n }\n overflow = this.calculateOptimalCodeLength(child, overflow, numNodes);\n if (overflow === 0) {\n return;\n }\n var iIncreasableLength = this.maxLength - 1;\n do {\n while (this.lengthCount[--iIncreasableLength] === 0) {\n /* tslint:disable */\n }\n do {\n this.lengthCount[iIncreasableLength]--;\n this.lengthCount[++iIncreasableLength]++;\n overflow -= (1 << (this.maxLength - 1 - iIncreasableLength));\n } while (overflow > 0 && iIncreasableLength < this.maxLength - 1);\n } while (overflow > 0);\n this.recreateTree(child, overflow, numLeafs);\n };\n CompressorHuffmanTree.prototype.recreateTree = function (child, overflow, numLeafs) {\n this.lengthCount[this.maxLength - 1] += overflow;\n this.lengthCount[this.maxLength - 2] -= overflow;\n var nodePtr = 2 * numLeafs;\n for (var bits = this.maxLength; bits !== 0; bits--) {\n var n = this.lengthCount[bits - 1];\n while (n > 0) {\n var childPtr = 2 * child[nodePtr++];\n if (child[childPtr + 1] === -1) {\n this.codeLength[child[childPtr]] = bits;\n n--;\n }\n }\n }\n };\n CompressorHuffmanTree.prototype.calculateOptimalCodeLength = function (child, overflow, numNodes) {\n var lengths = new Int32Array(numNodes);\n lengths[numNodes - 1] = 0;\n for (var i = numNodes - 1; i >= 0; i--) {\n var childIndex = 2 * i + 1;\n if (child[childIndex] !== -1) {\n var bitLength = lengths[i] + 1;\n if (bitLength > this.maxLength) {\n bitLength = this.maxLength;\n overflow++;\n }\n lengths[child[childIndex - 1]] = lengths[child[childIndex]] = bitLength;\n }\n else {\n var bitLength = lengths[i];\n this.lengthCount[bitLength - 1]++;\n this.codeLength[child[childIndex - 1]] = lengths[i];\n }\n }\n return overflow;\n };\n CompressorHuffmanTree.reverseBits = [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15];\n CompressorHuffmanTree.huffCodeLengthOrders = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n return CompressorHuffmanTree;\n}());\nexport { CompressorHuffmanTree };\n/**\n * Checksum calculator, based on Adler32 algorithm.\n */\nvar ChecksumCalculator = /** @class */ (function () {\n function ChecksumCalculator() {\n }\n /**\n * Updates checksum by calculating checksum of the\n * given buffer and adding it to current value.\n * @param {number} checksum - current checksum.\n * @param {Uint8Array} buffer - data byte array.\n * @param {number} offset - offset in the buffer.\n * @param {number} length - length of data to be used from the stream.\n * @returns {number}\n */\n ChecksumCalculator.checksumUpdate = function (checksum, buffer, offset, length) {\n var uint = new Uint32Array(1);\n uint[0] = checksum;\n var checksum_uint = uint[0];\n var s1 = uint[0] = checksum_uint & 65535;\n var s2 = uint[0] = checksum_uint >> ChecksumCalculator.checkSumBitOffset;\n while (length > 0) {\n var steps = Math.min(length, ChecksumCalculator.checksumIterationCount);\n length -= steps;\n while (--steps >= 0) {\n s1 = s1 + (uint[0] = (buffer[offset++] & 255));\n s2 = s2 + s1;\n }\n s1 %= ChecksumCalculator.checksumBase;\n s2 %= ChecksumCalculator.checksumBase;\n }\n checksum_uint = (s2 << ChecksumCalculator.checkSumBitOffset) | s1;\n return checksum_uint;\n };\n ChecksumCalculator.checkSumBitOffset = 16;\n ChecksumCalculator.checksumBase = 65521;\n ChecksumCalculator.checksumIterationCount = 3800;\n return ChecksumCalculator;\n}());\nexport { ChecksumCalculator };\n/* eslint-enable */ \n","import urls from './urls'\r\nimport authToken from './authToken';\r\nimport { DataManager, WebApiAdaptor } from \"@syncfusion/ej2-data\";\r\nimport apis from './network'\r\nimport logger from './logger'\r\nimport rules from './permissions'\r\nimport checkUIPermissions from './UIPermissions'\r\n\r\nclass CustomWebApiAdaptor extends WebApiAdaptor {\r\n beforeSend(dm, xhttp, p3) {\r\n\r\n const originalFail = p3.onFailure;\r\n\r\n p3.onFailure = function (err) {\r\n if (err.status === 401) {\r\n const token = authToken.get();\r\n if (token) {\r\n logger.log(\"trying token refresh...\", err);\r\n apis.unprotectedApi.put(\r\n \"/auth\",\r\n {\r\n Token: token\r\n }\r\n ).then((r) => r.data).then((resp) => { \r\n authToken.set(resp.token || resp.Token);\r\n rules.getPermissions(resp.token || resp.Token);\r\n checkUIPermissions();\r\n logger.log(\"refreshed\");\r\n }).catch((err) => {\r\n logger.log(\"refresh token failed\", err)\r\n //navigate to login - some questions asked\r\n apis.navigateToLogin(window.location.pathname);\r\n });\r\n } else {\r\n logger.log(\"No token to refresh...\", err)\r\n apis.navigateToLogin(window.location.pathname);\r\n }\r\n }\r\n\r\n if (originalFail && typeof (originalFail) === \"function\") {\r\n try {\r\n originalFail(err);\r\n } catch (e) {\r\n logger.log(\"original error handler failed\", err);\r\n logger.log(\"new error\", e);\r\n }\r\n \r\n }\r\n }\r\n\r\n super.beforeSend(dm, xhttp, p3);\r\n }\r\n}\r\n\r\nconst SyncHelper = {\r\n getDataManager: (relativePath, queryString) => {\r\n return new DataManager({\r\n url: `${urls.apiBaseUrl}${relativePath}${(queryString ? ('?' + queryString) : '')}`,\r\n adaptor: new CustomWebApiAdaptor,\r\n crossDomain: true,\r\n headers: [{ Authorization: `Bearer ${authToken.get()}`}]\r\n });\r\n }\r\n};\r\n\r\nexport default SyncHelper;","import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { Query, DataManager, Predicate, Deferred, UrlAdaptor, RemoteSaveAdaptor } from '@syncfusion/ej2-data';\nimport { setFormatter, isGroupAdaptive, getColumnByForeignKeyValue, refreshFilteredColsUid } from '../base/util';\nimport * as events from '../base/constant';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { CheckBoxFilterBase } from '../common/checkbox-filter-base';\n/**\n * Grid data module is used to generate query and data source.\n *\n * @hidden\n */\nvar Data = /** @class */ (function () {\n /**\n * Constructor for data module.\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {ServiceLocator} serviceLocator - specifies the service locator\n * @hidden\n */\n function Data(parent, serviceLocator) {\n this.dataState = { isPending: false, resolver: null, group: [] };\n this.foreignKeyDataState = { isPending: false, resolver: null };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.initDataManager();\n if (this.parent.isDestroyed || this.getModuleName() === 'foreignKey') {\n return;\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 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 Data.prototype.getModuleName = function () {\n return 'data';\n };\n /**\n * The function used to initialize dataManager and external query\n *\n * @returns {void}\n */\n Data.prototype.initDataManager = function () {\n var gObj = this.parent;\n this.dataManager = gObj.dataSource instanceof DataManager ? gObj.dataSource :\n (isNullOrUndefined(gObj.dataSource) ? new DataManager() : new DataManager(gObj.dataSource));\n if (gObj.isAngular && !(gObj.query instanceof Query)) {\n gObj.setProperties({ query: new Query() }, true);\n }\n else {\n this.isQueryInvokedFromData = true;\n if (gObj.isVue) {\n gObj.setProperties({ query: gObj.query instanceof Query ? gObj.query : new Query() }, true);\n }\n else {\n gObj.query = gObj.query instanceof Query ? gObj.query : new Query();\n }\n }\n };\n /**\n * The function is used to generate updated Query from Grid model.\n *\n * @param {boolean} skipPage - specifies the boolean to skip the page\n * @param {boolean} isAutoCompleteCall - specifies for auto complete call\n * @returns {Query} returns the Query\n * @hidden\n */\n Data.prototype.generateQuery = function (skipPage, isAutoCompleteCall) {\n var gObj = this.parent;\n var query = gObj.getQuery().clone();\n if (this.parent.columnQueryMode === 'ExcludeHidden') {\n query.select(this.parent.getColumns().filter(function (column) { return !(column.isPrimaryKey !== true && column.visible === false || column.field === undefined); }).map(function (column) { return column.field; }));\n }\n else if (this.parent.columnQueryMode === 'Schema') {\n var selectQueryFields = [];\n var columns = this.parent.columns;\n for (var i = 0; i < columns.length; i++) {\n selectQueryFields.push(columns[parseInt(i.toString(), 10)].field);\n }\n query.select(selectQueryFields);\n }\n this.filterQuery(query);\n this.searchQuery(query);\n this.aggregateQuery(query);\n this.sortQuery(query);\n if (isGroupAdaptive(this.parent)) {\n this.virtualGroupPageQuery(query);\n }\n else {\n this.pageQuery(query, skipPage);\n }\n if (isNullOrUndefined(isAutoCompleteCall) || !isAutoCompleteCall) {\n this.groupQuery(query);\n }\n return query;\n };\n /**\n * @param {Query} query - specifies the query\n * @returns {Query} - returns the query\n * @hidden\n */\n Data.prototype.aggregateQuery = function (query) {\n var rows = this.parent.aggregates;\n for (var i = 0; i < rows.length; i++) {\n var row = rows[parseInt(i.toString(), 10)];\n for (var j = 0; j < row.columns.length; j++) {\n var cols = row.columns[parseInt(j.toString(), 10)];\n var types = cols.type instanceof Array ? cols.type : [cols.type];\n for (var k = 0; k < types.length; k++) {\n query.aggregate(types[parseInt(k.toString(), 10)].toLowerCase(), cols.field);\n }\n }\n }\n return query;\n };\n Data.prototype.virtualGroupPageQuery = function (query) {\n var fName = 'fn';\n if (query.queries.length) {\n for (var i = 0; i < query.queries.length; i++) {\n if (query.queries[parseInt(i.toString(), 10)][\"\" + fName] === 'onPage') {\n query.queries.splice(i, 1);\n }\n }\n }\n return query;\n };\n Data.prototype.pageQuery = function (query, skipPage) {\n var gObj = this.parent;\n var fName = 'fn';\n var args = { query: query, skipPage: false };\n gObj.notify(events.setVirtualPageQuery, args);\n if (args.skipPage) {\n return query;\n }\n if ((gObj.allowPaging || gObj.enableVirtualization || gObj.enableInfiniteScrolling) && skipPage !== true) {\n gObj.pageSettings.currentPage = Math.max(1, gObj.pageSettings.currentPage);\n if (gObj.pageSettings.pageCount <= 0) {\n gObj.pageSettings.pageCount = 8;\n }\n if (gObj.pageSettings.pageSize <= 0) {\n gObj.pageSettings.pageSize = 12;\n }\n if (query.queries.length) {\n for (var i = 0; i < query.queries.length; i++) {\n if (query.queries[parseInt(i.toString(), 10)][\"\" + fName] === 'onPage') {\n query.queries.splice(i, 1);\n }\n }\n }\n if (!isNullOrUndefined(gObj.infiniteScrollModule) && gObj.enableInfiniteScrolling) {\n this.parent.notify(events.infinitePageQuery, query);\n }\n else {\n query.page(gObj.pageSettings.currentPage, gObj.allowPaging && gObj.pagerModule &&\n (gObj.pagerModule.pagerObj.isAllPage && !gObj.isManualRefresh) &&\n (!this.dataManager.dataSource.offline && !(this.dataManager.adaptor instanceof RemoteSaveAdaptor)) ?\n null : gObj.pageSettings.pageSize);\n }\n }\n return query;\n };\n Data.prototype.groupQuery = function (query) {\n var gObj = this.parent;\n if (gObj.allowGrouping && gObj.groupSettings.columns.length) {\n if (this.parent.groupSettings.enableLazyLoading) {\n query.lazyLoad.push({ key: 'isLazyLoad', value: this.parent.groupSettings.enableLazyLoading });\n }\n var columns = gObj.groupSettings.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n var column = this.getColumnByField(columns[parseInt(i.toString(), 10)]);\n if (!column) {\n this.parent.log('initial_action', { moduleName: 'group', columnName: columns[parseInt(i.toString(), 10)] });\n }\n var isGrpFmt = column.enableGroupByFormat;\n var format = column.format;\n if (isGrpFmt) {\n query.group(columns[parseInt(i.toString(), 10)], this.formatGroupColumn.bind(this), format);\n }\n else {\n query.group(columns[parseInt(i.toString(), 10)], null);\n }\n }\n }\n return query;\n };\n Data.prototype.sortQuery = function (query) {\n var gObj = this.parent;\n if ((gObj.allowSorting || gObj.allowGrouping) && gObj.sortSettings.columns.length) {\n var columns = gObj.sortSettings.columns;\n var sortGrp = [];\n for (var i = columns.length - 1; i > -1; i--) {\n var col = this.getColumnByField(columns[parseInt(i.toString(), 10)].field);\n if (col) {\n col.setSortDirection(columns[parseInt(i.toString(), 10)].direction);\n }\n else {\n this.parent.log('initial_action', { moduleName: 'sort', columnName: columns[parseInt(i.toString(), 10)].field });\n return query;\n }\n var fn = columns[parseInt(i.toString(), 10)].direction;\n if (col.sortComparer) {\n this.parent.log('grid_sort_comparer');\n fn = !this.isRemote() ? col.sortComparer.bind(col) : columns[parseInt(i.toString(), 10)].direction;\n }\n if (gObj.groupSettings.columns.indexOf(columns[parseInt(i.toString(), 10)].field) === -1) {\n if (col.isForeignColumn() || col.sortComparer) {\n query.sortByForeignKey(col.field, fn, undefined, columns[parseInt(i.toString(), 10)].direction.toLowerCase());\n }\n else {\n query.sortBy(col.field, fn);\n }\n }\n else {\n sortGrp.push({ direction: fn, field: col.field });\n }\n }\n for (var i = 0, len = sortGrp.length; i < len; i++) {\n if (typeof sortGrp[parseInt(i.toString(), 10)].direction === 'string') {\n query.sortBy(sortGrp[parseInt(i.toString(), 10)].field, sortGrp[parseInt(i.toString(), 10)].direction);\n }\n else {\n var col = this.getColumnByField(sortGrp[parseInt(i.toString(), 10)].field);\n query.sortByForeignKey(sortGrp[parseInt(i.toString(), 10)].field, sortGrp[parseInt(i.toString(), 10)].direction, undefined, col.getSortDirection().toLowerCase());\n }\n }\n }\n return query;\n };\n Data.prototype.searchQuery = function (query, fcolumn, isForeignKey) {\n var sSettings = this.parent.searchSettings;\n var fields = sSettings.fields.length ? sSettings.fields : this.getSearchColumnFieldNames();\n var predicateList = [];\n var needForeignKeySearch = false;\n if (this.parent.searchSettings.key.length) {\n needForeignKeySearch = this.parent.getForeignKeyColumns().some(function (col) { return fields.indexOf(col.field) > -1; });\n var adaptor = !isForeignKey ? this.dataManager.adaptor : fcolumn.dataSource.adaptor;\n if (needForeignKeySearch || (adaptor.getModuleName &&\n adaptor.getModuleName() === 'ODataV4Adaptor')) {\n fields = isForeignKey ? [fcolumn.foreignKeyValue] : fields;\n for (var i = 0; i < fields.length; i++) {\n var column = isForeignKey ? fcolumn : this.getColumnByField(fields[parseInt(i.toString(), 10)]);\n if (column.isForeignColumn() && !isForeignKey) {\n predicateList = this.fGeneratePredicate(column, predicateList);\n }\n else {\n predicateList.push(new Predicate(fields[parseInt(i.toString(), 10)], sSettings.operator, sSettings.key, sSettings.ignoreCase, sSettings.ignoreAccent));\n }\n }\n var predList = Predicate.or(predicateList);\n predList.key = sSettings.key;\n query.where(predList);\n }\n else {\n query.search(sSettings.key, fields, sSettings.operator, sSettings.ignoreCase, sSettings.ignoreAccent);\n }\n }\n return query;\n };\n Data.prototype.filterQuery = function (query, column, skipFoerign) {\n var gObj = this.parent;\n var predicateList = [];\n var actualFilter = [];\n var foreignColumn = this.parent.getForeignKeyColumns();\n var foreignColEmpty;\n if (gObj.allowFiltering && gObj.filterSettings.columns.length) {\n var columns = column ? column : gObj.filterSettings.columns;\n var colType = {};\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 var foreignCols = [];\n var defaultFltrCols = [];\n for (var _b = 0, columns_1 = columns; _b < columns_1.length; _b++) {\n var col = columns_1[_b];\n var gridColumn = col.isForeignKey ? gObj.getColumnByUid(col.uid) : gObj.getColumnByField(col.field);\n if (isNullOrUndefined(col.type) && gridColumn && (gridColumn.type === 'date' || gridColumn.type === 'datetime' || gridColumn.type === 'dateonly')) {\n col.type = col.isForeignKey ? gObj.getColumnByUid(col.uid).type : gObj.getColumnByField(col.field).type;\n }\n if (col.isForeignKey) {\n foreignCols.push(col);\n }\n else {\n defaultFltrCols.push(col);\n }\n }\n if (defaultFltrCols.length) {\n for (var i = 0, len = defaultFltrCols.length; i < len; i++) {\n defaultFltrCols[parseInt(i.toString(), 10)].uid = defaultFltrCols[parseInt(i.toString(), 10)].uid ||\n this.parent.grabColumnByFieldFromAllCols(defaultFltrCols[parseInt(i.toString(), 10)].field, defaultFltrCols[parseInt(i.toString(), 10)].isForeignKey).uid;\n }\n var excelPredicate = CheckBoxFilterBase.getPredicate(defaultFltrCols);\n for (var _c = 0, _d = Object.keys(excelPredicate); _c < _d.length; _c++) {\n var prop = _d[_c];\n predicateList.push(excelPredicate[\"\" + prop]);\n }\n }\n if (foreignCols.length) {\n for (var _e = 0, foreignCols_1 = foreignCols; _e < foreignCols_1.length; _e++) {\n var col = foreignCols_1[_e];\n col.uid = col.uid || this.parent.grabColumnByFieldFromAllCols(col.field, col.isForeignKey).uid;\n var column_1 = this.parent.grabColumnByUidFromAllCols(col.uid);\n if (!column_1) {\n this.parent.log('initial_action', { moduleName: 'filter', columnName: col.field });\n }\n if (column_1.isForeignColumn() && getColumnByForeignKeyValue(col.field, foreignColumn) && !skipFoerign) {\n actualFilter.push(col);\n if (!column_1.columnData.length) {\n foreignColEmpty = true;\n }\n predicateList = this.fGeneratePredicate(column_1, predicateList);\n }\n else {\n var excelPredicate = CheckBoxFilterBase.getPredicate(columns);\n for (var _f = 0, _g = Object.keys(excelPredicate); _f < _g.length; _f++) {\n var prop = _g[_f];\n predicateList.push(excelPredicate[\"\" + prop]);\n }\n }\n }\n }\n if (predicateList.length && !foreignColEmpty) {\n query.where(Predicate.and(predicateList));\n }\n else {\n this.parent.notify(events.showEmptyGrid, {});\n }\n }\n return query;\n };\n Data.prototype.fGeneratePredicate = function (col, predicateList) {\n var fPredicate = {};\n if (col) {\n this.parent.notify(events.generateQuery, { predicate: fPredicate, column: col });\n if (fPredicate.predicate.predicates.length) {\n predicateList.push(fPredicate.predicate);\n }\n }\n return predicateList;\n };\n /**\n * The function is used to get dataManager promise by executing given Query.\n *\n * @param {object} args - specifies the object\n * @param {string} args.requestType - Defines the request type\n * @param {string[]} args.foreignKeyData - Defines the foreignKeyData.string\n * @param {Object} args.data - Defines the data.\n * @param {number} args.index - Defines the index .\n * @param {Query} query - Defines the query which will execute along with data processing.\n * @returns {Promise} - returns the object\n * @hidden\n */\n Data.prototype.getData = function (args, query) {\n var _this = this;\n if (args === void 0) { args = { requestType: '' }; }\n var key = this.getKey(args.foreignKeyData &&\n Object.keys(args.foreignKeyData).length ?\n args.foreignKeyData : this.parent.getPrimaryKeyFieldNames());\n this.parent.log('datasource_syntax_mismatch', { dataState: this.parent });\n if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n var def = this.eventPromise(args, query, key);\n return def.promise;\n }\n else {\n var crud = void 0;\n switch (args.requestType) {\n case 'delete':\n query = query ? query : this.generateQuery();\n // eslint-disable-next-line no-case-declarations\n var len = Object.keys(args.data).length;\n if (len === 1) {\n crud = this.dataManager.remove(key, args.data[0], query.fromTable, query);\n }\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 break;\n case 'save':\n query = query ? query : this.generateQuery();\n args.index = isNullOrUndefined(args.index) ? 0 : args.index;\n crud = this.dataManager.insert(args.data, query.fromTable, query, args.index);\n break;\n }\n var promise = 'promise';\n args[\"\" + promise] = crud;\n // eslint-disable-next-line no-prototype-builtins\n if (crud && !Array.isArray(crud) && !crud.hasOwnProperty('deletedRecords')) {\n return crud.then(function () {\n return _this.insert(query, args);\n });\n }\n else {\n return this.insert(query, args);\n }\n }\n };\n Data.prototype.insert = function (query, args) {\n if (args.requestType === 'save') {\n this.parent.notify(events.recordAdded, args);\n }\n return this.executeQuery(query);\n };\n Data.prototype.executeQuery = function (query) {\n var _this = this;\n if (this.dataManager.ready) {\n var deferred_1 = new Deferred();\n var ready = this.dataManager.ready;\n ready.then(function () {\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 }\n else {\n return this.dataManager.executeQuery(query);\n }\n };\n Data.prototype.formatGroupColumn = function (value, field) {\n var serviceLocator = this.serviceLocator;\n var column = this.getColumnByField(field);\n var date = value;\n if (!column.type) {\n column.type = date.getDay ? (date.getHours() > 0 || date.getMinutes() > 0 ||\n date.getSeconds() > 0 || date.getMilliseconds() > 0 ? 'datetime' : 'date') : typeof (value);\n }\n if (isNullOrUndefined(column.getFormatter())) {\n setFormatter(serviceLocator, column);\n }\n var formatVal = ValueFormatter.prototype.toView(value, column.getFormatter());\n return formatVal;\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 &&\n Object.keys(args.foreignKeyData).length ? args.foreignKeyData :\n this.parent.getPrimaryKeyFieldNames());\n if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n this.eventPromise(args, query, key);\n }\n switch (args.requestType) {\n case 'save':\n promise = this.dataManager.update(key, args.data, query.fromTable, query, args.previousData);\n break;\n }\n args[\"\" + pr] = promise ? promise : args[\"\" + pr];\n this.parent.notify(events.crudAction, args);\n };\n /**\n * @param {object} changes - specifies the changes\n * @param {string} key - specifies the key\n * @param {object} original - specifies the original data\n * @param {Query} query - specifies the query\n * @returns {Promise} returns the object\n * @hidden\n */\n Data.prototype.saveChanges = function (changes, key, original, query) {\n if (query === void 0) { query = this.generateQuery(); }\n query.requiresCount();\n if ('result' in this.parent.dataSource) {\n var deff = new Deferred();\n var args = {\n requestType: 'batchsave', changes: changes, key: key, query: query,\n endEdit: deff.resolve\n };\n this.setState({ isPending: true, resolver: deff.resolve });\n this.parent.trigger(events.dataSourceChanged, args);\n return deff.promise;\n }\n else {\n var promise = this.dataManager.saveChanges(changes, key, query.fromTable, query, original);\n return promise;\n }\n };\n Data.prototype.getKey = function (keys) {\n if (keys && keys.length) {\n return keys[0];\n }\n return undefined;\n };\n /**\n * @returns {boolean} returns whether its remote data\n * @hidden\n */\n Data.prototype.isRemote = function () {\n return this.dataManager.dataSource.offline !== true && this.dataManager.dataSource.url !== undefined &&\n this.dataManager.dataSource.url !== '';\n };\n Data.prototype.addRows = function (e) {\n for (var i = e.records.length; i > 0; i--) {\n if (this.parent.dataSource instanceof DataManager && this.dataManager.dataSource.offline) {\n this.dataManager.dataSource.json.splice(e.toIndex, 0, e.records[i - 1]);\n }\n else if (((!this.parent.getDataModule().isRemote()) && (!isNullOrUndefined(this.parent.dataSource))) &&\n (!this.parent.dataSource.result)) {\n this.parent.dataSource['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 if (this.parent.dataSource instanceof DataManager && this.dataManager.dataSource.offline) {\n this.dataManager.dataSource.json = json.filter(function (value) { return e.records.indexOf(value) === -1; });\n }\n else if (((!this.parent.getDataModule().isRemote()) && (!isNullOrUndefined(this.parent.dataSource))) &&\n (!this.parent.dataSource.result)) {\n this.parent.dataSource = json.filter(function (value) { return e.records.indexOf(value) === -1; });\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 Data.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\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 Data.prototype.getState = function () {\n return this.dataState;\n };\n Data.prototype.setState = function (state) {\n return this.dataState = state;\n };\n Data.prototype.getForeignKeyDataState = function () {\n return this.foreignKeyDataState;\n };\n Data.prototype.setForeignKeyDataState = function (state) {\n this.foreignKeyDataState = state;\n };\n Data.prototype.getStateEventArgument = function (query) {\n var adaptr = new UrlAdaptor();\n var dm = new DataManager({ url: '', adaptor: new UrlAdaptor });\n var state = adaptr.processQuery(dm, query);\n var data = JSON.parse(state.data);\n return extend(data, state.pvtData);\n };\n Data.prototype.eventPromise = function (args, query, key) {\n var _this = this;\n var dataArgs = args;\n var state = this.getStateEventArgument(query);\n var def = new Deferred();\n var deff = new Deferred();\n if ((args.requestType !== undefined || (this.parent.groupSettings.disablePageWiseAggregates && query.queries.some(function (query) { return query.fn === 'onGroup'; })))\n && this.dataState.isDataChanged !== false) {\n state.action = args;\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({ isPending: true, resolver: deff.resolve });\n dataArgs.endEdit = deff.resolve;\n dataArgs.cancelEdit = deff.reject;\n this.parent.trigger(events.dataSourceChanged, editArgs_1);\n deff.promise.then(function () {\n _this.setState({ isPending: true, resolver: def.resolve, group: state.group, aggregates: state.aggregates });\n if (editArgs_1.requestType === 'save') {\n _this.parent.notify(events.recordAdded, editArgs_1);\n }\n _this.parent.trigger(events.dataStateChange, state);\n })\n .catch(function () { return void 0; });\n }\n else {\n this.setState({ isPending: true, resolver: def.resolve, group: state.group, aggregates: state.aggregates });\n this.parent.trigger(events.dataStateChange, state);\n }\n }\n else {\n this.setState({});\n def.resolve(this.parent.dataSource);\n }\n return def;\n };\n /**\n * Gets the columns where searching needs to be performed from the Grid.\n *\n * @returns {string[]} returns the searched column field names\n */\n Data.prototype.getSearchColumnFieldNames = function () {\n var colFieldNames = [];\n var columns = this.parent.getColumns();\n for (var _i = 0, columns_2 = columns; _i < columns_2.length; _i++) {\n var col = columns_2[_i];\n if (col.allowSearching && !isNullOrUndefined(col.field)) {\n colFieldNames.push(col.field);\n }\n }\n return colFieldNames;\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 return Data;\n}());\nexport { Data };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-unused-expressions */\nimport { Component, EventHandler, Internationalization } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { cldrData, getDefaultDateObject, rippleEffect } from '@syncfusion/ej2-base';\nimport { removeClass, detach, closest, addClass, attributes } from '@syncfusion/ej2-base';\nimport { getValue, getUniqueID, extend, Browser } from '@syncfusion/ej2-base';\nimport { Property, Event, isNullOrUndefined, throwError } from '@syncfusion/ej2-base';\n//class constant defination.\nvar OTHERMONTH = 'e-other-month';\nvar OTHERDECADE = 'e-other-year';\nvar ROOT = 'e-calendar';\nvar DEVICE = 'e-device';\nvar HEADER = 'e-header';\nvar RTL = 'e-rtl';\nvar CONTENT = 'e-content';\nvar CONTENTTABLE = 'e-calandar-content-table';\nvar YEAR = 'e-year';\nvar MONTH = 'e-month';\nvar DECADE = 'e-decade';\nvar ICON = 'e-icons';\nvar PREVICON = 'e-prev';\nvar NEXTICON = 'e-next';\nvar PREVSPAN = 'e-date-icon-prev';\nvar NEXTSPAN = 'e-date-icon-next ';\nvar ICONCONTAINER = 'e-icon-container';\nvar DISABLED = 'e-disabled';\nvar OVERLAY = 'e-overlay';\nvar WEEKEND = 'e-weekend';\nvar WEEKNUMBER = 'e-week-number';\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar FOCUSEDCELL = 'e-focused-cell';\nvar OTHERMONTHROW = 'e-month-hide';\nvar TODAY = 'e-today';\nvar TITLE = 'e-title';\nvar LINK = 'e-day';\nvar CELL = 'e-cell';\nvar WEEKHEADER = 'e-week-header';\nvar ZOOMIN = 'e-zoomin';\nvar FOOTER = 'e-footer-container';\nvar BTN = 'e-btn';\nvar FLAT = 'e-flat';\nvar CSS = 'e-css';\nvar PRIMARY = 'e-primary';\nvar DAYHEADERLONG = 'e-calendar-day-header-lg';\nvar dayMilliSeconds = 86400000;\nvar minutesMilliSeconds = 60000;\n/**\n *\n * @private\n */\nvar CalendarBase = /** @class */ (function (_super) {\n __extends(CalendarBase, _super);\n /**\n * Initialized new instance of Calendar Class.\n * Constructor for creating the widget\n *\n * @param {CalendarBaseModel} options - Specifies the CalendarBase model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function CalendarBase(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.effect = '';\n _this.isPopupClicked = false;\n _this.isDateSelected = true;\n _this.isTodayClicked = false;\n _this.preventChange = false;\n _this.isAngular = false;\n _this.previousDates = false;\n return _this;\n }\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n CalendarBase.prototype.render = function () {\n this.rangeValidation(this.min, this.max);\n this.calendarEleCopy = this.element.cloneNode(true);\n if (this.calendarMode === 'Islamic') {\n if (+(this.min.setSeconds(0)) === +new Date(1900, 0, 1, 0, 0, 0)) {\n this.min = new Date(1944, 2, 18);\n }\n if (+this.max === +new Date(2099, 11, 31)) {\n this.max = new Date(2069, 10, 16);\n }\n }\n this.globalize = new Internationalization(this.locale);\n if (isNullOrUndefined(this.firstDayOfWeek) || this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: this.globalize.getFirstDayOfWeek() }, true);\n }\n this.todayDisabled = false;\n this.todayDate = new Date(new Date().setHours(0, 0, 0, 0));\n if (this.getModuleName() === 'calendar') {\n this.element.classList.add(ROOT);\n if (this.enableRtl) {\n this.element.classList.add(RTL);\n }\n if (Browser.isDevice) {\n this.element.classList.add(DEVICE);\n }\n attributes(this.element, {\n 'data-role': 'calendar'\n });\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.calendarElement = this.createElement('div');\n this.calendarElement.classList.add(ROOT);\n if (this.enableRtl) {\n this.calendarElement.classList.add(RTL);\n }\n if (Browser.isDevice) {\n this.calendarElement.classList.add(DEVICE);\n }\n attributes(this.calendarElement, {\n 'data-role': 'calendar'\n });\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.createHeader();\n this.createContent();\n this.wireEvents();\n };\n CalendarBase.prototype.rangeValidation = function (min, max) {\n if (isNullOrUndefined(min)) {\n this.setProperties({ min: new Date(1900, 0, 1) }, true);\n }\n if (isNullOrUndefined(max)) {\n this.setProperties({ max: new Date(2099, 11, 31) }, true);\n }\n };\n CalendarBase.prototype.getDefaultKeyConfig = function () {\n this.defaultKeyConfigs = {\n controlUp: 'ctrl+38',\n controlDown: 'ctrl+40',\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n select: 'enter',\n home: 'home',\n end: 'end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n shiftPageUp: 'shift+pageup',\n shiftPageDown: 'shift+pagedown',\n controlHome: 'ctrl+home',\n controlEnd: 'ctrl+end',\n altUpArrow: 'alt+uparrow',\n spacebar: 'space',\n altRightArrow: 'alt+rightarrow',\n altLeftArrow: 'alt+leftarrow'\n };\n return this.defaultKeyConfigs;\n };\n CalendarBase.prototype.validateDate = function (value) {\n this.setProperties({ min: this.checkDateValue(new Date(this.checkValue(this.min))) }, true);\n this.setProperties({ max: this.checkDateValue(new Date(this.checkValue(this.max))) }, true);\n this.currentDate = this.currentDate ? this.currentDate : new Date(new Date().setHours(0, 0, 0, 0));\n if (!isNullOrUndefined(value) && this.min <= this.max && value >= this.min && value <= this.max) {\n this.currentDate = new Date(this.checkValue(value));\n }\n };\n CalendarBase.prototype.setOverlayIndex = function (popupWrapper, popupElement, modal, isDevice) {\n if (isDevice && !isNullOrUndefined(popupElement) && !isNullOrUndefined(modal) && !isNullOrUndefined(popupWrapper)) {\n var index = parseInt(popupElement.style.zIndex, 10) ? parseInt(popupElement.style.zIndex, 10) : 1000;\n modal.style.zIndex = (index - 1).toString();\n popupWrapper.style.zIndex = index.toString();\n }\n };\n CalendarBase.prototype.minMaxUpdate = function (value) {\n if (!(+this.min <= +this.max)) {\n this.setProperties({ min: this.min }, true);\n addClass([this.element], OVERLAY);\n }\n else {\n removeClass([this.element], OVERLAY);\n }\n this.min = isNullOrUndefined(this.min) || !(+this.min) ? this.min = new Date(1900, 0, 1) : this.min;\n this.max = isNullOrUndefined(this.max) || !(+this.max) ? this.max = new Date(2099, 11, 31) : this.max;\n if (+this.min <= +this.max && value && +value <= +this.max && +value >= +this.min) {\n this.currentDate = new Date(this.checkValue(value));\n }\n else {\n if (+this.min <= +this.max && !value && +this.currentDate > +this.max) {\n this.currentDate = new Date(this.checkValue(this.max));\n }\n else {\n if (+this.currentDate < +this.min) {\n this.currentDate = new Date(this.checkValue(this.min));\n }\n }\n }\n };\n CalendarBase.prototype.createHeader = function () {\n var ariaPrevAttrs = {\n 'aria-disabled': 'false',\n 'aria-label': 'previous month'\n };\n var ariaNextAttrs = {\n 'aria-disabled': 'false',\n 'aria-label': 'next month'\n };\n var ariaTitleAttrs = {\n 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'title'\n };\n var tabIndexAttr = { 'tabindex': '0' };\n this.headerElement = this.createElement('div', { className: HEADER });\n var iconContainer = this.createElement('div', { className: ICONCONTAINER });\n this.previousIcon = this.createElement('button', { className: '' + PREVICON, attrs: { type: 'button' } });\n rippleEffect(this.previousIcon, {\n duration: 400,\n selector: '.e-prev',\n isCenterRipple: true\n });\n attributes(this.previousIcon, ariaPrevAttrs);\n attributes(this.previousIcon, tabIndexAttr);\n this.nextIcon = this.createElement('button', { className: '' + NEXTICON, attrs: { type: 'button' } });\n rippleEffect(this.nextIcon, {\n selector: '.e-next',\n duration: 400,\n isCenterRipple: true\n });\n if (this.getModuleName() === 'daterangepicker') {\n attributes(this.previousIcon, { tabIndex: '-1' });\n attributes(this.nextIcon, { tabIndex: '-1' });\n }\n attributes(this.nextIcon, ariaNextAttrs);\n attributes(this.nextIcon, tabIndexAttr);\n this.headerTitleElement = this.createElement('div', { className: '' + LINK + ' ' + TITLE });\n attributes(this.headerTitleElement, ariaTitleAttrs);\n attributes(this.headerTitleElement, tabIndexAttr);\n this.headerElement.appendChild(this.headerTitleElement);\n this.previousIcon.appendChild(this.createElement('span', { className: '' + PREVSPAN + ' ' + ICON }));\n this.nextIcon.appendChild(this.createElement('span', { className: '' + NEXTSPAN + ' ' + ICON }));\n iconContainer.appendChild(this.previousIcon);\n iconContainer.appendChild(this.nextIcon);\n this.headerElement.appendChild(iconContainer);\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.headerElement);\n }\n else {\n this.calendarElement.appendChild(this.headerElement);\n }\n this.adjustLongHeaderSize();\n };\n CalendarBase.prototype.createContent = function () {\n this.contentElement = this.createElement('div', { className: CONTENT });\n this.table = this.createElement('table', { attrs: { 'class': CONTENTTABLE, 'tabIndex': '0', 'role': 'grid', 'aria-activedescendant': '', 'aria-labelledby': this.element.id } });\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.contentElement);\n }\n else {\n this.calendarElement.appendChild(this.contentElement);\n }\n this.contentElement.appendChild(this.table);\n this.createContentHeader();\n this.createContentBody();\n if (this.showTodayButton) {\n this.createContentFooter();\n }\n if (this.getModuleName() != 'daterangepicker') {\n EventHandler.add(this.table, 'focus', this.addContentFocus, this);\n EventHandler.add(this.table, 'blur', this.removeContentFocus, this);\n }\n };\n CalendarBase.prototype.addContentFocus = function (args) {\n var focusedDate = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n if (!isNullOrUndefined(selectedDate)) {\n selectedDate.classList.add(FOCUSEDCELL);\n }\n else if (!isNullOrUndefined(focusedDate)) {\n focusedDate.classList.add(FOCUSEDCELL);\n }\n };\n CalendarBase.prototype.removeContentFocus = function (args) {\n var focusedDate = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n if (!isNullOrUndefined(selectedDate)) {\n selectedDate.classList.remove(FOCUSEDCELL);\n }\n else if (!isNullOrUndefined(focusedDate)) {\n focusedDate.classList.remove(FOCUSEDCELL);\n }\n };\n CalendarBase.prototype.getCultureValues = function () {\n var culShortNames = [];\n var cldrObj;\n var dayFormat = 'days.stand-alone.' + this.dayHeaderFormat.toLowerCase();\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue(dayFormat, getDefaultDateObject()));\n }\n else {\n cldrObj = (this.getCultureObjects(cldrData, '' + this.locale));\n }\n if (!isNullOrUndefined(cldrObj)) {\n for (var _i = 0, _a = Object.keys(cldrObj); _i < _a.length; _i++) {\n var obj = _a[_i];\n culShortNames.push(getValue(obj, cldrObj));\n }\n }\n return culShortNames;\n };\n CalendarBase.prototype.toCapitalize = function (text) {\n return !isNullOrUndefined(text) && text.length ? text[0].toUpperCase() + text.slice(1) : text;\n };\n CalendarBase.prototype.createContentHeader = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content .e-week-header')[0])) {\n detach(this.element.querySelectorAll('.e-content .e-week-header')[0]);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0])) {\n detach(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0]);\n }\n }\n var daysCount = 6;\n var html = '';\n if (this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: 0 }, true);\n }\n this.tableHeadElement = this.createElement('thead', { className: WEEKHEADER });\n if (this.weekNumber) {\n html += '';\n if (this.getModuleName() === 'calendar') {\n addClass([this.element], '' + WEEKNUMBER);\n }\n else {\n addClass([this.calendarElement], '' + WEEKNUMBER);\n }\n }\n // eslint-disable-next-line max-len\n var shortNames = this.getCultureValues().length > 0 && this.getCultureValues() ? this.shiftArray(((this.getCultureValues().length > 0 && this.getCultureValues())), this.firstDayOfWeek) : null;\n if (!isNullOrUndefined(shortNames)) {\n for (var days = 0; days <= daysCount; days++) {\n html += '' + this.toCapitalize(shortNames[days]) + '';\n }\n }\n html = '' + html + '';\n this.tableHeadElement.innerHTML = html;\n this.table.appendChild(this.tableHeadElement);\n };\n CalendarBase.prototype.createContentBody = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content tbody')[0])) {\n detach(this.element.querySelectorAll('.e-content tbody')[0]);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content tbody')[0])) {\n detach(this.calendarElement.querySelectorAll('.e-content tbody')[0]);\n }\n }\n switch (this.start) {\n case 'Year':\n this.renderYears();\n break;\n case 'Decade':\n this.renderDecades();\n break;\n default:\n this.renderMonths();\n }\n };\n CalendarBase.prototype.updateFooter = function () {\n this.todayElement.textContent = this.l10.getConstant('today');\n this.todayElement.setAttribute('aria-label', this.l10.getConstant('today'));\n this.todayElement.setAttribute('tabindex', '0');\n };\n CalendarBase.prototype.createContentFooter = function () {\n if (this.showTodayButton) {\n var minimum = new Date(+this.min);\n var maximum = new Date(+this.max);\n var l10nLocale = { today: 'Today' };\n this.globalize = new Internationalization(this.locale);\n this.l10 = new L10n(this.getModuleName(), l10nLocale, this.locale);\n this.todayElement = this.createElement('button', { attrs: { role: 'button' } });\n rippleEffect(this.todayElement);\n this.updateFooter();\n addClass([this.todayElement], [BTN, TODAY, FLAT, PRIMARY, CSS]);\n if ((!(+new Date(minimum.setHours(0, 0, 0, 0)) <= +this.todayDate &&\n +this.todayDate <= +new Date(maximum.setHours(0, 0, 0, 0)))) || (this.todayDisabled)) {\n addClass([this.todayElement], DISABLED);\n }\n this.footer = this.createElement('div', { className: FOOTER });\n this.footer.appendChild(this.todayElement);\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.footer);\n }\n if (this.getModuleName() === 'datepicker') {\n this.calendarElement.appendChild(this.footer);\n }\n if (this.getModuleName() === 'datetimepicker') {\n this.calendarElement.appendChild(this.footer);\n }\n if (!this.todayElement.classList.contains(DISABLED)) {\n EventHandler.add(this.todayElement, 'click', this.todayButtonClick, this);\n }\n }\n };\n CalendarBase.prototype.wireEvents = function (id, ref, keyConfig, moduleName) {\n EventHandler.add(this.headerTitleElement, 'click', this.navigateTitle, this);\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n if (this.getModuleName() === 'calendar') {\n this.keyboardModule = new KeyboardEvents(this.element, {\n eventName: 'keydown',\n keyAction: this.keyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n }\n else {\n this.keyboardModule = new KeyboardEvents(this.calendarElement, {\n eventName: 'keydown',\n keyAction: this.keyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n }\n };\n CalendarBase.prototype.dateWireEvents = function (id, ref, keyConfig, moduleName) {\n this.defaultKeyConfigs = this.getDefaultKeyConfig();\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, keyConfig);\n this.serverModuleName = moduleName;\n };\n CalendarBase.prototype.todayButtonClick = function (e, value, isCustomDate) {\n if (this.showTodayButton) {\n if (this.currentView() === this.depth) {\n this.effect = '';\n }\n else {\n this.effect = 'e-zoomin';\n }\n if (this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.navigateTo(this.depth, new Date(this.checkValue(value)), isCustomDate);\n }\n else {\n this.navigateTo('Month', new Date(this.checkValue(value)), isCustomDate);\n }\n }\n };\n CalendarBase.prototype.resetCalendar = function () {\n this.calendarElement && detach(this.calendarElement);\n this.tableBodyElement && detach(this.tableBodyElement);\n this.table && detach(this.table);\n this.tableHeadElement && detach(this.tableHeadElement);\n this.nextIcon && detach(this.nextIcon);\n this.previousIcon && detach(this.previousIcon);\n this.footer && detach(this.footer);\n this.todayElement = null;\n this.renderDayCellArgs = null;\n this.calendarElement = this.tableBodyElement = this.footer = this.tableHeadElement =\n this.nextIcon = this.previousIcon = this.table = null;\n };\n CalendarBase.prototype.keyActionHandle = function (e, value, multiSelection) {\n var focusedDate = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedDate;\n if (multiSelection) {\n if (!isNullOrUndefined(focusedDate) && +value === parseInt(focusedDate.getAttribute('id').split('_')[0], 10)) {\n selectedDate = focusedDate;\n }\n else {\n selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n }\n }\n else {\n selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n }\n var view = this.getViewNumber(this.currentView());\n var depthValue = this.getViewNumber(this.depth);\n var levelRestrict = (view === depthValue && this.getViewNumber(this.start) >= depthValue);\n this.effect = '';\n switch (e.action) {\n case 'moveLeft':\n if (this.getModuleName() != 'daterangepicker' && !isNullOrUndefined(e.target) && e.target.classList.length > 0 && e.target.classList.contains(CONTENTTABLE)) {\n this.keyboardNavigate(-1, view, e, this.max, this.min);\n e.preventDefault();\n }\n break;\n case 'moveRight':\n if (this.getModuleName() != 'daterangepicker' && !isNullOrUndefined(e.target) && e.target.classList.length > 0 && e.target.classList.contains(CONTENTTABLE)) {\n this.keyboardNavigate(1, view, e, this.max, this.min);\n e.preventDefault();\n }\n break;\n case 'moveUp':\n if (this.getModuleName() != 'daterangepicker' && !isNullOrUndefined(e.target) && e.target.classList.length > 0 && e.target.classList.contains(CONTENTTABLE)) {\n if (view === 0) {\n this.keyboardNavigate(-7, view, e, this.max, this.min); // move the current date to the previous seven days.\n }\n else {\n this.keyboardNavigate(-4, view, e, this.max, this.min); // move the current year to the previous four days.\n }\n e.preventDefault();\n }\n break;\n case 'moveDown':\n if (this.getModuleName() != 'daterangepicker' && !isNullOrUndefined(e.target) && e.target.classList.length > 0 && e.target.classList.contains(CONTENTTABLE)) {\n if (view === 0) {\n this.keyboardNavigate(7, view, e, this.max, this.min);\n }\n else {\n this.keyboardNavigate(4, view, e, this.max, this.min);\n }\n e.preventDefault();\n }\n break;\n case 'select':\n if (e.target === this.headerTitleElement) {\n this.navigateTitle(e);\n }\n else if (e.target === this.previousIcon) {\n this.navigatePrevious(e);\n }\n else if (e.target === this.nextIcon) {\n this.navigateNext(e);\n }\n else if (e.target === this.todayElement) {\n this.todayButtonClick(e, value);\n if (this.getModuleName() === 'datepicker' || this.getModuleName() === 'datetimepicker') {\n this.element.focus();\n }\n }\n else {\n var element = !isNullOrUndefined(focusedDate) ? focusedDate : selectedDate;\n if (!isNullOrUndefined(element) && !element.classList.contains(DISABLED)) {\n if (levelRestrict) {\n // eslint-disable-next-line radix\n var d = new Date(parseInt('' + (element).id, 0));\n this.selectDate(e, d, (element));\n }\n else {\n this.contentClick(null, --view, (element), value);\n }\n if (this.getModuleName() === 'datepicker' || this.getModuleName() === 'datetimepicker') {\n this.element.focus();\n }\n }\n }\n break;\n case 'controlUp':\n this.title();\n e.preventDefault();\n break;\n case 'controlDown':\n if (!isNullOrUndefined(focusedDate) && !levelRestrict || !isNullOrUndefined(selectedDate) && !levelRestrict) {\n this.contentClick(null, --view, (focusedDate || selectedDate), value);\n }\n e.preventDefault();\n break;\n case 'home':\n this.currentDate = this.firstDay(this.currentDate);\n detach(this.tableBodyElement);\n if (view === 0) {\n this.renderMonths(e);\n }\n else if (view === 1) {\n this.renderYears(e);\n }\n else {\n this.renderDecades(e);\n }\n e.preventDefault();\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate, view);\n detach(this.tableBodyElement);\n if (view === 0) {\n this.renderMonths(e);\n }\n else if (view === 1) {\n this.renderYears(e);\n }\n else {\n this.renderDecades(e);\n }\n e.preventDefault();\n break;\n case 'pageUp':\n this.addMonths(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'pageDown':\n this.addMonths(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageUp':\n this.addYears(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageDown':\n this.addYears(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'controlHome':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 0, 1));\n e.preventDefault();\n break;\n case 'controlEnd':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 11, 31));\n e.preventDefault();\n break;\n case 'tab':\n if ((this.getModuleName() === 'datepicker' || this.getModuleName() === 'datetimepicker') && e.target === this.todayElement) {\n e.preventDefault();\n this.element.focus();\n this.hide();\n }\n break;\n case 'shiftTab':\n if ((this.getModuleName() === 'datepicker' || this.getModuleName() === 'datetimepicker') && e.target === this.headerTitleElement) {\n e.preventDefault();\n this.element.focus();\n this.hide();\n }\n break;\n }\n };\n CalendarBase.prototype.keyboardNavigate = function (number, currentView, e, max, min) {\n var date = new Date(this.checkValue(this.currentDate));\n switch (currentView) {\n case 2:\n this.addYears(this.currentDate, number);\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n case 1:\n this.addMonths(this.currentDate, number);\n if (this.calendarMode === 'Gregorian') {\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n else {\n this.currentDate = date;\n }\n }\n else {\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n else {\n this.currentDate = date;\n }\n }\n break;\n case 0:\n this.addDay(this.currentDate, number, e, max, min);\n if (this.isMinMaxRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderMonths(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n }\n };\n /**\n * Initialize the event handler\n *\n * @param {Date} value - Specifies value of date.\n * @returns {void}\n * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.preRender = function (value) {\n var _this = this;\n this.navigatePreviousHandler = this.navigatePrevious.bind(this);\n this.navigateNextHandler = this.navigateNext.bind(this);\n this.defaultKeyConfigs = this.getDefaultKeyConfig();\n this.navigateHandler = function (e) {\n _this.triggerNavigate(e);\n };\n };\n CalendarBase.prototype.minMaxDate = function (localDate) {\n var currentDate = new Date(new Date(+localDate).setHours(0, 0, 0, 0));\n var minDate = new Date(new Date(+this.min).setHours(0, 0, 0, 0));\n var maxDate = new Date(new Date(+this.max).setHours(0, 0, 0, 0));\n if (+currentDate === +minDate || +currentDate === +maxDate) {\n if (+localDate < +this.min) {\n localDate = new Date(+this.min);\n }\n if (+localDate > +this.max) {\n localDate = new Date(+this.max);\n }\n }\n return localDate;\n };\n CalendarBase.prototype.renderMonths = function (e, value, isCustomDate) {\n var numCells = this.weekNumber ? 8 : 7;\n var tdEles;\n if (this.calendarMode === 'Gregorian') {\n tdEles = this.renderDays(this.currentDate, value, null, null, isCustomDate, e);\n }\n else {\n tdEles = this.islamicModule.islamicRenderDays(this.currentDate, value);\n }\n this.createContentHeader();\n if (this.calendarMode === 'Gregorian') {\n this.renderTemplate(tdEles, numCells, MONTH, e, value);\n }\n else {\n this.islamicModule.islamicRenderTemplate(tdEles, numCells, MONTH, e, value);\n }\n };\n CalendarBase.prototype.renderDays = function (currentDate, value, multiSelection, values, isTodayDate, e) {\n var tdEles = [];\n var cellsCount = 42;\n var todayDate = isTodayDate ? new Date(+currentDate) : this.getDate(new Date(), this.timezone);\n var localDate = new Date(this.checkValue(currentDate));\n var minMaxDate;\n var currentMonth = localDate.getMonth();\n this.titleUpdate(currentDate, 'days');\n var d = localDate;\n localDate = new Date(d.getFullYear(), d.getMonth(), 0, d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds());\n while (localDate.getDay() !== this.firstDayOfWeek) {\n this.setStartDate(localDate, -1 * dayMilliSeconds);\n }\n for (var day = 0; day < cellsCount; ++day) {\n var weekEle = this.createElement('td', { className: CELL });\n var weekAnchor = this.createElement('span');\n if (day % 7 === 0 && this.weekNumber) {\n // 6 days are added to get Last day of the week and 3 days are added to get middle day of the week.\n var numberOfDays = this.weekRule === 'FirstDay' ? 6 : (this.weekRule === 'FirstFourDayWeek' ? 3 : 0);\n var finalDate = new Date(localDate.getFullYear(), localDate.getMonth(), (localDate.getDate() + numberOfDays));\n weekAnchor.textContent = '' + this.getWeek(finalDate);\n weekEle.appendChild(weekAnchor);\n addClass([weekEle], '' + WEEKNUMBER);\n tdEles.push(weekEle);\n }\n minMaxDate = new Date(+localDate);\n localDate = this.minMaxDate(localDate);\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full' };\n var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var tdEle = this.dayCell(localDate);\n var title = this.globalize.formatDate(localDate, { type: 'date', skeleton: 'full' });\n var dayLink = this.createElement('span');\n dayLink.textContent = this.globalize.formatDate(localDate, { format: 'd', type: 'date', skeleton: 'yMd' });\n var disabled = (this.min > localDate) || (this.max < localDate);\n if (disabled) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n }\n else {\n dayLink.setAttribute('title', '' + title);\n }\n if (currentMonth !== localDate.getMonth()) {\n addClass([tdEle], OTHERMONTH);\n dayLink.setAttribute('aria-disabled', 'true');\n }\n if (localDate.getDay() === 0 || localDate.getDay() === 6) {\n addClass([tdEle], WEEKEND);\n }\n tdEle.appendChild(dayLink);\n this.renderDayCellArgs = {\n date: localDate,\n isDisabled: false,\n element: tdEle,\n isOutOfRange: disabled\n };\n var argument = this.renderDayCellArgs;\n this.renderDayCellEvent(argument);\n if (argument.isDisabled) {\n var selectDate = new Date(this.checkValue(value));\n var argsDate = new Date(this.checkValue(argument.date));\n if (multiSelection) {\n if (!isNullOrUndefined(values) && values.length > 0) {\n for (var index = 0; index < values.length; index++) {\n var localDateString = +new Date(this.globalize.formatDate(argument.date, { type: 'date', skeleton: 'yMd' }));\n var tempDateString = +new Date(this.globalize.formatDate(values[index], { type: 'date', skeleton: 'yMd' }));\n if (localDateString === tempDateString) {\n values.splice(index, 1);\n index = -1;\n }\n }\n }\n }\n else if (selectDate && +selectDate === +argsDate) {\n this.setProperties({ value: null }, true);\n }\n }\n if (this.renderDayCellArgs.isDisabled && !tdEle.classList.contains(SELECTED)) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n dayLink.setAttribute('aria-disabled', 'true');\n if (+this.renderDayCellArgs.date === +this.todayDate) {\n this.todayDisabled = true;\n }\n }\n var otherMnthBool = tdEle.classList.contains(OTHERMONTH);\n var disabledCls = tdEle.classList.contains(DISABLED);\n if (!disabledCls) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n // to set the value as null while setting the disabled date onProperty change.\n // if (args.isDisabled && +this.value === +args.date) {\n // this.setProperties({ value: null }, true);\n // }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var currentTarget = void 0;\n if (!isNullOrUndefined(e) && e.type === 'click') {\n currentTarget = e.currentTarget;\n }\n if (multiSelection && !isNullOrUndefined(values) && !disabledCls) {\n for (var tempValue = 0; tempValue < values.length; tempValue++) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var formatOptions = { format: null, type: 'date', skeleton: 'short', calendar: type };\n var localDateString = this.globalize.formatDate(localDate, formatOptions);\n var tempDateString = this.globalize.formatDate(values[tempValue], formatOptions);\n if ((localDateString === tempDateString && this.getDateVal(localDate, values[tempValue]))\n || (this.getDateVal(localDate, value))) {\n addClass([tdEle], SELECTED);\n }\n if (!isNullOrUndefined(currentTarget) && currentTarget.innerText === tdEle.innerText &&\n this.previousDates && tdEle.classList.contains(SELECTED) && currentTarget.classList.contains(SELECTED)) {\n removeClass([tdEle], SELECTED);\n this.previousDates = false;\n var copyValues = this.copyValues(values);\n for (var i = 0; i < copyValues.length; i++) {\n var type_1 = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var formatOptions_1 = { format: null, type: 'date', skeleton: 'short', calendar: type_1 };\n var localDateString_1 = this.globalize.formatDate(date, formatOptions_1);\n var tempDateString_1 = this.globalize.formatDate(copyValues[i], formatOptions_1);\n if (localDateString_1 === tempDateString_1) {\n var index = copyValues.indexOf(copyValues[i]);\n copyValues.splice(index, 1);\n values.splice(index, 1);\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n else {\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n if (values.length <= 0) {\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n else if (!disabledCls && this.getDateVal(localDate, value)) {\n addClass([tdEle], SELECTED);\n }\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n if (!isNullOrUndefined(date) && date.getFullYear() === todayDate.getFullYear() && date.getMonth() === todayDate.getMonth()\n && date.getDate() === todayDate.getDate()) {\n addClass([tdEle], TODAY);\n }\n tdEles.push(this.renderDayCellArgs.element);\n localDate = new Date(+minMaxDate);\n this.addDay(localDate, 1, null, this.max, this.min);\n }\n return tdEles;\n };\n CalendarBase.prototype.updateFocus = function (otherMonth, disabled, localDate, tableElement, currentDate) {\n if (currentDate.getDate() === localDate.getDate() && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n else {\n // eslint-disable-next-line radix\n if (currentDate >= this.max && parseInt(tableElement.id, 0) === +this.max && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n // eslint-disable-next-line radix\n if (currentDate <= this.min && parseInt(tableElement.id, 0) === +this.min && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n }\n };\n CalendarBase.prototype.renderYears = function (e, value) {\n this.removeTableHeadElement();\n var numCells = 4;\n var tdEles = [];\n var valueUtil = isNullOrUndefined(value);\n var curDate = new Date(this.checkValue(this.currentDate));\n var mon = curDate.getMonth();\n var yr = curDate.getFullYear();\n var localDate = curDate;\n var curYrs = localDate.getFullYear();\n var minYr = new Date(this.checkValue(this.min)).getFullYear();\n var minMonth = new Date(this.checkValue(this.min)).getMonth();\n var maxYr = new Date(this.checkValue(this.max)).getFullYear();\n var maxMonth = new Date(this.checkValue(this.max)).getMonth();\n localDate.setMonth(0);\n this.titleUpdate(this.currentDate, 'months');\n localDate.setDate(1);\n for (var month = 0; month < 12; ++month) {\n var tdEle = this.dayCell(localDate);\n var dayLink = this.createElement('span');\n var localMonth = (value && (value).getMonth() === localDate.getMonth());\n var select = (value && (value).getFullYear() === yr && localMonth);\n var title = this.globalize.formatDate(localDate, { type: 'date', format: 'MMM y' });\n dayLink.textContent = this.toCapitalize(this.globalize.formatDate(localDate, {\n format: null, type: 'dateTime', skeleton: 'MMM'\n }));\n if ((this.min && (curYrs < minYr || (month < minMonth && curYrs === minYr))) || (this.max && (curYrs > maxYr || (month > maxMonth && curYrs >= maxYr)))) {\n addClass([tdEle], DISABLED);\n }\n else if (!valueUtil && select) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getMonth() === mon && this.currentDate.getMonth() === mon) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n localDate.setDate(1);\n localDate.setMonth(localDate.getMonth() + 1);\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n dayLink.setAttribute('title', '' + title);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.renderTemplate(tdEles, numCells, YEAR, e, value);\n };\n CalendarBase.prototype.renderDecades = function (e, value) {\n this.removeTableHeadElement();\n var numCells = 4;\n var yearCell = 12;\n var tdEles = [];\n var localDate = new Date(this.checkValue(this.currentDate));\n localDate.setMonth(0);\n localDate.setDate(1);\n var localYr = localDate.getFullYear();\n var startYr = new Date(localDate.setFullYear((localYr - localYr % 10)));\n var endYr = new Date(localDate.setFullYear((localYr - localYr % 10 + (10 - 1))));\n var startFullYr = startYr.getFullYear();\n var endFullYr = endYr.getFullYear();\n var startHdrYr = this.globalize.formatDate(startYr, {\n format: null, type: 'dateTime', skeleton: 'y'\n });\n var endHdrYr = this.globalize.formatDate(endYr, { format: null, type: 'dateTime', skeleton: 'y' });\n this.headerTitleElement.textContent = startHdrYr + ' - ' + (endHdrYr);\n var start = new Date(localYr - (localYr % 10) - 1, 0, 1);\n var startYear = start.getFullYear();\n for (var rowIterator = 0; rowIterator < yearCell; ++rowIterator) {\n var year = startYear + rowIterator;\n localDate.setFullYear(year);\n var tdEle = this.dayCell(localDate);\n var dayLink = this.createElement('span');\n dayLink.textContent = this.globalize.formatDate(localDate, {\n format: null, type: 'dateTime', skeleton: 'y'\n });\n if ((year < startFullYr) || (year > endFullYr)) {\n addClass([tdEle], OTHERDECADE);\n dayLink.setAttribute('aria-disabled', 'true');\n if (!isNullOrUndefined(value) && localDate.getFullYear() === (value).getFullYear()) {\n addClass([tdEle], SELECTED);\n }\n if (year < new Date(this.checkValue(this.min)).getFullYear() ||\n year > new Date(this.checkValue(this.max)).getFullYear()) {\n addClass([tdEle], DISABLED);\n }\n }\n else if (year < new Date(this.checkValue(this.min)).getFullYear() ||\n year > new Date(this.checkValue(this.max)).getFullYear()) {\n addClass([tdEle], DISABLED);\n }\n else if (!isNullOrUndefined(value) && localDate.getFullYear() === (value).getFullYear()) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getFullYear() === this.currentDate.getFullYear() && !tdEle.classList.contains(DISABLED)) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n dayLink.setAttribute('title', '' + dayLink.textContent);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.renderTemplate(tdEles, numCells, 'e-decade', e, value);\n };\n CalendarBase.prototype.dayCell = function (localDate) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var dateFormatOptions = { skeleton: 'full', type: 'dateTime', calendar: type };\n var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var value;\n if (!isNullOrUndefined(date)) {\n value = date.valueOf();\n }\n var attrs = {\n className: CELL, attrs: { 'id': '' + getUniqueID('' + value), 'aria-selected': 'false' }\n };\n return this.createElement('td', attrs);\n };\n CalendarBase.prototype.firstDay = function (date) {\n var collection = this.currentView() !== 'Decade' ? this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '') :\n this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERDECADE + '');\n if (collection.length) {\n for (var i = 0; i < collection.length; i++) {\n if (!collection[i].classList.contains(DISABLED)) {\n // eslint-disable-next-line radix\n date = new Date(parseInt(collection[i].id, 0));\n break;\n }\n }\n }\n return date;\n };\n CalendarBase.prototype.lastDay = function (date, view) {\n var lastDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n if (view !== 2) {\n var timeOffset = Math.abs(lastDate.getTimezoneOffset() - this.firstDay(date).getTimezoneOffset());\n if (timeOffset) {\n lastDate.setHours(this.firstDay(date).getHours() + (timeOffset / 60));\n }\n return this.findLastDay(lastDate);\n }\n else {\n return this.findLastDay(this.firstDay(lastDate));\n }\n };\n CalendarBase.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n CalendarBase.prototype.findLastDay = function (date) {\n var collection = this.currentView() === 'Decade' ? this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERDECADE + '') :\n this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '');\n if (collection.length) {\n for (var i = collection.length - 1; i >= 0; i--) {\n if (!collection[i].classList.contains(DISABLED)) {\n // eslint-disable-next-line radix\n date = new Date(parseInt(collection[i].id, 0));\n break;\n }\n }\n }\n return date;\n };\n CalendarBase.prototype.removeTableHeadElement = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content table thead')[0])) {\n detach(this.tableHeadElement);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content table thead')[0])) {\n detach(this.tableHeadElement);\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.renderTemplate = function (elements, count, classNm, e, value) {\n var view = this.getViewNumber(this.currentView());\n var trEle;\n this.tableBodyElement = this.createElement('tbody');\n this.table.appendChild(this.tableBodyElement);\n removeClass([this.contentElement, this.headerElement], [MONTH, DECADE, YEAR]);\n addClass([this.contentElement, this.headerElement], [classNm]);\n var weekNumCell = 41;\n var numberCell = 35;\n var otherMonthCell = 6;\n var row = count;\n var rowIterator = 0;\n for (var dayCell = 0; dayCell < elements.length / count; ++dayCell) {\n trEle = this.createElement('tr');\n for (rowIterator = 0 + rowIterator; rowIterator < row; rowIterator++) {\n if (!elements[rowIterator].classList.contains('e-week-number') && !isNullOrUndefined(elements[rowIterator].children[0])) {\n addClass([elements[rowIterator].children[0]], [LINK]);\n rippleEffect(elements[rowIterator].children[0], {\n duration: 600,\n isCenterRipple: true\n });\n }\n trEle.appendChild(elements[rowIterator]);\n if (this.weekNumber && rowIterator === otherMonthCell + 1 && elements[otherMonthCell + 1].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (!this.weekNumber && rowIterator === otherMonthCell && elements[otherMonthCell].\n classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (this.weekNumber) {\n if (rowIterator === weekNumCell && elements[weekNumCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n else {\n if (rowIterator === numberCell && elements[numberCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n }\n row = row + count;\n rowIterator = rowIterator + 0;\n this.tableBodyElement.appendChild(trEle);\n }\n this.table.querySelector('tbody').className = this.effect;\n if (this.calendarMode === 'Gregorian') {\n this.iconHandler();\n }\n else {\n this.islamicModule.islamicIconHandler();\n }\n if (view !== this.getViewNumber(this.currentView()) || (view === 0 && view !== this.getViewNumber(this.currentView()))) {\n this.navigateHandler(e);\n }\n this.setAriaActiveDescendant();\n };\n CalendarBase.prototype.clickHandler = function (e, value) {\n this.clickEventEmitter(e);\n var eve = e.currentTarget;\n var view = this.getViewNumber(this.currentView());\n if (eve.classList.contains(OTHERMONTH)) {\n this.contentClick(e, 0, null, value);\n }\n else if (view === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.contentClick(e, 1, null, value);\n }\n else if (2 === view) {\n this.contentClick(e, 1, null, value);\n }\n else if (!eve.classList.contains(OTHERMONTH) && view === 0) {\n this.selectDate(e, this.getIdValue(e, null), null);\n }\n else {\n this.contentClick(e, 0, eve, value);\n }\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n // Content click event handler required for extended components\n CalendarBase.prototype.clickEventEmitter = function (e) {\n e.preventDefault();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.contentClick = function (e, view, element, value) {\n var currentView = this.getViewNumber(this.currentView());\n var d = this.getIdValue(e, element);\n switch (view) {\n case 0:\n if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n detach(this.tableBodyElement);\n this.currentDate = d;\n this.effect = ZOOMIN;\n this.renderMonths(e);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n this.currentDate.setMonth(d.getMonth());\n if (d.getMonth() > 0 && this.currentDate.getMonth() !== d.getMonth()) {\n this.currentDate.setDate(0);\n }\n this.currentDate.setFullYear(d.getFullYear());\n }\n else {\n this.currentDate = d;\n }\n this.effect = ZOOMIN;\n detach(this.tableBodyElement);\n this.renderMonths(e);\n }\n break;\n case 1:\n if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.selectDate(e, d, null);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n this.currentDate.setFullYear(d.getFullYear());\n }\n else {\n this.islamicPreviousHeader = this.headerElement.textContent;\n var islamicDate = this.islamicModule.getIslamicDate(d);\n this.currentDate = this.islamicModule.toGregorian(islamicDate.year, islamicDate.month, 1);\n }\n this.effect = ZOOMIN;\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n }\n };\n CalendarBase.prototype.switchView = function (view, e, multiSelection, isCustomDate) {\n switch (view) {\n case 0:\n detach(this.tableBodyElement);\n this.renderMonths(e, null, isCustomDate);\n break;\n case 1:\n detach(this.tableBodyElement);\n this.renderYears(e);\n break;\n case 2:\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n };\n /**\n * To get component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n CalendarBase.prototype.getModuleName = function () {\n return 'calendar';\n };\n /**\n *\n * @returns {void}\n\n */\n CalendarBase.prototype.requiredModules = function () {\n var modules = [];\n if (this) {\n modules.push({ args: [this], member: 'islamic' });\n }\n return modules;\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string}\n */\n CalendarBase.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Called internally if any of the property value changed.\n *\n * @param {CalendarBaseModel} newProp - Returns the dynamic property value of the component.\n * @param {CalendarBaseModel} oldProp - Returns the previous property value of the component.\n * @param {boolean} multiSelection - - Specifies whether multiple date selection is enabled or not.\n * @param {Date[]} values - Specifies the dates.\n * @returns {void}\n * @private\n */\n CalendarBase.prototype.onPropertyChanged = function (newProp, oldProp, multiSelection, values) {\n this.effect = '';\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enableRtl':\n if (newProp.enableRtl) {\n if (this.getModuleName() === 'calendar') {\n this.element.classList.add('e-rtl');\n }\n else {\n this.calendarElement.classList.add('e-rtl');\n }\n }\n else {\n if (this.getModuleName() === 'calendar') {\n this.element.classList.remove('e-rtl');\n }\n else {\n this.calendarElement.classList.remove('e-rtl');\n }\n }\n break;\n case 'dayHeaderFormat':\n this.getCultureValues();\n if (this.getModuleName() !== 'datepicker') {\n this.createContentHeader();\n }\n else if (this.calendarElement) {\n this.createContentHeader();\n }\n this.adjustLongHeaderSize();\n break;\n case 'min':\n case 'max':\n this.rangeValidation(this.min, this.max);\n if (prop === 'min') {\n this.setProperties({ min: this.checkDateValue(new Date(this.checkValue(newProp.min))) }, true);\n }\n else {\n this.setProperties({ max: this.checkDateValue(new Date(this.checkValue(newProp.max))) }, true);\n }\n this.setProperties({ start: this.currentView() }, true);\n if (this.tableBodyElement) {\n detach(this.tableBodyElement);\n }\n this.minMaxUpdate();\n if (multiSelection) {\n this.validateValues(multiSelection, values);\n }\n if (this.getModuleName() !== 'datepicker') {\n this.createContentBody();\n }\n else if (this.calendarElement) {\n this.createContentBody();\n }\n if ((this.todayDate < this.min || this.max < this.todayDate) && (this.footer) && (this.todayElement)) {\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = null;\n this.createContentFooter();\n }\n else {\n if ((this.footer) && (this.todayElement) && this.todayElement.classList.contains('e-disabled')) {\n removeClass([this.todayElement], DISABLED);\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = null;\n this.createContentFooter();\n }\n }\n break;\n case 'start':\n case 'depth':\n case 'weekNumber':\n case 'firstDayOfWeek':\n case 'weekRule':\n this.checkView();\n if (this.getModuleName() !== 'datepicker') {\n this.createContentHeader();\n this.createContentBody();\n }\n else if (this.calendarElement) {\n this.createContentHeader();\n this.createContentBody();\n }\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n if (this.getModuleName() !== 'datepicker') {\n this.createContentHeader();\n this.createContentBody();\n }\n else if (this.calendarElement) {\n this.createContentHeader();\n this.createContentBody();\n }\n if (this.getModuleName() === 'calendar') {\n var l10nLocale = { today: 'Today' };\n this.l10 = new L10n(this.getModuleName(), l10nLocale, this.locale);\n }\n this.l10.setLocale(this.locale);\n if (this.showTodayButton) {\n this.updateFooter();\n }\n break;\n case 'showTodayButton':\n if (newProp.showTodayButton) {\n this.createContentFooter();\n }\n else {\n if (!isNullOrUndefined(this.todayElement) && !isNullOrUndefined(this.footer)) {\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = undefined;\n }\n }\n this.setProperties({ showTodayButton: newProp.showTodayButton }, true);\n break;\n }\n }\n };\n /**\n * values property updated with considered disabled dates of the calendar.\n *\n * @param {boolean} multiSelection - Specifies whether multiple date selection is enabled.\n * @param {Date[]} values - Specifies the dates to validate.\n * @returns {void}\n */\n CalendarBase.prototype.validateValues = function (multiSelection, values) {\n if (multiSelection && !isNullOrUndefined(values) && values.length > 0) {\n var copyValues = this.copyValues(values);\n for (var skipIndex = 0; skipIndex < copyValues.length; skipIndex++) {\n var tempValue = copyValues[skipIndex];\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var tempValueString = void 0;\n if (this.calendarMode === 'Gregorian') {\n tempValueString = this.globalize.formatDate(tempValue, { type: 'date', skeleton: 'yMd' });\n }\n else {\n tempValueString = this.globalize.formatDate(tempValue, { type: 'dateTime', skeleton: 'full', calendar: 'islamic' });\n }\n var minFormatOption = { type: 'date', skeleton: 'yMd', calendar: type };\n var minStringValue = this.globalize.formatDate(this.min, minFormatOption);\n var minString = minStringValue;\n var maxFormatOption = { type: 'date', skeleton: 'yMd', calendar: type };\n var maxStringValue = this.globalize.formatDate(this.max, maxFormatOption);\n var maxString = maxStringValue;\n if (+new Date(tempValueString) < +new Date(minString) ||\n +new Date(tempValueString) > +new Date(maxString)) {\n copyValues.splice(skipIndex, 1);\n skipIndex = -1;\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n };\n CalendarBase.prototype.setValueUpdate = function () {\n if (!isNullOrUndefined(this.tableBodyElement)) {\n detach(this.tableBodyElement);\n this.setProperties({ start: this.currentView() }, true);\n this.createContentBody();\n }\n };\n CalendarBase.prototype.copyValues = function (values) {\n var copyValues = [];\n if (!isNullOrUndefined(values) && values.length > 0) {\n for (var index = 0; index < values.length; index++) {\n copyValues.push(new Date(+values[index]));\n }\n }\n return copyValues;\n };\n CalendarBase.prototype.titleUpdate = function (date, view) {\n var globalize = new Internationalization(this.locale);\n var dayFormatOptions;\n var monthFormatOptions;\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n if (this.calendarMode === 'Gregorian') {\n dayFormatOptions = globalize.formatDate(date, { type: 'dateTime', skeleton: 'yMMMM', calendar: type });\n monthFormatOptions = globalize.formatDate(date, {\n format: null, type: 'dateTime', skeleton: 'y', calendar: type\n });\n }\n else {\n dayFormatOptions = globalize.formatDate(date, { type: 'dateTime', format: 'MMMM y', calendar: type });\n monthFormatOptions = globalize.formatDate(date, { type: 'dateTime', format: 'y', calendar: type });\n }\n switch (view) {\n case 'days':\n this.headerTitleElement.textContent = this.toCapitalize(dayFormatOptions);\n break;\n case 'months':\n this.headerTitleElement.textContent = monthFormatOptions;\n }\n };\n CalendarBase.prototype.setActiveDescendant = function () {\n var id;\n var focusedEle = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedEle = this.tableBodyElement.querySelector('tr td.e-selected');\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var title;\n var view = this.currentView();\n if (view === 'Month') {\n title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'full', calendar: type });\n }\n else if (view === 'Year') {\n if (type !== 'islamic') {\n title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'yMMMM', calendar: type });\n }\n else {\n title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'GyMMM', calendar: type });\n }\n }\n else {\n title = this.globalize.formatDate(this.currentDate, {\n format: null, type: 'date', skeleton: 'y', calendar: type\n });\n }\n if (selectedEle || focusedEle) {\n if (!isNullOrUndefined(selectedEle)) {\n selectedEle.setAttribute('aria-selected', 'true');\n }\n (focusedEle || selectedEle).setAttribute('aria-label', title);\n id = (focusedEle || selectedEle).getAttribute('id');\n }\n return id;\n };\n CalendarBase.prototype.iconHandler = function () {\n new Date(this.checkValue(this.currentDate)).setDate(1);\n switch (this.currentView()) {\n case 'Month':\n this.previousIconHandler(this.compareMonth(new Date(this.checkValue(this.currentDate)), this.min) < 1);\n this.nextIconHandler(this.compareMonth(new Date(this.checkValue(this.currentDate)), this.max) > -1);\n break;\n case 'Year':\n this.previousIconHandler(this.compareYear(new Date(this.checkValue(this.currentDate)), this.min) < 1);\n this.nextIconHandler(this.compareYear(new Date(this.checkValue(this.currentDate)), this.max) > -1);\n break;\n case 'Decade':\n this.previousIconHandler(this.compareDecade(new Date(this.checkValue(this.currentDate)), this.min) < 1);\n this.nextIconHandler(this.compareDecade(new Date(this.checkValue(this.currentDate)), this.max) > -1);\n }\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n CalendarBase.prototype.destroy = function () {\n if (this.getModuleName() === 'calendar' && this.element) {\n removeClass([this.element], [ROOT]);\n }\n else {\n if (this.calendarElement && this.element) {\n removeClass([this.element], [ROOT]);\n }\n }\n if (this.getModuleName() === 'calendar' && this.element) {\n if (!isNullOrUndefined(this.headerTitleElement)) {\n EventHandler.remove(this.headerTitleElement, 'click', this.navigateTitle);\n }\n if (this.todayElement) {\n EventHandler.remove(this.todayElement, 'click', this.todayButtonClick);\n }\n this.previousIconHandler(true);\n this.nextIconHandler(true);\n this.keyboardModule.destroy();\n this.element.removeAttribute('data-role');\n if (!isNullOrUndefined(this.calendarEleCopy.getAttribute('tabindex'))) {\n this.element.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.element.removeAttribute('tabindex');\n }\n }\n if (this.element) {\n this.element.innerHTML = '';\n }\n this.todayElement = null;\n this.tableBodyElement = null;\n this.todayButtonEvent = null;\n this.renderDayCellArgs = null;\n this.headerElement = null;\n this.nextIcon = null;\n this.table = null;\n this.tableHeadElement = null;\n this.previousIcon = null;\n this.headerTitleElement = null;\n this.footer = null;\n this.contentElement = null;\n _super.prototype.destroy.call(this);\n };\n CalendarBase.prototype.title = function (e) {\n var currentView = this.getViewNumber(this.currentView());\n this.effect = ZOOMIN;\n this.switchView(++currentView, e);\n };\n CalendarBase.prototype.getViewNumber = function (stringVal) {\n if (stringVal === 'Month') {\n return 0;\n }\n else if (stringVal === 'Year') {\n return 1;\n }\n else {\n return 2;\n }\n };\n CalendarBase.prototype.navigateTitle = function (e) {\n e.preventDefault();\n this.title(e);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n CalendarBase.prototype.previous = function () {\n this.effect = '';\n var currentView = this.getViewNumber(this.currentView());\n switch (this.currentView()) {\n case 'Month':\n this.addMonths(this.currentDate, -1);\n this.switchView(currentView);\n break;\n case 'Year':\n this.addYears(this.currentDate, -1);\n this.switchView(currentView);\n break;\n case 'Decade':\n this.addYears(this.currentDate, -10);\n this.switchView(currentView);\n break;\n }\n };\n CalendarBase.prototype.navigatePrevious = function (e) {\n !Browser.isDevice && e.preventDefault();\n if (this.calendarMode === 'Gregorian') {\n this.previous();\n }\n else {\n this.islamicModule.islamicPrevious();\n }\n this.triggerNavigate(e);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n CalendarBase.prototype.next = function () {\n this.effect = '';\n var currentView = this.getViewNumber(this.currentView());\n switch (this.currentView()) {\n case 'Month':\n this.addMonths(this.currentDate, 1);\n this.switchView(currentView);\n break;\n case 'Year':\n this.addYears(this.currentDate, 1);\n this.switchView(currentView);\n break;\n case 'Decade':\n this.addYears(this.currentDate, 10);\n this.switchView(currentView);\n break;\n }\n };\n CalendarBase.prototype.navigateNext = function (eve) {\n !Browser.isDevice && eve.preventDefault();\n if (this.calendarMode === 'Gregorian') {\n this.next();\n }\n else {\n this.islamicModule.islamicNext();\n }\n this.triggerNavigate(eve);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n *\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @param {boolean} isCustomDate - Specifies whether the calendar is rendered with custom today date or not.\n * @returns {void}\n */\n CalendarBase.prototype.navigateTo = function (view, date, isCustomDate) {\n if (+date >= +this.min && +date <= +this.max) {\n this.currentDate = date;\n }\n if (+date <= +this.min) {\n this.currentDate = new Date(this.checkValue(this.min));\n }\n if (+date >= +this.max) {\n this.currentDate = new Date(this.checkValue(this.max));\n }\n if ((this.getViewNumber(this.depth) >= this.getViewNumber(view))) {\n if ((this.getViewNumber(this.depth) <= this.getViewNumber(this.start))\n || this.getViewNumber(this.depth) === this.getViewNumber(view)) {\n view = this.depth;\n }\n }\n this.switchView(this.getViewNumber(view), null, null, isCustomDate);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the current view of the Calendar.\n *\n * @returns {string}\n */\n CalendarBase.prototype.currentView = function () {\n if (!isNullOrUndefined(this.contentElement) && this.contentElement.classList.contains(YEAR)) {\n return 'Year';\n }\n else if (!isNullOrUndefined(this.contentElement) && this.contentElement.classList.contains(DECADE)) {\n return 'Decade';\n }\n else {\n return 'Month';\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n CalendarBase.prototype.getDateVal = function (date, value) {\n return (!isNullOrUndefined(value) && date.getDate() === (value).getDate()\n && date.getMonth() === (value).getMonth() && date.getFullYear() === (value).getFullYear());\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.getCultureObjects = function (ld, c) {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.' + this.dayHeaderFormat.toLowerCase();\n var islamicFormat = '.dates.calendars.islamic.days.format.' + this.dayHeaderFormat.toLowerCase();\n var mainVal = 'main.';\n if (this.calendarMode === 'Gregorian') {\n return getValue(mainVal + '' + this.locale + gregorianFormat, ld);\n }\n else {\n return getValue('main.' + '' + this.locale + islamicFormat, ld);\n }\n };\n CalendarBase.prototype.getWeek = function (d) {\n var currentDate = new Date(this.checkValue(d)).valueOf();\n var date = new Date(d.getFullYear(), 0, 1).valueOf();\n return Math.ceil((((currentDate - date) + dayMilliSeconds) / dayMilliSeconds) / 7);\n };\n CalendarBase.prototype.setStartDate = function (date, time) {\n var tzOffset = date.getTimezoneOffset();\n var d = new Date(date.getTime() + time);\n var tzOffsetDiff = d.getTimezoneOffset() - tzOffset;\n date.setTime(d.getTime() + tzOffsetDiff * minutesMilliSeconds);\n };\n CalendarBase.prototype.addMonths = function (date, i) {\n if (this.calendarMode === 'Gregorian') {\n var day = date.getDate();\n date.setDate(1);\n date.setMonth(date.getMonth() + i);\n date.setDate(Math.min(day, this.getMaxDays(date)));\n }\n else {\n var islamicDate = this.islamicModule.getIslamicDate(date);\n this.currentDate = this.islamicModule.toGregorian(islamicDate.year, (islamicDate.month) + i, 1);\n }\n };\n CalendarBase.prototype.addYears = function (date, i) {\n if (this.calendarMode === 'Gregorian') {\n var day = date.getDate();\n date.setDate(1);\n date.setFullYear(date.getFullYear() + i);\n date.setDate(Math.min(day, this.getMaxDays(date)));\n }\n else {\n var islamicDate = this.islamicModule.getIslamicDate(date);\n this.currentDate = this.islamicModule.toGregorian(islamicDate.year + i, (islamicDate.month), 1);\n }\n };\n CalendarBase.prototype.getIdValue = function (e, element) {\n var eve;\n if (e) {\n eve = e.currentTarget;\n }\n else {\n eve = element;\n }\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full', calendar: type };\n // eslint-disable-next-line radix\n var dateString = this.globalize.formatDate(new Date(parseInt('' + eve.getAttribute('id'), 0)), dateFormatOptions);\n var date = this.globalize.parseDate(dateString, dateFormatOptions);\n var value = date.valueOf() - date.valueOf() % 1000;\n return new Date(value);\n //return this.globalize.parseDate(dateString, dateFormatOptions);\n };\n CalendarBase.prototype.adjustLongHeaderSize = function () {\n removeClass([this.element], DAYHEADERLONG);\n if (this.dayHeaderFormat === 'Wide') {\n addClass([this.getModuleName() === 'calendar' ? this.element : this.calendarElement], DAYHEADERLONG);\n }\n };\n CalendarBase.prototype.selectDate = function (e, date, node, multiSelection, values) {\n var element = node || e.currentTarget;\n this.isDateSelected = false;\n if (this.currentView() === 'Decade') {\n this.setDateDecade(this.currentDate, date.getFullYear());\n }\n else if (this.currentView() === 'Year') {\n this.setDateYear(this.currentDate, date);\n }\n else {\n if (multiSelection && !this.checkPresentDate(date, values)) {\n var copyValues = this.copyValues(values);\n if (!isNullOrUndefined(values) && copyValues.length > 0) {\n copyValues.push(new Date(this.checkValue(date)));\n this.setProperties({ values: copyValues }, true);\n this.setProperties({ value: values[values.length - 1] }, true);\n }\n else {\n this.setProperties({ values: [new Date(this.checkValue(date))] }, true);\n }\n }\n else {\n this.setProperties({ value: new Date(this.checkValue(date)) }, true);\n }\n this.currentDate = new Date(this.checkValue(date));\n }\n var tableBodyElement = closest(element, '.' + ROOT);\n if (isNullOrUndefined(tableBodyElement)) {\n tableBodyElement = this.tableBodyElement;\n }\n if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + SELECTED))) {\n removeClass([tableBodyElement.querySelector('.' + SELECTED)], SELECTED);\n }\n if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + FOCUSEDDATE))) {\n removeClass([tableBodyElement.querySelector('.' + FOCUSEDDATE)], FOCUSEDDATE);\n }\n if (multiSelection) {\n var copyValues = this.copyValues(values);\n var collection = Array.prototype.slice.call(this.tableBodyElement.querySelectorAll('td'));\n for (var index = 0; index < collection.length; index++) {\n var tempElement = tableBodyElement.querySelectorAll('td' + '.' + FOCUSEDDATE)[0];\n var selectedElement = tableBodyElement.querySelectorAll('td' + '.' + SELECTED)[0];\n if (collection[index] === tempElement) {\n removeClass([collection[index]], FOCUSEDDATE);\n }\n if (collection[index] === selectedElement &&\n !this.checkPresentDate(new Date(parseInt(selectedElement.getAttribute('id').split('_')[0], 10)), values)) {\n removeClass([collection[index]], SELECTED);\n }\n }\n if (element.classList.contains(SELECTED)) {\n removeClass([element], SELECTED);\n for (var i = 0; i < copyValues.length; i++) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var formatOptions = { format: null, type: 'date', skeleton: 'short', calendar: type };\n var localDateString = this.globalize.formatDate(date, formatOptions);\n var tempDateString = this.globalize.formatDate(copyValues[i], formatOptions);\n if (localDateString === tempDateString) {\n var index = copyValues.indexOf(copyValues[i]);\n copyValues.splice(index, 1);\n addClass([element], FOCUSEDDATE);\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n else {\n addClass([element], SELECTED);\n }\n }\n else {\n addClass([element], SELECTED);\n }\n this.isDateSelected = true;\n };\n CalendarBase.prototype.checkPresentDate = function (dates, values) {\n var previousValue = false;\n if (!isNullOrUndefined(values)) {\n for (var checkPrevious = 0; checkPrevious < values.length; checkPrevious++) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var localDateString = this.globalize.formatDate(dates, {\n format: null, type: 'date', skeleton: 'short', calendar: type\n });\n var tempDateString = this.globalize.formatDate(values[checkPrevious], {\n format: null, type: 'date', skeleton: 'short', calendar: type\n });\n if (localDateString === tempDateString) {\n previousValue = true;\n }\n }\n }\n return previousValue;\n };\n CalendarBase.prototype.setAriaActiveDescendant = function () {\n attributes(this.table, {\n 'aria-activedescendant': '' + this.setActiveDescendant()\n });\n };\n CalendarBase.prototype.previousIconHandler = function (disabled) {\n if (disabled) {\n if (!isNullOrUndefined(this.previousIcon)) {\n EventHandler.remove(this.previousIcon, 'click', this.navigatePreviousHandler);\n addClass([this.previousIcon], '' + DISABLED);\n addClass([this.previousIcon], '' + OVERLAY);\n this.previousIcon.setAttribute('aria-disabled', 'true');\n }\n }\n else {\n EventHandler.add(this.previousIcon, 'click', this.navigatePreviousHandler);\n removeClass([this.previousIcon], '' + DISABLED);\n removeClass([this.previousIcon], '' + OVERLAY);\n this.previousIcon.setAttribute('aria-disabled', 'false');\n }\n };\n CalendarBase.prototype.renderDayCellEvent = function (args) {\n extend(this.renderDayCellArgs, { name: 'renderDayCell' });\n this.trigger('renderDayCell', args);\n };\n CalendarBase.prototype.navigatedEvent = function (eve) {\n extend(this.navigatedArgs, { name: 'navigated', event: eve });\n this.trigger('navigated', this.navigatedArgs);\n };\n CalendarBase.prototype.triggerNavigate = function (event) {\n this.navigatedArgs = { view: this.currentView(), date: this.currentDate };\n this.navigatedEvent(event);\n };\n CalendarBase.prototype.nextIconHandler = function (disabled) {\n if (disabled) {\n if (!isNullOrUndefined(this.previousIcon)) {\n EventHandler.remove(this.nextIcon, 'click', this.navigateNextHandler);\n addClass([this.nextIcon], DISABLED);\n addClass([this.nextIcon], OVERLAY);\n this.nextIcon.setAttribute('aria-disabled', 'true');\n }\n }\n else {\n EventHandler.add(this.nextIcon, 'click', this.navigateNextHandler);\n removeClass([this.nextIcon], DISABLED);\n removeClass([this.nextIcon], OVERLAY);\n this.nextIcon.setAttribute('aria-disabled', 'false');\n }\n };\n CalendarBase.prototype.compare = function (startDate, endDate, modifier) {\n var start = endDate.getFullYear();\n var end;\n var result;\n end = start;\n result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (startDate.getFullYear() > end) {\n result = 1;\n }\n else if (startDate.getFullYear() < start) {\n result = -1;\n }\n return result;\n };\n CalendarBase.prototype.isMinMaxRange = function (date) {\n return +date >= +this.min && +date <= +this.max;\n };\n CalendarBase.prototype.isMonthYearRange = function (date) {\n if (this.calendarMode === 'Gregorian') {\n return date.getMonth() >= this.min.getMonth()\n && date.getFullYear() >= this.min.getFullYear()\n && date.getMonth() <= this.max.getMonth()\n && date.getFullYear() <= this.max.getFullYear();\n }\n else {\n var islamicDate = this.islamicModule.getIslamicDate(date);\n return islamicDate.month >= (this.islamicModule.getIslamicDate(new Date(1944, 1, 18))).month\n && islamicDate.year >= (this.islamicModule.getIslamicDate(new Date(1944, 1, 18))).year\n && islamicDate.month <= (this.islamicModule.getIslamicDate(new Date(2069, 1, 16))).month\n && islamicDate.year <= (this.islamicModule.getIslamicDate(new Date(2069, 1, 16))).year;\n }\n };\n CalendarBase.prototype.compareYear = function (start, end) {\n return this.compare(start, end, 0);\n };\n CalendarBase.prototype.compareDecade = function (start, end) {\n return this.compare(start, end, 10);\n };\n CalendarBase.prototype.shiftArray = function (array, i) {\n return array.slice(i).concat(array.slice(0, i));\n };\n CalendarBase.prototype.addDay = function (date, i, e, max, min) {\n var column = i;\n var value = new Date(+date);\n if (!isNullOrUndefined(this.tableBodyElement) && !isNullOrUndefined(e)) {\n while (this.findNextTD(new Date(+date), column, max, min)) {\n column += i;\n }\n var rangeValue = new Date(value.setDate(value.getDate() + column));\n column = (+rangeValue > +max || +rangeValue < +min) ? column === i ? i - i : i : column;\n }\n date.setDate(date.getDate() + column);\n };\n CalendarBase.prototype.findNextTD = function (date, column, max, min) {\n var value = new Date(date.setDate(date.getDate() + column));\n var collection = [];\n var isDisabled = false;\n if ((!isNullOrUndefined(value) && value.getMonth()) === (!isNullOrUndefined(this.currentDate) && this.currentDate.getMonth())) {\n var tdEles = void 0;\n if (this.calendarMode === 'Gregorian') {\n tdEles = this.renderDays(value);\n }\n else {\n tdEles = this.islamicModule.islamicRenderDays(this.currentDate, value);\n }\n collection = tdEles.filter(function (element) {\n return element.classList.contains(DISABLED);\n });\n }\n else {\n collection = this.tableBodyElement.querySelectorAll('td.' + DISABLED);\n }\n if (+value <= (+(max)) && +value >= (+(min))) {\n if (collection.length) {\n for (var i = 0; i < collection.length; i++) {\n // eslint-disable-next-line radix\n isDisabled = (+value === +new Date(parseInt(collection[i].id, 0))) ? true : false;\n if (isDisabled) {\n break;\n }\n }\n }\n }\n return isDisabled;\n };\n CalendarBase.prototype.getMaxDays = function (d) {\n var date;\n var tmpDate = new Date(this.checkValue(d));\n date = 28;\n var month = tmpDate.getMonth();\n while (tmpDate.getMonth() === month) {\n ++date;\n tmpDate.setDate(date);\n }\n return date - 1;\n };\n CalendarBase.prototype.setDateDecade = function (date, year) {\n date.setFullYear(year);\n this.setProperties({ value: new Date(this.checkValue(date)) }, true);\n };\n CalendarBase.prototype.setDateYear = function (date, value) {\n date.setFullYear(value.getFullYear(), value.getMonth(), date.getDate());\n if (value.getMonth() !== date.getMonth()) {\n date.setDate(0);\n this.currentDate = new Date(this.checkValue(value));\n }\n this.setProperties({ value: new Date(this.checkValue(date)) }, true);\n };\n CalendarBase.prototype.compareMonth = function (start, end) {\n var result;\n if (start.getFullYear() > end.getFullYear()) {\n result = 1;\n }\n else if (start.getFullYear() < end.getFullYear()) {\n result = -1;\n }\n else {\n result = start.getMonth() === end.getMonth() ? 0 : start.getMonth() > end.getMonth() ? 1 : -1;\n }\n return result;\n };\n CalendarBase.prototype.checkValue = function (inValue) {\n if (inValue instanceof Date) {\n return (inValue.toUTCString());\n }\n else {\n return ('' + inValue);\n }\n };\n CalendarBase.prototype.checkView = function () {\n if (this.start !== 'Decade' && this.start !== 'Year') {\n this.setProperties({ start: 'Month' }, true);\n }\n if (this.depth !== 'Decade' && this.depth !== 'Year') {\n this.setProperties({ depth: 'Month' }, true);\n }\n if (this.getViewNumber(this.depth) > this.getViewNumber(this.start)) {\n this.setProperties({ depth: 'Month' }, true);\n }\n };\n CalendarBase.prototype.getDate = function (date, timezone) {\n if (timezone) {\n date = new Date(date.toLocaleString('en-US', { timeZone: timezone }));\n }\n return date;\n };\n __decorate([\n Property(new Date(1900, 0, 1))\n ], CalendarBase.prototype, \"min\", void 0);\n __decorate([\n Property(true)\n ], CalendarBase.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"cssClass\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], CalendarBase.prototype, \"max\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property('Gregorian')\n ], CalendarBase.prototype, \"calendarMode\", void 0);\n __decorate([\n Property('Month')\n ], CalendarBase.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], CalendarBase.prototype, \"depth\", void 0);\n __decorate([\n Property(false)\n ], CalendarBase.prototype, \"weekNumber\", void 0);\n __decorate([\n Property('FirstDay')\n ], CalendarBase.prototype, \"weekRule\", void 0);\n __decorate([\n Property(true)\n ], CalendarBase.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property('Short')\n ], CalendarBase.prototype, \"dayHeaderFormat\", void 0);\n __decorate([\n Property(false)\n ], CalendarBase.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"navigated\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"renderDayCell\", void 0);\n CalendarBase = __decorate([\n NotifyPropertyChanges\n ], CalendarBase);\n return CalendarBase;\n}(Component));\nexport { CalendarBase };\n/**\n * Represents the Calendar component that allows the user to select a date.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Calendar = /** @class */ (function (_super) {\n __extends(Calendar, _super);\n /**\n * Initialized new instance of Calendar Class.\n * Constructor for creating the widget\n *\n * @param {CalendarModel} options - Specifies the Calendar model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function Calendar(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n Calendar.prototype.render = function () {\n if (this.calendarMode === 'Islamic' && this.islamicModule === undefined) {\n throwError('Requires the injectable Islamic modules to render Calendar in Islamic mode');\n }\n if (this.isMultiSelection && typeof this.values === 'object' && !isNullOrUndefined(this.values) && this.values.length > 0) {\n var tempValues = [];\n var copyValues = [];\n for (var limit = 0; limit < this.values.length; limit++) {\n if (tempValues.indexOf(+this.values[limit]) === -1) {\n tempValues.push(+this.values[limit]);\n copyValues.push(this.values[limit]);\n }\n }\n this.setProperties({ values: copyValues }, true);\n for (var index = 0; index < this.values.length; index++) {\n if (!this.checkDateValue(this.values[index])) {\n if (typeof (this.values[index]) === 'string' && this.checkDateValue(new Date(this.checkValue(this.values[index])))) {\n var copyDate = new Date(this.checkValue(this.values[index]));\n this.values.splice(index, 1);\n this.values.splice(index, 0, copyDate);\n }\n else {\n this.values.splice(index, 1);\n }\n }\n }\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n this.previousValues = this.values.length;\n }\n this.validateDate();\n this.minMaxUpdate();\n if (this.getModuleName() === 'calendar') {\n this.setEnable(this.enabled);\n this.setClass(this.cssClass);\n }\n _super.prototype.render.call(this);\n if (this.getModuleName() === 'calendar') {\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.add(form, 'reset', this.formResetHandler.bind(this));\n }\n this.setTimeZone(this.serverTimezoneOffset);\n }\n this.renderComplete();\n };\n Calendar.prototype.setEnable = function (enable) {\n if (!enable) {\n addClass([this.element], DISABLED);\n }\n else {\n removeClass([this.element], DISABLED);\n }\n };\n Calendar.prototype.setClass = function (newCssClass, oldCssClass) {\n if (!isNullOrUndefined(oldCssClass)) {\n oldCssClass = (oldCssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(newCssClass)) {\n newCssClass = (newCssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(oldCssClass) && oldCssClass !== '') {\n removeClass([this.element], oldCssClass.split(' '));\n }\n if (!isNullOrUndefined(newCssClass)) {\n addClass([this.element], newCssClass.split(' '));\n }\n };\n Calendar.prototype.isDayLightSaving = function () {\n var secondOffset = new Date(this.value.getFullYear(), 6, 1).getTimezoneOffset();\n var firstOffset = new Date(this.value.getFullYear(), 0, 1).getTimezoneOffset();\n return (this.value.getTimezoneOffset() < Math.max(firstOffset, secondOffset));\n };\n Calendar.prototype.setTimeZone = function (offsetValue) {\n if (!isNullOrUndefined(this.serverTimezoneOffset) && this.value) {\n var serverTimezoneDiff = offsetValue;\n var clientTimeZoneDiff = new Date().getTimezoneOffset() / 60;\n var timeZoneDiff = serverTimezoneDiff + clientTimeZoneDiff;\n timeZoneDiff = this.isDayLightSaving() ? timeZoneDiff-- : timeZoneDiff;\n this.value = new Date(this.value.getTime() + (timeZoneDiff * 60 * 60 * 1000));\n }\n };\n Calendar.prototype.formResetHandler = function () {\n this.setProperties({ value: null }, true);\n };\n Calendar.prototype.validateDate = function () {\n if (typeof this.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date(this.checkValue(this.value))) }, true); // persist the value property.\n }\n _super.prototype.validateDate.call(this, this.value);\n if (!isNullOrUndefined(this.value) && this.min <= this.max && this.value >= this.min && this.value <= this.max) {\n this.currentDate = new Date(this.checkValue(this.value));\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: null }, true);\n }\n };\n Calendar.prototype.minMaxUpdate = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.value) && this.value <= this.min && this.min <= this.max) {\n this.setProperties({ value: this.min }, true);\n this.changedArgs = { value: this.value };\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value >= this.max && this.min <= this.max) {\n this.setProperties({ value: this.max }, true);\n this.changedArgs = { value: this.value };\n }\n }\n }\n if (this.getModuleName() !== 'calendar' && !isNullOrUndefined(this.value)) {\n if (!isNullOrUndefined(this.value) && this.value < this.min && this.min <= this.max) {\n _super.prototype.minMaxUpdate.call(this, this.min);\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value > this.max && this.min <= this.max) {\n _super.prototype.minMaxUpdate.call(this, this.max);\n }\n }\n }\n else {\n _super.prototype.minMaxUpdate.call(this, this.value);\n }\n };\n Calendar.prototype.generateTodayVal = function (value) {\n var tempValue = new Date();\n if (!isNullOrUndefined(this.timezone)) {\n tempValue = _super.prototype.getDate.call(this, tempValue, this.timezone);\n }\n if (value && isNullOrUndefined(this.timezone)) {\n tempValue.setHours(value.getHours());\n tempValue.setMinutes(value.getMinutes());\n tempValue.setSeconds(value.getSeconds());\n tempValue.setMilliseconds(value.getMilliseconds());\n }\n else {\n tempValue = new Date(tempValue.getFullYear(), tempValue.getMonth(), tempValue.getDate(), 0, 0, 0, 0);\n }\n return tempValue;\n };\n Calendar.prototype.todayButtonClick = function (e) {\n if (this.showTodayButton) {\n var tempValue = this.generateTodayVal(this.value);\n this.setProperties({ value: tempValue }, true);\n this.isTodayClicked = true;\n this.todayButtonEvent = e;\n if (this.isMultiSelection) {\n var copyValues = this.copyValues(this.values);\n if (!_super.prototype.checkPresentDate.call(this, tempValue, this.values)) {\n copyValues.push(tempValue);\n this.setProperties({ values: copyValues });\n }\n }\n _super.prototype.todayButtonClick.call(this, e, new Date(+this.value));\n }\n };\n Calendar.prototype.keyActionHandle = function (e) {\n _super.prototype.keyActionHandle.call(this, e, this.value, this.isMultiSelection);\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n Calendar.prototype.preRender = function () {\n var _this = this;\n this.changeHandler = function (e) {\n _this.triggerChange(e);\n };\n this.checkView();\n _super.prototype.preRender.call(this, this.value);\n };\n /**\n * @returns {void}\n\n */\n Calendar.prototype.createContent = function () {\n this.previousDate = this.value;\n this.previousDateTime = this.value;\n _super.prototype.createContent.call(this);\n };\n Calendar.prototype.minMaxDate = function (localDate) {\n return _super.prototype.minMaxDate.call(this, localDate);\n };\n Calendar.prototype.renderMonths = function (e, value, isCustomDate) {\n _super.prototype.renderMonths.call(this, e, this.value, isCustomDate);\n };\n Calendar.prototype.renderDays = function (currentDate, value, isMultiSelect, values, isCustomDate, e) {\n var tempDays = _super.prototype.renderDays.call(this, currentDate, this.value, this.isMultiSelection, this.values, isCustomDate, e);\n if (this.isMultiSelection) {\n _super.prototype.validateValues.call(this, this.isMultiSelection, this.values);\n }\n return tempDays;\n };\n Calendar.prototype.renderYears = function (e) {\n if (this.calendarMode === 'Gregorian') {\n _super.prototype.renderYears.call(this, e, this.value);\n }\n else {\n this.islamicModule.islamicRenderYears(e, this.value);\n }\n };\n Calendar.prototype.renderDecades = function (e) {\n if (this.calendarMode === 'Gregorian') {\n _super.prototype.renderDecades.call(this, e, this.value);\n }\n else {\n this.islamicModule.islamicRenderDecade(e, this.value);\n }\n };\n Calendar.prototype.renderTemplate = function (elements, count, classNm, e) {\n if (this.calendarMode === 'Gregorian') {\n _super.prototype.renderTemplate.call(this, elements, count, classNm, e, this.value);\n }\n else {\n this.islamicModule.islamicRenderTemplate(elements, count, classNm, e, this.value);\n }\n this.changedArgs = { value: this.value, values: this.values };\n e && e.type === 'click' && e.currentTarget.classList.contains(OTHERMONTH) ? this.changeHandler(e) : this.changeHandler();\n };\n Calendar.prototype.clickHandler = function (e) {\n var eve = e.currentTarget;\n this.isPopupClicked = true;\n if (eve.classList.contains(OTHERMONTH)) {\n if (this.isMultiSelection) {\n var copyValues = this.copyValues(this.values);\n if (copyValues.toString().indexOf(this.getIdValue(e, null).toString()) === -1) {\n copyValues.push(this.getIdValue(e, null));\n this.setProperties({ values: copyValues }, true);\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n else {\n this.previousDates = true;\n }\n }\n else {\n this.setProperties({ value: this.getIdValue(e, null) }, true);\n }\n }\n var storeView = this.currentView();\n _super.prototype.clickHandler.call(this, e, this.value);\n if (this.isMultiSelection && this.currentDate !== this.value &&\n !isNullOrUndefined(this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0]) && storeView === 'Year') {\n this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0].classList.remove(FOCUSEDDATE);\n }\n };\n Calendar.prototype.switchView = function (view, e, isMultiSelection, isCustomDate) {\n _super.prototype.switchView.call(this, view, e, this.isMultiSelection, isCustomDate);\n };\n /**\n * To get component name\n *\n * @returns {string} Return the component name.\n * @private\n */\n Calendar.prototype.getModuleName = function () {\n _super.prototype.getModuleName.call(this);\n return 'calendar';\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string}\n */\n Calendar.prototype.getPersistData = function () {\n _super.prototype.getPersistData.call(this);\n var keyEntity = ['value', 'values'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Called internally if any of the property value changed.\n *\n * @param {CalendarModel} newProp - Returns the dynamic property value of the component.\n * @param {CalendarModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n Calendar.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.effect = '';\n this.rangeValidation(this.min, this.max);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n if (this.isDateSelected) {\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: new Date(this.checkValue(newProp.value)) }, true);\n }\n else {\n newProp.value = new Date(this.checkValue(newProp.value));\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: oldProp.value }, true);\n }\n this.update();\n }\n break;\n case 'values':\n if (this.isDateSelected) {\n if (typeof newProp.values === 'string' || typeof newProp.values === 'number') {\n this.setProperties({ values: null }, true);\n }\n else {\n var copyValues = this.copyValues(this.values);\n for (var index = 0; index < copyValues.length; index++) {\n var tempDate = copyValues[index];\n if (this.checkDateValue(tempDate) && !_super.prototype.checkPresentDate.call(this, tempDate, copyValues)) {\n copyValues.push(tempDate);\n }\n }\n this.setProperties({ values: copyValues }, true);\n if (this.values.length > 0) {\n this.setProperties({ value: newProp.values[newProp.values.length - 1] }, true);\n }\n }\n this.validateValues(this.isMultiSelection, this.values);\n this.update();\n }\n break;\n case 'isMultiSelection':\n if (this.isDateSelected) {\n this.setProperties({ isMultiSelection: newProp.isMultiSelection }, true);\n this.update();\n }\n break;\n case 'enabled':\n this.setEnable(this.enabled);\n break;\n case 'cssClass':\n if (this.getModuleName() === 'calendar') {\n this.setClass(newProp.cssClass, oldProp.cssClass);\n }\n break;\n default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp, this.isMultiSelection, this.values);\n }\n }\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n Calendar.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.getModuleName() === 'calendar') {\n this.changedArgs = null;\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n }\n }\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n *\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @param {boolean} isCustomDate - Specifies whether the calendar is rendered with custom today date or not.\n * @returns {void}\n\n */\n Calendar.prototype.navigateTo = function (view, date, isCustomDate) {\n this.minMaxUpdate();\n _super.prototype.navigateTo.call(this, view, date, isCustomDate);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the current view of the Calendar.\n *\n * @returns {string}\n\n */\n Calendar.prototype.currentView = function () {\n return _super.prototype.currentView.call(this);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * This method is used to add the single or multiple dates to the values property of the Calendar.\n *\n * @param {Date | Date[]} dates - Specifies the date or dates to be added to the values property of the Calendar.\n * @returns {void}\n\n */\n Calendar.prototype.addDate = function (dates) {\n if (typeof dates !== 'string' && typeof dates !== 'number') {\n var copyValues = this.copyValues(this.values);\n if (typeof dates === 'object' && (dates).length > 0) {\n var tempDates = dates;\n for (var i = 0; i < tempDates.length; i++) {\n if (this.checkDateValue(tempDates[i]) && !_super.prototype.checkPresentDate.call(this, tempDates[i], copyValues)) {\n if (!isNullOrUndefined(copyValues) && copyValues.length > 0) {\n copyValues.push(tempDates[i]);\n }\n else {\n copyValues = [new Date(+tempDates[i])];\n }\n }\n }\n }\n else {\n if (this.checkDateValue(dates) && !_super.prototype.checkPresentDate.call(this, dates, copyValues)) {\n if (!isNullOrUndefined(copyValues) && copyValues.length > 0) {\n copyValues.push((dates));\n }\n else {\n copyValues = [new Date(+dates)];\n }\n }\n }\n this.setProperties({ values: copyValues }, true);\n if (this.isMultiSelection) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.validateValues(this.isMultiSelection, copyValues);\n this.update();\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n }\n };\n /**\n * This method is used to remove the single or multiple dates from the values property of the Calendar.\n *\n * @param {Date | Date[]} dates - Specifies the date or dates which need to be removed from the values property of the Calendar.\n * @returns {void}\n\n */\n Calendar.prototype.removeDate = function (dates) {\n if (typeof dates !== 'string' && typeof dates !== 'number' && !isNullOrUndefined(this.values) && this.values.length > 0) {\n var copyValues = this.copyValues(this.values);\n if (typeof dates === 'object' && ((dates).length > 0)) {\n var tempDates = dates;\n for (var index = 0; index < tempDates.length; index++) {\n for (var i = 0; i < copyValues.length; i++) {\n if (+copyValues[i] === +tempDates[index]) {\n copyValues.splice(i, 1);\n }\n }\n }\n }\n else {\n for (var i = 0; i < copyValues.length; i++) {\n if (+copyValues[i] === +dates) {\n copyValues.splice(i, 1);\n }\n }\n }\n this.setProperties({ values: copyValues }, false);\n this.update();\n if (this.isMultiSelection) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n }\n };\n /**\n * To set custom today date in calendar\n *\n * @param {Date} date - Specifies date value to be set.\n * @private\n * @returns {void}\n */\n Calendar.prototype.setTodayDate = function (date) {\n var todayDate = new Date(+date);\n this.setProperties({ value: todayDate }, true);\n _super.prototype.todayButtonClick.call(this, null, todayDate, true);\n };\n Calendar.prototype.update = function () {\n this.validateDate();\n this.minMaxUpdate();\n _super.prototype.setValueUpdate.call(this);\n };\n Calendar.prototype.selectDate = function (e, date, element) {\n _super.prototype.selectDate.call(this, e, date, element, this.isMultiSelection, this.values);\n if (this.isMultiSelection && !isNullOrUndefined(this.values) && this.values.length > 0) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler(e);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Calendar.prototype.changeEvent = function (e) {\n if ((this.value && this.value.valueOf()) !== (this.previousDate && +this.previousDate.valueOf())\n || this.isMultiSelection) {\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', this.changedArgs);\n }\n this.previousDate = new Date(+this.value);\n }\n };\n Calendar.prototype.triggerChange = function (e) {\n if (!isNullOrUndefined(this.todayButtonEvent) && this.isTodayClicked) {\n e = this.todayButtonEvent;\n this.isTodayClicked = false;\n }\n this.changedArgs.event = e || null;\n this.changedArgs.isInteracted = !isNullOrUndefined(e);\n if (!isNullOrUndefined(this.value)) {\n this.setProperties({ value: this.value }, true);\n }\n // eslint-disable-next-line use-isnan\n if (!this.isMultiSelection && +this.value !== Number.NaN && (!isNullOrUndefined(this.value) &&\n !isNullOrUndefined(this.previousDate) || this.previousDate === null\n && !isNaN(+this.value))) {\n this.changeEvent(e);\n }\n else if (!isNullOrUndefined(this.values) && this.previousValues !== this.values.length) {\n this.changeEvent(e);\n this.previousValues = this.values.length;\n }\n };\n __decorate([\n Property(null)\n ], Calendar.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Calendar.prototype, \"values\", void 0);\n __decorate([\n Property(false)\n ], Calendar.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Event()\n ], Calendar.prototype, \"change\", void 0);\n Calendar = __decorate([\n NotifyPropertyChanges\n ], Calendar);\n return Calendar;\n}(CalendarBase));\nexport { Calendar };\n","/**\n * Function helps to find which highlightSearch is to call based on your data.\n *\n * @param {HTMLElement} element - Specifies an li element.\n * @param {string} query - Specifies the string to be highlighted.\n * @param {boolean} ignoreCase - Specifies the ignoreCase option.\n * @param {HightLightType} type - Specifies the type of highlight.\n * @returns {void}\n */\nexport function highlightSearch(element, query, ignoreCase, type) {\n if (query === '') {\n return;\n }\n else {\n var ignoreRegex = ignoreCase ? 'gim' : 'gm';\n // eslint-disable-next-line\n query = /^[a-zA-Z0-9- ]*$/.test(query) ? query : query.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n var replaceQuery = type === 'StartsWith' ? '^(' + query + ')' : type === 'EndsWith' ?\n '(' + query + ')$' : '(' + query + ')';\n // eslint-disable-next-line security/detect-non-literal-regexp\n findTextNode(element, new RegExp(replaceQuery, ignoreRegex));\n }\n}\n/* eslint-enable jsdoc/require-param, valid-jsdoc */\n/**\n *\n * @param {HTMLElement} element - Specifies the element.\n * @param {RegExp} pattern - Specifies the regex to match the searched text.\n * @returns {void}\n */\nfunction findTextNode(element, pattern) {\n for (var index = 0; element.childNodes && (index < element.childNodes.length); index++) {\n if (element.childNodes[index].nodeType === 3 && element.childNodes[index].textContent.trim() !== '') {\n var value = element.childNodes[index].nodeValue.trim().replace(pattern, '$1');\n element.childNodes[index].nodeValue = '';\n element.innerHTML = element.innerHTML.trim() + value;\n break;\n }\n else {\n findTextNode(element.childNodes[index], pattern);\n }\n }\n}\n/**\n * Function helps to remove highlighted element based on your data.\n *\n * @param {HTMLElement} content - Specifies an content element.\n * @returns {void}\n */\nexport function revertHighlightSearch(content) {\n var contentElement = content.querySelectorAll('.e-highlight');\n for (var i = contentElement.length - 1; i >= 0; i--) {\n var parent_1 = contentElement[i].parentNode;\n var text = document.createTextNode(contentElement[i].textContent);\n parent_1.replaceChild(text, contentElement[i]);\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// \nimport { Property, EventHandler, isNullOrUndefined, detach } from '@syncfusion/ej2-base';\nimport { Event, Complex } from '@syncfusion/ej2-base';\nimport { removeClass, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { dropDownListClasses } from '../drop-down-list/drop-down-list';\nimport { ComboBox } from '../combo-box/combo-box';\nimport { highlightSearch, revertHighlightSearch } from '../common/highlight-search';\nimport { Search } from '../common/incremental-search';\nimport { FieldSettings } from '../drop-down-base/drop-down-base';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\ndropDownListClasses.root = 'e-autocomplete';\ndropDownListClasses.icon = 'e-input-group-icon e-ddl-icon e-search-icon';\n/**\n * The AutoComplete component provides the matched suggestion list when type into the input,\n * from which the user can select one.\n * ```html\n * \n * ```\n * ```typescript\n * let atcObj:AutoComplete = new AutoComplete();\n * atcObj.appendTo(\"#list\");\n * ```\n */\nvar AutoComplete = /** @class */ (function (_super) {\n __extends(AutoComplete, _super);\n /**\n * * Constructor for creating the widget\n *\n * @param {AutoCompleteModel} options - Specifies the AutoComplete model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function AutoComplete(options, element) {\n var _this_1 = _super.call(this, options, element) || this;\n _this_1.isFiltered = false;\n _this_1.searchList = false;\n return _this_1;\n }\n /**\n * Initialize the event handler\n *\n * @private\n * @returns {void}\n */\n AutoComplete.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\n };\n AutoComplete.prototype.getLocaleName = function () {\n return 'auto-complete';\n };\n AutoComplete.prototype.getNgDirective = function () {\n return 'EJS-AUTOCOMPLETE';\n };\n AutoComplete.prototype.getQuery = function (query) {\n var filterQuery = query ? query.clone() : this.query ? this.query.clone() : new Query();\n var filterType = (this.queryString === '' && !isNullOrUndefined(this.value)) ? 'equal' : this.filterType;\n var queryString = (this.queryString === '' && !isNullOrUndefined(this.value)) ? this.value : this.queryString;\n if (this.isFiltered) {\n return filterQuery;\n }\n if (this.queryString !== null && this.queryString !== '') {\n var dataType = this.typeOfData(this.dataSource).typeof;\n if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n filterQuery.where('', filterType, queryString, this.ignoreCase, this.ignoreAccent);\n }\n else if ((!this.enableVirtualization) || (this.enableVirtualization && (!(this.dataSource instanceof DataManager) || (this.dataSource instanceof DataManager && this.virtualGroupDataSource)))) {\n var mapping = !isNullOrUndefined(this.fields.value) ? this.fields.value : '';\n filterQuery.where(mapping, filterType, queryString, this.ignoreCase, this.ignoreAccent);\n }\n }\n if (!isNullOrUndefined(this.suggestionCount) && !this.enableVirtualization) {\n // Since defualt value of suggestioncount is 20, checked the condition\n if (this.suggestionCount !== 20) {\n for (var queryElements = 0; queryElements < filterQuery.queries.length; queryElements++) {\n if (filterQuery.queries[queryElements].fn === 'onTake') {\n filterQuery.queries.splice(queryElements, 1);\n }\n }\n }\n filterQuery.take(this.suggestionCount);\n }\n if (this.enableVirtualization && (!(this.dataSource instanceof DataManager) || (this.dataSource instanceof DataManager && this.virtualGroupDataSource))) {\n var takeValue = this.getTakeValue();\n filterQuery.skip(this.virtualItemStartIndex);\n filterQuery.take(takeValue);\n filterQuery.requiresCount();\n }\n return filterQuery;\n };\n AutoComplete.prototype.searchLists = function (e) {\n var _this_1 = this;\n this.isTyped = true;\n this.isDataFetched = this.isSelectCustom = false;\n this.checkAndResetCache();\n if (isNullOrUndefined(this.list)) {\n _super.prototype.renderList.call(this, e, true);\n }\n this.queryString = this.filterInput.value;\n if (e.type !== 'mousedown' && (e.keyCode === 40 || e.keyCode === 38)) {\n this.queryString = this.queryString === '' ? null : this.queryString;\n this.beforePopupOpen = true;\n this.resetList(this.dataSource, this.fields, null, e);\n return;\n }\n this.isSelected = false;\n this.activeIndex = null;\n var eventArgs = {\n preventDefaultAction: false,\n text: this.filterInput.value,\n updateData: function (dataSource, query, fields) {\n if (eventArgs.cancel) {\n return;\n }\n _this_1.isFiltered = true;\n _this_1.filterAction(dataSource, query, fields);\n },\n cancel: false\n };\n this.trigger('filtering', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel && !_this_1.isFiltered && !eventArgs.preventDefaultAction) {\n _this_1.searchList = true;\n _this_1.filterAction(_this_1.dataSource, null, _this_1.fields, e);\n }\n });\n };\n /**\n * To filter the data from given data source by using query\n *\n * @param {Object[] | DataManager } dataSource - Set the data source to filter.\n * @param {Query} query - Specify the query to filter the data.\n * @param {FieldSettingsModel} fields - Specify the fields to map the column in the data table.\n * @returns {void}\n\n */\n AutoComplete.prototype.filter = function (dataSource, query, fields) {\n this.isFiltered = true;\n this.filterAction(dataSource, query, fields);\n };\n AutoComplete.prototype.filterAction = function (dataSource, query, fields, e) {\n this.beforePopupOpen = true;\n var isNoDataElement = this.list.classList.contains('e-nodata');\n if (this.queryString !== '' && (this.queryString.length >= this.minLength)) {\n if (this.enableVirtualization && this.isFiltering() && this.isTyped) {\n this.isPreventScrollAction = true;\n this.list.scrollTop = 0;\n this.previousStartIndex = 0;\n this.virtualListInfo = null;\n }\n this.resetList(dataSource, fields, query, e);\n if (this.enableVirtualization && isNoDataElement && !this.list.classList.contains('e-nodata')) {\n if (!this.list.querySelector('.e-virtual-ddl-content')) {\n this.list.appendChild(this.createElement('div', {\n className: 'e-virtual-ddl-content',\n styles: this.getTransformValues()\n })).appendChild(this.list.querySelector('.e-list-parent'));\n }\n if (!this.list.querySelector('.e-virtual-ddl')) {\n var virualElement = this.createElement('div', {\n id: this.element.id + '_popup', className: 'e-virtual-ddl', styles: this.GetVirtualTrackHeight()\n });\n document.getElementsByClassName('e-popup')[0].querySelector('.e-dropdownbase').appendChild(virualElement);\n }\n }\n if ((this.getModuleName() === 'autocomplete' && !(this.dataSource instanceof DataManager)) || (this.getModuleName() === 'autocomplete' && (this.dataSource instanceof DataManager) && this.totalItemCount != 0)) {\n this.getFilteringSkeletonCount();\n }\n }\n else {\n this.hidePopup(e);\n this.beforePopupOpen = false;\n }\n this.renderReactTemplates();\n };\n AutoComplete.prototype.clearAll = function (e, property) {\n if (isNullOrUndefined(property) || (!isNullOrUndefined(property) && isNullOrUndefined(property.dataSource))) {\n _super.prototype.clearAll.call(this, e);\n this.checkAndResetCache();\n }\n if (this.beforePopupOpen) {\n this.hidePopup();\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n AutoComplete.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n if (!this.enableVirtualization) {\n this.fixedHeaderElement = null;\n }\n if ((this.getModuleName() === 'autocomplete' && !(this.dataSource instanceof DataManager)) || (this.getModuleName() === 'autocomplete' && (this.dataSource instanceof DataManager) && this.totalItemCount != 0)) {\n this.getFilteringSkeletonCount();\n }\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n var item = this.list.querySelector('.' + dropDownListClasses.li);\n if (!isNullOrUndefined(item)) {\n removeClass([item], dropDownListClasses.focus);\n }\n this.postBackAction();\n };\n AutoComplete.prototype.postBackAction = function () {\n if (this.autofill && !isNullOrUndefined(this.liCollections[0]) && this.searchList) {\n var items = [this.liCollections[0]];\n var dataSource = this.listData;\n var type = this.typeOfData(dataSource).typeof;\n var searchItem = Search(this.inputElement.value, items, 'StartsWith', this.ignoreCase, dataSource, this.fields, type);\n this.searchList = false;\n if (!isNullOrUndefined(searchItem.item)) {\n _super.prototype.setAutoFill.call(this, this.liCollections[0], true);\n }\n }\n };\n AutoComplete.prototype.setSelection = function (li, e) {\n if (!this.isValidLI(li)) {\n this.selectedLI = li;\n return;\n }\n if (!isNullOrUndefined(e) && e.type === 'keydown' && e.action !== 'enter'\n && e.action !== 'tab' && this.isValidLI(li)) {\n var value = this.getFormattedValue(li.getAttribute('data-value'));\n this.activeIndex = this.getIndexByValue(value);\n this.setHoverList(li);\n this.selectedLI = li;\n this.setScrollPosition(e);\n if (this.autofill && this.isPopupOpen) {\n this.preventAutoFill = false;\n var isKeyNavigate = (e && e.action === 'down' || e.action === 'up' ||\n e.action === 'home' || e.action === 'end' || e.action === 'pageUp' || e.action === 'pageDown');\n _super.prototype.setAutoFill.call(this, li, isKeyNavigate);\n }\n }\n else {\n _super.prototype.setSelection.call(this, li, e);\n }\n };\n AutoComplete.prototype.listOption = function (dataSource, fieldsSettings) {\n var _this_1 = this;\n var fields = _super.prototype.listOption.call(this, dataSource, fieldsSettings);\n if (isNullOrUndefined(fields.itemCreated)) {\n fields.itemCreated = function (e) {\n if (_this_1.highlight) {\n if (_this_1.element.tagName === _this_1.getNgDirective() && _this_1.itemTemplate) {\n setTimeout(function () {\n highlightSearch(e.item, _this_1.queryString, _this_1.ignoreCase, _this_1.filterType);\n }, 0);\n }\n else {\n var isHtmlElement = /<[^>]*>/g.test(e.item.innerText);\n if (isHtmlElement) {\n e.item.innerText = e.item.innerText.replace(/[\\u00A0-\\u9999<>&]/g, function (match) { return \"&#\" + match.charCodeAt(0) + \";\"; });\n }\n highlightSearch(e.item, _this_1.queryString, _this_1.ignoreCase, _this_1.filterType);\n }\n }\n };\n }\n else {\n var itemCreated_1 = fields.itemCreated;\n fields.itemCreated = function (e) {\n if (_this_1.highlight) {\n highlightSearch(e.item, _this_1.queryString, _this_1.ignoreCase, _this_1.filterType);\n }\n itemCreated_1.apply(_this_1, [e]);\n };\n }\n return fields;\n };\n AutoComplete.prototype.isFiltering = function () {\n return true;\n };\n AutoComplete.prototype.renderPopup = function (e) {\n if (!this.enableVirtualization) {\n this.list.scrollTop = 0;\n }\n _super.prototype.renderPopup.call(this, e);\n };\n AutoComplete.prototype.isEditTextBox = function () {\n return false;\n };\n AutoComplete.prototype.isPopupButton = function () {\n return this.showPopupButton;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n AutoComplete.prototype.isSelectFocusItem = function (element) {\n return false;\n };\n AutoComplete.prototype.setInputValue = function (newProp, oldProp) {\n var oldValue = oldProp && oldProp.text ? oldProp.text : oldProp ? oldProp.value : oldProp;\n var value = newProp && newProp.text ? newProp.text : newProp && newProp.value ? newProp.value : this.value;\n if (value && this.typedString === '' && !this.allowCustom && !(this.dataSource instanceof DataManager)) {\n var checkFields_1_1 = this.typeOfData(this.dataSource).typeof === 'string' ? '' : this.fields.value;\n var listLength_1 = this.getItems().length;\n var query = new Query();\n var _this_2 = this;\n new DataManager(this.dataSource).executeQuery(query.where(new Predicate(checkFields_1_1, 'equal', value)))\n .then(function (e) {\n if (e.result.length > 0) {\n _this_2.value = checkFields_1_1 !== '' ? e.result[0][_this_2.fields.value].toString() : e.result[0].toString();\n _this_2.addItem(e.result, listLength_1);\n _this_2.updateValues();\n }\n else {\n newProp && newProp.text ? _this_2.setOldText(oldValue) : newProp && newProp.value ? _this_2.setOldValue(oldValue) : _this_2.updateValues();\n }\n });\n }\n else if (newProp) {\n newProp.text ? this.setOldText(oldValue) : this.setOldValue(oldValue);\n }\n };\n /**\n * Search the entered text and show it in the suggestion list if available.\n *\n * @returns {void}\n\n */\n AutoComplete.prototype.showPopup = function (e) {\n if (!this.enabled) {\n return;\n }\n if (this.beforePopupOpen) {\n this.refreshPopup();\n return;\n }\n this.beforePopupOpen = true;\n this.preventAutoFill = true;\n if (isNullOrUndefined(this.list)) {\n this.renderList(e);\n }\n else {\n this.resetList(this.dataSource, this.fields, null, e);\n }\n };\n /**\n * Hides the popup if it is in open state.\n *\n * @returns {void}\n */\n AutoComplete.prototype.hidePopup = function (e) {\n _super.prototype.hidePopup.call(this, e);\n this.activeIndex = null;\n this.virtualListInfo = this.viewPortInfo;\n this.previousStartIndex = this.viewPortInfo.startIndex;\n this.startIndex = this.viewPortInfo.startIndex;\n this.previousEndIndex = this.viewPortInfo.endIndex;\n };\n /**\n * Dynamically change the value of properties.\n *\n * @param {AutoCompleteModel} newProp - Returns the dynamic property value of the component.\n * @param {AutoCompleteModel} oldProp - Returns the previous property value of the component.\n * @private\n * @returns {void}\n */\n AutoComplete.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.getModuleName() === 'autocomplete') {\n this.setUpdateInitial(['fields', 'query', 'dataSource'], newProp);\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'showPopupButton':\n if (this.showPopupButton) {\n var button = Input.appendSpan(dropDownListClasses.icon, this.inputWrapper.container, this.createElement);\n this.inputWrapper.buttons[0] = button;\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n if (this.inputWrapper && this.inputWrapper.buttons && this.inputWrapper.buttons[0]) {\n EventHandler.add(this.inputWrapper.buttons[0], 'click', this.dropDownClick, this);\n }\n }\n else {\n detach(this.inputWrapper.buttons[0]);\n this.inputWrapper.buttons[0] = null;\n }\n break;\n default: {\n // eslint-disable-next-line max-len\n var atcProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, atcProps.newProperty, atcProps.oldProperty);\n break;\n }\n }\n }\n };\n AutoComplete.prototype.renderHightSearch = function () {\n if (this.highlight) {\n for (var i = 0; i < this.liCollections.length; i++) {\n var isHighlight = this.ulElement.querySelector('.e-active');\n if (!isHighlight) {\n revertHighlightSearch(this.liCollections[i]);\n highlightSearch(this.liCollections[i], this.queryString, this.ignoreCase, this.filterType);\n }\n }\n }\n };\n /**\n * Return the module name of this component.\n *\n * @private\n * @returns {string} Return the module name of this component.\n */\n AutoComplete.prototype.getModuleName = function () {\n return 'autocomplete';\n };\n /**\n * To initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n AutoComplete.prototype.render = function () {\n _super.prototype.render.call(this);\n };\n __decorate([\n Complex({ value: null, iconCss: null, groupBy: null }, FieldSettings)\n ], AutoComplete.prototype, \"fields\", void 0);\n __decorate([\n Property(true)\n ], AutoComplete.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(false)\n ], AutoComplete.prototype, \"showPopupButton\", void 0);\n __decorate([\n Property(false)\n ], AutoComplete.prototype, \"highlight\", void 0);\n __decorate([\n Property(20)\n ], AutoComplete.prototype, \"suggestionCount\", void 0);\n __decorate([\n Property({})\n ], AutoComplete.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"query\", void 0);\n __decorate([\n Property(1)\n ], AutoComplete.prototype, \"minLength\", void 0);\n __decorate([\n Property('Contains')\n ], AutoComplete.prototype, \"filterType\", void 0);\n __decorate([\n Event()\n ], AutoComplete.prototype, \"filtering\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"index\", void 0);\n __decorate([\n Property('Never')\n ], AutoComplete.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property(false)\n ], AutoComplete.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"text\", void 0);\n AutoComplete = __decorate([\n NotifyPropertyChanges\n ], AutoComplete);\n return AutoComplete;\n}(ComboBox));\nexport { AutoComplete };\n","/**\n * Specifies class names\n */\n/** @hidden */\nexport var rowCell = 'e-rowcell';\n/** @hidden */\nexport var gridHeader = 'e-gridheader';\n/** @hidden */\nexport var gridContent = 'e-gridcontent';\n/** @hidden */\nexport var gridFooter = 'e-gridfooter';\n/** @hidden */\nexport var headerContent = 'e-headercontent';\n/** @hidden */\nexport var movableContent = 'e-movablecontent';\n/** @hidden */\nexport var movableHeader = 'e-movableheader';\n/** @hidden */\nexport var frozenContent = 'e-frozencontent';\n/** @hidden */\nexport var frozenHeader = 'e-frozenheader';\n/** @hidden */\nexport var content = 'e-content';\n/** @hidden */\nexport var table = 'e-table';\n/** @hidden */\nexport var row = 'e-row';\n/** @hidden */\nexport var gridChkBox = 'e-gridchkbox';\n/** @hidden */\nexport var editedRow = 'e-editedrow';\n/** @hidden */\nexport var addedRow = 'e-addedrow';\n/**\n * Specifies repeated strings\n */\n/** @hidden */\nexport var changedRecords = 'changedRecords';\n/** @hidden */\nexport var addedRecords = 'addedRecords';\n/** @hidden */\nexport var deletedRecords = 'deletedRecords';\n/** @hidden */\nexport var leftRight = 'Left-Right';\n/** @hidden */\nexport var frozenRight = 'frozen-right';\n/** @hidden */\nexport var frozenLeft = 'frozen-left';\n/** @hidden */\nexport var dataColIndex = 'data-colindex';\n/** @hidden */\nexport var ariaColIndex = 'aria-colindex';\n/** @hidden */\nexport var dataRowIndex = 'data-rowindex';\n/** @hidden */\nexport var ariaRowIndex = 'aria-rowindex';\n/** @hidden */\nexport var tbody = 'tbody';\n/** @hidden */\nexport var colGroup = 'colgroup';\n/** @hidden */\nexport var open = 'open';\n/** @hidden */\nexport var change = 'change';\n/** @hidden */\nexport var focus = 'focus';\n/** @hidden */\nexport var create = 'created';\n/** @hidden */\nexport var beforeOpen = 'beforeOpen';\n/** @hidden */\nexport var downArrow = 'downArrow';\n/** @hidden */\nexport var upArrow = 'upArrow';\n/** @hidden */\nexport var pageUp = 'PageUp';\n/** @hidden */\nexport var pageDown = 'PageDown';\n/** @hidden */\nexport var enter = 'enter';\n/** @hidden */\nexport var shiftEnter = 'shiftEnter';\n/** @hidden */\nexport var tab = 'tab';\n/** @hidden */\nexport var shiftTab = 'shiftTab';\n/** @hidden */\nexport var initialFrozenColumnIndex = 'initialFrozenColumnIndex';\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, rippleEffect, NotifyPropertyChanges, Property, closest, setValue } from '@syncfusion/ej2-base';\nimport { addClass, getInstance, getUniqueID, isRippleEnabled, removeClass, attributes, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { detach, Event, EventHandler, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { wrapperInitialize, rippleMouseHandler } from './../common/common';\nvar LABEL = 'e-label';\nvar RIPPLE = 'e-ripple-container';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-radio-wrapper';\nvar ATTRIBUTES = ['title', 'class', 'style', 'disabled', 'readonly', 'name', 'value', 'id'];\n/**\n * The RadioButton is a graphical user interface element that allows you to select one option from the choices.\n * It contains checked and unchecked states.\n * ```html\n * \n * \n * ```\n */\nvar RadioButton = /** @class */ (function (_super) {\n __extends(RadioButton, _super);\n /**\n * Constructor for creating the widget\n *\n * @private\n * @param {RadioButtonModel} options - Specifies Radio button model\n * @param {string | HTMLInputElement} element - Specifies target element\n */\n function RadioButton(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isFocused = false;\n return _this;\n }\n RadioButton_1 = RadioButton;\n RadioButton.prototype.changeHandler = function (event) {\n this.checked = true;\n this.dataBind();\n var value = this.element.getAttribute('value');\n value = this.isVue && value ? this.element.value : this.value;\n var type = typeof this.value;\n if (this.isVue && type === 'boolean') {\n value = value === 'true' ? true : false;\n }\n this.trigger('change', { value: value, event: event });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular) {\n event.stopPropagation();\n }\n };\n RadioButton.prototype.updateChange = function () {\n var input;\n var instance;\n var radioGrp = this.getRadioGroup();\n for (var i = 0; i < radioGrp.length; i++) {\n input = radioGrp[i];\n if (input !== this.element) {\n instance = getInstance(input, RadioButton_1);\n instance.checked = false;\n if (this.tagName === 'EJS-RADIOBUTTON') {\n instance.angularValue = this.value;\n }\n }\n }\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n RadioButton.prototype.destroy = function () {\n var _this = this;\n var radioWrap = this.wrapper;\n _super.prototype.destroy.call(this);\n if (radioWrap) {\n if (!this.disabled) {\n this.unWireEvents();\n }\n if (this.tagName === 'INPUT') {\n if (radioWrap.parentNode) {\n radioWrap.parentNode.insertBefore(this.element, radioWrap);\n }\n detach(radioWrap);\n this.element.checked = false;\n ['name', 'value', 'disabled'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n }\n else {\n ['role', 'aria-checked', 'class'].forEach(function (key) {\n radioWrap.removeAttribute(key);\n });\n radioWrap.innerHTML = '';\n this.element = this.wrapper;\n if (this.refreshing) {\n ['e-control', 'e-radio', 'e-lib'].forEach(function (key) {\n _this.element.classList.add(key);\n });\n setValue('ej2_instances', [this], this.element);\n }\n }\n }\n };\n RadioButton.prototype.focusHandler = function () {\n this.isFocused = true;\n };\n RadioButton.prototype.focusOutHandler = function () {\n var label = this.getLabel();\n if (label) {\n label.classList.remove('e-focus');\n }\n };\n RadioButton.prototype.getModuleName = function () {\n return 'radio';\n };\n /**\n * To get the value of selected radio button in a group.\n *\n * @method getSelectedValue\n * @returns {string} - Selected Value\n */\n RadioButton.prototype.getSelectedValue = function () {\n var input;\n var radioGrp = this.getRadioGroup();\n for (var i = 0, len = radioGrp.length; i < len; i++) {\n input = radioGrp[i];\n if (input.checked) {\n return input.value;\n }\n }\n return '';\n };\n RadioButton.prototype.getRadioGroup = function () {\n return document.querySelectorAll('input.e-radio[name=\"' + this.element.getAttribute('name') + '\"]');\n };\n /**\n * Gets the properties to be maintained in the persistence state.\n *\n * @private\n * @returns {string} - Persist Data\n */\n RadioButton.prototype.getPersistData = function () {\n return this.addOnPersist(['checked']);\n };\n RadioButton.prototype.getWrapper = function () {\n if (this.element) {\n return this.element.parentElement;\n }\n else {\n return null;\n }\n };\n RadioButton.prototype.getLabel = function () {\n if (this.element) {\n return this.element.nextElementSibling;\n }\n else {\n return null;\n }\n };\n RadioButton.prototype.initialize = function () {\n if (isNullOrUndefined(this.initialCheckedValue)) {\n this.initialCheckedValue = this.checked;\n }\n this.initWrapper();\n this.updateHtmlAttribute();\n if (this.name) {\n this.element.setAttribute('name', this.name);\n }\n var value = this.element.getAttribute('value');\n var type = typeof this.value;\n if (this.isVue && type === 'boolean') {\n value = value === 'true' ? true : false;\n }\n if (this.isVue ? this.value && type !== 'boolean' && !value : this.value) {\n this.element.setAttribute('value', this.value);\n }\n if (this.checked) {\n this.element.checked = true;\n }\n if (this.disabled) {\n this.setDisabled();\n }\n };\n RadioButton.prototype.initWrapper = function () {\n var rippleSpan;\n var wrapper = this.element.parentElement;\n if (!wrapper.classList.contains(WRAPPER)) {\n wrapper = this.createElement('div', { className: WRAPPER });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var label = this.createElement('label', { attrs: { for: this.element.id } });\n wrapper.appendChild(this.element);\n wrapper.appendChild(label);\n if (isRippleEnabled) {\n rippleSpan = this.createElement('span', { className: (RIPPLE) });\n label.appendChild(rippleSpan);\n rippleEffect(rippleSpan, {\n duration: 400,\n isCenterRipple: true\n });\n }\n wrapper.classList.add('e-wrapper');\n if (this.enableRtl) {\n label.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.label) {\n this.setText(this.label);\n }\n };\n RadioButton.prototype.keyUpHandler = function () {\n if (this.isFocused) {\n this.getLabel().classList.add('e-focus');\n }\n };\n RadioButton.prototype.labelMouseDownHandler = function (e) {\n var rippleSpan = this.getLabel().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, rippleSpan);\n };\n RadioButton.prototype.labelMouseLeaveHandler = function (e) {\n var rippleSpan = this.getLabel().getElementsByClassName(RIPPLE)[0];\n if (rippleSpan) {\n var rippleElem = rippleSpan.querySelectorAll('.e-ripple-element');\n for (var i = rippleElem.length - 1; i > 0; i--) {\n rippleSpan.removeChild(rippleSpan.childNodes[i]);\n }\n rippleMouseHandler(e, rippleSpan);\n }\n };\n RadioButton.prototype.labelMouseUpHandler = function (e) {\n var rippleSpan = this.getLabel().getElementsByClassName(RIPPLE)[0];\n if (rippleSpan) {\n var rippleElem = rippleSpan.querySelectorAll('.e-ripple-element');\n for (var i = rippleElem.length - 1; i > 0; i--) {\n rippleSpan.removeChild(rippleSpan.childNodes[i]);\n }\n rippleMouseHandler(e, rippleSpan);\n }\n };\n RadioButton.prototype.formResetHandler = function () {\n this.checked = this.initialCheckedValue;\n if (this.initialCheckedValue) {\n attributes(this.element, { 'checked': 'true' });\n }\n };\n /**\n * Called internally if any of the property value changes.\n *\n * @private\n * @param {RadioButtonModel} newProp - Specifies New Properties\n * @param {RadioButtonModel} oldProp - Specifies Old Properties\n * @returns {void}\n */\n RadioButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var wrap = this.getWrapper();\n var label = this.getLabel();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n if (newProp.checked) {\n this.updateChange();\n }\n this.element.checked = newProp.checked;\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([wrap], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([wrap], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n label.classList.add(RTL);\n }\n else {\n label.classList.remove(RTL);\n }\n break;\n case 'label':\n this.setText(newProp.label);\n break;\n case 'labelPosition':\n if (newProp.labelPosition === 'Before') {\n label.classList.add('e-right');\n }\n else {\n label.classList.remove('e-right');\n }\n break;\n case 'name':\n this.element.setAttribute('name', newProp.name);\n break;\n case 'value':\n var type = typeof this.htmlAttributes.value;\n if (!isNullOrUndefined(this.htmlAttributes) && (this.htmlAttributes.value || type === 'boolean' && !this.htmlAttributes.value)) {\n break;\n }\n this.element.setAttribute('value', newProp.value);\n break;\n case 'htmlAttributes':\n this.updateHtmlAttribute();\n break;\n }\n }\n };\n /**\n * Initialize checked Property, Angular and React and Unique ID support.\n *\n * @private\n * @returns {void}\n */\n RadioButton.prototype.preRender = function () {\n var element = this.element;\n this.formElement = closest(this.element, 'form');\n this.tagName = this.element.tagName;\n element = wrapperInitialize(this.createElement, 'EJS-RADIOBUTTON', 'radio', element, WRAPPER, 'radio');\n this.element = element;\n if (this.element.getAttribute('type') !== 'radio') {\n this.element.setAttribute('type', 'radio');\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n if (this.tagName === 'EJS-RADIOBUTTON') {\n var formControlName = this.element.getAttribute('formcontrolname');\n if (formControlName) {\n this.setProperties({ 'name': formControlName }, true);\n this.element.setAttribute('name', formControlName);\n }\n }\n };\n /**\n * Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n RadioButton.prototype.render = function () {\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n this.renderComplete();\n this.wrapper = this.getWrapper();\n };\n RadioButton.prototype.setDisabled = function () {\n this.element.disabled = true;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RadioButton.prototype.setText = function (text) {\n var label = this.getLabel();\n var textLabel = label.getElementsByClassName(LABEL)[0];\n if (textLabel) {\n textLabel.textContent = text;\n }\n else {\n text = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(text) : text;\n textLabel = this.createElement('span', { className: LABEL, innerHTML: text });\n label.appendChild(textLabel);\n }\n if (this.labelPosition === 'Before') {\n this.getLabel().classList.add('e-right');\n }\n else {\n this.getLabel().classList.remove('e-right');\n }\n };\n RadioButton.prototype.updateHtmlAttribute = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n var wrapper = this.element.parentElement;\n if (ATTRIBUTES.indexOf(key) > -1) {\n if (key === 'class') {\n addClass([wrapper], this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ').trim().split(' '));\n }\n else if (key === 'title' || key === 'style') {\n wrapper.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n else {\n this.element.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n else {\n wrapper.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n RadioButton.prototype.unWireEvents = function () {\n var label = this.wrapper;\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n var rippleLabel = label.getElementsByTagName('label')[0];\n if (rippleLabel) {\n EventHandler.remove(rippleLabel, 'mousedown', this.labelMouseDownHandler);\n EventHandler.remove(rippleLabel, 'mouseup', this.labelMouseUpHandler);\n EventHandler.remove(rippleLabel, 'mouseleave', this.labelMouseLeaveHandler);\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n };\n RadioButton.prototype.wireEvents = function () {\n var label = this.getLabel();\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n var rippleLabel = label.getElementsByClassName(LABEL)[0];\n if (rippleLabel) {\n EventHandler.add(rippleLabel, 'mousedown', this.labelMouseDownHandler, this);\n EventHandler.add(rippleLabel, 'mouseup', this.labelMouseUpHandler, this);\n EventHandler.add(rippleLabel, 'mouseleave', this.labelMouseLeaveHandler, this);\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n };\n /**\n * Click the RadioButton element\n * its native method\n *\n * @public\n * @returns {void}\n */\n RadioButton.prototype.click = function () {\n this.element.click();\n };\n /**\n * Sets the focus to RadioButton\n * its native method\n *\n * @public\n * @returns {void}\n */\n RadioButton.prototype.focusIn = function () {\n this.element.focus();\n };\n var RadioButton_1;\n __decorate([\n Event()\n ], RadioButton.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RadioButton.prototype, \"created\", void 0);\n __decorate([\n Property(false)\n ], RadioButton.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RadioButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], RadioButton.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], RadioButton.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property({})\n ], RadioButton.prototype, \"htmlAttributes\", void 0);\n RadioButton = RadioButton_1 = __decorate([\n NotifyPropertyChanges\n ], RadioButton);\n return RadioButton;\n}(Component));\nexport { RadioButton };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { merge, isNullOrUndefined, extend, Property } 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 */\nvar Column = /** @class */ (function () {\n function Column(options, parent) {\n var _this = this;\n /**\n * If `disableHtmlEncode` is set to true, it encodes the HTML of the header and content cells.\n *\n * @default true\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 *\n * @default true\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 *\n * @default true\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 *\n * @default true\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 *\n * @default true\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 *\n * @default true\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 *\n * @default true\n */\n this.showColumnMenu = true;\n /**\n * If `enableGroupByFormat` set to true, then it groups the particular column by formatted values.\n *\n * @default true\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 *\n * @default true\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/filter-menu/#custom-component-in-filter-menu) for its customization.\n *\n * @default {}\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 *\n * @default true\n */\n this.showInColumnChooser = true;\n /**\n * Defines the `IEditCell` object to customize default edit cell.\n *\n * @default {}\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 *\n * @default true\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 *\n * @default false\n */\n this.autoFit = false;\n this.sortDirection = 'Descending';\n /**\n * @returns {Function} returns the edit template\n * @hidden */\n this.getEditTemplate = function () { return _this.editTemplateFn; };\n /**\n * @returns {Function} returns the filter template\n * @hidden */\n this.getFilterTemplate = function () { return _this.filterTemplateFn; };\n merge(this, options);\n this.parent = parent;\n if (this.type === 'none') {\n this.type = null;\n }\n else if (this.type) {\n this.type = typeof (this.type) === 'string' ? this.type.toLowerCase() : undefined;\n }\n if (this.editType) {\n this.editType = this.editType.toLowerCase();\n }\n if (isNullOrUndefined(this.uid)) {\n this.uid = getUid('grid-column');\n }\n var valueFormatter = new ValueFormatter();\n if (options.format && (options.format.skeleton || (options.format.format &&\n typeof options.format.format === 'string'))) {\n this.setFormatter(valueFormatter.getFormatFunction(extend({}, options.format)));\n this.setParser(valueFormatter.getParserFunction(options.format));\n }\n this.toJSON = function () {\n var col = {};\n var skip = ['filter', 'dataSource', 'headerText', 'template', 'headerTemplate', 'edit',\n 'editTemplate', 'filterTemplate', 'commandsTemplate', 'parent'];\n var keys = Object.keys(_this);\n for (var i = 0; i < keys.length; i++) {\n if (keys[parseInt(i.toString(), 10)] === 'columns') {\n col[keys[parseInt(i.toString(), 10)]] = [];\n for (var j = 0; j < _this[keys[parseInt(i.toString(), 10)]].length; j++) {\n col[keys[parseInt(i.toString(), 10)]].push(_this[keys[parseInt(i.toString(), 10)]][parseInt(j.toString(), 10)].toJSON());\n }\n }\n else if (skip.indexOf(keys[parseInt(i.toString(), 10)]) < 0) {\n col[keys[parseInt(i.toString(), 10)]] = _this[keys[parseInt(i.toString(), 10)]];\n }\n }\n return col;\n };\n if (!this.field) {\n this.allowFiltering = false;\n this.allowGrouping = false;\n this.allowSorting = false;\n if (this.columns) {\n this.allowResizing = this.columns.some(function (col) {\n return col.allowResizing;\n });\n }\n }\n if (this.commands && !this.textAlign) {\n this.textAlign = 'Right';\n }\n if (this.template || this.commandsTemplate) {\n this.templateFn = templateCompiler(this.template || this.commandsTemplate);\n }\n if (this.headerTemplate) {\n this.headerTemplateFn = templateCompiler(this.headerTemplate);\n }\n if (!isNullOrUndefined(this.filter) && this.filter.itemTemplate) {\n this.fltrTemplateFn = templateCompiler(this.filter.itemTemplate);\n }\n if (this.editTemplate) {\n this.editTemplateFn = templateCompiler(this.editTemplate);\n }\n if (this.filterTemplate) {\n this.filterTemplateFn = templateCompiler(this.filterTemplate);\n }\n if (this.isForeignColumn() &&\n (isNullOrUndefined(this.editType) || this.editType === 'dropdownedit' || this.editType === 'defaultedit')) {\n this.editType = 'dropdownedit';\n if (this.edit.params && this.edit.params.dataSource) {\n this.edit.params.ddEditedData = true;\n }\n this.edit.params = extend({\n dataSource: this.dataSource,\n query: new Query(), fields: { value: this.foreignKeyField || this.field, text: this.foreignKeyValue }\n }, this.edit.params);\n }\n if (this.sortComparer) {\n var a_1 = this.sortComparer;\n this.sortComparer = function (x, y, xObj, yObj) {\n if (typeof a_1 === 'string') {\n a_1 = getObject(a_1, window);\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 return a_1(x, y, xObj, yObj);\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 /**\n * @returns {string} returns the sort direction\n * @hidden */\n Column.prototype.getSortDirection = function () {\n return this.sortDirection;\n };\n /**\n * @param {string} direction - specifies the direction\n * @returns {void}\n * @hidden\n */\n Column.prototype.setSortDirection = function (direction) {\n this.sortDirection = direction;\n };\n /**\n * @returns {freezeTable} returns the FreezeTable\n * @hidden */\n Column.prototype.getFreezeTableName = function () {\n return this.freezeTable;\n };\n /**\n * @param {Column} column - specifies the column\n * @returns {void}\n * @hidden\n */\n Column.prototype.setProperties = function (column) {\n //Angular two way binding\n var keys = Object.keys(column);\n for (var i = 0; i < keys.length; i++) {\n this[keys[parseInt(i.toString(), 10)]] = column[keys[parseInt(i.toString(), 10)]];\n //Refresh the react columnTemplates on state change\n if (this.parent && this.parent.isReact) {\n if (keys[parseInt(i.toString(), 10)] === 'template') {\n this.templateFn = templateCompiler(column[keys[parseInt(i.toString(), 10)]]);\n this.parent.refreshReactColumnTemplateByUid(this.uid, true);\n }\n else if (keys[parseInt(i.toString(), 10)] === 'headerTemplate') {\n this.headerTemplateFn = templateCompiler(column[keys[parseInt(i.toString(), 10)]]);\n this.parent.refreshReactHeaderTemplateByUid(this.uid);\n }\n else if (keys[parseInt(i.toString(), 10)] === 'editTemplate') {\n this.editTemplateFn = templateCompiler(column[keys[parseInt(i.toString(), 10)]]);\n }\n }\n }\n };\n /**\n * @returns {boolean} returns true for foreign column\n * @hidden\n * It defines the column is foreign key column or not.\n */\n Column.prototype.isForeignColumn = function () {\n return !!(this.dataSource && this.foreignKeyValue);\n };\n /**\n * @returns {Function} returns the function\n * @hidden\n */\n Column.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /**\n * @param {Function} value - specifies the value\n * @returns {void}\n * @hidden\n */\n Column.prototype.setFormatter = function (value) {\n this.formatFn = value;\n };\n /**\n * @returns {Function} returns the function\n * @hidden */\n Column.prototype.getParser = function () {\n return this.parserFn;\n };\n /**\n * @param {Function} value - specifies the value\n * @returns {void}\n * @hidden\n */\n Column.prototype.setParser = function (value) {\n this.parserFn = value;\n };\n /**\n * @returns {Function} returns the function\n * @hidden */\n Column.prototype.getColumnTemplate = function () {\n return this.templateFn;\n };\n /**\n * @returns {Function} returns the function\n * @hidden */\n Column.prototype.getHeaderTemplate = function () {\n return this.headerTemplateFn;\n };\n /**\n * @returns {Function} returns the function\n * @hidden */\n Column.prototype.getFilterItemTemplate = function () {\n return this.fltrTemplateFn;\n };\n /**\n * @returns {string} returns the string\n * @hidden */\n Column.prototype.getDomSetter = function () {\n return this.disableHtmlEncode ? 'textContent' : 'innerHTML';\n };\n return Column;\n}());\nexport { Column };\n/**\n * Define options for custom command buttons.\n */\nvar CommandColumnModel = /** @class */ (function () {\n function CommandColumnModel() {\n }\n __decorate([\n Property()\n ], CommandColumnModel.prototype, \"title\", void 0);\n __decorate([\n Property()\n ], CommandColumnModel.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], CommandColumnModel.prototype, \"buttonOption\", void 0);\n return CommandColumnModel;\n}());\nexport { CommandColumnModel };\n/**\n * Defines Grid column\n */\nvar GridColumn = /** @class */ (function (_super) {\n __extends(GridColumn, _super);\n function GridColumn() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], GridColumn.prototype, \"columns\", void 0);\n return GridColumn;\n}(Column));\nexport { GridColumn };\n/**\n * Defines stacked grid column\n */\nvar StackedColumn = /** @class */ (function (_super) {\n __extends(StackedColumn, _super);\n function StackedColumn() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return StackedColumn;\n}(GridColumn));\nexport { StackedColumn };\n","import { Browser, EventHandler } from '@syncfusion/ej2-base';\nimport { addClass, removeClass } from '@syncfusion/ej2-base';\nimport { formatUnit, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getScrollBarWidth, getUpdateUsingRaf } from '../base/util';\nimport { scroll, contentReady, uiUpdate, onEmpty, headerRefreshed, textWrapRefresh, virtualScrollEdit, infiniteScrollHandler, closeFilterDialog } from '../base/constant';\nimport { lazyLoadScrollHandler, checkScrollReset } from '../base/constant';\nimport { ColumnWidthService } from '../services/width-controller';\nimport * as literals from '../base/string-literals';\nimport * as events from '../base/constant';\n/**\n * The `Scroll` module is used to handle scrolling behaviour.\n */\nvar Scroll = /** @class */ (function () {\n /**\n * Constructor for the Grid scrolling.\n *\n * @param {IGrid} parent - specifies the IGrid\n * @hidden\n */\n function Scroll(parent) {\n //To maintain scroll state on grid actions.\n this.previousValues = { top: 0, left: 0 };\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 *\n * @returns {string} returns the module name\n * @private\n */\n Scroll.prototype.getModuleName = function () {\n return 'scroll';\n };\n /**\n * @param {boolean} uiupdate - specifies the uiupdate\n * @returns {void}\n * @hidden\n */\n Scroll.prototype.setWidth = function (uiupdate) {\n this.parent.element.style.width = formatUnit(this.parent.width);\n if (uiupdate) {\n this.widthService.setWidthToColumns();\n }\n if (this.parent.toolbarModule && this.parent.toolbarModule.toolbar &&\n this.parent.toolbarModule.toolbar.element) {\n var tlbrElement = this.parent.toolbarModule.toolbar.element;\n var tlbrLeftElement = tlbrElement.querySelector('.e-toolbar-left');\n var tlbrCenterElement = tlbrElement.querySelector('.e-toolbar-center');\n var tlbrRightElement = tlbrElement.querySelector('.e-toolbar-right');\n var tlbrItems = tlbrElement.querySelector('.e-toolbar-items');\n var tlbrLeftWidth = tlbrLeftElement ? tlbrLeftElement.clientWidth : 0;\n var tlbrCenterWidth = tlbrCenterElement ? tlbrCenterElement.clientWidth : 0;\n var tlbrRightWidth = tlbrRightElement ? tlbrRightElement.clientWidth : 0;\n var tlbrItemsWidth = tlbrItems ? tlbrItems.clientWidth : 0;\n var tlbrWidth = tlbrElement ? tlbrElement.clientWidth : 0;\n if (!this.parent.enableAdaptiveUI || tlbrLeftWidth > tlbrWidth || tlbrCenterWidth > tlbrWidth || tlbrRightWidth > tlbrWidth ||\n tlbrItemsWidth > tlbrWidth) {\n this.parent.toolbarModule.toolbar.refreshOverflow();\n }\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Scroll.prototype.setHeight = function () {\n var mHdrHeight = 0;\n var content = this.parent.getContent().querySelector('.' + literals.content);\n var height = this.parent.height;\n if (this.parent.enableColumnVirtualization && this.parent.isFrozenGrid() && this.parent.height !== 'auto'\n && this.parent.height.toString().indexOf('%') < 0) {\n height = parseInt(height, 10) - Scroll.getScrollBarWidth();\n }\n if (!this.parent.enableVirtualization && this.parent.frozenRows && this.parent.height !== 'auto') {\n var tbody = this.parent.getHeaderContent()\n .querySelector(literals.tbody + ':not(.e-masked-tbody)');\n mHdrHeight = tbody ? tbody.offsetHeight : 0;\n if (tbody && mHdrHeight) {\n var add = tbody.getElementsByClassName(literals.addedRow).length;\n var height_1 = add * this.parent.getRowHeight();\n mHdrHeight -= height_1;\n }\n else if (!this.parent.isInitialLoad && this.parent.loadingIndicator.indicatorType === 'Shimmer'\n && this.parent.getHeaderContent().querySelector('.e-masked-table')) {\n height = parseInt(height, 10) - (this.parent.frozenRows * this.parent.getRowHeight());\n }\n content.style.height = formatUnit(height - mHdrHeight);\n }\n else {\n content.style.height = formatUnit(height);\n }\n this.ensureOverflow(content);\n if (this.parent.isFrozenGrid()) {\n this.refresh();\n }\n };\n /**\n * @returns {void}\n * @hidden\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('.' + literals.headerContent).style[cssProps.border] = scrollWidth > 0 ? '1px' : '0px';\n content.style[cssProps.padding] = scrollWidth > 0 ? scrollWidth + 'px' : '0px';\n };\n /**\n * @param {boolean} rtl - specifies the rtl\n * @returns {void}\n * @hidden\n */\n Scroll.prototype.removePadding = function (rtl) {\n var cssProps = this.getCssProperties(rtl);\n var hDiv = this.parent.getHeaderContent().querySelector('.' + literals.headerContent);\n hDiv.style[cssProps.border] = '';\n hDiv.parentElement.style[cssProps.padding] = '';\n var footerDiv = this.parent.getFooterContent();\n 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`](./#height) must be set to 100%.\n *\n * @returns {void}\n */\n Scroll.prototype.refresh = function () {\n if (this.parent.height !== '100%') {\n return;\n }\n var content = this.parent.getContent();\n this.parent.element.style.height = '100%';\n var height = this.widthService.getSiblingsHeight(content);\n content.style.height = 'calc(100% - ' + height + 'px)'; //Set the height to the '.' + literals.gridContent;\n };\n 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 if (appName === 'mozilla') {\n return 0.5;\n }\n return 1;\n };\n /**\n * @returns {void}\n * @hidden\n */\n Scroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\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 * @returns {void}\n * @hidden\n */\n Scroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\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 this.unwireEvents();\n };\n Scroll.prototype.unwireEvents = function () {\n if (this.parent.frozenRows && this.header) {\n EventHandler.remove(this.header, 'touchstart pointerdown', this.setPageXY);\n EventHandler.remove(this.header, 'touchmove pointermove', this.onTouchScroll);\n }\n var mScrollBar = this.parent.getContent() ? this.parent.getContent().querySelector('.e-movablescrollbar') : null;\n if (this.parent.isFrozenGrid() && this.parent.enableColumnVirtualization) {\n if (mScrollBar) {\n EventHandler.remove(mScrollBar, 'scroll', this.onCustomScrollbarScroll);\n }\n if (this.content) {\n EventHandler.remove(this.content, 'scroll', this.onCustomScrollbarScroll);\n EventHandler.remove(this.content, 'touchstart pointerdown', this.setPageXY);\n if (!(/macintosh|ipad/.test(Browser.userAgent.toLowerCase()) && Browser.isDevice)) {\n EventHandler.remove(this.content, 'touchmove pointermove', this.onTouchScroll);\n }\n }\n if (this.header) {\n EventHandler.remove(this.header, 'scroll', this.onCustomScrollbarScroll);\n EventHandler.remove(this.header, 'touchstart pointerdown', this.setPageXY);\n EventHandler.remove(this.header, 'touchmove pointermove', this.onTouchScroll);\n }\n }\n if (this.content) {\n EventHandler.remove(this.content, 'scroll', this.contentScrollHandler);\n }\n if (this.header) {\n EventHandler.remove(this.header, 'scroll', this.headerScrollHandler);\n }\n this.contentScrollHandler = null;\n this.headerScrollHandler = null;\n if (this.parent.aggregates.length && this.parent.getFooterContent()) {\n EventHandler.remove(this.parent.getFooterContent().firstChild, 'scroll', this.onContentScroll);\n }\n };\n Scroll.prototype.setScrollLeft = function () {\n this.parent.getHeaderContent().querySelector('.' + literals.headerContent).scrollLeft = this.previousValues.left;\n };\n Scroll.prototype.onContentScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n var isHeader = element.classList.contains(literals.headerContent);\n return function (e) {\n if (_this.content.querySelector(literals.tbody) === null || _this.parent.isPreventScrollEvent) {\n return;\n }\n var target = e.target;\n if (_this.parent.frozenRows) {\n if (_this.content.scrollTop > 0 && _this.parent.frozenRows) {\n addClass([_this.parent.element], 'e-top-shadow');\n }\n else {\n removeClass([_this.parent.element], 'e-top-shadow');\n }\n }\n if (_this.parent.element.querySelectorAll('.e-leftfreeze,.e-fixedfreeze,.e-rightfreeze').length) {\n var errorFreeze = _this.parent.getContent().querySelectorAll('.e-freezeerror:not([style*=\"display: none\"])');\n var errorFixed = _this.parent.getContent().querySelectorAll('.e-fixederror:not([style*=\"display: none\"])');\n if (target.scrollLeft !== 0 && _this.parent.getVisibleFrozenLeftCount()) {\n addClass([_this.parent.element], 'e-left-shadow');\n }\n else {\n removeClass([_this.parent.element], 'e-left-shadow');\n }\n var widthVal = Math.round((_this.parent.enableRtl ? target.scrollWidth + target.scrollLeft : target.scrollWidth - target.scrollLeft) +\n (_this.parent.height === 'auto' ? 0 : 1));\n if (widthVal === target.offsetWidth && _this.parent.getVisibleFrozenRightCount()) {\n removeClass([_this.parent.element], 'e-right-shadow');\n }\n else {\n addClass([_this.parent.element], 'e-right-shadow');\n }\n var rows = [].slice.call(_this.parent.getContent().querySelectorAll('.e-row:not(.e-hiddenrow)'));\n if (((rows.length === 1 && errorFreeze.length) ||\n (_this.parent.element.querySelector('.e-freeze-autofill:not([style*=\"display: none\"])')) ||\n errorFixed.length) && target.scrollLeft !== _this.previousValues.left) {\n target.scrollLeft = _this.previousValues.left;\n return;\n }\n if (rows.length !== 1 && (errorFreeze.length || errorFixed.length) && target.scrollTop !== _this.previousValues.top) {\n target.scrollTop = _this.previousValues.top;\n return;\n }\n }\n var left = target.scrollLeft;\n if (!isNullOrUndefined(_this.parent.infiniteScrollModule) && _this.parent.enableInfiniteScrolling && !_this.parent.isEdit) {\n _this.parent.notify(infiniteScrollHandler, { target: e.target, isLeft: _this.previousValues.left !== left });\n }\n if (_this.parent.groupSettings.columns.length && _this.parent.groupSettings.enableLazyLoading) {\n var isDown = _this.previousValues.top < _this.parent.getContent().firstElementChild.scrollTop;\n _this.parent.notify(lazyLoadScrollHandler, { scrollDown: isDown });\n }\n _this.parent.notify(virtualScrollEdit, {});\n var isFooter = target.classList.contains('e-summarycontent');\n if (_this.previousValues.left === left) {\n _this.previousValues.top = !isHeader ? _this.previousValues.top : target.scrollTop;\n return;\n }\n _this.parent.notify(closeFilterDialog, e);\n element.scrollLeft = left;\n if (isFooter) {\n _this.header.scrollLeft = left;\n }\n _this.previousValues.left = left;\n _this.parent.notify(scroll, { left: left });\n };\n };\n Scroll.prototype.onCustomScrollbarScroll = function (cont, hdr) {\n var _this = this;\n var content = cont;\n var header = hdr;\n return function (e) {\n if (_this.content.querySelector(literals.tbody) === null) {\n return;\n }\n var target = e.target;\n var left = target.scrollLeft;\n if (_this.previousValues.left === left) {\n return;\n }\n content.scrollLeft = left;\n header.scrollLeft = left;\n _this.previousValues.left = left;\n _this.parent.notify(scroll, { left: left });\n if (_this.parent.isDestroyed) {\n return;\n }\n };\n };\n Scroll.prototype.onTouchScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n return function (e) {\n if (e.pointerType === 'mouse') {\n return;\n }\n var isFrozen = _this.parent.isFrozenGrid();\n var pageXY = _this.getPointXY(e);\n var left = element.scrollLeft + (_this.pageXY.x - pageXY.x);\n var mHdr = _this.parent.getHeaderContent().querySelector('.' + literals.headerContent);\n var mCont = _this.parent.getContent().querySelector('.' + literals.content);\n if (_this.previousValues.left === left || (left < 0 || (mHdr.scrollWidth - mHdr.clientWidth) < left)) {\n return;\n }\n e.preventDefault();\n mHdr.scrollLeft = left;\n mCont.scrollLeft = left;\n if (isFrozen && _this.parent.enableColumnVirtualization) {\n var scrollBar = _this.parent.getContent().querySelector('.e-movablescrollbar');\n scrollBar.scrollLeft = left;\n }\n _this.pageXY.x = pageXY.x;\n _this.previousValues.left = left;\n };\n };\n Scroll.prototype.setPageXY = function () {\n var _this = this;\n return function (e) {\n if (e.pointerType === 'mouse') {\n return;\n }\n _this.pageXY = _this.getPointXY(e);\n };\n };\n Scroll.prototype.getPointXY = function (e) {\n var pageXY = { x: 0, y: 0 };\n if (e.touches && e.touches.length) {\n pageXY.x = e.touches[0].pageX;\n pageXY.y = e.touches[0].pageY;\n }\n else {\n pageXY.x = e.pageX;\n pageXY.y = e.pageY;\n }\n return pageXY;\n };\n Scroll.prototype.getScrollbleParent = function (node) {\n if (node === null) {\n return null;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var parent = isNullOrUndefined(node.tagName) ? node.scrollingElement : node;\n var overflowY = document.defaultView.getComputedStyle(parent, null).overflowY;\n if (parent.scrollHeight > parent.clientHeight && overflowY !== 'hidden'\n && overflowY !== 'visible' || node.tagName === 'HTML' || node.tagName === 'BODY') {\n return node;\n }\n else {\n return this.getScrollbleParent(node.parentNode);\n }\n };\n /**\n * @param {boolean} isAdd - specifies whether adding/removing the event\n * @returns {void}\n * @hidden\n */\n Scroll.prototype.addStickyListener = function (isAdd) {\n this.parentElement = this.getScrollbleParent(this.parent.element.parentElement);\n if (isAdd && this.parentElement) {\n this.eventElement = this.parentElement.tagName === 'HTML' || this.parentElement.tagName === 'BODY' ? document :\n this.parentElement;\n EventHandler.add(this.eventElement, 'scroll', this.makeStickyHeader, this);\n }\n else if (this.eventElement) {\n EventHandler.remove(this.eventElement, 'scroll', this.makeStickyHeader);\n this.eventElement = null;\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Scroll.prototype.resizeFrozenRowBorder = function () {\n var div;\n if (!this.parent.element.querySelector('.e-frozenrow-border')) {\n div = this.parent.createElement('div', { className: 'e-frozenrow-border' });\n this.parent.element.insertBefore(div, this.parent.element.querySelector('.e-gridcontent'));\n }\n else {\n div = this.parent.element.querySelector('.e-frozenrow-border');\n }\n var scrollWidth = this.parent.height !== 'auto' ? Scroll.getScrollBarWidth() : 0;\n div.style.width = (this.parent.element.offsetWidth - scrollWidth) - 0.5 + 'px';\n };\n Scroll.prototype.wireEvents = function () {\n var _this = this;\n if (this.oneTimeReady) {\n var frzCols = this.parent.isFrozenGrid();\n this.content = this.parent.getContent().querySelector('.' + literals.content);\n this.header = this.parent.getHeaderContent().querySelector('.' + literals.headerContent);\n var mScrollBar = this.parent.getContent().querySelector('.e-movablescrollbar');\n if (this.parent.frozenRows && this.header && this.content) {\n EventHandler.add(this.header, 'touchstart pointerdown', this.setPageXY(), this);\n EventHandler.add(this.header, 'touchmove pointermove', this.onTouchScroll(this.content), this);\n }\n if (frzCols && mScrollBar && this.parent.enableColumnVirtualization) {\n EventHandler.add(mScrollBar, 'scroll', this.onCustomScrollbarScroll(this.content, this.header), this);\n EventHandler.add(this.content, 'scroll', this.onCustomScrollbarScroll(mScrollBar, this.header), this);\n EventHandler.add(this.header, 'scroll', this.onCustomScrollbarScroll(mScrollBar, this.content), this);\n EventHandler.add(this.header, 'touchstart pointerdown', this.setPageXY(), this);\n EventHandler.add(this.header, 'touchmove pointermove', this.onTouchScroll(this.content), this);\n EventHandler.add(this.content, 'touchstart pointerdown', this.setPageXY(), this);\n if (!(/macintosh|ipad/.test(Browser.userAgent.toLowerCase()) && Browser.isDevice)) {\n EventHandler.add(this.content, 'touchmove pointermove', this.onTouchScroll(this.header), this);\n }\n }\n this.contentScrollHandler = this.onContentScroll(this.header);\n this.headerScrollHandler = this.onContentScroll(this.content);\n EventHandler.add(this.content, 'scroll', this.contentScrollHandler, this);\n EventHandler.add(this.header, 'scroll', this.headerScrollHandler, this);\n if (this.parent.aggregates.length) {\n EventHandler.add(this.parent.getFooterContent().firstChild, 'scroll', this.onContentScroll(this.content), this);\n }\n if (this.parent.enableStickyHeader) {\n this.addStickyListener(true);\n }\n this.refresh();\n this.oneTimeReady = false;\n }\n var table = this.parent.getContentTable();\n var sLeft;\n var sHeight;\n var clientHeight;\n getUpdateUsingRaf(function () {\n sLeft = _this.header.scrollLeft;\n sHeight = table.scrollHeight;\n clientHeight = _this.parent.getContent().clientHeight;\n }, function () {\n var args = { cancel: false };\n _this.parent.notify(checkScrollReset, args);\n if (sHeight < clientHeight && _this.parent.height !== 'auto') {\n _this.setLastRowCell();\n }\n if (_this.parent.frozenRows) {\n _this.resizeFrozenRowBorder();\n }\n if (!_this.parent.enableVirtualization && !_this.parent.enableInfiniteScrolling) {\n if (!args.cancel) {\n _this.header.scrollLeft = _this.previousValues.left;\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 if (_this.parent.isFrozenGrid()) {\n _this.previousValues.left = sLeft;\n }\n }\n });\n this.parent.isPreventScrollEvent = false;\n };\n /**\n * @returns {void} returns void\n * @hidden\n */\n Scroll.prototype.setLastRowCell = function () {\n var table = this.parent.getContentTable();\n if (table.querySelector('tr:nth-last-child(2)')) {\n removeClass(table.querySelector('tr:nth-last-child(2)').querySelectorAll('td'), 'e-lastrowcell');\n }\n addClass(table.querySelectorAll('tr:last-child td'), 'e-lastrowcell');\n };\n /**\n * @param {boolean} rtl - specifies the rtl\n * @returns {ScrollCss} returns the ScrollCss\n * @hidden\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 Scroll.prototype.ensureOverflow = function (content) {\n content.style.overflowY = this.parent.height === 'auto' ? 'auto' : 'scroll';\n };\n Scroll.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n this.setPadding();\n this.oneTimeReady = true;\n if (this.parent.height === 'auto') {\n this.removePadding();\n }\n this.wireEvents();\n this.setHeight();\n var width = 'width';\n this.setWidth(!isNullOrUndefined(e.properties[\"\" + width]));\n };\n Scroll.prototype.makeStickyHeader = function () {\n if (this.parent.enableStickyHeader && this.parent.element && this.parent.getContent()) {\n var contentRect = this.parent.getContent().getClientRects()[0];\n if (contentRect) {\n var headerEle = this.parent.getHeaderContent();\n var toolbarEle = this.parent.element.querySelector('.e-toolbar');\n var groupHeaderEle = this.parent.element.querySelector('.e-groupdroparea');\n var height = headerEle.offsetHeight + (toolbarEle ? toolbarEle.offsetHeight : 0) +\n (groupHeaderEle ? groupHeaderEle.offsetHeight : 0);\n var parentTop = this.parentElement.getClientRects()[0].top;\n var top_1 = contentRect.top - (parentTop < 0 ? 0 : parentTop);\n var left = contentRect.left;\n var colMenuEle = document.body.querySelector('#' + this.parent.element.id + '_columnmenu');\n if (top_1 < height && contentRect.bottom > 0) {\n headerEle.classList.add('e-sticky');\n var elemTop = 0;\n if (groupHeaderEle && this.parent.groupSettings.showDropArea) {\n this.setSticky(groupHeaderEle, elemTop, contentRect.width, left, true);\n elemTop += groupHeaderEle.getClientRects()[0].height;\n }\n if (toolbarEle) {\n this.setSticky(toolbarEle, elemTop, contentRect.width, left, true);\n elemTop += toolbarEle.getClientRects()[0].height;\n }\n this.setSticky(headerEle, elemTop, contentRect.width, left, true);\n if (!isNullOrUndefined(colMenuEle)) {\n colMenuEle.style.position = 'fixed';\n colMenuEle.style.top = height + 'px';\n }\n }\n else {\n if (headerEle.classList.contains('e-sticky')) {\n this.setSticky(headerEle, null, null, null, false);\n if (toolbarEle) {\n this.setSticky(toolbarEle, null, null, null, false);\n }\n if (groupHeaderEle) {\n this.setSticky(groupHeaderEle, null, null, null, false);\n }\n var ccDlg = this.parent.element.querySelector('.e-ccdlg');\n if (ccDlg) {\n ccDlg.classList.remove('e-sticky');\n }\n if (!isNullOrUndefined(colMenuEle)) {\n colMenuEle.style.position = 'absolute';\n var topStyle = contentRect.top - parentTop;\n colMenuEle.style.top = topStyle + 'px';\n }\n }\n }\n this.parent.notify(events.stickyScrollComplete, {});\n }\n }\n };\n Scroll.prototype.setSticky = function (ele, top, width, left, isAdd) {\n if (isAdd) {\n ele.style.width = width + 'px';\n ele.classList.add('e-sticky');\n }\n else {\n ele.classList.remove('e-sticky');\n }\n ele.style.top = top != null ? top + 'px' : '';\n ele.style.left = left !== null ? parseInt(ele.style.left, 10) !== left ? left + 'px' : ele.style.left : '';\n };\n /**\n * @returns {void}\n * @hidden\n */\n Scroll.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.' + literals.gridHeader) && !gridElement.querySelector('.' + literals.gridContent))) {\n return;\n }\n this.removeEventListener();\n //Remove Dom event\n var cont = this.parent.getContent().querySelector('.' + literals.content);\n EventHandler.remove(cont, 'scroll', this.onContentScroll);\n if (this.parent.enableStickyHeader) {\n this.addStickyListener(false);\n }\n //Remove padding\n this.removePadding();\n removeClass([this.parent.getHeaderContent().querySelector('.' + literals.headerContent)], literals.headerContent);\n removeClass([cont], literals.content);\n //Remove height\n cont.style.height = '';\n //Remove width\n this.parent.element.style.width = '';\n };\n /**\n * Function to get the scrollbar width of the browser.\n *\n * @returns {number} return the width\n * @hidden\n */\n Scroll.getScrollBarWidth = function () {\n return getScrollBarWidth();\n };\n return Scroll;\n}());\nexport { Scroll };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { 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 *\n * @hidden\n */\nvar SummaryModelGenerator = /** @class */ (function () {\n /**\n * Constructor for Summary row model generator\n *\n * @param {IGrid} parent - specifies the IGrid\n */\n function SummaryModelGenerator(parent) {\n this.parent = parent;\n }\n SummaryModelGenerator.prototype.getData = function () {\n var _this = this;\n var rows = [];\n var row = this.parent.aggregates.slice();\n for (var i = 0; i < row.length; i++) {\n var columns = row[parseInt(i.toString(), 10)].columns.filter(function (column) {\n return !(column.footerTemplate || column.groupFooterTemplate || column.groupCaptionTemplate)\n || _this.columnSelector(column);\n });\n if (columns.length) {\n rows.push({ columns: columns });\n }\n }\n return rows;\n };\n SummaryModelGenerator.prototype.columnSelector = function (column) {\n return column.footerTemplate !== undefined;\n };\n SummaryModelGenerator.prototype.getColumns = function (start) {\n var columns = [];\n if (this.parent.detailTemplate || !isNullOrUndefined(this.parent.childGrid)) {\n columns.push(new Column({}));\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 if (this.parent.isRowDragable() && !start) {\n columns.push(new Column({}));\n }\n columns.push.apply(columns, this.parent.getColumns());\n return columns;\n };\n SummaryModelGenerator.prototype.generateRows = function (input, args, start, end, columns) {\n if (input.length === 0) {\n if (args === undefined || !args.count) {\n return [];\n }\n }\n var data = this.buildSummaryData(input, args);\n var rows = [];\n var row = this.getData();\n for (var i = 0; i < row.length; i++) {\n rows.push(this.getGeneratedRow(row[parseInt(i.toString(), 10)], data[parseInt(i.toString(), 10)], args ? args.level : undefined, start, end, args ? args.parentUid : undefined, columns));\n }\n return rows;\n };\n SummaryModelGenerator.prototype.getGeneratedRow = function (summaryRow, data, raw, start, end, parentUid, columns) {\n var tmp = [];\n var indents = this.getIndentByLevel();\n var isDetailGridAlone = !isNullOrUndefined(this.parent.childGrid);\n var indentLength = this.parent.getIndentCount();\n if (this.parent.groupSettings.columns.length && this.parent.allowRowDragAndDrop) {\n indents.push('e-indentcelltop');\n }\n else if (this.parent.isRowDragable() && !start) {\n indents = ['e-indentcelltop'];\n }\n var values = columns ? columns : this.getColumns(start);\n for (var i = 0; i < values.length; i++) {\n tmp.push(this.getGeneratedCell(values[parseInt(i.toString(), 10)], summaryRow, i >= indentLength ? this.getCellType() :\n i === 0 && this.parent.childGrid ? CellType.DetailFooterIntent : CellType.Indent, indents[parseInt(i.toString(), 10)], isDetailGridAlone));\n }\n var row = new Row({ data: data, attributes: { class: 'e-summaryrow' } });\n row.cells = tmp;\n row.uid = getUid('grid-row');\n row.parentUid = parentUid;\n row.isAggregateRow = true;\n row.visible = tmp.some(function (cell) { return cell.isDataCell && cell.visible; });\n return row;\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) { return scolumn.columnName === column.field; })[0];\n var attrs = {\n 'style': { 'textAlign': column.textAlign },\n 'e-mappinguid': column.uid, index: column.index\n };\n if (indent) {\n attrs.class = indent;\n }\n if (isNullOrUndefined(indent) && isDetailGridAlone) {\n attrs.class = 'e-detailindentcelltop';\n }\n var opt = {\n 'visible': column.visible,\n 'isDataCell': !isNullOrUndefined(sColumn),\n 'isTemplate': sColumn && !isNullOrUndefined(sColumn.footerTemplate\n || sColumn.groupFooterTemplate || sColumn.groupCaptionTemplate),\n 'column': sColumn || {},\n 'attributes': attrs,\n 'cellType': cellType\n };\n opt.column.headerText = column.headerText;\n return new Cell(opt);\n };\n SummaryModelGenerator.prototype.buildSummaryData = function (data, args) {\n var dummy = [];\n var summaryRows = this.getData();\n var single = {};\n for (var i = 0; i < summaryRows.length; i++) {\n single = {};\n var column = summaryRows[parseInt(i.toString(), 10)].columns;\n for (var j = 0; j < column.length; j++) {\n single = this.setTemplate(column[parseInt(j.toString(), 10)], (args && args.aggregates) ? args : data, single);\n }\n dummy.push(single);\n }\n return dummy;\n };\n SummaryModelGenerator.prototype.getIndentByLevel = function () {\n return this.parent.groupSettings.columns.map(function () { return 'e-indentcelltop'; });\n };\n SummaryModelGenerator.prototype.setTemplate = function (column, data, single) {\n var types = column.type;\n var helper = {};\n var formatFn = column.getFormatter() || (function () { return function (a) { return a; }; })();\n var group = data;\n if (!(types instanceof Array)) {\n types = [column.type];\n }\n for (var i = 0; i < types.length; i++) {\n var key = column.field + ' - ' + types[parseInt(i.toString(), 10)].toLowerCase();\n var disp = column.columnName;\n var val = types[parseInt(i.toString(), 10)] !== 'Custom' && group.aggregates && key in group.aggregates ? group.aggregates[\"\" + key] :\n calculateAggregate(types[parseInt(i.toString(), 10)], group.aggregates ? group : data, column, this.parent);\n single[\"\" + disp] = single[\"\" + disp] || {};\n single[\"\" + disp][\"\" + key] = val;\n single[\"\" + disp][types[parseInt(i.toString(), 10)]] = !isNullOrUndefined(val) ? formatFn(val) : ' ';\n if (group.field) {\n single[\"\" + disp].field = group.field;\n single[\"\" + disp].key = group.key;\n }\n }\n helper.format = column.getFormatter();\n column.setTemplate(helper);\n return single;\n };\n SummaryModelGenerator.prototype.getCellType = function () {\n return CellType.Summary;\n };\n return SummaryModelGenerator;\n}());\nexport { SummaryModelGenerator };\nvar GroupSummaryModelGenerator = /** @class */ (function (_super) {\n __extends(GroupSummaryModelGenerator, _super);\n function GroupSummaryModelGenerator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n GroupSummaryModelGenerator.prototype.columnSelector = function (column) {\n return column.groupFooterTemplate !== undefined;\n };\n GroupSummaryModelGenerator.prototype.getIndentByLevel = function (level) {\n if (level === void 0) { level = this.parent.groupSettings.columns.length; }\n if (this.parent.allowRowDragAndDrop && this.parent.groupSettings.columns.length) {\n level -= 1;\n }\n return this.parent.groupSettings.columns.map(function (v, indx) { return indx <= level - 1 ? '' : 'e-indentcelltop'; });\n };\n GroupSummaryModelGenerator.prototype.getCellType = function () {\n return CellType.GroupSummary;\n };\n return GroupSummaryModelGenerator;\n}(SummaryModelGenerator));\nexport { GroupSummaryModelGenerator };\nvar CaptionSummaryModelGenerator = /** @class */ (function (_super) {\n __extends(CaptionSummaryModelGenerator, _super);\n function CaptionSummaryModelGenerator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n CaptionSummaryModelGenerator.prototype.columnSelector = function (column) {\n return column.groupCaptionTemplate !== undefined;\n };\n CaptionSummaryModelGenerator.prototype.getData = function () {\n var initVal = { columns: [] };\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 CaptionSummaryModelGenerator.prototype.isEmpty = function () {\n return (this.getData()[0].columns || []).length === 0;\n };\n CaptionSummaryModelGenerator.prototype.getCellType = function () {\n return CellType.CaptionSummary;\n };\n return CaptionSummaryModelGenerator;\n}(SummaryModelGenerator));\nexport { CaptionSummaryModelGenerator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheets class\n * @private\n */\nvar Worksheets = /** @class */ (function (_super) {\n __extends(Worksheets, _super);\n function Worksheets() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return Worksheets;\n}(Array));\nexport { Worksheets };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheet class\n * @private\n */\nvar Worksheet = /** @class */ (function () {\n function Worksheet() {\n this.isSummaryRowBelow = true;\n this.showGridLines = true;\n this.enableRtl = false;\n }\n return Worksheet;\n}());\nexport { Worksheet };\n/**\n * Hyperlink class\n * @private\n */\nvar HyperLink = /** @class */ (function () {\n function HyperLink() {\n }\n return HyperLink;\n}());\nexport { HyperLink };\n/**\n * Grouping class\n * @private\n */\nvar Grouping = /** @class */ (function () {\n function Grouping() {\n }\n return Grouping;\n}());\nexport { Grouping };\n/**\n * FreezePane class\n * @private\n */\nvar FreezePane = /** @class */ (function () {\n function FreezePane() {\n }\n return FreezePane;\n}());\nexport { FreezePane };\n/**\n * MergeCell\n * @private\n */\nvar MergeCell = /** @class */ (function () {\n function MergeCell() {\n }\n return MergeCell;\n}());\nexport { MergeCell };\n/**\n * MergeCells class\n * @private\n */\nvar MergeCells = /** @class */ (function (_super) {\n __extends(MergeCells, _super);\n function MergeCells() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (mergeCell) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var mCell = _a[_i];\n if (MergeCells.isIntersecting(mCell, mergeCell)) {\n var intersectingCell = new MergeCell();\n intersectingCell.x = Math.min(mCell.x, mergeCell.x);\n intersectingCell.y = Math.min(mCell.Y, mergeCell.y);\n intersectingCell.width = Math.max(mCell.Width + mCell.X, mergeCell.width + mergeCell.x);\n intersectingCell.height = Math.max(mCell.Height + mCell.Y, mergeCell.height + mergeCell.y);\n intersectingCell.ref = (_this[count].ref.split(':')[0]) + ':' + (mergeCell.ref.split(':')[1]);\n _this[count] = intersectingCell;\n mergeCell = intersectingCell;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(mergeCell);\n }\n return mergeCell;\n };\n return _this;\n }\n MergeCells.isIntersecting = function (base, compare) {\n return (base.x <= compare.x + compare.width)\n && (compare.x <= base.x + base.width)\n && (base.y <= compare.y + compare.height)\n && (compare.y <= base.y + base.height);\n };\n return MergeCells;\n}(Array));\nexport { MergeCells };\n","/**\n * CellStyle class\n * @private\n */\nvar CellStyle = /** @class */ (function () {\n function CellStyle() {\n this.numFmtId = 0;\n this.backColor = 'none';\n this.fontName = 'Calibri';\n this.fontSize = 10.5;\n this.fontColor = '#000000';\n this.italic = false;\n this.bold = false;\n this.underline = false;\n this.strikeThrough = false;\n this.wrapText = false;\n this.hAlign = 'general';\n this.vAlign = 'bottom';\n this.indent = 0;\n this.rotation = 0;\n this.numberFormat = 'GENERAL';\n this.type = 'datetime';\n this.borders = new Borders();\n this.isGlobalStyle = false;\n }\n return CellStyle;\n}());\nexport { CellStyle };\n/**\n * Font Class\n * @private\n */\nvar Font = /** @class */ (function () {\n function Font() {\n this.sz = 10.5;\n this.name = 'Calibri';\n this.u = false;\n this.b = false;\n this.i = false;\n this.color = 'FF000000';\n this.strike = false;\n }\n return Font;\n}());\nexport { Font };\n/**\n * CellXfs class\n * @private\n */\nvar CellXfs = /** @class */ (function () {\n function CellXfs() {\n }\n return CellXfs;\n}());\nexport { CellXfs };\n/**\n * Alignment class\n * @private\n */\nvar Alignment = /** @class */ (function () {\n function Alignment() {\n }\n return Alignment;\n}());\nexport { Alignment };\n/**\n * CellStyleXfs class\n * @private\n */\nvar CellStyleXfs = /** @class */ (function () {\n function CellStyleXfs() {\n }\n return CellStyleXfs;\n}());\nexport { CellStyleXfs };\n/**\n * CellStyles class\n * @private\n */\nvar CellStyles = /** @class */ (function () {\n function CellStyles() {\n this.name = 'Normal';\n this.xfId = 0;\n }\n return CellStyles;\n}());\nexport { CellStyles };\n/**\n * NumFmt class\n * @private\n */\nvar NumFmt = /** @class */ (function () {\n function NumFmt(id, code) {\n this.numFmtId = id;\n this.formatCode = code;\n }\n return NumFmt;\n}());\nexport { NumFmt };\n/**\n * Border class\n * @private\n */\nvar Border = /** @class */ (function () {\n function Border(mLine, mColor) {\n this.lineStyle = mLine;\n this.color = mColor;\n }\n return Border;\n}());\nexport { Border };\n/**\n * Borders class\n * @private\n */\nvar Borders = /** @class */ (function () {\n function Borders() {\n this.left = new Border('none', '#FFFFFF');\n this.right = new Border('none', '#FFFFFF');\n this.top = new Border('none', '#FFFFFF');\n this.bottom = new Border('none', '#FFFFFF');\n this.all = new Border('none', '#FFFFFF');\n }\n return Borders;\n}());\nexport { Borders };\n","/**\n * Column class\n * @private\n */\nvar Column = /** @class */ (function () {\n function Column() {\n }\n return Column;\n}());\nexport { Column };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Row class\n * @private\n */\nvar Row = /** @class */ (function () {\n function Row() {\n }\n return Row;\n}());\nexport { Row };\n/**\n * Rows class\n * @private\n */\nvar Rows = /** @class */ (function (_super) {\n __extends(Rows, _super);\n function Rows() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (row) {\n _this.push(row);\n };\n return _this;\n }\n return Rows;\n}(Array));\nexport { Rows };\n","/**\n * Image class\n * @private\n */\nvar Image = /** @class */ (function () {\n function Image() {\n }\n return Image;\n}());\nexport { Image };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheet class\n * @private\n */\nvar Cell = /** @class */ (function () {\n function Cell() {\n }\n return Cell;\n}());\nexport { Cell };\n/**\n * Cells class\n * @private\n */\nvar Cells = /** @class */ (function (_super) {\n __extends(Cells, _super);\n function Cells() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (cell) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var c = _a[_i];\n if (c.index === cell.index) {\n _this[count] = cell;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(cell);\n }\n };\n return _this;\n }\n return Cells;\n}(Array));\nexport { Cells };\n","/* eslint-disable */\nvar Utils = /** @class */ (function () {\n function Utils() {\n }\n Utils.bitReverse = function (value) {\n return (Utils.reverseBits[value & 15] << 12\n | Utils.reverseBits[(value >> 4) & 15] << 8\n | Utils.reverseBits[(value >> 8) & 15] << 4\n | Utils.reverseBits[value >> 12]);\n };\n Utils.bitConverterToInt32 = function (value, index) {\n return value[index] | value[index + 1] << 8 | value[index + 2] << 16 | value[index + 3] << 24;\n };\n Utils.bitConverterToInt16 = function (value, index) {\n return value[index] | value[index + 1] << 8;\n };\n Utils.bitConverterToUInt32 = function (value) {\n var uint = new Uint32Array(1);\n uint[0] = value;\n return uint[0];\n };\n Utils.bitConverterToUInt16 = function (value, index) {\n var uint = new Uint16Array(1);\n uint[0] = (value[index] | value[index + 1] << 8);\n return uint[0];\n };\n Utils.bitConverterUintToInt32 = function (value) {\n var uint = new Int32Array(1);\n uint[0] = value;\n return uint[0];\n };\n Utils.bitConverterInt32ToUint = function (value) {\n var uint = new Uint32Array(1);\n uint[0] = value;\n return uint[0];\n };\n Utils.bitConverterInt32ToInt16 = function (value) {\n var uint = new Int16Array(1);\n uint[0] = value;\n return uint[0];\n };\n Utils.byteToString = function (value) {\n var str = '';\n for (var i = 0; i < value.length; i++) {\n str += String.fromCharCode(value[i]);\n }\n return str;\n };\n Utils.byteIntToString = function (value) {\n var str = '';\n for (var i = 0; i < value.length; i++) {\n str += String.fromCharCode(value[i]);\n }\n return str;\n };\n Utils.arrayCopy = function (source, sourceIndex, destination, destinationIndex, dataToCopy) {\n var temp = new Uint8Array(source.buffer, sourceIndex);\n var data = temp.subarray(0, dataToCopy);\n destination.set(data, destinationIndex);\n };\n Utils.mergeArray = function (arrayOne, arrayTwo) {\n var mergedArray = new Uint8Array(arrayOne.length + arrayTwo.length);\n mergedArray.set(arrayOne);\n mergedArray.set(arrayTwo, arrayOne.length);\n return mergedArray;\n };\n /**\n * @private\n */\n Utils.encodedString = function (input) {\n var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var chr1;\n var chr2;\n var chr3;\n var encode1;\n var encode2;\n var encode3;\n var encode4;\n var count = 0;\n var resultIndex = 0;\n /*let dataUrlPrefix: string = 'data:';*/\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n var totalLength = input.length * 3 / 4;\n if (input.charAt(input.length - 1) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (input.charAt(input.length - 2) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (totalLength % 1 !== 0) {\n // totalLength is not an integer, the length does not match a valid\n // base64 content. That can happen if:\n // - the input is not a base64 content\n // - the input is *almost* a base64 content, with a extra chars at the\n // beginning or at the end\n // - the input uses a base64 variant (base64url for example)\n throw new Error('Invalid base64 input, bad content length.');\n }\n var output = new Uint8Array(totalLength | 0);\n while (count < input.length) {\n encode1 = keyStr.indexOf(input.charAt(count++));\n encode2 = keyStr.indexOf(input.charAt(count++));\n encode3 = keyStr.indexOf(input.charAt(count++));\n encode4 = keyStr.indexOf(input.charAt(count++));\n chr1 = (encode1 << 2) | (encode2 >> 4);\n chr2 = ((encode2 & 15) << 4) | (encode3 >> 2);\n chr3 = ((encode3 & 3) << 6) | encode4;\n output[resultIndex++] = chr1;\n if (encode3 !== 64) {\n output[resultIndex++] = chr2;\n }\n if (encode4 !== 64) {\n output[resultIndex++] = chr3;\n }\n }\n return output;\n };\n Utils.reverseBits = [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15];\n Utils.huffCodeLengthOrders = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n return Utils;\n}());\nexport { Utils };\n/* eslint-enable */ \n","/* eslint-disable */\nimport { Utils } from './index';\nvar DecompressorHuffmanTree = /** @class */ (function () {\n function DecompressorHuffmanTree(lengths) {\n this.buildTree(lengths);\n }\n DecompressorHuffmanTree.init = function () {\n var lengths;\n var index;\n // Generate huffman tree for lengths.\n lengths = new Uint8Array(288);\n index = 0;\n while (index < 144) {\n lengths[index++] = 8;\n }\n while (index < 256) {\n lengths[index++] = 9;\n }\n while (index < 280) {\n lengths[index++] = 7;\n }\n while (index < 288) {\n lengths[index++] = 8;\n }\n DecompressorHuffmanTree.m_LengthTree = new DecompressorHuffmanTree(lengths);\n // Generate huffman tree for distances.\n lengths = new Uint8Array(32);\n index = 0;\n while (index < 32) {\n lengths[index++] = 5;\n }\n DecompressorHuffmanTree.m_DistanceTree = new DecompressorHuffmanTree(lengths);\n };\n /// \n /// Prepares data for generating huffman tree.\n /// \n /// Array of counts of each code length.\n /// Numerical values of the smallest code for each code length.\n /// Array of code lengths.\n /// Calculated tree size.\n /// Code.\n DecompressorHuffmanTree.prototype.prepareData = function (blCount, nextCode, lengths) {\n var code = 0;\n var treeSize = 512;\n // Count number of codes for each code length.\n for (var i = 0; i < lengths.length; i++) {\n var length_1 = lengths[i];\n if (length_1 > 0) {\n blCount[length_1]++;\n }\n }\n for (var bits = 1; bits <= DecompressorHuffmanTree.MAX_BITLEN; bits++) {\n nextCode[bits] = code;\n code += blCount[bits] << (16 - bits);\n if (bits >= 10) {\n var start = nextCode[bits] & 0x1ff80;\n var end = code & 0x1ff80;\n treeSize += (end - start) >> (16 - bits);\n }\n }\n /* if( code != 65536 )\n throw new ZipException( \"Code lengths don't add up properly.\" );*/\n return { 'code': code, 'treeSize': treeSize };\n };\n /// \n /// Generates huffman tree.\n /// \n /// Array of counts of each code length.\n /// Numerical values of the smallest code for each code length.\n /// Precalculated code.\n /// Array of code lengths.\n /// Calculated size of the tree.\n /// Generated tree.\n DecompressorHuffmanTree.prototype.treeFromData = function (blCount, nextCode, lengths, code, treeSize) {\n var tree = new Int16Array(treeSize);\n var pointer = 512;\n var increment = 1 << 7;\n for (var bits = DecompressorHuffmanTree.MAX_BITLEN; bits >= 10; bits--) {\n var end = code & 0x1ff80;\n code -= blCount[bits] << (16 - bits);\n var start = code & 0x1ff80;\n for (var i = start; i < end; i += increment) {\n tree[Utils.bitReverse(i)] = Utils.bitConverterInt32ToInt16((-pointer << 4) | bits);\n pointer += 1 << (bits - 9);\n }\n }\n for (var i = 0; i < lengths.length; i++) {\n var bits = lengths[i];\n if (bits == 0) {\n continue;\n }\n code = nextCode[bits];\n var revcode = Utils.bitReverse(code);\n if (bits <= 9) {\n do {\n tree[revcode] = Utils.bitConverterInt32ToInt16((i << 4) | bits);\n revcode += 1 << bits;\n } while (revcode < 512);\n }\n else {\n var subTree = tree[revcode & 511];\n var treeLen = 1 << (subTree & 15);\n subTree = -(subTree >> 4);\n do {\n tree[subTree | (revcode >> 9)] = Utils.bitConverterInt32ToInt16((i << 4) | bits);\n revcode += 1 << bits;\n } while (revcode < treeLen);\n }\n nextCode[bits] = code + (1 << (16 - bits));\n }\n return tree;\n };\n /// \n /// Builds huffman tree from array of code lengths.\n /// \n /// Array of code lengths.\n DecompressorHuffmanTree.prototype.buildTree = function (lengths) {\n // Count of codes for each code length.\n var blCount = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n // Numerical value of the smallest code for each code length.\n var nextCode = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n var prepareData = this.prepareData(blCount, nextCode, lengths);\n this.m_Tree = this.treeFromData(blCount, nextCode, lengths, prepareData.code, prepareData.treeSize);\n };\n /// \n /// Reads and decompresses one symbol.\n /// \n /// \n /// \n DecompressorHuffmanTree.prototype.unpackSymbol = function (input) {\n var lookahead;\n var symbol;\n if ((lookahead = input.peekBits(9)) >= 0) {\n if ((symbol = this.m_Tree[lookahead]) >= 0) {\n input.skipBits((symbol & 15));\n return symbol >> 4;\n }\n var subtree = -(symbol >> 4);\n var bitlen = symbol & 15;\n if ((lookahead = input.peekBits(bitlen)) >= 0) {\n symbol = this.m_Tree[subtree | (lookahead >> 9)];\n input.skipBits((symbol & 15));\n return symbol >> 4;\n }\n else {\n var bits = input.availableBits;\n lookahead = input.peekBits(bits);\n symbol = this.m_Tree[subtree | (lookahead >> 9)];\n if ((symbol & 15) <= bits) {\n input.skipBits((symbol & 15));\n return symbol >> 4;\n }\n else {\n return -1;\n }\n }\n }\n else {\n var bits = input.availableBits;\n lookahead = input.peekBits(bits);\n symbol = this.m_Tree[lookahead];\n if (symbol >= 0 && (symbol & 15) <= bits) {\n input.skipBits((symbol & 15));\n return symbol >> 4;\n }\n else {\n return -1;\n }\n }\n };\n Object.defineProperty(DecompressorHuffmanTree, \"lengthTree\", {\n /// \n /// GET huffman tree for encoding and decoding lengths.\n /// \n get: function () {\n return this.m_LengthTree;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DecompressorHuffmanTree, \"distanceTree\", {\n /// \n /// GET huffman tree for encoding and decoding distances.\n /// \n get: function () {\n return this.m_DistanceTree;\n },\n enumerable: true,\n configurable: true\n });\n /// \n /// Maximum count of bits.\n /// \n DecompressorHuffmanTree.MAX_BITLEN = 15;\n return DecompressorHuffmanTree;\n}());\nexport { DecompressorHuffmanTree };\n/* eslint-enable */ \n","/* eslint-disable */\n/// \n/// Checksum calculator, based on Adler32 algorithm.\n/// \nvar ChecksumCalculator = /** @class */ (function () {\n function ChecksumCalculator() {\n }\n /// \n /// Updates checksum by calculating checksum of the\n /// given buffer and adding it to current value.\n /// \n /// Current checksum.\n /// Data byte array.\n /// Offset in the buffer.\n /// Length of data to be used from the stream.\n ChecksumCalculator.ChecksumUpdate = function (checksum, buffer, offset, length) {\n var checkSumUInt = checksum;\n var s1 = checkSumUInt & 65535;\n var s2 = checkSumUInt >> this.DEF_CHECKSUM_BIT_OFFSET;\n while (length > 0) {\n var steps = Math.min(length, this.DEF_CHECKSUM_ITERATIONSCOUNT);\n length -= steps;\n while (--steps >= 0) {\n s1 = s1 + (buffer[offset++] & 255);\n s2 = s2 + s1;\n }\n s1 %= this.DEF_CHECKSUM_BASE;\n s2 %= this.DEF_CHECKSUM_BASE;\n }\n checkSumUInt = (s2 << this.DEF_CHECKSUM_BIT_OFFSET) | s1;\n checksum = checkSumUInt;\n };\n /// \n /// Generates checksum by calculating checksum of the\n /// given buffer.\n /// \n /// Data byte array.\n /// Offset in the buffer.\n /// Length of data to be used from the stream.\n ChecksumCalculator.ChecksumGenerate = function (buffer, offset, length) {\n var result = 1;\n ChecksumCalculator.ChecksumUpdate(result, buffer, offset, length);\n return result;\n };\n /// \n /// Bits offset, used in adler checksum calculation.\n /// \n ChecksumCalculator.DEF_CHECKSUM_BIT_OFFSET = 16;\n /// \n /// Lagrest prime, less than 65535\n /// \n ChecksumCalculator.DEF_CHECKSUM_BASE = 65521;\n /// \n /// Count of iteration used in calculated of the adler checksumm.\n /// \n ChecksumCalculator.DEF_CHECKSUM_ITERATIONSCOUNT = 3800;\n return ChecksumCalculator;\n}());\nexport { ChecksumCalculator };\n/* eslint-enable */ \n","/* eslint-disable */\nimport { DecompressorHuffmanTree } from './decompressor-huffman-tree';\nimport { Utils } from './utils';\nimport { ChecksumCalculator } from './checksum-calculator';\nvar CompressedStreamReader = /** @class */ (function () {\n function CompressedStreamReader(stream, bNoWrap) {\n /// \n /// Code lengths for the code length alphabet.\n /// \n this.defaultHuffmanDynamicTree = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n /// \n /// Mask for compression method to be decoded from 16-bit header.\n /// \n this.DEF_HEADER_METHOD_MASK = 15 << 8;\n /// \n /// Mask for compression info to be decoded from 16-bit header.\n /// \n this.DEF_HEADER_INFO_MASK = 240 << 8;\n /// \n /// Mask for check bits to be decoded from 16-bit header.\n /// \n this.DEF_HEADER_FLAGS_FCHECK = 31;\n /// \n /// Mask for dictionary presence to be decoded from 16-bit header.\n /// \n this.DEF_HEADER_FLAGS_FDICT = 32;\n /// \n /// Mask for compression level to be decoded from 16-bit header.\n /// \n this.DEF_HEADER_FLAGS_FLEVEL = 192;\n /// \n /// Maximum size of the data window.\n /// \n this.DEF_MAX_WINDOW_SIZE = 65535;\n /// \n /// Maximum length of the repeatable block.\n /// \n this.DEF_HUFFMAN_REPEATE_MAX = 258;\n /// \n /// End of the block sign.\n /// \n this.DEF_HUFFMAN_END_BLOCK = 256;\n /// \n /// Minimal length code.\n /// \n this.DEF_HUFFMAN_LENGTH_MINIMUMCODE = 257;\n /// \n /// Maximal length code.\n /// \n this.DEF_HUFFMAN_LENGTH_MAXIMUMCODE = 285;\n /// \n /// Maximal distance code.\n /// \n this.DEF_HUFFMAN_DISTANCE_MAXIMUMCODE = 29;\n /// \n /// Currently calculated checksum,\n /// based on Adler32 algorithm.\n /// \n this.mCheckSum = 1;\n /// \n /// Currently read 4 bytes.\n /// \n this.tBuffer = 0;\n /// \n /// Count of bits that are in buffer.\n /// \n this.mBufferedBits = 0;\n /// \n /// Temporary buffer.\n /// \n this.mTempBuffer = new Uint8Array(4);\n /// \n /// 32k buffer for unpacked data.\n /// \n this.mBlockBuffer = new Uint8Array(this.DEF_MAX_WINDOW_SIZE);\n /// \n /// No wrap mode.\n /// \n this.mbNoWrap = false;\n /// \n /// Window size, can not be larger than 32k.\n /// \n this.mWindowSize = 0;\n /// \n /// Current position in output stream.\n /// Current in-block position can be extracted by applying Int16.MaxValue mask.\n /// \n this.mCurrentPosition = 0;\n /// \n /// Data length.\n /// Current in-block position can be extracted by applying Int16.MaxValue mask.\n /// \n this.mDataLength = 0;\n /// \n /// Specifies wheather next block can to be read.\n /// Reading can be denied because the header of the last block have been read.\n /// \n this.mbCanReadNextBlock = true;\n /// \n /// Specifies wheather user can read more data from stream.\n /// \n this.mbCanReadMoreData = true;\n /// \n /// Specifies wheather checksum has been read.\n /// \n this.mbCheckSumRead = false;\n if (stream == null) {\n throw new DOMException('stream');\n }\n if (stream.length === 0) {\n throw new DOMException('stream - string can not be empty');\n }\n DecompressorHuffmanTree.init();\n this.mInputStream = new Stream(stream);\n this.mbNoWrap = bNoWrap;\n if (!this.mbNoWrap) {\n this.readZLibHeader();\n }\n this.decodeBlockHeader();\n }\n Object.defineProperty(CompressedStreamReader.prototype, \"mBuffer\", {\n get: function () {\n return this.tBuffer;\n },\n set: function (value) {\n this.tBuffer = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Initializes compressor and writes ZLib header if needed.\n * @param {boolean} noWrap - optional if true, ZLib header and checksum will not be written.\n */\n /// \n /// Reads specified count of bits without adjusting position.\n /// \n /// Count of bits to be read.\n /// Read value.\n CompressedStreamReader.prototype.peekBits = function (count) {\n if (count < 0) {\n throw new DOMException('count', 'Bits count can not be less than zero.');\n }\n if (count > 32) {\n throw new DOMException('count', 'Count of bits is too large.');\n }\n // If buffered data is not enough to give result,\n // fill buffer.\n if (this.mBufferedBits < count) {\n this.fillBuffer();\n }\n // If you want to read 4 bytes and there is partial data in\n // buffer, than you will fail.\n if (this.mBufferedBits < count) {\n return -1;\n }\n // Create bitmask for reading of count bits\n var bitMask = ~(4294967295 << count);\n var result = Utils.bitConverterUintToInt32(this.mBuffer & bitMask);\n //Debug.WriteLine( /*new string( ' ', 32 - mBufferedBits + (int)( ( 32 - mBufferedBits ) / 8 ) ) + BitsToString( (int)mBuffer, mBufferedBits ) + \" \" + BitsToString( result, count ) +*/ \" \" + result.ToString() );\n return result;\n };\n CompressedStreamReader.prototype.fillBuffer = function () {\n var length = 4 - (this.mBufferedBits >> 3) -\n (((this.mBufferedBits & 7) !== 0) ? 1 : 0);\n if (length === 0) {\n return;\n }\n //TODO: fix this\n var bytesRead = this.mInputStream.read(this.mTempBuffer, 0, length);\n for (var i = 0; i < bytesRead; i++) {\n this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer |\n (Utils.bitConverterInt32ToUint(this.mTempBuffer[i] << this.mBufferedBits)));\n this.mBufferedBits += 8;\n }\n //TODO: fix this\n };\n /// \n /// Skips specified count of bits.\n /// \n /// Count of bits to be skipped.\n CompressedStreamReader.prototype.skipBits = function (count) {\n if (count < 0) {\n throw new DOMException('count', 'Bits count can not be less than zero.');\n }\n if (count === 0) {\n return;\n }\n if (count >= this.mBufferedBits) {\n count -= this.mBufferedBits;\n this.mBufferedBits = 0;\n this.mBuffer = 0;\n // if something left, skip it.\n if (count > 0) {\n // Skip entire bytes.\n this.mInputStream.position += (count >> 3); //TODO: fix this\n count &= 7;\n // Skip bits.\n if (count > 0) {\n this.fillBuffer();\n this.mBufferedBits -= count;\n this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer >>> count);\n }\n }\n }\n else {\n this.mBufferedBits -= count;\n this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer >>> count);\n }\n };\n Object.defineProperty(CompressedStreamReader.prototype, \"availableBits\", {\n get: function () {\n return this.mBufferedBits;\n },\n enumerable: true,\n configurable: true\n });\n /// \n /// Reads ZLib header with compression method and flags.\n /// \n CompressedStreamReader.prototype.readZLibHeader = function () {\n // first 8 bits - compression Method and flags\n // 8 other - flags\n var header = this.readInt16();\n //Debug.WriteLine( BitsToString( header ) );\n if (header === -1) {\n throw new DOMException('Header of the stream can not be read.');\n }\n if (header % 31 !== 0) {\n throw new DOMException('Header checksum illegal');\n }\n if ((header & this.DEF_HEADER_METHOD_MASK) !== (8 << 8)) {\n throw new DOMException('Unsupported compression method.');\n }\n this.mWindowSize = Math.pow(2, ((header & this.DEF_HEADER_INFO_MASK) >> 12) + 8);\n if (this.mWindowSize > 65535) {\n throw new DOMException('Unsupported window size for deflate compression method.');\n }\n if ((header & this.DEF_HEADER_FLAGS_FDICT) >> 5 === 1) {\n // Get dictionary.\n throw new DOMException('Custom dictionary is not supported at the moment.');\n }\n };\n /// \n /// TODO: place correct comment here\n /// \n /// \n /// TODO: place correct comment here\n /// \n CompressedStreamReader.prototype.readInt16 = function () {\n var result = (this.readBits(8) << 8);\n result |= this.readBits(8);\n return result;\n };\n /// \n /// Reads specified count of bits from stream.\n /// \n /// Count of bits to be read.\n /// \n /// TODO: place correct comment here\n /// \n CompressedStreamReader.prototype.readBits = function (count) {\n var result = this.peekBits(count);\n if (result === -1) {\n return -1;\n }\n this.mBufferedBits -= count;\n this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer >>> count);\n return result;\n };\n /// \n /// Reads and decodes block of data.\n /// \n /// True if buffer was empty and new data was read, otherwise - False.\n CompressedStreamReader.prototype.decodeBlockHeader = function () {\n if (!this.mbCanReadNextBlock) {\n return false;\n }\n var bFinalBlock = this.readBits(1);\n if (bFinalBlock === -1) {\n return false;\n }\n var blockType = this.readBits(2);\n if (blockType === -1) {\n return false;\n }\n this.mbCanReadNextBlock = (bFinalBlock === 0);\n // ChecksumReset();\n switch (blockType) {\n case 0:\n // Uncompressed data\n this.mbReadingUncompressed = true;\n this.skipToBoundary();\n var length_1 = this.readInt16Inverted();\n var lengthComplement = this.readInt16Inverted();\n if (length_1 !== (lengthComplement ^ 0xffff)) {\n throw new DOMException('Wrong block length.');\n }\n if (length_1 > 65535) {\n throw new DOMException('Uncompressed block length can not be more than 65535.');\n }\n this.mUncompressedDataLength = length_1;\n this.mCurrentLengthTree = null;\n this.mCurrentDistanceTree = null;\n break;\n case 1:\n // Compressed data with fixed huffman codes.\n this.mbReadingUncompressed = false;\n this.mUncompressedDataLength = -1;\n this.mCurrentLengthTree = DecompressorHuffmanTree.lengthTree;\n this.mCurrentDistanceTree = DecompressorHuffmanTree.distanceTree;\n break;\n case 2:\n // Compressed data with dynamic huffman codes.\n this.mbReadingUncompressed = false;\n this.mUncompressedDataLength = -1;\n var trees = this.decodeDynamicHeader(this.mCurrentLengthTree, this.mCurrentDistanceTree);\n this.mCurrentLengthTree = trees.lengthTree;\n this.mCurrentDistanceTree = trees.distanceTree;\n break;\n default:\n throw new DOMException('Wrong block type.');\n }\n return true;\n };\n /// \n /// Discards left-most partially used byte.\n /// \n CompressedStreamReader.prototype.skipToBoundary = function () {\n this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer >>> (this.mBufferedBits & 7));\n this.mBufferedBits &= ~7;\n };\n /// \n /// TODO: place correct comment here\n /// \n /// \n /// TODO: place correct comment here\n /// \n CompressedStreamReader.prototype.readInt16Inverted = function () {\n var result = (this.readBits(8));\n result |= this.readBits(8) << 8;\n return result;\n };\n /// \n /// Reades dynamic huffman codes from block header.\n /// \n /// Literals/Lengths tree.\n /// Distances tree.\n CompressedStreamReader.prototype.decodeDynamicHeader = function (lengthTree, distanceTree) {\n var bLastSymbol = 0;\n var iLengthsCount = this.readBits(5);\n var iDistancesCount = this.readBits(5);\n var iCodeLengthsCount = this.readBits(4);\n if (iLengthsCount < 0 || iDistancesCount < 0 || iCodeLengthsCount < 0) {\n throw new DOMException('Wrong dynamic huffman codes.');\n }\n iLengthsCount += 257;\n iDistancesCount += 1;\n var iResultingCodeLengthsCount = iLengthsCount + iDistancesCount;\n var arrResultingCodeLengths = new Uint8Array(iResultingCodeLengthsCount);\n var arrDecoderCodeLengths = new Uint8Array(19);\n iCodeLengthsCount += 4;\n var iCurrentCode = 0;\n while (iCurrentCode < iCodeLengthsCount) {\n var len = this.readBits(3);\n if (len < 0) {\n throw new DOMException('Wrong dynamic huffman codes.');\n }\n arrDecoderCodeLengths[this.defaultHuffmanDynamicTree[iCurrentCode++]] = len;\n }\n var treeInternalDecoder = new DecompressorHuffmanTree(arrDecoderCodeLengths);\n iCurrentCode = 0;\n for (;;) {\n var symbol = void 0;\n var bNeedBreak = false;\n symbol = treeInternalDecoder.unpackSymbol(this);\n while ((symbol & ~15) === 0) {\n arrResultingCodeLengths[iCurrentCode++] = bLastSymbol = symbol;\n if (iCurrentCode === iResultingCodeLengthsCount) {\n bNeedBreak = true;\n break;\n }\n symbol = treeInternalDecoder.unpackSymbol(this);\n }\n if (bNeedBreak) {\n break;\n }\n if (symbol < 0) {\n throw new DOMException('Wrong dynamic huffman codes.');\n }\n if (symbol >= 17) {\n bLastSymbol = 0;\n }\n else if (iCurrentCode === 0) {\n throw new DOMException('Wrong dynamic huffman codes.');\n }\n var miRepSymbol = symbol - 16;\n var bits = CompressedStreamReader.DEF_HUFFMAN_DYNTREE_REPEAT_BITS[miRepSymbol];\n var count = this.readBits(bits);\n if (count < 0) {\n throw new DOMException('Wrong dynamic huffman codes.');\n }\n count += CompressedStreamReader.DEF_HUFFMAN_DYNTREE_REPEAT_MINIMUMS[miRepSymbol];\n if (iCurrentCode + count > iResultingCodeLengthsCount) {\n throw new DOMException('Wrong dynamic huffman codes.');\n }\n while (count-- > 0) {\n arrResultingCodeLengths[iCurrentCode++] = bLastSymbol;\n }\n if (iCurrentCode === iResultingCodeLengthsCount) {\n break;\n }\n }\n var tempArray = new Uint8Array(iLengthsCount);\n tempArray.set(arrResultingCodeLengths.subarray(0, iLengthsCount), 0);\n //sourceArray, sourceIndex, destinationArray, destinationIndex, length\n //Array.copy( arrResultingCodeLengths, 0, tempArray, 0, iLengthsCount );\n lengthTree = new DecompressorHuffmanTree(tempArray);\n tempArray = arrResultingCodeLengths.slice(iLengthsCount, iLengthsCount + iDistancesCount);\n //Array.copy( arrResultingCodeLengths, iLengthsCount, tempArray, 0, iDistancesCount );\n distanceTree = new DecompressorHuffmanTree(tempArray);\n return { 'lengthTree': lengthTree, 'distanceTree': distanceTree };\n };\n /// \n /// Decodes huffman codes.\n /// \n /// True if some data was read.\n CompressedStreamReader.prototype.readHuffman = function () {\n var free = this.DEF_MAX_WINDOW_SIZE - (this.mDataLength - this.mCurrentPosition);\n var dataRead = false;\n //long maxdistance = DEF_MAX_WINDOW_SIZE >> 1;\n var readdata = {};\n // DEF_HUFFMAN_REPEATE_MAX - longest repeatable block, we should always reserve space for it because\n // if we should not, we will have buffer overrun.\n while (free >= this.DEF_HUFFMAN_REPEATE_MAX) {\n var symbol = void 0;\n symbol = this.mCurrentLengthTree.unpackSymbol(this);\n // Only codes 0..255 are valid independent symbols.\n while (((symbol) & ~0xff) === 0) {\n readdata[(this.mDataLength + 1) % this.DEF_MAX_WINDOW_SIZE] = symbol;\n this.mBlockBuffer[this.mDataLength++ % this.DEF_MAX_WINDOW_SIZE] = symbol;\n dataRead = true;\n if (--free < this.DEF_HUFFMAN_REPEATE_MAX) {\n return true;\n }\n //if( (mDataLength - mCurrentPosition ) < maxdistance ) return true;\n symbol = this.mCurrentLengthTree.unpackSymbol(this);\n }\n if (symbol < this.DEF_HUFFMAN_LENGTH_MINIMUMCODE) {\n if (symbol < this.DEF_HUFFMAN_END_BLOCK) {\n throw new DOMException('Illegal code.');\n }\n var numDataRead = dataRead ? 1 : 0;\n this.mbCanReadMoreData = this.decodeBlockHeader();\n var numReadMore = (this.mbCanReadMoreData) ? 1 : 0;\n return (numDataRead | numReadMore) ? true : false;\n }\n if (symbol > this.DEF_HUFFMAN_LENGTH_MAXIMUMCODE) {\n throw new DOMException('Illegal repeat code length.');\n }\n var iRepeatLength = CompressedStreamReader.DEF_HUFFMAN_REPEAT_LENGTH_BASE[symbol -\n this.DEF_HUFFMAN_LENGTH_MINIMUMCODE];\n var iRepeatExtraBits = CompressedStreamReader.DEF_HUFFMAN_REPEAT_LENGTH_EXTENSION[symbol -\n this.DEF_HUFFMAN_LENGTH_MINIMUMCODE];\n if (iRepeatExtraBits > 0) {\n var extra = this.readBits(iRepeatExtraBits);\n if (extra < 0) {\n throw new DOMException('Wrong data.');\n }\n iRepeatLength += extra;\n }\n // Unpack repeat distance.\n symbol = this.mCurrentDistanceTree.unpackSymbol(this);\n if (symbol < 0 || symbol > CompressedStreamReader.DEF_HUFFMAN_REPEAT_DISTANCE_BASE.length) {\n throw new DOMException('Wrong distance code.');\n }\n var iRepeatDistance = CompressedStreamReader.DEF_HUFFMAN_REPEAT_DISTANCE_BASE[symbol];\n iRepeatExtraBits = CompressedStreamReader.DEF_HUFFMAN_REPEAT_DISTANCE_EXTENSION[symbol];\n if (iRepeatExtraBits > 0) {\n var extra = this.readBits(iRepeatExtraBits);\n if (extra < 0) {\n throw new DOMException('Wrong data.');\n }\n iRepeatDistance += extra;\n }\n // Copy data in slow repeat mode\n for (var i = 0; i < iRepeatLength; i++) {\n this.mBlockBuffer[this.mDataLength % this.DEF_MAX_WINDOW_SIZE] =\n this.mBlockBuffer[(this.mDataLength - iRepeatDistance) % this.DEF_MAX_WINDOW_SIZE];\n this.mDataLength++;\n free--;\n }\n dataRead = true;\n }\n return dataRead;\n };\n /// \n /// Reads data to buffer.\n /// \n /// Output buffer for data.\n /// Offset in output data.\n /// Length of the data to be read.\n /// Count of bytes actually read.\n CompressedStreamReader.prototype.read = function (buffer, offset, length) {\n if (buffer == null) {\n throw new DOMException('buffer');\n }\n if (offset < 0 || offset > buffer.length - 1) {\n throw new DOMException('offset', 'Offset does not belong to specified buffer.');\n }\n if (length < 0 || length > buffer.length - offset) {\n throw new DOMException('length', 'Length is illegal.');\n }\n var initialLength = length;\n while (length > 0) {\n // Read from internal buffer.\n if (this.mCurrentPosition < this.mDataLength) {\n // Position in buffer array.\n var inBlockPosition = (this.mCurrentPosition % this.DEF_MAX_WINDOW_SIZE);\n // We can not read more than we have in buffer at once,\n // and we not read more than till the array end.\n var dataToCopy = Math.min(this.DEF_MAX_WINDOW_SIZE - inBlockPosition, (this.mDataLength - this.mCurrentPosition));\n // Reading not more, than the rest of the buffer.\n dataToCopy = Math.min(dataToCopy, length);\n //sourceArray, sourceIndex, destinationArray, destinationIndex, length\n // Copy data.\n //Array.Copy( mBlockBuffer, inBlockPosition, buffer, offset, dataToCopy );\n //buffer.set(this.mBlockBuffer.slice(inBlockPosition, dataToCopy), offset);\n Utils.arrayCopy(this.mBlockBuffer, inBlockPosition, buffer, offset, dataToCopy);\n // Correct position, length,\n this.mCurrentPosition += dataToCopy;\n offset += dataToCopy;\n length -= dataToCopy;\n }\n else {\n if (!this.mbCanReadMoreData) {\n break;\n }\n var oldDataLength = this.mDataLength;\n if (!this.mbReadingUncompressed) {\n if (!this.readHuffman()) {\n break;\n }\n }\n else {\n if (this.mUncompressedDataLength === 0) {\n // If there is no more data in stream, just exit.\n this.mbCanReadMoreData = this.decodeBlockHeader();\n if (!(this.mbCanReadMoreData)) {\n break;\n }\n }\n else {\n // Position of the data end in block buffer.\n var inBlockPosition = (this.mDataLength % this.DEF_MAX_WINDOW_SIZE);\n var dataToRead = Math.min(this.mUncompressedDataLength, this.DEF_MAX_WINDOW_SIZE - inBlockPosition);\n var dataRead = this.readPackedBytes(this.mBlockBuffer, inBlockPosition, dataToRead);\n if (dataToRead !== dataRead) {\n throw new DOMException('Not enough data in stream.');\n }\n this.mUncompressedDataLength -= dataRead;\n this.mDataLength += dataRead;\n }\n }\n if (oldDataLength < this.mDataLength) {\n var start = (oldDataLength % this.DEF_MAX_WINDOW_SIZE);\n var end = (this.mDataLength % this.DEF_MAX_WINDOW_SIZE);\n if (start < end) {\n this.checksumUpdate(this.mBlockBuffer, start, end - start);\n }\n else {\n this.checksumUpdate(this.mBlockBuffer, start, this.DEF_MAX_WINDOW_SIZE - start);\n if (end > 0) {\n this.checksumUpdate(this.mBlockBuffer, 0, end);\n }\n }\n }\n }\n }\n if (!this.mbCanReadMoreData && !this.mbCheckSumRead && !this.mbNoWrap) {\n this.skipToBoundary();\n var checkSum = this.readInt32();\n //Debug.Assert( checkSum == mCheckSum, \"\" );\n if (checkSum !== this.mCheckSum) {\n throw new DOMException('Checksum check failed.');\n }\n this.mbCheckSumRead = true;\n }\n return initialLength - length;\n };\n /// \n /// Reads array of bytes.\n /// \n /// Output buffer.\n /// Offset in output buffer.\n /// Length of the data to be read.\n /// Count of bytes actually read to the buffer.\n CompressedStreamReader.prototype.readPackedBytes = function (buffer, offset, length) {\n if (buffer == null) {\n throw new DOMException('buffer');\n }\n if (offset < 0 || offset > buffer.length - 1) {\n throw new DOMException('offset\", \"Offset can not be less than zero or greater than buffer length - 1.');\n }\n if (length < 0) {\n throw new DOMException('length\", \"Length can not be less than zero.');\n }\n if (length > buffer.length - offset) {\n throw new DOMException('length\", \"Length is too large.');\n }\n if ((this.mBufferedBits & 7) !== 0) {\n throw new DOMException('Reading of unalligned data is not supported.');\n }\n if (length === 0) {\n return 0;\n }\n var result = 0;\n while (this.mBufferedBits > 0 && length > 0) {\n buffer[offset++] = (this.mBuffer);\n this.mBufferedBits -= 8;\n this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer >>> 8);\n length--;\n result++;\n }\n if (length > 0) {\n //TODO: Fix this.\n result += this.mInputStream.read(buffer, offset, length);\n }\n return result;\n };\n /// \n /// TODO: place correct comment here\n /// \n /// \n /// TODO: place correct comment here\n /// \n CompressedStreamReader.prototype.readInt32 = function () {\n var result = this.readBits(8) << 24;\n result |= this.readBits(8) << 16;\n result |= this.readBits(8) << 8;\n result |= this.readBits(8);\n return result;\n };\n /// \n /// Updates checksum by calculating checksum of the\n /// given buffer and adding it to current value.\n /// \n /// Data byte array.\n /// Offset in the buffer.\n /// Length of data to be used from the stream.\n CompressedStreamReader.prototype.checksumUpdate = function (buffer, offset, length) {\n ChecksumCalculator.ChecksumUpdate(this.mCheckSum, buffer, offset, length);\n };\n CompressedStreamReader.DEF_REVERSE_BITS = new Uint8Array([0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15]);\n /// \n /// Minimum count of repetions.\n /// \n CompressedStreamReader.DEF_HUFFMAN_DYNTREE_REPEAT_MINIMUMS = [3, 3, 11];\n /// \n /// Bits, that responds for different repetion modes.\n /// \n CompressedStreamReader.DEF_HUFFMAN_DYNTREE_REPEAT_BITS = [2, 3, 7];\n /// \n /// Length bases.\n /// \n CompressedStreamReader.DEF_HUFFMAN_REPEAT_LENGTH_BASE = [\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258\n ];\n /// \n /// Length extended bits count.\n /// \n CompressedStreamReader.DEF_HUFFMAN_REPEAT_LENGTH_EXTENSION = [\n 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,\n 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0\n ];\n /// \n /// Distance bases.\n /// \n CompressedStreamReader.DEF_HUFFMAN_REPEAT_DISTANCE_BASE = [\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577\n ];\n /// \n /// Distance extanded bits count.\n /// \n CompressedStreamReader.DEF_HUFFMAN_REPEAT_DISTANCE_EXTENSION = [\n 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,\n 7, 7, 8, 8, 9, 9, 10, 10, 11, 11,\n 12, 12, 13, 13\n ];\n return CompressedStreamReader;\n}());\nexport { CompressedStreamReader };\nvar Stream = /** @class */ (function () {\n function Stream(input) {\n this.position = 0;\n this.inputStream = new Uint8Array(input.buffer);\n }\n Object.defineProperty(Stream.prototype, \"length\", {\n get: function () {\n return this.inputStream.buffer.byteLength;\n },\n enumerable: true,\n configurable: true\n });\n Stream.prototype.read = function (buffer, start, length) {\n var temp = new Uint8Array(this.inputStream.buffer, this.position + start);\n var data = temp.subarray(0, length);\n buffer.set(data, 0);\n this.position += data.byteLength;\n return data.byteLength;\n };\n Stream.prototype.readByte = function () {\n return this.inputStream[this.position++];\n };\n Stream.prototype.write = function (inputBuffer, offset, count) {\n Utils.arrayCopy(inputBuffer, 0, this.inputStream, this.position + offset, count);\n // this.inputStream = new Uint8Array(this.inputStream.buffer, this.position + offset);\n // this.inputStream.set(inputBuffer, offset);\n this.position += count;\n };\n Stream.prototype.toByteArray = function () {\n return new Uint8Array(this.inputStream.buffer);\n };\n return Stream;\n}());\nexport { Stream };\n/* eslint-enable */ \n","/* eslint-disable */\nimport { CompressedStreamWriter, Stream, CompressedStreamReader } from './index';\nimport { Save } from '@syncfusion/ej2-file-utils';\nimport { Utils } from './utils';\nvar CRC32TABLE = [];\n/// \n/// Size of the int value in bytes.\n/// \nvar INT_SIZE = 4;\n/// \n/// Size of the short value in bytes.\n/// \nvar SHORT_SIZE = 2;\n/// \n/// End of central directory signature.\n/// \nvar CentralDirectoryEndSignature = 0x06054b50;\n/// \n/// Offset to the size field in the End of central directory record.\n/// \nvar CentralDirSizeOffset = 12;\n/// \n/// Central header signature.\n/// \nvar CentralHeaderSignature = 0x02014b50;\n/// \n/// Buffer size.\n/// \nvar BufferSize = 4096;\n/**\n * class provide compression library\n * ```typescript\n * let archive = new ZipArchive();\n * archive.compressionLevel = 'Normal';\n * let archiveItem = new ZipArchiveItem(archive, 'directoryName\\fileName.txt');\n * archive.addItem(archiveItem);\n * archive.save(fileName.zip);\n * ```\n */\nvar ZipArchive = /** @class */ (function () {\n /**\n * constructor for creating ZipArchive instance\n */\n function ZipArchive() {\n if (CRC32TABLE.length === 0) {\n ZipArchive.initCrc32Table();\n }\n this.files = [];\n this.level = 'Normal';\n Save.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n }\n Object.defineProperty(ZipArchive.prototype, \"items\", {\n get: function () {\n return this.files;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ZipArchive.prototype, \"compressionLevel\", {\n /**\n * gets compression level\n */\n get: function () {\n return this.level;\n },\n /**\n * sets compression level\n */\n set: function (level) {\n this.level = level;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ZipArchive.prototype, \"length\", {\n /**\n * gets items count\n */\n get: function () {\n if (this.files === undefined) {\n return 0;\n }\n return this.files.length;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * add new item to archive\n * @param {ZipArchiveItem} item - item to be added\n * @returns {void}\n */\n ZipArchive.prototype.addItem = function (item) {\n if (item === null || item === undefined) {\n throw new Error('ArgumentException: item cannot be null or undefined');\n }\n for (var i = 0; i < this.files.length; i++) {\n var file = this.files[i];\n if (file instanceof ZipArchiveItem) {\n if (file.name === item.name) {\n throw new Error('item with same name already exist');\n }\n }\n }\n this.files.push(item);\n };\n /**\n * add new directory to archive\n * @param directoryName directoryName to be created\n * @returns {void}\n */\n ZipArchive.prototype.addDirectory = function (directoryName) {\n if (directoryName === null || directoryName === undefined) {\n throw new Error('ArgumentException: string cannot be null or undefined');\n }\n if (directoryName.length === 0) {\n throw new Error('ArgumentException: string cannot be empty');\n }\n if (directoryName.slice(-1) !== '/') {\n directoryName += '/';\n }\n if (this.files.indexOf(directoryName) !== -1) {\n throw new Error('item with same name already exist');\n }\n this.files.push(directoryName);\n };\n /**\n * gets item at specified index\n * @param {number} index - item index\n * @returns {ZipArchiveItem}\n */\n ZipArchive.prototype.getItem = function (index) {\n if (index >= 0 && index < this.files.length) {\n return this.files[index];\n }\n return undefined;\n };\n /**\n * determines whether an element is in the collection\n * @param {string | ZipArchiveItem} item - item to search\n * @returns {boolean}\n */\n ZipArchive.prototype.contains = function (item) {\n return this.files.indexOf(item) !== -1 ? true : false;\n };\n ZipArchive.prototype.open = function (base64String) {\n //return promise = new Promise((resolve: Function, reject: Function) => {\n var zipArchive = this;\n var zipByteArray = Utils.encodedString(base64String);\n if (zipByteArray.length == 0)\n throw new DOMException(\"stream\");\n var stream = new Stream(zipByteArray);\n //let lCentralDirEndPosition = this.findValueFromEnd( arrBuffer, Constants.CentralDirectoryEndSignature, 65557 );\n var lCentralDirEndPosition = ZipArchive.findValueFromEnd(stream, CentralDirectoryEndSignature, 65557);\n if (lCentralDirEndPosition < 0)\n throw new DOMException(\"Can't locate end of central directory record. Possible wrong file format or archive is corrupt.\");\n // Step2. Locate central directory and iterate through all items\n stream.position = lCentralDirEndPosition + CentralDirSizeOffset;\n var iCentralDirSize = ZipArchive.ReadInt32(stream);\n var lCentralDirPosition = lCentralDirEndPosition - iCentralDirSize;\n // verify that this is really central directory\n stream.position = lCentralDirPosition;\n this.readCentralDirectoryDataAndExtractItems(stream);\n //});\n // let zipArchive: ZipArchive = this;\n //let promise: Promise;\n // return promise = new Promise((resolve: Function, reject: Function) => {\n // let reader: FileReader = new FileReader();\n // reader.onload = (e: Event) => {\n // let data: Uint8Array = new Uint8Array((e.target as any).result);\n // let zipReader: ZipReader = new ZipReader(data);\n // zipReader.readEntries().then((entries: ZipEntry[]) => {\n // for (let i: number = 0; i < entries.length; i++) {\n // let entry: ZipEntry = entries[i];\n // let item: ZipArchiveItem = new ZipArchiveItem(zipArchive, entry.fileName);\n // item.data = entry.data;\n // item.compressionMethod = entry.compressionMethod;\n // item.crc = entry.crc;\n // item.lastModified = entry.lastModified;\n // item.lastModifiedDate = entry.lastModifiedDate;\n // item.size = entry.size;\n // item.uncompressedSize = entry.uncompressedSize;\n // zipArchive.addItem(item);\n // }\n // resolve(zipArchive);\n // });\n // };\n // reader.readAsArrayBuffer(fileName);\n // });\n };\n /// \n /// Read central directory record from the stream.\n /// \n /// Stream to read from.\n ZipArchive.prototype.readCentralDirectoryDataAndExtractItems = function (stream) {\n if (stream == null)\n throw new DOMException(\"stream\");\n var itemHelper;\n while (ZipArchive.ReadInt32(stream) == CentralHeaderSignature) {\n itemHelper = new ZipArchiveItemHelper();\n itemHelper.readCentralDirectoryData(stream);\n itemHelper;\n // let item: ZipArchiveItem = new ZipArchiveItem(this);\n // item.ReadCentralDirectoryData(stream);\n // m_arrItems.Add(item);\n }\n itemHelper.readData(stream, itemHelper.checkCrc);\n itemHelper.decompressData();\n this.files.push(new ZipArchiveItem(itemHelper.unCompressedStream.buffer, itemHelper.name));\n };\n /**\n * save archive with specified file name\n * @param {string} fileName save archive with specified file name\n * @returns {Promise}\n */\n ZipArchive.prototype.save = function (fileName) {\n if (fileName === null || fileName === undefined || fileName.length === 0) {\n throw new Error('ArgumentException: fileName cannot be null or undefined');\n }\n if (this.files.length === 0) {\n throw new Error('InvalidOperation');\n }\n var zipArchive = this;\n var promise;\n return promise = new Promise(function (resolve, reject) {\n zipArchive.saveInternal(fileName, false).then(function () {\n resolve(zipArchive);\n });\n });\n };\n /**\n * Save archive as blob\n * @return {Promise}\n */\n ZipArchive.prototype.saveAsBlob = function () {\n var zipArchive = this;\n var promise;\n return promise = new Promise(function (resolve, reject) {\n zipArchive.saveInternal('', true).then(function (blob) {\n resolve(blob);\n });\n });\n };\n ZipArchive.prototype.saveInternal = function (fileName, skipFileSave) {\n var _this = this;\n var zipArchive = this;\n var promise;\n return promise = new Promise(function (resolve, reject) {\n var zipData = [];\n var dirLength = 0;\n for (var i = 0; i < zipArchive.files.length; i++) {\n var compressedObject = _this.getCompressedData(_this.files[i]);\n compressedObject.then(function (data) {\n dirLength = zipArchive.constructZippedObject(zipData, data, dirLength, data.isDirectory);\n if (zipData.length === zipArchive.files.length) {\n var blob = zipArchive.writeZippedContent(fileName, zipData, dirLength, skipFileSave);\n resolve(blob);\n }\n });\n }\n });\n };\n /**\n * release allocated un-managed resource\n * @returns {void}\n */\n ZipArchive.prototype.destroy = function () {\n if (this.files !== undefined && this.files.length > 0) {\n for (var i = 0; i < this.files.length; i++) {\n var file = this.files[i];\n if (file instanceof ZipArchiveItem) {\n file.destroy();\n }\n file = undefined;\n }\n this.files = [];\n }\n this.files = undefined;\n this.level = undefined;\n };\n ZipArchive.prototype.getCompressedData = function (item) {\n var zipArchive = this;\n var promise = new Promise(function (resolve, reject) {\n if (item instanceof ZipArchiveItem) {\n var reader_1 = new FileReader();\n reader_1.onload = function () {\n var input = new Uint8Array(reader_1.result);\n var data = {\n fileName: item.name, crc32Value: 0, compressedData: [],\n compressedSize: undefined, uncompressedDataSize: input.length, compressionType: undefined,\n isDirectory: false\n };\n if (zipArchive.level === 'Normal') {\n zipArchive.compressData(input, data, CRC32TABLE);\n var length_1 = 0;\n for (var i = 0; i < data.compressedData.length; i++) {\n length_1 += data.compressedData[i].length;\n }\n data.compressedSize = length_1;\n data.compressionType = '\\x08\\x00'; //Deflated = 8\n }\n else {\n data.compressedSize = input.length;\n data.crc32Value = zipArchive.calculateCrc32Value(0, input, CRC32TABLE);\n data.compressionType = '\\x00\\x00'; // Stored = 0\n data.compressedData.push(input);\n }\n resolve(data);\n };\n reader_1.readAsArrayBuffer(item.data);\n }\n else {\n var data = {\n fileName: item, crc32Value: 0, compressedData: '', compressedSize: 0, uncompressedDataSize: 0,\n compressionType: '\\x00\\x00', isDirectory: true\n };\n resolve(data);\n }\n });\n return promise;\n };\n ZipArchive.prototype.compressData = function (input, data, crc32Table) {\n var compressor = new CompressedStreamWriter(true);\n var currentIndex = 0;\n var nextIndex = 0;\n do {\n if (currentIndex >= input.length) {\n compressor.close();\n break;\n }\n nextIndex = Math.min(input.length, currentIndex + 16384);\n var subArray = input.subarray(currentIndex, nextIndex);\n data.crc32Value = this.calculateCrc32Value(data.crc32Value, subArray, crc32Table);\n compressor.write(subArray, 0, nextIndex - currentIndex);\n currentIndex = nextIndex;\n } while (currentIndex <= input.length);\n data.compressedData = compressor.compressedData;\n compressor.destroy();\n };\n ZipArchive.prototype.constructZippedObject = function (zipParts, data, dirLength, isDirectory) {\n var extFileAttr = 0;\n var date = new Date();\n if (isDirectory) {\n extFileAttr = extFileAttr | 0x00010; // directory flag\n }\n extFileAttr = extFileAttr | (0 & 0x3F);\n var header = this.writeHeader(data, date);\n var localHeader = 'PK\\x03\\x04' + header + data.fileName;\n var centralDir = this.writeCentralDirectory(data, header, dirLength, extFileAttr);\n zipParts.push({ localHeader: localHeader, centralDir: centralDir, compressedData: data });\n return dirLength + localHeader.length + data.compressedSize;\n };\n ZipArchive.prototype.writeHeader = function (data, date) {\n var zipHeader = '';\n zipHeader += '\\x0A\\x00' + '\\x00\\x00'; // version needed to extract & general purpose bit flag\n zipHeader += data.compressionType; // compression method Deflate=8,Stored=0\n zipHeader += this.getBytes(this.getModifiedTime(date), 2); // last modified Time\n zipHeader += this.getBytes(this.getModifiedDate(date), 2); // last modified date\n zipHeader += this.getBytes(data.crc32Value, 4); // crc-32 value\n zipHeader += this.getBytes(data.compressedSize, 4); // compressed file size\n zipHeader += this.getBytes(data.uncompressedDataSize, 4); // uncompressed file size\n zipHeader += this.getBytes(data.fileName.length, 2); // file name length\n zipHeader += this.getBytes(0, 2); // extra field length\n return zipHeader;\n };\n ZipArchive.prototype.writeZippedContent = function (fileName, zipData, localDirLen, skipFileSave) {\n var cenDirLen = 0;\n var buffer = [];\n for (var i = 0; i < zipData.length; i++) {\n var item = zipData[i];\n cenDirLen += item.centralDir.length;\n buffer.push(this.getArrayBuffer(item.localHeader));\n while (item.compressedData.compressedData.length) {\n buffer.push(item.compressedData.compressedData.shift().buffer);\n }\n }\n for (var i = 0; i < zipData.length; i++) {\n buffer.push(this.getArrayBuffer(zipData[i].centralDir));\n }\n buffer.push(this.getArrayBuffer(this.writeFooter(zipData, cenDirLen, localDirLen)));\n var blob = new Blob(buffer, { type: 'application/zip' });\n if (!skipFileSave) {\n Save.save(fileName, blob);\n }\n return blob;\n };\n ZipArchive.prototype.writeCentralDirectory = function (data, localHeader, offset, externalFileAttribute) {\n var directoryHeader = 'PK\\x01\\x02' +\n this.getBytes(0x0014, 2) + localHeader + // inherit from file header\n this.getBytes(0, 2) + // comment length\n '\\x00\\x00' + '\\x00\\x00' + // internal file attributes \n this.getBytes(externalFileAttribute, 4) + // external file attributes\n this.getBytes(offset, 4) + // local fileHeader relative offset\n data.fileName;\n return directoryHeader;\n };\n ZipArchive.prototype.writeFooter = function (zipData, centralLength, localLength) {\n var dirEnd = 'PK\\x05\\x06' + '\\x00\\x00' + '\\x00\\x00' +\n this.getBytes(zipData.length, 2) + this.getBytes(zipData.length, 2) +\n this.getBytes(centralLength, 4) + this.getBytes(localLength, 4) +\n this.getBytes(0, 2);\n return dirEnd;\n };\n ZipArchive.prototype.getArrayBuffer = function (input) {\n var a = new Uint8Array(input.length);\n for (var j = 0; j < input.length; ++j) {\n a[j] = input.charCodeAt(j) & 0xFF;\n }\n return a.buffer;\n };\n ZipArchive.prototype.getBytes = function (value, offset) {\n var bytes = '';\n for (var i = 0; i < offset; i++) {\n bytes += String.fromCharCode(value & 0xff);\n value = value >>> 8;\n }\n return bytes;\n };\n ZipArchive.prototype.getModifiedTime = function (date) {\n var modTime = date.getHours();\n modTime = modTime << 6;\n modTime = modTime | date.getMinutes();\n modTime = modTime << 5;\n return modTime = modTime | date.getSeconds() / 2;\n };\n ZipArchive.prototype.getModifiedDate = function (date) {\n var modiDate = date.getFullYear() - 1980;\n modiDate = modiDate << 4;\n modiDate = modiDate | (date.getMonth() + 1);\n modiDate = modiDate << 5;\n return modiDate = modiDate | date.getDate();\n };\n ZipArchive.prototype.calculateCrc32Value = function (crc32Value, input, crc32Table) {\n crc32Value ^= -1;\n for (var i = 0; i < input.length; i++) {\n crc32Value = (crc32Value >>> 8) ^ crc32Table[(crc32Value ^ input[i]) & 0xFF];\n }\n return (crc32Value ^ (-1));\n };\n /**\n * construct cyclic redundancy code table\n * @private\n */\n ZipArchive.initCrc32Table = function () {\n var i;\n for (var j = 0; j < 256; j++) {\n i = j;\n for (var k = 0; k < 8; k++) {\n i = ((i & 1) ? (0xEDB88320 ^ (i >>> 1)) : (i >>> 1));\n }\n CRC32TABLE[j] = i;\n }\n };\n ZipArchive.findValueFromEnd = function (stream, value, maxCount) {\n if (stream == null)\n throw new DOMException(\"stream\");\n // if( !stream.CanSeek || !stream.CanRead )\n // throw new ArgumentOutOfRangeException( \"We need to have seekable and readable stream.\" );\n // read last 4 bytes and compare with required value\n var lStreamSize = stream.inputStream.buffer.byteLength;\n if (lStreamSize < 4)\n return -1;\n var arrBuffer = new Uint8Array(4);\n var lLastPos = Math.max(0, lStreamSize - maxCount);\n var lCurrentPosition = lStreamSize - 1 - INT_SIZE;\n stream.position = lCurrentPosition;\n stream.read(arrBuffer, 0, INT_SIZE);\n var uiCurValue = arrBuffer[0];\n var bFound = (uiCurValue == value);\n if (!bFound) {\n while (lCurrentPosition > lLastPos) {\n // remove unnecessary byte and replace it with new value.\n uiCurValue <<= 8;\n lCurrentPosition--;\n stream.position = lCurrentPosition;\n uiCurValue += stream.readByte();\n if (uiCurValue == value) {\n bFound = true;\n break;\n }\n }\n }\n return bFound ? lCurrentPosition : -1;\n };\n /// \n /// Extracts Int32 value from the stream.\n /// \n /// Stream to read data from.\n /// Extracted value.\n ZipArchive.ReadInt32 = function (stream) {\n var buffer = new Uint8Array(INT_SIZE);\n if (stream.read(buffer, 0, INT_SIZE) != INT_SIZE) {\n throw new DOMException(\"Unable to read value at the specified position - end of stream was reached.\");\n }\n return Utils.bitConverterToInt32(buffer, 0);\n };\n /// \n /// Extracts Int16 value from the stream.\n /// \n /// Stream to read data from.\n /// Extracted value.\n ZipArchive.ReadInt16 = function (stream) {\n var buffer = new Uint8Array(SHORT_SIZE);\n if (stream.read(buffer, 0, SHORT_SIZE) != SHORT_SIZE) {\n throw new DOMException(\"Unable to read value at the specified position - end of stream was reached.\");\n }\n return Utils.bitConverterToInt16(buffer, 0);\n };\n /// \n /// Extracts unsigned Int16 value from the stream.\n /// \n /// Stream to read data from.\n /// Extracted value.\n ZipArchive.ReadUInt16 = function (stream) {\n {\n var buffer = new Uint8Array(SHORT_SIZE);\n if (stream.read(buffer, 0, SHORT_SIZE) != SHORT_SIZE) {\n throw new DOMException(\"Unable to read value at the specified position - end of stream was reached.\");\n }\n return Utils.bitConverterToInt16(buffer, 0);\n }\n };\n return ZipArchive;\n}());\nexport { ZipArchive };\nvar ZipArchiveItemHelper = /** @class */ (function () {\n function ZipArchiveItemHelper() {\n /// \n /// Zip header signature.\n /// \n this.headerSignature = 0x04034b50;\n /// \n /// Indicates whether we should check Crc value when reading item's data. Check\n /// is performed when user gets access to decompressed data for the first time.\n /// \n this.checkCrc = true;\n /// \n /// Crc.\n /// \n this.crc32 = 0;\n }\n /// \n /// Read data from the stream based on the central directory.\n /// \n /// Stream to read data from, stream.Position must point at just after correct file header.\n ZipArchiveItemHelper.prototype.readCentralDirectoryData = function (stream) {\n // on the current moment we ignore \"version made by\" and \"version needed to extract\" fields.\n stream.position += 4;\n this.options = ZipArchive.ReadInt16(stream);\n this.compressionMethod = ZipArchive.ReadInt16(stream);\n this.checkCrc = (this.compressionMethod != 99); //COmpression.Defalte != SecurityConstants.AES\n //m_bCompressed = true;\n // on the current moment we ignore \"last mod file time\" and \"last mod file date\" fields.\n var lastModified = ZipArchive.ReadInt32(stream);\n //LastModified = ConvertToDateTime(lastModified);\n this.crc32 = Utils.bitConverterToUInt32(ZipArchive.ReadInt32(stream));\n this.compressedSize = ZipArchive.ReadInt32(stream);\n this.originalSize = ZipArchive.ReadInt32(stream);\n var iFileNameLength = ZipArchive.ReadInt16(stream);\n var iExtraFieldLenth = ZipArchive.ReadInt16(stream);\n var iCommentLength = ZipArchive.ReadInt16(stream);\n // on the current moment we ignore and \"disk number start\" (2 bytes),\n // \"internal file attributes\" (2 bytes).\n stream.position += 4;\n this.externalAttributes = ZipArchive.ReadInt32(stream);\n this.localHeaderOffset = ZipArchive.ReadInt32(stream);\n var arrBuffer = new Uint8Array(iFileNameLength);\n stream.read(arrBuffer, 0, iFileNameLength);\n var m_strItemName = Utils.byteToString(arrBuffer);\n m_strItemName = m_strItemName.replace(\"\\\\\", \"/\");\n this.name = m_strItemName;\n stream.position += iExtraFieldLenth + iCommentLength;\n if (this.options != 0)\n this.options = 0;\n };\n /// \n /// Reads zipped data from the stream.\n /// \n /// Stream to read data from.\n /// Indicates whether we should check crc value after data decompression.\n ZipArchiveItemHelper.prototype.readData = function (stream, checkCrc) {\n if (stream.length == 0)\n throw new DOMException(\"stream\");\n stream.position = this.localHeaderOffset;\n this.checkCrc = checkCrc;\n this.readLocalHeader(stream);\n this.readCompressedData(stream);\n };\n ZipArchiveItemHelper.prototype.decompressData = function () {\n if (this.compressionMethod == 8) {\n if (this.originalSize > 0) {\n this.decompressDataOld();\n }\n }\n };\n ZipArchiveItemHelper.prototype.decompressDataOld = function () {\n var reader = new CompressedStreamReader(this.compressedStream, true);\n var decompressedData;\n if (this.originalSize > 0)\n decompressedData = new Stream(new Uint8Array(this.originalSize));\n var arrBuffer = new Uint8Array(BufferSize);\n var iReadBytes;\n var past = new Uint8Array(0);\n while ((iReadBytes = reader.read(arrBuffer, 0, BufferSize)) > 0) {\n // past = new Uint8Array(decompressedData.length);\n // let currentBlock: Uint8Array = arrBuffer.subarray(0, iReadBytes);\n decompressedData.write(arrBuffer.subarray(0, iReadBytes), 0, iReadBytes);\n }\n this.unCompressedStream = decompressedData.toByteArray();\n // this.originalSize = decompressedData.Length;\n // m_bControlStream = true;\n // m_streamData = decompressedData;\n // decompressedData.SetLength( m_lOriginalSize );\n // decompressedData.Capacity = ( int )m_lOriginalSize;\n if (this.checkCrc) {\n //TODO: fix this\n //CheckCrc(decompressedData.ToArray());\n }\n //m_streamData.Position = 0;\n };\n /// \n /// Extracts local header from the stream.\n /// \n /// Stream to read data from.\n ZipArchiveItemHelper.prototype.readLocalHeader = function (stream) {\n if (stream.length == 0)\n throw new DOMException(\"stream\");\n if (ZipArchive.ReadInt32(stream) != this.headerSignature)\n throw new DOMException(\"Can't find local header signature - wrong file format or file is corrupt.\");\n // TODO: it is good to verify data read from the central directory record,\n // but on the current moment we simply skip it.\n stream.position += 22;\n var iNameLength = ZipArchive.ReadInt16(stream);\n var iExtraLength = ZipArchive.ReadUInt16(stream);\n if (this.compressionMethod == 99) //SecurityConstants.AES\n {\n // stream.Position += iNameLength + 8;\n // m_archive.EncryptionAlgorithm = (EncryptionAlgorithm)stream.ReadByte();\n // m_actualCompression = new byte[2];\n // stream.Read(m_actualCompression, 0, 2);\n }\n else if (iExtraLength > 2) {\n stream.position += iNameLength;\n var headerVal = ZipArchive.ReadInt16(stream);\n if (headerVal == 0x0017) //PKZipEncryptionHeader\n throw new DOMException(\"UnSupported\");\n else\n stream.position += iExtraLength - 2;\n }\n else\n stream.position += iNameLength + iExtraLength;\n };\n /// \n /// Extracts compressed data from the stream.\n /// \n /// Stream to read data from.\n ZipArchiveItemHelper.prototype.readCompressedData = function (stream) {\n var dataStream;\n if (this.compressedSize > 0) {\n var iBytesLeft = this.compressedSize;\n dataStream = new Stream(new Uint8Array(iBytesLeft));\n var arrBuffer = new Uint8Array(BufferSize);\n while (iBytesLeft > 0) {\n var iBytesToRead = Math.min(iBytesLeft, BufferSize);\n if (stream.read(arrBuffer, 0, iBytesToRead) != iBytesToRead)\n throw new DOMException(\"End of file reached - wrong file format or file is corrupt.\");\n dataStream.write(arrBuffer.subarray(0, iBytesToRead), 0, iBytesToRead);\n iBytesLeft -= iBytesToRead;\n }\n // if(m_archive.Password != null)\n // {\n // byte[] dataBuffer = new byte[dataStream.Length];\n // dataBuffer = dataStream.ToArray();\n // dataStream=new MemoryStream( Decrypt(dataBuffer));\n // }\n this.compressedStream = new Uint8Array(dataStream.inputStream);\n // m_bControlStream = true;\n }\n else if (this.compressedSize < 0) //If compression size is negative, then read until the next header signature reached.\n {\n // MemoryStream dataStream = new MemoryStream();\n // int bt = 0;\n // bool proceed=true;\n // while (proceed)\n // {\n // if ((bt = stream.ReadByte()) == Constants.HeaderSignatureStartByteValue)\n // {\n // stream.Position -= 1;\n // int headerSignature = ZipArchive.ReadInt32(stream);\n // if (headerSignature==Constants.CentralHeaderSignature || headerSignature==Constants.CentralHeaderSignature)\n // {\n // proceed = false;\n // }\n // stream.Position -= 3;\n // }\n // if (proceed)\n // dataStream.WriteByte((byte)bt);\n // }\n // m_streamData = dataStream;\n // m_lCompressedSize = m_streamData.Length;\n // m_bControlStream = true;\n }\n else if (this.compressedSize == 0) {\n // m_streamData = new MemoryStream();\n }\n };\n return ZipArchiveItemHelper;\n}());\nexport { ZipArchiveItemHelper };\n/**\n * Class represent unique ZipArchive item\n * ```typescript\n * let archiveItem = new ZipArchiveItem(archive, 'directoryName\\fileName.txt');\n * ```\n */\nvar ZipArchiveItem = /** @class */ (function () {\n /**\n * constructor for creating {ZipArchiveItem} instance\n * @param {Blob|ArrayBuffer} data file data\n * @param {itemName} itemName absolute file path\n */\n function ZipArchiveItem(data, itemName) {\n if (data === null || data === undefined) {\n throw new Error('ArgumentException: data cannot be null or undefined');\n }\n if (itemName === null || itemName === undefined) {\n throw new Error('ArgumentException: string cannot be null or undefined');\n }\n if (itemName.length === 0) {\n throw new Error('string cannot be empty');\n }\n this.data = data;\n this.name = itemName;\n }\n Object.defineProperty(ZipArchiveItem.prototype, \"dataStream\", {\n get: function () {\n return this.decompressedStream;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ZipArchiveItem.prototype, \"name\", {\n /**\n * Get the name of archive item\n * @returns string\n */\n get: function () {\n return this.fileName;\n },\n /**\n * Set the name of archive item\n * @param {string} value\n */\n set: function (value) {\n this.fileName = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * release allocated un-managed resource\n * @returns {void}\n */\n ZipArchiveItem.prototype.destroy = function () {\n this.fileName = undefined;\n this.data = undefined;\n };\n return ZipArchiveItem;\n}());\nexport { ZipArchiveItem };\n/* eslint-enable */ \n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\n// import { IValueFormatter } from '../base/interface';\n/**\n * ValueFormatter class to globalize the value.\n * @private\n */\nvar ValueFormatter = /** @class */ (function () {\n function ValueFormatter(cultureName) {\n this.intl = new Internationalization();\n // if (!isNullOrUndefined(cultureName)) {\n // this.intl.culture = cultureName;\n // }\n }\n ValueFormatter.prototype.getFormatFunction = function (format, isServerRendered) {\n if (format.type) {\n if (isServerRendered) {\n format.isServerRendered = true;\n }\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n // public getParserFunction(format: NumberFormatOptions | DateFormatOptions): Function {\n // if ((format).type) {\n // return this.intl.getDateParser(format);\n // } else {\n // return this.intl.getNumberParser(format);\n // }\n // }\n // public fromView(value: string, format: Function, type?: string): string | number | Date {\n // if (type === 'date' || type === 'datetime' || type === 'number') {\n // return format(value);\n // } else {\n // return value;\n // }\n // }\n ValueFormatter.prototype.toView = function (value, format) {\n var result = value;\n if (!isNullOrUndefined(format) && !isNullOrUndefined(value)) {\n result = format(value);\n }\n return result;\n };\n // public setCulture(cultureName: string): void {\n // if (!isNullOrUndefined(cultureName)) {\n // setCulture(cultureName);\n // }\n // }\n /* tslint:disable:no-any */\n ValueFormatter.prototype.displayText = function (value, format, isServerRendered) {\n return this.toView(value, this.getFormatFunction(format, isServerRendered));\n };\n return ValueFormatter;\n}());\nexport { ValueFormatter };\n","import { ValueFormatter } from './value-formatter';\nimport { Encoding } from '@syncfusion/ej2-file-utils';\n/**\n * CsvHelper class\n * @private\n */\nvar CsvHelper = /** @class */ (function () {\n /* tslint:disable:no-any */\n function CsvHelper(json, separator) {\n this.csvStr = '';\n if (separator === null || separator === undefined) {\n this.separator = ',';\n }\n else {\n this.separator = separator;\n }\n this.formatter = new ValueFormatter();\n this.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n if (json.isServerRendered !== null && json.isServerRendered !== undefined) {\n this.isServerRendered = json.isServerRendered;\n }\n if (json.styles !== null && json.styles !== undefined) {\n this.globalStyles = new Map();\n for (var i = 0; i < json.styles.length; i++) {\n if (json.styles[i].name !== undefined && json.styles[i].numberFormat !== undefined) {\n this.globalStyles.set(json.styles[i].name, json.styles[i].numberFormat);\n }\n }\n }\n // Parses Worksheets data to DOM. \n if (json.worksheets !== null && json.worksheets !== undefined) {\n this.parseWorksheet(json.worksheets[0]);\n }\n //this.csvStr = 'a1,a2,a3\\nb1,b2,b3';\n }\n CsvHelper.prototype.parseWorksheet = function (json) {\n //Rows\n if (json.rows !== null && json.rows !== undefined) {\n this.parseRows(json.rows);\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseRows = function (rows) {\n var count = 1;\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n //Row index\n if (row.index !== null && row.index !== undefined) {\n while (count < row.index) {\n this.csvStr += '\\r\\n';\n count++;\n }\n this.parseRow(row);\n }\n else {\n throw Error('Row index is missing.');\n }\n }\n this.csvStr += '\\r\\n';\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseRow = function (row) {\n if (row.cells !== null && row.cells !== undefined) {\n var count = 1;\n for (var _i = 0, _a = row.cells; _i < _a.length; _i++) {\n var cell = _a[_i];\n //cell index\n if (cell.index !== null && cell.index !== undefined) {\n while (count < cell.index) {\n this.csvStr += this.separator;\n count++;\n }\n this.parseCell(cell);\n }\n else {\n throw Error('Cell index is missing.');\n }\n }\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseCell = function (cell) {\n var csv = this.csvStr;\n if (cell.value !== undefined) {\n if (cell.value instanceof Date) {\n if (cell.style !== undefined && cell.style.numberFormat !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n try {\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', skeleton: cell.style.numberFormat }, this.isServerRendered));\n }\n catch (error) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', format: cell.style.numberFormat }, this.isServerRendered));\n }\n }\n else if (cell.style !== undefined && cell.style.name !== undefined && this.globalStyles.has(cell.style.name)) {\n /* tslint:disable-next-line:max-line-length */\n try {\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', skeleton: this.globalStyles.get(cell.style.name) }, this.isServerRendered));\n }\n catch (error) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', format: this.globalStyles.get(cell.style.name) }, this.isServerRendered));\n }\n }\n else {\n csv += cell.value;\n }\n }\n else if (typeof (cell.value) === 'boolean') {\n csv += cell.value ? 'TRUE' : 'FALSE';\n }\n else if (typeof (cell.value) === 'number') {\n if (cell.style !== undefined && cell.style.numberFormat !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { format: cell.style.numberFormat }, this.isServerRendered));\n }\n else if (cell.style !== undefined && cell.style.name !== undefined && this.globalStyles.has(cell.style.name)) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { format: this.globalStyles.get(cell.style.name) }, this.isServerRendered));\n }\n else {\n csv += cell.value;\n }\n }\n else {\n csv += this.parseCellValue(cell.value);\n }\n }\n this.csvStr = csv;\n };\n CsvHelper.prototype.parseCellValue = function (value) {\n var val = '';\n var length = value.length;\n for (var start = 0; start < length; start++) {\n if (value[start] === '\\\"') {\n val += value[start].replace('\\\"', '\\\"\\\"');\n }\n else {\n val += value[start];\n }\n }\n value = val;\n if (value.indexOf(this.separator) !== -1 || value.indexOf('\\n') !== -1 || value.indexOf('\\\"') !== -1) {\n return value = '\\\"' + value + '\\\"';\n }\n else {\n return value;\n }\n };\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName- file name to save.\n * @param {Blob} buffer- the content to write in file\n */\n CsvHelper.prototype.save = function (fileName) {\n this.buffer = new Blob(['\\ufeff' + this.csvStr], { type: 'text/csv;charset=UTF-8' });\n if (this.isMicrosoftBrowser) {\n navigator.msSaveBlob(this.buffer, fileName);\n }\n else {\n var dataUrl_1 = window.URL.createObjectURL(this.buffer);\n var dwlLink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');\n dwlLink.download = fileName;\n dwlLink.href = dataUrl_1;\n var event_1 = document.createEvent('MouseEvent');\n event_1.initEvent('click', true, true);\n dwlLink.dispatchEvent(event_1);\n setTimeout(function () {\n window.URL.revokeObjectURL(dataUrl_1);\n });\n }\n };\n /**\n * Returns a Blob object containing CSV data with optional encoding.\n * @param {string} [encodingType] - The supported encoding types are \"ansi\", \"unicode\" and \"utf8\".\n */\n /* tslint:disable:no-any */\n CsvHelper.prototype.saveAsBlob = function (encodingType) {\n if (encodingType != undefined) {\n var encoding = new Encoding();\n var encodeString = 'UTF-8';\n if (encodingType.toUpperCase() == \"ANSI\") {\n encoding.type = 'Ansi';\n encodeString = 'ANSI';\n }\n else if (encodingType.toUpperCase() == \"UNICODE\") {\n encoding.type = 'Unicode';\n encodeString = 'UNICODE';\n }\n else {\n encoding.type = 'Utf8';\n encodeString = 'UTF-8';\n }\n var buffer = encoding.getBytes(this.csvStr, 0, this.csvStr.length);\n return new Blob([buffer], { type: 'text/csv;charset=' + encodeString });\n }\n else\n return new Blob(['\\ufeff' + this.csvStr], { type: 'text/csv;charset=UTF-8' });\n };\n return CsvHelper;\n}());\nexport { CsvHelper };\n","/**\n * BlobHelper class\n * @private\n */\nvar BlobHelper = /** @class */ (function () {\n function BlobHelper() {\n /* tslint:disable:no-any */\n this.parts = [];\n }\n /* tslint:disable:no-any */\n BlobHelper.prototype.append = function (part) {\n this.parts.push(part);\n this.blob = undefined; // Invalidate the blob\n };\n BlobHelper.prototype.getBlob = function () {\n return new Blob(this.parts, { type: 'text/plain' });\n };\n return BlobHelper;\n}());\nexport { BlobHelper };\n","/**\n * AutoFilters class\n * @private\n */\nvar AutoFilters = /** @class */ (function () {\n function AutoFilters() {\n }\n return AutoFilters;\n}());\nexport { AutoFilters };\n","import { Worksheets } from './worksheets';\nimport { Worksheet, FreezePane, MergeCell, MergeCells, HyperLink, Grouping } from './worksheet';\nimport { CellStyle, Font, Borders, CellXfs, Alignment, NumFmt, CellStyleXfs, CellStyles } from './cell-style';\nimport { Column } from './column';\nimport { Row, Rows } from './row';\nimport { Image } from './image';\nimport { Cell, Cells } from './cell';\nimport { ZipArchive, ZipArchiveItem } from '@syncfusion/ej2-compression';\nimport { CsvHelper } from './csv-helper';\nimport { Internationalization, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { BlobHelper } from './blob-helper';\nimport { AutoFilters } from './auto-filters';\n/**\n * Workbook class\n */\nvar Workbook = /** @class */ (function () {\n /* tslint:disable:no-any */\n function Workbook(json, saveType, culture, currencyString, separator) {\n this.sharedStringCount = 0;\n this.unitsProportions = [\n 96 / 75.0,\n 96 / 300.0,\n 96,\n 96 / 25.4,\n 96 / 2.54,\n 1,\n 96 / 72.0,\n 96 / 72.0 / 12700,\n ];\n /* tslint:disable:no-any */\n this.hyperlinkStyle = { fontColor: '#0000FF', underline: true };\n if (culture !== undefined) {\n this.culture = culture;\n }\n else {\n this.culture = 'en-US';\n }\n if (currencyString !== undefined) {\n this.currency = currencyString;\n }\n else {\n this.currency = 'USD';\n }\n this.intl = new Internationalization(this.culture);\n this.mSaveType = saveType;\n if (saveType === 'xlsx') {\n this.mArchive = new ZipArchive();\n this.sharedString = [];\n this.mFonts = [];\n this.mBorders = [];\n this.mStyles = [];\n this.printTitles = new Map();\n this.cellStyles = new Map();\n this.mNumFmt = new Map();\n this.mFills = new Map();\n this.mStyles.push(new CellStyle());\n this.mFonts.push(new Font());\n /* tslint:disable */\n this.cellStyles.set('Normal', new CellStyles());\n /* tslint:enable */\n this.mCellXfs = [];\n this.mCellStyleXfs = [];\n this.drawingCount = 0;\n this.imageCount = 0;\n if (json.styles !== null && json.styles !== undefined) {\n /* tslint:disable-next-line:no-any */\n this.globalStyles = new Map();\n for (var i = 0; i < json.styles.length; i++) {\n if (json.styles[i].name !== undefined) {\n if (!this.cellStyles.has(json.styles[i].name)) {\n var cellStyle = new CellStyle();\n cellStyle.isGlobalStyle = true;\n this.parserCellStyle(json.styles[i], cellStyle, 'none');\n var cellStylesIn = new CellStyles();\n cellStylesIn.name = cellStyle.name;\n cellStylesIn.xfId = (cellStyle.index - 1);\n this.cellStyles.set(cellStylesIn.name, cellStylesIn);\n /* tslint:disable-next-line:no-any */\n var tFormat = {};\n if (json.styles[i].numberFormat !== undefined) {\n tFormat.format = json.styles[i].numberFormat;\n }\n if (json.styles[i].type !== undefined) {\n tFormat.type = json.styles[i].type;\n }\n else {\n tFormat.type = 'datetime';\n }\n if (tFormat.format !== undefined) {\n this.globalStyles.set(json.styles[i].name, tFormat);\n }\n }\n else {\n throw Error('Style name ' + json.styles[i].name + ' is already existed');\n }\n }\n }\n }\n // Parses Worksheets data to DOM. \n if (json.worksheets !== null && json.worksheets !== undefined) {\n this.parserWorksheets(json.worksheets);\n }\n else {\n throw Error('Worksheet is expected.');\n }\n // Parses the BuiltInProperties data to DOM. \n if (json.builtInProperties !== null && json.builtInProperties !== undefined) {\n this.builtInProperties = new BuiltInProperties();\n this.parserBuiltInProperties(json.builtInProperties, this.builtInProperties);\n }\n }\n else {\n this.csvHelper = new CsvHelper(json, separator);\n }\n }\n /* tslint:disable:no-any */\n Workbook.prototype.parserBuiltInProperties = function (jsonBuiltInProperties, builtInProperties) {\n //Author\n if (jsonBuiltInProperties.author !== null && jsonBuiltInProperties.author !== undefined) {\n builtInProperties.author = jsonBuiltInProperties.author;\n }\n //Comments\n if (jsonBuiltInProperties.comments !== null && jsonBuiltInProperties.comments !== undefined) {\n builtInProperties.comments = jsonBuiltInProperties.comments;\n }\n //Category\n if (jsonBuiltInProperties.category !== null && jsonBuiltInProperties.category !== undefined) {\n builtInProperties.category = jsonBuiltInProperties.category;\n }\n //Company\n if (jsonBuiltInProperties.company !== null && jsonBuiltInProperties.company !== undefined) {\n builtInProperties.company = jsonBuiltInProperties.company;\n }\n //Manager\n if (jsonBuiltInProperties.manager !== null && jsonBuiltInProperties.manager !== undefined) {\n builtInProperties.manager = jsonBuiltInProperties.manager;\n }\n //Subject\n if (jsonBuiltInProperties.subject !== null && jsonBuiltInProperties.subject !== undefined) {\n builtInProperties.subject = jsonBuiltInProperties.subject;\n }\n //Title\n if (jsonBuiltInProperties.title !== null && jsonBuiltInProperties.title !== undefined) {\n builtInProperties.title = jsonBuiltInProperties.title;\n }\n //Creation date\n if (jsonBuiltInProperties.createdDate !== null && jsonBuiltInProperties.createdDate !== undefined) {\n builtInProperties.createdDate = jsonBuiltInProperties.createdDate;\n }\n //Modified date\n if (jsonBuiltInProperties.modifiedDate !== null && jsonBuiltInProperties.modifiedDate !== undefined) {\n builtInProperties.modifiedDate = jsonBuiltInProperties.modifiedDate;\n }\n //Tags\n if (jsonBuiltInProperties.tags !== null && jsonBuiltInProperties.tags !== undefined) {\n builtInProperties.tags = jsonBuiltInProperties.tags;\n }\n //Status\n if (jsonBuiltInProperties.status !== null && jsonBuiltInProperties.status !== undefined) {\n builtInProperties.status = jsonBuiltInProperties.status;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserWorksheets = function (json) {\n this.worksheets = new Worksheets();\n var length = json.length;\n for (var i = 0; i < length; i++) {\n var jsonSheet = json[i];\n var sheet = new Worksheet();\n this.mergeCells = new MergeCells();\n this.mergedCellsStyle = new Map();\n this.mHyperLinks = [];\n //Name\n if (jsonSheet.name !== null && jsonSheet.name !== undefined) {\n sheet.name = jsonSheet.name;\n }\n else {\n sheet.name = 'Sheet' + (i + 1).toString();\n }\n if (jsonSheet.enableRtl !== null && jsonSheet.enableRtl !== undefined) {\n sheet.enableRtl = jsonSheet.enableRtl;\n }\n sheet.index = (i + 1);\n //Columns\n if (jsonSheet.columns !== null && jsonSheet.columns !== undefined) {\n this.parserColumns(jsonSheet.columns, sheet);\n }\n //Rows\n if (jsonSheet.rows !== null && jsonSheet.rows !== undefined) {\n this.parserRows(jsonSheet.rows, sheet);\n }\n //showGridLines\n if (jsonSheet.showGridLines !== null && jsonSheet.showGridLines !== undefined) {\n sheet.showGridLines = jsonSheet.showGridLines;\n }\n //FreezePanes\n if (jsonSheet.freeze !== null && jsonSheet.freeze !== undefined) {\n this.parserFreezePanes(jsonSheet.freeze, sheet);\n }\n //Print Title\n if (jsonSheet.printTitle !== null && jsonSheet.printTitle !== undefined) {\n this.parserPrintTitle(jsonSheet.printTitle, sheet);\n }\n if (jsonSheet.pageSetup !== undefined) {\n if (jsonSheet.pageSetup.isSummaryRowBelow !== undefined) {\n sheet.isSummaryRowBelow = jsonSheet.pageSetup.isSummaryRowBelow;\n }\n }\n if (jsonSheet.images !== undefined) {\n this.parserImages(jsonSheet.images, sheet);\n }\n if (jsonSheet.autoFilters !== null && jsonSheet.autoFilters !== undefined) {\n this.parseFilters(jsonSheet.autoFilters, sheet);\n }\n sheet.index = (i + 1);\n sheet.mergeCells = this.mergeCells;\n sheet.hyperLinks = this.mHyperLinks;\n this.worksheets.push(sheet);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.mergeOptions = function (fromJson, toJson) {\n /* tslint:disable:no-any */\n var result = {};\n this.applyProperties(fromJson, result);\n this.applyProperties(toJson, result);\n return result;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.applyProperties = function (sourceJson, destJson) {\n var keys = Object.keys(sourceJson);\n for (var index = 0; index < keys.length; index++) {\n if (keys[index] !== 'name') {\n destJson[keys[index]] = sourceJson[keys[index]];\n }\n }\n };\n Workbook.prototype.getCellName = function (row, column) {\n return this.getColumnName(column) + row.toString();\n };\n Workbook.prototype.getColumnName = function (col) {\n col--;\n var strColumnName = '';\n do {\n var iCurrentDigit = col % 26;\n col = col / 26 - 1;\n strColumnName = String.fromCharCode(65 + iCurrentDigit) + strColumnName;\n } while (col >= 0);\n return strColumnName;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserPrintTitle = function (json, sheet) {\n var printTitleName = '';\n var titleRowName;\n if (json.fromRow !== null && json.fromRow !== undefined) {\n var fromRow = json.fromRow;\n var toRow = void 0;\n if (json.toRow !== null && json.toRow !== undefined) {\n toRow = json.toRow;\n }\n else {\n toRow = json.fromRow;\n }\n titleRowName = '$' + fromRow + ':$' + toRow;\n }\n var titleColName;\n if (json.fromColumn !== null && json.fromColumn !== undefined) {\n var fromColumn = json.fromColumn;\n var toColumn = void 0;\n if (json.toColumn !== null && json.toColumn !== undefined) {\n toColumn = json.toColumn;\n }\n else {\n toColumn = json.fromColumn;\n }\n titleColName = '$' + this.getColumnName(fromColumn) + ':$' + this.getColumnName(toColumn);\n }\n if (titleRowName !== undefined) {\n printTitleName += (sheet.name + '!' + titleRowName);\n }\n if (titleColName !== undefined && titleRowName !== undefined) {\n printTitleName += ',' + (sheet.name + '!' + titleColName);\n }\n else if (titleColName !== undefined) {\n printTitleName += (sheet.name + '!' + titleColName);\n }\n if (printTitleName !== '') {\n this.printTitles.set(sheet.index - 1, printTitleName);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserFreezePanes = function (json, sheet) {\n sheet.freezePanes = new FreezePane();\n if (json.row !== null && json.row !== undefined) {\n sheet.freezePanes.row = json.row;\n }\n else {\n sheet.freezePanes.row = 0;\n }\n if (json.column !== null && json.column !== undefined) {\n sheet.freezePanes.column = json.column;\n }\n else {\n sheet.freezePanes.column = 0;\n }\n sheet.freezePanes.leftCell = this.getCellName(sheet.freezePanes.row + 1, sheet.freezePanes.column + 1);\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserColumns = function (json, sheet) {\n var columnsLength = json.length;\n sheet.columns = [];\n for (var column = 0; column < columnsLength; column++) {\n var col = new Column();\n if (json[column].index !== null && json[column].index !== undefined) {\n col.index = json[column].index;\n }\n else {\n throw Error('Column index is missing.');\n }\n if (json[column].width !== null && json[column].width !== undefined) {\n col.width = json[column].width;\n }\n sheet.columns.push(col);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserRows = function (json, sheet) {\n var rowsLength = json.length;\n sheet.rows = new Rows();\n var rowId = 0;\n for (var r = 0; r < rowsLength; r++) {\n var row = this.parserRow(json[r], rowId);\n rowId = row.index;\n sheet.rows.add(row);\n }\n this.insertMergedCellsStyle(sheet);\n };\n Workbook.prototype.insertMergedCellsStyle = function (sheet) {\n var _this = this;\n if (this.mergeCells.length > 0) {\n this.mergedCellsStyle.forEach(function (value, key) {\n var row = sheet.rows.filter(function (item) {\n return item.index === value.y;\n })[0];\n if (!isNullOrUndefined(row)) {\n var cell = row.cells.filter(function (item) {\n return item.index === value.x;\n })[0];\n if (!isNullOrUndefined(cell)) {\n cell.styleIndex = value.styleIndex;\n }\n else {\n var cells = row.cells.filter(function (item) {\n return item.index <= value.x;\n });\n var insertIndex = 0;\n if (cells.length > 0) {\n insertIndex = row.cells.indexOf(cells[cells.length - 1]) + 1;\n }\n row.cells.splice(insertIndex, 0, _this.createCell(value, key));\n }\n }\n else {\n var rows = sheet.rows.filter(function (item) {\n return item.index <= value.y;\n });\n var rowToInsert = new Row();\n rowToInsert.index = value.y;\n rowToInsert.cells = new Cells();\n rowToInsert.cells.add(_this.createCell(value, key));\n var insertIndex = 0;\n if (rows.length > 0) {\n insertIndex = sheet.rows.indexOf(rows[rows.length - 1]) + 1;\n }\n sheet.rows.splice(insertIndex, 0, rowToInsert);\n }\n });\n }\n };\n Workbook.prototype.createCell = function (value, key) {\n var cellToInsert = new Cell();\n cellToInsert.refName = key;\n cellToInsert.index = value.x;\n cellToInsert.cellStyle = new CellStyle();\n cellToInsert.styleIndex = value.styleIndex;\n return cellToInsert;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserRow = function (json, rowIndex) {\n var row = new Row();\n //Row Height\n if (json.height !== null && json.height !== undefined) {\n row.height = json.height;\n }\n //Row index\n if (json.index !== null && json.index !== undefined) {\n row.index = json.index;\n }\n else {\n throw Error('Row index is missing.');\n }\n if (json.grouping !== null && json.grouping !== undefined) {\n this.parseGrouping(json.grouping, row);\n }\n this.parseCells(json.cells, row);\n return row;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parseGrouping = function (json, row) {\n row.grouping = new Grouping();\n if (json.outlineLevel !== undefined) {\n row.grouping.outlineLevel = json.outlineLevel;\n }\n if (json.isCollapsed !== undefined) {\n row.grouping.isCollapsed = json.isCollapsed;\n }\n if (json.isHidden !== undefined) {\n row.grouping.isHidden = json.isHidden;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parseCells = function (json, row) {\n row.cells = new Cells();\n var cellsLength = json !== undefined ? json.length : 0;\n var spanMin = 1;\n var spanMax = 1;\n var curCellIndex = 0;\n for (var cellId = 0; cellId < cellsLength; cellId++) {\n /* tslint:disable:no-any */\n var jsonCell = json[cellId];\n var cell = new Cell();\n //cell index\n if (jsonCell.index !== null && jsonCell.index !== undefined) {\n cell.index = jsonCell.index;\n }\n else {\n throw Error('Cell index is missing.');\n }\n if (cell.index < spanMin) {\n spanMin = cell.index;\n }\n else if (cell.index > spanMax) {\n spanMax = cell.index;\n }\n //Update the Cell name\n cell.refName = this.getCellName(row.index, cell.index);\n //Row span\n if (jsonCell.rowSpan !== null && jsonCell.rowSpan !== undefined) {\n cell.rowSpan = jsonCell.rowSpan - 1;\n }\n else {\n cell.rowSpan = 0;\n }\n //Column span\n if (jsonCell.colSpan !== null && jsonCell.colSpan !== undefined) {\n cell.colSpan = jsonCell.colSpan - 1;\n }\n else {\n cell.colSpan = 0;\n }\n //Hyperlink\n if (jsonCell.hyperlink !== null && jsonCell.hyperlink !== undefined) {\n var hyperLink = new HyperLink();\n if (jsonCell.hyperlink.target !== undefined) {\n hyperLink.target = jsonCell.hyperlink.target;\n if (jsonCell.hyperlink.displayText !== undefined) {\n cell.value = jsonCell.hyperlink.displayText;\n }\n else {\n cell.value = jsonCell.hyperlink.target;\n }\n cell.type = this.getCellValueType(cell.value);\n hyperLink.ref = cell.refName;\n hyperLink.rId = (this.mHyperLinks.length + 1);\n this.mHyperLinks.push(hyperLink);\n cell.cellStyle = new CellStyle();\n /* tslint:disable-next-line:max-line-length */\n this.parserCellStyle((jsonCell.style !== undefined ? this.mergeOptions(jsonCell.style, this.hyperlinkStyle) : this.hyperlinkStyle), cell.cellStyle, 'string');\n cell.styleIndex = cell.cellStyle.index;\n }\n }\n // formulas\n if (jsonCell.formula !== null && jsonCell.formula !== undefined) {\n cell.formula = jsonCell.formula;\n cell.type = 'formula';\n }\n //Cell value\n if (jsonCell.value !== null && jsonCell.value !== undefined) {\n if (cell.formula !== undefined) {\n cell.value = 0;\n }\n else {\n cell.value = jsonCell.value;\n cell.type = this.getCellValueType(cell.value);\n }\n }\n if (jsonCell.style !== null && jsonCell.style !== undefined && cell.styleIndex === undefined) {\n cell.cellStyle = new CellStyle();\n if (cell.value instanceof Date) {\n this.parserCellStyle(jsonCell.style, cell.cellStyle, cell.type, 14);\n }\n else {\n this.parserCellStyle(jsonCell.style, cell.cellStyle, cell.type);\n }\n cell.styleIndex = cell.cellStyle.index;\n }\n else if (cell.value instanceof Date) {\n cell.cellStyle = new CellStyle();\n this.parserCellStyle({}, cell.cellStyle, cell.type, 14);\n cell.styleIndex = cell.cellStyle.index;\n }\n this.parseCellType(cell);\n this.mergeCells = this.processMergeCells(cell, row.index, this.mergeCells);\n row.cells.add(cell);\n curCellIndex = (cell.index + 1);\n }\n row.spans = (spanMin) + ':' + (spanMax);\n };\n Workbook.prototype.GetColors = function () {\n var colors;\n colors = new Map();\n /* tslint:disable */\n colors.set('WHITE', 'FFFFFFFF');\n /* tslint:disable */\n colors.set('SILVER', 'FFC0C0C0');\n /* tslint:disable */\n colors.set('GRAY', 'FF808080');\n /* tslint:disable */\n colors.set('BLACK', 'FF000000');\n /* tslint:disable */\n colors.set('RED', 'FFFF0000');\n /* tslint:disable */\n colors.set('MAROON', 'FF800000');\n /* tslint:disable */\n colors.set('YELLOW', 'FFFFFF00');\n /* tslint:disable */\n colors.set('OLIVE', 'FF808000');\n /* tslint:disable */\n colors.set('LIME', 'FF00FF00');\n /* tslint:disable */\n colors.set('GREEN', 'FF008000');\n /* tslint:disable */\n colors.set('AQUA', 'FF00FFFF');\n /* tslint:disable */\n colors.set('TEAL', 'FF008080');\n /* tslint:disable */\n colors.set('BLUE', 'FF0000FF');\n /* tslint:disable */\n colors.set('NAVY', 'FF000080');\n /* tslint:disable */\n colors.set('FUCHSIA', 'FFFF00FF');\n /* tslint:disable */\n colors.set('PURPLE', 'FF800080');\n return colors;\n };\n Workbook.prototype.processColor = function (colorVal) {\n if (colorVal.indexOf('#') === 0) {\n return colorVal.replace('#', 'FF');\n }\n colorVal = colorVal.toUpperCase();\n this.rgbColors = this.GetColors();\n if (this.rgbColors.has(colorVal)) {\n colorVal = this.rgbColors.get(colorVal);\n }\n else {\n colorVal = 'FF000000';\n }\n return colorVal;\n };\n Workbook.prototype.processCellValue = function (value, cell) {\n var cellValue = value;\n if (value.indexOf(\"\") !== -1 ||\n value.indexOf(\"\") !== -1 || value.indexOf(\"\") !== -1) {\n var processedVal = '';\n var startindex = value.indexOf('<', 0);\n var endIndex = value.indexOf('>', startindex + 1);\n if (startindex >= 0 && endIndex >= 0) {\n if (startindex !== 0) {\n processedVal += '' + this.processString(value.substring(0, startindex)) + '';\n }\n while (startindex >= 0 && endIndex >= 0) {\n endIndex = value.indexOf('>', startindex + 1);\n if (endIndex >= 0) {\n var subString = value.substring(startindex + 1, endIndex);\n startindex = value.indexOf('<', endIndex + 1);\n if (startindex < 0) {\n startindex = cellValue.length;\n }\n var text = cellValue.substring(endIndex + 1, startindex);\n if (text.length !== 0) {\n var subSplit = subString.split(' ');\n if (subSplit.length > 0) {\n processedVal += '';\n }\n if (subSplit.length > 1) {\n for (var _i = 0, subSplit_1 = subSplit; _i < subSplit_1.length; _i++) {\n var element = subSplit_1[_i];\n var start = element.trim().substring(0, 5);\n switch (start) {\n case 'size=':\n processedVal += '';\n break;\n case 'face=':\n processedVal += '';\n break;\n case 'color':\n processedVal += '';\n break;\n case 'href=':\n var hyperLink = new HyperLink();\n hyperLink.target = element.substring(6, element.length - 1).trim();\n hyperLink.ref = cell.refName;\n hyperLink.rId = (this.mHyperLinks.length + 1);\n this.mHyperLinks.push(hyperLink);\n processedVal += '';\n break;\n }\n }\n }\n else if (subSplit.length === 1) {\n var style = subSplit[0].trim();\n switch (style) {\n case 'b':\n processedVal += '';\n break;\n case 'i':\n processedVal += '';\n break;\n case 'u':\n processedVal += '';\n break;\n }\n }\n processedVal += '' + this.processString(text) + '';\n }\n }\n }\n if (processedVal === '') {\n return cellValue;\n }\n return processedVal;\n }\n else {\n return cellValue;\n }\n }\n else {\n return cellValue;\n }\n };\n Workbook.prototype.applyGlobalStyle = function (json, cellStyle) {\n var index = 0;\n if (this.cellStyles.has(json.name)) {\n cellStyle.index = this.mStyles.filter(function (a) { return (a.name === json.name); })[0].index;\n cellStyle.name = json.name;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserCellStyle = function (json, cellStyle, cellType, defStyleIndex) {\n //name\n if (json.name !== null && json.name !== undefined) {\n if (cellStyle.isGlobalStyle) {\n cellStyle.name = json.name;\n }\n else {\n this.applyGlobalStyle(json, cellStyle);\n return;\n }\n }\n //background color\n if (json.backColor !== null && json.backColor !== undefined) {\n cellStyle.backColor = json.backColor;\n }\n //borders\n //leftBorder\n cellStyle.borders = new Borders();\n //AllBorder\n if (json.borders !== null && json.borders !== undefined) {\n this.parserBorder(json.borders, cellStyle.borders.all);\n }\n //leftborder\n if (json.leftBorder !== null && json.leftBorder !== undefined) {\n this.parserBorder(json.leftBorder, cellStyle.borders.left);\n }\n //rightBorder\n if (json.rightBorder !== null && json.rightBorder !== undefined) {\n this.parserBorder(json.rightBorder, cellStyle.borders.right);\n }\n //topBorder\n if (json.topBorder !== null && json.topBorder !== undefined) {\n this.parserBorder(json.topBorder, cellStyle.borders.top);\n }\n //bottomBorder\n if (json.bottomBorder !== null && json.bottomBorder !== undefined) {\n this.parserBorder(json.bottomBorder, cellStyle.borders.bottom);\n }\n //fontName\n if (json.fontName !== null && json.fontName !== undefined) {\n cellStyle.fontName = json.fontName;\n }\n //fontSize\n if (json.fontSize !== null && json.fontSize !== undefined) {\n cellStyle.fontSize = json.fontSize;\n }\n //fontColor\n if (json.fontColor !== null && json.fontColor !== undefined) {\n cellStyle.fontColor = json.fontColor;\n }\n //italic\n if (json.italic !== null && json.italic !== undefined) {\n cellStyle.italic = json.italic;\n }\n //bold\n if (json.bold !== null && json.bold !== undefined) {\n cellStyle.bold = json.bold;\n }\n //hAlign\n if (json.hAlign !== null && json.hAlign !== undefined) {\n cellStyle.hAlign = json.hAlign.toLowerCase();\n }\n //indent\n if (json.indent !== null && json.indent !== undefined) {\n cellStyle.indent = json.indent;\n if (!(cellStyle.hAlign === 'left' || cellStyle.hAlign === 'right')) {\n cellStyle.hAlign = 'left';\n }\n }\n if (json.rotation !== null && json.rotation !== undefined) {\n cellStyle.rotation = json.rotation;\n }\n //vAlign\n if (json.vAlign !== null && json.vAlign !== undefined) {\n cellStyle.vAlign = json.vAlign.toLowerCase();\n }\n //underline\n if (json.underline !== null && json.underline !== undefined) {\n cellStyle.underline = json.underline;\n }\n //strikeThrough\n if (json.strikeThrough !== null && json.strikeThrough !== undefined) {\n cellStyle.strikeThrough = json.strikeThrough;\n }\n //wrapText\n if (json.wrapText !== null && json.wrapText !== undefined) {\n cellStyle.wrapText = json.wrapText;\n }\n //numberFormat\n if (json.numberFormat !== null && json.numberFormat !== undefined) {\n if (json.type !== null && json.type !== undefined) {\n cellStyle.numberFormat = this.getNumberFormat(json.numberFormat, json.type);\n }\n else {\n cellStyle.numberFormat = this.getNumberFormat(json.numberFormat, cellType);\n }\n }\n else if (defStyleIndex !== undefined) {\n cellStyle.numFmtId = 14;\n cellStyle.numberFormat = 'GENERAL';\n }\n else {\n cellStyle.numberFormat = 'GENERAL';\n }\n cellStyle.index = this.processCellStyle(cellStyle);\n };\n Workbook.prototype.switchNumberFormat = function (numberFormat, type) {\n var format = this.getNumberFormat(numberFormat, type);\n if (format !== numberFormat) {\n var numFmt = this.mNumFmt.get(numberFormat);\n if (numFmt !== undefined) {\n numFmt.formatCode = format;\n if (this.mNumFmt.has(format)) {\n for (var _i = 0, _a = this.mCellStyleXfs; _i < _a.length; _i++) {\n var cellStyleXfs = _a[_i];\n if (cellStyleXfs.numFmtId === numFmt.numFmtId) {\n cellStyleXfs.numFmtId = this.mNumFmt.get(format).numFmtId;\n }\n }\n for (var _b = 0, _c = this.mCellXfs; _b < _c.length; _b++) {\n var cellXfs = _c[_b];\n if (cellXfs.numFmtId === numFmt.numFmtId) {\n cellXfs.numFmtId = this.mNumFmt.get(format).numFmtId;\n }\n }\n }\n }\n }\n };\n Workbook.prototype.changeNumberFormats = function (value) {\n if (typeof value == \"string\") {\n var regex = new RegExp(this.currency, 'g');\n value = value.replace(regex, '[$' + this.currency + ']');\n }\n else if (typeof value == \"object\") {\n for (var i = 0; i < value.length; i++) {\n value[i] = value[i].replace(this.currency, '[$' + this.currency + ']');\n }\n }\n return value;\n };\n Workbook.prototype.getNumberFormat = function (numberFormat, type) {\n var returnFormat;\n switch (type) {\n case 'number':\n try {\n returnFormat = this.intl.getNumberPattern({ format: numberFormat, currency: this.currency, useGrouping: true }, true);\n if (this.currency.length > 1) {\n returnFormat = this.changeNumberFormats(returnFormat);\n }\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n case 'datetime':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'dateTime' }, true);\n }\n catch (error) {\n try {\n returnFormat = this.intl.getDatePattern({ format: numberFormat, type: 'dateTime' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n }\n break;\n case 'date':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'date' }, true);\n }\n catch (error) {\n try {\n returnFormat = this.intl.getDatePattern({ format: numberFormat, type: 'date' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n }\n break;\n case 'time':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'time' }, true);\n }\n catch (error) {\n try {\n returnFormat = this.intl.getDatePattern({ format: numberFormat, type: 'time' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n }\n break;\n default:\n returnFormat = numberFormat;\n break;\n }\n return returnFormat;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserBorder = function (json, border) {\n if (json.color !== null && json.color !== undefined) {\n border.color = json.color;\n }\n else {\n border.color = '#000000';\n }\n if (json.lineStyle !== null && json.lineStyle !== undefined) {\n border.lineStyle = json.lineStyle;\n }\n else {\n border.lineStyle = 'thin';\n }\n };\n Workbook.prototype.processCellStyle = function (style) {\n if (style.isGlobalStyle) {\n this.processNumFormatId(style);\n this.mStyles.push(style);\n return this.mStyles.length;\n }\n else {\n var compareResult = this.compareStyle(style);\n if (!compareResult.result) {\n this.processNumFormatId(style);\n this.mStyles.push(style);\n return this.mStyles.length;\n }\n else {\n //Return the index of the already existing style.\n return compareResult.index;\n }\n }\n };\n Workbook.prototype.processNumFormatId = function (style) {\n if (style.numberFormat !== 'GENERAL' && !this.mNumFmt.has(style.numberFormat)) {\n var id = this.mNumFmt.size + 164;\n this.mNumFmt.set(style.numberFormat, new NumFmt(id, style.numberFormat));\n }\n };\n Workbook.prototype.isNewFont = function (toCompareStyle) {\n var result = false;\n var index = 0;\n for (var _i = 0, _a = this.mFonts; _i < _a.length; _i++) {\n var font = _a[_i];\n index++;\n var fontColor = undefined;\n if (toCompareStyle.fontColor !== undefined) {\n fontColor = ('FF' + toCompareStyle.fontColor.replace('#', ''));\n }\n result = font.color === fontColor &&\n font.b === toCompareStyle.bold &&\n font.i === toCompareStyle.italic &&\n font.u === toCompareStyle.underline &&\n font.strike === toCompareStyle.strikeThrough &&\n font.name === toCompareStyle.fontName &&\n font.sz === toCompareStyle.fontSize;\n if (result) {\n break;\n }\n }\n index = index - 1;\n return { index: index, result: result };\n };\n Workbook.prototype.isNewBorder = function (toCompareStyle) {\n var bStyle = new CellStyle();\n if (this.isAllBorder(toCompareStyle.borders)) {\n return (bStyle.borders.all.color === toCompareStyle.borders.all.color &&\n bStyle.borders.all.lineStyle === toCompareStyle.borders.all.lineStyle);\n }\n else {\n return (bStyle.borders.left.color === toCompareStyle.borders.left.color &&\n bStyle.borders.left.lineStyle === toCompareStyle.borders.left.lineStyle &&\n bStyle.borders.right.color === toCompareStyle.borders.right.color &&\n bStyle.borders.right.lineStyle === toCompareStyle.borders.right.lineStyle &&\n bStyle.borders.top.color === toCompareStyle.borders.top.color &&\n bStyle.borders.top.lineStyle === toCompareStyle.borders.top.lineStyle &&\n bStyle.borders.bottom.color === toCompareStyle.borders.bottom.color &&\n bStyle.borders.bottom.lineStyle === toCompareStyle.borders.bottom.lineStyle);\n }\n };\n Workbook.prototype.isAllBorder = function (toCompareBorder) {\n var allBorderStyle = new CellStyle();\n return allBorderStyle.borders.all.color !== toCompareBorder.all.color &&\n allBorderStyle.borders.all.lineStyle !== toCompareBorder.all.lineStyle;\n };\n Workbook.prototype.compareStyle = function (toCompareStyle) {\n var result = true;\n var index = 0;\n var globalStyleIndex = 0;\n for (var _i = 0, _a = this.mStyles; _i < _a.length; _i++) {\n var baseStyle = _a[_i];\n result = baseStyle.isGlobalStyle ? false : (baseStyle.backColor === toCompareStyle.backColor &&\n baseStyle.bold === toCompareStyle.bold &&\n baseStyle.numFmtId === toCompareStyle.numFmtId &&\n baseStyle.numberFormat === toCompareStyle.numberFormat &&\n baseStyle.type === toCompareStyle.type &&\n baseStyle.fontColor === toCompareStyle.fontColor &&\n baseStyle.fontName === toCompareStyle.fontName &&\n baseStyle.fontSize === toCompareStyle.fontSize &&\n baseStyle.hAlign === toCompareStyle.hAlign &&\n baseStyle.italic === toCompareStyle.italic &&\n baseStyle.underline === toCompareStyle.underline &&\n baseStyle.strikeThrough === toCompareStyle.strikeThrough &&\n baseStyle.vAlign === toCompareStyle.vAlign &&\n baseStyle.indent === toCompareStyle.indent &&\n baseStyle.rotation === toCompareStyle.rotation &&\n baseStyle.wrapText === toCompareStyle.wrapText &&\n (baseStyle.borders.all.color === toCompareStyle.borders.all.color &&\n baseStyle.borders.all.lineStyle === toCompareStyle.borders.all.lineStyle) &&\n (baseStyle.borders.left.color === toCompareStyle.borders.left.color &&\n baseStyle.borders.left.lineStyle === toCompareStyle.borders.left.lineStyle &&\n baseStyle.borders.right.color === toCompareStyle.borders.right.color &&\n baseStyle.borders.right.lineStyle === toCompareStyle.borders.right.lineStyle &&\n baseStyle.borders.top.color === toCompareStyle.borders.top.color &&\n baseStyle.borders.top.lineStyle === toCompareStyle.borders.top.lineStyle &&\n baseStyle.borders.bottom.color === toCompareStyle.borders.bottom.color &&\n baseStyle.borders.bottom.lineStyle === toCompareStyle.borders.bottom.lineStyle));\n if (result) {\n index = baseStyle.index;\n break;\n }\n }\n return { index: index, result: result };\n };\n Workbook.prototype.contains = function (array, item) {\n var index = array.indexOf(item);\n return index > -1 && index < array.length;\n };\n Workbook.prototype.getCellValueType = function (value) {\n if (value instanceof Date) {\n return 'datetime';\n }\n else if (typeof (value) === 'boolean') {\n return 'boolean';\n }\n else if (typeof (value) === 'number') {\n return 'number';\n }\n else {\n return 'string';\n }\n };\n Workbook.prototype.parseCellType = function (cell) {\n var type = cell.type;\n var saveType;\n var value = cell.value;\n switch (type) {\n case 'datetime':\n value = this.toOADate(value);\n if (cell.cellStyle !== undefined && cell.cellStyle.name !== undefined) {\n if (this.globalStyles.has(cell.cellStyle.name)) {\n var value_1 = this.globalStyles.get(cell.cellStyle.name);\n this.switchNumberFormat(value_1.format, value_1.type);\n }\n }\n saveType = 'n';\n break;\n //TODO: Update the number format index and style\n case 'boolean':\n value = value ? 1 : 0;\n saveType = 'b';\n break;\n case 'number':\n saveType = 'n';\n if (cell.cellStyle !== undefined && cell.cellStyle.name !== undefined) {\n if (this.globalStyles.has(cell.cellStyle.name)) {\n this.switchNumberFormat(this.globalStyles.get(cell.cellStyle.name).format, 'number');\n }\n }\n break;\n case 'string':\n this.sharedStringCount++;\n saveType = 's';\n var sstvalue = this.processCellValue(value, cell);\n if (!this.contains(this.sharedString, sstvalue)) {\n this.sharedString.push(sstvalue);\n }\n value = this.sharedString.indexOf(sstvalue);\n break;\n default:\n break;\n }\n cell.saveType = saveType;\n cell.value = value;\n };\n Workbook.prototype.parserImages = function (json, sheet) {\n var imagesLength = json.length;\n sheet.images = [];\n var imageId = 0;\n for (var p = 0; p < imagesLength; p++) {\n var image = this.parserImage(json[p]);\n sheet.images.push(image);\n }\n };\n Workbook.prototype.parseFilters = function (json, sheet) {\n sheet.autoFilters = new AutoFilters();\n if (json.row !== null && json.row !== undefined)\n sheet.autoFilters.row = json.row;\n else\n throw new Error('Argument Null Exception: row null or empty');\n if (json.lastRow !== null && json.lastRow !== undefined)\n sheet.autoFilters.lastRow = json.lastRow;\n else\n throw new Error('Argument Null Exception: lastRow cannot be null or empty');\n if (json.column !== null && json.column !== undefined)\n sheet.autoFilters.column = json.column;\n else\n throw new Error('Argument Null Exception: column cannot be null or empty');\n if (json.lastColumn !== null && json.row !== undefined)\n sheet.autoFilters.lastColumn = json.lastColumn;\n else\n throw new Error('Argument Null Exception: lastColumn cannot be null or empty');\n };\n Workbook.prototype.parserImage = function (json) {\n var image = new Image();\n if (json.image !== null && json.image !== undefined) {\n image.image = json.image;\n }\n if (json.row !== null && json.row !== undefined) {\n image.row = json.row;\n }\n if (json.column !== null && json.column !== undefined) {\n image.column = json.column;\n }\n if (json.lastRow !== null && json.lastRow !== undefined) {\n image.lastRow = json.lastRow;\n }\n if (json.lastColumn !== null && json.lastColumn !== undefined) {\n image.lastColumn = json.lastColumn;\n }\n if (json.width !== null && json.width !== undefined) {\n image.width = json.width;\n }\n if (json.height !== null && json.height !== undefined) {\n image.height = json.height;\n }\n if (json.horizontalFlip !== null && json.horizontalFlip !== undefined) {\n image.horizontalFlip = json.horizontalFlip;\n }\n if (json.verticalFlip !== null && json.verticalFlip !== undefined) {\n image.verticalFlip = json.verticalFlip;\n }\n if (json.rotation !== null && json.rotation !== undefined) {\n image.rotation = json.rotation;\n }\n return image;\n };\n /**\n * Returns a Promise with a Blob based on the specified BlobSaveType and optional encoding.\n * @param {BlobSaveType} blobSaveType - A string indicating the type of Blob to generate ('text/csv' or other).\n * @param {string} [encodingType] - The supported encoding types are \"ansi\", \"unicode\" and \"utf8\".\n */\n /* tslint:disable:no-any */\n Workbook.prototype.saveAsBlob = function (blobSaveType, encodingType) {\n var _this = this;\n switch (blobSaveType) {\n case 'text/csv':\n return new Promise(function (resolve, reject) {\n var obj = {};\n obj.blobData = _this.csvHelper.saveAsBlob(encodingType);\n resolve(obj);\n });\n default:\n return new Promise(function (resolve, reject) {\n _this.saveInternal();\n _this.mArchive.saveAsBlob().then(function (blob) {\n var obj = {};\n obj.blobData = new Blob([blob], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\n resolve(obj);\n });\n });\n }\n };\n Workbook.prototype.save = function (fileName, proxyUrl) {\n var _this = this;\n if (fileName === null || fileName === undefined || fileName === '') {\n throw new Error('Argument Null Exception: fileName cannot be null or empty');\n }\n var xlsxMatch = fileName.match('.xlsx$');\n var csvMatch = fileName.match('.csv$');\n if (xlsxMatch !== null && xlsxMatch[0] === ('.' + this.mSaveType)) {\n this.saveInternal();\n this.mArchive.save(fileName).then(function () {\n _this.mArchive.destroy();\n });\n }\n else if (csvMatch !== null && csvMatch[0] === ('.' + this.mSaveType)) {\n this.csvHelper.save(fileName);\n }\n else {\n throw Error('Save type and file extension is different.');\n }\n };\n Workbook.prototype.saveInternal = function () {\n this.saveWorkbook();\n this.saveWorksheets();\n this.saveSharedString();\n this.saveStyles();\n this.saveApp(this.builtInProperties);\n this.saveCore(this.builtInProperties);\n this.saveContentType();\n this.saveTopLevelRelation();\n this.saveWorkbookRelation();\n };\n Workbook.prototype.saveWorkbook = function () {\n /* tslint:disable-next-line:max-line-length */\n var workbookTemp = '';\n var sheets = '';\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n /* tslint:disable-next-line:max-line-length */\n var sheetName = this.worksheets[i].name;\n sheetName = sheetName.replace(\"&\", \"&\");\n sheetName = sheetName.replace(\"<\", \"<\");\n sheetName = sheetName.replace(\">\", \">\");\n sheetName = sheetName.replace(\"\\\"\", \""\");\n sheets += '';\n }\n sheets += '';\n workbookTemp += sheets;\n if (this.printTitles.size > 0) {\n var printTitle_1 = '';\n this.printTitles.forEach(function (value, key) {\n printTitle_1 += '' + value + '';\n });\n printTitle_1 += '';\n workbookTemp += printTitle_1;\n }\n this.addToArchive(workbookTemp + '', 'xl/workbook.xml');\n };\n Workbook.prototype.saveWorksheets = function () {\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n this.saveWorksheet(this.worksheets[i], i);\n }\n };\n Workbook.prototype.saveWorksheet = function (sheet, index) {\n var sheetBlob = new BlobHelper();\n /* tslint:disable-next-line:max-line-length */\n var sheetString = '';\n if (!sheet.isSummaryRowBelow) {\n sheetString += ('' + '' + '' + '');\n }\n else {\n sheetString += ('');\n }\n sheetString += this.saveSheetView(sheet);\n if (sheet.columns !== undefined) {\n var colString = '';\n for (var _i = 0, _a = sheet.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n if (column.width !== undefined) {\n colString += '';\n }\n else {\n colString += '';\n }\n }\n sheetString += (colString + '');\n }\n sheetString += ('');\n sheetBlob.append(sheetString);\n sheetString = '';\n if (sheet.rows !== undefined) {\n for (var _b = 0, _c = sheet.rows; _b < _c.length; _b++) {\n var row = _c[_b];\n var rowString = '');\n for (var _d = 0, _e = row.cells; _d < _e.length; _d++) {\n var cell = _e[_d];\n if (cell !== undefined && (cell.value !== undefined || cell.cellStyle !== undefined)) {\n rowString += ('');\n if (cell.formula !== undefined) {\n rowString += ('' + cell.formula + '');\n }\n if (cell.value !== undefined) {\n rowString += ('' + cell.value + '');\n }\n else {\n rowString += ('');\n }\n }\n }\n rowString += ('');\n sheetBlob.append(rowString);\n }\n }\n sheetString += ('');\n /* tslint:disable-next-line:max-line-length */\n if (sheet.autoFilters !== null && sheet.autoFilters !== undefined)\n sheetString += ('');\n if (sheet.mergeCells.length > 0) {\n sheetString += ('');\n for (var _f = 0, _g = sheet.mergeCells; _f < _g.length; _f++) {\n var mCell = _g[_f];\n sheetString += ('');\n }\n sheetString += ('');\n }\n if (sheet.hyperLinks.length > 0) {\n sheetString += ('');\n for (var _h = 0, _j = sheet.hyperLinks; _h < _j.length; _h++) {\n var hLink = _j[_h];\n sheetString += ('');\n }\n sheetString += ('');\n }\n /* tslint:disable-next-line:max-line-length */\n sheetString += ('');\n if (sheet.images != undefined && sheet.images.length > 0) {\n this.drawingCount++;\n this.saveDrawings(sheet, sheet.index);\n sheetString += '';\n }\n this.addToArchive(this.saveSheetRelations(sheet), ('xl/worksheets/_rels/sheet' + sheet.index + '.xml.rels'));\n sheetBlob.append(sheetString + '');\n this.addToArchive(sheetBlob.getBlob(), 'xl/worksheets' + '/sheet' + (index + 1) + '.xml');\n };\n Workbook.prototype.saveDrawings = function (sheet, index) {\n var drawings = new BlobHelper();\n /* tslint:disable-next-line:max-line-length */\n var sheetDrawingString = '';\n if (sheet.images !== undefined) {\n var imgId = 0;\n for (var _i = 0, _a = sheet.images; _i < _a.length; _i++) {\n var pic = _a[_i];\n if (pic.height !== undefined && pic.width !== undefined) {\n this.updatelastRowOffset(sheet, pic);\n this.updatelastColumnOffSet(sheet, pic);\n pic.lastRow -= 1;\n pic.lastColumn -= 1;\n }\n else if (pic.lastRow !== undefined && pic.lastColumn !== undefined) {\n pic.lastRowOffset = 0;\n pic.lastColOffset = 0;\n }\n imgId++;\n sheetDrawingString += '';\n sheetDrawingString += '';\n //col\n sheetDrawingString += pic.column - 1;\n sheetDrawingString += '';\n //colOff\n sheetDrawingString += 0;\n sheetDrawingString += '';\n //row\n sheetDrawingString += pic.row - 1;\n sheetDrawingString += '';\n //rowOff\n sheetDrawingString += 0;\n sheetDrawingString += '';\n sheetDrawingString += '';\n //col\n sheetDrawingString += pic.lastColumn;\n sheetDrawingString += '';\n //colOff\n sheetDrawingString += pic.lastColOffset;\n sheetDrawingString += '';\n //row\n sheetDrawingString += pic.lastRow;\n sheetDrawingString += '';\n //rowOff\n sheetDrawingString += pic.lastRowOffset;\n sheetDrawingString += '';\n sheetDrawingString += '';\n sheetDrawingString += '';\n sheetDrawingString += ' ';\n sheetDrawingString += ' ';\n sheetDrawingString += '';\n /* tslint:disable-next-line:max-line-length */\n sheetDrawingString += '';\n sheetDrawingString += '';\n sheetDrawingString += '';\n sheetDrawingString += '= -3600) {\n sheetDrawingString += ' rot=\"' + (pic.rotation * 60000) + '\"';\n }\n if (pic.verticalFlip != undefined && pic.verticalFlip != false) {\n sheetDrawingString += ' flipV=\"1\"';\n }\n if (pic.horizontalFlip != undefined && pic.horizontalFlip != false) {\n sheetDrawingString += ' flipH=\"1\"';\n }\n sheetDrawingString += '/>';\n sheetDrawingString += '';\n sheetDrawingString += '';\n var imageFile = new BlobHelper();\n var imageData = this.convertBase64toImage(pic.image);\n this.imageCount += 1;\n this.addToArchive(imageData, 'xl/media/image' + this.imageCount + '.png');\n }\n drawings.append(sheetDrawingString);\n drawings.append('');\n this.saveDrawingRelations(sheet);\n this.addToArchive(drawings.getBlob(), 'xl/drawings/drawing' + this.drawingCount + '.xml');\n }\n };\n Workbook.prototype.updatelastRowOffset = function (sheet, picture) {\n var iCurHeight = picture.height;\n var iCurRow = picture.row;\n var iCurOffset = 0;\n while (iCurHeight >= 0) {\n var iRowHeight = 0;\n if (sheet.rows !== undefined && sheet.rows[iCurRow - 1] !== undefined)\n iRowHeight = this.convertToPixels(sheet.rows[iCurRow - 1].height === undefined ? 15 : sheet.rows[iCurRow - 1].height);\n else\n iRowHeight = this.convertToPixels(15);\n var iSpaceInCell = iRowHeight - (iCurOffset * iRowHeight / 256);\n if (iSpaceInCell > iCurHeight) {\n picture.lastRow = iCurRow;\n picture.lastRowOffset = iCurOffset + (iCurHeight * 256 / iRowHeight);\n var rowHiddenHeight = 0;\n if (sheet.rows !== undefined && sheet.rows[iCurRow - 1] !== undefined)\n rowHiddenHeight = this.convertToPixels(sheet.rows[iCurRow - 1].height === undefined ? 15 : sheet.rows[iCurRow - 1].height);\n else\n rowHiddenHeight = this.convertToPixels(15);\n picture.lastRowOffset = (rowHiddenHeight * picture.lastRowOffset) / 256;\n picture.lastRowOffset = Math.round(picture.lastRowOffset / this.unitsProportions[7]);\n break;\n }\n else {\n iCurHeight -= iSpaceInCell;\n iCurRow++;\n iCurOffset = 0;\n }\n }\n };\n Workbook.prototype.updatelastColumnOffSet = function (sheet, picture) {\n var iCurWidth = picture.width;\n var iCurCol = picture.column;\n var iCurOffset = 0;\n while (iCurWidth >= 0) {\n var iColWidth = 0;\n if (sheet.columns !== undefined && sheet.columns[iCurCol - 1] !== undefined)\n iColWidth = this.ColumnWidthToPixels(sheet.columns[iCurCol - 1].width === undefined ? 8.43 : sheet.columns[iCurCol - 1].width);\n else\n iColWidth = this.ColumnWidthToPixels(8.43);\n var iSpaceInCell = iColWidth - (iCurOffset * iColWidth / 1024);\n if (iSpaceInCell > iCurWidth) {\n picture.lastColumn = iCurCol;\n picture.lastColOffset = iCurOffset + (iCurWidth * 1024 / iColWidth);\n var colHiddenWidth = 0;\n if (sheet.columns !== undefined && sheet.columns[iCurCol - 1] !== undefined)\n colHiddenWidth = this.ColumnWidthToPixels(sheet.columns[iCurCol - 1].width === undefined ? 8.43 : sheet.columns[iCurCol - 1].width);\n else\n colHiddenWidth = this.ColumnWidthToPixels(8.43);\n picture.lastColOffset = (colHiddenWidth * picture.lastColOffset) / 1024;\n picture.lastColOffset = Math.round(picture.lastColOffset / this.unitsProportions[7]);\n break;\n }\n else {\n iCurWidth -= iSpaceInCell;\n iCurCol++;\n iCurOffset = 0;\n }\n }\n };\n Workbook.prototype.convertToPixels = function (value) {\n return value * this.unitsProportions[6];\n };\n Workbook.prototype.convertBase64toImage = function (img) {\n var byteStr = window.atob(img);\n var buffer = new ArrayBuffer(byteStr.length);\n var data = new Uint8Array(buffer);\n for (var i = 0; i < byteStr.length; i++) {\n data[i] = byteStr.charCodeAt(i);\n }\n var blob = new Blob([data], { type: 'image/png' });\n return blob;\n };\n Workbook.prototype.saveDrawingRelations = function (sheet) {\n /* tslint:disable-next-line:max-line-length */\n var drawingRelation = '';\n var length = sheet.images.length;\n var id = this.imageCount - sheet.images.length;\n for (var i = 1; i <= length; i++) {\n id++;\n /* tslint:disable-next-line:max-line-length */\n drawingRelation += '';\n }\n this.addToArchive((drawingRelation + ''), 'xl/drawings/_rels/drawing' + this.drawingCount + '.xml.rels');\n };\n Workbook.prototype.pixelsToColumnWidth = function (pixels) {\n var dDigitWidth = 7;\n var val = (pixels > dDigitWidth + 5) ?\n this.trunc((pixels - 5) / dDigitWidth * 100 + 0.5) / 100 :\n pixels / (dDigitWidth + 5);\n return (val > 1) ?\n ((val * dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0 :\n (val * (dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0;\n };\n Workbook.prototype.ColumnWidthToPixels = function (val) {\n var dDigitWidth = 7;\n var fileWidth = (val > 1) ?\n ((val * dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0 :\n (val * (dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0;\n return this.trunc(((256 * fileWidth + this.trunc(128 / dDigitWidth)) / 256) * dDigitWidth);\n };\n Workbook.prototype.trunc = function (x) {\n var n = x - x % 1;\n return n === 0 && (x < 0 || (x === 0 && (1 / x !== 1 / 0))) ? -0 : n;\n };\n Workbook.prototype.pixelsToRowHeight = function (pixels) {\n return (pixels * this.unitsProportions[5] / this.unitsProportions[6]);\n };\n Workbook.prototype.saveSheetRelations = function (sheet) {\n /* tslint:disable-next-line:max-line-length */\n var relStr = '';\n for (var _i = 0, _a = sheet.hyperLinks; _i < _a.length; _i++) {\n var hLink = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n relStr += '';\n }\n if (sheet.images != undefined && sheet.images.length > 0) {\n /* tslint:disable-next-line:max-line-length */\n relStr += '';\n }\n relStr += '';\n return relStr;\n };\n Workbook.prototype.saveSheetView = function (sheet) {\n var paneString = ' 0) {\n /* tslint:disable-next-line:max-line-length */\n var sstStart = '';\n var si = '';\n for (var i = 0; i < length; i++) {\n if (this.sharedString[i].indexOf('') !== 0) {\n si += '';\n si += this.processString(this.sharedString[i]);\n si += '';\n }\n else {\n si += '';\n si += this.sharedString[i];\n si += '';\n }\n }\n si += '';\n this.addToArchive(sstStart + si, 'xl/sharedStrings.xml');\n }\n };\n Workbook.prototype.processString = function (value) {\n if (typeof value == \"string\") {\n if (value.indexOf('&') !== -1) {\n value = value.replace(/&/g, '&');\n }\n if (value.indexOf('<') !== -1) {\n value = value.replace(/') !== -1) {\n value = value.replace(/>/g, '>');\n }\n if (value.indexOf('\\v') !== -1) {\n value = value.replace(/\\v/g, '_x000B_');\n }\n }\n else if (typeof value == \"object\") {\n for (var i = 0; i < value.length; i++) {\n if (value[i].indexOf('&') !== -1) {\n value[i] = value[i].replace(/&/g, '&');\n }\n if (value[i].indexOf('<') !== -1) {\n value[i] = value[i].replace(/') !== -1) {\n value[i] = value[i].replace(/>/g, '>');\n }\n if (value[i].indexOf('\\v') !== -1) {\n value[i] = value[i].replace(/\\v/g, '_x000B_');\n }\n }\n }\n return value;\n };\n Workbook.prototype.saveStyles = function () {\n this.updateCellXfsStyleXfs();\n /* tslint:disable-next-line:max-line-length */\n var styleTemp = '';\n styleTemp += this.saveNumberFormats();\n styleTemp += this.saveFonts();\n styleTemp += this.saveFills();\n styleTemp += this.saveBorders();\n styleTemp += this.saveCellStyleXfs();\n styleTemp += this.saveCellXfs();\n styleTemp += this.saveCellStyles();\n this.addToArchive(styleTemp + '', 'xl/styles.xml');\n };\n Workbook.prototype.updateCellXfsStyleXfs = function () {\n for (var _i = 0, _a = this.mStyles; _i < _a.length; _i++) {\n var style = _a[_i];\n var cellXfs = undefined;\n if (style.isGlobalStyle) {\n cellXfs = new CellStyleXfs();\n cellXfs.xfId = (style.index - 1);\n }\n else {\n cellXfs = new CellXfs();\n cellXfs.xfId = 0;\n }\n //Add font\n var compareFontResult = this.isNewFont(style);\n if (!compareFontResult.result) {\n var font = new Font();\n font.b = style.bold;\n font.i = style.italic;\n font.name = style.fontName;\n font.sz = style.fontSize;\n font.u = style.underline;\n font.strike = style.strikeThrough;\n font.color = ('FF' + style.fontColor.replace('#', ''));\n this.mFonts.push(font);\n cellXfs.fontId = this.mFonts.length - 1;\n }\n else {\n cellXfs.fontId = compareFontResult.index;\n }\n //Add fill\n if (style.backColor !== 'none') {\n var backColor = 'FF' + style.backColor.replace('#', '');\n if (this.mFills.has(backColor)) {\n var fillId = this.mFills.get(backColor);\n cellXfs.fillId = fillId;\n }\n else {\n var fillId = this.mFills.size + 2;\n this.mFills.set(backColor, fillId);\n cellXfs.fillId = (fillId);\n }\n }\n else {\n cellXfs.fillId = 0;\n }\n //Add border \n if (!this.isNewBorder(style)) {\n this.mBorders.push(style.borders);\n cellXfs.borderId = this.mBorders.length;\n }\n else {\n cellXfs.borderId = 0;\n }\n //Add Number Format \n if (style.numberFormat !== 'GENERAL') {\n if (this.mNumFmt.has(style.numberFormat)) {\n var numFmt = this.mNumFmt.get(style.numberFormat);\n cellXfs.numFmtId = numFmt.numFmtId;\n }\n else {\n var id = this.mNumFmt.size + 164;\n this.mNumFmt.set(style.numberFormat, new NumFmt(id, style.numberFormat));\n cellXfs.numFmtId = id;\n }\n }\n else {\n if (style.numberFormat === 'GENERAL' && style.numFmtId === 14) {\n cellXfs.numFmtId = 14;\n }\n else {\n cellXfs.numFmtId = 0;\n }\n }\n //Add alignment \n if (!style.isGlobalStyle) {\n cellXfs.applyAlignment = 1;\n }\n cellXfs.alignment = new Alignment();\n cellXfs.alignment.indent = style.indent;\n cellXfs.alignment.horizontal = style.hAlign;\n cellXfs.alignment.vertical = style.vAlign;\n cellXfs.alignment.wrapText = style.wrapText ? 1 : 0;\n cellXfs.alignment.rotation = style.rotation;\n if (style.isGlobalStyle) {\n this.mCellStyleXfs.push(cellXfs);\n this.mCellXfs.push(cellXfs);\n }\n else {\n //Add cellxfs\n this.mCellXfs.push(cellXfs);\n }\n }\n };\n Workbook.prototype.saveNumberFormats = function () {\n if (this.mNumFmt.size >= 1) {\n var numFmtStyle_1 = '';\n this.mNumFmt.forEach(function (value, key) {\n numFmtStyle_1 += '';\n });\n return (numFmtStyle_1 += '');\n }\n else {\n return '';\n }\n };\n Workbook.prototype.saveFonts = function () {\n /* tslint:disable-next-line:max-line-length */\n var fontStyle = '';\n if (this.mFonts.length >= 1) {\n for (var _i = 0, _a = this.mFonts; _i < _a.length; _i++) {\n var font = _a[_i];\n fontStyle += '';\n if (font.b) {\n fontStyle += '';\n }\n if (font.i) {\n fontStyle += '';\n }\n if (font.u) {\n fontStyle += '';\n }\n if (font.strike) {\n fontStyle += '';\n }\n fontStyle += '';\n fontStyle += '';\n fontStyle += '';\n }\n }\n return fontStyle + '';\n };\n Workbook.prototype.saveFills = function () {\n /* tslint:disable-next-line:max-line-length */\n var fillsStyle = '';\n if (this.mFills.size >= 1) {\n this.mFills.forEach(function (value, key) {\n /* tslint:disable-next-line:max-line-length */\n fillsStyle += '';\n });\n }\n return fillsStyle + '';\n };\n Workbook.prototype.saveBorders = function () {\n /* tslint:disable-next-line:max-line-length */\n var bordersStyle = '';\n if (this.mBorders.length >= 1) {\n for (var _i = 0, _a = this.mBorders; _i < _a.length; _i++) {\n var borders = _a[_i];\n if (this.isAllBorder(borders)) {\n var color = borders.all.color.replace('#', '');\n var lineStyle = borders.all.lineStyle;\n /* tslint:disable-next-line:max-line-length */\n bordersStyle += '';\n }\n else {\n /* tslint:disable-next-line:max-line-length */\n bordersStyle += '';\n }\n }\n }\n return bordersStyle + '';\n };\n Workbook.prototype.saveCellStyles = function () {\n var _this = this;\n var cellStyleString = '';\n this.cellStyles.forEach(function (value, key) {\n cellStyleString += '';\n if (this.mCellStyleXfs.length >= 1) {\n for (var _i = 0, _a = this.mCellStyleXfs; _i < _a.length; _i++) {\n var cellStyleXf = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n cellXfsStyle += '';\n }\n else {\n cellXfsStyle += ' />';\n }\n }\n }\n return cellXfsStyle + '';\n };\n Workbook.prototype.saveCellXfs = function () {\n /* tslint:disable-next-line:max-line-length */\n var cellXfsStyle = '';\n if (this.mCellXfs.length >= 1) {\n for (var _i = 0, _a = this.mCellXfs; _i < _a.length; _i++) {\n var cellXf = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n cellXfsStyle += '';\n }\n }\n return cellXfsStyle + '';\n };\n Workbook.prototype.saveAlignment = function (cellXf) {\n var alignString = '';\n return alignString;\n };\n Workbook.prototype.saveApp = function (builtInProperties) {\n /* tslint:disable-next-line:max-line-length */\n var appString = 'Essential XlsIO';\n if (builtInProperties !== undefined) {\n if (builtInProperties.manager !== undefined) {\n appString += '' + builtInProperties.manager + '';\n }\n if (builtInProperties.company !== undefined) {\n appString += '' + builtInProperties.company + '';\n }\n }\n this.addToArchive((appString + ''), 'docProps/app.xml');\n };\n Workbook.prototype.saveCore = function (builtInProperties) {\n var createdDate = new Date();\n /* tslint:disable-next-line:max-line-length */\n var coreString = '';\n if (this.builtInProperties !== undefined) {\n if (builtInProperties.author !== undefined) {\n coreString += '' + builtInProperties.author + '';\n }\n if (builtInProperties.subject !== undefined) {\n coreString += '' + builtInProperties.subject + '';\n }\n if (builtInProperties.category !== undefined) {\n coreString += '' + builtInProperties.category + '';\n }\n if (builtInProperties.comments !== undefined) {\n coreString += '' + builtInProperties.comments + '';\n }\n if (builtInProperties.title !== undefined) {\n coreString += '' + builtInProperties.title + '';\n }\n if (builtInProperties.tags !== undefined) {\n coreString += '' + builtInProperties.tags + '';\n }\n if (builtInProperties.status !== undefined) {\n coreString += '' + builtInProperties.status + '';\n }\n if (builtInProperties.createdDate !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n coreString += '' + builtInProperties.createdDate.toISOString() + '';\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n }\n if (builtInProperties.modifiedDate !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n coreString += '' + builtInProperties.modifiedDate.toISOString() + '';\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n }\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n coreString += '' + createdDate.toISOString() + '';\n }\n /* tslint:disable-next-line:max-line-length */\n coreString += '';\n this.addToArchive(coreString, 'docProps/core.xml');\n };\n Workbook.prototype.saveTopLevelRelation = function () {\n /* tslint:disable-next-line:max-line-length */\n var topRelation = '';\n this.addToArchive(topRelation, '_rels/.rels');\n };\n Workbook.prototype.saveWorkbookRelation = function () {\n /* tslint:disable-next-line:max-line-length */\n var wbRelation = '';\n var length = this.worksheets.length;\n var count = 0;\n for (var i = 0; i < length; i++, count++) {\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n }\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n if (this.sharedStringCount > 0) {\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n }\n this.addToArchive((wbRelation + ''), 'xl/_rels/workbook.xml.rels');\n };\n Workbook.prototype.saveContentType = function () {\n /* tslint:disable-next-line:max-line-length */\n var contentTypeString = '';\n var sheetsOverride = '';\n var length = this.worksheets.length;\n var drawingIndex = 0;\n for (var i = 0; i < length; i++) {\n /* tslint:disable-next-line:max-line-length */\n sheetsOverride += '';\n if (this.worksheets[i].images != undefined && this.worksheets[i].images.length > 0) {\n drawingIndex++;\n /* tslint:disable-next-line:max-line-length */\n sheetsOverride += '';\n }\n }\n if (this.imageCount > 0)\n sheetsOverride += '';\n if (this.sharedStringCount > 0) {\n /* tslint:disable-next-line:max-line-length */\n contentTypeString += '';\n }\n this.addToArchive((contentTypeString + sheetsOverride + ''), '[Content_Types].xml');\n };\n Workbook.prototype.addToArchive = function (xmlString, itemName) {\n if (typeof (xmlString) === 'string') {\n var blob = new Blob([xmlString], { type: 'text/plain' });\n var archiveItem = new ZipArchiveItem(blob, itemName);\n this.mArchive.addItem(archiveItem);\n }\n else {\n var archiveItem = new ZipArchiveItem(xmlString, itemName);\n this.mArchive.addItem(archiveItem);\n }\n };\n Workbook.prototype.processMergeCells = function (cell, rowIndex, mergeCells) {\n if (cell.rowSpan !== 0 || cell.colSpan !== 0) {\n var mCell = new MergeCell();\n mCell.x = cell.index;\n mCell.width = cell.colSpan;\n mCell.y = rowIndex;\n mCell.height = cell.rowSpan;\n var startCell = this.getCellName(mCell.y, mCell.x);\n var endCell = this.getCellName(rowIndex + mCell.height, cell.index + mCell.width);\n mCell.ref = startCell + ':' + endCell;\n var mergedCell = mergeCells.add(mCell);\n var start = { x: mCell.x, y: mCell.y };\n var end = {\n x: (cell.index + mCell.width), y: (rowIndex + mCell.height)\n };\n this.updatedMergedCellStyles(start, end, cell);\n }\n return mergeCells;\n };\n Workbook.prototype.updatedMergedCellStyles = function (sCell, eCell, cell) {\n for (var x = sCell.x; x <= eCell.x; x++) {\n for (var y = sCell.y; y <= eCell.y; y++) {\n this.mergedCellsStyle.set(this.getCellName(y, x), { x: x, y: y, styleIndex: cell.styleIndex });\n }\n }\n };\n /**\n * Returns the tick count corresponding to the given year, month, and day.\n * @param year number value of year\n * @param month number value of month\n * @param day number value of day\n */\n Workbook.prototype.dateToTicks = function (year, month, day) {\n var ticksPerDay = 10000 * 1000 * 60 * 60 * 24;\n var daysToMonth365 = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];\n var daysToMonth366 = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366];\n if (year >= 1 && year <= 9999 && month >= 1 && month <= 12) {\n var days = this.isLeapYear(year) ? daysToMonth366 : daysToMonth365;\n var y = year - 1;\n var n = y * 365 + ((y / 4) | 0) - ((y / 100) | 0) + ((y / 400) | 0) + days[month - 1] + day - 1;\n return n * ticksPerDay;\n }\n throw new Error('Not a valid date');\n };\n /**\n * Return the tick count corresponding to the given hour, minute, second.\n * @param hour number value of hour\n * @param minute number value if minute\n * @param second number value of second\n */\n Workbook.prototype.timeToTicks = function (hour, minute, second) {\n if (hour >= 0 && hour < 24 && minute >= 0 && minute < 60 && second >= 0 && second < 60) {\n var totalSeconds = hour * 3600 + minute * 60 + second;\n return totalSeconds * 10000 * 1000;\n }\n throw new Error('Not valid time');\n };\n /**\n * Checks if given year is a leap year.\n * @param year Year value.\n */\n Workbook.prototype.isLeapYear = function (year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n };\n /**\n * Converts `DateTime` to the equivalent OLE Automation date.\n */\n Workbook.prototype.toOADate = function (date) {\n var ticks = 0;\n /* tslint:disable-next-line:max-line-length */\n ticks = this.dateToTicks(date.getFullYear(), (date.getMonth() + 1), date.getDate()) + this.timeToTicks(date.getHours(), date.getMinutes(), date.getSeconds());\n if (ticks === 0) {\n return 0.0;\n }\n var ticksPerDay = 10000 * 1000 * 60 * 60 * 24;\n var daysTo1899 = (((365 * 4 + 1) * 25 - 1) * 4 + 1) * 4 + ((365 * 4 + 1) * 25 - 1) * 3 - 367;\n var doubleDateOffset = daysTo1899 * ticksPerDay;\n var oaDateMinAsTicks = (((365 * 4 + 1) * 25 - 1) - 365) * ticksPerDay;\n if (ticks < oaDateMinAsTicks) {\n throw new Error('Arg_OleAutDateInvalid');\n }\n var millisPerDay = 1000 * 60 * 60 * 24;\n return ((ticks - doubleDateOffset) / 10000) / millisPerDay;\n };\n return Workbook;\n}());\nexport { Workbook };\n/**\n * BuiltInProperties Class\n * @private\n */\nvar BuiltInProperties = /** @class */ (function () {\n function BuiltInProperties() {\n }\n return BuiltInProperties;\n}());\nexport { BuiltInProperties };\n","/**\n * AriaService\n *\n * @hidden\n */\nvar AriaService = /** @class */ (function () {\n function AriaService() {\n }\n AriaService.prototype.setOptions = function (target, options) {\n var props = Object.keys(options);\n for (var i = 0; i < props.length; i++) {\n setStateAndProperties(target, config[props[parseInt(i.toString(), 10)]], options[props[parseInt(i.toString(), 10)]]);\n }\n };\n AriaService.prototype.setExpand = function (target, expand) {\n setStateAndProperties(target, config.expand, expand);\n };\n AriaService.prototype.setSort = function (target, direction) {\n setStateAndProperties(target, config.sort, direction, typeof direction === 'boolean');\n };\n AriaService.prototype.setBusy = function (target, isBusy) {\n setStateAndProperties(target, config.busy, isBusy);\n setStateAndProperties(target, config.invalid, null, true);\n };\n AriaService.prototype.setGrabbed = function (target, isGrabbed, remove) {\n setStateAndProperties(target, config.grabbed, isGrabbed, remove);\n };\n AriaService.prototype.setDropTarget = function (target, isTarget) {\n setStateAndProperties(target, config.dropeffect, 'copy', !isTarget);\n };\n return AriaService;\n}());\nexport { AriaService };\n/**\n * @param {HTMLElement} target - specifies the target\n * @param {string} attribute - specifies the attribute\n * @param {ValueType} value - specifies the value\n * @param {boolean} remove - specifies the boolean for remove\n * @returns {void}\n * @hidden\n */\nfunction setStateAndProperties(target, attribute, value, remove) {\n if (remove && target) {\n target.removeAttribute(attribute);\n return;\n }\n if (target) {\n target.setAttribute(attribute, value);\n }\n}\nvar config = {\n expand: 'aria-expanded',\n role: 'role',\n datarole: 'data-role',\n selected: 'aria-selected',\n multiselectable: 'aria-multiselectable',\n sort: 'aria-sort',\n busy: 'aria-busy',\n invalid: 'aria-invalid',\n grabbed: 'aria-grabbed',\n dropeffect: 'aria-dropeffect',\n haspopup: 'aria-haspopup',\n level: 'aria-level',\n colcount: 'aria-colcount',\n rowcount: 'aria-rowcount'\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Component, EventHandler, Property, Event } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, isVisible, closest, attributes, detach, classList, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { selectAll, setStyleAttribute as setStyle, select } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, getUniqueID, formatUnit, Collection, compile as templateCompiler } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, Browser, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { calculatePosition } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { HScroll } from '../common/h-scroll';\nimport { VScroll } from '../common/v-scroll';\nvar CLS_VERTICAL = 'e-vertical';\nvar CLS_ITEMS = 'e-toolbar-items';\nvar CLS_ITEM = 'e-toolbar-item';\nvar CLS_RTL = 'e-rtl';\nvar CLS_SEPARATOR = 'e-separator';\nvar CLS_POPUPICON = 'e-popup-up-icon';\nvar CLS_POPUPDOWN = 'e-popup-down-icon';\nvar CLS_POPUPOPEN = 'e-popup-open';\nvar CLS_TEMPLATE = 'e-template';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_POPUPTEXT = 'e-toolbar-text';\nvar CLS_TBARTEXT = 'e-popup-text';\nvar CLS_TBAROVERFLOW = 'e-overflow-show';\nvar CLS_POPOVERFLOW = 'e-overflow-hide';\nvar CLS_TBARBTN = 'e-tbar-btn';\nvar CLS_TBARNAV = 'e-hor-nav';\nvar CLS_TBARSCRLNAV = 'e-scroll-nav';\nvar CLS_TBARRIGHT = 'e-toolbar-right';\nvar CLS_TBARLEFT = 'e-toolbar-left';\nvar CLS_TBARCENTER = 'e-toolbar-center';\nvar CLS_TBARPOS = 'e-tbar-pos';\nvar CLS_HSCROLLCNT = 'e-hscroll-content';\nvar CLS_VSCROLLCNT = 'e-vscroll-content';\nvar CLS_HSCROLLBAR = 'e-hscroll-bar';\nvar CLS_POPUPNAV = 'e-hor-nav';\nvar CLS_POPUPCLASS = 'e-toolbar-pop';\nvar CLS_POPUP = 'e-toolbar-popup';\nvar CLS_TBARBTNTEXT = 'e-tbar-btn-text';\nvar CLS_TBARNAVACT = 'e-nav-active';\nvar CLS_TBARIGNORE = 'e-ignore';\nvar CLS_POPPRI = 'e-popup-alone';\nvar CLS_HIDDEN = 'e-hidden';\nvar CLS_MULTIROW = 'e-toolbar-multirow';\nvar CLS_MULTIROWPOS = 'e-multirow-pos';\nvar CLS_MULTIROW_SEPARATOR = 'e-multirow-separator';\nvar CLS_EXTENDABLE_SEPARATOR = 'e-extended-separator';\nvar CLS_EXTEANDABLE_TOOLBAR = 'e-extended-toolbar';\nvar CLS_EXTENDABLECLASS = 'e-toolbar-extended';\nvar CLS_EXTENDPOPUP = 'e-expended-nav';\nvar CLS_EXTENDEDPOPOPEN = 'e-tbar-extended';\n/**\n * An item object that is used to configure Toolbar commands.\n */\nvar Item = /** @class */ (function (_super) {\n __extends(Item, _super);\n function Item() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Item.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"text\", void 0);\n __decorate([\n Property('auto')\n ], Item.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Item.prototype, \"showAlwaysInPopup\", void 0);\n __decorate([\n Property(false)\n ], Item.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"prefixIcon\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"suffixIcon\", void 0);\n __decorate([\n Property(true)\n ], Item.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], Item.prototype, \"overflow\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"template\", void 0);\n __decorate([\n Property('Button')\n ], Item.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], Item.prototype, \"showTextOn\", void 0);\n __decorate([\n Property(null)\n ], Item.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"tooltipText\", void 0);\n __decorate([\n Property('Left')\n ], Item.prototype, \"align\", void 0);\n __decorate([\n Event()\n ], Item.prototype, \"click\", void 0);\n __decorate([\n Property(-1)\n ], Item.prototype, \"tabIndex\", void 0);\n return Item;\n}(ChildProperty));\nexport { Item };\n/**\n * The Toolbar control contains a group of commands that are aligned horizontally.\n * ```html\n *
\n * \n * ```\n */\nvar Toolbar = /** @class */ (function (_super) {\n __extends(Toolbar, _super);\n /**\n * Initializes a new instance of the Toolbar class.\n *\n * @param {ToolbarModel} options - Specifies Toolbar model properties as options.\n * @param { string | HTMLElement} element - Specifies the element that is rendered as a Toolbar.\n */\n function Toolbar(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.resizeContext = _this.resize.bind(_this);\n _this.orientationChangeContext = _this.orientationChange.bind(_this);\n /**\n * Contains the keyboard configuration of the Toolbar.\n */\n _this.keyConfigs = {\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n moveDown: 'downarrow',\n popupOpen: 'enter',\n popupClose: 'escape',\n tab: 'tab',\n home: 'home',\n end: 'end'\n };\n return _this;\n }\n /**\n * Removes the control from the DOM and also removes all its related events.\n *\n * @returns {void}.\n */\n Toolbar.prototype.destroy = function () {\n var _this = this;\n if (this.isReact || this.isAngular) {\n this.clearTemplate();\n }\n var btnItems = this.element.querySelectorAll('.e-control.e-btn');\n [].slice.call(btnItems).forEach(function (el) {\n if (!isNOU(el) && !isNOU(el.ej2_instances) && !isNOU(el.ej2_instances[0]) && !(el.ej2_instances[0].isDestroyed)) {\n el.ej2_instances[0].destroy();\n }\n });\n this.unwireEvents();\n this.tempId.forEach(function (ele) {\n if (!isNOU(_this.element.querySelector(ele))) {\n document.body.appendChild(_this.element.querySelector(ele)).style.display = 'none';\n }\n });\n this.destroyItems();\n while (this.element.lastElementChild) {\n this.element.removeChild(this.element.lastElementChild);\n }\n if (this.trgtEle) {\n this.element.appendChild(this.ctrlTem);\n this.trgtEle = null;\n this.ctrlTem = null;\n }\n if (this.popObj) {\n this.popObj.destroy();\n detach(this.popObj.element);\n }\n if (this.activeEle) {\n this.activeEle = null;\n }\n this.popObj = null;\n this.tbarAlign = null;\n this.tbarItemsCol = [];\n this.remove(this.element, 'e-toolpop');\n if (this.cssClass) {\n removeClass([this.element], this.cssClass.split(' '));\n }\n this.element.removeAttribute('style');\n ['aria-disabled', 'aria-orientation', 'role'].forEach(function (attrb) {\n return _this.element.removeAttribute(attrb);\n });\n _super.prototype.destroy.call(this);\n };\n /**\n * Initialize the event handler\n *\n * @private\n * @returns {void}\n */\n Toolbar.prototype.preRender = function () {\n var eventArgs = { enableCollision: this.enableCollision, scrollStep: this.scrollStep };\n this.trigger('beforeCreate', eventArgs);\n this.enableCollision = eventArgs.enableCollision;\n this.scrollStep = eventArgs.scrollStep;\n this.scrollModule = null;\n this.popObj = null;\n this.tempId = [];\n this.tbarItemsCol = this.items;\n this.isVertical = this.element.classList.contains(CLS_VERTICAL) ? true : false;\n this.isExtendedOpen = false;\n this.popupPriCount = 0;\n if (this.enableRtl) {\n this.add(this.element, CLS_RTL);\n }\n };\n Toolbar.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n window.addEventListener('resize', this.resizeContext);\n window.addEventListener('orientationchange', this.orientationChangeContext);\n if (this.allowKeyboard) {\n this.wireKeyboardEvent();\n }\n };\n Toolbar.prototype.wireKeyboardEvent = function () {\n this.keyModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs\n });\n EventHandler.add(this.element, 'keydown', this.docKeyDown, this);\n this.updateTabIndex('0');\n };\n Toolbar.prototype.updateTabIndex = function (tabIndex) {\n var ele = this.element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_DISABLE + ' ):not(.' + CLS_SEPARATOR + ' ):not(.' + CLS_HIDDEN + ' )');\n if (!isNOU(ele) && !isNOU(ele.firstElementChild)) {\n var dataTabIndex = ele.firstElementChild.getAttribute('data-tabindex');\n if (dataTabIndex && dataTabIndex === '-1' && ele.firstElementChild.tagName !== 'INPUT') {\n ele.firstElementChild.setAttribute('tabindex', tabIndex);\n }\n }\n };\n Toolbar.prototype.unwireKeyboardEvent = function () {\n if (this.keyModule) {\n EventHandler.remove(this.element, 'keydown', this.docKeyDown);\n this.keyModule.destroy();\n this.keyModule = null;\n }\n };\n Toolbar.prototype.docKeyDown = function (e) {\n if (e.target.tagName === 'INPUT') {\n return;\n }\n var popCheck = !isNOU(this.popObj) && isVisible(this.popObj.element) && this.overflowMode !== 'Extended';\n if (e.keyCode === 9 && e.target.classList.contains('e-hor-nav') === true && popCheck) {\n this.popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n var keyCheck = (e.keyCode === 40 || e.keyCode === 38 || e.keyCode === 35 || e.keyCode === 36);\n if (keyCheck) {\n e.preventDefault();\n }\n };\n Toolbar.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n this.destroyScroll();\n this.unwireKeyboardEvent();\n window.removeEventListener('resize', this.resizeContext);\n window.removeEventListener('orientationchange', this.orientationChangeContext);\n EventHandler.remove(document, 'scroll', this.docEvent);\n EventHandler.remove(document, 'click', this.docEvent);\n };\n Toolbar.prototype.clearProperty = function () {\n this.tbarEle = [];\n this.tbarAlgEle = { lefts: [], centers: [], rights: [] };\n };\n Toolbar.prototype.docEvent = function (e) {\n var popEle = closest(e.target, '.e-popup');\n if (this.popObj && isVisible(this.popObj.element) && !popEle && this.overflowMode === 'Popup') {\n this.popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n };\n Toolbar.prototype.destroyScroll = function () {\n if (this.scrollModule) {\n if (this.tbarAlign) {\n this.add(this.scrollModule.element, CLS_TBARPOS);\n }\n this.scrollModule.destroy();\n this.scrollModule = null;\n }\n };\n Toolbar.prototype.destroyItems = function () {\n if (this.element) {\n [].slice.call(this.element.querySelectorAll('.' + CLS_ITEM)).forEach(function (el) { detach(el); });\n }\n if (this.tbarAlign) {\n var tbarItems = this.element.querySelector('.' + CLS_ITEMS);\n [].slice.call(tbarItems.children).forEach(function (el) {\n detach(el);\n });\n this.tbarAlign = false;\n this.remove(tbarItems, CLS_TBARPOS);\n }\n this.clearProperty();\n };\n Toolbar.prototype.destroyMode = function () {\n if (this.scrollModule) {\n this.remove(this.scrollModule.element, CLS_RTL);\n this.destroyScroll();\n }\n this.remove(this.element, CLS_EXTENDEDPOPOPEN);\n this.remove(this.element, CLS_EXTEANDABLE_TOOLBAR);\n var tempEle = this.element.querySelector('.e-toolbar-multirow');\n if (tempEle) {\n this.remove(tempEle, CLS_MULTIROW);\n }\n if (this.popObj) {\n this.popupRefresh(this.popObj.element, true);\n }\n };\n Toolbar.prototype.add = function (ele, val) {\n ele.classList.add(val);\n };\n Toolbar.prototype.remove = function (ele, val) {\n ele.classList.remove(val);\n };\n Toolbar.prototype.elementFocus = function (ele) {\n var fChild = ele.firstElementChild;\n if (fChild) {\n fChild.focus();\n this.activeEleSwitch(ele);\n }\n else {\n ele.focus();\n }\n };\n Toolbar.prototype.clstElement = function (tbrNavChk, trgt) {\n var clst;\n if (tbrNavChk && this.popObj && isVisible(this.popObj.element)) {\n clst = this.popObj.element.querySelector('.' + CLS_ITEM);\n }\n else if (this.element === trgt || tbrNavChk) {\n clst = this.element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_DISABLE + ' ):not(.' + CLS_SEPARATOR + ' ):not(.' + CLS_HIDDEN + ' )');\n }\n else {\n clst = closest(trgt, '.' + CLS_ITEM);\n }\n return clst;\n };\n Toolbar.prototype.keyHandling = function (clst, e, trgt, navChk, scrollChk) {\n var popObj = this.popObj;\n var rootEle = this.element;\n var popAnimate = { name: 'FadeOut', duration: 100 };\n var value = e.action === 'moveUp' ? 'previous' : 'next';\n var ele;\n var nodes;\n switch (e.action) {\n case 'moveRight':\n if (this.isVertical) {\n return;\n }\n if (rootEle === trgt) {\n this.elementFocus(clst);\n }\n else if (!navChk) {\n this.eleFocus(clst, 'next');\n }\n break;\n case 'moveLeft':\n if (this.isVertical) {\n return;\n }\n if (!navChk) {\n this.eleFocus(clst, 'previous');\n }\n break;\n case 'home':\n case 'end':\n if (clst) {\n var popupCheck = closest(clst, '.e-popup');\n var extendedPopup = this.element.querySelector('.' + CLS_EXTENDABLECLASS);\n if (this.overflowMode === 'Extended' && extendedPopup && extendedPopup.classList.contains('e-popup-open')) {\n popupCheck = e.action === 'end' ? extendedPopup : null;\n }\n if (popupCheck) {\n if (isVisible(this.popObj.element)) {\n nodes = [].slice.call(popupCheck.children);\n if (e.action === 'home') {\n ele = this.focusFirstVisibleEle(nodes);\n }\n else {\n ele = this.focusLastVisibleEle(nodes);\n }\n }\n }\n else {\n nodes = this.element.querySelectorAll('.' + CLS_ITEMS + ' .' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + ')');\n if (e.action === 'home') {\n ele = this.focusFirstVisibleEle(nodes);\n }\n else {\n ele = this.focusLastVisibleEle(nodes);\n }\n }\n if (ele) {\n this.elementFocus(ele);\n }\n }\n break;\n case 'moveUp':\n case 'moveDown':\n if (!this.isVertical) {\n if (popObj && closest(trgt, '.e-popup')) {\n var popEle = popObj.element;\n var popFrstEle = popEle.firstElementChild;\n if ((value === 'previous' && popFrstEle === clst)) {\n popEle.lastElementChild.firstChild.focus();\n }\n else if (value === 'next' && popEle.lastElementChild === clst) {\n popFrstEle.firstChild.focus();\n }\n else {\n this.eleFocus(clst, value);\n }\n }\n else if (e.action === 'moveDown' && popObj && isVisible(popObj.element)) {\n this.elementFocus(clst);\n }\n }\n else {\n if (e.action === 'moveUp') {\n this.eleFocus(clst, 'previous');\n }\n else {\n this.eleFocus(clst, 'next');\n }\n }\n break;\n case 'tab':\n if (!scrollChk && !navChk) {\n var ele_1 = clst.firstElementChild;\n if (rootEle === trgt) {\n if (this.activeEle) {\n this.activeEle.focus();\n }\n else {\n this.activeEleRemove(ele_1);\n ele_1.focus();\n }\n }\n }\n break;\n case 'popupClose':\n if (popObj && this.overflowMode !== 'Extended') {\n popObj.hide(popAnimate);\n }\n break;\n case 'popupOpen':\n if (!navChk) {\n return;\n }\n if (popObj && !isVisible(popObj.element)) {\n popObj.element.style.top = rootEle.offsetHeight + 'px';\n popObj.show({ name: 'FadeIn', duration: 100 });\n }\n else {\n popObj.hide(popAnimate);\n }\n break;\n }\n };\n Toolbar.prototype.keyActionHandler = function (e) {\n var trgt = e.target;\n if (trgt.tagName === 'INPUT' || trgt.tagName === 'TEXTAREA' || this.element.classList.contains(CLS_DISABLE)) {\n return;\n }\n e.preventDefault();\n var tbrNavChk = trgt.classList.contains(CLS_TBARNAV);\n var tbarScrollChk = trgt.classList.contains(CLS_TBARSCRLNAV);\n var clst = this.clstElement(tbrNavChk, trgt);\n if (clst || tbarScrollChk) {\n this.keyHandling(clst, e, trgt, tbrNavChk, tbarScrollChk);\n }\n };\n /**\n * Specifies the value to disable/enable the Toolbar component.\n * When set to `true`, the component will be disabled.\n *\n * @param {boolean} value - Based on this Boolean value, Toolbar will be enabled (false) or disabled (true).\n * @returns {void}.\n */\n Toolbar.prototype.disable = function (value) {\n var rootEle = this.element;\n if (value) {\n rootEle.classList.add(CLS_DISABLE);\n }\n else {\n rootEle.classList.remove(CLS_DISABLE);\n }\n if (this.activeEle) {\n this.activeEle.setAttribute('tabindex', this.activeEle.getAttribute('data-tabindex'));\n }\n if (this.scrollModule) {\n this.scrollModule.disable(value);\n }\n if (this.popObj) {\n if (isVisible(this.popObj.element) && this.overflowMode !== 'Extended') {\n this.popObj.hide();\n }\n rootEle.querySelector('#' + rootEle.id + '_nav').setAttribute('tabindex', !value ? '0' : '-1');\n }\n };\n Toolbar.prototype.eleContains = function (el) {\n return el.classList.contains(CLS_SEPARATOR) || el.classList.contains(CLS_DISABLE) || el.getAttribute('disabled') || el.classList.contains(CLS_HIDDEN) || !isVisible(el) || !el.classList.contains(CLS_ITEM);\n };\n Toolbar.prototype.focusFirstVisibleEle = function (nodes) {\n var element;\n var index = 0;\n while (index < nodes.length) {\n var ele = nodes[parseInt(index.toString(), 10)];\n if (!ele.classList.contains(CLS_HIDDEN) && !ele.classList.contains(CLS_DISABLE)) {\n return ele;\n }\n index++;\n }\n return element;\n };\n Toolbar.prototype.focusLastVisibleEle = function (nodes) {\n var element;\n var index = nodes.length - 1;\n while (index >= 0) {\n var ele = nodes[parseInt(index.toString(), 10)];\n if (!ele.classList.contains(CLS_HIDDEN) && !ele.classList.contains(CLS_DISABLE)) {\n return ele;\n }\n index--;\n }\n return element;\n };\n Toolbar.prototype.eleFocus = function (closest, pos) {\n var sib = Object(closest)[pos + 'ElementSibling'];\n if (sib) {\n var skipEle = this.eleContains(sib);\n if (skipEle) {\n this.eleFocus(sib, pos);\n return;\n }\n this.elementFocus(sib);\n }\n else if (this.tbarAlign) {\n var elem = Object(closest.parentElement)[pos + 'ElementSibling'];\n if (!isNOU(elem) && elem.children.length === 0) {\n elem = Object(elem)[pos + 'ElementSibling'];\n }\n if (!isNOU(elem) && elem.children.length > 0) {\n if (pos === 'next') {\n var el = elem.querySelector('.' + CLS_ITEM);\n if (this.eleContains(el)) {\n this.eleFocus(el, pos);\n }\n else {\n el.firstElementChild.focus();\n this.activeEleSwitch(el);\n }\n }\n else {\n var el = elem.lastElementChild;\n if (this.eleContains(el)) {\n this.eleFocus(el, pos);\n }\n else {\n this.elementFocus(el);\n }\n }\n }\n }\n else if (!isNOU(closest)) {\n var tbrItems = this.element.querySelectorAll('.' + CLS_ITEMS + ' .' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + ')' + ':not(.' + CLS_DISABLE + ')' + ':not(.' + CLS_HIDDEN + ')');\n if (pos === 'next' && tbrItems) {\n this.elementFocus(tbrItems[0]);\n }\n else if (pos === 'previous' && tbrItems) {\n this.elementFocus(tbrItems[tbrItems.length - 1]);\n }\n }\n };\n Toolbar.prototype.clickHandler = function (e) {\n var _this = this;\n var trgt = e.target;\n var ele = this.element;\n var isPopupElement = !isNOU(closest(trgt, '.' + CLS_POPUPCLASS));\n var clsList = trgt.classList;\n var popupNav = closest(trgt, ('.' + CLS_TBARNAV));\n if (!popupNav) {\n popupNav = trgt;\n }\n if (!ele.children[0].classList.contains('e-hscroll') && !ele.children[0].classList.contains('e-vscroll')\n && (clsList.contains(CLS_TBARNAV))) {\n clsList = trgt.querySelector('.e-icons').classList;\n }\n if (clsList.contains(CLS_POPUPICON) || clsList.contains(CLS_POPUPDOWN)) {\n this.popupClickHandler(ele, popupNav, CLS_RTL);\n }\n var itemObj;\n var clst = closest(e.target, '.' + CLS_ITEM);\n if ((isNOU(clst) || clst.classList.contains(CLS_DISABLE)) && !popupNav.classList.contains(CLS_TBARNAV)) {\n return;\n }\n if (clst) {\n var tempItem = this.items[this.tbarEle.indexOf(clst)];\n itemObj = tempItem;\n }\n var eventArgs = { originalEvent: e, item: itemObj };\n if (itemObj && !isNOU(itemObj.click)) {\n this.trigger('items[' + this.tbarEle.indexOf(clst) + '].click', eventArgs);\n }\n if (!eventArgs.cancel) {\n this.trigger('clicked', eventArgs, function (clickedArgs) {\n if (!isNOU(_this.popObj) && isPopupElement && !clickedArgs.cancel && _this.overflowMode === 'Popup' &&\n clickedArgs.item && clickedArgs.item.type !== 'Input') {\n _this.popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n });\n }\n };\n Toolbar.prototype.popupClickHandler = function (ele, popupNav, CLS_RTL) {\n var popObj = this.popObj;\n if (isVisible(popObj.element)) {\n popupNav.classList.remove(CLS_TBARNAVACT);\n popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n else {\n if (ele.classList.contains(CLS_RTL)) {\n popObj.enableRtl = true;\n popObj.position = { X: 'left', Y: 'top' };\n }\n if (popObj.offsetX === 0 && !ele.classList.contains(CLS_RTL)) {\n popObj.enableRtl = false;\n popObj.position = { X: 'right', Y: 'top' };\n }\n popObj.dataBind();\n popObj.refreshPosition();\n popObj.element.style.top = this.getElementOffsetY() + 'px';\n if (this.overflowMode === 'Extended') {\n popObj.element.style.minHeight = '0px';\n }\n popupNav.classList.add(CLS_TBARNAVACT);\n popObj.show({ name: 'FadeIn', duration: 100 });\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n Toolbar.prototype.render = function () {\n var _this = this;\n this.initialize();\n this.renderControl();\n this.wireEvents();\n this.renderComplete();\n if (this.isReact && this.portals && this.portals.length > 0) {\n this.renderReactTemplates(function () {\n _this.refreshOverflow();\n });\n }\n };\n Toolbar.prototype.initialize = function () {\n var width = formatUnit(this.width);\n var height = formatUnit(this.height);\n if (Browser.info.name !== 'msie' || this.height !== 'auto' || this.overflowMode === 'MultiRow') {\n setStyle(this.element, { 'height': height });\n }\n setStyle(this.element, { 'width': width });\n var ariaAttr = {\n 'role': 'toolbar', 'aria-disabled': 'false',\n 'aria-orientation': !this.isVertical ? 'horizontal' : 'vertical'\n };\n attributes(this.element, ariaAttr);\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n };\n Toolbar.prototype.renderControl = function () {\n var ele = this.element;\n this.trgtEle = (ele.children.length > 0) ? ele.querySelector('div') : null;\n this.tbarAlgEle = { lefts: [], centers: [], rights: [] };\n this.renderItems();\n this.renderLayout();\n };\n Toolbar.prototype.renderLayout = function () {\n this.renderOverflowMode();\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n if (this.popObj && this.popObj.element.childElementCount > 1 && this.checkPopupRefresh(this.element, this.popObj.element)) {\n this.popupRefresh(this.popObj.element, false);\n }\n this.separator();\n };\n Toolbar.prototype.itemsAlign = function (items, itemEleDom) {\n var innerItem;\n var innerPos;\n if (!this.tbarEle) {\n this.tbarEle = [];\n }\n for (var i = 0; i < items.length; i++) {\n innerItem = this.renderSubComponent(items[parseInt(i.toString(), 10)], i);\n if (this.tbarEle.indexOf(innerItem) === -1) {\n this.tbarEle.push(innerItem);\n }\n if (!this.tbarAlign) {\n this.tbarItemAlign(items[parseInt(i.toString(), 10)], itemEleDom, i);\n }\n innerPos = itemEleDom.querySelector('.e-toolbar-' + items[parseInt(i.toString(), 10)].align.toLowerCase());\n if (innerPos) {\n if (!(items[parseInt(i.toString(), 10)].showAlwaysInPopup && items[parseInt(i.toString(), 10)].overflow !== 'Show')) {\n this.tbarAlgEle[(items[parseInt(i.toString(), 10)].align + 's').toLowerCase()].push(innerItem);\n }\n innerPos.appendChild(innerItem);\n }\n else {\n itemEleDom.appendChild(innerItem);\n }\n }\n if (this.isReact) {\n var portals = 'portals';\n this.notify('render-react-toolbar-template', this[\"\" + portals]);\n this.renderReactTemplates();\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.changeOrientation = function () {\n var ele = this.element;\n if (this.isVertical) {\n ele.classList.remove(CLS_VERTICAL);\n this.isVertical = false;\n if (this.height === 'auto' || this.height === '100%') {\n ele.style.height = this.height;\n }\n ele.setAttribute('aria-orientation', 'horizontal');\n }\n else {\n ele.classList.add(CLS_VERTICAL);\n this.isVertical = true;\n ele.setAttribute('aria-orientation', 'vertical');\n setStyle(this.element, { 'height': formatUnit(this.height), 'width': formatUnit(this.width) });\n }\n this.destroyMode();\n this.refreshOverflow();\n };\n Toolbar.prototype.initScroll = function (element, innerItems) {\n if (!this.scrollModule && this.checkOverflow(element, innerItems[0])) {\n if (this.tbarAlign) {\n this.element.querySelector('.' + CLS_ITEMS + ' .' + CLS_TBARCENTER).removeAttribute('style');\n }\n if (this.isVertical) {\n this.scrollModule = new VScroll({ scrollStep: this.scrollStep, enableRtl: this.enableRtl }, innerItems[0]);\n }\n else {\n this.scrollModule = new HScroll({ scrollStep: this.scrollStep, enableRtl: this.enableRtl }, innerItems[0]);\n }\n if (this.cssClass) {\n addClass([innerItems[0]], this.cssClass.split(' '));\n }\n var scrollEle = this.scrollModule.element.querySelector('.' + CLS_HSCROLLBAR + ', .' + 'e-vscroll-bar');\n if (scrollEle) {\n scrollEle.removeAttribute('tabindex');\n }\n this.remove(this.scrollModule.element, CLS_TBARPOS);\n setStyle(this.element, { overflow: 'hidden' });\n }\n };\n Toolbar.prototype.itemWidthCal = function (items) {\n var _this = this;\n var width = 0;\n var style;\n [].slice.call(selectAll('.' + CLS_ITEM, items)).forEach(function (el) {\n if (isVisible(el)) {\n style = window.getComputedStyle(el);\n width += _this.isVertical ? el.offsetHeight : el.offsetWidth;\n width += parseFloat(_this.isVertical ? style.marginTop : style.marginRight);\n width += parseFloat(_this.isVertical ? style.marginBottom : style.marginLeft);\n }\n });\n return width;\n };\n Toolbar.prototype.getScrollCntEle = function (innerItem) {\n var trgClass = (this.isVertical) ? '.e-vscroll-content' : '.e-hscroll-content';\n return innerItem.querySelector(trgClass);\n };\n Toolbar.prototype.checkOverflow = function (element, innerItem) {\n if (isNOU(element) || isNOU(innerItem) || !isVisible(element)) {\n return false;\n }\n var eleWidth = this.isVertical ? element.offsetHeight : element.offsetWidth;\n var itemWidth = this.isVertical ? innerItem.offsetHeight : innerItem.offsetWidth;\n if (this.tbarAlign || this.scrollModule || (eleWidth === itemWidth)) {\n itemWidth = this.itemWidthCal(this.scrollModule ? this.getScrollCntEle(innerItem) : innerItem);\n }\n var popNav = element.querySelector('.' + CLS_TBARNAV);\n var scrollNav = element.querySelector('.' + CLS_TBARSCRLNAV);\n var navEleWidth = 0;\n if (popNav) {\n navEleWidth = this.isVertical ? popNav.offsetHeight : popNav.offsetWidth;\n }\n else if (scrollNav) {\n navEleWidth = this.isVertical ? (scrollNav.offsetHeight * (2)) : (scrollNav.offsetWidth * 2);\n }\n if (itemWidth > eleWidth - navEleWidth) {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * Refresh the whole Toolbar component without re-rendering.\n * - It is used to manually refresh the Toolbar overflow modes such as scrollable, popup, multi row, and extended.\n * - It will refresh the Toolbar component after loading items dynamically.\n *\n * @returns {void}.\n */\n Toolbar.prototype.refreshOverflow = function () {\n this.resize();\n };\n Toolbar.prototype.toolbarAlign = function (innerItems) {\n if (this.tbarAlign) {\n this.add(innerItems, CLS_TBARPOS);\n this.itemPositioning();\n }\n };\n Toolbar.prototype.renderOverflowMode = function () {\n var ele = this.element;\n var innerItems = ele.querySelector('.' + CLS_ITEMS);\n var priorityCheck = this.popupPriCount > 0;\n if (ele && ele.children.length > 0) {\n this.offsetWid = ele.offsetWidth;\n this.remove(this.element, 'e-toolpop');\n if (Browser.info.name === 'msie' && this.height === 'auto') {\n ele.style.height = '';\n }\n switch (this.overflowMode) {\n case 'Scrollable':\n if (isNOU(this.scrollModule)) {\n this.initScroll(ele, [].slice.call(ele.getElementsByClassName(CLS_ITEMS)));\n }\n break;\n case 'Popup':\n this.add(this.element, 'e-toolpop');\n if (this.tbarAlign) {\n this.removePositioning();\n }\n if (this.checkOverflow(ele, innerItems) || priorityCheck) {\n this.setOverflowAttributes(ele);\n }\n this.toolbarAlign(innerItems);\n break;\n case 'MultiRow':\n this.add(innerItems, CLS_MULTIROW);\n if (this.checkOverflow(ele, innerItems) && this.tbarAlign) {\n this.removePositioning();\n this.add(innerItems, CLS_MULTIROWPOS);\n }\n if (ele.style.overflow === 'hidden') {\n ele.style.overflow = '';\n }\n if (Browser.info.name === 'msie' || ele.style.height !== 'auto') {\n ele.style.height = 'auto';\n }\n break;\n case 'Extended':\n this.add(this.element, CLS_EXTEANDABLE_TOOLBAR);\n if (this.checkOverflow(ele, innerItems) || priorityCheck) {\n if (this.tbarAlign) {\n this.removePositioning();\n }\n this.setOverflowAttributes(ele);\n }\n this.toolbarAlign(innerItems);\n }\n }\n };\n Toolbar.prototype.setOverflowAttributes = function (ele) {\n this.createPopupEle(ele, [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, ele)));\n var ariaAttr = {\n 'tabindex': '0', 'role': 'button', 'aria-haspopup': 'true',\n 'aria-label': 'overflow'\n };\n attributes(this.element.querySelector('.' + CLS_TBARNAV), ariaAttr);\n };\n Toolbar.prototype.separator = function () {\n var element = this.element;\n var eleItem = [].slice.call(element.querySelectorAll('.' + CLS_SEPARATOR));\n var multiVar = element.querySelector('.' + CLS_MULTIROW_SEPARATOR);\n var extendVar = element.querySelector('.' + CLS_EXTENDABLE_SEPARATOR);\n var eleInlineItem = this.overflowMode === 'MultiRow' ? multiVar : extendVar;\n if (eleInlineItem !== null) {\n if (this.overflowMode === 'MultiRow') {\n eleInlineItem.classList.remove(CLS_MULTIROW_SEPARATOR);\n }\n else if (this.overflowMode === 'Extended') {\n eleInlineItem.classList.remove(CLS_EXTENDABLE_SEPARATOR);\n }\n }\n for (var i = 0; i <= eleItem.length - 1; i++) {\n if (eleItem[parseInt(i.toString(), 10)].offsetLeft < 30 && eleItem[parseInt(i.toString(), 10)].offsetLeft !== 0) {\n if (this.overflowMode === 'MultiRow') {\n eleItem[parseInt(i.toString(), 10)].classList.add(CLS_MULTIROW_SEPARATOR);\n }\n else if (this.overflowMode === 'Extended') {\n eleItem[parseInt(i.toString(), 10)].classList.add(CLS_EXTENDABLE_SEPARATOR);\n }\n }\n }\n };\n Toolbar.prototype.createPopupEle = function (ele, innerEle) {\n var innerNav = ele.querySelector('.' + CLS_TBARNAV);\n var vertical = this.isVertical;\n if (!innerNav) {\n this.createPopupIcon(ele);\n }\n innerNav = ele.querySelector('.' + CLS_TBARNAV);\n var innerNavDom = (vertical ? innerNav.offsetHeight : innerNav.offsetWidth);\n var eleWidth = ((vertical ? ele.offsetHeight : ele.offsetWidth) - (innerNavDom));\n this.element.classList.remove('e-rtl');\n setStyle(this.element, { direction: 'initial' });\n this.checkPriority(ele, innerEle, eleWidth, true);\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n this.element.style.removeProperty('direction');\n this.createPopup();\n };\n Toolbar.prototype.pushingPoppedEle = function (tbarObj, popupPri, ele, eleHeight, sepHeight) {\n var element = tbarObj.element;\n var poppedEle = [].slice.call(selectAll('.' + CLS_POPUP, element.querySelector('.' + CLS_ITEMS)));\n var nodes = selectAll('.' + CLS_TBAROVERFLOW, ele);\n var nodeIndex = 0;\n var nodePri = 0;\n poppedEle.forEach(function (el, index) {\n nodes = selectAll('.' + CLS_TBAROVERFLOW, ele);\n if (el.classList.contains(CLS_TBAROVERFLOW) && nodes.length > 0) {\n if (tbarObj.tbResize && nodes.length > index) {\n ele.insertBefore(el, nodes[parseInt(index.toString(), 10)]);\n ++nodePri;\n }\n else {\n ele.insertBefore(el, ele.children[nodes.length]);\n ++nodePri;\n }\n }\n else if (el.classList.contains(CLS_TBAROVERFLOW)) {\n ele.insertBefore(el, ele.firstChild);\n ++nodePri;\n }\n else if (tbarObj.tbResize && el.classList.contains(CLS_POPOVERFLOW) && ele.children.length > 0 && nodes.length === 0) {\n ele.insertBefore(el, ele.firstChild);\n ++nodePri;\n }\n else if (el.classList.contains(CLS_POPOVERFLOW)) {\n popupPri.push(el);\n }\n else if (tbarObj.tbResize) {\n ele.insertBefore(el, ele.childNodes[nodeIndex + nodePri]);\n ++nodeIndex;\n }\n else {\n ele.appendChild(el);\n }\n if (el.classList.contains(CLS_SEPARATOR)) {\n setStyle(el, { display: '', height: sepHeight + 'px' });\n }\n else {\n setStyle(el, { display: '', height: eleHeight + 'px' });\n }\n });\n popupPri.forEach(function (el) {\n ele.appendChild(el);\n });\n var tbarEle = selectAll('.' + CLS_ITEM, element.querySelector('.' + CLS_ITEMS));\n for (var i = tbarEle.length - 1; i >= 0; i--) {\n var tbarElement = tbarEle[parseInt(i.toString(), 10)];\n if (tbarElement.classList.contains(CLS_SEPARATOR) && this.overflowMode !== 'Extended') {\n setStyle(tbarElement, { display: 'none' });\n }\n else {\n break;\n }\n }\n };\n Toolbar.prototype.createPopup = function () {\n var element = this.element;\n var sepHeight;\n var sepItem;\n if (this.overflowMode === 'Extended') {\n sepItem = element.querySelector('.' + CLS_SEPARATOR);\n sepHeight =\n (element.style.height === 'auto' || element.style.height === '') ? null : (sepItem && sepItem.offsetHeight);\n }\n var eleItem = element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + '):not(.' + CLS_POPUP + ')');\n var eleHeight = (element.style.height === 'auto' || element.style.height === '') ? null : (eleItem && eleItem.offsetHeight);\n var ele;\n var popupPri = [];\n if (select('#' + element.id + '_popup.' + CLS_POPUPCLASS, element)) {\n ele = select('#' + element.id + '_popup.' + CLS_POPUPCLASS, element);\n }\n else {\n var extendEle = this.createElement('div', {\n id: element.id + '_popup', className: CLS_POPUPCLASS + ' ' + CLS_EXTENDABLECLASS\n });\n var popupEle = this.createElement('div', { id: element.id + '_popup', className: CLS_POPUPCLASS });\n ele = this.overflowMode === 'Extended' ? extendEle : popupEle;\n }\n this.pushingPoppedEle(this, popupPri, ele, eleHeight, sepHeight);\n this.popupInit(element, ele);\n };\n Toolbar.prototype.getElementOffsetY = function () {\n return (this.overflowMode === 'Extended' && window.getComputedStyle(this.element).getPropertyValue('box-sizing') === 'border-box' ?\n this.element.clientHeight : this.element.offsetHeight);\n };\n Toolbar.prototype.popupInit = function (element, ele) {\n if (!this.popObj) {\n element.appendChild(ele);\n if (this.cssClass) {\n addClass([ele], this.cssClass.split(' '));\n }\n setStyle(this.element, { overflow: '' });\n var eleStyles = window.getComputedStyle(this.element);\n var popup = new Popup(null, {\n relateTo: this.element,\n offsetY: (this.isVertical) ? 0 : this.getElementOffsetY(),\n enableRtl: this.enableRtl,\n open: this.popupOpen.bind(this),\n close: this.popupClose.bind(this),\n collision: { Y: this.enableCollision ? 'flip' : 'none' },\n position: this.enableRtl ? { X: 'left', Y: 'top' } : { X: 'right', Y: 'top' }\n });\n if (this.overflowMode === 'Extended') {\n popup.width = parseFloat(eleStyles.width) + ((parseFloat(eleStyles.borderRightWidth)) * 2);\n popup.offsetX = 0;\n }\n popup.appendTo(ele);\n EventHandler.add(document, 'scroll', this.docEvent.bind(this));\n EventHandler.add(document, 'click ', this.docEvent.bind(this));\n popup.element.style.maxHeight = popup.element.offsetHeight + 'px';\n if (this.isVertical) {\n popup.element.style.visibility = 'hidden';\n }\n if (this.isExtendedOpen) {\n var popupNav = this.element.querySelector('.' + CLS_TBARNAV);\n popupNav.classList.add(CLS_TBARNAVACT);\n classList(popupNav.firstElementChild, [CLS_POPUPICON], [CLS_POPUPDOWN]);\n this.element.querySelector('.' + CLS_EXTENDABLECLASS).classList.add(CLS_POPUPOPEN);\n }\n else {\n popup.hide();\n }\n this.popObj = popup;\n }\n else {\n var popupEle = this.popObj.element;\n setStyle(popupEle, { maxHeight: '', display: 'block' });\n setStyle(popupEle, { maxHeight: popupEle.offsetHeight + 'px', display: '' });\n }\n };\n Toolbar.prototype.tbarPopupHandler = function (isOpen) {\n if (this.overflowMode === 'Extended') {\n if (isOpen) {\n this.add(this.element, CLS_EXTENDEDPOPOPEN);\n }\n else {\n this.remove(this.element, CLS_EXTENDEDPOPOPEN);\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Toolbar.prototype.popupOpen = function (e) {\n var popObj = this.popObj;\n if (!this.isVertical) {\n popObj.offsetY = this.getElementOffsetY();\n popObj.dataBind();\n }\n var popupEle = this.popObj.element;\n var toolEle = this.popObj.element.parentElement;\n var popupNav = toolEle.querySelector('.' + CLS_TBARNAV);\n popupNav.setAttribute('aria-expanded', 'true');\n setStyle(popObj.element, { height: 'auto', maxHeight: '' });\n popObj.element.style.maxHeight = popObj.element.offsetHeight + 'px';\n if (this.overflowMode === 'Extended') {\n popObj.element.style.minHeight = '';\n }\n var popupElePos = popupEle.offsetTop + popupEle.offsetHeight + calculatePosition(toolEle).top;\n var popIcon = popupNav.firstElementChild;\n popupNav.classList.add(CLS_TBARNAVACT);\n classList(popIcon, [CLS_POPUPICON], [CLS_POPUPDOWN]);\n this.tbarPopupHandler(true);\n var scrollVal = isNOU(window.scrollY) ? 0 : window.scrollY;\n if (!this.isVertical && ((window.innerHeight + scrollVal) < popupElePos) && (this.element.offsetTop < popupEle.offsetHeight)) {\n var overflowHeight = (popupEle.offsetHeight - ((popupElePos - window.innerHeight - scrollVal) + 5));\n popObj.height = overflowHeight + 'px';\n for (var i = 0; i <= popupEle.childElementCount; i++) {\n var ele = popupEle.children[parseInt(i.toString(), 10)];\n if (ele.offsetTop + ele.offsetHeight > overflowHeight) {\n overflowHeight = ele.offsetTop;\n break;\n }\n }\n setStyle(popObj.element, { maxHeight: overflowHeight + 'px' });\n }\n else if (this.isVertical) {\n var tbEleData = this.element.getBoundingClientRect();\n setStyle(popObj.element, { maxHeight: (tbEleData.top + this.element.offsetHeight) + 'px', bottom: 0, visibility: '' });\n }\n if (popObj) {\n var popupOffset = popupEle.getBoundingClientRect();\n if (popupOffset.right > document.documentElement.clientWidth && popupOffset.width > toolEle.getBoundingClientRect().width) {\n popObj.collision = { Y: 'none' };\n popObj.dataBind();\n }\n popObj.refreshPosition();\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Toolbar.prototype.popupClose = function (e) {\n var element = this.element;\n var popupNav = element.querySelector('.' + CLS_TBARNAV);\n popupNav.setAttribute('aria-expanded', 'false');\n var popIcon = popupNav.firstElementChild;\n popupNav.classList.remove(CLS_TBARNAVACT);\n classList(popIcon, [CLS_POPUPDOWN], [CLS_POPUPICON]);\n this.tbarPopupHandler(false);\n };\n Toolbar.prototype.checkPriority = function (ele, inEle, eleWidth, pre) {\n var popPriority = this.popupPriCount > 0;\n var len = inEle.length;\n var eleWid = eleWidth;\n var eleOffset;\n var checkoffset;\n var sepCheck = 0;\n var itemCount = 0;\n var itemPopCount = 0;\n var checkClass = function (ele, val) {\n var rVal = false;\n val.forEach(function (cls) {\n if (ele.classList.contains(cls)) {\n rVal = true;\n }\n });\n return rVal;\n };\n for (var i = len - 1; i >= 0; i--) {\n var mrgn = void 0;\n var compuStyle = window.getComputedStyle(inEle[parseInt(i.toString(), 10)]);\n if (this.isVertical) {\n mrgn = parseFloat((compuStyle).marginTop);\n mrgn += parseFloat((compuStyle).marginBottom);\n }\n else {\n mrgn = parseFloat((compuStyle).marginRight);\n mrgn += parseFloat((compuStyle).marginLeft);\n }\n var fstEleCheck = inEle[parseInt(i.toString(), 10)] === this.tbarEle[0];\n if (fstEleCheck) {\n this.tbarEleMrgn = mrgn;\n }\n eleOffset = this.isVertical ? inEle[parseInt(i.toString(), 10)].offsetHeight : inEle[parseInt(i.toString(), 10)].offsetWidth;\n var eleWid_1 = fstEleCheck ? (eleOffset + mrgn) : eleOffset;\n if (checkClass(inEle[parseInt(i.toString(), 10)], [CLS_POPPRI]) && popPriority) {\n inEle[parseInt(i.toString(), 10)].classList.add(CLS_POPUP);\n if (this.isVertical) {\n setStyle(inEle[parseInt(i.toString(), 10)], { display: 'none', minHeight: eleWid_1 + 'px' });\n }\n else {\n setStyle(inEle[parseInt(i.toString(), 10)], { display: 'none', minWidth: eleWid_1 + 'px' });\n }\n itemPopCount++;\n }\n if (this.isVertical) {\n checkoffset =\n (inEle[parseInt(i.toString(), 10)].offsetTop + inEle[parseInt(i.toString(), 10)].offsetHeight + mrgn) > eleWidth;\n }\n else {\n checkoffset =\n (inEle[parseInt(i.toString(), 10)].offsetLeft + inEle[parseInt(i.toString(), 10)].offsetWidth + mrgn) > eleWidth;\n }\n if (checkoffset) {\n if (inEle[parseInt(i.toString(), 10)].classList.contains(CLS_SEPARATOR)) {\n if (this.overflowMode === 'Extended') {\n var sepEle = inEle[parseInt(i.toString(), 10)];\n if (checkClass(sepEle, [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n inEle[parseInt(i.toString(), 10)].classList.add(CLS_POPUP);\n itemPopCount++;\n }\n itemCount++;\n }\n else if (this.overflowMode === 'Popup') {\n if (sepCheck > 0 && itemCount === itemPopCount) {\n var sepEle = inEle[i + itemCount + (sepCheck - 1)];\n if (checkClass(sepEle, [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n setStyle(sepEle, { display: 'none' });\n }\n }\n sepCheck++;\n itemCount = 0;\n itemPopCount = 0;\n }\n }\n else {\n itemCount++;\n }\n if (inEle[parseInt(i.toString(), 10)].classList.contains(CLS_TBAROVERFLOW) && pre) {\n eleWidth -= ((this.isVertical ? inEle[parseInt(i.toString(), 10)].offsetHeight :\n inEle[parseInt(i.toString(), 10)].offsetWidth) + (mrgn));\n }\n else if (!checkClass(inEle[parseInt(i.toString(), 10)], [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n inEle[parseInt(i.toString(), 10)].classList.add(CLS_POPUP);\n if (this.isVertical) {\n setStyle(inEle[parseInt(i.toString(), 10)], { display: 'none', minHeight: eleWid_1 + 'px' });\n }\n else {\n setStyle(inEle[parseInt(i.toString(), 10)], { display: 'none', minWidth: eleWid_1 + 'px' });\n }\n itemPopCount++;\n }\n else {\n eleWidth -= ((this.isVertical ? inEle[parseInt(i.toString(), 10)].offsetHeight :\n inEle[parseInt(i.toString(), 10)].offsetWidth) + (mrgn));\n }\n }\n }\n if (pre) {\n var popedEle = selectAll('.' + CLS_ITEM + ':not(.' + CLS_POPUP + ')', this.element);\n this.checkPriority(ele, popedEle, eleWid, false);\n }\n };\n Toolbar.prototype.createPopupIcon = function (element) {\n var id = element.id.concat('_nav');\n var className = 'e-' + element.id.concat('_nav ' + CLS_POPUPNAV);\n className = this.overflowMode === 'Extended' ? className + ' ' + CLS_EXTENDPOPUP : className;\n var nav = this.createElement('div', { id: id, className: className });\n if (Browser.info.name === 'msie' || Browser.info.name === 'edge') {\n nav.classList.add('e-ie-align');\n }\n var navItem = this.createElement('div', { className: CLS_POPUPDOWN + ' e-icons' });\n nav.appendChild(navItem);\n nav.setAttribute('tabindex', '0');\n nav.setAttribute('role', 'button');\n element.appendChild(nav);\n };\n Toolbar.prototype.tbarPriRef = function (inEle, indx, sepPri, el, des, elWid, wid, ig, eleStyles) {\n var ignoreCount = ig;\n var popEle = this.popObj.element;\n var query = '.' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + '):not(.' + CLS_TBAROVERFLOW + ')';\n var priEleCnt = selectAll('.' + CLS_POPUP + ':not(.' + CLS_TBAROVERFLOW + ')', popEle).length;\n var checkClass = function (ele, val) {\n return ele.classList.contains(val);\n };\n if (selectAll(query, inEle).length === 0) {\n var eleSep = inEle.children[indx - (indx - sepPri) - 1];\n var ignoreCheck = (!isNOU(eleSep) && checkClass(eleSep, CLS_TBARIGNORE));\n if ((!isNOU(eleSep) && checkClass(eleSep, CLS_SEPARATOR) && !isVisible(eleSep)) || ignoreCheck) {\n eleSep.style.display = 'unset';\n var eleSepWidth = eleSep.offsetWidth + (parseFloat(window.getComputedStyle(eleSep).marginRight) * 2);\n var prevSep = eleSep.previousElementSibling;\n if ((elWid + eleSepWidth) < wid || des) {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - (indx - sepPri)]);\n if (!isNOU(prevSep)) {\n prevSep.style.display = '';\n }\n }\n else {\n setStyle(el, eleStyles);\n if (prevSep.classList.contains(CLS_SEPARATOR)) {\n prevSep.style.display = 'none';\n }\n }\n eleSep.style.display = '';\n }\n else {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - (indx - sepPri)]);\n }\n }\n else {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - priEleCnt]);\n }\n };\n Toolbar.prototype.popupRefresh = function (popupEle, destroy) {\n var _this = this;\n var ele = this.element;\n var isVer = this.isVertical;\n var innerEle = ele.querySelector('.' + CLS_ITEMS);\n var popNav = ele.querySelector('.' + CLS_TBARNAV);\n if (isNOU(popNav)) {\n return;\n }\n innerEle.removeAttribute('style');\n popupEle.style.display = 'block';\n var dimension;\n if (isVer) {\n dimension = ele.offsetHeight - (popNav.offsetHeight + innerEle.offsetHeight);\n }\n else {\n dimension = ele.offsetWidth - (popNav.offsetWidth + innerEle.offsetWidth);\n }\n var popupEleWidth = 0;\n [].slice.call(popupEle.children).forEach(function (el) {\n popupEleWidth += _this.popupEleWidth(el);\n setStyle(el, { 'position': '' });\n });\n if ((dimension + (isVer ? popNav.offsetHeight : popNav.offsetWidth)) > (popupEleWidth) && this.popupPriCount === 0) {\n destroy = true;\n }\n this.popupEleRefresh(dimension, popupEle, destroy);\n popupEle.style.display = '';\n if (popupEle.children.length === 0 && popNav && this.popObj) {\n detach(popNav);\n popNav = null;\n this.popObj.destroy();\n detach(this.popObj.element);\n this.popObj = null;\n }\n };\n Toolbar.prototype.ignoreEleFetch = function (index, innerEle) {\n var ignoreEle = [].slice.call(innerEle.querySelectorAll('.' + CLS_TBARIGNORE));\n var ignoreInx = [];\n var count = 0;\n if (ignoreEle.length > 0) {\n ignoreEle.forEach(function (ele) {\n ignoreInx.push([].slice.call(innerEle.children).indexOf(ele));\n });\n }\n else {\n return 0;\n }\n ignoreInx.forEach(function (val) {\n if (val <= index) {\n count++;\n }\n });\n return count;\n };\n Toolbar.prototype.checkPopupRefresh = function (root, popEle) {\n popEle.style.display = 'block';\n var elWid = this.popupEleWidth(popEle.firstElementChild);\n popEle.firstElementChild.style.removeProperty('Position');\n var tbarWidth = root.offsetWidth - root.querySelector('.' + CLS_TBARNAV).offsetWidth;\n var tbarItemsWid = root.querySelector('.' + CLS_ITEMS).offsetWidth;\n popEle.style.removeProperty('display');\n if (tbarWidth > (elWid + tbarItemsWid)) {\n return true;\n }\n return false;\n };\n Toolbar.prototype.popupEleWidth = function (el) {\n el.style.position = 'absolute';\n var elWidth = this.isVertical ? el.offsetHeight : el.offsetWidth;\n var btnText = el.querySelector('.' + CLS_TBARBTNTEXT);\n if (el.classList.contains('e-tbtn-align') || el.classList.contains(CLS_TBARTEXT)) {\n var btn = el.children[0];\n if (!isNOU(btnText) && el.classList.contains(CLS_TBARTEXT)) {\n btnText.style.display = 'none';\n }\n else if (!isNOU(btnText) && el.classList.contains(CLS_POPUPTEXT)) {\n btnText.style.display = 'block';\n }\n btn.style.minWidth = '0%';\n elWidth = parseFloat(!this.isVertical ? el.style.minWidth : el.style.minHeight);\n btn.style.minWidth = '';\n btn.style.minHeight = '';\n if (!isNOU(btnText)) {\n btnText.style.display = '';\n }\n }\n return elWidth;\n };\n Toolbar.prototype.popupEleRefresh = function (width, popupEle, destroy) {\n var popPriority = this.popupPriCount > 0;\n var eleSplice = this.tbarEle;\n var priEleCnt;\n var index;\n var innerEle = this.element.querySelector('.' + CLS_ITEMS);\n var ignoreCount = 0;\n var _loop_1 = function (el) {\n if (el.classList.contains(CLS_POPPRI) && popPriority && !destroy) {\n return \"continue\";\n }\n var elWidth = this_1.popupEleWidth(el);\n if (el === this_1.tbarEle[0]) {\n elWidth += this_1.tbarEleMrgn;\n }\n el.style.position = '';\n if (elWidth < width || destroy) {\n var inlineStyles = { minWidth: el.style.minWidth, height: el.style.height, minHeight: el.style.minHeight };\n setStyle(el, { minWidth: '', height: '', minHeight: '' });\n if (!el.classList.contains(CLS_POPOVERFLOW)) {\n el.classList.remove(CLS_POPUP);\n }\n index = this_1.tbarEle.indexOf(el);\n if (this_1.tbarAlign) {\n var pos = this_1.items[parseInt(index.toString(), 10)].align;\n index = this_1.tbarAlgEle[(pos + 's').toLowerCase()].indexOf(el);\n eleSplice = this_1.tbarAlgEle[(pos + 's').toLowerCase()];\n innerEle = this_1.element.querySelector('.' + CLS_ITEMS + ' .' + 'e-toolbar-' + pos.toLowerCase());\n }\n var sepBeforePri_1 = 0;\n if (this_1.overflowMode !== 'Extended') {\n eleSplice.slice(0, index).forEach(function (el) {\n if (el.classList.contains(CLS_TBAROVERFLOW) || el.classList.contains(CLS_SEPARATOR)) {\n if (el.classList.contains(CLS_SEPARATOR)) {\n el.style.display = '';\n width -= el.offsetWidth;\n }\n sepBeforePri_1++;\n }\n });\n }\n ignoreCount = this_1.ignoreEleFetch(index, innerEle);\n if (el.classList.contains(CLS_TBAROVERFLOW)) {\n this_1.tbarPriRef(innerEle, index, sepBeforePri_1, el, destroy, elWidth, width, ignoreCount, inlineStyles);\n width -= el.offsetWidth;\n }\n else if (index === 0) {\n innerEle.insertBefore(el, innerEle.firstChild);\n width -= el.offsetWidth;\n }\n else {\n priEleCnt = selectAll('.' + CLS_TBAROVERFLOW, this_1.popObj.element).length;\n innerEle.insertBefore(el, innerEle.children[(index + ignoreCount) - priEleCnt]);\n width -= el.offsetWidth;\n }\n el.style.height = '';\n }\n else {\n return \"break\";\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = [].slice.call(popupEle.children); _i < _a.length; _i++) {\n var el = _a[_i];\n var state_1 = _loop_1(el);\n if (state_1 === \"break\")\n break;\n }\n var checkOverflow = this.checkOverflow(this.element, this.element.getElementsByClassName(CLS_ITEMS)[0]);\n if (checkOverflow && !destroy) {\n this.renderOverflowMode();\n }\n };\n Toolbar.prototype.removePositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n if (isNOU(item) || !item.classList.contains(CLS_TBARPOS)) {\n return;\n }\n this.remove(item, CLS_TBARPOS);\n var innerItem = [].slice.call(item.childNodes);\n innerItem[1].removeAttribute('style');\n innerItem[2].removeAttribute('style');\n };\n Toolbar.prototype.refreshPositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n this.add(item, CLS_TBARPOS);\n this.itemPositioning();\n };\n Toolbar.prototype.itemPositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n var margin;\n if (isNOU(item) || !item.classList.contains(CLS_TBARPOS)) {\n return;\n }\n var popupNav = this.element.querySelector('.' + CLS_TBARNAV);\n var innerItem;\n if (this.scrollModule) {\n var trgClass = (this.isVertical) ? CLS_VSCROLLCNT : CLS_HSCROLLCNT;\n innerItem = [].slice.call(item.querySelector('.' + trgClass).children);\n }\n else {\n innerItem = [].slice.call(item.childNodes);\n }\n if (this.isVertical) {\n margin = innerItem[0].offsetHeight + innerItem[2].offsetHeight;\n }\n else {\n margin = innerItem[0].offsetWidth + innerItem[2].offsetWidth;\n }\n var tbarWid = this.isVertical ? this.element.offsetHeight : this.element.offsetWidth;\n if (popupNav) {\n tbarWid -= (this.isVertical ? popupNav.offsetHeight : popupNav.offsetWidth);\n var popWid = (this.isVertical ? popupNav.offsetHeight : popupNav.offsetWidth) + 'px';\n innerItem[2].removeAttribute('style');\n if (this.isVertical) {\n if (this.enableRtl) {\n innerItem[2].style.top = popWid;\n }\n else {\n innerItem[2].style.bottom = popWid;\n }\n }\n else {\n if (this.enableRtl) {\n innerItem[2].style.left = popWid;\n }\n else {\n innerItem[2].style.right = popWid;\n }\n }\n }\n if (tbarWid <= margin) {\n return;\n }\n var value = (((tbarWid - margin)) - (!this.isVertical ? innerItem[1].offsetWidth : innerItem[1].offsetHeight)) / 2;\n innerItem[1].removeAttribute('style');\n var mrgn = ((!this.isVertical ? innerItem[0].offsetWidth : innerItem[0].offsetHeight) + value) + 'px';\n if (this.isVertical) {\n if (this.enableRtl) {\n innerItem[1].style.marginBottom = mrgn;\n }\n else {\n innerItem[1].style.marginTop = mrgn;\n }\n }\n else {\n if (this.enableRtl) {\n innerItem[1].style.marginRight = mrgn;\n }\n else {\n innerItem[1].style.marginLeft = mrgn;\n }\n }\n };\n Toolbar.prototype.tbarItemAlign = function (item, itemEle, pos) {\n var _this = this;\n if (item.showAlwaysInPopup && item.overflow !== 'Show') {\n return;\n }\n var alignDiv = [];\n alignDiv.push(this.createElement('div', { className: CLS_TBARLEFT }));\n alignDiv.push(this.createElement('div', { className: CLS_TBARCENTER }));\n alignDiv.push(this.createElement('div', { className: CLS_TBARRIGHT }));\n if (pos === 0 && item.align !== 'Left') {\n alignDiv.forEach(function (ele) {\n itemEle.appendChild(ele);\n });\n this.tbarAlign = true;\n this.add(itemEle, CLS_TBARPOS);\n }\n else if (item.align !== 'Left') {\n var alignEle = itemEle.childNodes;\n var leftAlign_1 = alignDiv[0];\n [].slice.call(alignEle).forEach(function (el) {\n _this.tbarAlgEle.lefts.push(el);\n leftAlign_1.appendChild(el);\n });\n itemEle.appendChild(leftAlign_1);\n itemEle.appendChild(alignDiv[1]);\n itemEle.appendChild(alignDiv[2]);\n this.tbarAlign = true;\n this.add(itemEle, CLS_TBARPOS);\n }\n };\n Toolbar.prototype.ctrlTemplate = function () {\n var _this = this;\n this.ctrlTem = this.trgtEle.cloneNode(true);\n this.add(this.trgtEle, CLS_ITEMS);\n this.tbarEle = [];\n var innerEle = [].slice.call(this.trgtEle.children);\n innerEle.forEach(function (ele) {\n if (ele.tagName === 'DIV') {\n _this.tbarEle.push(ele);\n if (!isNOU(ele.firstElementChild)) {\n ele.firstElementChild.setAttribute('aria-disabled', 'false');\n }\n _this.add(ele, CLS_ITEM);\n }\n });\n };\n Toolbar.prototype.renderItems = function () {\n var ele = this.element;\n var items = this.items;\n if (this.trgtEle != null) {\n this.ctrlTemplate();\n }\n else if (ele && items.length > 0) {\n var itemEleDom = void 0;\n if (ele && ele.children.length > 0) {\n itemEleDom = ele.querySelector('.' + CLS_ITEMS);\n }\n if (!itemEleDom) {\n itemEleDom = this.createElement('div', { className: CLS_ITEMS });\n }\n this.itemsAlign(items, itemEleDom);\n ele.appendChild(itemEleDom);\n }\n };\n Toolbar.prototype.setAttr = function (attr, element) {\n var key = Object.keys(attr);\n var keyVal;\n for (var i = 0; i < key.length; i++) {\n keyVal = key[parseInt(i.toString(), 10)];\n if (keyVal === 'class') {\n this.add(element, attr[\"\" + keyVal]);\n }\n else {\n element.setAttribute(keyVal, attr[\"\" + keyVal]);\n }\n }\n };\n /**\n * Enables or disables the specified Toolbar item.\n *\n * @param {number|HTMLElement|NodeList} items - DOM element or an array of items to be enabled or disabled.\n * @param {boolean} isEnable - Boolean value that determines whether the command should be enabled or disabled.\n * By default, `isEnable` is set to true.\n * @returns {void}.\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n var elements = items;\n var len = elements.length;\n var ele;\n if (isNOU(isEnable)) {\n isEnable = true;\n }\n var enable = function (isEnable, ele) {\n if (isEnable) {\n ele.classList.remove(CLS_DISABLE);\n if (!isNOU(ele.firstElementChild)) {\n ele.firstElementChild.setAttribute('aria-disabled', 'false');\n }\n }\n else {\n ele.classList.add(CLS_DISABLE);\n if (!isNOU(ele.firstElementChild)) {\n ele.firstElementChild.setAttribute('aria-disabled', 'true');\n }\n }\n };\n if (!isNOU(len) && len >= 1) {\n for (var a = 0, element = [].slice.call(elements); a < len; a++) {\n var itemElement = element[parseInt(a.toString(), 10)];\n if (typeof (itemElement) === 'number') {\n ele = this.getElementByIndex(itemElement);\n if (isNOU(ele)) {\n return;\n }\n else {\n elements[parseInt(a.toString(), 10)] = ele;\n }\n }\n else {\n ele = itemElement;\n }\n enable(isEnable, ele);\n }\n if (isEnable) {\n removeClass(elements, CLS_DISABLE);\n }\n else {\n addClass(elements, CLS_DISABLE);\n }\n }\n else {\n if (typeof (elements) === 'number') {\n ele = this.getElementByIndex(elements);\n if (isNOU(ele)) {\n return;\n }\n }\n else {\n ele = items;\n }\n enable(isEnable, ele);\n }\n };\n Toolbar.prototype.getElementByIndex = function (index) {\n if (this.tbarEle[parseInt(index.toString(), 10)]) {\n return this.tbarEle[parseInt(index.toString(), 10)];\n }\n return null;\n };\n /**\n * Adds new items to the Toolbar that accepts an array as Toolbar items.\n *\n * @param {ItemModel[]} items - DOM element or an array of items to be added to the Toolbar.\n * @param {number} index - Number value that determines where the command is to be added. By default, index is 0.\n * @returns {void}.\n */\n Toolbar.prototype.addItems = function (items, index) {\n var innerItems;\n this.extendedOpen();\n var itemsDiv = this.element.querySelector('.' + CLS_ITEMS);\n if (isNOU(itemsDiv)) {\n this.itemsRerender(items);\n return;\n }\n var innerEle;\n var itemAgn = 'Left';\n if (isNOU(index)) {\n index = 0;\n }\n items.forEach(function (e) {\n if (!isNOU(e.align) && e.align !== 'Left' && itemAgn === 'Left') {\n itemAgn = e.align;\n }\n });\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n var item = items_1[_i];\n if (isNOU(item.type)) {\n item.type = 'Button';\n }\n innerItems = selectAll('.' + CLS_ITEM, this.element);\n item.align = itemAgn;\n innerEle = this.renderSubComponent(item, index);\n if (this.tbarEle.length >= index && innerItems.length >= 0) {\n if (isNOU(this.scrollModule)) {\n this.destroyMode();\n }\n var algIndex = item.align[0] === 'L' ? 0 : item.align[0] === 'C' ? 1 : 2;\n var ele = void 0;\n if (!this.tbarAlign && itemAgn !== 'Left') {\n this.tbarItemAlign(item, itemsDiv, 1);\n this.tbarAlign = true;\n ele = closest(innerItems[0], '.' + CLS_ITEMS).children[parseInt(algIndex.toString(), 10)];\n ele.appendChild(innerEle);\n this.tbarAlgEle[(item.align + 's').toLowerCase()].push(innerEle);\n this.refreshPositioning();\n }\n else if (this.tbarAlign) {\n ele = closest(innerItems[0], '.' + CLS_ITEMS).children[parseInt(algIndex.toString(), 10)];\n ele.insertBefore(innerEle, ele.children[parseInt(index.toString(), 10)]);\n this.tbarAlgEle[(item.align + 's').toLowerCase()].splice(index, 0, innerEle);\n this.refreshPositioning();\n }\n else if (innerItems.length === 0) {\n innerItems = selectAll('.' + CLS_ITEMS, this.element);\n innerItems[0].appendChild(innerEle);\n }\n else {\n innerItems[0].parentNode.insertBefore(innerEle, innerItems[parseInt(index.toString(), 10)]);\n }\n this.items.splice(index, 0, item);\n if (item.template) {\n this.tbarEle.splice(this.tbarEle.length - 1, 1);\n }\n this.tbarEle.splice(index, 0, innerEle);\n index++;\n this.offsetWid = itemsDiv.offsetWidth;\n }\n }\n itemsDiv.style.width = '';\n this.renderOverflowMode();\n if (this.isReact) {\n this.renderReactTemplates();\n }\n };\n /**\n * Removes the items from the Toolbar. Acceptable arguments are index of item/HTMLElement/node list.\n *\n * @param {number|HTMLElement|NodeList|HTMLElement[]} args\n * Index or DOM element or an Array of item which is to be removed from the Toolbar.\n * @returns {void}.\n */\n Toolbar.prototype.removeItems = function (args) {\n var elements = args;\n var index;\n var innerItems = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n if (typeof (elements) === 'number') {\n index = parseInt(args.toString(), 10);\n this.removeItemByIndex(index, innerItems);\n }\n else {\n if (elements && elements.length > 1) {\n for (var _i = 0, _a = [].slice.call(elements); _i < _a.length; _i++) {\n var ele = _a[_i];\n index = this.tbarEle.indexOf(ele);\n this.removeItemByIndex(index, innerItems);\n innerItems = selectAll('.' + CLS_ITEM, this.element);\n }\n }\n else {\n var ele = (elements && elements.length && elements.length === 1) ? elements[0] : args;\n index = innerItems.indexOf(ele);\n this.removeItemByIndex(index, innerItems);\n }\n }\n this.resize();\n };\n Toolbar.prototype.removeItemByIndex = function (index, innerItems) {\n if (this.tbarEle[parseInt(index.toString(), 10)] && innerItems[parseInt(index.toString(), 10)]) {\n var eleIdx = this.tbarEle.indexOf(innerItems[parseInt(index.toString(), 10)]);\n if (this.tbarAlign) {\n var indexAgn = this.tbarAlgEle[(this.items[parseInt(eleIdx.toString(), 10)].align + 's').toLowerCase()].indexOf(this.tbarEle[parseInt(eleIdx.toString(), 10)]);\n this.tbarAlgEle[(this.items[parseInt(eleIdx.toString(), 10)].align + 's').toLowerCase()].splice(parseInt(indexAgn.toString(), 10), 1);\n }\n if (this.isReact) {\n this.clearToolbarTemplate(innerItems[parseInt(index.toString(), 10)]);\n }\n var btnItem = innerItems[parseInt(index.toString(), 10)].querySelector('.e-control.e-btn');\n if (!isNOU(btnItem) && !isNOU(btnItem.ej2_instances[0]) && !(btnItem.ej2_instances[0].isDestroyed)) {\n btnItem.ej2_instances[0].destroy();\n }\n detach(innerItems[parseInt(index.toString(), 10)]);\n this.items.splice(eleIdx, 1);\n this.tbarEle.splice(eleIdx, 1);\n }\n };\n Toolbar.prototype.templateRender = function (templateProp, innerEle, item, index) {\n var itemType = item.type;\n var eleObj = templateProp;\n var isComponent;\n if (typeof (templateProp) === 'object') {\n isComponent = typeof (eleObj.appendTo) === 'function';\n }\n if (typeof (templateProp) === 'string' || !isComponent) {\n var templateFn = void 0;\n var val = templateProp;\n var regEx = new RegExp(/<(?=.*? .*?\\/ ?>|br|hr|input|!--|wbr)[a-z]+.*?>|<([a-z]+).*?<\\/\\1>/i);\n val = (typeof (templateProp) === 'string') ? templateProp.trim() : templateProp;\n try {\n if (typeof (templateProp) === 'object' && !isNOU(templateProp.tagName)) {\n innerEle.appendChild(templateProp);\n }\n else if (typeof (templateProp) === 'string' && regEx.test(val)) {\n innerEle.innerHTML = val;\n }\n else if (document.querySelectorAll(val).length) {\n var ele = document.querySelector(val);\n var tempStr = ele.outerHTML.trim();\n innerEle.appendChild(ele);\n ele.style.display = '';\n if (!isNOU(tempStr)) {\n this.tempId.push(val);\n }\n }\n else {\n templateFn = templateCompiler(val);\n }\n }\n catch (e) {\n templateFn = templateCompiler(val);\n }\n var tempArray = void 0;\n if (!isNOU(templateFn)) {\n var toolbarTemplateID = this.element.id + index + '_template';\n tempArray = templateFn({}, this, 'template', toolbarTemplateID, this.isStringTemplate, undefined, undefined, this.root);\n }\n if (!isNOU(tempArray) && tempArray.length > 0) {\n [].slice.call(tempArray).forEach(function (ele) {\n if (!isNOU(ele.tagName)) {\n ele.style.display = '';\n }\n innerEle.appendChild(ele);\n });\n }\n }\n else if (itemType === 'Input') {\n var ele = this.createElement('input');\n if (item.id) {\n ele.id = item.id;\n }\n else {\n ele.id = getUniqueID('tbr-ipt');\n }\n innerEle.appendChild(ele);\n eleObj.appendTo(ele);\n }\n this.add(innerEle, CLS_TEMPLATE);\n var firstChild = innerEle.firstElementChild;\n if (!isNOU(firstChild)) {\n firstChild.setAttribute('tabindex', isNOU(firstChild.getAttribute(\"tabIndex\")) ? '-1' : this.getDataTabindex(firstChild));\n firstChild.setAttribute('data-tabindex', isNOU(firstChild.getAttribute(\"tabIndex\")) ? '-1' : this.getDataTabindex(firstChild));\n }\n this.tbarEle.push(innerEle);\n };\n Toolbar.prototype.buttonRendering = function (item, innerEle) {\n var dom = this.createElement('button', { className: CLS_TBARBTN });\n dom.setAttribute('type', 'button');\n var textStr = item.text;\n var iconCss;\n var iconPos;\n if (item.id) {\n dom.id = item.id;\n }\n else {\n dom.id = getUniqueID('e-tbr-btn');\n }\n var btnTxt = this.createElement('span', { className: 'e-tbar-btn-text' });\n if (textStr) {\n btnTxt.innerHTML = this.enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(textStr) : textStr;\n dom.appendChild(btnTxt);\n dom.classList.add('e-tbtn-txt');\n }\n else {\n this.add(innerEle, 'e-tbtn-align');\n }\n if (item.prefixIcon || item.suffixIcon) {\n if ((item.prefixIcon && item.suffixIcon) || item.prefixIcon) {\n iconCss = item.prefixIcon + ' e-icons';\n iconPos = 'Left';\n }\n else {\n iconCss = item.suffixIcon + ' e-icons';\n iconPos = 'Right';\n }\n }\n var btnObj = new Button({ iconCss: iconCss, iconPosition: iconPos });\n btnObj.createElement = this.createElement;\n btnObj.appendTo(dom);\n if (item.width) {\n setStyle(dom, { 'width': formatUnit(item.width) });\n }\n return dom;\n };\n Toolbar.prototype.renderSubComponent = function (item, index) {\n var dom;\n var innerEle = this.createElement('div', { className: CLS_ITEM });\n var tempDom = this.createElement('div', {\n innerHTML: this.enableHtmlSanitizer && !isNOU(item.tooltipText) ?\n SanitizeHtmlHelper.sanitize(item.tooltipText) : item.tooltipText\n });\n if (!this.tbarEle) {\n this.tbarEle = [];\n }\n if (item.htmlAttributes) {\n this.setAttr(item.htmlAttributes, innerEle);\n }\n if (item.tooltipText) {\n innerEle.setAttribute('title', tempDom.textContent);\n }\n if (item.cssClass) {\n innerEle.className = innerEle.className + ' ' + item.cssClass;\n }\n if (item.template) {\n this.templateRender(item.template, innerEle, item, index);\n }\n else {\n switch (item.type) {\n case 'Button':\n dom = this.buttonRendering(item, innerEle);\n dom.setAttribute('tabindex', isNOU(item.tabIndex) ? '-1' : item.tabIndex.toString());\n dom.setAttribute('data-tabindex', isNOU(item.tabIndex) ? '-1' : item.tabIndex.toString());\n dom.setAttribute('aria-label', (item.text || item.tooltipText));\n dom.setAttribute('aria-disabled', 'false');\n innerEle.appendChild(dom);\n innerEle.addEventListener('click', this.itemClick.bind(this));\n break;\n case 'Separator':\n this.add(innerEle, CLS_SEPARATOR);\n break;\n }\n }\n if (item.showTextOn) {\n var sTxt = item.showTextOn;\n if (sTxt === 'Toolbar') {\n this.add(innerEle, CLS_POPUPTEXT);\n this.add(innerEle, 'e-tbtn-align');\n }\n else if (sTxt === 'Overflow') {\n this.add(innerEle, CLS_TBARTEXT);\n }\n }\n if (item.overflow) {\n var overflow = item.overflow;\n if (overflow === 'Show') {\n this.add(innerEle, CLS_TBAROVERFLOW);\n }\n else if (overflow === 'Hide') {\n if (!innerEle.classList.contains(CLS_SEPARATOR)) {\n this.add(innerEle, CLS_POPOVERFLOW);\n }\n }\n }\n if (item.overflow !== 'Show' && item.showAlwaysInPopup && !innerEle.classList.contains(CLS_SEPARATOR)) {\n this.add(innerEle, CLS_POPPRI);\n this.popupPriCount++;\n }\n if (item.disabled) {\n this.add(innerEle, CLS_DISABLE);\n }\n if (item.visible === false) {\n this.add(innerEle, CLS_HIDDEN);\n }\n return innerEle;\n };\n Toolbar.prototype.getDataTabindex = function (ele) {\n return isNOU(ele.getAttribute('data-tabindex')) ? '-1' : ele.getAttribute('data-tabindex');\n };\n Toolbar.prototype.itemClick = function (e) {\n this.activeEleSwitch(e.currentTarget);\n };\n Toolbar.prototype.activeEleSwitch = function (ele) {\n this.activeEleRemove(ele.firstElementChild);\n this.activeEle.focus();\n };\n Toolbar.prototype.activeEleRemove = function (curEle) {\n if (!isNOU(this.activeEle)) {\n this.activeEle.setAttribute('tabindex', this.getDataTabindex(this.activeEle));\n }\n this.activeEle = curEle;\n if (this.getDataTabindex(this.activeEle) === '-1') {\n if (isNOU(this.trgtEle) && !curEle.parentElement.classList.contains(CLS_TEMPLATE)) {\n this.updateTabIndex('-1');\n curEle.removeAttribute('tabindex');\n }\n else {\n var tabIndex = parseInt(this.getDataTabindex(this.activeEle)) + 1;\n this.activeEle.setAttribute('tabindex', tabIndex.toString());\n }\n }\n };\n Toolbar.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Returns the current module name.\n *\n * @returns {string} - Returns the module name as string.\n * @private\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n Toolbar.prototype.itemsRerender = function (newProp) {\n this.items = this.tbarItemsCol;\n if (this.isReact || this.isAngular) {\n this.clearTemplate();\n }\n this.destroyMode();\n this.destroyItems();\n this.items = newProp;\n this.tbarItemsCol = this.items;\n this.renderItems();\n this.renderOverflowMode();\n if (this.isReact) {\n this.renderReactTemplates();\n }\n };\n Toolbar.prototype.resize = function () {\n var ele = this.element;\n this.tbResize = true;\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n if (this.popObj && this.overflowMode === 'Popup') {\n this.popObj.hide();\n }\n var checkOverflow = this.checkOverflow(ele, ele.getElementsByClassName(CLS_ITEMS)[0]);\n if (!checkOverflow) {\n this.destroyScroll();\n var multirowele = ele.querySelector('.' + CLS_ITEMS);\n if (!isNOU(multirowele)) {\n this.remove(multirowele, CLS_MULTIROWPOS);\n if (this.tbarAlign) {\n this.add(multirowele, CLS_TBARPOS);\n }\n }\n }\n if (checkOverflow && this.scrollModule && (this.offsetWid === ele.offsetWidth)) {\n return;\n }\n if (this.offsetWid > ele.offsetWidth || checkOverflow) {\n this.renderOverflowMode();\n }\n if (this.popObj) {\n if (this.overflowMode === 'Extended') {\n var eleStyles = window.getComputedStyle(this.element);\n this.popObj.width = parseFloat(eleStyles.width) + ((parseFloat(eleStyles.borderRightWidth)) * 2);\n }\n if (this.tbarAlign) {\n this.removePositioning();\n }\n this.popupRefresh(this.popObj.element, false);\n if (this.tbarAlign) {\n this.refreshPositioning();\n }\n }\n if (this.element.querySelector('.' + CLS_HSCROLLBAR)) {\n this.scrollStep = this.element.querySelector('.' + CLS_HSCROLLBAR).offsetWidth;\n }\n this.offsetWid = ele.offsetWidth;\n this.tbResize = false;\n this.separator();\n };\n Toolbar.prototype.orientationChange = function () {\n var _this = this;\n setTimeout(function () {\n _this.resize();\n }, 500);\n };\n Toolbar.prototype.extendedOpen = function () {\n var sib = this.element.querySelector('.' + CLS_EXTENDABLECLASS);\n if (this.overflowMode === 'Extended' && sib) {\n this.isExtendedOpen = sib.classList.contains(CLS_POPUPOPEN);\n }\n };\n Toolbar.prototype.updateHideEleTabIndex = function (ele, isHidden, isElement, eleIndex, innerItems) {\n if (isElement) {\n eleIndex = innerItems.indexOf(ele);\n }\n var nextEle = innerItems[++eleIndex];\n while (nextEle) {\n var skipEle = this.eleContains(nextEle);\n if (!skipEle) {\n var dataTabIndex = nextEle.firstElementChild.getAttribute('data-tabindex');\n if (isHidden && dataTabIndex === '-1') {\n nextEle.firstElementChild.setAttribute('tabindex', '0');\n }\n else if (dataTabIndex !== nextEle.firstElementChild.getAttribute('tabindex')) {\n nextEle.firstElementChild.setAttribute('tabindex', dataTabIndex);\n }\n break;\n }\n nextEle = innerItems[++eleIndex];\n }\n };\n Toolbar.prototype.clearToolbarTemplate = function (templateEle) {\n if (this.registeredTemplate && this.registeredTemplate[\"\" + 'template']) {\n var registeredTemplates = this.registeredTemplate;\n for (var index = 0; index < registeredTemplates[\"\" + 'template'].length; index++) {\n var registeredItem = registeredTemplates[\"\" + 'template'][parseInt(index.toString(), 10)].rootNodes[0];\n var closestItem = closest(registeredItem, '.' + CLS_ITEM);\n if (!isNOU(closestItem) && closestItem === templateEle) {\n this.clearTemplate(['template'], [registeredTemplates[\"\" + 'template'][parseInt(index.toString(), 10)]]);\n break;\n }\n }\n }\n else if (this.portals && this.portals.length > 0) {\n var portals = this.portals;\n for (var index = 0; index < portals.length; index++) {\n var portalItem = portals[parseInt(index.toString(), 10)];\n var closestItem = closest(portalItem.containerInfo, '.' + CLS_ITEM);\n if (!isNOU(closestItem) && closestItem === templateEle) {\n this.clearTemplate(['template'], index);\n break;\n }\n }\n }\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of the property that changed.\n *\n * @param {ToolbarModel} newProp - It contains new value of the data.\n * @param {ToolbarModel} oldProp - It contains old value of the data.\n * @returns {void}\n * @private\n */\n Toolbar.prototype.onPropertyChanged = function (newProp, oldProp) {\n var tEle = this.element;\n var wid = tEle.offsetWidth;\n this.extendedOpen();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'items':\n if (!(newProp.items instanceof Array && oldProp.items instanceof Array)) {\n var changedProb = Object.keys(newProp.items);\n for (var i = 0; i < changedProb.length; i++) {\n var index = parseInt(Object.keys(newProp.items)[parseInt(i.toString(), 10)], 10);\n var property = Object.keys(newProp.items[parseInt(index.toString(), 10)])[0];\n var newProperty = Object(newProp.items[parseInt(index.toString(), 10)])[\"\" + property];\n if (this.tbarAlign || property === 'align') {\n this.refresh();\n this.trigger('created');\n break;\n }\n var popupPriCheck = property === 'showAlwaysInPopup' && !newProperty;\n var booleanCheck = property === 'overflow' && this.popupPriCount !== 0;\n if ((popupPriCheck) || (this.items[parseInt(index.toString(), 10)].showAlwaysInPopup) && booleanCheck) {\n --this.popupPriCount;\n }\n if (isNOU(this.scrollModule)) {\n this.destroyMode();\n }\n var itemCol = [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, tEle));\n if (this.isReact && this.items[parseInt(index.toString(), 10)].template) {\n this.clearToolbarTemplate(itemCol[parseInt(index.toString(), 10)]);\n }\n detach(itemCol[parseInt(index.toString(), 10)]);\n this.tbarEle.splice(index, 1);\n this.addItems([this.items[parseInt(index.toString(), 10)]], index);\n this.items.splice(index, 1);\n if (this.items[parseInt(index.toString(), 10)].template) {\n this.tbarEle.splice(this.items.length, 1);\n }\n }\n }\n else {\n this.itemsRerender(newProp.items);\n }\n break;\n case 'width':\n setStyle(tEle, { 'width': formatUnit(newProp.width) });\n this.refreshOverflow();\n break;\n case 'height':\n setStyle(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'overflowMode':\n this.destroyMode();\n this.renderOverflowMode();\n if (this.enableRtl) {\n this.add(tEle, CLS_RTL);\n }\n this.refreshOverflow();\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n this.add(tEle, CLS_RTL);\n }\n else {\n this.remove(tEle, CLS_RTL);\n }\n if (!isNOU(this.scrollModule)) {\n if (newProp.enableRtl) {\n this.add(this.scrollModule.element, CLS_RTL);\n }\n else {\n this.remove(this.scrollModule.element, CLS_RTL);\n }\n }\n if (!isNOU(this.popObj)) {\n if (newProp.enableRtl) {\n this.add(this.popObj.element, CLS_RTL);\n }\n else {\n this.remove(this.popObj.element, CLS_RTL);\n }\n }\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n break;\n case 'scrollStep':\n if (this.scrollModule) {\n this.scrollModule.scrollStep = this.scrollStep;\n }\n break;\n case 'enableCollision':\n if (this.popObj) {\n this.popObj.collision = { Y: this.enableCollision ? 'flip' : 'none' };\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.split(' '));\n }\n break;\n case 'allowKeyboard':\n this.unwireKeyboardEvent();\n if (newProp.allowKeyboard) {\n this.wireKeyboardEvent();\n }\n break;\n }\n }\n };\n /**\n * Shows or hides the Toolbar item that is in the specified index.\n *\n * @param {number | HTMLElement} index - Index value of target item or DOM element of items to be hidden or shown.\n * @param {boolean} value - Based on this Boolean value, item will be hide (true) or show (false). By default, value is false.\n * @returns {void}.\n */\n Toolbar.prototype.hideItem = function (index, value) {\n var isElement = (typeof (index) === 'object') ? true : false;\n var eleIndex = index;\n var ele;\n if (!isElement && isNOU(eleIndex)) {\n return;\n }\n var innerItems = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n if (isElement) {\n ele = index;\n }\n else if (this.tbarEle[parseInt(eleIndex.toString(), 10)]) {\n var innerItems_1 = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n ele = innerItems_1[parseInt(eleIndex.toString(), 10)];\n }\n if (ele) {\n if (value) {\n ele.classList.add(CLS_HIDDEN);\n if (!ele.classList.contains(CLS_SEPARATOR)) {\n if (isNOU(ele.firstElementChild.getAttribute('tabindex')) ||\n ele.firstElementChild.getAttribute('tabindex') !== '-1') {\n this.updateHideEleTabIndex(ele, value, isElement, eleIndex, innerItems);\n }\n }\n }\n else {\n ele.classList.remove(CLS_HIDDEN);\n if (!ele.classList.contains(CLS_SEPARATOR)) {\n this.updateHideEleTabIndex(ele, value, isElement, eleIndex, innerItems);\n }\n }\n this.refreshOverflow();\n }\n };\n __decorate([\n Collection([], Item)\n ], Toolbar.prototype, \"items\", void 0);\n __decorate([\n Property('auto')\n ], Toolbar.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Toolbar.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], Toolbar.prototype, \"cssClass\", void 0);\n __decorate([\n Property('Scrollable')\n ], Toolbar.prototype, \"overflowMode\", void 0);\n __decorate([\n Property()\n ], Toolbar.prototype, \"scrollStep\", void 0);\n __decorate([\n Property(true)\n ], Toolbar.prototype, \"enableCollision\", void 0);\n __decorate([\n Property(true)\n ], Toolbar.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(true)\n ], Toolbar.prototype, \"allowKeyboard\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"clicked\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"beforeCreate\", void 0);\n Toolbar = __decorate([\n NotifyPropertyChanges\n ], Toolbar);\n return Toolbar;\n}(Component));\nexport { Toolbar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Touch, Component, EventHandler, selectAll, getUniqueID } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Property, Browser, detach } from '@syncfusion/ej2-base';\nimport { classList, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar CLS_ROOT = 'e-hscroll';\nvar CLS_RTL = 'e-rtl';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_HSCROLLBAR = 'e-hscroll-bar';\nvar CLS_HSCROLLCON = 'e-hscroll-content';\nvar CLS_NAVARROW = 'e-nav-arrow';\nvar CLS_NAVRIGHTARROW = 'e-nav-right-arrow';\nvar CLS_NAVLEFTARROW = 'e-nav-left-arrow';\nvar CLS_HSCROLLNAV = 'e-scroll-nav';\nvar CLS_HSCROLLNAVRIGHT = 'e-scroll-right-nav';\nvar CLS_HSCROLLNAVLEFT = 'e-scroll-left-nav';\nvar CLS_DEVICE = 'e-scroll-device';\nvar CLS_OVERLAY = 'e-scroll-overlay';\nvar CLS_RIGHTOVERLAY = 'e-scroll-right-overlay';\nvar CLS_LEFTOVERLAY = 'e-scroll-left-overlay';\nvar OVERLAY_MAXWID = 40;\n/**\n * HScroll module is introduces horizontal scroller when content exceeds the current viewing area.\n * It can be useful for the components like Toolbar, Tab which needs horizontal scrolling alone.\n * Hidden content can be view by touch moving or icon click.\n * ```html\n *
\n * \n * ```\n */\nvar HScroll = /** @class */ (function (_super) {\n __extends(HScroll, _super);\n /**\n * Initializes a new instance of the HScroll class.\n *\n * @param {HScrollModel} options - Specifies HScroll model properties as options.\n * @param {string | HTMLElement} element - Specifies the element for which horizontal scrolling applies.\n */\n function HScroll(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler\n *\n * @private\n * @returns {void}\n */\n HScroll.prototype.preRender = function () {\n this.browser = Browser.info.name;\n this.browserCheck = this.browser === 'mozilla';\n this.isDevice = Browser.isDevice;\n this.customStep = true;\n var element = this.element;\n this.ieCheck = this.browser === 'edge' || this.browser === 'msie';\n this.initialize();\n if (element.id === '') {\n element.id = getUniqueID('hscroll');\n this.uniqueId = true;\n }\n element.style.display = 'block';\n if (this.enableRtl) {\n element.classList.add(CLS_RTL);\n }\n };\n /**\n * To Initialize the horizontal scroll rendering\n *\n * @private\n * @returns {void}\n */\n HScroll.prototype.render = function () {\n this.touchModule = new Touch(this.element, { scroll: this.touchHandler.bind(this), swipe: this.swipeHandler.bind(this) });\n EventHandler.add(this.scrollEle, 'scroll', this.scrollHandler, this);\n if (!this.isDevice) {\n this.createNavIcon(this.element);\n }\n else {\n this.element.classList.add(CLS_DEVICE);\n this.createOverlay(this.element);\n }\n this.setScrollState();\n };\n HScroll.prototype.setScrollState = function () {\n if (isNullOrUndefined(this.scrollStep) || this.scrollStep < 0) {\n this.scrollStep = this.scrollEle.offsetWidth;\n this.customStep = false;\n }\n else {\n this.customStep = true;\n }\n };\n HScroll.prototype.initialize = function () {\n var scrollEle = this.createElement('div', { className: CLS_HSCROLLCON });\n var scrollDiv = this.createElement('div', { className: CLS_HSCROLLBAR });\n scrollDiv.setAttribute('tabindex', '-1');\n var ele = this.element;\n var innerEle = [].slice.call(ele.children);\n for (var _i = 0, innerEle_1 = innerEle; _i < innerEle_1.length; _i++) {\n var ele_1 = innerEle_1[_i];\n scrollEle.appendChild(ele_1);\n }\n scrollDiv.appendChild(scrollEle);\n ele.appendChild(scrollDiv);\n scrollDiv.style.overflowX = 'hidden';\n this.scrollEle = scrollDiv;\n this.scrollItems = scrollEle;\n };\n HScroll.prototype.getPersistData = function () {\n var keyEntity = ['scrollStep'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Returns the current module name.\n *\n * @returns {string} - It returns the current module name.\n * @private\n */\n HScroll.prototype.getModuleName = function () {\n return 'hScroll';\n };\n /**\n * Removes the control from the DOM and also removes all its related events.\n *\n * @returns {void}\n */\n HScroll.prototype.destroy = function () {\n var ele = this.element;\n ele.style.display = '';\n ele.classList.remove(CLS_ROOT);\n ele.classList.remove(CLS_DEVICE);\n ele.classList.remove(CLS_RTL);\n var nav = selectAll('.e-' + ele.id + '_nav.' + CLS_HSCROLLNAV, ele);\n var overlay = selectAll('.' + CLS_OVERLAY, ele);\n [].slice.call(overlay).forEach(function (ele) {\n detach(ele);\n });\n for (var _i = 0, _a = [].slice.call(this.scrollItems.children); _i < _a.length; _i++) {\n var elem = _a[_i];\n ele.appendChild(elem);\n }\n if (this.uniqueId) {\n this.element.removeAttribute('id');\n }\n detach(this.scrollEle);\n if (nav.length > 0) {\n detach(nav[0]);\n if (!isNullOrUndefined(nav[1])) {\n detach(nav[1]);\n }\n }\n EventHandler.remove(this.scrollEle, 'scroll', this.scrollHandler);\n this.touchModule.destroy();\n this.touchModule = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Specifies the value to disable/enable the HScroll component.\n * When set to `true` , the component will be disabled.\n *\n * @param {boolean} value - Based on this Boolean value, HScroll will be enabled (false) or disabled (true).\n * @returns {void}.\n */\n HScroll.prototype.disable = function (value) {\n var navEles = selectAll('.e-scroll-nav:not(.' + CLS_DISABLE + ')', this.element);\n if (value) {\n this.element.classList.add(CLS_DISABLE);\n }\n else {\n this.element.classList.remove(CLS_DISABLE);\n }\n [].slice.call(navEles).forEach(function (el) {\n el.setAttribute('tabindex', !value ? '0' : '-1');\n });\n };\n HScroll.prototype.createOverlay = function (element) {\n var id = element.id.concat('_nav');\n var rightOverlayEle = this.createElement('div', { className: CLS_OVERLAY + ' ' + CLS_RIGHTOVERLAY });\n var clsRight = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVRIGHT);\n var rightEle = this.createElement('div', { id: id.concat('_right'), className: clsRight });\n var navItem = this.createElement('div', { className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n rightEle.appendChild(navItem);\n var leftEle = this.createElement('div', { className: CLS_OVERLAY + ' ' + CLS_LEFTOVERLAY });\n if (this.ieCheck) {\n rightEle.classList.add('e-ie-align');\n }\n element.appendChild(rightOverlayEle);\n element.appendChild(rightEle);\n element.insertBefore(leftEle, element.firstChild);\n this.eventBinding([rightEle]);\n };\n HScroll.prototype.createNavIcon = function (element) {\n var id = element.id.concat('_nav');\n var clsRight = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVRIGHT);\n var rightAttributes = { 'role': 'button', 'id': id.concat('_right'), 'aria-label': 'Scroll right' };\n var nav = this.createElement('div', { className: clsRight, attrs: rightAttributes });\n nav.setAttribute('aria-disabled', 'false');\n var navItem = this.createElement('div', { className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n var clsLeft = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVLEFT);\n var leftAttributes = { 'role': 'button', 'id': id.concat('_left'), 'aria-label': 'Scroll left' };\n var navEle = this.createElement('div', { className: clsLeft + ' ' + CLS_DISABLE, attrs: leftAttributes });\n navEle.setAttribute('aria-disabled', 'true');\n var navLeftItem = this.createElement('div', { className: CLS_NAVLEFTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n navEle.appendChild(navLeftItem);\n nav.appendChild(navItem);\n element.appendChild(nav);\n element.insertBefore(navEle, element.firstChild);\n if (this.ieCheck) {\n nav.classList.add('e-ie-align');\n navEle.classList.add('e-ie-align');\n }\n this.eventBinding([nav, navEle]);\n };\n HScroll.prototype.onKeyPress = function (e) {\n var _this = this;\n if (e.key === 'Enter') {\n var timeoutFun_1 = function () {\n _this.keyTimeout = true;\n _this.eleScrolling(10, e.target, true);\n };\n this.keyTimer = window.setTimeout(function () {\n timeoutFun_1();\n }, 100);\n }\n };\n HScroll.prototype.onKeyUp = function (e) {\n if (e.key !== 'Enter') {\n return;\n }\n if (this.keyTimeout) {\n this.keyTimeout = false;\n }\n else {\n e.target.click();\n }\n clearTimeout(this.keyTimer);\n };\n HScroll.prototype.eventBinding = function (ele) {\n var _this = this;\n [].slice.call(ele).forEach(function (el) {\n new Touch(el, { tapHold: _this.tabHoldHandler.bind(_this), tapHoldThreshold: 500 });\n el.addEventListener('keydown', _this.onKeyPress.bind(_this));\n el.addEventListener('keyup', _this.onKeyUp.bind(_this));\n el.addEventListener('mouseup', _this.repeatScroll.bind(_this));\n el.addEventListener('touchend', _this.repeatScroll.bind(_this));\n el.addEventListener('contextmenu', function (e) {\n e.preventDefault();\n });\n EventHandler.add(el, 'click', _this.clickEventHandler, _this);\n });\n };\n HScroll.prototype.repeatScroll = function () {\n clearInterval(this.timeout);\n };\n HScroll.prototype.tabHoldHandler = function (e) {\n var _this = this;\n var trgt = e.originalEvent.target;\n trgt = this.contains(trgt, CLS_HSCROLLNAV) ? trgt.firstElementChild : trgt;\n var scrollDis = 10;\n var timeoutFun = function () {\n _this.eleScrolling(scrollDis, trgt, true);\n };\n this.timeout = window.setInterval(function () {\n timeoutFun();\n }, 50);\n };\n HScroll.prototype.contains = function (ele, className) {\n return ele.classList.contains(className);\n };\n HScroll.prototype.eleScrolling = function (scrollDis, trgt, isContinuous) {\n var rootEle = this.element;\n var classList = trgt.classList;\n if (classList.contains(CLS_HSCROLLNAV)) {\n classList = trgt.querySelector('.' + CLS_NAVARROW).classList;\n }\n if (this.contains(rootEle, CLS_RTL) && this.browserCheck) {\n scrollDis = -scrollDis;\n }\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n if (classList.contains(CLS_NAVRIGHTARROW)) {\n this.frameScrollRequest(scrollDis, 'add', isContinuous);\n }\n else {\n this.frameScrollRequest(scrollDis, '', isContinuous);\n }\n }\n else {\n if (classList.contains(CLS_NAVLEFTARROW)) {\n this.frameScrollRequest(scrollDis, 'add', isContinuous);\n }\n else {\n this.frameScrollRequest(scrollDis, '', isContinuous);\n }\n }\n };\n HScroll.prototype.clickEventHandler = function (e) {\n this.eleScrolling(this.scrollStep, e.target, false);\n };\n HScroll.prototype.swipeHandler = function (e) {\n var swipeEle = this.scrollEle;\n var distance;\n if (e.velocity <= 1) {\n distance = e.distanceX / (e.velocity * 10);\n }\n else {\n distance = e.distanceX / e.velocity;\n }\n var start = 0.5;\n var animate = function () {\n var step = Math.sin(start);\n if (step <= 0) {\n window.cancelAnimationFrame(step);\n }\n else {\n if (e.swipeDirection === 'Left') {\n swipeEle.scrollLeft += distance * step;\n }\n else if (e.swipeDirection === 'Right') {\n swipeEle.scrollLeft -= distance * step;\n }\n start -= 0.5;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n HScroll.prototype.scrollUpdating = function (scrollVal, action) {\n if (action === 'add') {\n this.scrollEle.scrollLeft += scrollVal;\n }\n else {\n this.scrollEle.scrollLeft -= scrollVal;\n }\n if (this.enableRtl && this.scrollEle.scrollLeft > 0) {\n this.scrollEle.scrollLeft = 0;\n }\n };\n HScroll.prototype.frameScrollRequest = function (scrollVal, action, isContinuous) {\n var _this = this;\n var step = 10;\n if (isContinuous) {\n this.scrollUpdating(scrollVal, action);\n return;\n }\n if (!this.customStep) {\n [].slice.call(selectAll('.' + CLS_OVERLAY, this.element)).forEach(function (el) {\n scrollVal -= el.offsetWidth;\n });\n }\n var animate = function () {\n var scrollValue;\n var scrollStep;\n if (_this.contains(_this.element, CLS_RTL) && _this.browserCheck) {\n scrollValue = -scrollVal;\n scrollStep = -step;\n }\n else {\n scrollValue = scrollVal;\n scrollStep = step;\n }\n if (scrollValue < step) {\n window.cancelAnimationFrame(scrollStep);\n }\n else {\n _this.scrollUpdating(scrollStep, action);\n scrollVal -= scrollStep;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n HScroll.prototype.touchHandler = function (e) {\n var ele = this.scrollEle;\n var distance = e.distanceX;\n if ((this.ieCheck) && this.contains(this.element, CLS_RTL)) {\n distance = -distance;\n }\n if (e.scrollDirection === 'Left') {\n ele.scrollLeft = ele.scrollLeft + distance;\n }\n else if (e.scrollDirection === 'Right') {\n ele.scrollLeft = ele.scrollLeft - distance;\n }\n };\n HScroll.prototype.arrowDisabling = function (addDisable, removeDisable) {\n if (this.isDevice) {\n var arrowEle = isNullOrUndefined(addDisable) ? removeDisable : addDisable;\n var arrowIcon = arrowEle.querySelector('.' + CLS_NAVARROW);\n if (isNullOrUndefined(addDisable)) {\n classList(arrowIcon, [CLS_NAVRIGHTARROW], [CLS_NAVLEFTARROW]);\n }\n else {\n classList(arrowIcon, [CLS_NAVLEFTARROW], [CLS_NAVRIGHTARROW]);\n }\n }\n else if (addDisable && removeDisable) {\n addDisable.classList.add(CLS_DISABLE);\n addDisable.setAttribute('aria-disabled', 'true');\n addDisable.removeAttribute('tabindex');\n removeDisable.classList.remove(CLS_DISABLE);\n removeDisable.setAttribute('aria-disabled', 'false');\n removeDisable.setAttribute('tabindex', '0');\n }\n this.repeatScroll();\n };\n HScroll.prototype.scrollHandler = function (e) {\n var target = e.target;\n var width = target.offsetWidth;\n var rootEle = this.element;\n var navLeftEle = this.element.querySelector('.' + CLS_HSCROLLNAVLEFT);\n var navRightEle = this.element.querySelector('.' + CLS_HSCROLLNAVRIGHT);\n var leftOverlay = this.element.querySelector('.' + CLS_LEFTOVERLAY);\n var rightOverlay = this.element.querySelector('.' + CLS_RIGHTOVERLAY);\n var scrollLeft = target.scrollLeft;\n if (scrollLeft <= 0) {\n scrollLeft = -scrollLeft;\n }\n if (this.isDevice) {\n if (this.enableRtl && !(this.browserCheck || this.ieCheck)) {\n leftOverlay = this.element.querySelector('.' + CLS_RIGHTOVERLAY);\n rightOverlay = this.element.querySelector('.' + CLS_LEFTOVERLAY);\n }\n if (scrollLeft < OVERLAY_MAXWID) {\n leftOverlay.style.width = scrollLeft + 'px';\n }\n else {\n leftOverlay.style.width = '40px';\n }\n if ((target.scrollWidth - Math.ceil(width + scrollLeft)) < OVERLAY_MAXWID) {\n rightOverlay.style.width = (target.scrollWidth - Math.ceil(width + scrollLeft)) + 'px';\n }\n else {\n rightOverlay.style.width = '40px';\n }\n }\n if (scrollLeft === 0) {\n this.arrowDisabling(navLeftEle, navRightEle);\n }\n else if (Math.ceil(width + scrollLeft + .1) >= target.scrollWidth) {\n this.arrowDisabling(navRightEle, navLeftEle);\n }\n else {\n var disEle = this.element.querySelector('.' + CLS_HSCROLLNAV + '.' + CLS_DISABLE);\n if (disEle) {\n disEle.classList.remove(CLS_DISABLE);\n disEle.setAttribute('aria-disabled', 'false');\n disEle.setAttribute('tabindex', '0');\n }\n }\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of property that changed.\n *\n * @param {HScrollModel} newProp - It contains the new value of data.\n * @param {HScrollModel} oldProp - It contains the old value of data.\n * @returns {void}\n * @private\n */\n HScroll.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'scrollStep':\n this.setScrollState();\n break;\n case 'enableRtl':\n newProp.enableRtl ? this.element.classList.add(CLS_RTL) : this.element.classList.remove(CLS_RTL);\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], HScroll.prototype, \"scrollStep\", void 0);\n HScroll = __decorate([\n NotifyPropertyChanges\n ], HScroll);\n return HScroll;\n}(Component));\nexport { HScroll };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { closest as closestElement, removeClass, classList, remove } from '@syncfusion/ej2-base';\nimport { getElementIndex, inArray, parentsUntil, getPosition, isActionPrevent } from '../base/util';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\n/**\n *\n * The `Reorder` module is used for reordering columns.\n */\nvar Reorder = /** @class */ (function () {\n /**\n * Constructor for the Grid reorder module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @hidden\n */\n function Reorder(parent) {\n this.idx = 0;\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.headerDrop, this.headerDrop, this);\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.reorderComplete, this.onActionComplete, this);\n this.parent.on(events.columnDrag, this.drag, this);\n this.parent.on(events.columnDragStart, this.dragStart, this);\n this.parent.on(events.columnDragStop, this.dragStop, this);\n this.parent.on(events.headerDrop, this.headerDrop, this);\n this.parent.on(events.headerRefreshed, this.createReorderElement, this);\n this.parent.on(events.keyPressed, this.keyPressHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n }\n Reorder.prototype.chkDropPosition = function (srcElem, destElem) {\n var col = this.parent.getColumnByUid(destElem.firstElementChild.getAttribute('e-mappinguid'));\n var bool = col ? !col.lockColumn : true;\n return ((srcElem.parentElement.isEqualNode(destElem.parentElement) || this.parent.enableColumnVirtualization)\n || (this.parent.isFrozenGrid()\n && Array.prototype.indexOf.call(closestElement(srcElem, 'thead').children, srcElem.parentElement)\n === Array.prototype.indexOf.call(closestElement(destElem, 'thead').children, destElem.parentElement)))\n && this.targetParentContainerIndex(srcElem, destElem) > -1 && bool;\n };\n Reorder.prototype.chkDropAllCols = function (srcElem, destElem) {\n var isFound;\n var headers = this.getHeaderCells();\n var header;\n while (!isFound && headers.length > 0) {\n header = headers.pop();\n isFound = srcElem !== header && this.targetParentContainerIndex(srcElem, destElem) > -1;\n }\n return isFound;\n };\n Reorder.prototype.findColParent = function (col, cols, parent) {\n // eslint-disable-next-line no-self-assign\n parent = parent;\n for (var i = 0, len = cols.length; i < len; i++) {\n if (col === cols[parseInt(i.toString(), 10)]) {\n return true;\n }\n else if (cols[parseInt(i.toString(), 10)].columns) {\n var cnt = parent.length;\n parent.push(cols[parseInt(i.toString(), 10)]);\n if (!this.findColParent(col, cols[parseInt(i.toString(), 10)].columns, parent)) {\n parent.splice(cnt, parent.length - cnt);\n }\n else {\n return true;\n }\n }\n }\n return false;\n };\n Reorder.prototype.getColumnsModel = function (cols, isNotStackedHeader) {\n var columnModel = [];\n var subCols = [];\n for (var i = 0, len = cols.length; i < len; i++) {\n if (!isNullOrUndefined(cols[parseInt(i.toString(), 10)])) {\n if (cols[parseInt(i.toString(), 10)].visible) {\n columnModel.push(cols[parseInt(i.toString(), 10)]);\n }\n else if (isNotStackedHeader) {\n columnModel.push(cols[parseInt(i.toString(), 10)]);\n }\n if (cols[parseInt(i.toString(), 10)].columns) {\n subCols = subCols.concat(cols[parseInt(i.toString(), 10)].columns);\n }\n }\n }\n if (subCols.length) {\n columnModel = columnModel.concat(this.getColumnsModel(subCols));\n }\n return columnModel;\n };\n Reorder.prototype.headerDrop = function (e) {\n var gObj = this.parent;\n var dropElement = this.element.querySelector('.e-headercelldiv') || this.element.querySelector('.e-stackedheadercelldiv');\n var uId = dropElement.getAttribute('e-mappinguid');\n var column = gObj.getColumnByUid(uId);\n if (!closestElement(e.target, 'th') || (!isNullOrUndefined(column) && (!column.allowReordering || column.lockColumn))) {\n this.parent.log('action_disabled_column', { moduleName: this.getModuleName(), column: column });\n return;\n }\n var destElem = closestElement(e.target, '.e-headercell');\n var destElemDiv = destElem.querySelector('.e-headercelldiv') || destElem.querySelector('.e-stackedheadercelldiv');\n var destElemUid = destElemDiv.getAttribute('e-mappinguid');\n if (!isNullOrUndefined(destElemUid)) {\n var destColumn = gObj.getColumnByUid(destElemUid);\n if (isNullOrUndefined(destColumn) || !destColumn.allowReordering || destColumn.lockColumn) {\n this.parent.log('action_disabled_column', { moduleName: this.getModuleName(), column: column, destColumn: destColumn });\n return;\n }\n }\n if (destElem && !(!this.chkDropPosition(this.element, destElem) || !this.chkDropAllCols(this.element, destElem))) {\n if (this.parent.enableColumnVirtualization) {\n var columns = this.parent.columns;\n var sourceUid_1 = this.element.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n var col = this.parent.columns.filter(function (col) { return col.uid === sourceUid_1; });\n var colMatchIndex_1 = null;\n var column_1 = col[0];\n var destUid_1 = destElem.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n columns.some(function (col, index) {\n if (col.uid === destUid_1) {\n colMatchIndex_1 = index;\n return col.uid === destUid_1;\n }\n return false;\n });\n if (!isNullOrUndefined(colMatchIndex_1)) {\n this.moveColumns(colMatchIndex_1, column_1);\n }\n }\n else {\n var newIndex = this.targetParentContainerIndex(this.element, destElem);\n var uid = this.element.firstElementChild.getAttribute('e-mappinguid');\n this.destElement = destElem;\n this.parent.notify(events.setReorderDestinationElement, { ele: destElem });\n if (uid) {\n this.moveColumns(newIndex, this.parent.getColumnByUid(uid));\n }\n else {\n var headers = this.getHeaderCells();\n var oldIdx = getElementIndex(this.element, headers);\n var columns = this.getColumnsModel(this.parent.columns);\n this.moveColumns(newIndex, columns[parseInt(oldIdx.toString(), 10)]);\n }\n }\n }\n };\n Reorder.prototype.isActionPrevent = function (gObj) {\n return isActionPrevent(gObj);\n };\n Reorder.prototype.moveColumns = function (destIndex, column, reorderByColumn, preventRefresh) {\n var gObj = this.parent;\n if (this.isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.moveColumns, arg1: destIndex, arg2: column });\n return;\n }\n var parent = this.getColParent(column, this.parent.columns);\n var cols = parent ? parent.columns : this.parent.columns;\n var srcIdx = inArray(column, cols);\n if ((parent || this.parent.lockcolPositionCount) && !reorderByColumn &&\n !this.parent.enableColumnVirtualization) {\n for (var i = 0; i < cols.length; i++) {\n if (cols[parseInt(i.toString(), 10)].field === column.field) {\n srcIdx = i;\n break;\n }\n }\n var col = this.parent.getColumnByUid(this.destElement.firstElementChild.getAttribute('e-mappinguid'));\n if (col) {\n for (var i = 0; i < cols.length; i++) {\n if (cols[parseInt(i.toString(), 10)].field === col.field) {\n destIndex = i;\n break;\n }\n }\n }\n else {\n for (var i = 0; i < cols.length; i++) {\n if (cols[parseInt(i.toString(), 10)].headerText === this.destElement.innerText.trim()) {\n destIndex = i;\n }\n }\n }\n }\n if (!gObj.allowReordering || srcIdx === destIndex || srcIdx === -1 || destIndex === -1) {\n return;\n }\n cols.splice(destIndex, 0, cols.splice(srcIdx, 1)[0]);\n var args = { column: column, destIndex: destIndex, columns: cols, parent: parent, cancel: false };\n gObj.notify(events.refreshFrozenColumns, args);\n if (args.cancel) {\n return;\n }\n if (this.parent.isFrozenGrid()) {\n if (this.parent.frozenColumns) {\n for (var i = 0; i < cols.length; i++) {\n if (cols[parseInt(i.toString(), 10)].freeze === 'Left') {\n cols[parseInt(i.toString(), 10)].freeze = undefined;\n }\n }\n }\n else {\n if (this.parent.getFrozenLeftCount() > destIndex) {\n column.freeze = 'Left';\n }\n else if ((cols.length - this.parent.getFrozenRightColumnsCount()) <= destIndex) {\n column.freeze = 'Right';\n }\n else {\n column.freeze = column.freeze === 'Fixed' ? 'Fixed' : undefined;\n }\n }\n }\n gObj.getColumns(true);\n gObj.notify(events.columnPositionChanged, { fromIndex: destIndex, toIndex: srcIdx });\n if (preventRefresh !== false) {\n gObj.notify(events.modelChanged, {\n type: events.actionBegin, requestType: 'reorder', fromIndex: destIndex, toIndex: srcIdx, toColumnUid: column.uid\n });\n }\n if (this.parent.isFrozenGrid()) {\n var cols_1 = this.parent.columns;\n this.idx = 0;\n this.refreshColumnIndex(cols_1);\n this.parent.notify(events.refreshFrozenPosition, {});\n }\n };\n Reorder.prototype.refreshColumnIndex = function (cols) {\n for (var i = 0; i < cols.length; i++) {\n cols[parseInt(i.toString(), 10)].index = this.idx;\n this.idx++;\n if (cols[parseInt(i.toString(), 10)].columns && cols[parseInt(i.toString(), 10)].columns.length) {\n this.refreshColumnIndex(cols[parseInt(i.toString(), 10)].columns);\n }\n }\n };\n Reorder.prototype.targetParentContainerIndex = function (srcElem, destElem) {\n var cols = this.parent.columns;\n var headers = this.getHeaderCells();\n var stackedHdrColumn = this.parent.getStackedColumns(cols);\n var stackedCols = [];\n if (stackedHdrColumn.length) {\n stackedCols = this.getAllStackedheaderParentColumns(headers);\n }\n var flatColumns = stackedHdrColumn.length && stackedCols.length ?\n this.getColumnsModel(stackedCols) : this.getColumnsModel(cols, true);\n var parent = this.getColParent(flatColumns[getElementIndex(srcElem, headers)], cols);\n cols = parent ? parent.columns : cols;\n return inArray(flatColumns[getElementIndex(destElem, headers)], cols);\n };\n Reorder.prototype.getAllStackedheaderParentColumns = function (headers) {\n var stackedCols = [];\n for (var i = 0; i < headers.length; i++) {\n if (headers[parseInt(i.toString(), 10)].classList.contains('e-hide')) {\n headers.splice(i, 1);\n i--;\n }\n else if (headers[parseInt(i.toString(), 10)].closest('thead').firstChild === headers[parseInt(i.toString(), 10)].parentElement) {\n stackedCols.push(this.parent.getColumnByUid(headers[parseInt(i.toString(), 10)].firstElementChild.getAttribute('e-mappinguid')));\n }\n }\n return stackedCols;\n };\n Reorder.prototype.getHeaderCells = function () {\n return [].slice.call(this.parent.element.getElementsByClassName('e-headercell'));\n };\n Reorder.prototype.getColParent = function (column, columns) {\n var parents = [];\n this.findColParent(column, columns, parents);\n return parents[parents.length - 1];\n };\n Reorder.prototype.reorderSingleColumn = function (fromFName, toFName) {\n var fColumn = this.parent.enableColumnVirtualization ?\n this.parent.columns.filter(function (col) { return col.field === fromFName; })[0]\n : this.parent.getColumnByField(fromFName);\n var toColumn = this.parent.enableColumnVirtualization ?\n this.parent.columns.filter(function (col) { return col.field === toFName; })[0]\n : this.parent.getColumnByField(toFName);\n if ((!isNullOrUndefined(fColumn) && (!fColumn.allowReordering || fColumn.lockColumn)) ||\n (!isNullOrUndefined(toColumn) && (!toColumn.allowReordering || toColumn.lockColumn))) {\n this.parent.log('action_disabled_column', { moduleName: this.getModuleName(), column: fColumn, destColumn: toColumn });\n return;\n }\n var column = toColumn;\n var parent = this.getColParent(column, this.parent.columns);\n var columns = parent ? parent.columns : this.parent.columns;\n var destIndex = inArray(column, columns);\n if (destIndex > -1) {\n this.moveColumns(destIndex, fColumn, true);\n }\n };\n Reorder.prototype.reorderMultipleColumns = function (fromFNames, toFName) {\n var toIndex = this.parent.getColumnIndexByField(toFName);\n var toColumn = this.parent.getColumnByField(toFName);\n if (toIndex < 0 || (!isNullOrUndefined(toColumn) && (!toColumn.allowReordering || toColumn.lockColumn))) {\n return;\n }\n for (var i = 0; i < fromFNames.length; i++) {\n var column = this.parent.getColumnByField(fromFNames[parseInt(i.toString(), 10)]);\n if (!isNullOrUndefined(column) && (!column.allowReordering || column.lockColumn)) {\n return;\n }\n }\n for (var i = 0; i < fromFNames.length; i++) {\n var column = this.parent.getColumnByIndex(toIndex);\n var parent_1 = this.getColParent(column, this.parent.columns);\n var columns = parent_1 ? parent_1.columns : this.parent.columns;\n var destIndex = inArray(column, columns);\n if (destIndex > -1) {\n this.moveColumns(destIndex, this.parent.getColumnByField(fromFNames[parseInt(i.toString(), 10)]), true, true);\n }\n if (this.parent.getColumnIndexByField(fromFNames[i + 1]) >= destIndex) {\n toIndex++; //R to L\n }\n }\n };\n Reorder.prototype.moveTargetColumn = function (column, toIndex) {\n if (toIndex > -1) {\n this.moveColumns(toIndex, column, true);\n }\n };\n Reorder.prototype.reorderSingleColumnByTarget = function (fieldName, toIndex) {\n this.moveTargetColumn(this.parent.getColumnByField(fieldName), toIndex);\n };\n Reorder.prototype.reorderMultipleColumnByTarget = function (fieldName, toIndex) {\n for (var i = 0; i < fieldName.length; i++) {\n this.reorderSingleColumnByTarget(fieldName[parseInt(i.toString(), 10)], toIndex);\n }\n };\n /**\n * Changes the position of the Grid columns by field names.\n *\n * @param {string | string[]} fromFName - Defines the origin field names.\n * @param {string} toFName - Defines the destination field name.\n * @returns {void}\n */\n Reorder.prototype.reorderColumns = function (fromFName, toFName) {\n if (typeof fromFName === 'string') {\n this.reorderSingleColumn(fromFName, toFName);\n this.fromCol = fromFName;\n }\n else {\n this.reorderMultipleColumns(fromFName, toFName);\n this.fromCol = fromFName[0];\n }\n };\n /**\n * Changes the position of the Grid columns by field index.\n *\n * @param {number} fromIndex - Defines the origin field index.\n * @param {number} toIndex - Defines the destination field index.\n * @returns {void}\n */\n Reorder.prototype.reorderColumnByIndex = function (fromIndex, toIndex) {\n this.moveTargetColumn(this.parent.getColumnByIndex(fromIndex), toIndex);\n };\n /**\n * Changes the position of the Grid columns by field index.\n *\n * @param {string | string[]} fieldName - Defines the field name.\n * @param {number} toIndex - Defines the destination field index.\n * @returns {void}\n */\n Reorder.prototype.reorderColumnByTargetIndex = function (fieldName, toIndex) {\n if (typeof fieldName === 'string') {\n this.reorderSingleColumnByTarget(fieldName, toIndex);\n }\n else {\n this.reorderMultipleColumnByTarget(fieldName, toIndex);\n }\n };\n Reorder.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.createReorderElement();\n }\n };\n Reorder.prototype.createReorderElement = function (e) {\n if (e && e.args && e.args.isXaxis) {\n this.setDisplay('none');\n }\n var header = this.parent.element.querySelector('.' + literals.headerContent);\n this.upArrow = header.appendChild(this.parent\n .createElement('div', { className: 'e-icons e-icon-reorderuparrow e-reorderuparrow', attrs: { style: 'display:none' } }));\n this.downArrow = header.appendChild(this.parent\n .createElement('div', { className: 'e-icons e-icon-reorderdownarrow e-reorderdownarrow', attrs: { style: 'display:none' } }));\n };\n /**\n * The function used to trigger onActionComplete\n *\n * @param {NotifyArgs} e - specified the NotifyArgs\n * @returns {void}\n * @hidden\n */\n Reorder.prototype.onActionComplete = function (e) {\n this.parent.trigger(events.actionComplete, extend(e, { type: events.actionComplete }));\n var target = this.fromCol && this.parent.getColumnHeaderByField(this.fromCol);\n if (target) {\n this.parent.focusModule.onClick({ target: target }, true);\n }\n };\n /**\n * To destroy the reorder\n *\n * @returns {void}\n * @hidden\n */\n Reorder.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (this.parent.isDestroyed || !gridElement || (!gridElement.querySelector('.' + literals.gridHeader) &&\n !gridElement.querySelector('.' + literals.gridContent))) {\n return;\n }\n if (this.upArrow.parentNode) {\n remove(this.upArrow);\n }\n if (this.downArrow.parentNode) {\n remove(this.downArrow);\n }\n this.parent.off(events.headerDrop, this.headerDrop);\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.reorderComplete, this.onActionComplete);\n this.parent.off(events.columnDrag, this.drag);\n this.parent.off(events.columnDragStart, this.dragStart);\n this.parent.off(events.columnDragStop, this.dragStop);\n this.parent.off(events.headerRefreshed, this.createReorderElement);\n this.parent.off(events.keyPressed, this.keyPressHandler);\n this.parent.off(events.destroy, this.destroy);\n //call ejdrag and drop destroy\n };\n Reorder.prototype.keyPressHandler = function (e) {\n var gObj = this.parent;\n var isMacLike = /(Mac)/i.test(navigator.platform);\n if (isMacLike && e.metaKey) {\n if (e.action === 'leftArrow') {\n e.action = 'ctrlLeftArrow';\n }\n else if (e.action === 'rightArrow') {\n e.action = 'ctrlRightArrow';\n }\n }\n switch (e.action) {\n case 'ctrlLeftArrow':\n case 'ctrlRightArrow':\n // eslint-disable-next-line no-case-declarations\n var element = gObj.focusModule.currentInfo.element;\n if (element && element.classList.contains('e-headercell')) {\n var column = gObj.getColumnByUid(element.firstElementChild.getAttribute('e-mappinguid'));\n var visibleCols = gObj.getVisibleColumns();\n var index = visibleCols.indexOf(column);\n var toCol = e.action === 'ctrlLeftArrow' ? visibleCols[index - 1] : visibleCols[index + 1];\n if (toCol && toCol.field && column.field) {\n this.reorderColumns(column.field, toCol.field);\n }\n }\n break;\n }\n };\n Reorder.prototype.drag = function (e) {\n var gObj = this.parent;\n var target = e.target;\n var closest = closestElement(target, '.e-headercell:not(.e-stackedHeaderCell)');\n var cloneElement = gObj.element.querySelector('.e-cloneproperties');\n var content = gObj.getContent().firstElementChild;\n var isLeft = this.x > getPosition(e.event).x + content.scrollLeft;\n removeClass([].slice.call(gObj.getHeaderTable().getElementsByClassName('e-reorderindicate')), ['e-reorderindicate']);\n this.setDisplay('none');\n this.stopTimer();\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n this.updateScrollPostion(e.event);\n if (closest && !closest.isEqualNode(this.element)) {\n target = closest;\n //consider stacked, detail header cell\n var uid = target.querySelector('.e-headercelldiv, .e-stackedheadercelldiv').getAttribute('e-mappinguid');\n if (!(!this.chkDropPosition(this.element, target) || !this.chkDropAllCols(this.element, target)) &&\n gObj.getColumnByUid(uid).allowReordering && e.column.allowReordering) {\n this.updateArrowPosition(target, isLeft);\n classList(target, ['e-allowDrop', 'e-reorderindicate'], []);\n }\n else if (!(gObj.allowGrouping && parentsUntil(e.target, 'e-groupdroparea'))) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n }\n else {\n if (closest && closest.isEqualNode(this.element) &&\n !((gObj.allowGrouping && e.column.allowGrouping) || e.column.allowReordering)) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n else if (!closest && !(gObj.allowGrouping && parentsUntil(e.target, 'e-groupdroparea'))) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n }\n if (!e.column.allowReordering || e.column.lockColumn) {\n return;\n }\n gObj.trigger(events.columnDrag, { target: target, draggableType: 'headercell', column: e.column });\n };\n Reorder.prototype.updateScrollPostion = function (e) {\n var _this = this;\n var x = getPosition(e).x;\n var cliRect = this.parent.element.getBoundingClientRect();\n var cliRectBaseRight = cliRect.right;\n var cliRectBaseLeft = cliRect.left;\n var scrollElem = this.parent.getContent().firstElementChild;\n if (x > cliRectBaseLeft && x < cliRectBaseLeft + 35) {\n this.timer = window.setInterval(function () { _this.setScrollLeft(scrollElem, true); }, 50);\n }\n else if (x < cliRectBaseRight && x > cliRectBaseRight - 35) {\n this.timer = window.setInterval(function () { _this.setScrollLeft(scrollElem, false); }, 50);\n }\n };\n Reorder.prototype.setScrollLeft = function (scrollElem, isLeft) {\n var scrollLeft = scrollElem.scrollLeft;\n scrollElem.scrollLeft = scrollElem.scrollLeft + (isLeft ? -5 : 5);\n if (scrollLeft !== scrollElem.scrollLeft) {\n this.setDisplay('none');\n }\n };\n Reorder.prototype.stopTimer = function () {\n window.clearInterval(this.timer);\n };\n Reorder.prototype.updateArrowPosition = function (target, isLeft) {\n var cliRect = target.getBoundingClientRect();\n var cliRectBase = this.parent.element.getBoundingClientRect();\n if ((isLeft && cliRect.left < cliRectBase.left) || (!isLeft && cliRect.right > cliRectBase.right)) {\n return;\n }\n var isSticky = this.parent.getHeaderContent().classList.contains('e-sticky');\n this.upArrow.style.top = isSticky ? cliRect.top + cliRect.height + 'px' : cliRect.top + cliRect.height - cliRectBase.top + 'px';\n this.downArrow.style.top = isSticky ? cliRect.top - 7 + 'px' : cliRect.top - cliRectBase.top - 7 + 'px';\n this.upArrow.style.left = this.downArrow.style.left = isSticky ? (isLeft ? cliRect.left : cliRect.right) - 4 + 'px' :\n (isLeft ? cliRect.left : cliRect.right) - cliRectBase.left - 4 + 'px';\n this.setDisplay('');\n };\n Reorder.prototype.dragStart = function (e) {\n var gObj = this.parent;\n var target = e.target;\n this.element = target.classList.contains('e-headercell') ? target :\n parentsUntil(target, 'e-headercell');\n if (!e.column.allowReordering || e.column.lockColumn) {\n return;\n }\n var content = gObj.getContent().firstElementChild;\n this.x = getPosition(e.event).x + content.scrollLeft;\n gObj.trigger(events.columnDragStart, {\n target: target, draggableType: 'headercell', column: e.column\n });\n };\n Reorder.prototype.dragStop = function (e) {\n var gObj = this.parent;\n this.setDisplay('none');\n this.stopTimer();\n if (!e.cancel) {\n gObj.trigger(events.columnDrop, { target: e.target, draggableType: 'headercell', column: e.column });\n }\n removeClass([].slice.call(gObj.getHeaderTable().getElementsByClassName('e-reorderindicate')), ['e-reorderindicate']);\n };\n Reorder.prototype.setDisplay = function (display) {\n this.upArrow.style.display = display;\n this.downArrow.style.display = display;\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} return the module name\n * @private\n */\n Reorder.prototype.getModuleName = function () {\n return 'reorder';\n };\n return Reorder;\n}());\nexport { Reorder };\n","import { Row } from './../models/row';\nimport { CellType } from '../base/enum';\nimport { isNullOrUndefined, Internationalization, getValue, createElement } from '@syncfusion/ej2-base';\nimport { Cell } from '../models/cell';\nimport { ValueFormatter } from './../services/value-formatter';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\nimport { getForeignData, measureColumnDepth, getUid } from '../base/util';\nimport { Grid } from '../base/grid';\n/**\n * @hidden\n * `ExportHelper` for `PdfExport` & `ExcelExport`\n */\nvar ExportHelper = /** @class */ (function () {\n function ExportHelper(parent, foreignKeyData) {\n this.hideColumnInclude = false;\n this.foreignKeyData = {};\n this.parent = parent;\n if (!parent.parentDetails && foreignKeyData) {\n this.foreignKeyData = foreignKeyData;\n }\n }\n ExportHelper.getQuery = function (parent, data) {\n var query = data.generateQuery(true).requiresCount();\n if (data.isRemote()) {\n if (parent.groupSettings.enableLazyLoading && parent.groupSettings.columns.length) {\n query.lazyLoad = [];\n }\n else {\n query.take(parent.pageSettings.totalRecordsCount);\n }\n }\n return query;\n };\n ExportHelper.prototype.getFData = function (value, column) {\n var foreignKeyData = getForeignData(column, {}, value, this.foreignKeyData[column.field])[0];\n return foreignKeyData;\n };\n ExportHelper.prototype.getGridRowModel = function (columns, dataSource, gObj, startIndex) {\n if (startIndex === void 0) { startIndex = 0; }\n var rows = [];\n var length = dataSource.length;\n if (length) {\n for (var i = 0; i < length; i++, startIndex++) {\n var options = { isExpand: false };\n options.data = dataSource[parseInt(i.toString(), 10)];\n options.index = startIndex;\n if (gObj.childGrid || gObj.detailTemplate) {\n if (gObj.hierarchyPrintMode === 'All') {\n options.isExpand = true;\n }\n else if (gObj.hierarchyPrintMode === 'Expanded' &&\n this.parent.expandedRows && this.parent.expandedRows[parseInt(startIndex.toString(), 10)]) {\n options.isExpand = gObj.expandedRows[parseInt(startIndex.toString(), 10)].isExpand;\n }\n }\n var row = new Row(options);\n row.cells = this.generateCells(columns, gObj);\n rows.push(row);\n }\n this.processColumns(rows);\n }\n return rows;\n };\n ExportHelper.prototype.generateCells = function (columns, gObj) {\n var cells = [];\n if (gObj.childGridLevel) {\n var len = gObj.childGridLevel;\n for (var i = 0; len > i; i++) {\n cells.push(this.generateCell({}, CellType.Indent));\n }\n }\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var col = columns_1[_i];\n cells.push(this.generateCell(col, CellType.Data));\n }\n return cells;\n };\n ExportHelper.prototype.getColumnData = function (gridObj) {\n var _this = this;\n var columnPromise = [];\n var promise;\n var fColumns = gridObj.getForeignKeyColumns();\n if (fColumns.length) {\n for (var i = 0; i < fColumns.length; i++) {\n var colData = ('result' in fColumns[parseInt(i.toString(), 10)].dataSource) ?\n new DataManager(fColumns[parseInt(i.toString(), 10)].dataSource.result) :\n fColumns[parseInt(i.toString(), 10)].dataSource;\n columnPromise.push(colData.executeQuery(new Query()));\n }\n promise = Promise.all(columnPromise).then(function (e) {\n for (var j = 0; j < fColumns.length; j++) {\n _this.foreignKeyData[fColumns[parseInt(j.toString(), 10)].field] = e[parseInt(j.toString(), 10)].result;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n });\n }\n return promise;\n };\n ExportHelper.prototype.getHeaders = function (columns, isHideColumnInclude) {\n if (isHideColumnInclude) {\n this.hideColumnInclude = true;\n }\n else {\n this.hideColumnInclude = false;\n }\n this.colDepth = measureColumnDepth(columns);\n var rows = [];\n for (var i = 0; i < this.colDepth; i++) {\n rows[parseInt(i.toString(), 10)] = new Row({});\n rows[parseInt(i.toString(), 10)].cells = [];\n }\n rows = this.processColumns(rows);\n rows = this.processHeaderCells(rows, columns);\n return { rows: rows, columns: this.generateActualColumns(columns) };\n };\n ExportHelper.prototype.getConvertedWidth = function (input) {\n var value = parseFloat(input);\n return (input.indexOf('%') !== -1) ? (this.parent.element.getBoundingClientRect().width * value / 100) : value;\n };\n ExportHelper.prototype.generateActualColumns = function (columns, actualColumns) {\n if (actualColumns === void 0) { actualColumns = []; }\n for (var _i = 0, columns_2 = columns; _i < columns_2.length; _i++) {\n var column = columns_2[_i];\n if (column.commands) {\n continue;\n }\n if (!column.columns) {\n if (column.visible || this.hideColumnInclude) {\n actualColumns.push(column);\n }\n }\n else {\n if (column.visible || this.hideColumnInclude) {\n var colSpan = this.getCellCount(column, 0);\n if (colSpan !== 0) {\n this.generateActualColumns(column.columns, actualColumns);\n }\n }\n }\n }\n return actualColumns;\n };\n ExportHelper.prototype.processHeaderCells = function (rows, cols) {\n var columns = cols;\n for (var i = 0; i < columns.length; i++) {\n if (!columns[parseInt(i.toString(), 10)].commands) {\n rows = this.appendGridCells(columns[parseInt(i.toString(), 10)], rows, 0);\n }\n }\n return rows;\n };\n ExportHelper.prototype.appendGridCells = function (cols, gridRows, index) {\n if (!cols.columns && (cols.visible !== false || this.hideColumnInclude) && !cols.commands) {\n gridRows[parseInt(index.toString(), 10)].cells.push(this.generateCell(cols, CellType.Header, this.colDepth - index, index));\n }\n else if (cols.columns) {\n var colSpan = this.getCellCount(cols, 0);\n if (colSpan) {\n gridRows[parseInt(index.toString(), 10)].cells.push(new Cell({\n cellType: CellType.StackedHeader, column: cols, colSpan: colSpan\n }));\n }\n var isIgnoreFirstCell = void 0;\n for (var i = 0, len = cols.columns.length; i < len; i++) {\n if (cols.columns[parseInt(i.toString(), 10)].visible && !isIgnoreFirstCell) {\n isIgnoreFirstCell = true;\n }\n gridRows = this.appendGridCells(cols.columns[parseInt(i.toString(), 10)], gridRows, index + 1);\n }\n }\n return gridRows;\n };\n ExportHelper.prototype.generateCell = function (gridColumn, cellType, rowSpan, rowIndex) {\n var option = {\n 'visible': gridColumn.visible,\n 'isDataCell': cellType === CellType.Data,\n 'column': gridColumn,\n 'cellType': cellType,\n 'rowSpan': rowSpan,\n 'index': rowIndex\n };\n if (!option.rowSpan || option.rowSpan < 2) {\n delete option.rowSpan;\n }\n return new Cell(option);\n };\n ExportHelper.prototype.processColumns = function (rows) {\n //TODO: generate dummy column for group, detail, stacked row here; ensureColumns here\n var gridObj = this.parent;\n var columnIndexes = [];\n if (gridObj.enableColumnVirtualization) {\n columnIndexes = gridObj.getColumnIndexesInView();\n }\n for (var i = 0, len = rows.length; i < len; i++) {\n if (gridObj.allowGrouping) {\n for (var j = 0, len_1 = gridObj.groupSettings.columns.length - 1; j < len_1; j++) {\n if (gridObj.enableColumnVirtualization && columnIndexes.indexOf(j) === -1) {\n continue;\n }\n rows[parseInt(i.toString(), 10)].cells.splice(0, 0, this.generateCell({}, CellType.HeaderIndent));\n }\n }\n }\n return rows;\n };\n ExportHelper.prototype.getCellCount = function (column, count) {\n if (column.columns) {\n for (var i = 0; i < column.columns.length; i++) {\n count = this.getCellCount(column.columns[parseInt(i.toString(), 10)], count);\n }\n }\n else {\n if (column.visible || this.hideColumnInclude) {\n count++;\n }\n }\n return count;\n };\n ExportHelper.prototype.checkAndExport = function (gridPool, globalResolve) {\n var bool = Object.keys(gridPool).some(function (key) {\n return !gridPool[\"\" + key];\n });\n if (!bool) {\n globalResolve();\n }\n };\n ExportHelper.prototype.failureHandler = function (gridPool, childGridObj, resolve) {\n var _this = this;\n return function () {\n gridPool[childGridObj.id] = true;\n _this.checkAndExport(gridPool, resolve);\n };\n };\n ExportHelper.prototype.createChildGrid = function (gObj, row, exportType, gridPool) {\n var childGridObj = new Grid(this.parent.detailRowModule.getGridModel(gObj, row, exportType));\n gObj.isPrinting = false;\n var parent = 'parentDetails';\n childGridObj[\"\" + parent] = {\n parentID: gObj.element.id,\n parentPrimaryKeys: gObj.getPrimaryKeyFieldNames(),\n parentKeyField: gObj.childGrid.queryString,\n parentKeyFieldValue: getValue(childGridObj.queryString, row.data),\n parentRowData: row.data\n };\n var exportId = getUid('child-grid');\n var element = createElement('div', {\n id: exportId, styles: 'display: none'\n });\n document.body.appendChild(element);\n childGridObj.id = exportId;\n gridPool[\"\" + exportId] = false;\n childGridObj.isExportGrid = true;\n return { childGrid: childGridObj, element: element };\n };\n ExportHelper.prototype.getGridExportColumns = function (columns) {\n var actualGridColumns = [];\n for (var i = 0, gridColumns = columns; i < gridColumns.length; i++) {\n if (gridColumns[parseInt(i.toString(), 10)].type !== 'checkbox') {\n actualGridColumns.push(gridColumns[parseInt(i.toString(), 10)]);\n }\n }\n return actualGridColumns;\n };\n /**\n * Gets the foreignkey data.\n *\n * @returns {ForeignKeyFormat} returns the foreignkey data\n * @hidden\n */\n ExportHelper.prototype.getForeignKeyData = function () {\n return this.foreignKeyData;\n };\n return ExportHelper;\n}());\nexport { ExportHelper };\n/**\n * @hidden\n * `ExportValueFormatter` for `PdfExport` & `ExcelExport`\n */\nvar ExportValueFormatter = /** @class */ (function () {\n function ExportValueFormatter(culture) {\n this.valueFormatter = new ValueFormatter(culture);\n this.internationalization = new Internationalization(culture);\n }\n ExportValueFormatter.prototype.returnFormattedValue = function (args, customFormat) {\n if (!isNullOrUndefined(args.value) && args.value) {\n return this.valueFormatter.getFormatFunction(customFormat)(args.value);\n }\n else {\n return '';\n }\n };\n /**\n * Used to format the exporting cell value\n *\n * @param {ExportHelperArgs} args - Specifies cell details.\n * @returns {string} returns formated value\n * @hidden\n */\n ExportValueFormatter.prototype.formatCellValue = function (args) {\n if (args.isForeignKey) {\n args.value = getValue(args.column.foreignKeyValue, getForeignData(args.column, {}, args.value)[0]);\n }\n if (args.column.type === 'number' && args.column.format !== undefined && args.column.format !== '') {\n if (typeof args.column.format === 'string') {\n args.column.format = { format: args.column.format };\n }\n return args.value || args.value === 0 ?\n this.internationalization.getNumberFormat(args.column.format)(args.value) : '';\n }\n else if (args.column.type === 'boolean' && args.value !== '') {\n return args.value ? 'true' : 'false';\n /* tslint:disable-next-line:max-line-length */\n }\n else if ((args.column.type === 'date' || args.column.type === 'dateonly' || args.column.type === 'datetime' || args.column.type === 'time') && args.column.format !== undefined) {\n if (typeof args.value === 'string') {\n args.value = new Date(args.value);\n }\n if (typeof args.column.format === 'string') {\n var format = void 0;\n var cFormat = args.column.format;\n if (args.column.type === 'date' || args.column.type === 'dateonly') {\n format = { type: 'date', skeleton: cFormat };\n }\n else if (args.column.type === 'time') {\n format = { type: 'time', skeleton: cFormat };\n }\n else {\n format = { type: 'dateTime', skeleton: cFormat };\n }\n return this.returnFormattedValue(args, format);\n }\n else {\n if (args.column.format instanceof Object && args.column.format.type === undefined) {\n return (args.value.toString());\n }\n else {\n var customFormat = void 0;\n if (args.column.type === 'date' || args.column.type === 'dateonly') {\n customFormat = {\n type: args.column.format.type,\n format: args.column.format.format, skeleton: args.column.format.skeleton\n };\n }\n else if (args.column.type === 'time') {\n customFormat = { type: 'time', format: args.column.format.format, skeleton: args.column.format.skeleton };\n }\n else {\n customFormat = { type: 'dateTime', format: args.column.format.format, skeleton: args.column.format.skeleton };\n }\n return this.returnFormattedValue(args, customFormat);\n }\n }\n }\n else {\n if ((!isNullOrUndefined(args.column.type) && !isNullOrUndefined(args.value)) || !isNullOrUndefined(args.value)) {\n return (args.value).toString();\n }\n else {\n return '';\n }\n }\n };\n return ExportValueFormatter;\n}());\nexport { ExportValueFormatter };\n","import * as events from '../base/constant';\nimport { Workbook } from '@syncfusion/ej2-excel-export';\nimport { isNullOrUndefined, getEnumValue, compile, getValue, detach, extend } from '@syncfusion/ej2-base';\nimport { Data } from '../actions/data';\nimport { ExportHelper, ExportValueFormatter } from './export-helper';\nimport { SummaryModelGenerator, GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\nimport { CellType } from '../base/enum';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\nimport { getPrintGridModel, getUid, isExportColumns, updateColumnTypeForExportColumns, prepareColumns, measureColumnDepth } from '../base/util';\nimport { defaultCurrencyCode } from '@syncfusion/ej2-base';\n/**\n * @hidden\n * `ExcelExport` module is used to handle the Excel export action.\n */\nvar ExcelExport = /** @class */ (function () {\n /**\n * Constructor for the Grid Excel Export module.\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {ServiceLocator} locator - specifies the ServiceLocator\n * @hidden\n */\n function ExcelExport(parent, locator) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.book = {};\n this.workSheet = [];\n this.rows = [];\n this.columns = [];\n this.styles = [];\n this.rowLength = 1;\n this.expType = 'AppendToSheet';\n this.includeHiddenColumn = false;\n this.isCsvExport = false;\n this.isChild = false;\n this.isElementIdChanged = false;\n this.gridPool = {};\n this.sheet = {};\n this.grpFooterTemplates = [];\n this.footerTemplates = [];\n this.aggIndex = 0;\n this.totalAggregates = 0;\n this.parent = parent;\n this.helper = new ExportHelper(parent);\n this.locator = locator;\n this.l10n = this.locator.getService('localization');\n }\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n */\n ExcelExport.prototype.getModuleName = function () {\n return 'ExcelExport';\n };\n ExcelExport.prototype.init = function (gObj) {\n if (gObj.element !== null && gObj.element.id === '') {\n gObj.element.id = new Date().toISOString();\n this.isElementIdChanged = true;\n }\n this.parent = gObj;\n if (this.parent.isDestroyed) {\n return;\n }\n this.isExporting = undefined;\n this.book = {};\n this.workSheet = [];\n this.rows = [];\n this.columns = [];\n this.styles = [];\n this.rowLength = 1;\n this.footer = undefined;\n this.expType = 'AppendToSheet';\n this.includeHiddenColumn = false;\n this.exportValueFormatter = new ExportValueFormatter(gObj.locale);\n gObj.id = getUid('main-grid');\n this.gridPool[gObj.id] = false;\n };\n /**\n * Export Grid to Excel file.\n *\n * @param {IGrid} grid - Defines the grid.\n * @param {exportProperties} exportProperties - Defines the export properties of the Grid.\n * @param {isMultipleExport} isMultipleExport - Defines is multiple Grid's are exported.\n * @param {Workbook} workbook - Defined the Workbook if multiple Grid is exported.\n * @param {boolean} isCsv - true if export to CSV.\n * @param {boolean} isBlob - true if isBlob is enabled.\n * @returns {Promise} - Returns the map for export.\n */\n // eslint-disable-next-line\n ExcelExport.prototype.Map = function (grid, exportProperties, isMultipleExport, workbook, isCsv, isBlob) {\n var gObj = grid;\n var cancel = 'cancel';\n var isBlb = 'isBlob';\n var Child = 'isChild';\n var csv = 'isCsv';\n var workbk = 'workbook';\n var isMultiEx = 'isMultipleExport';\n this.gridPool = {};\n if ((grid.childGrid || grid.detailTemplate) && !(!isNullOrUndefined(exportProperties) && exportProperties.hierarchyExportMode === 'None')) {\n grid.expandedRows = getPrintGridModel(grid).expandedRows;\n }\n var args = {\n requestType: 'beforeExcelExport', gridObject: gObj, cancel: false,\n isMultipleExport: isMultipleExport, workbook: workbook, isCsv: isCsv, isBlob: isBlob, isChild: this.isChild,\n grpFooterTemplates: this.grpFooterTemplates\n };\n gObj.trigger(events.beforeExcelExport, args);\n if (args[\"\" + cancel]) {\n return new Promise(function (resolve) {\n return resolve();\n });\n }\n this.parent.log('exporting_begin', this.getModuleName());\n this.data = new Data(gObj);\n this.isExporting = true;\n this.isBlob = args[\"\" + isBlb];\n this.isChild = args[\"\" + Child];\n this.grpFooterTemplates = args['grpFooterTemplates'];\n if (args[\"\" + csv]) {\n this.isCsvExport = args[\"\" + csv];\n }\n else {\n this.isCsvExport = false;\n }\n if (isExportColumns(exportProperties)) {\n updateColumnTypeForExportColumns(exportProperties, gObj);\n }\n return this.processRecords(gObj, exportProperties, args[\"\" + isMultiEx], args[\"\" + workbk]);\n };\n ExcelExport.prototype.exportingSuccess = function (resolve) {\n this.isExporting = false;\n this.parent.trigger(events.excelExportComplete, this.isBlob ? { promise: this.blobPromise } : { gridInstance: this.parent });\n this.parent.log('exporting_complete', this.getModuleName());\n resolve(this.book);\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ExcelExport.prototype.processRecords = function (gObj, exportProperties, isMultipleExport, workbook) {\n var _this = this;\n if (gObj.allowGrouping && gObj.groupSettings.enableLazyLoading && gObj.groupSettings.columns.length) {\n if (isNullOrUndefined(exportProperties)) {\n exportProperties = { hierarchyExportMode: 'All' };\n }\n else {\n exportProperties.hierarchyExportMode = exportProperties.hierarchyExportMode || 'All';\n }\n }\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.dataSource)) {\n exportProperties.dataSource = exportProperties.dataSource instanceof DataManager ?\n exportProperties.dataSource : new DataManager(exportProperties.dataSource);\n var query_1 = exportProperties.query ? exportProperties.query : new Query();\n if (isNullOrUndefined(query_1.isCountRequired) || gObj.aggregates) {\n query_1.isCountRequired = true;\n }\n return new Promise(function (resolve) {\n var dataManager = exportProperties.dataSource.executeQuery(query_1);\n dataManager.then(function (r) {\n _this.init(gObj);\n _this.processInnerRecords(gObj, exportProperties, isMultipleExport, workbook, r).then(function () {\n _this.exportingSuccess(resolve);\n });\n });\n });\n }\n else if (!isNullOrUndefined(exportProperties) && exportProperties.exportType === 'CurrentPage') {\n return new Promise(function (resolve) {\n _this.init(gObj);\n _this.processInnerRecords(gObj, exportProperties, isMultipleExport, workbook, _this.parent.getCurrentViewRecords());\n _this.exportingSuccess(resolve);\n });\n }\n else {\n var allPromise_1 = [];\n allPromise_1.push(this.data.getData({}, ExportHelper.getQuery(gObj, this.data)));\n allPromise_1.push(this.helper.getColumnData(gObj));\n return new Promise(function (resolve, reject) {\n Promise.all(allPromise_1).then(function (e) {\n _this.init(gObj);\n _this.processInnerRecords(gObj, exportProperties, isMultipleExport, workbook, e[0]).then(function () {\n _this.exportingSuccess(resolve);\n });\n }).catch(function (e) {\n reject(_this.book);\n _this.parent.trigger(events.actionFailure, e);\n });\n });\n }\n };\n ExcelExport.prototype.processInnerRecords = function (gObj, exportProperties, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n isMultipleExport, workbook, r) {\n var _this = this;\n this.groupedColLength = gObj.groupSettings.columns.length;\n var blankRows = 5;\n var separator;\n var rows = [];\n var colDepth = measureColumnDepth(gObj.columns);\n var isExportPropertiesPresent = !isNullOrUndefined(exportProperties);\n if (isExportPropertiesPresent && !isNullOrUndefined(exportProperties.multipleExport)) {\n this.expType = (!isNullOrUndefined(exportProperties.multipleExport.type) ? exportProperties.multipleExport.type : 'AppendToSheet');\n if (!isNullOrUndefined(exportProperties.multipleExport.blankRows)) {\n blankRows = exportProperties.multipleExport.blankRows;\n }\n }\n if (isNullOrUndefined(workbook)) {\n this.workSheet = [];\n this.rows = [];\n this.columns = [];\n this.styles = [];\n this.sheet.images = [];\n }\n else if (this.expType === 'NewSheet') {\n this.workSheet = workbook.worksheets;\n this.rows = [];\n this.columns = [];\n this.sheet.images = [];\n this.styles = workbook.styles;\n }\n else {\n this.workSheet = [];\n this.rows = workbook.worksheets[0].rows;\n this.columns = workbook.worksheets[0].columns;\n this.styles = workbook.styles;\n this.sheet.images = workbook.worksheets[0].images;\n this.rowLength = (this.rows[this.rows.length - 1].index + blankRows);\n this.rowLength++;\n }\n if (isExportPropertiesPresent) {\n if (!isNullOrUndefined(isMultipleExport)) {\n if (!isNullOrUndefined(exportProperties.header) && (isMultipleExport || this.expType === 'NewSheet')) {\n this.processExcelHeader(JSON.parse(JSON.stringify(exportProperties.header)));\n }\n if (!isNullOrUndefined(exportProperties.footer)) {\n if (this.expType === 'AppendToSheet') {\n if (!isMultipleExport) {\n this.footer = JSON.parse(JSON.stringify(exportProperties.footer));\n }\n }\n else {\n this.footer = JSON.parse(JSON.stringify(exportProperties.footer));\n }\n }\n }\n else {\n if (!isNullOrUndefined(exportProperties.header)) {\n this.processExcelHeader(JSON.parse(JSON.stringify(exportProperties.header)));\n }\n if (!isNullOrUndefined(exportProperties.footer)) {\n this.footer = JSON.parse(JSON.stringify(exportProperties.footer));\n }\n }\n }\n this.includeHiddenColumn = (isExportPropertiesPresent ? exportProperties.includeHiddenColumn : false);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return new Promise(function (resolve, reject) {\n gObj.childGridLevel = 0;\n rows = _this.processGridExport(gObj, exportProperties, r);\n _this.globalResolve = resolve;\n _this.gridPool[gObj.id] = true;\n _this.helper.checkAndExport(_this.gridPool, _this.globalResolve);\n }).then(function () {\n var organisedRows = [];\n _this.organiseRows(rows, rows[0].index, organisedRows);\n _this.rows = _this.rows.concat(organisedRows);\n //footer template add\n if (!isNullOrUndefined(_this.footer)) {\n if ((_this.expType === 'AppendToSheet' && !isMultipleExport) || (_this.expType === 'NewSheet')) {\n _this.processExcelFooter(_this.footer);\n }\n }\n if (_this.columns.length > 0) {\n _this.sheet.columns = _this.columns;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _this.sheet.rows = _this.rows;\n _this.sheet.enableRtl = _this.parent.enableRtl;\n if (_this.parent.allowFiltering && gObj.getVisibleColumns().length && isExportPropertiesPresent &&\n exportProperties.enableFilter) {\n var headerRowLen = exportProperties.header ? exportProperties.header.headerRows ||\n exportProperties.header.rows.length : 0;\n var autoFilters = {\n row: colDepth + headerRowLen, column: _this.groupedColLength ? _this.groupedColLength + 1 :\n _this.sheet.columns[0].index, lastRow: _this.sheet.rows.length, lastColumn: _this.sheet.columns.length\n };\n _this.sheet.autoFilters = autoFilters;\n }\n _this.workSheet.push(_this.sheet);\n _this.book.worksheets = _this.workSheet;\n _this.book.styles = _this.styles;\n gObj.notify('finalPageSetup', _this.book);\n if (!isMultipleExport) {\n if (_this.isCsvExport) {\n if (isExportPropertiesPresent && !isNullOrUndefined(exportProperties.separator)\n && exportProperties.separator !== ',') {\n separator = exportProperties.separator;\n }\n var book = new Workbook(_this.book, 'csv', gObj.locale, defaultCurrencyCode, separator);\n if (!_this.isBlob) {\n if (isExportPropertiesPresent && exportProperties.fileName) {\n book.save(exportProperties.fileName);\n }\n else {\n book.save('Export.csv');\n }\n }\n else {\n _this.blobPromise = book.saveAsBlob('text/csv');\n }\n }\n else {\n var book = new Workbook(_this.book, 'xlsx', gObj.locale, defaultCurrencyCode);\n if (!_this.isBlob) {\n if (isExportPropertiesPresent && exportProperties.fileName) {\n book.save(exportProperties.fileName);\n }\n else {\n book.save('Export.xlsx');\n }\n }\n else {\n _this.blobPromise = book.saveAsBlob('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');\n }\n }\n if (_this.isElementIdChanged) {\n gObj.element.id = '';\n }\n delete gObj.expandedRows;\n }\n return workbook;\n });\n };\n ExcelExport.prototype.organiseRows = function (rows, initialIndex, organisedRows) {\n if (!rows.length) {\n return initialIndex;\n }\n for (var i = 0; i < rows.length; i++) {\n var row = rows[parseInt(i.toString(), 10)];\n var childRows = row.childRows;\n if (childRows) {\n row.index = initialIndex++;\n delete row.childRows;\n organisedRows.push(row);\n initialIndex = this.organiseRows(childRows, initialIndex, organisedRows);\n }\n else {\n row.index = initialIndex++;\n organisedRows.push(row);\n }\n }\n return initialIndex;\n };\n ExcelExport.prototype.processGridExport = function (gObj, exportProperties, r) {\n var excelRows = [];\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.theme)) {\n this.theme = exportProperties.theme;\n }\n if ((gObj.childGrid || gObj.detailTemplate) && !isNullOrUndefined(exportProperties)) {\n gObj.hierarchyPrintMode = exportProperties.hierarchyExportMode || 'Expanded';\n }\n var helper = new ExportHelper(gObj, this.helper.getForeignKeyData());\n var gColumns = isExportColumns(exportProperties) ?\n prepareColumns(exportProperties.columns, gObj.enableColumnVirtualization) :\n helper.getGridExportColumns(gObj.columns);\n var headerRow = helper.getHeaders(gColumns, this.includeHiddenColumn);\n var groupIndent = gObj.groupSettings.columns.length ? gObj.groupSettings.columns.length - 1 : 0;\n excelRows = this.processHeaderContent(gObj, headerRow, groupIndent, excelRows);\n if (!isNullOrUndefined(exportProperties) && Object.keys(exportProperties).length &&\n isNullOrUndefined(exportProperties.dataSource)) {\n if (exportProperties.exportType === 'CurrentPage' && (!gObj.groupSettings.enableLazyLoading\n || gObj.getDataModule().isRemote())) {\n excelRows = this.processRecordContent(gObj, r, headerRow, exportProperties, gObj.currentViewData, excelRows, helper);\n }\n else if (gObj.groupSettings.enableLazyLoading && !gObj.getDataModule().isRemote()) {\n var groupData = void 0;\n if (!isNullOrUndefined(exportProperties) && Object.keys(exportProperties).length) {\n var isAllPage = exportProperties.exportType === 'CurrentPage'\n ? false : true;\n var groupQuery = gObj.getDataModule().generateQuery(isAllPage);\n var lazyloadData = gObj.getDataModule().dataManager.executeLocal(groupQuery);\n groupQuery.lazyLoad = [];\n var fName = 'fn';\n if (!isAllPage) {\n for (var i = 0; i < groupQuery.queries.length; i++) {\n if (groupQuery.queries[parseInt(i.toString(), 10)]['' + fName] === 'onPage') {\n groupQuery.queries[parseInt(i.toString(), 10)].e.pageSize = lazyloadData.reduce(function (acc, curr) { return acc + curr['count']; }, 0);\n }\n }\n }\n if (exportProperties.hierarchyExportMode === 'All') {\n groupData = gObj.getDataModule().dataManager.executeLocal(groupQuery);\n }\n else if (exportProperties.hierarchyExportMode === 'Expanded' || exportProperties.hierarchyExportMode === 'None' ||\n isNullOrUndefined(exportProperties.hierarchyExportMode)) {\n groupData = gObj.getDataModule().dataManager.executeLocal(groupQuery);\n var lazQuery = this.parent.contentModule.lazyLoadQuery;\n for (var i = 0; i < lazQuery.length; i++) {\n var query = lazQuery[parseInt(i.toString(), 10)];\n var where = query[0];\n for (var j = 0; j < groupData.length; j++) {\n var data = groupData[parseInt(j.toString(), 10)];\n if (data['key'] === where['value']) {\n lazyloadData[parseInt(i.toString(), 10)] = groupData[parseInt(j.toString(), 10)];\n }\n }\n }\n groupData = lazyloadData;\n }\n }\n else {\n groupData = gObj.currentViewData;\n }\n excelRows = this.processRecordContent(gObj, r, headerRow, exportProperties, groupData, excelRows, helper);\n }\n else {\n excelRows = this.processRecordContent(gObj, r, headerRow, exportProperties, undefined, excelRows, helper);\n }\n }\n else {\n excelRows = this.processRecordContent(gObj, r, headerRow, exportProperties, undefined, excelRows, helper);\n }\n gObj.notify(events.exportDataBound, { excelRows: excelRows, type: 'excel' });\n this.capTemplate = undefined;\n this.footerTemplates = [];\n this.grpFooterTemplates = [];\n this.aggIndex = 0;\n this.totalAggregates = 0;\n return excelRows;\n };\n ExcelExport.prototype.processRecordContent = function (gObj, returnType, headerRow, exportProperties, currentViewRecords, excelRow, helper) {\n var record;\n if (!isNullOrUndefined(currentViewRecords) && currentViewRecords.length) {\n record = currentViewRecords;\n }\n else {\n record = returnType.result;\n }\n if (!isNullOrUndefined(record.level)) {\n this.processGroupedRows(gObj, record, headerRow, record.level, 0, exportProperties, excelRow, helper);\n }\n else {\n this.processRecordRows(gObj, record, headerRow, 0, 0, exportProperties, excelRow, helper);\n }\n if (!isNullOrUndefined(returnType.aggregates)) {\n if (!isNullOrUndefined(currentViewRecords) && !this.parent.groupSettings.enableLazyLoading) {\n this.processAggregates(gObj, returnType.result, excelRow, currentViewRecords);\n }\n else {\n var result = returnType.result.GroupGuid ?\n returnType.result.records : returnType.result;\n this.processAggregates(gObj, result, excelRow);\n }\n }\n return excelRow;\n };\n ExcelExport.prototype.processGroupedRows = function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n gObj, dataSource, headerRow, level, startIndex, excelExportProperties, excelRows, helper) {\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var item = dataSource_1[_i];\n var cells = [];\n var index = 1;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var cell = {};\n cell.index = (index + level) - 1;\n var col = gObj.getColumnByField(item.field);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var args = {\n value: item.key,\n column: col,\n style: undefined,\n isForeignKey: col.isForeignColumn()\n };\n var value = gObj.getColumnByField(item.field).headerText +\n ': ' + (!col.enableGroupByFormat ? this.exportValueFormatter.formatCellValue(args) : item.key) + ' - ';\n if (item.count > 1) {\n value += item.count + ' items';\n }\n else {\n value += item.count + ' item';\n }\n var cArgs = { captionText: value, type: this.isCsvExport ? 'CSV' : 'Excel', data: item };\n this.parent.trigger(events.exportGroupCaption, cArgs);\n cell.value = cArgs.captionText;\n cell.style = this.getCaptionThemeStyle(this.theme);\n if (!isNullOrUndefined(cArgs.style)) {\n cell.style = this.mergeOptions(cell.style, cArgs.style);\n }\n var captionModelGen = new CaptionSummaryModelGenerator(gObj);\n var groupCaptionSummaryRows = captionModelGen.generateRows(item);\n this.fillAggregates(gObj, groupCaptionSummaryRows, (dataSource.level + dataSource.childLevels) - 1, excelRows, this.rowLength);\n cells.push(cell);\n if (excelRows[excelRows.length - 1].cells.length > 0) {\n var lIndex = dataSource.level + dataSource.childLevels + groupCaptionSummaryRows[0].cells.length;\n var hIndex = 0;\n for (var _a = 0, _b = excelRows[excelRows.length - 1].cells; _a < _b.length; _a++) {\n var tCell = _b[_a];\n if (tCell.index < lIndex) {\n lIndex = tCell.index;\n }\n if (tCell.index > hIndex) {\n hIndex = tCell.index;\n }\n if (cells[cells.length - 1].index !== tCell.index) {\n cells.push(tCell);\n }\n }\n if ((lIndex - cell.index) > 1) {\n cell.colSpan = lIndex - cell.index;\n }\n while (hIndex < (headerRow.columns.length + level + dataSource.childLevels)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var sCell = {};\n sCell.index = (hIndex + 1);\n sCell.style = this.getCaptionThemeStyle(this.theme);\n cells.push(sCell);\n hIndex++;\n }\n }\n else {\n var span = 0;\n //Calculation for column span when group caption dont have aggregates\n for (var _c = 0, _d = headerRow.columns; _c < _d.length; _c++) {\n var col_1 = _d[_c];\n if (col_1.visible) {\n span++;\n }\n }\n cell.colSpan = (dataSource.childLevels + span);\n }\n excelRows[excelRows.length - 1].cells = cells;\n this.rowLength++;\n if (this.groupedColLength < 8 && level > 1) {\n var grouping = { outlineLevel: level - 1, isCollapsed: true };\n excelRows[excelRows.length - 1].grouping = grouping;\n }\n if (!isNullOrUndefined(dataSource.childLevels) && dataSource.childLevels > 0) {\n this.processGroupedRows(gObj, item.items, headerRow, item.items.level, startIndex, excelExportProperties, excelRows, helper);\n this.processAggregates(gObj, item, excelRows, undefined, (level - 1) + dataSource.childLevels, true);\n }\n else {\n startIndex = this.processRecordRows(gObj, item.items, headerRow, (level - 1), startIndex, excelExportProperties, excelRows, helper);\n this.processAggregates(gObj, item, excelRows, undefined, (level - 1), true);\n }\n }\n };\n ExcelExport.prototype.processRecordRows = function (gObj, record, headerRow, level, startIndex, excelExportProperties, excelRows, helper) {\n var index = 1;\n var cells = [];\n var columns = headerRow.columns;\n var rows = helper.getGridRowModel(columns, record, gObj, startIndex);\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n cells = [];\n startIndex++;\n index = 1;\n var templateRowHeight = void 0;\n for (var c = 0, len = row.cells.length; c < len; c++) {\n var gCell = row.cells[parseInt(c.toString(), 10)];\n if (gCell.cellType !== CellType.Data) {\n continue;\n }\n var column = gCell.column;\n var field = column.field;\n var cellValue = !isNullOrUndefined(field) ? column.valueAccessor(field, row.data, column) : '';\n var value = !isNullOrUndefined(cellValue) ? cellValue : '';\n if (column.type === 'dateonly' && typeof value === 'string' && value) {\n var arr = value.split(/[^0-9.]/);\n value = new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10));\n }\n var fkData = void 0;\n if (column.isForeignColumn && column.isForeignColumn()) {\n fkData = helper.getFData(value, column);\n value = getValue(column.foreignKeyValue, fkData);\n }\n if (!isNullOrUndefined(value)) {\n var cell = {};\n var idx = index + level + gObj.childGridLevel;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var excelCellArgs = {\n data: row.data, column: column, foreignKeyData: fkData,\n value: value, style: undefined, colSpan: 1, cell: cell\n };\n gObj.trigger(events.excelQueryCellInfo, excelCellArgs);\n if (!isNullOrUndefined(excelCellArgs.image) && !isNullOrUndefined(excelCellArgs.image.base64)) {\n templateRowHeight = this.setImage(excelCellArgs, idx);\n if (excelCellArgs.image.height && excelCellArgs.value !== '') {\n templateRowHeight += 30;\n }\n }\n if (!isNullOrUndefined(excelCellArgs.hyperLink)) {\n excelCellArgs.cell.hyperlink = { target: excelCellArgs.hyperLink.target };\n excelCellArgs.value = excelCellArgs.hyperLink.displayText || excelCellArgs.value;\n }\n cell = excelCellArgs.cell;\n cell.index = idx;\n cell.value = excelCellArgs.value;\n if (excelCellArgs.data === '' && gObj.childGridLevel && index === 1) {\n var style = {};\n style.hAlign = 'left';\n excelCellArgs = { style: style };\n cell.colSpan = gObj.getVisibleColumns().length;\n cell.value = this.l10n.getConstant('EmptyRecord');\n }\n if (excelCellArgs.colSpan > 1) {\n cell.colSpan = excelCellArgs.colSpan;\n }\n if (!isNullOrUndefined(excelCellArgs.style)) {\n var styleIndex = this.getColumnStyle(gObj, index + level);\n cell.style = this.mergeOptions(this.styles[parseInt(styleIndex.toString(), 10)], excelCellArgs.style);\n }\n else {\n cell.style = { name: gObj.element.id + 'column' + (index + level) };\n }\n cells.push(cell);\n }\n index++;\n }\n var excelRow = { index: this.rowLength++, cells: cells };\n if (!isNullOrUndefined(templateRowHeight)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n excelRow.height = templateRowHeight;\n }\n if (this.groupedColLength && this.groupedColLength < 8 && (level + 1) > 0) {\n excelRow.grouping = { outlineLevel: (level + 1), isCollapsed: true };\n excelRows.push(excelRow);\n }\n else {\n excelRows.push(excelRow);\n }\n if ((row.isExpand || this.isChild) && (!isNullOrUndefined(gObj.childGrid) || !isNullOrUndefined(gObj.detailTemplate))) {\n if (!isNullOrUndefined(gObj.childGrid)) {\n gObj.isPrinting = true;\n var exportType = (!isNullOrUndefined(excelExportProperties) && excelExportProperties.exportType) ?\n excelExportProperties.exportType : 'AllPages';\n var returnVal = this.helper.createChildGrid(gObj, row, exportType, this.gridPool);\n var childGridObj = returnVal.childGrid;\n var element = returnVal.element;\n childGridObj.actionFailure =\n helper.failureHandler(this.gridPool, childGridObj, this.globalResolve);\n childGridObj.childGridLevel = gObj.childGridLevel + 1;\n var args = { childGrid: childGridObj, row: row, exportProperties: excelExportProperties };\n this.parent.trigger(events.exportDetailDataBound, args);\n childGridObj.beforeDataBound = this.childGridCell(excelRow, childGridObj, excelExportProperties, row);\n childGridObj.appendTo(element);\n }\n else {\n var args = { parentRow: row, row: excelRow, value: {}, action: 'excelexport', gridInstance: gObj };\n this.parent.trigger(events.exportDetailTemplate, args);\n excelRow.childRows = this.processDetailTemplate(args);\n }\n }\n gObj.notify(events.exportRowDataBound, { rowObj: row, type: 'excel', excelRows: excelRows });\n }\n return startIndex;\n };\n ExcelExport.prototype.processDetailTemplate = function (templateData) {\n var _this = this;\n var rows = [];\n var templateRowHeight;\n var detailIndent = 2;\n var detailCellIndex;\n if (templateData.value.columnHeader || templateData.value.rows) {\n var processCell_1 = function (currentCell, isHeader) {\n var cell = {};\n if (isNullOrUndefined(currentCell.index)) {\n currentCell.index = detailCellIndex;\n detailCellIndex++;\n }\n cell.index = currentCell.index + detailIndent;\n if (!isNullOrUndefined(currentCell.value)) {\n cell.value = currentCell.value;\n }\n if (!isNullOrUndefined(currentCell.colSpan)) {\n cell.colSpan = currentCell.colSpan;\n }\n if (!isNullOrUndefined(currentCell.rowSpan)) {\n cell.rowSpan = currentCell.rowSpan;\n }\n if (isHeader) {\n cell.style = _this.getHeaderThemeStyle(_this.theme);\n }\n else {\n cell.style = _this.getRecordThemeStyle(_this.theme);\n }\n if (!isNullOrUndefined(currentCell.style)) {\n var cellStyle = {\n fontColor: currentCell.style.fontColor,\n fontName: currentCell.style.fontName,\n fontSize: currentCell.style.fontSize,\n hAlign: currentCell.style.excelHAlign,\n vAlign: currentCell.style.excelVAlign,\n rotation: currentCell.style.excelRotation,\n bold: currentCell.style.bold,\n indent: currentCell.style.indent,\n italic: currentCell.style.italic,\n underline: currentCell.style.underline,\n backColor: currentCell.style.backColor,\n wrapText: currentCell.style.wrapText,\n borders: currentCell.style.excelBorders,\n numberFormat: currentCell.style.excelNumberFormat,\n type: currentCell.style.excelType,\n strikeThrough: currentCell.style.strikeThrough\n };\n cell.style = _this.mergeOptions(cellStyle, cell.style);\n }\n if (!isNullOrUndefined(currentCell.image) && !isNullOrUndefined(currentCell.image.base64)) {\n if (currentCell.rowSpan > 1) {\n _this.setImage(currentCell, cell.index);\n }\n else {\n templateRowHeight = _this.setImage(currentCell, cell.index);\n if (currentCell.image.height && currentCell.value !== '') {\n templateRowHeight += 30;\n }\n }\n }\n if (!isNullOrUndefined(currentCell.hyperLink)) {\n cell.hyperlink = { target: currentCell.hyperLink.target };\n cell.value = currentCell.hyperLink.displayText;\n }\n return cell;\n };\n var processRow = function (currentRow, isHeader) {\n var excelDetailCells = [];\n detailCellIndex = 0;\n for (var j = 0; j < currentRow.cells.length; j++) {\n var currentCell = currentRow.cells[parseInt(j.toString(), 10)];\n var detailCell = processCell_1(currentCell, isHeader);\n excelDetailCells.push(detailCell);\n }\n var row = { index: _this.rowLength++, cells: excelDetailCells };\n if (!isNullOrUndefined(templateRowHeight)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n row.height = templateRowHeight;\n templateRowHeight = null;\n }\n rows.push(row);\n };\n if (templateData.value.columnHeader) {\n for (var i = 0; i < templateData.value.columnHeader.length; i++) {\n processRow(templateData.value.columnHeader[parseInt(i.toString(), 10)], true);\n }\n }\n if (templateData.value.rows) {\n for (var i = 0; i < templateData.value.rows.length; i++) {\n processRow(templateData.value.rows[parseInt(i.toString(), 10)]);\n }\n }\n }\n else if (templateData.value.image) {\n templateRowHeight = this.setImage(templateData.value, detailIndent);\n var row = {\n index: this.rowLength++,\n cells: [{\n index: detailIndent,\n style: this.getRecordThemeStyle(this.theme)\n }]\n };\n if (!isNullOrUndefined(templateRowHeight)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n row.height = templateRowHeight;\n templateRowHeight = null;\n }\n rows.push(row);\n }\n else if (templateData.value.text) {\n var row = {\n index: this.rowLength++,\n cells: [{\n index: detailIndent,\n value: templateData.value.text,\n style: this.getRecordThemeStyle(this.theme)\n }]\n };\n rows.push(row);\n }\n else if (templateData.value.hyperLink) {\n var row = {\n index: this.rowLength++,\n cells: [{\n index: 2,\n hyperlink: { target: templateData.value.hyperLink.target },\n value: templateData.value.hyperLink.displayText,\n style: this.getRecordThemeStyle(this.theme)\n }]\n };\n rows.push(row);\n }\n for (var i = 0; i < rows.length; i++) {\n rows[parseInt(i.toString(), 10)].grouping = {\n outlineLevel: 1, isCollapsed: !templateData.parentRow.isExpand, isHidden: !templateData.parentRow.isExpand\n };\n }\n return rows;\n };\n ExcelExport.prototype.setImage = function (args, idx) {\n if (isNullOrUndefined(this.sheet.images)) {\n this.sheet.images = [];\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var excelImage = {\n image: args.image.base64, row: this.rowLength, column: idx,\n lastRow: this.rowLength, lastColumn: idx\n };\n if (args.image.width && args.image.height) {\n excelImage.width = args.image.width;\n excelImage.height = args.image.height;\n }\n this.sheet.images.push(excelImage);\n this.columns[idx - 1].width = args.image.width || this.columns[idx - 1].width;\n return args.image.height || 50;\n };\n ExcelExport.prototype.childGridCell = function (excelRow, childGridObj, excelExportProps, gRow) {\n var _this = this;\n return function (result) {\n childGridObj.beforeDataBound = null;\n result.cancel = true;\n if (result.result.length === 0) {\n result.result = [''];\n }\n excelRow.childRows = _this.processGridExport(childGridObj, excelExportProps, result);\n var intent = _this.parent.groupSettings.columns.length;\n var rows = excelRow.childRows;\n for (var i = 0; i < rows.length; i++) {\n rows[parseInt(i.toString(), 10)].grouping = { outlineLevel: intent + childGridObj\n .childGridLevel, isCollapsed: !gRow.isExpand, isHidden: !gRow.isExpand };\n }\n childGridObj.destroy();\n detach(childGridObj.element);\n _this.gridPool[childGridObj.id] = true;\n _this.helper.checkAndExport(_this.gridPool, _this.globalResolve);\n return excelRow;\n };\n };\n ExcelExport.prototype.processAggregates = function (gObj, rec, excelRows, currentViewRecords, indent, byGroup) {\n var summaryModel = new SummaryModelGenerator(gObj);\n var columns = summaryModel.getColumns();\n columns = columns.filter(function (col) { return isNullOrUndefined(col.commands) && col.type !== 'checkbox'; });\n if (gObj.aggregates.length && this.parent !== gObj) {\n gObj.aggregateModule.prepareSummaryInfo();\n }\n var data = undefined;\n if (!isNullOrUndefined(currentViewRecords)) {\n data = currentViewRecords;\n }\n else {\n data = rec;\n }\n if (indent === undefined) {\n indent = 0;\n }\n if (gObj.groupSettings.columns.length > 0 && byGroup) {\n var groupSummaryModel = new GroupSummaryModelGenerator(gObj);\n var groupSummaryRows = groupSummaryModel.generateRows(data, { level: data.level });\n if (groupSummaryRows.length > 0) {\n excelRows = this.fillAggregates(gObj, groupSummaryRows, indent, excelRows);\n }\n }\n else {\n indent = gObj.groupSettings.columns.length > 0 && !byGroup ? gObj.groupSettings.columns.length : indent;\n var sRows = summaryModel.generateRows(data, rec.aggregates, null, null, columns);\n if (sRows.length > 0 && !byGroup) {\n indent = gObj.groupSettings.columns.length ? indent - 1 : indent;\n excelRows = this.fillAggregates(gObj, sRows, indent, excelRows);\n }\n }\n return excelRows;\n };\n ExcelExport.prototype.fillAggregates = function (gObj, rows, indent, excelRows, customIndex) {\n for (var _i = 0, rows_2 = rows; _i < rows_2.length; _i++) {\n var row = rows_2[_i];\n var cells = [];\n var isEmpty = true;\n var index = 0;\n for (var _a = 0, _b = row.cells; _a < _b.length; _a++) {\n var cell = _b[_a];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var eCell = {};\n var columnsDetails = {};\n if (!isNullOrUndefined(cell.attributes.index)) {\n columnsDetails = this.parent.getColumnByIndex(cell.attributes.index);\n }\n if (cell.cellType === CellType.DetailFooterIntent || columnsDetails.type === 'checkbox') {\n continue;\n }\n if ((cell.visible || this.includeHiddenColumn)) {\n index++;\n if (cell.isDataCell) {\n isEmpty = false;\n var footerTemplate = !isNullOrUndefined(cell.column.footerTemplate);\n var groupFooterTemplate = !isNullOrUndefined(cell.column.groupFooterTemplate);\n var groupCaptionTemplate = !isNullOrUndefined(cell.column.groupCaptionTemplate);\n eCell.index = index + indent + gObj.childGridLevel;\n if (footerTemplate) {\n eCell.value = this.getAggreateValue(gObj, CellType.Summary, cell.column.footerTemplate, cell, row);\n }\n else if (groupFooterTemplate) {\n eCell.value = this.getAggreateValue(gObj, CellType.GroupSummary, cell.column.groupFooterTemplate, cell, row);\n }\n else if (groupCaptionTemplate) {\n eCell.value = this.getAggreateValue(gObj, CellType.CaptionSummary, cell.column.groupCaptionTemplate, cell, row);\n }\n else {\n for (var _c = 0, _d = Object.keys(row.data[cell.column.field]); _c < _d.length; _c++) {\n var key = _d[_c];\n if (key === cell.column.type) {\n if (!isNullOrUndefined(row.data[cell.column.field].Sum)) {\n eCell.value = row.data[cell.column.field][cell.column.field + \" - sum\"];\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Average)) {\n eCell.value = row.data[cell.column.field][cell.column.field + \" - average\"];\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Max)) {\n eCell.value = row.data[cell.column.field][cell.column.field + \" - max\"];\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Min)) {\n eCell.value = row.data[cell.column.field][cell.column.field + \" - min\"];\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Count)) {\n eCell.value = row.data[cell.column.field][cell.column.field + \" - count\"];\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].TrueCount)) {\n eCell.value = row.data[cell.column.field][cell.column.field + \" - truecount\"];\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].FalseCount)) {\n eCell.value = row.data[cell.column.field][cell.column.field + \" - falsecount\"];\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Custom)) {\n eCell.value = row.data[cell.column.field].Custom;\n }\n }\n }\n }\n eCell.style = this.getCaptionThemeStyle(this.theme); //{ name: gObj.element.id + 'column' + index };\n this.aggregateStyle(cell.column, eCell.style, cell.column.field);\n var gridCellStyle = cell.attributes.style;\n if (gridCellStyle.textAlign) {\n eCell.style.hAlign = gridCellStyle.textAlign.toLowerCase();\n }\n var args = {\n row: row,\n type: footerTemplate ? 'Footer' : groupFooterTemplate ? 'GroupFooter' : 'GroupCaption',\n style: eCell,\n cell: cell\n };\n this.parent.trigger(events.excelAggregateQueryCellInfo, args);\n cells.push(eCell);\n }\n else {\n if (customIndex === undefined) {\n eCell.index = index + indent + gObj.childGridLevel;\n eCell.style = this.getCaptionThemeStyle(this.theme); //{ name: gObj.element.id + 'column' + index };\n cells.push(eCell);\n }\n }\n }\n }\n if (!isNullOrUndefined(customIndex)) {\n excelRows.push({ index: customIndex, cells: cells });\n }\n else {\n var row_1 = {};\n var dummyOutlineLevel = 'outlineLevel';\n var dummyGrouping = 'grouping';\n if (this.groupedColLength < 8 && this.groupedColLength > 0 && !(gObj.groupSettings.enableLazyLoading && isNullOrUndefined(excelRows[excelRows.length - 1][\"\" + dummyGrouping]))) {\n var level = excelRows[excelRows.length - 1][\"\" + dummyGrouping][\"\" + dummyOutlineLevel];\n var grouping = { outlineLevel: level, isCollapsed: true };\n row_1 = { index: this.rowLength++, cells: cells, grouping: grouping };\n }\n else {\n row_1 = { index: this.rowLength++, cells: cells };\n }\n if (!isEmpty) {\n excelRows.push(row_1);\n }\n }\n }\n return excelRows;\n };\n ExcelExport.prototype.aggregateStyle = function (col, style, field) {\n var column = this.parent.getColumnByField(field);\n if (typeof col.format === 'object') {\n var format = col.format;\n style.numberFormat = !isNullOrUndefined(format.format) ? format.format : format.skeleton;\n if (!isNullOrUndefined(format.type)) {\n style.type = format.type.toLowerCase();\n }\n }\n else {\n style.numberFormat = col.format;\n }\n if (!isNullOrUndefined(column) && isNullOrUndefined(style.type)) {\n style.type = column.type.toLowerCase();\n }\n };\n ExcelExport.prototype.getAggreateValue = function (gObj, cellType, template, cell, row) {\n var templateFn = {};\n templateFn[getEnumValue(CellType, cell.cellType)] = compile(template);\n var txt;\n var data = row.data[cell.column.field ? cell.column.field : cell.column.columnName];\n if ((this.parent.isReact || this.parent.isVue || this.parent.isVue3 || this.parent.isAngular) &&\n !(typeof cell.column.footerTemplate === 'string' || typeof cell.column.groupFooterTemplate === 'string' || typeof cell.column.groupCaptionTemplate === 'string')) {\n txt = data[(cell.column.type)];\n return !isNullOrUndefined(txt) ? (txt) : '';\n }\n else {\n txt = (templateFn[getEnumValue(CellType, cell.cellType)](data));\n }\n return !isNullOrUndefined(txt[0]) ? txt[0].textContent : '';\n };\n ExcelExport.prototype.mergeOptions = function (JSON1, JSON2) {\n var result = {};\n var attrname = Object.keys(JSON1);\n for (var index = 0; index < attrname.length; index++) {\n if (attrname[parseInt(index.toString(), 10)] !== 'name') {\n result[attrname[parseInt(index.toString(), 10)]] = JSON1[attrname[parseInt(index.toString(), 10)]];\n }\n }\n attrname = Object.keys(JSON2);\n for (var index = 0; index < attrname.length; index++) {\n if (attrname[parseInt(index.toString(), 10)] !== 'name') {\n result[attrname[parseInt(index.toString(), 10)]] = JSON2[attrname[parseInt(index.toString(), 10)]];\n }\n }\n return result;\n };\n ExcelExport.prototype.getColumnStyle = function (gObj, columnIndex) {\n var index = 0;\n for (var _i = 0, _a = this.styles; _i < _a.length; _i++) {\n var style = _a[_i];\n if (style.name === gObj.element.id + 'column' + columnIndex) {\n return index;\n }\n index++;\n }\n return undefined;\n };\n ExcelExport.prototype.headerRotation = function (args) {\n var degree = args.style.rotation;\n if (degree <= 90 && degree >= 0) {\n args.style.hAlign = 'Left';\n }\n else if (degree > 90 && degree <= 180) {\n args.style.hAlign = 'Right';\n }\n else {\n degree = 180;\n args.style.hAlign = 'Right';\n }\n args.style.rotation = degree;\n };\n ExcelExport.prototype.processHeaderContent = function (gObj, headerRow, indent, excelRows) {\n var rowIndex = 1;\n var gridRows = headerRow.rows;\n // Column collection with respect to the records in the grid\n var gridColumns = headerRow.columns;\n var spannedCells = [];\n if (indent > 0) {\n var index = 0;\n while (index !== indent) {\n this.columns.push({ index: index + 1, width: 30 });\n index++;\n }\n }\n for (var col = 0; col < gridColumns.length; col++) {\n this.parseStyles(gObj, gridColumns[parseInt(col.toString(), 10)], this.getRecordThemeStyle(this.theme), indent + col + 1);\n }\n var templateRowHeight;\n for (var row = 0; row < gridRows.length; row++) {\n var currentCellIndex = 1 + indent;\n var cells = [];\n for (var column = 0; column < gridRows[parseInt(row.toString(), 10)].cells.length; column++) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var style = {};\n var cell = {};\n var gridCell = gridRows[parseInt(row.toString(), 10)].cells[parseInt(column.toString(), 10)];\n if (gridCell.cellType === CellType.HeaderIndent || gridCell.cellType === CellType.DetailHeader) {\n continue;\n }\n var result = { contains: true, index: 1 };\n while (result.contains) {\n result = this.getIndex(spannedCells, rowIndex, currentCellIndex);\n currentCellIndex = result.index;\n if (!result.contains) {\n cell.index = result.index + gObj.childGridLevel;\n break;\n }\n }\n if (!isNullOrUndefined(gridCell.rowSpan) && gridCell.rowSpan !== 1) {\n cell.rowSpan = gridCell.rowSpan;\n for (var i = rowIndex; i < gridCell.rowSpan + rowIndex; i++) {\n var spannedCell = { rowIndex: 0, columnIndex: 0 };\n spannedCell.rowIndex = i;\n spannedCell.columnIndex = currentCellIndex;\n spannedCells.push(spannedCell);\n }\n }\n if (!isNullOrUndefined(gridCell.colSpan) && gridCell.colSpan !== 1) {\n cell.colSpan = gridCell.colSpan;\n currentCellIndex = currentCellIndex + cell.colSpan - 1;\n }\n cell.value = gridCell.column.headerText;\n style = this.getHeaderThemeStyle(this.theme);\n if (!isNullOrUndefined(gridCell.column.textAlign)) {\n style.hAlign = gridCell.column.textAlign.toLowerCase();\n }\n if (!isNullOrUndefined(gridCell.column.headerTextAlign)) {\n style.hAlign = gridCell.column.headerTextAlign.toLowerCase();\n }\n var excelHeaderCellArgs = { cell: cell, gridCell: gridCell, style: style };\n gObj.trigger(events.excelHeaderQueryCellInfo, excelHeaderCellArgs);\n if (excelHeaderCellArgs.style.rotation) {\n this.headerRotation(excelHeaderCellArgs);\n }\n if (!isNullOrUndefined(excelHeaderCellArgs.image) && !isNullOrUndefined(excelHeaderCellArgs.image.base64)) {\n templateRowHeight = this.setImage(excelHeaderCellArgs, currentCellIndex);\n }\n if (!isNullOrUndefined(excelHeaderCellArgs.hyperLink)) {\n excelHeaderCellArgs.cell.hyperlink = { target: excelHeaderCellArgs.hyperLink.target };\n cell.value = excelHeaderCellArgs.hyperLink.displayText || cell.value;\n }\n cell.style = excelHeaderCellArgs.style;\n cells.push(cell);\n currentCellIndex++;\n }\n var excelRow = { index: this.rowLength++, cells: cells };\n if (!isNullOrUndefined(templateRowHeight)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n excelRow.height = templateRowHeight;\n }\n excelRows.push(excelRow);\n }\n return excelRows;\n };\n ExcelExport.prototype.getHeaderThemeStyle = function (theme) {\n var style = {};\n style.fontSize = 12;\n style.borders = { color: '#E0E0E0' };\n style.bold = true;\n if (!isNullOrUndefined(theme) && !isNullOrUndefined(theme.header)) {\n style = this.updateThemeStyle(theme.header, style);\n }\n return style;\n };\n ExcelExport.prototype.updateThemeStyle = function (themestyle, style) {\n return extend(style, themestyle);\n };\n ExcelExport.prototype.getCaptionThemeStyle = function (theme) {\n var style = {};\n style.fontSize = 13;\n style.backColor = '#F6F6F6';\n if (!isNullOrUndefined(theme) && !isNullOrUndefined(theme.caption)) {\n style = this.updateThemeStyle(theme.caption, style);\n }\n return style;\n };\n ExcelExport.prototype.getRecordThemeStyle = function (theme) {\n var style = {};\n style.fontSize = 13;\n style.borders = { color: '#E0E0E0' };\n if (!isNullOrUndefined(theme) && !isNullOrUndefined(theme.record)) {\n style = this.updateThemeStyle(theme.record, style);\n }\n return style;\n };\n ExcelExport.prototype.processExcelHeader = function (header) {\n if (!isNullOrUndefined(header.rows) && (this.expType === 'NewSheet' || this.rowLength === 1)) {\n var noRows = void 0;\n if (header.headerRows === undefined) {\n this.rowLength = header.rows.length;\n }\n else {\n this.rowLength = header.headerRows;\n }\n if (this.rowLength < header.rows.length) {\n noRows = this.rowLength;\n }\n else {\n noRows = header.rows.length;\n }\n this.rowLength++;\n for (var row = 0; row < noRows; row++) {\n var json = header.rows[parseInt(row.toString(), 10)];\n //Row index\n if (!(json.index !== null && !isNullOrUndefined(json.index))) {\n json.index = (row + 1);\n }\n this.updatedCellIndex(json);\n }\n }\n };\n ExcelExport.prototype.updatedCellIndex = function (json) {\n var cellsLength = json.cells.length;\n for (var cellId = 0; cellId < cellsLength; cellId++) {\n var jsonCell = json.cells[parseInt(cellId.toString(), 10)];\n //cell index\n if (!(jsonCell.index !== null && !isNullOrUndefined(jsonCell.index))) {\n jsonCell.index = (cellId + 1);\n }\n }\n this.rows.push(json);\n };\n ExcelExport.prototype.processExcelFooter = function (footer) {\n if (!isNullOrUndefined(footer.rows)) {\n var noRows = void 0;\n if (footer.footerRows === undefined) {\n this.rowLength += footer.rows.length;\n }\n else {\n if (footer.footerRows > footer.rows.length) {\n this.rowLength += (footer.footerRows - footer.rows.length);\n noRows = footer.rows.length;\n }\n else {\n noRows = footer.footerRows;\n }\n }\n for (var row = 0; row < noRows; row++) {\n var json = footer.rows[parseInt(row.toString(), 10)];\n //Row index\n if (json.index === null || json.index === undefined) {\n json.index = this.rowLength++;\n }\n else {\n json.index += this.rowLength;\n }\n this.updatedCellIndex(json);\n }\n }\n };\n ExcelExport.prototype.getIndex = function (spannedCells, rowIndex, columnIndex) {\n for (var _i = 0, spannedCells_1 = spannedCells; _i < spannedCells_1.length; _i++) {\n var spannedCell = spannedCells_1[_i];\n if ((spannedCell.rowIndex === rowIndex) && (spannedCell.columnIndex === columnIndex)) {\n columnIndex = columnIndex + 1;\n return { contains: true, index: columnIndex };\n }\n }\n return { contains: false, index: columnIndex };\n };\n ExcelExport.prototype.parseStyles = function (gObj, col, style, index) {\n if (!isNullOrUndefined(col.format)) {\n if (typeof col.format === 'object') {\n var format = col.format;\n style.numberFormat = !isNullOrUndefined(format.format) ? format.format : format.skeleton;\n if (!isNullOrUndefined(format.type)) {\n style.type = format.type === 'dateonly' ? 'date' : format.type.toLowerCase();\n }\n }\n else {\n style.numberFormat = col.format;\n style.type = col.type === 'dateonly' ? 'date' : col.type;\n }\n }\n if (!isNullOrUndefined(col.textAlign)) {\n style.hAlign = col.textAlign.toLowerCase();\n }\n if (Object.keys(style).length > 0) {\n style.name = gObj.element.id + 'column' + index;\n this.styles.push(style);\n }\n if (!isNullOrUndefined(col.width) && col.width !== 'auto' && !gObj.childGridLevel) {\n this.columns.push({ index: index + gObj.childGridLevel, width: typeof col.width === 'number' ?\n col.width : this.helper.getConvertedWidth(col.width) });\n }\n };\n ExcelExport.prototype.destroy = function () {\n //destroy for exporting\n };\n return ExcelExport;\n}());\nexport { ExcelExport };\n","import { print as printWindow, createElement, detach, classList, selectAll, extend } from '@syncfusion/ej2-base';\nimport { getPrintGridModel } from '../base/util';\nimport { Grid } from '../base/grid';\nimport * as events from '../base/constant';\nimport { Deferred } from '@syncfusion/ej2-data';\nimport * as literals from '../base/string-literals';\n/**\n * @returns {string[]} returns the cloned property\n * @hidden\n */\nexport function getCloneProperties() {\n return ['aggregates', 'allowGrouping', 'allowFiltering', 'allowMultiSorting', 'allowReordering', 'allowSorting',\n 'allowTextWrap', 'childGrid', 'columns', 'currentViewData', 'dataSource', 'detailTemplate', 'enableAltRow',\n 'enableColumnVirtualization', 'filterSettings', 'gridLines',\n 'groupSettings', 'height', 'locale', 'pageSettings', 'printMode', 'query', 'queryString', 'enableRtl',\n 'rowHeight', 'rowTemplate', 'sortSettings', 'textWrapSettings', 'allowPaging', 'hierarchyPrintMode', 'searchSettings',\n 'queryCellInfo', 'beforeDataBound'];\n}\n/**\n *\n * The `Print` module is used to handle print action.\n */\nvar Print = /** @class */ (function () {\n /**\n * Constructor for the Grid print module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {Scroll} scrollModule - specifies the scroll module\n * @hidden\n */\n function Print(parent, scrollModule) {\n this.isAsyncPrint = false;\n this.defered = new Deferred();\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.contentReady, this.isContentReady(), this);\n this.actionBeginFunction = this.actionBegin.bind(this);\n this.parent.addEventListener(events.actionBegin, this.actionBeginFunction);\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 Print.prototype.isContentReady = function () {\n var _this = this;\n if (this.isPrintGrid() && (this.parent.hierarchyPrintMode === 'None' || !this.parent.childGrid)) {\n return this.contentReady;\n }\n return function () {\n _this.defered.promise.then(function () {\n _this.contentReady();\n });\n if (_this.isPrintGrid()) {\n _this.hierarchyPrint();\n }\n };\n };\n Print.prototype.hierarchyPrint = function () {\n this.removeColGroup(this.parent);\n var printGridObj = window.printGridObj;\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`](./printmode/).\n *\n * @returns {void}\n */\n Print.prototype.print = function () {\n this.renderPrintGrid();\n };\n Print.prototype.onEmpty = function () {\n if (this.isPrintGrid()) {\n this.contentReady();\n }\n };\n Print.prototype.actionBegin = function () {\n if (this.isPrintGrid()) {\n this.isAsyncPrint = true;\n }\n };\n Print.prototype.renderPrintGrid = function () {\n var gObj = this.parent;\n var element = createElement('div', {\n id: this.parent.element.id + '_print', className: gObj.element.className + ' e-print-grid'\n });\n element.classList.remove('e-gridhover');\n document.body.appendChild(element);\n var printGrid = new Grid(getPrintGridModel(gObj, gObj.hierarchyPrintMode));\n for (var i = 0; i < printGrid.columns.length; i++) {\n printGrid.columns[parseInt(i.toString(), 10)] = extend({}, printGrid.columns[parseInt(i.toString(), 10)]);\n if (gObj.isFrozenGrid() && !gObj.getFrozenColumns()) {\n printGrid.columns[parseInt(i.toString(), 10)].freeze = undefined;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.parent.isAngular) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n printGrid.viewContainerRef = this.parent.viewContainerRef;\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n printGrid.load = function () { };\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 if (!modules || modules.length !== injectedModues.length) {\n printGrid.setInjectedModules(injectedModues);\n }\n gObj.notify(events.printGridInit, { element: element, printgrid: printGrid });\n this.parent.log('exporting_begin', this.getModuleName());\n printGrid.registeredTemplate = this.parent.registeredTemplate;\n printGrid.isVue = this.parent.isVue;\n printGrid.appendTo(element);\n if (!gObj.isVue3) {\n printGrid.trigger = gObj.trigger;\n }\n };\n Print.prototype.contentReady = function () {\n if (this.isPrintGrid()) {\n var gObj = this.parent;\n if (this.isAsyncPrint) {\n this.printGrid();\n return;\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 if (!this.isAsyncPrint) {\n gObj.trigger(events.beforePrint, args);\n }\n if (args.cancel) {\n detach(gObj.element);\n return;\n }\n if (!this.isAsyncPrint) {\n this.printGrid();\n }\n }\n };\n Print.prototype.printGrid = function () {\n var gObj = this.parent;\n // Height adjustment on print grid\n if (gObj.height !== 'auto') { // if scroller enabled\n var cssProps = this.scrollModule.getCssProperties();\n var contentDiv = gObj.element.querySelector('.' + literals.content);\n var headerDiv = gObj.element.querySelector('.' + literals.gridHeader);\n contentDiv.style.height = 'auto';\n contentDiv.style.overflowY = 'auto';\n headerDiv.style[cssProps.padding] = '';\n headerDiv.firstElementChild.style[cssProps.border] = '';\n }\n // Grid alignment adjustment on grouping\n if (gObj.allowGrouping) {\n if (!gObj.groupSettings.columns.length) {\n gObj.element.querySelector('.e-groupdroparea').style.display = 'none';\n }\n else {\n this.removeColGroup(gObj);\n }\n }\n // hide horizontal scroll\n for (var _i = 0, _a = [].slice.call(gObj.element.getElementsByClassName(literals.content)); _i < _a.length; _i++) {\n var element = _a[_i];\n element.style.overflowX = 'hidden';\n }\n // Hide the waiting popup\n var waitingPop = [].slice.call(gObj.element.getElementsByClassName('e-spin-show'));\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 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 gObj.destroy();\n this.parent.log('exporting_complete', this.getModuleName());\n };\n Print.prototype.printGridElement = function (gObj) {\n classList(gObj.element, ['e-print-grid-layout'], ['e-print-grid']);\n if (gObj.isPrinting) {\n detach(gObj.element);\n }\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 this.printWind = printWindow(gObj.element, this.printWind);\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 if (!depth) {\n return;\n }\n var groupCaption = selectAll('.e-groupcaption', element);\n var colSpan = groupCaption[depth - 1].getAttribute('colspan');\n for (var i = 0; i < groupCaption.length; i++) {\n groupCaption[parseInt(i.toString(), 10)].setAttribute('colspan', colSpan);\n }\n var colGroups = selectAll(\"colgroup\" + id + \"colgroup\", element);\n var contentColGroups = selectAll('.e-content colgroup', element);\n var footerColGroups = selectAll('.e-summarycontent colgroup', element);\n this.hideColGroup(colGroups, depth);\n this.hideColGroup(contentColGroups, depth);\n this.hideColGroup(footerColGroups, depth);\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[parseInt(i.toString(), 10)].children[parseInt(j.toString(), 10)].style.display = 'none';\n }\n }\n };\n /**\n * To destroy the print\n *\n * @returns {boolean} returns the isPrintGrid or not\n * @hidden\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 *\n * @returns {void}\n * @hidden\n */\n Print.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.contentReady, this.contentReady.bind(this));\n this.parent.removeEventListener(events.actionBegin, this.actionBeginFunction);\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 *\n * @returns {string} returns the module name\n * @private\n */\n Print.prototype.getModuleName = function () {\n return 'print';\n };\n Print.printGridProp = getCloneProperties().concat([events.beforePrint, events.printComplete, events.load]);\n return Print;\n}());\nexport { Print };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Browser } from '@syncfusion/ej2-base';\nimport { cldrData, L10n, Component, getDefaultDateObject, rippleEffect, Event } from '@syncfusion/ej2-base';\nimport { remove, addClass, detach, removeClass, closest, append, attributes, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, getValue, extend, getUniqueID, ChildProperty } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { ListBase } from '@syncfusion/ej2-lists';\nvar WRAPPERCLASS = 'e-time-wrapper';\nvar POPUP = 'e-popup';\nvar ERROR = 'e-error';\nvar POPUPDIMENSION = '240px';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar ROOT = 'e-timepicker';\nvar LIBRARY = 'e-lib';\nvar CONTROL = 'e-control';\nvar CONTENT = 'e-content';\nvar SELECTED = 'e-active';\nvar HOVER = 'e-hover';\nvar NAVIGATION = 'e-navigation';\nvar DISABLED = 'e-disabled';\nvar ICONANIMATION = 'e-icon-anim';\nvar TIMEICON = 'e-time-icon';\nvar CLEARICON = 'e-clear-icon';\nvar FOCUS = 'e-input-focus';\nvar LISTCLASS = 'e-list-item';\nvar HALFPOSITION = 2;\nvar ANIMATIONDURATION = 50;\nvar OVERFLOW = 'e-time-overflow';\nvar OFFSETVAL = 4;\nvar EDITABLE = 'e-non-edit';\nvar wrapperAttributes = ['title', 'class', 'style'];\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var TimePickerBase;\n(function (TimePickerBase) {\n // eslint-disable-next-line max-len, jsdoc/require-jsdoc\n function createListItems(createdEl, min, max, globalize, timeFormat, step) {\n var formatOptions;\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: timeFormat, type: 'time' };\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n formatOptions = { format: timeFormat, type: 'time', calendar: 'islamic' };\n }\n var start;\n var interval = step * 60000;\n var listItems = [];\n var timeCollections = [];\n start = +(min.setMilliseconds(0));\n var end = +(max.setMilliseconds(0));\n while (end >= start) {\n timeCollections.push(start);\n listItems.push(globalize.formatDate(new Date(start), { format: timeFormat, type: 'time' }));\n start += interval;\n }\n var listTag = ListBase.createList(createdEl, listItems, null, true);\n return { collection: timeCollections, list: listTag };\n }\n TimePickerBase.createListItems = createListItems;\n})(TimePickerBase || (TimePickerBase = {}));\nvar TimeMaskPlaceholder = /** @class */ (function (_super) {\n __extends(TimeMaskPlaceholder, _super);\n function TimeMaskPlaceholder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('day')\n ], TimeMaskPlaceholder.prototype, \"day\", void 0);\n __decorate([\n Property('month')\n ], TimeMaskPlaceholder.prototype, \"month\", void 0);\n __decorate([\n Property('year')\n ], TimeMaskPlaceholder.prototype, \"year\", void 0);\n __decorate([\n Property('day of the week')\n ], TimeMaskPlaceholder.prototype, \"dayOfTheWeek\", void 0);\n __decorate([\n Property('hour')\n ], TimeMaskPlaceholder.prototype, \"hour\", void 0);\n __decorate([\n Property('minute')\n ], TimeMaskPlaceholder.prototype, \"minute\", void 0);\n __decorate([\n Property('second')\n ], TimeMaskPlaceholder.prototype, \"second\", void 0);\n return TimeMaskPlaceholder;\n}(ChildProperty));\nexport { TimeMaskPlaceholder };\n/**\n * TimePicker is an intuitive interface component which provides an options to select a time value\n * from popup list or to set a desired time value.\n * ```\n * \n * \n * ```\n */\nvar TimePicker = /** @class */ (function (_super) {\n __extends(TimePicker, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {TimePickerModel} options - Specifies the TimePicker model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function TimePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.liCollections = [];\n _this.timeCollections = [];\n _this.disableItemCollection = [];\n _this.invalidValueString = null;\n _this.isAngular = false;\n _this.preventChange = false;\n _this.maskedDateValue = '';\n _this.moduleName = _this.getModuleName();\n _this.timeOptions = options;\n return _this;\n }\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n TimePicker.prototype.preRender = function () {\n this.keyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [ROOT, CONTROL, LIBRARY]);\n this.inputElement = this.element;\n this.angularTag = null;\n this.formElement = closest(this.element, 'form');\n if (this.element.tagName === 'EJS-TIMEPICKER') {\n this.angularTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n this.openPopupEventArgs = {\n appendTo: document.body\n };\n };\n // element creation\n TimePicker.prototype.render = function () {\n this.initialize();\n this.createInputElement();\n this.updateHtmlAttributeToWrapper();\n this.setTimeAllowEdit();\n this.setEnable();\n this.validateInterval();\n this.bindEvents();\n this.validateDisable();\n this.setTimeZone();\n this.setValue(this.getFormattedValue(this.value));\n if (this.enableMask && !this.value && this.maskedDateValue && (this.floatLabelType === 'Always' || !this.floatLabelType || !this.placeholder)) {\n this.updateInputValue(this.maskedDateValue);\n this.checkErrorState(this.maskedDateValue);\n }\n this.anchor = this.inputElement;\n this.inputElement.setAttribute('value', this.inputElement.value);\n this.inputEleValue = this.getDateObject(this.inputElement.value);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.renderComplete();\n };\n TimePicker.prototype.setTimeZone = function () {\n if (!isNullOrUndefined(this.serverTimezoneOffset) && this.value) {\n var clientTimeZoneDiff = new Date().getTimezoneOffset() / 60;\n var serverTimezoneDiff = this.serverTimezoneOffset;\n var timeZoneDiff = serverTimezoneDiff + clientTimeZoneDiff;\n timeZoneDiff = this.isDayLightSaving() ? timeZoneDiff-- : timeZoneDiff;\n this.value = new Date((this.value).getTime() + (timeZoneDiff * 60 * 60 * 1000));\n }\n };\n TimePicker.prototype.isDayLightSaving = function () {\n var firstOffset = new Date(this.value.getFullYear(), 0, 1).getTimezoneOffset();\n var secondOffset = new Date(this.value.getFullYear(), 6, 1).getTimezoneOffset();\n return (this.value.getTimezoneOffset() < Math.max(firstOffset, secondOffset));\n };\n TimePicker.prototype.setTimeAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n this.clearIconState();\n };\n TimePicker.prototype.clearIconState = function () {\n if (!this.allowEdit && this.inputWrapper && !this.readonly) {\n if (this.inputElement.value === '') {\n removeClass([this.inputWrapper.container], [EDITABLE]);\n }\n else {\n addClass([this.inputWrapper.container], [EDITABLE]);\n }\n }\n else if (this.inputWrapper) {\n removeClass([this.inputWrapper.container], [EDITABLE]);\n }\n };\n TimePicker.prototype.validateDisable = function () {\n this.setMinMax(this.initMin, this.initMax);\n if (!isNullOrUndefined(this.value)) {\n this.popupCreation();\n this.popupObj.destroy();\n this.popupWrapper = this.popupObj = null;\n }\n if ((!isNaN(+this.value) && this.value !== null)) {\n if (!this.valueIsDisable(this.value)) {\n //disable value given in value property so reset the date based on current date\n if (this.strictMode) {\n this.resetState();\n }\n this.initValue = null;\n this.initMax = this.getDateObject(this.initMax);\n this.initMin = this.getDateObject(this.initMin);\n this.timeCollections = this.liCollections = [];\n this.setMinMax(this.initMin, this.initMax);\n }\n }\n };\n TimePicker.prototype.validationAttribute = function (target, input) {\n var name = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n input.setAttribute('name', name);\n target.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (isNullOrUndefined(target.getAttribute(attributes[i]))) {\n continue;\n }\n var attr = target.getAttribute(attributes[i]);\n input.setAttribute(attributes[i], attr);\n target.removeAttribute(attributes[i]);\n }\n };\n TimePicker.prototype.initialize = function () {\n this.globalize = new Internationalization(this.locale);\n this.defaultCulture = new Internationalization('en');\n this.checkTimeFormat();\n this.checkInvalidValue(this.value);\n // persist the value property.\n this.setProperties({ value: this.checkDateValue(new Date(this.checkInValue(this.value))) }, true);\n this.setProperties({ min: this.checkDateValue(new Date(this.checkInValue(this.min))) }, true);\n this.setProperties({ max: this.checkDateValue(new Date(this.checkInValue(this.max))) }, true);\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkInValue(this.scrollTo))) }, true);\n if (this.angularTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.updateHtmlAttributeToElement();\n this.checkAttributes(false); //check the input element attributes\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('timepicker', localeText, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n this.initValue = this.checkDateValue(this.value);\n this.initMin = this.checkDateValue(this.min);\n this.initMax = this.checkDateValue(this.max);\n this.isNavigate = this.isPreventBlur = this.isTextSelected = false;\n this.activeIndex = this.valueWithMinutes = this.prevDate = null;\n if (!isNullOrUndefined(this.element.getAttribute('id'))) {\n if (this.angularTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n //for angular case\n this.element.id = getUniqueID('ej2_timepicker');\n if (this.angularTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n if (isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.element.id });\n }\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n };\n TimePicker.prototype.checkTimeFormat = function () {\n if (this.format) {\n if (typeof this.format === 'string') {\n this.formatString = this.format;\n }\n else if (!isNullOrUndefined(this.format.skeleton) && this.format.skeleton !== '') {\n var skeletonString = this.format.skeleton;\n this.formatString = this.globalize.getDatePattern({ type: 'time', skeleton: skeletonString });\n }\n else {\n this.formatString = this.globalize.getDatePattern({ type: 'time', skeleton: 'short' });\n }\n }\n else {\n this.formatString = null;\n }\n };\n TimePicker.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n TimePicker.prototype.createInputElement = function () {\n if (this.fullScreenMode && Browser.isDevice) {\n this.cssClass += ' ' + \"e-popup-expand\";\n }\n var updatedCssClassesValue = this.cssClass;\n var isBindClearAction = this.enableMask ? false : true;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassesValue = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n bindClearAction: isBindClearAction,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassesValue,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton\n },\n buttons: [' e-input-group-icon e-time-icon e-icons']\n }, this.createElement);\n this.inputWrapper.container.style.width = this.setWidth(this.width);\n attributes(this.inputElement, {\n 'aria-autocomplete': 'list', 'tabindex': '0',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-disabled': 'false', 'aria-invalid': 'false'\n });\n if (!this.isNullOrEmpty(this.inputStyle)) {\n Input.addAttributes({ 'style': this.inputStyle }, this.inputElement);\n }\n addClass([this.inputWrapper.container], WRAPPERCLASS);\n };\n TimePicker.prototype.getCldrDateTimeFormat = function () {\n var culture = new Internationalization(this.locale);\n var cldrTime;\n var dateFormat = culture.getDatePattern({ skeleton: 'yMd' });\n if (this.isNullOrEmpty(this.formatString)) {\n cldrTime = dateFormat + ' ' + this.cldrFormat('time');\n }\n else {\n cldrTime = this.formatString;\n }\n return cldrTime;\n };\n TimePicker.prototype.checkInvalidValue = function (value) {\n var isInvalid = false;\n if (typeof value !== 'object' && !isNullOrUndefined(value)) {\n var valueString = value;\n if (typeof valueString === 'string') {\n valueString = valueString.trim();\n }\n var valueExpression = null;\n var valueExp = null;\n if (typeof value === 'number') {\n valueString = value.toString();\n }\n else if (typeof value === 'string') {\n if (!(/^[a-zA-Z0-9- ]*$/).test(value)) {\n valueExpression = this.setCurrentDate(this.getDateObject(value));\n if (isNullOrUndefined(valueExpression)) {\n valueExpression = this.checkDateValue(this.globalize.parseDate(valueString, {\n format: this.getCldrDateTimeFormat(), type: 'datetime'\n }));\n if (isNullOrUndefined(valueExpression)) {\n valueExpression = this.checkDateValue(this.globalize.parseDate(valueString, {\n format: this.formatString, type: 'dateTime', skeleton: 'yMd'\n }));\n }\n }\n }\n }\n valueExp = this.globalize.parseDate(valueString, {\n format: this.getCldrDateTimeFormat(), type: 'datetime'\n });\n valueExpression = (!isNullOrUndefined(valueExp) && valueExp instanceof Date && !isNaN(+valueExp)) ? valueExp : null;\n if (isNullOrUndefined(valueExpression) && valueString.replace(/\\s/g, '').length) {\n var extISOString = null;\n var basicISOString = null;\n // eslint-disable-next-line\n extISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n // eslint-disable-next-line\n basicISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n if ((!extISOString.test(valueString) && !basicISOString.test(valueString))\n || ((/^[a-zA-Z0-9- ]*$/).test(value)) || isNaN(+new Date('' + valueString))) {\n isInvalid = true;\n }\n else {\n valueExpression = new Date('' + valueString);\n }\n }\n if (isInvalid) {\n if (!this.strictMode) {\n this.invalidValueString = valueString;\n }\n this.setProperties({ value: null }, true);\n this.initValue = null;\n }\n else {\n this.setProperties({ value: valueExpression }, true);\n this.initValue = this.value;\n }\n }\n };\n TimePicker.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableMask) {\n modules.push({ args: [this], member: 'MaskedDateTime' });\n }\n return modules;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n TimePicker.prototype.cldrFormat = function (type) {\n var cldrDateTimeString;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDateTimeString = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDateTimeString = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n return cldrDateTimeString;\n };\n // destroy function\n TimePicker.prototype.destroy = function () {\n this.hide();\n this.unBindEvents();\n var ariaAttribute = {\n 'aria-autocomplete': 'list', 'tabindex': '0',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-disabled': 'true', 'aria-invalid': 'false'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttribute, this.inputElement);\n if (this.angularTag === null) {\n this.inputWrapper.container.parentElement.appendChild(this.inputElement);\n }\n if (!isNullOrUndefined(this.cloneElement.getAttribute('tabindex'))) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.removeAttribute('tabindex');\n }\n this.ensureInputAttribute();\n this.enableElement([this.inputElement]);\n this.inputElement.classList.remove('e-input');\n if (isNullOrUndefined(this.cloneElement.getAttribute('disabled'))) {\n Input.setEnabled(true, this.inputElement, this.floatLabelType);\n }\n }\n if (this.inputWrapper.container) {\n detach(this.inputWrapper.container);\n }\n this.inputWrapper = this.popupWrapper = this.cloneElement = undefined;\n this.liCollections = this.timeCollections = this.disableItemCollection = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n _super.prototype.destroy.call(this);\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n this.rippleFn = null;\n this.openPopupEventArgs = null;\n this.selectedElement = null;\n this.listTag = null;\n this.liCollections = null;\n };\n TimePicker.prototype.ensureInputAttribute = function () {\n var propertyList = [];\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n propertyList[i] = this.inputElement.attributes[i].name;\n }\n for (var i = 0; i < propertyList.length; i++) {\n if (!isNullOrUndefined(this.cloneElement.getAttribute(propertyList[i]))) {\n this.inputElement.setAttribute(propertyList[i], this.cloneElement.getAttribute(propertyList[i]));\n if (propertyList[i].toLowerCase() === 'value') {\n this.inputElement.value = this.cloneElement.getAttribute(propertyList[i]);\n }\n }\n else {\n this.inputElement.removeAttribute(propertyList[i]);\n if (propertyList[i].toLowerCase() === 'value') {\n this.inputElement.value = '';\n }\n }\n }\n };\n //popup creation\n TimePicker.prototype.popupCreation = function () {\n this.popupWrapper = this.createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_popup', 'style': 'visibility:hidden' }\n });\n this.popupWrapper.setAttribute('aria-label', this.element.id);\n this.popupWrapper.setAttribute('role', 'dialog');\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.className += ' ' + this.cssClass;\n }\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.generateList();\n append([this.listWrapper], this.popupWrapper);\n }\n this.addSelection();\n this.renderPopup();\n detach(this.popupWrapper);\n };\n TimePicker.prototype.getPopupHeight = function () {\n var height = parseInt(POPUPDIMENSION, 10);\n var popupHeight = this.popupWrapper.getBoundingClientRect().height;\n return popupHeight > height ? height : popupHeight;\n };\n TimePicker.prototype.generateList = function () {\n this.createListItems();\n this.wireListEvents();\n var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n };\n TimePicker.prototype.renderPopup = function () {\n var _this = this;\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n this.popupObj = new Popup(this.popupWrapper, {\n width: this.setPopupWidth(this.width),\n zIndex: this.zIndex,\n targetType: 'relative',\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n enableRtl: this.enableRtl,\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n offsetY: OFFSETVAL,\n open: function () {\n _this.popupWrapper.style.visibility = 'visible';\n addClass([_this.inputWrapper.buttons[0]], SELECTED);\n }, close: function () {\n removeClass([_this.inputWrapper.buttons[0]], SELECTED);\n _this.unWireListEvents();\n _this.inputElement.removeAttribute('aria-activedescendant');\n remove(_this.popupObj.element);\n _this.popupObj.destroy();\n _this.popupWrapper.innerHTML = '';\n _this.listWrapper = _this.popupWrapper = _this.listTag = undefined;\n }, targetExitViewport: function () {\n if (!Browser.isDevice) {\n _this.hide();\n }\n }\n });\n if (!Browser.isDevice) {\n this.popupObj.collision = { X: 'none', Y: 'flip' };\n }\n if (Browser.isDevice && this.fullScreenMode) {\n this.popupObj.element.style.maxHeight = \"100%\";\n this.popupObj.element.style.width = \"100%\";\n }\n else {\n this.popupObj.element.style.maxHeight = POPUPDIMENSION;\n }\n if (Browser.isDevice && this.fullScreenMode) {\n var modelHeader = this.createElement('div', { className: 'e-model-header' });\n var modelTitleSpan = this.createElement(\"span\", { className: \"e-model-title\" });\n modelTitleSpan.textContent = \"Select time\";\n var modelCloseIcon = this.createElement(\"span\", { className: \"e-popup-close\" });\n EventHandler.add(modelCloseIcon, 'mousedown touchstart', this.timePopupCloseHandler, this);\n modelHeader.appendChild(modelCloseIcon);\n modelHeader.appendChild(modelTitleSpan);\n this.popupWrapper.insertBefore(modelHeader, this.popupWrapper.firstElementChild);\n }\n };\n TimePicker.prototype.timePopupCloseHandler = function (e) {\n this.hide();\n };\n //util function\n TimePicker.prototype.getFormattedValue = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { skeleton: 'medium', type: 'time' });\n }\n };\n TimePicker.prototype.getDateObject = function (text) {\n if (!this.isNullOrEmpty(text)) {\n var dateValue = this.createDateObj(text);\n var value = !this.isNullOrEmpty(this.initValue);\n if (this.checkDateValue(dateValue)) {\n var date = value ? this.initValue.getDate() : DAY;\n var month = value ? this.initValue.getMonth() : MONTH;\n var year = value ? this.initValue.getFullYear() : YEAR;\n return new Date(year, month, date, dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds());\n }\n }\n return null;\n };\n TimePicker.prototype.updateHtmlAttributeToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttributes.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassesValue = (this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ')).trim();\n if (updatedClassesValue !== '') {\n addClass([this.inputWrapper.container], updatedClassesValue.split(' '));\n }\n }\n else if (key === 'style') {\n var timeStyle = this.inputWrapper.container.getAttribute(key);\n timeStyle = !isNullOrUndefined(timeStyle) ? (timeStyle + this.htmlAttributes[\"\" + key]) :\n this.htmlAttributes[\"\" + key];\n this.inputWrapper.container.setAttribute(key, timeStyle);\n }\n else {\n this.inputWrapper.container.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n };\n TimePicker.prototype.updateHtmlAttributeToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttributes.indexOf(key) < 0) {\n this.inputElement.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n TimePicker.prototype.updateCssClass = function (cssClassNew, cssClassOld) {\n if (!isNullOrUndefined(cssClassOld)) {\n cssClassOld = (cssClassOld.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(cssClassNew)) {\n cssClassNew = (cssClassNew.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(cssClassNew, [this.inputWrapper.container], cssClassOld);\n if (this.popupWrapper) {\n Input.setCssClass(cssClassNew, [this.popupWrapper], cssClassOld);\n }\n };\n TimePicker.prototype.removeErrorClass = function () {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n };\n TimePicker.prototype.checkErrorState = function (val) {\n var value = this.getDateObject(val);\n if ((this.validateState(value) && !this.invalidValueString) ||\n (this.enableMask && this.inputElement.value === this.maskedDateValue)) {\n this.removeErrorClass();\n }\n else {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n };\n TimePicker.prototype.validateInterval = function () {\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.enableElement([this.inputWrapper.buttons[0]]);\n }\n else {\n this.disableTimeIcon();\n }\n };\n TimePicker.prototype.disableTimeIcon = function () {\n this.disableElement([this.inputWrapper.buttons[0]]);\n this.hide();\n };\n TimePicker.prototype.disableElement = function (element) {\n addClass(element, DISABLED);\n };\n TimePicker.prototype.enableElement = function (element) {\n removeClass(element, DISABLED);\n };\n TimePicker.prototype.selectInputText = function () {\n this.inputElement.setSelectionRange(0, (this.inputElement).value.length);\n };\n TimePicker.prototype.setCursorToEnd = function () {\n this.inputElement.setSelectionRange((this.inputElement).value.length, (this.inputElement).value.length);\n };\n TimePicker.prototype.getMeridianText = function () {\n var meridian;\n if (this.locale === 'en' || this.locale === 'en-US') {\n meridian = getValue('dayPeriods.format.wide', getDefaultDateObject());\n }\n else {\n var gregorianFormat = '.dates.calendars.gregorian.dayPeriods.format.abbreviated';\n var mainVal = 'main.';\n meridian = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n }\n return meridian;\n };\n TimePicker.prototype.getCursorSelection = function () {\n var input = (this.inputElement);\n var start = 0;\n var end = 0;\n if (!isNaN(input.selectionStart)) {\n start = input.selectionStart;\n end = input.selectionEnd;\n }\n return { start: Math.abs(start), end: Math.abs(end) };\n };\n TimePicker.prototype.getActiveElement = function () {\n if (!isNullOrUndefined(this.popupWrapper)) {\n return this.popupWrapper.querySelectorAll('.' + SELECTED);\n }\n else {\n return null;\n }\n };\n TimePicker.prototype.isNullOrEmpty = function (value) {\n if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n return true;\n }\n else {\n return false;\n }\n };\n TimePicker.prototype.setWidth = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n width = (width.match(/px|%|em/)) ? width : formatUnit(width);\n }\n else {\n width = '100%';\n }\n return width;\n };\n TimePicker.prototype.setPopupWidth = function (width) {\n width = this.setWidth(width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n TimePicker.prototype.setScrollPosition = function () {\n var element = this.selectedElement;\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else if (this.popupWrapper && this.checkDateValue(this.scrollTo)) {\n this.setScrollTo();\n }\n };\n TimePicker.prototype.findScrollTop = function (element) {\n var listHeight = this.getPopupHeight();\n var nextEle = element.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : element.offsetTop;\n var liHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n this.popupWrapper.scrollTop = nextEle ? (height - (listHeight / HALFPOSITION + liHeight / HALFPOSITION)) : height;\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.setScrollTo = function () {\n var element;\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n var initialTime = this.timeCollections[0];\n var scrollTime = this.getDateObject(this.checkDateValue(this.scrollTo)).getTime();\n element = items[Math.round((scrollTime - initialTime) / (this.step * 60000))];\n }\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.getText = function () {\n return (isNullOrUndefined(this.checkDateValue(this.value))) ? '' : this.getValue(this.value);\n };\n TimePicker.prototype.getValue = function (value) {\n return (isNullOrUndefined(this.checkDateValue(value))) ? null : this.globalize.formatDate(value, {\n format: this.cldrTimeFormat(), type: 'time'\n });\n };\n TimePicker.prototype.cldrDateFormat = function () {\n var cldrDate;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDate = (getValue('dateFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDate = (this.getCultureDateObject(cldrData, '' + this.locale));\n }\n return cldrDate;\n };\n TimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.formatString)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.formatString;\n }\n return cldrTime;\n };\n TimePicker.prototype.dateToNumeric = function () {\n var cldrTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.medium', getDefaultDateObject()));\n }\n else {\n cldrTime = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.medium', cldrData));\n }\n return cldrTime;\n };\n TimePicker.prototype.getExactDateTime = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { format: this.dateToNumeric(), type: 'time' });\n }\n };\n TimePicker.prototype.setValue = function (value) {\n var time = this.checkValue(value);\n if (!this.strictMode && !this.validateState(time)) {\n if (this.checkDateValue(this.valueWithMinutes) === null) {\n this.initValue = this.valueWithMinutes = null;\n }\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n if (this.isNullOrEmpty(time)) {\n this.initValue = null;\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.initValue = this.compareFormatChange(time);\n }\n }\n this.updateInput(true, this.initValue);\n };\n TimePicker.prototype.compareFormatChange = function (value) {\n if (isNullOrUndefined(value)) {\n return null;\n }\n return (value !== this.getText()) ? this.getDateObject(value) : this.getDateObject(this.value);\n };\n TimePicker.prototype.updatePlaceHolder = function () {\n Input.setPlaceholder(this.l10n.getConstant('placeholder'), this.inputElement);\n };\n //event related functions\n TimePicker.prototype.updateInputValue = function (value) {\n Input.setValue(value, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n TimePicker.prototype.preventEventBubbling = function (e) {\n e.preventDefault();\n this.interopAdaptor.invokeMethodAsync('OnTimeIconClick');\n };\n TimePicker.prototype.popupHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if (Browser.isDevice) {\n this.inputElement.setAttribute('readonly', '');\n }\n e.preventDefault();\n if (this.isPopupOpen()) {\n this.closePopup(0, e);\n }\n else {\n this.inputElement.focus();\n this.show(e);\n }\n };\n TimePicker.prototype.mouseDownHandler = function () {\n if (!this.enabled) {\n return;\n }\n if (!this.readonly) {\n this.inputElement.setSelectionRange(0, 0);\n EventHandler.add(this.inputElement, 'mouseup', this.mouseUpHandler, this);\n }\n };\n TimePicker.prototype.mouseUpHandler = function (event) {\n if (!this.readonly) {\n event.preventDefault();\n if (this.enableMask) {\n event.preventDefault();\n this.notify('setMaskSelection', {\n module: 'MaskedDateTime'\n });\n return;\n }\n else {\n EventHandler.remove(this.inputElement, 'mouseup', this.mouseUpHandler);\n var curPos = this.getCursorSelection();\n if (!(curPos.start === 0 && curPos.end === this.inputElement.value.length)) {\n if (this.inputElement.value.length > 0) {\n this.cursorDetails = this.focusSelection();\n }\n this.inputElement.setSelectionRange(this.cursorDetails.start, this.cursorDetails.end);\n }\n }\n }\n };\n TimePicker.prototype.focusSelection = function () {\n var regex = new RegExp('^[a-zA-Z0-9]+$');\n var split = this.inputElement.value.split('');\n split.push(' ');\n var curPos = this.getCursorSelection();\n var start = 0;\n var end = 0;\n var isSeparator = false;\n if (!this.isTextSelected) {\n for (var i = 0; i < split.length; i++) {\n if (!regex.test(split[i])) {\n end = i;\n isSeparator = true;\n }\n if (isSeparator) {\n if (curPos.start >= start && curPos.end <= end) {\n // eslint-disable-next-line no-self-assign\n end = end;\n this.isTextSelected = true;\n break;\n }\n else {\n start = i + 1;\n isSeparator = false;\n }\n }\n }\n }\n else {\n start = curPos.start;\n end = curPos.end;\n this.isTextSelected = false;\n }\n return { start: start, end: end };\n };\n TimePicker.prototype.inputHandler = function (event) {\n if (!this.readonly && this.enabled) {\n if (!((event.action == 'right' || event.action == 'left' || event.action == 'tab') || ((event.action == 'home' || event.action == 'end' || event.action == 'up' || event.action == 'down') && !this.isPopupOpen() && !this.enableMask))) {\n event.preventDefault();\n }\n switch (event.action) {\n case 'home':\n case 'end':\n case 'up':\n case 'down':\n if (!this.isPopupOpen()) {\n this.popupCreation();\n this.popupObj.destroy();\n this.popupObj = this.popupWrapper = null;\n }\n if (this.enableMask && !this.readonly && !this.isPopupOpen()) {\n event.preventDefault();\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: event\n });\n }\n if (this.isPopupOpen()) {\n this.keyHandler(event);\n }\n break;\n case 'enter':\n if (this.isNavigate) {\n this.selectedElement = this.liCollections[this.activeIndex];\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n this.updateValue(this.valueWithMinutes, event);\n }\n else {\n this.updateValue(this.inputElement.value, event);\n }\n this.hide();\n this.isNavigate = false;\n if (this.isPopupOpen()) {\n event.stopPropagation();\n }\n break;\n case 'open':\n this.show(event);\n break;\n case 'escape':\n this.updateInputValue(this.objToString(this.value));\n if (this.enableMask) {\n if (!this.value) {\n this.updateInputValue(this.maskedDateValue);\n }\n this.createMask();\n }\n this.previousState(this.value);\n this.hide();\n break;\n case 'close':\n this.hide();\n break;\n case 'right':\n case 'left':\n case 'tab':\n case 'shiftTab':\n if (!this.isPopupOpen() && this.enableMask && !this.readonly) {\n if ((this.inputElement.selectionStart === 0 && this.inputElement.selectionEnd === this.inputElement.value.length) ||\n (this.inputElement.selectionEnd !== this.inputElement.value.length && event.action === 'tab') ||\n (this.inputElement.selectionStart !== 0 && event.action === 'shiftTab') || (event.action === 'left' || event.action === 'right')) {\n event.preventDefault();\n }\n this.notify('keyDownHandler', { module: 'MaskedDateTime',\n e: event\n });\n }\n break;\n default:\n this.isNavigate = false;\n break;\n }\n }\n };\n TimePicker.prototype.onMouseClick = function (event) {\n var target = event.target;\n var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n this.setSelection(li, event);\n if (li && li.classList.contains(LISTCLASS)) {\n this.hide();\n }\n };\n TimePicker.prototype.closePopup = function (delay, e) {\n var _this = this;\n if (this.isPopupOpen() && this.popupWrapper) {\n var args = {\n popup: this.popupObj,\n event: e || null,\n cancel: false,\n name: 'open'\n };\n removeClass([document.body], OVERFLOW);\n this.trigger('close', args, function (args) {\n if (!args.cancel) {\n var animModel = {\n name: 'FadeOut',\n duration: ANIMATIONDURATION,\n delay: delay ? delay : 0\n };\n _this.popupObj.hide(new Animation(animModel));\n removeClass([_this.inputWrapper.container], [ICONANIMATION]);\n attributes(_this.inputElement, { 'aria-expanded': 'false' });\n _this.inputElement.removeAttribute('aria-owns');\n _this.inputElement.removeAttribute('aria-controls');\n _this.inputElement.removeAttribute('aria-activedescendant');\n EventHandler.remove(document, 'mousedown touchstart', _this.documentClickHandler);\n }\n if (Browser.isDevice && _this.modal) {\n _this.modal.style.display = 'none';\n _this.modal.outerHTML = '';\n _this.modal = null;\n }\n if (Browser.isDevice) {\n if (!isNullOrUndefined(_this.mobileTimePopupWrap)) {\n _this.mobileTimePopupWrap.remove();\n _this.mobileTimePopupWrap = null;\n }\n }\n if (Browser.isDevice && _this.allowEdit && !_this.readonly) {\n _this.inputElement.removeAttribute('readonly');\n }\n });\n }\n else {\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n };\n TimePicker.prototype.disposeServerPopup = function () {\n if (this.popupWrapper) {\n this.popupWrapper.style.visibility = 'hidden';\n this.popupWrapper.style.top = '-9999px';\n this.popupWrapper.style.left = '-9999px';\n this.popupWrapper.style.width = '0px';\n this.popupWrapper.style.height = '0px';\n }\n };\n TimePicker.prototype.checkValueChange = function (event, isNavigation) {\n if (!this.strictMode && !this.validateState(this.valueWithMinutes)) {\n if (this.checkDateValue(this.valueWithMinutes) === null) {\n this.initValue = this.valueWithMinutes = null;\n }\n this.setProperties({ value: this.compareFormatChange(this.inputElement.value) }, true);\n this.initValue = this.valueWithMinutes = this.compareFormatChange(this.inputElement.value);\n this.prevValue = this.inputElement.value;\n if (+this.prevDate !== +this.value) {\n this.changeEvent(event);\n }\n }\n else {\n if (!isNavigation) {\n if ((this.prevValue !== this.inputElement.value) || isNullOrUndefined(this.checkDateValue(this.value))) {\n this.valueProcess(event, this.compareFormatChange(this.inputElement.value));\n }\n }\n else {\n var value = this.getDateObject(new Date(this.timeCollections[this.activeIndex]));\n if (+this.prevDate !== +value) {\n this.valueProcess(event, value);\n }\n }\n }\n };\n TimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setHover(currentLi, HOVER);\n };\n TimePicker.prototype.setHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeHover(className);\n addClass([li], className);\n if (className === NAVIGATION) {\n li.setAttribute('aria-selected', 'true');\n }\n }\n };\n TimePicker.prototype.setSelection = function (li, event) {\n if (this.isValidLI(li)) {\n this.checkValue(li.getAttribute('data-value'));\n if (this.enableMask) {\n this.createMask();\n }\n this.selectedElement = li;\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n addClass([this.selectedElement], SELECTED);\n this.selectedElement.setAttribute('aria-selected', 'true');\n this.checkValueChange(event, true);\n }\n };\n TimePicker.prototype.onMouseLeave = function () {\n this.removeHover(HOVER);\n };\n TimePicker.prototype.scrollHandler = function () {\n if (this.getModuleName() === 'timepicker' && Browser.isDevice) {\n return;\n }\n else {\n this.hide();\n }\n };\n TimePicker.prototype.setMinMax = function (minVal, maxVal) {\n if (isNullOrUndefined(this.checkDateValue(minVal))) {\n this.initMin = this.getDateObject('12:00:00 AM');\n }\n if (isNullOrUndefined(this.checkDateValue(maxVal))) {\n this.initMax = this.getDateObject('11:59:59 PM');\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n TimePicker.prototype.validateMinMax = function (dateVal, minVal, maxVal) {\n var value = dateVal instanceof Date ? dateVal : this.getDateObject(dateVal);\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n dateVal = this.strictOperation(this.initMin, this.initMax, dateVal, value);\n }\n else if (+(this.createDateObj(this.getFormattedValue(this.initMin))) >\n +(this.createDateObj(this.getFormattedValue(this.initMax)))) {\n this.disableTimeIcon();\n }\n if (this.strictMode) {\n dateVal = this.valueIsDisable(dateVal) ? dateVal : null;\n }\n this.checkErrorState(dateVal);\n return dateVal;\n };\n TimePicker.prototype.valueIsDisable = function (value) {\n if (this.disableItemCollection.length > 0) {\n if (this.disableItemCollection.length === this.timeCollections.length) {\n return false;\n }\n var time = value instanceof Date ? this.objToString(value) : value;\n for (var index = 0; index < this.disableItemCollection.length; index++) {\n if (time === this.disableItemCollection[index]) {\n return false;\n }\n }\n }\n return true;\n };\n TimePicker.prototype.validateState = function (val) {\n if (!this.strictMode) {\n if (this.valueIsDisable(val)) {\n var value = typeof val === 'string' ? this.setCurrentDate(this.getDateObject(val)) :\n this.setCurrentDate(this.getDateObject(val));\n var maxValue = this.setCurrentDate(this.getDateObject(this.initMax));\n var minValue = this.setCurrentDate(this.getDateObject(this.initMin));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n if ((+(value) > +(maxValue)) || (+(value) < +(minValue))) {\n return false;\n }\n }\n else {\n if ((+(maxValue) < +(minValue)) || this.inputElement.value !== '') {\n return false;\n }\n }\n }\n else {\n return false;\n }\n }\n return true;\n };\n TimePicker.prototype.strictOperation = function (minimum, maximum, dateVal, val) {\n var maxValue = this.createDateObj(this.getFormattedValue(maximum));\n var minValue = this.createDateObj(this.getFormattedValue(minimum));\n var value = this.createDateObj(this.getFormattedValue(val));\n if (this.strictMode) {\n if (+minValue > +maxValue) {\n this.disableTimeIcon();\n this.initValue = this.getDateObject(maxValue);\n this.updateInputValue(this.getValue(this.initValue));\n if (this.enableMask) {\n this.createMask();\n }\n return this.inputElement.value;\n }\n else if (+minValue >= +value) {\n return this.getDateObject(minValue);\n }\n else if (+value >= +maxValue || +minValue === +maxValue) {\n return this.getDateObject(maxValue);\n }\n }\n else {\n if (+minValue > +maxValue) {\n this.disableTimeIcon();\n if (!isNaN(+this.createDateObj(dateVal))) {\n return dateVal;\n }\n }\n }\n return dateVal;\n };\n TimePicker.prototype.bindEvents = function () {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.popupHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n EventHandler.add(this.inputElement, 'input', this.inputEventHandler, this);\n if (this.enableMask) {\n EventHandler.add(this.inputElement, 'keydown', this.keydownHandler, this);\n }\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.clearHandler, this);\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n if (!Browser.isDevice) {\n this.keyConfigure = extend(this.keyConfigure, this.keyConfigs);\n this.inputEvent = new KeyboardEvents(this.inputWrapper.container, {\n keyAction: this.inputHandler.bind(this),\n keyConfigs: this.keyConfigure,\n eventName: 'keydown'\n });\n if (this.showClearButton && this.inputElement) {\n EventHandler.add(this.inputElement, 'mousedown', this.mouseDownHandler, this);\n }\n }\n };\n TimePicker.prototype.keydownHandler = function (e) {\n switch (e.code) {\n case 'Delete':\n if (this.enableMask && !this.popupObj && !this.readonly) {\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: e\n });\n }\n break;\n default:\n break;\n }\n };\n TimePicker.prototype.formResetHandler = function () {\n if (!this.enabled) {\n return;\n }\n if (!this.inputElement.disabled) {\n var timeValue = this.inputElement.getAttribute('value');\n var val = this.checkDateValue(this.inputEleValue);\n if (this.element.tagName === 'EJS-TIMEPICKER') {\n val = null;\n timeValue = '';\n this.inputElement.setAttribute('value', '');\n }\n this.setProperties({ value: val }, true);\n this.prevDate = this.value;\n this.valueWithMinutes = this.value;\n this.initValue = this.value;\n if (this.inputElement) {\n this.updateInputValue(timeValue);\n if (this.enableMask) {\n if (!timeValue) {\n this.updateInputValue(this.maskedDateValue);\n }\n this.createMask();\n }\n this.checkErrorState(timeValue);\n this.prevValue = this.inputElement.value;\n }\n }\n };\n TimePicker.prototype.inputChangeHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.stopPropagation();\n };\n TimePicker.prototype.inputEventHandler = function () {\n if (this.enableMask) {\n this.notify('inputHandler', {\n module: 'MaskedDateTime'\n });\n }\n };\n TimePicker.prototype.unBindEvents = function () {\n if (this.inputWrapper) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.popupHandler);\n }\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n EventHandler.remove(this.inputElement, 'input', this.inputEventHandler);\n if (this.inputEvent) {\n this.inputEvent.destroy();\n }\n EventHandler.remove(this.inputElement, 'mousedown touchstart', this.mouseDownHandler);\n if (this.showClearButton && !isNullOrUndefined(this.inputWrapper) && !isNullOrUndefined(this.inputWrapper.clearButton)) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.clearHandler);\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n };\n TimePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.clearHandler, this);\n }\n };\n TimePicker.prototype.raiseClearedEvent = function (e) {\n var clearedArgs = {\n event: e\n };\n this.trigger('cleared', clearedArgs);\n };\n TimePicker.prototype.clearHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.preventDefault();\n if (!isNullOrUndefined(this.value)) {\n this.clear(e);\n }\n else {\n this.resetState();\n this.raiseClearedEvent(e);\n }\n if (this.popupWrapper) {\n this.popupWrapper.scrollTop = 0;\n }\n if (this.enableMask) {\n this.notify('clearHandler', {\n module: 'MaskedDateTime'\n });\n }\n if (closest(this.element, 'form')) {\n var element = this.element;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n TimePicker.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.initValue = null;\n this.resetState();\n this.raiseClearedEvent(event);\n this.changeEvent(event);\n };\n TimePicker.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.zIndex = this.zIndex;\n this.popupObj.dataBind();\n }\n };\n TimePicker.prototype.checkAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['step', 'disabled', 'readonly', 'style', 'name', 'value', 'min', 'max', 'placeholder'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'style':\n this.inputStyle = this.inputElement.getAttribute(prop);\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !isDynamic);\n }\n break;\n case 'min':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['min'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.setProperties({ min: value }, !isDynamic);\n }\n }\n break;\n case 'max':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['max'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.setProperties({ max: value }, !isDynamic);\n }\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['value'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.initValue = value;\n this.updateInput(false, this.initValue);\n this.setProperties({ value: value }, !isDynamic);\n }\n }\n break;\n }\n }\n }\n };\n TimePicker.prototype.setCurrentDate = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n return new Date(YEAR, MONTH, DAY, value.getHours(), value.getMinutes(), value.getSeconds());\n };\n TimePicker.prototype.getTextFormat = function () {\n var time = 0;\n if (this.cldrTimeFormat().split(' ')[0] === 'a' || this.cldrTimeFormat().indexOf('a') === 0) {\n time = 1;\n }\n else if (this.cldrTimeFormat().indexOf('a') < 0) {\n var strArray = this.cldrTimeFormat().split(' ');\n for (var i = 0; i < strArray.length; i++) {\n if (strArray[i].toLowerCase().indexOf('h') >= 0) {\n time = i;\n break;\n }\n }\n }\n return time;\n };\n TimePicker.prototype.updateValue = function (value, event) {\n var val;\n if (this.isNullOrEmpty(value)) {\n this.resetState();\n }\n else {\n val = this.checkValue(value);\n if (this.strictMode) {\n // this case set previous value to the text box when set invalid date\n var inputVal = (val === null && value.trim().length > 0) ?\n this.previousState(this.prevDate) : this.inputElement.value;\n this.updateInputValue(inputVal);\n if (this.enableMask) {\n if (!inputVal) {\n this.updateInputValue(this.maskedDateValue);\n }\n if (isNullOrUndefined(val) && value !== this.maskedDateValue) {\n this.createMask();\n }\n if (isNullOrUndefined(val) && value === this.maskedDateValue) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n }\n }\n this.checkValueChange(event, typeof value === 'string' ? false : true);\n };\n TimePicker.prototype.previousState = function (date) {\n var value = this.getDateObject(date);\n for (var i = 0; i < this.timeCollections.length; i++) {\n if (+value === this.timeCollections[i]) {\n this.activeIndex = i;\n this.selectedElement = this.liCollections[i];\n this.valueWithMinutes = new Date(this.timeCollections[i]);\n break;\n }\n }\n return this.prevValue;\n };\n TimePicker.prototype.resetState = function () {\n this.removeSelection();\n Input.setValue('', this.inputElement, this.floatLabelType, false);\n this.valueWithMinutes = this.activeIndex = null;\n if (!this.strictMode) {\n this.checkErrorState(null);\n }\n };\n TimePicker.prototype.objToString = function (val) {\n if (isNullOrUndefined(this.checkDateValue(val))) {\n return null;\n }\n else {\n return this.globalize.formatDate(val, { format: this.cldrTimeFormat(), type: 'time' });\n }\n };\n TimePicker.prototype.checkValue = function (value) {\n if (!this.isNullOrEmpty(value)) {\n var date = value instanceof Date ? value : this.getDateObject(value);\n return this.validateValue(date, value);\n }\n this.resetState();\n return this.valueWithMinutes = null;\n };\n TimePicker.prototype.validateValue = function (date, value) {\n var time;\n var val = this.validateMinMax(value, this.min, this.max);\n var newval = this.getDateObject(val);\n if (this.getFormattedValue(newval) !== this.getFormattedValue(this.value)) {\n this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n time = this.objToString(this.valueWithMinutes);\n }\n else {\n if (this.strictMode) {\n //for strict mode case, when value not present within a range. Reset the nearest range value.\n date = newval;\n }\n this.valueWithMinutes = this.checkDateValue(date);\n time = this.objToString(this.valueWithMinutes);\n }\n if (!this.strictMode && isNullOrUndefined(time)) {\n var value_1 = val.trim().length > 0 ? val : '';\n this.updateInputValue(value_1);\n if (this.enableMask) {\n if (!value_1) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n }\n else {\n this.updateInputValue(time);\n if (this.enableMask) {\n if (time === '') {\n this.updateInputValue(this.maskedDateValue);\n }\n if (isNullOrUndefined(time) && value !== this.maskedDateValue) {\n this.createMask();\n }\n if (isNullOrUndefined(time) && value === this.maskedDateValue) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n }\n return time;\n };\n TimePicker.prototype.createMask = function () {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n };\n TimePicker.prototype.findNextElement = function (event) {\n var textVal = (this.inputElement).value;\n var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n this.getDateObject(this.valueWithMinutes);\n var timeVal = null;\n var count = this.liCollections.length;\n var collections = this.timeCollections;\n if (!isNullOrUndefined(this.checkDateValue(value)) || !isNullOrUndefined(this.activeIndex)) {\n if (event.action === 'home') {\n var index = this.validLiElement(0);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n }\n else if (event.action === 'end') {\n var index = this.validLiElement(collections.length - 1, true);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n }\n else {\n if (event.action === 'down') {\n for (var i = 0; i < count; i++) {\n if (+value < this.timeCollections[i]) {\n var index = this.validLiElement(i);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n else if (i === count - 1) {\n var index = this.validLiElement(0);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n }\n }\n else {\n for (var i = count - 1; i >= 0; i--) {\n if (+value > this.timeCollections[i]) {\n var index = this.validLiElement(i, true);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n else if (i === 0) {\n var index = this.validLiElement(count - 1);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n }\n }\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.elementValue(isNullOrUndefined(timeVal) ? null : new Date(timeVal));\n }\n else {\n this.selectNextItem(event);\n }\n };\n TimePicker.prototype.selectNextItem = function (event) {\n var index = this.validLiElement(0, event.action === 'down' ? false : true);\n this.activeIndex = index;\n this.selectedElement = this.liCollections[index];\n this.elementValue(new Date(this.timeCollections[index]));\n };\n TimePicker.prototype.elementValue = function (value) {\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.checkValue(value);\n }\n };\n TimePicker.prototype.validLiElement = function (index, backward) {\n var elementIndex = null;\n var items = isNullOrUndefined(this.popupWrapper) ? this.liCollections :\n this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n var isCheck = true;\n if (items.length) {\n if (backward) {\n for (var i = index; i >= 0; i--) {\n if (!items[i].classList.contains(DISABLED)) {\n elementIndex = i;\n break;\n }\n else if (i === 0) {\n if (isCheck) {\n index = i = items.length;\n isCheck = false;\n }\n }\n }\n }\n else {\n for (var i = index; i <= items.length - 1; i++) {\n if (!items[i].classList.contains(DISABLED)) {\n elementIndex = i;\n break;\n }\n else if (i === items.length - 1) {\n if (isCheck) {\n index = i = -1;\n isCheck = false;\n }\n }\n }\n }\n }\n return elementIndex;\n };\n TimePicker.prototype.keyHandler = function (event) {\n if (isNullOrUndefined(this.step) || this.step <= 0 || !isNullOrUndefined(this.inputWrapper)\n && this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n return;\n }\n var count = this.timeCollections.length;\n if (isNullOrUndefined(this.getActiveElement()) || this.getActiveElement().length === 0) {\n if (this.liCollections.length > 0) {\n if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n var index = this.validLiElement(0, event.action === 'down' ? false : true);\n this.activeIndex = index;\n this.selectedElement = this.liCollections[index];\n this.elementValue(new Date(this.timeCollections[index]));\n }\n else {\n this.findNextElement(event);\n }\n }\n else {\n this.findNextElement(event);\n }\n }\n else {\n var nextItem = void 0;\n if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n this.activeIndex = index = this.activeIndex === (count) ? 0 : this.activeIndex;\n this.activeIndex = index = this.activeIndex < 0 ? (count - 1) : this.activeIndex;\n this.activeIndex = index = this.validLiElement(this.activeIndex, (event.keyCode === 40 || event.keyCode === 39) ?\n false : true);\n nextItem = isNullOrUndefined(this.timeCollections[index]) ?\n this.timeCollections[0] : this.timeCollections[index];\n }\n else if (event.action === 'home') {\n var index = this.validLiElement(0);\n this.activeIndex = index;\n nextItem = this.timeCollections[index];\n }\n else if (event.action === 'end') {\n var index = this.validLiElement(count - 1, true);\n this.activeIndex = index;\n nextItem = this.timeCollections[index];\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.elementValue(new Date(nextItem));\n }\n this.isNavigate = true;\n this.setHover(this.selectedElement, NAVIGATION);\n this.setActiveDescendant();\n if (this.enableMask) {\n this.selectInputText();\n }\n if (this.isPopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n this.setScrollPosition();\n }\n };\n TimePicker.prototype.getCultureTimeObject = function (ld, c) {\n return getValue('main.' + c + '.dates.calendars.gregorian.timeFormats.short', ld);\n };\n TimePicker.prototype.getCultureDateObject = function (ld, c) {\n return getValue('main.' + c + '.dates.calendars.gregorian.dateFormats.short', ld);\n };\n TimePicker.prototype.wireListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n TimePicker.prototype.unWireListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n if (!Browser.isDevice) {\n EventHandler.remove(this.listWrapper, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.listWrapper, 'mouseout', this.onMouseLeave);\n }\n }\n };\n TimePicker.prototype.valueProcess = function (event, value) {\n var result = (isNullOrUndefined(this.checkDateValue(value))) ? null : value;\n if (+this.prevDate !== +result) {\n this.initValue = result;\n this.changeEvent(event);\n }\n };\n TimePicker.prototype.changeEvent = function (e) {\n this.addSelection();\n this.updateInput(true, this.initValue);\n var eventArgs = {\n event: (e || null),\n value: this.value,\n text: (this.inputElement).value,\n isInteracted: !isNullOrUndefined(e),\n element: this.element\n };\n eventArgs.value = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n this.prevDate = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', eventArgs);\n }\n this.invalidValueString = null;\n this.checkErrorState(this.value);\n };\n TimePicker.prototype.updateInput = function (isUpdate, date) {\n if (isUpdate) {\n this.prevValue = this.getValue(date);\n }\n this.prevDate = this.valueWithMinutes = date;\n if ((typeof date !== 'number') || (this.value && +new Date(+this.value).setMilliseconds(0)) !== +date) {\n this.setProperties({ value: date }, true);\n if (this.enableMask && this.value) {\n this.createMask();\n }\n }\n if (!this.strictMode && isNullOrUndefined(this.value) && this.invalidValueString) {\n this.checkErrorState(this.invalidValueString);\n this.updateInputValue(this.invalidValueString);\n }\n this.clearIconState();\n };\n TimePicker.prototype.setActiveDescendant = function () {\n if (!isNullOrUndefined(this.selectedElement) && this.value) {\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n }\n else {\n this.inputElement.removeAttribute('aria-activedescendant');\n }\n };\n TimePicker.prototype.removeSelection = function () {\n this.removeHover(HOVER);\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + SELECTED);\n if (items.length) {\n removeClass(items, SELECTED);\n items[0].removeAttribute('aria-selected');\n }\n }\n };\n TimePicker.prototype.removeHover = function (className) {\n var hoveredItem = this.getHoverItem(className);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, className);\n if (className === NAVIGATION) {\n hoveredItem[0].removeAttribute('aria-selected');\n }\n }\n };\n TimePicker.prototype.getHoverItem = function (className) {\n var hoveredItem;\n if (!isNullOrUndefined(this.popupWrapper)) {\n hoveredItem = this.popupWrapper.querySelectorAll('.' + className);\n }\n return hoveredItem;\n };\n TimePicker.prototype.setActiveClass = function () {\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n for (var i = 0; i < items.length; i++) {\n if ((this.timeCollections[i] === +this.getDateObject(this.valueWithMinutes))) {\n items[i].setAttribute('aria-selected', 'true');\n this.selectedElement = items[i];\n this.activeIndex = i;\n break;\n }\n }\n }\n }\n };\n TimePicker.prototype.addSelection = function () {\n this.selectedElement = null;\n this.removeSelection();\n this.setActiveClass();\n if (!isNullOrUndefined(this.selectedElement)) {\n addClass([this.selectedElement], SELECTED);\n this.selectedElement.setAttribute('aria-selected', 'true');\n }\n };\n TimePicker.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n };\n TimePicker.prototype.createDateObj = function (val) {\n var formatStr = null;\n var today = this.globalize.formatDate(new Date(), { format: formatStr, skeleton: 'short', type: 'date' });\n var value = null;\n if (typeof val === 'string') {\n if (val.toUpperCase().indexOf('AM') > -1 || val.toUpperCase().indexOf('PM') > -1) {\n today = this.defaultCulture.formatDate(new Date(), { format: formatStr, skeleton: 'short', type: 'date' });\n value = isNaN(+new Date(today + ' ' + val)) ? null : new Date(new Date(today + ' ' + val).setMilliseconds(0));\n if (isNullOrUndefined(value)) {\n value = this.timeParse(today, val);\n }\n }\n else {\n value = this.timeParse(today, val);\n }\n }\n else if (val instanceof Date) {\n value = val;\n }\n return value;\n };\n TimePicker.prototype.timeParse = function (today, val) {\n var value;\n value = this.globalize.parseDate(today + ' ' + val, {\n format: this.cldrDateFormat() + ' ' + this.cldrTimeFormat(), type: 'datetime'\n });\n value = isNullOrUndefined(value) ? this.globalize.parseDate(today + ' ' + val, {\n format: this.cldrDateFormat() + ' ' + this.dateToNumeric(), type: 'datetime'\n }) : value;\n value = isNullOrUndefined(value) ? value : new Date(value.setMilliseconds(0));\n return value;\n };\n TimePicker.prototype.createListItems = function () {\n var _this = this;\n this.listWrapper = this.createElement('div', { className: CONTENT, attrs: { 'tabindex': '-1' } });\n var start;\n var interval = this.step * 60000;\n var listItems = [];\n this.timeCollections = [];\n this.disableItemCollection = [];\n start = +(this.getDateObject(this.initMin).setMilliseconds(0));\n var end = +(this.getDateObject(this.initMax).setMilliseconds(0));\n while (end >= start) {\n this.timeCollections.push(start);\n listItems.push(this.globalize.formatDate(new Date(start), { format: this.cldrTimeFormat(), type: 'time' }));\n start += interval;\n }\n var listBaseOptions = {\n itemCreated: function (args) {\n var eventArgs = {\n element: args.item,\n text: args.text, value: _this.getDateObject(args.text), isDisabled: false\n };\n _this.trigger('itemRender', eventArgs, function (eventArgs) {\n if (eventArgs.isDisabled) {\n eventArgs.element.classList.add(DISABLED);\n }\n if (eventArgs.element.classList.contains(DISABLED)) {\n _this.disableItemCollection.push(eventArgs.element.getAttribute('data-value'));\n }\n });\n }\n };\n this.listTag = ListBase.createList(this.createElement, listItems, listBaseOptions, true);\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options', 'tabindex': '0' });\n append([this.listTag], this.listWrapper);\n };\n TimePicker.prototype.documentClickHandler = function (event) {\n var target = event.target;\n if ((!isNullOrUndefined(this.popupObj) && !isNullOrUndefined(this.inputWrapper) && (this.inputWrapper.container.contains(target) && event.type !== 'mousedown' ||\n (this.popupObj.element && this.popupObj.element.contains(target)))) && event.type !== 'touchstart') {\n event.preventDefault();\n }\n if (!(closest(target, '[id=\"' + this.popupObj.element.id + '\"]')) && target !== this.inputElement\n && target !== (this.inputWrapper && this.inputWrapper.buttons[0]) &&\n target !== (this.inputWrapper && this.inputWrapper.clearButton) &&\n target !== (this.inputWrapper && this.inputWrapper.container)\n && (!target.classList.contains('e-dlg-overlay'))) {\n if (this.isPopupOpen()) {\n this.hide();\n this.focusOut();\n }\n }\n else if (target !== this.inputElement) {\n if (!Browser.isDevice) {\n this.isPreventBlur = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.inputElement)\n && (target === this.popupWrapper);\n }\n }\n };\n TimePicker.prototype.setEnableRtl = function () {\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n if (this.popupObj) {\n this.popupObj.enableRtl = this.enableRtl;\n this.popupObj.dataBind();\n }\n };\n TimePicker.prototype.setEnable = function () {\n Input.setEnabled(this.enabled, this.inputElement, this.floatLabelType);\n if (this.enabled) {\n removeClass([this.inputWrapper.container], DISABLED);\n attributes(this.inputElement, { 'aria-disabled': 'false' });\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.hide();\n addClass([this.inputWrapper.container], DISABLED);\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n this.inputElement.tabIndex = -1;\n }\n };\n TimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.initMin = this.checkDateValue(new Date(this.checkInValue(date.min)));\n this.setProperties({ min: this.initMin }, true);\n }\n else {\n this.initMax = this.checkDateValue(new Date(this.checkInValue(date.max)));\n this.setProperties({ max: this.initMax }, true);\n }\n if (this.inputElement.value === '') {\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.checkValue(this.inputElement.value);\n }\n this.checkValueChange(null, false);\n };\n TimePicker.prototype.inputBlurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n // IE popup closing issue when click over the scrollbar\n if (this.isPreventBlur && this.isPopupOpen()) {\n this.inputElement.focus();\n return;\n }\n this.closePopup(0, e);\n if (this.enableMask && this.maskedDateValue && this.placeholder && this.floatLabelType !== 'Always') {\n if (this.inputElement.value === this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue('');\n }\n }\n removeClass([this.inputWrapper.container], [FOCUS]);\n if (this.getText() !== this.inputElement.value) {\n this.updateValue((this.inputElement).value, e);\n }\n else if (this.inputElement.value.trim().length === 0) {\n this.resetState();\n }\n this.cursorDetails = null;\n this.isNavigate = false;\n if (this.inputElement.value === '') {\n this.invalidValueString = null;\n }\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n };\n /**\n * Focuses out the TimePicker textbox element.\n *\n * @returns {void}\n */\n TimePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], [FOCUS]);\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n };\n TimePicker.prototype.isPopupOpen = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + ROOT)) {\n return true;\n }\n return false;\n };\n TimePicker.prototype.inputFocusHandler = function () {\n if (!this.enabled) {\n return;\n }\n var focusArguments = {\n model: this\n };\n if (!this.readonly && !Browser.isDevice && !this.enableMask) {\n this.selectInputText();\n }\n if (this.enableMask && !this.inputElement.value && this.placeholder) {\n if (this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue(this.maskedDateValue);\n this.inputElement.selectionStart = 0;\n this.inputElement.selectionEnd = this.inputElement.value.length;\n }\n }\n this.trigger('focus', focusArguments);\n this.clearIconState();\n if (this.openOnFocus) {\n this.show();\n }\n };\n /**\n * Focused the TimePicker textbox element.\n *\n * @returns {void}\n */\n TimePicker.prototype.focusIn = function () {\n if (document.activeElement !== this.inputElement && this.enabled) {\n this.inputElement.focus();\n }\n };\n /**\n * Hides the TimePicker popup.\n *\n * @returns {void}\n\n */\n TimePicker.prototype.hide = function () {\n this.closePopup(100, null);\n this.clearIconState();\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Opens the popup to show the list items.\n *\n * @returns {void}\n\n */\n TimePicker.prototype.show = function (event) {\n var _this = this;\n if ((this.enabled && this.readonly) || !this.enabled || this.popupWrapper) {\n return;\n }\n else {\n this.popupCreation();\n if (Browser.isDevice && this.listWrapper) {\n this.modal = this.createElement('div');\n this.modal.className = '' + ROOT + ' e-time-modal';\n document.body.className += ' ' + OVERFLOW;\n document.body.appendChild(this.modal);\n }\n if (Browser.isDevice) {\n this.mobileTimePopupWrap = this.createElement('div', { className: 'e-timepicker-mob-popup-wrap' });\n document.body.appendChild(this.mobileTimePopupWrap);\n }\n this.openPopupEventArgs = {\n popup: this.popupObj || null,\n cancel: false,\n event: event || null,\n name: 'open',\n appendTo: Browser.isDevice ? this.mobileTimePopupWrap : document.body\n };\n var eventArgs = this.openPopupEventArgs;\n this.trigger('open', eventArgs, function (eventArgs) {\n _this.openPopupEventArgs = eventArgs;\n if (!_this.openPopupEventArgs.cancel && !_this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n _this.openPopupEventArgs.appendTo.appendChild(_this.popupWrapper);\n _this.popupAlignment(_this.openPopupEventArgs);\n _this.setScrollPosition();\n if (!Browser.isDevice) {\n _this.inputElement.focus();\n }\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION\n };\n _this.popupObj.refreshPosition(_this.anchor);\n if (_this.zIndex === 1000) {\n _this.popupObj.show(new Animation(openAnimation), _this.element);\n }\n else {\n _this.popupObj.show(new Animation(openAnimation), null);\n }\n _this.setActiveDescendant();\n attributes(_this.inputElement, { 'aria-expanded': 'true' });\n attributes(_this.inputElement, { 'aria-owns': _this.inputElement.id + '_options' });\n attributes(_this.inputElement, { 'aria-controls': _this.inputElement.id });\n addClass([_this.inputWrapper.container], FOCUS);\n EventHandler.add(document, 'mousedown touchstart', _this.documentClickHandler, _this);\n _this.setOverlayIndex(_this.mobileTimePopupWrap, _this.popupObj.element, _this.modal, Browser.isDevice);\n }\n else {\n _this.popupObj.destroy();\n _this.popupWrapper = _this.listTag = undefined;\n _this.liCollections = _this.timeCollections = _this.disableItemCollection = [];\n _this.popupObj = null;\n }\n });\n if (Browser.isDevice) {\n var dlgOverlay = this.createElement('div', { className: 'e-dlg-overlay' });\n dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n this.mobileTimePopupWrap.appendChild(dlgOverlay);\n }\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n TimePicker.prototype.setOverlayIndex = function (popupWrapper, timePopupElement, modal, isDevice) {\n if (isDevice && !isNullOrUndefined(timePopupElement) && !isNullOrUndefined(modal) && !isNullOrUndefined(popupWrapper)) {\n var index = parseInt(timePopupElement.style.zIndex, 10) ? parseInt(timePopupElement.style.zIndex, 10) : 1000;\n modal.style.zIndex = (index - 1).toString();\n popupWrapper.style.zIndex = index.toString();\n }\n };\n TimePicker.prototype.formatValues = function (type) {\n var value;\n if (typeof type === 'number') {\n value = formatUnit(type);\n }\n else if (typeof type === 'string') {\n value = (type.match(/px|%|em/)) ? type : isNaN(parseInt(type, 10)) ? type : formatUnit(type);\n }\n return value;\n };\n TimePicker.prototype.popupAlignment = function (args) {\n args.popup.position.X = this.formatValues(args.popup.position.X);\n args.popup.position.Y = this.formatValues(args.popup.position.Y);\n if (!isNaN(parseFloat(args.popup.position.X)) || !isNaN(parseFloat(args.popup.position.Y))) {\n this.popupObj.relateTo = this.anchor = document.body;\n this.popupObj.targetType = 'container';\n }\n if (!isNaN(parseFloat(args.popup.position.X))) {\n this.popupObj.offsetX = parseFloat(args.popup.position.X);\n }\n if (!isNaN(parseFloat(args.popup.position.Y))) {\n this.popupObj.offsetY = parseFloat(args.popup.position.Y);\n }\n if (!Browser.isDevice) {\n switch (args.popup.position.X) {\n case 'left':\n break;\n case 'right':\n args.popup.offsetX = this.containerStyle.width;\n break;\n case 'center':\n args.popup.offsetX = -(this.containerStyle.width / 2);\n break;\n }\n switch (args.popup.position.Y) {\n case 'top':\n break;\n case 'bottom':\n break;\n case 'center':\n args.popup.offsetY = -(this.containerStyle.height / 2);\n break;\n }\n if (args.popup.position.X === 'center' && args.popup.position.Y === 'center') {\n this.popupObj.relateTo = this.inputWrapper.container;\n this.anchor = this.inputElement;\n this.popupObj.targetType = 'relative';\n }\n }\n else {\n if (args.popup.position.X === 'center' && args.popup.position.Y === 'center') {\n this.popupObj.relateTo = this.anchor = document.body;\n this.popupObj.offsetY = 0;\n this.popupObj.targetType = 'container';\n this.popupObj.collision = { X: 'fit', Y: 'fit' };\n }\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string}\n */\n TimePicker.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * To get component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n TimePicker.prototype.getModuleName = function () {\n return 'timepicker';\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {TimePickerModel} newProp - Returns the dynamic property value of the component.\n * @param {TimePickerModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n TimePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement, this.floatLabelType);\n if (this.readonly) {\n this.hide();\n }\n this.setTimeAllowEdit();\n break;\n case 'enabled':\n this.setProperties({ enabled: newProp.enabled }, true);\n this.setEnable();\n break;\n case 'allowEdit':\n this.setTimeAllowEdit();\n break;\n case 'enableRtl':\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n this.setEnableRtl();\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n this.setZIndex();\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToElement();\n this.updateHtmlAttributeToWrapper();\n this.checkAttributes(true);\n break;\n case 'min':\n case 'max':\n this.getProperty(newProp, prop);\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'locale':\n this.setProperties({ locale: newProp.locale }, true);\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n if (this.timeOptions && this.timeOptions.placeholder == null) {\n this.updatePlaceHolder();\n }\n this.setValue(this.value);\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'width':\n setStyleAttribute(this.inputWrapper.container, { 'width': this.setWidth(newProp.width) });\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.checkTimeFormat();\n this.setValue(this.value);\n if (this.enableMask) {\n this.createMask();\n if (!this.value) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n break;\n case 'value':\n this.invalidValueString = null;\n this.checkInvalidValue(newProp.value);\n newProp.value = this.value;\n if (!this.invalidValueString) {\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date(newProp.value)) }, true);\n newProp.value = this.value;\n }\n else {\n if ((newProp.value && +new Date(+newProp.value).setMilliseconds(0)) !== +this.value) {\n newProp.value = this.checkDateValue(new Date('' + newProp.value));\n }\n }\n this.initValue = newProp.value;\n newProp.value = this.compareFormatChange(this.checkValue(newProp.value));\n }\n else {\n this.updateInputValue(this.invalidValueString);\n this.checkErrorState(this.invalidValueString);\n }\n if (this.enableMask && isNullOrUndefined(newProp.value)) {\n this.updateInputValue(this.maskedDateValue);\n this.checkErrorState(this.maskedDateValue);\n }\n this.checkValueChange(null, false);\n if (this.isPopupOpen()) {\n this.setScrollPosition();\n }\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'strictMode':\n this.invalidValueString = null;\n if (newProp.strictMode) {\n this.checkErrorState(null);\n }\n this.setProperties({ strictMode: newProp.strictMode }, true);\n this.checkValue((this.inputElement).value);\n this.checkValueChange(null, false);\n break;\n case 'scrollTo':\n if (this.checkDateValue(new Date(this.checkInValue(newProp.scrollTo)))) {\n if (this.popupWrapper) {\n this.setScrollTo();\n }\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkInValue(newProp.scrollTo))) }, true);\n }\n else {\n this.setProperties({ scrollTo: null }, true);\n }\n break;\n case 'enableMask':\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n this.updateInputValue(this.maskedDateValue);\n }\n else {\n if (this.inputElement.value === this.maskedDateValue) {\n this.updateInputValue('');\n }\n }\n break;\n }\n }\n };\n TimePicker.prototype.checkInValue = function (inValue) {\n if (inValue instanceof Date) {\n return (inValue.toUTCString());\n }\n else {\n return ('' + inValue);\n }\n };\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"fullScreenMode\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property({})\n ], TimePicker.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('Never')\n ], TimePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(1000)\n ], TimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(30)\n ], TimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"scrollTo\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"min\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"max\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"openOnFocus\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enableMask\", void 0);\n __decorate([\n Property({ day: 'day', month: 'month', year: 'year', hour: 'hour', minute: 'minute', second: 'second', dayOfTheWeek: 'day of the week' })\n ], TimePicker.prototype, \"maskPlaceholder\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"itemRender\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"cleared\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"focus\", void 0);\n TimePicker = __decorate([\n NotifyPropertyChanges\n ], TimePicker);\n return TimePicker;\n}(Component));\nexport { TimePicker };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n///\nimport { EventHandler, Internationalization, Property, NotifyPropertyChanges, Browser } from '@syncfusion/ej2-base';\nimport { Animation, Event, cldrData, getDefaultDateObject, detach } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, L10n, removeClass, closest, append, attributes } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, isNullOrUndefined, formatUnit, getValue, rippleEffect } from '@syncfusion/ej2-base';\nimport { extend } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '../datepicker/datepicker';\nimport { TimePickerBase } from '../timepicker/timepicker';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar DATEPICKERROOT = 'e-datepicker';\nvar DATETIMEWRAPPER = 'e-datetime-wrapper';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar HOUR = new Date().getHours();\nvar MINUTE = new Date().getMinutes();\nvar SECOND = new Date().getSeconds();\nvar MILLISECOND = new Date().getMilliseconds();\nvar ROOT = 'e-datetimepicker';\nvar DATETIMEPOPUPWRAPPER = 'e-datetimepopup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar TIMEICON = 'e-time-icon';\nvar INPUTFOCUS = 'e-input-focus';\nvar POPUPDIMENSION = '250px';\nvar ICONANIMATION = 'e-icon-anim';\nvar DISABLED = 'e-disabled';\nvar ERROR = 'e-error';\nvar CONTENT = 'e-content';\nvar NAVIGATION = 'e-navigation';\nvar ACTIVE = 'e-active';\nvar HOVER = 'e-hover';\nvar ICONS = 'e-icons';\nvar HALFPOSITION = 2;\nvar LISTCLASS = 'e-list-item';\nvar ANIMATIONDURATION = 100;\nvar OVERFLOW = 'e-time-overflow';\n/**\n * Represents the DateTimePicker component that allows user to select\n * or enter a date time value.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DateTimePicker = /** @class */ (function (_super) {\n __extends(DateTimePicker, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {DateTimePickerModel} options - Specifies the DateTimePicker model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function DateTimePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.valueWithMinutes = null;\n _this.scrollInvoked = false;\n _this.moduleName = _this.getModuleName();\n _this.formatRegex = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yyy|yy|y|'[^']*'|'[^']*'/g;\n _this.dateFormatString = '';\n _this.dateTimeOptions = options;\n return _this;\n }\n DateTimePicker.prototype.focusHandler = function () {\n if (!this.enabled) {\n return;\n }\n addClass([this.inputWrapper.container], INPUTFOCUS);\n };\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n DateTimePicker.prototype.focusIn = function () {\n _super.prototype.focusIn.call(this);\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n DateTimePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n };\n DateTimePicker.prototype.blurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n // IE popup closing issue when click over the scrollbar\n if (this.isTimePopupOpen() && this.isPreventBlur) {\n this.inputElement.focus();\n return;\n }\n removeClass([this.inputWrapper.container], INPUTFOCUS);\n var blurArguments = {\n model: this\n };\n if (this.isTimePopupOpen()) {\n this.hide(e);\n }\n this.trigger('blur', blurArguments);\n };\n /**\n * To destroy the widget.\n *\n * @returns {void}\n */\n DateTimePicker.prototype.destroy = function () {\n if (this.popupObject && this.popupObject.element.classList.contains(POPUP)) {\n this.popupObject.destroy();\n detach(this.dateTimeWrapper);\n this.dateTimeWrapper = undefined;\n this.liCollections = this.timeCollections = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n }\n var ariaAttribute = {\n 'aria-live': 'assertive', 'aria-atomic': 'true', 'aria-invalid': 'false',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttribute, this.inputElement);\n }\n if (this.isCalendar()) {\n if (this.popupWrapper) {\n detach(this.popupWrapper);\n }\n this.popupObject = this.popupWrapper = null;\n this.keyboardHandler.destroy();\n }\n this.unBindInputEvents();\n this.liCollections = null;\n this.rippleFn = null;\n this.selectedElement = null;\n this.listTag = null;\n this.timeIcon = null;\n this.popupObject = null;\n this.preventArgs = null;\n this.keyboardModule = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n DateTimePicker.prototype.render = function () {\n this.timekeyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.valueWithMinutes = null;\n this.previousDateTime = null;\n this.isPreventBlur = false;\n this.cloneElement = this.element.cloneNode(true);\n this.dateTimeFormat = this.cldrDateTimeFormat();\n this.initValue = this.value;\n if (typeof (this.min) === 'string') {\n this.min = this.checkDateValue(new Date(this.min));\n }\n if (typeof (this.max) === 'string') {\n this.max = this.checkDateValue(new Date(this.max));\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n _super.prototype.updateHtmlAttributeToElement.call(this);\n this.checkAttributes(false);\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('datetimepicker', localeText, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n _super.prototype.render.call(this);\n this.createInputElement();\n _super.prototype.updateHtmlAttributeToWrapper.call(this);\n this.bindInputEvents();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n this.setValue(true);\n if (this.enableMask && !this.value && this.maskedDateValue && (this.floatLabelType === 'Always' || !this.floatLabelType || !this.placeholder)) {\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkValue(this.scrollTo))) }, true);\n this.previousDateTime = this.value && new Date(+this.value);\n if (this.element.tagName === 'EJS-DATETIMEPICKER') {\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n if (!this.enabled) {\n this.inputElement.tabIndex = -1;\n }\n }\n if (this.floatLabelType === 'Auto') {\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');\n }\n this.renderComplete();\n };\n DateTimePicker.prototype.setValue = function (isDynamic) {\n if (isDynamic === void 0) { isDynamic = false; }\n this.initValue = this.validateMinMaxRange(this.value);\n if (!this.strictMode && this.isDateObject(this.initValue)) {\n var value = this.validateMinMaxRange(this.initValue);\n Input.setValue(this.getFormattedValue(value), this.inputElement, this.floatLabelType, this.showClearButton);\n this.setProperties({ value: value }, true);\n }\n else {\n if (isNullOrUndefined(this.value)) {\n this.initValue = null;\n this.setProperties({ value: null }, true);\n }\n }\n this.valueWithMinutes = this.value;\n _super.prototype.updateInput.call(this, isDynamic);\n };\n DateTimePicker.prototype.validateMinMaxRange = function (value) {\n var result = value;\n if (this.isDateObject(value)) {\n result = this.validateValue(value);\n }\n else {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n }\n }\n this.checkValidState(result);\n return result;\n };\n DateTimePicker.prototype.checkValidState = function (value) {\n this.isValidState = true;\n if (!this.strictMode) {\n if ((+(value) > +(this.max)) || (+(value) < +(this.min))) {\n this.isValidState = false;\n }\n }\n this.checkErrorState();\n };\n DateTimePicker.prototype.checkErrorState = function () {\n if (this.isValidState) {\n removeClass([this.inputWrapper.container], ERROR);\n }\n else {\n addClass([this.inputWrapper.container], ERROR);\n }\n attributes(this.inputElement, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n DateTimePicker.prototype.validateValue = function (value) {\n var dateVal = value;\n if (this.strictMode) {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n dateVal = this.max;\n }\n else if (+value < +this.min) {\n dateVal = this.min;\n }\n else if (+value > +this.max) {\n dateVal = this.max;\n }\n }\n else {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n dateVal = value;\n }\n }\n return dateVal;\n };\n DateTimePicker.prototype.disablePopupButton = function (isDisable) {\n if (isDisable) {\n addClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n this.hide();\n }\n else {\n removeClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n }\n };\n DateTimePicker.prototype.getFormattedValue = function (value) {\n var dateOptions;\n if (!isNullOrUndefined(value)) {\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n dateOptions = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n return this.globalize.formatDate(value, dateOptions);\n }\n else {\n return null;\n }\n };\n DateTimePicker.prototype.isDateObject = function (value) {\n return (!isNullOrUndefined(value) && !isNaN(+value)) ? true : false;\n };\n DateTimePicker.prototype.createInputElement = function () {\n removeClass([this.inputElement], DATEPICKERROOT);\n removeClass([this.inputWrapper.container], DATEWRAPPER);\n addClass([this.inputWrapper.container], DATETIMEWRAPPER);\n addClass([this.inputElement], ROOT);\n this.renderTimeIcon();\n };\n DateTimePicker.prototype.renderTimeIcon = function () {\n this.timeIcon = Input.appendSpan(INPUTWRAPPER + ' ' + TIMEICON + ' ' + ICONS, this.inputWrapper.container);\n };\n DateTimePicker.prototype.bindInputEvents = function () {\n EventHandler.add(this.timeIcon, 'mousedown', this.timeHandler, this);\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.dateHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.blurHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.focusHandler, this);\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n this.keyboardHandler = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputKeyAction.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n };\n DateTimePicker.prototype.unBindInputEvents = function () {\n EventHandler.remove(this.timeIcon, 'mousedown touchstart', this.timeHandler);\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateHandler);\n if (this.inputElement) {\n EventHandler.remove(this.inputElement, 'blur', this.blurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.focusHandler);\n }\n if (this.keyboardHandler) {\n this.keyboardHandler.destroy();\n }\n };\n DateTimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.timeFormat)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.timeFormat;\n }\n return cldrTime;\n };\n DateTimePicker.prototype.cldrDateTimeFormat = function () {\n var cldrTime;\n var culture = new Internationalization(this.locale);\n var dateFormat = culture.getDatePattern({ skeleton: 'yMd' });\n if (this.isNullOrEmpty(this.formatString)) {\n cldrTime = dateFormat + ' ' + this.getCldrFormat('time');\n }\n else {\n cldrTime = this.formatString;\n }\n return cldrTime;\n };\n DateTimePicker.prototype.getCldrFormat = function (type) {\n var cldrDateTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDateTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDateTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n return cldrDateTime;\n };\n DateTimePicker.prototype.isNullOrEmpty = function (value) {\n if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n return true;\n }\n else {\n return false;\n }\n };\n DateTimePicker.prototype.getCultureTimeObject = function (ld, c) {\n if (this.calendarMode === 'Gregorian') {\n return getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.short', ld);\n }\n else {\n return getValue('main.' + '' + this.locale + '.dates.calendars.islamic.timeFormats.short', ld);\n }\n };\n DateTimePicker.prototype.timeHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n this.isIconClicked = true;\n if (Browser.isDevice) {\n this.inputElement.setAttribute('readonly', '');\n }\n if (e.currentTarget === this.timeIcon) {\n e.preventDefault();\n }\n if (this.enabled && !this.readonly) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n }\n if (this.isTimePopupOpen()) {\n this.closePopup(e);\n }\n else {\n this.inputElement.focus();\n this.popupCreation('time', e);\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n this.isIconClicked = false;\n };\n DateTimePicker.prototype.dateHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if (e.currentTarget === this.inputWrapper.buttons[0]) {\n e.preventDefault();\n }\n if (this.enabled && !this.readonly) {\n if (this.isTimePopupOpen()) {\n this.closePopup(e);\n }\n if (!isNullOrUndefined(this.popupWrapper)) {\n this.popupCreation('date', e);\n }\n }\n };\n DateTimePicker.prototype.show = function (type, e) {\n if ((this.enabled && this.readonly) || !this.enabled) {\n return;\n }\n else {\n if (type === 'time' && !this.dateTimeWrapper) {\n if (this.isDatePopupOpen()) {\n this.hide(e);\n }\n this.popupCreation('time', e);\n }\n else if (!this.popupObj) {\n if (this.isTimePopupOpen()) {\n this.hide(e);\n }\n _super.prototype.show.call(this);\n this.popupCreation('date', e);\n }\n }\n };\n DateTimePicker.prototype.toggle = function (e) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n this.show('time', null);\n }\n else if (this.isTimePopupOpen()) {\n this.hide(e);\n _super.prototype.show.call(this, null, e);\n this.popupCreation('date', null);\n }\n else {\n this.show(null, e);\n }\n };\n DateTimePicker.prototype.listCreation = function () {\n var dateObject;\n if (this.calendarMode === 'Gregorian') {\n this.cldrDateTimeFormat().replace(this.formatRegex, this.TimePopupFormat());\n dateObject = this.globalize.parseDate(this.inputElement.value, {\n format: this.dateFormatString, type: 'datetime'\n });\n }\n else {\n dateObject = this.globalize.parseDate(this.inputElement.value, {\n format: this.cldrDateTimeFormat(), type: 'datetime', calendar: 'islamic'\n });\n }\n var value = isNullOrUndefined(this.value) ? this.inputElement.value !== '' ?\n dateObject : new Date() : this.value;\n this.valueWithMinutes = value;\n this.listWrapper = createElement('div', { className: CONTENT, attrs: { 'tabindex': '0' } });\n var min = this.startTime(value);\n var max = this.endTime(value);\n var listDetails = TimePickerBase.createListItems(this.createElement, min, max, this.globalize, this.cldrTimeFormat(), this.step);\n this.timeCollections = listDetails.collection;\n this.listTag = listDetails.list;\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options' });\n append([listDetails.list], this.listWrapper);\n this.wireTimeListEvents();\n var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n };\n DateTimePicker.prototype.popupCreation = function (type, e) {\n if (Browser.isDevice) {\n this.element.setAttribute('readonly', 'readonly');\n }\n if (type === 'date') {\n if (!this.readonly && this.popupWrapper) {\n addClass([this.popupWrapper], DATETIMEPOPUPWRAPPER);\n attributes(this.popupWrapper, { 'id': this.element.id + '_options' });\n }\n }\n else {\n if (!this.readonly) {\n this.dateTimeWrapper = createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_timepopup', 'style': 'visibility:hidden ; display:block' }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n this.dateTimeWrapper.className += ' ' + this.cssClass;\n }\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.listCreation();\n append([this.listWrapper], this.dateTimeWrapper);\n }\n document.body.appendChild(this.dateTimeWrapper);\n this.addTimeSelection();\n this.renderPopup();\n this.setTimeScrollPosition();\n this.openPopup(e);\n if (!Browser.isDevice || (Browser.isDevice && !this.fullScreenMode)) {\n this.popupObject.refreshPosition(this.inputElement);\n }\n if (Browser.isDevice && this.fullScreenMode) {\n this.dateTimeWrapper.style.left = '0px';\n }\n if (Browser.isDevice) {\n var dlgOverlay = this.createElement('div', { className: 'e-dlg-overlay' });\n dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n this.timeModal.appendChild(dlgOverlay);\n }\n }\n }\n };\n DateTimePicker.prototype.openPopup = function (e) {\n var _this = this;\n this.preventArgs = {\n cancel: false,\n popup: this.popupObject,\n event: e || null\n };\n var eventArgs = this.preventArgs;\n this.trigger('open', eventArgs, function (eventArgs) {\n _this.preventArgs = eventArgs;\n if (!_this.preventArgs.cancel && !_this.readonly) {\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION,\n };\n if (_this.zIndex === 1000) {\n _this.popupObject.show(new Animation(openAnimation), _this.element);\n }\n else {\n _this.popupObject.show(new Animation(openAnimation), null);\n }\n addClass([_this.inputWrapper.container], [ICONANIMATION]);\n attributes(_this.inputElement, { 'aria-expanded': 'true' });\n attributes(_this.inputElement, { 'aria-owns': _this.inputElement.id + '_options' });\n attributes(_this.inputElement, { 'aria-controls': _this.inputElement.id });\n EventHandler.add(document, 'mousedown touchstart', _this.documentClickHandler, _this);\n }\n });\n };\n DateTimePicker.prototype.documentClickHandler = function (event) {\n var target = event.target;\n if ((!isNullOrUndefined(this.popupObject) && (this.inputWrapper.container.contains(target) && event.type !== 'mousedown' ||\n (this.popupObject.element && this.popupObject.element.contains(target)))) && event.type !== 'touchstart') {\n event.preventDefault();\n }\n if (!(closest(target, '[id=\"' + (this.popupObject && this.popupObject.element.id + '\"]'))) && target !== this.inputElement\n && target !== this.timeIcon && !isNullOrUndefined(this.inputWrapper) && target !== this.inputWrapper.container && !target.classList.contains('e-dlg-overlay')) {\n if (this.isTimePopupOpen()) {\n this.hide(event);\n this.focusOut();\n }\n }\n else if (target !== this.inputElement) {\n if (!Browser.isDevice) {\n this.isPreventBlur = ((document.activeElement === this.inputElement) && (Browser.isIE || Browser.info.name === 'edge')\n && target === this.popupObject.element);\n }\n }\n };\n DateTimePicker.prototype.isTimePopupOpen = function () {\n return (this.dateTimeWrapper && this.dateTimeWrapper.classList.contains('' + ROOT)) ? true : false;\n };\n DateTimePicker.prototype.isDatePopupOpen = function () {\n return (this.popupWrapper && this.popupWrapper.classList.contains('' + DATETIMEPOPUPWRAPPER)) ? true : false;\n };\n DateTimePicker.prototype.renderPopup = function () {\n var _this = this;\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n if (Browser.isDevice) {\n this.timeModal = createElement('div');\n this.timeModal.className = '' + ROOT + ' e-time-modal';\n document.body.className += ' ' + OVERFLOW;\n this.timeModal.style.display = 'block';\n document.body.appendChild(this.timeModal);\n }\n var offset = 4;\n this.popupObject = new Popup(this.dateTimeWrapper, {\n width: this.setPopupWidth(),\n zIndex: this.zIndex,\n targetType: 'container',\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n enableRtl: this.enableRtl,\n offsetY: offset,\n open: function () {\n _this.dateTimeWrapper.style.visibility = 'visible';\n addClass([_this.timeIcon], ACTIVE);\n if (!Browser.isDevice) {\n _this.timekeyConfigure = extend(_this.timekeyConfigure, _this.keyConfigs);\n _this.inputEvent = new KeyboardEvents(_this.inputWrapper.container, {\n keyAction: _this.timeKeyActionHandle.bind(_this),\n keyConfigs: _this.timekeyConfigure,\n eventName: 'keydown'\n });\n }\n }, close: function () {\n removeClass([_this.timeIcon], ACTIVE);\n _this.unWireTimeListEvents();\n _this.inputElement.removeAttribute('aria-activedescendant');\n remove(_this.popupObject.element);\n _this.popupObject.destroy();\n _this.dateTimeWrapper.innerHTML = '';\n _this.listWrapper = _this.dateTimeWrapper = undefined;\n if (_this.inputEvent) {\n _this.inputEvent.destroy();\n }\n }, targetExitViewport: function () {\n if (!Browser.isDevice) {\n _this.hide();\n }\n }\n });\n if (Browser.isDevice && this.fullScreenMode) {\n this.popupObject.element.style.display = \"flex\";\n this.popupObject.element.style.maxHeight = \"100%\";\n this.popupObject.element.style.width = \"100%\";\n }\n else {\n this.popupObject.element.style.maxHeight = POPUPDIMENSION;\n }\n if (Browser.isDevice && this.fullScreenMode) {\n var modelWrapper = createElement('div', { className: 'e-datetime-mob-popup-wrap' });\n var modelHeader = this.createElement('div', { className: 'e-model-header' });\n var modelTitleSpan = this.createElement(\"span\", { className: \"e-model-title\" });\n modelTitleSpan.textContent = \"Select time\";\n var modelCloseIcon = this.createElement(\"span\", { className: \"e-popup-close\" });\n EventHandler.add(modelCloseIcon, 'mousedown touchstart', this.dateTimeCloseHandler, this);\n var timeContent = this.dateTimeWrapper.querySelector(\".e-content\");\n modelHeader.appendChild(modelCloseIcon);\n modelHeader.appendChild(modelTitleSpan);\n modelWrapper.appendChild(modelHeader);\n modelWrapper.appendChild(timeContent);\n this.dateTimeWrapper.insertBefore(modelWrapper, this.dateTimeWrapper.firstElementChild);\n }\n };\n DateTimePicker.prototype.dateTimeCloseHandler = function (e) {\n this.hide();\n };\n DateTimePicker.prototype.setDimension = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n // eslint-disable-next-line no-self-assign\n width = width;\n }\n else {\n width = '100%';\n }\n return width;\n };\n DateTimePicker.prototype.setPopupWidth = function () {\n var width = this.setDimension(this.width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n DateTimePicker.prototype.wireTimeListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n DateTimePicker.prototype.unWireTimeListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n }\n };\n DateTimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setTimeHover(currentLi, HOVER);\n };\n DateTimePicker.prototype.onMouseLeave = function () {\n this.removeTimeHover(HOVER);\n };\n DateTimePicker.prototype.setTimeHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeTimeHover(className);\n addClass([li], className);\n }\n };\n DateTimePicker.prototype.getPopupHeight = function () {\n var height = parseInt(POPUPDIMENSION, 10);\n var popupHeight = this.dateTimeWrapper.getBoundingClientRect().height;\n if (Browser.isDevice && this.fullScreenMode) {\n return popupHeight;\n }\n else {\n return popupHeight > height ? height : popupHeight;\n }\n };\n DateTimePicker.prototype.changeEvent = function (e) {\n _super.prototype.changeEvent.call(this, e);\n if ((this.value && this.value.valueOf()) !== (this.previousDateTime && +this.previousDateTime.valueOf())) {\n this.valueWithMinutes = this.value;\n this.setInputValue('date');\n this.previousDateTime = this.value && new Date(+this.value);\n }\n };\n DateTimePicker.prototype.updateValue = function (e) {\n this.setInputValue('time');\n if (+this.previousDateTime !== +this.value) {\n this.changedArgs = {\n value: this.value, event: e || null,\n isInteracted: !isNullOrUndefined(e),\n element: this.element\n };\n this.addTimeSelection();\n this.trigger('change', this.changedArgs);\n this.previousDateTime = this.previousDate = this.value;\n }\n };\n DateTimePicker.prototype.setTimeScrollPosition = function () {\n var popupElement = this.selectedElement;\n if (!isNullOrUndefined(popupElement)) {\n this.findScrollTop(popupElement);\n }\n else if (this.dateTimeWrapper && this.checkDateValue(this.scrollTo)) {\n this.setScrollTo();\n }\n };\n DateTimePicker.prototype.findScrollTop = function (element) {\n var listHeight = this.getPopupHeight();\n var nextElement = element.nextElementSibling;\n var height = nextElement ? nextElement.offsetTop : element.offsetTop;\n var lineHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n if (Browser.isDevice && this.fullScreenMode) {\n var listContent = this.dateTimeWrapper.querySelector('.e-content');\n listContent.scrollTop = nextElement ? (height - (listHeight / HALFPOSITION + lineHeight / HALFPOSITION)) : height;\n }\n else {\n this.dateTimeWrapper.scrollTop = nextElement ? (height - (listHeight / HALFPOSITION + lineHeight / HALFPOSITION)) : height;\n }\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n };\n DateTimePicker.prototype.setScrollTo = function () {\n var element;\n var items = this.dateTimeWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length >= 0) {\n this.scrollInvoked = true;\n var initialTime = this.timeCollections[0];\n var scrollTime = this.getDateObject(this.checkDateValue(this.scrollTo)).getTime();\n element = items[Math.round((scrollTime - initialTime) / (this.step * 60000))];\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n };\n DateTimePicker.prototype.setInputValue = function (type) {\n if (type === 'date') {\n this.inputElement.value = this.previousElementValue = this.getFormattedValue(this.getFullDateTime());\n this.setProperties({ value: this.getFullDateTime() }, true);\n }\n else {\n var tempVal = this.getFormattedValue(new Date(this.timeCollections[this.activeIndex]));\n Input.setValue(tempVal, this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousElementValue = this.inputElement.value;\n this.setProperties({ value: new Date(this.timeCollections[this.activeIndex]) }, true);\n if (this.enableMask) {\n this.createMask();\n }\n }\n this.updateIconState();\n };\n DateTimePicker.prototype.getFullDateTime = function () {\n var value = null;\n if (this.isDateObject(this.valueWithMinutes)) {\n value = this.combineDateTime(this.valueWithMinutes);\n }\n else {\n value = this.previousDate;\n }\n return this.validateMinMaxRange(value);\n };\n DateTimePicker.prototype.createMask = function () {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n };\n DateTimePicker.prototype.combineDateTime = function (value) {\n if (this.isDateObject(value)) {\n var day = this.previousDate.getDate();\n var month = this.previousDate.getMonth();\n var year = this.previousDate.getFullYear();\n var hour = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n return new Date(year, month, day, hour, minutes, seconds);\n }\n else {\n return this.previousDate;\n }\n };\n DateTimePicker.prototype.onMouseClick = function (event) {\n var target = event.target;\n var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n if (li && li.classList.contains(LISTCLASS)) {\n this.timeValue = li.getAttribute('data-value');\n this.hide(event);\n }\n this.setSelection(li, event);\n };\n DateTimePicker.prototype.setSelection = function (li, event) {\n if (this.isValidLI(li) && !li.classList.contains(ACTIVE)) {\n this.selectedElement = li;\n var index = Array.prototype.slice.call(this.liCollections).indexOf(li);\n this.activeIndex = index;\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n addClass([this.selectedElement], ACTIVE);\n this.selectedElement.setAttribute('aria-selected', 'true');\n this.updateValue(event);\n }\n };\n DateTimePicker.prototype.setTimeActiveClass = function () {\n var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n if (!isNullOrUndefined(collections)) {\n var items = collections.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n for (var i = 0; i < items.length; i++) {\n if (this.timeCollections[i] === +(this.valueWithMinutes)) {\n items[i].setAttribute('aria-selected', 'true');\n this.selectedElement = items[i];\n this.activeIndex = i;\n this.setTimeActiveDescendant();\n break;\n }\n }\n }\n }\n };\n DateTimePicker.prototype.setTimeActiveDescendant = function () {\n if (!isNullOrUndefined(this.selectedElement) && this.value) {\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n }\n else {\n this.inputElement.removeAttribute('aria-activedescendant');\n }\n };\n DateTimePicker.prototype.addTimeSelection = function () {\n this.selectedElement = null;\n this.removeTimeSelection();\n this.setTimeActiveClass();\n if (!isNullOrUndefined(this.selectedElement)) {\n addClass([this.selectedElement], ACTIVE);\n this.selectedElement.setAttribute('aria-selected', 'true');\n }\n };\n DateTimePicker.prototype.removeTimeSelection = function () {\n this.removeTimeHover(HOVER);\n if (!isNullOrUndefined(this.dateTimeWrapper)) {\n var items = this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n if (items.length) {\n removeClass(items, ACTIVE);\n items[0].removeAttribute('aria-selected');\n }\n }\n };\n DateTimePicker.prototype.removeTimeHover = function (className) {\n var hoveredItem = this.getTimeHoverItem(className);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, className);\n }\n };\n DateTimePicker.prototype.getTimeHoverItem = function (className) {\n var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n var hoveredItem;\n if (!isNullOrUndefined(collections)) {\n hoveredItem = collections.querySelectorAll('.' + className);\n }\n return hoveredItem;\n };\n DateTimePicker.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n };\n DateTimePicker.prototype.calculateStartEnd = function (value, range, method) {\n var day = value.getDate();\n var month = value.getMonth();\n var year = value.getFullYear();\n var hours = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n var milliseconds = value.getMilliseconds();\n if (range) {\n if (method === 'starttime') {\n return new Date(year, month, day, 0, 0, 0);\n }\n else {\n return new Date(year, month, day, 23, 59, 59);\n }\n }\n else {\n return new Date(year, month, day, hours, minutes, seconds, milliseconds);\n }\n };\n DateTimePicker.prototype.startTime = function (date) {\n var tempStartValue;\n var start;\n var tempMin = this.min;\n var value = date === null ? new Date() : date;\n if ((+value.getDate() === +tempMin.getDate() && +value.getMonth() === +tempMin.getMonth() &&\n +value.getFullYear() === +tempMin.getFullYear()) || ((+new Date(value.getFullYear(), value.getMonth(), value.getDate())) <=\n +new Date(tempMin.getFullYear(), tempMin.getMonth(), tempMin.getDate()))) {\n start = false;\n tempStartValue = this.min;\n }\n else if (+value < +this.max && +value > +this.min) {\n start = true;\n tempStartValue = value;\n }\n else if (+value >= +this.max) {\n start = true;\n tempStartValue = this.max;\n }\n return this.calculateStartEnd(tempStartValue, start, 'starttime');\n };\n DateTimePicker.prototype.TimePopupFormat = function () {\n var format = '';\n var formatCount = 0;\n var proxy = this;\n function formatValueSpecifier(formattext) {\n switch (formattext) {\n case 'd':\n case 'dd':\n case 'ddd':\n case 'dddd':\n case 'M':\n case 'MM':\n case 'MMM':\n case 'MMMM':\n case 'y':\n case 'yy':\n case 'yyy':\n case 'yyyy':\n if (format == '') {\n format = format + formattext;\n }\n else {\n format = format + \"/\" + formattext;\n }\n formatCount = formatCount + 1;\n break;\n }\n if (formatCount > 2) {\n proxy.dateFormatString = format;\n }\n return format;\n }\n return formatValueSpecifier;\n };\n DateTimePicker.prototype.endTime = function (date) {\n var tempEndValue;\n var end;\n var tempMax = this.max;\n var value = date === null ? new Date() : date;\n if ((+value.getDate() === +tempMax.getDate() && +value.getMonth() === +tempMax.getMonth() &&\n +value.getFullYear() === +tempMax.getFullYear()) || (+new Date(value.getUTCFullYear(), value.getMonth(), value.getDate()) >=\n +new Date(tempMax.getFullYear(), tempMax.getMonth(), tempMax.getDate()))) {\n end = false;\n tempEndValue = this.max;\n }\n else if (+value < +this.max && +value > +this.min) {\n end = true;\n tempEndValue = value;\n }\n else if (+value <= +this.min) {\n end = true;\n tempEndValue = this.min;\n }\n return this.calculateStartEnd(tempEndValue, end, 'endtime');\n };\n DateTimePicker.prototype.hide = function (e) {\n var _this = this;\n if (this.popupObj || this.dateTimeWrapper) {\n this.preventArgs = {\n cancel: false,\n popup: this.popupObj || this.popupObject,\n event: e || null\n };\n var eventArgs = this.preventArgs;\n if (isNullOrUndefined(this.popupObj)) {\n this.trigger('close', eventArgs, function (eventArgs) {\n _this.dateTimeCloseEventCallback(e, eventArgs);\n });\n }\n else {\n this.dateTimeCloseEventCallback(e, eventArgs);\n }\n }\n else {\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n }\n };\n DateTimePicker.prototype.dateTimeCloseEventCallback = function (e, eventArgs) {\n this.preventArgs = eventArgs;\n if (!this.preventArgs.cancel) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n }\n else if (this.isTimePopupOpen()) {\n this.closePopup(e);\n removeClass([document.body], OVERFLOW);\n if (Browser.isDevice && this.timeModal) {\n this.timeModal.style.display = 'none';\n this.timeModal.outerHTML = '';\n this.timeModal = null;\n }\n this.setTimeActiveDescendant();\n }\n }\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DateTimePicker.prototype.closePopup = function (e) {\n if (this.isTimePopupOpen() && this.popupObject) {\n var animModel = {\n name: 'FadeOut',\n duration: ANIMATIONDURATION,\n delay: 0\n };\n this.popupObject.hide(new Animation(animModel));\n this.inputWrapper.container.classList.remove(ICONANIMATION);\n attributes(this.inputElement, { 'aria-expanded': 'false' });\n this.inputElement.removeAttribute('aria-owns');\n this.inputElement.removeAttribute('aria-controls');\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n }\n };\n DateTimePicker.prototype.preRender = function () {\n this.checkFormat();\n this.dateTimeFormat = this.cldrDateTimeFormat();\n _super.prototype.preRender.call(this);\n removeClass([this.inputElementCopy], [ROOT]);\n };\n DateTimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.setProperties({ min: this.validateValue(date.min) }, true);\n }\n else {\n this.setProperties({ max: this.validateValue(date.max) }, true);\n }\n };\n DateTimePicker.prototype.checkAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['style', 'name', 'step', 'disabled', 'readonly', 'value', 'min', 'max', 'placeholder', 'type'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '' ||\n this.inputElement.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !isDynamic);\n }\n break;\n case 'min':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['min'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ min: value }, !isDynamic);\n }\n }\n break;\n case 'disabled':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === 'true' ||\n this.inputElement.getAttribute(prop) === '' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['value'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ value: value }, !isDynamic);\n }\n }\n break;\n case 'max':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['max'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ max: value }, !isDynamic);\n }\n }\n break;\n }\n }\n }\n };\n DateTimePicker.prototype.requiredModules = function () {\n var modules = [];\n if (this) {\n modules.push({ args: [this], member: 'islamic' });\n }\n if (this.enableMask) {\n modules.push(this.maskedDateModule());\n }\n return modules;\n };\n DateTimePicker.prototype.maskedDateModule = function () {\n var modules = { args: [this], member: 'MaskedDateTime' };\n return modules;\n };\n DateTimePicker.prototype.getTimeActiveElement = function () {\n if (!isNullOrUndefined(this.dateTimeWrapper)) {\n return this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n }\n else {\n return null;\n }\n };\n DateTimePicker.prototype.createDateObj = function (val) {\n return val instanceof Date ? val : null;\n };\n DateTimePicker.prototype.getDateObject = function (text) {\n if (!this.isNullOrEmpty(text)) {\n var dateValue = this.createDateObj(text);\n var value = this.valueWithMinutes;\n var status_1 = !isNullOrUndefined(value);\n if (this.checkDateValue(dateValue)) {\n var date = status_1 ? value.getDate() : DAY;\n var month = status_1 ? value.getMonth() : MONTH;\n var year = status_1 ? value.getFullYear() : YEAR;\n var hour = status_1 ? value.getHours() : HOUR;\n var minute = status_1 ? value.getMinutes() : MINUTE;\n var second = status_1 ? value.getSeconds() : SECOND;\n var millisecond = status_1 ? value.getMilliseconds() : MILLISECOND;\n if (!this.scrollInvoked) {\n return new Date(year, month, date, hour, minute, second, millisecond);\n }\n else {\n this.scrollInvoked = false;\n return new Date(year, month, date, dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds(), dateValue.getMilliseconds());\n }\n }\n }\n return null;\n };\n DateTimePicker.prototype.findNextTimeElement = function (event) {\n var textVal = (this.inputElement).value;\n var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n this.getDateObject(this.valueWithMinutes);\n var dateTimeVal = null;\n var listCount = this.liCollections.length;\n if (!isNullOrUndefined(this.activeIndex) || !isNullOrUndefined(this.checkDateValue(value))) {\n if (event.action === 'home') {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[0])));\n this.activeIndex = 0;\n }\n else if (event.action === 'end') {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[this.timeCollections.length - 1])));\n this.activeIndex = this.timeCollections.length - 1;\n }\n else {\n if (event.action === 'down') {\n for (var i = 0; i < listCount; i++) {\n if (+value < this.timeCollections[i]) {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[i])));\n this.activeIndex = i;\n break;\n }\n }\n }\n else {\n for (var i = listCount - 1; i >= 0; i--) {\n if (+value > this.timeCollections[i]) {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[i])));\n this.activeIndex = i;\n break;\n }\n }\n }\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.timeElementValue(isNullOrUndefined(dateTimeVal) ? null : new Date(dateTimeVal));\n }\n };\n DateTimePicker.prototype.setTimeValue = function (date, value) {\n var dateString;\n var time;\n var val = this.validateMinMaxRange(value);\n var newval = this.createDateObj(val);\n if (this.getFormattedValue(newval) !== (!isNullOrUndefined(this.value) ? this.getFormattedValue(this.value) : null)) {\n this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n time = new Date(+this.valueWithMinutes);\n }\n else {\n if (this.strictMode) {\n //for strict mode case, when value not present within a range. Reset the nearest range value.\n date = newval;\n }\n this.valueWithMinutes = this.checkDateValue(date);\n time = new Date(+this.valueWithMinutes);\n }\n if (this.calendarMode === 'Gregorian') {\n dateString = this.globalize.formatDate(time, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.cldrDateTimeFormat(),\n type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n dateString = this.globalize.formatDate(time, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.cldrDateTimeFormat(),\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n });\n }\n if (!this.strictMode && isNullOrUndefined(time)) {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n return time;\n };\n DateTimePicker.prototype.timeElementValue = function (value) {\n if (!isNullOrUndefined(this.checkDateValue(value)) && !this.isNullOrEmpty(value)) {\n var date = value instanceof Date ? value : this.getDateObject(value);\n return this.setTimeValue(date, value);\n }\n return null;\n };\n DateTimePicker.prototype.timeKeyHandler = function (event) {\n if (isNullOrUndefined(this.step) || this.step <= 0) {\n return;\n }\n var listCount = this.timeCollections.length;\n if (isNullOrUndefined(this.getTimeActiveElement()) || this.getTimeActiveElement().length === 0) {\n if (this.liCollections.length > 0) {\n if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n this.activeIndex = 0;\n this.selectedElement = this.liCollections[0];\n this.timeElementValue(new Date(this.timeCollections[0]));\n }\n else {\n this.findNextTimeElement(event);\n }\n }\n }\n else {\n var nextItemValue = void 0;\n if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n this.activeIndex = index = this.activeIndex === (listCount) ? 0 : this.activeIndex;\n this.activeIndex = index = this.activeIndex < 0 ? (listCount - 1) : this.activeIndex;\n nextItemValue = isNullOrUndefined(this.timeCollections[index]) ?\n this.timeCollections[0] : this.timeCollections[index];\n }\n else if (event.action === 'home') {\n this.activeIndex = 0;\n nextItemValue = this.timeCollections[0];\n }\n else if (event.action === 'end') {\n this.activeIndex = listCount - 1;\n nextItemValue = this.timeCollections[listCount - 1];\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.timeElementValue(new Date(nextItemValue));\n }\n this.isNavigate = true;\n this.setTimeHover(this.selectedElement, NAVIGATION);\n this.setTimeActiveDescendant();\n if (this.isTimePopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n this.setTimeScrollPosition();\n }\n };\n DateTimePicker.prototype.timeKeyActionHandle = function (event) {\n if (this.enabled) {\n if (event.action !== 'right' && event.action !== 'left' && event.action !== 'tab') {\n event.preventDefault();\n }\n switch (event.action) {\n case 'up':\n case 'down':\n case 'home':\n case 'end':\n this.timeKeyHandler(event);\n break;\n case 'enter':\n if (this.isNavigate) {\n this.selectedElement = this.liCollections[this.activeIndex];\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n this.setInputValue('time');\n if (+this.previousDateTime !== +this.value) {\n this.changedArgs.value = this.value;\n this.addTimeSelection();\n this.previousDateTime = this.value;\n }\n }\n else {\n this.updateValue(event);\n }\n this.hide(event);\n addClass([this.inputWrapper.container], INPUTFOCUS);\n this.isNavigate = false;\n event.stopPropagation();\n break;\n case 'escape':\n this.hide(event);\n break;\n default:\n this.isNavigate = false;\n break;\n }\n }\n };\n DateTimePicker.prototype.inputKeyAction = function (event) {\n switch (event.action) {\n case 'altDownArrow':\n this.strictModeUpdate();\n this.updateInput();\n this.toggle(event);\n break;\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {DateTimePickerModel} newProp - Returns the dynamic property value of the component.\n * @param {DateTimePickerModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n\n */\n DateTimePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n this.isDynamicValueChanged = true;\n this.invalidValueString = null;\n this.checkInvalidValue(newProp.value);\n newProp.value = this.value;\n newProp.value = this.validateValue(newProp.value);\n if (this.enableMask) {\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(this.getFormattedValue(newProp.value), this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.valueWithMinutes = newProp.value;\n this.setProperties({ value: newProp.value }, true);\n if (this.popupObj) {\n this.popupUpdate();\n }\n this.previousDateTime = new Date(this.inputElement.value);\n this.updateInput();\n this.changeTrigger(null);\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n if (this.enableMask && this.value) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'min':\n case 'max':\n this.getProperty(newProp, prop);\n this.updateInput();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'cssClass':\n if (!isNullOrUndefined(oldProp.cssClass)) {\n oldProp.cssClass = (oldProp.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(newProp.cssClass)) {\n newProp.cssClass = (newProp.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container], oldProp.cssClass);\n if (this.dateTimeWrapper) {\n Input.setCssClass(newProp.cssClass, [this.dateTimeWrapper], oldProp.cssClass);\n }\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n if (this.dateTimeOptions && this.dateTimeOptions.placeholder == null) {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.l10n.getConstant('placeholder'), this.inputElement);\n }\n this.dateTimeFormat = this.cldrDateTimeFormat();\n _super.prototype.updateInput.call(this);\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToElement();\n this.updateHtmlAttributeToWrapper();\n this.checkAttributes(true);\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.checkFormat();\n this.dateTimeFormat = this.formatString;\n this.setValue();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n if (!this.value) {\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.inputElement);\n if (this.enabled) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.tabIndex = -1;\n }\n break;\n case 'strictMode':\n this.invalidValueString = null;\n this.updateInput();\n break;\n case 'width':\n this.setWidth(newProp.width);\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');\n }\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');\n }\n break;\n case 'scrollTo':\n if (this.checkDateValue(new Date(this.checkValue(newProp.scrollTo)))) {\n if (this.dateTimeWrapper) {\n this.setScrollTo();\n }\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkValue(newProp.scrollTo))) }, true);\n }\n else {\n this.setProperties({ scrollTo: null }, true);\n }\n break;\n case 'enableMask':\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n if (this.inputElement.value === this.maskedDateValue) {\n this.maskedDateValue = '';\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n break;\n default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n break;\n }\n if (!this.isDynamicValueChanged) {\n this.hide(null);\n }\n this.isDynamicValueChanged = false;\n }\n };\n /**\n * To get component name.\n *\n * @returns {string} Returns the component name.\n * @private\n */\n DateTimePicker.prototype.getModuleName = function () {\n return 'datetimepicker';\n };\n DateTimePicker.prototype.restoreValue = function () {\n this.previousDateTime = this.previousDate;\n this.currentDate = this.value ? this.value : new Date();\n this.valueWithMinutes = this.value;\n this.previousDate = this.value;\n this.previousElementValue = this.previousElementValue = (isNullOrUndefined(this.inputValueCopy)) ? '' :\n this.getFormattedValue(this.inputValueCopy);\n };\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"timeFormat\", void 0);\n __decorate([\n Property(30)\n ], DateTimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"scrollTo\", void 0);\n __decorate([\n Property(1000)\n ], DateTimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property({})\n ], DateTimePicker.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"values\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"fullScreenMode\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Property(new Date(1900, 0, 1))\n ], DateTimePicker.prototype, \"min\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], DateTimePicker.prototype, \"max\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property('Gregorian')\n ], DateTimePicker.prototype, \"calendarMode\", void 0);\n __decorate([\n Property('Month')\n ], DateTimePicker.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], DateTimePicker.prototype, \"depth\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"weekNumber\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property('Short')\n ], DateTimePicker.prototype, \"dayHeaderFormat\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"openOnFocus\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"enableMask\", void 0);\n __decorate([\n Property({ day: 'day', month: 'month', year: 'year', hour: 'hour', minute: 'minute', second: 'second', dayOfTheWeek: 'day of the week' })\n ], DateTimePicker.prototype, \"maskPlaceholder\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"cleared\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"destroyed\", void 0);\n DateTimePicker = __decorate([\n NotifyPropertyChanges\n ], DateTimePicker);\n return DateTimePicker;\n}(DatePicker));\nexport { DateTimePicker };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization, setCulture } from '@syncfusion/ej2-base';\n/**\n * ValueFormatter class to globalize the value.\n *\n * @hidden\n */\nvar ValueFormatter = /** @class */ (function () {\n function ValueFormatter(cultureName) {\n this.intl = new Internationalization();\n if (!isNullOrUndefined(cultureName)) {\n this.intl.culture = cultureName;\n }\n }\n ValueFormatter.prototype.getFormatFunction = function (format) {\n if (format.type) {\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n ValueFormatter.prototype.getParserFunction = function (format) {\n if (format.type) {\n return this.intl.getDateParser(format);\n }\n else {\n return this.intl.getNumberParser(format);\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 }\n else {\n return value;\n }\n };\n ValueFormatter.prototype.toView = function (value, format) {\n var result = value;\n if (!isNullOrUndefined(format) && !isNullOrUndefined(value)) {\n result = format(value);\n }\n return result;\n };\n ValueFormatter.prototype.setCulture = function (cultureName) {\n if (!isNullOrUndefined(cultureName)) {\n setCulture(cultureName);\n }\n };\n return ValueFormatter;\n}());\nexport { ValueFormatter };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined, getValue, closest } from '@syncfusion/ej2-base';\nimport { attributes } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { appendChildren, addStickyColumnPosition } from '../base/util';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport * as events from '../base/constant';\n/**\n * FilterCellRenderer class which responsible for building filter cell.\n *\n * @hidden\n */\nvar FilterCellRenderer = /** @class */ (function (_super) {\n __extends(FilterCellRenderer, _super);\n function FilterCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TH', { className: 'e-filterbarcell', attrs: { role: 'columnheader' } });\n return _this;\n }\n /**\n * Function to return the wrapper for the TH content.\n *\n * @returns {string} returns the gui\n */\n FilterCellRenderer.prototype.getGui = function () {\n return this.parent.createElement('div');\n };\n /**\n * Function to render the cell content based on Column object.\n *\n * @param {Cell} cell\n * @param {Object} data\n */\n /* tslint:disable-next-line:max-func-body-length */\n FilterCellRenderer.prototype.render = function (cell, data) {\n var tr = this.parent.element.querySelector('.e-filterbar');\n var node = this.element.cloneNode();\n var innerDIV = this.getGui();\n var input;\n var column = cell.column;\n tr.appendChild(node);\n node.setAttribute('e-mappinguid', column.uid);\n if (column.filterTemplate) {\n var fltrData = {};\n if (data) {\n fltrData[column.field] = data[column.field];\n }\n var col = 'column';\n fltrData[\"\" + col] = column;\n if (column.visible) {\n var isReactCompiler = this.parent.isReact && typeof (column.filterTemplate) !== 'string';\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n this.parent.parentDetails.parentInstObj.isReact;\n var tempID = this.parent.element.id + column.uid + 'filterTemplate';\n if (isReactCompiler || isReactChild) {\n column.getFilterTemplate()(fltrData, this.parent, 'filterTemplate', tempID, null, null, node);\n this.parent.renderTemplates();\n }\n else {\n var element = column.getFilterTemplate()(fltrData, this.parent, 'filterTemplate', tempID);\n appendChildren(node, element);\n }\n }\n else {\n node.classList.add('e-hide');\n }\n }\n else {\n if (column.type !== 'checkbox') {\n if ((isNullOrUndefined(column.allowFiltering) || column.allowFiltering) && !isNullOrUndefined(column.filterBarTemplate)) {\n node.classList.add('e-fltrtemp');\n attributes(innerDIV, {\n 'class': 'e-fltrtempdiv'\n });\n if (isNullOrUndefined(column.filterBarTemplate.create)) {\n input = this.parent.createElement('input', {\n id: column.field + '_filterBarcell', className: 'e-filterUi_input e-filtertext e-fltrTemp',\n attrs: { type: 'search', title: column.headerText }\n });\n innerDIV.appendChild(input);\n }\n else {\n var args = { column: column, node: Element };\n var temp = column.filterBarTemplate.create;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n input = temp(args);\n if (typeof input === 'string') {\n var div = this.parent.createElement('div');\n div.innerHTML = input;\n input = div.firstChild;\n }\n attributes(innerDIV, {\n class: 'e-filterUi_input e-filtertext e-fltrTemp',\n title: column.headerText,\n id: column.field + '_filterBarcell'\n });\n innerDIV.appendChild(input);\n }\n }\n else {\n attributes(innerDIV, {\n 'class': 'e-filterdiv e-fltrinputdiv'\n });\n input = this.parent.createElement('input', {\n id: column.field + '_filterBarcell', className: 'e-filtertext',\n attrs: {\n type: 'search', title: column.headerText + cell.attributes.title,\n value: data[cell.column.field] ? data[cell.column.field] : ''\n }\n });\n innerDIV.appendChild(input);\n var args = {\n element: input, floatLabelType: 'Never',\n properties: {\n enableRtl: this.parent.enableRtl, showClearButton: true, cssClass: this.parent.cssClass\n }\n };\n Input.createInput(args, this.parent.createElement);\n }\n //TODO: apply intial filtering\n if (column.allowFiltering === false || column.field === '' || isNullOrUndefined(column.field)) {\n input.setAttribute('disabled', 'true');\n input.classList.add('e-disable');\n }\n var clearIconElem = innerDIV.querySelector('.e-clear-icon');\n if (clearIconElem) {\n clearIconElem.setAttribute('title', this.parent.localeObj.getConstant('ClearButton'));\n }\n if (!column.visible) {\n node.classList.add('e-hide');\n }\n this.appendHtml(node, innerDIV);\n // render's the dropdownlist component if showFilterBarOperator sets to true\n if (this.parent.filterSettings.showFilterBarOperator && this.parent.filterSettings.type === 'FilterBar' &&\n !this.parent.isPrinting && isNullOrUndefined(column.filterTemplate) && isNullOrUndefined(column.filterBarTemplate)) {\n this.operatorIconRender(innerDIV, column, cell);\n }\n if ((isNullOrUndefined(column.allowFiltering) || column.allowFiltering) && !isNullOrUndefined(column.filterBarTemplate)) {\n var templateWrite = column.filterBarTemplate.write;\n var args = { element: input, column: column };\n if (typeof templateWrite === 'string') {\n templateWrite = getValue(templateWrite, window);\n }\n templateWrite.call(this, args);\n }\n }\n }\n if (this.parent.isFrozenGrid()) {\n addStickyColumnPosition(this.parent, column, node);\n }\n return node;\n };\n /**\n * Function to specifies how the result content to be placed in the cell.\n *\n * @param {Element} node - specifies the node\n * @param {string|Element} innerHtml - specifies the innerHTML\n * @returns {Element} retruns the element\n */\n FilterCellRenderer.prototype.appendHtml = function (node, innerHtml) {\n node.appendChild(innerHtml);\n return node;\n };\n FilterCellRenderer.prototype.operatorIconRender = function (innerDIV, column, cell) {\n var gObj = this.parent;\n var operators;\n var fbicon = this.parent.createElement('input', {\n className: ' e-filterbaroperator e-icons e-icon-filter',\n id: cell.column.uid\n });\n innerDIV.querySelector('span').appendChild(fbicon);\n if (column.filter && column.filter.operator) {\n operators = column.filter.operator;\n }\n else if (gObj.filterSettings.columns.length) {\n for (var i = 0, a = gObj.filterSettings.columns; i < a.length; i++) {\n var col = a[parseInt(i.toString(), 10)];\n if (col.field === column.field) {\n operators = col.operator;\n break;\n }\n else {\n operators = 'equal';\n }\n }\n }\n else {\n operators = 'equal';\n }\n if (!isNullOrUndefined(gObj.filterModule.operators[column.field])) {\n operators = gObj.filterModule.operators[column.field];\n }\n this.dropOptr = new DropDownList({\n fields: { text: 'text', value: 'value' },\n popupHeight: 'auto',\n value: operators,\n width: '0px',\n enabled: column.allowFiltering,\n popupWidth: 'auto',\n enableRtl: this.parent.enableRtl,\n change: this.internalEvent.bind(this),\n beforeOpen: function () {\n var operator = gObj.filterModule.customOperators;\n this.dataSource = operator[gObj.getColumnByUid(this.element.id).type + 'Operator'];\n for (var i = 0; i < this.dataSource.length; i++) {\n if (column.filter && column.filter.operator && isNullOrUndefined(gObj.filterModule.operators[column.field]) &&\n this.dataSource[parseInt(i.toString(), 10)].value === column.filter.operator) {\n this.value = column.filter.operator;\n }\n }\n },\n cssClass: this.parent.cssClass ? 'e-popup-flbar' + ' ' + this.parent.cssClass : 'e-popup-flbar'\n });\n this.dropOptr.appendTo(fbicon);\n var spanElmt = closest(this.dropOptr.element, 'span');\n spanElmt.classList.add('e-filterbardropdown');\n spanElmt.removeAttribute('tabindex');\n };\n FilterCellRenderer.prototype.internalEvent = function (e) {\n var gObj = this.parent;\n var col = gObj.getColumnByUid(e.element.getAttribute('id'));\n e.column = col;\n gObj.filterModule.operators[col.field] = e.value;\n gObj.notify(events.getFilterBarOperator, e);\n };\n return FilterCellRenderer;\n}(CellRenderer));\nexport { FilterCellRenderer };\n","import { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\n/**\n * `filter operators` render boolean column.\n *\n * @hidden\n */\nvar FlMenuOptrUI = /** @class */ (function () {\n function FlMenuOptrUI(parent, customFltrOperators, serviceLocator, filterSettings) {\n this.ddOpen = this.dropDownOpen.bind(this);\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.filterSettings = filterSettings;\n this.customFilterOperators = customFltrOperators;\n if (this.parent) {\n this.parent.on(events.filterMenuClose, this.destroyDropDownList, this);\n this.parent.on(events.destroy, this.destroyDropDownList, this);\n }\n }\n /**\n * @param {Element} dlgConetntEle - specifies the content element\n * @param {Element} target - specifies the target\n * @param {Column} column - specifies the column\n * @param {Dialog} dlgObj - specifies the dialog\n * @param {Object[]} operator - specifies the operator list\n * @returns {void}\n * @hidden\n */\n // eslint-disable-next-line max-len\n FlMenuOptrUI.prototype.renderOperatorUI = function (dlgConetntEle, target, column, dlgObj, operator) {\n this.dialogObj = dlgObj;\n var optr = column.type + 'Operator';\n this.optrData = this.customOptr = !isNullOrUndefined(operator) ? operator :\n (!isNullOrUndefined(this.parent.filterSettings.operators) && !isNullOrUndefined(this.parent.filterSettings.operators[\"\" + optr])) ?\n this.parent.filterSettings.operators[\"\" + optr] : this.customFilterOperators[\"\" + optr];\n var dropDatasource = this.customOptr;\n var selectedValue = this.dropSelectedVal(column, optr);\n var optrDiv = this.parent.createElement('div', { className: 'e-flm_optrdiv' });\n dlgConetntEle.appendChild(optrDiv);\n var optrInput = this.parent.createElement('input', { id: column.uid + '-floptr' });\n optrDiv.appendChild(optrInput);\n this.dropOptr = new DropDownList({\n dataSource: dropDatasource,\n fields: { text: 'text', value: 'value' },\n cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n enableRtl: this.parent.enableRtl,\n text: selectedValue,\n // eslint-disable-next-line @typescript-eslint/tslint/config\n change: function () {\n var valInput = document.querySelector('.e-flmenu-valuediv').querySelector('input');\n if (this.value === 'isempty' || this.value === 'isnotempty' ||\n this.value === 'isnull' || this.value === 'isnotnull') {\n valInput['ej2_instances'][0]['enabled'] = false;\n }\n else if (!isNullOrUndefined(valInput.getAttribute('disabled'))) {\n valInput['ej2_instances'][0]['enabled'] = true;\n }\n }\n });\n this.dropOptr.addEventListener(literals['open'], this.ddOpen);\n this.dropOptr.appendTo('#' + column.uid + '-floptr');\n };\n FlMenuOptrUI.prototype.renderResponsiveDropDownList = function (args) {\n args.popup.element.style.width = '100%';\n };\n FlMenuOptrUI.prototype.dropDownOpen = function (args) {\n args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n if (this.parent.enableAdaptiveUI) {\n this.renderResponsiveDropDownList(args);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n FlMenuOptrUI.prototype.dropSelectedVal = function (col, optr) {\n var selValue = '';\n var columns = this.parent.filterSettings.columns;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n if (col.field === column.field || (col.isForeignColumn() && col.foreignKeyValue === column.field)) {\n var selectedField = new DataManager(this.optrData).executeLocal(new Query().where('value', 'equal', column.operator));\n selValue = !isNullOrUndefined(selectedField[0]) ? selectedField[0].text : '';\n }\n }\n if (selValue === '') { // rewuired or not\n if (col.filter.operator) {\n var optrLen = Object.keys(this.optrData).length;\n for (var i = 0; i < optrLen; i++) {\n if (this.optrData[parseInt(i.toString(), 10)].value === col.filter.operator) {\n selValue = this.optrData[parseInt(i.toString(), 10)].text;\n }\n }\n }\n else {\n selValue = this.optrData[0].text;\n }\n }\n return selValue;\n };\n /**\n * @returns {string} returns the operator\n * @hidden\n */\n FlMenuOptrUI.prototype.getFlOperator = function () {\n return this.dropOptr.value;\n };\n FlMenuOptrUI.prototype.destroyDropDownList = function () {\n if (this.dropOptr.isDestroyed) {\n return;\n }\n this.dropOptr.removeEventListener(literals['open'], this.ddOpen);\n this.dropOptr.destroy();\n this.parent.off(events.filterMenuClose, this.destroyDropDownList);\n this.parent.off(events.destroy, this.destroyDropDownList);\n };\n return FlMenuOptrUI;\n}());\nexport { FlMenuOptrUI };\n","import { AutoComplete } from '@syncfusion/ej2-dropdowns';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { Browser, isNullOrUndefined, extend, getValue } from '@syncfusion/ej2-base';\nimport { getZIndexCalcualtion, eventPromise } from '../base/util';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\nimport { CheckBoxFilterBase } from '../common/checkbox-filter-base';\n/**\n * `string filterui` render string column.\n *\n * @hidden\n */\nvar StringFilterUI = /** @class */ (function () {\n function StringFilterUI(parent, serviceLocator, filterSettings) {\n this.parent = parent;\n this.serLocator = serviceLocator;\n this.filterSettings = filterSettings;\n if (this.parent) {\n this.parent.on(events.filterMenuClose, this.destroy, this);\n this.parent.on(events.destroy, this.destroy, this);\n }\n }\n StringFilterUI.prototype.create = function (args) {\n this.instance = this.parent.createElement('input', { className: 'e-flmenu-input', id: 'strui-' + args.column.uid });\n args.target.appendChild(this.instance);\n this.dialogObj = args.dialogObj;\n this.processDataOperation(args);\n };\n StringFilterUI.prototype.processDataOperation = function (args) {\n var _this = this;\n if (args.column.isForeignColumn()) {\n this.parent.getDataModule().dataManager.executeQuery(this.parent.getDataModule().generateQuery(true))\n .then(function (result) { _this.getAutoCompleteOptions(args, result); });\n return;\n }\n this.getAutoCompleteOptions(args);\n };\n StringFilterUI.prototype.getAutoCompleteOptions = function (args, result) {\n var isForeignColumn = args.column.isForeignColumn();\n var foreignColumnQuery;\n if (isForeignColumn) {\n var filteredData = CheckBoxFilterBase.getDistinct(result.result, args.column.field)\n .records || [];\n var filterQuery = void 0;\n for (var i = 0; i < filteredData.length; i++) {\n if (filterQuery) {\n filterQuery = filterQuery.or(args.column.field, 'contains', filteredData[parseInt(i.toString(), 10)][args.column.field], this.parent\n .filterSettings.enableCaseSensitivity, this.parent.filterSettings.ignoreAccent);\n }\n else {\n filterQuery = new Predicate(args.column.field, 'contains', filteredData[parseInt(i.toString(), 10)][args.column.field], this.parent\n .filterSettings.enableCaseSensitivity, this.parent.filterSettings.ignoreAccent);\n }\n }\n foreignColumnQuery = new Query().where(filterQuery);\n foreignColumnQuery.params = this.parent.query.params;\n }\n var dataSource = isForeignColumn ? args.column.dataSource : this.parent.dataSource;\n var fields = { value: isForeignColumn ? args.column.foreignKeyValue : args.column.field };\n var autoComplete = new AutoComplete(extend({\n dataSource: dataSource instanceof DataManager ? dataSource : new DataManager(dataSource),\n fields: fields,\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n query: isForeignColumn ? foreignColumnQuery : this.parent.getDataModule().generateQuery(true, true),\n sortOrder: 'Ascending',\n cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n autofill: true,\n placeholder: args.localizeText.getConstant('EnterValue'),\n actionBegin: function () {\n if (this.query.queries.length && this.query.queries[0].fn === 'onWhere' && this.query.queries[0].e\n && this.query.queries[0].e.predicates) {\n for (var i = 0; i < this.query.queries[0].e.predicates.length; i++) {\n if (this.properties.fields.value === this.query.queries[0].e.predicates[\"\" + i].field) {\n this.query.queries[0].e.predicates.splice(i, 1);\n i = i - 1;\n }\n }\n if (!this.query.queries[0].e.predicates.length) {\n this.query.queries.splice(0, 1);\n }\n }\n }\n }, args.column.filter.params));\n this.acFocus = this.focus(autoComplete, args);\n this.acComplete = this.actionComplete(autoComplete);\n this.acOpen = this.openPopup.bind(this);\n autoComplete.addEventListener(literals.focus, this.acFocus);\n autoComplete.addEventListener(literals['open'], this.acOpen);\n autoComplete.addEventListener(events.actionComplete, this.acComplete);\n if (dataSource && 'result' in dataSource) {\n var query = this.parent.getQuery ? this.parent.getQuery().clone() : new Query();\n var defObj = eventPromise({ requestType: 'stringfilterrequest' }, query);\n this.parent.trigger(events.dataStateChange, defObj.state);\n var def = defObj.deffered;\n def.promise.then(function (e) {\n autoComplete.dataSource = new DataManager(e);\n });\n }\n this.actObj = autoComplete;\n this.actObj.appendTo(this.instance);\n if (isForeignColumn) {\n this.parent.filterModule.filterModule.afterRenderFilterUI();\n }\n };\n StringFilterUI.prototype.write = function (args) {\n if (args.filteredValue !== '' && !isNullOrUndefined(args.filteredValue)) {\n var struiObj = document.querySelector('#strui-' + args.column.uid).ej2_instances[0];\n struiObj.value = args.filteredValue;\n }\n };\n StringFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var actuiObj = document.querySelector('#strui-' + column.uid).ej2_instances[0];\n if (Browser.isDevice) {\n actuiObj.hidePopup();\n actuiObj.focusOut();\n }\n var filterValue = actuiObj.value;\n if (isNullOrUndefined(filterValue) || filterValue === '') {\n filterValue = null;\n }\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', this.parent.filterSettings.enableCaseSensitivity);\n };\n StringFilterUI.prototype.openPopup = function (args) {\n getZIndexCalcualtion(args, this.dialogObj);\n };\n StringFilterUI.prototype.focus = function (actObj, args) {\n return function () {\n actObj.filterType = args.getOptrInstance.getFlOperator();\n };\n };\n StringFilterUI.prototype.actionComplete = function (actObj) {\n return function (e) {\n e.result = e.result.filter(function (obj, index, arr) {\n return arr.map(function (mapObj) {\n return (getValue(actObj.fields.value, mapObj));\n }).indexOf(getValue((actObj.fields.value), obj)) === index;\n });\n };\n };\n StringFilterUI.prototype.destroy = function () {\n if (!this.actObj || this.actObj.isDestroyed) {\n return;\n }\n this.actObj.removeEventListener(literals.focus, this.acFocus);\n this.actObj.removeEventListener(literals['open'], this.acOpen);\n this.actObj.removeEventListener(events.actionComplete, this.acComplete);\n this.actObj.destroy();\n this.parent.off(events.filterMenuClose, this.destroy);\n this.parent.off(events.destroy, this.destroy);\n };\n return StringFilterUI;\n}());\nexport { StringFilterUI };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { extend, isUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\n/**\n * `numberfilterui` render number column.\n *\n * @hidden\n */\nvar NumberFilterUI = /** @class */ (function () {\n function NumberFilterUI(parent, serviceLocator, filterSettings) {\n this.filterSettings = filterSettings;\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n if (this.parent) {\n this.parent.on(events.filterMenuClose, this.destroy, this);\n this.parent.on(events.destroy, this.destroy, this);\n }\n }\n NumberFilterUI.prototype.keyEventHandler = function (args) {\n if (args.keyCode === 13 || args.keyCode === 9) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent('change', false, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.dispatchEvent(evt);\n }\n };\n NumberFilterUI.prototype.create = function (args) {\n this.instance = this.parent.createElement('input', { className: 'e-flmenu-input', id: 'numberui-' + args.column.uid });\n args.target.appendChild(this.instance);\n this.numericTxtObj = new NumericTextBox(extend({\n format: typeof (args.column.format) === 'string' || isUndefined(args.column.format) ? args.column.format :\n args.column.format.format,\n locale: this.parent.locale,\n cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n placeholder: args.localizeText.getConstant('EnterValue'),\n enableRtl: this.parent.enableRtl\n }, args.column.filter.params));\n this.numericTxtObj.appendTo(this.instance);\n };\n NumberFilterUI.prototype.write = function (args) {\n var numberuiObj = document.querySelector('#numberui-' + args.column.uid).ej2_instances[0];\n numberuiObj.element.addEventListener('keydown', this.keyEventHandler);\n numberuiObj.value = args.filteredValue;\n };\n NumberFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var numberuiObj = document.querySelector('#numberui-' + column.uid).ej2_instances[0];\n var filterValue = numberuiObj.value;\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', true);\n };\n NumberFilterUI.prototype.destroy = function () {\n if (!this.numericTxtObj || this.numericTxtObj.isDestroyed) {\n return;\n }\n this.numericTxtObj.destroy();\n this.parent.off(events.filterMenuClose, this.destroy);\n this.parent.off(events.destroy, this.destroy);\n };\n return NumberFilterUI;\n}());\nexport { NumberFilterUI };\n","import { getZIndexCalcualtion } from '../base/util';\nimport { Query, DataManager, DataUtil } from '@syncfusion/ej2-data';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\n/**\n * `boolfilterui` render boolean column.\n *\n * @hidden\n */\nvar BooleanFilterUI = /** @class */ (function () {\n function BooleanFilterUI(parent, serviceLocator, filterSettings) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.filterSettings = filterSettings;\n if (this.parent) {\n this.parent.on(events.filterMenuClose, this.destroy, this);\n this.parent.on(events.destroy, this.destroy, this);\n }\n }\n BooleanFilterUI.prototype.create = function (args) {\n var isForeignColumn = args.column.isForeignColumn();\n var dataSource = isForeignColumn ? args.column.dataSource : this.parent.dataSource;\n var fields = isForeignColumn ? args.column.foreignKeyValue : args.column.field;\n this.elem = this.parent.createElement('input', { className: 'e-flmenu-input', id: 'bool-ui-' + args.column.uid });\n args.target.appendChild(this.elem);\n this.dialogObj = args.dialogObj;\n this.dropInstance = new DropDownList(extend({\n dataSource: dataSource instanceof DataManager ?\n dataSource : new DataManager(dataSource),\n query: new Query().select(fields),\n fields: { text: fields, value: fields },\n placeholder: args.localizeText.getConstant('SelectValue'),\n cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl\n }, args.column.filter.params));\n this.ddOpen = this.openPopup.bind(this);\n this.ddComplete = this.actionComplete(fields);\n this.dropInstance.addEventListener(literals['open'], this.ddOpen);\n this.dropInstance.addEventListener(events.actionComplete, this.ddComplete);\n this.dropInstance.appendTo(this.elem);\n };\n BooleanFilterUI.prototype.write = function (args) {\n var drpuiObj = document.querySelector('#bool-ui-' + args.column.uid).ej2_instances[0];\n if (!isNullOrUndefined(args.filteredValue)) {\n drpuiObj.value = args.filteredValue;\n }\n };\n BooleanFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var drpuiObj = document.querySelector('#bool-ui-' + column.uid).ej2_instances[0];\n var filterValue = drpuiObj.value;\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', false);\n };\n BooleanFilterUI.prototype.openPopup = function (args) {\n getZIndexCalcualtion(args, this.dialogObj);\n };\n BooleanFilterUI.prototype.actionComplete = function (fields) {\n return function (e) {\n e.result = DataUtil.distinct(e.result, fields, true);\n };\n };\n BooleanFilterUI.prototype.destroy = function () {\n if (!this.dropInstance || this.dropInstance.isDestroyed) {\n return;\n }\n this.dropInstance.removeEventListener(literals['open'], this.ddOpen);\n this.dropInstance.removeEventListener(events.actionComplete, this.ddComplete);\n this.dropInstance.destroy();\n this.parent.off(events.filterMenuClose, this.destroy);\n this.parent.off(events.destroy, this.destroy);\n };\n return BooleanFilterUI;\n}());\nexport { BooleanFilterUI };\n","import { DatePicker, DateTimePicker } from '@syncfusion/ej2-calendars';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { getCustomDateFormat } from '../base/util';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\n/**\n * `datefilterui` render date column.\n *\n * @hidden\n */\nvar DateFilterUI = /** @class */ (function () {\n function DateFilterUI(parent, serviceLocator, filterSettings) {\n this.dpOpen = this.openPopup.bind(this);\n this.parent = parent;\n this.locator = serviceLocator;\n this.fltrSettings = filterSettings;\n if (this.parent) {\n this.parent.on(events.filterMenuClose, this.destroy, this);\n this.parent.on(events.destroy, this.destroy, this);\n }\n }\n DateFilterUI.prototype.create = function (args) {\n var format = getCustomDateFormat(args.column.format, args.column.type);\n this.dialogObj = args.dialogObj;\n this.inputElem = this.parent.createElement('input', { className: 'e-flmenu-input', id: 'dateui-' + args.column.uid });\n args.target.appendChild(this.inputElem);\n if (args.column.type === 'date' || args.column.type === 'dateonly') {\n this.datePickerObj = new DatePicker(extend({\n format: format,\n cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n placeholder: args.localizeText.getConstant('ChooseDate'),\n width: '100%',\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl\n }, args.column.filter.params));\n }\n else if (args.column.type === 'datetime') {\n this.datePickerObj = new DateTimePicker(extend({\n format: format,\n cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n placeholder: args.localizeText.getConstant('ChooseDate'),\n width: '100%',\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl\n }, args.column.filter.params));\n }\n this.datePickerObj.addEventListener(literals['open'], this.dpOpen);\n this.datePickerObj.appendTo(this.inputElem);\n };\n DateFilterUI.prototype.write = function (args) {\n var dateuiObj = document.querySelector('#dateui-' + args.column.uid).ej2_instances[0];\n dateuiObj.value = !isNullOrUndefined(args.filteredValue) ? new Date(args.filteredValue) : null;\n };\n DateFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var dateuiObj = document.querySelector('#dateui-' + column.uid).ej2_instances[0];\n var filterValue = dateuiObj.value;\n filterValue = isNullOrUndefined(filterValue) ? null : filterValue;\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', true);\n };\n DateFilterUI.prototype.openPopup = function (args) {\n args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n };\n DateFilterUI.prototype.destroy = function () {\n this.parent.off(events.filterMenuClose, this.destroy);\n this.parent.off(events.destroy, this.destroy);\n if (isNullOrUndefined(this.datePickerObj) || this.datePickerObj.isDestroyed) {\n return;\n }\n this.datePickerObj.removeEventListener(literals['open'], this.dpOpen);\n this.datePickerObj.destroy();\n };\n return DateFilterUI;\n}());\nexport { DateFilterUI };\n","import { isNullOrUndefined, getValue, remove } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { FlMenuOptrUI } from './filter-menu-operator';\nimport { StringFilterUI } from './string-filter-ui';\nimport { NumberFilterUI } from './number-filter-ui';\nimport { BooleanFilterUI } from './boolean-filter-ui';\nimport { DateFilterUI } from './date-filter-ui';\nimport { getFilterMenuPostion, parentsUntil, appendChildren, clearReactVueTemplates } from '../base/util';\nimport * as events from '../base/constant';\nimport { CheckBoxFilterBase } from '../common/checkbox-filter-base';\n/**\n * `filter menu` render boolean column.\n *\n * @hidden\n */\nvar FilterMenuRenderer = /** @class */ (function () {\n function FilterMenuRenderer(parent, filterSettings, serviceLocator, customFltrOperators, fltrObj) {\n this.isDialogOpen = false;\n this.maxHeight = '350px';\n this.isMenuCheck = false;\n this.colTypes = {\n 'string': StringFilterUI, 'number': NumberFilterUI, 'date': DateFilterUI, 'dateonly': DateFilterUI, 'boolean': BooleanFilterUI, 'datetime': DateFilterUI\n };\n this.parent = parent;\n this.filterSettings = filterSettings;\n this.serviceLocator = serviceLocator;\n this.customFilterOperators = customFltrOperators;\n this.filterObj = fltrObj;\n this.flMuiObj = new FlMenuOptrUI(this.parent, this.customFilterOperators, this.serviceLocator);\n this.l10n = this.serviceLocator.getService('localization');\n this.menuFilterBase = new CheckBoxFilterBase(parent);\n }\n FilterMenuRenderer.prototype.clearCustomFilter = function (col) {\n this.clearBtnClick(col);\n };\n FilterMenuRenderer.prototype.applyCustomFilter = function (args) {\n this.filterBtnClick(args.col);\n };\n FilterMenuRenderer.prototype.openDialog = function (args) {\n this.options = args;\n this.col = this.parent.getColumnByField(args.field);\n if (isNullOrUndefined(this.col.filter) || (isNullOrUndefined(this.col.filter.type) || this.col.filter.type === 'Menu')) { ///\n this.renderDlgContent(args.target, this.col);\n }\n };\n FilterMenuRenderer.prototype.closeDialog = function (target) {\n if (!this.dlgObj) {\n return;\n }\n if (this.parent.isReact || this.parent.isVue) {\n clearReactVueTemplates(this.parent, ['filterTemplate']);\n }\n var elem = document.getElementById(this.dlgObj.element.id);\n if (this.dlgObj && !this.dlgObj.isDestroyed && elem) {\n var argument = { cancel: false, column: this.col, target: target, element: elem };\n this.parent.notify(events.filterMenuClose, argument);\n if (argument.cancel) {\n return;\n }\n this.isDialogOpen = false;\n if (this.isMenuCheck) {\n this.menuFilterBase.unWireEvents();\n this.parent.off(events.cBoxFltrComplete, this.actionComplete);\n this.isMenuCheck = false;\n }\n this.dlgObj.destroy();\n remove(elem);\n }\n this.parent.notify(events.filterDialogClose, {});\n };\n FilterMenuRenderer.prototype.renderDlgContent = function (target, column) {\n var args = {\n requestType: events.filterBeforeOpen,\n columnName: column.field, columnType: column.type\n };\n var filterModel = 'filterModel';\n args[\"\" + filterModel] = this;\n this.parent.trigger(events.actionBegin, args);\n var mainDiv = this.parent.createElement('div', { className: 'e-flmenu-maindiv', id: column.uid + '-flmenu' });\n this.dlgDiv = this.parent.createElement('div', { className: 'e-flmenu', id: column.uid + '-flmdlg' });\n this.dlgDiv.setAttribute('aria-label', this.l10n.getConstant('FilterMenuDialogARIA'));\n if (this.parent.enableAdaptiveUI) {\n var responsiveCnt = document.querySelector('.e-resfilter > .e-dlg-content > .e-mainfilterdiv');\n responsiveCnt.appendChild(this.dlgDiv);\n }\n else {\n this.parent.element.appendChild(this.dlgDiv);\n }\n this.dlgObj = new Dialog({\n showCloseIcon: false,\n closeOnEscape: false,\n locale: this.parent.locale,\n visible: false,\n enableRtl: this.parent.enableRtl,\n created: this.dialogCreated.bind(this, target, column),\n position: this.parent.element.classList.contains('e-device') ? { X: 'center', Y: 'center' } : { X: '', Y: '' },\n target: this.parent.element.classList.contains('e-device') ? document.body : this.parent.element,\n buttons: [{\n click: this.filterBtnClick.bind(this, column),\n buttonModel: {\n content: this.l10n.getConstant('FilterButton'), isPrimary: true,\n cssClass: this.parent.cssClass ? 'e-flmenu-okbtn' + ' ' + this.parent.cssClass : 'e-flmenu-okbtn'\n }\n },\n {\n click: this.clearBtnClick.bind(this, column),\n buttonModel: { content: this.l10n.getConstant('ClearButton'),\n cssClass: this.parent.cssClass ? 'e-flmenu-cancelbtn' + ' ' + this.parent.cssClass : 'e-flmenu-cancelbtn' }\n }],\n content: mainDiv,\n width: (!isNullOrUndefined(parentsUntil(target, 'e-bigger'))) || this.parent.element.classList.contains('e-device') ? 260 : 250,\n animationSettings: { effect: 'None' },\n cssClass: this.parent.cssClass ? 'e-filter-popup' + ' ' + this.parent.cssClass : 'e-filter-popup'\n });\n var isStringTemplate = 'isStringTemplate';\n this.dlgObj[\"\" + isStringTemplate] = true;\n this.renderResponsiveDialog();\n this.dlgObj.appendTo(this.dlgDiv);\n };\n FilterMenuRenderer.prototype.renderResponsiveDialog = function () {\n var gObj = this.parent;\n if (gObj.enableAdaptiveUI) {\n this.dlgObj.position = { X: '', Y: '' };\n this.dlgObj.target = document.querySelector('.e-resfilter > .e-dlg-content > .e-mainfilterdiv');\n this.dlgObj.width = '100%';\n this.dlgObj.isModal = false;\n this.dlgObj.buttons = [{}];\n }\n };\n FilterMenuRenderer.prototype.dialogCreated = function (target, column) {\n if (!Browser.isDevice && target) {\n getFilterMenuPostion(target, this.dlgObj);\n }\n this.currentDialogCreatedColumn = column;\n this.renderFilterUI(target, column);\n if (!(column.isForeignColumn() && !(!isNullOrUndefined(column.filter) && !isNullOrUndefined(column.filter.ui)\n && !isNullOrUndefined(column.filter.ui.create)))) {\n this.afterRenderFilterUI();\n }\n if (!isNullOrUndefined(column.filterTemplate)) {\n this.dlgDiv.querySelector('.e-flmenu-valuediv').firstElementChild.focus();\n this.dlgDiv.querySelector('.e-flmenu-valuediv').firstElementChild.classList.add('e-input-focus');\n }\n else if (!isNullOrUndefined(this.dlgDiv.querySelector('.e-flmenu-input'))) {\n this.dlgDiv.querySelector('.e-flmenu-input').focus();\n this.dlgDiv.querySelector('.e-flmenu-input').parentElement.classList.add('e-input-focus');\n }\n };\n /**\n * Function to notify filterDialogCreated and trigger actionComplete\n *\n * @returns {void}\n * @hidden\n */\n FilterMenuRenderer.prototype.afterRenderFilterUI = function () {\n var column = this.currentDialogCreatedColumn;\n if (column.showColumnMenu) {\n this.parent.notify(events.filterDialogCreated, {});\n }\n if (this.parent.enableAdaptiveUI) {\n this.dlgObj.element.style.left = '0px';\n this.dlgObj.element.style.maxHeight = 'none';\n }\n else {\n this.dlgObj.element.style.maxHeight = this.maxHeight;\n }\n this.dlgObj.show();\n var optrInput = this.dlgObj.element.querySelector('.e-flm_optrdiv').querySelector('input');\n var valInput = this.dlgObj.element.querySelector('.e-flmenu-valuediv').querySelector('input');\n if (optrInput.value === 'Empty' || optrInput.value === 'Not Empty' ||\n optrInput.value === 'Null' || optrInput.value === 'Not Null') {\n valInput['ej2_instances'][0]['enabled'] = false;\n }\n else if (!isNullOrUndefined(valInput && valInput.getAttribute('disabled'))) {\n valInput['ej2_instances'][0]['enabled'] = true;\n }\n if (!column.filterTemplate) {\n this.writeMethod(column, this.dlgObj.element.querySelector('#' + column.uid + '-flmenu'));\n }\n var args = {\n requestType: events.filterAfterOpen,\n columnName: column.field, columnType: column.type\n };\n var filterModel = 'filterModel';\n args[\"\" + filterModel] = this;\n this.isDialogOpen = true;\n if (!this.isMenuCheck) {\n this.parent.trigger(events.actionComplete, args);\n }\n };\n FilterMenuRenderer.prototype.renderFilterUI = function (target, col) {\n var dlgConetntEle = this.dlgObj.element.querySelector('.e-flmenu-maindiv');\n this.parent.log('column_type_missing', { column: col });\n this.renderOperatorUI(dlgConetntEle, target, col);\n this.renderFlValueUI(dlgConetntEle, target, col);\n };\n FilterMenuRenderer.prototype.renderOperatorUI = function (dlgConetntEle, target, column) {\n this.flMuiObj.renderOperatorUI(dlgConetntEle, target, column, this.dlgObj, this.filterObj.menuOperator);\n };\n FilterMenuRenderer.prototype.renderFlValueUI = function (dlgConetntEle, target, column) {\n var valueDiv = this.parent.createElement('div', { className: 'e-flmenu-valuediv' });\n var fObj = this.filterObj;\n dlgConetntEle.appendChild(valueDiv);\n var instanceofFilterUI = new this.colTypes[column.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n if (column.filterTemplate) {\n var fltrData = {};\n var valueInString = 'value';\n fltrData[column.field] = fltrData[\"\" + valueInString] = fObj.values[column.field];\n if (column.foreignKeyValue) {\n fltrData[column.foreignKeyValue] = fObj.values[column.field];\n fltrData[column.field] = undefined;\n }\n var col = 'column';\n fltrData[\"\" + col] = column;\n var isReactCompiler = this.parent.isReact && typeof (column.filterTemplate) !== 'string';\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n this.parent.parentDetails.parentInstObj.isReact;\n var tempID = this.parent.element.id + column.uid + 'filterTemplate';\n if (isReactCompiler || isReactChild) {\n column.getFilterTemplate()(fltrData, this.parent, 'filterTemplate', tempID, null, null, valueDiv);\n this.parent.renderTemplates();\n }\n else {\n var compElement = column.getFilterTemplate()(fltrData, this.parent, 'filterTemplate', tempID);\n appendChildren(valueDiv, compElement);\n }\n if (this.isMenuCheck) {\n this.menuFilterBase.cBox = this.dlgObj.element.querySelector('.e-checkboxlist.e-fields');\n this.menuFilterBase.wireEvents();\n this.parent.on(events.cBoxFltrComplete, this.actionComplete, this);\n this.menuFilterBase.getAllData();\n }\n }\n else {\n if (!isNullOrUndefined(column.filter) && !isNullOrUndefined(column.filter.ui)\n && !isNullOrUndefined(column.filter.ui.create)) {\n var temp = column.filter.ui.create;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n temp({\n column: column, target: valueDiv,\n getOptrInstance: this.flMuiObj, dialogObj: this.dlgObj\n });\n }\n else {\n instanceofFilterUI.create({\n column: column, target: valueDiv,\n getOptrInstance: this.flMuiObj, localizeText: this.l10n, dialogObj: this.dlgObj\n });\n }\n }\n };\n FilterMenuRenderer.prototype.writeMethod = function (col, dlgContentEle) {\n var flValue;\n var target = dlgContentEle.querySelector('.e-flmenu-valinput');\n var instanceofFilterUI = new this.colTypes[col.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n var columns = this.filterSettings.columns;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n if (col.uid === column.uid) {\n flValue = column.value;\n }\n }\n if (!isNullOrUndefined(col.filter) && !isNullOrUndefined(col.filter.ui)\n && !isNullOrUndefined(col.filter.ui.write)) {\n var temp = col.filter.ui.write;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n temp({ column: col, target: target, parent: this.parent, filteredValue: flValue });\n }\n else {\n instanceofFilterUI.write({ column: col, target: target, parent: this.parent, filteredValue: flValue });\n }\n };\n FilterMenuRenderer.prototype.filterBtnClick = function (col) {\n var flValue;\n var targ = this.dlgObj.element.querySelector('.e-flmenu-valuediv input');\n var flOptrValue = this.flMuiObj.getFlOperator();\n var instanceofFilterUI = new this.colTypes[col.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n if (col.filterTemplate) {\n var element = this.dlgDiv.querySelector('.e-flmenu-valuediv');\n var fltrValue = void 0;\n if (element.children[0].value) {\n fltrValue = element.children[0].value;\n }\n else {\n if (!isNullOrUndefined(element.children[0].ej2_instances)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fltrValue = (this.parent.isAngular ? element.children[0] :\n element.querySelector('input')).ej2_instances[0].value;\n }\n else {\n var eControl = element.querySelector('.e-control');\n if (!isNullOrUndefined(eControl)) {\n fltrValue = col.type === 'boolean' ? eControl.checked :\n !isNullOrUndefined(eControl.ej2_instances) ?\n eControl.ej2_instances[0].value :\n eControl.value;\n }\n }\n }\n this.filterObj.filterByColumn(col.field, flOptrValue, fltrValue);\n }\n else {\n if (!isNullOrUndefined(col.filter) &&\n !isNullOrUndefined(col.filter.ui) && !isNullOrUndefined(col.filter.ui.read)) {\n var temp = col.filter.ui.read;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n // eslint-disable-next-line\n flValue = temp({ element: targ, column: col, operator: flOptrValue, fltrObj: this.filterObj });\n }\n else {\n instanceofFilterUI.read(targ, col, flOptrValue, this.filterObj);\n }\n }\n this.closeDialog();\n if (this.parent.showColumnMenu) {\n this.parent.notify(events.afterFilterColumnMenuClose, {});\n }\n };\n FilterMenuRenderer.prototype.closeResponsiveDialog = function () {\n this.closeDialog();\n };\n FilterMenuRenderer.prototype.clearBtnClick = function (column) {\n this.filterObj.removeFilteredColsByField(column.field);\n this.closeDialog();\n };\n FilterMenuRenderer.prototype.destroy = function () {\n this.closeDialog();\n };\n /**\n * @returns {FilterUI} returns the filterUI\n * @hidden\n */\n FilterMenuRenderer.prototype.getFilterUIInfo = function () {\n return { field: this.col.field, operator: this.flMuiObj.getFlOperator() };\n };\n FilterMenuRenderer.prototype.renderCheckBoxMenu = function () {\n this.isMenuCheck = true;\n this.menuFilterBase.updateModel(this.options);\n this.menuFilterBase.getAndSetChkElem(this.options);\n this.dlgObj.buttons = [{\n click: this.menuFilterBase.btnClick.bind(this.menuFilterBase),\n buttonModel: {\n content: this.menuFilterBase.getLocalizedLabel('FilterButton'),\n cssClass: 'e-primary', isPrimary: true\n }\n },\n {\n click: this.menuFilterBase.btnClick.bind(this.menuFilterBase),\n buttonModel: { cssClass: 'e-flat', content: this.menuFilterBase.getLocalizedLabel('ClearButton') }\n }];\n this.menuFilterBase.dialogObj = this.dlgObj;\n this.menuFilterBase.dlg = this.dlgObj.element;\n this.menuFilterBase.dlg.classList.add('e-menucheckbox');\n this.menuFilterBase.dlg.classList.remove('e-checkboxfilter');\n this.maxHeight = '800px';\n return this.menuFilterBase.sBox.innerHTML;\n };\n FilterMenuRenderer.prototype.actionComplete = function (args) {\n if (this.isMenuCheck) {\n this.parent.trigger(events.actionComplete, args);\n }\n };\n return FilterMenuRenderer;\n}());\nexport { FilterMenuRenderer };\n","import * as events from '../base/constant';\nimport { isActionPrevent } from '../base/util';\nimport { CheckBoxFilterBase } from '../common/checkbox-filter-base';\n/**\n * @hidden\n * `CheckBoxFilter` module is used to handle filtering action.\n */\nvar CheckBoxFilter = /** @class */ (function () {\n /**\n * Constructor for checkbox filtering module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {FilterSettings} filterSettings - specifies the filtersettings\n * @param {ServiceLocator} serviceLocator - specifies the ServiceLocator\n * @hidden\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function CheckBoxFilter(parent, filterSettings, serviceLocator) {\n this.parent = parent;\n this.isresetFocus = true;\n this.checkBoxBase = new CheckBoxFilterBase(parent);\n this.addEventListener();\n }\n /**\n * To destroy the check box filter.\n *\n * @returns {void}\n * @hidden\n */\n CheckBoxFilter.prototype.destroy = function () {\n this.removeEventListener();\n this.checkBoxBase.closeDialog();\n };\n CheckBoxFilter.prototype.openDialog = function (options) {\n this.checkBoxBase.openDialog(options);\n this.parent.log('column_type_missing', { column: options.column });\n };\n CheckBoxFilter.prototype.closeDialog = function () {\n this.destroy();\n if (this.isresetFocus) {\n this.parent.notify(events.restoreFocus, {});\n }\n };\n CheckBoxFilter.prototype.closeResponsiveDialog = function () {\n this.checkBoxBase.closeDialog();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the module name\n * @private\n */\n CheckBoxFilter.prototype.getModuleName = function () {\n return 'checkboxFilter';\n };\n CheckBoxFilter.prototype.actionBegin = function (args) {\n this.parent.trigger(events.actionBegin, args);\n };\n CheckBoxFilter.prototype.actionComplete = function (args) {\n this.parent.trigger(events.actionComplete, args);\n };\n CheckBoxFilter.prototype.actionPrevent = function (args) {\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, args);\n args.cancel = true;\n }\n };\n CheckBoxFilter.prototype.clearCustomFilter = function (col) {\n this.checkBoxBase.clearFilter(col);\n };\n CheckBoxFilter.prototype.applyCustomFilter = function () {\n this.checkBoxBase.fltrBtnHandler();\n this.checkBoxBase.closeDialog();\n };\n CheckBoxFilter.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.cBoxFltrBegin, this.actionBegin, this);\n this.parent.on(events.cBoxFltrComplete, this.actionComplete, this);\n this.parent.on(events.fltrPrevent, this.actionPrevent, this);\n };\n CheckBoxFilter.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.cBoxFltrBegin, this.actionBegin);\n this.parent.off(events.cBoxFltrComplete, this.actionComplete);\n this.parent.off(events.fltrPrevent, this.actionPrevent);\n };\n return CheckBoxFilter;\n}());\nexport { CheckBoxFilter };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { EventHandler, remove, Browser } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { DropDownList, AutoComplete } from '@syncfusion/ej2-dropdowns';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { RadioButton, CheckBox } from '@syncfusion/ej2-buttons';\nimport { distinctStringValues, isComplexField, getComplexFieldID, getCustomDateFormat, applyBiggerTheme, performComplexDataOperation, registerEventHandlers, removeEventHandlers, clearReactVueTemplates } from '../base/util';\nimport { DatePicker, DateTimePicker } from '@syncfusion/ej2-calendars';\nimport { parentsUntil, appendChildren, extend, eventPromise } from '../base/util';\nimport * as events from '../base/constant';\nimport { ContextMenu } from '@syncfusion/ej2-navigations';\nimport { CheckBoxFilterBase } from '../common/checkbox-filter-base';\nimport * as literals from '../base/string-literals';\n/**\n * @hidden\n * `ExcelFilter` module is used to handle filtering action.\n */\nvar ExcelFilterBase = /** @class */ (function (_super) {\n __extends(ExcelFilterBase, _super);\n /**\n * Constructor for excel filtering module\n *\n * @param {IXLFilter} parent - parent details\n * @param {Object} customFltrOperators - operator details\n * @hidden\n */\n function ExcelFilterBase(parent, customFltrOperators) {\n var _this = _super.call(this, parent) || this;\n _this.childRefs = [];\n _this.eventHandlers = {};\n _this.isDevice = false;\n _this.focusedMenuItem = null;\n _this.customFilterOperators = customFltrOperators;\n _this.isExcel = true;\n return _this;\n }\n ExcelFilterBase.prototype.getCMenuDS = function (type, operator) {\n var options = {\n number: ['Equal', 'NotEqual', '', 'LessThan', 'LessThanOrEqual', 'GreaterThan',\n 'GreaterThanOrEqual', 'Between', '', 'CustomFilter'],\n string: ['Equal', 'NotEqual', '', 'StartsWith', 'EndsWith', '', 'Contains', 'NotContains', '', 'CustomFilter']\n };\n options.date = options.number;\n options.datetime = options.number;\n options.dateonly = options.number;\n var model = [];\n for (var i = 0; i < options[\"\" + type].length; i++) {\n if (options[\"\" + type][parseInt(i.toString(), 10)].length) {\n if (operator) {\n model.push({\n text: this.getLocalizedLabel(options[\"\" + type][parseInt(i.toString(), 10)]) + '...',\n iconCss: 'e-icons e-icon-check ' + (operator === options[\"\" + type][parseInt(i.toString(), 10)].toLowerCase() ? '' : 'e-emptyicon')\n });\n }\n else {\n model.push({\n text: this.getLocalizedLabel(options[\"\" + type][parseInt(i.toString(), 10)]) + '...'\n });\n }\n }\n else {\n model.push({ separator: true });\n }\n }\n return model;\n };\n /**\n * To destroy the filter bar.\n *\n * @returns {void}\n * @hidden\n */\n ExcelFilterBase.prototype.destroy = function () {\n if (this.dlg) {\n this.unwireExEvents();\n _super.prototype.closeDialog.call(this);\n }\n if (!this.isDevice && this.menuObj) {\n var li = this.menuObj.element.querySelector('li.e-focused');\n if (!(li && parentsUntil(li, 'e-excel-menu'))) {\n this.destroyCMenu();\n }\n }\n if (this.dlgObj && !this.dlgObj.isDestroyed) {\n this.removeDialog();\n }\n };\n ExcelFilterBase.prototype.createMenu = function (type, isFiltered, isCheckIcon, eleOptions) {\n var options = { string: 'TextFilter', date: 'DateFilter', dateonly: 'DateFilter', datetime: 'DateTimeFilter', number: 'NumberFilter' };\n this.menu = this.parent.createElement('div', { className: 'e-contextmenu-wrapper' });\n if (this.parent.enableRtl) {\n this.menu.classList.add('e-rtl');\n }\n else {\n this.menu.classList.remove('e-rtl');\n }\n if (this.parent.cssClass) {\n this.menu.classList.add(this.parent.cssClass);\n }\n var ul = this.parent.createElement('ul');\n var icon = isFiltered ? 'e-excl-filter-icon e-filtered' : 'e-excl-filter-icon';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.parent.allowSorting && this.parent.getModuleName() === 'grid'\n && !this.options.isResponsiveFilter) {\n var hdrele = this.parent.getColumnHeaderByUid(eleOptions.uid).getAttribute('aria-sort');\n var colIsSort = this.parent.getColumnByField(eleOptions.field).allowSorting;\n var isAsc = (!colIsSort || hdrele === 'ascending') ? 'e-disabled e-excel-ascending' : 'e-excel-ascending';\n var isDesc = (!colIsSort || hdrele === 'descending') ? 'e-disabled e-excel-descending' : 'e-excel-descending';\n var ascName = (type === 'string') ? this.getLocalizedLabel('SortAtoZ') : (type === 'datetime' || type === 'date') ?\n this.getLocalizedLabel('SortByOldest') : this.getLocalizedLabel('SortSmallestToLargest');\n var descName = (type === 'string') ? this.getLocalizedLabel('SortZtoA') : (type === 'datetime' || type === 'date') ?\n this.getLocalizedLabel('SortByNewest') : this.getLocalizedLabel('SortLargestToSmallest');\n ul.appendChild(this.createMenuElem(ascName, isAsc, 'e-sortascending'));\n ul.appendChild(this.createMenuElem(descName, isDesc, 'e-sortdescending'));\n var separator = this.parent.createElement('li', { className: 'e-separator e-menu-item e-excel-separator' });\n ul.appendChild(separator);\n }\n if (!this.options.isResponsiveFilter) {\n ul.appendChild(this.createMenuElem(this.getLocalizedLabel('ClearFilter'), isFiltered ? '' : 'e-disabled', icon));\n }\n if (type !== 'boolean') {\n ul.appendChild(this.createMenuElem(this.getLocalizedLabel(options[\"\" + type]), 'e-submenu', isCheckIcon && this.ensureTextFilter() ? 'e-icon-check' : icon + ' e-emptyicon', true));\n }\n this.menu.appendChild(ul);\n this.parent.notify(events.beforeFltrcMenuOpen, { element: this.menu });\n this.parent.notify(events.refreshCustomFilterClearBtn, { isFiltered: isFiltered });\n };\n ExcelFilterBase.prototype.createMenuElem = function (val, className, iconName, isSubMenu) {\n var li = this.parent.createElement('li', { className: className + ' e-menu-item' });\n li.innerHTML = val;\n li.tabIndex = li.classList.contains('e-disabled') ? -1 : 0;\n li.insertBefore(this.parent.createElement('span', { className: 'e-menu-icon e-icons ' + iconName, attrs: { 'aria-hidden': 'true' } }), li.firstChild);\n if (isSubMenu) {\n li.appendChild(this.parent.createElement('span', { className: 'e-icons e-caret' }));\n }\n return li;\n };\n ExcelFilterBase.prototype.wireExEvents = function () {\n if (!Browser.isDevice) {\n EventHandler.add(this.dlg, 'mouseover', this.hoverHandler, this);\n }\n EventHandler.add(this.dlg, 'click', this.clickExHandler, this);\n EventHandler.add(this.dlg, 'keyup', this.keyUp, this);\n EventHandler.add(this.dlg, 'keydown', this.keyDown, this);\n };\n ExcelFilterBase.prototype.unwireExEvents = function () {\n if (!Browser.isDevice) {\n EventHandler.remove(this.dlg, 'mouseover', this.hoverHandler);\n }\n EventHandler.remove(this.dlg, 'click', this.clickExHandler);\n EventHandler.remove(this.dlg, 'keyup', this.keyUp);\n EventHandler.remove(this.dlg, 'keydown', this.keyDown);\n };\n ExcelFilterBase.prototype.clickExHandler = function (e) {\n var options = { string: 'TextFilter', date: 'DateFilter', datetime: 'DateTimeFilter', number: 'NumberFilter' };\n var menuItem = parentsUntil(e.target, 'e-menu-item');\n if (menuItem) {\n if (this.getLocalizedLabel('ClearFilter') === menuItem.innerText.trim()) {\n this.clearFilter();\n this.closeDialog();\n }\n else if ((this.options.isResponsiveFilter || Browser.isDevice)\n && this.getLocalizedLabel(options[this.options.type]) === menuItem.innerText.trim()) {\n this.hoverHandler(e);\n }\n }\n };\n ExcelFilterBase.prototype.focusNextOrPrevElement = function (e, focusableElements, focusClassName) {\n var nextIndex = (e.key === 'ArrowUp' || (e.key === 'Tab' && e.shiftKey)) ? focusableElements.indexOf(document.activeElement) - 1\n : focusableElements.indexOf(document.activeElement) + 1;\n var nextElement = focusableElements[((nextIndex + focusableElements.length) % focusableElements.length)];\n // Set focus on the next / previous element\n if (nextElement) {\n nextElement.focus();\n var focusClass = nextElement.classList.contains('e-chk-hidden') ? 'e-chkfocus' : focusClassName;\n var target = nextElement.classList.contains('e-chk-hidden') ? parentsUntil(nextElement, 'e-ftrchk') : parentsUntil(nextElement, 'e-menu-item');\n this.excelSetFocus(target, focusClass);\n }\n };\n ExcelFilterBase.prototype.keyUp = function (e) {\n if ((e.key === 'Tab' && e.shiftKey) || e.key === 'Tab') {\n var focusClass = e.target.classList.contains('e-chk-hidden') ? 'e-chkfocus' : 'e-menufocus';\n var target = e.target.classList.contains('e-menu-item')\n ? parentsUntil(e.target, 'e-menu-item') : parentsUntil(e.target, 'e-ftrchk');\n this.excelSetFocus(target, focusClass);\n }\n else if ((e.key === 'ArrowUp' || e.key === 'ArrowDown') && !e.altKey) {\n e.preventDefault();\n var focusableElements = Array.from(this.dlg.querySelectorAll('input, button, [tabindex]:not([tabindex=\"-1\"]), .e-menu-item:not(.e-disabled):not(.e-separator)'));\n this.focusNextOrPrevElement(e, focusableElements, 'e-menufocus');\n }\n else if ((e.key === 'Enter' || e.code === 'ArrowRight') && e.target.classList.contains('e-menu-item')) {\n e.preventDefault();\n e.target.click();\n if (e.target.classList.contains('e-submenu')) {\n this.hoverHandler(e);\n this.menuObj.element.querySelector('.e-menu-item').focus();\n this.excelSetFocus(parentsUntil(this.menuObj.element.querySelector('.e-menu-item'), 'e-menu-item'), 'e-focused');\n this.focusedMenuItem = this.menuObj.element.querySelector('.e-menu-item');\n }\n }\n };\n ExcelFilterBase.prototype.keyDown = function (e) {\n //prevented up and down arrow key press default functionality to prevent the browser scroll when performing keyboard navigation in excel filter element.\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault();\n }\n };\n ExcelFilterBase.prototype.excelSetFocus = function (elem, className) {\n var prevElem = document.querySelector('.' + className);\n if (prevElem) {\n prevElem.classList.remove(className);\n }\n if (elem) {\n elem.classList.add(className);\n }\n };\n ExcelFilterBase.prototype.destroyCMenu = function () {\n this.isCMenuOpen = false;\n if (this.menuObj && !this.menuObj.isDestroyed) {\n this.menuObj.destroy();\n EventHandler.remove(this.menuObj.element, 'keydown', this.contextKeyDownHandler);\n remove(this.cmenu);\n this.parent.notify(events.renderResponsiveCmenu, { target: null, header: '', isOpen: false, col: this.options.column });\n }\n };\n ExcelFilterBase.prototype.hoverHandler = function (e) {\n if (this.options.isResponsiveFilter && e.type === 'mouseover') {\n return;\n }\n var target = e.target.querySelector('.e-contextmenu');\n var li = parentsUntil(e.target, 'e-menu-item');\n var focused = this.menu.querySelector('.e-focused');\n var isSubMenu;\n if (focused) {\n focused.classList.remove('e-focused');\n }\n if (li) {\n li.classList.add('e-focused');\n isSubMenu = li.classList.contains('e-submenu');\n }\n if (target) {\n return;\n }\n if (!isSubMenu) {\n var submenu = this.menu.querySelector('.e-submenu');\n if (!isNullOrUndefined(submenu)) {\n submenu.classList.remove('e-selected');\n }\n this.destroyCMenu();\n }\n var selectedMenu = this.ensureTextFilter();\n if (!this.isCMenuOpen && isSubMenu) {\n li.classList.add('e-selected');\n this.isCMenuOpen = true;\n var menuOptions = {\n items: this.getCMenuDS(this.options.type, selectedMenu ? selectedMenu.replace(/\\s/g, '') : undefined),\n select: this.selectHandler.bind(this),\n onClose: this.destroyCMenu.bind(this),\n enableRtl: this.parent.enableRtl,\n animationSettings: { effect: 'None' },\n beforeClose: this.preventClose.bind(this),\n cssClass: this.options.isResponsiveFilter && this.parent.cssClass ?\n 'e-res-contextmenu-wrapper' + ' ' + this.parent.cssClass : this.options.isResponsiveFilter ?\n 'e-res-contextmenu-wrapper' : this.parent.cssClass ? this.parent.cssClass : ''\n };\n this.parent.element.appendChild(this.cmenu);\n this.menuObj = new ContextMenu(menuOptions, this.cmenu);\n EventHandler.add(this.menuObj.element, 'keydown', this.contextKeyDownHandler, this);\n var client = this.menu.querySelector('.e-submenu').getBoundingClientRect();\n var pos = { top: 0, left: 0 };\n if (this.options.isResponsiveFilter) {\n var options = { string: 'TextFilter', date: 'DateFilter', datetime: 'DateTimeFilter', number: 'NumberFilter' };\n var content = document.querySelector('.e-responsive-dialog > .e-dlg-header-content');\n var height = content.offsetHeight + 4;\n this.menuObj.element.style.height = 'calc(100% - ' + height + 'px)';\n this.menuObj['open'](height, 0, document.body);\n var header = this.getLocalizedLabel(options[this.options.type]);\n this.parent.notify(events.renderResponsiveCmenu, {\n target: this.menuObj.element.parentElement, header: header, isOpen: true\n });\n }\n else {\n if (Browser.isDevice) {\n this.isDevice = true;\n var contextRect = this.getContextBounds();\n pos.top = (window.innerHeight - contextRect.height) / 2;\n pos.left = (window.innerWidth - contextRect.width) / 2;\n this.closeDialog();\n this.isDevice = false;\n }\n else {\n pos.top = Browser.isIE ? window.pageYOffset + client.top : window.scrollY + client.top;\n pos.left = this.getCMenuYPosition(this.dlg);\n }\n this.menuObj['open'](pos.top, pos.left, e.target);\n }\n applyBiggerTheme(this.parent.element, this.menuObj.element.parentElement);\n }\n };\n ExcelFilterBase.prototype.contextKeyDownHandler = function (e) {\n if ((e.key === 'Tab' && e.shiftKey) || e.key === 'Tab') {\n e.preventDefault();\n var focusableElements = Array.from(this.menuObj.element.querySelectorAll('[tabindex]:not([tabindex=\"-1\"]), .e-menu-item:not(.e-disabled):not(.e-separator)'));\n // Focus the next / previous context menu item\n this.focusNextOrPrevElement(e, focusableElements, 'e-focused');\n }\n else if (e.key === 'ArrowLeft' || e.key === 'Escape') {\n e.preventDefault();\n this.menuObj.close();\n this.focusedMenuItem = null;\n document.querySelector('.e-submenu.e-menu-item').classList.remove('e-selected');\n document.querySelector('.e-submenu.e-menu-item').focus();\n }\n };\n ExcelFilterBase.prototype.ensureTextFilter = function () {\n var selectedMenu;\n var predicates = this.existingPredicate[this.options.field];\n if (predicates && predicates.length === 2) {\n if (predicates[0].operator === 'greaterthanorequal' && predicates[1].operator === 'lessthanorequal') {\n selectedMenu = 'between';\n }\n else {\n selectedMenu = 'customfilter';\n }\n }\n else {\n if (predicates && predicates.length === 1) {\n this.optrData = this.customFilterOperators[this.options.type + 'Operator'];\n selectedMenu = predicates[0].operator;\n }\n }\n return selectedMenu;\n };\n ExcelFilterBase.prototype.preventClose = function (args) {\n if (this.options && this.options.isResponsiveFilter && args.event) {\n var target = args.event.target;\n var isFilterBack = target.classList.contains('e-resfilterback')\n || target.classList.contains('e-res-back-btn') || target.classList.contains('e-menu-item');\n args.cancel = !isFilterBack;\n }\n else {\n if (args.event instanceof MouseEvent && args.event.target.classList.contains('e-submenu')) {\n args.cancel = true;\n }\n }\n };\n ExcelFilterBase.prototype.getContextBounds = function () {\n this.menuObj.element.style.display = 'block';\n return this.menuObj.element.getBoundingClientRect();\n };\n ExcelFilterBase.prototype.getCMenuYPosition = function (target) {\n var contextWidth = this.getContextBounds().width;\n var targetPosition = target.getBoundingClientRect();\n var leftPos = targetPosition.right + contextWidth - this.parent.element.clientWidth;\n var targetBorder = target.offsetWidth - target.clientWidth;\n targetBorder = targetBorder ? targetBorder + 1 : 0;\n return (leftPos < 1) ? (targetPosition.right + 1 - targetBorder) : (targetPosition.left - contextWidth - 1 + targetBorder);\n };\n ExcelFilterBase.prototype.openDialog = function (options) {\n var _this = this;\n this.updateModel(options);\n this.getAndSetChkElem(options);\n this.showDialog(options);\n if (options.cancel) {\n return;\n }\n this.dialogObj.dataBind();\n var filterLength = (this.existingPredicate[options.field] && this.existingPredicate[options.field].length) ||\n this.options.filteredColumns.filter(function (col) {\n return _this.options.field === col.field;\n }).length;\n this.createMenu(options.type, filterLength > 0, (filterLength === 1 || filterLength === 2), options);\n this.dlg.insertBefore(this.menu, this.dlg.firstChild);\n this.dlg.classList.add('e-excelfilter');\n if (this.parent.enableRtl) {\n this.dlg.classList.add('e-rtl');\n }\n this.dlg.classList.remove('e-checkboxfilter');\n this.cmenu = this.parent.createElement('ul', { className: 'e-excel-menu' });\n if (options.column.showColumnMenu) {\n this.parent.notify(events.filterDialogCreated, {});\n }\n this.wireExEvents();\n };\n ExcelFilterBase.prototype.closeDialog = function () {\n this.destroy();\n };\n ExcelFilterBase.prototype.selectHandler = function (e) {\n if (e.item) {\n this.parent.notify(events.filterCmenuSelect, {});\n this.menuItem = e.item;\n this.closeDialog();\n this.renderDialogue(e);\n }\n };\n /**\n * @hidden\n * @param {MenuEventArgs} e - event args\n * @returns {void}\n */\n ExcelFilterBase.prototype.renderDialogue = function (e) {\n var _this = this;\n var target = e ? e.element : undefined;\n var column = this.options.field;\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n var mainDiv = this.parent.createElement('div', {\n className: 'e-xlfl-maindiv',\n id: isComplex ? complexFieldName + '-xlflmenu' : column + '-xlflmenu'\n });\n this.dlgDiv = this.parent.createElement('div', {\n className: 'e-xlflmenu',\n id: isComplex ? complexFieldName + '-xlfldlg' : column + '-xlfldlg'\n });\n if (this.options.isResponsiveFilter) {\n var responsiveCnt = document.querySelector('.e-resfilter > .e-dlg-content > .e-xl-customfilterdiv');\n responsiveCnt.appendChild(this.dlgDiv);\n }\n else {\n this.parent.element.appendChild(this.dlgDiv);\n }\n this.dlgObj = new Dialog({\n header: this.getLocalizedLabel('CustomFilter'),\n isModal: true,\n overlayClick: this.removeDialog.bind(this),\n showCloseIcon: true,\n locale: this.parent.locale,\n closeOnEscape: true,\n target: document.body,\n // target: this.parent.element,\n visible: false,\n enableRtl: this.parent.enableRtl,\n open: function () {\n var rows = [].slice.call(_this.dlgObj.element.querySelectorAll('table.e-xlfl-table tr.e-xlfl-fields'));\n for (var i = 0; i < rows.length; i++) {\n var valInput = rows[i].children[1].querySelector('.e-control');\n var dropDownList = rows[i]\n .querySelector('.e-dropdownlist.e-control')['ej2_instances'][0];\n if (dropDownList.value === 'isempty' || dropDownList.value === 'isnotempty' ||\n dropDownList.value === 'isnull' || dropDownList.value === 'isnotnull') {\n valInput['ej2_instances'][0]['enabled'] = false;\n }\n else if (valInput && !isNullOrUndefined(valInput.getAttribute('disabled'))) {\n valInput['ej2_instances'][0]['enabled'] = true;\n }\n }\n var row = _this.dlgObj.element.querySelector('table.e-xlfl-table>tr');\n if (_this.options.column.filterTemplate) {\n var templateField_1 = isComplexField(_this.options.column.field) ?\n getComplexFieldID(_this.options.column.field) : _this.options.column.field;\n var isReactCompiler = _this.parent.isReact && typeof (_this.options.column.filterTemplate) !== 'string';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var isReactChild = _this.parent.parentDetails && _this.parent.parentDetails.parentInstObj &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _this.parent.parentDetails.parentInstObj.isReact;\n if (isReactCompiler || isReactChild) {\n _this.parent.renderTemplates(function () {\n row.querySelector('#' + templateField_1 + '-xlfl-frstvalue').focus();\n });\n }\n else {\n row.querySelector('#' + templateField_1 + '-xlfl-frstvalue').focus();\n }\n }\n else {\n //(row.cells[1].querySelector('input:not([type=hidden])') as HTMLElement).focus();\n }\n },\n close: this.removeDialog.bind(this),\n created: this.createdDialog.bind(this, target, column),\n buttons: [{\n click: this.filterBtnClick.bind(this, column),\n buttonModel: {\n content: this.getLocalizedLabel('OKButton'), isPrimary: true,\n cssClass: this.parent.cssClass ? 'e-xlfl-okbtn' + ' ' + this.parent.cssClass : 'e-xlfl-okbtn'\n }\n },\n {\n click: this.removeDialog.bind(this),\n buttonModel: { content: this.getLocalizedLabel('CancelButton'),\n cssClass: this.parent.cssClass ? 'e-xlfl-cancelbtn' + ' ' + this.parent.cssClass : 'e-xlfl-cancelbtn' }\n }],\n content: mainDiv,\n width: 430,\n animationSettings: { effect: 'None' },\n cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n });\n var isStringTemplate = 'isStringTemplate';\n this.dlgObj[\"\" + isStringTemplate] = true;\n this.renderResponsiveDialog();\n this.dlgDiv.setAttribute('aria-label', this.getLocalizedLabel('CustomFilterDialogARIA'));\n this.childRefs.push(this.dlgObj);\n this.dlgObj.appendTo(this.dlgDiv);\n };\n ExcelFilterBase.prototype.renderResponsiveDialog = function () {\n if (this.options.isResponsiveFilter) {\n var rowResponsiveDlg = document.querySelector('.e-row-responsive-filter');\n if (rowResponsiveDlg) {\n rowResponsiveDlg.classList.remove('e-row-responsive-filter');\n }\n this.dlgObj.buttons = [{}];\n this.dlgObj.header = undefined;\n this.dlgObj.position = { X: '', Y: '' };\n this.dlgObj.target = document.querySelector('.e-resfilter > .e-dlg-content > .e-xl-customfilterdiv');\n this.dlgObj.width = '100%';\n this.dlgObj.isModal = false;\n this.dlgObj.showCloseIcon = false;\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n ExcelFilterBase.prototype.removeDialog = function () {\n this.parent.notify(events.customFilterClose, {});\n if ((this.parent.isReact || this.parent.isVue) && this.parent.destroyTemplate !== undefined) {\n clearReactVueTemplates(this.parent, ['filterTemplate']);\n }\n this.removeObjects(this.childRefs);\n remove(this.dlgDiv);\n this.parent.notify(events.filterDialogClose, {});\n };\n ExcelFilterBase.prototype.createdDialog = function (target, column) {\n this.renderCustomFilter(target, column);\n this.dlgObj.element.style.left = '0px';\n if (!this.options.isResponsiveFilter) {\n this.dlgObj.element.style.top = '0px';\n }\n else {\n var content = document.querySelector('.e-responsive-dialog > .e-dlg-header-content');\n var height = content.offsetHeight + 4;\n this.dlgObj.element.style.top = height + 'px';\n }\n if (!this.options.isResponsiveFilter && Browser.isDevice && window.innerWidth < 440) {\n this.dlgObj.element.style.width = '90%';\n }\n this.parent.notify(events.beforeCustomFilterOpen, { column: column, dialog: this.dialogObj });\n this.dlgObj.show();\n applyBiggerTheme(this.parent.element, this.dlgObj.element.parentElement);\n };\n ExcelFilterBase.prototype.renderCustomFilter = function (target, column) {\n var dlgConetntEle = this.dlgObj.element.querySelector('.e-xlfl-maindiv');\n var dlgFields = this.parent.createElement('div', { innerHTML: this.getLocalizedLabel('ShowRowsWhere'), className: 'e-xlfl-dlgfields' });\n dlgConetntEle.appendChild(dlgFields);\n //column name\n var fieldSet = this.parent.createElement('div', { innerHTML: this.options.displayName, className: 'e-xlfl-fieldset' });\n dlgConetntEle.appendChild(fieldSet);\n this.renderFilterUI(column, dlgConetntEle);\n };\n /**\n * @hidden\n * @param {string} col - Defines column details\n * @returns {void}\n */\n ExcelFilterBase.prototype.filterBtnClick = function (col) {\n var isComplex = !isNullOrUndefined(col) && isComplexField(col);\n var complexFieldName = !isNullOrUndefined(col) && getComplexFieldID(col);\n var colValue = isComplex ? complexFieldName : col;\n var fValue = this.dlgDiv.querySelector('#' + colValue + '-xlfl-frstvalue').ej2_instances[0];\n var fOperator = this.dlgDiv.querySelector('#' + colValue + '-xlfl-frstoptr').ej2_instances[0];\n var sValue = this.dlgDiv.querySelector('#' + colValue + '-xlfl-secndvalue').ej2_instances[0];\n var sOperator = this.dlgDiv.querySelector('#' + colValue + '-xlfl-secndoptr').ej2_instances[0];\n var checkBoxValue;\n if (this.options.type === 'string') {\n var checkBox = this.dlgDiv.querySelector('#' + colValue + '-xlflmtcase').ej2_instances[0];\n checkBoxValue = checkBox.checked;\n }\n var andRadio = this.dlgDiv.querySelector('#' + colValue + 'e-xlfl-frstpredicate').ej2_instances[0];\n var predicate = (andRadio.checked ? 'and' : 'or');\n if (sValue.value === null) {\n predicate = 'or';\n }\n this.filterByColumn(this.options.field, fOperator.value, fValue.value, predicate, checkBoxValue, this.options.ignoreAccent, sOperator.value, sValue.value);\n this.removeDialog();\n };\n /**\n * @hidden\n * Filters grid row by column name with given options.\n *\n * @param {string} fieldName - Defines the field name of the filter column.\n * @param {string} firstOperator - Defines the first operator by how to filter records.\n * @param {string | number | Date | boolean} firstValue - Defines the first value which is used to filter records.\n * @param {string} predicate - Defines the relationship between one filter query with another by using AND or OR predicate.\n * @param {boolean} matchCase - If ignore case set to true, then filter records with exact match or else\n * filter records with case insensitive(uppercase and lowercase letters treated as same).\n * @param {boolean} ignoreAccent - If ignoreAccent set to true, then ignores the diacritic characters or accents when filtering.\n * @param {string} secondOperator - Defines the second operator by how to filter records.\n * @param {string | number | Date | boolean} secondValue - Defines the first value which is used to filter records.\n * @returns {void}\n */\n ExcelFilterBase.prototype.filterByColumn = function (fieldName, firstOperator, firstValue, predicate, matchCase, ignoreAccent, secondOperator, secondValue) {\n var col = this.parent.getColumnByField ? this.parent.getColumnByField(fieldName) : this.options.column;\n var field = this.isForeignColumn(col) ? col.foreignKeyValue : fieldName;\n var fColl = [];\n var mPredicate;\n var arg = {\n instance: this, handler: this.filterByColumn, arg1: fieldName, arg2: firstOperator, arg3: firstValue, arg4: predicate,\n arg5: matchCase, arg6: ignoreAccent, arg7: secondOperator, arg8: secondValue, cancel: false\n };\n this.parent.notify(events.fltrPrevent, arg);\n if (arg.cancel) {\n return;\n }\n fColl.push({\n field: field,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: firstOperator,\n value: arg.arg3,\n type: this.options.type\n });\n mPredicate = new Predicate(field, firstOperator.toLowerCase(), arg.arg3, !matchCase, ignoreAccent);\n if (!isNullOrUndefined(secondValue) && !isNullOrUndefined(secondOperator)) {\n fColl.push({\n field: field,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: secondOperator,\n value: arg.arg8,\n type: this.options.type\n });\n mPredicate = mPredicate[\"\" + predicate](field, secondOperator.toLowerCase(), secondValue, !matchCase, ignoreAccent);\n }\n var args = {\n action: 'filtering', filterCollection: fColl, field: this.options.field,\n ejpredicate: mPredicate, actualPredicate: fColl\n };\n if (this.isForeignColumn(col)) {\n this.foreignKeyFilter(args, fColl, mPredicate);\n }\n else {\n this.options.handler(args);\n }\n };\n // eslint-disable-next-line max-len\n ExcelFilterBase.prototype.renderOperatorUI = function (column, table, elementID, predicates, isFirst) {\n var fieldElement = this.parent.createElement('tr', { className: 'e-xlfl-fields', attrs: { role: 'row' } });\n table.appendChild(fieldElement);\n var xlfloptr = this.parent.createElement('td', { className: 'e-xlfl-optr' });\n fieldElement.appendChild(xlfloptr);\n var optrDiv = this.parent.createElement('div', { className: 'e-xlfl-optrdiv' });\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n var optrInput = this.parent\n .createElement('input', { id: isComplex ? complexFieldName + elementID : column + elementID });\n optrDiv.appendChild(optrInput);\n xlfloptr.appendChild(optrDiv);\n var optr = this.options.type + 'Operator';\n var dropDatasource = this.customFilterOperators[\"\" + optr];\n this.optrData = dropDatasource;\n var selectedValue = this.dropSelectedVal(this.options.column, predicates, isFirst);\n //Trailing three dots are sliced.\n var menuText = '';\n if (this.menuItem) {\n menuText = this.menuItem.text.slice(0, -3);\n if (menuText !== this.getLocalizedLabel('CustomFilter')) {\n selectedValue = isFirst ? menuText : undefined;\n }\n if (menuText === this.getLocalizedLabel('Between')) {\n selectedValue = this.getLocalizedLabel(isFirst ? 'GreaterThanOrEqual' : 'LessThanOrEqual');\n }\n }\n var col = this.options.column;\n var dropOptr = new DropDownList(extend({\n dataSource: dropDatasource,\n fields: { text: 'text', value: 'value' },\n text: selectedValue,\n enableRtl: this.parent.enableRtl,\n cssClass: this.parent.cssClass ? this.parent.cssClass : null\n }, col.filter.params));\n this.childRefs.push(dropOptr);\n var evt = { 'open': this.dropDownOpen.bind(this), 'change': this.dropDownValueChange.bind(this) };\n registerEventHandlers(optrInput.id, [literals.open, literals.change], evt, this);\n dropOptr.addEventListener(literals['open'], this.eventHandlers[optrInput.id][literals.open]);\n dropOptr.addEventListener(literals.change, this.eventHandlers[optrInput.id][literals.change]);\n dropOptr.appendTo(optrInput);\n var operator = this.getSelectedValue(selectedValue);\n return { fieldElement: fieldElement, operator: operator };\n };\n ExcelFilterBase.prototype.removeHandlersFromComponent = function (component) {\n if (component.element.classList.contains('e-dropdownlist')) {\n removeEventHandlers(component, [literals.open, literals.change], this);\n }\n else if (component.element.classList.contains('e-autocomplete')) {\n removeEventHandlers(component, [events.actionComplete, literals.focus], this);\n }\n };\n ExcelFilterBase.prototype.dropDownOpen = function (args) {\n args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n };\n ExcelFilterBase.prototype.dropDownValueChange = function (args) {\n if (args.element.id.includes('-xlfl-frstoptr')) {\n this.firstOperator = args.value.toString();\n }\n else {\n this.secondOperator = args.value.toString();\n }\n var valInput = args.element.closest('.e-xlfl-fields').children[1].querySelector('.e-control');\n var dropDownList = args.element['ej2_instances'][0];\n if (dropDownList.value === 'isempty' || dropDownList.value === 'isnotempty' ||\n dropDownList.value === 'isnull' || dropDownList.value === 'isnotnull') {\n valInput['ej2_instances'][0]['enabled'] = false;\n }\n else if (!isNullOrUndefined(valInput.getAttribute('disabled'))) {\n valInput['ej2_instances'][0]['enabled'] = true;\n }\n };\n /**\n * @hidden\n * @returns {FilterUI} returns filter UI\n */\n ExcelFilterBase.prototype.getFilterUIInfo = function () {\n return { firstOperator: this.firstOperator, secondOperator: this.secondOperator, field: this.options.field };\n };\n ExcelFilterBase.prototype.getSelectedValue = function (text) {\n var selectedField = new DataManager(this.optrData).executeLocal(new Query().where('text', 'equal', text));\n return !isNullOrUndefined(selectedField[0]) ? selectedField[0].value : '';\n };\n ExcelFilterBase.prototype.dropSelectedVal = function (col, predicates, isFirst) {\n var operator;\n if (predicates && predicates.length > 0) {\n operator = predicates.length === 2 ?\n (isFirst ? predicates[0].operator : predicates[1].operator) :\n (isFirst ? predicates[0].operator : undefined);\n }\n else if (isFirst && col.type === 'string' && !col.filter.operator) {\n operator = 'startswith';\n }\n else {\n operator = isFirst ? col.filter.operator || 'equal' : undefined;\n }\n return this.getSelectedText(operator);\n };\n ExcelFilterBase.prototype.getSelectedText = function (operator) {\n var selectedField = new DataManager(this.optrData).executeLocal(new Query().where('value', 'equal', operator));\n return !isNullOrUndefined(selectedField[0]) ? selectedField[0].text : '';\n };\n ExcelFilterBase.prototype.renderFilterUI = function (column, dlgConetntEle) {\n var predicates = this.existingPredicate[\"\" + column];\n var table = this.parent.createElement('table', { className: 'e-xlfl-table', attrs: { role: 'grid' } });\n dlgConetntEle.appendChild(table);\n var colGroup = this.parent.createElement(literals.colGroup);\n colGroup.innerHTML = '';\n table.appendChild(colGroup);\n //Renders first dropdown\n var optr = this.renderOperatorUI(column, table, '-xlfl-frstoptr', predicates, true);\n this.firstOperator = optr.operator;\n //Renders first value\n this.renderFlValueUI(column, optr, '-xlfl-frstvalue', predicates, true);\n var predicate = this.parent.createElement('tr', { className: 'e-xlfl-predicate', attrs: { role: 'row' } });\n table.appendChild(predicate);\n //Renders first radion button\n this.renderRadioButton(column, predicate, predicates);\n //Renders second dropdown\n optr = this.renderOperatorUI(column, table, '-xlfl-secndoptr', predicates, false);\n this.secondOperator = optr.operator;\n //Renders second text box\n this.renderFlValueUI(column, optr, '-xlfl-secndvalue', predicates, false);\n };\n ExcelFilterBase.prototype.renderRadioButton = function (column, tr, predicates) {\n var td = this.parent.createElement('td', { className: 'e-xlfl-radio', attrs: { 'colSpan': '2' } });\n tr.appendChild(td);\n var radioDiv = this.parent\n .createElement('div', { className: 'e-xlfl-radiodiv', attrs: { 'style': 'display: inline-block' } });\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n var frstpredicate = this.parent.createElement('input', { id: isComplex ? complexFieldName + 'e-xlfl-frstpredicate' : column + 'e-xlfl-frstpredicate', attrs: { 'type': 'radio' } });\n var secndpredicate = this.parent.createElement('input', { id: isComplex ? complexFieldName + 'e-xlfl-secndpredicate' : column + 'e-xlfl-secndpredicate', attrs: { 'type': 'radio' } });\n //appends into div\n radioDiv.appendChild(frstpredicate);\n radioDiv.appendChild(secndpredicate);\n td.appendChild(radioDiv);\n if (this.options.type === 'string') {\n this.renderMatchCase(column, tr, td, '-xlflmtcase', predicates);\n }\n // Initialize AND RadioButton component.\n var andRadio = new RadioButton({\n label: this.getLocalizedLabel('AND'),\n name: 'default', checked: true,\n enableRtl: this.parent.enableRtl,\n cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n });\n this.childRefs.push(andRadio);\n // Initialize OR RadioButton component.\n var orRadio = new RadioButton({\n label: this.getLocalizedLabel('OR'),\n name: 'default',\n enableRtl: this.parent.enableRtl,\n cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n });\n this.childRefs.push(orRadio);\n var flValue = predicates && predicates.length === 2 ? predicates[1].predicate : 'and';\n if (flValue === 'and') {\n andRadio.checked = true;\n orRadio.checked = false;\n }\n else {\n orRadio.checked = true;\n andRadio.checked = false;\n }\n // Render initialized RadioButton.\n andRadio.appendTo(frstpredicate);\n orRadio.appendTo(secndpredicate);\n andRadio.element.nextElementSibling.classList.add('e-xlfl-radio-and');\n orRadio.element.nextElementSibling.classList.add('e-xlfl-radio-or');\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ExcelFilterBase.prototype.removeObjects = function (elements) {\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var obj = elements_1[_i];\n if (obj && !obj.isDestroyed) {\n this.removeHandlersFromComponent(obj);\n obj.destroy();\n }\n }\n };\n // eslint-disable-next-line max-len\n ExcelFilterBase.prototype.renderFlValueUI = function (column, optr, elementId, predicates, isFirst) {\n var value = this.parent.createElement('td', { className: 'e-xlfl-value' });\n optr.fieldElement.appendChild(value);\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n var valueDiv = this.parent.createElement('div', { className: 'e-xlfl-valuediv' });\n var isFilteredCol = this.options.filteredColumns.some(function (col) { return column === col.field; });\n var fltrPredicates = this.options.filteredColumns.filter(function (col) { return col.field === column; });\n if (this.options.column.filterTemplate) {\n var data = {};\n var columnObj = this.options.column;\n if (isFilteredCol && elementId) {\n data = this.getExcelFilterData(elementId, data, columnObj, predicates, fltrPredicates);\n }\n var isReactCompiler = this.parent.isReact && typeof (this.options.column.filterTemplate) !== 'string';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.parent.parentDetails.parentInstObj.isReact;\n var tempID = this.parent.element.id + columnObj.uid + 'filterTemplate';\n if (isReactCompiler || isReactChild) {\n this.options.column.getFilterTemplate()(data, this.parent, 'filterTemplate', tempID, null, null, valueDiv);\n }\n else {\n var element = this.options.column.getFilterTemplate()(data, this.parent, 'filterTemplate', tempID);\n appendChildren(valueDiv, element);\n }\n if (isReactCompiler || isReactChild) {\n this.parent.renderTemplates(function () {\n valueDiv.querySelector('input').id = isComplex ? complexFieldName + elementId : column + elementId;\n value.appendChild(valueDiv);\n });\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this.parent.isAngular ? valueDiv.children[0] : valueDiv.querySelector('input')).id = isComplex ?\n complexFieldName + elementId : column + elementId;\n value.appendChild(valueDiv);\n }\n }\n else {\n var valueInput = this.parent\n .createElement('input', { id: isComplex ? complexFieldName + elementId : column + elementId });\n valueDiv.appendChild(valueInput);\n value.appendChild(valueDiv);\n var flValue = void 0;\n var predicate = void 0;\n if (predicates && predicates.length > 0) {\n predicate = predicates.length === 2 ?\n (isFirst ? predicates[0] : predicates[1]) :\n (isFirst ? predicates[0] : undefined);\n flValue = (predicate && predicate.operator === optr.operator) ? predicate.value : undefined;\n if (isNullOrUndefined(flValue)) {\n flValue = undefined;\n }\n }\n var types = {\n 'string': this.renderAutoComplete.bind(this),\n 'number': this.renderNumericTextBox.bind(this),\n 'date': this.renderDate.bind(this),\n 'dateonly': this.renderDate.bind(this),\n 'datetime': this.renderDateTime.bind(this)\n };\n types[this.options.type](this.options, column, valueInput, flValue, this.parent.enableRtl);\n }\n };\n ExcelFilterBase.prototype.getExcelFilterData = function (elementId, data, columnObj, predicates, fltrPredicates) {\n var predIndex = elementId === '-xlfl-frstvalue' ? 0 : 1;\n if (elementId === '-xlfl-frstvalue' || fltrPredicates.length > 1) {\n data = { column: predicates instanceof Array ? predicates[parseInt(predIndex.toString(), 10)] : predicates };\n var indx = this.options.column.columnData && fltrPredicates.length > 1 ?\n (this.options.column.columnData.length === 1 ? 0 : 1) : predIndex;\n data[this.options.field] = columnObj.foreignKeyValue ?\n this.options.column.columnData[parseInt(indx.toString(), 10)][columnObj.foreignKeyValue] :\n fltrPredicates[parseInt(indx.toString(), 10)].value;\n if (this.options.foreignKeyValue) {\n data[this.options.foreignKeyValue] = this.options.column\n .columnData[parseInt(indx.toString(), 10)][columnObj.foreignKeyValue];\n }\n }\n return data;\n };\n // eslint-disable-next-line max-len\n ExcelFilterBase.prototype.renderMatchCase = function (column, tr, matchCase, elementId, predicates) {\n var matchCaseDiv = this.parent.createElement('div', { className: 'e-xlfl-matchcasediv', attrs: { 'style': 'display: inline-block' } });\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n var matchCaseInput = this.parent.createElement('input', { id: isComplex ? complexFieldName + elementId : column + elementId, attrs: { 'type': 'checkbox' } });\n matchCaseDiv.appendChild(matchCaseInput);\n matchCase.appendChild(matchCaseDiv);\n var flValue = predicates && predicates.length > 0 ?\n (predicates && predicates.length === 2 ? predicates[1].matchCase : predicates[0].matchCase) :\n false;\n // Initialize Match Case check box.\n var checkbox = new CheckBox({\n label: this.getLocalizedLabel('MatchCase'),\n enableRtl: this.parent.enableRtl, checked: flValue,\n cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n });\n this.childRefs.push(checkbox);\n // Render initialized CheckBox.\n checkbox.appendTo(matchCaseInput);\n };\n // eslint-disable-next-line max-len\n ExcelFilterBase.prototype.renderDate = function (options, column, inputValue, fValue, isRtl) {\n var format = getCustomDateFormat(options.format, options.type) || options.format;\n var datePicker = new DatePicker(extend({\n format: format,\n cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n placeholder: this.getLocalizedLabel('CustomFilterDatePlaceHolder'),\n width: '100%',\n enableRtl: isRtl,\n value: new Date(fValue),\n locale: this.parent.locale\n }, options.column.filter.params));\n this.childRefs.push(datePicker);\n datePicker.appendTo(inputValue);\n };\n // eslint-disable-next-line max-len\n ExcelFilterBase.prototype.renderDateTime = function (options, column, inputValue, fValue, isRtl) {\n var format = getCustomDateFormat(options.format, options.type);\n var dateTimePicker = new DateTimePicker(extend({\n format: format,\n cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n placeholder: this.getLocalizedLabel('CustomFilterDatePlaceHolder'),\n width: '100%',\n enableRtl: isRtl,\n value: new Date(fValue),\n locale: this.parent.locale\n }, options.column.filter.params));\n this.childRefs.push(dateTimePicker);\n dateTimePicker.appendTo(inputValue);\n };\n ExcelFilterBase.prototype.completeAction = function (e) {\n e.result = distinctStringValues(e.result);\n };\n // eslint-disable-next-line max-len\n ExcelFilterBase.prototype.renderNumericTextBox = function (options, column, inputValue, fValue, isRtl) {\n var numericTextBox = new NumericTextBox(extend({\n format: options.format,\n placeholder: this.getLocalizedLabel('CustomFilterPlaceHolder'),\n enableRtl: isRtl,\n value: fValue,\n locale: this.parent.locale,\n cssClass: this.parent.cssClass ? this.parent.cssClass : null\n }, options.column.filter.params));\n this.childRefs.push(numericTextBox);\n numericTextBox.appendTo(inputValue);\n };\n // eslint-disable-next-line max-len\n ExcelFilterBase.prototype.renderAutoComplete = function (options, column, inputValue, fValue, isRtl) {\n var colObj = this.options.column;\n var isForeignColumn = this.isForeignColumn(colObj);\n var dataSource = isForeignColumn ? colObj.dataSource : options.dataSource;\n var fields = { value: isForeignColumn ? colObj.foreignKeyValue : column };\n var actObj = new AutoComplete(extend({\n dataSource: dataSource instanceof DataManager ? dataSource : new DataManager(dataSource),\n fields: fields,\n query: this.getQuery(),\n sortOrder: 'Ascending',\n locale: this.parent.locale,\n cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n autofill: true,\n placeholder: this.getLocalizedLabel('CustomFilterPlaceHolder'),\n enableRtl: isRtl,\n text: fValue\n }, colObj.filter.params));\n if (dataSource && 'result' in dataSource) {\n var defObj = eventPromise({ requestType: 'stringfilterrequest' }, this.getQuery());\n this.parent.trigger(events.dataStateChange, defObj.state);\n var def = defObj.deffered;\n def.promise.then(function (e) {\n actObj.dataSource = new DataManager(e);\n });\n }\n this.childRefs.push(actObj);\n var evt = { 'actionComplete': this.acActionComplete(actObj, column), 'focus': this.acFocus(actObj, column, options, inputValue) };\n registerEventHandlers(inputValue.id, [events.actionComplete, literals.focus], evt, this);\n actObj.addEventListener(literals.focus, this.eventHandlers[inputValue.id][literals.focus]);\n actObj.addEventListener(events.actionComplete, this.eventHandlers[inputValue.id][events.actionComplete]);\n actObj.appendTo(inputValue);\n };\n ExcelFilterBase.prototype.acActionComplete = function (actObj, column) {\n return function (e) {\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n e.result = e.result.filter(function (obj, index, arr) {\n return arr.map(function (mapObject) {\n return isComplex ? performComplexDataOperation(actObj.fields.value, mapObject)\n : mapObject[actObj.fields.value];\n }).indexOf(isComplex ? performComplexDataOperation(actObj.fields.value, obj) :\n obj[actObj.fields.value]) === index;\n });\n };\n };\n ExcelFilterBase.prototype.acFocus = function (actObj, column, options, inputValue) {\n var _this = this;\n return function () {\n var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n var columnvalue = isComplex ? complexFieldName : column;\n actObj.filterType = _this.dlgDiv.querySelector('#' + columnvalue +\n (inputValue.id === (columnvalue + '-xlfl-frstvalue') ?\n '-xlfl-frstoptr' :\n '-xlfl-secndoptr')).ej2_instances[0].value;\n actObj.ignoreCase = options.type === 'string' ?\n !_this.dlgDiv.querySelector('#' + columnvalue + '-xlflmtcase').ej2_instances[0].checked :\n true;\n actObj.filterType = !isNullOrUndefined(actObj.filterType) ? actObj.filterType :\n 'equal';\n };\n };\n return ExcelFilterBase;\n}(CheckBoxFilterBase));\nexport { ExcelFilterBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ExcelFilterBase } from '../common/excel-filter-base';\nimport { CheckBoxFilter } from './checkbox-filter';\nimport * as events from '../base/constant';\n/**\n * @hidden\n * `ExcelFilter` module is used to handle filtering action.\n */\nvar ExcelFilter = /** @class */ (function (_super) {\n __extends(ExcelFilter, _super);\n /**\n * Constructor for excelbox filtering module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {FilterSettings} filterSettings - specifies the Filtersettings\n * @param {ServiceLocator} serviceLocator - specifies the serviceLocator\n * @param {object} customFltrOperators - specifies the customFltrOperators\n * @hidden\n */\n function ExcelFilter(parent, filterSettings, serviceLocator, customFltrOperators) {\n var _this = _super.call(this, parent, filterSettings, serviceLocator) || this;\n _this.parent = parent;\n _this.isresetFocus = true;\n _this.excelFilterBase = new ExcelFilterBase(parent, customFltrOperators);\n return _this;\n }\n /**\n * To destroy the excel filter.\n *\n * @returns {void}\n * @hidden\n */\n ExcelFilter.prototype.destroy = function () {\n this.excelFilterBase.closeDialog();\n };\n ExcelFilter.prototype.openDialog = function (options) {\n this.excelFilterBase.openDialog(options);\n };\n ExcelFilter.prototype.closeDialog = function () {\n this.excelFilterBase.closeDialog();\n if (this.isresetFocus) {\n this.parent.notify(events.restoreFocus, {});\n }\n };\n ExcelFilter.prototype.clearCustomFilter = function (col) {\n this.excelFilterBase.clearFilter(col);\n };\n ExcelFilter.prototype.closeResponsiveDialog = function (isCustomFilter) {\n if (isCustomFilter) {\n this.excelFilterBase.removeDialog();\n }\n else {\n this.closeDialog();\n }\n };\n ExcelFilter.prototype.applyCustomFilter = function (args) {\n if (!args.isCustomFilter) {\n this.excelFilterBase.fltrBtnHandler();\n this.excelFilterBase.closeDialog();\n }\n else {\n this.excelFilterBase.filterBtnClick(args.col.field);\n }\n };\n ExcelFilter.prototype.filterByColumn = function (fieldName, firstOperator, firstValue, predicate, matchCase, ignoreAccent, secondOperator, secondValue) {\n this.excelFilterBase.filterByColumn(fieldName, firstOperator, firstValue, predicate, matchCase, ignoreAccent, secondOperator, secondValue);\n };\n /**\n * @returns {FilterUI} returns the filterUI\n * @hidden\n */\n ExcelFilter.prototype.getFilterUIInfo = function () {\n return this.excelFilterBase.getFilterUIInfo();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n */\n ExcelFilter.prototype.getModuleName = function () {\n return 'excelFilter';\n };\n return ExcelFilter;\n}(CheckBoxFilter));\nexport { ExcelFilter };\n","import { EventHandler, isNullOrUndefined, extend, closest, getValue } from '@syncfusion/ej2-base';\nimport { getActualPropFromColl, isActionPrevent, getColumnByForeignKeyValue } from '../base/util';\nimport { remove, matches } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport { CellType, ResponsiveDialogAction } from '../base/enum';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { Cell } from '../models/cell';\nimport { Row } from '../models/row';\nimport { FilterCellRenderer } from '../renderer/filter-cell-renderer';\nimport { parentsUntil, addFixedColumnBorder, applyStickyLeftRightPosition } from '../base/util';\nimport { FilterMenuRenderer } from '../renderer/filter-menu-renderer';\nimport { CheckBoxFilter } from '../actions/checkbox-filter';\nimport { ExcelFilter } from '../actions/excel-filter';\nimport * as literals from '../base/string-literals';\nimport { Input } from '@syncfusion/ej2-inputs';\n/**\n *\n * The `Filter` module is used to handle filtering action.\n */\nvar Filter = /** @class */ (function () {\n /**\n * Constructor for Grid filtering module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {FilterSettings} filterSettings - specifies the filterSettings\n * @param {ServiceLocator} serviceLocator - specifes the serviceLocator\n * @hidden\n */\n function Filter(parent, filterSettings, serviceLocator) {\n this.predicate = 'and';\n this.contentRefresh = true;\n this.filterByMethod = true;\n this.refresh = true;\n this.values = {};\n this.operators = {};\n this.cellText = {};\n this.nextFlMenuOpen = '';\n this.type = { 'Menu': FilterMenuRenderer, 'CheckBox': CheckBoxFilter, 'Excel': ExcelFilter };\n /** @hidden */\n this.filterOperators = {\n contains: 'contains', endsWith: 'endswith', equal: 'equal', greaterThan: 'greaterthan', greaterThanOrEqual: 'greaterthanorequal',\n lessThan: 'lessthan', lessThanOrEqual: 'lessthanorequal', notEqual: 'notequal', startsWith: 'startswith', wildCard: 'wildcard',\n isNull: 'isnull', notNull: 'notnull', like: 'like'\n };\n this.fltrDlgDetails = { field: '', isOpen: false };\n /** @hidden */\n this.skipNumberInput = ['=', ' ', '!'];\n this.skipStringInput = ['>', '<', '='];\n this.actualPredicate = {};\n this.parent = parent;\n this.filterSettings = filterSettings;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n this.setFullScreenDialog();\n }\n /**\n * To render filter bar when filtering enabled.\n *\n * @param {NotifyArgs} e - specifies the NotifyArgs\n * @returns {void}\n * @hidden\n */\n Filter.prototype.render = function (e) {\n if (DataUtil.getObject('args.isFrozen', e)) {\n return;\n }\n var gObj = this.parent;\n this.l10n = this.serviceLocator.getService('localization');\n this.getLocalizedCustomOperators();\n if (this.parent.filterSettings.type === 'FilterBar') {\n if (gObj.columns.length) {\n var fltrElem = this.parent.element.querySelector('.e-filterbar');\n if (fltrElem) {\n remove(fltrElem);\n }\n var rowRenderer = new RowRenderer(this.serviceLocator, CellType.Filter, gObj);\n var cellrender = this.serviceLocator.getService('cellRendererFactory');\n cellrender.addCellRenderer(CellType.Filter, new FilterCellRenderer(this.parent, this.serviceLocator));\n this.valueFormatter = this.serviceLocator.getService('valueFormatter');\n rowRenderer.element = this.parent.createElement('tr', { className: 'e-filterbar', attrs: { role: 'row' } });\n var row = this.generateRow();\n row.data = this.values;\n this.parent.getHeaderContent().querySelector('thead:not(.e-masked-thead)').appendChild(rowRenderer.element);\n var rowdrag = this.parent.element.querySelector('.e-rowdragheader');\n this.element = rowRenderer.render(row, gObj.getColumns(), null, null, rowRenderer.element);\n if (this.element.querySelectorAll('.e-leftfreeze').length &&\n (this.element.querySelectorAll('.e-indentcell').length || this.element.querySelectorAll('.e-grouptopleftcell').length)) {\n var td = this.element.querySelectorAll('.e-indentcell, .e-grouptopleftcell');\n for (var i = 0; i < td.length; i++) {\n td[parseInt(i.toString(), 10)].classList.add('e-leftfreeze');\n applyStickyLeftRightPosition(td[parseInt(i.toString(), 10)], i * 30, this.parent.enableRtl, 'Left');\n }\n }\n addFixedColumnBorder(this.element);\n var detail = this.element.querySelector('.e-detailheadercell');\n if (detail) {\n detail.className = 'e-filterbarcell e-mastercell';\n }\n if (rowdrag) {\n if (rowdrag.classList.contains('e-leftfreeze')) {\n rowdrag.className = 'e-dragheadercell e-mastercell e-leftfreeze';\n }\n else {\n rowdrag.className = 'e-filterbarcell e-mastercell';\n }\n }\n var gCells = [].slice.call(this.element.getElementsByClassName('e-grouptopleftcell'));\n if (gCells.length) {\n gCells[gCells.length - 1].classList.add('e-lastgrouptopleftcell');\n }\n this.wireEvents();\n this.parent.notify(events.freezeRender, { case: 'filter' });\n }\n }\n };\n /**\n * To show the responsive custom filter dialog\n *\n * @param {boolean} enable - specifes dialog open\n * @returns {void}\n * @hidden\n */\n Filter.prototype.showCustomFilter = function (enable) {\n this.responsiveDialogRenderer.isCustomDialog = enable;\n this.responsiveDialogRenderer.showResponsiveDialog(this.column);\n };\n Filter.prototype.renderResponsiveChangeAction = function (args) {\n this.responsiveDialogRenderer.action = args.action;\n };\n /**\n * To create the filter module.\n *\n * @param {Column} col - specifies the filtering column name\n * @returns {void}\n * @hidden\n */\n Filter.prototype.setFilterModel = function (col) {\n var type = col.filter.type || this.parent.filterSettings.type;\n this.filterModule = new this.type[\"\" + type](this.parent, this.parent.filterSettings, this.serviceLocator, this.customOperators, this);\n };\n /**\n * To destroy the filter bar.\n *\n * @returns {void}\n * @hidden\n */\n Filter.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.' + literals.gridHeader) && !gridElement.querySelector('.' + literals.gridContent))) {\n return;\n }\n if (this.filterModule) {\n this.filterModule.destroy();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!this.parent.refreshing && (this.parent.isDestroyed || !this.parent.allowFiltering)) {\n this.filterSettings.columns = [];\n }\n this.updateFilterMsg();\n this.removeEventListener();\n this.unWireEvents();\n if (this.filterSettings.type === 'FilterBar' && this.filterSettings.showFilterBarOperator) {\n var dropdownlist = [].slice.call(this.element.getElementsByClassName('e-filterbaroperator'));\n for (var i = 0; i < dropdownlist.length; i++) {\n if (dropdownlist[parseInt(i.toString(), 10)].ej2_instances[0]) {\n dropdownlist[parseInt(i.toString(), 10)].ej2_instances[0].destroy();\n }\n }\n }\n if (this.element) {\n if (this.element.parentElement) {\n remove(this.element);\n }\n var filterBarElement = this.parent.getHeaderContent().querySelector('.e-filterbar');\n if (filterBarElement) {\n remove(filterBarElement);\n }\n }\n };\n Filter.prototype.setFullScreenDialog = function () {\n if (this.serviceLocator) {\n this.serviceLocator.registerAdaptiveService(this, this.parent.enableAdaptiveUI, ResponsiveDialogAction.isFilter);\n }\n };\n Filter.prototype.generateRow = function () {\n var options = {};\n var row = new Row(options);\n row.cells = this.generateCells();\n return row;\n };\n Filter.prototype.generateCells = function () {\n //TODO: generate dummy column for group, detail, stacked row here for filtering;\n var cells = [];\n if (this.parent.allowGrouping) {\n for (var c = 0, len = this.parent.groupSettings.columns.length; c < len; c++) {\n cells.push(this.generateCell({}, CellType.HeaderIndent));\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n cells.push(this.generateCell({}, CellType.DetailHeader));\n }\n if (this.parent.isRowDragable() && this.parent.getFrozenMode() !== 'Right') {\n cells.push(this.generateCell({}, CellType.RowDragHIcon));\n }\n for (var _i = 0, _a = this.parent.getColumns(); _i < _a.length; _i++) {\n var dummy = _a[_i];\n cells.push(this.generateCell(dummy));\n }\n if (this.parent.isRowDragable() && this.parent.getFrozenMode() === 'Right') {\n cells.push(this.generateCell({}, CellType.RowDragHIcon));\n }\n return cells;\n };\n Filter.prototype.generateCell = function (column, cellType) {\n var opt = {\n 'visible': column.visible,\n 'isDataCell': false,\n 'rowId': '',\n 'column': column,\n 'cellType': cellType ? cellType : CellType.Filter,\n 'attributes': { title: this.l10n.getConstant('FilterbarTitle') }\n };\n return new Cell(opt);\n };\n /**\n * To update filterSettings when applying filter.\n *\n * @returns {void}\n * @hidden\n */\n Filter.prototype.updateModel = function () {\n var col = this.column.isForeignColumn() ? this.parent.getColumnByUid(this.column.uid) :\n this.parent.getColumnByField(this.fieldName);\n this.filterObjIndex = this.getFilteredColsIndexByField(col);\n this.prevFilterObject = this.filterSettings.columns[this.filterObjIndex];\n var arrayVal = Array.isArray(this.value) ? this.value : [this.value];\n var moduleName = this.parent.dataSource.adaptor && this.parent.dataSource.adaptor.getModuleName ? this.parent.dataSource.adaptor.getModuleName() : undefined;\n for (var i = 0, len = arrayVal.length; i < len; i++) {\n var field = col.isForeignColumn() ? col.foreignKeyValue : this.fieldName;\n var isMenuNotEqual = this.operator === 'notequal';\n this.currentFilterObject = {\n field: field, uid: col.uid, isForeignKey: col.isForeignColumn(), operator: this.operator,\n value: arrayVal[parseInt(i.toString(), 10)], predicate: this.predicate,\n matchCase: this.matchCase, ignoreAccent: this.ignoreAccent, actualFilterValue: {}, actualOperator: {}\n };\n var index = this.getFilteredColsIndexByField(col);\n if (index > -1 && !Array.isArray(this.value)) {\n this.filterSettings.columns[parseInt(index.toString(), 10)] = this.currentFilterObject;\n }\n else {\n this.filterSettings.columns.push(this.currentFilterObject);\n }\n if (!this.column.isForeignColumn() && isNullOrUndefined(this.value) && (this.operator === 'equal' ||\n this.operator === 'notequal') && (moduleName !== 'ODataAdaptor' && moduleName !== 'ODataV4Adaptor')) {\n for (var i_1 = 0; i_1 < this.filterSettings.columns.length; i_1++) {\n if (this.filterSettings.columns[\"\" + i_1].field === field &&\n (this.filterSettings.columns[\"\" + i_1].operator === 'equal' || this.filterSettings.columns[\"\" + i_1].operator === 'notequal')\n && isNullOrUndefined(this.filterSettings.columns[\"\" + i_1].value)) {\n this.filterSettings.columns.splice(i_1, 1);\n i_1 = i_1 - 1;\n }\n }\n if (col.type === 'string') {\n this.filterSettings.columns.push({\n field: field, ignoreAccent: this.ignoreAccent, matchCase: this.matchCase,\n operator: this.operator, predicate: isMenuNotEqual ? 'and' : 'or', value: ''\n });\n }\n this.filterSettings.columns.push({\n field: field, ignoreAccent: this.ignoreAccent, matchCase: this.matchCase,\n operator: this.operator, predicate: isMenuNotEqual ? 'and' : 'or', value: undefined\n });\n this.filterSettings.columns.push({\n field: field, ignoreAccent: this.ignoreAccent, matchCase: this.matchCase,\n operator: this.operator, predicate: isMenuNotEqual ? 'and' : 'or', value: null\n });\n }\n }\n // eslint-disable-next-line no-self-assign\n this.filterSettings.columns = this.filterSettings.columns;\n this.parent.dataBind();\n };\n Filter.prototype.getFilteredColsIndexByField = function (col) {\n var cols = this.filterSettings.columns;\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[parseInt(i.toString(), 10)].uid === col.uid || (col.isForeignColumn()\n && this.parent.getColumnByUid(col.uid).field === col.foreignKeyValue)) {\n return i;\n }\n }\n return -1;\n };\n /**\n * To trigger action complete event.\n *\n * @param {NotifyArgs} e - specifies the NotifyArgs\n * @returns {void}\n * @hidden\n */\n Filter.prototype.onActionComplete = function (e) {\n var args = !this.isRemove ? {\n currentFilterObject: this.currentFilterObject,\n /* tslint:disable:no-string-literal */\n currentFilteringColumn: !isNullOrUndefined(this.column) ? this.column.field : undefined,\n /* tslint:enable:no-string-literal */\n columns: this.filterSettings.columns, requestType: 'filtering', type: events.actionComplete\n } : {\n requestType: 'filtering', type: events.actionComplete\n };\n this.parent.trigger(events.actionComplete, extend(e, args));\n this.isRemove = false;\n };\n Filter.prototype.wireEvents = function () {\n EventHandler.add(this.parent.getHeaderContent(), 'keyup', this.keyUpHandlerImmediate, this);\n };\n Filter.prototype.unWireEvents = function () {\n EventHandler.remove(this.parent.getHeaderContent(), 'keyup', this.keyUpHandlerImmediate);\n };\n Filter.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.parent.getHeaderTable().classList.add('e-sortfilter');\n this.render();\n }\n };\n Filter.prototype.refreshFilterValue = function () {\n this.parent.removeEventListener(events.beforeDataBound, this.refreshFilterValueFn);\n if (this.filterSettings.type === 'FilterBar' && this.filterSettings.columns.length &&\n !this.parent.getCurrentViewRecords().length) {\n this.initialEnd();\n }\n };\n Filter.prototype.initialEnd = function () {\n this.parent.off(events.contentReady, this.initialEnd);\n if (this.parent.getColumns().length && this.filterSettings.columns.length) {\n var gObj = this.parent;\n this.contentRefresh = false;\n this.initialLoad = true;\n for (var _i = 0, _a = gObj.filterSettings.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n this.filterByColumn(col.field, col.operator, col.value, col.predicate, col.matchCase, col.ignoreAccent, col.actualFilterValue, col.actualOperator, col.isForeignKey);\n }\n this.initialLoad = false;\n this.updateFilterMsg();\n this.contentRefresh = true;\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Filter.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.setFullScreenDialog, this.setFullScreenDialog, this);\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.filterComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.keyPressed, this.keyUpHandler, this);\n this.parent.on(events.columnPositionChanged, this.columnPositionChanged, this);\n this.parent.on(events.headerRefreshed, this.render, this);\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.parent.on(events.filterMenuClose, this.filterMenuClose, this);\n this.parent.on(events.renderResponsiveChangeAction, this.renderResponsiveChangeAction, this);\n this.docClickHandler = this.clickHandler.bind(this);\n EventHandler.add(document, 'click', this.docClickHandler, this);\n EventHandler.add(this.parent.element, 'mousedown', this.refreshClearIcon, this);\n this.parent.on(events.filterOpen, this.columnMenuFilter, this);\n this.parent.on(events.click, this.filterIconClickHandler, this);\n this.parent.on('persist-data-changed', this.initialEnd, this);\n this.parent.on(events.closeFilterDialog, this.clickHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.refreshFilterValueFn = this.refreshFilterValue.bind(this);\n this.parent.addEventListener(events.beforeDataBound, this.refreshFilterValueFn);\n };\n /**\n * @returns {void}\n * @hidden\n */\n Filter.prototype.removeEventListener = function () {\n EventHandler.remove(document, 'click', this.docClickHandler);\n EventHandler.remove(this.parent.element, 'mousedown', this.refreshClearIcon);\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.setFullScreenDialog, this.setFullScreenDialog);\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.filterComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.keyPressed, this.keyUpHandler);\n this.parent.off(events.columnPositionChanged, this.columnPositionChanged);\n this.parent.off(events.headerRefreshed, this.render);\n this.parent.off(events.filterOpen, this.columnMenuFilter);\n this.parent.off(events.filterMenuClose, this.filterMenuClose);\n this.parent.off(events.renderResponsiveChangeAction, this.renderResponsiveChangeAction);\n this.parent.off(events.click, this.filterIconClickHandler);\n this.parent.off(events.closeFilterDialog, this.clickHandler);\n this.parent.off(events.destroy, this.destroy);\n };\n Filter.prototype.refreshClearIcon = function (e) {\n if (this.parent.allowFiltering && this.parent.filterSettings.type === 'FilterBar' &&\n e.target.closest('th') && e.target.closest('th').classList.contains('e-filterbarcell') &&\n e.target.classList.contains('e-clear-icon')) {\n var targetText = e.target.previousElementSibling;\n Input.setValue(null, targetText, 'Never', true);\n if (this.filterSettings.mode === 'Immediate') {\n this.removeFilteredColsByField(targetText.id.slice(0, -14)); //Length of _filterBarcell = 14\n }\n }\n };\n Filter.prototype.filterMenuClose = function () {\n this.fltrDlgDetails.isOpen = false;\n };\n /**\n * Filters the Grid row by fieldName, filterOperator, and filterValue.\n *\n * @param {string} fieldName - Defines the field name of the filter column.\n * @param {string} filterOperator - Defines the operator to filter records.\n * @param {string | number | Date | boolean} filterValue - Defines the value which is used to filter records.\n * @param {string} predicate - Defines the relationship of one filter query with another by using AND or OR predicate.\n * @param {boolean} matchCase - If match case is set to true, then the filter records\n * the exact match or
filters records that are case insensitive (uppercase and lowercase letters treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent set to true, 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 * @param {boolean} isForeignColumn - Defines whether it is a foreign key column.\n * @returns {void}\n */\n Filter.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator, isForeignColumn) {\n var _this = this;\n var gObj = this.parent;\n var filterCell;\n this.column = gObj.grabColumnByFieldFromAllCols(fieldName, isForeignColumn);\n if (this.filterSettings.type === 'FilterBar' && this.filterSettings.showFilterBarOperator\n && isNullOrUndefined(this.column.filterBarTemplate) && isNullOrUndefined(this.column.filterTemplate)) {\n filterOperator = this.getOperatorName(fieldName);\n }\n if (filterOperator === 'like' && filterValue && filterValue.indexOf('%') === -1) {\n filterValue = '%' + filterValue + '%';\n }\n if (!this.column) {\n return;\n }\n if (this.filterSettings.type === 'FilterBar') {\n filterCell = gObj.getHeaderContent().querySelector('[id=\\'' + this.column.field + '_filterBarcell\\']');\n }\n if (!isNullOrUndefined(this.column.allowFiltering) && !this.column.allowFiltering) {\n this.parent.log('action_disabled_column', { moduleName: this.getModuleName(), columnName: this.column.headerText });\n return;\n }\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, {\n instance: this, handler: this.filterByColumn, arg1: fieldName, arg2: filterOperator, arg3: filterValue, arg4: predicate,\n arg5: matchCase, arg6: ignoreAccent, arg7: actualFilterValue, arg8: actualOperator\n });\n return;\n }\n this.predicate = predicate ? predicate : Array.isArray(filterValue) ? 'or' : 'and';\n this.value = filterValue;\n this.matchCase = matchCase || false;\n this.ignoreAccent = this.ignoreAccent = !isNullOrUndefined(ignoreAccent) ? ignoreAccent : this.parent.filterSettings.ignoreAccent;\n this.fieldName = fieldName;\n this.operator = filterOperator;\n filterValue = !isNullOrUndefined(filterValue) ? filterValue.toString() : filterValue;\n if (filterValue === '') {\n filterValue = null;\n }\n if (this.column.type === 'number' || this.column.type === 'date') {\n this.matchCase = true;\n }\n if (filterCell && this.filterSettings.type === 'FilterBar') {\n if ((filterValue && filterValue.length < 1) || (!this.filterByMethod &&\n this.checkForSkipInput(this.column, filterValue))) {\n this.filterStatusMsg = (filterValue && filterValue.length < 1) ? '' : this.l10n.getConstant('InvalidFilterMessage');\n this.updateFilterMsg();\n return;\n }\n if (filterCell.value !== filterValue) {\n filterCell.value = filterValue;\n }\n }\n if (!isNullOrUndefined(this.column.format)) {\n this.applyColumnFormat(filterValue);\n if (this.initialLoad && this.filterSettings.type === 'FilterBar') {\n filterCell.value = this.values[this.column.field];\n }\n }\n else {\n this.values[this.column.field] = filterValue; //this line should be above updateModel\n }\n var predObj = {\n field: this.fieldName,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: this.operator,\n value: this.value,\n type: this.column.type\n };\n var filterColumn = this.parent.filterSettings.columns.filter(function (fColumn) {\n return (fColumn.field === _this.fieldName);\n });\n if (filterColumn.length > 1 && !isNullOrUndefined(this.actualPredicate[this.fieldName])) {\n this.actualPredicate[this.fieldName].push(predObj);\n }\n else {\n this.actualPredicate[this.fieldName] = [predObj];\n }\n if (this.checkAlreadyColFiltered(this.column.field)) {\n return;\n }\n this.updateModel();\n };\n Filter.prototype.applyColumnFormat = function (filterValue) {\n var _this = this;\n var getFlvalue = (this.column.type === 'date' || this.column.type === 'datetime' || this.column.type === 'dateonly') ?\n new Date(filterValue) : parseFloat(filterValue);\n if ((this.column.type === 'date' || this.column.type === 'datetime' || this.column.type === 'dateonly') && filterValue &&\n Array.isArray(this.value) && filterValue.split(',').length > 1) {\n this.values[this.column.field] = ((filterValue).split(',')).map(function (val) {\n if (val === '') {\n val = null;\n }\n return _this.setFormatForFlColumn(new Date(val), _this.column);\n });\n }\n else {\n this.values[this.column.field] = this.setFormatForFlColumn(getFlvalue, this.column);\n }\n };\n // To skip the second time request to server while applying initial filtering - EJ2-44361\n Filter.prototype.skipUid = function (col) {\n var flag = true;\n var colLen = Object.keys((col));\n for (var i = 0; i < colLen.length; i++) {\n var key = Object.keys(col[colLen[parseInt(i.toString(), 10)]]);\n if (key.length === 1 && key[0] === 'uid') {\n flag = false;\n }\n }\n return flag;\n };\n Filter.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'columns':\n // eslint-disable-next-line no-case-declarations\n var col = 'columns';\n // eslint-disable-next-line no-case-declarations\n var args = {\n currentFilterObject: this.currentFilterObject, currentFilteringColumn: this.column ?\n this.column.field : undefined, action: 'filter', columns: this.filterSettings.columns,\n requestType: 'filtering', type: events.actionBegin, cancel: false\n };\n if (this.contentRefresh && this.skipUid(e.properties[\"\" + col])) {\n this.parent.notify(events.modelChanged, args);\n if (args.cancel) {\n if ((this.filterSettings.type === 'CheckBox' || this.filterSettings.type === 'Excel')) {\n this.filterSettings.columns = (this.actualData.length <= 1) ? this.checkboxPrevFilterObject :\n this.checkboxFilterObject;\n this.actualPredicate[this.column.field] = this.filterSettings.columns;\n var col_1 = this.parent.getColumnByField(this.column.field);\n var iconClass = this.parent.showColumnMenu && col_1.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n var filterIconElement = this.parent.getColumnHeaderByField(this.column.field)\n .querySelector(iconClass);\n if (this.checkboxPrevFilterObject.length === 0) {\n filterIconElement.classList.remove('e-filtered');\n }\n else {\n filterIconElement.classList.add('e-filtered');\n }\n }\n else {\n if (isNullOrUndefined(this.prevFilterObject)) {\n this.filterSettings.columns.splice(this.filterSettings.columns.length - 1, 1);\n }\n else {\n this.filterSettings.columns[this.filterObjIndex] = this.prevFilterObject;\n }\n }\n return;\n }\n this.updateFilterIcon();\n this.refreshFilterSettings();\n this.updateFilterMsg();\n this.updateFilter();\n }\n break;\n case 'showFilterBarStatus':\n if (e.properties[\"\" + prop]) {\n this.updateFilterMsg();\n }\n else if (this.parent.allowPaging) {\n this.parent.updateExternalMessage('');\n }\n break;\n case 'showFilterBarOperator':\n case 'type':\n this.parent.refreshHeader();\n this.refreshFilterSettings();\n if (this.parent.height === '100%') {\n this.parent.scrollModule.refresh();\n }\n break;\n }\n }\n };\n Filter.prototype.refreshFilterSettings = function () {\n if (this.filterSettings.type === 'FilterBar') {\n for (var i = 0; i < this.filterSettings.columns.length; i++) {\n this.column = this.parent.grabColumnByUidFromAllCols(this.filterSettings.columns[parseInt(i.toString(), 10)].uid);\n var filterValue = this.filterSettings.columns[parseInt(i.toString(), 10)].value;\n filterValue = !isNullOrUndefined(filterValue) && filterValue.toString();\n if (!isNullOrUndefined(this.column.format)) {\n this.applyColumnFormat(filterValue);\n }\n else {\n var key = this.filterSettings.columns[parseInt(i.toString(), 10)].field;\n this.values[\"\" + key] = this.filterSettings.columns[parseInt(i.toString(), 10)].value;\n }\n var filterElement = this.getFilterBarElement(this.column.field);\n if (filterElement) {\n if (this.cellText[this.filterSettings.columns[parseInt(i.toString(), 10)].field] !== ''\n && !isNullOrUndefined(this.cellText[this.filterSettings.columns[parseInt(i.toString(), 10)].field])) {\n filterElement.value = this.cellText[this.column.field];\n }\n else {\n filterElement.value = this.filterSettings.columns[parseInt(i.toString(), 10)].value;\n }\n }\n }\n if (this.filterSettings.columns.length === 0) {\n var col = this.parent.getColumns();\n for (var i = 0; i < col.length; i++) {\n var filterElement = this.getFilterBarElement(col[parseInt(i.toString(), 10)].field);\n if (filterElement && filterElement.value !== '') {\n filterElement.value = '';\n delete this.values[col[parseInt(i.toString(), 10)].field];\n }\n }\n }\n }\n };\n Filter.prototype.updateFilterIcon = function () {\n if (this.filterSettings.columns.length === 0 && this.parent.element.querySelector('.e-filtered')) {\n var fltrIconElement = [].slice.call(this.parent.element.getElementsByClassName('e-filtered'));\n for (var i = 0, len = fltrIconElement.length; i < len; i++) {\n fltrIconElement[parseInt(i.toString(), 10)].classList.remove('e-filtered');\n }\n }\n };\n Filter.prototype.getFilterBarElement = function (col) {\n var selector = '[id=\\'' + col + '_filterBarcell\\']';\n var filterElement;\n if (selector && !isNullOrUndefined(this.element)) {\n filterElement = this.element.querySelector(selector);\n }\n return filterElement;\n };\n /**\n * @private\n * @returns {void}\n */\n Filter.prototype.refreshFilter = function () {\n this.refreshFilterSettings();\n this.updateFilterMsg();\n };\n /**\n * Clears all the filtered rows of the Grid.\n *\n * @param {string[]} fields - returns the fields\n * @returns {void}\n */\n Filter.prototype.clearFiltering = function (fields) {\n var _this = this;\n var cols = getActualPropFromColl(this.filterSettings.columns);\n if (!isNullOrUndefined(fields)) {\n this.refresh = false;\n fields.forEach(function (field) { _this.removeFilteredColsByField(field, false); });\n this.parent.setProperties({ filterSettings: { columns: this.filterSettings.columns } }, true);\n this.parent.renderModule.refresh();\n this.refresh = true;\n return;\n }\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, { instance: this, handler: this.clearFiltering });\n return;\n }\n for (var i = 0; i < cols.length; i++) {\n cols[parseInt(i.toString(), 10)].uid = cols[parseInt(i.toString(), 10)].uid\n || this.parent.getColumnByField(cols[parseInt(i.toString(), 10)].field).uid;\n }\n var colUid = cols.map(function (f) { return f.uid; });\n var filteredcols = colUid.filter(function (item, pos) { return colUid.indexOf(item) === pos; });\n this.refresh = false;\n for (var i = 0, len = filteredcols.length; i < len; i++) {\n this.removeFilteredColsByField(this.parent.getColumnByUid(filteredcols[parseInt(i.toString(), 10)]).field, false);\n }\n this.refresh = true;\n if (filteredcols.length) {\n this.parent.renderModule.refresh();\n }\n if (this.parent.filterSettings.columns.length === 0 && this.parent.element.querySelector('.e-filtered')) {\n var fltrElement = [].slice.call(this.parent.element.getElementsByClassName('e-filtered'));\n for (var i = 0, len = fltrElement.length; i < len; i++) {\n fltrElement[0].classList.remove('e-filtered');\n }\n }\n this.isRemove = true;\n this.filterStatusMsg = '';\n this.updateFilterMsg();\n };\n Filter.prototype.checkAlreadyColFiltered = function (field) {\n var columns = this.filterSettings.columns;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var col = columns_1[_i];\n if (col.field === field && col.value === this.value &&\n col.operator === this.operator && col.predicate === this.predicate) {\n return true;\n }\n }\n return false;\n };\n Filter.prototype.columnMenuFilter = function (args) {\n this.column = args.col;\n var ele = closest(args.target, '#' + args.id);\n if (args.isClose && !ele) {\n this.filterModule.closeDialog();\n }\n else if (ele) {\n this.filterDialogOpen(this.column, args.target);\n }\n };\n Filter.prototype.filterDialogOpen = function (col, target, left, top) {\n if (this.filterModule) {\n this.filterModule.isresetFocus = false;\n this.filterModule.closeDialog();\n }\n this.setFilterModel(col);\n this.filterModule.openDialog(this.createOptions(col, target, left, top));\n };\n /**\n * Create filter dialog options\n *\n * @param {Column} col - Filtering column detail.\n * @param {Element} target - Filter dialog target.\n * @param {number} left - Filter dialog left position.\n * @param {number} top - Filter dialog top position.\n * @returns {Object} returns the created dialog options\n * @hidden\n */\n Filter.prototype.createOptions = function (col, target, left, top) {\n var gObj = this.parent;\n var dataSource = col.filter.dataSource || gObj.dataSource && 'result' in gObj.dataSource ? gObj.dataSource :\n gObj.getDataModule().dataManager;\n var type = col.filter.type || this.parent.filterSettings.type;\n var options = {\n type: col.type, field: col.field, displayName: col.headerText,\n dataSource: dataSource, format: col.format, height: 800, columns: gObj.getColumns(),\n filteredColumns: gObj.filterSettings.columns, target: target, dataManager: gObj.getDataModule().dataManager,\n formatFn: col.getFormatter(), ignoreAccent: gObj.filterSettings.ignoreAccent,\n parserFn: col.getParser(), query: gObj.query, template: col.getFilterItemTemplate(),\n hideSearchbox: isNullOrUndefined(col.filter.hideSearchbox) ? false : col.filter.hideSearchbox,\n handler: this.filterHandler.bind(this), localizedStrings: gObj.getLocaleConstants(),\n position: { X: left, Y: top }, column: col, foreignKeyValue: col.foreignKeyValue,\n actualPredicate: this.actualPredicate, localeObj: gObj.localeObj,\n isRemote: gObj.getDataModule().isRemote(), allowCaseSensitive: this.filterSettings.enableCaseSensitivity,\n isResponsiveFilter: this.parent.enableAdaptiveUI,\n operator: this.actualPredicate[col.field] && type === 'Menu' ? this.actualPredicate[col.field][0].operator : 'equal',\n parentTotalDataCount: gObj.getDataModule().isRemote() && gObj.allowPaging ? gObj.pagerModule.pagerObj.totalRecordsCount :\n gObj.getDataModule().isRemote() ? gObj.totalDataRecordsCount : gObj.getFilteredRecords().length,\n parentCurrentViewDataCount: gObj.currentViewData.length,\n parentFilteredLocalRecords: !gObj.getDataModule().isRemote() ? gObj.getFilteredRecords() : []\n };\n return options;\n };\n /**\n * Removes filtered column by field name.\n *\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 * @returns {void}\n * @hidden\n */\n Filter.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n var fCell;\n var cols = this.filterSettings.columns;\n if (isActionPrevent(this.parent)) {\n var args = { instance: this, handler: this.removeFilteredColsByField, arg1: field, arg2: isClearFilterBar };\n this.parent.notify(events.preventBatch, args);\n return;\n }\n var colUid = cols.map(function (f) { return f.uid; });\n var filteredColsUid = colUid.filter(function (item, pos) { return colUid.indexOf(item) === pos; });\n if (!isNullOrUndefined(this.column)) {\n var col = this.column.isForeignColumn() ? this.parent.getColumnByUid(this.column.uid) :\n this.parent.getColumnByField(field);\n this.filterObjIndex = this.getFilteredColsIndexByField(col);\n this.prevFilterObject = this.filterSettings.columns[this.filterObjIndex];\n }\n var _loop_1 = function (i, len) {\n cols[parseInt(i.toString(), 10)].uid = cols[parseInt(i.toString(), 10)].uid\n || this_1.parent.getColumnByField(cols[parseInt(i.toString(), 10)].field).uid;\n var len_1 = cols.length;\n var column = this_1.parent.grabColumnByUidFromAllCols(filteredColsUid[parseInt(i.toString(), 10)]);\n if (column.field === field || (column.field === column.foreignKeyValue && column.isForeignColumn())) {\n var currentPred = this_1.filterSettings.columns.filter(function (e) {\n return e.uid === column.uid;\n })[0];\n if (this_1.filterSettings.type === 'FilterBar' && !isClearFilterBar) {\n var selector = '[id=\\'' + column.field + '_filterBarcell\\']';\n fCell = this_1.parent.getHeaderContent().querySelector(selector);\n if (fCell) {\n fCell.value = '';\n delete this_1.values[\"\" + field];\n }\n }\n while (len_1--) {\n if (cols[parseInt(len_1.toString(), 10)].uid === column.uid) {\n cols.splice(len_1, 1);\n }\n }\n var fltrElement = this_1.parent.getColumnHeaderByField(column.field);\n if (this_1.filterSettings.type !== 'FilterBar' || this_1.parent.showColumnMenu) {\n var iconClass = this_1.parent.showColumnMenu && column.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n fltrElement.querySelector(iconClass).classList.remove('e-filtered');\n }\n this_1.isRemove = true;\n if (this_1.actualPredicate[\"\" + field]) {\n delete this_1.actualPredicate[\"\" + field];\n }\n if (this_1.values[\"\" + field]) {\n delete this_1.values[\"\" + field];\n }\n if (this_1.refresh) {\n this_1.parent.notify(events.modelChanged, {\n requestType: 'filtering', type: events.actionBegin, currentFilterObject: currentPred,\n currentFilterColumn: column, action: 'clearFilter'\n });\n }\n return \"break\";\n }\n };\n var this_1 = this;\n for (var i = 0, len = filteredColsUid.length; i < len; i++) {\n var state_1 = _loop_1(i, len);\n if (state_1 === \"break\")\n break;\n }\n this.updateFilterMsg();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n */\n Filter.prototype.getModuleName = function () {\n return 'filter';\n };\n Filter.prototype.keyUpHandlerImmediate = function (e) {\n if (e.keyCode !== 13) {\n this.keyUpHandler(e);\n }\n };\n Filter.prototype.keyUpHandler = function (e) {\n var gObj = this.parent;\n var target = e.target;\n if (target && matches(target, '.e-filterbar input')) {\n var closeHeaderEle = closest(target, 'th.e-filterbarcell');\n this.column = gObj.getColumnByUid(closeHeaderEle.getAttribute('e-mappinguid'));\n if (!this.column) {\n return;\n }\n if (e.action === 'altDownArrow' && this.parent.filterSettings.showFilterBarOperator) {\n var dropDownListInput = closest(target, 'span').querySelector('.e-filterbaroperator');\n dropDownListInput.ej2_instances[0].showPopup();\n dropDownListInput.focus();\n }\n if ((this.filterSettings.mode === 'Immediate' || (e.keyCode === 13 &&\n !e.target.classList.contains('e-filterbaroperator')))\n && e.keyCode !== 9 && !this.column.filterTemplate) {\n this.value = target.value.trim();\n this.processFilter(e);\n }\n }\n if (e.action === 'altDownArrow' && this.filterSettings.type !== 'FilterBar' && !parentsUntil(e.target, 'e-toolbar')\n && isNullOrUndefined(this.parent.element.querySelector('.e-filter-popup'))) {\n var element = gObj.focusModule.currentInfo.element;\n if (element && element.classList.contains('e-headercell')) {\n var column = gObj.getColumnByUid(element.firstElementChild.getAttribute('e-mappinguid'));\n this.openMenuByField(column.field);\n this.parent.focusModule.clearIndicator();\n }\n }\n if (e.action === 'escape' && this.filterSettings.type === 'Menu' && this.filterModule) {\n this.filterModule.closeDialog();\n gObj.notify(events.restoreFocus, {});\n }\n };\n Filter.prototype.updateCrossIcon = function (element) {\n if (element.value.length) {\n element.nextElementSibling.classList.remove('e-hide');\n }\n };\n Filter.prototype.updateFilterMsg = function () {\n if (this.filterSettings.type === 'FilterBar') {\n var gObj = this.parent;\n var getFormatFlValue = void 0;\n var columns = this.filterSettings.columns;\n var column = void 0;\n if (!this.filterSettings.showFilterBarStatus) {\n return;\n }\n if (columns.length > 0 && this.filterStatusMsg !== this.l10n.getConstant('InvalidFilterMessage')) {\n this.filterStatusMsg = '';\n for (var index = 0; index < columns.length; index++) {\n column = gObj.grabColumnByUidFromAllCols(columns[parseInt(index.toString(), 10)].uid)\n || gObj.grabColumnByFieldFromAllCols(columns[parseInt(index.toString(), 10)].field, columns[parseInt(index.toString(), 10)].isForeignKey);\n if (index) {\n this.filterStatusMsg += ' && ';\n }\n if (!isNullOrUndefined(column.format)) {\n var flValue = (column.type === 'date' || column.type === 'datetime' || column.type === 'dateonly') ?\n this.valueFormatter.fromView(this.values[column.field], column.getParser(), (column.type === 'dateonly' ? 'date' : column.type)) :\n this.values[column.field];\n if (!(column.type === 'date' || column.type === 'datetime' || column.type === 'dateonly')) {\n var formater = this.serviceLocator.getService('valueFormatter');\n getFormatFlValue = formater.toView(flValue, column.getParser()).toString();\n }\n else {\n getFormatFlValue = this.setFormatForFlColumn(flValue, column);\n }\n this.filterStatusMsg += column.headerText + ': ' + getFormatFlValue;\n }\n else {\n this.filterStatusMsg += column.headerText + ': ' + this.values[column.field];\n }\n }\n }\n if (gObj.allowPaging) {\n gObj.updateExternalMessage(this.filterStatusMsg);\n }\n //TODO: virtual paging\n this.filterStatusMsg = '';\n }\n };\n Filter.prototype.setFormatForFlColumn = function (value, column) {\n var formater = this.serviceLocator.getService('valueFormatter');\n return formater.toView(value, column.getFormatter()).toString();\n };\n Filter.prototype.checkForSkipInput = function (column, value) {\n var isSkip;\n if (column.type === 'number') {\n if (DataUtil.operatorSymbols[\"\" + value] || this.skipNumberInput.indexOf(value) > -1) {\n isSkip = true;\n }\n }\n else if (column.type === 'string') {\n for (var _i = 0, value_1 = value; _i < value_1.length; _i++) {\n var val = value_1[_i];\n if (this.skipStringInput.indexOf(val) > -1) {\n isSkip = true;\n }\n }\n }\n return isSkip;\n };\n Filter.prototype.processFilter = function (e) {\n this.stopTimer();\n this.startTimer(e);\n };\n Filter.prototype.startTimer = function (e) {\n var _this = this;\n this.timer = window.setInterval(function () { _this.onTimerTick(); }, e.keyCode === 13 ? 0 : this.filterSettings.immediateModeDelay);\n };\n Filter.prototype.stopTimer = function () {\n window.clearInterval(this.timer);\n };\n Filter.prototype.onTimerTick = function () {\n var selector = '[id=\\'' + this.column.field + '_filterBarcell\\']';\n var filterElement = this.element.querySelector(selector);\n if (!filterElement) {\n filterElement = this.parent.getHeaderContent().querySelector(selector);\n }\n var filterValue;\n this.cellText[this.column.field] = filterElement.value;\n this.stopTimer();\n if (!isNullOrUndefined(this.column.filterBarTemplate)) {\n var templateRead = this.column.filterBarTemplate.read;\n if (typeof templateRead === 'string') {\n templateRead = getValue(templateRead, window);\n }\n if (!isNullOrUndefined(templateRead)) {\n this.value = templateRead.call(this, filterElement);\n }\n }\n else {\n filterValue = JSON.parse(JSON.stringify(filterElement.value));\n }\n if (isNullOrUndefined(this.value) || this.value === '') {\n this.removeFilteredColsByField(this.column.field);\n return;\n }\n this.validateFilterValue(this.value);\n this.filterByMethod = false;\n this.filterByColumn(this.column.field, this.operator, this.value, this.predicate, this.filterSettings.enableCaseSensitivity, this.ignoreAccent, this.column.isForeignColumn());\n this.filterByMethod = true;\n filterElement.value = filterValue;\n this.updateFilterMsg();\n };\n Filter.prototype.validateFilterValue = function (value) {\n var skipInput;\n var index;\n this.matchCase = this.filterSettings.enableCaseSensitivity;\n switch (this.column.type) {\n case 'number':\n if (this.column.filter.operator) {\n this.operator = this.column.filter.operator;\n }\n else {\n this.operator = this.filterOperators.equal;\n }\n skipInput = ['>', '<', '=', '!'];\n for (var i = 0; i < value.length; i++) {\n if (skipInput.indexOf(value[parseInt(i.toString(), 10)]) > -1) {\n index = i;\n break;\n }\n }\n this.getOperator(value.substring(index));\n if (index !== 0) {\n this.value = value.substring(0, index);\n }\n if (this.value !== '' && value.length >= 1) {\n this.value = this.valueFormatter.fromView(this.value, this.column.getParser(), this.column.type);\n }\n if (isNaN(this.value)) {\n this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n }\n break;\n case 'date':\n case 'datetime':\n this.operator = this.filterOperators.equal;\n if (this.value !== '' && !(this.value instanceof Date)) {\n this.getOperator(value);\n this.value = this.valueFormatter.fromView(this.value, this.column.getParser(), this.column.type);\n if (isNullOrUndefined(this.value)) {\n this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n }\n }\n break;\n case 'string':\n this.matchCase = false;\n if (this.column.filter.operator) {\n this.operator = this.column.filter.operator;\n }\n else {\n if (value.indexOf('*') !== -1 || value.indexOf('?') !== -1 || value.indexOf('%3f') !== -1) {\n this.operator = this.filterOperators.wildCard;\n }\n else if (value.indexOf('%') !== -1) {\n this.operator = this.filterOperators.like;\n }\n else {\n this.operator = this.filterOperators.startsWith;\n }\n }\n break;\n case 'boolean':\n if (value.toLowerCase() === 'true' || value === '1') {\n this.value = true;\n }\n else if (value.toLowerCase() === 'false' || value === '0') {\n this.value = false;\n }\n else if (value.length) {\n this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n }\n this.operator = this.filterOperators.equal;\n break;\n default:\n if (this.column.filter.operator) {\n this.operator = this.column.filter.operator;\n }\n else {\n this.operator = this.filterOperators.equal;\n }\n }\n };\n Filter.prototype.getOperator = function (value) {\n var singleOp = value.charAt(0);\n var multipleOp = value.slice(0, 2);\n var operators = extend({ '=': this.filterOperators.equal, '!': this.filterOperators.notEqual }, DataUtil.operatorSymbols);\n // eslint-disable-next-line no-prototype-builtins\n if (operators.hasOwnProperty(singleOp) || operators.hasOwnProperty(multipleOp)) {\n this.operator = operators[\"\" + singleOp];\n this.value = value.substring(1);\n if (!this.operator) {\n this.operator = operators[\"\" + multipleOp];\n this.value = value.substring(2);\n }\n }\n if (this.operator === this.filterOperators.lessThan || this.operator === this.filterOperators.greaterThan) {\n if (this.value.charAt(0) === '=') {\n this.operator = this.operator + 'orequal';\n this.value = this.value.substring(1);\n }\n }\n };\n Filter.prototype.columnPositionChanged = function () {\n if (this.parent.filterSettings.type !== 'FilterBar') {\n return;\n }\n };\n Filter.prototype.getLocalizedCustomOperators = function () {\n var numOptr = [\n { value: 'equal', text: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', text: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', text: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', text: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', text: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', text: this.l10n.getConstant('NotEqual') },\n { value: 'isnull', text: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', text: this.l10n.getConstant('NotNull') }\n ];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', text: this.l10n.getConstant('StartsWith') },\n { value: 'endswith', text: this.l10n.getConstant('EndsWith') },\n { value: 'contains', text: this.l10n.getConstant('Contains') },\n { value: 'equal', text: this.l10n.getConstant('Equal') },\n { value: 'isempty', text: this.l10n.getConstant('IsEmpty') },\n { value: 'doesnotstartwith', text: this.l10n.getConstant('NotStartsWith') },\n { value: 'doesnotendwith', text: this.l10n.getConstant('NotEndsWith') },\n { value: 'doesnotcontain', text: this.l10n.getConstant('NotContains') },\n { value: 'notequal', text: this.l10n.getConstant('NotEqual') },\n { value: 'isnotempty', text: this.l10n.getConstant('IsNotEmpty') },\n { value: 'like', text: this.l10n.getConstant('Like') }\n ],\n numberOperator: numOptr,\n dateOperator: numOptr,\n datetimeOperator: numOptr,\n dateonlyOperator: numOptr,\n booleanOperator: [\n { value: 'equal', text: this.l10n.getConstant('Equal') },\n { value: 'notequal', text: this.l10n.getConstant('NotEqual') }\n ]\n };\n };\n /**\n * @param {string} field - specifies the field name\n * @returns {void}\n * @hidden\n */\n Filter.prototype.openMenuByField = function (field) {\n var gObj = this.parent;\n if (gObj.enableAdaptiveUI) {\n this.showCustomFilter(false);\n return;\n }\n var column = gObj.getColumnByField(field);\n var header = gObj.getColumnHeaderByField(field);\n var target = header.querySelector('.e-filtermenudiv');\n if (!target) {\n return;\n }\n var gClient = gObj.element.getBoundingClientRect();\n var fClient = target.getBoundingClientRect();\n this.filterDialogOpen(column, target, fClient.right - gClient.left, fClient.bottom - gClient.top);\n };\n Filter.prototype.filterIconClickHandler = function (e) {\n var target = e.target;\n if (target.classList.contains('e-filtermenudiv') && (this.parent.filterSettings.type === 'Menu' ||\n this.parent.filterSettings.type === 'CheckBox' || this.parent.filterSettings.type === 'Excel')) {\n var gObj = this.parent;\n var col = gObj.getColumnByUid(parentsUntil(target, 'e-headercell').firstElementChild.getAttribute('e-mappinguid'));\n this.column = col;\n if (this.fltrDlgDetails.field === col.field && this.fltrDlgDetails.isOpen) {\n return;\n }\n if (this.filterModule) {\n this.filterModule.closeDialog();\n }\n this.fltrDlgDetails = { field: col.field, isOpen: true };\n this.openMenuByField(col.field);\n }\n };\n Filter.prototype.clickHandler = function (e) {\n if (this.filterSettings.type === 'FilterBar' && this.filterSettings.showFilterBarOperator) {\n if (parentsUntil(e.target, 'e-filterbarcell') &&\n e.target.classList.contains('e-input-group-icon')) {\n var filterOperatorElement = closest(e.target, 'div').\n querySelector('.e-filterbaroperator');\n if (filterOperatorElement) {\n filterOperatorElement.focus();\n }\n else {\n e.target.focus();\n }\n }\n if (e.target.classList.contains('e-list-item')) {\n var inputId = document.querySelector('.e-popup-open').getAttribute('id').replace('_popup', '');\n if (inputId.indexOf('grid-column') !== -1) {\n closest(document.getElementById(inputId), 'div').querySelector('.e-filtertext').focus();\n }\n }\n }\n if (this.filterSettings.mode === 'Immediate' || this.parent.filterSettings.type === 'Menu' ||\n this.parent.filterSettings.type === 'CheckBox' || this.parent.filterSettings.type === 'Excel') {\n var target = e.target;\n var datepickerEle = target.classList.contains('e-day'); // due to datepicker popup cause\n var dialog = parentsUntil(this.parent.element, 'e-dialog');\n var hasDialog = false;\n var popupEle = parentsUntil(target, 'e-popup');\n var hasDialogClosed = this.parent.element.classList.contains('e-device') ? document.querySelector('.e-filter-popup')\n : this.parent.element.querySelector('.e-filter-popup');\n if (dialog && popupEle) {\n hasDialog = dialog.id === popupEle.id;\n }\n if ((this.filterModule && hasDialogClosed && (parentsUntil(target, 'e-excel-ascending') ||\n parentsUntil(target, 'e-excel-descending')))) {\n this.filterModule.closeDialog(target);\n }\n if (parentsUntil(target, 'e-filter-popup') || target.classList.contains('e-filtermenudiv')) {\n return;\n }\n else if (this.filterModule && !parentsUntil(target, 'e-date-overflow') && (!parentsUntil(target, 'e-popup-wrapper')\n && (!closest(target, '.e-filter-item.e-menu-item'))) && !datepickerEle\n && !(parentsUntil(target, 'e-search-wrapper') && !hasDialogClosed)) {\n if ((hasDialog && (!parentsUntil(target, 'e-filter-popup'))\n && (!parentsUntil(target, 'e-popup-flmenu'))) || (!popupEle && hasDialogClosed)) {\n this.filterModule.isresetFocus = parentsUntil(target, 'e-grid') &&\n parentsUntil(target, 'e-grid').id === this.parent.element.id && !(parentsUntil(target, 'e-search-wrapper')\n && hasDialogClosed);\n this.filterModule.closeDialog(target);\n }\n }\n }\n };\n Filter.prototype.filterHandler = function (args) {\n this.actualPredicate[args.field] = args.actualPredicate;\n this.actualData = Object.keys(this.actualPredicate);\n var dataManager = new DataManager(this.filterSettings.columns);\n var query = new Query().where('field', this.filterOperators.equal, args.field);\n this.checkboxFilterObject = dataManager.dataSource.json;\n this.checkboxPrevFilterObject = dataManager.executeLocal(query);\n for (var i = 0; i < this.checkboxPrevFilterObject.length; i++) {\n var index = -1;\n for (var j = 0; j < this.filterSettings.columns.length; j++) {\n if (this.checkboxPrevFilterObject[parseInt(i.toString(), 10)].field ===\n this.filterSettings.columns[parseInt(j.toString(), 10)].field) {\n index = j;\n break;\n }\n }\n if (index !== -1) {\n this.filterSettings.columns.splice(index, 1);\n }\n }\n if (this.values[args.field]) {\n delete this.values[args.field];\n }\n var col = this.parent.getColumnByField(args.field);\n var iconClass = this.parent.showColumnMenu && col.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n var filterIconElement = this.parent.getColumnHeaderByField(args.field).querySelector(iconClass);\n if (args.action === 'filtering') {\n this.filterSettings.columns = this.filterSettings.columns.concat(args.filterCollection);\n if (this.filterSettings.columns.length && filterIconElement) {\n filterIconElement.classList.add('e-filtered');\n }\n }\n else {\n if (filterIconElement) {\n filterIconElement.classList.remove('e-filtered');\n }\n args.requestType = 'filtering';\n this.parent.renderModule.refresh(args); //hot-fix onpropertychanged not working for object { array }\n }\n this.parent.dataBind();\n };\n Filter.prototype.updateFilter = function () {\n var cols = this.filterSettings.columns;\n this.actualPredicate = {};\n for (var i = 0; i < cols.length; i++) {\n this.column = this.parent.getColumnByField(cols[parseInt(i.toString(), 10)].field) ||\n getColumnByForeignKeyValue(cols[parseInt(i.toString(), 10)].field, this.parent.getForeignKeyColumns());\n var fieldName = cols[parseInt(i.toString(), 10)].field;\n if (!this.parent.getColumnByField(cols[parseInt(i.toString(), 10)].field)) {\n fieldName = getColumnByForeignKeyValue(cols[parseInt(i.toString(), 10)].field, this.parent.getForeignKeyColumns()).field;\n }\n this.refreshFilterIcon(fieldName, cols[parseInt(i.toString(), 10)].operator, cols[parseInt(i.toString(), 10)].value, cols[parseInt(i.toString(), 10)].type, cols[parseInt(i.toString(), 10)].predicate, cols[parseInt(i.toString(), 10)].matchCase, cols[parseInt(i.toString(), 10)].ignoreAccent, cols[parseInt(i.toString(), 10)].uid);\n }\n };\n Filter.prototype.refreshFilterIcon = function (fieldName, operator, value, type, predicate, matchCase, ignoreAccent, uid) {\n var obj = {\n field: fieldName,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: operator,\n value: value,\n type: type\n };\n if (this.actualPredicate[\"\" + fieldName]) {\n this.actualPredicate[\"\" + fieldName].push(obj);\n }\n else {\n this.actualPredicate[\"\" + fieldName] = [obj];\n }\n var field = uid ? this.parent.grabColumnByUidFromAllCols(uid).field : fieldName;\n this.addFilteredClass(field);\n };\n Filter.prototype.addFilteredClass = function (fieldName) {\n var filterIconElement;\n var col = this.parent.getColumnByField(fieldName);\n if (this.parent.showColumnMenu && col.showColumnMenu) {\n filterIconElement = this.parent.getColumnHeaderByField(fieldName).querySelector('.e-columnmenu');\n }\n else if (col) {\n filterIconElement = this.parent.getColumnHeaderByField(fieldName).querySelector('.e-icon-filter');\n }\n if (filterIconElement) {\n filterIconElement.classList.add('e-filtered');\n }\n };\n /**\n * @hidden\n * @returns {FilterUI} returns the FilterUI\n */\n Filter.prototype.getFilterUIInfo = function () {\n return this.filterModule ? this.filterModule.getFilterUIInfo() : {};\n };\n /**\n * @param {string} field - specifies the field name\n * @returns {string} returns the operator name\n * @hidden\n */\n Filter.prototype.getOperatorName = function (field) {\n return document.getElementById(this.parent.getColumnByField(field).uid).ej2_instances[0].value;\n };\n /**\n * Renders checkbox items in Menu filter dialog.\n *\n * @returns {void}\n */\n Filter.prototype.renderCheckboxOnFilterMenu = function () {\n return this.filterModule.renderCheckBoxMenu();\n };\n return Filter;\n}());\nexport { Filter };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// \nimport { EventHandler, Property, Event, addClass, Browser, removeClass, detach } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, NotifyPropertyChanges, getValue, setValue } from '@syncfusion/ej2-base';\nimport { DropDownList, dropDownListClasses } from '../drop-down-list/drop-down-list';\nimport { Search } from '../common/incremental-search';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nvar SPINNER_CLASS = 'e-atc-spinner-icon';\ndropDownListClasses.root = 'e-combobox';\nvar inputObject = {\n container: null,\n buttons: []\n};\n/**\n * The ComboBox component allows the user to type a value or choose an option from the list of predefined options.\n * ```html\n * \n * ```\n * ```typescript\n * let games:ComboBox = new ComboBox();\n * games.appendTo(\"#list\");\n * ```\n */\nvar ComboBox = /** @class */ (function (_super) {\n __extends(ComboBox, _super);\n /**\n * *Constructor for creating the component\n *\n * @param {ComboBoxModel} options - Specifies the ComboBox model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function ComboBox(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler\n *\n * @private\n * @returns {void}\n */\n ComboBox.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\n };\n ComboBox.prototype.getLocaleName = function () {\n return 'combo-box';\n };\n ComboBox.prototype.wireEvent = function () {\n if (this.getModuleName() === 'combobox') {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.preventBlur, this);\n EventHandler.add(this.inputWrapper.container, 'blur', this.onBlurHandler, this);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0])) {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.dropDownClick, this);\n }\n EventHandler.add(this.inputElement, 'focus', this.targetFocus, this);\n if (!this.readonly) {\n EventHandler.add(this.inputElement, 'input', this.onInput, this);\n EventHandler.add(this.inputElement, 'keyup', this.onFilterUp, this);\n EventHandler.add(this.inputElement, 'keydown', this.onFilterDown, this);\n EventHandler.add(this.inputElement, 'paste', this.pasteHandler, this);\n EventHandler.add(window, 'resize', this.windowResize, this);\n }\n this.bindCommonEvent();\n };\n ComboBox.prototype.preventBlur = function (e) {\n if ((!this.allowFiltering && document.activeElement !== this.inputElement &&\n !document.activeElement.classList.contains(dropDownListClasses.input) && Browser.isDevice || !Browser.isDevice)) {\n e.preventDefault();\n }\n };\n ComboBox.prototype.onBlurHandler = function (e) {\n var inputValue = this.inputElement && this.inputElement.value === '' ?\n null : this.inputElement && this.inputElement.value;\n if (!isNullOrUndefined(this.listData) && !isNullOrUndefined(inputValue) && inputValue !== this.text) {\n this.customValue(e);\n }\n _super.prototype.onBlurHandler.call(this, e);\n };\n ComboBox.prototype.targetElement = function () {\n return this.inputElement;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ComboBox.prototype.setOldText = function (text) {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.customValue();\n this.removeSelection();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ComboBox.prototype.setOldValue = function (value) {\n if (this.allowCustom) {\n this.valueMuteChange(this.value);\n }\n else {\n this.valueMuteChange(null);\n }\n this.removeSelection();\n this.setHiddenValue();\n };\n ComboBox.prototype.valueMuteChange = function (value) {\n var inputValue = isNullOrUndefined(value) ? null : value.toString();\n Input.setValue(inputValue, this.inputElement, this.floatLabelType, this.showClearButton);\n this.setProperties({ value: value, text: value, index: null }, true);\n this.activeIndex = this.index;\n var fields = this.fields;\n var dataItem = {};\n dataItem[fields.text] = isNullOrUndefined(value) ? null : value.toString();\n dataItem[fields.value] = isNullOrUndefined(value) ? null : value.toString();\n this.itemData = dataItem;\n this.item = null;\n if (this.previousValue !== this.value) {\n this.detachChangeEvent(null);\n }\n };\n ComboBox.prototype.updateValues = function () {\n if (!isNullOrUndefined(this.value)) {\n var li = this.getElementByValue(this.value);\n var isExistItem = !isNullOrUndefined(li) ? true : false;\n if (this.enableVirtualization && this.value) {\n var fields = (this.fields.value) ? this.fields.value : '';\n if (this.dataSource instanceof DataManager && this.virtualGroupDataSource) {\n var getItem = new DataManager(this.virtualGroupDataSource).executeLocal(new Query().where(new Predicate(fields, 'equal', this.value)));\n if (getItem && getItem.length > 0) {\n this.itemData = getItem[0];\n isExistItem = true;\n var dataItem = this.getItemData();\n if ((this.value === dataItem.value && this.text !== dataItem.text) || (this.value !== dataItem.value && this.text === dataItem.text)) {\n this.setProperties({ 'text': dataItem.text, 'value': dataItem.value });\n }\n }\n }\n else {\n var getItem = new DataManager(this.dataSource).executeLocal(new Query().where(new Predicate(fields, 'equal', this.value)));\n if (getItem && getItem.length > 0) {\n this.itemData = getItem[0];\n isExistItem = true;\n var dataItem = this.getItemData();\n if ((this.value === dataItem.value && this.text !== dataItem.text) || (this.value !== dataItem.value && this.text === dataItem.text)) {\n this.setProperties({ 'text': dataItem.text, 'value': dataItem.value });\n }\n }\n }\n }\n if (li) {\n this.setSelection(li, null);\n }\n else if ((!this.enableVirtualization && this.allowCustom) || (this.allowCustom && this.enableVirtualization && !isExistItem)) {\n this.valueMuteChange(this.value);\n }\n else if (!this.enableVirtualization || (this.enableVirtualization && !isExistItem)) {\n this.valueMuteChange(null);\n }\n }\n else if (this.text && isNullOrUndefined(this.value)) {\n var li = this.getElementByText(this.text);\n if (li) {\n this.setSelection(li, null);\n }\n else {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.customValue();\n }\n }\n else {\n this.setSelection(this.liCollections[this.activeIndex], null);\n }\n this.setHiddenValue();\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n ComboBox.prototype.updateIconState = function () {\n if (this.showClearButton) {\n if (this.inputElement && this.inputElement.value !== '' && !this.readonly) {\n removeClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n else {\n addClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n }\n };\n ComboBox.prototype.getAriaAttributes = function () {\n var ariaAttributes = {\n 'role': 'combobox',\n 'aria-autocomplete': 'both',\n 'aria-labelledby': this.hiddenElement.id,\n 'aria-expanded': 'false',\n 'aria-readonly': this.readonly.toString(),\n 'autocomplete': 'off',\n 'autocapitalize': 'off',\n 'spellcheck': 'false'\n };\n return ariaAttributes;\n };\n ComboBox.prototype.searchLists = function (e) {\n this.isTyped = true;\n if (this.isFiltering()) {\n _super.prototype.searchLists.call(this, e);\n if (this.ulElement && this.filterInput.value.trim() === '') {\n this.setHoverList(this.ulElement.querySelector('.' + dropDownListClasses.li));\n }\n }\n else {\n if (this.ulElement && this.inputElement.value === '' && this.preventAutoFill) {\n this.setHoverList(this.ulElement.querySelector('.' + dropDownListClasses.li));\n }\n this.incrementalSearch(e);\n }\n };\n ComboBox.prototype.getNgDirective = function () {\n return 'EJS-COMBOBOX';\n };\n ComboBox.prototype.setSearchBox = function () {\n this.filterInput = this.inputElement;\n var searchBoxContainer = (this.isFiltering() || (this.isReact && this.getModuleName() === 'combobox')) ? this.inputWrapper : inputObject;\n return searchBoxContainer;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ComboBox.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n var _this = this;\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n if (this.isSelectCustom) {\n this.removeSelection();\n }\n if (!this.preventAutoFill && this.getModuleName() === 'combobox' && this.isTyped && !this.enableVirtualization) {\n setTimeout(function () {\n _this.inlineSearch();\n });\n }\n };\n ComboBox.prototype.getFocusElement = function () {\n var dataItem = this.isSelectCustom ? { text: '' } : this.getItemData();\n var selected = !isNullOrUndefined(this.list) ? this.list.querySelector('.' + dropDownListClasses.selected) : this.list;\n var isSelected = dataItem.text && dataItem.text.toString() === this.inputElement.value && !isNullOrUndefined(selected);\n if (isSelected) {\n return selected;\n }\n if ((Browser.isDevice && !this.isDropDownClick || !Browser.isDevice) &&\n !isNullOrUndefined(this.liCollections) && this.liCollections.length > 0) {\n var inputValue = this.inputElement.value;\n var dataSource = this.sortedData;\n var type = this.typeOfData(dataSource).typeof;\n var activeItem = Search(inputValue, this.liCollections, this.filterType, true, dataSource, this.fields, type);\n if (this.enableVirtualization && inputValue !== '' && this.getModuleName() !== 'autocomplete' && this.isTyped && !this.allowFiltering) {\n var updatingincrementalindex = false;\n if ((this.viewPortInfo.endIndex >= this.incrementalEndIndex && this.incrementalEndIndex <= this.totalItemCount) || this.incrementalEndIndex == 0) {\n updatingincrementalindex = true;\n this.incrementalStartIndex = this.incrementalEndIndex;\n if (this.incrementalEndIndex == 0) {\n this.incrementalEndIndex = 100 > this.totalItemCount ? this.totalItemCount : 100;\n }\n else {\n this.incrementalEndIndex = this.incrementalEndIndex + 100 > this.totalItemCount ? this.totalItemCount : this.incrementalEndIndex + 100;\n }\n this.updateIncrementalInfo(this.incrementalStartIndex, this.incrementalEndIndex);\n updatingincrementalindex = true;\n }\n if (this.viewPortInfo.startIndex !== 0 || updatingincrementalindex) {\n this.updateIncrementalView(0, this.itemCount);\n }\n activeItem = Search(inputValue, this.incrementalLiCollections, this.filterType, true, dataSource, this.fields, type);\n while (isNullOrUndefined(activeItem) && this.incrementalEndIndex < this.totalItemCount) {\n this.incrementalStartIndex = this.incrementalEndIndex;\n this.incrementalEndIndex = this.incrementalEndIndex + 100 > this.totalItemCount ? this.totalItemCount : this.incrementalEndIndex + 100;\n this.updateIncrementalInfo(this.incrementalStartIndex, this.incrementalEndIndex);\n updatingincrementalindex = true;\n if (this.viewPortInfo.startIndex !== 0 || updatingincrementalindex) {\n this.updateIncrementalView(0, this.itemCount);\n }\n activeItem = Search(inputValue, this.incrementalLiCollections, this.filterType, true, dataSource, this.fields, type);\n if (!isNullOrUndefined(activeItem)) {\n break;\n }\n if (isNullOrUndefined(activeItem) && this.incrementalEndIndex >= this.totalItemCount) {\n this.incrementalStartIndex = 0;\n this.incrementalEndIndex = 100 > this.totalItemCount ? this.totalItemCount : 100;\n break;\n }\n }\n if (activeItem.index) {\n if ((!(this.viewPortInfo.startIndex >= activeItem.index)) || (!(activeItem.index >= this.viewPortInfo.endIndex))) {\n var startIndex = activeItem.index - ((this.itemCount / 2) - 2) > 0 ? activeItem.index - ((this.itemCount / 2) - 2) : 0;\n var endIndex = this.viewPortInfo.startIndex + this.itemCount > this.totalItemCount ? this.totalItemCount : this.viewPortInfo.startIndex + this.itemCount;\n if (startIndex != this.viewPortInfo.startIndex) {\n this.updateIncrementalView(startIndex, endIndex);\n }\n }\n }\n if (!isNullOrUndefined(activeItem.item)) {\n var index_1 = this.getIndexByValue(activeItem.item.getAttribute('data-value')) - this.skeletonCount;\n if (index_1 > this.itemCount / 2) {\n var startIndex = this.viewPortInfo.startIndex + ((this.itemCount / 2) - 2) < this.totalItemCount ? this.viewPortInfo.startIndex + ((this.itemCount / 2) - 2) : this.totalItemCount;\n var endIndex = this.viewPortInfo.startIndex + this.itemCount > this.totalItemCount ? this.totalItemCount : this.viewPortInfo.startIndex + this.itemCount;\n this.updateIncrementalView(startIndex, endIndex);\n }\n activeItem.item = this.getElementByValue(activeItem.item.getAttribute('data-value'));\n }\n else {\n this.updateIncrementalView(0, this.itemCount);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.list.getElementsByClassName('e-virtual-ddl-content')[0].style = this.getTransformValues();\n this.list.scrollTop = 0;\n }\n if (activeItem && activeItem.item) {\n activeItem.item = this.getElementByValue(activeItem.item.getAttribute('data-value'));\n }\n }\n var activeElement = activeItem.item;\n if (!isNullOrUndefined(activeElement)) {\n var count = this.getIndexByValue(activeElement.getAttribute('data-value')) - 1;\n var height = parseInt(getComputedStyle(this.liCollections[0], null).getPropertyValue('height'), 10);\n if (!isNaN(height) && this.getModuleName() !== 'autocomplete') {\n this.removeFocus();\n var fixedHead = this.fields.groupBy ? this.liCollections[0].offsetHeight : 0;\n if (!this.enableVirtualization) {\n this.list.scrollTop = count * height + fixedHead;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.list.getElementsByClassName('e-virtual-ddl-content')[0].style = this.getTransformValues();\n if (this.enableVirtualization && !this.fields.groupBy) {\n var selectedLiOffsetTop = this.virtualListInfo && this.virtualListInfo.startIndex ? activeElement.offsetTop + (this.virtualListInfo.startIndex * activeElement.offsetHeight) : activeElement.offsetTop;\n this.list.scrollTop = selectedLiOffsetTop - (this.list.querySelectorAll('.e-virtual-list').length * activeElement.offsetHeight);\n }\n }\n addClass([activeElement], dropDownListClasses.focus);\n }\n }\n else {\n if (this.isSelectCustom && this.inputElement.value.trim() !== '') {\n this.removeFocus();\n if (!this.enableVirtualization) {\n this.list.scrollTop = 0;\n }\n }\n }\n return activeElement;\n }\n else {\n return null;\n }\n };\n ComboBox.prototype.setValue = function (e) {\n if (e && e.type === 'keydown' && e.action === 'enter') {\n this.removeFillSelection();\n }\n if (this.autofill && this.getModuleName() === 'combobox' && e && e.type === 'keydown' && e.action !== 'enter') {\n this.preventAutoFill = false;\n this.inlineSearch(e);\n return false;\n }\n else {\n return _super.prototype.setValue.call(this, e);\n }\n };\n ComboBox.prototype.checkCustomValue = function () {\n this.itemData = this.getDataByValue(this.value);\n var dataItem = this.getItemData();\n if (!(this.allowCustom && isNullOrUndefined(dataItem.value) && isNullOrUndefined(dataItem.text))) {\n this.setProperties({ 'value': dataItem.value }, !this.allowCustom);\n }\n };\n /**\n * Shows the spinner loader.\n *\n * @returns {void}\n\n */\n ComboBox.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n this.spinnerElement = (this.getModuleName() === 'autocomplete') ? (this.inputWrapper.buttons[0] ||\n this.inputWrapper.clearButton ||\n Input.appendSpan('e-input-group-icon ' + SPINNER_CLASS, this.inputWrapper.container, this.createElement)) :\n (this.inputWrapper.buttons[0] || this.inputWrapper.clearButton);\n addClass([this.spinnerElement], dropDownListClasses.disableIcon);\n createSpinner({\n target: this.spinnerElement,\n width: Browser.isDevice ? '16px' : '14px'\n }, this.createElement);\n showSpinner(this.spinnerElement);\n }\n };\n /**\n * Hides the spinner loader.\n *\n * @returns {void}\n\n */\n ComboBox.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n removeClass([this.spinnerElement], dropDownListClasses.disableIcon);\n if (this.spinnerElement.classList.contains(SPINNER_CLASS)) {\n detach(this.spinnerElement);\n }\n else {\n this.spinnerElement.innerHTML = '';\n }\n this.spinnerElement = null;\n }\n };\n ComboBox.prototype.setAutoFill = function (activeElement, isHover) {\n if (!isHover) {\n this.setHoverList(activeElement);\n }\n if (this.autofill && !this.preventAutoFill) {\n var currentValue = this.getTextByValue(activeElement.getAttribute('data-value')).toString();\n var currentFillValue = this.getFormattedValue(activeElement.getAttribute('data-value'));\n if (this.getModuleName() === 'combobox') {\n if (!this.isSelected && this.previousValue !== currentFillValue) {\n this.updateSelectedItem(activeElement, null);\n this.isSelected = true;\n this.previousValue = this.getFormattedValue(activeElement.getAttribute('data-value'));\n }\n else {\n this.updateSelectedItem(activeElement, null, true);\n }\n }\n if (!this.isAndroidAutoFill(currentValue)) {\n this.setAutoFillSelection(currentValue, isHover);\n }\n }\n };\n ComboBox.prototype.isAndroidAutoFill = function (value) {\n if (Browser.isAndroid) {\n var currentPoints = this.getSelectionPoints();\n var prevEnd = this.prevSelectPoints.end;\n var curEnd = currentPoints.end;\n var prevStart = this.prevSelectPoints.start;\n var curStart = currentPoints.start;\n if (prevEnd !== 0 && ((prevEnd === value.length && prevStart === value.length) ||\n (prevStart > curStart && prevEnd > curEnd) || (prevEnd === curEnd && prevStart === curStart))) {\n return true;\n }\n else {\n return false;\n }\n }\n else {\n return false;\n }\n };\n ComboBox.prototype.clearAll = function (e, property) {\n if (isNullOrUndefined(property) || (!isNullOrUndefined(property) && isNullOrUndefined(property.dataSource))) {\n _super.prototype.clearAll.call(this, e);\n }\n if (this.isFiltering() && !isNullOrUndefined(e) && e.target === this.inputWrapper.clearButton) {\n this.searchLists(e);\n }\n };\n ComboBox.prototype.isSelectFocusItem = function (element) {\n return !isNullOrUndefined(element);\n };\n ComboBox.prototype.inlineSearch = function (e) {\n var isKeyNavigate = (e && (e.action === 'down' || e.action === 'up' ||\n e.action === 'home' || e.action === 'end' || e.action === 'pageUp' || e.action === 'pageDown'));\n var activeElement = isKeyNavigate ? this.liCollections[this.activeIndex] : this.getFocusElement();\n if (!isNullOrUndefined(activeElement)) {\n if (!isKeyNavigate) {\n var value = this.getFormattedValue(activeElement.getAttribute('data-value'));\n this.activeIndex = this.getIndexByValue(value);\n this.activeIndex = !isNullOrUndefined(this.activeIndex) ? this.activeIndex : null;\n }\n this.preventAutoFill = this.inputElement.value === '' ? false : this.preventAutoFill;\n this.setAutoFill(activeElement, isKeyNavigate);\n }\n else if (this.inputElement.value === '') {\n this.activeIndex = null;\n if (!isNullOrUndefined(this.list)) {\n if (!this.enableVirtualization) {\n this.list.scrollTop = 0;\n }\n var focusItem = this.list.querySelector('.' + dropDownListClasses.li);\n this.setHoverList(focusItem);\n }\n }\n else {\n this.activeIndex = null;\n this.removeSelection();\n if (this.liCollections && this.liCollections.length > 0 && !this.isCustomFilter) {\n this.removeFocus();\n }\n }\n };\n ComboBox.prototype.incrementalSearch = function (e) {\n this.showPopup(e);\n if (!isNullOrUndefined(this.listData)) {\n this.inlineSearch(e);\n e.preventDefault();\n }\n };\n ComboBox.prototype.setAutoFillSelection = function (currentValue, isKeyNavigate) {\n if (isKeyNavigate === void 0) { isKeyNavigate = false; }\n var selection = this.getSelectionPoints();\n var value = this.inputElement.value.substr(0, selection.start);\n if (value && (value.toLowerCase() === currentValue.substr(0, selection.start).toLowerCase())) {\n var inputValue = value + currentValue.substr(value.length, currentValue.length);\n Input.setValue(inputValue, this.inputElement, this.floatLabelType, this.showClearButton);\n this.inputElement.setSelectionRange(selection.start, this.inputElement.value.length);\n }\n else if (isKeyNavigate) {\n Input.setValue(currentValue, this.inputElement, this.floatLabelType, this.showClearButton);\n this.inputElement.setSelectionRange(0, this.inputElement.value.length);\n }\n };\n ComboBox.prototype.getValueByText = function (text) {\n return _super.prototype.getValueByText.call(this, text, true, this.ignoreAccent);\n };\n ComboBox.prototype.unWireEvent = function () {\n if (this.getModuleName() === 'combobox') {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.preventBlur);\n EventHandler.remove(this.inputWrapper.container, 'blur', this.onBlurHandler);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0])) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.dropDownClick);\n }\n if (this.inputElement) {\n EventHandler.remove(this.inputElement, 'focus', this.targetFocus);\n if (!this.readonly) {\n EventHandler.remove(this.inputElement, 'input', this.onInput);\n EventHandler.remove(this.inputElement, 'keyup', this.onFilterUp);\n EventHandler.remove(this.inputElement, 'keydown', this.onFilterDown);\n EventHandler.remove(this.inputElement, 'paste', this.pasteHandler);\n EventHandler.remove(window, 'resize', this.windowResize);\n }\n }\n this.unBindCommonEvent();\n };\n ComboBox.prototype.setSelection = function (li, e) {\n _super.prototype.setSelection.call(this, li, e);\n if (!isNullOrUndefined(li) && !this.autofill && !this.isDropDownClick) {\n this.removeFocus();\n }\n };\n ComboBox.prototype.selectCurrentItem = function (e) {\n var li;\n if (this.isPopupOpen) {\n if (this.isSelected) {\n li = this.list.querySelector('.' + dropDownListClasses.selected);\n }\n else {\n li = this.list.querySelector('.' + dropDownListClasses.focus);\n }\n if (li) {\n this.setSelection(li, e);\n this.isTyped = false;\n }\n if (this.isSelected) {\n this.isSelectCustom = false;\n this.onChangeEvent(e);\n }\n }\n if (e.action === 'enter' && this.inputElement.value.trim() === '') {\n this.clearAll(e);\n }\n else if (this.isTyped && !this.isSelected && isNullOrUndefined(li)) {\n this.customValue(e);\n }\n this.hidePopup(e);\n };\n ComboBox.prototype.setHoverList = function (li) {\n this.removeSelection();\n if (this.isValidLI(li) && !li.classList.contains(dropDownListClasses.selected)) {\n this.removeFocus();\n li.classList.add(dropDownListClasses.focus);\n }\n };\n ComboBox.prototype.targetFocus = function (e) {\n if (Browser.isDevice && !this.allowFiltering) {\n this.preventFocus = false;\n }\n this.onFocus(e);\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n };\n ComboBox.prototype.dropDownClick = function (e) {\n e.preventDefault();\n if (Browser.isDevice && !this.isFiltering()) {\n this.preventFocus = true;\n }\n _super.prototype.dropDownClick.call(this, e);\n };\n ComboBox.prototype.customValue = function (e) {\n var _this = this;\n var value = this.getValueByText(this.inputElement.value);\n if (!this.allowCustom && this.inputElement.value !== '') {\n var previousValue = this.previousValue;\n var currentValue = this.value;\n this.setProperties({ value: value });\n if (isNullOrUndefined(this.value)) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n }\n if (this.autofill && previousValue === this.value && currentValue !== this.value) {\n this.onChangeEvent(null);\n }\n }\n else if (this.inputElement.value.trim() !== '') {\n var previousValue_1 = this.value;\n if (isNullOrUndefined(value)) {\n var value_1 = this.inputElement.value === '' ? null : this.inputElement.value;\n // eslint-disable-next-line max-len\n var eventArgs = { text: value_1, item: {} };\n if (!this.initial) {\n this.trigger('customValueSpecifier', eventArgs, function (eventArgs) {\n _this.updateCustomValueCallback(value_1, eventArgs, previousValue_1, e);\n });\n }\n else {\n this.updateCustomValueCallback(value_1, eventArgs, previousValue_1);\n }\n }\n else {\n this.isSelectCustom = false;\n this.setProperties({ value: value });\n if (previousValue_1 !== this.value) {\n this.onChangeEvent(e);\n }\n }\n }\n else if (this.allowCustom) {\n this.isSelectCustom = true;\n }\n };\n ComboBox.prototype.updateCustomValueCallback = function (value, eventArgs, previousValue, e) {\n var fields = this.fields;\n var item = eventArgs.item;\n var dataItem = {};\n if (item && getValue(fields.text, item) && getValue(fields.value, item)) {\n dataItem = item;\n }\n else {\n setValue(fields.text, value, dataItem);\n setValue(fields.value, value, dataItem);\n }\n this.itemData = dataItem;\n var changeData = {\n text: getValue(fields.text, this.itemData),\n value: getValue(fields.value, this.itemData),\n index: null\n };\n this.setProperties(changeData, true);\n this.setSelection(null, null);\n this.isSelectCustom = true;\n if (previousValue !== this.value) {\n this.onChangeEvent(e);\n }\n };\n /**\n * Dynamically change the value of properties.\n *\n * @param {ComboBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {ComboBoxModel} oldProp - Returns the previous property value of the component.\n * @private\n * @returns {void}\n */\n ComboBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.getModuleName() === 'combobox') {\n this.checkData(newProp);\n this.setUpdateInitial(['fields', 'query', 'dataSource'], newProp);\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n if (this.readonly) {\n EventHandler.remove(this.inputElement, 'input', this.onInput);\n EventHandler.remove(this.inputElement, 'keyup', this.onFilterUp);\n EventHandler.remove(this.inputElement, 'keydown', this.onFilterDown);\n }\n else {\n EventHandler.add(this.inputElement, 'input', this.onInput, this);\n EventHandler.add(this.inputElement, 'keyup', this.onFilterUp, this);\n EventHandler.add(this.inputElement, 'keydown', this.onFilterDown, this);\n }\n this.setReadOnly();\n break;\n case 'allowFiltering':\n this.setSearchBox();\n if (this.isFiltering() && this.getModuleName() === 'combobox' && isNullOrUndefined(this.list)) {\n _super.prototype.renderList.call(this);\n }\n break;\n case 'allowCustom':\n break;\n default: {\n // eslint-disable-next-line max-len\n var comboProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, comboProps.newProperty, comboProps.oldProperty);\n if (this.isFiltering() && prop === 'dataSource' && isNullOrUndefined(this.list) && this.itemTemplate &&\n this.getModuleName() === 'combobox') {\n _super.prototype.renderList.call(this);\n }\n break;\n }\n }\n }\n };\n /**\n * To initialize the control rendering.\n *\n * @private\n * @returns {void}\n */\n ComboBox.prototype.render = function () {\n _super.prototype.render.call(this);\n this.setSearchBox();\n if (this.isFiltering() && this.getModuleName() === 'combobox' && isNullOrUndefined(this.list)) {\n _super.prototype.renderList.call(this);\n }\n this.renderComplete();\n };\n /**\n * Return the module name of this component.\n *\n * @private\n * @returns {string} Return the module name of this component.\n */\n ComboBox.prototype.getModuleName = function () {\n return 'combobox';\n };\n /**\n * Adds a new item to the combobox popup list. By default, new item appends to the list as the last item,\n * but you can insert based on the index parameter.\n *\n * @param { Object[] } items - Specifies an array of JSON data or a JSON data.\n * @param { number } itemIndex - Specifies the index to place the newly added item in the popup list.\n * @returns {void}\n\n */\n ComboBox.prototype.addItem = function (items, itemIndex) {\n _super.prototype.addItem.call(this, items, itemIndex);\n };\n /**\n * To filter the data from given data source by using query\n *\n * @param {Object[] | DataManager } dataSource - Set the data source to filter.\n * @param {Query} query - Specify the query to filter the data.\n * @param {FieldSettingsModel} fields - Specify the fields to map the column in the data table.\n * @returns {void}\n\n */\n ComboBox.prototype.filter = function (dataSource, query, fields) {\n _super.prototype.filter.call(this, dataSource, query, fields);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Opens the popup that displays the list of items.\n *\n * @returns {void}\n\n */\n ComboBox.prototype.showPopup = function (e) {\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n _super.prototype.showPopup.call(this, e);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Hides the popup if it is in open state.\n *\n * @returns {void}\n\n */\n ComboBox.prototype.hidePopup = function (e) {\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n var inputValue = this.inputElement && this.inputElement.value === '' ? null\n : this.inputElement && this.inputElement.value;\n if (!isNullOrUndefined(this.listData)) {\n var isEscape = this.isEscapeKey;\n if (this.isEscapeKey) {\n Input.setValue(this.typedString, this.inputElement, this.floatLabelType, this.showClearButton);\n this.isEscapeKey = false;\n }\n if (this.autofill) {\n this.removeFillSelection();\n }\n var dataItem = this.isSelectCustom ? { text: '' } : this.getItemData();\n var selected = !isNullOrUndefined(this.list) ? this.list.querySelector('.' + dropDownListClasses.selected) : null;\n if (this.inputElement && dataItem.text === this.inputElement.value && !isNullOrUndefined(selected)) {\n if (this.isSelected) {\n this.onChangeEvent(e);\n this.isSelectCustom = false;\n }\n _super.prototype.hidePopup.call(this, e);\n return;\n }\n if (this.getModuleName() === 'combobox' && this.inputElement.value.trim() !== '') {\n var dataSource = this.sortedData;\n var type = this.typeOfData(dataSource).typeof;\n var searchItem = Search(this.inputElement.value, this.liCollections, 'Equal', true, dataSource, this.fields, type);\n this.selectedLI = searchItem.item;\n if (isNullOrUndefined(searchItem.index)) {\n searchItem.index = Search(this.inputElement.value, this.liCollections, 'StartsWith', true, dataSource, this.fields, type).index;\n }\n this.activeIndex = searchItem.index;\n if (!isNullOrUndefined(this.selectedLI)) {\n this.updateSelectedItem(this.selectedLI, null, true);\n }\n else if (isEscape) {\n this.isSelectCustom = true;\n this.removeSelection();\n }\n }\n if (!this.isEscapeKey && this.isTyped && !this.isInteracted) {\n this.customValue(e);\n }\n }\n if (isNullOrUndefined(this.listData) && this.allowCustom && !isNullOrUndefined(inputValue) && inputValue !== this.value) {\n this.customValue();\n }\n _super.prototype.hidePopup.call(this, e);\n };\n /**\n * Sets the focus to the component for interaction.\n *\n * @returns {void}\n */\n ComboBox.prototype.focusIn = function () {\n if (!this.enabled) {\n return;\n }\n if (Browser.isDevice && !this.isFiltering()) {\n this.preventFocus = true;\n }\n _super.prototype.focusIn.call(this);\n };\n /**\n * Allows you to clear the selected values from the component.\n *\n * @returns {void}\n\n */\n ComboBox.prototype.clear = function () {\n this.value = null;\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Moves the focus from the component if the component is already focused.\n *\n * @returns {void}\n\n */\n ComboBox.prototype.focusOut = function (e) {\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n _super.prototype.focusOut.call(this, e);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets all the list items bound on this component.\n *\n * @returns {Element[]}\n\n */\n ComboBox.prototype.getItems = function () {\n return _super.prototype.getItems.call(this);\n };\n /**\n * Gets the data Object that matches the given value.\n *\n * @param { string | number } value - Specifies the value of the list item.\n * @returns {Object}\n\n */\n ComboBox.prototype.getDataByValue = function (value) {\n return _super.prototype.getDataByValue.call(this, value);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n ComboBox.prototype.renderHightSearch = function () {\n // update high light search\n };\n __decorate([\n Property(false)\n ], ComboBox.prototype, \"autofill\", void 0);\n __decorate([\n Property(true)\n ], ComboBox.prototype, \"allowCustom\", void 0);\n __decorate([\n Property({})\n ], ComboBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(false)\n ], ComboBox.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"query\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"index\", void 0);\n __decorate([\n Property(true)\n ], ComboBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], ComboBox.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], ComboBox.prototype, \"customValueSpecifier\", void 0);\n __decorate([\n Event()\n ], ComboBox.prototype, \"filtering\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property('Never')\n ], ComboBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property('100%')\n ], ComboBox.prototype, \"width\", void 0);\n __decorate([\n Property('300px')\n ], ComboBox.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], ComboBox.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(false)\n ], ComboBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"value\", void 0);\n ComboBox = __decorate([\n NotifyPropertyChanges\n ], ComboBox);\n return ComboBox;\n}(DropDownList));\nexport { ComboBox };\n","import { isNullOrUndefined, extend, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { attributes as addAttributes } from '@syncfusion/ej2-base';\nimport { rowDataBound, queryCellInfo } from '../base/constant';\nimport { setStyleAndAttributes, getObject, extendObjWithFn, applyStickyLeftRightPosition, groupCaptionRowLeftRightPos, resetColspanGroupCaption } from '../base/util';\nimport { CellType } from '../base/enum';\nimport { CellMergeRender } from './cell-merge-renderer';\nimport * as literals from '../base/string-literals';\n/**\n * RowRenderer class which responsible for building row content.\n *\n * @hidden\n */\nvar RowRenderer = /** @class */ (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', { attrs: { role: 'row' } });\n }\n /* eslint-disable */\n /**\n * Function to render the row content based on Column[] and data.\n *\n * @param {Row} row - specifies the row\n * @param {Column[]} columns - specifies the columns\n * @param {Object} attributes - specifies the attributes\n * @param {string} rowTemplate - specifies the rowTemplate\n * @param {Element} cloneNode - specifies the cloneNode\n * @returns {Element} returns the element\n */\n /* eslint-enable */\n RowRenderer.prototype.render = function (row, columns, attributes, rowTemplate, cloneNode) {\n return this.refreshRow(row, columns, attributes, rowTemplate, cloneNode);\n };\n /* eslint-disable */\n /**\n * Function to refresh the row content based on Column[] and data.\n *\n * @param {Row} row - specifies the row\n * @param {Column[]} columns - specifies the column\n * @param {boolean} isChanged - specifies isChanged\n * @param {Object} attributes - specifies the attributes\n * @param {string} rowTemplate - specifies the rowTemplate\n * @returns {void}\n */\n /* eslint-enable */\n RowRenderer.prototype.refresh = function (row, columns, isChanged, attributes, rowTemplate) {\n var _this = this;\n if (isChanged) {\n row.data = extendObjWithFn({}, row.changes);\n this.refreshMergeCells(row);\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 var tempCells = [].slice.call(node.querySelectorAll('.e-templatecell'));\n if (this.parent.isReact && tempCells.length) {\n var _loop_1 = function (col) {\n if (col.template) {\n setTimeout(function () {\n _this.parent.refreshReactColumnTemplateByUid(col.uid, true);\n }, 0);\n return \"break\";\n }\n };\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var col = columns_1[_i];\n var state_1 = _loop_1(col);\n if (state_1 === \"break\")\n break;\n }\n }\n var attr = [].slice.call(tr.attributes);\n attr.map(function (item) {\n node.setAttribute(item['name'], item['value']);\n });\n node.innerHTML = '';\n for (var _a = 0, cells_1 = cells; _a < cells_1.length; _a++) {\n var cell = cells_1[_a];\n node.appendChild(cell);\n }\n };\n // tslint:disable-next-line:max-func-body-length\n RowRenderer.prototype.refreshRow = function (row, columns, attributes, rowTemplate, cloneNode, isEdit) {\n var tr = !isNullOrUndefined(cloneNode) ? cloneNode : this.element.cloneNode();\n var rowArgs = { data: row.data };\n var cellArgs = { data: row.data };\n var chekBoxEnable = this.parent.getColumns().filter(function (col) { return col.type === 'checkbox' && col.field; })[0];\n var value = false;\n if (chekBoxEnable) {\n value = getObject(chekBoxEnable.field, rowArgs.data);\n }\n var selIndex = this.parent.getSelectedRowIndexes();\n if (row.isDataRow) {\n row.isSelected = selIndex.indexOf(row.index) > -1 || value;\n }\n if (row.isDataRow && this.parent.isCheckBoxSelection\n && this.parent.checkAllRows === 'Check' && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n row.isSelected = true;\n if (selIndex.indexOf(row.index) === -1) {\n selIndex.push(row.index);\n }\n }\n this.buildAttributeFromRow(tr, row);\n addAttributes(tr, extend({}, attributes, {}));\n setStyleAndAttributes(tr, row.attributes);\n var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n var _loop_2 = function (i, len) {\n var cell = row.cells[parseInt(i.toString(), 10)];\n cell.isSelected = row.isSelected;\n cell.isColumnSelected = cell.column.isSelected;\n var cellRenderer = cellRendererFact.getCellRenderer(row.cells[parseInt(i.toString(), 10)].cellType\n || CellType.Data);\n var attrs = { 'index': !isNullOrUndefined(row.index) ? row.index.toString() : '' };\n if (row.isExpand && row.cells[parseInt(i.toString(), 10)].cellType === CellType.DetailExpand) {\n attrs['class'] = this_1.parent.isPrinting ? 'e-detailrowcollapse' : 'e-detailrowexpand';\n }\n var td = cellRenderer.render(row.cells[parseInt(i.toString(), 10)], row.data, attrs, row.isExpand, isEdit);\n if (row.cells[parseInt(i.toString(), 10)].cellType !== CellType.Filter) {\n if (row.cells[parseInt(i.toString(), 10)].cellType === CellType.Data\n || row.cells[parseInt(i.toString(), 10)].cellType === CellType.CommandColumn) {\n var isReactChild = this_1.parent.parentDetails && this_1.parent.parentDetails.parentInstObj &&\n this_1.parent.parentDetails.parentInstObj.isReact;\n if (((this_1.parent.isReact && this_1.parent.requireTemplateRef) || (isReactChild &&\n this_1.parent.parentDetails.parentInstObj.requireTemplateRef)) && cell.isTemplate) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var thisRef_1 = this_1;\n thisRef_1.parent.renderTemplates(function () {\n if (typeof (cell.column.template) !== 'string') {\n var ariaAttr = td.getAttribute('aria-label');\n td.setAttribute('aria-label', td.innerText + ariaAttr);\n }\n thisRef_1.parent.trigger(queryCellInfo, extend(cellArgs, {\n cell: td, column: cell.column, colSpan: 1,\n rowSpan: 1, foreignKeyData: row.cells[parseInt(i.toString(), 10)].foreignKeyData,\n requestType: thisRef_1.parent.requestTypeAction\n }));\n });\n }\n else {\n this_1.parent.trigger(queryCellInfo, extend(cellArgs, {\n cell: td, column: cell.column, colSpan: 1,\n rowSpan: 1, foreignKeyData: row.cells[parseInt(i.toString(), 10)].foreignKeyData,\n requestType: this_1.parent.requestTypeAction\n }));\n }\n var isRowSpanned = false;\n if (row.index > 0 && this_1.isSpan) {\n var rowsObject = this_1.parent.getRowsObject();\n var prevRowCells = this_1.parent.groupSettings.columns.length > 0 &&\n !rowsObject[row.index - 1].isDataRow ? rowsObject[row.index].cells : rowsObject[row.index - 1].cells;\n var uid_1 = 'uid';\n var prevRowCell = prevRowCells.filter(function (cell) {\n return cell.column.uid === row.cells[parseInt(i.toString(), 10)].column[\"\" + uid_1];\n })[0];\n isRowSpanned = prevRowCell.isRowSpanned ? prevRowCell.isRowSpanned : prevRowCell.rowSpanRange > 1;\n }\n if (cellArgs.colSpan > 1 || row.cells[parseInt(i.toString(), 10)].cellSpan > 1 || cellArgs.rowSpan > 1\n || 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 if (!row.cells[parseInt(i.toString(), 10)].isSpanned) {\n tr.appendChild(td);\n }\n }\n };\n var this_1 = this;\n for (var i = 0, len = row.cells.length; i < len; i++) {\n _loop_2(i, len);\n }\n var emptyColspan = 0;\n if (this.parent.groupSettings.columns.length && this.parent.getFrozenLeftColumnsCount()) {\n if (tr.classList.contains('e-groupcaptionrow')) {\n var freezeCells = [].slice.call(tr.querySelectorAll('.e-leftfreeze,.e-unfreeze,.e-rightfreeze,.e-fixedfreeze,.e-freezerightborder,.e-freezeleftborder'));\n if (freezeCells.length) {\n removeClass(freezeCells, ['e-leftfreeze', 'e-unfreeze', 'e-rightfreeze', 'e-fixedfreeze', 'e-freezerightborder', 'e-freezeleftborder']);\n }\n if (tr.querySelector('.e-summarycell')) {\n groupCaptionRowLeftRightPos(tr, this.parent);\n }\n else {\n for (var j = 0; j < tr.childNodes.length; j++) {\n var td = tr.childNodes[parseInt(j.toString(), 10)];\n td.classList.add('e-leftfreeze');\n applyStickyLeftRightPosition(td, j * 30, this.parent.enableRtl, 'Left');\n if (td.classList.contains('e-groupcaption')) {\n var oldColspan = parseInt(td.getAttribute('colspan'), 10);\n var colspan = resetColspanGroupCaption(this.parent, j);\n td.setAttribute('colspan', colspan.toString());\n emptyColspan = oldColspan - colspan;\n }\n }\n if (emptyColspan) {\n var td = this.parent.createElement('TD', {\n className: 'e-groupcaption',\n attrs: { colspan: emptyColspan.toString(), id: this.parent.element.id + 'captioncell', tabindex: '-1' }\n });\n tr.appendChild(td);\n }\n }\n }\n if (tr.querySelectorAll('.e-leftfreeze').length &&\n (tr.querySelectorAll('.e-indentcell').length || tr.querySelectorAll('.e-grouptopleftcell').length)) {\n var td = tr.querySelectorAll('.e-indentcell, .e-grouptopleftcell');\n for (var i = 0; i < td.length; i++) {\n td[parseInt(i.toString(), 10)].classList.add('e-leftfreeze');\n applyStickyLeftRightPosition(td[parseInt(i.toString(), 10)], i * 30, this.parent.enableRtl, 'Left');\n }\n }\n }\n var args = { row: tr, rowHeight: this.parent.rowHeight };\n if (row.isDataRow) {\n var eventArg_1 = extend(rowArgs, args);\n eventArg_1.isSelectable = true;\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n this.parent.parentDetails.parentInstObj.isReact;\n var cellTemplate = eventArg_1.row.querySelectorAll('.e-templatecell');\n if (((this.parent.isReact && this.parent.requireTemplateRef) || (isReactChild &&\n this.parent.parentDetails.parentInstObj.requireTemplateRef)) && cellTemplate.length) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var thisRef_2 = this;\n thisRef_2.parent.renderTemplates(function () {\n thisRef_2.parent.trigger(rowDataBound, eventArg_1);\n if (!eventArg_1.isSelectable) {\n row.isSelectable = eventArg_1.isSelectable;\n thisRef_2.disableRowSelection(thisRef_2, row, args, eventArg_1);\n }\n });\n }\n else {\n this.parent.trigger(rowDataBound, eventArg_1);\n }\n row.isSelectable = eventArg_1.isSelectable;\n var isDraggable = this.parent.isRowDragable();\n if (this.parent.allowPaging && this.parent.selectionSettings.persistSelection) {\n var primaryKey_1 = this.parent.getPrimaryKeyFieldNames()[0];\n var pKey_1 = row.data ? row.data[\"\" + primaryKey_1] : null;\n var SelectedRecords = eventArg_1.isSelectable ? this.parent.partialSelectedRecords :\n this.parent.disableSelectedRecords;\n if (!SelectedRecords.some(function (data) { return data[\"\" + primaryKey_1] === pKey_1; })) {\n SelectedRecords.push(row.data);\n }\n }\n if (!eventArg_1.isSelectable) {\n this.disableRowSelection(this, row, args, eventArg_1);\n }\n if (this.parent.childGrid || isDraggable || this.parent.detailTemplate) {\n var td = tr.querySelectorAll('.e-rowcell:not(.e-hide)')[0];\n if (td) {\n td.classList.add('e-detailrowvisible');\n }\n }\n }\n if (this.parent.enableVirtualization) {\n rowArgs.rowHeight = this.parent.rowHeight;\n }\n if (rowArgs.rowHeight) {\n tr.style.height = rowArgs.rowHeight + 'px';\n }\n else if (this.parent.rowHeight && (tr.querySelector('.e-headercell') || tr.querySelector('.e-groupcaption'))) {\n tr.style.height = this.parent.rowHeight + 'px';\n }\n if (row.cssClass) {\n tr.classList.add(row.cssClass);\n }\n if (row.lazyLoadCssClass) {\n tr.classList.add(row.lazyLoadCssClass);\n }\n if (this.parent.rowRenderingMode === 'Vertical' && this.parent.allowTextWrap && (this.parent.textWrapSettings.wrapMode === 'Header'\n || this.parent.textWrapSettings.wrapMode === 'Both')) {\n tr.classList.add('e-verticalwrap');\n }\n var vFTable = this.parent.enableColumnVirtualization;\n if (!vFTable && this.parent.aggregates.length && this.parent.element.scrollHeight > this.parent.height) {\n for (var i = 0; i < this.parent.aggregates.length; i++) {\n var property = 'properties';\n var column = 'columns';\n if (this.parent.aggregates[parseInt(i.toString(), 10)][\"\" + property][\"\" + column][0].footerTemplate) {\n var summarycell = [].slice.call(tr.getElementsByClassName('e-summarycell'));\n if (summarycell.length) {\n var lastSummaryCell = (summarycell[summarycell.length - 1]);\n addClass([lastSummaryCell], ['e-lastsummarycell']);\n var firstSummaryCell = (summarycell[0]);\n addClass([firstSummaryCell], ['e-firstsummarycell']);\n }\n }\n }\n }\n return tr;\n };\n RowRenderer.prototype.disableRowSelection = function (thisRef, row, args, eventArg) {\n var selIndex = this.parent.getSelectedRowIndexes();\n this.parent.selectionModule.isPartialSelection = true;\n row.isSelected = false;\n var selRowIndex = selIndex.indexOf(row.index);\n if (selRowIndex > -1) {\n selIndex.splice(selRowIndex, 1);\n }\n var chkBox = args.row.querySelectorAll('.e-rowcell.e-gridchkbox');\n var isDrag = eventArg.row.querySelector('.e-rowdragdrop');\n var cellIdx = thisRef.parent.groupSettings.columns.length + (isDrag || thisRef.parent.isDetail() ? 1 : 0);\n for (var i = 0; i < chkBox.length; i++) {\n chkBox[parseInt(i.toString(), 10)].firstElementChild.classList.add('e-checkbox-disabled');\n chkBox[parseInt(i.toString(), 10)].querySelector('.e-frame').classList.remove('e-check');\n }\n if (row.cells.length) {\n for (var i = cellIdx; i < row.cells.length; i++) {\n var cell = eventArg.row.querySelector('.e-rowcell[data-colindex=\"' + row.cells[parseInt(i.toString(), 10)].index + '\"]');\n if (cell) {\n removeClass([cell], ['e-selectionbackground', 'e-active']);\n }\n }\n }\n if (isDrag) {\n removeClass([isDrag], ['e-selectionbackground', 'e-active']);\n }\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 return row;\n };\n /* eslint-disable */\n /**\n * Function to check and add alternative row css class.\n *\n * @param {Element} tr - specifies the tr element\n * @param {Row} row - specifies the row\n * @returns {void}\n */\n /* eslint-enable */\n RowRenderer.prototype.buildAttributeFromRow = function (tr, row) {\n var attr = {};\n var prop = { 'rowindex': literals.dataRowIndex, 'dataUID': 'data-uid', 'ariaSelected': 'aria-selected' };\n var classes = [];\n if (row.isDataRow) {\n classes.push(literals.row);\n }\n if (row.isAltRow) {\n classes.push('e-altrow');\n }\n if (row.isCaptionRow) {\n classes.push('e-groupcaptionrow');\n }\n if (row.isAggregateRow && row.parentUid) {\n classes.push('e-groupfooterrow');\n }\n if (!isNullOrUndefined(row.index)) {\n attr[literals.ariaRowIndex] = row.index + 1;\n attr[prop.rowindex] = row.index;\n }\n if (row.rowSpan) {\n attr.rowSpan = row.rowSpan;\n }\n if (row.uid) {\n attr[prop.dataUID] = row.uid;\n }\n if (row.isSelected) {\n attr[prop.ariaSelected] = true;\n }\n if (row.visible === false) {\n classes.push('e-hide');\n }\n attr.class = classes;\n setStyleAndAttributes(tr, attr);\n };\n return RowRenderer;\n}());\nexport { RowRenderer };\n","import { isNullOrUndefined, getValue, setValue } from '@syncfusion/ej2-base';\nimport { Row } from '../models/row';\nimport { CellType } from '../base/enum';\nimport { Cell } from '../models/cell';\nimport { getUid } from '../base/util';\nimport { getForeignData } from '../../grid/base/util';\nimport * as events from '../base/constant';\n/**\n * RowModelGenerator is used to generate grid data rows.\n *\n * @hidden\n */\nvar RowModelGenerator = /** @class */ (function () {\n /**\n * Constructor for header renderer module\n *\n * @param {IGrid} parent - specifies the IGrid\n */\n function RowModelGenerator(parent) {\n this.parent = parent;\n }\n RowModelGenerator.prototype.generateRows = function (data, args) {\n var rows = [];\n var startIndex = this.parent.enableVirtualization && args ? args.startIndex : 0;\n startIndex = this.parent.enableInfiniteScrolling && args ? this.getInfiniteIndex(args) : startIndex;\n if (this.parent.enableImmutableMode && args && args.startIndex) {\n startIndex = args.startIndex;\n }\n for (var i = 0, len = Object.keys(data).length; i < len; i++, startIndex++) {\n rows[parseInt(i.toString(), 10)] = this.generateRow(data[parseInt(i.toString(), 10)], startIndex);\n }\n return rows;\n };\n RowModelGenerator.prototype.ensureColumns = function () {\n //TODO: generate dummy column for group, detail here;\n var cols = [];\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 if (this.parent.isRowDragable()) {\n cols.push(this.generateCell({}, null, CellType.RowDragIcon));\n }\n return cols;\n };\n RowModelGenerator.prototype.generateRow = function (data, index, cssClass, indent, pid, tIndex, parentUid) {\n var options = {};\n options.foreignKeyData = {};\n options.uid = getUid('grid-row');\n options.data = data;\n options.index = index;\n options.indent = indent;\n options.tIndex = tIndex;\n options.isDataRow = true;\n options.parentGid = pid;\n options.parentUid = parentUid;\n if (this.parent.isPrinting) {\n if (this.parent.hierarchyPrintMode === 'All') {\n options.isExpand = true;\n }\n else if (this.parent.hierarchyPrintMode === 'Expanded' && this.parent.expandedRows && this.parent.expandedRows[parseInt(index.toString(), 10)]) {\n options.isExpand = this.parent.expandedRows[parseInt(index.toString(), 10)].isExpand;\n }\n }\n options.cssClass = cssClass;\n options.isAltRow = this.parent.enableAltRow ? index % 2 !== 0 : false;\n options.isAltRow = this.parent.enableAltRow ? index % 2 !== 0 : false;\n options.isSelected = this.parent.getSelectedRowIndexes().indexOf(index) > -1;\n this.refreshForeignKeyRow(options);\n var cells = this.ensureColumns();\n var row = new Row(options, this.parent);\n row.cells = this.parent.getFrozenMode() === 'Right' ? this.generateCells(options).concat(cells)\n : cells.concat(this.generateCells(options));\n return row;\n };\n RowModelGenerator.prototype.refreshForeignKeyRow = function (options) {\n var foreignKeyColumns = this.parent.getForeignKeyColumns();\n for (var i = 0; i < foreignKeyColumns.length; i++) {\n setValue(foreignKeyColumns[parseInt(i.toString(), 10)].field, getForeignData(foreignKeyColumns[parseInt(i.toString(), 10)], options.data), options.foreignKeyData);\n }\n };\n RowModelGenerator.prototype.generateCells = function (options) {\n var dummies = this.parent.getColumns();\n var tmp = [];\n for (var i = 0; i < dummies.length; i++) {\n tmp.push(this.generateCell(dummies[parseInt(i.toString(), 10)], options.uid, isNullOrUndefined(dummies[parseInt(i.toString(), 10)].commands) ? undefined : CellType.CommandColumn, null, i, options.foreignKeyData));\n }\n return tmp;\n };\n /**\n *\n * @param {Column} column - Defines column details\n * @param {string} rowId - Defines row id\n * @param {CellType} cellType - Defines cell type\n * @param {number} colSpan - Defines colSpan\n * @param {number} oIndex - Defines index\n * @param {Object} foreignKeyData - Defines foreign key data\n * @returns {Cell} returns cell model\n * @hidden\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 if (opt.isDataCell || opt.column.type === 'checkbox' || opt.commands) {\n opt.index = oIndex;\n }\n return new Cell(opt);\n };\n RowModelGenerator.prototype.refreshRows = function (input) {\n for (var i = 0; i < input.length; i++) {\n this.refreshForeignKeyRow(input[parseInt(i.toString(), 10)]);\n input[parseInt(i.toString(), 10)].cells = this.generateCells(input[parseInt(i.toString(), 10)]);\n }\n return input;\n };\n RowModelGenerator.prototype.getInfiniteIndex = function (args) {\n return args.requestType === 'infiniteScroll' || args.requestType === 'delete' || args.action === 'add'\n ? (isNullOrUndefined(args.startIndex) ? args['index'] : args.startIndex) : 0;\n };\n return RowModelGenerator;\n}());\nexport { RowModelGenerator };\n","/**\n * Defines types of Cell\n *\n * @hidden\n */\nexport var CellType;\n(function (CellType) {\n /** Defines CellType as Data */\n CellType[CellType[\"Data\"] = 0] = \"Data\";\n /** Defines CellType as Header */\n CellType[CellType[\"Header\"] = 1] = \"Header\";\n /** Defines CellType as Summary */\n CellType[CellType[\"Summary\"] = 2] = \"Summary\";\n /** Defines CellType as GroupSummary */\n CellType[CellType[\"GroupSummary\"] = 3] = \"GroupSummary\";\n /** Defines CellType as CaptionSummary */\n CellType[CellType[\"CaptionSummary\"] = 4] = \"CaptionSummary\";\n /** Defines CellType as Filter */\n CellType[CellType[\"Filter\"] = 5] = \"Filter\";\n /** Defines CellType as Indent */\n CellType[CellType[\"Indent\"] = 6] = \"Indent\";\n /** Defines CellType as GroupCaption */\n CellType[CellType[\"GroupCaption\"] = 7] = \"GroupCaption\";\n /** Defines CellType as GroupCaptionEmpty */\n CellType[CellType[\"GroupCaptionEmpty\"] = 8] = \"GroupCaptionEmpty\";\n /** Defines CellType as Expand */\n CellType[CellType[\"Expand\"] = 9] = \"Expand\";\n /** Defines CellType as HeaderIndent */\n CellType[CellType[\"HeaderIndent\"] = 10] = \"HeaderIndent\";\n /** Defines CellType as StackedHeader */\n CellType[CellType[\"StackedHeader\"] = 11] = \"StackedHeader\";\n /** Defines CellType as DetailHeader */\n CellType[CellType[\"DetailHeader\"] = 12] = \"DetailHeader\";\n /** Defines CellType as DetailExpand */\n CellType[CellType[\"DetailExpand\"] = 13] = \"DetailExpand\";\n /** Defines CellType as CommandColumn */\n CellType[CellType[\"CommandColumn\"] = 14] = \"CommandColumn\";\n /** Defines CellType as DetailFooterIntent */\n CellType[CellType[\"DetailFooterIntent\"] = 15] = \"DetailFooterIntent\";\n /** Defines CellType as RowDrag */\n CellType[CellType[\"RowDragIcon\"] = 16] = \"RowDragIcon\";\n /** Defines CellType as RowDragHeader */\n CellType[CellType[\"RowDragHIcon\"] = 17] = \"RowDragHIcon\";\n})(CellType || (CellType = {}));\n/**\n * Defines types of Render\n *\n * @hidden\n */\nexport var RenderType;\n(function (RenderType) {\n /** Defines RenderType as Header */\n RenderType[RenderType[\"Header\"] = 0] = \"Header\";\n /** Defines RenderType as Content */\n RenderType[RenderType[\"Content\"] = 1] = \"Content\";\n /** Defines RenderType as Summary */\n RenderType[RenderType[\"Summary\"] = 2] = \"Summary\";\n})(RenderType || (RenderType = {}));\n/**\n * Defines Predefined toolbar items.\n *\n * @hidden\n */\nexport var ToolbarItem;\n(function (ToolbarItem) {\n ToolbarItem[ToolbarItem[\"Add\"] = 0] = \"Add\";\n ToolbarItem[ToolbarItem[\"Edit\"] = 1] = \"Edit\";\n ToolbarItem[ToolbarItem[\"Update\"] = 2] = \"Update\";\n ToolbarItem[ToolbarItem[\"Delete\"] = 3] = \"Delete\";\n ToolbarItem[ToolbarItem[\"Cancel\"] = 4] = \"Cancel\";\n ToolbarItem[ToolbarItem[\"Print\"] = 5] = \"Print\";\n ToolbarItem[ToolbarItem[\"Search\"] = 6] = \"Search\";\n ToolbarItem[ToolbarItem[\"ColumnChooser\"] = 7] = \"ColumnChooser\";\n ToolbarItem[ToolbarItem[\"PdfExport\"] = 8] = \"PdfExport\";\n ToolbarItem[ToolbarItem[\"ExcelExport\"] = 9] = \"ExcelExport\";\n ToolbarItem[ToolbarItem[\"CsvExport\"] = 10] = \"CsvExport\";\n ToolbarItem[ToolbarItem[\"WordExport\"] = 11] = \"WordExport\";\n})(ToolbarItem || (ToolbarItem = {}));\n/**\n * Defines types of responsive dialogs\n *\n * @hidden\n */\nexport var ResponsiveDialogAction;\n(function (ResponsiveDialogAction) {\n /** Defines dialog type as Edit */\n ResponsiveDialogAction[ResponsiveDialogAction[\"isEdit\"] = 0] = \"isEdit\";\n /** Defines dialog type as Add */\n ResponsiveDialogAction[ResponsiveDialogAction[\"isAdd\"] = 1] = \"isAdd\";\n /** Defines dialog type as Sort */\n ResponsiveDialogAction[ResponsiveDialogAction[\"isSort\"] = 2] = \"isSort\";\n /** Defines dialog type as Filter */\n ResponsiveDialogAction[ResponsiveDialogAction[\"isFilter\"] = 3] = \"isFilter\";\n /** Defines dialog type as ColMenu */\n ResponsiveDialogAction[ResponsiveDialogAction[\"isColMenu\"] = 4] = \"isColMenu\";\n /** Defines dialog type as ColumChooser */\n ResponsiveDialogAction[ResponsiveDialogAction[\"isColumnChooser\"] = 5] = \"isColumnChooser\";\n})(ResponsiveDialogAction || (ResponsiveDialogAction = {}));\n/**\n * Defines responsive toolbar actions\n *\n * @hidden\n */\nexport var ResponsiveToolbarAction;\n(function (ResponsiveToolbarAction) {\n /** Defines initial responsive toolbar buttons */\n ResponsiveToolbarAction[ResponsiveToolbarAction[\"isInitial\"] = 0] = \"isInitial\";\n /** Defines responsive toolbar search */\n ResponsiveToolbarAction[ResponsiveToolbarAction[\"isSearch\"] = 1] = \"isSearch\";\n})(ResponsiveToolbarAction || (ResponsiveToolbarAction = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Touch, Component, EventHandler, selectAll, getUniqueID, removeClass } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Property, Browser, detach, createElement as buildTag } from '@syncfusion/ej2-base';\nimport { classList, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar CLS_ROOT = 'e-vscroll';\nvar CLS_RTL = 'e-rtl';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_VSCROLLBAR = 'e-vscroll-bar';\nvar CLS_VSCROLLCON = 'e-vscroll-content';\nvar CLS_NAVARROW = 'e-nav-arrow';\nvar CLS_NAVUPARROW = 'e-nav-up-arrow';\nvar CLS_NAVDOWNARROW = 'e-nav-down-arrow';\nvar CLS_VSCROLLNAV = 'e-scroll-nav';\nvar CLS_VSCROLLNAVUP = 'e-scroll-up-nav';\nvar CLS_VSCROLLNAVDOWN = 'e-scroll-down-nav';\nvar CLS_DEVICE = 'e-scroll-device';\nvar CLS_OVERLAY = 'e-scroll-overlay';\nvar CLS_UPOVERLAY = 'e-scroll-up-overlay';\nvar CLS_DOWNOVERLAY = 'e-scroll-down-overlay';\nvar OVERLAY_MAXWID = 40;\n/**\n * VScroll module is introduces vertical scroller when content exceeds the current viewing area.\n * It can be useful for the components like Toolbar, Tab which needs vertical scrolling alone.\n * Hidden content can be view by touch moving or icon click.\n * ```html\n *
\n * \n * ```\n */\nvar VScroll = /** @class */ (function (_super) {\n __extends(VScroll, _super);\n /**\n * Initializes a new instance of the VScroll class.\n *\n * @param {VScrollModel} options - Specifies VScroll model properties as options.\n * @param {string | HTMLElement} element - Specifies the element for which vertical scrolling applies.\n */\n function VScroll(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler\n *\n * @private\n * @returns {void}\n */\n VScroll.prototype.preRender = function () {\n this.browser = Browser.info.name;\n this.browserCheck = this.browser === 'mozilla';\n this.isDevice = Browser.isDevice;\n this.customStep = true;\n var ele = this.element;\n this.ieCheck = this.browser === 'edge' || this.browser === 'msie';\n this.initialize();\n if (ele.id === '') {\n ele.id = getUniqueID('vscroll');\n this.uniqueId = true;\n }\n ele.style.display = 'block';\n if (this.enableRtl) {\n ele.classList.add(CLS_RTL);\n }\n };\n /**\n * To Initialize the vertical scroll rendering\n *\n * @private\n * @returns {void}\n */\n VScroll.prototype.render = function () {\n this.touchModule = new Touch(this.element, { scroll: this.touchHandler.bind(this), swipe: this.swipeHandler.bind(this) });\n EventHandler.add(this.scrollEle, 'scroll', this.scrollEventHandler, this);\n if (!this.isDevice) {\n this.createNavIcon(this.element);\n }\n else {\n this.element.classList.add(CLS_DEVICE);\n this.createOverlayElement(this.element);\n }\n this.setScrollState();\n EventHandler.add(this.element, 'wheel', this.wheelEventHandler, this);\n };\n VScroll.prototype.setScrollState = function () {\n if (isNullOrUndefined(this.scrollStep) || this.scrollStep < 0) {\n this.scrollStep = this.scrollEle.offsetHeight;\n this.customStep = false;\n }\n else {\n this.customStep = true;\n }\n };\n VScroll.prototype.initialize = function () {\n var scrollCnt = buildTag('div', { className: CLS_VSCROLLCON });\n var scrollBar = buildTag('div', { className: CLS_VSCROLLBAR });\n scrollBar.setAttribute('tabindex', '-1');\n var ele = this.element;\n var innerEle = [].slice.call(ele.children);\n for (var _i = 0, innerEle_1 = innerEle; _i < innerEle_1.length; _i++) {\n var ele_1 = innerEle_1[_i];\n scrollCnt.appendChild(ele_1);\n }\n scrollBar.appendChild(scrollCnt);\n ele.appendChild(scrollBar);\n scrollBar.style.overflow = 'hidden';\n this.scrollEle = scrollBar;\n this.scrollItems = scrollCnt;\n };\n VScroll.prototype.getPersistData = function () {\n var keyEntity = ['scrollStep'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Returns the current module name.\n *\n * @returns {string} - It returns the current module name.\n * @private\n */\n VScroll.prototype.getModuleName = function () {\n return 'vScroll';\n };\n /**\n * Removes the control from the DOM and also removes all its related events.\n *\n * @returns {void}\n */\n VScroll.prototype.destroy = function () {\n var el = this.element;\n el.style.display = '';\n removeClass([this.element], [CLS_ROOT, CLS_DEVICE, CLS_RTL]);\n var navs = selectAll('.e-' + el.id + '_nav.' + CLS_VSCROLLNAV, el);\n var overlays = selectAll('.' + CLS_OVERLAY, el);\n [].slice.call(overlays).forEach(function (ele) {\n detach(ele);\n });\n for (var _i = 0, _a = [].slice.call(this.scrollItems.children); _i < _a.length; _i++) {\n var elem = _a[_i];\n el.appendChild(elem);\n }\n if (this.uniqueId) {\n this.element.removeAttribute('id');\n }\n detach(this.scrollEle);\n if (navs.length > 0) {\n detach(navs[0]);\n if (!isNullOrUndefined(navs[1])) {\n detach(navs[1]);\n }\n }\n EventHandler.remove(this.scrollEle, 'scroll', this.scrollEventHandler);\n this.touchModule.destroy();\n this.touchModule = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Specifies the value to disable/enable the VScroll component.\n * When set to `true` , the component will be disabled.\n *\n * @param {boolean} value - Based on this Boolean value, VScroll will be enabled (false) or disabled (true).\n * @returns {void}.\n */\n VScroll.prototype.disable = function (value) {\n var navEle = selectAll('.e-scroll-nav:not(.' + CLS_DISABLE + ')', this.element);\n if (value) {\n this.element.classList.add(CLS_DISABLE);\n }\n else {\n this.element.classList.remove(CLS_DISABLE);\n }\n [].slice.call(navEle).forEach(function (el) {\n el.setAttribute('tabindex', !value ? '0' : '-1');\n });\n };\n VScroll.prototype.createOverlayElement = function (element) {\n var id = element.id.concat('_nav');\n var downOverlayEle = buildTag('div', { className: CLS_OVERLAY + ' ' + CLS_DOWNOVERLAY });\n var clsDown = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVDOWN);\n var downEle = buildTag('div', { id: id.concat('down'), className: clsDown });\n var navItem = buildTag('div', { className: CLS_NAVDOWNARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n downEle.appendChild(navItem);\n var upEle = buildTag('div', { className: CLS_OVERLAY + ' ' + CLS_UPOVERLAY });\n if (this.ieCheck) {\n downEle.classList.add('e-ie-align');\n }\n element.appendChild(downOverlayEle);\n element.appendChild(downEle);\n element.insertBefore(upEle, element.firstChild);\n this.eventBinding([downEle]);\n };\n VScroll.prototype.createNavIcon = function (element) {\n var id = element.id.concat('_nav');\n var clsDown = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVDOWN);\n var nav = buildTag('div', { id: id.concat('_down'), className: clsDown });\n nav.setAttribute('aria-disabled', 'false');\n var navItem = buildTag('div', { className: CLS_NAVDOWNARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n var clsUp = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVUP);\n var navElement = buildTag('div', { id: id.concat('_up'), className: clsUp + ' ' + CLS_DISABLE });\n navElement.setAttribute('aria-disabled', 'true');\n var navUpItem = buildTag('div', { className: CLS_NAVUPARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n navElement.appendChild(navUpItem);\n nav.appendChild(navItem);\n nav.setAttribute('tabindex', '0');\n element.appendChild(nav);\n element.insertBefore(navElement, element.firstChild);\n if (this.ieCheck) {\n nav.classList.add('e-ie-align');\n navElement.classList.add('e-ie-align');\n }\n this.eventBinding([nav, navElement]);\n };\n VScroll.prototype.onKeyPress = function (ev) {\n var _this = this;\n if (ev.key === 'Enter') {\n var timeoutFun_1 = function () {\n _this.keyTimeout = true;\n _this.eleScrolling(10, ev.target, true);\n };\n this.keyTimer = window.setTimeout(function () {\n timeoutFun_1();\n }, 100);\n }\n };\n VScroll.prototype.onKeyUp = function (ev) {\n if (ev.key !== 'Enter') {\n return;\n }\n if (this.keyTimeout) {\n this.keyTimeout = false;\n }\n else {\n ev.target.click();\n }\n clearTimeout(this.keyTimer);\n };\n VScroll.prototype.eventBinding = function (element) {\n var _this = this;\n [].slice.call(element).forEach(function (ele) {\n new Touch(ele, { tapHold: _this.tabHoldHandler.bind(_this), tapHoldThreshold: 500 });\n ele.addEventListener('keydown', _this.onKeyPress.bind(_this));\n ele.addEventListener('keyup', _this.onKeyUp.bind(_this));\n ele.addEventListener('mouseup', _this.repeatScroll.bind(_this));\n ele.addEventListener('touchend', _this.repeatScroll.bind(_this));\n ele.addEventListener('contextmenu', function (e) {\n e.preventDefault();\n });\n EventHandler.add(ele, 'click', _this.clickEventHandler, _this);\n });\n };\n VScroll.prototype.repeatScroll = function () {\n clearInterval(this.timeout);\n };\n VScroll.prototype.tabHoldHandler = function (ev) {\n var _this = this;\n var trgt = ev.originalEvent.target;\n trgt = this.contains(trgt, CLS_VSCROLLNAV) ? trgt.firstElementChild : trgt;\n var scrollDistance = 10;\n var timeoutFun = function () {\n _this.eleScrolling(scrollDistance, trgt, true);\n };\n this.timeout = window.setInterval(function () {\n timeoutFun();\n }, 50);\n };\n VScroll.prototype.contains = function (element, className) {\n return element.classList.contains(className);\n };\n VScroll.prototype.eleScrolling = function (scrollDis, trgt, isContinuous) {\n var classList = trgt.classList;\n if (classList.contains(CLS_VSCROLLNAV)) {\n classList = trgt.querySelector('.' + CLS_NAVARROW).classList;\n }\n if (classList.contains(CLS_NAVDOWNARROW)) {\n this.frameScrollRequest(scrollDis, 'add', isContinuous);\n }\n else if (classList.contains(CLS_NAVUPARROW)) {\n this.frameScrollRequest(scrollDis, '', isContinuous);\n }\n };\n VScroll.prototype.clickEventHandler = function (event) {\n this.eleScrolling(this.scrollStep, event.target, false);\n };\n VScroll.prototype.wheelEventHandler = function (e) {\n e.preventDefault();\n this.frameScrollRequest(this.scrollStep, (e.deltaY > 0 ? 'add' : ''), false);\n };\n VScroll.prototype.swipeHandler = function (e) {\n var swipeElement = this.scrollEle;\n var distance;\n if (e.velocity <= 1) {\n distance = e.distanceY / (e.velocity * 10);\n }\n else {\n distance = e.distanceY / e.velocity;\n }\n var start = 0.5;\n var animate = function () {\n var step = Math.sin(start);\n if (step <= 0) {\n window.cancelAnimationFrame(step);\n }\n else {\n if (e.swipeDirection === 'Up') {\n swipeElement.scrollTop += distance * step;\n }\n else if (e.swipeDirection === 'Down') {\n swipeElement.scrollTop -= distance * step;\n }\n start -= 0.02;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n VScroll.prototype.scrollUpdating = function (scrollVal, action) {\n if (action === 'add') {\n this.scrollEle.scrollTop += scrollVal;\n }\n else {\n this.scrollEle.scrollTop -= scrollVal;\n }\n };\n VScroll.prototype.frameScrollRequest = function (scrollValue, action, isContinuous) {\n var _this = this;\n var step = 10;\n if (isContinuous) {\n this.scrollUpdating(scrollValue, action);\n return;\n }\n if (!this.customStep) {\n [].slice.call(selectAll('.' + CLS_OVERLAY, this.element)).forEach(function (el) {\n scrollValue -= el.offsetHeight;\n });\n }\n var animate = function () {\n if (scrollValue < step) {\n window.cancelAnimationFrame(step);\n }\n else {\n _this.scrollUpdating(step, action);\n scrollValue -= step;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n VScroll.prototype.touchHandler = function (e) {\n var el = this.scrollEle;\n var distance = e.distanceY;\n if (e.scrollDirection === 'Up') {\n el.scrollTop = el.scrollTop + distance;\n }\n else if (e.scrollDirection === 'Down') {\n el.scrollTop = el.scrollTop - distance;\n }\n };\n VScroll.prototype.arrowDisabling = function (addDisableCls, removeDisableCls) {\n if (this.isDevice) {\n var arrowEle = isNullOrUndefined(addDisableCls) ? removeDisableCls : addDisableCls;\n var arrowIcon = arrowEle.querySelector('.' + CLS_NAVARROW);\n if (isNullOrUndefined(addDisableCls)) {\n classList(arrowIcon, [CLS_NAVDOWNARROW], [CLS_NAVUPARROW]);\n }\n else {\n classList(arrowIcon, [CLS_NAVUPARROW], [CLS_NAVDOWNARROW]);\n }\n }\n else {\n addDisableCls.classList.add(CLS_DISABLE);\n addDisableCls.setAttribute('aria-disabled', 'true');\n addDisableCls.removeAttribute('tabindex');\n removeDisableCls.classList.remove(CLS_DISABLE);\n removeDisableCls.setAttribute('aria-disabled', 'false');\n removeDisableCls.setAttribute('tabindex', '0');\n }\n this.repeatScroll();\n };\n VScroll.prototype.scrollEventHandler = function (e) {\n var target = e.target;\n var height = target.offsetHeight;\n var navUpEle = this.element.querySelector('.' + CLS_VSCROLLNAVUP);\n var navDownEle = this.element.querySelector('.' + CLS_VSCROLLNAVDOWN);\n var upOverlay = this.element.querySelector('.' + CLS_UPOVERLAY);\n var downOverlay = this.element.querySelector('.' + CLS_DOWNOVERLAY);\n var scrollTop = target.scrollTop;\n if (scrollTop <= 0) {\n scrollTop = -scrollTop;\n }\n if (this.isDevice) {\n if (scrollTop < OVERLAY_MAXWID) {\n upOverlay.style.height = scrollTop + 'px';\n }\n else {\n upOverlay.style.height = '40px';\n }\n if ((target.scrollHeight - Math.ceil(height + scrollTop)) < OVERLAY_MAXWID) {\n downOverlay.style.height = (target.scrollHeight - Math.ceil(height + scrollTop)) + 'px';\n }\n else {\n downOverlay.style.height = '40px';\n }\n }\n if (scrollTop === 0) {\n this.arrowDisabling(navUpEle, navDownEle);\n }\n else if (Math.ceil(height + scrollTop + .1) >= target.scrollHeight) {\n this.arrowDisabling(navDownEle, navUpEle);\n }\n else {\n var disEle = this.element.querySelector('.' + CLS_VSCROLLNAV + '.' + CLS_DISABLE);\n if (disEle) {\n disEle.classList.remove(CLS_DISABLE);\n disEle.setAttribute('aria-disabled', 'false');\n disEle.setAttribute('tabindex', '0');\n }\n }\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of property that changed.\n *\n * @param {VScrollModel} newProp - It contains the new value of data.\n * @param {VScrollModel} oldProp - It contains the old value of data.\n * @returns {void}\n * @private\n */\n VScroll.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'scrollStep':\n this.setScrollState();\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n this.element.classList.add(CLS_RTL);\n }\n else {\n this.element.classList.remove(CLS_RTL);\n }\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], VScroll.prototype, \"scrollStep\", void 0);\n VScroll = __decorate([\n NotifyPropertyChanges\n ], VScroll);\n return VScroll;\n}(Component));\nexport { VScroll };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { selectAll, select, createElement, Base, detach } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Event, onIntlChange } from '@syncfusion/ej2-base';\nimport { Internationalization, L10n } from '@syncfusion/ej2-base';\n/**\n * global declarations\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport var regex = {\n /* eslint-disable no-useless-escape */\n EMAIL: new RegExp('^[A-Za-z0-9._%+-]{1,}@[A-Za-z0-9._%+-]{1,}([.]{1}[a-zA-Z0-9]{2,}' +\n '|[.]{1}[a-zA-Z0-9]{2,4}[.]{1}[a-zA-Z0-9]{2,4})$'),\n /* eslint-disable-next-line security/detect-unsafe-regex */\n URL: /^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$/m,\n DATE_ISO: new RegExp('^([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$'),\n DIGITS: new RegExp('^[0-9]*$'),\n PHONE: new RegExp('^[+]?[0-9]{9,13}$'),\n CREDITCARD: new RegExp('^\\\\d{13,16}$')\n /* eslint-enable no-useless-escape */\n};\n/**\n * ErrorOption values\n *\n * @private\n */\nexport var ErrorOption;\n(function (ErrorOption) {\n /**\n * Defines the error message.\n */\n ErrorOption[ErrorOption[\"Message\"] = 0] = \"Message\";\n /**\n * Defines the error element type.\n */\n ErrorOption[ErrorOption[\"Label\"] = 1] = \"Label\";\n})(ErrorOption || (ErrorOption = {}));\n/**\n * FormValidator class enables you to validate the form fields based on your defined rules\n * ```html\n *
\n * \n * \n *
\n * \n * ```\n */\nvar FormValidator = /** @class */ (function (_super) {\n __extends(FormValidator, _super);\n /**\n * Initializes the FormValidator.\n *\n * @param {string | HTMLFormElement} element - Specifies the element to render as component.\n * @param {FormValidatorModel} options - Specifies the FormValidator model.\n * @private\n */\n function FormValidator(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.validated = [];\n _this.errorRules = [];\n _this.allowSubmit = false;\n _this.required = 'required';\n _this.infoElement = null;\n _this.inputElement = null;\n _this.selectQuery = 'input:not([type=reset]):not([type=button]), select, textarea';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _this.localyMessage = {};\n /**\n * Specifies the default messages for validation rules.\n *\n * @default { List of validation message }\n */\n _this.defaultMessages = {\n required: 'This field is required.',\n email: 'Please enter a valid email address.',\n url: 'Please enter a valid URL.',\n date: 'Please enter a valid date.',\n dateIso: 'Please enter a valid date ( ISO ).',\n creditcard: 'Please enter valid card number',\n number: 'Please enter a valid number.',\n digits: 'Please enter only digits.',\n maxLength: 'Please enter no more than {0} characters.',\n minLength: 'Please enter at least {0} characters.',\n rangeLength: 'Please enter a value between {0} and {1} characters long.',\n range: 'Please enter a value between {0} and {1}.',\n max: 'Please enter a value less than or equal to {0}.',\n min: 'Please enter a value greater than or equal to {0}.',\n regex: 'Please enter a correct value.',\n tel: 'Please enter a valid phone number.',\n pattern: 'Please enter a correct pattern value.',\n equalTo: 'Please enter the valid match text'\n };\n if (typeof _this.rules === 'undefined') {\n _this.rules = {};\n }\n _this.l10n = new L10n('formValidator', _this.defaultMessages, _this.locale);\n if (_this.locale) {\n _this.localeFunc();\n }\n onIntlChange.on('notifyExternalChange', _this.afterLocalization, _this);\n element = typeof element === 'string' ? select(element, document) : element;\n // Set novalidate to prevent default HTML5 form validation\n if (_this.element != null) {\n _this.element.setAttribute('novalidate', '');\n _this.inputElements = selectAll(_this.selectQuery, _this.element);\n _this.createHTML5Rules();\n _this.wireEvents();\n }\n else {\n return undefined;\n }\n return _this;\n }\n FormValidator_1 = FormValidator;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n /**\n * Add validation rules to the corresponding input element based on `name` attribute.\n *\n * @param {string} name `name` of form field.\n * @param {Object} rules Validation rules for the corresponding element.\n * @returns {void}\n */\n FormValidator.prototype.addRules = function (name, rules) {\n if (name) {\n // eslint-disable-next-line no-prototype-builtins\n if (this.rules.hasOwnProperty(name)) {\n extend(this.rules[\"\" + name], rules, {});\n }\n else {\n this.rules[\"\" + name] = rules;\n }\n }\n };\n /**\n * Remove validation to the corresponding field based on name attribute.\n * When no parameter is passed, remove all the validations in the form.\n *\n * @param {string} name Input name attribute value.\n * @param {string[]} rules List of validation rules need to be remove from the corresponding element.\n * @returns {void}\n */\n FormValidator.prototype.removeRules = function (name, rules) {\n if (!name && !rules) {\n this.rules = {};\n }\n else if (this.rules[\"\" + name] && !rules) {\n delete this.rules[\"\" + name];\n }\n else if (!isNullOrUndefined(this.rules[\"\" + name] && rules)) {\n for (var i = 0; i < rules.length; i++) {\n delete this.rules[\"\" + name][rules[parseInt(i.toString())]];\n }\n }\n else {\n return;\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Validate the current form values using defined rules.\n * Returns `true` when the form is valid otherwise `false`\n *\n * @param {string} selected - Optional parameter to validate specified element.\n * @returns {boolean}\n */\n FormValidator.prototype.validate = function (selected) {\n var rules = Object.keys(this.rules);\n if (selected && rules.length) {\n this.validateRules(selected);\n //filter the selected element it don't have any valid input element\n return rules.indexOf(selected) !== -1 && this.errorRules.filter(function (data) {\n return data.name === selected;\n }).length === 0;\n }\n else {\n this.errorRules = [];\n for (var _i = 0, rules_1 = rules; _i < rules_1.length; _i++) {\n var name_1 = rules_1[_i];\n this.validateRules(name_1);\n }\n return this.errorRules.length === 0;\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Reset the value of all the fields in form.\n *\n * @returns {void}\n */\n FormValidator.prototype.reset = function () {\n this.element.reset();\n this.clearForm();\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Get input element by name.\n *\n * @param {string} name - Input element name attribute value.\n * @returns {HTMLInputElement}\n */\n FormValidator.prototype.getInputElement = function (name) {\n this.inputElement = (select('[name=\"' + name + '\"]', this.element));\n return this.inputElement;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Destroy the form validator object and error elements.\n *\n * @returns {void}\n */\n FormValidator.prototype.destroy = function () {\n this.reset();\n this.unwireEvents();\n this.rules = {};\n var elements = selectAll('.' + this.errorClass + ', .' + this.validClass, this.element);\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element = elements_1[_i];\n detach(element);\n }\n _super.prototype.destroy.call(this);\n this.infoElement = null;\n onIntlChange.off('notifyExternalChange', this.afterLocalization);\n };\n /**\n * @param {FormValidatorModel} newProp - Returns the dynamic property value of the component.\n * @param {FormValidatorModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n FormValidator.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'locale':\n this.localeFunc();\n break;\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n FormValidator.prototype.localeFunc = function () {\n for (var _i = 0, _a = Object.keys(this.defaultMessages); _i < _a.length; _i++) {\n var key = _a[_i];\n this.l10n.setLocale(this.locale);\n var value = this.l10n.getConstant(key);\n this.localyMessage[\"\" + key] = value;\n }\n };\n /**\n * @private\n * @returns {string} - Returns the component name.\n */\n FormValidator.prototype.getModuleName = function () {\n return 'formvalidator';\n };\n /**\n * @param {any} args - Specifies the culture name.\n * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n FormValidator.prototype.afterLocalization = function (args) {\n this.locale = args.locale;\n this.localeFunc();\n };\n /**\n * Allows you to refresh the form validator base events to the elements inside the form.\n *\n * @returns {void}\n */\n FormValidator.prototype.refresh = function () {\n this.unwireEvents();\n this.inputElements = selectAll(this.selectQuery, this.element);\n this.wireEvents();\n };\n FormValidator.prototype.clearForm = function () {\n this.errorRules = [];\n this.validated = [];\n var elements = selectAll(this.selectQuery, this.element);\n for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n var element = elements_2[_i];\n var input = element;\n input.removeAttribute('aria-invalid');\n var inputParent = input.parentElement;\n var grandParent = inputParent.parentElement;\n if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper') || (input.classList.contains('e-input') && inputParent.classList.contains('e-input-group'))) {\n inputParent.classList.remove(this.errorClass);\n }\n else if ((grandParent != null) && (grandParent.classList.contains('e-control-wrapper') || grandParent.classList.contains('e-wrapper'))) {\n grandParent.classList.remove(this.errorClass);\n }\n else {\n input.classList.remove(this.errorClass);\n }\n if (input.name.length > 0) {\n this.getInputElement(input.name);\n this.getErrorElement(input.name);\n this.hideMessage(input.name);\n }\n if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper') || (input.classList.contains('e-input') && inputParent.classList.contains('e-input-group'))) {\n inputParent.classList.remove(this.validClass);\n }\n else if ((grandParent != null) && (grandParent.classList.contains('e-control-wrapper') || grandParent.classList.contains('e-wrapper'))) {\n grandParent.classList.remove(this.validClass);\n }\n else {\n input.classList.remove(this.validClass);\n }\n }\n };\n FormValidator.prototype.createHTML5Rules = function () {\n var defRules = ['required', 'validateHidden', 'regex', 'rangeLength', 'maxLength', 'minLength', 'dateIso', 'digits',\n 'pattern', 'data-val-required', 'type', 'data-validation', 'min', 'max', 'range', 'equalTo', 'data-val-minlength-min',\n 'data-val-equalto-other', 'data-val-maxlength-max', 'data-val-range-min', 'data-val-regex-pattern', 'data-val-length-max',\n 'data-val-creditcard', 'data-val-phone'];\n var acceptedTypes = ['hidden', 'email', 'url', 'date', 'number', 'tel'];\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n // Default attribute rules\n var allRule = {};\n for (var _b = 0, defRules_1 = defRules; _b < defRules_1.length; _b++) {\n var rule = defRules_1[_b];\n if (input.getAttribute(rule) !== null) {\n switch (rule) {\n case 'required':\n this.defRule(input, allRule, rule, input.required);\n break;\n case 'data-validation':\n rule = input.getAttribute(rule);\n this.defRule(input, allRule, rule, true);\n break;\n case 'type':\n if (acceptedTypes.indexOf(input.type) !== -1) {\n this.defRule(input, allRule, input.type, true);\n }\n break;\n case 'rangeLength':\n case 'range':\n this.defRule(input, allRule, rule, JSON.parse(input.getAttribute(rule)));\n break;\n case 'equalTo':\n {\n var id = input.getAttribute(rule);\n this.defRule(input, allRule, rule, id);\n }\n break;\n default:\n if (input.getAttribute('data-val') === 'true') {\n this.annotationRule(input, allRule, rule, input.getAttribute(rule));\n }\n else {\n this.defRule(input, allRule, rule, input.getAttribute(rule));\n }\n }\n }\n }\n //adding pattern type validation\n if (Object.keys(allRule).length !== 0) {\n this.addRules(input.name, allRule);\n }\n }\n };\n FormValidator.prototype.annotationRule = function (input, ruleCon, ruleName, value) {\n var annotationRule = ruleName.split('-');\n var rulesList = ['required', 'creditcard', 'phone', 'maxlength', 'minlength', 'range', 'regex', 'equalto'];\n var ruleFirstName = annotationRule[annotationRule.length - 1];\n var ruleSecondName = annotationRule[annotationRule.length - 2];\n if (rulesList.indexOf(ruleFirstName) !== -1) {\n switch (ruleFirstName) {\n case 'required':\n this.defRule(input, ruleCon, 'required', value);\n break;\n case 'creditcard':\n this.defRule(input, ruleCon, 'creditcard', value);\n break;\n case 'phone':\n this.defRule(input, ruleCon, 'tel', value);\n break;\n }\n }\n else if (rulesList.indexOf(ruleSecondName) !== -1) {\n switch (ruleSecondName) {\n case 'maxlength':\n this.defRule(input, ruleCon, 'maxLength', value);\n break;\n case 'minlength':\n this.defRule(input, ruleCon, 'minLength', value);\n break;\n case 'range':\n {\n var minvalue = input.getAttribute('data-val-range-min');\n var maxvalue = input.getAttribute('data-val-range-max');\n this.defRule(input, ruleCon, 'range', [minvalue, maxvalue]);\n }\n break;\n case 'equalto':\n {\n var id = input.getAttribute(ruleName).split('.');\n this.defRule(input, ruleCon, 'equalTo', id[id.length - 1]);\n }\n break;\n case 'regex':\n this.defRule(input, ruleCon, 'regex', value);\n break;\n }\n }\n };\n FormValidator.prototype.defRule = function (input, ruleCon, ruleName, value) {\n var message = input.getAttribute('data-' + ruleName + '-message');\n var annotationMessage = input.getAttribute('data-val-' + ruleName);\n var customMessage;\n if (this.rules[input.name] && ruleName !== 'validateHidden' && ruleName !== 'hidden') {\n this.getInputElement(input.name);\n customMessage = this.getErrorMessage(this.rules[input.name][\"\" + ruleName], ruleName);\n }\n if (message) {\n value = [value, message];\n }\n else if (annotationMessage) {\n value = [value, annotationMessage];\n }\n else if (customMessage) {\n value = [value, customMessage];\n }\n ruleCon[\"\" + ruleName] = value;\n };\n // Wire events to the form elements\n FormValidator.prototype.wireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n if (FormValidator_1.isCheckable(input)) {\n EventHandler.add(input, 'click', this.clickHandler, this);\n }\n else if (input.tagName === 'SELECT') {\n EventHandler.add(input, 'change', this.changeHandler, this);\n }\n else {\n EventHandler.add(input, 'focusout', this.focusOutHandler, this);\n EventHandler.add(input, 'keyup', this.keyUpHandler, this);\n }\n }\n EventHandler.add(this.element, 'submit', this.submitHandler, this);\n EventHandler.add(this.element, 'reset', this.resetHandler, this);\n };\n // UnWire events to the form elements\n FormValidator.prototype.unwireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n EventHandler.clearEvents(input);\n }\n EventHandler.remove(this.element, 'submit', this.submitHandler);\n EventHandler.remove(this.element, 'reset', this.resetHandler);\n };\n // Handle input element focusout event\n FormValidator.prototype.focusOutHandler = function (e) {\n this.trigger('focusout', e);\n //FormValidator.triggerCallback(this.focusout, e);\n var element = e.target;\n if (this.rules[element.name]) {\n if (this.rules[element.name][this.required] || element.value.length > 0) {\n this.validate(element.name);\n }\n else if (this.validated.indexOf(element.name) === -1) {\n this.validated.push(element.name);\n }\n }\n };\n // Handle input element keyup event\n FormValidator.prototype.keyUpHandler = function (e) {\n this.trigger('keyup', e);\n var element = e.target;\n // List of keys need to prevent while validation\n var excludeKeys = [16, 17, 18, 20, 35, 36, 37, 38, 39, 40, 45, 144, 225];\n if (e.which === 9 && (!this.rules[element.name] || (this.rules[element.name] && !this.rules[element.name][this.required]))) {\n return;\n }\n if (this.validated.indexOf(element.name) !== -1 && this.rules[element.name] && excludeKeys.indexOf(e.which) === -1) {\n this.validate(element.name);\n }\n };\n // Handle input click event\n FormValidator.prototype.clickHandler = function (e) {\n this.trigger('click', e);\n var element = e.target;\n // If element type is not submit allow validation\n if (element.type !== 'submit') {\n this.validate(element.name);\n }\n else if (element.getAttribute('formnovalidate') !== null) {\n // Prevent form validation, if submit button has formnovalidate attribute\n this.allowSubmit = true;\n }\n };\n // Handle input change event\n FormValidator.prototype.changeHandler = function (e) {\n this.trigger('change', e);\n var element = e.target;\n this.validate(element.name);\n };\n // Handle form submit event\n FormValidator.prototype.submitHandler = function (e) {\n this.trigger('submit', e);\n //FormValidator.triggerCallback(this.submit, e);\n // Prevent form submit if validation failed\n if (!this.allowSubmit && !this.validate()) {\n e.preventDefault();\n }\n else {\n this.allowSubmit = false;\n }\n };\n // Handle form reset\n FormValidator.prototype.resetHandler = function () {\n this.clearForm();\n };\n // Validate each rule based on input element name\n FormValidator.prototype.validateRules = function (name) {\n if (!this.rules[\"\" + name]) {\n return;\n }\n var rules = Object.keys(this.rules[\"\" + name]);\n var hiddenType = false;\n var validateHiddenType = false;\n var vhPos = rules.indexOf('validateHidden');\n var hPos = rules.indexOf('hidden');\n this.getInputElement(name);\n if (hPos !== -1) {\n hiddenType = true;\n }\n if (vhPos !== -1) {\n validateHiddenType = true;\n }\n if (!hiddenType || (hiddenType && validateHiddenType)) {\n if (vhPos !== -1) {\n rules.splice(vhPos, 1);\n }\n if (hPos !== -1) {\n rules.splice((hPos - 1), 1);\n }\n this.getErrorElement(name);\n for (var _i = 0, rules_2 = rules; _i < rules_2.length; _i++) {\n var rule = rules_2[_i];\n var errorMessage = this.getErrorMessage(this.rules[\"\" + name][\"\" + rule], rule);\n var errorRule = { name: name, message: errorMessage };\n var eventArgs = {\n inputName: name,\n element: this.inputElement,\n message: errorMessage\n };\n if (!this.isValid(name, rule) && !this.inputElement.classList.contains(this.ignore)) {\n this.removeErrorRules(name);\n this.errorRules.push(errorRule);\n // Set aria attributes to invalid elements\n this.inputElement.setAttribute('aria-invalid', 'true');\n this.inputElement.setAttribute('aria-describedby', this.inputElement.id + '-info');\n var inputParent = this.inputElement.parentElement;\n var grandParent = inputParent.parentElement;\n if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper') || (this.inputElement.classList.contains('e-input') && inputParent.classList.contains('e-input-group'))) {\n inputParent.classList.add(this.errorClass);\n inputParent.classList.remove(this.validClass);\n }\n else if ((grandParent != null) && (grandParent.classList.contains('e-control-wrapper') || grandParent.classList.contains('e-wrapper'))) {\n grandParent.classList.add(this.errorClass);\n grandParent.classList.remove(this.validClass);\n }\n else {\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n }\n if (!this.infoElement) {\n this.createErrorElement(name, errorRule.message, this.inputElement);\n }\n else {\n this.showMessage(errorRule);\n }\n eventArgs.errorElement = this.infoElement;\n eventArgs.status = 'failure';\n if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper') || (this.inputElement.classList.contains('e-input') && inputParent.classList.contains('e-input-group'))) {\n inputParent.classList.add(this.errorClass);\n inputParent.classList.remove(this.validClass);\n }\n else if ((grandParent != null) && (grandParent.classList.contains('e-control-wrapper') || grandParent.classList.contains('e-wrapper'))) {\n grandParent.classList.add(this.errorClass);\n grandParent.classList.remove(this.validClass);\n }\n else {\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n }\n this.optionalValidationStatus(name, eventArgs);\n this.trigger('validationComplete', eventArgs);\n // Set aria-required to required rule elements\n if (rule === 'required') {\n this.inputElement.setAttribute('aria-required', 'true');\n }\n break;\n }\n else {\n this.hideMessage(name);\n eventArgs.status = 'success';\n this.trigger('validationComplete', eventArgs);\n }\n }\n }\n else {\n return;\n }\n };\n // Update the optional validation status\n FormValidator.prototype.optionalValidationStatus = function (name, refer) {\n if (!this.rules[\"\" + name][this.required] && !this.inputElement.value.length && !isNullOrUndefined(this.infoElement)) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n refer.status = '';\n this.hideMessage(name);\n }\n };\n // Check the input element whether it's value satisfy the validation rule or not\n FormValidator.prototype.isValid = function (name, rule) {\n var params = this.rules[\"\" + name][\"\" + rule];\n var param = (params instanceof Array && typeof params[1] === 'string') ? params[0] : params;\n var currentRule = this.rules[\"\" + name][\"\" + rule];\n var args = { value: this.inputElement.value, param: param, element: this.inputElement, formElement: this.element };\n this.trigger('validationBegin', args);\n if (!args.param && rule === 'required') {\n return true;\n }\n if (currentRule && typeof currentRule[0] === 'function') {\n var fn = currentRule[0];\n return fn.call(this, { element: this.inputElement, value: this.inputElement.value });\n }\n else if (FormValidator_1.isCheckable(this.inputElement)) {\n if (rule !== 'required') {\n return true;\n }\n return selectAll('input[name=\"' + name + '\"]:checked', this.element).length > 0;\n }\n else {\n return FormValidator_1.checkValidator[\"\" + rule](args);\n }\n };\n // Return default error message or custom error message\n FormValidator.prototype.getErrorMessage = function (ruleValue, rule) {\n var message = this.inputElement.getAttribute('data-' + rule + '-message') ?\n this.inputElement.getAttribute('data-' + rule + '-message') :\n (ruleValue instanceof Array && typeof ruleValue[1] === 'string') ? ruleValue[1] :\n (Object.keys(this.localyMessage).length !== 0) ? this.localyMessage[\"\" + rule] : this.defaultMessages[\"\" + rule];\n var formats = message.match(/{(\\d)}/g);\n if (!isNullOrUndefined(formats)) {\n for (var i = 0; i < formats.length; i++) {\n var value = ruleValue instanceof Array ? ruleValue[parseInt(i.toString())] : ruleValue;\n message = message.replace(formats[parseInt(i.toString())], value);\n }\n }\n return message;\n };\n // Create error element based on name and error message\n FormValidator.prototype.createErrorElement = function (name, message, input) {\n var errorElement = createElement(this.errorElement, {\n className: this.errorClass,\n innerHTML: message,\n attrs: { for: name }\n });\n // Create message design if errorOption is message\n if (this.errorOption === ErrorOption.Message) {\n errorElement.classList.remove(this.errorClass);\n errorElement.classList.add('e-message');\n errorElement = createElement(this.errorContainer, { className: this.errorClass, innerHTML: errorElement.outerHTML });\n }\n errorElement.id = this.inputElement.name + '-info';\n // Append error message into MVC error message element\n if (this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]')) {\n this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]').appendChild(errorElement);\n }\n else if (input.hasAttribute('data-msg-containerid') === true) {\n // Append error message into custom div element\n var containerId = input.getAttribute('data-msg-containerid');\n var divElement = select('#' + containerId, this.element);\n divElement.appendChild(errorElement);\n }\n else if (this.customPlacement != null) {\n // Call custom placement function if customPlacement is not null\n this.customPlacement.call(this, this.inputElement, errorElement);\n }\n else {\n var inputParent = this.inputElement.parentElement;\n var grandParent = inputParent.parentElement;\n if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper')) {\n grandParent.insertBefore(errorElement, inputParent.nextSibling);\n }\n else if (grandParent.classList.contains('e-control-wrapper') || grandParent.classList.contains('e-wrapper')) {\n grandParent.parentElement.insertBefore(errorElement, grandParent.nextSibling);\n }\n else {\n inputParent.insertBefore(errorElement, this.inputElement.nextSibling);\n }\n }\n errorElement.style.display = 'block';\n this.getErrorElement(name);\n this.validated.push(name);\n this.checkRequired(name);\n };\n // Get error element by name\n FormValidator.prototype.getErrorElement = function (name) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass, this.inputElement.parentElement);\n if (!this.infoElement) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass + '[for=\"' + name + '\"]', this.element);\n }\n return this.infoElement;\n };\n // Remove existing rule from errorRules object\n FormValidator.prototype.removeErrorRules = function (name) {\n for (var i = 0; i < this.errorRules.length; i++) {\n var rule = this.errorRules[parseInt(i.toString())];\n if (rule.name === name) {\n this.errorRules.splice(i, 1);\n }\n }\n };\n // Show error message to the input element\n FormValidator.prototype.showMessage = function (errorRule) {\n this.infoElement.style.display = 'block';\n this.infoElement.innerHTML = errorRule.message;\n this.checkRequired(errorRule.name);\n };\n // Hide error message based on input name\n FormValidator.prototype.hideMessage = function (name) {\n if (this.infoElement) {\n this.infoElement.style.display = 'none';\n this.removeErrorRules(name);\n var inputParent = this.inputElement.parentElement;\n var grandParent = inputParent.parentElement;\n if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper') || (this.inputElement.classList.contains('e-input') && inputParent.classList.contains('e-input-group'))) {\n inputParent.classList.add(this.validClass);\n inputParent.classList.remove(this.errorClass);\n }\n else if ((grandParent != null) && (grandParent.classList.contains('e-control-wrapper') || grandParent.classList.contains('e-wrapper'))) {\n grandParent.classList.add(this.validClass);\n grandParent.classList.remove(this.errorClass);\n }\n else {\n this.inputElement.classList.add(this.validClass);\n this.inputElement.classList.remove(this.errorClass);\n }\n this.inputElement.setAttribute('aria-invalid', 'false');\n }\n };\n // Check whether the input element have required rule and its value is not empty\n FormValidator.prototype.checkRequired = function (name) {\n if (!this.rules[\"\" + name][this.required] && !this.inputElement.value.length && !isNullOrUndefined(this.infoElement)) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n this.hideMessage(name);\n }\n };\n // Return boolean result if the input have chekcable or submit types\n FormValidator.isCheckable = function (input) {\n var inputType = input.getAttribute('type');\n return inputType && (inputType === 'checkbox' || inputType === 'radio' || inputType === 'submit');\n };\n var FormValidator_1;\n // List of function to validate the rules\n FormValidator.checkValidator = {\n required: function (option) {\n return !isNaN(Date.parse(option.value)) ? !isNaN(new Date(option.value).getTime()) : option.value.toString().length > 0;\n },\n email: function (option) {\n return regex.EMAIL.test(option.value);\n },\n url: function (option) {\n return regex.URL.test(option.value);\n },\n dateIso: function (option) {\n return regex.DATE_ISO.test(option.value);\n },\n tel: function (option) {\n return regex.PHONE.test(option.value);\n },\n creditcard: function (option) {\n return regex.CREDITCARD.test(option.value);\n },\n number: function (option) {\n return !isNaN(Number(option.value)) && option.value.indexOf(' ') === -1;\n },\n digits: function (option) {\n return regex.DIGITS.test(option.value);\n },\n maxLength: function (option) {\n return option.value.length <= option.param;\n },\n minLength: function (option) {\n return option.value.length >= option.param;\n },\n rangeLength: function (option) {\n var param = option.param;\n return option.value.length >= param[0] && option.value.length <= param[1];\n },\n range: function (option) {\n var param = option.param;\n return !isNaN(Number(option.value)) && Number(option.value) >= param[0] && Number(option.value) <= param[1];\n },\n date: function (option) {\n if (!isNullOrUndefined(option.param) && (typeof (option.param) === 'string' && option.param !== '')) {\n var globalize = new Internationalization;\n var dateOptions = { format: option.param.toString(), type: 'dateTime', skeleton: 'yMd' };\n var dateValue = globalize.parseDate(option.value, dateOptions);\n return (!isNullOrUndefined(dateValue) && dateValue instanceof Date && !isNaN(+dateValue));\n }\n else {\n return !isNaN(new Date(option.value).getTime());\n }\n },\n max: function (option) {\n if (!isNaN(Number(option.value))) {\n // Maximum rule validation for number\n return +option.value <= option.param;\n }\n // Maximum rule validation for date\n return new Date(option.value).getTime() <= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n },\n min: function (option) {\n if (!isNaN(Number(option.value))) {\n // Minimum rule validation for number\n return +option.value >= option.param;\n }\n else if ((option.value).indexOf(',') !== -1) {\n var uNum = (option.value).replace(/,/g, '');\n return parseFloat(uNum) >= option.param;\n }\n else {\n // Minimum rule validation for date\n return new Date(option.value).getTime() >= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n }\n },\n regex: function (option) {\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n return new RegExp(option.param).test(option.value);\n },\n equalTo: function (option) {\n var compareTo = option.formElement.querySelector('#' + option.param);\n option.param = compareTo.value;\n return option.param === option.value;\n }\n };\n __decorate([\n Property('')\n ], FormValidator.prototype, \"locale\", void 0);\n __decorate([\n Property('e-hidden')\n ], FormValidator.prototype, \"ignore\", void 0);\n __decorate([\n Property()\n ], FormValidator.prototype, \"rules\", void 0);\n __decorate([\n Property('e-error')\n ], FormValidator.prototype, \"errorClass\", void 0);\n __decorate([\n Property('e-valid')\n ], FormValidator.prototype, \"validClass\", void 0);\n __decorate([\n Property('label')\n ], FormValidator.prototype, \"errorElement\", void 0);\n __decorate([\n Property('div')\n ], FormValidator.prototype, \"errorContainer\", void 0);\n __decorate([\n Property(ErrorOption.Label)\n ], FormValidator.prototype, \"errorOption\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"focusout\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"keyup\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"submit\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationBegin\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationComplete\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"customPlacement\", void 0);\n FormValidator = FormValidator_1 = __decorate([\n NotifyPropertyChanges\n ], FormValidator);\n return FormValidator;\n}(Base));\nexport { FormValidator };\n","import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, closest as getClosest, remove } from '@syncfusion/ej2-base';\nimport { classList } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowRenderer } from './row-renderer';\nimport { Cell } from '../models/cell';\nimport { Row } from '../models/row';\nimport * as events from '../base/constant';\nimport { Draggable, Droppable } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { parentsUntil, wrap, measureColumnDepth, appendChildren, addFixedColumnBorder } from '../base/util';\nimport * as literals from '../base/string-literals';\n// eslint-disable-next-line valid-jsdoc\n/**\n * Content module is used to render grid content\n *\n * @hidden\n */\nvar HeaderRender = /** @class */ (function () {\n /**\n * Constructor for header renderer module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {ServiceLocator} serviceLocator - specifies the serviceLocator\n */\n function HeaderRender(parent, serviceLocator) {\n var _this = this;\n this.frzIdx = 0;\n this.notfrzIdx = 0;\n this.isFirstCol = false;\n this.isReplaceDragEle = true;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n this.helper = function (e) {\n var gObj = _this.parent;\n var target = _this.draggable.currentStateTarget;\n var parentEle = parentsUntil(target, 'e-headercell');\n if (!(gObj.allowReordering || gObj.allowGrouping) || (!isNullOrUndefined(parentEle)\n && parentEle.getElementsByClassName('e-checkselectall').length > 0)) {\n return false;\n }\n var visualElement = _this.parent.createElement('div', { className: 'e-cloneproperties e-dragclone e-headerclone' });\n var element = target.classList.contains('e-headercell') ? target : parentEle;\n if (!element || (!gObj.allowReordering && element.classList.contains('e-stackedheadercell'))) {\n return false;\n }\n var height = element.offsetHeight;\n var headercelldiv = element.querySelector('.e-headercelldiv') || element.querySelector('.e-stackedheadercelldiv');\n var col;\n if (headercelldiv) {\n if (element.querySelector('.e-stackedheadercelldiv')) {\n col = gObj.getStackedHeaderColumnByHeaderText(headercelldiv.innerText.trim(), gObj.columns);\n }\n else {\n col = gObj.getColumnByUid(headercelldiv.getAttribute('e-mappinguid'));\n }\n _this.column = col;\n if (_this.column.lockColumn) {\n return false;\n }\n visualElement.setAttribute('e-mappinguid', _this.column.uid);\n }\n if (col && !isNullOrUndefined(col.headerTemplate)) {\n if (!isNullOrUndefined(col.headerTemplate)) {\n var colIndex = gObj.getColumnIndexByField(col.field);\n var result = col.getHeaderTemplate()(extend({ 'index': colIndex }, col), gObj, 'headerTemplate');\n var isReactCompiler = gObj.isReact && typeof (col.headerTemplate) !== 'string';\n var isReactChild = gObj.parentDetails && gObj.parentDetails.parentInstObj &&\n gObj.parentDetails.parentInstObj.isReact;\n if (isReactCompiler || isReactChild) {\n gObj.renderTemplates();\n }\n appendChildren(visualElement, result);\n }\n else {\n visualElement.innerHTML = col.headerTemplate;\n }\n if (!isNullOrUndefined(visualElement.firstChild) && visualElement.firstChild.nodeType === 1) {\n visualElement.firstChild.style.pointerEvents = 'none';\n }\n }\n else {\n visualElement.innerHTML = headercelldiv ?\n col.headerText : element.firstElementChild.innerHTML;\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 this.dragStart = function (e) {\n var gObj = _this.parent;\n gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n gObj.notify(events.columnDragStart, { target: _this.draggable.currentStateTarget, column: _this.column, event: e.event });\n };\n this.drag = function (e) {\n var gObj = _this.parent;\n var target = e.target;\n if (target) {\n var closest = getClosest(target, '.e-grid');\n var cloneElement = _this.parent.element.querySelector('.e-cloneproperties');\n if (!closest || closest.getAttribute('id') !== gObj.element.getAttribute('id')) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n if (gObj.allowReordering) {\n gObj.element.querySelector('.e-reorderuparrow').style.display = 'none';\n gObj.element.querySelector('.e-reorderdownarrow').style.display = 'none';\n }\n if (!gObj.groupSettings.allowReordering) {\n return;\n }\n }\n gObj.notify(events.columnDrag, { target: e.target, column: _this.column, event: e.event });\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 if ((!parentsUntil(e.target, 'e-headercell') && !parentsUntil(e.target, 'e-groupdroparea')) ||\n (!gObj.allowReordering && parentsUntil(e.target, 'e-headercell')) ||\n (!e.helper.getAttribute('e-mappinguid') && parentsUntil(e.target, 'e-groupdroparea'))) {\n remove(e.helper);\n cancel = true;\n }\n gObj.notify(events.columnDragStop, { target: e.target, event: e.event, column: _this.column, cancel: cancel });\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 if (closest && closest.getAttribute('id') !== gObj.element.getAttribute('id') ||\n !(gObj.allowReordering || gObj.allowGrouping)) {\n return;\n }\n gObj.notify(events.headerDrop, { target: e.target, uid: uid, droppedElement: e.droppedElement });\n };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.ariaService = this.serviceLocator.getService('ariaService');\n this.widthService = this.serviceLocator.getService('widthService');\n if (this.parent.isDestroyed) {\n return;\n }\n if (!this.parent.enableColumnVirtualization) {\n this.parent.on(events.columnVisibilityChanged, this.setVisible, this);\n }\n this.parent.on(events.columnPositionChanged, this.colPosRefresh, this);\n this.parent.on(events.initialEnd, this.renderCustomToolbar, this);\n if (this.parent.rowRenderingMode === 'Vertical') {\n this.parent.on(events.uiUpdate, this.updateCustomResponsiveToolbar, this);\n }\n }\n /**\n * The function is used to render grid header div\n *\n * @returns {void}\n */\n HeaderRender.prototype.renderPanel = function () {\n var div = this.parent.element.querySelector('.' + literals.gridHeader);\n var isRendered = (div != null);\n div = isRendered ? div : this.parent.createElement('div', { className: 'e-gridheader' });\n var innerDiv = isRendered ? div.querySelector('.' + literals.headerContent) :\n this.parent.createElement('div', { className: literals.headerContent });\n this.toggleStackClass(div);\n div.appendChild(innerDiv);\n this.setPanel(div);\n if (!isRendered) {\n this.parent.element.appendChild(div);\n }\n };\n /**\n * The function is used to render grid header div\n *\n * @returns {void}\n */\n HeaderRender.prototype.renderTable = function () {\n var headerDiv = this.getPanel();\n headerDiv.appendChild(this.createHeaderTable());\n this.setTable(headerDiv.querySelector('.' + literals.table));\n this.initializeHeaderDrag();\n this.initializeHeaderDrop();\n this.parent.notify(events.headerRefreshed, { rows: this.rows });\n };\n /**\n * Get the header content div element of grid\n *\n * @returns {Element} returns the element\n */\n HeaderRender.prototype.getPanel = function () {\n return this.headerPanel;\n };\n /**\n * Set the header content div element of grid\n *\n * @param {Element} panel - specifies the panel element\n * @returns {void}\n */\n HeaderRender.prototype.setPanel = function (panel) {\n this.headerPanel = panel;\n };\n /**\n * Get the header table element of grid\n *\n * @returns {Element} returns the element\n */\n HeaderRender.prototype.getTable = function () {\n return this.headerTable;\n };\n /**\n * Set the header table element of grid\n *\n * @param {Element} table - specifies the table element\n * @returns {void}\n */\n HeaderRender.prototype.setTable = function (table) {\n this.headerTable = table;\n };\n /**\n * Get the header colgroup element\n *\n * @returns {Element} returns the element\n */\n HeaderRender.prototype.getColGroup = function () {\n return this.colgroup;\n };\n /**\n * Set the header colgroup element\n *\n * @param {Element} colGroup - specifies the colgroup\n * @returns {Element} returns the element\n */\n HeaderRender.prototype.setColGroup = function (colGroup) {\n return this.colgroup = colGroup;\n };\n /**\n * Get the header row element collection.\n *\n * @returns {Element[]} returns the element\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 *\n * @returns {Element} returns the element\n * @hidden\n */\n HeaderRender.prototype.createHeaderTable = function () {\n var table = this.createTable();\n var innerDiv = this.getPanel().querySelector('.' + literals.headerContent);\n innerDiv.appendChild(table);\n return innerDiv;\n };\n /**\n * The function is used to create header table elements\n *\n * @param {Element} tableEle - specifies the table Element\n * @param {freezeTable} tableName - specifies the table name\n * @returns {Element} returns the element\n * @hidden\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n HeaderRender.prototype.createHeader = function (tableEle, tableName) {\n if (tableEle === void 0) { tableEle = null; }\n var gObj = this.parent;\n if (this.getTable()) {\n remove(this.getTable());\n }\n var table = this.parent.createElement('table', { className: literals.table, attrs: { cellspacing: '0.25px', role: 'presentation' } });\n var findHeaderRow = this.createHeaderContent(tableName);\n var thead = findHeaderRow.thead;\n var tbody = this.parent.createElement(literals.tbody, { className: this.parent.frozenRows ? '' : 'e-hide', attrs: { role: 'rowgroup' } });\n this.caption = this.parent.createElement('caption', { innerHTML: this.parent.element.id + '_header_table', className: 'e-hide' });\n var colGroup = this.parent.createElement(literals.colGroup);\n var rowBody = this.parent.createElement('tr', { attrs: { role: 'row' } });\n var bodyCell;\n var rows = this.rows = findHeaderRow.rows;\n for (var i = 0, len = rows.length; i < len; i++) {\n for (var j = 0, len_1 = rows[parseInt(i.toString(), 10)].cells.length; j < len_1; j++) {\n bodyCell = this.parent.createElement('td');\n rowBody.appendChild(bodyCell);\n }\n }\n if (gObj.allowFiltering || gObj.allowSorting || gObj.allowGrouping) {\n table.classList.add('e-sortfilter');\n }\n this.updateColGroup(colGroup);\n tbody.appendChild(rowBody);\n table.appendChild(this.setColGroup(colGroup));\n table.appendChild(thead);\n table.appendChild(tbody);\n table.appendChild(this.caption);\n return table;\n };\n /**\n * @param {Element} tableEle - specifies the column\n * @returns {Element} returns the element\n * @hidden\n */\n HeaderRender.prototype.createTable = function (tableEle) {\n if (tableEle === void 0) { tableEle = null; }\n return this.createHeader(tableEle);\n };\n HeaderRender.prototype.createHeaderContent = function (tableName) {\n var gObj = this.parent;\n var columns = gObj.getColumns();\n var thead = this.parent.createElement('thead', { attrs: { 'role': 'rowgroup' } });\n var colHeader = this.parent.createElement('tr', { className: 'e-columnheader', attrs: { role: 'row' } });\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 for (var i = 0, len = this.colDepth; i < len; i++) {\n rows[parseInt(i.toString(), 10)] = this.generateRow(i);\n rows[parseInt(i.toString(), 10)].cells = [];\n }\n rows = this.ensureColumns(rows);\n rows = this.getHeaderCells(rows, tableName);\n if (gObj.isRowDragable() && this.parent.getFrozenMode() === 'Right') {\n for (var i = 0, len = rows.length; i < len; i++) {\n rows[parseInt(i.toString(), 10)].cells.push(this.generateCell({}, CellType.RowDragHIcon));\n }\n }\n for (var i = 0, len = this.colDepth; i < len; i++) {\n headerRow = rowRenderer.render(rows[parseInt(i.toString(), 10)], columns);\n if (this.parent.rowHeight && headerRow.querySelector('.e-headercell')) {\n headerRow.style.height = this.parent.rowHeight + 'px';\n }\n addFixedColumnBorder(headerRow);\n thead.appendChild(headerRow);\n }\n var findHeaderRow = {\n thead: thead,\n rows: rows\n };\n return findHeaderRow;\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 + literals.colGroup;\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 col = this.parent.createElement('col', { className: 'e-group-intent' });\n colGroup.appendChild(col);\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n col = this.parent.createElement('col', { className: 'e-detail-intent' });\n colGroup.appendChild(col);\n }\n if (this.parent.isRowDragable() && this.parent.getFrozenMode() !== 'Right') {\n col = this.parent.createElement('col', { className: 'e-drag-intent' });\n colGroup.appendChild(col);\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n col = this.parent.createElement('col');\n if (cols[parseInt(i.toString(), 10)].visible === false) {\n setStyleAttribute(col, { 'display': 'none' });\n }\n colGroup.appendChild(col);\n }\n if (this.parent.isRowDragable() && this.parent.getFrozenMode() === 'Right') {\n col = this.parent.createElement('col', { className: 'e-drag-intent' });\n colGroup.appendChild(col);\n }\n return colGroup;\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 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 rows[parseInt(i.toString(), 10)].cells.push(this.generateCell({}, CellType.HeaderIndent));\n }\n }\n if (gObj.detailTemplate || gObj.childGrid) {\n var args = {};\n this.parent.notify(events.detailIndentCellInfo, args);\n rows[parseInt(i.toString(), 10)].cells.push(this.generateCell(args, CellType.DetailHeader));\n }\n if (gObj.isRowDragable() && this.parent.getFrozenMode() !== 'Right') {\n rows[parseInt(i.toString(), 10)].cells.push(this.generateCell({}, CellType.RowDragHIcon));\n }\n }\n return rows;\n };\n HeaderRender.prototype.getHeaderCells = function (rows, tableName) {\n var thead = this.parent.getHeaderTable() && this.parent.getHeaderTable().querySelector('thead');\n var cols = this.parent.enableColumnVirtualization ?\n this.parent.getColumns(this.parent.enablePersistence) : this.parent.columns;\n this.frzIdx = 0;\n this.notfrzIdx = 0;\n if (this.parent.lockcolPositionCount) {\n for (var i = 0; i < cols.length; i++) {\n this.lockColsRendered = false;\n rows = this.appendCells(cols[parseInt(i.toString(), 10)], rows, 0, i === 0, false, i === (cols.length - 1), thead, tableName, false);\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[parseInt(i.toString(), 10)], rows, 0, i === 0, false, i === (len - 1), thead, tableName, false);\n }\n return rows;\n };\n HeaderRender.prototype.appendCells = function (cols, rows, index, isFirstObj, isFirstCol, isLastCol, isMovable, tableName, isStackLastCol) {\n var lastCol = isLastCol ? isStackLastCol ? 'e-laststackcell' : 'e-lastcell' : '';\n var isLockColumn = !this.parent.lockcolPositionCount\n || (cols.lockColumn && !this.lockColsRendered) || (!cols.lockColumn && this.lockColsRendered);\n if (!cols.columns) {\n if (isLockColumn) {\n rows[parseInt(index.toString(), 10)].cells.push(this.generateCell(cols, CellType.Header, this.colDepth - index, (isFirstObj ? '' : (isFirstCol ? 'e-firstcell' : '')) + lastCol, index, this.parent.getColumnIndexByUid(cols.uid)));\n }\n if (this.parent.lockcolPositionCount) {\n if ((this.frzIdx + this.notfrzIdx < this.parent.frozenColumns) &&\n ((cols.lockColumn && !this.lockColsRendered) || (!cols.lockColumn && this.lockColsRendered))) {\n this.frzIdx++;\n }\n else {\n this.notfrzIdx++;\n }\n }\n else {\n this.frzIdx++;\n }\n }\n else {\n this.isFirstCol = false;\n var colSpan = this.getCellCnt(cols, 0);\n if (colSpan) {\n var stackedLockColsCount = this.getStackedLockColsCount(cols, 0);\n var isStackedLockColumn = this.parent.lockcolPositionCount === 0\n || (!this.lockColsRendered && stackedLockColsCount !== 0)\n || (this.lockColsRendered && (colSpan - stackedLockColsCount) !== 0);\n if (isStackedLockColumn) {\n rows[parseInt(index.toString(), 10)].cells.push(new Cell({\n cellType: CellType.StackedHeader, column: cols,\n colSpan: this.getColSpan(colSpan, stackedLockColsCount),\n className: isFirstObj ? '' : (isFirstCol ? 'e-firstcell' : '')\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[parseInt(i.toString(), 10)], rows, index + 1, isFirstObj, i === 0, i === (cols.columns.length - 1) && isLastCol, isMovable, tableName, false);\n }\n }\n if (this.lockColsRendered) {\n for (var i = 0, len = cols.columns.length; i < len; i++) {\n isFirstObj = isFirstObj && i === 0;\n var isFirstCol_1 = this.isFirstCol = cols.columns[parseInt(i.toString(), 10)].visible\n && !isFirstObj;\n var isLaststackedCol = i === (len - 1) && isLastCol;\n rows = this.appendCells(cols.columns[parseInt(i.toString(), 10)], rows, index + 1, isFirstObj, isFirstCol_1 && !isLaststackedCol, isLaststackedCol, isMovable, tableName, true);\n }\n }\n }\n return rows;\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[parseInt(i.toString(), 10)], lockColsCount);\n }\n }\n else if (col.lockColumn) {\n lockColsCount++;\n }\n return lockColsCount;\n };\n HeaderRender.prototype.getColSpan = function (colSpan, stackedLockColsCount) {\n colSpan = !this.lockColsRendered ? stackedLockColsCount : colSpan - stackedLockColsCount;\n return colSpan;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n HeaderRender.prototype.generateRow = function (index) {\n return new Row({});\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 if (!opt.rowSpan || opt.rowSpan < 2) {\n delete opt.rowSpan;\n }\n return new Cell(opt);\n };\n /**\n * Function to hide header table column based on visible property\n *\n * @param {Column[]} columns - specifies the column\n * @returns {void}\n */\n HeaderRender.prototype.setVisible = function (columns) {\n var gObj = this.parent;\n var displayVal;\n var idx;\n for (var c = 0, clen = columns.length; c < clen; c++) {\n var column = columns[parseInt(c.toString(), 10)];\n idx = gObj.getNormalizedColumnIndex(column.uid);\n displayVal = column.visible ? '' : 'none';\n setStyleAttribute(this.getColGroup().children[parseInt(idx.toString(), 10)], { 'display': displayVal });\n }\n this.refreshUI();\n };\n HeaderRender.prototype.colPosRefresh = function () {\n this.refreshUI();\n };\n /**\n * Refresh the header of the Grid.\n *\n * @returns {void}\n */\n HeaderRender.prototype.refreshUI = function () {\n var headerDiv = this.getPanel();\n this.toggleStackClass(headerDiv);\n var table = this.freezeReorder ? this.headerPanel.querySelector('.' + literals.movableHeader).querySelector('.' + literals.table)\n : this.getTable();\n var tableName = undefined;\n if (table) {\n remove(table);\n table.removeChild(table.firstChild);\n table.removeChild(table.childNodes[0]);\n var colGroup = this.parent.createElement(literals.colGroup);\n var findHeaderRow = this.createHeaderContent(tableName);\n this.rows = findHeaderRow.rows;\n table.insertBefore(findHeaderRow.thead, table.firstChild);\n this.updateColGroup(colGroup);\n table.insertBefore(this.setColGroup(colGroup), table.firstChild);\n this.appendContent(table);\n this.parent.notify(events.colGroupRefresh, {});\n this.widthService.setWidthToColumns();\n this.parent.updateDefaultCursor();\n this.initializeHeaderDrag();\n var rows = [].slice.call(headerDiv.querySelectorAll('tr.e-columnheader'));\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n var gCells = [].slice.call(row.getElementsByClassName('e-grouptopleftcell'));\n if (gCells.length) {\n gCells[gCells.length - 1].classList.add('e-lastgrouptopleftcell');\n }\n }\n this.parent.notify(events.headerRefreshed, { rows: this.rows });\n if (this.parent.enableColumnVirtualization && parentsUntil(table, literals.movableHeader)) {\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: false, isXaxis: true } });\n }\n if (this.parent.allowTextWrap && this.parent.textWrapSettings.wrapMode === 'Header') {\n wrap(rows, true);\n }\n }\n var firstHeaderCell = this.parent.getHeaderContent().querySelector('.e-headercell:not(.e-hide)');\n if (!isNullOrUndefined(firstHeaderCell)) {\n firstHeaderCell.tabIndex = 0;\n }\n };\n HeaderRender.prototype.toggleStackClass = function (div) {\n var column = this.parent.columns;\n var stackedHdr = column.some(function (column) { return !isNullOrUndefined(column.columns); });\n if (stackedHdr) {\n div.classList.add('e-stackedheader');\n }\n else {\n div.classList.remove('e-stackedheader');\n }\n };\n HeaderRender.prototype.appendContent = function (table) {\n this.getPanel().querySelector('.' + literals.headerContent).appendChild(table);\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[parseInt(i.toString(), 10)], cnt);\n }\n }\n else {\n if (col.visible) {\n cnt++;\n }\n }\n return cnt;\n };\n HeaderRender.prototype.initializeHeaderDrag = function () {\n var gObj = this.parent;\n if (!(this.parent.allowReordering || (this.parent.allowGrouping && this.parent.groupSettings.showDropArea))) {\n return;\n }\n this.draggable = new Draggable(gObj.getHeaderContent(), {\n dragTarget: '.e-headercell',\n distance: 5,\n helper: this.helper,\n dragStart: this.dragStart,\n drag: this.drag,\n dragStop: this.dragStop,\n abort: '.e-rhandler',\n isReplaceDragEle: this.isReplaceDragEle\n });\n this.parent.on(events.destroy, this.droppableDestroy, this);\n };\n HeaderRender.prototype.initializeHeaderDrop = function () {\n var gObj = this.parent;\n this.droppable = new Droppable(gObj.getHeaderContent(), {\n accept: '.e-dragclone',\n drop: this.drop\n });\n this.parent.on(events.destroy, this.droppableDestroy, this);\n };\n HeaderRender.prototype.droppableDestroy = function () {\n if (this.droppable && !this.droppable.isDestroyed) {\n this.droppable.destroy();\n }\n if (this.draggable && !this.draggable.isDestroyed) {\n this.draggable.destroy();\n }\n };\n HeaderRender.prototype.renderCustomToolbar = function () {\n var _this = this;\n var gObj = this.parent;\n if (gObj.rowRenderingMode === 'Vertical' && !gObj.toolbar\n && (gObj.allowSorting || (gObj.allowFiltering && gObj.filterSettings.type !== 'FilterBar'))) {\n var div = gObj.createElement('div', { className: 'e-res-toolbar e-toolbar' });\n var toolbarItems = gObj.createElement('div', { className: 'e-toolbar-items' });\n var toolbarLeft = gObj.createElement('div', { className: 'e-toolbar-left' });\n var count = this.parent.allowFiltering && this.parent.allowSorting ? 2 : 1;\n for (var i = 0; i < count; i++) {\n var toolbarItem = gObj.createElement('div', { className: 'e-toolbar-item e-gridresponsiveicons e-icons e-tbtn-align' });\n var cls = count === 1 ? this.parent.allowSorting ? 'sort'\n : 'filter' : i === 1 ? 'sort' : 'filter';\n var button = gObj.createElement('button', { className: 'e-tbar-btn e-control e-btn e-lib e-icon-btn' });\n var span = gObj.createElement('span', { className: 'e-btn-icon e-res' + cls + '-icon e-icons' });\n button.appendChild(span);\n var btnObj = new Button({\n cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n });\n btnObj.appendTo(button);\n button.onclick = function (e) {\n if (e.target.classList.contains('e-ressort-btn')\n || e.target.classList.contains('e-ressort-icon')) {\n _this.parent.showResponsiveCustomSort();\n }\n else {\n _this.parent.showResponsiveCustomFilter();\n }\n };\n toolbarItem.appendChild(button);\n toolbarLeft.appendChild(toolbarItem);\n }\n toolbarItems.appendChild(toolbarLeft);\n div.appendChild(toolbarItems);\n gObj.element.insertBefore(div, this.parent.element.querySelector('.' + literals.gridHeader));\n }\n else {\n if (gObj.enableAdaptiveUI && !gObj.toolbar) {\n gObj.getContent().classList.add('e-responsive-header');\n }\n }\n };\n HeaderRender.prototype.updateCustomResponsiveToolbar = function (args) {\n var resToolbar = this.parent.element.querySelector('.e-responsive-toolbar');\n if (args.module === 'toolbar') {\n if (resToolbar) {\n remove(resToolbar);\n }\n else {\n this.renderCustomToolbar();\n }\n }\n };\n return HeaderRender;\n}());\nexport { HeaderRender };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined, extend, addClass } from '@syncfusion/ej2-base';\nimport { attributes } from '@syncfusion/ej2-base';\nimport { setStyleAndAttributes, appendChildren, addStickyColumnPosition } 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 *\n * @hidden\n */\nvar HeaderCellRenderer = /** @class */ (function (_super) {\n __extends(HeaderCellRenderer, _super);\n function HeaderCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent\n .createElement('TH', { className: 'e-headercell', attrs: { tabindex: '-1', role: 'columnheader' } });\n _this.ariaService = new AriaService();\n _this.hTxtEle = _this.parent.createElement('span', { className: 'e-headertext' });\n _this.sortEle = _this.parent.createElement('div', { className: 'e-sortfilterdiv e-icons', attrs: { 'aria-hidden': 'true' } });\n _this.gui = _this.parent.createElement('div');\n _this.chkAllBox = _this.parent.createElement('input', { className: 'e-checkselectall', attrs: { 'type': 'checkbox', 'aria-label': _this.localizer.getConstant('SelectAllCheckbox') } });\n return _this;\n }\n /**\n * Function to return the wrapper for the TH content.\n *\n * @returns {string | Element} returns the element\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 *\n * @param {Cell} cell - specifies the column\n * @param {Object} data - specifies the data\n * @param {object} attributes - specifies the aattributes\n * @returns {Element} returns the element\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n HeaderCellRenderer.prototype.render = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n var fltrMenuEle = this.parent.createElement('div', { className: 'e-filtermenudiv e-icons e-icon-filter', attrs: { 'aria-hidden': 'true' } });\n return this.prepareHeader(cell, node, fltrMenuEle);\n };\n /**\n * Function to refresh the cell content based on Column object.\n *\n * @param {Cell} cell - specifies the cell\n * @param {Element} node - specifies the noe\n * @returns {Element} returns the element\n */\n HeaderCellRenderer.prototype.refresh = function (cell, node) {\n this.clean(node);\n var fltrMenuEle = this.parent.createElement('div', { className: 'e-filtermenudiv e-icons e-icon-filter', attrs: { 'aria-hidden': 'true' } });\n return this.prepareHeader(cell, node, fltrMenuEle);\n };\n HeaderCellRenderer.prototype.clean = function (node) {\n node.innerHTML = '';\n };\n /* tslint:disable-next-line:max-func-body-length */\n HeaderCellRenderer.prototype.prepareHeader = function (cell, node, fltrMenuEle) {\n var column = cell.column;\n var ariaAttr = {};\n var elementDesc = '';\n //Prepare innerHtml\n var innerDIV = this.getGui();\n var hValueAccer;\n attributes(innerDIV, {\n 'e-mappinguid': column.uid,\n 'class': 'e-headercelldiv'\n });\n if (!isNullOrUndefined(column.headerValueAccessor)) {\n hValueAccer = this.getValue(column.headerText, column);\n }\n if (column.type !== 'checkbox') {\n var value = column.headerText;\n if (!isNullOrUndefined(hValueAccer)) {\n value = hValueAccer;\n }\n var headerText = this.hTxtEle.cloneNode();\n headerText[column.getDomSetter()] = this.parent.sanitize(value);\n innerDIV.appendChild(headerText);\n }\n else {\n column.editType = 'booleanedit';\n var checkAllWrap = createCheckBox(this.parent.createElement, false, { checked: false, label: ' ' });\n this.chkAllBox.id = 'checkbox-' + column.uid;\n checkAllWrap.insertBefore(this.chkAllBox.cloneNode(), checkAllWrap.firstChild);\n if (this.parent.cssClass) {\n addClass([checkAllWrap], [this.parent.cssClass]);\n }\n innerDIV.appendChild(checkAllWrap);\n innerDIV.classList.add('e-headerchkcelldiv');\n }\n this.buildAttributeFromCell(node, cell);\n this.appendHtml(node, innerDIV);\n node.appendChild(this.sortEle.cloneNode());\n if ((this.parent.allowFiltering && this.parent.filterSettings.type !== 'FilterBar') &&\n (column.allowFiltering && !isNullOrUndefined(column.field)) &&\n !(this.parent.showColumnMenu && column.showColumnMenu)) {\n attributes(fltrMenuEle, {\n 'e-mappinguid': 'e-flmenu-' + column.uid\n });\n elementDesc = elementDesc.length ? elementDesc + '. ' + this.localizer.getConstant('FilterDescription') : this.localizer.getConstant('FilterDescription');\n node.classList.add('e-fltr-icon');\n var matchFlColumns = [];\n if (this.parent.filterSettings.columns.length && this.parent.filterSettings.columns.length !== matchFlColumns.length) {\n var foreignColumn = this.parent.getForeignKeyColumns();\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[parseInt(count.toString(), 10)].field === column.field\n || (foreignColumn.length\n && column.foreignKeyValue === this.parent.filterSettings.columns[parseInt(count.toString(), 10)].field)) {\n fltrMenuEle.classList.add('e-filtered');\n matchFlColumns.push(column.field);\n break;\n }\n }\n }\n }\n node.appendChild(fltrMenuEle.cloneNode());\n }\n if (cell.className) {\n node.classList.add(cell.className);\n }\n if (column.customAttributes) {\n setStyleAndAttributes(node, column.customAttributes);\n }\n if (this.parent.allowSorting && column.allowSorting) {\n ariaAttr.sort = 'none';\n elementDesc = elementDesc.length ? elementDesc + '. ' + this.localizer.getConstant('SortDescription') : this.localizer.getConstant('SortDescription');\n }\n if ((this.parent.allowGrouping && column.allowGrouping) || this.parent.allowReordering && column.allowReordering) {\n ariaAttr.grabbed = false;\n elementDesc = elementDesc.length ? elementDesc + '. ' + this.localizer.getConstant('GroupDescription') : this.localizer.getConstant('GroupDescription');\n }\n if (this.parent.showColumnMenu && column.type !== 'checkbox' && !column.template) {\n elementDesc = elementDesc.length ? elementDesc + '. ' + this.localizer.getConstant('ColumnMenuDescription') : this.localizer.getConstant('ColumnMenuDescription');\n }\n node = this.extendPrepareHeader(column, node);\n var result;\n var gridObj = this.parent;\n var colIndex = gridObj.getColumnIndexByField(column.field);\n if (!isNullOrUndefined(column.headerTemplate)) {\n //need to pass the template id for blazor headertemplate\n var headerTempID = gridObj.element.id + column.uid + 'headerTemplate';\n var str = 'isStringTemplate';\n var col = column;\n var isReactCompiler = this.parent.isReact && typeof (column.headerTemplate) !== 'string';\n var isReactChild_1 = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n this.parent.parentDetails.parentInstObj.isReact;\n if (isReactCompiler || isReactChild_1) {\n var copied = { 'index': colIndex };\n node.firstElementChild.innerHTML = '';\n column.getHeaderTemplate()(extend(copied, col), gridObj, 'headerTemplate', headerTempID, this.parent[\"\" + str], null, node.firstElementChild);\n this.parent.renderTemplates();\n }\n else {\n result = column.getHeaderTemplate()(extend({ 'index': colIndex }, col), gridObj, 'headerTemplate', headerTempID, this.parent[\"\" + str], undefined, undefined, this.parent['root']);\n node.firstElementChild.innerHTML = '';\n appendChildren(node.firstElementChild, result);\n }\n }\n this.ariaService.setOptions(node, ariaAttr);\n if (!isNullOrUndefined(column.headerTextAlign) || !isNullOrUndefined(column.textAlign)) {\n var alignment = column.headerTextAlign || column.textAlign;\n innerDIV.style.textAlign = alignment;\n if (alignment === 'Right' || alignment === 'Left') {\n node.classList.add(alignment === 'Right' ? 'e-rightalign' : 'e-leftalign');\n }\n else if (alignment === 'Center') {\n node.classList.add('e-centeralign');\n }\n }\n if (column.clipMode === 'Clip' || (!column.clipMode && this.parent.clipMode === 'Clip')) {\n node.classList.add('e-gridclip');\n }\n else if ((column.clipMode === 'EllipsisWithTooltip' || (!column.clipMode && this.parent.clipMode === 'EllipsisWithTooltip'))\n && !(gridObj.allowTextWrap && (gridObj.textWrapSettings.wrapMode === 'Header'\n || gridObj.textWrapSettings.wrapMode === 'Both'))) {\n if (column.type !== 'checkbox') {\n node.classList.add('e-ellipsistooltip');\n }\n }\n if (elementDesc) {\n var titleElem = (this.parent.createElement('span', { id: 'headerTitle-' + column.uid, innerHTML: elementDesc, attrs: { style: 'display:none' } }));\n node.appendChild(titleElem);\n node.setAttribute('aria-describedby', titleElem.id);\n }\n node.setAttribute('aria-rowspan', (!isNullOrUndefined(cell.rowSpan) ? cell.rowSpan : 1).toString());\n node.setAttribute('aria-colspan', '1');\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n this.parent.parentDetails.parentInstObj.isReact;\n if (((this.parent.isReact && this.parent.requireTemplateRef)\n || (isReactChild && this.parent.parentDetails.parentInstObj.requireTemplateRef))\n && !isNullOrUndefined(column.headerTemplate)) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var thisRef_1 = this;\n thisRef_1.parent.renderTemplates(function () {\n thisRef_1.parent.trigger(headerCellInfo, { cell: cell, node: node });\n });\n }\n else {\n this.parent.trigger(headerCellInfo, { cell: cell, node: node });\n }\n if (this.parent.isFrozenGrid()) {\n addStickyColumnPosition(this.parent, column, node);\n }\n return node;\n };\n HeaderCellRenderer.prototype.getValue = function (field, column) {\n return column.headerValueAccessor(field, column);\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', { className: 'e-icons e-columnmenu', attrs: { 'aria-hidden': 'true' } }));\n var matchFilteredColumns = [];\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[parseInt(j.toString(), 10)].field === column.field) {\n element.classList.add('e-filtered');\n matchFilteredColumns.push(column.field);\n break;\n }\n }\n }\n }\n node.classList.add('e-fltr-icon');\n node.appendChild(element);\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 return node;\n };\n /**\n * Function to specifies how the result content to be placed in the cell.\n *\n * @param {Element} node - specifies the node\n * @param {string|Element} innerHtml - specifies the innerHtml\n * @returns {Element} returns the element\n */\n HeaderCellRenderer.prototype.appendHtml = function (node, innerHtml) {\n node.appendChild(innerHtml);\n return node;\n };\n return HeaderCellRenderer;\n}(CellRenderer));\nexport { HeaderCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { headerCellInfo } from '../base/constant';\nimport { setStyleAndAttributes, appendChildren, frozenDirection, isChildColumn, applyStickyLeftRightPosition } from '../base/util';\n/**\n * StackedHeaderCellRenderer class which responsible for building stacked header cell content.\n *\n * @hidden\n */\nvar StackedHeaderCellRenderer = /** @class */ (function (_super) {\n __extends(StackedHeaderCellRenderer, _super);\n function StackedHeaderCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TH', {\n className: 'e-headercell e-stackedheadercell', attrs: {\n tabindex: '-1', role: 'columnheader'\n }\n });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n *\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the data\n * @param {object} attributes - specifies the attributes\n * @returns {Element} returns the element\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\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: { 'e-mappinguid': cell.column.uid }\n });\n var column = cell.column;\n node.appendChild(div);\n if (!isNullOrUndefined(column.headerTemplate)) {\n appendChildren(div, column.getHeaderTemplate()(column, this.parent, 'headerTemplate'));\n }\n else {\n this.appendHtml(div, this.parent.sanitize(column.headerText), column.getDomSetter());\n }\n if (cell.column.toolTip) {\n node.setAttribute('title', cell.column.toolTip);\n }\n if (column.clipMode === 'Clip' || (!column.clipMode && this.parent.clipMode === 'Clip')) {\n node.classList.add('e-gridclip');\n }\n else if (column.clipMode === 'EllipsisWithTooltip' || (!column.clipMode && this.parent.clipMode === 'EllipsisWithTooltip')) {\n node.classList.add('e-ellipsistooltip');\n }\n if (!isNullOrUndefined(cell.column.textAlign)) {\n div.style.textAlign = cell.column.textAlign;\n }\n if (cell.column.customAttributes) {\n setStyleAndAttributes(node, cell.column.customAttributes);\n }\n node.setAttribute('colspan', cell.colSpan.toString());\n node.setAttribute('aria-colspan', cell.colSpan.toString());\n node.setAttribute('aria-rowspan', '1');\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 if (cell.className) {\n node.classList.add(cell.className);\n }\n this.parent.trigger(headerCellInfo, { cell: cell, node: node });\n if (frozenDirection(column) === 'Left') {\n node.classList.add('e-leftfreeze');\n if (column.border === 'Left') {\n node.classList.add('e-freezeleftborder');\n }\n if (column.index === 0) {\n applyStickyLeftRightPosition(node, (this.parent.getIndentCount() * 30), this.parent.enableRtl, 'Left');\n }\n else {\n var cols = this.parent.getColumns();\n var width = this.parent.getIndentCount() * 30;\n for (var i = 0; i < cols.length; i++) {\n if (column.index < cols[parseInt(i.toString(), 10)].index) {\n break;\n }\n if (cols[parseInt(i.toString(), 10)].visible) {\n width += parseFloat(cols[parseInt(i.toString(), 10)].width.toString());\n }\n }\n applyStickyLeftRightPosition(node, width, this.parent.enableRtl, 'Left');\n }\n }\n else if (frozenDirection(column) === 'Right') {\n node.classList.add('e-rightfreeze');\n var cols = this.parent.getColumns();\n var width = this.parent.getFrozenMode() === 'Right' && this.parent.isRowDragable() ? 30 : 0;\n for (var i = cols.length - 1; i >= 0; i--) {\n if (isChildColumn(column, cols[parseInt(i.toString(), 10)].uid) || column.index > cols[parseInt(i.toString(), 10)].index) {\n break;\n }\n if (cols[parseInt(i.toString(), 10)].visible) {\n width += parseFloat(cols[parseInt(i.toString(), 10)].width.toString());\n }\n }\n applyStickyLeftRightPosition(node, width, this.parent.enableRtl, 'Right');\n if (column.border === 'Right') {\n node.classList.add('e-freezerightborder');\n }\n }\n else if (frozenDirection(column) === 'Fixed') {\n node.classList.add('e-fixedfreeze');\n var cols = this.parent.getColumns();\n var width = 0;\n if (this.parent.getVisibleFrozenLeftCount()) {\n width = this.parent.getIndentCount() * 30;\n }\n else if (this.parent.getFrozenMode() === 'Right') {\n width = this.parent.groupSettings.columns.length * 30;\n }\n for (var i = 0; i < cols.length; i++) {\n if (column.index > cols[parseInt(i.toString(), 10)].index) {\n if ((cols[parseInt(i.toString(), 10)].freeze === 'Left' || cols[parseInt(i.toString(), 10)].isFrozen) ||\n cols[parseInt(i.toString(), 10)].freeze === 'Fixed') {\n if (cols[parseInt(i.toString(), 10)].visible) {\n width += parseFloat(cols[parseInt(i.toString(), 10)].width.toString());\n }\n }\n }\n }\n applyStickyLeftRightPosition(node, width - 1, this.parent.enableRtl, 'Left');\n width = this.parent.getFrozenMode() === 'Right' && this.parent.isRowDragable() ? 30 : 0;\n for (var i = cols.length - 1; i >= 0; i--) {\n if (column.index < cols[parseInt(i.toString(), 10)].index) {\n if (isChildColumn(column, cols[parseInt(i.toString(), 10)].uid) ||\n column.index > cols[parseInt(i.toString(), 10)].index) {\n break;\n }\n if (cols[parseInt(i.toString(), 10)].freeze === 'Right' || cols[parseInt(i.toString(), 10)].freeze === 'Fixed') {\n if (cols[parseInt(i.toString(), 10)].visible) {\n width += parseFloat(cols[parseInt(i.toString(), 10)].width.toString());\n }\n }\n }\n }\n applyStickyLeftRightPosition(node, width - 1, this.parent.enableRtl, 'Right');\n }\n else {\n node.classList.add('e-unfreeze');\n }\n return node;\n };\n return StackedHeaderCellRenderer;\n}(CellRenderer));\nexport { StackedHeaderCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { setStyleAndAttributes } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\n/**\n * IndentCellRenderer class which responsible for building group indent cell.\n *\n * @hidden\n */\nvar IndentCellRenderer = /** @class */ (function (_super) {\n __extends(IndentCellRenderer, _super);\n function IndentCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TD', { className: 'e-indentcell' });\n return _this;\n }\n /**\n * Function to render the indent cell\n *\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the data\n * @returns {Element} returns the element\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n IndentCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n setStyleAndAttributes(node, cell.attributes);\n return node;\n };\n return IndentCellRenderer;\n}(CellRenderer));\nexport { IndentCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { appendChildren, templateCompiler } from '../base/util';\nimport { CellType } from '../base/enum';\n/**\n * GroupCaptionCellRenderer class which responsible for building group caption cell.\n *\n * @hidden\n */\nvar GroupCaptionCellRenderer = /** @class */ (function (_super) {\n __extends(GroupCaptionCellRenderer, _super);\n function GroupCaptionCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.cellUid = 0;\n _this.element = _this.parent\n .createElement('TD', { className: 'e-groupcaption',\n attrs: { id: _this.parent.element.id + 'captioncell', tabindex: '-1' } });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n *\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the GroupedData\n * @returns {Element} returns the element\n */\n GroupCaptionCellRenderer.prototype.render = function (cell, data) {\n this.element.id = this.parent.element.id + 'captioncell' + this.cellUid++;\n var node = this.element.cloneNode();\n var gObj = this.parent;\n var column = cell.column;\n var domSetter = column.getDomSetter ? column.getDomSetter() : 'innerHTML';\n var result;\n var fKeyValue;\n var gTemplateValue;\n data.headerText = cell.column.headerText;\n if (cell.isForeignKey) {\n fKeyValue = this.format(cell.column, cell.column.valueAccessor('foreignKey', data, cell.column));\n }\n var value = cell.isForeignKey ? fKeyValue : cell.column.enableGroupByFormat ? data.key :\n this.format(cell.column, cell.column.valueAccessor('key', data, cell.column));\n for (var j = 0; j < gObj.aggregates.length; j++) {\n var _loop_1 = function (i) {\n if (gObj.getVisibleColumns()[0].field === gObj.aggregates[parseInt(j.toString(), 10)].columns[parseInt(i.toString(), 10)]\n .field && gObj.aggregates[parseInt(j.toString(), 10)].columns[parseInt(i.toString(), 10)].groupCaptionTemplate) {\n var gCaptionTemp = gObj.aggregates[parseInt(j.toString(), 10)]\n .columns[parseInt(i.toString(), 10)].groupCaptionTemplate;\n if (typeof gCaptionTemp === 'string' && gCaptionTemp.includes('$')) {\n gTemplateValue = gObj.aggregates[parseInt(j.toString(), 10)].columns[parseInt(i.toString(), 10)]\n .groupCaptionTemplate.split('$')[0] + data[gObj.getVisibleColumns()[0].field][gObj\n .aggregates[parseInt(j.toString(), 10)].columns[parseInt(i.toString(), 10)].type] +\n gObj.aggregates[parseInt(j.toString(), 10)].columns[parseInt(i.toString(), 10)]\n .groupCaptionTemplate.split('}')[1];\n }\n else {\n var column_1 = (gObj.aggregates[parseInt(j.toString(), 10)]\n .columns[parseInt(i.toString(), 10)]);\n var tempObj = column_1.getTemplate(CellType.CaptionSummary);\n var tempID = '';\n if (!isNullOrUndefined(tempObj)) {\n var tempValue_1 = tempObj.fn(data[column_1.columnName], this_1.parent, tempObj.property, tempID);\n if (this_1.parent.isReact && typeof column_1.groupCaptionTemplate !== 'string') {\n this_1.parent.renderTemplates(function () {\n if (tempValue_1 && tempValue_1.length) {\n if (!isNullOrUndefined(gObj.groupSettings.captionTemplate)) {\n node.appendChild(tempValue_1[0]);\n }\n else {\n node.innerText += ' ' + tempValue_1[0].textContent;\n }\n }\n });\n }\n else {\n if (tempValue_1 && tempValue_1.length) {\n if (!isNullOrUndefined(gObj.groupSettings.captionTemplate)) {\n gTemplateValue = tempValue_1;\n }\n else {\n gTemplateValue = tempValue_1[0].textContent;\n }\n }\n }\n }\n }\n return \"break\";\n }\n };\n var this_1 = this;\n for (var i = 0; i < gObj.aggregates[parseInt(j.toString(), 10)].columns.length; i++) {\n var state_1 = _loop_1(i);\n if (state_1 === \"break\")\n break;\n }\n }\n if (!isNullOrUndefined(gObj.groupSettings.captionTemplate)) {\n var isReactCompiler = this.parent.isReact && typeof (gObj.groupSettings.captionTemplate) !== 'string';\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n this.parent.parentDetails.parentInstObj.isReact;\n if (isReactCompiler || isReactChild) {\n var tempID = gObj.element.id + 'captionTemplate';\n templateCompiler(gObj.groupSettings.captionTemplate)(data, this.parent, 'captionTemplate', tempID, null, null, node);\n this.parent.renderTemplates();\n }\n else if (this.parent.isVue) {\n result = templateCompiler(gObj.groupSettings.captionTemplate)(data, this.parent);\n }\n else {\n result = templateCompiler(gObj.groupSettings.captionTemplate)(data);\n }\n if (!isReactCompiler && !isReactChild) {\n appendChildren(node, result);\n if (gTemplateValue && gTemplateValue.length && gTemplateValue[0].textContent) {\n node.appendChild(gTemplateValue[0]);\n }\n }\n }\n else {\n if (gObj.groupSettings.enableLazyLoading) {\n node[\"\" + domSetter] = this.parent.sanitize(cell.column.headerText) + ': ' + this.parent.sanitize(value) +\n (gTemplateValue ? ' ' + gTemplateValue : '');\n }\n else {\n node[\"\" + domSetter] = this.parent.sanitize(cell.column.headerText) + ': ' + this.parent.sanitize(value) +\n ' - ' + data.count + ' ' + (data.count < 2 ? this.localizer.getConstant('Item') : this.localizer.getConstant('Items'))\n + (gTemplateValue ? ' ' + gTemplateValue : '');\n }\n }\n node.setAttribute('colspan', cell.colSpan.toString());\n node.setAttribute('aria-label', node.innerHTML + this.localizer.getConstant('GroupCaption'));\n node.setAttribute('title', node.textContent);\n return node;\n };\n return GroupCaptionCellRenderer;\n}(CellRenderer));\nexport { GroupCaptionCellRenderer };\n/**\n * GroupCaptionEmptyCellRenderer class which responsible for building group caption empty cell.\n *\n * @hidden\n */\nvar GroupCaptionEmptyCellRenderer = /** @class */ (function (_super) {\n __extends(GroupCaptionEmptyCellRenderer, _super);\n function GroupCaptionEmptyCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TD', { className: 'e-groupcaption' });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n *\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the Object\n * @param {string} data.field - Defines the field\n * @param {string} data.key - Defines the key\n * @param {number} data.count - Defines the count\n * @returns {Element} returns the element\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\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 return GroupCaptionEmptyCellRenderer;\n}(CellRenderer));\nexport { GroupCaptionEmptyCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { IndentCellRenderer } from './indent-cell-renderer';\nimport { CellType } from '../base/enum';\n/**\n * ExpandCellRenderer class which responsible for building group expand cell.\n *\n * @hidden\n */\nvar ExpandCellRenderer = /** @class */ (function (_super) {\n __extends(ExpandCellRenderer, _super);\n function ExpandCellRenderer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Function to render the expand cell\n *\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the data\n * @param {string} data.field - Defines the field\n * @param {string} data.key - Defines the key\n * @param {Object} attr - specifies the attribute\n * @param {boolean} isExpand - specifies isexpand\n * @returns {Element} returns the element\n */\n ExpandCellRenderer.prototype.render = function (cell, data, attr, isExpand) {\n var node = this.element.cloneNode();\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 if (this.parent.infiniteScrollSettings && this.parent.infiniteScrollSettings.enableCache) {\n cell.cellType = CellType.Indent;\n node.className = isExpand ? 'e-recordplusexpand e-disablepointer' : 'e-recordpluscollapse e-disablepointer';\n }\n else {\n node.className = isExpand ? 'e-recordplusexpand' : 'e-recordpluscollapse';\n node.appendChild(this.parent.createElement('a', {\n className: isExpand ? 'e-icons e-gdiagonaldown e-icon-gdownarrow' : 'e-icons e-gnextforward e-icon-grightarrow',\n attrs: { href: '#', 'title': isExpand ? 'expanded' : 'collapsed' }\n }));\n }\n return node;\n };\n return ExpandCellRenderer;\n}(IndentCellRenderer));\nexport { ExpandCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { CellRenderer } from './cell-renderer';\n/**\n * HeaderIndentCellRenderer class which responsible for building header indent cell.\n *\n * @hidden\n */\nvar HeaderIndentCellRenderer = /** @class */ (function (_super) {\n __extends(HeaderIndentCellRenderer, _super);\n function HeaderIndentCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TH', { className: 'e-grouptopleftcell' });\n return _this;\n }\n /**\n * Function to render the indent cell\n *\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the data\n * @returns {Element} returns the element\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n HeaderIndentCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.appendChild(this.parent.createElement('div', { className: 'e-headercelldiv e-emptycell', innerHTML: '' }));\n return node;\n };\n return HeaderIndentCellRenderer;\n}(CellRenderer));\nexport { HeaderIndentCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { CellRenderer } from './cell-renderer';\n/**\n * DetailHeaderIndentCellRenderer class which responsible for building detail header indent cell.\n *\n * @hidden\n */\nvar DetailHeaderIndentCellRenderer = /** @class */ (function (_super) {\n __extends(DetailHeaderIndentCellRenderer, _super);\n function DetailHeaderIndentCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TH', { className: 'e-detailheadercell' });\n return _this;\n }\n /**\n * Function to render the detail indent cell\n *\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the data\n * @returns {Element} returns the element\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DetailHeaderIndentCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.appendChild(this.parent.createElement('div', { className: 'e-emptycell' }));\n return node;\n };\n return DetailHeaderIndentCellRenderer;\n}(CellRenderer));\nexport { DetailHeaderIndentCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\n/**\n * ExpandCellRenderer class which responsible for building group expand cell.\n *\n * @hidden\n */\nvar DetailExpandCellRenderer = /** @class */ (function (_super) {\n __extends(DetailExpandCellRenderer, _super);\n function DetailExpandCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TD', {\n className: 'e-detailrowcollapse',\n attrs: { 'aria-expanded': 'false', tabindex: '-1' }\n });\n return _this;\n }\n /**\n * Function to render the detail expand cell\n *\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the data\n * @param {Object} attributes - specifies the attributes\n * @returns {Element} returns the element\n */\n DetailExpandCellRenderer.prototype.render = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n if (attributes && !isNullOrUndefined(attributes['class'])) {\n node.className = '';\n node.className = attributes['class'];\n node.appendChild(this.parent.createElement('a', { className: 'e-icons e-dtdiagonaldown e-icon-gdownarrow', attrs: {\n href: '#', 'title': this.localizer.getConstant('Expanded')\n } }));\n }\n else {\n node.appendChild(this.parent.createElement('a', { className: 'e-icons e-dtdiagonalright e-icon-grightarrow', attrs: {\n href: '#', 'title': this.localizer.getConstant('Collapsed')\n } }));\n }\n if (cell.isSelected) {\n node.classList.add('e-selectionbackground', 'e-active');\n }\n return node;\n };\n return DetailExpandCellRenderer;\n}(CellRenderer));\nexport { DetailExpandCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { CellRenderer } from './cell-renderer';\nimport { applyStickyLeftRightPosition } from '../base/util';\n/**\n * ExpandCellRenderer class which responsible for building group expand cell.\n *\n * @hidden\n */\nvar RowDragDropRenderer = /** @class */ (function (_super) {\n __extends(RowDragDropRenderer, _super);\n function RowDragDropRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TD', {\n className: 'e-rowdragdrop e-rowdragdropcell',\n attrs: { tabindex: '-1', role: 'gridcell' }\n });\n return _this;\n }\n /**\n * Function to render the detail expand cell\n *\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the data\n * @returns {Element} returns the element\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\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 attrs: { 'aria-hidden': 'true' }\n }));\n if (cell.isSelected) {\n nodeElement.classList.add('e-selectionbackground');\n nodeElement.classList.add('e-active');\n }\n if (this.parent.getVisibleFrozenRightCount() || this.parent.getVisibleFrozenLeftCount()) {\n nodeElement.classList.add('e-leftfreeze');\n var width = this.parent.getFrozenMode() === 'Right' ? 0 : this.parent.groupSettings.columns.length * 30;\n applyStickyLeftRightPosition(nodeElement, width, this.parent.enableRtl, this.parent.getFrozenMode() === 'Right' ? 'Right' : 'Left');\n }\n return nodeElement;\n };\n return RowDragDropRenderer;\n}(CellRenderer));\nexport { RowDragDropRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { applyStickyLeftRightPosition } from '../base/util';\n/**\n * DetailHeaderIndentCellRenderer class which responsible for building detail header indent cell.\n *\n * @hidden\n */\nvar RowDragDropHeaderRenderer = /** @class */ (function (_super) {\n __extends(RowDragDropHeaderRenderer, _super);\n function RowDragDropHeaderRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent.createElement('TH', { className: 'e-rowdragheader' });\n return _this;\n }\n /**\n * Function to render the detail indent cell\n *\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the data\n * @returns {Element} returns the element\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n RowDragDropHeaderRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.appendChild(createElement('div', { className: 'e-emptycell' }));\n if (this.parent.getVisibleFrozenRightCount() || this.parent.getVisibleFrozenLeftCount()) {\n node.classList.add('e-leftfreeze');\n var width = this.parent.getFrozenMode() === 'Right' ? 0 : this.parent.groupSettings.columns.length * 30;\n applyStickyLeftRightPosition(node, width, this.parent.enableRtl, this.parent.getFrozenMode() === 'Right' ? 'Right' : 'Left');\n }\n return node;\n };\n return RowDragDropHeaderRenderer;\n}(CellRenderer));\nexport { RowDragDropHeaderRenderer };\n","import { remove, resetBlazorTemplate, blazorTemplates, getValue } 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, clearReactVueTemplates } from '../base/util';\nimport { ContentRender } from '../renderer/content-renderer';\nimport { HeaderRender } from '../renderer/header-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { HeaderCellRenderer } from '../renderer/header-cell-renderer';\nimport { StackedHeaderCellRenderer } from '../renderer/stacked-cell-renderer';\nimport { IndentCellRenderer } from '../renderer/indent-cell-renderer';\nimport { GroupCaptionCellRenderer, GroupCaptionEmptyCellRenderer } from '../renderer/caption-cell-renderer';\nimport { ExpandCellRenderer } from '../renderer/expand-cell-renderer';\nimport { HeaderIndentCellRenderer } from '../renderer/header-indent-renderer';\nimport { DetailHeaderIndentCellRenderer } from '../renderer/detail-header-indent-renderer';\nimport { DetailExpandCellRenderer } from '../renderer/detail-expand-cell-renderer';\nimport { RowDragDropRenderer } from './row-drag-drop-renderer';\nimport { RowDragDropHeaderRenderer } from '../renderer/row-drag-header-indent-render';\nimport * as literals from '../base/string-literals';\n/**\n * Content module is used to render grid content\n *\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {ServiceLocator} locator - specifies the serviceLocator\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 * @returns {void}\n */\n Render.prototype.render = function () {\n var gObj = this.parent;\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 if (gObj.getColumns().length) {\n this.isLayoutRendered = true;\n this.headerRenderer.renderTable();\n this.contentRenderer.renderTable();\n this.emptyRow(false);\n }\n this.parent.scrollModule.setWidth();\n this.parent.scrollModule.setHeight();\n if (this.parent.height !== 'auto') {\n this.parent.scrollModule.setPadding();\n }\n this.refreshDataManager();\n };\n /**\n * Refresh the entire Grid.\n *\n * @param {NotifyArgs} e - specifies the NotifyArgs\n * @returns {void}\n */\n Render.prototype.refresh = function (e) {\n var _this = this;\n if (e === void 0) { e = { requestType: 'refresh' }; }\n var gObj = this.parent;\n gObj.notify(e.requestType + \"-begin\", e);\n gObj.trigger(events.actionBegin, e, function (args) {\n if (args === void 0) { args = { requestType: 'refresh' }; }\n if (args.cancel) {\n gObj.notify(events.cancelBegin, args);\n if (args.action === 'clearFilter' && _this.parent.filterSettings.type === 'Menu') {\n _this.parent.filterSettings.columns[_this.parent.filterModule.filterObjIndex] = _this.parent.filterModule.prevFilterObject;\n var iconClass = _this.parent.showColumnMenu && _this.parent.filterModule['column'].showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n var col = _this.parent.element.querySelector('[e-mappinguid=\"' + _this.parent.filterModule['column'].uid + '\"]').parentElement;\n var flIcon = col.querySelector(iconClass);\n if (!isNullOrUndefined(_this.parent.filterModule.prevFilterObject)) {\n flIcon.classList.add('e-filtered');\n }\n }\n if (args.action === 'clear-filter' && (_this.parent.filterSettings.type === 'CheckBox' || _this.parent.filterSettings.type === 'Excel')) {\n _this.parent.filterSettings.columns = _this.parent.filterModule.checkboxPrevFilterObject;\n }\n if (args.requestType === 'grouping') {\n // Remove the dropped column name from groupsettings.columns if args.cancel is true \n var index = gObj.groupSettings.columns.indexOf(args.columnName);\n if (index !== -1) {\n gObj.setProperties({ groupSettings: { Columns: gObj.groupSettings.columns.splice(index, 1) } }, true);\n gObj.setProperties({ sortSettings: { Columns: gObj.sortSettings.columns.splice(index, 1) } }, true);\n var column = gObj.getColumnByField(args.columnName);\n var headerCell = gObj.getColumnHeaderByField(column.field);\n column.visible = (!isNullOrUndefined(headerCell) && !headerCell.classList.contains('e-hide'));\n }\n }\n return;\n }\n if (gObj.allowSelection && (args.action === 'clearFilter' || args.action === 'clear-filter' ||\n (args.requestType === 'searching' && args.searchString === '') || args.action === 'add')) {\n gObj.selectionModule['rmtHdrChkbxClicked'] = false;\n }\n if (gObj.allowPaging && gObj.pageSettings.pageSizes && gObj.pagerModule.pagerObj.isAllPage &&\n (args.action === 'add' && args.requestType === 'save') && gObj.pagerModule.pagerObj.checkAll) {\n gObj.setProperties({ pageSettings: { pageSize: gObj.pageSettings.pageSize + 1 } }, true);\n }\n if (args.requestType === 'delete' && gObj.allowPaging) {\n var dataLength = args.data.length;\n var count = gObj.pageSettings.totalRecordsCount - dataLength;\n var currentViewData = gObj.getCurrentViewRecords().length;\n // eslint-disable-next-line max-len\n if ((!(currentViewData - dataLength) && count && ((gObj.pageSettings.currentPage - 1) * gObj.pageSettings.pageSize) === count) || (count && count <= dataLength)) {\n gObj.prevPageMoving = true;\n gObj.setProperties({\n pageSettings: {\n totalRecordsCount: count, currentPage: Math.ceil(count / gObj.pageSettings.pageSize)\n }\n }, true);\n gObj.pagerModule.pagerObj.totalRecordsCount = count;\n }\n }\n if (args.requestType === 'reorder' && _this.parent.dataSource && 'result' in _this.parent.dataSource) {\n _this.contentRenderer.refreshContentRows(args);\n }\n else if ((args.requestType === 'paging' || args.requestType === 'columnstate' || args.requestType === 'reorder')\n && _this.parent.groupSettings.enableLazyLoading && _this.parent.groupSettings.columns.length\n && (_this.parent.enableVirtualization ? _this.parent.lazyLoadRender :\n _this.parent.contentModule).getGroupCache()[_this.parent.pageSettings.currentPage]) {\n _this.contentRenderer.refreshContentRows(args);\n }\n else {\n _this.refreshDataManager(args);\n }\n });\n };\n /**\n * @returns {void}\n * @hidden\n */\n Render.prototype.resetTemplates = function () {\n var gObj = this.parent;\n var gridColumns = gObj.getColumns();\n if (gObj.detailTemplate) {\n var detailTemplateID = gObj.element.id + 'detailTemplate';\n blazorTemplates[\"\" + detailTemplateID] = [];\n resetBlazorTemplate(detailTemplateID, 'DetailTemplate');\n }\n if (gObj.groupSettings.captionTemplate) {\n resetBlazorTemplate(gObj.element.id + 'captionTemplate', 'CaptionTemplate');\n }\n if (gObj.rowTemplate) {\n resetBlazorTemplate(gObj.element.id + 'rowTemplate', 'RowTemplate');\n }\n if (gObj.toolbarTemplate) {\n resetBlazorTemplate(gObj.element.id + 'toolbarTemplate', 'ToolbarTemplate');\n }\n if (gObj.pageSettings.template) {\n resetBlazorTemplate(gObj.element.id + '_template', 'pageSettings');\n }\n for (var i = 0; i < gridColumns.length; i++) {\n if (gridColumns[parseInt(i.toString(), 10)].template) {\n blazorTemplates[gObj.element.id + gridColumns[parseInt(i.toString(), 10)].uid] = [];\n resetBlazorTemplate(gObj.element.id + gridColumns[parseInt(i.toString(), 10)].uid, 'Template');\n }\n if (gridColumns[parseInt(i.toString(), 10)].headerTemplate) {\n resetBlazorTemplate(gObj.element.id + gridColumns[parseInt(i.toString(), 10)].uid + 'headerTemplate', 'HeaderTemplate');\n }\n if (gridColumns[parseInt(i.toString(), 10)].filterTemplate) {\n resetBlazorTemplate(gObj.element.id + gridColumns[parseInt(i.toString(), 10)].uid + 'filterTemplate', 'FilterTemplate');\n }\n }\n var guid = 'guid';\n for (var k = 0; k < gObj.aggregates.length; k++) {\n for (var j = 0; j < gObj.aggregates[parseInt(k.toString(), 10)].columns.length; j++) {\n if (gObj.aggregates[parseInt(k.toString(), 10)].columns[parseInt(j.toString(), 10)].footerTemplate) {\n var tempID = gObj.element.id + gObj.aggregates[parseInt(k.toString(), 10)].columns[parseInt(j.toString(), 10)][\"\" + guid] + 'footerTemplate';\n resetBlazorTemplate(tempID, 'FooterTemplate');\n }\n if (gObj.aggregates[parseInt(k.toString(), 10)].columns[parseInt(j.toString(), 10)].groupFooterTemplate) {\n var tempID = gObj.element.id + gObj.aggregates[parseInt(k.toString(), 10)].columns[parseInt(j.toString(), 10)][\"\" + guid] + 'groupFooterTemplate';\n resetBlazorTemplate(tempID, 'GroupFooterTemplate');\n }\n if (gObj.aggregates[parseInt(k.toString(), 10)].columns[parseInt(j.toString(), 10)].groupCaptionTemplate) {\n var tempID = gObj.element.id + gObj.aggregates[parseInt(k.toString(), 10)].columns[parseInt(j.toString(), 10)][\"\" + guid] + 'groupCaptionTemplate';\n resetBlazorTemplate(tempID, 'GroupCaptionTemplate');\n }\n }\n }\n };\n Render.prototype.refreshComplete = function (e) {\n this.parent.trigger(events.actionComplete, e);\n };\n /**\n * The function is used to refresh the dataManager\n *\n * @param {NotifyArgs} args - specifies the args\n * @returns {void}\n */\n Render.prototype.refreshDataManager = function (args) {\n var _this = this;\n if (args === void 0) { args = {}; }\n var gObj = this.parent;\n var maskRow = (gObj.loadingIndicator.indicatorType === 'Shimmer' && args.requestType !== 'virtualscroll'\n && args.requestType !== 'infiniteScroll') || ((args.requestType === 'virtualscroll' || args.requestType === 'infiniteScroll')\n && gObj.enableVirtualMaskRow);\n if (args.requestType !== 'virtualscroll' && !args.isCaptionCollapse && !maskRow) {\n this.parent.showSpinner();\n }\n if (maskRow) {\n gObj.showMaskRow(args.requestType === 'virtualscroll' ? args.virtualInfo.sentinelInfo.axis\n : args.requestType === 'infiniteScroll' ? args.direction : undefined);\n }\n this.parent.notify(events.resetInfiniteBlocks, args);\n this.emptyGrid = false;\n var dataManager;\n var isFActon = this.isNeedForeignAction();\n this.ariaService.setBusy(this.parent.getContent().querySelector('.' + literals.content), true);\n if (isFActon) {\n var deffered = new Deferred();\n dataManager = this.getFData(deffered, args);\n }\n if (!dataManager) {\n if (gObj.allowPaging && !gObj.getDataModule().dataManager.dataSource.offline && gObj.pageSettings\n && gObj.pageSettings.pageSizes && gObj.pagerModule && gObj.pagerModule.pagerObj && gObj.pagerModule.pagerObj.isAllPage) {\n gObj.pagerModule.pagerObj.isAllPage = undefined;\n }\n dataManager = this.data.getData(args, this.data.generateQuery().requiresCount());\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dataManager = dataManager.then(function (e) {\n var query = _this.data.generateQuery().requiresCount();\n if (_this.emptyGrid) {\n var def = new Deferred();\n def.resolve({ result: [], count: 0 });\n return def.promise;\n }\n return _this.data.getData(args, query);\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, { dataManager: dataManager, result: e, promise: deffered_1, action: args });\n return deffered_1.promise;\n });\n }\n if (this.parent.groupSettings.disablePageWiseAggregates && this.parent.groupSettings.columns.length) {\n dataManager = dataManager.then(function (e) { return _this.validateGroupRecords(e); });\n }\n dataManager.then(function (e) { return _this.dataManagerSuccess(e, args); })\n .catch(function (e) { return _this.dataManagerFailure(e, args); });\n };\n Render.prototype.getFData = function (deferred, args) {\n this.parent.notify(events.getForeignKeyData, { isComplex: true, promise: deferred, action: args });\n return deferred.promise;\n };\n Render.prototype.isNeedForeignAction = function () {\n var gObj = this.parent;\n return !!((gObj.allowFiltering && gObj.filterSettings.columns.length) ||\n (gObj.searchSettings.key.length)) && this.foreignKey(this.parent.getForeignKeyColumns());\n };\n Render.prototype.foreignKey = function (columns) {\n var _this = this;\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 Render.prototype.sendBulkRequest = function (args) {\n var _this = this;\n args.requestType = 'batchsave';\n var gObj = this.parent;\n if (gObj.allowPaging && gObj.pageSettings.pageSizes && gObj.pagerModule.pagerObj.isAllPage && gObj.pagerModule.pagerObj.checkAll) {\n var dataLength = args['changes'].addedRecords.length;\n if (dataLength) {\n gObj.setProperties({ pageSettings: { pageSize: gObj.pageSettings.pageSize + dataLength } }, true);\n }\n }\n if (gObj.allowPaging && (args.changes.addedRecords.length ||\n args.changes.deletedRecords.length ||\n args.changes.changedRecords.length) && gObj.pageSettings\n && gObj.pageSettings.pageSizes && gObj.pagerModule && gObj.pagerModule.pagerObj\n && !gObj.getDataModule().dataManager.dataSource.offline && gObj.pagerModule.pagerObj.isAllPage) {\n gObj.pagerModule.pagerObj.isAllPage = undefined;\n }\n var promise = this.data.saveChanges(args.changes, this.parent.getPrimaryKeyFieldNames()[0], args.original);\n var query = this.data.generateQuery().requiresCount();\n if (this.data.dataManager.dataSource.offline) {\n this.refreshDataManager({ requestType: 'batchsave' });\n return;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n promise.then(function (e) {\n _this.data.getData(args, query)\n .then(function (e) { return _this.dmSuccess(e, args); })\n .catch(function (e) { return _this.dmFailure(e, args); });\n })\n .catch(function (e) { return _this.dmFailure(e, args); });\n }\n };\n Render.prototype.dmSuccess = function (e, args) {\n this.dataManagerSuccess(e, args);\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 *\n * @returns {void}\n * @hidden\n */\n Render.prototype.renderEmptyRow = function () {\n this.emptyRow(true);\n };\n Render.prototype.emptyRow = function (isTrigger) {\n var gObj = this.parent;\n var tbody = this.contentRenderer.getTable().querySelector(literals.tbody);\n if (!isNullOrUndefined(tbody)) {\n remove(tbody);\n }\n tbody = this.parent.createElement(literals.tbody, { attrs: { role: 'rowgroup' } });\n var spanCount = gObj.allowRowDragAndDrop && isNullOrUndefined(gObj.rowDropSettings.targetID) ? 1 : 0;\n if (gObj.detailTemplate || gObj.childGrid) {\n ++spanCount;\n }\n var tr = this.parent.createElement('tr', { className: 'e-emptyrow', attrs: { role: 'row' } });\n var td;\n if (gObj.emptyRecordTemplate) {\n var emptyRecordTemplateID = gObj.element.id + 'emptyRecordTemplate';\n td = this.parent.createElement('td', { attrs: { colspan: (gObj.getVisibleColumns().length + spanCount + gObj.groupSettings.columns.length).toString() } });\n if (gObj.isVue) {\n td.appendChild(gObj.getEmptyRecordTemplate()(gObj.dataSource, gObj, 'emptyRecordTemplate', emptyRecordTemplateID, undefined, undefined, undefined, this.parent['root'])[1]);\n }\n else {\n td.appendChild(gObj.getEmptyRecordTemplate()(gObj.dataSource, gObj, 'emptyRecordTemplate', emptyRecordTemplateID, undefined, undefined, undefined, this.parent['root'])[0]);\n }\n if (gObj.isReact) {\n this.parent.renderTemplates();\n }\n }\n else {\n td = this.parent.createElement('td', {\n innerHTML: this.l10n.getConstant('EmptyRecord'),\n attrs: { colspan: (gObj.getVisibleColumns().length + spanCount + gObj.groupSettings.columns.length).toString() }\n });\n }\n if (gObj.isFrozenGrid()) {\n td.classList.add('e-leftfreeze');\n td.style.left = 0 + 'px';\n }\n if (gObj.frozenRows && gObj.element.querySelector('.e-frozenrow-border')) {\n this.parent.element.querySelector('.e-frozenrow-border').classList.add('e-frozenrow-empty');\n }\n tr.appendChild(td);\n tbody.appendChild(tr);\n this.contentRenderer.renderEmpty(tbody);\n if (isTrigger) {\n this.parent.trigger(events.dataBound, {});\n this.parent.notify(events.onEmpty, { rows: [new Row({ isDataRow: true, cells: [new Cell({ isDataCell: true, visible: true })] })] });\n }\n };\n Render.prototype.dynamicColumnChange = function () {\n if (this.parent.getCurrentViewRecords().length) {\n this.updateColumnType(this.parent.getCurrentViewRecords()[0]);\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 for (var i = 0, len = columns.length; i < len; i++) {\n value = getObject(columns[parseInt(i.toString(), 10)].field || '', data);\n if (!isNullOrUndefined(columns[parseInt(i.toString(), 10)][\"\" + cFormat])) {\n columns[parseInt(i.toString(), 10)].format = columns[parseInt(i.toString(), 10)][\"\" + cFormat];\n }\n if (!isNullOrUndefined(columns[parseInt(i.toString(), 10)].validationRules)\n && !isNullOrUndefined(columns[parseInt(i.toString(), 10)].validationRules[\"\" + equalTo])) {\n columns[parseInt(i.toString(), 10)].validationRules[\"\" + equalTo][0] = this.parent.element.id + columns[parseInt(i.toString(), 10)].validationRules[\"\" + equalTo][0];\n }\n if (columns[parseInt(i.toString(), 10)].isForeignColumn() && columns[parseInt(i.toString(), 10)].columnData) {\n value = getObject(columns[parseInt(i.toString(), 10)].foreignKeyValue || '', columns[parseInt(i.toString(), 10)].columnData[0]);\n }\n if (!isNullOrUndefined(value)) {\n this.isColTypeDef = true;\n if (!columns[parseInt(i.toString(), 10)].type) {\n columns[parseInt(i.toString(), 10)].type = value.getDay ? (value.getHours() > 0 || value.getMinutes() > 0 ||\n value.getSeconds() > 0 || value.getMilliseconds() > 0 ? 'datetime' : 'date') : typeof (value);\n }\n }\n else {\n columns[parseInt(i.toString(), 10)].type = columns[parseInt(i.toString(), 10)].type || null;\n }\n var valueFormatter = new ValueFormatter();\n if (columns[parseInt(i.toString(), 10)].format && (columns[parseInt(i.toString(), 10)].format.skeleton\n || (columns[parseInt(i.toString(), 10)].format.format &&\n typeof columns[parseInt(i.toString(), 10)].format.format === 'string'))) {\n columns[parseInt(i.toString(), 10)].setFormatter(valueFormatter.getFormatFunction(extend({}, columns[parseInt(i.toString(), 10)].format)));\n columns[parseInt(i.toString(), 10)].setParser(valueFormatter.getParserFunction(columns[parseInt(i.toString(), 10)].format));\n }\n if (typeof (columns[parseInt(i.toString(), 10)].format) === 'string') {\n setFormatter(this.locator, columns[parseInt(i.toString(), 10)]);\n }\n else if (!columns[parseInt(i.toString(), 10)].format && columns[parseInt(i.toString(), 10)].type === 'number') {\n columns[parseInt(i.toString(), 10)].setParser(fmtr.getParserFunction({ format: 'n2' }));\n }\n if (columns[parseInt(i.toString(), 10)].type === 'dateonly' && !columns[parseInt(i.toString(), 10)].format) {\n columns[parseInt(i.toString(), 10)].format = 'yMd';\n setFormatter(this.locator, columns[parseInt(i.toString(), 10)]);\n }\n }\n };\n /**\n * @param {ReturnType} e - specifies the return type\n * @param {NotifyArgs} args - specifies the Notifyargs\n * @returns {void}\n * @hidden\n */\n // tslint:disable-next-line:max-func-body-length\n Render.prototype.dataManagerSuccess = function (e, args) {\n var _this = this;\n var gObj = this.parent;\n this.contentRenderer = this.renderer.getRenderer(RenderType.Content);\n this.headerRenderer = this.renderer.getRenderer(RenderType.Header);\n e.actionArgs = args;\n var isInfiniteDelete = this.parent.enableInfiniteScrolling && !this.parent.infiniteScrollSettings.enableCache &&\n !gObj.groupSettings.enableLazyLoading && (args.requestType === 'delete' || (args.requestType === 'save' &&\n this.parent.infiniteScrollModule.requestType === 'add' && !(gObj.sortSettings.columns.length ||\n gObj.filterSettings.columns.length || this.parent.groupSettings.columns.length || gObj.searchSettings.key)));\n // tslint:disable-next-line:max-func-body-length\n gObj.trigger(events.beforeDataBound, e, function (dataArgs) {\n if (dataArgs.cancel) {\n return;\n }\n dataArgs.result = isNullOrUndefined(dataArgs.result) ? [] : dataArgs.result;\n var len = Object.keys(dataArgs.result).length;\n if (_this.parent.isDestroyed) {\n return;\n }\n if ((!gObj.getColumns().length && !len) && !(gObj.columns.length && gObj.columns[0] instanceof Column)) {\n gObj.hideSpinner();\n return;\n }\n if (_this.isInfiniteEnd(args) && !len) {\n _this.parent.notify(events.infiniteEditHandler, { e: args, result: e.result, count: e.count, agg: e.aggregates });\n return;\n }\n _this.parent.isEdit = false;\n _this.parent.notify(events.editReset, {});\n _this.parent.notify(events.tooltipDestroy, {});\n if (args && args.requestType !== 'infiniteScroll') {\n _this.parent.notify(events.commandColumnDestroy, { type: 'refreshCommandColumn' });\n }\n _this.contentRenderer.prevCurrentView = _this.parent.currentViewData.slice();\n gObj.currentViewData = dataArgs.result;\n gObj.notify(events.refreshInfiniteCurrentViewData, { args: args, data: dataArgs.result });\n if (dataArgs.count && !gObj.allowPaging && (gObj.enableVirtualization || gObj.enableInfiniteScrolling)) {\n gObj.totalDataRecordsCount = dataArgs.count;\n }\n if (!len && dataArgs.count && gObj.allowPaging && args && args.requestType !== 'delete') {\n if (_this.parent.groupSettings.enableLazyLoading\n && (args.requestType === 'grouping' || args.requestType === 'ungrouping')) {\n _this.parent.notify(events.groupComplete, args);\n }\n gObj.prevPageMoving = true;\n gObj.pageSettings.totalRecordsCount = dataArgs.count;\n if (args.requestType !== 'paging') {\n gObj.pageSettings.currentPage = Math.ceil(dataArgs.count / gObj.pageSettings.pageSize);\n }\n gObj.dataBind();\n return;\n }\n if ((!gObj.getColumns().length && len || !_this.isLayoutRendered) && !isGroupAdaptive(gObj)) {\n gObj.removeMaskRow();\n _this.updatesOnInitialRender(dataArgs);\n }\n if (!_this.isColTypeDef && gObj.getCurrentViewRecords()) {\n if (_this.data.dataManager.dataSource.offline && gObj.dataSource && gObj.dataSource.length) {\n _this.updateColumnType(gObj.dataSource[0]);\n }\n else {\n _this.updateColumnType(gObj.getCurrentViewRecords()[0]);\n }\n }\n if (!_this.parent.isInitialLoad && _this.parent.groupSettings.disablePageWiseAggregates &&\n !_this.parent.groupSettings.columns.length) {\n dataArgs.result = _this.parent.dataSource instanceof Array ? _this.parent.dataSource : _this.parent.currentViewData;\n }\n if ((_this.parent.isReact || _this.parent.isVue) && !isNullOrUndefined(args) && args.requestType !== 'infiniteScroll' && !args.isFrozen) {\n clearReactVueTemplates(_this.parent, ['footerTemplate']);\n }\n if (_this.parent.isAngular && _this.parent.allowGrouping && _this.parent.groupSettings.captionTemplate\n && !(!isNullOrUndefined(args) && args.requestType === 'infiniteScroll')) {\n _this.parent.destroyTemplate(['groupSettings_captionTemplate']);\n }\n _this.parent.notify(events.dataReady, extend({ count: dataArgs.count, result: dataArgs.result, aggregates: dataArgs.aggregates }, args));\n if ((gObj.groupSettings.columns.length || (args && args.requestType === 'ungrouping'))\n && (args && args.requestType !== 'filtering')) {\n _this.headerRenderer.refreshUI();\n }\n if (len) {\n if (isGroupAdaptive(gObj)) {\n var content = 'content';\n args.scrollTop = { top: _this.contentRenderer[\"\" + content].scrollTop };\n }\n if (!isInfiniteDelete) {\n if (_this.parent.enableImmutableMode) {\n _this.contentRenderer.immutableModeRendering(args);\n }\n else {\n _this.contentRenderer.refreshContentRows(args);\n }\n }\n else {\n _this.parent.notify(events.infiniteEditHandler, { e: args, result: e.result, count: e.count, agg: e.aggregates });\n }\n }\n else {\n if (args && args.isCaptionCollapse) {\n return;\n }\n if (!gObj.getColumns().length) {\n gObj.element.innerHTML = '';\n alert(_this.l10n.getConstant('EmptyDataSourceError')); //ToDO: change this alert as dialog\n return;\n }\n _this.contentRenderer.setRowElements([]);\n _this.contentRenderer.setRowObjects([]);\n _this.ariaService.setBusy(_this.parent.getContent().querySelector('.' + literals.content), false);\n gObj.removeMaskRow();\n _this.renderEmptyRow();\n if (gObj.enableColumnVirtualization && !len) {\n _this.parent.notify(events.contentReady, { rows: gObj.getRowsObject(), args: {} });\n }\n if (args) {\n var action = (args.requestType || '').toLowerCase() + '-complete';\n _this.parent.notify(action, args);\n if (args.requestType === 'batchsave') {\n args.cancel = false;\n args.rows = [];\n args.isFrozen = !args.isFrozen;\n _this.parent.trigger(events.actionComplete, args);\n }\n }\n if (_this.parent.autoFit) {\n _this.parent.preventAdjustColumns();\n }\n _this.parent.hideSpinner();\n }\n _this.parent.notify(events.toolbarRefresh, {});\n _this.setRowCount(_this.parent.getCurrentViewRecords().length);\n if ('query' in e) {\n _this.parent.getDataModule().isQueryInvokedFromData = false;\n }\n });\n };\n /**\n * @param {object} e - specifies the object\n * @param {Object[]} e.result - specifies the result\n * @param {NotifyArgs} args - specifies the args\n * @returns {void}\n * @hidden\n */\n Render.prototype.dataManagerFailure = function (e, args) {\n if (!isNullOrUndefined(this.parent.contentModule)) {\n this.ariaService.setOptions(this.parent.getContent().querySelector('.' + literals.content), { busy: false, invalid: true });\n this.setRowCount(1);\n }\n this.parent.trigger(events.actionFailure, { error: e });\n this.parent.hideSpinner();\n this.parent.removeMaskRow();\n if (args.requestType === 'save' || args.requestType === 'delete'\n || args.name === 'bulk-save') {\n return;\n }\n this.parent.currentViewData = [];\n this.renderEmptyRow();\n if (!this.parent.isInitialLoad) {\n this.parent.focusModule.setFirstFocusableTabIndex();\n }\n this.parent.log('actionfailure', { error: e });\n };\n Render.prototype.setRowCount = function (dataRowCount) {\n this.ariaService.setOptions(this.parent.element, {\n rowcount: dataRowCount ? dataRowCount.toString() : '1'\n });\n };\n Render.prototype.isInfiniteEnd = function (args) {\n return this.parent.enableInfiniteScrolling && !this.parent.infiniteScrollSettings.enableCache && args.requestType === 'delete';\n };\n Render.prototype.updatesOnInitialRender = function (e) {\n this.isLayoutRendered = true;\n var isEmptyCol = false;\n if (this.parent.columns.length < 1) {\n this.buildColumns(e.result[0]);\n isEmptyCol = true;\n }\n prepareColumns(this.parent.columns, null, this.parent);\n if (isEmptyCol) {\n this.parent.notify(events.refreshSplitFrozenColumn, {});\n }\n this.headerRenderer.renderTable();\n this.contentRenderer.renderTable();\n this.parent.isAutoGen = true;\n this.parent.notify(events.autoCol, {});\n };\n Render.prototype.iterateComplexColumns = function (obj, field, split) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n var childKeys = typeof obj[keys[parseInt(i.toString(), 10)]] === 'object'\n && obj[keys[parseInt(i.toString(), 10)]] && !(obj[keys[parseInt(i.toString(), 10)]] instanceof Date) ?\n Object.keys(obj[keys[parseInt(i.toString(), 10)]]) : [];\n if (childKeys.length) {\n this.iterateComplexColumns(obj[keys[parseInt(i.toString(), 10)]], field + (keys[parseInt(i.toString(), 10)] + '.'), split);\n }\n else {\n split[this.counter] = field + keys[parseInt(i.toString(), 10)];\n this.counter++;\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) { return complexCols[\"\" + e] !== 'BlazId'; }).\n map(function (field) { return complexCols[\"\" + field]; });\n for (var i = 0, len = columns.length; i < len; i++) {\n cols[parseInt(i.toString(), 10)] = { 'field': columns[parseInt(i.toString(), 10)] };\n if (this.parent.enableColumnVirtualization) {\n cols[parseInt(i.toString(), 10)].width = !isNullOrUndefined(cols[parseInt(i.toString(), 10)].width) ?\n cols[parseInt(i.toString(), 10)].width : 200;\n }\n }\n this.parent.setProperties({ 'columns': cols }, true);\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 Render.prototype.addEventListener = function () {\n var _this = this;\n if (this.parent.isDestroyed) {\n return;\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 () { _this.emptyGrid = true; }, this);\n this.parent.on(events.autoCol, this.dynamicColumnChange, this);\n };\n /**\n * @param {ReturnType} e - specifies the Return type\n * @returns {Promise} returns the object\n * @hidden\n */\n Render.prototype.validateGroupRecords = function (e) {\n var _this = this;\n var index = e.result.length - 1;\n if (index < 0) {\n return Promise.resolve(e);\n }\n var group0 = e.result[0];\n var groupN = e.result[parseInt(index.toString(), 10)];\n var predicate = [];\n var addWhere = function (input) {\n var groups = [group0, groupN];\n for (var i = 0; i < groups.length; i++) {\n predicate.push(new Predicate('field', '==', groups[parseInt(i.toString(), 10)].field).and(_this.getPredicate('key', 'equal', groups[parseInt(i.toString(), 10)].key)));\n }\n input.where(Predicate.or(predicate));\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 if (this.data.isRemote()) {\n var groups = [group0, groupN];\n for (var i = 0; i < groups.length; i++) {\n rPredicate.push(this.getPredicate(groups[parseInt(i.toString(), 10)].field, 'equal', groups[parseInt(i.toString(), 10)].key));\n }\n newQuery.where(Predicate.or(rPredicate));\n }\n else {\n addWhere(newQuery);\n }\n var deferred = new Deferred();\n this.data.getData({}, newQuery).then(function (r) {\n _this.updateGroupInfo(curFilter, r.result);\n deferred.resolve(e);\n }).catch(function (e) { return deferred.reject(e); });\n return deferred.promise;\n };\n Render.prototype.getPredicate = function (key, operator, value) {\n if (value instanceof Date) {\n return getDatePredicate({ field: key, operator: operator, value: value });\n }\n return new Predicate(key, operator, value);\n };\n Render.prototype.updateGroupInfo = function (current, untouched) {\n var dm = new DataManager(untouched);\n var elements = current;\n for (var i = 0; i < elements.length; i++) {\n var uGroup = dm.executeLocal(new Query()\n .where(new Predicate('field', '==', elements[parseInt(i.toString(), 10)].field).and(this.getPredicate('key', 'equal', elements[parseInt(i.toString(), 10)].key))))[0];\n elements[parseInt(i.toString(), 10)].count = uGroup.count;\n var itemGroup = elements[parseInt(i.toString(), 10)].items;\n var uGroupItem = uGroup.items;\n if (itemGroup.GroupGuid) {\n elements[parseInt(i.toString(), 10)].items =\n this.updateGroupInfo(elements[parseInt(i.toString(), 10)].items, uGroup.items);\n }\n var rows = this.parent.aggregates;\n for (var j = 0; j < rows.length; j++) {\n var row = rows[parseInt(j.toString(), 10)];\n for (var k = 0; k < row.columns.length; k++) {\n var types = row.columns[parseInt(k.toString(), 10)].type instanceof Array ?\n (row.columns[parseInt(k.toString(), 10)].type) :\n [(row.columns[parseInt(k.toString(), 10)].type)];\n for (var l = 0; l < types.length; l++) {\n var key = row.columns[parseInt(k.toString(), 10)].field + ' - ' + types[parseInt(l.toString(), 10)].toLowerCase();\n var data = itemGroup.level ? uGroupItem.records : uGroup.items;\n var context = this.parent;\n if (types[parseInt(l.toString(), 10)] === 'Custom') {\n var data_1 = itemGroup.level ? uGroupItem : uGroup;\n var temp = row.columns[parseInt(k.toString(), 10)]\n .customAggregate;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n elements[parseInt(i.toString(), 10)].aggregates[\"\" + key] = temp ? temp.call(context, data_1, row.columns[parseInt(k.toString(), 10)]) : '';\n }\n else {\n elements[parseInt(i.toString(), 10)].aggregates[\"\" + key] = DataUtil.aggregates[types[parseInt(l.toString(), 10)].toLowerCase()](data, row.columns[parseInt(k.toString(), 10)].field);\n }\n }\n }\n }\n }\n return current;\n };\n return Render;\n}());\nexport { Render };\n","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\n/**\n * CellRendererFactory\n *\n * @hidden\n */\nvar CellRendererFactory = /** @class */ (function () {\n function CellRendererFactory() {\n this.cellRenderMap = {};\n }\n CellRendererFactory.prototype.addCellRenderer = function (name, type) {\n name = typeof name === 'string' ? name : getEnumValue(CellType, name);\n if (isNullOrUndefined(this.cellRenderMap[\"\" + name])) {\n this.cellRenderMap[\"\" + name] = type;\n }\n };\n CellRendererFactory.prototype.getCellRenderer = function (name) {\n name = typeof name === 'string' ? name : getEnumValue(CellType, name);\n if (isNullOrUndefined(this.cellRenderMap[\"\" + name])) {\n // eslint-disable-next-line no-throw-literal\n throw \"The cellRenderer \" + name + \" is not found\";\n }\n else {\n return this.cellRenderMap[\"\" + name];\n }\n };\n return CellRendererFactory;\n}());\nexport { CellRendererFactory };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ResponsiveDialogRenderer } from '../renderer/responsive-dialog-renderer';\n/**\n * ServiceLocator\n *\n * @hidden\n */\nvar ServiceLocator = /** @class */ (function () {\n function ServiceLocator() {\n this.services = {};\n }\n ServiceLocator.prototype.register = function (name, type) {\n if (isNullOrUndefined(this.services[\"\" + name])) {\n this.services[\"\" + name] = type;\n }\n };\n ServiceLocator.prototype.getService = function (name) {\n if (isNullOrUndefined(this.services[\"\" + name])) {\n // eslint-disable-next-line no-throw-literal\n throw \"The service \" + name + \" is not registered\";\n }\n return this.services[\"\" + name];\n };\n ServiceLocator.prototype.registerAdaptiveService = function (type, isAdaptiveUI, action) {\n if (isAdaptiveUI) {\n type.responsiveDialogRenderer = new ResponsiveDialogRenderer(type.parent, type.serviceLocator);\n type.responsiveDialogRenderer.action = action;\n }\n else {\n if (type.responsiveDialogRenderer) {\n type.responsiveDialogRenderer.removeEventListener();\n type.responsiveDialogRenderer = undefined;\n }\n }\n };\n return ServiceLocator;\n}());\nexport { ServiceLocator };\n","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\n/**\n * RendererFactory\n *\n * @hidden\n */\nvar RendererFactory = /** @class */ (function () {\n function RendererFactory() {\n this.rendererMap = {};\n }\n RendererFactory.prototype.addRenderer = function (name, type) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[\"\" + rName])) {\n this.rendererMap[\"\" + rName] = type;\n }\n };\n RendererFactory.prototype.getRenderer = function (name) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[\"\" + rName])) {\n // eslint-disable-next-line no-throw-literal\n throw \"The renderer \" + rName + \" is not found\";\n }\n else {\n return this.rendererMap[\"\" + rName];\n }\n };\n return RendererFactory;\n}());\nexport { RendererFactory };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the paging behavior of the Grid.\n */\nvar PageSettings = /** @class */ (function (_super) {\n __extends(PageSettings, _super);\n function PageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(12)\n ], PageSettings.prototype, \"pageSize\", void 0);\n __decorate([\n Property(8)\n ], PageSettings.prototype, \"pageCount\", void 0);\n __decorate([\n Property(1)\n ], PageSettings.prototype, \"currentPage\", void 0);\n __decorate([\n Property()\n ], PageSettings.prototype, \"totalRecordsCount\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"enableQueryString\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"pageSizes\", void 0);\n __decorate([\n Property(null)\n ], PageSettings.prototype, \"template\", void 0);\n return PageSettings;\n}(ChildProperty));\nexport { PageSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the column chooser behavior of the Grid.\n */\nvar ColumnChooserSettings = /** @class */ (function (_super) {\n __extends(ColumnChooserSettings, _super);\n function ColumnChooserSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('startsWith')\n ], ColumnChooserSettings.prototype, \"operator\", void 0);\n __decorate([\n Property(false)\n ], ColumnChooserSettings.prototype, \"ignoreAccent\", void 0);\n return ColumnChooserSettings;\n}(ChildProperty));\nexport { ColumnChooserSettings };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { isActionPrevent } from '../base/util';\n/**\n * The `Search` module is used to handle search action.\n */\nvar Search = /** @class */ (function () {\n /**\n * Constructor for Grid search module.\n *\n * @param {IGrid} parent - specifies the IGrid\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`](./searchsettings/).\n *\n * @param {string} searchString - Defines the key.\n * @returns {void}\n */\n Search.prototype.search = function (searchString) {\n var gObj = this.parent;\n searchString = isNullOrUndefined(searchString) ? '' : searchString;\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.search, arg1: searchString });\n return;\n }\n if (searchString !== gObj.searchSettings.key) {\n // Check searchString is decimal or integer and parseFloat to remove trailing zeros\n /* eslint-disable-next-line */\n gObj.searchSettings.key = /^\\d+(\\.\\d+)?$/.test(searchString) ? parseFloat(searchString).toString() : searchString.toString();\n gObj.dataBind();\n }\n else if (this.refreshSearch) {\n gObj.refresh();\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Search.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\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 * @returns {void}\n * @hidden\n */\n Search.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\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 *\n * @returns {void}\n * @hidden\n */\n Search.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @param {NotifyArgs} e - specfies the NotifyArgs\n * @returns {void}\n * @hidden\n */\n Search.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n if (!isNullOrUndefined(e.properties.key)) {\n this.parent.notify(events.modelChanged, {\n requestType: 'searching', type: events.actionBegin, searchString: this.parent.searchSettings.key\n });\n }\n else {\n this.parent.notify(events.modelChanged, {\n requestType: 'searching', type: events.actionBegin\n });\n }\n };\n /**\n * The function used to trigger onActionComplete\n *\n * @param {NotifyArgs} e - specifies the NotifyArgs\n * @returns {void}\n * @hidden\n */\n Search.prototype.onSearchComplete = function (e) {\n this.parent.trigger(events.actionComplete, extend(e, {\n searchString: this.parent.searchSettings.key, requestType: 'searching', type: events.actionComplete\n }));\n };\n /**\n * The function used to store the requestType\n *\n * @param {NotifyArgs} e - specifies the NotifyArgs\n * @returns {void}\n * @hidden\n */\n Search.prototype.onActionComplete = function (e) {\n this.refreshSearch = e.requestType !== 'searching';\n };\n Search.prototype.cancelBeginEvent = function (e) {\n if (e.requestType === 'searching') {\n this.parent.setProperties({ searchSettings: { key: '' } }, true);\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n */\n Search.prototype.getModuleName = function () {\n return 'search';\n };\n return Search;\n}());\nexport { Search };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { iterateArrayOrObject, isGroupAdaptive, isActionPrevent, addRemoveEventListener } from '../base/util';\nimport * as events from '../base/constant';\n/**\n * The `ShowHide` module is used to control column visibility.\n */\nvar ShowHide = /** @class */ (function () {\n /**\n * Constructor for the show hide module.\n *\n * @param {IGrid} parent - specifies the IGrid\n * @hidden\n */\n function ShowHide(parent) {\n this.colName = [];\n this.isShowHide = false;\n this.parent = parent;\n this.addEventListener();\n }\n ShowHide.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.evtHandlers = [{ event: events.batchCancel, handler: this.batchChanges },\n { event: events.batchCnfrmDlgCancel, handler: this.resetColumnState }\n ];\n addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n };\n /**\n * @returns {void}\n * @hidden\n */\n ShowHide.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n addRemoveEventListener(this.parent, this.evtHandlers, false);\n };\n ShowHide.prototype.batchChanges = function () {\n if (this.isShowHide) {\n this.isShowHide = false;\n this.setVisible(this.colName, this.changedCol);\n this.changedCol = this.colName = [];\n }\n };\n /**\n * Shows a column by column name.\n *\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 * @returns {void}\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, { module: 'edit' });\n for (var i = 0; i < columns.length; i++) {\n columns[parseInt(i.toString(), 10)].visible = true;\n }\n this.setVisible(columns);\n };\n /**\n * Hides a column by column name.\n *\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 * @returns {void}\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, { module: 'edit' });\n for (var i = 0; i < columns.length; i++) {\n columns[parseInt(i.toString(), 10)].visible = false;\n }\n this.setVisible(columns);\n };\n ShowHide.prototype.getToggleFields = function (key) {\n var finalized = [];\n if (typeof key === 'string') {\n finalized = [key];\n }\n else {\n finalized = key;\n }\n return finalized;\n };\n ShowHide.prototype.getColumns = function (keys, getKeyBy) {\n var _this = this;\n var columns = iterateArrayOrObject(keys, function (key) {\n return iterateArrayOrObject(_this.parent.columnModel, function (item) {\n if (item[\"\" + getKeyBy] === key) {\n return item;\n }\n return undefined;\n })[0];\n });\n return columns;\n };\n ShowHide.prototype.batchActionPrevent = function (columns, changedStateColumns) {\n if (changedStateColumns === void 0) { changedStateColumns = []; }\n if (isActionPrevent(this.parent)) {\n this.colName = columns;\n this.changedCol = changedStateColumns;\n this.parent.closeEdit();\n return false;\n }\n return true;\n };\n ShowHide.prototype.resetColumnState = function () {\n if (this.isShowHide) {\n for (var i = 0; i < this.colName.length; i++) {\n this.colName[parseInt(i.toString(), 10)].visible = !this.colName[parseInt(i.toString(), 10)].visible;\n }\n }\n };\n /**\n * Shows or hides columns by given column collection.\n *\n * @private\n * @param {Column[]} columns - Specifies the columns.\n * @param {Column[]} changedStateColumns - specifies the changedStateColumns\n * @returns {void}\n */\n ShowHide.prototype.setVisible = function (columns, changedStateColumns) {\n var _this = this;\n if (changedStateColumns === void 0) { changedStateColumns = []; }\n this.isShowHide = true;\n if (!this.batchActionPrevent(columns, changedStateColumns)) {\n return;\n }\n changedStateColumns = (changedStateColumns.length > 0) ? changedStateColumns : columns;\n var args = {\n requestType: 'columnstate',\n cancel: false,\n columns: changedStateColumns\n };\n var cancel = 'cancel';\n if (this.parent.enableInfiniteScrolling && this.parent.allowGrouping\n && this.parent.groupModule.groupSettings.columns.length > 0) {\n this.parent.contentModule.visibleRows = [];\n }\n this.parent.trigger(events.actionBegin, args, function (showHideArgs) {\n var currentViewCols = _this.parent.getColumns();\n columns = isNullOrUndefined(columns) ? currentViewCols : columns;\n if (showHideArgs[\"\" + cancel]) {\n _this.parent.notify(events.resetColumns, { showHideArgs: showHideArgs });\n if (columns.length > 0) {\n columns[0].visible = true;\n }\n return;\n }\n if (isGroupAdaptive(_this.parent)) {\n _this.parent.contentModule.emptyVcRows();\n }\n if (_this.parent.allowSelection && _this.parent.getSelectedRecords().length &&\n !_this.parent.selectionSettings.persistSelection) {\n _this.parent.clearSelection();\n }\n if (_this.parent.enableColumnVirtualization) {\n var colsInCurrentView = columns.filter(function (col1) { return (currentViewCols.some(function (col2) { return col1.field === col2.field; })); });\n if (colsInCurrentView.length) {\n _this.parent.notify(events.columnVisibilityChanged, columns);\n }\n }\n else {\n if (_this.parent.isFrozenGrid() && columns.length) {\n _this.parent.notify(events.refreshFrozenPosition, { isModeChg: true });\n }\n _this.parent.notify(events.columnVisibilityChanged, columns);\n }\n var params = {\n requestType: 'columnstate',\n columns: changedStateColumns\n };\n _this.parent.trigger(events.actionComplete, params);\n if (_this.parent.columnQueryMode !== 'All') {\n _this.parent.refresh();\n }\n });\n if (this.parent.autoFit && !this.parent.groupSettings.columns.length) {\n this.parent.preventAdjustColumns();\n }\n };\n return ShowHide;\n}());\nexport { ShowHide };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { compile } from '@syncfusion/ej2-base';\nimport { getEnumValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { Property, Collection, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the Grid's aggregate column.\n */\nvar AggregateColumn = /** @class */ (function (_super) {\n __extends(AggregateColumn, _super);\n function AggregateColumn() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.templateFn = {};\n return _this;\n }\n /**\n * @param {Function} value - specifies the value\n * @returns {void}\n * @hidden\n */\n AggregateColumn.prototype.setFormatter = function (value) {\n this.formatFn = value;\n };\n /**\n * @returns {Function} returns the Function\n * @hidden\n */\n AggregateColumn.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /**\n * @param {Object} helper - specifies the helper\n * @returns {void}\n * @hidden\n */\n AggregateColumn.prototype.setTemplate = function (helper) {\n if (helper === void 0) { helper = {}; }\n if (this.footerTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.Summary)] = { fn: compile(this.footerTemplate, helper),\n property: 'footerTemplate' };\n }\n if (this.groupFooterTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.GroupSummary)] = { fn: compile(this.groupFooterTemplate, helper),\n property: 'groupFooterTemplate' };\n }\n if (this.groupCaptionTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.CaptionSummary)] = { fn: compile(this.groupCaptionTemplate, helper),\n property: 'groupCaptionTemplate' };\n }\n };\n /**\n * @param {CellType} type - specifies the cell type\n * @returns {Object} returns the object\n * @hidden\n */\n AggregateColumn.prototype.getTemplate = function (type) {\n return this.templateFn[getEnumValue(CellType, type)];\n };\n /**\n * @param {Object} prop - returns the Object\n * @returns {void}\n * @hidden\n */\n AggregateColumn.prototype.setPropertiesSilent = function (prop) {\n this.setProperties(prop, true);\n };\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"columnName\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"format\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"groupFooterTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"groupCaptionTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"customAggregate\", void 0);\n return AggregateColumn;\n}(ChildProperty));\nexport { AggregateColumn };\n/**\n * Configures the aggregate rows.\n */\nvar AggregateRow = /** @class */ (function (_super) {\n __extends(AggregateRow, _super);\n function AggregateRow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], AggregateColumn)\n ], AggregateRow.prototype, \"columns\", void 0);\n return AggregateRow;\n}(ChildProperty));\nexport { AggregateRow };\n","import { Browser, remove, EventHandler, isUndefined, closest, classList } from '@syncfusion/ej2-base';\nimport { parentsUntil, isGroupAdaptive } from '../base/util';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\n/**\n * The `Clipboard` module is used to handle clipboard copy action.\n */\nvar Clipboard = /** @class */ (function () {\n /**\n * Constructor for the Grid clipboard module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {ServiceLocator} serviceLocator - specifies the serviceLocator\n * @hidden\n */\n function Clipboard(parent, serviceLocator) {\n this.copyContent = '';\n this.isSelect = false;\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n /**\n * @returns {void}\n * @hidden\n */\n Clipboard.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\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 this.parent.on(events.onEmpty, this.initialEnd, this);\n EventHandler.add(this.parent.element, 'keydown', this.pasteHandler, this);\n };\n /**\n * @returns {void}\n * @hidden\n */\n Clipboard.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\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 this.parent.off(events.onEmpty, this.initialEnd);\n EventHandler.remove(this.parent.element, 'keydown', this.pasteHandler);\n };\n Clipboard.prototype.clickHandler = function (e) {\n var target = e.target;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n target = parentsUntil(target, 'e-rowcell');\n };\n Clipboard.prototype.pasteHandler = function (e) {\n var _this = this;\n var grid = this.parent;\n var isMacLike = /(Mac)/i.test(navigator.platform);\n var selectedRowCellIndexes = this.parent.getSelectedRowCellIndexes();\n if (e.keyCode === 67 && isMacLike && e.metaKey && !grid.isEdit) {\n this.copy();\n }\n if (selectedRowCellIndexes.length && e.keyCode === 86 && ((!isMacLike && e.ctrlKey) || (isMacLike && e.metaKey)) && !grid.isEdit) {\n var target = closest(document.activeElement, '.' + literals.rowCell);\n if (!this.clipBoardTextArea || !target || !grid.editSettings.allowEditing || grid.editSettings.mode !== 'Batch' ||\n grid.selectionSettings.mode !== 'Cell' || grid.selectionSettings.cellSelectionMode === 'Flow') {\n return;\n }\n this.activeElement = document.activeElement;\n var x_1 = window.scrollX;\n var y_1 = window.scrollY;\n this.clipBoardTextArea.focus();\n setTimeout(function () {\n _this.activeElement.focus();\n window.scrollTo(x_1, y_1);\n _this.paste(_this.clipBoardTextArea.value, selectedRowCellIndexes[0].rowIndex, selectedRowCellIndexes[0].cellIndexes[0]);\n }, isMacLike ? 100 : 10);\n }\n };\n /**\n * Paste data from clipboard to selected cells.\n *\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 * @returns {void}\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 var rows = data.split('\\n');\n var cols;\n for (var r = 0; r < rows.length; r++) {\n cols = rows[parseInt(r.toString(), 10)].split('\\t');\n cIdx = colIndex;\n if ((r === rows.length - 1 && rows[parseInt(r.toString(), 10)] === '') || isUndefined(grid.getRowByIndex(rIdx))) {\n cIdx++;\n break;\n }\n for (var c = 0; c < cols.length; c++) {\n isAvail = grid.getCellFromIndex(rIdx, cIdx);\n if (!isAvail) {\n cIdx++;\n break;\n }\n col = grid.getColumnByIndex(cIdx);\n value = col.getParser() ? col.getParser()(cols[parseInt(c.toString(), 10)]) : cols[parseInt(c.toString(), 10)];\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 if (!args.cancel) {\n if (grid.editModule) {\n if (col.type === 'number') {\n this.parent.editModule.updateCell(rIdx, col.field, parseFloat(args.data));\n }\n else {\n grid.editModule.updateCell(rIdx, col.field, args.data);\n }\n }\n }\n }\n cIdx++;\n }\n rIdx++;\n }\n grid.selectionModule.selectCellsByRange({ rowIndex: rowIndex, cellIndex: colIndex }, { rowIndex: rIdx - 1, cellIndex: cIdx - 1 });\n var cell = this.parent.getCellFromIndex(rIdx - 1, cIdx - 1);\n if (cell) {\n classList(cell, ['e-focus', 'e-focused'], []);\n }\n this.clipBoardTextArea.value = '';\n };\n Clipboard.prototype.initialEnd = function () {\n this.l10n = this.serviceLocator.getService('localization');\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: { tabindex: '-1', 'aria-label': this.l10n.getConstant('ClipBoard') }\n });\n this.parent.element.appendChild(this.clipBoardTextArea);\n };\n Clipboard.prototype.keyDownHandler = function (e) {\n if (e.action === 'ctrlPlusC') {\n this.copy();\n }\n else if (e.action === 'ctrlShiftPlusH') {\n this.copy(true);\n }\n };\n Clipboard.prototype.setCopyData = function (withHeader) {\n if (window.getSelection().toString() === '') {\n this.clipBoardTextArea.value = this.copyContent = '';\n var rows = this.parent.getDataRows();\n if (this.parent.selectionSettings.mode !== 'Cell') {\n var selectedIndexes = this.parent.getSelectedRowIndexes().sort(function (a, b) { return a - b; });\n if (withHeader) {\n var headerTextArray = [];\n for (var i = 0; i < this.parent.getVisibleColumns().length; i++) {\n headerTextArray[parseInt(i.toString(), 10)] = this.parent\n .getVisibleColumns()[parseInt(i.toString(), 10)].headerText;\n }\n this.getCopyData(headerTextArray, false, '\\t', withHeader);\n this.copyContent += '\\n';\n }\n for (var i = 0; i < selectedIndexes.length; i++) {\n if (i > 0) {\n this.copyContent += '\\n';\n }\n var leftCols = [];\n var idx = selectedIndexes[parseInt(i.toString(), 10)];\n if (!isGroupAdaptive(this.parent) && (this.parent.enableVirtualization ||\n (this.parent.enableInfiniteScrolling && this.parent.infiniteScrollSettings.enableCache) ||\n (this.parent.groupSettings.columns.length && this.parent.groupSettings.enableLazyLoading))) {\n idx = rows.map(function (m) { return m.getAttribute('data-rowindex'); }).indexOf(selectedIndexes[parseInt(i.toString(), 10)].toString());\n }\n leftCols.push.apply(leftCols, [].slice.call(rows[parseInt(idx.toString(), 10)].querySelectorAll('.e-rowcell:not(.e-hide)')));\n this.getCopyData(leftCols, false, '\\t', withHeader);\n }\n }\n else {\n var obj = this.checkBoxSelection();\n if (obj.status) {\n if (withHeader) {\n var headers = [];\n for (var i = 0; i < obj.colIndexes.length; i++) {\n var colHeader = this.parent.getColumnHeaderByIndex(obj.colIndexes[parseInt(i.toString(), 10)]);\n if (!colHeader.classList.contains('e-hide')) {\n headers.push(colHeader);\n }\n }\n this.getCopyData(headers, false, '\\t', withHeader);\n this.copyContent += '\\n';\n }\n for (var i = 0; i < obj.rowIndexes.length; i++) {\n if (i > 0) {\n this.copyContent += '\\n';\n }\n var cells = [].slice.call(rows[obj.rowIndexes[parseInt(i.toString(), 10)]].\n querySelectorAll('.e-cellselectionbackground:not(.e-hide)'));\n this.getCopyData(cells, false, '\\t', withHeader);\n }\n }\n else {\n this.getCopyData([].slice.call(this.parent.element.getElementsByClassName('e-cellselectionbackground')), true, '\\n', withHeader);\n }\n }\n var args = {\n data: this.copyContent,\n cancel: false\n };\n this.parent.trigger(events.beforeCopy, args);\n if (args.cancel) {\n return;\n }\n this.clipBoardTextArea.value = this.copyContent = args.data;\n if (!Browser.userAgent.match(/ipad|ipod|iphone/i)) {\n this.clipBoardTextArea.select();\n }\n else {\n this.clipBoardTextArea.setSelectionRange(0, this.clipBoardTextArea.value.length);\n }\n this.isSelect = true;\n }\n };\n Clipboard.prototype.getCopyData = function (cells, isCell, splitKey, withHeader) {\n var isElement = typeof cells[0] !== 'string';\n for (var j = 0; j < cells.length; j++) {\n if (withHeader && isCell) {\n var colIdx = parseInt(cells[parseInt(j.toString(), 10)].getAttribute(literals.dataColIndex), 10);\n this.copyContent += this.parent.getColumns()[parseInt(colIdx.toString(), 10)].headerText + '\\n';\n }\n if (isElement) {\n if (!cells[parseInt(j.toString(), 10)].classList.contains('e-hide')) {\n this.copyContent += cells[parseInt(j.toString(), 10)].innerText;\n }\n }\n else {\n this.copyContent += cells[parseInt(j.toString(), 10)];\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 *\n * @returns {void}\n * @param {boolean} withHeader - Specifies whether the column header data need to be copied or not.\n */\n Clipboard.prototype.copy = function (withHeader) {\n if (document.queryCommandSupported('copy') && this.clipBoardTextArea) {\n this.setCopyData(withHeader);\n document.execCommand('copy');\n this.clipBoardTextArea.blur();\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 *\n * @returns {string} returns the module name\n * @private\n */\n Clipboard.prototype.getModuleName = function () {\n return 'clipboard';\n };\n /**\n * To destroy the clipboard\n *\n * @returns {void}\n * @hidden\n */\n Clipboard.prototype.destroy = function () {\n this.removeEventListener();\n if (this.clipBoardTextArea) {\n remove(this.clipBoardTextArea);\n }\n };\n Clipboard.prototype.checkBoxSelection = function () {\n var gridObj = this.parent;\n var obj = { status: false };\n if (gridObj.selectionSettings.mode === 'Cell') {\n var rowCellIndxes = gridObj.getSelectedRowCellIndexes();\n var str = void 0;\n var rowIndexes = [];\n var i = void 0;\n for (i = 0; i < rowCellIndxes.length; i++) {\n if (rowCellIndxes[parseInt(i.toString(), 10)].cellIndexes.length) {\n rowIndexes.push(rowCellIndxes[parseInt(i.toString(), 10)].rowIndex);\n }\n if (rowCellIndxes[parseInt(i.toString(), 10)].cellIndexes.length) {\n if (!str) {\n str = JSON.stringify(rowCellIndxes[parseInt(i.toString(), 10)].cellIndexes.sort());\n }\n if (str !== JSON.stringify(rowCellIndxes[parseInt(i.toString(), 10)].cellIndexes.sort())) {\n break;\n }\n }\n }\n rowIndexes.sort(function (a, b) { return a - b; });\n if (i === rowCellIndxes.length) {\n obj = { status: true, rowIndexes: rowIndexes, colIndexes: rowCellIndxes[0].cellIndexes };\n }\n }\n return obj;\n };\n return Clipboard;\n}());\nexport { Clipboard };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { isNullOrUndefined, setValue, getValue, defaultCurrencyCode } from '@syncfusion/ej2-base';\nimport { Component, ChildProperty, Browser, closest, extend } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, append, remove, 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, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { createSpinner, hideSpinner, showSpinner, Tooltip } from '@syncfusion/ej2-popups';\nimport { iterateArrayOrObject, prepareColumns, parentsUntil, wrap, templateCompiler, isGroupAdaptive, refreshForeignData, getScrollBarWidth } from './util';\nimport { getRowHeight, setColumnIndex, Global, ispercentageWidth, getNumberFormat, getTransformValues } from './util';\nimport { setRowElements, resetRowIndex, compareChanges, getCellByColAndRowIndex, performComplexDataOperation } from './util';\nimport * as events from '../base/constant';\nimport { Render } from '../renderer/render';\nimport { Column } from '../models/column';\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 { RowModelGenerator } from '../services/row-model-generator';\nimport { SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport * as literals from '../base/string-literals';\nimport { HeaderCellRenderer } from '../renderer/header-cell-renderer';\n/**\n * Represents the field name and direction of sort column.\n */\nvar SortDescriptor = /** @class */ (function (_super) {\n __extends(SortDescriptor, _super);\n function SortDescriptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"direction\", void 0);\n __decorate([\n Property(false)\n ], SortDescriptor.prototype, \"isFromGroup\", void 0);\n return SortDescriptor;\n}(ChildProperty));\nexport { SortDescriptor };\n/**\n * Configures the sorting behavior of Grid.\n */\nvar SortSettings = /** @class */ (function (_super) {\n __extends(SortSettings, _super);\n function SortSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], SortDescriptor)\n ], SortSettings.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], SortSettings.prototype, \"allowUnsort\", void 0);\n return SortSettings;\n}(ChildProperty));\nexport { SortSettings };\n/**\n * Represents the predicate for the filter column.\n */\nvar Predicate = /** @class */ (function (_super) {\n __extends(Predicate, _super);\n function Predicate() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Predicate.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"value\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"matchCase\", void 0);\n __decorate([\n Property(false)\n ], Predicate.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"predicate\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualFilterValue\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualOperator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ejpredicate\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"uid\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"isForeignKey\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"condition\", void 0);\n return Predicate;\n}(ChildProperty));\nexport { Predicate };\n/**\n * Configures the infinite scroll behavior of Grid.\n */\nvar InfiniteScrollSettings = /** @class */ (function (_super) {\n __extends(InfiniteScrollSettings, _super);\n function InfiniteScrollSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], InfiniteScrollSettings.prototype, \"enableCache\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"maxBlocks\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"initialBlocks\", void 0);\n return InfiniteScrollSettings;\n}(ChildProperty));\nexport { InfiniteScrollSettings };\n/**\n * Configures the filtering behavior of the Grid.\n */\nvar FilterSettings = /** @class */ (function (_super) {\n __extends(FilterSettings, _super);\n function FilterSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], Predicate)\n ], FilterSettings.prototype, \"columns\", void 0);\n __decorate([\n Property('FilterBar')\n ], FilterSettings.prototype, \"type\", void 0);\n __decorate([\n Property('OnEnter')\n ], FilterSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], FilterSettings.prototype, \"showFilterBarStatus\", void 0);\n __decorate([\n Property(1500)\n ], FilterSettings.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"operators\", void 0);\n __decorate([\n Property(false)\n ], FilterSettings.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property(false)\n ], FilterSettings.prototype, \"enableInfiniteScrolling\", void 0);\n __decorate([\n Property(50)\n ], FilterSettings.prototype, \"itemsCount\", void 0);\n __decorate([\n Property('Shimmer')\n ], FilterSettings.prototype, \"loadingIndicator\", void 0);\n __decorate([\n Property(false)\n ], FilterSettings.prototype, \"enableCaseSensitivity\", void 0);\n __decorate([\n Property(false)\n ], FilterSettings.prototype, \"showFilterBarOperator\", void 0);\n return FilterSettings;\n}(ChildProperty));\nexport { FilterSettings };\n/**\n * Configures the selection behavior of the Grid.\n */\nvar SelectionSettings = /** @class */ (function (_super) {\n __extends(SelectionSettings, _super);\n function SelectionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Row')\n ], SelectionSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Flow')\n ], SelectionSettings.prototype, \"cellSelectionMode\", void 0);\n __decorate([\n Property('Single')\n ], SelectionSettings.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"checkboxOnly\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"persistSelection\", void 0);\n __decorate([\n Property('Default')\n ], SelectionSettings.prototype, \"checkboxMode\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"enableSimpleMultiRowSelection\", void 0);\n __decorate([\n Property(true)\n ], SelectionSettings.prototype, \"enableToggle\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"allowColumnSelection\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\n/**\n * Configures the search behavior of the Grid.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property([])\n ], SearchSettings.prototype, \"fields\", void 0);\n __decorate([\n Property('')\n ], SearchSettings.prototype, \"key\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"operator\", void 0);\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(false)\n ], SearchSettings.prototype, \"ignoreAccent\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n/**\n * Configures the row drop settings of the Grid.\n */\nvar RowDropSettings = /** @class */ (function (_super) {\n __extends(RowDropSettings, _super);\n function RowDropSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], RowDropSettings.prototype, \"targetID\", void 0);\n return RowDropSettings;\n}(ChildProperty));\nexport { RowDropSettings };\n/**\n * Configures the text wrap settings of the Grid.\n */\nvar TextWrapSettings = /** @class */ (function (_super) {\n __extends(TextWrapSettings, _super);\n function TextWrapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Both')\n ], TextWrapSettings.prototype, \"wrapMode\", void 0);\n return TextWrapSettings;\n}(ChildProperty));\nexport { TextWrapSettings };\n/**\n * Configures the resize behavior of the Grid.\n */\nvar ResizeSettings = /** @class */ (function (_super) {\n __extends(ResizeSettings, _super);\n function ResizeSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Normal')\n ], ResizeSettings.prototype, \"mode\", void 0);\n return ResizeSettings;\n}(ChildProperty));\nexport { ResizeSettings };\n/**\n * Configures the group behavior of the Grid.\n */\nvar GroupSettings = /** @class */ (function (_super) {\n __extends(GroupSettings, _super);\n function GroupSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], GroupSettings.prototype, \"showDropArea\", void 0);\n __decorate([\n Property(false)\n ], GroupSettings.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(false)\n ], GroupSettings.prototype, \"showToggleButton\", void 0);\n __decorate([\n Property(false)\n ], GroupSettings.prototype, \"showGroupedColumn\", void 0);\n __decorate([\n Property(true)\n ], GroupSettings.prototype, \"showUngroupButton\", void 0);\n __decorate([\n Property(false)\n ], GroupSettings.prototype, \"disablePageWiseAggregates\", void 0);\n __decorate([\n Property([])\n ], GroupSettings.prototype, \"columns\", void 0);\n __decorate([\n Property()\n ], GroupSettings.prototype, \"captionTemplate\", void 0);\n __decorate([\n Property(false)\n ], GroupSettings.prototype, \"enableLazyLoading\", void 0);\n return GroupSettings;\n}(ChildProperty));\nexport { GroupSettings };\n/**\n * Configures the edit behavior of the Grid.\n */\nvar EditSettings = /** @class */ (function (_super) {\n __extends(EditSettings, _super);\n function EditSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowAdding\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowDeleting\", void 0);\n __decorate([\n Property('Normal')\n ], EditSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"allowEditOnDblClick\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"showConfirmDialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"showDeleteConfirmDialog\", void 0);\n __decorate([\n Property()\n ], EditSettings.prototype, \"template\", void 0);\n __decorate([\n Property()\n ], EditSettings.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property()\n ], EditSettings.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property('Top')\n ], EditSettings.prototype, \"newRowPosition\", void 0);\n __decorate([\n Property({})\n ], EditSettings.prototype, \"dialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowNextRowEdit\", void 0);\n return EditSettings;\n}(ChildProperty));\nexport { EditSettings };\n/**\n * Configures the Loading Indicator of the Grid.\n */\nvar LoadingIndicator = /** @class */ (function (_super) {\n __extends(LoadingIndicator, _super);\n function LoadingIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Spinner')\n ], LoadingIndicator.prototype, \"indicatorType\", void 0);\n return LoadingIndicator;\n}(ChildProperty));\nexport { LoadingIndicator };\n/**\n * Represents the Grid component.\n * ```html\n *
\n * \n * ```\n */\nvar Grid = /** @class */ (function (_super) {\n __extends(Grid, _super);\n /**\n * Constructor for creating the component\n *\n * @param {GridModel} options - specifies the options\n * @param {string | HTMLElement} element - specifies the element\n * @hidden\n */\n function Grid(options, element) {\n var _this_1 = _super.call(this, options, element) || this;\n _this_1.isPreventScrollEvent = false;\n _this_1.inViewIndexes = [];\n _this_1.keyA = false;\n _this_1.frozenRightCount = 0;\n _this_1.freezeColumnRefresh = true;\n _this_1.rightcount = 0;\n _this_1.frozenLeftCount = 0;\n _this_1.leftcount = 0;\n _this_1.tablesCount = 1;\n _this_1.movableCount = 0;\n _this_1.movablecount = 0;\n _this_1.fixedcount = 0;\n _this_1.fixedCount = 0;\n _this_1.visibleFrozenLeft = 0;\n _this_1.visibleFrozenFixed = 0;\n _this_1.isPreparedFrozenColumns = false;\n _this_1.visibleFrozenRight = 0;\n _this_1.visibleMovable = 0;\n _this_1.frozenLeftColumns = [];\n _this_1.frozenRightColumns = [];\n _this_1.movableColumns = [];\n _this_1.fixedColumns = [];\n _this_1.stackedLeft = [];\n _this_1.stackedRight = [];\n _this_1.stackedFixed = [];\n _this_1.stackedMovable = [];\n _this_1.stackedarrayLeft = [];\n _this_1.stackedarrayRight = [];\n _this_1.stackedarrayFixed = [];\n _this_1.stackedarrayMovable = [];\n _this_1.media = {};\n /** @hidden */\n _this_1.tableIndex = 0;\n _this_1.componentRefresh = Component.prototype.refresh;\n _this_1.isChangeDataSourceCall = false;\n _this_1.mergedColumns = false;\n /** @hidden */\n _this_1.isVirtualAdaptive = false;\n /** @hidden */\n /**\n * * If `requireTemplateRef` is set to false in the load event, then the template element can't be accessed in grid queryCellInfo, and rowDataBound events.\n * * By default, React's grid queryCellInfo and rowDataBound events allow access to the template element.\n * * Avoid accessing the template elements in the grid queryCellInfo and rowDataBound events to improve rendering performance by setting this value as false.\n *\n * @default true\n */\n _this_1.requireTemplateRef = true;\n /** @hidden */\n _this_1.vRows = [];\n /** @hidden */\n _this_1.vcRows = [];\n /** @hidden */\n _this_1.vGroupOffsets = {};\n /** @hidden */\n _this_1.rowUid = 0;\n /** @hidden */\n _this_1.translateX = 0;\n /** @hidden */\n _this_1.isManualRefresh = false;\n /** @hidden */\n _this_1.isAutoFitColumns = false;\n /** @hidden */\n _this_1.enableDeepCompare = false;\n /** @hidden */\n _this_1.totalDataRecordsCount = 0;\n /** @hidden */\n _this_1.disableSelectedRecords = [];\n /** @hidden */\n _this_1.partialSelectedRecords = [];\n /** @hidden */\n _this_1.islazyloadRequest = false;\n /** @hidden */\n _this_1.lockcolPositionCount = 0;\n /** @hidden */\n _this_1.prevPageMoving = false;\n /** @hidden */\n _this_1.pageTemplateChange = false;\n /** @hidden */\n _this_1.isAutoGen = false;\n /** @hidden */\n _this_1.isAutoGenerateColumns = false;\n _this_1.mediaBindInstance = {};\n /** @hidden */\n _this_1.commandDelIndex = undefined;\n /** @hidden */\n _this_1.asyncTimeOut = 50;\n /** @hidden */\n _this_1.isExportGrid = false;\n // enable/disable logger for MVC & Core\n _this_1.enableLogger = true;\n _this_1.needsID = true;\n Grid_1.Inject(Selection);\n setValue('mergePersistData', _this_1.mergePersistGridData, _this_1);\n return _this_1;\n }\n Grid_1 = Grid;\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} returns the persist data\n */\n Grid.prototype.getPersistData = function () {\n var keyEntity = ['pageSettings', 'sortSettings',\n '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',\n 'disablePageWiseAggregates', 'hideCaptionCount'],\n searchSettings: ['fields', 'operator', 'ignoreCase'],\n sortSettings: [], columns: [], selectedRowIndex: [], scrollPosition: []\n };\n for (var i = 0; i < keyEntity.length; i++) {\n var currentObject = this[keyEntity[parseInt(i.toString(), 10)]];\n for (var _i = 0, _a = ignoreOnPersist[keyEntity[parseInt(i.toString(), 10)]]; _i < _a.length; _i++) {\n var val = _a[_i];\n delete currentObject[\"\" + val];\n }\n }\n var temp = this.pageSettings.template;\n var settings = Object.assign({ template: undefined }, this.pageSettings);\n this.setProperties({ pageSettings: settings }, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular) {\n delete this.groupSettings['properties']['captionTemplate'];\n }\n this.pageTemplateChange = !isNullOrUndefined(this.pagerTemplate);\n var persistData = this.addOnPersist(keyEntity);\n settings.template = temp;\n this.setProperties({ pageSettings: settings }, true);\n return persistData;\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} Returns the module Declaration\n * @hidden\n */\n Grid.prototype.requiredModules = function () {\n this.setFrozenCount();\n this.enableInfiniteAggrgate();\n var modules = [];\n if (this.isDestroyed) {\n return modules;\n }\n if (this.allowFiltering) {\n modules.push({\n member: 'filter',\n args: [this, this.filterSettings, this.serviceLocator]\n });\n }\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport',\n args: [this, this.serviceLocator]\n });\n }\n if (this.allowPdfExport) {\n modules.push({\n member: 'PdfExport',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this, this.sortSettings, this.sortedColumns, this.serviceLocator]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this, this.selectionSettings, this.serviceLocator]\n });\n }\n modules.push({\n member: 'resize',\n args: [this]\n });\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowRowDragAndDrop) {\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n if (this.allowGrouping) {\n modules.push({\n member: 'group',\n args: [this, this.groupSettings, this.sortedColumns, this.serviceLocator]\n });\n }\n if (this.aggregates.length) {\n modules.push({ member: 'aggregate', args: [this, this.serviceLocator] });\n }\n if (this.isDetail()) {\n modules.push({\n member: 'detailRow',\n args: [this, this.serviceLocator]\n });\n }\n if (this.toolbar || this.toolbarTemplate) {\n modules.push({\n member: 'toolbar',\n args: [this, this.serviceLocator]\n });\n }\n if (this.enableVirtualization || this.enableColumnVirtualization) {\n modules.push({\n member: 'virtualscroll',\n args: [this, this.serviceLocator]\n });\n }\n if (this.getFrozenColumns() || this.frozenRows || this.frozenRightCount || this.frozenLeftCount) {\n modules.push({ member: 'freeze', args: [this, this.serviceLocator] });\n }\n if (this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this, this.serviceLocator]\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 this.extendRequiredModules(modules);\n return modules;\n };\n Grid.prototype.extendRequiredModules = function (modules) {\n if (this.enableInfiniteScrolling) {\n modules.push({\n member: 'infiniteScroll',\n args: [this, this.serviceLocator]\n });\n }\n if (this.groupSettings.enableLazyLoading) {\n modules.push({\n member: 'lazyLoadGroup',\n args: [this, this.serviceLocator]\n });\n }\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this, this.serviceLocator]\n });\n }\n if (this.showColumnMenu) {\n modules.push({\n member: 'columnMenu',\n args: [this, this.serviceLocator]\n });\n }\n if (this.showColumnChooser) {\n modules.push({\n member: 'columnChooser',\n args: [this, this.serviceLocator]\n });\n }\n if (this.isForeignKeyEnabled(this.columns)) {\n modules.push({ member: 'foreignKey', args: [this, this.serviceLocator] });\n }\n if (this.enableLogger) {\n modules.push({ member: 'logger', args: [this] });\n }\n };\n /**\n * For internal use only - Initialize the event handler;\n *\n * @returns {void}\n * @private\n */\n Grid.prototype.preRender = function () {\n this.serviceLocator = new ServiceLocator;\n this.initProperties();\n this.initializeServices();\n };\n Grid.prototype.initProperties = function () {\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 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', endsWith: 'endswith', equal: 'equal', greaterThan: 'greaterthan', greaterThanOrEqual: 'greaterthanorequal',\n lessThan: 'lessthan', lessThanOrEqual: 'lessthanorequal', notEqual: 'notequal', startsWith: 'startswith', wildCard: 'wildcard',\n isNull: 'isnull', notNull: 'notnull', like: 'like'\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 UnGroupButton: '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 ColumnMenu: 'Column Menu',\n SearchColumns: 'search columns',\n Matchs: 'No matches found',\n FilterButton: 'Filter',\n ClearButton: 'Clear',\n StartsWith: 'Starts With',\n NotStartsWith: 'Does Not Start With',\n Like: 'Like',\n EndsWith: 'Ends With',\n NotEndsWith: 'Does Not End With',\n Contains: 'Contains',\n NotContains: 'Does Not Contain',\n IsNull: 'Null',\n NotNull: 'Not Null',\n IsEmpty: 'Empty',\n IsNotEmpty: 'Not Empty',\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 GroupButton: 'Group button',\n UnGroupAria: 'ungroup button',\n GroupSeperator: 'Separator for the grouped columns',\n UnGroupIcon: 'ungroup the grouped column ',\n GroupedSortIcon: 'sort the grouped column ',\n GroupedDrag: 'Drag the grouped column',\n GroupCaption: ' is groupcaption cell',\n CheckBoxLabel: 'checkbox',\n SelectAllCheckbox: 'Select all checkbox',\n SelectRow: 'Select row',\n autoFitAll: 'Autofit all columns',\n autoFit: 'Autofit 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 AddCurrentSelection: 'Add current selection to filter',\n Blanks: 'Blanks',\n FilterTrue: 'True',\n FilterFalse: 'False',\n NoResult: 'No matches found',\n ClearFilter: 'Clear Filter',\n Clear: 'Clear',\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 ToolbarMenuDialogARIA: 'Toolbar menu dialog',\n FilterMenuDialogARIA: 'Filter menu',\n ExcelFilterDialogARIA: 'Excel filter',\n CheckBoxFilterDialogARIA: 'Checkbox filter',\n DialogEditARIA: 'Edit dialog',\n ColumnMenuDialogARIA: 'Column menu dialog',\n CustomFilterDialogARIA: 'Customer filter dialog',\n SortAtoZ: 'Sort A to Z',\n SortZtoA: 'Sort Z to A',\n SortByOldest: 'Sort by Oldest',\n SortByNewest: 'Sort by Newest',\n SortSmallestToLargest: 'Sort Smallest to Largest',\n SortLargestToSmallest: 'Sort Largest to Smallest',\n Sort: 'Sort',\n FilterDescription: 'Press Alt Down to open filter Menu',\n SortDescription: 'Press Enter to sort',\n ColumnMenuDescription: 'Press Alt Down to open Column Menu',\n GroupDescription: 'Press Ctrl space to group',\n ColumnHeader: ' column header ',\n TemplateCell: ' is template cell',\n CommandColumnAria: 'is Command column column header ',\n DialogEdit: 'Dialog edit',\n ClipBoard: 'clipboard',\n AscendingText: 'Ascending',\n DescendingText: 'Descending',\n NoneText: 'None',\n Expanded: 'Expanded',\n Collapsed: 'Collapsed'\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 };\n /**\n * For internal use only - To Initialize the component rendering.\n *\n * @returns {void}\n * @private\n */\n Grid.prototype.render = function () {\n this.log(['module_missing', 'promise_enabled', 'locale_missing', 'check_datasource_columns']);\n this.ariaService.setOptions(this.element, { role: 'grid' });\n createSpinner({ target: this.element, cssClass: this.cssClass ? this.cssClass : null }, 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 if ((this.getDataModule().dataManager.dataSource.offline === true || this.getDataModule().dataManager.dataSource.url === undefined) &&\n !(!isNullOrUndefined(this.dataSource) && this.dataSource.result)) {\n this.isVirtualAdaptive = true;\n }\n if (this.isReact) {\n var args = { requireTemplateRef: this.requireTemplateRef };\n this.trigger(events.load, args);\n if (!args.requireTemplateRef) {\n this.requireTemplateRef = args.requireTemplateRef;\n }\n }\n else {\n this.trigger(events.load);\n }\n prepareColumns(this.columns, this.enableColumnVirtualization, this);\n if (this.enableColumnVirtualization && this.isChangeDataSourceCall && this.columnModel) {\n this.columnModel = [];\n this.updateColumnModel(this.columns);\n }\n this.isPreparedFrozenColumns = true;\n if (this.enablePersistence) {\n this.notify(events.columnsPrepared, {});\n }\n this.getMediaColumns();\n setColumnIndex(this.columns);\n if (this.isFrozenGrid() && !this.mergedColumns) {\n this.setInitialFrozenColumnIndex(this.columns);\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 if (this.loadingIndicator.indicatorType === 'Spinner') {\n this.showSpinner();\n }\n this.notify(events.initialEnd, {});\n if (this.loadingIndicator.indicatorType === 'Shimmer') {\n this.refreshMaskRow();\n }\n if (this.refreshing) {\n this.trigger('created');\n }\n };\n Grid.prototype.setInitialFrozenColumnIndex = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n var column = columns[parseInt(i.toString(), 10)];\n column[\"\" + literals.initialFrozenColumnIndex] = column.index;\n if (column.columns) {\n this.setInitialFrozenColumnIndex(column.columns);\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 * @returns {void}\n */\n Grid.prototype.showSpinner = function () {\n if (!this.isExportGrid) {\n showSpinner(this.element);\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 * @returns {void}\n */\n Grid.prototype.hideSpinner = function () {\n if (!this.isExportGrid) {\n hideSpinner(this.element);\n }\n };\n Grid.prototype.showMaskRow = function (axisDirection, dialogElement) {\n if (isNullOrUndefined(this.headerModule) || isNullOrUndefined(this.contentModule)) {\n return;\n }\n var gridHeader = this.getHeaderContent().firstChild;\n var gridContent = this.getContent().firstChild;\n var gridFooter = this.getFooterContent();\n if (dialogElement) {\n var dialogHolder = dialogElement.querySelector('.e-checkboxlist');\n var maskRowCount = Math.floor(dialogHolder.getBoundingClientRect().height / this.getRowHeight());\n var maskTemplate = '
'\n + '
'\n + this.getShimmerTemplate() + this.getShimmerTemplate() + '
';\n dialogHolder.innerHTML = '';\n for (var i = 0; i < maskRowCount; i++) {\n dialogHolder.innerHTML += maskTemplate;\n var maskSpan = [].slice.call(dialogHolder\n .querySelectorAll('.e-mask:not(.e-mask-checkbox-filter-intent):not(.e-mask-checkbox-filter-span-intent)'));\n maskSpan[0].classList.add('e-mask-checkbox-filter-intent');\n maskSpan[1].classList.add('e-mask-checkbox-filter-span-intent');\n }\n return;\n }\n if ((!this.enableRtl && !this.getHeaderContent().style.paddingRight)\n || (this.enableRtl && !this.getHeaderContent().style.paddingLeft)) {\n gridContent.style.overflowY = 'hidden';\n }\n if (!this.isInitialLoad && !this.getColumns().length) {\n var contentHeight = gridContent.getBoundingClientRect().height;\n var maskTableHeight = contentHeight === 0 ? this.allowPaging ? this.pageSettings.pageSize * this.getRowHeight()\n : window.innerHeight : contentHeight;\n var contentRowCount = Math.ceil(maskTableHeight / this.getRowHeight());\n if (this.rowRenderingMode !== 'Vertical') {\n this.headerMaskTable = this.createEmptyMaskTable(gridHeader, 1);\n }\n this.contentMaskTable = this.createEmptyMaskTable(gridContent, contentRowCount);\n return;\n }\n this.maskRowContentScroll = (this.enableVirtualization || this.enableColumnVirtualization) && axisDirection ? true : false;\n if (!this.contentMaskTable) {\n var content = gridContent;\n if (this.enableVirtualization || this.enableColumnVirtualization) {\n content = content.querySelector('.e-virtualtable');\n }\n if (!isNullOrUndefined(content.querySelector('tbody'))) {\n this.contentMaskTable = this.createMaskTable(content, this.getContentMaskColumns(), axisDirection);\n }\n }\n if (!this.headerMaskTable && (this.isFrozenGrid() || (this.enableColumnVirtualization && axisDirection === 'X'))) {\n var content = gridHeader;\n if (this.enableColumnVirtualization && axisDirection === 'X') {\n content = content.querySelector('.e-virtualtable');\n }\n this.headerMaskTable = this.createMaskTable(content, this.getContentMaskColumns(), axisDirection);\n }\n if (gridFooter && gridFooter.querySelector('.e-summaryrow')) {\n var gridFooterContent = gridFooter.firstChild;\n if (!this.footerContentMaskTable) {\n var footerContent = gridFooterContent;\n this.footerContentMaskTable = this.createMaskTable(footerContent);\n }\n }\n if (!(this.enableVirtualization && axisDirection)) {\n EventHandler.add(gridContent, 'scroll', this.translateMaskRow, this);\n }\n };\n Grid.prototype.getContentMaskColumns = function () {\n return this.getColumns();\n };\n Grid.prototype.createEmptyMaskTable = function (maskElement, rowCount) {\n var table = this.createElement('table', { className: 'e-table e-masked-table' });\n var tbody = this.createElement('tbody', { className: 'e-masked-tbody' });\n var row = this.createElement('tr', { className: 'e-masked-row e-row', attrs: {\n style: 'height: ' + this.getRowHeight() + 'px;'\n } });\n var cell = this.createElement('td', { className: 'e-masked-cell e-rowcell' });\n cell.innerHTML = this.getShimmerTemplate();\n row.appendChild(cell);\n for (var i = 0; i < rowCount; i++) {\n tbody.appendChild(row.cloneNode(true));\n }\n table.appendChild(tbody);\n maskElement.appendChild(table);\n return table;\n };\n Grid.prototype.createMaskTable = function (element, columns, axisDirection) {\n var parentElement = element;\n var header = closest(parentElement, '.e-gridheader') ? true : false;\n var content = closest(parentElement, '.e-gridcontent') ? true : false;\n var footer = closest(parentElement, '.e-gridfooter') ? true : false;\n var gridContent = this.getContent().firstChild;\n var gridContentScrollHeight = gridContent.scrollHeight;\n var table = parentElement.querySelector('table');\n var maskTable = table.cloneNode();\n maskTable.removeAttribute('role');\n maskTable.removeAttribute('id');\n maskTable.style.position = 'absolute';\n maskTable.style.zIndex = '5';\n maskTable.style.width = table.getBoundingClientRect().width + 'px';\n if (header && !(this.enableColumnVirtualization && axisDirection === 'X')) {\n maskTable.style.transform = 'translate(0px,'\n + table.querySelector('thead').getBoundingClientRect().height + 'px)';\n }\n maskTable.setAttribute('class', 'e-table e-masked-table');\n var maskColgroup = table.querySelector('colgroup').cloneNode(true);\n maskColgroup.removeAttribute('id');\n maskColgroup.setAttribute('class', 'e-masked-colgroup');\n maskTable.appendChild(maskColgroup);\n if (header && this.enableColumnVirtualization && axisDirection === 'X') {\n var row = this.createMaskRow(maskColgroup, columns);\n if (this.isFrozenGrid()) {\n var frzTd = [].slice.call(row.querySelectorAll('.e-rowcell'));\n for (var i = 0; i < frzTd.length; i++) {\n if (i < this.frozenLeftCount) {\n if (this.frozenLeftCount - 1 === i) {\n frzTd[parseInt(i.toString(), 10)].classList.add('e-freezeleftborder');\n }\n frzTd[parseInt(i.toString(), 10)].classList.add('e-leftfreeze');\n frzTd[parseInt(i.toString(), 10)].setAttribute('data-colindex', i.toString());\n frzTd[parseInt(i.toString(), 10)].style.left = (columns[parseInt(i.toString(), 10)].valueX -\n this.translateX) + 'px';\n }\n else if ((frzTd.length - this.frozenRightCount) <= i && columns[parseInt(i.toString(), 10)]) {\n if ((frzTd.length - this.frozenRightCount) === i) {\n frzTd[parseInt(i.toString(), 10)].classList.add('e-freezerightborder');\n }\n frzTd[parseInt(i.toString(), 10)].classList.add('e-rightfreeze');\n frzTd[parseInt(i.toString(), 10)].setAttribute('data-colindex', i.toString());\n frzTd[parseInt(i.toString(), 10)].style.right = (this.translateX +\n columns[parseInt(i.toString(), 10)].valueX) + 'px';\n }\n }\n }\n var thead = table.querySelector('thead');\n var rows = [].slice.call(thead.querySelectorAll('tr'));\n var maskTHead = thead.cloneNode();\n maskTHead.removeAttribute('role');\n maskTHead.setAttribute('class', 'e-masked-thead');\n var rowCount = rows.length;\n for (var i = 0; i < rowCount; i++) {\n maskTHead.appendChild(row.cloneNode(true));\n maskTHead.childNodes[parseInt(i.toString(), 10)].style\n .height = rows[parseInt(i.toString(), 10)].getBoundingClientRect().height + 'px';\n }\n maskTable.appendChild(maskTHead);\n }\n var maskTBody = table.querySelector('tbody').cloneNode();\n maskTBody.removeAttribute('role');\n maskTBody.setAttribute('class', 'e-masked-tbody');\n var tbody = table.querySelector('tbody');\n if (content || header) {\n var rowCountElement = gridContent;\n var rowCount = Math.ceil(rowCountElement.getBoundingClientRect().height / this.getRowHeight());\n if (tbody.querySelector('.e-emptyrow') || !tbody.childNodes.length || (content && this.childGrid)) {\n var row = this.createMaskRow(maskColgroup, columns);\n var altRow = row.cloneNode(true);\n altRow.classList.add('e-altrow');\n for (var i = 0; i < rowCount; i++) {\n var altNumber = 1;\n maskTBody.appendChild((i + altNumber) % 2 === 0 ? altRow.cloneNode(true) : row.cloneNode(true));\n }\n }\n else {\n var rowsQuery = 'tr:not([style*=\"display:none\"]):not([style*=\"display: none\"])';\n var rows = [].slice.call(tbody.querySelectorAll(rowsQuery));\n var addEditRow = tbody.querySelector('.e-addedrow, .e-editedrow');\n var addEditRowIndex = void 0;\n if (addEditRow) {\n addEditRowIndex = rows.indexOf(addEditRow);\n if (this.isFrozenGrid() && this.enableColumnVirtualization) {\n var frzTd = [].slice.call(rows[addEditRowIndex + 1].querySelectorAll('.e-rowcell'));\n for (var i = 0; i < frzTd.length; i++) {\n if (i < this.frozenLeftCount) {\n frzTd[parseInt(i.toString(), 10)].classList.add('e-leftfreeze');\n frzTd[parseInt(i.toString(), 10)].setAttribute('data-colindex', i.toString());\n frzTd[parseInt(i.toString(), 10)].style.left = (columns[parseInt(i.toString(), 10)].valueX - this.translateX) + 'px';\n }\n else if ((frzTd.length - this.frozenRightCount) <= i && columns[parseInt(i.toString(), 10)]) {\n frzTd[parseInt(i.toString(), 10)].classList.add('e-rightfreeze');\n frzTd[parseInt(i.toString(), 10)].setAttribute('data-colindex', i.toString());\n frzTd[parseInt(i.toString(), 10)].style.right = (this.translateX +\n columns[parseInt(i.toString(), 10)].valueX) + 'px';\n }\n }\n }\n if (addEditRow.classList.contains('e-addedrow')) {\n rows.splice(addEditRowIndex, 2);\n }\n else {\n rows.splice(addEditRowIndex, 1);\n }\n }\n rowCount = (this.enableVirtualization || this.enableColumnVirtualization) && axisDirection ? rows.length\n : rowCount <= rows.length ? rowCount : rows.length;\n for (var i = 0; i < rowCount; i++) {\n maskTBody.appendChild(this.applyMaskRow(rows[parseInt(i.toString(), 10)].cloneNode(true), rows[parseInt(i.toString(), 10)].getBoundingClientRect().height));\n }\n if (addEditRow && addEditRow.classList.contains('e-editedrow') && addEditRowIndex < rowCount) {\n var addEditMaskRow = maskTBody.childNodes[parseInt(addEditRowIndex.toString(), 10)];\n addEditMaskRow.style.height = this.getRowHeight() + 'px';\n addEditMaskRow.classList.add('e-row');\n if (addEditRow.classList.contains('e-altrow')) {\n addEditMaskRow.classList.add('e-altrow');\n }\n }\n }\n }\n maskTable.appendChild(maskTBody);\n if (footer) {\n var tfoot = table.querySelector('tfoot');\n var maskTFoot = tfoot.cloneNode();\n maskTFoot.setAttribute('class', 'e-masked-tfoot');\n var rows = [].slice.call(tfoot.querySelectorAll('tr'));\n for (var i = 0; i < rows.length; i++) {\n maskTFoot.appendChild(this.applyMaskRow(rows[parseInt(i.toString(), 10)].cloneNode(true), rows[parseInt(i.toString(), 10)].getBoundingClientRect().height));\n }\n maskTable.appendChild(maskTFoot);\n }\n if (header && this.isFrozenGrid() && !this.enableColumnVirtualization) {\n this.getHeaderContent().querySelector('.' + literals.headerContent).style.position = 'relative';\n }\n parentElement.insertBefore(maskTable, parentElement.firstChild);\n if (content && !(this.enableVirtualization && axisDirection)) {\n var minScrollTop = gridContentScrollHeight - maskTable.getBoundingClientRect().height;\n minScrollTop = minScrollTop < 0 ? 0 : minScrollTop;\n var scrollTop = gridContent.scrollTop <= minScrollTop ? gridContent.scrollTop : minScrollTop;\n if (this.enableVirtualization) {\n scrollTop -= getTransformValues(closest(parentElement, '.e-virtualtable')).height;\n }\n maskTable.style.transform = 'translate(0px,' + scrollTop + 'px)';\n }\n return maskTable;\n };\n Grid.prototype.applyMaskRow = function (row, rowHeight) {\n var maskRow = row;\n maskRow.removeAttribute('role');\n maskRow.removeAttribute('aria-rowindex');\n maskRow.removeAttribute('data-rowindex');\n maskRow.removeAttribute('data-uid');\n maskRow.classList.add('e-masked-row');\n maskRow.style.height = rowHeight + 'px';\n var maskCells = [].slice.call(maskRow.childNodes);\n for (var i = 0; i < maskCells.length; i++) {\n var maskCell = maskCells[parseInt(i.toString(), 10)];\n var displayAsCheckBoxCell = maskCell.firstChild && maskCell.firstChild.classList\n && maskCell.firstChild.classList.contains('e-checkbox-wrapper');\n maskCell.removeAttribute('role');\n maskCell.removeAttribute('tabindex');\n maskCell.removeAttribute('aria-label');\n if (this.enableColumnVirtualization && maskCell.classList.contains('e-fixedfreeze')) {\n removeClass([maskCell], ['e-fixedfreeze', 'e-freezeleftborder', 'e-freezerightborder']);\n addClass([maskCell], ['e-unfreeze']);\n }\n if (!(this.enableColumnVirtualization && (maskCell.classList.contains('e-leftfreeze') ||\n maskCell.classList.contains('e-rightfreeze')))) {\n maskCell.removeAttribute('data-colindex');\n }\n maskCell.removeAttribute('aria-colindex');\n maskCell.removeAttribute('index');\n maskCell.removeAttribute('ej-mappingname');\n maskCell.removeAttribute('ej-mappingvalue');\n maskCell.removeAttribute('e-mappinguid');\n maskCell.removeAttribute('aria-expanded');\n maskCell.classList.add('e-masked-cell');\n maskCell.innerHTML = this.getShimmerTemplate();\n if (maskCell.classList.contains('e-recordplusexpand') || maskCell.classList.contains('e-recordpluscollapse')) {\n maskCell.firstChild.classList.add('e-mask-group-intent');\n }\n else if (maskCell.classList.contains('e-gridchkbox') || displayAsCheckBoxCell) {\n maskCell.firstChild.classList.add('e-mask-checkbox-intent');\n }\n else if (maskCell.classList.contains('e-rowdragdrop')) {\n maskCell.firstChild.classList.add('e-mask-drag-intent');\n }\n else if (maskCell.classList.contains('e-indentcell')) {\n maskCell.innerHTML = '';\n }\n }\n return maskRow;\n };\n Grid.prototype.createMaskRow = function (refColgroup, refColumns) {\n var colgroup = refColgroup;\n var columns = refColumns;\n var row = this.createElement('tr', { className: 'e-masked-row e-row' });\n if (this.rowRenderingMode !== 'Vertical') {\n row.style.height = this.getRowHeight() + 'px';\n }\n var td = this.createElement('td', { className: 'e-masked-cell e-rowcell' });\n for (var i = 0, colIndex = 0; i < colgroup.childNodes.length; i++) {\n var col = colgroup.childNodes[parseInt(i.toString(), 10)];\n var localTD = td.cloneNode();\n localTD.innerHTML = this.getShimmerTemplate();\n if (!(col.classList.contains('e-group-intent') || col.classList.contains('e-detail-intent')\n || col.classList.contains('e-drag-intent'))) {\n if (this.rowRenderingMode === 'Vertical' && columns[parseInt(colIndex.toString(), 10)]) {\n localTD.setAttribute('data-cell', columns[parseInt(colIndex.toString(), 10)].headerText ?\n columns[parseInt(colIndex.toString(), 10)].headerText : columns[parseInt(colIndex.toString(), 10)].field);\n }\n if (col.style.display === 'none') {\n localTD.classList.add('e-hide');\n }\n else {\n localTD.style.textAlign = columns[parseInt(colIndex.toString(), 10)]\n && columns[parseInt(colIndex.toString(), 10)].textAlign ?\n columns[parseInt(colIndex.toString(), 10)].textAlign.toLowerCase()\n : this.enableRtl ? 'right' : 'left';\n if (columns[parseInt(colIndex.toString(), 10)] && (columns[parseInt(colIndex.toString(), 10)].type === 'checkbox'\n || columns[parseInt(colIndex.toString(), 10)].displayAsCheckBox)) {\n localTD.firstChild.classList.add('e-mask-checkbox-intent');\n }\n }\n colIndex++;\n }\n else {\n if (col.classList.contains('e-group-intent')) {\n localTD.firstChild.classList.add('e-mask-group-intent');\n }\n else if (col.classList.contains('e-detail-intent')) {\n localTD.firstChild.classList.add('e-mask-detail-intent');\n }\n else if (col.classList.contains('e-drag-intent')) {\n localTD.firstChild.classList.add('e-mask-drag-intent');\n }\n }\n row.appendChild(localTD);\n }\n return row;\n };\n Grid.prototype.getShimmerTemplate = function () {\n if (this.maskRowContentScroll) {\n return '';\n }\n return '';\n };\n Grid.prototype.addShimmerEffect = function () {\n this.maskRowContentScroll = false;\n var maskSpan = [].slice.call(this.element.querySelectorAll('.e-mask:not(.e-shimmer-wave)'));\n for (var i = 0; i < maskSpan.length; i++) {\n if (maskSpan[parseInt(i.toString(), 10)]) {\n maskSpan[parseInt(i.toString(), 10)].classList.add('e-shimmer-wave');\n }\n }\n };\n Grid.prototype.translateMaskRow = function (e) {\n var target = e.target;\n var maskTables = target.querySelectorAll('.e-masked-table');\n for (var i = 0; i < maskTables.length; i++) {\n var maskTable = maskTables[parseInt(i.toString(), 10)];\n if (maskTable) {\n var minScrollTop = target.scrollHeight - maskTable.getBoundingClientRect().height;\n minScrollTop = minScrollTop < 0 ? 0 : minScrollTop;\n var scrollTop = target.scrollTop <= minScrollTop ? target.scrollTop : minScrollTop;\n if (this.enableVirtualization) {\n scrollTop -= getTransformValues(closest(maskTable, '.e-virtualtable')).height;\n }\n maskTable.style.transform = 'translate(0px,' + scrollTop + 'px)';\n }\n }\n };\n Grid.prototype.removeMaskRow = function () {\n if (!isNullOrUndefined(this.contentModule)) {\n var gridContent = this.getContent().firstChild;\n EventHandler.remove(gridContent, 'scroll', this.translateMaskRow);\n }\n if (this.headerMaskTable && this.isFrozenGrid() && !this.enableColumnVirtualization) {\n this.getHeaderContent().querySelector('.' + literals.headerContent).style.position = '';\n }\n var maskTables = [this.headerMaskTable,\n this.contentMaskTable, this.footerContentMaskTable];\n for (var i = 0; i < maskTables.length; i++) {\n var maskTable = maskTables[parseInt(i.toString(), 10)];\n if (maskTable) {\n remove(maskTable);\n }\n }\n this.headerMaskTable = null;\n this.contentMaskTable = null;\n this.footerContentMaskTable = null;\n };\n Grid.prototype.refreshMaskRow = function () {\n var gridContent = this.getContent().firstChild;\n if (!this.isInitialLoad && !this.getColumns().length) {\n return;\n }\n if (this.contentMaskTable && gridContent.querySelector('.e-masked-table')) {\n var content = gridContent;\n if (this.enableVirtualization) {\n content = content.querySelector('.e-virtualtable');\n }\n this.refreshMaskRowColgroupWidth(content);\n }\n };\n Grid.prototype.refreshMaskRowColgroupWidth = function (content) {\n var table = content.querySelector('table:not(.e-masked-table)');\n var colgroup = table.querySelector(literals.colGroup).cloneNode(true);\n var maskTable = content.querySelector('.e-masked-table');\n colgroup.removeAttribute('id');\n colgroup.setAttribute('class', 'e-masked-colgroup');\n for (var i = 0; i < colgroup.childNodes.length; i++) {\n colgroup.childNodes[parseInt(i.toString(), 10)].removeAttribute('class');\n }\n remove(maskTable.querySelector('.e-masked-colgroup'));\n maskTable.insertBefore(colgroup, maskTable.firstChild);\n maskTable.style.width = table.getBoundingClientRect().width + 'px';\n };\n Grid.prototype.updateStackedFilter = function () {\n if (this.allowFiltering && this.filterSettings.type === 'FilterBar' &&\n this.getHeaderContent().getElementsByClassName('e-stackedheadercell').length) {\n this.getHeaderContent().classList.add('e-stackedfilter');\n }\n else {\n this.getHeaderContent().classList.remove('e-stackedfilter');\n }\n };\n Grid.prototype.getMediaColumns = function () {\n if (!this.enableColumnVirtualization) {\n var gcol = this.getColumns();\n this.getShowHideService = this.serviceLocator.getService('showHideService');\n if (!isNullOrUndefined(gcol)) {\n for (var index = 0; index < gcol.length; index++) {\n if (!isNullOrUndefined(gcol[parseInt(index.toString(), 10)].hideAtMedia)\n && (isNullOrUndefined(gcol[parseInt(index.toString(), 10)].visible)\n || gcol[parseInt(index.toString(), 10)].visible)) {\n this.pushMediaColumn(gcol[parseInt(index.toString(), 10)], index);\n }\n }\n }\n }\n this.updateFrozenColumnsWidth();\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[parseInt(index.toString(), 10)] = this.mediaQueryUpdate.bind(this, index);\n this.media[col.uid].addListener(this.mediaBindInstance[parseInt(index.toString(), 10)]);\n };\n /**\n * @param {Column} col - specifies the column\n * @returns {void}\n * @hidden\n */\n Grid.prototype.updateMediaColumns = function (col) {\n if (!this.enableColumnVirtualization) {\n var index = this.getColumnIndexByUid(col.uid);\n for (var i = 0; i < this.mediaCol.length; i++) {\n if (col.uid === this.mediaCol[parseInt(i.toString(), 10)].uid) {\n this.mediaCol.splice(i, 1);\n return;\n }\n }\n this.pushMediaColumn(col, index);\n }\n };\n /**\n * @param {number} columnIndex - specifies the column index\n * @param {MediaQueryList} e - specifies the MediaQueryList\n * @returns {void}\n * @hidden\n */\n Grid.prototype.mediaQueryUpdate = function (columnIndex, e) {\n var col = this.getColumns()[parseInt(columnIndex.toString(), 10)];\n if (this.mediaCol.some(function (mediaColumn) { return mediaColumn.uid === col.uid; })) {\n col.visible = e.matches;\n if (this.isInitialLoad) {\n this.invokedFromMedia = true;\n if (col.visible) {\n this.showHider.show(col.headerText, 'headerText');\n }\n else {\n this.showHider.hide(col.headerText, 'headerText');\n }\n }\n }\n };\n Grid.prototype.refreshMediaCol = function () {\n this.isInitialLoad = true;\n var footerContent = this.element.querySelector('.' + literals.gridFooter);\n if (this.aggregates.length && this.element.scrollHeight > parseInt(this.height.toString(), 10) && footerContent) {\n addClass([footerContent], ['e-footerpadding']);\n }\n var checkboxColumn = this.getColumns().filter(function (col) { return col.type === 'checkbox'; });\n if (checkboxColumn.length === 0 || checkboxColumn.length && this.selectionSettings.checkboxMode === 'ResetOnRowClick') {\n this.isCheckBoxSelection = false;\n }\n if (this.rowRenderingMode === 'Vertical') {\n if (this.enableHover) {\n this.setProperties({ enableAdaptiveUI: true, enableHover: false }, true);\n removeClass([this.element], 'e-gridhover');\n }\n }\n if (this.enableAdaptiveUI && this.scrollModule) {\n this.scrollModule.refresh();\n }\n if (this.isFrozenGrid() && this.isAutoGenerateColumns) {\n this.widthService.setWidthToColumns();\n this.isAutoGenerateColumns = false;\n }\n };\n Grid.prototype.removeMediaListener = function () {\n for (var i = 0; i < this.mediaCol.length; i++) {\n this.media[this.mediaCol[parseInt(i.toString(), 10)].uid]\n .removeListener(this.mediaBindInstance[this.mediaCol[parseInt(i.toString(), 10)].index]);\n }\n };\n /**\n * For internal use only - Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n Grid.prototype.eventInitializer = function () {\n //eventInitializer\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n *\n * @function destroy\n * @returns {void}\n */\n Grid.prototype.destroy = function () {\n var gridElement = this.element;\n if (!gridElement) {\n return;\n }\n var hasGridChild = gridElement.querySelector('.' + literals.gridHeader) &&\n gridElement.querySelector('.' + literals.gridContent) ? true : false;\n if (hasGridChild) {\n this.unwireEvents();\n }\n this.removeListener();\n this.removeMediaListener();\n this.notify(events.destroy, {});\n this.destroyDependentModules();\n if (this.isReact) {\n this.destroyTemplate(['template']);\n }\n if (this.isVue) {\n this.destroyTemplate();\n }\n if (hasGridChild) {\n _super.prototype.destroy.call(this);\n }\n this.toolTipObj.destroy();\n if (this.isReact && !Browser.isIE) {\n this.element.innerHTML = '';\n }\n var modules = ['renderModule', 'headerModule', 'contentModule', 'valueFormatterService',\n 'serviceLocator', 'ariaService', 'keyboardModule', 'widthService', 'searchModule', 'showHider',\n 'scrollModule', 'printModule', 'clipboardModule', 'focusModule'];\n for (var i = 0; i < modules.length; i++) {\n if (this[modules[parseInt(i.toString(), 10)]]) {\n this[modules[parseInt(i.toString(), 10)]] = null;\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 Grid.prototype.destroyDependentModules = function () {\n var gridElement = this.element;\n if (!gridElement || (!gridElement.querySelector('.' + literals.gridHeader) && !gridElement.querySelector('.' + literals.gridContent))) {\n return;\n }\n this.scrollModule.destroy();\n this.keyboardModule.destroy();\n this.focusModule.destroy();\n this.clipboardModule.destroy();\n this.printModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n */\n Grid.prototype.getModuleName = function () {\n return 'grid';\n };\n Grid.prototype.enableBoxSelection = function () {\n if (this.enableAutoFill) {\n this.selectionSettings.cellSelectionMode = 'BoxWithBorder';\n this.element.classList.add('e-afenabled');\n }\n else {\n this.element.classList.remove('e-afenabled');\n }\n };\n Grid.prototype.setCSSClass = function (oldCSSClass) {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {GridModel} newProp - Defines new properties\n * @param {GridModel} oldProp - Defines old properties\n * @returns {void}\n * @hidden\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 = { requestType: 'refresh' };\n var childGridParent = null;\n var parentInstance = null;\n if (this.isDestroyed) {\n return;\n }\n this.log('module_missing');\n if (this.isEllipsisTooltip()) {\n this.toolTipObj.close();\n }\n var properties = Object.keys(newProp);\n if (properties.indexOf('columns') > -1) {\n if (this.enableColumnVirtualization) {\n this.columnModel = [];\n }\n this.updateColumnObject();\n requireGridRefresh = true;\n }\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'allowPaging':\n this.notify(events.uiUpdate, { module: 'pager', enable: this.allowPaging });\n requireRefresh = true;\n if (this.height === '100%') {\n this.scrollModule.refresh();\n }\n break;\n case 'pageSettings':\n if (this.pageTemplateChange) {\n this.pageTemplateChange = false;\n this.notify(events.inBoundModelChanged, { module: 'pager', properties: newProp.pageSettings });\n break;\n }\n if (this.pagerModule && this.pagerModule.isCancel) {\n this.pagerModule.isCancel = false;\n return;\n }\n this.notify(events.inBoundModelChanged, { module: 'pager', properties: newProp.pageSettings });\n if (isNullOrUndefined(newProp.pageSettings.currentPage) && isNullOrUndefined(newProp.pageSettings.pageSize)\n && isNullOrUndefined(newProp.pageSettings.totalRecordsCount)\n || !isNullOrUndefined(oldProp.pageSettings) &&\n ((newProp.pageSettings.currentPage !== oldProp.pageSettings.currentPage)\n && !this.enableColumnVirtualization && !this.enableVirtualization\n && this.pageSettings.totalRecordsCount <= this.pageSettings.pageSize)) {\n requireRefresh = true;\n }\n if (this.pagerModule && this.pagerModule.isCancel) {\n this.pagerModule.isCancel = false;\n }\n break;\n case 'allowSorting':\n this.notify(events.uiUpdate, { module: 'sort', enable: this.allowSorting });\n requireRefresh = true;\n checkCursor = true;\n break;\n case 'allowFiltering':\n this.updateStackedFilter();\n this.notify(events.uiUpdate, { module: 'filter', enable: this.allowFiltering });\n requireRefresh = true;\n if (this.filterSettings.type !== 'FilterBar') {\n this.refreshHeader();\n }\n else {\n if (this.height === '100%') {\n this.scrollModule.refresh();\n }\n }\n break;\n case 'height':\n case 'width':\n this.notify(events.uiUpdate, { module: 'scroll', properties: { width: newProp.width, height: newProp.height } });\n if (this.allowPaging) {\n this.pagerModule.refresh();\n }\n break;\n case 'allowReordering':\n this.headerModule.refreshUI();\n checkCursor = true;\n break;\n case 'allowRowDragAndDrop':\n this.notify(events.uiUpdate, { module: 'rowDragAndDrop', enable: this.allowRowDragAndDrop });\n this.renderModule.refresh();\n this.headerModule.refreshUI();\n break;\n case 'allowSelection':\n this.notify(events.uiUpdate, { module: 'selection', enable: this.allowSelection });\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'enableAutoFill':\n if (this.selectionModule) {\n this.enableBoxSelection();\n this.selectionModule.updateAutoFillPosition();\n }\n break;\n case 'rowTemplate':\n this.rowTemplateFn = templateCompiler(this.rowTemplate);\n requireRefresh = true;\n break;\n case 'emptyRecordTemplate':\n this.emptyRecordTemplateFn = templateCompiler(this.emptyRecordTemplate);\n requireRefresh = true;\n break;\n case 'detailTemplate':\n this.detailTemplateFn = templateCompiler(this.detailTemplate);\n requireRefresh = true;\n break;\n case 'allowGrouping':\n this.notify(events.uiUpdate, { module: 'group', enable: this.allowGrouping });\n this.headerModule.refreshUI();\n requireRefresh = true;\n checkCursor = true;\n if (this.height === '100%') {\n this.scrollModule.refresh();\n }\n break;\n case 'enableInfiniteScrolling':\n case 'childGrid':\n requireRefresh = true;\n childGridParent = this.parentDetails ? document.querySelector(\"#\" + this.parentDetails.parentID) : null;\n parentInstance = childGridParent ? childGridParent.ej2_instances[0] : null;\n if (this.childGrid && parentInstance && isNullOrUndefined(parentInstance.childGrid.childGrid)) {\n var childGridObject = Object.assign({}, parentInstance.childGrid, { childGrid: newProp.childGrid });\n parentInstance.setProperties({ childGrid: childGridObject }, true);\n while (!isNullOrUndefined(parentInstance.parentDetails)) {\n var currentParent = document.querySelector(\"#\" + parentInstance.parentDetails.parentID);\n var currentParentInstance = currentParent ? currentParent.ej2_instances[0] : null;\n if (currentParentInstance) {\n var currentChildObject = Object.assign({}, currentParentInstance.childGrid);\n currentChildObject.childGrid = parentInstance.childGrid;\n currentParentInstance.setProperties({ childGrid: currentChildObject }, true);\n }\n parentInstance = currentParentInstance;\n }\n }\n this.headerModule.refreshUI();\n break;\n case 'toolbar':\n this.notify(events.uiUpdate, { module: 'toolbar' });\n if (this.height === '100%') {\n this.scrollModule.refresh();\n }\n break;\n case 'groupSettings':\n this.notify(events.inBoundModelChanged, {\n module: 'group', properties: newProp.groupSettings,\n oldProperties: oldProp.groupSettings\n });\n break;\n case 'aggregates':\n if (!this.aggregates.length && this.allowGrouping && this.groupSettings.columns.length) {\n requireRefresh = true;\n }\n this.notify(events.uiUpdate, { module: 'aggregate', properties: newProp });\n if (this.height === '100%') {\n this.scrollModule.refresh();\n }\n break;\n case 'frozenColumns':\n case 'frozenRows':\n case 'enableVirtualization':\n case 'enableColumnVirtualization':\n case 'currencyCode':\n case 'locale':\n this.log('frozen_rows_columns');\n freezeRefresh = true;\n requireGridRefresh = true;\n break;\n case 'query':\n if (!this.getDataModule().isQueryInvokedFromData) {\n requireRefresh = true;\n }\n this.getDataModule().isQueryInvokedFromData = false;\n break;\n case 'autoFit':\n if (this.autoFit) {\n this.preventAdjustColumns();\n }\n else {\n this.restoreAdjustColumns();\n }\n break;\n default:\n this.extendedPropertyChange(prop, newProp, requireGridRefresh);\n }\n }\n if (checkCursor) {\n this.updateDefaultCursor();\n }\n if (requireGridRefresh) {\n if (freezeRefresh || this.getFrozenColumns() || this.frozenRows) {\n this.freezeRefresh();\n }\n else {\n this.refresh();\n }\n }\n else if (requireRefresh) {\n this.notify(events.modelChanged, args);\n requireRefresh = false;\n this.maintainSelection(newProp.selectedRowIndex);\n }\n };\n Grid.prototype.extendedPropertyChange = function (prop, newProp, requireGridRefresh) {\n switch (prop) {\n case 'enableRtl':\n this.updateRTL();\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 if (this.height !== 'auto') {\n this.scrollModule.removePadding(!newProp.enableRtl);\n this.scrollModule.setPadding();\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 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 if (this.showColumnMenu && this.columnMenuModule && !this.enableAdaptiveUI) {\n this.columnMenuModule.getColumnMenu().ej2_instances[0].enableRtl = newProp.enableRtl;\n this.columnMenuModule.getColumnMenu().ej2_instances[0].dataBind();\n }\n if (this.filterSettings.type === 'FilterBar' && this.filterSettings.showFilterBarOperator) {\n this.refreshHeader();\n }\n this.notify(events.rtlUpdated, {});\n break;\n case 'enableAltRow':\n this.renderModule.refresh();\n break;\n case 'allowResizing':\n this.headerModule.refreshUI();\n this.updateResizeLines();\n break;\n case 'rowHeight':\n if (this.rowHeight) {\n addClass([this.element], 'e-grid-min-height');\n }\n else {\n removeClass([this.element], 'e-grid-min-height');\n }\n this.renderModule.refresh();\n this.headerModule.refreshUI();\n break;\n case 'gridLines':\n this.updateGridLines();\n break;\n case 'showColumnMenu':\n this.headerModule.refreshUI();\n this.notify(events.uiUpdate, { module: 'columnMenu', enable: true });\n break;\n case 'columnMenuItems':\n this.notify(events.uiUpdate, { module: 'columnMenu', enable: this.columnMenuItems });\n break;\n case 'contextMenuItems':\n this.notify(events.uiUpdate, { module: 'contextMenu', enable: this.contextMenuItems });\n break;\n case 'showColumnChooser':\n this.notify(events.uiUpdate, { module: 'columnChooser', enable: this.showColumnChooser });\n break;\n case 'filterSettings':\n this.updateStackedFilter();\n this.notify(events.inBoundModelChanged, { module: 'filter', properties: newProp.filterSettings });\n break;\n case 'searchSettings':\n this.notify(events.inBoundModelChanged, { module: 'search', properties: newProp.searchSettings });\n break;\n case 'sortSettings':\n this.notify(events.inBoundModelChanged, { module: 'sort' });\n break;\n case 'selectionSettings':\n this.notify(events.inBoundModelChanged, { module: 'selection', properties: newProp.selectionSettings });\n break;\n case 'editSettings':\n this.notify(events.inBoundModelChanged, { module: 'edit', properties: newProp.editSettings });\n break;\n case 'allowTextWrap':\n case 'textWrapSettings':\n if (this.allowTextWrap) {\n this.applyTextWrap();\n }\n else {\n this.removeTextWrap();\n }\n this.notify(events.freezeRender, { case: 'textwrap', isModeChg: (prop === 'textWrapSettings') });\n break;\n case 'dataSource':\n // eslint-disable-next-line no-case-declarations\n var pending_1 = this.getDataModule().getState();\n if (this.allowSelection && this.isPersistSelection && !(pending_1 && pending_1.isPending)) {\n this.clearSelection();\n }\n if (!isNullOrUndefined(this.dataSource) && this.dataSource.result) {\n this.isVirtualAdaptive = false;\n }\n if (Object.getPrototypeOf(newProp).deepWatch) {\n var pKeyField = this.getPrimaryKeyFieldNames()[0];\n for (var i = 0, props = Object.keys(newProp.dataSource); i < props.length; i++) {\n this.setRowData(getValue(pKeyField, this.dataSource[props[parseInt(i.toString(), 10)]]), this.dataSource[props[parseInt(i.toString(), 10)]]);\n }\n }\n else if (pending_1.isPending) {\n var gResult = !isNullOrUndefined(this.dataSource) ? this.dataSource.result : [];\n var names = (pending_1.group || []);\n if (names.length && !this.groupSettings.enableLazyLoading && !(gResult.length && gResult[0].field)) {\n for (var i = 0; i < names.length; i++) {\n gResult = DataUtil.group(gResult, names[parseInt(i.toString(), 10)], pending_1.aggregates || []);\n }\n }\n this.dataSource = {\n result: gResult, count: this.dataSource.count,\n aggregates: this.dataSource.aggregates\n };\n this.getDataModule().setState({});\n pending_1.resolver(this.dataSource);\n }\n else {\n this.getDataModule().setState({ isDataChanged: false });\n this.notify(events.dataSourceModified, {});\n if (!requireGridRefresh) {\n this.renderModule.refresh();\n if (this.isCheckBoxSelection) {\n this.notify(events.beforeRefreshOnDataChange, {});\n }\n }\n }\n this.scrollRefresh();\n break;\n case 'enableHover':\n // eslint-disable-next-line no-case-declarations\n var action = newProp.enableHover ? addClass : removeClass;\n action([this.element], 'e-gridhover');\n break;\n case 'selectedRowIndex':\n if (!this.isSelectedRowIndexUpdating) {\n this.selectRow(newProp.selectedRowIndex);\n }\n this.isSelectedRowIndexUpdating = false;\n break;\n case 'resizeSettings':\n this.widthService.setWidthToTable();\n break;\n case 'enableAdaptiveUI':\n this.notify(events.setFullScreenDialog, {});\n break;\n case 'rowRenderingMode':\n this.enableVerticalRendering();\n this.notify(events.rowModeChange, {});\n this.refresh();\n break;\n case 'enableStickyHeader':\n this.scrollModule.addStickyListener(newProp.enableStickyHeader);\n break;\n }\n };\n Grid.prototype.maintainSelection = function (index) {\n var _this_1 = this;\n if (index !== -1) {\n var fn_1 = function () {\n _this_1.selectRow(index);\n _this_1.off(events.contentReady, fn_1);\n };\n this.on(events.contentReady, fn_1, this);\n }\n };\n /**\n * @param {Object} prop - Defines the property\n * @param {boolean} muteOnChange - Defines the mute on change\n * @returns {void}\n * @private\n */\n Grid.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n var filterSettings = 'filterSettings';\n if (prop[\"\" + filterSettings] && this.filterModule && muteOnChange) {\n this.filterModule.refreshFilter();\n }\n };\n /**\n * @hidden\n * @returns {number} - Returns the tables count\n */\n Grid.prototype.getTablesCount = function () {\n return this.tablesCount;\n };\n /**\n * @hidden\n * @returns {void}\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().getElementsByClassName('e-stackedheadercell'));\n var cols = this.getColumns();\n for (var i = 0; i < headerCells.length; i++) {\n var cell = headerCells[parseInt(i.toString(), 10)];\n if (this.allowGrouping || this.allowReordering || this.allowSorting) {\n if (!cols[parseInt(i.toString(), 10)].allowReordering || !cols[parseInt(i.toString(), 10)].allowSorting\n || !cols[parseInt(i.toString(), 10)].allowGrouping) {\n cell.classList.add('e-defaultcursor');\n }\n else {\n cell.classList.add('e-mousepointer');\n }\n }\n }\n for (var count = 0; count < stdHdrCell.length; count++) {\n if (this.allowReordering) {\n stdHdrCell[parseInt(count.toString(), 10)].classList.add('e-mousepointer');\n }\n }\n };\n Grid.prototype.updateColumnModel = function (columns, isRecursion) {\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[parseInt(i.toString(), 10)].columns) {\n this.updateColumnModel(columns[parseInt(i.toString(), 10)].columns, true);\n }\n else {\n this.columnModel.push(columns[parseInt(i.toString(), 10)]);\n }\n }\n if (isNullOrUndefined(isRecursion) || !isRecursion) {\n this.updateLockableColumns();\n }\n };\n Grid.prototype.getFrozenLeftCount = function () {\n return this.getFrozenColumns() || this.getFrozenLeftColumnsCount();\n };\n Grid.prototype.isFrozenGrid = function () {\n return this.getFrozenColumns() !== 0 || this.frozenLeftColumns.length !== 0 || this.frozenRightColumns.length !== 0 ||\n this.fixedColumns.length !== 0;\n };\n Grid.prototype.getFrozenMode = function () {\n return this.frozenName;\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 for (var i = 0; i < cols.length; i++) {\n if (cols[parseInt(i.toString(), 10)].lockColumn) {\n if (i < frozenColumns) {\n cols.splice(frozenCount, 0, cols.splice(i, 1)[0]);\n frozenCount++;\n }\n else {\n cols.splice(frozenColumns + movableCount, 0, cols.splice(i, 1)[0]);\n movableCount++;\n }\n }\n }\n };\n Grid.prototype.checkLockColumns = function (cols) {\n for (var i = 0; i < cols.length; i++) {\n if (cols[parseInt(i.toString(), 10)].columns) {\n this.checkLockColumns(cols[parseInt(i.toString(), 10)].columns);\n }\n else if (cols[parseInt(i.toString(), 10)].lockColumn) {\n this.lockcolPositionCount++;\n }\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Grid.prototype.leftrightColumnWidth = function (position) {\n var cols = position === 'left' ? this.getFrozenLeftColumns() : position === 'right' ? this.getFrozenRightColumns() : [];\n var width = 0;\n cols.filter(function (col) {\n if (col.visible) {\n width += parseInt(col.width.toString(), 10);\n }\n });\n return width;\n };\n /**\n * Gets the columns from the Grid.\n *\n * @param {boolean} isRefresh - Defines the boolean whether to refresh\n * @returns {Column[]} - returns the column\n */\n Grid.prototype.getColumns = function (isRefresh) {\n var _this_1 = this;\n var inview = this.inViewIndexes.map(function (v) { return v - _this_1.groupSettings.columns.length; }).filter(function (v) { return v > -1; });\n var vLen = inview.length;\n if (!this.enableColumnVirtualization || isNullOrUndefined(this.columnModel) || this.columnModel.length === 0 || isRefresh) {\n this.columnModel = [];\n this.updateColumnModel(this.columns);\n }\n var columns = vLen === 0 ? this.columnModel :\n this.columnModel.slice(inview[0], inview[vLen - 1] + 1);\n var left = [];\n var right = [];\n var movable = [];\n var isLeftRightFrozen = this.enableColumnVirtualization && this.isPreparedFrozenColumns && vLen === 0;\n if (isLeftRightFrozen) {\n this.frozenRightColumns = [];\n this.frozenLeftColumns = [];\n }\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].freeze === 'Left' || columns[parseInt(i.toString(), 10)].isFrozen) {\n left.push(columns[parseInt(i.toString(), 10)]);\n if (isLeftRightFrozen) {\n this.frozenLeftColumns.push(columns[parseInt(i.toString(), 10)]);\n }\n }\n else if (columns[parseInt(i.toString(), 10)].freeze === 'Right') {\n right.push(columns[parseInt(i.toString(), 10)]);\n if (isLeftRightFrozen) {\n this.frozenRightColumns.push(columns[parseInt(i.toString(), 10)]);\n }\n }\n else {\n movable.push(columns[parseInt(i.toString(), 10)]);\n }\n }\n if (this.enableColumnVirtualization && this.isFrozenGrid()) {\n if (this.frozenLeftColumns.length) {\n left = this.frozenLeftColumns;\n }\n if (this.frozenRightColumns.length) {\n right = this.frozenRightColumns;\n }\n }\n return left.concat(movable).concat(right);\n };\n /**\n * @private\n * @param {string} stackedHeader - Defines the stacked header\n * @param {Column[]} col - Defines the column\n * @returns {Column} Returns the Column\n */\n Grid.prototype.getStackedHeaderColumnByHeaderText = function (stackedHeader, col) {\n for (var i = 0; i < col.length; i++) {\n var individualColumn = col[parseInt(i.toString(), 10)];\n if (individualColumn.field === stackedHeader || individualColumn.headerText === stackedHeader) {\n this.stackedColumn = individualColumn;\n break;\n }\n else if (individualColumn.columns) {\n this.getStackedHeaderColumnByHeaderText(stackedHeader, individualColumn.columns);\n }\n }\n return this.stackedColumn;\n };\n /**\n * @private\n * @returns {number[]} Returns the column indexes\n */\n Grid.prototype.getColumnIndexesInView = function () {\n return this.inViewIndexes;\n };\n /**\n * @private\n * @returns {Query} - returns the query\n */\n Grid.prototype.getQuery = function () {\n return this.query;\n };\n /**\n * @private\n * @returns {object} - returns the locale constants\n */\n Grid.prototype.getLocaleConstants = function () {\n return this.defaultLocale;\n };\n /**\n * @param {number[]} indexes - specifies the indexes\n * @returns {void}\n * @private\n */\n Grid.prototype.setColumnIndexesInView = function (indexes) {\n this.inViewIndexes = indexes;\n };\n /**\n * Gets the visible columns from the Grid.\n *\n * @returns {Column[]} returns the column\n */\n Grid.prototype.getVisibleColumns = function () {\n return this.getCurrentVisibleColumns();\n };\n /**\n * Gets the header div of the Grid.\n *\n * @returns {Element} - Returns the element\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 *\n * @param {Element} element - Specifies the Grid header.\n *\n * @returns {void}\n */\n Grid.prototype.setGridHeaderContent = function (element) {\n this.headerModule.setPanel(element);\n };\n /**\n * Gets the content table of the Grid.\n *\n * @returns {Element} - Returns the element\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 *\n * @param {Element} element - Specifies the Grid content table.\n *\n * @returns {void}\n */\n Grid.prototype.setGridContentTable = function (element) {\n this.contentModule.setTable(element);\n };\n /**\n * Gets the content div of the Grid.\n *\n * @returns {Element} Returns the element\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 *\n * @param {Element} element - Specifies the Grid content.\n *\n * @returns {void}\n */\n Grid.prototype.setGridContent = function (element) {\n this.contentModule.setPanel(element);\n };\n /**\n * Gets the header table element of the Grid.\n *\n * @returns {Element} returns the element\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 *\n * @param {Element} element - Specifies the Grid header table.\n *\n * @returns {void}\n */\n Grid.prototype.setGridHeaderTable = function (element) {\n this.headerModule.setTable(element);\n };\n /**\n * Gets the footer div of the Grid.\n *\n * @returns {Element} returns the element\n */\n Grid.prototype.getFooterContent = function () {\n this.footerElement = this.element.getElementsByClassName(literals.gridFooter)[0];\n return this.footerElement;\n };\n /**\n * Gets the footer table element of the Grid.\n *\n * @returns {Element} returns the element\n */\n Grid.prototype.getFooterContentTable = function () {\n this.footerElement = this.element.getElementsByClassName(literals.gridFooter)[0];\n return this.footerElement.firstChild.firstChild;\n };\n /**\n * Gets the pager of the Grid.\n *\n * @returns {Element} returns the element\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 *\n * @param {Element} element - Specifies the Grid pager.\n *\n * @returns {void}\n */\n Grid.prototype.setGridPager = function (element) {\n this.gridPager = element;\n };\n /**\n * Gets a row by index.\n *\n * @param {number} index - Specifies the row index.\n *\n * @returns {Element} returns the element\n */\n Grid.prototype.getRowByIndex = function (index) {\n if (this.enableVirtualization && this.groupSettings.enableLazyLoading) {\n return this.lazyLoadRender.getRowByIndex(index);\n }\n else {\n return this.contentModule.getRowByIndex(index);\n }\n };\n /**\n * Gets a movable tables row by index.\n *\n * @param {number} index - Specifies the row index.\n *\n * @returns {Element} returns the element\n\n */\n Grid.prototype.getMovableRowByIndex = function (index) {\n return this.contentModule.getRowByIndex(index);\n };\n /**\n * Gets a frozen tables row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} returns the element\n\n */\n Grid.prototype.getFrozenRowByIndex = function (index) {\n return this.contentModule.getRowByIndex(index);\n };\n /**\n * Gets all the data rows of the Grid.\n *\n * @returns {Element[]} returns the element\n */\n Grid.prototype.getRows = function () {\n return this.contentModule.getRowElements();\n };\n /**\n * Gets a frozen right tables row element by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} returns the element\n\n */\n Grid.prototype.getFrozenRightRowByIndex = function (index) {\n return this.contentModule.getRowByIndex(index);\n };\n /**\n * Get a row information based on cell\n *\n * @param {Element | EventTarget} target - specifies the element\n *\n * @returns {RowInfo} returns the row info\n */\n Grid.prototype.getRowInfo = function (target) {\n var ele = target;\n var args = { target: target };\n if (!isNullOrUndefined(target) && isNullOrUndefined(parentsUntil(ele, 'e-detailrowcollapse')\n && isNullOrUndefined(parentsUntil(ele, 'e-recordplusexpand')))) {\n var cell = closest(ele, '.' + literals.rowCell);\n if (!cell) {\n var row_1 = closest(ele, '.' + literals.row);\n if (!isNullOrUndefined(row_1) && !row_1.classList.contains('e-addedrow')) {\n var rowObj = this.getRowObjectFromUID(row_1.getAttribute('data-uid'));\n var rowIndex = parseInt(row_1.getAttribute(literals.dataRowIndex), 10);\n args = { row: row_1, rowData: rowObj.data, rowIndex: rowIndex };\n }\n return args;\n }\n var cellIndex = parseInt(cell.getAttribute(literals.dataColIndex), 10);\n var row_2 = closest(cell, '.' + literals.row);\n if (!isNullOrUndefined(cell) && !isNaN(cellIndex) && !isNullOrUndefined(row_2)) {\n var rowIndex = parseInt(row_2.getAttribute(literals.dataRowIndex), 10);\n var rows = this.contentModule.getRows();\n var index = cellIndex + this.getIndentCount();\n var rowsObject = rows.filter(function (r) { return r.uid === row_2.getAttribute('data-uid'); });\n var rowData = {};\n var column = void 0;\n if (Object.keys(rowsObject).length) {\n rowData = rowsObject[0].data;\n column = rowsObject[0].cells[parseInt(index.toString(), 10)].column;\n }\n args = { cell: cell, cellIndex: cellIndex, row: row_2, rowIndex: rowIndex, rowData: rowData, column: column, target: target };\n }\n }\n return args;\n };\n /**\n * Gets the Grid's movable content rows from frozen grid.\n *\n * @returns {Element[]} returns the element\n\n */\n Grid.prototype.getMovableRows = function () {\n return this.contentModule.getRowElements();\n };\n /**\n * Gets the Grid's frozen right content rows from frozen grid.\n *\n * @returns {Element[]} returns the element\n\n */\n Grid.prototype.getFrozenRightRows = function () {\n return this.contentModule.getRowElements();\n };\n /**\n * Gets all the Grid's data rows.\n *\n * @returns {Element[]} returns the element\n */\n Grid.prototype.getDataRows = function () {\n return this.getAllDataRows();\n };\n /**\n * @param {boolean} includeAdd - specifies includeAdd\n * @returns {Element[]} returns the element\n * @hidden\n */\n Grid.prototype.getAllDataRows = function (includeAdd) {\n if (isNullOrUndefined(this.getContentTable().querySelector(literals.tbody))) {\n return [];\n }\n var tbody = this.getContentTable().querySelector(literals.tbody);\n var rows = [].slice.call(tbody.children);\n if (this.frozenRows) {\n var hdrTbody = this.getHeaderTable().querySelector(literals.tbody);\n var freezeRows = [].slice.call(hdrTbody.children);\n rows = this.addMovableRows(freezeRows, rows);\n }\n var dataRows = this.generateDataRows(rows, includeAdd);\n return dataRows;\n };\n /**\n * @param {HTMLElement[]} fRows - Defines the frozen Rows\n * @param {HTMLElement[]} mrows - Defines the movable Rows\n * @returns {HTMLElement[]} Returns the element\n * @hidden\n */\n Grid.prototype.addMovableRows = function (fRows, mrows) {\n for (var i = 0, len = mrows.length; i < len; i++) {\n fRows.push(mrows[parseInt(i.toString(), 10)]);\n }\n return fRows;\n };\n Grid.prototype.generateDataRows = function (rows, includAdd) {\n var dRows = [];\n for (var i = 0, len = rows.length; i < len; i++) {\n if (rows[parseInt(i.toString(), 10)].classList.contains(literals.row)\n && (!rows[parseInt(i.toString(), 10)].classList.contains('e-hiddenrow') || includAdd)) {\n if (this.isCollapseStateEnabled()) {\n dRows[parseInt(rows[parseInt(i.toString(), 10)].getAttribute('data-rowindex'), 10)] = rows[parseInt(i.toString(), 10)];\n }\n else {\n dRows.push(rows[parseInt(i.toString(), 10)]);\n }\n }\n }\n return dRows;\n };\n /**\n * Gets all the Grid's movable table data rows.\n *\n * @returns {Element[]} Returns the element\n\n */\n Grid.prototype.getMovableDataRows = function () {\n return this.getAllMovableDataRows();\n };\n /**\n * @param {boolean} includeAdd Defines the include add in boolean\n * @returns {Element[]} Returns the element\n\n * @hidden\n */\n Grid.prototype.getAllMovableDataRows = function (includeAdd) {\n return this.getAllDataRows(includeAdd);\n };\n /**\n * Gets all the Grid's frozen table data rows.\n *\n * @returns {Element[]} returns the element\n\n */\n Grid.prototype.getFrozenDataRows = function () {\n return this.getAllFrozenDataRows();\n };\n /**\n * @param {boolean} includeAdd Defines the include add in boolean\n * @returns {Element[]} Returns the element\n\n * @hidden\n */\n Grid.prototype.getAllFrozenDataRows = function (includeAdd) {\n return this.getAllDataRows(includeAdd);\n };\n /**\n * Gets all the Grid's frozen right table data rows.\n *\n * @returns {Element[]} Returns the Element\n\n */\n Grid.prototype.getFrozenRightDataRows = function () {\n return this.getAllFrozenRightDataRows();\n };\n /**\n * @param {boolean} includeAdd Defines the include add in boolean\n * @returns {Element[]} Returns the element\n\n * @hidden\n */\n Grid.prototype.getAllFrozenRightDataRows = function (includeAdd) {\n return this.getAllDataRows(includeAdd);\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 *\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 * @returns {void}\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 pkName = this.getPrimaryKeyFieldNames()[0];\n var cell = new CellRenderer(this, this.serviceLocator);\n var fieldIdx = this.getColumnIndexByField(field);\n var col = this.getColumnByField(field);\n var rowObjects = this.contentModule.getRows();\n var selectedRow = rowObjects.filter(function (r) {\n return getValue(pkName, r.data) === key;\n })[0];\n var tr = selectedRow ? this.element.querySelector('[data-uid=' + selectedRow[\"\" + rowuID] + ']') : null;\n if (!isNullOrUndefined(tr)) {\n if (typeof value === 'string') {\n value = this.sanitize(value);\n }\n setValue(field, value, selectedRow[\"\" + rowData]);\n var left = 0;\n if (this.isRowDragable()) {\n left++;\n }\n var td = this.enableVirtualization ? tr.children[parseInt(fieldIdx.toString(), 10)]\n : this.getCellFromIndex(selectedRow[\"\" + rowIdx], fieldIdx);\n if (!isNullOrUndefined(td)) {\n var Idx = 0;\n if (this.groupSettings.columns.length) {\n fieldIdx = fieldIdx + this.groupSettings.columns.length;\n }\n if (this.childGrid || this.detailTemplate) {\n fieldIdx++;\n }\n if (this.isRowDragable()) {\n fieldIdx++;\n }\n var sRow = selectedRow[\"\" + cells][fieldIdx - Idx];\n cell.refreshTD(td, sRow, selectedRow[\"\" + rowData], { index: selectedRow[\"\" + rowIdx] });\n if (this.isReact) {\n td = this.enableVirtualization ? tr.children[parseInt(fieldIdx.toString(), 10)]\n : this.getCellFromIndex(selectedRow[\"\" + rowIdx], fieldIdx);\n }\n if (this.aggregates.length > 0) {\n this.notify(events.refreshFooterRenderer, {});\n if (this.groupSettings.columns.length > 0) {\n this.notify(events.groupAggregates, {});\n }\n }\n /* tslint:disable:no-string-literal */\n if (!isNullOrUndefined(selectedRow) && !isNullOrUndefined(selectedRow['changes'])) {\n selectedRow['changes'][\"\" + field] = value;\n }\n /* tslint:disable:no-string-literal */\n this.trigger(events.queryCellInfo, {\n cell: td, column: col, data: selectedRow[\"\" + rowData]\n });\n if (this.isReact && td.getAttribute('tabindex') === '0' && td.classList.contains('e-focused')) {\n td.focus();\n }\n }\n }\n else {\n return;\n }\n };\n /**\n * @param {string} columnUid - Defines column uid\n * @param {boolean} renderTemplates - Defines renderTemplates need to invoke\n * @returns {void}\n * @hidden\n */\n Grid.prototype.refreshReactColumnTemplateByUid = function (columnUid, renderTemplates) {\n var _this_1 = this;\n if (this.isReact) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.clearTemplate(['columnTemplate'], undefined, function () {\n var isChildGrid = _this_1.childGrid && _this_1.element.querySelectorAll('.e-childgrid').length ? true : false;\n var rows = isChildGrid ? _this_1.getContentTable().querySelectorAll('.e-row') :\n _this_1.getDataRows();\n _this_1.refreshReactTemplateTD(rows, isChildGrid);\n if (renderTemplates) {\n _this_1.renderTemplates();\n }\n });\n }\n };\n /**\n * @param {Element[] | NodeListOf} rows - Defines the rows\n * @param {boolean} isChildGrid - Defines whether it is a Hierarchy Grid.\n * @param {boolean} isFrozen - Defines whether it is a Frozen Grid\n * @returns {void}\n * @hidden\n */\n Grid.prototype.refreshReactTemplateTD = function (rows, isChildGrid, isFrozen) {\n var cells = 'cells';\n var rowIdx = 'index';\n var indent = this.getIndentCount();\n var childIndent = 0;\n var isChildRow = false;\n for (var j = 0; j < rows.length; j++) {\n var rowsObj = this.getRowObjectFromUID(rows[parseInt(j.toString(), 10)].getAttribute('data-uid'));\n if (isChildGrid && !rowsObj && parentsUntil(rows[parseInt(j.toString(), 10)], 'e-childgrid')) {\n var gridObj = parentsUntil(rows[parseInt(j.toString(), 10)], 'e-childgrid').ej2_instances[0];\n rowsObj = gridObj.getRowObjectFromUID(rows[parseInt(j.toString(), 10)].getAttribute('data-uid'));\n childIndent = gridObj.getIndentCount();\n isChildRow = true;\n }\n if (rowsObj && rowsObj.isDataRow && !isNullOrUndefined(rowsObj.index) &&\n !rows[parseInt(j.toString(), 10)].classList.contains('e-editedrow')) {\n for (var i = 0; i < rowsObj[\"\" + cells].length; i++) {\n var cell = rowsObj[\"\" + cells][parseInt(i.toString(), 10)];\n if (cell.isTemplate) {\n var cellRenderer = new CellRenderer(this, this.serviceLocator);\n var td = isChildGrid ? rows[parseInt(j.toString(), 10)]\n .children[cell.index + (isChildRow ? childIndent : indent)] : this.getCellFromIndex(j, isFrozen ? cell.index : i - indent);\n cellRenderer.refreshTD(td, cell, rowsObj.data, { index: rowsObj[\"\" + rowIdx] });\n }\n }\n }\n isChildRow = false;\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Grid.prototype.refreshGroupCaptionFooterTemplate = function () {\n var isChildGrid = this.childGrid && this.element.querySelectorAll('.e-childgrid').length ? true : false;\n var rows = this.getContentTable().querySelectorAll('.e-groupcaptionrow, .e-groupfooterrow');\n for (var i = 0; i < rows.length; i++) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var gridObj = this;\n var rowsObj = this.getRowObjectFromUID(rows[parseInt(i.toString(), 10)].getAttribute('data-uid'));\n if (isChildGrid && !rowsObj && parentsUntil(rows[parseInt(i.toString(), 10)], 'e-childgrid')) {\n gridObj = parentsUntil(rows[parseInt(i.toString(), 10)], 'e-childgrid').ej2_instances[0];\n rowsObj = gridObj.getRowObjectFromUID(rows[parseInt(i.toString(), 10)].getAttribute('data-uid'));\n }\n if (rowsObj) {\n var cells = rowsObj.cells.filter(function (cell) { return cell.isDataCell; });\n var args = { cells: cells, data: rowsObj.data, dataUid: rowsObj.uid };\n gridObj.notify(events.refreshAggregateCell, args);\n }\n }\n };\n /**\n * @param {string} columnUid - Defines column uid\n * @returns {void}\n * @hidden\n */\n Grid.prototype.refreshReactHeaderTemplateByUid = function (columnUid) {\n if (this.isReact) {\n var cells = 'cells';\n var rowsObj = this.headerModule.rows;\n var cellIndex = this.getNormalizedColumnIndex(columnUid);\n var _loop_1 = function (j) {\n var cell = rowsObj[parseInt(j.toString(), 10)][\"\" + cells][parseInt(cellIndex.toString(), 10)];\n if (cell && cell.column.uid === columnUid) {\n var headerCellRenderer = new HeaderCellRenderer(this_1, this_1.serviceLocator);\n var td = parentsUntil(this_1.element.querySelectorAll('[e-mappinguid=' + columnUid + ']')[0], 'e-templatecell');\n headerCellRenderer.refresh(cell, td);\n var cols = this_1.sortSettings.columns;\n var columnIndex = cols.findIndex(function (col) { return col.field === cell.column.field; });\n if (columnIndex !== -1) {\n var header = this_1.getColumnHeaderByField(cell.column.field);\n this_1.ariaService.setSort(header, (cols[parseInt(columnIndex.toString(), 10)].direction).toLowerCase());\n if (cols.length > 1) {\n header.querySelector('.e-headercelldiv').insertBefore(this_1.createElement('span', { className: 'e-sortnumber', innerHTML: (columnIndex + 1).toString() }), header.querySelector('.e-headertext'));\n }\n var filterElement = header.querySelector('.e-sortfilterdiv');\n if (cols[parseInt(columnIndex.toString(), 10)].direction === 'Ascending') {\n classList(filterElement, ['e-ascending', 'e-icon-ascending'], []);\n }\n else {\n classList(filterElement, ['e-descending', 'e-icon-descending'], []);\n }\n }\n }\n };\n var this_1 = this;\n for (var j = 0; j < rowsObj.length; j++) {\n _loop_1(j);\n }\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 *\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 * @returns {void}\n */\n Grid.prototype.setRowData = function (key, rowData) {\n var rowuID = 'uid';\n var rowObjects = this.contentModule.getRows();\n var pkName = this.getPrimaryKeyFieldNames()[0];\n if (this.groupSettings.columns.length > 0 && this.aggregates.length > 0) {\n rowObjects = rowObjects.filter(function (row) { return row.isDataRow; });\n }\n var selectedRow = rowObjects.filter(function (r) {\n return getValue(pkName, r.data) === key;\n })[0];\n var selectRowEle = selectedRow ? [].slice.call(this.element.querySelectorAll('[data-uid=' + selectedRow[\"\" + rowuID] + ']')) : undefined;\n if (!isNullOrUndefined(selectedRow) && selectRowEle.length) {\n selectedRow.changes = rowData;\n if (this.frozenRows) {\n var fRowTr = this.getRowsObject()[selectedRow.index];\n this.setFrozenRowData(fRowTr, rowData);\n }\n else {\n this.setFrozenRowData(selectedRow, rowData);\n }\n if (this.aggregates.length > 0) {\n this.notify(events.refreshFooterRenderer, {});\n if (this.groupSettings.columns.length > 0) {\n this.notify(events.groupAggregates, {});\n }\n }\n }\n else {\n return;\n }\n };\n Grid.prototype.setFrozenRowData = function (fTr, rowData) {\n var rowRenderer = new RowRenderer(this.serviceLocator, null, this);\n fTr.changes = rowData;\n refreshForeignData(fTr, this.getForeignKeyColumns(), fTr.changes);\n rowRenderer.refresh(fTr, this.getColumns(), true);\n };\n /**\n * Gets a cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n *\n * @returns {Element} Returns the Element\n */\n Grid.prototype.getCellFromIndex = function (rowIndex, columnIndex) {\n var col = this.getColumnByIndex(columnIndex);\n return getCellByColAndRowIndex(this, col, rowIndex, columnIndex);\n };\n /**\n * Gets a movable table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n *\n * @returns {Element} Returns the Element\n\n */\n Grid.prototype.getMovableCellFromIndex = function (rowIndex, columnIndex) {\n return this.getCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets a frozen right table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} Returns the Element\n\n */\n Grid.prototype.getFrozenRightCellFromIndex = function (rowIndex, columnIndex) {\n return this.getCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets a column header by column index.\n *\n * @param {number} index - Specifies the column index.\n *\n * @returns {Element} Returns the Element\n */\n Grid.prototype.getColumnHeaderByIndex = function (index) {\n return this.getHeaderTable().getElementsByClassName('e-headercell')[parseInt(index.toString(), 10)];\n };\n /**\n * Gets a movable column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n\n */\n Grid.prototype.getMovableColumnHeaderByIndex = function (index) {\n return this.getColumnHeaderByIndex(index);\n };\n /**\n * Gets a frozen right column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n\n */\n Grid.prototype.getFrozenRightColumnHeaderByIndex = function (index) {\n return this.getColumnHeaderByIndex(index);\n };\n /**\n * Gets a frozen left column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n\n */\n Grid.prototype.getFrozenLeftColumnHeaderByIndex = function (index) {\n return this.getColumnHeaderByIndex(index);\n };\n /**\n * @param {string} uid - Defines the uid\n * @param {boolean} isMovable - Defines isMovable\n * @param {boolean} isFrozenRight - Defines isFrozenRight\n * @returns {Row} Returns the row object\n * @hidden\n */\n Grid.prototype.getRowObjectFromUID = function (uid) {\n var rows = this.contentModule.getRows();\n var row = this.rowObject(rows, uid);\n if (isNullOrUndefined(row) && this.enableVirtualization && this.groupSettings.columns.length > 0) {\n row = this.rowObject(this.vRows, uid);\n return row;\n }\n return row;\n };\n Grid.prototype.rowObject = function (rows, uid) {\n if (rows) {\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n if (row.uid === uid) {\n return row;\n }\n }\n }\n return null;\n };\n /**\n * @hidden\n * @returns {Row[]} Returns the Row object\n */\n Grid.prototype.getRowsObject = function () {\n return this.contentModule.getRows();\n };\n /**\n * @hidden\n * @returns {Row[]} Returns the Row object\n\n */\n Grid.prototype.getMovableRowsObject = function () {\n return this.contentModule.getRows();\n };\n /**\n * @hidden\n * @returns {Row[]} Returns the Row object\n\n */\n Grid.prototype.getFrozenRightRowsObject = function () {\n return this.contentModule.getRows();\n };\n /**\n * Gets a column header by column name.\n *\n * @param {string} field - Specifies the column name.\n *\n * @returns {Element} - Returns the element\n */\n Grid.prototype.getColumnHeaderByField = function (field) {\n var column = this.getColumnByField(field);\n return column ? this.getColumnHeaderByUid(column.uid) : undefined;\n };\n /**\n * Gets a column header by UID.\n *\n * @param {string} uid - Specifies the column uid.\n *\n * @returns {Element} - Returns the element\n */\n Grid.prototype.getColumnHeaderByUid = function (uid) {\n var element = this.getHeaderContent().querySelector('[e-mappinguid=' + uid + ']');\n return element ? element.parentElement : undefined;\n };\n /**\n * @hidden\n * @param {number} index - Defines the index\n * @returns {Column} Returns the column\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 *\n * @param {string} field - Specifies the column name.\n *\n * @returns {Column} Returns the column\n */\n Grid.prototype.getColumnByField = function (field) {\n return iterateArrayOrObject(this.getColumns(), function (item) {\n if (item.field === field) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets a column index by column name.\n *\n * @param {string} field - Specifies the column name.\n *\n * @returns {number} Returns the index by field\n */\n Grid.prototype.getColumnIndexByField = function (field) {\n var cols = this.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (cols[parseInt(i.toString(), 10)].field === field) {\n return i;\n }\n }\n return -1;\n };\n /**\n * Gets a column by UID.\n *\n * @param {string} uid - Specifies the column UID.\n *\n * @returns {Column} Returns the column\n */\n Grid.prototype.getColumnByUid = function (uid) {\n return iterateArrayOrObject(this.getColumns().concat(this.getStackedColumns(this.columns)), function (item) {\n if (item.uid === uid) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * @param {Column[]} columns - Defines the columns\n * @param {Column[]} stackedColumn - Defines the stacked columns\n * @returns {Column[]} Returns the columns\n * @hidden\n */\n Grid.prototype.getStackedColumns = function (columns, stackedColumn) {\n if (stackedColumn === void 0) { stackedColumn = []; }\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n if (column.columns) {\n stackedColumn.push(column);\n this.getStackedColumns(column.columns, stackedColumn);\n }\n }\n return stackedColumn;\n };\n /**\n * Gets a column index by UID.\n *\n * @param {string} uid - Specifies the column UID.\n *\n * @returns {number} Returns the column by index\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 return undefined;\n })[0];\n return !isNullOrUndefined(index) ? index : -1;\n };\n /**\n * Gets UID by column name.\n *\n * @param {string} field - Specifies the column name.\n *\n * @returns {string} Returns the column by field\n */\n Grid.prototype.getUidByColumnField = function (field) {\n return iterateArrayOrObject(this.getColumns(), function (item) {\n if (item.field === field) {\n return item.uid;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets column index by column uid value.\n *\n * @private\n * @param {string} uid - Specifies the column uid.\n * @returns {number} Returns the column by field\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 *\n * @private\n * @returns {number} Returns the indent count\n */\n Grid.prototype.getIndentCount = function () {\n var index = 0;\n if (this.allowGrouping) {\n index += this.groupSettings.columns.length;\n }\n if (this.isDetail()) {\n index++;\n }\n if (this.isRowDragable() && 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 return index;\n };\n /**\n * Gets the collection of column fields.\n *\n * @returns {string[]} Returns the Field names\n */\n Grid.prototype.getColumnFieldNames = function () {\n var columnNames = [];\n var column;\n for (var i = 0, len = this.getColumns().length; i < len; i++) {\n column = this.getColumns()[parseInt(i.toString(), 10)];\n if (column.visible) {\n columnNames.push(column.field);\n }\n }\n return columnNames;\n };\n /**\n * Gets a compiled row template.\n *\n * @returns {Function} Returns the row TEmplate\n * @private\n */\n Grid.prototype.getRowTemplate = function () {\n return this.rowTemplateFn;\n };\n /**\n * Gets a compiled empty Record template.\n *\n * @returns {Function} Returns the empty Record template\n * @private\n */\n Grid.prototype.getEmptyRecordTemplate = function () {\n return this.emptyRecordTemplateFn;\n };\n /**\n * Gets a compiled detail row template.\n *\n * @private\n * @returns {Function} Returns the Detail template\n */\n Grid.prototype.getDetailTemplate = function () {\n return this.detailTemplateFn;\n };\n /**\n * Gets a compiled detail row template.\n *\n * @private\n * @returns {Function}Returns the Edit template\n */\n Grid.prototype.getEditTemplate = function () {\n return this.editTemplateFn;\n };\n /**\n * Gets a compiled dialog edit header template.\n *\n * @private\n * @returns {Function} returns template function\n */\n Grid.prototype.getEditHeaderTemplate = function () {\n return this.editHeaderTemplateFn;\n };\n /**\n * Gets a compiled dialog edit footer template.\n *\n * @private\n * @returns {Function} Returns the Footer template\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 *\n * @returns {string[]} Returns the field names\n */\n Grid.prototype.getPrimaryKeyFieldNames = function () {\n var keys = [];\n for (var k = 0; k < this.columnModel.length; k++) {\n if (this.columnModel[parseInt(k.toString(), 10)].isPrimaryKey) {\n keys.push(this.columnModel[parseInt(k.toString(), 10)].field);\n }\n }\n return keys;\n };\n /**\n * Refreshes the Grid header and content.\n *\n * @returns {void}\n */\n Grid.prototype.refresh = function () {\n if (!this.isDestroyed) {\n this.isManualRefresh = true;\n this.headerModule.refreshUI();\n this.updateStackedFilter();\n this.renderModule.refresh();\n }\n };\n /**\n * Refreshes the Grid header.\n *\n * @returns {void}\n */\n Grid.prototype.refreshHeader = function () {\n this.headerModule.refreshUI();\n };\n /**\n * Gets the collection of selected rows.\n *\n * @returns {Element[]} Returns the element\n */\n Grid.prototype.getSelectedRows = function () {\n return this.selectionModule ? this.selectionModule.selectedRecords : [];\n };\n /**\n * Gets the collection of selected row indexes.\n *\n * @returns {number[]} Returns the Selected row indexes\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 *\n * @returns {number[]} Returns the Selected row cell indexes\n */\n Grid.prototype.getSelectedRowCellIndexes = function () {\n return this.selectionModule ? this.selectionModule.selectedRowCellIndexes : [];\n };\n /**\n * Gets the collection of selected records.\n *\n * @returns {Object[]} Returns the selected records\n * @isGenericType true\n */\n Grid.prototype.getSelectedRecords = function () {\n return this.selectionModule ? this.selectionModule.getSelectedRecords() : [];\n };\n /**\n * Gets the collection of selected columns uid.\n *\n * @returns {string[]} Returns the selected column uid\n * @isGenericType true\n */\n Grid.prototype.getSelectedColumnsUid = function () {\n var _this_1 = this;\n var uid = [];\n if (this.selectionModule) {\n this.selectionModule.selectedColumnsIndexes.filter(function (i) { return uid.push(_this_1.getColumns()[parseInt(i.toString(), 10)].uid); });\n }\n return uid;\n };\n /**\n * Gets the data module.\n *\n * @returns {Data} Returns the data\n */\n Grid.prototype.getDataModule = function () {\n return this.renderModule.data;\n };\n /**\n * Shows a column by its column name.\n *\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 *\n * @returns {void}\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 *\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 *\n * @returns {void}\n */\n Grid.prototype.hideColumns = function (keys, hideBy) {\n hideBy = hideBy ? hideBy : 'headerText';\n this.showHider.hide(keys, hideBy);\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen column\n */\n Grid.prototype.getFrozenColumns = function () {\n return this.frozenColumns + this.getFrozenCount(this.columns, 0, 0);\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Right column count\n */\n Grid.prototype.getFrozenRightColumnsCount = function () {\n return this.frozenRightCount || this.rightcount;\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Left column\n */\n Grid.prototype.getFrozenLeftColumnsCount = function () {\n return this.frozenLeftCount || this.leftcount;\n };\n /**\n * @hidden\n * @returns {number} Returns the movable column count\n */\n Grid.prototype.getMovableColumnsCount = function () {\n return this.movableCount || this.movablecount;\n };\n Grid.prototype.updateFrozenColumnsWidth = function () {\n if (this.isFrozenGrid() && !this.enableColumnVirtualization) {\n var gcol = this.getColumns();\n var isAutoWidth = true;\n var autoCol_1 = 0;\n var difference_1 = 0;\n var autoWidth_1 = 0;\n var _loop_2 = function (i) {\n var col = gcol[parseInt(i.toString(), 10)];\n if (isNullOrUndefined(col.width) && (col.freeze === 'Left' || col.freeze === 'Right' || col.freeze === 'Fixed' || col.isFrozen)) {\n col.width = Math.max(200, col.minWidth ? parseFloat(col.minWidth.toString()) : 0);\n }\n if (col.width === 'auto' && (col.freeze === 'Left' || col.freeze === 'Right' || col.freeze === 'Fixed' || col.isFrozen)) {\n var tWidth_1 = 0;\n if (isAutoWidth) {\n gcol.filter(function (cols) {\n if (cols.visible) {\n if (cols.width === 'auto') {\n autoCol_1++;\n }\n if (cols.width !== 'auto') {\n var width = !isNullOrUndefined(cols.width) ? parseFloat(cols.width.toString()) :\n Math.max(200, cols.minWidth ? parseFloat(cols.minWidth.toString()) : 0);\n tWidth_1 += width;\n }\n }\n });\n var gWidth = this_2.isPercentageWidthGrid() || this_2.width === 'auto' ? this_2.element.getBoundingClientRect().width :\n parseFloat(this_2.width.toString());\n difference_1 = this_2.height === 'auto' ? gWidth - tWidth_1 : ((gWidth - tWidth_1) - getScrollBarWidth());\n if (difference_1 < 0) {\n difference_1 = 0;\n }\n autoWidth_1 = parseFloat((difference_1 / autoCol_1).toString());\n gcol.filter(function (col) {\n if (col.visible) {\n if (col.minWidth && parseFloat(col.minWidth.toString()) > autoWidth_1) {\n difference_1 = difference_1 - parseFloat(col.minWidth.toString());\n autoCol_1--;\n }\n }\n });\n isAutoWidth = false;\n }\n if (col.minWidth && parseFloat(col.minWidth.toString()) > autoWidth_1) {\n col.width = parseFloat(col.minWidth.toString());\n }\n else {\n col.width = difference_1 / autoCol_1;\n }\n }\n };\n var this_2 = this;\n for (var i = 0; i < gcol.length; i++) {\n _loop_2(i);\n }\n }\n };\n Grid.prototype.refreshSplitFrozenColumn = function () {\n this.splitFrozenCount(this.columns);\n this.updateFrozenColumnsWidth();\n this.isAutoGenerateColumns = true;\n };\n /**\n * @hidden\n * @returns {void}\n */\n Grid.prototype.setFrozenCount = function () {\n this.frozenLeftCount = this.frozenRightCount = this.movableCount = 0;\n this.visibleFrozenLeft = this.visibleFrozenRight = this.visibleMovable = 0;\n this.frozenLeftColumns = [];\n this.frozenRightColumns = [];\n this.movableColumns = [];\n this.fixedColumns = [];\n this.splitFrozenCount(this.columns);\n this.leftcount = this.frozenLeftCount;\n this.rightcount = this.frozenRightCount;\n this.movablecount = this.movableCount;\n // if (this.frozenColumns && (this.frozenLeftCount || this.frozenRightCount)) {\n // this.setProperties({ frozenColumns: 0 }, true);\n // }\n if (this.frozenLeftCount && !this.frozenRightCount) {\n this.frozenName = 'Left';\n }\n else if (this.frozenRightCount && !this.frozenLeftCount) {\n this.frozenName = 'Right';\n }\n else if (this.frozenLeftCount && this.frozenRightCount) {\n this.frozenName = 'Left-Right';\n }\n else if (this.frozenColumns || this.frozenRows) {\n this.frozenName = 'Left';\n }\n else {\n this.frozenName = undefined;\n }\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen left count\n */\n Grid.prototype.getVisibleFrozenLeftCount = function () {\n return this.visibleFrozenLeft;\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen Right count\n */\n Grid.prototype.getVisibleFrozenRightCount = function () {\n return this.visibleFrozenRight;\n };\n /**\n * @hidden\n * @returns {number} Returns the visible movable count\n */\n Grid.prototype.getVisibleMovableCount = function () {\n return this.visibleMovable;\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n Grid.prototype.getFrozenRightColumns = function () {\n return this.frozenRightColumns;\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n Grid.prototype.getFrozenLeftColumns = function () {\n return this.frozenLeftColumns;\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n Grid.prototype.getMovableColumns = function () {\n return this.movableColumns;\n };\n Grid.prototype.splitStackedColumns = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].columns) {\n this.splitStackedColumns(columns[parseInt(i.toString(), 10)].columns);\n }\n else {\n if (columns[parseInt(i.toString(), 10)].freeze === 'Left' || columns[parseInt(i.toString(), 10)].isFrozen) {\n if (columns[parseInt(i.toString(), 10)].visible !== false) {\n this.visibleFrozenLeft++;\n }\n this.leftcount++;\n }\n else if (columns[parseInt(i.toString(), 10)].freeze === 'Right') {\n if (columns[parseInt(i.toString(), 10)].visible !== false) {\n this.visibleFrozenRight++;\n }\n this.rightcount++;\n }\n else if (columns[parseInt(i.toString(), 10)].freeze === 'Fixed') {\n if (columns[parseInt(i.toString(), 10)].visible !== false) {\n this.visibleFrozenFixed++;\n }\n this.fixedcount++;\n }\n else {\n if (columns[parseInt(i.toString(), 10)].visible !== false) {\n this.visibleMovable++;\n }\n this.movablecount++;\n }\n }\n }\n };\n Grid.prototype.pushStackedColumns = function (columns, index, arr, col, stackedcol) {\n arr[parseInt(index.toString(), 10)] = col.headerText;\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].columns) {\n index = index + 1;\n this.pushStackedColumns(columns[parseInt(i.toString(), 10)].columns, index, arr, columns[parseInt(i.toString(), 10)], stackedcol);\n index = index - 1;\n }\n else {\n var stockCol = [];\n stockCol = arr.slice().slice(0, index + 1);\n if (columns[parseInt(i.toString(), 10)].freeze === 'Left' || columns[parseInt(i.toString(), 10)].isFrozen) {\n this.stackedLeft.push(stockCol);\n this.stackedarrayLeft.push(columns[parseInt(i.toString(), 10)]);\n }\n else if (columns[parseInt(i.toString(), 10)].freeze === 'Right') {\n this.stackedRight.push(stockCol);\n this.stackedarrayRight.push(columns[parseInt(i.toString(), 10)]);\n }\n else if (columns[parseInt(i.toString(), 10)].freeze === 'Fixed') {\n this.stackedFixed.push(stockCol);\n this.stackedarrayFixed.push(columns[parseInt(i.toString(), 10)]);\n }\n else {\n this.stackedMovable.push(stockCol);\n this.stackedarrayMovable.push(columns[parseInt(i.toString(), 10)]);\n }\n }\n }\n };\n Grid.prototype.pushallcol = function (text, text1, col, columns, isTrue) {\n if (col.headerText === text1) {\n if (isTrue) {\n col.columns.push(columns);\n }\n else {\n col.columns.push({ headerText: text, columns: [] });\n }\n }\n else {\n if (col.columns && col.columns.length) {\n for (var i = 0; i < col.columns.length; i++) {\n this.pushallcol(text, text1, col.columns[parseInt(i.toString(), 10)], columns, isTrue);\n }\n }\n }\n };\n Grid.prototype.resetStackedColumns = function (headercol, gridcolumns, freeze) {\n var col = {};\n var tempHead = [];\n for (var i = 1; i <= headercol.length; i++) {\n var firstcol = headercol[i - 1];\n for (var j = 0; j < firstcol.length; j++) {\n if (!col.columns && i === 1) {\n col = { headerText: firstcol[parseInt(j.toString(), 10)], columns: [] };\n tempHead.push(firstcol[parseInt(j.toString(), 10)]);\n }\n else {\n if (tempHead.indexOf(firstcol[parseInt(j.toString(), 10)]) === -1) {\n this.pushallcol(firstcol[parseInt(j.toString(), 10)], firstcol[j - 1], col);\n tempHead.push(firstcol[parseInt(j.toString(), 10)]);\n }\n }\n if (j === firstcol.length - 1) {\n this.pushallcol(null, firstcol[parseInt(j.toString(), 10)], col, gridcolumns[i - 1], true);\n var count = 0;\n while (count !== headercol.length - 1 && i !== headercol.length) {\n if (firstcol.toString() === headercol[parseInt(i.toString(), 10)].toString()) {\n i++;\n this.pushallcol(null, firstcol[parseInt(j.toString(), 10)], col, gridcolumns[i - 1], true);\n }\n count++;\n }\n }\n }\n }\n if (freeze === 'Left') {\n this.frozenLeftColumns.push(col);\n }\n else if (freeze === 'Right') {\n this.frozenRightColumns.push(col);\n }\n else {\n this.movableColumns.push(col);\n }\n };\n Grid.prototype.splitFrozenCount = function (columns) {\n if (this.frozenColumns || (this.changedProperties && this.changedProperties.frozenColumns === 0)) {\n var cols = !this.enableColumnVirtualization || (this.enableColumnVirtualization && this.isPreparedFrozenColumns) ?\n this.enableColumnVirtualization && this.columnModel && this.columnModel.length ? this.columnModel :\n this.getColumns() : this.columns;\n if (!this.changedProperties || (this.changedProperties && !this.changedProperties.frozenColumns)) {\n for (var i = 0; i < cols.length; i++) {\n if (this.frozenColumns > i) {\n cols[parseInt(i.toString(), 10)].freeze = 'Left';\n }\n else if (cols[parseInt(i.toString(), 10)].freeze === 'Right' || cols[parseInt(i.toString(), 10)].freeze === 'Fixed') {\n cols[parseInt(i.toString(), 10)].freeze = cols[parseInt(i.toString(), 10)].freeze;\n }\n else {\n cols[parseInt(i.toString(), 10)].freeze = undefined;\n }\n }\n }\n }\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].columns) {\n this.leftcount = 0;\n this.rightcount = 0;\n this.movablecount = 0;\n this.fixedcount = 0;\n var arr = [];\n this.splitStackedColumns(columns[parseInt(i.toString(), 10)].columns);\n if (this.leftcount && !this.rightcount && !this.movablecount && !this.fixedcount) {\n this.frozenLeftCount += this.leftcount;\n this.frozenLeftColumns.push(columns[parseInt(i.toString(), 10)]);\n }\n else if (this.rightcount && !this.leftcount && !this.movablecount && !this.fixedcount) {\n this.frozenRightCount += this.rightcount;\n this.frozenRightColumns.push(columns[parseInt(i.toString(), 10)]);\n }\n else if (this.movablecount && !this.leftcount && !this.rightcount && !this.fixedcount) {\n this.movableCount += this.movablecount;\n this.movableColumns.push(columns[parseInt(i.toString(), 10)]);\n }\n else if (this.fixedcount && !this.leftcount && !this.rightcount && !this.movablecount) {\n this.fixedCount += this.fixedcount;\n this.fixedColumns.push(columns[parseInt(i.toString(), 10)]);\n this.movableCount += this.movablecount;\n this.movableColumns.push(columns[parseInt(i.toString(), 10)]);\n }\n else {\n this.frozenLeftCount += this.leftcount;\n this.frozenRightCount += this.rightcount;\n this.movableCount += this.movablecount;\n this.fixedCount += this.fixedcount;\n this.leftcount = 0;\n this.rightcount = 0;\n this.movablecount = 0;\n this.fixedcount = 0;\n this.stackedLeft = [];\n this.stackedRight = [];\n this.stackedFixed = [];\n this.stackedMovable = [];\n this.stackedarrayLeft = [];\n this.stackedarrayRight = [];\n this.stackedarrayFixed = [];\n this.stackedarrayMovable = [];\n this.pushStackedColumns(columns[parseInt(i.toString(), 10)].columns, 0, arr, columns[parseInt(i.toString(), 10)], { headerText: columns[parseInt(i.toString(), 10)].headerText, columns: [] });\n if (this.stackedarrayLeft.length) {\n this.resetStackedColumns(this.stackedLeft, this.stackedarrayLeft, 'Left');\n }\n if (this.stackedarrayRight.length) {\n this.resetStackedColumns(this.stackedRight, this.stackedarrayRight, 'Right');\n }\n if (this.stackedarrayFixed.length) {\n this.resetStackedColumns(this.stackedFixed, this.stackedarrayFixed, 'Fixed');\n }\n if (this.stackedarrayMovable.length) {\n this.resetStackedColumns(this.stackedMovable, this.stackedarrayMovable, 'Movable');\n }\n this.stackedLeft = [];\n this.stackedRight = [];\n this.stackedMovable = [];\n this.stackedFixed = [];\n this.stackedarrayLeft = [];\n this.stackedarrayRight = [];\n this.stackedarrayMovable = [];\n this.stackedarrayFixed = [];\n }\n }\n else {\n if (columns[parseInt(i.toString(), 10)].freeze === 'Right') {\n if (columns[parseInt(i.toString(), 10)].visible !== false) {\n this.visibleFrozenRight++;\n }\n this.frozenRightColumns.push(columns[parseInt(i.toString(), 10)]);\n this.frozenRightCount++;\n }\n else if (columns[parseInt(i.toString(), 10)].freeze === 'Left' || columns[parseInt(i.toString(), 10)].isFrozen) {\n if (columns[parseInt(i.toString(), 10)].visible !== false) {\n this.visibleFrozenLeft++;\n }\n this.frozenLeftColumns.push(columns[parseInt(i.toString(), 10)]);\n this.frozenLeftCount++;\n }\n else if (columns[parseInt(i.toString(), 10)].freeze === 'Fixed') {\n this.fixedColumns.push(columns[parseInt(i.toString(), 10)]);\n this.fixedCount++;\n this.movableColumns.push(columns[parseInt(i.toString(), 10)]);\n this.movableCount++;\n }\n else {\n if (columns[parseInt(i.toString(), 10)].visible !== false) {\n this.visibleMovable++;\n }\n this.movableColumns.push(columns[parseInt(i.toString(), 10)]);\n this.movableCount++;\n }\n }\n }\n if (this.frozenLeftColumns.length) {\n var cols = this.frozenLeftColumns[this.frozenLeftColumns.length - 1];\n this.removeBorder(this.frozenLeftColumns);\n this.frozenLeftBorderColumns(cols instanceof Column ? this.lastVisibleLeftCol(this.frozenLeftColumns) : cols);\n }\n if (this.frozenRightColumns.length) {\n var cols = this.frozenRightColumns[0];\n this.removeBorder(this.frozenRightColumns);\n this.frozenRightBorderColumns(cols instanceof Column ? this.firstVisibleRightCol(this.frozenRightColumns) : cols);\n }\n if ((this.frozenLeftColumns.length || this.frozenRightColumns.length) && this.freezeColumnRefresh) {\n var cols = (this.frozenLeftColumns.concat(this.movableColumns)).concat(this.frozenRightColumns);\n this.setProperties({ columns: cols }, true);\n this.freezeColumnRefresh = false;\n }\n };\n Grid.prototype.removeBorder = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].columns && columns[parseInt(i.toString(), 10)].columns.length) {\n if (columns[parseInt(i.toString(), 10)].border === 'Right' ||\n columns[parseInt(i.toString(), 10)].border === 'Left') {\n columns[parseInt(i.toString(), 10)].border = undefined;\n }\n this.removeBorder(columns[parseInt(i.toString(), 10)].columns);\n }\n else {\n if (columns[parseInt(i.toString(), 10)].border === 'Right' ||\n columns[parseInt(i.toString(), 10)].border === 'Left') {\n columns[parseInt(i.toString(), 10)].border = undefined;\n }\n }\n }\n };\n Grid.prototype.isVisibleColumns = function (column, arr) {\n if (column.columns && column.columns.length) {\n for (var i = 0; i < column.columns.length; i++) {\n this.isVisibleColumns(column.columns[parseInt(i.toString(), 10)], arr);\n if (column.columns[parseInt(i.toString(), 10)].visible &&\n isNullOrUndefined(column.columns[parseInt(i.toString(), 10)].columns) &&\n (!isNullOrUndefined(column.columns[parseInt(i.toString(), 10)].freeze) ||\n column.columns[parseInt(i.toString(), 10)].isFrozen)) {\n arr.push('true');\n }\n }\n }\n else {\n if (column.visible && (!isNullOrUndefined(column.freeze) || column.isFrozen)) {\n arr.push('true');\n }\n }\n };\n Grid.prototype.lastVisibleLeftCol = function (columns) {\n var column;\n for (var i = columns.length - 1; i >= 0; i--) {\n var arr = [];\n this.isVisibleColumns(columns[parseInt(i.toString(), 10)], arr);\n if (columns[parseInt(i.toString(), 10)].visible && arr.indexOf('true') !== -1) {\n column = columns[parseInt(i.toString(), 10)];\n break;\n }\n }\n return column;\n };\n Grid.prototype.firstVisibleRightCol = function (columns) {\n var column;\n for (var i = 0; i < columns.length; i++) {\n var arr = [];\n this.isVisibleColumns(columns[parseInt(i.toString(), 10)], arr);\n if (columns[parseInt(i.toString(), 10)].visible && arr.indexOf('true') !== -1) {\n column = columns[parseInt(i.toString(), 10)];\n break;\n }\n }\n return column;\n };\n Grid.prototype.frozenLeftBorderColumns = function (columns) {\n if (isNullOrUndefined(columns)) {\n return;\n }\n if (columns.columns && columns.columns.length) {\n columns.border = 'Left';\n var cols = columns.columns[columns.columns.length - 1];\n this.frozenLeftBorderColumns(cols instanceof Column && cols.columns ? this.lastVisibleLeftCol(columns.columns) : cols);\n }\n else {\n columns.border = 'Left';\n }\n };\n Grid.prototype.frozenRightBorderColumns = function (columns) {\n if (isNullOrUndefined(columns)) {\n return;\n }\n if (columns.columns && columns.columns.length) {\n columns.border = 'Right';\n var cols = columns.columns[0];\n this.frozenRightBorderColumns(cols instanceof Column && cols.columns ? this.firstVisibleRightCol(columns.columns) : cols);\n }\n else {\n columns.border = 'Right';\n }\n };\n /**\n * @hidden\n * @returns {number} Returns the visible frozen columns count\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 *\n * @returns {FilterUI} Returns the filter UI\n */\n Grid.prototype.getFilterUIInfo = function () {\n return this.filterModule ? this.filterModule.getFilterUIInfo() : {};\n };\n Grid.prototype.getVisibleFrozenColumnsCount = function () {\n var visibleFrozenColumns = 0;\n var columns = this.columnModel;\n for (var i = 0; i < this.frozenColumns; i++) {\n if (columns[parseInt(i.toString(), 10)].visible) {\n visibleFrozenColumns++;\n }\n }\n if ((this.frozenLeftCount || this.leftcount) || (this.frozenRightCount || this.rightcount)) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].visible && (columns[parseInt(i.toString(), 10)].freeze === 'Left'\n || columns[parseInt(i.toString(), 10)].freeze === 'Right')) {\n visibleFrozenColumns++;\n }\n }\n }\n return visibleFrozenColumns;\n };\n Grid.prototype.getVisibleFrozenCount = function (cols, cnt) {\n if ((!this.frozenLeftCount && !this.leftcount) && (!this.frozenRightCount || !this.rightcount)) {\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[parseInt(i.toString(), 10)].columns) {\n cnt = this.getVisibleFrozenCount(cols[parseInt(i.toString(), 10)].columns, cnt);\n }\n else {\n if (cols[parseInt(i.toString(), 10)].isFrozen && cols[parseInt(i.toString(), 10)].visible) {\n cnt++;\n }\n }\n }\n }\n return cnt;\n };\n Grid.prototype.getFrozenCount = function (cols, cnt, index) {\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[parseInt(i.toString(), 10)].columns) {\n cnt = this.getFrozenCount(cols[parseInt(i.toString(), 10)].columns, cnt, index);\n }\n else {\n if (cols[parseInt(i.toString(), 10)].isFrozen && index > this.frozenColumns - 1) {\n cnt++;\n }\n index++;\n }\n }\n return cnt;\n };\n /**\n * Navigates to the specified target page.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n *\n * @returns {void}\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 *\n * @param {string} message - Defines the message to update.\n *\n * @returns {void}\n */\n Grid.prototype.updateExternalMessage = function (message) {\n if (this.pagerModule && !this.pagerTemplate) {\n this.pagerModule.updateExternalMessage(message);\n }\n };\n /**\n * Sorts a column with the given options.\n *\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 *\n * @returns {void}\n */\n Grid.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n if (this.sortModule) {\n this.sortModule.sortColumn(columnName, direction, isMultiSort);\n }\n };\n /**\n * Remove the existing columns along with the grid actions like sorting, filtering, searching, grouping, aggregate, etc., and grid will refresh with new columns based on the updated new data source.\n * > * If no columns are specified while changing the data source, then the columns are auto generated in the Grid based on the list of columns in the updated data source.\n *\n * @param {Object | DataManager | DataResult} dataSource - Assign the new datasource.\n * @param {Column[] | string[] | ColumnModel[]} columns - Defines columns.\n * @returns {void}\n *\n *\n * ```typescript\n * \n *
\n * \n * ```\n *\n */\n Grid.prototype.changeDataSource = function (dataSource, columns) {\n this.isChangeDataSourceCall = true;\n this.setProperties({ sortSettings: { columns: [] } }, true);\n this.setProperties({ filterSettings: { columns: [] } }, true);\n this.setProperties({ searchSettings: { key: '' } }, true);\n if (this.allowGrouping) {\n this.setProperties({ groupSettings: { columns: [] } }, true);\n }\n if (columns && columns.length) {\n this.setProperties({ columns: columns }, true);\n }\n if (dataSource) {\n if (isNullOrUndefined(columns)) {\n this.setProperties({ columns: [] }, true);\n }\n this.setProperties({ dataSource: dataSource }, true);\n }\n this.freezeRefresh();\n this.isChangeDataSourceCall = false;\n };\n /**\n * Clears all the sorted columns of the Grid.\n *\n * @returns {void}\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 *\n * @param {string} field - Defines the column field name to remove sort.\n * @returns {void}\n * @hidden\n */\n Grid.prototype.removeSortColumn = function (field) {\n if (this.sortModule) {\n this.sortModule.removeSortColumn(field);\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n Grid.prototype.clearGridActions = function () {\n this.setProperties({ sortSettings: { columns: [] } }, true);\n this.setProperties({ filterSettings: { columns: [] } }, true);\n this.setProperties({ searchSettings: { key: '' } }, true);\n if (this.allowGrouping) {\n this.setProperties({ groupSettings: { columns: [] } }, false);\n }\n else {\n this.freezeRefresh();\n }\n };\n /**\n * Filters grid row by column name with the given options.\n *\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 *\n * @returns {void}\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 *\n * @param {string[]} fields - Defines the Fields\n * @returns {void}\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 *\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 * @returns {void}\n * @hidden\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 *\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n *\n * @returns {void}\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 *\n * @param {number[]} rowIndexes - Specifies the row indexes.\n *\n * @returns {void}\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 *\n * @returns {void}\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 *\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n *\n * @returns {void}\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 *\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 *\n * @returns {void}\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 *\n * @param {string} searchString - Defines the key.\n *\n * @returns {void}\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 *\n * @returns {void}\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 *\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 * @returns {void}\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 * {% codeBlock src='grid/startEdit/index.md' %}{% endcodeBlock %}\n *\n * @returns {void}\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 * @returns {void}\n */\n Grid.prototype.endEdit = function () {\n if (this.editModule) {\n this.editModule.endEdit();\n }\n };\n /**\n * Cancels edited state.\n *\n * @returns {void}\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 *\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added\n * @returns {void}\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 *\n * @param {HTMLTableRowElement} tr - Defines the table row element.\n * @returns {void}\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 *\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 * @returns {void}\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 * @returns {void}\n * {% codeBlock src='grid/saveCell/index.md' %}{% endcodeBlock %}\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 *\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 * @returns {void}\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 *\n * {% codeBlock src='grid/updateRow/index.md' %}{% endcodeBlock %}\n *\n * @param {number} index Defines the row index.\n * @param {Object} data Defines the data object to be updated.\n *\n * @returns {void}\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 *\n * @returns {Object} Returns the batch changes\n */\n Grid.prototype.getBatchChanges = function () {\n if (this.editModule) {\n return this.editModule.getBatchChanges();\n }\n return {};\n };\n /**\n * Enables or disables ToolBar items.\n *\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 *\n * @returns {void}\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 *\n * @param {boolean} withHeader - Specifies whether the column header text needs to be copied along with rows or cells.\n * @returns {void}\n */\n Grid.prototype.copy = function (withHeader) {\n if (this.clipboardModule) {\n this.clipboardModule.copy(withHeader);\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n Grid.prototype.recalcIndentWidth = function () {\n var _this_1 = this;\n if (!this.getHeaderTable().querySelector('.e-emptycell')) {\n return;\n }\n if ((!this.groupSettings.columns.length && !this.isDetail() && !this.isRowDragable()) ||\n this.getHeaderTable().querySelector('.e-emptycell').getAttribute('indentRefreshed') ||\n !this.getContentTable()) {\n return;\n }\n var indentWidth = this.getHeaderTable().querySelector('.e-emptycell').parentElement.offsetWidth;\n var headerCol = [].slice.call(this.getHeaderTable().querySelector(literals.colGroup).childNodes);\n var contentCol = [].slice.call(this.getContentTable().querySelector(literals.colGroup).childNodes);\n var perPixel = indentWidth / 30;\n var i = this.getFrozenMode() === 'Right' ? this.groupSettings.columns.length + this.getColumns().length : 0;\n var parentOffset = this.element.offsetWidth;\n var applyWidth = function (index, width) {\n if (ispercentageWidth(_this_1)) {\n var newWidth = (width / parentOffset * 100).toFixed(1) + '%';\n headerCol[parseInt(index.toString(), 10)].style.width = newWidth;\n contentCol[parseInt(index.toString(), 10)].style.width = newWidth;\n }\n else {\n headerCol[parseInt(index.toString(), 10)].style.width = width + 'px';\n contentCol[parseInt(index.toString(), 10)].style.width = width + 'px';\n }\n _this_1.notify(events.columnWidthChanged, { index: index, width: width });\n };\n if (perPixel >= 1) {\n indentWidth = (30 / perPixel);\n }\n if (indentWidth < 1) {\n indentWidth = 1;\n }\n if (this.enableColumnVirtualization || this.isAutoGen || (this.columns.length === this.groupSettings.columns.length)) {\n indentWidth = 30;\n }\n while (i < this.groupSettings.columns.length) {\n applyWidth(i, indentWidth);\n i++;\n }\n if (this.isDetail()) {\n applyWidth(i, indentWidth);\n i++;\n }\n if (this.isRowDragable()) {\n applyWidth(i, indentWidth);\n }\n this.isAutoGen = false;\n this.getHeaderTable().querySelector('.e-emptycell').setAttribute('indentRefreshed', 'true');\n };\n /**\n * @hidden\n * @returns {void}\n */\n Grid.prototype.resetIndentWidth = function () {\n if (ispercentageWidth(this)) {\n this.getHeaderTable().querySelector('.e-emptycell').removeAttribute('indentRefreshed');\n this.widthService.setWidthToColumns();\n this.recalcIndentWidth();\n if (this.autoFit) {\n this.preventAdjustColumns();\n }\n }\n if ((this.width === 'auto' || typeof (this.width) === 'string' && this.width.indexOf('%') !== -1)\n && this.getColumns().filter(function (col) { return (!col.width || col.width === 'auto') && col.minWidth; }).length > 0) {\n var tgridWidth = this.widthService.getTableWidth(this.getColumns());\n this.widthService.setMinwidthBycalculation(tgridWidth);\n }\n if (this.isFrozenGrid() && this.enableColumnVirtualization && this.widthService) {\n this.widthService.refreshFrozenScrollbar();\n }\n if (this.allowTextWrap && this.textWrapSettings.wrapMode !== 'Content') {\n this.notify(events.refreshHandlers, {});\n }\n if (this.frozenRows && this.scrollModule) {\n this.scrollModule.resizeFrozenRowBorder();\n }\n };\n /**\n * @hidden\n * @returns {boolean} Returns isRowDragable\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 *\n * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n *\n * @returns {void}\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 *\n * @param {number} fromIndex - Defines the origin field index.\n * @param {number} toIndex - Defines the destination field index.\n *\n * @returns {void}\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 *\n * @param {string} fieldName - Defines the field name.\n * @param {number} toIndex - Defines the destination field index.\n *\n * @returns {void}\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 *\n * @param {number} fromIndexes - Defines the origin Indexes.\n * @param {number} toIndex - Defines the destination Index.\n *\n * @returns {void}\n */\n Grid.prototype.reorderRows = function (fromIndexes, toIndex) {\n if (this.rowDragAndDropModule) {\n this.rowDragAndDropModule.reorderRows(fromIndexes, toIndex);\n }\n };\n /**\n * @param {ReturnType} e - Defines the Return type\n * @returns {void}\n * @hidden\n */\n Grid.prototype.refreshDataSource = function (e) {\n this.notify('refreshdataSource', e);\n };\n /**\n * @param {boolean} enable -Defines the enable\n * @returns {void}\n * @hidden\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(literals.colGroup).childNodes[0], { 'display': disValue });\n setStyleAttribute(contentTable.querySelector(literals.colGroup).childNodes[0], { 'display': disValue });\n for (var i = 0; i < this.getRows().length; i++) {\n var ele = rows[parseInt(i.toString(), 10)].firstElementChild;\n if (enable) {\n addClass([ele], 'e-hide');\n }\n else {\n 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[parseInt(j.toString(), 10)];\n if (enable) {\n addClass([ele], 'e-hide');\n }\n else {\n removeClass([ele], ['e-hide']);\n }\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 *\n * @param {string |string[]} fieldNames - Defines the column names.\n * @returns {void}\n *\n *\n * ```typescript\n *
\n * \n * ```\n *\n */\n Grid.prototype.autoFitColumns = function (fieldNames) {\n if (this.resizeModule) {\n this.resizeModule.autoFitColumns(fieldNames);\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Grid.prototype.preventAdjustColumns = function () {\n if ((this.enableAdaptiveUI && this.rowRenderingMode === 'Vertical')\n || (this.allowResizing && this.resizeSettings.mode === 'Auto')) {\n return;\n }\n var columns = this.getColumns();\n var headerTable = this.getHeaderTable();\n var tableWidth = 0;\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].visible) {\n if (this.groupSettings.columns.length\n && this.groupSettings.columns.indexOf(columns[parseInt(i.toString(), 10)].field) > -1) {\n var headerCol = [].slice.call(headerTable.querySelector('colgroup')\n .querySelectorAll(':not(.e-group-intent):not(.e-detail-intent):not(.e-drag-intent)'));\n if (headerCol[parseInt(i.toString(), 10)].style.display === 'none') {\n continue;\n }\n }\n if (columns[parseInt(i.toString(), 10)].width) {\n tableWidth += parseFloat(columns[parseInt(i.toString(), 10)].width.toString());\n }\n else {\n tableWidth = 0;\n break;\n }\n }\n }\n if (tableWidth) {\n var percentageWidth = this.isPercentageWidthGrid();\n var unit = this.widthUnit(percentageWidth);\n var contentTable = this.getContentTable();\n if (this.groupSettings.columns.length || this.isDetail() || this.isRowDragable()) {\n var indentWidth = this.defaultIndentWidth(percentageWidth);\n var indentWidthUnitFormat = indentWidth.toString() + unit;\n var headerIndentCol = [].slice.call(headerTable.querySelector('colgroup')\n .querySelectorAll('.e-group-intent, .e-detail-intent, .e-drag-intent'));\n var contentIndentCol = [].slice.call(contentTable.querySelector('colgroup')\n .querySelectorAll('.e-group-intent, .e-detail-intent, .e-drag-intent'));\n for (var i = 0; i < headerIndentCol.length; i++) {\n headerIndentCol[parseInt(i.toString(), 10)].style.setProperty('width', indentWidthUnitFormat);\n contentIndentCol[parseInt(i.toString(), 10)].style.setProperty('width', indentWidthUnitFormat);\n tableWidth += indentWidth;\n }\n }\n if ((percentageWidth && tableWidth < 100)\n || (!percentageWidth && tableWidth < contentTable.parentElement.clientWidth)) {\n if (!isNullOrUndefined(contentTable.querySelector('.e-emptyrow'))) {\n addClass([headerTable], ['e-tableborder']);\n removeClass([contentTable], ['e-tableborder']);\n }\n else {\n addClass([headerTable, contentTable], ['e-tableborder']);\n }\n }\n var tableWidthUnitFormat = tableWidth.toString() + unit;\n headerTable.style.setProperty('width', tableWidthUnitFormat);\n contentTable.style.setProperty('width', tableWidthUnitFormat);\n }\n else {\n this.restoreAdjustColumns();\n }\n };\n Grid.prototype.restoreAdjustColumns = function () {\n if ((this.enableAdaptiveUI && this.rowRenderingMode === 'Vertical')\n || (this.allowResizing && this.resizeSettings.mode === 'Auto')) {\n return;\n }\n var headerTable = this.getHeaderTable();\n var contentTable = this.getContentTable();\n removeClass([headerTable, contentTable], ['e-tableborder']);\n headerTable.style.removeProperty('width');\n contentTable.style.removeProperty('width');\n if (this.groupSettings.columns.length || this.isDetail() || this.isRowDragable()) {\n var percentageWidth = this.isPercentageWidthGrid();\n var indentWidthUnitFormat_1 = this.defaultIndentWidth(percentageWidth).toString() + this.widthUnit(percentageWidth);\n var headerIndentCol = [].slice.call(headerTable.querySelector('colgroup')\n .querySelectorAll('.e-group-intent, .e-detail-intent, .e-drag-intent'));\n headerIndentCol.forEach(function (element) {\n element.style.setProperty('width', indentWidthUnitFormat_1);\n });\n headerTable.querySelector('.e-emptycell').removeAttribute('indentRefreshed');\n this.recalcIndentWidth();\n }\n };\n Grid.prototype.widthUnit = function (percentageWidth) {\n return percentageWidth ? '%' : 'px';\n };\n Grid.prototype.defaultIndentWidth = function (percentageWidth) {\n return percentageWidth ? parseFloat((30 / this.element.offsetWidth * 100).toFixed(1)) : 30;\n };\n Grid.prototype.isPercentageWidthGrid = function () {\n return this.getColumns()[0].width.toString().indexOf('%') > -1;\n };\n /**\n * @param {number} x - Defines the number\n * @param {number} y - Defines the number\n * @param {Element} target - Defines the Element\n * @returns {void}\n * @hidden\n */\n Grid.prototype.createColumnchooser = function (x, y, target) {\n if (this.columnChooserModule) {\n this.columnChooserModule.renderColumnChooser(x, y, target);\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 Grid.prototype.processModel = function () {\n var gCols = this.groupSettings.columns;\n var sCols = this.sortSettings.columns;\n var flag;\n var j;\n if (this.allowGrouping) {\n var _loop_3 = function (i, len) {\n j = 0;\n for (var sLen = sCols.length; j < sLen; j++) {\n if (sCols[parseInt(j.toString(), 10)].field === gCols[parseInt(i.toString(), 10)]) {\n flag = true;\n break;\n }\n }\n if (!flag) {\n sCols.push({ field: gCols[parseInt(i.toString(), 10)], direction: 'Ascending', isFromGroup: true });\n }\n else {\n if (this_3.allowSorting) {\n this_3.sortedColumns.push(sCols[parseInt(j.toString(), 10)].field);\n }\n else {\n sCols[parseInt(j.toString(), 10)].direction = 'Ascending';\n }\n }\n if (!this_3.groupSettings.showGroupedColumn) {\n var column = this_3.enableColumnVirtualization ?\n this_3.columns.filter(function (c) { return c.field === gCols[parseInt(i.toString(), 10)]; })[0]\n : this_3.getColumnByField(gCols[parseInt(i.toString(), 10)]);\n if (column) {\n column.visible = false;\n }\n else {\n this_3.log('initial_action', { moduleName: 'group', columnName: gCols[parseInt(i.toString(), 10)] });\n }\n }\n };\n var this_3 = this;\n for (var i = 0, len = gCols.length; i < len; i++) {\n _loop_3(i, len);\n }\n }\n if (!gCols.length) {\n for (var i = 0; i < sCols.length; i++) {\n this.sortedColumns.push(sCols[parseInt(i.toString(), 10)].field);\n }\n }\n this.rowTemplateFn = templateCompiler(this.rowTemplate);\n this.emptyRecordTemplateFn = templateCompiler(this.emptyRecordTemplate);\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 if (!isNullOrUndefined(this.parentDetails)) {\n var value = isNullOrUndefined(this.parentDetails.parentKeyFieldValue) ? 'undefined' :\n this.parentDetails.parentKeyFieldValue;\n this.query.where(this.queryString, 'equal', value, true);\n }\n this.initForeignColumn();\n };\n Grid.prototype.initForeignColumn = function () {\n if (this.isForeignKeyEnabled(this.getColumns())) {\n this.notify(events.initForeignKeyColumn, this.getForeignKeyColumns());\n }\n };\n Grid.prototype.enableVerticalRendering = function () {\n if (this.rowRenderingMode === 'Vertical') {\n this.element.classList.add('e-row-responsive');\n }\n else {\n this.element.classList.remove('e-row-responsive');\n }\n };\n Grid.prototype.gridRender = function () {\n var _a;\n this.updateRTL();\n if (this.rowRenderingMode === 'Vertical') {\n this.element.classList.add('e-row-responsive');\n }\n if (this.enableHover) {\n this.element.classList.add('e-gridhover');\n }\n if (Browser.isDevice) {\n this.element.classList.add('e-device');\n }\n if (this.rowHeight) {\n this.element.classList.add('e-grid-min-height');\n }\n if (this.cssClass) {\n if (this.cssClass.indexOf(' ') !== -1) {\n (_a = this.element.classList).add.apply(_a, this.cssClass.split(' '));\n }\n else {\n this.element.classList.add(this.cssClass);\n }\n }\n // If the below if statement is removed, then drag and drop between grids will not work in firefox browser.\n if (this.allowRowDragAndDrop && this.rowDropSettings.targetID && Browser.info.name === 'mozilla') {\n this.element.classList.add('e-disableuserselect');\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, this.serviceLocator);\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 this.enableBoxSelection();\n };\n Grid.prototype.dataReady = function () {\n this.scrollModule.setWidth();\n this.scrollModule.setHeight();\n if (this.height !== 'auto') {\n this.scrollModule.setPadding();\n }\n };\n Grid.prototype.updateRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n Grid.prototype.createGridPopUpElement = function () {\n var popup = this.createElement('div', { className: 'e-gridpopup', styles: 'display:none;' });\n var content = this.createElement('div', { className: literals.content, attrs: { tabIndex: '-1' } });\n append([content, this.createElement('div', { className: 'e-uptail e-tail' })], popup);\n content.appendChild(this.createElement('span'));\n append([content, this.createElement('div', { className: 'e-downtail e-tail' })], popup);\n this.element.appendChild(popup);\n };\n Grid.prototype.updateGridLines = function () {\n classList(this.element, [], ['e-verticallines', 'e-horizontallines', 'e-hidelines', 'e-bothlines']);\n switch (this.gridLines) {\n case 'Horizontal':\n this.element.classList.add('e-horizontallines');\n break;\n case 'Vertical':\n this.element.classList.add('e-verticallines');\n break;\n case 'None':\n this.element.classList.add('e-hidelines');\n break;\n case 'Both':\n this.element.classList.add('e-bothlines');\n break;\n }\n this.updateResizeLines();\n };\n Grid.prototype.updateResizeLines = function () {\n if (this.allowResizing &&\n !(this.gridLines === 'Vertical' || this.gridLines === 'Both')) {\n this.element.classList.add('e-resize-lines');\n }\n else {\n this.element.classList.remove('e-resize-lines');\n }\n };\n /**\n * The function is used to apply text wrap\n *\n * @returns {void}\n * @hidden\n */\n Grid.prototype.applyTextWrap = function () {\n if (this.allowTextWrap) {\n var headerRows = [].slice.call(this.element.getElementsByClassName('e-columnheader'));\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 case 'Content':\n wrap(this.getContent(), true);\n wrap(this.element, false);\n wrap(headerRows, false);\n break;\n default:\n wrap(this.element, true);\n wrap(this.getContent(), false);\n wrap(headerRows, false);\n }\n if (this.textWrapSettings.wrapMode !== 'Content') {\n this.notify(events.refreshHandlers, {});\n }\n }\n };\n /**\n * The function is used to remove text wrap\n *\n * @returns {void}\n * @hidden\n */\n Grid.prototype.removeTextWrap = function () {\n wrap(this.element, false);\n var headerRows = [].slice.call(this.element.getElementsByClassName('e-columnheader'));\n wrap(headerRows, false);\n wrap(this.getContent(), false);\n if (this.textWrapSettings.wrapMode !== 'Content') {\n this.notify(events.refreshHandlers, {});\n }\n };\n /**\n * The function is used to add Tooltip to the grid cell that has ellipsiswithtooltip clip mode.\n *\n * @returns {void}\n * @hidden\n */\n Grid.prototype.createTooltip = function () {\n this.toolTipObj = new Tooltip({\n opensOn: 'custom',\n content: '',\n cssClass: this.cssClass ? this.cssClass : null\n }, this.element);\n };\n /** @hidden\n * @returns {void}\n */\n Grid.prototype.freezeRefresh = function () {\n if (this.enableVirtualization || this.enableInfiniteScrolling) {\n this.pageSettings.currentPage = 1;\n }\n this.componentRefresh();\n };\n Grid.prototype.getTooltipStatus = function (element) {\n var headerTable = this.getHeaderTable();\n var headerDivTag = this.enableAdaptiveUI && this.rowRenderingMode === 'Vertical' ? 'e-gridcontent' : 'e-gridheader';\n var htable = this.createTable(headerTable, headerDivTag, 'header');\n var ctable = this.createTable(headerTable, headerDivTag, 'content');\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 var width = table.querySelector(ele).getBoundingClientRect().width;\n document.body.removeChild(htable);\n document.body.removeChild(ctable);\n if ((width > element.getBoundingClientRect().width && !element.classList.contains('e-editedbatchcell')) ||\n (this.enableAdaptiveUI && this.rowRenderingMode === 'Vertical' &&\n width > (element.getBoundingClientRect().width * 0.55) - (this.height !== 'auto' ? 16 : 0))) {\n return true;\n }\n return false;\n };\n Grid.prototype.mouseMoveHandler = function (e) {\n if (this.isEllipsisTooltip()) {\n var element = parentsUntil(e.target, 'e-ellipsistooltip');\n if (this.prevElement !== element || e.type === 'mouseout') {\n this.toolTipObj.close();\n }\n var tagName = e.target.tagName;\n var elemNames = ['A', 'BUTTON', 'INPUT'];\n if (element && e.type !== 'mouseout' && !(Browser.isDevice && elemNames.indexOf(tagName) !== -1)) {\n if (this.getTooltipStatus(element)) {\n var col = this.getColumns()[parseInt(element.getAttribute(literals.dataColIndex), 10)];\n var domSetter = col.disableHtmlEncode ? 'innerText' : 'innerHTML';\n var contentDiv = this.createElement('div');\n if (element.getElementsByClassName('e-headertext').length) {\n var innerElement = element.getElementsByClassName('e-headertext')[0];\n contentDiv[\"\" + domSetter] = this.sanitize(innerElement.innerText);\n this.toolTipObj.content = contentDiv;\n }\n else {\n contentDiv[\"\" + domSetter] = this.sanitize(element.innerText);\n this.toolTipObj.content = contentDiv;\n }\n this.prevElement = element;\n if (this.enableHtmlSanitizer) {\n this.toolTipObj.enableHtmlSanitizer = true;\n }\n if (col.disableHtmlEncode) {\n this.toolTipObj.enableHtmlParse = false;\n }\n this.toolTipObj['open'](element);\n }\n }\n }\n };\n Grid.prototype.isEllipsisTooltip = function () {\n var cols = this.getColumns();\n if (this.clipMode === 'EllipsisWithTooltip') {\n return true;\n }\n for (var i = 0; i < cols.length; i++) {\n if (cols[parseInt(i.toString(), 10)].clipMode === 'EllipsisWithTooltip') {\n return true;\n }\n }\n return false;\n };\n Grid.prototype.scrollHandler = function () {\n if (this.isEllipsisTooltip()) {\n this.toolTipObj.close();\n }\n };\n /**\n * To create table for ellipsiswithtooltip\n *\n * @param {Element} table - Defines the table\n * @param {string} tag - Defines the tag\n * @param {string} type - Defines the type\n * @returns {HTMLDivElement} Returns the HTML div ELement\n * @hidden\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', { attrs: { role: 'row' } });\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 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 *\n * @hidden\n * @returns {void}\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n EventHandler.add(window, 'resize', this.resetIndentWidth, this);\n if (this.allowKeyboard) {\n this.element.tabIndex = this.element.tabIndex === -1 ? 0 : this.element.tabIndex;\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, 'mouseover', 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 *\n * @hidden\n * @returns {void}\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, 'mouseover', 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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n EventHandler.remove(window, 'resize', this.resetIndentWidth);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Grid.prototype.addListener = function () {\n if (this.isDestroyed) {\n return;\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.on(events.refreshFrozenPosition, this.refreshFrozenPosition, this);\n this.on(events.refreshSplitFrozenColumn, this.refreshSplitFrozenColumn, this);\n this.dataBoundFunction = this.refreshMediaCol.bind(this);\n this.addEventListener(events.dataBound, this.dataBoundFunction);\n this.on(events.keyPressed, this.onKeyPressed, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Grid.prototype.removeListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off(events.dataReady, this.dataReady);\n this.off(events.contentReady, this.recalcIndentWidth);\n this.off(events.headerRefreshed, this.recalcIndentWidth);\n this.on(events.refreshFrozenPosition, this.refreshFrozenPosition, this);\n this.on(events.refreshSplitFrozenColumn, this.refreshSplitFrozenColumn, this);\n this.removeEventListener(events.dataBound, this.dataBoundFunction);\n this.off(events.keyPressed, this.onKeyPressed);\n };\n /**\n * Get current visible data of grid.\n *\n * @returns {Object[]} Returns the current view records\n *\n * @isGenericType true\n */\n Grid.prototype.getCurrentViewRecords = function () {\n if (isGroupAdaptive(this)) {\n return isNullOrUndefined(this.currentViewData.records) ?\n this.currentViewData : this.currentViewData.records;\n }\n if (this.groupSettings.enableLazyLoading) {\n return this.currentViewData;\n }\n return (this.allowGrouping && this.groupSettings.columns.length && this.currentViewData.length\n && this.currentViewData.records) ? this.currentViewData.records\n : this.currentViewData;\n };\n Grid.prototype.mouseClickHandler = function (e) {\n if (this.isChildGrid(e) || (parentsUntil(e.target, 'e-gridpopup') && e.touches) ||\n this.element.getElementsByClassName('e-cloneproperties').length || this.checkEdit(e)) {\n return;\n }\n if (((!this.allowRowDragAndDrop && (parentsUntil(e.target, literals.gridContent) ||\n e.target.tagName === 'TD')) || (!(this.allowGrouping || this.allowReordering) &&\n parentsUntil(e.target, 'e-gridheader'))) && e.touches) {\n return;\n }\n if (parentsUntil(e.target, 'e-gridheader') && this.allowRowDragAndDrop &&\n !(parentsUntil(e.target, 'e-filterbarcell')) && (e.target &&\n ['A', 'BUTTON', 'INPUT'].indexOf(e.target.tagName) === -1)) {\n e.preventDefault();\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 if (tr && tr.getAttribute('data-uid')) {\n var rowObj = this.getRowObjectFromUID(tr.getAttribute('data-uid'));\n isDataRow = rowObj ? rowObj.isDataRow : false;\n }\n if (isDataRow) {\n this.trigger(events.recordClick, args);\n }\n this.notify(events.click, e);\n };\n Grid.prototype.checkEdit = function (e) {\n var tr = parentsUntil(e.target, literals.row);\n var isEdit = this.editSettings.mode !== 'Batch' &&\n this.isEdit && tr && (tr.classList.contains(literals.editedRow) || tr.classList.contains(literals.addedRow));\n return !parentsUntil(e.target, 'e-unboundcelldiv') && (isEdit || (parentsUntil(e.target, literals.rowCell) &&\n parentsUntil(e.target, literals.rowCell).classList.contains('e-editedbatchcell')));\n };\n Grid.prototype.dblClickHandler = function (e) {\n var grid = parentsUntil(e.target, 'e-grid');\n if (isNullOrUndefined(grid) || grid.id !== this.element.id || closest(e.target, '.e-unboundcelldiv')) {\n return;\n }\n var dataRow = false;\n var tr = closest(e.target, 'tr');\n if (tr && tr.getAttribute('data-uid')) {\n var rowObj = this.getRowObjectFromUID(tr.getAttribute('data-uid'));\n dataRow = rowObj ? rowObj.isDataRow : false;\n }\n var args = this.getRowInfo(e.target);\n args.target = e.target;\n if (dataRow) {\n this.trigger(events.recordDoubleClick, args);\n }\n this.notify(events.dblclick, e);\n };\n Grid.prototype.focusOutHandler = function (e) {\n if (this.isChildGrid(e)) {\n return;\n }\n if (!parentsUntil(e.target, 'e-grid')) {\n this.element.querySelector('.e-gridpopup').style.display = 'None';\n }\n var filterClear = this.element.querySelector('.e-cancel:not(.e-hide)');\n if (filterClear && !filterClear.parentElement.classList.contains('e-tbar-btn')) {\n filterClear.classList.add('e-hide');\n }\n var relatedTarget = e.relatedTarget;\n var ariaOwns = relatedTarget ? relatedTarget.getAttribute('aria-owns') : null;\n if ((!relatedTarget || (!parentsUntil(relatedTarget, 'e-grid') &&\n (!isNullOrUndefined(ariaOwns) &&\n (ariaOwns)) !== e.target.getAttribute('aria-owns')))\n && !this.keyPress && this.isEdit && !Browser.isDevice) {\n if (this.editSettings.mode === 'Batch' && !(((parentsUntil(relatedTarget, 'e-ddl') || parentsUntil(relatedTarget, 'e-ddt')) &&\n parentsUntil(relatedTarget, 'e-multi-select-list-wrapper')) && parentsUntil(relatedTarget, 'e-input-group'))\n && (parentsUntil(relatedTarget, 'e-uploader') || !(relatedTarget &&\n isNullOrUndefined(parentsUntil(relatedTarget, 'e-input-group'))))) {\n this.editModule.saveCell();\n this.notify(events.editNextValCell, {});\n }\n if (this.editSettings.mode === 'Normal') {\n this.editModule.editFormValidate();\n }\n }\n this.keyPress = false;\n };\n Grid.prototype.isChildGrid = function (e) {\n var gridElement = parentsUntil(e.target, 'e-grid');\n if ((gridElement && gridElement.id !== this.element.id) || (parentsUntil(e.target, 'e-unboundcelldiv') &&\n isNullOrUndefined(gridElement))) {\n return true;\n }\n return false;\n };\n /**\n * @param {Object} persistedData - Defines the persisted data\n * @returns {void}\n * @hidden\n */\n Grid.prototype.mergePersistGridData = function (persistedData) {\n var data = this.getLocalData();\n if (!(isNullOrUndefined(data) || (data === '')) || !isNullOrUndefined(persistedData)) {\n var dataObj = !isNullOrUndefined(persistedData) ? persistedData : JSON.parse(data);\n if (this.enableVirtualization && dataObj.pageSettings) {\n dataObj.pageSettings.currentPage = 1;\n }\n var keys = Object.keys(dataObj);\n this.isProtectedOnChange = true;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if ((typeof this[\"\" + key] === 'object') && !isNullOrUndefined(this[\"\" + key])) {\n if (Array.isArray(this[\"\" + key]) && key === 'columns') {\n this.setFrozenCount();\n setColumnIndex(this[\"\" + key]);\n this.mergeColumns(dataObj[\"\" + key], this[\"\" + key]);\n this.mergedColumns = true;\n this[\"\" + key] = dataObj[\"\" + key];\n }\n else {\n extend(this[\"\" + key], dataObj[\"\" + key]);\n }\n }\n else {\n this[\"\" + key] = dataObj[\"\" + key];\n }\n }\n this.isProtectedOnChange = false;\n }\n };\n Grid.prototype.mergeColumns = function (storedColumn, columns) {\n var storedColumns = storedColumn;\n var isFrozenGrid = this.isFrozenGrid();\n var _loop_4 = function (i) {\n var localCol = columns.filter(function (tCol) { return isFrozenGrid ?\n tCol.index === storedColumns[parseInt(i.toString(), 10)][\"\" + literals.initialFrozenColumnIndex] :\n tCol.index === storedColumns[parseInt(i.toString(), 10)].index; })[0];\n if (!isNullOrUndefined(localCol)) {\n if (isFrozenGrid) {\n localCol = extend({}, localCol, {}, true);\n localCol.freeze = storedColumns[parseInt(i.toString(), 10)].freeze;\n }\n if (localCol.columns && localCol.columns.length) {\n this_4.mergeColumns(storedColumns[parseInt(i.toString(), 10)].columns, localCol.columns);\n storedColumns[parseInt(i.toString(), 10)] = extend(localCol, storedColumns[parseInt(i.toString(), 10)], {}, true);\n }\n else {\n storedColumns[parseInt(i.toString(), 10)] = extend(localCol, storedColumns[parseInt(i.toString(), 10)], {}, true);\n }\n }\n };\n var this_4 = this;\n for (var i = 0; i < storedColumns.length; i++) {\n _loop_4(i);\n }\n };\n /**\n * @hidden\n * @returns {boolean} Returns the isDetail\n */\n Grid.prototype.isDetail = function () {\n return !isNullOrUndefined(this.detailTemplate) || !isNullOrUndefined(this.childGrid);\n };\n Grid.prototype.isCommandColumn = function (columns) {\n var _this_1 = this;\n return columns.some(function (col) {\n if (col.columns) {\n return _this_1.isCommandColumn(col.columns);\n }\n return !!(col.commands || col.commandsTemplate);\n });\n };\n Grid.prototype.isForeignKeyEnabled = function (columns) {\n var _this_1 = this;\n return columns.some(function (col) {\n if (col.columns) {\n return _this_1.isForeignKeyEnabled(col.columns);\n }\n return !!(col.dataSource && col.foreignKeyValue);\n });\n };\n Grid.prototype.keyPressHandler = function (e) {\n var presskey = extend(e, { cancel: false });\n this.trigger('keyPressed', presskey);\n if (presskey.cancel === true) {\n e.stopImmediatePropagation();\n }\n };\n Grid.prototype.keyDownHandler = function (e) {\n if (e.altKey) {\n if (e.keyCode === 74) { //alt j\n if (this.keyA) { //alt A J\n this.notify(events.groupCollapse, { target: e.target, collapse: false });\n this.keyA = false;\n }\n else {\n if (this.focusModule && this.focusModule.currentInfo && this.focusModule.currentInfo.element) {\n removeClass([this.focusModule.currentInfo.element, this.focusModule.currentInfo.elementToFocus], ['e-focused', 'e-focus']);\n this.focusModule.currentInfo.element.tabIndex = -1;\n }\n if (!this.element.classList.contains('e-childgrid')) {\n this.element.focus();\n }\n }\n }\n if (e.keyCode === 87) { //alt w\n var focusModule = this.focusModule;\n if (focusModule) {\n if (!this.currentViewData.length) {\n return;\n }\n focusModule.focusContent();\n focusModule.addOutline();\n }\n }\n if (e.keyCode === 65) { //alt A\n this.keyA = true;\n }\n if (e.keyCode === 72 && this.keyA) { //alt A H\n this.notify(events.groupCollapse, { target: e.target, collapse: true });\n this.keyA = false;\n }\n }\n if (e.keyCode === 13) {\n this.notify(events.enterKeyHandler, e);\n }\n };\n Grid.prototype.keyActionHandler = function (e) {\n if (this.isChildGrid(e) ||\n (this.isEdit && e.action !== 'escape' && e.action !== 'enter' && e.action !== 'shiftEnter'\n && e.action !== 'tab' && e.action !== 'shiftTab')) {\n return;\n }\n else {\n this.keyPress = true;\n }\n if (this.allowKeyboard) {\n if (e.action === 'ctrlPlusP') {\n e.preventDefault();\n this.print();\n }\n this.notify(events.keyPressed, e);\n }\n };\n /**\n * @param {Function[]} modules - Defines the modules\n * @returns {void}\n * @hidden\n */\n Grid.prototype.setInjectedModules = function (modules) {\n this.injectedModules = modules;\n };\n Grid.prototype.updateColumnObject = function () {\n prepareColumns(this.columns, this.enableColumnVirtualization, this);\n setColumnIndex(this.columns);\n this.initForeignColumn();\n this.notify(events.autoCol, {});\n };\n Grid.prototype.refreshFrozenPosition = function (obj) {\n if (obj && obj.isModeChg) {\n this.refreshColumns();\n this.notify(events.refreshResizePosition, {});\n }\n else {\n this.refreshColumns();\n }\n };\n /**\n * Gets the foreign columns from Grid.\n *\n * @returns {Column[]} Returns Foreign key column\n */\n Grid.prototype.getForeignKeyColumns = function () {\n return this.getColumns().filter(function (col) {\n return col.isForeignColumn();\n });\n };\n /**\n * @hidden\n * @returns {number} Returns row height\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 * @returns {void}\n */\n Grid.prototype.refreshColumns = function () {\n this.freezeColumnRefresh = true;\n this.setFrozenCount();\n this.updateFrozenColumnsWidth();\n if (this.isFrozenGrid()) {\n this.isPreventScrollEvent = true;\n }\n this.updateColumnObject();\n this.checkLockColumns(this.getColumns());\n this.refresh();\n if (this.isFrozenGrid() && this.enableColumnVirtualization) {\n var left = this.getContent().querySelector('.e-movablescrollbar').scrollLeft;\n this.getHeaderContent().querySelector('.' + literals.headerContent).scrollLeft = left;\n this.getContent().querySelector('.' + literals.content).scrollLeft = left;\n }\n };\n /**\n * Export Grid data to Excel file(.xlsx).\n *\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 * @returns {Promise} Returns the excelexport\n */\n Grid.prototype.excelExport = function (excelExportProperties, isMultipleExport, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n workbook, isBlob) {\n if (this.exportGrids && this.exportGrids.length) {\n var gridIds = this.exportGrids.slice();\n return this.exportMultipleExcelGrids(gridIds, excelExportProperties, isMultipleExport, workbook, isBlob);\n }\n else {\n return this.excelExportModule ?\n this.excelExportModule.Map(this, excelExportProperties, isMultipleExport, workbook, false, isBlob) : null;\n }\n };\n /**\n * Export Grid data to CSV file.\n *\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 * @returns {Promise} Returns csv export\n */\n Grid.prototype.csvExport = function (excelExportProperties, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n isMultipleExport, workbook, isBlob) {\n return this.excelExportModule ?\n this.excelExportModule.Map(this, excelExportProperties, isMultipleExport, workbook, true, isBlob) : null;\n };\n /**\n * Export Grid data to PDF document.\n *\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 *\n * @returns {Promise} Returns pdfexport\n */\n Grid.prototype.pdfExport = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n if (this.exportGrids && this.exportGrids.length) {\n var gridIds = this.exportGrids.slice();\n return this.exportMultiplePdfGrids(gridIds, pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n }\n else {\n return this.pdfExportModule ? this.pdfExportModule.Map(this, pdfExportProperties, isMultipleExport, pdfDoc, isBlob) : null;\n }\n };\n Grid.prototype.exportMultiplePdfGrids = function (gridIds, pdfExportProperties, isMultipleExport, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n pdfDoc, isBlob) {\n var _this = this;\n if (gridIds.length !== 0) {\n var currentGridId = gridIds.shift();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var currentGridInstance = document.getElementById(currentGridId).ej2_instances[0];\n var exportPromise = currentGridInstance.pdfExportModule ?\n currentGridInstance.pdfExportModule.Map(currentGridInstance, pdfExportProperties, isMultipleExport, pdfDoc, isBlob)\n : Promise.resolve();\n return exportPromise.then(function (exportedGridResults) {\n isMultipleExport = gridIds.length === 1 ? false : true;\n return _this.exportMultiplePdfGrids(gridIds, pdfExportProperties, isMultipleExport, exportedGridResults, isBlob);\n });\n }\n return null;\n };\n Grid.prototype.exportMultipleExcelGrids = function (gridIds, excelExportProperties, isMultipleExport, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n workbook, isBlob) {\n var _this = this;\n if (gridIds.length !== 0) {\n var currentGridId = gridIds.shift();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var currentGridInstance = document.getElementById(currentGridId).ej2_instances[0];\n var exportPromise = currentGridInstance.excelExportModule ?\n currentGridInstance.excelExportModule.Map(currentGridInstance, excelExportProperties, isMultipleExport, workbook, false, isBlob) : null;\n return exportPromise.then(function (exportedGridResults) {\n isMultipleExport = gridIds.length === 1 ? false : true;\n return _this.exportMultipleExcelGrids(gridIds, excelExportProperties, isMultipleExport, exportedGridResults, isBlob);\n });\n }\n return null;\n };\n /**\n * Groups a column by column name.\n *\n * @param {string} columnName - Defines the column name to group.\n *\n * @returns {void}\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 *\n * @returns {void}\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 *\n * @returns {void}\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 *\n * @param {Element} target - Defines the target element of the grouped row.\n * @returns {void}\n */\n // public expandCollapseRows(target: Element): void {\n // if (this.groupModule) {\n // this.groupModule.expandCollapseRows(target);\n // }\n // }\n /**\n * Clears all the grouped columns of the Grid.\n *\n * @returns {void}\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 *\n * {% codeBlock src='grid/ungroupColumn/index.md' %}{% endcodeBlock %}\n *\n * @param {string} columnName - Defines the column name to ungroup.\n *\n * @returns {void}\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 *\n * @param {number} x - Defines the X axis.\n * @param {number} y - Defines the Y axis.\n *\n * @returns {void}\n */\n Grid.prototype.openColumnChooser = function (x, y) {\n if (this.columnChooserModule) {\n this.columnChooserModule.openColumnChooser(x, y);\n }\n };\n Grid.prototype.scrollRefresh = function () {\n var _this_1 = this;\n var refresh = function () {\n _this_1.scrollModule.refresh();\n _this_1.off(events.contentReady, refresh);\n };\n this.on(events.contentReady, refresh, this);\n };\n /**\n * Collapses a detail row with the given target.\n *\n * @param {Element} target - Defines the expanded element to collapse.\n * @returns {void}\n */\n // public detailCollapse(target: number | Element): void {\n // if (this.detailRowModule) {\n // this.detailRowModule.collapse(target);\n // }\n // }\n /**\n * Collapses all the detail rows of the Grid.\n *\n * @returns {void}\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 *\n * @param {Element} target - Defines the collapsed element to expand.\n * @returns {void}\n */\n // public detailExpand(target: number | Element): void {\n // if (this.detailRowModule) {\n // this.detailRowModule.expand(target);\n // }\n // }\n /**\n * Expands all the detail rows of the Grid.\n *\n * @returns {void}\n */\n Grid.prototype.detailExpandAll = function () {\n if (this.detailRowModule) {\n this.detailRowModule.expandAll();\n }\n };\n /**\n * Deselects the currently selected cells.\n *\n * @returns {void}\n */\n Grid.prototype.clearCellSelection = function () {\n if (this.selectionModule) {\n this.selectionModule.clearCellSelection();\n }\n };\n /**\n * Deselects the currently selected rows.\n *\n * @returns {void}\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 *\n * @param {ISelectedCell[]} rowCellIndexes - Specifies the row and column indexes.\n *\n * @returns {void}\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 *\n * @param {number} startIndex - Specifies the start row index.\n * @param {number} endIndex - Specifies the end row index.\n *\n * @returns {void}\n */\n Grid.prototype.selectRowsByRange = function (startIndex, endIndex) {\n if (this.selectionModule) {\n this.selectionModule.selectRowsByRange(startIndex, endIndex);\n }\n };\n /**\n * @hidden\n * @returns {boolean} Returns whether context menu is open or not\n */\n Grid.prototype.isContextMenuOpen = function () {\n return this.contextMenuModule && this.contextMenuModule.isOpen;\n };\n /**\n * @param {Function} module - Defines the module\n * @returns {boolean} return the injected modules\n * @hidden\n */\n Grid.prototype.ensureModuleInjected = function (module) {\n return this.getInjectedModules().indexOf(module) >= 0;\n };\n /**\n * Destroys the given template reference.\n *\n * @param {string[]} propertyNames - Defines the collection of template name.\n * @param {any} index - specifies the index\n *\n * @returns {void}\n */\n // eslint-disable-next-line\n Grid.prototype.destroyTemplate = function (propertyNames, index) {\n this.clearTemplate(propertyNames, index);\n };\n /**\n * @param {string | string[]} type - Defines the type\n * @param {Object} args - Defines the arguments\n * @returns {void}\n * @hidden\n * @private\n */\n Grid.prototype.log = function (type, args) {\n // eslint-disable-next-line\n this.loggerModule ? this.loggerModule.log(type, args) : (function () { return 0; })();\n };\n /**\n * @param {Element} element - Defines the element\n * @returns {void}\n * @hidden\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 * @returns {Object} Returns the previous row data\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 *\n * @returns {void}\n */\n Grid.prototype.hideScroll = function () {\n var content = this.getContent().querySelector('.' + literals.content);\n if (content.scrollHeight <= content.clientHeight) {\n this.scrollModule.removePadding();\n content.style.overflowY = 'auto';\n }\n };\n /**\n * Get row index by primary key or row data.\n *\n * @param {string | Object} value - Defines the primary key value.\n *\n * @returns {number} Returns the index\n */\n Grid.prototype.getRowIndexByPrimaryKey = function (value) {\n var pkName = this.getPrimaryKeyFieldNames()[0];\n value = typeof value === 'object' ? value[\"\" + pkName] : value;\n var rows = this.getRowsObject();\n for (var i = 0; i < rows.length; i++) {\n if (rows[parseInt(i.toString(), 10)].isDetailRow || rows[parseInt(i.toString(), 10)].isCaptionRow) {\n continue;\n }\n var pKvalue = rows[parseInt(i.toString(), 10)].data[\"\" + pkName];\n if (pkName.split('.').length > 1) {\n pKvalue = performComplexDataOperation(pkName, rows[parseInt(i.toString(), 10)].data);\n }\n if (pKvalue === value) {\n return rows[parseInt(i.toString(), 10)].index;\n }\n }\n return -1;\n };\n /**\n * @param {string} field - Defines the field name\n * @returns {Column} returns the column\n * @hidden\n */\n // Need to have all columns while filtering with ColumnVirtualization.\n Grid.prototype.grabColumnByFieldFromAllCols = function (field, isForeignKey) {\n var column;\n this.columnModel = [];\n this.updateColumnModel(this.columns);\n var gCols = this.columnModel;\n for (var i = 0; i < gCols.length; i++) {\n if ((!isForeignKey && field === gCols[parseInt(i.toString(), 10)].field) ||\n (isForeignKey && gCols[parseInt(i.toString(), 10)].isForeignColumn() &&\n field === gCols[parseInt(i.toString(), 10)].foreignKeyValue)) {\n column = gCols[parseInt(i.toString(), 10)];\n break;\n }\n }\n return column;\n };\n /**\n * @param {string} uid - Defines the uid\n * @returns {Column} returns the column\n * @hidden\n */\n // Need to have all columns while filtering with ColumnVirtualization.\n Grid.prototype.grabColumnByUidFromAllCols = function (uid) {\n var column;\n this.columnModel = [];\n this.updateColumnModel(this.columns);\n var gCols = this.columnModel;\n for (var i = 0; i < gCols.length; i++) {\n if (uid === gCols[parseInt(i.toString(), 10)].uid) {\n column = gCols[parseInt(i.toString(), 10)];\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 *\n * @returns {Object[] | Promise} Returns the filtered records\n */\n Grid.prototype.getFilteredRecords = function () {\n if ((this.allowFiltering && this.filterSettings.columns.length) || this.searchSettings.key.length) {\n var query = this.renderModule.data.generateQuery(true);\n if (this.dataSource && this.renderModule.data.isRemote() && this.dataSource instanceof DataManager) {\n return this.renderModule.data.getData(this.dataSource, query);\n }\n else {\n if (this.dataSource instanceof DataManager) {\n return this.dataSource.executeLocal(query);\n }\n else {\n return new DataManager(this.dataSource, query).executeLocal(query);\n }\n }\n }\n return [];\n };\n Grid.prototype.getUserAgent = function () {\n var userAgent = Browser.userAgent.toLowerCase();\n return /iphone|ipod|ipad|macintosh/.test(userAgent);\n };\n /**\n * @param {TouchEventArgs} e - Defines the TouchEventArgs\n * @returns {void}\n * @hidden\n */\n // Need to have all columns while filtering with ColumnVirtualization.\n // eslint-disable-next-line\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 }\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 * @param {string} prefix - specifies the prefix\n * @returns {string} returns the row uid\n * @hidden\n */\n Grid.prototype.getRowUid = function (prefix) {\n return \"\" + prefix + this.rowUid++;\n };\n /**\n * @param {string} uid - specifies the uid\n * @returns {Element} returns the element\n * @hidden\n */\n Grid.prototype.getRowElementByUID = function (uid) {\n var rowEle;\n var rows = [];\n var cntRows = [].slice.call(this.getContent().querySelector(literals.tbody).children);\n if (this.frozenRows) {\n rows = [].slice.call(this.getHeaderContent().querySelector(literals.tbody).children);\n rows = rows.concat(cntRows);\n }\n else {\n rows = cntRows;\n }\n for (var _i = 0, rows_2 = rows; _i < rows_2.length; _i++) {\n var row = rows_2[_i];\n if (row.getAttribute('data-uid') === uid) {\n rowEle = row;\n break;\n }\n }\n return rowEle;\n };\n /**\n * Gets the hidden columns from the Grid.\n *\n * @returns {Column[]} Returns the Column\n */\n Grid.prototype.getHiddenColumns = function () {\n var cols = [];\n for (var _i = 0, _a = this.columnModel; _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.visible === false) {\n cols.push(col);\n }\n }\n return cols;\n };\n /**\n * Calculates the page size by parent element height\n *\n * @param {number | string } containerHeight - specifies the container height\n * @returns {number} returns the page size\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 if (containerHeight.indexOf('%') !== -1) {\n containerHeight = parseInt(containerHeight, 10) / 100 * this.element.clientHeight;\n }\n var nonContentHeight = this.getNoncontentHeight() + this.getRowHeight();\n if (containerHeight > nonContentHeight) {\n var contentHeight = 0;\n contentHeight = containerHeight - this.getNoncontentHeight();\n pagesize = (contentHeight / this.getRowHeight());\n }\n if (pagesize > 0) {\n return Math.floor(pagesize);\n }\n }\n }\n return 0;\n };\n Grid.prototype.getNoncontentHeight = function () {\n var height = 0;\n if (!isNullOrUndefined(this.getHeaderContent().clientHeight)) {\n height += this.getHeaderContent().clientHeight;\n }\n if (this.toolbar && !isNullOrUndefined(this.element.querySelector('.e-toolbar').clientHeight)) {\n height += this.element.querySelector('.e-toolbar').clientHeight;\n }\n if (this.allowPaging && !isNullOrUndefined(this.element.querySelector('.e-gridpager').clientHeight)) {\n height += this.element.querySelector('.e-gridpager').clientHeight;\n }\n if (this.showColumnChooser && !isNullOrUndefined(this.element.querySelector('.e-columnheader').clientHeight)) {\n height += this.element.querySelector('.e-columnheader').clientHeight;\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 if (this.aggregates.length > 0 && !isNullOrUndefined(this.element.querySelector('.e-summaryrow').clientHeight)) {\n for (var i = 0; i < this.element.getElementsByClassName('e-summaryrow').length; i++) {\n height += this.element.getElementsByClassName('e-summaryrow')[parseInt(i.toString(), 10)].clientHeight;\n }\n }\n return height;\n };\n /**\n *To perform aggregate operation on a column.\n *\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 * @returns {number} returns the summary values\n */\n Grid.prototype.getSummaryValues = function (summaryCol, summaryData) {\n return DataUtil.aggregates[summaryCol.type.toLowerCase()](summaryData, summaryCol.field);\n };\n /**\n * Sends a Post request to export Grid to Excel file in server side.\n *\n * @param {string} url - Pass Url for server side excel export action.\n *\n * @returns {void}\n */\n Grid.prototype.serverExcelExport = function (url) {\n this.isExcel = true;\n this.exportGrid(url);\n };\n /**\n * Sends a Post request to export Grid to Pdf file in server side.\n *\n * @param {string} url - Pass Url for server side pdf export action.\n *\n * @returns {void}\n */\n Grid.prototype.serverPdfExport = function (url) {\n this.isExcel = false;\n this.exportGrid(url);\n };\n /**\n * Sends a Post request to export Grid to CSV file in server side.\n *\n * @param {string} url - Pass Url for server side pdf export action.\n *\n * @returns {void}\n */\n Grid.prototype.serverCsvExport = function (url) {\n this.isExcel = true;\n this.exportGrid(url);\n };\n /**\n * @param {string} url - Defines exporting url\n * @returns {void}\n * @hidden\n */\n Grid.prototype.exportGrid = function (url) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var grid = this;\n var query = grid.getDataModule().generateQuery(true);\n var state = new UrlAdaptor().processQuery(new DataManager({ url: '' }), query);\n var queries = JSON.parse(state.data);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var gridModel = JSON.parse(this.addOnPersist(['allowGrouping', 'allowPaging', 'pageSettings', 'sortSettings', 'allowPdfExport', 'allowExcelExport', 'aggregates',\n 'filterSettings', 'groupSettings', 'columns', 'locale', 'searchSettings']));\n var include = ['field', 'headerText', 'type', 'format', 'visible', 'foreignKeyValue', 'foreignKeyField',\n 'template', 'index', 'width', 'textAlign', 'headerTextAlign', 'columns'];\n gridModel.filterSettings.columns = queries.where;\n gridModel.searchSettings.fields = queries.search && queries.search[0]['fields'] || [];\n gridModel.sortSettings.columns = queries.sorted;\n gridModel.columns = this.setHeaderText(gridModel.columns, include);\n var form = this.createElement('form', { id: 'ExportForm', styles: 'display:none;' });\n var gridInput = this.createElement('input', { id: 'gridInput', attrs: { name: 'gridModel' } });\n gridInput.value = JSON.stringify(gridModel);\n form.method = 'POST';\n form.action = url;\n form.appendChild(gridInput);\n document.body.appendChild(form);\n form.submit();\n form.remove();\n };\n /**\n * @param {Column[]} columns - Defines array of columns\n * @param {string[]} include - Defines array of sting\n * @returns {Column[]} returns array of columns\n * @hidden\n */\n Grid.prototype.setHeaderText = function (columns, include) {\n for (var i = 0; i < columns.length; i++) {\n var column = this.getColumnByUid(columns[parseInt(i.toString(), 10)].uid);\n columns[parseInt(i.toString(), 10)].headerText = column.headerText;\n if (!isNullOrUndefined(column.template)) {\n columns[parseInt(i.toString(), 10)].template = 'true';\n }\n if (columns[parseInt(i.toString(), 10)].format) {\n columns[parseInt(i.toString(), 10)].format = getNumberFormat(this.getFormat(columns[parseInt(i.toString(), 10)].format), columns[parseInt(i.toString(), 10)].type, this.isExcel, defaultCurrencyCode);\n }\n if (columns[parseInt(i.toString(), 10)].columns) {\n this.setHeaderText(columns[parseInt(i.toString(), 10)].columns, include);\n }\n var keys = Object.keys(columns[parseInt(i.toString(), 10)]);\n for (var j = 0; j < keys.length; j++) {\n if (include.indexOf(keys[parseInt(j.toString(), 10)]) < 0) {\n delete columns[parseInt(i.toString(), 10)][keys[parseInt(j.toString(), 10)]];\n }\n }\n }\n return columns;\n };\n Grid.prototype.getFormat = function (format) {\n return typeof (format) === 'object' ? !isNullOrUndefined(format.format) ?\n format.format : format.skeleton : format;\n };\n /**\n * @hidden\n * @returns {boolean} returns the isCollapseStateEnabled\n */\n Grid.prototype.isCollapseStateEnabled = function () {\n var isExpanded = 'isExpanded';\n return this[\"\" + isExpanded] === false;\n };\n /**\n * @param {number} key - Defines the primary key value.\n * @param {Object} rowData - Defines the rowData\n * @returns {void}\n */\n Grid.prototype.updateRowValue = function (key, rowData) {\n var args = {\n requestType: 'save', data: rowData\n };\n this.showSpinner();\n this.notify(events.updateData, args);\n this.refresh();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Grid.prototype.setForeignKeyData = function () {\n this.dataBind();\n var colpending = this.getDataModule().getForeignKeyDataState();\n if (colpending.isPending) {\n this.getDataModule().setForeignKeyDataState({});\n colpending.resolver();\n }\n else {\n this.getDataModule().setForeignKeyDataState({ isDataChanged: false });\n if (this.contentModule || this.headerModule) {\n this.renderModule.render();\n }\n }\n };\n /**\n * @param {string} field - specifies the field\n * @returns {void}\n * @hidden\n */\n Grid.prototype.resetFilterDlgPosition = function (field) {\n var header = this.getColumnHeaderByField(field);\n if (header) {\n var target = header.querySelector('.e-filtermenudiv');\n var filterDlg = this.element.querySelector('.e-filter-popup');\n if (target && filterDlg) {\n var gClient = this.element.getBoundingClientRect();\n var fClient = target.getBoundingClientRect();\n if (filterDlg) {\n if ((filterDlg.offsetWidth + fClient.right) > gClient.right) {\n filterDlg.style.left = ((fClient.right - filterDlg.offsetWidth) - gClient.left).toString() + 'px';\n }\n else {\n filterDlg.style.left = (fClient.right - gClient.left).toString() + 'px';\n }\n }\n }\n }\n };\n /**\n * @param {any} callBack - specifies the callBack method\n * @returns {void}\n * @hidden\n */\n // eslint-disable-next-line\n Grid.prototype.renderTemplates = function (callBack) {\n var isReactChild = this.parentDetails && this.parentDetails.parentInstObj && this.parentDetails.parentInstObj.isReact;\n if (isReactChild && this['portals']) {\n this.parentDetails.parentInstObj['portals'] = this.parentDetails.parentInstObj['portals']\n .concat(this['portals']);\n this.parentDetails.parentInstObj.renderTemplates(callBack);\n this['portals'] = undefined;\n }\n else {\n var portals = 'portals';\n this.notify('reactTemplateRender', this[\"\" + portals]);\n this.renderReactTemplates(callBack);\n }\n };\n /**\n * Apply the changes to the Grid without refreshing the rows.\n *\n * @param {BatchChanges} changes - Defines changes to be updated.\n * @returns {void}\n */\n Grid.prototype.batchUpdate = function (changes) {\n this.processRowChanges(changes);\n };\n /**\n * Apply the changes to the Grid in one batch after 50ms without refreshing the rows.\n *\n * @param {BatchChanges} changes - Defines changes to be updated.\n * @returns {void}\n */\n Grid.prototype.batchAsyncUpdate = function (changes) {\n this.processBulkRowChanges(changes);\n };\n Grid.prototype.processBulkRowChanges = function (changes) {\n var _this_1 = this;\n if (!this.dataToBeUpdated) {\n this.dataToBeUpdated = Object.assign({ addedRecords: [], changedRecords: [], deletedRecords: [] }, changes);\n setTimeout(function () {\n _this_1.processRowChanges(_this_1.dataToBeUpdated);\n _this_1.dataToBeUpdated = null;\n }, this.asyncTimeOut);\n }\n else {\n var loopstring = [literals.addedRecords, literals.changedRecords, literals.deletedRecords];\n var keyField = this.getPrimaryKeyFieldNames()[0];\n for (var i = 0; i < loopstring.length; i++) {\n if (changes[loopstring[parseInt(i.toString(), 10)]]) {\n compareChanges(this, changes, loopstring[parseInt(i.toString(), 10)], keyField);\n }\n }\n }\n };\n Grid.prototype.processRowChanges = function (changes) {\n var _this_1 = this;\n var keyField = this.getPrimaryKeyFieldNames()[0];\n changes = Object.assign({ addedRecords: [], changedRecords: [], deletedRecords: [] }, changes);\n var promise = this.getDataModule().saveChanges(changes, keyField, {}, this.getDataModule().generateQuery().requiresCount());\n if (this.getDataModule().isRemote()) {\n promise.then(function () {\n _this_1.setNewData();\n });\n }\n else {\n this.setNewData();\n }\n };\n Grid.prototype.setNewData = function () {\n var _this_1 = this;\n var oldValues = JSON.parse(JSON.stringify(this.getCurrentViewRecords()));\n var getData = this.getDataModule().getData({}, this.getDataModule().generateQuery().requiresCount());\n getData.then(function (e) {\n _this_1.bulkRefresh(e.result, oldValues, e.count);\n });\n };\n Grid.prototype.deleteRowElement = function (row) {\n var tr = this.getRowElementByUID(row.uid);\n remove(tr);\n };\n Grid.prototype.bulkRefresh = function (result, oldValues, count) {\n var _this_1 = this;\n var rowObj = this.getRowsObject();\n var keyField = this.getPrimaryKeyFieldNames()[0];\n var _loop_5 = function (i) {\n if (!result.filter(function (e) { return e[\"\" + keyField] === rowObj[parseInt(i.toString(), 10)].data[\"\" + keyField]; }).length) {\n this_5.deleteRowElement(rowObj[parseInt(i.toString(), 10)]);\n rowObj.splice(i, 1);\n i--;\n }\n out_i_1 = i;\n };\n var this_5 = this, out_i_1;\n for (var i = 0; i < rowObj.length; i++) {\n _loop_5(i);\n i = out_i_1;\n }\n var _loop_6 = function (i) {\n var isRowExist;\n oldValues.filter(function (e) {\n if (e[\"\" + keyField] === result[parseInt(i.toString(), 10)][\"\" + keyField]) {\n if (e !== result[parseInt(i.toString(), 10)]) {\n _this_1.setRowData(result[parseInt(i.toString(), 10)][\"\" + keyField], result[parseInt(i.toString(), 10)]);\n }\n isRowExist = true;\n }\n });\n if (!isRowExist) {\n this_6.renderRowElement(result[parseInt(i.toString(), 10)], i);\n }\n };\n var this_6 = this;\n for (var i = 0; i < result.length; i++) {\n _loop_6(i);\n }\n this.currentViewData = result;\n var rows = [].slice.call(this.getContentTable().getElementsByClassName(literals.row));\n resetRowIndex(this, this.getRowsObject(), rows);\n setRowElements(this);\n if (this.allowPaging) {\n this.notify(events.inBoundModelChanged, { module: 'pager', properties: { totalRecordsCount: count } });\n }\n };\n Grid.prototype.renderRowElement = function (data, index) {\n var row = new RowRenderer(this.serviceLocator, null, this);\n var model = new RowModelGenerator(this);\n var modelData = model.generateRows([data]);\n var tr = row.render(modelData[0], this.getColumns());\n this.addRowObject(modelData[0], index);\n var tbody = this.getContentTable().querySelector(literals.tbody);\n if (tbody.querySelector('.e-emptyrow')) {\n var emptyRow = tbody.querySelector('.e-emptyrow');\n emptyRow.parentNode.removeChild(emptyRow);\n if (this.frozenRows && this.element.querySelector('.e-frozenrow-empty')) {\n this.element.querySelector('.e-frozenrow-empty').classList.remove('e-frozenrow-empty');\n }\n }\n if (this.frozenRows && index < this.frozenRows) {\n tbody = this.getHeaderContent().querySelector(literals.tbody);\n }\n else {\n tbody = this.getContent().querySelector(literals.tbody);\n }\n tbody = this.getContent().querySelector(literals.tbody);\n tbody.appendChild(tr);\n };\n Grid.prototype.addRowObject = function (row, index) {\n this.getRowsObject().splice(index, 1, row);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Grid.prototype.updateVisibleExpandCollapseRows = function () {\n var rows = this.getRowsObject();\n for (var i = 0, len = rows.length; i < len; i++) {\n if ((rows[parseInt(i.toString(), 10)].isDataRow || rows[parseInt(i.toString(), 10)].isAggregateRow)\n && this.getRowElementByUID(rows[parseInt(i.toString(), 10)].uid).style.display === 'none') {\n rows[parseInt(i.toString(), 10)].visible = false;\n }\n else {\n rows[parseInt(i.toString(), 10)].visible = true;\n }\n }\n };\n /**\n * Method to sanitize any suspected untrusted strings and scripts before rendering them.\n *\n * @param {string} value - Specifies the html value to sanitize\n * @returns {string} Returns the sanitized html string\n * @hidden\n */\n Grid.prototype.sanitize = function (value) {\n if (this.enableHtmlSanitizer) {\n return SanitizeHtmlHelper.sanitize(value);\n }\n return value;\n };\n /**\n * @param {string | number} height - specifies the height\n * @returns {number | string} - specifies the height number\n * @hidden\n */\n Grid.prototype.getHeight = function (height) {\n if (!Number.isInteger(height) && height.indexOf('%') !== -1) {\n height = parseInt(height, 10) / 100 * this.element.clientHeight;\n }\n else if (!Number.isInteger(height) && this.height !== 'auto') {\n height = parseInt(height, 10);\n }\n else {\n height = this.height;\n }\n return height;\n };\n /**\n * @hidden\n * @returns {Element} - returns frozen right content\n\n */\n Grid.prototype.getFrozenRightContent = function () {\n return this.contentModule.getPanel();\n };\n /**\n * @hidden\n * @returns {Element} - returns frozen right header\n\n */\n Grid.prototype.getFrozenRightHeader = function () {\n return this.headerModule.getPanel();\n };\n /**\n * @hidden\n * @returns {Element} - returns movable header tbody\n\n */\n Grid.prototype.getMovableHeaderTbody = function () {\n return this.getHeaderContent().querySelector(literals.tbody);\n };\n /**\n * @hidden\n * @returns {Element} - returns movable content tbody\n\n */\n Grid.prototype.getMovableContentTbody = function () {\n return this.getContent().querySelector(literals.tbody);\n };\n /**\n * @hidden\n * @returns {Element} - returns frozen header tbody\n\n */\n Grid.prototype.getFrozenHeaderTbody = function () {\n return this.getHeaderContent().querySelector(literals.tbody);\n };\n /**\n * @hidden\n * @returns {Element} - returns frozen left content tbody\n\n */\n Grid.prototype.getFrozenLeftContentTbody = function () {\n return this.getContent().querySelector(literals.tbody);\n };\n /**\n * @hidden\n * @returns {Element} - returns frozen right header tbody\n\n */\n Grid.prototype.getFrozenRightHeaderTbody = function () {\n return this.getHeaderContent().querySelector(literals.tbody);\n };\n /**\n * @returns {Element} returns frozen right content tbody\n\n * @hidden\n */\n Grid.prototype.getFrozenRightContentTbody = function () {\n return this.getContent().querySelector(literals.tbody);\n };\n /**\n * @param {boolean} isCustom - Defines custom filter dialog open\n * @returns {void}\n * @hidden\n */\n Grid.prototype.showResponsiveCustomFilter = function (isCustom) {\n if (this.filterModule) {\n this.filterModule.showCustomFilter(isCustom || this.rowRenderingMode === 'Vertical');\n }\n };\n /**\n * @param {boolean} isCustom - Defines custom sort dialog open\n * @returns {void}\n * @hidden\n */\n Grid.prototype.showResponsiveCustomSort = function (isCustom) {\n if (this.sortModule) {\n this.sortModule.showCustomSort(isCustom || this.rowRenderingMode === 'Vertical');\n }\n };\n /**\n * @param {boolean} isCustom - Defines custom column chooser dialog open\n * @returns {void}\n * @hidden\n */\n Grid.prototype.showResponsiveCustomColumnChooser = function (isCustom) {\n if (this.columnChooserModule) {\n this.columnChooserModule.showCustomColumnChooser(isCustom || this.rowRenderingMode === 'Vertical');\n }\n };\n /**\n * To manually show the vertical row mode filter dialog\n *\n * @returns {void}\n */\n Grid.prototype.showAdaptiveFilterDialog = function () {\n if (this.enableAdaptiveUI) {\n this.showResponsiveCustomFilter(true);\n }\n };\n /**\n * To manually show the vertical row sort filter dialog\n *\n * @returns {void}\n */\n Grid.prototype.showAdaptiveSortDialog = function () {\n if (this.enableAdaptiveUI) {\n this.showResponsiveCustomSort(true);\n }\n };\n /**\n * @param {boolean} isColVirtualization - Defines column virtualization\n * @returns {Column[]} returns array of column models\n * @hidden\n */\n Grid.prototype.getCurrentVisibleColumns = function (isColVirtualization) {\n var cols = [];\n var gridCols = isColVirtualization ? this.getColumns() : this.columnModel;\n for (var _i = 0, gridCols_1 = gridCols; _i < gridCols_1.length; _i++) {\n var col = gridCols_1[_i];\n if (col.visible) {\n cols.push(col);\n }\n }\n return cols;\n };\n Grid.prototype.enableInfiniteAggrgate = function () {\n if (this.enableInfiniteScrolling && this.groupSettings.columns.length && !this.groupSettings.disablePageWiseAggregates\n && !this.groupSettings.enableLazyLoading) {\n this.setProperties({ groupSettings: { disablePageWiseAggregates: true } }, true);\n }\n };\n var Grid_1;\n __decorate([\n Property([])\n ], Grid.prototype, \"currentViewData\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"parentDetails\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"showHider\", void 0);\n __decorate([\n Property([])\n ], Grid.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"enableAltRow\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"enableHover\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableAutoFill\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"allowKeyboard\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableStickyHeader\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowTextWrap\", void 0);\n __decorate([\n Complex({}, TextWrapSettings)\n ], Grid.prototype, \"textWrapSettings\", void 0);\n __decorate([\n Complex({}, ResizeSettings)\n ], Grid.prototype, \"resizeSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowPaging\", void 0);\n __decorate([\n Complex({}, PageSettings)\n ], Grid.prototype, \"pageSettings\", void 0);\n __decorate([\n Complex({}, LoadingIndicator)\n ], Grid.prototype, \"loadingIndicator\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"enableVirtualMaskRow\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableColumnVirtualization\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableInfiniteScrolling\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], Grid.prototype, \"searchSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowSorting\", void 0);\n __decorate([\n Property('Ellipsis')\n ], Grid.prototype, \"clipMode\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"allowMultiSorting\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowExcelExport\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowPdfExport\", void 0);\n __decorate([\n Complex({}, SortSettings)\n ], Grid.prototype, \"sortSettings\", void 0);\n __decorate([\n Complex({}, InfiniteScrollSettings)\n ], Grid.prototype, \"infiniteScrollSettings\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"allowSelection\", void 0);\n __decorate([\n Property(-1)\n ], Grid.prototype, \"selectedRowIndex\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], Grid.prototype, \"selectionSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property('Horizontal')\n ], Grid.prototype, \"rowRenderingMode\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableAdaptiveUI\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowRowDragAndDrop\", void 0);\n __decorate([\n Complex({}, RowDropSettings)\n ], Grid.prototype, \"rowDropSettings\", void 0);\n __decorate([\n Complex({}, FilterSettings)\n ], Grid.prototype, \"filterSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowGrouping\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableImmutableMode\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"showColumnMenu\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"autoFit\", void 0);\n __decorate([\n Complex({}, GroupSettings)\n ], Grid.prototype, \"groupSettings\", void 0);\n __decorate([\n Complex({}, EditSettings)\n ], Grid.prototype, \"editSettings\", void 0);\n __decorate([\n Collection([], AggregateRow)\n ], Grid.prototype, \"aggregates\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"showColumnChooser\", void 0);\n __decorate([\n Complex({}, ColumnChooserSettings)\n ], Grid.prototype, \"columnChooserSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableHeaderFocus\", void 0);\n __decorate([\n Property('auto')\n ], Grid.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], Grid.prototype, \"width\", void 0);\n __decorate([\n Property('Default')\n ], Grid.prototype, \"gridLines\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"rowTemplate\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"emptyRecordTemplate\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"detailTemplate\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"childGrid\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"queryString\", void 0);\n __decorate([\n Property('AllPages')\n ], Grid.prototype, \"printMode\", void 0);\n __decorate([\n Property('Expanded')\n ], Grid.prototype, \"hierarchyPrintMode\", void 0);\n __decorate([\n Property([])\n ], Grid.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], Grid.prototype, \"rowHeight\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"query\", void 0);\n __decorate([\n Property('USD')\n ], Grid.prototype, \"currencyCode\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"exportGrids\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"contextMenuItems\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"columnMenuItems\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"pagerTemplate\", void 0);\n __decorate([\n Property(0)\n ], Grid.prototype, \"frozenRows\", void 0);\n __decorate([\n Property(0)\n ], Grid.prototype, \"frozenColumns\", void 0);\n __decorate([\n Property('')\n ], Grid.prototype, \"cssClass\", void 0);\n __decorate([\n Property('All')\n ], Grid.prototype, \"columnQueryMode\", void 0);\n __decorate([\n Property({})\n ], Grid.prototype, \"currentAction\", void 0);\n __decorate([\n Property('')\n ], Grid.prototype, \"ej2StatePersistenceVersion\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"recordDoubleClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"recordClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowSelecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowSelected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDeselecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDeselected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellSelecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellSelected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellDeselecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellDeselected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnSelecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnSelected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDeselecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDeselected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDrop\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"printComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"pdfAggregateQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"excelAggregateQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"exportDetailDataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"exportDetailTemplate\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeExcelExport\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"excelExportComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforePdfExport\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"pdfExportComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDragStartHelper\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"detailDataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDragStart\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDrag\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDrop\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeOpenColumnChooser\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeOpenAdaptiveDialog\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"batchAdd\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"batchDelete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"batchCancel\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeBatchAdd\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeBatchDelete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeBatchSave\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beginEdit\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"commandClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellEdit\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellSave\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellSaved\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"keyPressed\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeDataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnMenuOpen\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnMenuClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"checkBoxChange\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeCopy\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforePaste\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeAutoFill\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDataStateChange\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"dataStateChange\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"dataSourceChanged\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"exportGroupCaption\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"lazyLoadGroupExpand\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"lazyLoadGroupCollapse\", void 0);\n Grid = Grid_1 = __decorate([\n NotifyPropertyChanges\n ], Grid);\n return Grid;\n}(Component));\nexport { Grid };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, NotifyPropertyChanges, Property, setValue } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, isNullOrUndefined, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { addClass, detach, getUniqueID, isRippleEnabled, removeClass, rippleEffect, closest } from '@syncfusion/ej2-base';\nimport { wrapperInitialize, rippleMouseHandler, setHiddenInput } from './../common/common';\nvar CHECK = 'e-check';\nvar DISABLED = 'e-checkbox-disabled';\nvar FRAME = 'e-frame';\nvar INDETERMINATE = 'e-stop';\nvar LABEL = 'e-label';\nvar RIPPLE = 'e-ripple-container';\nvar RIPPLECHECK = 'e-ripple-check';\nvar RIPPLEINDETERMINATE = 'e-ripple-stop';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-checkbox-wrapper';\nvar containerAttr = ['title', 'class', 'style', 'disabled', 'readonly', 'name', 'value', 'id'];\n/**\n * The CheckBox is a graphical user interface element that allows you to select one or more options from the choices.\n * It contains checked, unchecked, and indeterminate states.\n * ```html\n * \n * \n * ```\n */\nvar CheckBox = /** @class */ (function (_super) {\n __extends(CheckBox, _super);\n /**\n * Constructor for creating the widget\n *\n * @private\n * @param {CheckBoxModel} options - Specifies checkbox model\n * @param {string | HTMLInputElement} element - Specifies target element\n */\n function CheckBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isFocused = false;\n _this.isMouseClick = false;\n _this.clickTriggered = false;\n _this.validCheck = true;\n return _this;\n }\n CheckBox.prototype.changeState = function (state, isInitialize) {\n var ariaState;\n var rippleSpan;\n var frameSpan = this.getWrapper().getElementsByClassName(FRAME)[0];\n if (isRippleEnabled) {\n rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n }\n if (state === 'check') {\n if (frameSpan) {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n }\n if (rippleSpan) {\n rippleSpan.classList.remove(RIPPLEINDETERMINATE);\n rippleSpan.classList.add(RIPPLECHECK);\n }\n ariaState = 'true';\n this.element.checked = true;\n if ((this.element.required || closest(this.element, 'form') && closest(this.element, 'form').classList.contains('e-formvalidator')) && this.validCheck && !isInitialize) {\n this.element.checked = false;\n this.validCheck = false;\n }\n else if (this.element.required || closest(this.element, 'form') && closest(this.element, 'form').classList.contains('e-formvalidator')) {\n this.validCheck = true;\n }\n }\n else if (state === 'uncheck') {\n if (frameSpan) {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n }\n if (rippleSpan) {\n removeClass([rippleSpan], [RIPPLECHECK, RIPPLEINDETERMINATE]);\n }\n ariaState = 'false';\n this.element.checked = false;\n if ((this.element.required || closest(this.element, 'form') && closest(this.element, 'form').classList.contains('e-formvalidator')) && this.validCheck && !isInitialize) {\n this.element.checked = true;\n this.validCheck = false;\n }\n else if (this.element.required || closest(this.element, 'form') && closest(this.element, 'form').classList.contains('e-formvalidator')) {\n this.validCheck = true;\n }\n }\n else {\n if (frameSpan) {\n frameSpan.classList.remove(CHECK);\n frameSpan.classList.add(INDETERMINATE);\n }\n if (rippleSpan) {\n rippleSpan.classList.remove(RIPPLECHECK);\n rippleSpan.classList.add(RIPPLEINDETERMINATE);\n }\n ariaState = 'mixed';\n this.element.indeterminate = true;\n this.indeterminate = true;\n }\n };\n CheckBox.prototype.clickHandler = function (event) {\n if (event.target.tagName === 'INPUT' && this.clickTriggered) {\n if (this.isVue) {\n this.changeState(this.checked ? 'check' : 'uncheck');\n }\n this.clickTriggered = false;\n return;\n }\n if (event.target.tagName === 'SPAN' || event.target.tagName === 'LABEL') {\n this.clickTriggered = true;\n }\n if (this.isMouseClick) {\n this.focusOutHandler();\n this.isMouseClick = false;\n }\n if (this.indeterminate) {\n this.changeState(this.checked ? 'check' : 'uncheck');\n this.indeterminate = false;\n this.element.indeterminate = false;\n }\n else if (this.checked) {\n this.changeState('uncheck');\n this.checked = false;\n }\n else {\n this.changeState('check');\n this.checked = true;\n }\n var changeEventArgs = { checked: this.updateVueArrayModel(false), event: event };\n this.trigger('change', changeEventArgs);\n event.stopPropagation();\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n CheckBox.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n _super.prototype.destroy.call(this);\n if (this.wrapper) {\n wrapper = this.wrapper;\n if (!this.disabled) {\n this.unWireEvents();\n }\n if (this.tagName === 'INPUT') {\n if (this.getWrapper() && wrapper.parentNode) {\n wrapper.parentNode.insertBefore(this.element, wrapper);\n }\n detach(wrapper);\n this.element.checked = false;\n if (this.indeterminate) {\n this.element.indeterminate = false;\n }\n ['name', 'value', 'disabled'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n }\n else {\n ['class'].forEach(function (key) {\n wrapper.removeAttribute(key);\n });\n wrapper.innerHTML = '';\n this.element = wrapper;\n if (this.refreshing) {\n ['e-control', 'e-checkbox', 'e-lib'].forEach(function (key) {\n _this.element.classList.add(key);\n });\n setValue('ej2_instances', [this], this.element);\n }\n }\n }\n };\n CheckBox.prototype.focusHandler = function () {\n this.isFocused = true;\n };\n CheckBox.prototype.focusOutHandler = function () {\n var wrapper = this.getWrapper();\n if (wrapper) {\n wrapper.classList.remove('e-focus');\n }\n this.isFocused = false;\n };\n /**\n * Gets the module name.\n *\n * @private\n * @returns {string} - Module Name\n */\n CheckBox.prototype.getModuleName = function () {\n return 'checkbox';\n };\n /**\n * Gets the properties to be maintained in the persistence state.\n *\n * @private\n * @returns {string} - Persist Data\n */\n CheckBox.prototype.getPersistData = function () {\n return this.addOnPersist(['checked', 'indeterminate']);\n };\n CheckBox.prototype.getWrapper = function () {\n if (this.element && this.element.parentElement) {\n return this.element.parentElement.parentElement;\n }\n else {\n return null;\n }\n };\n CheckBox.prototype.getLabel = function () {\n if (this.element) {\n return this.element.parentElement;\n }\n else {\n return null;\n }\n };\n CheckBox.prototype.initialize = function () {\n if (isNullOrUndefined(this.initialCheckedValue)) {\n this.initialCheckedValue = this.checked;\n }\n if (this.name) {\n this.element.setAttribute('name', this.name);\n }\n if (this.value) {\n this.element.setAttribute('value', this.value);\n if (this.isVue && typeof this.value === 'boolean' && this.value === true) {\n this.setProperties({ 'checked': true }, true);\n }\n }\n if (this.checked) {\n this.changeState('check', true);\n }\n if (this.indeterminate) {\n this.changeState();\n }\n if (this.disabled) {\n this.setDisabled();\n }\n };\n CheckBox.prototype.initWrapper = function () {\n var wrapper = this.element.parentElement;\n if (!wrapper.classList.contains(WRAPPER)) {\n wrapper = this.createElement('div', {\n className: WRAPPER\n });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var label = this.createElement('label', { attrs: { for: this.element.id } });\n var frameSpan = this.createElement('span', { className: 'e-icons ' + FRAME });\n wrapper.classList.add('e-wrapper');\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n wrapper.appendChild(label);\n label.appendChild(this.element);\n setHiddenInput(this, label);\n label.appendChild(frameSpan);\n if (isRippleEnabled) {\n var rippleSpan = this.createElement('span', { className: RIPPLE });\n if (this.labelPosition === 'Before') {\n label.appendChild(rippleSpan);\n }\n else {\n label.insertBefore(rippleSpan, frameSpan);\n }\n rippleEffect(rippleSpan, { duration: 400, isCenterRipple: true });\n }\n if (this.label) {\n this.setText(this.label);\n }\n };\n CheckBox.prototype.keyUpHandler = function () {\n if (this.isFocused) {\n this.getWrapper().classList.add('e-focus');\n }\n };\n CheckBox.prototype.labelMouseDownHandler = function (e) {\n this.isMouseClick = true;\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, rippleSpan);\n };\n CheckBox.prototype.labelMouseLeaveHandler = function (e) {\n var rippleSpan = this.getLabel().getElementsByClassName(RIPPLE)[0];\n if (rippleSpan) {\n var rippleElem = rippleSpan.querySelectorAll('.e-ripple-element');\n for (var i = rippleElem.length - 1; i > 0; i--) {\n rippleSpan.removeChild(rippleSpan.childNodes[i]);\n }\n rippleMouseHandler(e, rippleSpan);\n }\n };\n CheckBox.prototype.labelMouseUpHandler = function (e) {\n this.isMouseClick = true;\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n if (rippleSpan) {\n var rippleElem = rippleSpan.querySelectorAll('.e-ripple-element');\n for (var i = 0; i < rippleElem.length - 1; i++) {\n rippleSpan.removeChild(rippleSpan.childNodes[i]);\n }\n rippleMouseHandler(e, rippleSpan);\n }\n };\n /**\n * Called internally if any of the property value changes.\n *\n * @private\n * @param {CheckBoxModel} newProp - Specifies new Properties\n * @param {CheckBoxModel} oldProp - Specifies old Properties\n *\n * @returns {void}\n */\n CheckBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n this.indeterminate = false;\n this.element.indeterminate = false;\n this.changeState(newProp.checked ? 'check' : 'uncheck');\n break;\n case 'indeterminate':\n if (newProp.indeterminate) {\n this.changeState();\n }\n else {\n this.element.indeterminate = false;\n this.changeState(this.checked ? 'check' : 'uncheck');\n }\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.wrapper = this.getWrapper();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n wrapper.classList.remove(DISABLED);\n wrapper.setAttribute('aria-disabled', 'false');\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([wrapper], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([wrapper], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n wrapper.classList.add(RTL);\n }\n else {\n wrapper.classList.remove(RTL);\n }\n break;\n case 'label':\n this.setText(newProp.label);\n break;\n case 'labelPosition': {\n var label = wrapper.getElementsByClassName(LABEL)[0];\n var labelWrap = wrapper.getElementsByTagName('label')[0];\n detach(label);\n if (newProp.labelPosition === 'After') {\n labelWrap.appendChild(label);\n }\n else {\n labelWrap.insertBefore(label, wrapper.getElementsByClassName(FRAME)[0]);\n }\n break;\n }\n case 'name':\n this.element.setAttribute('name', newProp.name);\n break;\n case 'value':\n if (this.isVue && typeof newProp.value === 'object') {\n break;\n }\n this.element.setAttribute('value', newProp.value);\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToWrapper();\n break;\n }\n }\n };\n /**\n * Initialize Angular, React and Unique ID support.\n *\n * @private\n * @returns {void}\n */\n CheckBox.prototype.preRender = function () {\n var element = this.element;\n this.tagName = this.element.tagName;\n element = wrapperInitialize(this.createElement, 'EJS-CHECKBOX', 'checkbox', element, WRAPPER, 'checkbox');\n this.element = element;\n if (this.element.getAttribute('type') !== 'checkbox') {\n this.element.setAttribute('type', 'checkbox');\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n };\n /**\n * Initialize the control rendering.\n *\n * @private\n * @returns {void}\n */\n CheckBox.prototype.render = function () {\n this.initWrapper();\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n this.updateHtmlAttributeToWrapper();\n this.updateVueArrayModel(true);\n this.renderComplete();\n this.wrapper = this.getWrapper();\n };\n CheckBox.prototype.setDisabled = function () {\n var wrapper = this.getWrapper();\n this.element.disabled = true;\n wrapper.classList.add(DISABLED);\n wrapper.setAttribute('aria-disabled', 'true');\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n CheckBox.prototype.setText = function (text) {\n var wrapper = this.getWrapper();\n if (!wrapper) {\n return;\n }\n var label = wrapper.getElementsByClassName(LABEL)[0];\n if (label) {\n label.textContent = text;\n }\n else {\n text = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(text) : text;\n label = this.createElement('span', { className: LABEL, innerHTML: text });\n var labelWrap = wrapper.getElementsByTagName('label')[0];\n if (this.labelPosition === 'Before') {\n labelWrap.insertBefore(label, wrapper.getElementsByClassName(FRAME)[0]);\n }\n else {\n labelWrap.appendChild(label);\n }\n }\n };\n CheckBox.prototype.changeHandler = function (e) {\n e.stopPropagation();\n };\n CheckBox.prototype.formResetHandler = function () {\n this.checked = this.initialCheckedValue;\n this.element.checked = this.initialCheckedValue;\n };\n CheckBox.prototype.unWireEvents = function () {\n var wrapper = this.wrapper;\n EventHandler.remove(wrapper, 'click', this.clickHandler);\n EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n var label = wrapper.getElementsByTagName('label')[0];\n EventHandler.remove(label, 'mousedown', this.labelMouseDownHandler);\n EventHandler.remove(label, 'mouseup', this.labelMouseUpHandler);\n EventHandler.remove(label, 'mouseleave', this.labelMouseLeaveHandler);\n var formElem = closest(this.element, 'form');\n if (formElem) {\n EventHandler.remove(formElem, 'reset', this.formResetHandler);\n }\n if (this.tagName === 'EJS-CHECKBOX') {\n EventHandler.remove(this.element, 'change', this.changeHandler);\n }\n };\n CheckBox.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(wrapper, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n var label = wrapper.getElementsByTagName('label')[0];\n EventHandler.add(label, 'mousedown', this.labelMouseDownHandler, this);\n EventHandler.add(label, 'mouseup', this.labelMouseUpHandler, this);\n EventHandler.add(label, 'mouseleave', this.labelMouseLeaveHandler, this);\n var formElem = closest(this.element, 'form');\n if (formElem) {\n EventHandler.add(formElem, 'reset', this.formResetHandler, this);\n }\n if (this.tagName === 'EJS-CHECKBOX') {\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n }\n };\n CheckBox.prototype.updateVueArrayModel = function (init) {\n if (this.isVue && typeof this.value === 'object') {\n var value = this.element.value;\n if (value && this.value) {\n if (init) {\n for (var i = 0; i < this.value.length; i++) {\n if (value === this.value[i]) {\n this.changeState('check');\n this.setProperties({ 'checked': true }, true);\n }\n }\n }\n else {\n var index = this.value.indexOf(value);\n if (this.checked) {\n if (index < 0) {\n this.value.push(value);\n }\n }\n else {\n if (index > -1) {\n this.value.splice(index, 1);\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.value;\n }\n }\n }\n return this.validCheck ? this.element.checked : !this.element.checked;\n };\n CheckBox.prototype.updateHtmlAttributeToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n var wrapper = this.getWrapper();\n if (containerAttr.indexOf(key) > -1) {\n if (key === 'class') {\n addClass([wrapper], this.htmlAttributes[\"\" + key].split(' '));\n }\n else if (key === 'title') {\n wrapper.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n else if (key === 'style') {\n var frameSpan = this.getWrapper().getElementsByClassName(FRAME)[0];\n frameSpan.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n else if (key === 'disabled') {\n if (this.htmlAttributes[\"\" + key] === 'true') {\n this.setDisabled();\n }\n this.element.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n else {\n this.element.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n else {\n wrapper.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n /**\n * Click the CheckBox element\n * its native method\n *\n * @public\n * @returns {void}\n */\n CheckBox.prototype.click = function () {\n this.element.click();\n };\n /**\n * Sets the focus to CheckBox\n * its native method\n *\n * @public\n * @returns {void}\n */\n CheckBox.prototype.focusIn = function () {\n this.element.focus();\n };\n __decorate([\n Event()\n ], CheckBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], CheckBox.prototype, \"created\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"indeterminate\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], CheckBox.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property({})\n ], CheckBox.prototype, \"htmlAttributes\", void 0);\n CheckBox = __decorate([\n NotifyPropertyChanges\n ], CheckBox);\n return CheckBox;\n}(Component));\nexport { CheckBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Browser, L10n, getUniqueID } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, detach, closest } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue, formatUnit, setValue, merge } from '@syncfusion/ej2-base';\nimport { Internationalization, getNumericObject } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar ROOT = 'e-control-wrapper e-numeric';\nvar SPINICON = 'e-input-group-icon';\nvar SPINUP = 'e-spin-up';\nvar SPINDOWN = 'e-spin-down';\nvar ERROR = 'e-error';\nvar INCREMENT = 'increment';\nvar DECREMENT = 'decrement';\nvar INTREGEXP = new RegExp('^(-)?(\\\\d*)$');\nvar DECIMALSEPARATOR = '.';\nvar COMPONENT = 'e-numerictextbox';\nvar CONTROL = 'e-control';\nvar NUMERIC_FOCUS = 'e-input-focus';\nvar HIDDENELEMENT = 'e-numeric-hidden';\nvar wrapperAttributes = ['title', 'style', 'class'];\nvar selectionTimeOut = 0;\n/**\n * Represents the NumericTextBox component that allows the user to enter only numeric values.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar NumericTextBox = /** @class */ (function (_super) {\n __extends(NumericTextBox, _super);\n /**\n *\n * @param {NumericTextBoxModel} options - Specifies the NumericTextBox model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function NumericTextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isVue = false;\n _this.preventChange = false;\n _this.isAngular = false;\n _this.isDynamicChange = false;\n _this.numericOptions = options;\n return _this;\n }\n NumericTextBox.prototype.preRender = function () {\n this.isPrevFocused = false;\n this.decimalSeparator = '.';\n // eslint-disable-next-line no-useless-escape\n this.intRegExp = new RegExp('/^(-)?(\\d*)$/');\n this.isCalled = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [CONTROL, COMPONENT, 'e-lib']);\n this.angularTagName = null;\n this.formEle = closest(this.element, 'form');\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = this.createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (attributeName !== 'id' && attributeName !== 'class') {\n input.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n else if (attributeName === 'class') {\n input.setAttribute(attributeName, this.element.className.split(' ').filter(function (item) { return item.indexOf('ng-') !== 0; }).join(' '));\n }\n }\n if (this.element.hasAttribute('name')) {\n this.element.removeAttribute('name');\n }\n this.element.classList.remove('e-control', 'e-numerictextbox');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n attributes(this.element, { 'role': 'spinbutton', 'tabindex': '0', 'autocomplete': 'off' });\n var localeText = {\n incrementTitle: 'Increment value', decrementTitle: 'Decrement value', placeholder: this.placeholder\n };\n this.l10n = new L10n('numerictextbox', localeText, this.locale);\n if (this.l10n.getConstant('placeholder') !== '') {\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n if (!this.element.hasAttribute('id')) {\n this.element.setAttribute('id', getUniqueID('numerictextbox'));\n }\n this.isValidState = true;\n this.inputStyle = null;\n this.inputName = null;\n this.cultureInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.prevValue = this.value;\n this.updateHTMLAttrToElement();\n this.checkAttributes(false);\n if (this.formEle) {\n this.inputEleValue = this.value;\n }\n this.validateMinMax();\n this.validateStep();\n if (this.placeholder === null) {\n this.updatePlaceholder();\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n NumericTextBox.prototype.render = function () {\n if (this.element.tagName.toLowerCase() === 'input') {\n this.createWrapper();\n if (this.showSpinButton) {\n this.spinBtnCreation();\n }\n this.setElementWidth(this.width);\n if (!this.container.classList.contains('e-input-group')) {\n this.container.classList.add('e-input-group');\n }\n this.changeValue(this.value === null || isNaN(this.value) ?\n null : this.strictMode ? this.trimValue(this.value) : this.value);\n this.wireEvents();\n if (this.value !== null && !isNaN(this.value)) {\n if (this.decimals) {\n this.setProperties({ value: this.roundNumber(this.value, this.decimals) }, true);\n }\n }\n if (this.element.getAttribute('value') || this.value) {\n this.element.setAttribute('value', this.element.value);\n this.hiddenInput.setAttribute('value', this.hiddenInput.value);\n }\n this.elementPrevValue = this.element.value;\n if (this.element.hasAttribute('data-val')) {\n this.element.setAttribute('data-val', 'false');\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.renderComplete();\n }\n };\n NumericTextBox.prototype.checkAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['value', 'min', 'max', 'step', 'disabled', 'readonly', 'style', 'name', 'placeholder'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.element.getAttribute(prop) === 'disabled' || this.element.getAttribute(prop) === ''\n || this.element.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.element.getAttribute(prop) === 'readonly' || this.element.getAttribute(prop) === ''\n || this.element.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['value'] === undefined)) || isDynamic) {\n var setNumber = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n this.setProperties(setValue(prop, setNumber, {}), !isDynamic);\n }\n break;\n case 'min':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['min'] === undefined)) || isDynamic) {\n var minValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (minValue !== null && !isNaN(minValue)) {\n this.setProperties(setValue(prop, minValue, {}), !isDynamic);\n }\n }\n break;\n case 'max':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['max'] === undefined)) || isDynamic) {\n var maxValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (maxValue !== null && !isNaN(maxValue)) {\n this.setProperties(setValue(prop, maxValue, {}), !isDynamic);\n }\n }\n break;\n case 'step':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['step'] === undefined)) || isDynamic) {\n var stepValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (stepValue !== null && !isNaN(stepValue)) {\n this.setProperties(setValue(prop, stepValue, {}), !isDynamic);\n }\n }\n break;\n case 'style':\n this.inputStyle = this.element.getAttribute(prop);\n break;\n case 'name':\n this.inputName = this.element.getAttribute(prop);\n break;\n default:\n {\n var value = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if ((value !== null && !isNaN(value)) || (prop === 'value')) {\n this.setProperties(setValue(prop, value, {}), true);\n }\n }\n break;\n }\n }\n }\n };\n NumericTextBox.prototype.updatePlaceholder = function () {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n };\n NumericTextBox.prototype.initCultureFunc = function () {\n this.instance = new Internationalization(this.locale);\n };\n NumericTextBox.prototype.initCultureInfo = function () {\n this.cultureInfo.format = this.format;\n if (getValue('currency', this) !== null) {\n setValue('currency', this.currency, this.cultureInfo);\n this.setProperties({ currencyCode: this.currency }, true);\n }\n };\n /* Wrapper creation */\n NumericTextBox.prototype.createWrapper = function () {\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = this.getNumericValidClassList(this.cssClass);\n }\n var inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassValue,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n enabled: this.enabled\n }\n }, this.createElement);\n this.inputWrapper = inputObj;\n this.container = inputObj.container;\n this.container.setAttribute('class', ROOT + ' ' + this.container.getAttribute('class'));\n this.updateHTMLAttrToWrapper();\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n this.hiddenInput = (this.createElement('input', { attrs: { type: 'text',\n 'validateHidden': 'true', 'aria-label': 'hidden', 'class': HIDDENELEMENT } }));\n this.inputName = this.inputName !== null ? this.inputName : this.element.id;\n this.element.removeAttribute('name');\n if (this.isAngular && this.angularTagName === 'EJS-NUMERICTEXTBOX' && this.cloneElement.id.length > 0) {\n attributes(this.hiddenInput, { 'name': this.cloneElement.id });\n }\n else {\n attributes(this.hiddenInput, { 'name': this.inputName });\n }\n this.container.insertBefore(this.hiddenInput, this.container.childNodes[1]);\n this.updateDataAttribute(false);\n if (this.inputStyle !== null) {\n attributes(this.container, { 'style': this.inputStyle });\n }\n };\n NumericTextBox.prototype.updateDataAttribute = function (isDynamic) {\n var attr = {};\n if (!isDynamic) {\n for (var a = 0; a < this.element.attributes.length; a++) {\n attr[this.element.attributes[a].name] = this.element.getAttribute(this.element.attributes[a].name);\n }\n }\n else {\n attr = this.htmlAttributes;\n }\n for (var _i = 0, _a = Object.keys(attr); _i < _a.length; _i++) {\n var key = _a[_i];\n if (key.indexOf('data') === 0) {\n this.hiddenInput.setAttribute(key, attr[\"\" + key]);\n }\n }\n };\n NumericTextBox.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttributes.indexOf(pro) < 0) {\n this.element.setAttribute(pro, this.htmlAttributes[\"\" + pro]);\n }\n }\n }\n };\n NumericTextBox.prototype.updateCssClass = function (newClass, oldClass) {\n Input.setCssClass(this.getNumericValidClassList(newClass), [this.container], this.getNumericValidClassList(oldClass));\n };\n NumericTextBox.prototype.getNumericValidClassList = function (numericClassName) {\n var result = numericClassName;\n if (!isNullOrUndefined(numericClassName) && numericClassName !== '') {\n result = (numericClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\n };\n NumericTextBox.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttributes.indexOf(pro) > -1) {\n if (pro === 'class') {\n var updatedClassValue = this.getNumericValidClassList(this.htmlAttributes[\"\" + pro]);\n if (updatedClassValue !== '') {\n addClass([this.container], updatedClassValue.split(' '));\n }\n }\n else if (pro === 'style') {\n var numericStyle = this.container.getAttribute(pro);\n numericStyle = !isNullOrUndefined(numericStyle) ? (numericStyle + this.htmlAttributes[\"\" + pro]) :\n this.htmlAttributes[\"\" + pro];\n this.container.setAttribute(pro, numericStyle);\n }\n else {\n this.container.setAttribute(pro, this.htmlAttributes[\"\" + pro]);\n }\n }\n }\n }\n };\n NumericTextBox.prototype.setElementWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.container.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n this.container.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n };\n /* Spinner creation */\n NumericTextBox.prototype.spinBtnCreation = function () {\n this.spinDown = Input.appendSpan(SPINICON + ' ' + SPINDOWN, this.container, this.createElement);\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle')\n });\n this.spinUp = Input.appendSpan(SPINICON + ' ' + SPINUP, this.container, this.createElement);\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle')\n });\n this.wireSpinBtnEvents();\n };\n NumericTextBox.prototype.validateMinMax = function () {\n if (!(typeof (this.min) === 'number' && !isNaN(this.min))) {\n this.setProperties({ min: -(Number.MAX_VALUE) }, true);\n }\n if (!(typeof (this.max) === 'number' && !isNaN(this.max))) {\n this.setProperties({ max: Number.MAX_VALUE }, true);\n }\n if (this.decimals !== null) {\n if (this.min !== -(Number.MAX_VALUE)) {\n this.setProperties({ min: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.min)) }, true);\n }\n if (this.max !== (Number.MAX_VALUE)) {\n this.setProperties({ max: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.max)) }, true);\n }\n }\n this.setProperties({ min: this.min > this.max ? this.max : this.min }, true);\n if (this.min !== -(Number.MAX_VALUE)) {\n attributes(this.element, { 'aria-valuemin': this.min.toString() });\n }\n if (this.max !== (Number.MAX_VALUE)) {\n attributes(this.element, { 'aria-valuemax': this.max.toString() });\n }\n };\n NumericTextBox.prototype.formattedValue = function (decimals, value) {\n return this.instance.getNumberFormat({\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals, useGrouping: false\n })(value);\n };\n NumericTextBox.prototype.validateStep = function () {\n if (this.decimals !== null) {\n this.setProperties({ step: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.step)) }, true);\n }\n };\n NumericTextBox.prototype.action = function (operation, event) {\n this.isInteract = true;\n var value = this.isFocused ? this.instance.getNumberParser({ format: 'n' })(this.element.value) : this.value;\n this.changeValue(this.performAction(value, this.step, operation));\n this.raiseChangeEvent(event);\n };\n NumericTextBox.prototype.checkErrorClass = function () {\n if (this.isValidState) {\n removeClass([this.container], ERROR);\n }\n else {\n addClass([this.container], ERROR);\n }\n attributes(this.element, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n NumericTextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n NumericTextBox.prototype.resetHandler = function (e) {\n e.preventDefault();\n if (!(this.inputWrapper.clearButton.classList.contains('e-clear-icon-hide')) || this.inputWrapper.container.classList.contains('e-static-clear')) {\n this.clear(e);\n }\n this.isInteract = true;\n this.raiseChangeEvent(e);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n NumericTextBox.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.setElementValue('');\n this.hiddenInput.value = '';\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.resetFormHandler = function () {\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.updateValue(null);\n }\n else {\n this.updateValue(this.inputEleValue);\n }\n };\n NumericTextBox.prototype.setSpinButton = function () {\n if (!isNullOrUndefined(this.spinDown)) {\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n }\n if (!isNullOrUndefined(this.spinUp)) {\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n }\n };\n NumericTextBox.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'blur', this.focusOutHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyDownHandler, this);\n EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n EventHandler.add(this.element, 'input', this.inputHandler, this);\n EventHandler.add(this.element, 'keypress', this.keyPressHandler, this);\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(this.element, 'paste', this.pasteHandler, this);\n if (this.enabled) {\n this.bindClearEvent();\n if (this.formEle) {\n EventHandler.add(this.formEle, 'reset', this.resetFormHandler, this);\n }\n }\n };\n NumericTextBox.prototype.wireSpinBtnEvents = function () {\n /* bind spin button events */\n EventHandler.add(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n };\n NumericTextBox.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'blur', this.focusOutHandler);\n EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n EventHandler.remove(this.element, 'input', this.inputHandler);\n EventHandler.remove(this.element, 'keydown', this.keyDownHandler);\n EventHandler.remove(this.element, 'keypress', this.keyPressHandler);\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(this.element, 'paste', this.pasteHandler);\n if (this.formEle) {\n EventHandler.remove(this.formEle, 'reset', this.resetFormHandler);\n }\n };\n NumericTextBox.prototype.unwireSpinBtnEvents = function () {\n /* unbind spin button events */\n EventHandler.remove(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n };\n NumericTextBox.prototype.changeHandler = function (event) {\n event.stopPropagation();\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n };\n NumericTextBox.prototype.raiseChangeEvent = function (event) {\n this.inputValue = (isNullOrUndefined(this.inputValue) || isNaN(this.inputValue)) ? null : this.inputValue;\n if (this.prevValue !== this.value || this.prevValue !== this.inputValue) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.value, previousValue: this.prevValue, isInteracted: this.isInteract,\n isInteraction: this.isInteract, event: event };\n if (event) {\n this.changeEventArgs.event = event;\n }\n if (this.changeEventArgs.event === undefined) {\n this.changeEventArgs.isInteracted = false;\n this.changeEventArgs.isInteraction = false;\n }\n merge(eventArgs, this.changeEventArgs);\n this.prevValue = this.value;\n this.isInteract = false;\n this.elementPrevValue = this.element.value;\n this.preventChange = false;\n this.trigger('change', eventArgs);\n }\n };\n NumericTextBox.prototype.pasteHandler = function () {\n var _this = this;\n if (!this.enabled || this.readonly) {\n return;\n }\n var beforeUpdate = this.element.value;\n setTimeout(function () {\n if (!_this.numericRegex().test(_this.element.value)) {\n _this.setElementValue(beforeUpdate);\n }\n });\n };\n NumericTextBox.prototype.preventHandler = function () {\n var _this = this;\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n setTimeout(function () {\n if (_this.element.selectionStart > 0) {\n var currentPos = _this.element.selectionStart;\n var prevPos = _this.element.selectionStart - 1;\n var start = 0;\n var valArray = _this.element.value.split('');\n var numericObject = getNumericObject(_this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var ignoreKeyCode = decimalSeparator.charCodeAt(0);\n if (_this.element.value[prevPos] === ' ' && _this.element.selectionStart > 0 && !iOS) {\n if (isNullOrUndefined(_this.prevVal)) {\n _this.element.value = _this.element.value.trim();\n }\n else if (prevPos !== 0) {\n _this.element.value = _this.prevVal;\n }\n else if (prevPos === 0) {\n _this.element.value = _this.element.value.trim();\n }\n _this.element.setSelectionRange(prevPos, prevPos);\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 1]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 1]) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.value = _this.element.value.substring(0, prevPos) +\n _this.element.value.substring(currentPos, _this.element.value.length);\n _this.element.setSelectionRange(prevPos, prevPos);\n if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) && _this.element.selectionStart > 0\n && _this.element.value.length) {\n _this.preventHandler();\n }\n }\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 2])) && _this.element.selectionStart > 1 &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 2]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 2]) &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.setSelectionRange(prevPos, prevPos);\n _this.nextEle = _this.element.value[_this.element.selectionStart];\n _this.cursorPosChanged = true;\n _this.preventHandler();\n }\n }\n if (_this.cursorPosChanged === true && _this.element.value[_this.element.selectionStart] === _this.nextEle &&\n isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1]))) {\n _this.element.setSelectionRange(_this.element.selectionStart + 1, _this.element.selectionStart + 1);\n _this.cursorPosChanged = false;\n _this.nextEle = null;\n }\n if (_this.element.value.trim() === '') {\n _this.element.setSelectionRange(start, start);\n }\n if (_this.element.selectionStart > 0) {\n if ((_this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === 45) && _this.element.selectionStart > 1) {\n if (isNullOrUndefined(_this.prevVal)) {\n // eslint-disable-next-line no-self-assign\n _this.element.value = _this.element.value;\n }\n else {\n _this.element.value = _this.prevVal;\n }\n _this.element.setSelectionRange(_this.element.selectionStart, _this.element.selectionStart);\n }\n if (_this.element.value[_this.element.selectionStart - 1] === decimalSeparator && _this.decimals === 0 && _this.validateDecimalOnType) {\n _this.element.value = _this.element.value.substring(0, prevPos) +\n _this.element.value.substring(currentPos, _this.element.value.length);\n }\n }\n _this.prevVal = _this.element.value;\n }\n });\n };\n NumericTextBox.prototype.keyUpHandler = function () {\n if (!this.enabled || this.readonly) {\n return;\n }\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n if (!iOS && Browser.isDevice) {\n this.preventHandler();\n }\n var parseValue = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n parseValue = parseValue === null || isNaN(parseValue) ? null : parseValue;\n this.hiddenInput.value = parseValue || parseValue === 0 ? parseValue.toString() : null;\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.inputHandler = function (event) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-this-alias\n var numerictextboxObj = this;\n if (!this.enabled || this.readonly) {\n return;\n }\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n var fireFox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n if ((fireFox || iOS) && Browser.isDevice) {\n this.preventHandler();\n }\n /* istanbul ignore next */\n if (this.isAngular\n && this.element.value !== getValue('decimal', getNumericObject(this.locale))\n && this.element.value !== getValue('minusSign', getNumericObject(this.locale))) {\n var parsedValue = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n parsedValue = isNaN(parsedValue) ? null : parsedValue;\n numerictextboxObj.localChange({ value: parsedValue });\n this.preventChange = true;\n }\n if (this.isVue) {\n var current = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n var previous = this.instance.getNumberParser({ format: 'n' })(this.elementPrevValue);\n //EJ2-54963-if type \".\" or \".0\" or \"-.0\" it converts to \"0\" automatically when binding v-model\n var nonZeroRegex = new RegExp('[^0-9]+$');\n if (nonZeroRegex.test(this.element.value) || ((this.elementPrevValue.indexOf('.') !== -1 || this.elementPrevValue.indexOf('-') !== -1) && this.element.value[this.element.value.length - 1] === '0')) {\n current = this.value;\n }\n var eventArgs = {\n event: event,\n value: (current === null || isNaN(current) ? null : current),\n previousValue: (previous === null || isNaN(previous) ? null : previous)\n };\n this.preventChange = true;\n this.elementPrevValue = this.element.value;\n this.trigger('input', eventArgs);\n }\n };\n NumericTextBox.prototype.keyDownHandler = function (event) {\n if (!this.readonly) {\n switch (event.keyCode) {\n case 38:\n event.preventDefault();\n this.action(INCREMENT, event);\n break;\n case 40:\n event.preventDefault();\n this.action(DECREMENT, event);\n break;\n default: break;\n }\n }\n };\n NumericTextBox.prototype.performAction = function (value, step, operation) {\n if (value === null || isNaN(value)) {\n value = 0;\n }\n var updatedValue = operation === INCREMENT ? value + step : value - step;\n updatedValue = this.correctRounding(value, step, updatedValue);\n return this.strictMode ? this.trimValue(updatedValue) : updatedValue;\n };\n NumericTextBox.prototype.correctRounding = function (value, step, result) {\n var floatExp = new RegExp('[,.](.*)');\n var floatValue = floatExp.test(value.toString());\n var floatStep = floatExp.test(step.toString());\n if (floatValue || floatStep) {\n var valueCount = floatValue ? floatExp.exec(value.toString())[0].length : 0;\n var stepCount = floatStep ? floatExp.exec(step.toString())[0].length : 0;\n var max = Math.max(valueCount, stepCount);\n return value = this.roundValue(result, max);\n }\n return result;\n };\n NumericTextBox.prototype.roundValue = function (result, precision) {\n precision = precision || 0;\n var divide = Math.pow(10, precision);\n return result *= divide, result = Math.round(result) / divide;\n };\n NumericTextBox.prototype.updateValue = function (value, event) {\n if (event) {\n this.isInteract = true;\n }\n if (value !== null && !isNaN(value)) {\n if (this.decimals) {\n value = this.roundNumber(value, this.decimals);\n }\n }\n this.inputValue = value;\n this.changeValue(value === null || isNaN(value) ? null : this.strictMode ? this.trimValue(value) : value);\n /* istanbul ignore next */\n if (!this.isDynamicChange) {\n this.raiseChangeEvent(event);\n }\n };\n NumericTextBox.prototype.updateCurrency = function (prop, propVal) {\n setValue(prop, propVal, this.cultureInfo);\n this.updateValue(this.value);\n };\n NumericTextBox.prototype.changeValue = function (value) {\n if (!(value || value === 0)) {\n value = null;\n this.setProperties({ value: value }, true);\n }\n else {\n var numberOfDecimals = this.getNumberOfDecimals(value);\n this.setProperties({ value: this.roundNumber(value, numberOfDecimals) }, true);\n }\n this.modifyText();\n if (!this.strictMode) {\n this.validateState();\n }\n };\n NumericTextBox.prototype.modifyText = function () {\n if (this.value || this.value === 0) {\n var value = this.formatNumber();\n var elementValue = this.isFocused ? value : this.instance.getNumberFormat(this.cultureInfo)(this.value);\n this.setElementValue(elementValue);\n attributes(this.element, { 'aria-valuenow': value });\n this.hiddenInput.value = this.value.toString();\n if (this.value !== null && this.serverDecimalSeparator) {\n this.hiddenInput.value = this.hiddenInput.value.replace('.', this.serverDecimalSeparator);\n }\n }\n else {\n this.setElementValue('');\n this.element.removeAttribute('aria-valuenow');\n this.hiddenInput.value = null;\n }\n };\n NumericTextBox.prototype.setElementValue = function (val, element) {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n };\n NumericTextBox.prototype.validateState = function () {\n this.isValidState = true;\n if (this.value || this.value === 0) {\n this.isValidState = !(this.value > this.max || this.value < this.min);\n }\n this.checkErrorClass();\n };\n NumericTextBox.prototype.getNumberOfDecimals = function (value) {\n var numberOfDecimals;\n // eslint-disable-next-line no-useless-escape\n var EXPREGEXP = new RegExp('[eE][\\-+]?([0-9]+)');\n var valueString = value.toString();\n if (EXPREGEXP.test(valueString)) {\n var result = EXPREGEXP.exec(valueString);\n if (!isNullOrUndefined(result)) {\n valueString = value.toFixed(Math.min(parseInt(result[1], 10), 20));\n }\n }\n var decimalPart = valueString.split('.')[1];\n numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n if (this.decimals !== null) {\n numberOfDecimals = numberOfDecimals < this.decimals ? numberOfDecimals : this.decimals;\n }\n return numberOfDecimals;\n };\n NumericTextBox.prototype.formatNumber = function () {\n var numberOfDecimals = this.getNumberOfDecimals(this.value);\n return this.instance.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(this.value);\n };\n NumericTextBox.prototype.trimValue = function (value) {\n if (value > this.max) {\n return this.max;\n }\n if (value < this.min) {\n return this.min;\n }\n return value;\n };\n NumericTextBox.prototype.roundNumber = function (value, precision) {\n var result = value;\n var decimals = precision || 0;\n var result1 = result.toString().split('e');\n result = Math.round(Number(result1[0] + 'e' + (result1[1] ? (Number(result1[1]) + decimals) : decimals)));\n var result2 = result.toString().split('e');\n result = Number(result2[0] + 'e' + (result2[1] ? (Number(result2[1]) - decimals) : -decimals));\n return Number(result.toFixed(decimals));\n };\n NumericTextBox.prototype.cancelEvent = function (event) {\n event.preventDefault();\n return false;\n };\n NumericTextBox.prototype.keyPressHandler = function (event) {\n if (!this.enabled || this.readonly) {\n return true;\n }\n if (!Browser.isDevice && Browser.info.version === '11.0' && event.keyCode === 13) {\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n return true;\n }\n if (event.which === 0 || event.metaKey || event.ctrlKey || event.keyCode === 8 || event.keyCode === 13) {\n return true;\n }\n var currentChar = String.fromCharCode(event.which);\n var decimalSeparator = getValue('decimal', getNumericObject(this.locale));\n var isAlterNumPadDecimalChar = event.code === 'NumpadDecimal' && currentChar !== decimalSeparator;\n //EJ2-59813-replace the culture decimal separator value with numberpad decimal separator value when culture decimal separator and numberpad decimal separator are different\n if (isAlterNumPadDecimalChar) {\n currentChar = decimalSeparator;\n }\n var text = this.element.value;\n text = text.substring(0, this.element.selectionStart) + currentChar + text.substring(this.element.selectionEnd);\n if (!this.numericRegex().test(text)) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n else {\n //EJ2-59813-update the numberpad decimal separator and update the cursor position\n if (isAlterNumPadDecimalChar) {\n var start = this.element.selectionStart + 1;\n this.element.value = text;\n this.element.setSelectionRange(start, start);\n event.preventDefault();\n event.stopPropagation();\n }\n return true;\n }\n };\n NumericTextBox.prototype.numericRegex = function () {\n var numericObject = getNumericObject(this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var fractionRule = '*';\n if (decimalSeparator === DECIMALSEPARATOR) {\n decimalSeparator = '\\\\' + decimalSeparator;\n }\n if (this.decimals === 0 && this.validateDecimalOnType) {\n return INTREGEXP;\n }\n if (this.decimals && this.validateDecimalOnType) {\n fractionRule = '{0,' + this.decimals + '}';\n }\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n return new RegExp('^(-)?(((\\\\d+(' + decimalSeparator + '\\\\d' + fractionRule +\n ')?)|(' + decimalSeparator + '\\\\d' + fractionRule + ')))?$');\n };\n NumericTextBox.prototype.mouseWheel = function (event) {\n event.preventDefault();\n var delta;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var rawEvent = event;\n if (rawEvent.wheelDelta) {\n delta = rawEvent.wheelDelta / 120;\n }\n else if (rawEvent.detail) {\n delta = -rawEvent.detail / 3;\n }\n if (delta > 0) {\n this.action(INCREMENT, event);\n }\n else if (delta < 0) {\n this.action(DECREMENT, event);\n }\n this.cancelEvent(event);\n };\n NumericTextBox.prototype.focusHandler = function (event) {\n var _this = this;\n clearTimeout(selectionTimeOut);\n this.focusEventArgs = { event: event, value: this.value, container: this.container };\n this.trigger('focus', this.focusEventArgs);\n if (!this.enabled || this.readonly) {\n return;\n }\n this.isFocused = true;\n removeClass([this.container], ERROR);\n this.prevValue = this.value;\n if ((this.value || this.value === 0)) {\n var formatValue_1 = this.formatNumber();\n this.setElementValue(formatValue_1);\n if (!this.isPrevFocused) {\n if (!Browser.isDevice && Browser.info.version === '11.0') {\n this.element.setSelectionRange(0, formatValue_1.length);\n }\n else {\n var delay = (Browser.isDevice && Browser.isIos) ? 600 : 0;\n selectionTimeOut = setTimeout(function () {\n _this.element.setSelectionRange(0, formatValue_1.length);\n }, delay);\n }\n }\n }\n if (!Browser.isDevice) {\n EventHandler.add(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel, this);\n }\n };\n NumericTextBox.prototype.focusOutHandler = function (event) {\n var _this = this;\n this.blurEventArgs = { event: event, value: this.value, container: this.container };\n this.trigger('blur', this.blurEventArgs);\n if (!this.enabled || this.readonly) {\n return;\n }\n if (this.isPrevFocused) {\n event.preventDefault();\n if (Browser.isDevice) {\n var value_1 = this.element.value;\n this.element.focus();\n this.isPrevFocused = false;\n var ele_1 = this.element;\n setTimeout(function () {\n _this.setElementValue(value_1, ele_1);\n }, 200);\n }\n }\n else {\n this.isFocused = false;\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput);\n if (!Browser.isDevice) {\n EventHandler.remove(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel);\n }\n }\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var focusEvent = document.createEvent('FocusEvent');\n focusEvent.initEvent('focusout', false, true);\n element.dispatchEvent(focusEvent);\n }\n };\n NumericTextBox.prototype.mouseDownOnSpinner = function (event) {\n var _this = this;\n if (this.isFocused) {\n this.isPrevFocused = true;\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var result = this.getElementData(event);\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.add(target, 'mouseleave', this.mouseUpClick, this);\n this.timeOut = setInterval(function () {\n _this.isCalled = true;\n _this.action(action, event);\n }, 150);\n EventHandler.add(document, 'mouseup', this.mouseUpClick, this);\n };\n NumericTextBox.prototype.touchMoveOnSpinner = function (event) {\n var target;\n if (event.type === 'touchmove') {\n var touchEvent = event.touches;\n target = touchEvent.length && document.elementFromPoint(touchEvent[0].pageX, touchEvent[0].pageY);\n }\n else {\n target = document.elementFromPoint(event.clientX, event.clientY);\n }\n if (!(target.classList.contains(SPINICON))) {\n clearInterval(this.timeOut);\n }\n };\n NumericTextBox.prototype.mouseUpOnSpinner = function (event) {\n this.prevValue = this.value;\n if (this.isPrevFocused) {\n this.element.focus();\n if (!Browser.isDevice) {\n this.isPrevFocused = false;\n }\n }\n if (!Browser.isDevice) {\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.remove(target, 'mouseleave', this.mouseUpClick);\n if (!this.isCalled) {\n this.action(action, event);\n }\n this.isCalled = false;\n EventHandler.remove(document, 'mouseup', this.mouseUpClick);\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.getElementData = function (event) {\n if ((event.which && event.which === 3) || (event.button && event.button === 2)\n || !this.enabled || this.readonly) {\n return false;\n }\n clearInterval(this.timeOut);\n return true;\n };\n NumericTextBox.prototype.floatLabelTypeUpdate = function () {\n Input.removeFloating(this.inputWrapper);\n var hiddenInput = this.hiddenInput;\n this.hiddenInput.remove();\n Input.addFloating(this.element, this.floatLabelType, this.placeholder, this.createElement);\n this.container.insertBefore(hiddenInput, this.container.childNodes[1]);\n };\n NumericTextBox.prototype.mouseUpClick = function (event) {\n event.stopPropagation();\n clearInterval(this.timeOut);\n this.isCalled = false;\n if (this.spinUp) {\n EventHandler.remove(this.spinUp, 'mouseleave', this.mouseUpClick);\n }\n if (this.spinDown) {\n EventHandler.remove(this.spinDown, 'mouseleave', this.mouseUpClick);\n }\n };\n /**\n * Increments the NumericTextBox value with the specified step value.\n *\n * @param {number} step - Specifies the value used to increment the NumericTextBox value.\n * if its not given then numeric value will be incremented based on the step property value.\n * @returns {void}\n */\n NumericTextBox.prototype.increment = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, INCREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Decrements the NumericTextBox value with specified step value.\n *\n * @param {number} step - Specifies the value used to decrement the NumericTextBox value.\n * if its not given then numeric value will be decremented based on the step property value.\n * @returns {void}\n */\n NumericTextBox.prototype.decrement = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, DECREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n NumericTextBox.prototype.destroy = function () {\n this.unwireEvents();\n detach(this.hiddenInput);\n if (this.showSpinButton) {\n this.unwireSpinBtnEvents();\n detach(this.spinUp);\n detach(this.spinDown);\n }\n var attrArray = ['aria-labelledby', 'role', 'autocomplete', 'aria-readonly',\n 'aria-disabled', 'autocapitalize', 'spellcheck', 'aria-autocomplete', 'tabindex',\n 'aria-valuemin', 'aria-valuemax', 'aria-valuenow', 'aria-invalid'];\n for (var i = 0; i < attrArray.length; i++) {\n this.element.removeAttribute(attrArray[i]);\n }\n this.element.classList.remove('e-input');\n this.container.insertAdjacentElement('afterend', this.element);\n detach(this.container);\n this.spinUp = null;\n this.spinDown = null;\n this.container = null;\n this.hiddenInput = null;\n this.changeEventArgs = null;\n this.blurEventArgs = null;\n this.focusEventArgs = null;\n this.inputWrapper = null;\n Input.destroy();\n _super.prototype.destroy.call(this);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns */\n /**\n * Returns the value of NumericTextBox with the format applied to the NumericTextBox.\n *\n */\n NumericTextBox.prototype.getText = function () {\n return this.element.value;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns */\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n NumericTextBox.prototype.focusIn = function () {\n if (document.activeElement !== this.element && this.enabled) {\n this.element.focus();\n addClass([this.container], [NUMERIC_FOCUS]);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n NumericTextBox.prototype.focusOut = function () {\n if (document.activeElement === this.element && this.enabled) {\n this.element.blur();\n removeClass([this.container], [NUMERIC_FOCUS]);\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string}\n */\n NumericTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {NumericTextBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {NumericTextBoxModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n NumericTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n this.setElementWidth(newProp.width);\n Input.calculateWidth(this.element, this.container);\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element);\n this.bindClearEvent();\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.container]);\n break;\n case 'readonly':\n Input.setReadonly(newProp.readonly, this.element);\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n else {\n this.element.removeAttribute('aria-readonly');\n }\n break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.updateDataAttribute(true);\n this.checkAttributes(true);\n Input.validateInputType(this.container, this.element);\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.element);\n Input.calculateWidth(this.element, this.container);\n break;\n case 'step':\n this.step = newProp.step;\n this.validateStep();\n break;\n case 'showSpinButton':\n this.updateSpinButton(newProp);\n break;\n case 'showClearButton':\n this.updateClearButton(newProp);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n this.floatLabelTypeUpdate();\n break;\n case 'value':\n this.isDynamicChange = (this.isAngular || this.isVue) && this.preventChange;\n this.updateValue(newProp.value);\n if (this.isDynamicChange) {\n this.preventChange = false;\n this.isDynamicChange = false;\n }\n break;\n case 'min':\n case 'max':\n setValue(prop, getValue(prop, newProp), this);\n this.validateMinMax();\n this.updateValue(this.value);\n break;\n case 'strictMode':\n this.strictMode = newProp.strictMode;\n this.updateValue(this.value);\n this.validateState();\n break;\n case 'locale':\n this.initCultureFunc();\n this.l10n.setLocale(this.locale);\n this.setSpinButton();\n this.updatePlaceholder();\n Input.setPlaceholder(this.placeholder, this.element);\n this.updateValue(this.value);\n break;\n case 'currency':\n {\n var propVal = getValue(prop, newProp);\n this.setProperties({ currencyCode: propVal }, true);\n this.updateCurrency(prop, propVal);\n }\n break;\n case 'currencyCode':\n {\n var propValue = getValue(prop, newProp);\n this.setProperties({ currency: propValue }, true);\n this.updateCurrency('currency', propValue);\n }\n break;\n case 'format':\n setValue(prop, getValue(prop, newProp), this);\n this.initCultureInfo();\n this.updateValue(this.value);\n break;\n case 'decimals':\n this.decimals = newProp.decimals;\n this.updateValue(this.value);\n }\n }\n };\n NumericTextBox.prototype.updateClearButton = function (newProp) {\n Input.setClearButton(newProp.showClearButton, this.element, this.inputWrapper, undefined, this.createElement);\n this.bindClearEvent();\n };\n NumericTextBox.prototype.updateSpinButton = function (newProp) {\n if (newProp.showSpinButton) {\n this.spinBtnCreation();\n }\n else {\n detach(this.spinUp);\n detach(this.spinDown);\n }\n };\n /**\n * Gets the component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n NumericTextBox.prototype.getModuleName = function () {\n return 'numerictextbox';\n };\n __decorate([\n Property('')\n ], NumericTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(-(Number.MAX_VALUE))\n ], NumericTextBox.prototype, \"min\", void 0);\n __decorate([\n Property(Number.MAX_VALUE)\n ], NumericTextBox.prototype, \"max\", void 0);\n __decorate([\n Property(1)\n ], NumericTextBox.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property({})\n ], NumericTextBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"showSpinButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('n2')\n ], NumericTextBox.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"decimals\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currency\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currencyCode\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"strictMode\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"validateDecimalOnType\", void 0);\n __decorate([\n Property('Never')\n ], NumericTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"blur\", void 0);\n NumericTextBox = __decorate([\n NotifyPropertyChanges\n ], NumericTextBox);\n return NumericTextBox;\n}(Component));\nexport { NumericTextBox };\n","/* tslint:disable-next-line:max-line-length */\nimport { EventHandler, isNullOrUndefined, extend, classList, addClass, removeClass, Browser, getValue, setValue, createElement } from '@syncfusion/ej2-base';\nimport { parentsUntil, getUid, appendChildren, getDatePredicate, getObject, extendObjWithFn, eventPromise, setChecked, clearReactVueTemplates, padZero, Global } from '../base/util';\nimport { remove, debounce, Internationalization, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport * as events from '../base/constant';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { getForeignData } from '../base/util';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { getFilterMenuPostion, toogleCheckbox, createCboxWithWrap, removeAddCboxClasses, getColumnByForeignKeyValue } from '../base/util';\n/**\n * @hidden\n * `CheckBoxFilterBase` module is used to handle filtering action.\n */\nvar CheckBoxFilterBase = /** @class */ (function () {\n /**\n * Constructor for checkbox filtering module\n *\n * @param {IXLFilter} parent - specifies the IXLFilter\n * @hidden\n */\n function CheckBoxFilterBase(parent) {\n this.isExecuteLocal = false;\n this.existingPredicate = {};\n this.foreignKeyQuery = new Query();\n /** @hidden */\n this.filterState = true;\n this.values = {};\n this.renderEmpty = false;\n this.isCheckboxFilterTemplate = false;\n this.infiniteRenderMod = false;\n // for infinite scroll ui\n this.infiniteInitialLoad = false;\n this.infiniteSearchValChange = false;\n this.infinitePermenantLocalData = [];\n this.infiniteQueryExecutionPending = false;\n this.infiniteSkipCnt = 0;\n this.infiniteScrollAppendDiff = 0;\n this.prevInfiniteScrollDirection = '';\n this.infiniteLoadedElem = [];\n this.infiniteDataCount = 0;\n this.infiniteLocalSelectAll = true;\n this.localInfiniteSelectAllClicked = false;\n this.localInfiniteSelectionInteracted = false;\n this.infiniteManualSelectMaintainPred = [];\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, { checked: true, label: ' ' });\n this.cBoxFalse = createCheckBox(this.parent.createElement, false, { checked: false, label: ' ' });\n this.cBoxTrue.insertBefore(this.parent.createElement('input', {\n className: 'e-chk-hidden', attrs: { type: 'checkbox' }\n }), this.cBoxTrue.firstChild);\n this.cBoxFalse.insertBefore(this.parent.createElement('input', {\n className: 'e-chk-hidden', attrs: { 'type': 'checkbox' }\n }), this.cBoxFalse.firstChild);\n this.cBoxFalse.querySelector('.e-frame').classList.add('e-uncheck');\n if (this.parent.enableRtl) {\n addClass([this.cBoxTrue, this.cBoxFalse], ['e-rtl']);\n }\n if (this.parent.cssClass) {\n if (this.parent.cssClass.indexOf(' ') !== -1) {\n addClass([this.cBoxTrue, this.cBoxFalse], this.parent.cssClass.split(' '));\n }\n else {\n addClass([this.cBoxTrue, this.cBoxFalse], [this.parent.cssClass]);\n }\n }\n }\n /**\n * @returns {void}\n * @hidden\n */\n CheckBoxFilterBase.prototype.destroy = function () {\n this.closeDialog();\n };\n CheckBoxFilterBase.prototype.wireEvents = function () {\n EventHandler.add(this.dlg, 'click', this.clickHandler, this);\n EventHandler.add(this.dlg, 'keyup', this.keyupHandler, this);\n this.searchHandler = debounce(this.searchBoxKeyUp, 200);\n var elem = this.dialogObj.element.querySelector('.e-searchinput');\n if (elem) {\n EventHandler.add(elem, 'keyup', this.searchHandler, this);\n EventHandler.add(elem, 'input', this.searchHandler, this);\n }\n };\n CheckBoxFilterBase.prototype.unWireEvents = function () {\n EventHandler.remove(this.dlg, 'click', this.clickHandler);\n EventHandler.remove(this.dlg, 'keyup', this.keyupHandler);\n var elem = this.dialogObj.element.querySelector('.e-searchinput');\n if (elem) {\n EventHandler.remove(elem, 'keyup', this.searchHandler);\n EventHandler.remove(elem, 'input', this.searchHandler);\n }\n };\n CheckBoxFilterBase.prototype.foreignKeyFilter = function (args, fColl, mPredicate) {\n var _this = this;\n var fPredicate = {};\n var filterCollection = [];\n var query = this.foreignKeyQuery.clone();\n this.options.column.dataSource.\n executeQuery(query.where(mPredicate)).then(function (e) {\n _this.options.column.columnData = e.result;\n _this.parent.notify(events.generateQuery, { predicate: fPredicate, column: _this.options.column });\n args.ejpredicate = fPredicate.predicate.predicates;\n var fpred = fPredicate.predicate.predicates;\n for (var i = 0; i < fpred.length; i++) {\n filterCollection.push({\n field: fpred[parseInt(i.toString(), 10)].field,\n predicate: 'or',\n matchCase: fpred[parseInt(i.toString(), 10)].ignoreCase,\n ignoreAccent: fpred[parseInt(i.toString(), 10)].ignoreAccent,\n operator: fpred[parseInt(i.toString(), 10)].operator,\n value: fpred[parseInt(i.toString(), 10)].value,\n type: _this.options.type\n });\n }\n args.filterCollection = filterCollection.length ? filterCollection :\n fColl.filter(function (col) { return col.field = _this.options.field; });\n _this.options.handler(args);\n });\n };\n CheckBoxFilterBase.prototype.foreignFilter = function (args, value) {\n var operator = this.options.isRemote ?\n (this.options.column.type === 'string' ? 'contains' : 'equal') : (this.options.column.type ? 'contains' : 'equal');\n var initalPredicate = new Predicate(this.options.column.foreignKeyValue, operator, value, true, this.options.ignoreAccent);\n this.foreignKeyFilter(args, [args.filterCollection], initalPredicate);\n };\n CheckBoxFilterBase.prototype.searchBoxClick = function (e) {\n var target = e.target;\n if (target.classList.contains('e-searchclear')) {\n this.sInput.value = target.classList.contains('e-chkcancel-icon') ? '' : this.sInput.value;\n if (this.isCheckboxFilterTemplate) {\n this.parent.notify('refreshCheckbox', { event: e });\n }\n else {\n this.refreshCheckboxes();\n }\n this.updateSearchIcon();\n this.sInput.focus();\n }\n };\n CheckBoxFilterBase.prototype.searchBoxKeyUp = function (e) {\n if (isNullOrUndefined(e) || (e.key !== 'ArrowUp' && e.key !== 'ArrowDown' && e.key !== 'Tab' && !(e.key === 'Tab' && e.shiftKey))) {\n if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === 'Shimmer') {\n this.parent.showMaskRow(undefined, this.dialogObj.element);\n }\n if (this.isCheckboxFilterTemplate) {\n this.parent.notify('refreshCheckbox', { event: e });\n }\n else {\n this.refreshCheckboxes();\n }\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 if (!isNullOrUndefined(document.body.querySelector('.e-chkcancel-icon'))) {\n document.body.querySelector('.e-chkcancel-icon').setAttribute('title', this.localeObj.getConstant('Clear'));\n }\n }\n else {\n classList(this.sIcon, ['e-search-icon'], ['e-chkcancel-icon']);\n if (!isNullOrUndefined(document.body.querySelector('.e-searchclear.e-search-icon'))) {\n document.body.querySelector('.e-searchclear.e-search-icon').setAttribute('title', this.localeObj.getConstant('Search'));\n }\n }\n };\n /**\n * Gets the localized label by locale keyword.\n *\n * @param {string} key - Defines localization key\n * @returns {string} - returns localization label\n */\n CheckBoxFilterBase.prototype.getLocalizedLabel = function (key) {\n return this.localeObj.getConstant(key);\n };\n CheckBoxFilterBase.prototype.updateDataSource = function () {\n var dataSource = this.options.dataSource;\n var str = 'object';\n if (!(dataSource instanceof DataManager)) {\n for (var i = 0; i < dataSource.length; i++) {\n // eslint-disable-next-line valid-typeof\n if (typeof dataSource !== str) {\n var obj = {};\n obj[this.options.field] = dataSource[parseInt(i.toString(), 10)];\n dataSource[parseInt(i.toString(), 10)] = obj;\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.options.disableHtmlEncode = options.column.disableHtmlEncode || false;\n this.values = {};\n this.localeObj = options.localeObj;\n this.isFiltered = options.filteredColumns.length;\n this.infiniteRenderMod = this.parent.filterSettings && this.parent.filterSettings.enableInfiniteScrolling ? true : false;\n this.infiniteUnloadParentExistPred = this.infiniteRenderMod && this.existingPredicate[this.options.column.field] ? this.existingPredicate[this.options.column.field].slice() : [];\n };\n CheckBoxFilterBase.prototype.getAndSetChkElem = function (options) {\n this.dlg = this.parent.createElement('div', {\n id: this.id + this.options.type + '_excelDlg',\n attrs: { uid: this.options.column.uid },\n className: 'e-checkboxfilter e-filter-popup'\n });\n this.sBox = this.parent.createElement('div', { className: 'e-searchcontainer' });\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', attrs: {\n type: 'text', title: this.getLocalizedLabel('Search')\n }\n });\n this.searchBox = this.parent.createElement('span', { className: 'e-searchbox e-fields' });\n this.searchBox.appendChild(this.sInput);\n this.sBox.appendChild(this.searchBox);\n var inputargs = {\n element: this.sInput, floatLabelType: 'Never', properties: {\n placeholder: this.getLocalizedLabel('Search'),\n cssClass: this.parent.cssClass\n }\n };\n Input.createInput(inputargs, this.parent.createElement);\n this.searchBox.querySelector('.e-input-group').appendChild(this.sIcon);\n }\n this.spinner = this.parent.createElement('div', { className: 'e-spinner' }); //for spinner\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 CheckBoxFilterBase.prototype.showDialog = function (options) {\n var args = {\n requestType: events.filterBeforeOpen,\n columnName: this.options.field, columnType: this.options.type, cancel: false\n };\n var filterModel = 'filterModel';\n args[\"\" + filterModel] = this;\n this.parent.notify(events.cBoxFltrBegin, args);\n if (args.cancel) {\n options.cancel = args.cancel;\n return;\n }\n this.dialogObj = new Dialog({\n visible: false, content: this.sBox,\n close: this.closeDialog.bind(this),\n enableRtl: this.parent.enableRtl,\n width: (!isNullOrUndefined(parentsUntil(options.target, 'e-bigger')))\n || this.parent.element.classList.contains('e-device') ? 260 : 255,\n target: this.parent.element, animationSettings: { effect: 'None' },\n buttons: [{\n click: this.btnClick.bind(this),\n buttonModel: {\n content: this.getLocalizedLabel(this.isExcel ? 'OKButton' : 'FilterButton'),\n cssClass: this.parent.cssClass ? 'e-primary' + ' ' + this.parent.cssClass : 'e-primary',\n isPrimary: true\n }\n },\n {\n click: this.btnClick.bind(this),\n buttonModel: { cssClass: this.parent.cssClass ? 'e-flat' + ' ' + this.parent.cssClass : 'e-flat',\n content: this.getLocalizedLabel(this.isExcel ? 'CancelButton' : 'ClearButton') }\n }],\n created: this.dialogCreated.bind(this),\n open: this.dialogOpen.bind(this),\n cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n });\n var isStringTemplate = 'isStringTemplate';\n this.dialogObj[\"\" + isStringTemplate] = true;\n this.renderResponsiveFilter(options);\n var dialogLabel = this.parent.filterSettings && this.parent.filterSettings.type === 'CheckBox' ?\n this.getLocalizedLabel('CheckBoxFilterDialogARIA') : this.getLocalizedLabel('ExcelFilterDialogARIA');\n this.dlg.setAttribute('aria-label', dialogLabel);\n if (options.isResponsiveFilter) {\n var responsiveCnt = document.querySelector('.e-responsive-dialog > .e-dlg-content > .e-mainfilterdiv');\n responsiveCnt.appendChild(this.dlg);\n }\n else {\n this.parent.element.appendChild(this.dlg);\n }\n this.dialogObj.appendTo(this.dlg);\n this.dialogObj.element.style.maxHeight = options.isResponsiveFilter ? 'none' : this.options.height + 'px';\n this.dialogObj.show();\n var content = this.dialogObj.element.querySelector('.e-dlg-content');\n content.appendChild(this.sBox);\n this.wireEvents();\n if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === 'Shimmer'\n && !this.infiniteRenderMod) {\n this.parent.showMaskRow(undefined, this.dialogObj.element);\n }\n else if (this.infiniteRenderMod && this.parent.filterSettings && this.parent.filterSettings.loadingIndicator === 'Shimmer') {\n this.showMask();\n }\n else {\n if (this.infiniteRenderMod) {\n this.cBox.style.marginTop = this.getListHeight(this.cBox) + 'px';\n }\n createSpinner({ target: this.spinner, cssClass: this.parent.cssClass ? this.parent.cssClass : null }, this.parent.createElement);\n showSpinner(this.spinner);\n }\n this.getAllData();\n };\n CheckBoxFilterBase.prototype.renderResponsiveFilter = function (options) {\n if (options.isResponsiveFilter) {\n this.dialogObj.buttons = [{}];\n this.dialogObj.position = { X: '', Y: '' };\n this.dialogObj.target = document.querySelector('.e-resfilter > .e-dlg-content > .e-mainfilterdiv');\n this.dialogObj.width = '100%';\n }\n };\n CheckBoxFilterBase.prototype.dialogCreated = function (e) {\n if (this.options.isResponsiveFilter) {\n this.dialogObj.element.style.left = '0px';\n }\n else {\n if (!Browser.isDevice) {\n getFilterMenuPostion(this.options.target, this.dialogObj);\n }\n else {\n this.dialogObj.position = { X: 'center', Y: 'center' };\n }\n }\n if (this.options.column.showColumnMenu) {\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 CheckBoxFilterBase.prototype.closeDialog = function () {\n if (this.infiniteRenderMod && this.infinitePermenantLocalData.length && !this.options.isRemote) {\n this.options.dataSource.dataSource.json = this.infinitePermenantLocalData;\n }\n if (this.dialogObj && !this.dialogObj.isDestroyed) {\n this.isBlanks = false;\n var filterTemplateCol = this.options.columns.filter(function (col) { return col.getFilterItemTemplate(); });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var registeredTemplate = this.parent.registeredTemplate;\n if (filterTemplateCol.length && !isNullOrUndefined(registeredTemplate) && registeredTemplate.filterItemTemplate) {\n this.parent.destroyTemplate(['filterItemTemplate']);\n }\n if ((this.parent.isReact || this.parent.isVue) && this.parent.destroyTemplate !== undefined) {\n clearReactVueTemplates(this.parent, ['filterItemTemplate']);\n }\n this.parent.notify(events.filterMenuClose, { field: this.options.field });\n this.dialogObj.destroy();\n this.unWireEvents();\n remove(this.dlg);\n this.dlg = null;\n this.parent.notify(events.filterDialogClose, {});\n }\n };\n /**\n * @param {Column} col - Defines column details\n * @returns {void}\n * @hidden\n */\n CheckBoxFilterBase.prototype.clearFilter = function (col) {\n // eslint-disable-next-line max-len\n var args = { instance: this, handler: this.clearFilter, cancel: false };\n this.parent.notify(events.fltrPrevent, args);\n if (args.cancel) {\n return;\n }\n this.options.handler({ action: 'clear-filter', field: col ? col.field : this.options.field });\n };\n CheckBoxFilterBase.prototype.btnClick = function (e) {\n if (this.filterState) {\n if ((e.target.tagName.toLowerCase() === 'input' && e.target.classList.contains('e-searchinput')) ||\n e.keyCode === 13) {\n if (!this.isCheckboxFilterTemplate) {\n this.fltrBtnHandler();\n }\n }\n else {\n var text = e.target.firstChild.textContent.toLowerCase();\n if (this.getLocalizedLabel(this.isExcel ? 'OKButton' : 'FilterButton').toLowerCase() === text) {\n if (!this.isCheckboxFilterTemplate) {\n this.fltrBtnHandler();\n }\n }\n else if (this.getLocalizedLabel('ClearButton').toLowerCase() === text) {\n this.clearFilter();\n }\n }\n this.closeDialog();\n }\n else if (e.target && e.target.firstChild &&\n e.target.firstChild.textContent.toLowerCase() === this.getLocalizedLabel('CancelButton').toLowerCase()) {\n this.closeDialog();\n }\n else if (!(e.target.tagName.toLowerCase() === 'input')) {\n this.clearFilter();\n this.closeDialog();\n }\n if (this.options.column.showColumnMenu) {\n this.parent.notify(events.afterFilterColumnMenuClose, {});\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n CheckBoxFilterBase.prototype.fltrBtnHandler = function () {\n var _this = this;\n if (this.infiniteRenderMod) {\n this.cBox.innerHTML = '';\n appendChildren(this.cBox, this.infiniteLoadedElem.slice());\n }\n var checked = [].slice.call(this.cBox.querySelectorAll('.e-check:not(.e-selectall):not(.e-add-current)'));\n var check = checked;\n var optr = 'equal';\n var ddlValue = this.dialogObj.element.querySelector('.e-dropdownlist');\n if (ddlValue) {\n this.options.operator = optr = ddlValue.ej2_instances[0].value;\n }\n this.isMenuNotEqual = this.options.operator === 'notequal';\n var searchInput;\n if (!this.options.hideSearchbox) {\n searchInput = this.searchBox.querySelector('.e-searchinput');\n }\n var caseSen = this.options.allowCaseSensitive;\n var defaults = {\n field: this.options.field, predicate: this.isMenuNotEqual ? 'and' : 'or', uid: this.options.uid,\n operator: optr, type: this.options.type, matchCase: caseSen, ignoreAccent: this.options.ignoreAccent\n };\n var isNotEqual = this.itemsCnt !== checked.length && this.itemsCnt - checked.length < checked.length;\n if (isNotEqual && searchInput && searchInput.value === '') {\n optr = this.isMenuNotEqual ? 'equal' : 'notequal';\n checked = [].slice.call(this.cBox.querySelectorAll('.e-uncheck:not(.e-selectall)'));\n defaults.predicate = this.isMenuNotEqual ? 'or' : 'and';\n defaults.operator = optr;\n }\n var value;\n var val;\n var length;\n var fObj;\n var coll = [];\n if ((checked.length !== this.itemsCnt || (searchInput && searchInput.value && searchInput.value !== ''))\n || this.infiniteRenderMod) {\n if (!this.infiniteRenderMod) {\n for (var i = 0; i < checked.length; i++) {\n value = this.values[parentsUntil(checked[parseInt(i.toString(), 10)], 'e-ftrchk').getAttribute('uid')];\n fObj = extend({}, { value: value }, defaults);\n if (value && !value.toString().length) {\n fObj.operator = isNotEqual ? 'notequal' : 'equal';\n }\n if (value === '' || isNullOrUndefined(value)) {\n coll = coll.concat(CheckBoxFilterBase.generateNullValuePredicates(defaults));\n }\n else {\n coll.push(fObj);\n }\n this.notifyFilterPrevEvent(fObj);\n }\n }\n else if (this.infiniteRenderMod) {\n this.infiniteFltrBtnHandler(coll);\n }\n if ((this.options.type === 'date' || this.options.type === 'datetime') && check.length) {\n length = check.length - 1;\n val = this.values[parentsUntil(check[parseInt(length.toString(), 10)], 'e-ftrchk').getAttribute('uid')];\n if (isNullOrUndefined(val) && isNotEqual) {\n coll.push({\n field: defaults.field, matchCase: defaults.matchCase, operator: 'equal',\n predicate: 'and', value: null\n });\n }\n }\n var addCurrSelection = this.infiniteRenderMod ? this.sBox.querySelector('.e-add-current') :\n this.cBox.querySelector('.e-add-current');\n if (addCurrSelection && addCurrSelection.classList.contains('e-check')) {\n var existingPredicate_1 = this.existingPredicate[this.options.field];\n if (existingPredicate_1) {\n var _loop_1 = function (j) {\n if (!coll.some(function (data) {\n return data\n .value === existingPredicate_1[parseInt(j.toString(), 10)].value;\n })) {\n coll.push(existingPredicate_1[parseInt(j.toString(), 10)]);\n }\n };\n for (var j = 0; j < existingPredicate_1.length; j++) {\n _loop_1(j);\n }\n }\n else {\n return;\n }\n }\n if (!this.infiniteRenderMod) {\n this.initiateFilter(coll);\n }\n else if (coll.length) {\n this.initiateFilter(coll);\n }\n else if (this.sBox.querySelector('.e-selectall').classList.contains('e-check') && !coll.length) {\n var isClearFilter = this.options.filteredColumns.some(function (value) {\n return _this.options.field === value.field;\n });\n if (isClearFilter) {\n this.clearFilter();\n }\n }\n }\n else {\n var isClearFilter = this.options.filteredColumns.some(function (value) {\n return _this.options.field === value.field;\n });\n if (isClearFilter) {\n this.clearFilter();\n }\n }\n };\n CheckBoxFilterBase.prototype.infiniteFltrBtnHandler = function (coll) {\n var value;\n if (this.infiniteManualSelectMaintainPred.length) {\n for (var i = 0; i < this.infiniteManualSelectMaintainPred.length; i++) {\n var pred = this.infiniteManualSelectMaintainPred[i];\n value = pred.value + '';\n if (value === '' || isNullOrUndefined(value)) {\n var dummyDefaults = { predicate: pred.predicate, field: pred.field, type: pred.type, uid: pred.uid, operator: pred.operator,\n matchCase: pred.matchCase, ignoreAccent: pred.ignoreAccent };\n coll.push.apply(coll, CheckBoxFilterBase.generateNullValuePredicates(dummyDefaults));\n }\n else {\n coll.push(this.infiniteManualSelectMaintainPred[i]);\n }\n this.notifyFilterPrevEvent(this.infiniteManualSelectMaintainPred[i]);\n }\n }\n if (!this.localInfiniteSelectAllClicked && this.sInput.value === '' && !(!this.options.parentCurrentViewDataCount && coll.length)) {\n for (var i = 0; i < this.infiniteUnloadParentExistPred.length; i++) {\n coll.unshift(this.infiniteUnloadParentExistPred[i]);\n this.notifyFilterPrevEvent(this.existingPredicate[this.options.field][i]);\n }\n }\n if (this.sInput.value !== '' && (!this.localInfiniteSelectAllClicked || this.infiniteLocalSelectAll)) {\n this.infiniteSearchPred['predicate'] = 'or';\n coll.unshift(this.infiniteSearchPred);\n this.notifyFilterPrevEvent(this.infiniteSearchPred);\n }\n };\n CheckBoxFilterBase.prototype.notifyFilterPrevEvent = function (predicate) {\n var args = {\n instance: this, handler: this.fltrBtnHandler, arg1: predicate.field, arg2: predicate.predicate, arg3: predicate.operator,\n arg4: predicate.matchCase, arg5: predicate.ignoreAccent, arg6: predicate.value, cancel: false\n };\n this.parent.notify(events.fltrPrevent, args);\n if (args.cancel) {\n return;\n }\n };\n // eslint-disable-next-line\n /** @hidden */\n CheckBoxFilterBase.generateNullValuePredicates = function (defaults) {\n var coll = [];\n if (defaults.type === 'string') {\n coll.push({\n field: defaults.field, ignoreAccent: defaults.ignoreAccent, matchCase: defaults.matchCase,\n operator: defaults.operator, predicate: defaults.predicate, value: ''\n });\n }\n coll.push({\n field: defaults.field,\n matchCase: defaults.matchCase, operator: defaults.operator, predicate: defaults.predicate, value: null\n });\n coll.push({\n field: defaults.field, matchCase: defaults.matchCase, operator: defaults.operator,\n predicate: defaults.predicate, value: undefined\n });\n return coll;\n };\n // eslint-disable-next-line\n /** @hidden */\n CheckBoxFilterBase.prototype.initiateFilter = function (fColl) {\n var firstVal = fColl[0];\n var predicate;\n if (!isNullOrUndefined(firstVal)) {\n predicate = firstVal.ejpredicate ? firstVal.ejpredicate :\n new Predicate(firstVal.field, firstVal.operator, firstVal.value, !firstVal.matchCase, firstVal.ignoreAccent);\n for (var j = 1; j < fColl.length; j++) {\n predicate = fColl[parseInt(j.toString(), 10)].ejpredicate !== undefined ?\n predicate[fColl[parseInt(j.toString(), 10)].predicate](fColl[parseInt(j.toString(), 10)].ejpredicate) :\n predicate[fColl[parseInt(j.toString(), 10)].predicate](fColl[parseInt(j.toString(), 10)].field, fColl[parseInt(j.toString(), 10)].operator, fColl[parseInt(j.toString(), 10)].value, !fColl[parseInt(j.toString(), 10)].matchCase, fColl[parseInt(j.toString(), 10)].ignoreAccent);\n }\n var args = {\n action: 'filtering', filterCollection: fColl, field: this.options.field,\n ejpredicate: Predicate.or(predicate)\n };\n this.options.handler(args);\n }\n };\n CheckBoxFilterBase.prototype.isForeignColumn = function (col) {\n return col.isForeignColumn ? col.isForeignColumn() : false;\n };\n CheckBoxFilterBase.prototype.refreshCheckboxes = function () {\n var _this = this;\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) { return e && e.fn === 'onWhere'; })[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 ?\n (this.options.type === 'string' ? 'contains' : 'equal') : (this.options.type ? 'contains' : 'equal');\n var matchCase = true;\n var ignoreAccent = this.options.ignoreAccent;\n var field = this.isForeignColumn(column) ? column.foreignKeyValue : column.field;\n parsed = (parsed === '' || parsed === undefined) ? undefined : parsed;\n var coll = [];\n var defaults = {\n field: field, predicate: 'or', uid: this.options.uid,\n operator: 'equal', type: this.options.type, matchCase: matchCase, ignoreAccent: ignoreAccent\n };\n var predicte;\n var moduleName = this.options.dataManager.adaptor.getModuleName;\n if (this.options.type === 'boolean') {\n if (parsed !== undefined &&\n this.getLocalizedLabel('FilterTrue').toLowerCase().indexOf(parsed.toLowerCase()) !== -1) {\n parsed = 'true';\n }\n else if (parsed !== undefined &&\n this.getLocalizedLabel('FilterFalse').toLowerCase().indexOf(parsed.toLowerCase()) !== -1) {\n parsed = 'false';\n }\n if (parsed !== undefined &&\n this.getLocalizedLabel('FilterTrue').toLowerCase().indexOf(parsed.toLowerCase()) !== -1 && moduleName) {\n // eslint-disable-next-line no-constant-condition\n parsed = (moduleName() === 'ODataAdaptor' || 'ODataV4Adaptor') ? true : 'true';\n }\n else if (parsed !== undefined &&\n this.getLocalizedLabel('FilterFalse').toLowerCase().indexOf(parsed.toLowerCase()) !== -1 && moduleName) {\n // eslint-disable-next-line no-constant-condition\n parsed = (moduleName() === 'ODataAdaptor' || 'ODataV4Adaptor') ? false : 'false';\n }\n operator = 'equal';\n }\n if ((this.options.type === 'date' || this.options.type === 'datetime' || this.options.type === 'dateonly') && this.options.format) {\n var intl = new Internationalization();\n var format = typeof (this.options.format) === 'string' ? this.options.format :\n this.options.format.format;\n if (format) {\n parsed = intl.parseDate(val, { format: format }) || new Date(val);\n }\n else {\n parsed = new Date(val);\n }\n if (this.options.type === 'dateonly') {\n parsed = parsed.getFullYear() + '-' + padZero(parsed.getMonth() + 1) + '-' + padZero(parsed.getDate());\n }\n }\n this.infiniteSearchValChange = true;\n this.infiniteLoadedElem = [];\n this.infiniteLocalSelectAll = true;\n this.localInfiniteSelectAllClicked = false;\n this.localInfiniteSelectionInteracted = false;\n this.infiniteSkipCnt = 0;\n this.infiniteDataCount = 0;\n this.infiniteManualSelectMaintainPred = [];\n if (this.sInput.value === '') {\n this.infiniteUnloadParentExistPred = this.infiniteRenderMod && this.existingPredicate[this.options.column.field] ? this.existingPredicate[this.options.column.field].slice() : [];\n this.options.parentTotalDataCount = this.options.parentTotalDataCount;\n }\n else {\n this.infiniteUnloadParentExistPred = [];\n }\n this.addDistinct(query);\n var args = {\n requestType: events.filterSearchBegin,\n filterModel: this, columnName: field, column: column,\n operator: operator, matchCase: matchCase, ignoreAccent: ignoreAccent, filterChoiceCount: null,\n query: query, value: parsed\n };\n if (this.infiniteRenderMod && this.parent.filterSettings.itemsCount) {\n args.filterChoiceCount = this.parent.filterSettings.itemsCount;\n }\n this.parent.trigger(events.actionBegin, args, function (filterargs) {\n // eslint-disable-next-line no-self-assign\n filterargs.operator = filterargs.operator;\n predicte = new Predicate(field, filterargs.operator, args.value, filterargs.matchCase, filterargs.ignoreAccent);\n if (_this.options.type === 'date' || _this.options.type === 'datetime' || _this.options.type === 'dateonly') {\n operator = 'equal';\n var filterObj = {\n field: field, operator: operator, value: parsed, matchCase: matchCase,\n ignoreAccent: ignoreAccent\n };\n if (!isNullOrUndefined(parsed)) {\n predicte = getDatePredicate(filterObj, _this.options.type);\n }\n }\n if (val && typeof val === 'string' && _this.isBlanks &&\n _this.getLocalizedLabel('Blanks').toLowerCase().indexOf(val.toLowerCase()) >= 0) {\n coll = coll.concat(CheckBoxFilterBase.generateNullValuePredicates(defaults));\n var emptyValPredicte = CheckBoxFilterBase.generatePredicate(coll);\n emptyValPredicte.predicates.push(predicte);\n predicte = emptyValPredicte;\n query.where(emptyValPredicte);\n }\n else if (val.length) {\n predicte = !isNullOrUndefined(pred) ? predicte.and(pred.e) : predicte;\n query.where(predicte);\n }\n else if (!isNullOrUndefined(pred)) {\n predicte = pred.e;\n query.where(pred.e);\n }\n _this.infiniteSearchPred = predicte;\n filterargs.filterChoiceCount = !isNullOrUndefined(filterargs.filterChoiceCount) ? filterargs.filterChoiceCount : 1000;\n if (_this.infiniteRenderMod && _this.parent.filterSettings.itemsCount !== filterargs.filterChoiceCount) {\n _this.parent.filterSettings.itemsCount = args.filterChoiceCount;\n }\n var fPredicate = {};\n showSpinner(_this.spinner);\n _this.renderEmpty = false;\n if (_this.isForeignColumn(column) && val.length) {\n var colData = ('result' in column.dataSource) ? new DataManager(column.dataSource.result) :\n column.dataSource;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n colData.executeQuery(query).then(function (e) {\n var columnData = _this.options.column.columnData;\n _this.options.column.columnData = e.result;\n _this.parent.notify(events.generateQuery, { predicate: fPredicate, column: column });\n if (fPredicate.predicate.predicates.length) {\n foreignQuery.where(fPredicate.predicate);\n }\n else {\n _this.renderEmpty = true;\n }\n _this.options.column.columnData = columnData;\n if (_this.infiniteRenderMod) {\n _this.infiniteInitialLoad = isNullOrUndefined(_this.fullData) ? true : false;\n _this.makeInfiniteScrollRequest(foreignQuery);\n foreignQuery.requiresCount();\n }\n else {\n foreignQuery.take(filterargs.filterChoiceCount);\n }\n _this.search(filterargs, foreignQuery);\n });\n }\n else {\n if (_this.infiniteRenderMod && _this.parent.filterSettings.itemsCount) {\n _this.infiniteInitialLoad = isNullOrUndefined(_this.fullData) ? true : false;\n _this.makeInfiniteScrollRequest(query);\n query.requiresCount();\n }\n else {\n query.take(filterargs.filterChoiceCount);\n }\n _this.search(filterargs, 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 }\n else {\n this.processSearch(query);\n }\n };\n CheckBoxFilterBase.prototype.getPredicateFromCols = function (columns, isExecuteLocal) {\n var predicates = CheckBoxFilterBase.getPredicate(columns, isExecuteLocal);\n var predicateList = [];\n var fPredicate = {};\n var isGrid = this.parent.getForeignKeyColumns !== undefined;\n var foreignColumn = isGrid ? this.parent.getForeignKeyColumns() : [];\n for (var _i = 0, _a = Object.keys(predicates); _i < _a.length; _i++) {\n var prop = _a[_i];\n var col = void 0;\n if (isGrid && !this.parent.getColumnByField(prop)) {\n col = getColumnByForeignKeyValue(prop, foreignColumn);\n }\n if (col) {\n this.parent.notify(events.generateQuery, { predicate: fPredicate, column: col });\n if (fPredicate.predicate.predicates.length) {\n predicateList.push(Predicate.or(fPredicate.predicate.predicates));\n }\n }\n else {\n predicateList.push(predicates[\"\" + prop]);\n }\n }\n return predicateList.length && Predicate.and(predicateList);\n };\n CheckBoxFilterBase.prototype.getQuery = function () {\n return this.parent.getQuery ? this.parent.getQuery().clone() : new Query();\n };\n CheckBoxFilterBase.prototype.getAllData = function () {\n var _this = this;\n this.customQuery = false;\n var query = this.getQuery();\n query.requiresCount(); //consider take query\n this.addDistinct(query);\n var args = {\n requestType: events.filterChoiceRequest, query: query, filterChoiceCount: null\n };\n var filterModel = 'filterModel';\n args[\"\" + filterModel] = this;\n if (this.infiniteRenderMod && this.parent.filterSettings.itemsCount) {\n args.filterChoiceCount = this.parent.filterSettings.itemsCount;\n }\n this.parent.trigger(events.actionBegin, args, function (args) {\n args.filterChoiceCount = !isNullOrUndefined(args.filterChoiceCount) ? args.filterChoiceCount : 1000;\n if (_this.infiniteRenderMod && _this.parent.filterSettings.itemsCount !== args.filterChoiceCount) {\n _this.parent.filterSettings.itemsCount = args.filterChoiceCount;\n }\n if (!_this.infiniteRenderMod) {\n query.take(args.filterChoiceCount);\n }\n if (!args.query.distincts.length || _this.infiniteRenderMod) {\n _this.customQuery = true;\n _this.queryGenerate(query);\n }\n if (_this.infiniteRenderMod) {\n _this.infiniteInitialLoad = isNullOrUndefined(_this.fullData) ? true : false;\n _this.makeInfiniteScrollRequest(query);\n }\n if (_this.parent.dataSource && 'result' in _this.parent.dataSource) {\n _this.filterEvent(args, query);\n }\n else {\n _this.processDataOperation(query, true);\n }\n });\n };\n CheckBoxFilterBase.prototype.addDistinct = function (query) {\n var _this = this;\n var _a;\n var filteredColumn = DataUtil.distinct(this.options.filteredColumns, 'field');\n if (filteredColumn.indexOf(this.options.column.field) <= -1) {\n filteredColumn = filteredColumn.concat(this.options.column.field);\n }\n if (!this.infiniteRenderMod) {\n query.distinct(filteredColumn);\n }\n if (this.infiniteRenderMod && !this.options.isRemote && this.sInput.value === '') {\n this.options.dataSource = this.options.dataSource instanceof DataManager ?\n this.options.dataSource : new DataManager(this.options.dataSource);\n this.infinitePermenantLocalData = this.options.dataSource.dataSource.json.slice();\n this.options.dataSource.dataSource.json = DataUtil.distinct((_a = this.options.parentFilteredLocalRecords).concat.apply(_a, this.infinitePermenantLocalData), this.options.column.field, true);\n if (this.isForeignColumn(this.options.column)) {\n this.options.column.dataSource = this.options.column.dataSource instanceof DataManager ?\n this.options.column.dataSource : new DataManager(this.options.column.dataSource);\n this.options.dataSource.dataSource.json = this.options.dataSource.dataSource.json.map(function (item, i) {\n return Object.assign({}, item, _this.options.column.dataSource.dataSource.json[i]);\n });\n }\n }\n else if (this.infiniteRenderMod && this.options.isRemote) {\n query.select(this.options.column.field);\n query.sortBy(this.options.column.field, 'ascending');\n var moduleName = this.options.dataManager.adaptor.getModuleName;\n if (moduleName && moduleName() && (moduleName() === 'ODataV4Adaptor' || moduleName() === 'WebApiAdaptor'\n || moduleName() === 'CustomDataAdaptor' || moduleName() === 'GraphQLAdaptor' || moduleName() === 'ODataAdaptor')) {\n query.distinct(filteredColumn);\n }\n }\n return query;\n };\n CheckBoxFilterBase.prototype.filterEvent = function (args, query) {\n var _this = this;\n var defObj = eventPromise(args, query);\n this.parent.trigger(events.dataStateChange, defObj.state);\n var def = defObj.deffered;\n def.promise.then(function (e) {\n _this.dataSuccess(e);\n });\n };\n CheckBoxFilterBase.prototype.infiniteScrollMouseKeyDownHandler = function () {\n EventHandler.remove(this.cBox, 'scroll', this.infiniteScrollHandler);\n };\n CheckBoxFilterBase.prototype.infiniteScrollMouseKeyUpHandler = function (e) {\n var _this = this;\n EventHandler.add(this.cBox, 'scroll', this.infiniteScrollHandler, this);\n var target = this.cBox;\n if (target.children.length > 1 && (target.scrollTop >= target.scrollHeight - target.offsetHeight || target.scrollTop <= 0)) {\n this.infiniteScrollHandler();\n }\n Global.timer = setTimeout(function () { _this.clickHandler(e); Global.timer = null; }, 0);\n };\n CheckBoxFilterBase.prototype.getListHeight = function (element) {\n var listDiv = createElement('div', { className: 'e-ftrchk', styles: 'visibility: hidden' });\n listDiv.innerHTML = '
A
';\n element.appendChild(listDiv);\n var rect = listDiv.getBoundingClientRect();\n element.removeChild(listDiv);\n var listHeight = Math.round(rect.height);\n return listHeight;\n };\n CheckBoxFilterBase.prototype.getShimmerTemplate = function () {\n return '';\n };\n CheckBoxFilterBase.prototype.showMask = function () {\n var maskRowCount = 5;\n var maskItemHeight;\n var maskList = this.parent.createElement('div', { id: this.id + this.options.type + '_CheckBoxMaskList',\n className: 'e-checkboxlist e-fields e-infinite-list e-masklist', styles: 'z-index: 10;' });\n var wrapperElem = this.cBox;\n this.removeMask();\n if (wrapperElem) {\n var computedStyle = getComputedStyle(wrapperElem);\n var height = wrapperElem.children.length ? parseInt(computedStyle.height) :\n Math.floor(parseInt(computedStyle.height.split('px')[0])) - 5;\n var backgroundColor = this.isExcel && !wrapperElem.children.length && !this.dlg.classList.contains('e-excelfilter') ?\n '' : getComputedStyle(this.dlg.querySelector('.e-dlg-content')).backgroundColor;\n maskList.style.cssText = 'width: ' + computedStyle.width + '; min-height: ' + computedStyle.minHeight + '; height: ' +\n height + 'px; margin: ' + computedStyle.margin + '; border-style: ' + computedStyle.borderStyle + '; border-width: '\n + computedStyle.borderWidth + '; border-color: ' + computedStyle.borderColor + '; position: absolute; background-color: ' +\n backgroundColor + ';';\n var liHeight = this.getListHeight(wrapperElem);\n maskRowCount = Math.floor(height / liHeight);\n maskRowCount = wrapperElem.children.length > maskRowCount ? wrapperElem.children.length : maskRowCount;\n maskItemHeight = liHeight + 'px';\n }\n var maskTemplate = '
'\n + '
'\n + this.getShimmerTemplate() + this.getShimmerTemplate() + '
';\n maskList.innerHTML = '';\n if (!wrapperElem.children.length) {\n this.spinner.insertAdjacentHTML('beforebegin', maskTemplate);\n var maskSpan = [].slice.call(this.spinner.parentElement\n .querySelectorAll('.e-mask:not(.e-mask-checkbox-filter-intent):not(.e-mask-checkbox-filter-span-intent)'));\n maskSpan[0].classList.add('e-mask-checkbox-filter-intent');\n maskSpan[1].classList.add('e-mask-checkbox-filter-span-intent');\n }\n this.spinner.insertBefore(maskList, this.cBox);\n for (var i = 0; maskRowCount && i < maskRowCount; i++) {\n maskList.innerHTML += maskTemplate;\n var maskSpan = [].slice.call(maskList\n .querySelectorAll('.e-mask:not(.e-mask-checkbox-filter-intent):not(.e-mask-checkbox-filter-span-intent)'));\n maskSpan[0].classList.add('e-mask-checkbox-filter-intent');\n maskSpan[1].classList.add('e-mask-checkbox-filter-span-intent');\n }\n if (this.cBox) {\n maskList.scrollTop = this.cBox.scrollTop;\n }\n };\n CheckBoxFilterBase.prototype.removeMask = function () {\n var maskLists = this.dialogObj.element.querySelectorAll('.e-mask-ftrchk');\n if (maskLists.length) {\n for (var i = 0; i < maskLists.length; i++) {\n remove(maskLists[i]);\n }\n }\n var maskParent = this.dialogObj.element.querySelector('.e-checkboxlist.e-masklist');\n if (maskParent) {\n remove(this.dialogObj.element.querySelector('.e-checkboxlist.e-masklist'));\n }\n };\n CheckBoxFilterBase.prototype.infiniteScrollHandler = function () {\n var target = this.cBox;\n if (target.scrollTop >= target.scrollHeight - target.offsetHeight && !this.infiniteQueryExecutionPending\n && this.infiniteLoadedElem.length <= (this.infiniteSkipCnt + this.parent.filterSettings.itemsCount)\n && this.cBox.children.length === this.parent.filterSettings.itemsCount * 3\n && (!this.infiniteDataCount || this.infiniteDataCount > (this.infiniteSkipCnt + this.parent.filterSettings.itemsCount))) {\n this.makeInfiniteScrollRequest();\n this.prevInfiniteScrollDirection = 'down';\n }\n else if (target.scrollTop >= target.scrollHeight - target.offsetHeight && !this.infiniteQueryExecutionPending\n && this.infiniteLoadedElem.length > (this.infiniteSkipCnt + this.parent.filterSettings.itemsCount)\n && this.cBox.children.length === this.parent.filterSettings.itemsCount * 3) {\n this.infiniteRemoveElements(([].slice.call(this.cBox.children)).splice(0, this.parent.filterSettings.itemsCount));\n this.infiniteSkipCnt += this.prevInfiniteScrollDirection === 'down' ? this.parent.filterSettings.itemsCount :\n (this.parent.filterSettings.itemsCount * 3);\n appendChildren(this.cBox, this.infiniteLoadedElem.slice(this.infiniteSkipCnt, this.parent.filterSettings.itemsCount + this.infiniteSkipCnt));\n this.prevInfiniteScrollDirection = 'down';\n }\n else if (target.scrollTop === 0 && !this.infiniteInitialLoad && !this.infiniteSearchValChange && this.infiniteSkipCnt\n && this.infiniteLoadedElem.length && this.infiniteLoadedElem.length > this.parent.filterSettings.itemsCount * 3\n && this.cBox.children.length === this.parent.filterSettings.itemsCount * 3) {\n this.infiniteRemoveElements(([].slice.call(this.cBox.children)).splice((this.parent.filterSettings.itemsCount * 2), this.parent.filterSettings.itemsCount));\n this.infiniteSkipCnt -= this.prevInfiniteScrollDirection === 'up' ? this.parent.filterSettings.itemsCount :\n (this.parent.filterSettings.itemsCount * 3);\n this.infiniteAppendElements([].slice.call(this.infiniteLoadedElem.slice(this.infiniteSkipCnt, this.infiniteSkipCnt + this.parent.filterSettings.itemsCount)));\n this.cBox.scrollTop = this.infiniteScrollAppendDiff;\n this.prevInfiniteScrollDirection = 'up';\n }\n else if (target.scrollTop === 0 && !this.infiniteInitialLoad && !this.infiniteSearchValChange && this.infiniteSkipCnt\n && this.infiniteLoadedElem.length && this.cBox.children.length < this.parent.filterSettings.itemsCount * 3) {\n this.infiniteRemoveElements(([].slice.call(this.cBox.children)).splice((this.parent.filterSettings.itemsCount * 2), this.infiniteDataCount % this.parent.filterSettings.itemsCount));\n this.infiniteSkipCnt = (Math.floor(this.infiniteDataCount / this.parent.filterSettings.itemsCount) - 3) *\n this.parent.filterSettings.itemsCount;\n this.infiniteAppendElements([].slice.call(this.infiniteLoadedElem.slice(this.infiniteSkipCnt, this.infiniteSkipCnt + this.parent.filterSettings.itemsCount)));\n this.cBox.scrollTop = this.infiniteScrollAppendDiff;\n this.prevInfiniteScrollDirection = 'up';\n }\n };\n CheckBoxFilterBase.prototype.infiniteRemoveElements = function (removeElem) {\n for (var i = 0; i < removeElem.length; i++) {\n remove(removeElem[i]);\n }\n };\n CheckBoxFilterBase.prototype.infiniteAppendElements = function (appendElem) {\n for (var i = 0; i < appendElem.length; i++) {\n this.cBox.insertBefore(appendElem[i], this.cBox.children[i]);\n }\n };\n CheckBoxFilterBase.prototype.makeInfiniteScrollRequest = function (query) {\n var _this = this;\n if (!this.infiniteInitialLoad && this.parent.filterSettings && this.parent.filterSettings.loadingIndicator === 'Shimmer') {\n setTimeout(function () {\n if (_this.infiniteQueryExecutionPending) {\n _this.showMask();\n }\n }, 500);\n }\n else if (!this.infiniteInitialLoad) {\n createSpinner({ target: this.spinner, cssClass: this.parent.cssClass ? this.parent.cssClass : null }, this.parent.createElement);\n showSpinner(this.spinner);\n }\n var fName = 'fn';\n if (this.infiniteQuery && this.infiniteQuery.queries && this.infiniteQuery.queries.length) {\n for (var i = 0; i < this.infiniteQuery.queries.length; i++) {\n if (this.infiniteQuery.queries[i][\"\" + fName] === 'onTake'\n || this.infiniteQuery.queries[i][\"\" + fName] === 'onSkip') {\n this.infiniteQuery.queries.splice(i, 1);\n i--;\n }\n }\n }\n var existQuery = query ? true : false;\n query = query ? query : this.infiniteQuery;\n if (this.infiniteInitialLoad || this.infiniteSearchValChange) {\n this.infiniteSkipCnt = 0;\n }\n else {\n this.infiniteSkipCnt += this.parent.filterSettings.itemsCount;\n }\n query.skip(this.infiniteSkipCnt);\n if (this.infiniteInitialLoad || this.infiniteSearchValChange) {\n query.take(this.parent.filterSettings.itemsCount * 3);\n this.infiniteSkipCnt += this.parent.filterSettings.itemsCount * 2;\n }\n else {\n query.take(this.parent.filterSettings.itemsCount);\n }\n if (!existQuery) {\n this.processDataOperation(query);\n this.infiniteQueryExecutionPending = true;\n }\n };\n CheckBoxFilterBase.prototype.processDataOperation = function (query, isInitial) {\n var _this = this;\n this.options.dataSource = this.options.dataSource instanceof DataManager ?\n this.options.dataSource : new DataManager(this.options.dataSource);\n var allPromise = [];\n var runArray = [];\n if (this.isForeignColumn(this.options.column) && isInitial) {\n var colData = ('result' in this.options.column.dataSource) ?\n new DataManager(this.options.column.dataSource.result) :\n this.options.column.dataSource;\n this.foreignKeyQuery.params = query.params;\n allPromise.push(colData.executeQuery(this.foreignKeyQuery));\n runArray.push(function (data) { return _this.foreignKeyData = data; });\n }\n if (this.infiniteRenderMod) {\n this.infiniteQuery = query.clone();\n if (this.infiniteInitialLoad) {\n this.cBox.classList.add('e-checkbox-infinitescroll');\n EventHandler.add(this.cBox, 'scroll', this.infiniteScrollHandler, this);\n EventHandler.add(this.cBox, 'mouseup', this.infiniteScrollMouseKeyUpHandler, this);\n EventHandler.add(this.cBox, 'mousedown', this.infiniteScrollMouseKeyDownHandler, this);\n }\n else if (this.infiniteSearchValChange) {\n this.cBox.innerHTML = '';\n }\n }\n if (this.infiniteRenderMod && this.infiniteInitialLoad && !this.options.isRemote) {\n var field = this.isForeignColumn(this.options.column) ? this.options.foreignKeyValue :\n this.options.column.field;\n this.options.dataSource.executeQuery(new Query().sortBy(field, DataUtil.fnAscending)).then(function (e) {\n _this.options.dataSource.dataSource.json = e.result;\n _this.executeQueryOperations(query, allPromise, runArray);\n });\n }\n else {\n this.executeQueryOperations(query, allPromise, runArray);\n }\n };\n CheckBoxFilterBase.prototype.executeQueryOperations = function (query, allPromise, runArray) {\n var _this = this;\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 _this.infiniteQueryExecutionPending = _this.infiniteRenderMod ? false : _this.infiniteQueryExecutionPending;\n for (var j = 0; j < e.length; j++) {\n _this.infiniteDataCount = _this.infiniteRenderMod && !_this.infiniteDataCount ? e[j].count : _this.infiniteDataCount;\n runArray[i++](e[parseInt(j.toString(), 10)].result);\n }\n }).catch(function () {\n if (_this.infiniteRenderMod && _this.parent.filterSettings && _this.parent.filterSettings.loadingIndicator === 'Shimmer') {\n _this.parent.showMaskRow(undefined, _this.dialogObj.element);\n }\n });\n };\n CheckBoxFilterBase.prototype.dataSuccess = function (e) {\n if (!this.infiniteInitialLoad && this.infiniteDataCount && ((this.infiniteSkipCnt >= this.infiniteDataCount\n && !this.infiniteSearchValChange) || (e.length === 0))) {\n return;\n }\n this.fullData = e;\n var args1 = { dataSource: this.fullData, executeQuery: true, field: this.options.field };\n this.parent.notify(events.beforeCheckboxRenderer, args1);\n if (args1.executeQuery) {\n var query = new Query();\n if (!this.customQuery) {\n this.isExecuteLocal = true;\n this.queryGenerate(query);\n this.isExecuteLocal = false;\n }\n // query.select(this.options.field);\n var result = new DataManager(args1.dataSource).executeLocal(query);\n var col = this.options.column;\n this.filteredData = CheckBoxFilterBase.getDistinct(result, this.options.field, col, this.foreignKeyData, this).records || [];\n }\n var data = args1.executeQuery ? this.filteredData : args1.dataSource;\n this.processDataSource(null, true, data, args1);\n if (this.sInput && ((this.infiniteRenderMod && this.infiniteInitialLoad) || !this.infiniteRenderMod)) {\n this.sInput.focus();\n }\n if (this.infiniteInitialLoad || this.infiniteSearchValChange) {\n this.infiniteInitialLoad = false;\n this.infiniteSearchValChange = false;\n }\n var args = {\n requestType: events.filterAfterOpen,\n columnName: this.options.field, columnType: this.options.type\n };\n var filterModel = 'filterModel';\n args[\"\" + filterModel] = this;\n this.parent.notify(events.cBoxFltrComplete, args);\n if (this.isCheckboxFilterTemplate) {\n hideSpinner(this.spinner);\n }\n };\n CheckBoxFilterBase.prototype.queryGenerate = function (query) {\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) { return f.field; });\n query.search(sSettings.key, fields, sSettings.operator, sSettings.ignoreCase, sSettings.ignoreAccent);\n }\n if ((this.options.filteredColumns.length)) {\n var cols = [];\n for (var i = 0; i < this.options.filteredColumns.length; i++) {\n var filterColumn = this.options.filteredColumns[parseInt(i.toString(), 10)];\n if (this.options.uid) {\n filterColumn.uid = filterColumn.uid || this.parent.getColumnByField(filterColumn.field).uid;\n if (filterColumn.uid !== this.options.uid) {\n cols.push(this.options.filteredColumns[parseInt(i.toString(), 10)]);\n }\n }\n else {\n if (filterColumn.field !== this.options.field) {\n cols.push(this.options.filteredColumns[parseInt(i.toString(), 10)]);\n }\n }\n }\n var predicate = this.getPredicateFromCols(cols, this.isExecuteLocal);\n if (predicate) {\n query.where(predicate);\n }\n }\n };\n CheckBoxFilterBase.prototype.processDataSource = function (query, isInitial, dataSource, args) {\n showSpinner(this.spinner);\n // 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 this.isExecuteLocal = true;\n this.updateResult();\n this.isExecuteLocal = false;\n var args1 = { dataSource: this.fullData, isCheckboxFilterTemplate: false, column: this.options.column,\n element: this.cBox, type: this.options.type, format: this.options.type, btnObj: this.options.isResponsiveFilter ? null :\n this.dialogObj.btnObj[0], searchBox: this.searchBox };\n this.parent.notify(events.beforeCheckboxfilterRenderer, args1);\n this.isCheckboxFilterTemplate = args1.isCheckboxFilterTemplate;\n if (!this.isCheckboxFilterTemplate) {\n this.createFilterItems(dataSource, isInitial, args);\n }\n else if (this.infiniteRenderMod && this.parent.filterSettings && this.parent.filterSettings.loadingIndicator === 'Shimmer') {\n this.removeMask();\n }\n };\n CheckBoxFilterBase.prototype.processSearch = function (query) {\n this.processDataOperation(query);\n };\n CheckBoxFilterBase.prototype.updateResult = function () {\n this.result = {};\n var predicate = this.infiniteRenderMod && this.existingPredicate[this.options.field] ?\n this.getPredicateFromCols(this.existingPredicate[this.options.field], this.isExecuteLocal) :\n this.getPredicateFromCols(this.options.filteredColumns, this.isExecuteLocal);\n var query = new Query();\n if (predicate) {\n query.where(predicate);\n }\n this.parent.notify(events.beforeCheckboxRendererQuery, { query: query });\n var result = new DataManager(this.fullData).executeLocal(query);\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 CheckBoxFilterBase.prototype.clickHandler = function (e) {\n var _a;\n if (!isNullOrUndefined(Global.timer)) {\n clearTimeout(Global.timer);\n }\n var target = e.target;\n if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === 'Shimmer'\n && parentsUntil(target, 'e-mask-ftrchk')) {\n return;\n }\n var elem = parentsUntil(target, 'e-checkbox-wrapper');\n if (parentsUntil(target, 'e-searchbox')) {\n this.searchBoxClick(e);\n }\n if (elem && !this.isCheckboxFilterTemplate) {\n var selectAll = elem.querySelector('.e-selectall');\n if (selectAll) {\n this.updateAllCBoxes(!selectAll.classList.contains('e-check'));\n }\n else {\n toogleCheckbox(elem.parentElement);\n if (this.infiniteRenderMod && !elem.parentElement.querySelector('.e-add-current')) {\n this.localInfiniteSelectionInteracted = true;\n var caseSen = this.options.allowCaseSensitive;\n var span = elem.parentElement.querySelector('.e-frame');\n var input = span.previousSibling;\n var optr = input.checked ? 'equal' : 'notequal';\n var pred = input.checked ? 'or' : 'and';\n var defaults = { field: this.options.field, predicate: pred, uid: this.options.uid,\n operator: optr, type: this.options.type, matchCase: caseSen, ignoreAccent: this.options.ignoreAccent\n };\n var value = this.values[parentsUntil(input, 'e-ftrchk').getAttribute('uid')];\n this.updateInfiniteManualSelectPred(defaults, value);\n if (this.infiniteRenderMod && !this.options.isRemote && this.options.parentTotalDataCount\n && this.infiniteUnloadParentExistPred.length) {\n var predicate = this.getPredicateFromCols((_a = this.options.filteredColumns).concat.apply(_a, this.infiniteManualSelectMaintainPred), true);\n var query = new Query();\n if (predicate) {\n query.where(predicate);\n }\n var result = new DataManager(this.infinitePermenantLocalData).executeLocal(query);\n if (this.options.parentTotalDataCount !== result.length) {\n this.options.parentTotalDataCount = result.length;\n }\n if (!this.options.parentTotalDataCount && this.infiniteUnloadParentExistPred.length) {\n this.infiniteUnloadParentExistPred = [];\n }\n }\n if (this.infiniteUnloadParentExistPred.length && (this.options.parentTotalDataCount === this.infiniteDataCount\n || !this.options.parentTotalDataCount)) {\n this.infiniteUnloadParentExistPred = [];\n }\n }\n }\n this.updateIndeterminatenBtn();\n elem.querySelector('.e-chk-hidden').focus();\n }\n this.setFocus(parentsUntil(elem, 'e-ftrchk'));\n };\n CheckBoxFilterBase.prototype.updateInfiniteManualSelectPred = function (defaults, value) {\n for (var i = 0; i < this.infiniteManualSelectMaintainPred.length; i++) {\n var predmdl = this.infiniteManualSelectMaintainPred[i];\n if (predmdl.value + '' === value + '' && (predmdl.operator === 'equal' || predmdl.operator === 'notequal')) {\n this.infiniteManualSelectMaintainPred.splice(i, 1);\n break;\n }\n }\n if ((defaults.predicate === 'or' && (!this.localInfiniteSelectAllClicked || !this.infiniteLocalSelectAll))\n || (defaults.predicate === 'and' && (!this.localInfiniteSelectAllClicked || this.infiniteLocalSelectAll))) {\n this.infiniteManualSelectMaintainPred.push(extend({}, { value: value }, defaults));\n if (defaults.predicate === 'or') {\n this.options.parentTotalDataCount++;\n }\n else {\n this.options.parentTotalDataCount--;\n }\n }\n };\n /**\n * Method to set the next target element on keyboard navigation using arrow keys.\n *\n */\n CheckBoxFilterBase.prototype.focusNextOrPrev = function (e, focusableElements) {\n var nextIndex = (e.key === 'ArrowUp') ? focusableElements.indexOf(document.activeElement) - 1\n : focusableElements.indexOf(document.activeElement) + 1;\n var nextElement = focusableElements[((nextIndex + focusableElements.length) % focusableElements.length)];\n // Set focus on the next / previous element\n if (nextElement) {\n nextElement.focus();\n var target = nextElement.classList.contains('e-chk-hidden') ? parentsUntil(nextElement, 'e-ftrchk') : nextElement;\n this.setFocus(target);\n }\n };\n CheckBoxFilterBase.prototype.keyupHandler = function (e) {\n if ((e.key === 'Tab' && e.shiftKey) || e.key === 'Tab' || ((e.key === 'ArrowUp' || e.key === 'ArrowDown') && !e.altKey)) {\n this.setFocus(parentsUntil(e.target, 'e-ftrchk'));\n }\n if ((e.key === 'ArrowUp' || e.key === 'ArrowDown') && !e.altKey && this.parent.filterSettings.type === 'CheckBox') {\n e.preventDefault();\n var focusableElements = Array.from(this.dlg.querySelectorAll('input, button, [tabindex]:not([tabindex=\"-1\"])'));\n this.focusNextOrPrev(e, focusableElements);\n }\n };\n CheckBoxFilterBase.prototype.setFocus = function (elem) {\n var prevElem = this.dlg.querySelector('.e-chkfocus');\n if (prevElem) {\n prevElem.classList.remove('e-chkfocus');\n }\n if (elem && elem !== prevElem) {\n elem.classList.add('e-chkfocus');\n }\n };\n CheckBoxFilterBase.prototype.updateAllCBoxes = function (checked) {\n if (this.infiniteRenderMod) {\n this.localInfiniteSelectAllClicked = true;\n this.infiniteLocalSelectAll = checked;\n this.infiniteUnloadParentExistPred = [];\n this.infiniteManualSelectMaintainPred = [];\n }\n var cBoxes = this.infiniteRenderMod ?\n this.infiniteLoadedElem.map(function (arr) {\n return arr.querySelector('.e-frame');\n }) : [].slice.call(this.cBox.querySelectorAll('.e-frame:not(.e-add-current)'));\n for (var _i = 0, cBoxes_1 = cBoxes; _i < cBoxes_1.length; _i++) {\n var cBox = cBoxes_1[_i];\n removeAddCboxClasses(cBox, checked);\n setChecked(cBox.previousSibling, checked);\n }\n };\n 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 if (!this.options.isResponsiveFilter) {\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) :\n this.cBoxFalse.cloneNode(true);\n setChecked(elem.querySelector('input'), checked);\n var label = elem.querySelector('.e-label');\n var dummyData = extendObjWithFn({}, data, { column: this.options.column, parent: this.parent });\n var innerText = this.options.disableHtmlEncode ? 'textContent' : 'innerHTML';\n label[\"\" + innerText] = !isNullOrUndefined(value) && value.toString().length ?\n this.parent.enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(value) : value : this.getLocalizedLabel('Blanks');\n var checkboxUid = getUid('cbox');\n label.setAttribute('id', checkboxUid + 'cboxLabel');\n elem.querySelector('input').setAttribute('aria-labelledby', label.id);\n if (label.innerHTML === this.getLocalizedLabel('Blanks')) {\n this.isBlanks = true;\n }\n if (typeof value === 'boolean') {\n label.innerHTML = value === true ? this.getLocalizedLabel('FilterTrue') : this.getLocalizedLabel('FilterFalse');\n }\n addClass([label], ['e-checkboxfiltertext']);\n if (this.options.template && data[this.options.column.field] !== this.getLocalizedLabel('SelectAll')\n && data[this.options.column.field] !== this.getLocalizedLabel('AddCurrentSelection')) {\n label.innerHTML = '';\n var isReactCompiler = this.parent.isReact && this.options.column.filter\n && typeof (this.options.column.filter.itemTemplate) !== 'string';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.parent.parentDetails.parentInstObj.isReact;\n if (isReactCompiler || isReactChild) {\n this.options.template(dummyData, this.parent, 'filterItemTemplate', null, null, null, label);\n this.parent.renderTemplates();\n }\n else {\n appendChildren(label, this.options.template(dummyData, this.parent, 'filterItemTemplate'));\n }\n }\n return elem;\n };\n CheckBoxFilterBase.prototype.updateIndeterminatenBtn = function () {\n var cnt = this.infiniteRenderMod ? this.infiniteLoadedElem.length : this.cBox.children.length - 1;\n var className = [];\n var disabled = false;\n var elem = this.infiniteRenderMod ? this.sBox.querySelector('.e-selectall') : this.cBox.querySelector('.e-selectall');\n var selected = this.infiniteRenderMod ? this.infiniteLoadedElem.filter(function (arr) { return arr.querySelector('.e-check'); }).length :\n this.cBox.querySelectorAll('.e-check:not(.e-selectall):not(.e-add-current)').length;\n if (this.cBox.querySelector('.e-add-current')) {\n cnt -= 1;\n }\n var btn;\n if (!this.options.isResponsiveFilter) {\n btn = this.dialogObj.btnObj[0];\n btn.disabled = false;\n }\n var input = elem.previousSibling;\n setChecked(input, false);\n input.indeterminate = false;\n if (this.infiniteRenderMod && this.sInput.value === '' && !this.options.parentCurrentViewDataCount && !this.localInfiniteSelectionInteracted\n && (!this.localInfiniteSelectAllClicked || (!this.infiniteLocalSelectAll && !selected)) && (cnt !== selected || cnt === selected)) {\n selected = 0;\n }\n else if (this.infiniteRenderMod && this.infiniteLoadedElem.length < this.infiniteDataCount\n && this.infiniteUnloadParentExistPred.length && (!selected || cnt === selected) && this.infiniteLocalSelectAll) {\n if (!selected) {\n selected += this.infiniteUnloadParentExistPred.length;\n }\n else {\n cnt += this.infiniteUnloadParentExistPred.length;\n }\n }\n if (cnt === selected) {\n if (this.infiniteRenderMod) {\n this.infiniteLocalSelectAll = true;\n this.localInfiniteSelectAllClicked = true;\n this.infiniteManualSelectMaintainPred = [];\n }\n className = ['e-check'];\n setChecked(input, true);\n }\n else if (selected) {\n className = ['e-stop'];\n input.indeterminate = true;\n }\n else {\n if (this.infiniteRenderMod) {\n this.infiniteLocalSelectAll = false;\n this.localInfiniteSelectAllClicked = true;\n this.infiniteManualSelectMaintainPred = [];\n }\n className = ['e-uncheck'];\n disabled = true;\n if (btn) {\n btn.disabled = true;\n }\n }\n if (btn) {\n this.filterState = !btn.disabled;\n btn.dataBind();\n }\n removeClass([elem], ['e-check', 'e-stop', 'e-uncheck']);\n addClass([elem], className);\n this.parent.notify(events.refreshCustomFilterOkBtn, { disabled: disabled });\n };\n CheckBoxFilterBase.prototype.createFilterItems = function (data, isInitial, args1) {\n var _a, _b, _c;\n var cBoxes = this.parent.createElement('div');\n var btn;\n var disabled = false;\n if (!this.options.isResponsiveFilter) {\n btn = this.dialogObj.btnObj[0];\n }\n var nullCounter = -1;\n var key = 'ejValue';\n if (!args1.executeQuery) {\n key = args1.field;\n }\n for (var i = 0; i < data.length; i++) {\n var val = getValue(key, data[parseInt(i.toString(), 10)]);\n if (val === '' || isNullOrUndefined(val)) {\n nullCounter = nullCounter + 1;\n }\n }\n if (!this.infiniteRenderMod) {\n this.itemsCnt = nullCounter !== -1 ? data.length - nullCounter : data.length;\n }\n if (this.infiniteRenderMod && this.parent.filterSettings && this.parent.filterSettings.loadingIndicator === 'Shimmer') {\n this.removeMask();\n }\n if (data.length && !this.renderEmpty) {\n var selectAllValue = this.getLocalizedLabel('SelectAll');\n var innerDiv = this.cBox.querySelector('.e-checkfltrnmdiv');\n if (innerDiv) {\n innerDiv.classList.remove('e-checkfltrnmdiv');\n }\n var checkBox = this.createCheckbox(selectAllValue, false, (_a = {}, _a[this.options.field] = selectAllValue, _a));\n if (this.parent.cssClass) {\n if (this.parent.cssClass.indexOf(' ') !== -1) {\n addClass([checkBox], this.parent.cssClass.split(' '));\n }\n else {\n addClass([checkBox], [this.parent.cssClass]);\n }\n }\n if (this.infiniteInitialLoad || !this.infiniteRenderMod) {\n var selectAll = createCboxWithWrap(getUid('cbox'), checkBox, 'e-ftrchk');\n selectAll.querySelector('.e-frame').classList.add('e-selectall');\n if (this.infiniteRenderMod) {\n this.sBox.insertBefore(selectAll, this.spinner);\n }\n else {\n cBoxes.appendChild(selectAll);\n }\n }\n else if (this.sBox.querySelector('.e-ftrchk .e-selectall')) {\n this.sBox.querySelector('.e-ftrchk .e-selectall').previousSibling.disabled = false;\n this.sBox.querySelector('.e-ftrchk .e-selectall').parentElement.classList.remove('e-checkbox-disabled');\n }\n var predicate = new Predicate('field', 'equal', this.options.field);\n if (this.options.foreignKeyValue) {\n predicate = predicate.or('field', 'equal', this.options.foreignKeyValue);\n }\n var isColFiltered = new DataManager(this.options.filteredColumns).executeLocal(new Query().where(predicate)).length;\n if (this.sInput.value) {\n var predicateCheckBox = this.createCheckbox(this.getLocalizedLabel('AddCurrentSelection'), false, (_b = {},\n _b[this.options.field] = this.getLocalizedLabel('AddCurrentSelection'),\n _b));\n if (this.parent.cssClass) {\n if (this.parent.cssClass.indexOf(' ') !== -1) {\n addClass([predicateCheckBox], this.parent.cssClass.split(' '));\n }\n else {\n addClass([predicateCheckBox], [this.parent.cssClass]);\n }\n }\n if ((this.infiniteRenderMod && (!isNullOrUndefined(this.sBox.children[2])\n && this.sBox.children[2].innerText !== 'Add current selection to filter')) || !this.infiniteRenderMod) {\n var predicateElement = createCboxWithWrap(getUid('cbox'), predicateCheckBox, 'e-ftrchk');\n predicateElement.querySelector('.e-frame').classList.add('e-add-current');\n if (this.infiniteRenderMod) {\n this.sBox.insertBefore(predicateElement, this.spinner);\n var checkBoxListElem = this.spinner.querySelector('.e-checkboxlist');\n var reduceHeight = Math.ceil(predicateElement.getBoundingClientRect().height);\n checkBoxListElem.style.height = (parseInt(getComputedStyle(checkBoxListElem).height.split('px')[0]) - reduceHeight)\n + 'px';\n checkBoxListElem.style.minHeight = checkBoxListElem.style.height;\n }\n else {\n cBoxes.appendChild(predicateElement);\n }\n }\n else if (this.sBox.querySelector('.e-ftrchk .e-add-current')) {\n this.sBox.querySelector('.e-ftrchk .e-add-current').previousSibling.disabled = false;\n this.sBox.querySelector('.e-ftrchk .e-add-current').parentElement.classList.remove('e-checkbox-disabled');\n }\n }\n else if (this.infiniteRenderMod && !isNullOrUndefined(this.sBox.children[2])\n && this.sBox.children[2].innerText === 'Add current selection to filter') {\n var checkBoxListElem = this.spinner.querySelector('.e-checkboxlist');\n var increaseHeight = Math.ceil(this.sBox.children[2].getBoundingClientRect().height);\n checkBoxListElem.style.height = (parseInt(getComputedStyle(checkBoxListElem).height.split('px')[0]) + increaseHeight)\n + 'px';\n checkBoxListElem.style.minHeight = checkBoxListElem.style.height;\n remove(this.sBox.children[2]);\n }\n var isRndere = void 0;\n for (var i = 0; i < data.length; i++) {\n var uid = getUid('cbox');\n this.values[\"\" + uid] = getValue(key, data[parseInt(i.toString(), 10)]);\n var value = getValue(this.options.field, data[parseInt(i.toString(), 10)]);\n if (this.options.formatFn) {\n value = this.valueFormatter.toView(value, this.options.formatFn);\n }\n var args_1 = { value: value, column: this.options.column, data: data[parseInt(i.toString(), 10)] };\n this.parent.notify(events.filterCboxValue, args_1);\n value = args_1.value;\n if ((value === '' || isNullOrUndefined(value))) {\n if (isRndere) {\n continue;\n }\n isRndere = true;\n }\n if (this.infiniteRenderMod) {\n this.updateInfiniteUnLoadedCheckboxExistPred(value, this.infiniteUnloadParentExistPred);\n }\n var checkbox = this.localInfiniteSelectAllClicked ?\n this.createCheckbox(value, this.infiniteLocalSelectAll, getValue('dataObj', data[i])) :\n this.createCheckbox(value, this.getCheckedState(isColFiltered, this.values[\"\" + uid]), getValue('dataObj', data[i]));\n cBoxes.appendChild(createCboxWithWrap(uid, checkbox, 'e-ftrchk'));\n if (this.infiniteRenderMod) {\n cBoxes.lastChild.style.height = this.getListHeight(this.cBox) + 'px';\n }\n }\n var scrollTop = this.cBox.scrollTop;\n if (!this.infiniteRenderMod || this.infiniteSearchValChange) {\n this.cBox.innerHTML = '';\n }\n else if (this.infiniteRenderMod && this.cBox.children.length) {\n this.infiniteRemoveElements(([].slice.call(this.cBox.children)).splice(0, this.parent.filterSettings.itemsCount));\n }\n if (this.infiniteRenderMod) {\n (_c = this.infiniteLoadedElem).push.apply(_c, [].slice.call(cBoxes.children));\n this.itemsCnt = nullCounter !== -1 ? this.infiniteLoadedElem.length - nullCounter : this.infiniteLoadedElem.length;\n }\n if (this.infiniteUnloadParentExistPred.length && (this.infiniteLoadedElem.length >= this.infiniteDataCount\n || !this.options.parentCurrentViewDataCount || (this.options.parentTotalDataCount === this.infiniteDataCount\n && this.options.parentCurrentViewDataCount))) {\n this.infiniteUnloadParentExistPred = [];\n }\n appendChildren(this.cBox, [].slice.call(cBoxes.children));\n if (this.infiniteRenderMod && !this.infiniteScrollAppendDiff) {\n this.infiniteScrollAppendDiff = Math.round(scrollTop - this.cBox.scrollTop);\n }\n this.updateIndeterminatenBtn();\n if (!this.infiniteRenderMod) {\n if (btn) {\n btn.disabled = false;\n }\n disabled = false;\n }\n else {\n if (btn.disabled) {\n disabled = true;\n }\n else {\n disabled = false;\n }\n }\n }\n else {\n cBoxes.appendChild(this.parent.createElement('span', { innerHTML: this.getLocalizedLabel('NoResult') }));\n this.cBox.innerHTML = '';\n if (this.infiniteRenderMod) {\n var selectAll = this.sBox.querySelector('.e-ftrchk .e-selectall');\n if (selectAll) {\n var selectAllParent = selectAll.parentElement.parentElement;\n if (selectAll.classList.contains('e-check')) {\n toogleCheckbox(selectAllParent);\n }\n else if (selectAll.classList.contains('e-stop')) {\n toogleCheckbox(selectAllParent);\n selectAll.classList.remove('e-stop');\n toogleCheckbox(selectAllParent);\n }\n selectAll.previousSibling.disabled = true;\n selectAll.parentElement.classList.add('e-checkbox-disabled');\n }\n var addCurrSelection = this.sBox.querySelector('.e-ftrchk .e-add-current');\n if (addCurrSelection) {\n var addCurrSelectionParent = addCurrSelection.parentElement.parentElement;\n if (addCurrSelection.classList.contains('e-check')) {\n toogleCheckbox(addCurrSelectionParent);\n }\n addCurrSelection.previousSibling.disabled = true;\n addCurrSelection.parentElement.classList.add('e-checkbox-disabled');\n }\n }\n this.cBox.appendChild(this.parent.createElement('div', { className: 'e-checkfltrnmdiv' }));\n appendChildren(this.cBox.children[0], [].slice.call(cBoxes.children));\n if (btn) {\n btn.disabled = true;\n }\n disabled = true;\n this.filterState = !disabled;\n }\n if (btn && data.length) {\n this.filterState = !btn.disabled;\n btn.dataBind();\n }\n var args = { requestType: events.filterChoiceRequest, dataSource: this.renderEmpty ? [] : data };\n var filterModel = 'filterModel';\n args[\"\" + filterModel] = this;\n this.parent.notify(events.cBoxFltrComplete, args);\n this.parent.notify(events.refreshCustomFilterOkBtn, { disabled: disabled });\n if (this.infiniteRenderMod && this.infiniteInitialLoad) {\n this.cBox.style.marginTop = '0px';\n }\n hideSpinner(this.spinner);\n };\n CheckBoxFilterBase.prototype.updateInfiniteUnLoadedCheckboxExistPred = function (value, updatePredArr) {\n for (var j = 0; j < updatePredArr.length; j++) {\n var pred = updatePredArr[j];\n if (value === pred.value && (pred.operator === 'equal' || pred.operator === 'notequal')) {\n this.infiniteManualSelectMaintainPred.push(updatePredArr[j]);\n updatePredArr.splice(j, 1);\n j--;\n }\n }\n };\n CheckBoxFilterBase.prototype.getCheckedState = function (isColFiltered, value) {\n if (!this.isFiltered || !isColFiltered) {\n return true;\n }\n else {\n var checkState = this.sInput.value ? true : this.result[\"\" + value];\n if (this.infiniteRenderMod) {\n return checkState;\n }\n else {\n return this.options.operator === 'notequal' ? !checkState : checkState;\n }\n }\n };\n CheckBoxFilterBase.getDistinct = function (json, field, column, foreignKeyData, checkboxFilter) {\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 while (len--) {\n value = json[parseInt(len.toString(), 10)];\n if (column && column.type === 'dateonly' && typeof value[\"\" + field] === 'string' && value[\"\" + field]) {\n var arr = value[\"\" + field].split(/[^0-9.]/);\n value[\"\" + field] = new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10));\n }\n value = getObject(field, value); //local remote diff, check with mdu\n var currentFilterValue = (typeof value === 'string') && !(isNullOrUndefined(checkboxFilter)) &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n !(isNullOrUndefined(checkboxFilter.parent)) && !(isNullOrUndefined(checkboxFilter.parent.filterSettings)) &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n !(isNullOrUndefined(checkboxFilter.parent.filterSettings.enableCaseSensitivity)) ? value.toLowerCase() : value;\n if (!(currentFilterValue in lookup)) {\n var obj = {};\n obj[\"\" + ejValue] = value;\n lookup[\"\" + currentFilterValue] = true;\n if (isForeignKey) {\n var foreignDataObj = getForeignData(column, {}, value, foreignKeyData)[0];\n setValue(events.foreignKeyData, foreignDataObj, json[parseInt(len.toString(), 10)]);\n value = getValue(column.foreignKeyValue, foreignDataObj);\n }\n setValue(field, isNullOrUndefined(value) ? null : value, obj);\n setValue('dataObj', json[parseInt(len.toString(), 10)], obj);\n result.push(obj);\n }\n }\n return DataUtil.group(DataUtil.sort(result, field, DataUtil.fnAscending), 'ejValue');\n };\n CheckBoxFilterBase.getPredicate = function (columns, isExecuteLocal) {\n var cols = DataUtil.distinct(columns, 'field', true) || [];\n var collection = [];\n var pred = {};\n for (var i = 0; i < cols.length; i++) {\n collection = new DataManager(columns).executeLocal(new Query().where('field', 'equal', cols[parseInt(i.toString(), 10)].field));\n if (collection.length !== 0) {\n pred[cols[parseInt(i.toString(), 10)].field] = CheckBoxFilterBase.generatePredicate(collection, isExecuteLocal);\n }\n }\n return pred;\n };\n CheckBoxFilterBase.generatePredicate = function (cols, isExecuteLocal) {\n var len = cols ? cols.length : 0;\n var predicate;\n var operate = 'or';\n var first = CheckBoxFilterBase.updateDateFilter(cols[0]);\n first.ignoreAccent = !isNullOrUndefined(first.ignoreAccent) ? first.ignoreAccent : false;\n if (first.type === 'date' || first.type === 'datetime' || first.type === 'dateonly') {\n predicate = getDatePredicate(first, first.type, isExecuteLocal);\n }\n else {\n predicate = first.ejpredicate ? first.ejpredicate :\n new Predicate(first.field, first.operator, first.value, !CheckBoxFilterBase.getCaseValue(first), first.ignoreAccent);\n }\n for (var p = 1; p < len; p++) {\n cols[parseInt(p.toString(), 10)] = CheckBoxFilterBase.updateDateFilter(cols[parseInt(p.toString(), 10)]);\n if (len > 2 && p > 1 && ((cols[p].predicate === 'or' && cols[p - 1].predicate === 'or')\n || (cols[p].predicate === 'and' && cols[p - 1].predicate === 'and'))) {\n if (cols[p].type === 'date' || cols[p].type === 'datetime' || cols[p].type === 'dateonly') {\n predicate.predicates.push(getDatePredicate(cols[parseInt(p.toString(), 10)], cols[p].type, isExecuteLocal));\n }\n else {\n predicate.predicates.push(new Predicate(cols[p].field, cols[parseInt(p.toString(), 10)].operator, cols[parseInt(p.toString(), 10)].value, !CheckBoxFilterBase.getCaseValue(cols[parseInt(p.toString(), 10)]), cols[parseInt(p.toString(), 10)].ignoreAccent));\n }\n }\n else {\n if (cols[p].type === 'date' || cols[p].type === 'datetime' || cols[p].type === 'dateonly') {\n if (cols[parseInt(p.toString(), 10)].predicate === 'and' && cols[parseInt(p.toString(), 10)].operator === 'equal') {\n predicate = predicate[\"\" + operate](getDatePredicate(cols[parseInt(p.toString(), 10)], cols[parseInt(p.toString(), 10)].type, isExecuteLocal), cols[parseInt(p.toString(), 10)].type, cols[parseInt(p.toString(), 10)].ignoreAccent);\n }\n else {\n predicate = predicate[(cols[parseInt(p.toString(), 10)].predicate)](getDatePredicate(cols[parseInt(p.toString(), 10)], cols[parseInt(p.toString(), 10)].type, isExecuteLocal), cols[parseInt(p.toString(), 10)].type, cols[parseInt(p.toString(), 10)].ignoreAccent);\n }\n }\n else {\n predicate = cols[parseInt(p.toString(), 10)].ejpredicate ?\n predicate[cols[parseInt(p.toString(), 10)]\n .predicate](cols[parseInt(p.toString(), 10)].ejpredicate) :\n predicate[(cols[parseInt(p.toString(), 10)].predicate)](cols[parseInt(p.toString(), 10)].field, cols[parseInt(p.toString(), 10)].operator, cols[parseInt(p.toString(), 10)].value, !CheckBoxFilterBase.getCaseValue(cols[parseInt(p.toString(), 10)]), cols[parseInt(p.toString(), 10)].ignoreAccent);\n }\n }\n }\n return predicate || null;\n };\n CheckBoxFilterBase.getCaseValue = function (filter) {\n if (isNullOrUndefined(filter.matchCase)) {\n if (filter.type === 'string' || isNullOrUndefined(filter.type) && typeof (filter.value) === 'string') {\n return false;\n }\n else {\n return true;\n }\n }\n else {\n return filter.matchCase;\n }\n };\n CheckBoxFilterBase.updateDateFilter = function (filter) {\n if ((filter.type === 'date' || filter.type === 'datetime' || filter.type === 'dateonly' || filter.value instanceof Date)) {\n filter.type = filter.type || 'date';\n }\n return filter;\n };\n return CheckBoxFilterBase;\n}());\nexport { CheckBoxFilterBase };\n","import { remove, addClass } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { doesImplementInterface, setStyleAndAttributes, appendChildren, extendObjWithFn, addStickyColumnPosition } from '../base/util';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { foreignKeyData } from '../base/constant';\nimport { CellType } from '../base/enum';\nimport * as literals from '../base/string-literals';\n/**\n * CellRenderer class which responsible for building cell content.\n *\n * @hidden\n */\nvar CellRenderer = /** @class */ (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', { className: literals.rowCell, attrs: { role: 'gridcell', tabindex: '-1' } });\n this.rowChkBox = this.parent.createElement('input', { className: 'e-checkselect', attrs: { 'type': 'checkbox', 'aria-label': this.localizer.getConstant('SelectRow') } });\n }\n /**\n * Function to return the wrapper for the TD content\n *\n * @returns {string | Element} returns the string\n */\n CellRenderer.prototype.getGui = function () {\n return '';\n };\n /**\n * Function to format the cell value.\n *\n * @param {Column} column - specifies the column\n * @param {Object} value - specifies the value\n * @param {Object} data - specifies the data\n * @returns {string} returns the format\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CellRenderer.prototype.format = function (column, value, data) {\n if (!isNullOrUndefined(column.format)) {\n if (column.type === 'number' && isNaN(parseInt(value, 10))) {\n value = null;\n }\n if (column.type === 'dateonly' && typeof value === 'string' && value) {\n var arr = value.split(/[^0-9.]/);\n value = new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10));\n }\n value = this.formatter.toView(value, column.getFormatter());\n }\n return isNullOrUndefined(value) ? '' : value.toString();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CellRenderer.prototype.evaluate = function (node, cell, data, attributes, fData, isEdit) {\n var _a;\n var result;\n if (cell.column.template) {\n var isReactCompiler = this.parent.isReact && typeof (cell.column.template) !== 'string' && cell.column.template.prototype && !(cell.column.template.prototype).CSPTemplate;\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n this.parent.parentDetails.parentInstObj.isReact;\n var literals_1 = ['index'];\n var dummyData = extendObjWithFn({}, data, (_a = {}, _a[foreignKeyData] = fData, _a.column = cell.column, _a));\n var templateID = this.parent.element.id + cell.column.uid;\n var str = 'isStringTemplate';\n if (isReactCompiler || isReactChild) {\n var copied = { 'index': attributes[literals_1[0]] };\n cell.column.getColumnTemplate()(extend(copied, dummyData), this.parent, 'columnTemplate', templateID, this.parent[\"\" + str], null, node);\n }\n else {\n result = cell.column.getColumnTemplate()(extend({ 'index': attributes[literals_1[0]] }, dummyData), this.parent, 'template', templateID, this.parent[\"\" + str], undefined, undefined, this.parent['root']);\n }\n if (!isReactCompiler && !isReactChild) {\n appendChildren(node, result);\n }\n this.parent.notify('template-result', { template: result });\n result = null;\n node.setAttribute('aria-label', node.innerText + this.localizer.getConstant('TemplateCell') +\n this.localizer.getConstant('ColumnHeader') + cell.column.headerText);\n return false;\n }\n return true;\n };\n /**\n * Function to invoke the custom formatter available in the column object.\n *\n * @param {Column} column - specifies the column\n * @param {Object} value - specifies the value\n * @param {Object} data - specifies the data\n * @returns {Object} returns the object\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 }\n else if (typeof column.formatter === 'function') {\n value = column.formatter(column, data);\n }\n else {\n value = column.formatter.getValue(column, data);\n }\n }\n return value;\n };\n /**\n * Function to render the cell content based on Column object.\n *\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the data\n * @param {Object} attributes - specifies the attributes\n * @param {boolean} isExpand - specifies the boolean for expand\n * @param {boolean} isEdit - specifies the boolean for edit\n * @returns {Element} returns the element\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 *\n * @param {Element} td - specifies the element\n * @param {Cell} cell - specifies the cell\n * @param {Object} data - specifies the data\n * @param {Object} attributes - specifies the attribute\n * @returns {void}\n */\n CellRenderer.prototype.refreshTD = function (td, cell, data, attributes) {\n var isEdit = this.parent.editSettings.mode === 'Batch' && td.classList.contains('e-editedbatchcell');\n if (this.parent.isReact) {\n var cellIndex = td.cellIndex;\n var parentRow = td.parentElement;\n remove(td);\n var newTD = this.refreshCell(cell, data, attributes, isEdit);\n this.cloneAttributes(newTD, td);\n if (parentRow.cells.length !== cellIndex - 1) {\n parentRow.insertBefore(newTD, parentRow.cells[parseInt(cellIndex.toString(), 10)]);\n }\n else {\n parentRow.appendChild(newTD);\n }\n }\n else {\n var node = this.refreshCell(cell, data, attributes, isEdit);\n td.innerHTML = '';\n var arialabelText = node.getAttribute('aria-label');\n arialabelText ? td.setAttribute('aria-label', arialabelText) : null;\n var elements = [].slice.call(node.childNodes);\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n CellRenderer.prototype.cloneAttributes = function (target, source) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var attrs = source.attributes;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var i = attrs.length;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var attr;\n while (i--) {\n attr = attrs[parseInt(i.toString(), 10)];\n target.setAttribute(attr.name, attr.value);\n }\n };\n CellRenderer.prototype.refreshCell = function (cell, data, attributes, isEdit) {\n var _a;\n var node = this.element.cloneNode();\n var column = cell.column;\n var fData;\n if (cell.isForeignKey) {\n fData = cell.foreignKeyData[0] || (_a = {}, _a[column.foreignKeyValue] = column.format ? null : '', _a);\n }\n //Prepare innerHtml\n var innerHtml = this.getGui();\n var value = cell.isForeignKey ? this.getValue(column.foreignKeyValue, fData, column) :\n this.getValue(column.field, data, column);\n if ((column.type === 'date' || column.type === 'datetime') && !isNullOrUndefined(value)) {\n value = new Date(value);\n }\n if (column.type === 'dateonly' && !isNullOrUndefined(value) && typeof value === 'string') {\n var arr = value.split(/[^0-9.]/);\n value = new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10));\n }\n value = this.format(column, value, data);\n innerHtml = value.toString();\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 var fromFormatter = this.invokeFormatter(column, value, data);\n innerHtml = !isNullOrUndefined(column.formatter) ? isNullOrUndefined(fromFormatter) ? '' : fromFormatter.toString() : innerHtml;\n if (this.evaluate(node, cell, data, attributes, fData, isEdit) && column.type !== 'checkbox') {\n this.appendHtml(node, this.parent.sanitize(innerHtml), column.getDomSetter ? column.getDomSetter() : 'innerHTML');\n }\n else if (column.type === 'checkbox') {\n node.classList.add(literals.gridChkBox);\n if (this.parent.selectionSettings.persistSelection) {\n value = value === 'true';\n }\n else {\n value = false;\n }\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n if (this.parent.cssClass) {\n addClass([checkWrap], [this.parent.cssClass]);\n }\n this.rowChkBox.id = 'checkbox-' + cell.rowID;\n checkWrap.insertBefore(this.rowChkBox.cloneNode(), checkWrap.firstChild);\n node.appendChild(checkWrap);\n }\n if (this.parent.checkAllRows === 'Check' && this.parent.enableVirtualization) {\n cell.isSelected = true;\n }\n this.setAttributes(node, cell, attributes);\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, { checked: checked, label: ' ' });\n node.innerHTML = '';\n node.classList.add('e-gridchkbox-cell');\n checkWrap.classList.add('e-checkbox-disabled');\n if (this.parent.cssClass) {\n addClass([checkWrap], [this.parent.cssClass]);\n }\n node.appendChild(checkWrap);\n }\n if (node.classList.contains('e-summarycell') && !data.key) {\n var uid = node.getAttribute('e-mappinguid');\n column = this.parent.getColumnByUid(uid);\n node.setAttribute('aria-label', innerHtml + this.localizer.getConstant('ColumnHeader') + cell.column.headerText);\n }\n if (this.parent.isFrozenGrid() && (!data || (data && !data.key))) {\n addStickyColumnPosition(this.parent, column, node);\n }\n return node;\n };\n /**\n * Function to specifies how the result content to be placed in the cell.\n *\n * @param {Element} node - specifies the node\n * @param {string|Element} innerHtml - specifies the innerHTML\n * @param {string} property - specifies the element\n * @returns {Element} returns the element\n */\n CellRenderer.prototype.appendHtml = function (node, innerHtml, property) {\n if (property === void 0) { property = 'innerHTML'; }\n node[\"\" + property] = innerHtml;\n return node;\n };\n /**\n * @param {HTMLElement} node - specifies the node\n * @param {cell} cell - specifies the cell\n * @param {Object} attributes - specifies the attributes\n * @returns {void}\n * @hidden\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 if (column.customAttributes) {\n setStyleAndAttributes(node, column.customAttributes);\n }\n if (this.parent.rowRenderingMode === 'Vertical') {\n setStyleAndAttributes(node, { 'data-cell': column.headerText });\n }\n if (column.textAlign) {\n node.style.textAlign = column.textAlign;\n }\n if (column.clipMode === 'Clip' || (!column.clipMode && this.parent.clipMode === 'Clip')) {\n node.classList.add('e-gridclip');\n }\n else if (column.clipMode === 'EllipsisWithTooltip' || (!column.clipMode && this.parent.clipMode === 'EllipsisWithTooltip')\n && !(this.parent.allowTextWrap && (this.parent.textWrapSettings.wrapMode === 'Content'\n || this.parent.textWrapSettings.wrapMode === 'Both'))) {\n if (column.type !== 'checkbox') {\n node.classList.add('e-ellipsistooltip');\n }\n }\n };\n CellRenderer.prototype.buildAttributeFromCell = function (node, cell, isCheckBoxType) {\n var attr = {};\n var prop = { 'colindex': literals.dataColIndex };\n var classes = [];\n if (cell.colSpan) {\n attr.colSpan = cell.colSpan;\n }\n if (cell.rowSpan) {\n attr.rowSpan = cell.rowSpan;\n }\n if (cell.isTemplate) {\n classes.push('e-templatecell');\n }\n if (cell.isSelected) {\n classes.push.apply(classes, ['e-selectionbackground', 'e-active']);\n if (isCheckBoxType) {\n node.querySelector('.e-frame').classList.add('e-check');\n }\n }\n if (cell.isColumnSelected) {\n classes.push.apply(classes, ['e-columnselection']);\n }\n if (cell.cellType === CellType.Header) {\n attr[prop.colindex] = cell.colIndex;\n attr[literals.ariaColIndex] = cell.colIndex + 1;\n }\n else if (!isNullOrUndefined(cell.index)) {\n attr[prop.colindex] = cell.index;\n attr[literals.ariaColIndex] = cell.index + 1;\n }\n if (!cell.visible) {\n classes.push('e-hide');\n }\n attr.class = classes;\n setStyleAndAttributes(node, attr);\n };\n CellRenderer.prototype.getValue = function (field, data, column) {\n return column.valueAccessor(field, data, column);\n };\n return CellRenderer;\n}());\nexport { CellRenderer };\n","import { isNullOrUndefined, addClass, extend } from '@syncfusion/ej2-base';\nimport { appendChildren, setStyleAndAttributes, addFixedColumnBorder, addStickyColumnPosition } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * Edit render module is used to render grid edit row.\n *\n * @hidden\n */\nvar InlineEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {IGrid} parent - returns the IGrid\n */\n function InlineEditRender(parent) {\n this.parent = parent;\n }\n InlineEditRender.prototype.addNew = function (elements, args) {\n this.isEdit = false;\n var tbody;\n if (this.parent.frozenRows && this.parent.editSettings.newRowPosition === 'Top') {\n tbody = this.parent.getHeaderTable().querySelector(literals.tbody);\n }\n else {\n tbody = this.parent.getContentTable().querySelector(literals.tbody);\n }\n args.row = this.parent.createElement('tr', { className: 'e-row e-addedrow' });\n if (this.parent.getContentTable().querySelector('.e-emptyrow')) {\n var emptyRow = this.parent.getContentTable().querySelector('.e-emptyrow');\n emptyRow.parentNode.removeChild(emptyRow);\n if (this.parent.frozenRows && this.parent.element.querySelector('.e-frozenrow-empty')) {\n this.parent.element.querySelector('.e-frozenrow-empty').classList.remove('e-frozenrow-empty');\n }\n }\n if (this.parent.editSettings.newRowPosition === 'Top') {\n tbody.insertBefore(args.row, tbody.firstChild);\n }\n else {\n tbody.appendChild(args.row);\n }\n args.row.appendChild(this.getEditElement(elements, false, undefined, args, true));\n this.parent.editModule.checkLastRow(args.row, args);\n };\n InlineEditRender.prototype.update = function (elements, args) {\n this.isEdit = true;\n var tdElement = [].slice.call(args.row.querySelectorAll('td.e-rowcell'));\n args.row.innerHTML = '';\n args.row.appendChild(this.getEditElement(elements, true, tdElement, args, true));\n args.row.classList.add(literals.editedRow);\n this.parent.editModule.checkLastRow(args.row, args);\n };\n // eslint-disable-next-line max-len\n InlineEditRender.prototype.getEditElement = function (elements, isEdit, tdElement, args, isFrozen) {\n var gObj = this.parent;\n var gLen = 0;\n var isDetail = !isNullOrUndefined(gObj.detailTemplate) || !isNullOrUndefined(gObj.childGrid) ? 1 : 0;\n if (gObj.allowGrouping) {\n gLen = gObj.groupSettings.columns.length;\n }\n var td = this.parent.createElement('td', {\n className: 'e-editcell e-normaledit',\n attrs: {\n colspan: (gObj.getCurrentVisibleColumns(this.parent.enableColumnVirtualization).length +\n this.parent.getIndentCount()).toString()\n }\n });\n var form = args.form =\n this.parent.createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n if (this.parent.editSettings.template) {\n this.appendChildren(form, args.rowData, isFrozen);\n td.appendChild(form);\n return td;\n }\n var table = this.parent.createElement('table', { className: 'e-table e-inline-edit', attrs: { cellspacing: '0.25', role: 'grid' } });\n table.appendChild(gObj.getContentTable().querySelector(literals.colGroup).cloneNode(true));\n var tbody = this.parent.createElement(literals.tbody, { attrs: { role: 'rowgroup' } });\n var tr = this.parent.createElement('tr');\n var i = 0;\n if (isDetail) {\n tr.insertBefore(this.parent.createElement('td', { className: 'e-detailrowcollapse' }), tr.firstChild);\n }\n if (gObj.isRowDragable()) {\n tr.appendChild(this.parent.createElement('td', { className: 'e-dragindentcell' }));\n }\n while (i < gLen) {\n tr.appendChild(this.parent.createElement('td', { className: 'e-indentcell' }));\n i++;\n }\n var m = 0;\n i = 0;\n var inputValue;\n var cols = args.isCustomFormValidation ? this.parent.columnModel : gObj.getColumns();\n while ((isEdit && m < tdElement.length && i < cols.length) || i < cols.length) {\n var span = isEdit ? tdElement[parseInt(m.toString(), 10)].getAttribute('colspan') : null;\n var col = cols[parseInt(i.toString(), 10)];\n inputValue = (elements[col.uid]).value;\n var td_1 = this.parent.createElement('td', {\n className: literals.rowCell, attrs: { style: 'text-align:' + (col.textAlign ? col.textAlign : ''), 'colspan': span ? span : '' }\n });\n if (col.visible) {\n td_1.appendChild(elements[col.uid]);\n if (this.parent.rowRenderingMode === 'Vertical') {\n setStyleAndAttributes(td_1, { 'data-cell': col.headerText });\n if (i === 0) {\n td_1.classList.add('e-responsive-editcell');\n }\n }\n if (col.editType === 'booleanedit') {\n td_1.classList.add('e-boolcell');\n }\n else if (col.commands || col.commandsTemplate) {\n addClass([td_1], 'e-unboundcell');\n }\n }\n else {\n td_1.classList.add('e-hide');\n }\n if (this.parent.isFrozenGrid()) {\n addStickyColumnPosition(this.parent, col, td_1);\n if (this.parent.enableColumnVirtualization) {\n if (col.freeze === 'Left' && !isNullOrUndefined(col.valueX)) {\n td_1.style.left = (col.valueX - this.parent.translateX) + 'px';\n }\n else if (col.freeze === 'Right' && !isNullOrUndefined(col.valueX)) {\n td_1.style.right = (col.valueX + this.parent.translateX) + 'px';\n }\n else if (col.freeze === 'Fixed') {\n td_1.style.left = (this.parent.leftrightColumnWidth('left') - this.parent.translateX) + 'px';\n td_1.style.right = (this.parent.leftrightColumnWidth('right') + this.parent.translateX) + 'px';\n }\n }\n }\n td_1.setAttribute('aria-label', inputValue + this.parent.localeObj.getConstant('ColumnHeader') + col.headerText);\n tr.appendChild(td_1);\n i = span ? i + parseInt(span, 10) : i + 1;\n m++;\n }\n addFixedColumnBorder(tr);\n tbody.appendChild(tr);\n table.appendChild(tbody);\n form.appendChild(table);\n td.appendChild(form);\n return td;\n };\n InlineEditRender.prototype.removeEventListener = function () {\n //To destroy the renderer\n };\n InlineEditRender.prototype.appendChildren = function (form, data, isFrozen) {\n var _this = this;\n var dummyData = extend({}, data, { isAdd: !this.isEdit, isFrozen: isFrozen }, true);\n var editTemplateID = this.parent.element.id + 'editSettingsTemplate';\n if (this.parent.isReact && typeof (this.parent.editSettings.template) !== 'string') {\n this.parent.getEditTemplate()(dummyData, this.parent, 'editSettingsTemplate', editTemplateID, null, null, form);\n this.parent.renderTemplates();\n }\n else {\n appendChildren(form, this.parent.getEditTemplate()(dummyData, this.parent, 'editSettingsTemplate', editTemplateID));\n }\n // eslint-disable-next-line\n var setRules = function () {\n var cols = _this.parent.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (cols[parseInt(i.toString(), 10)].validationRules) {\n _this.parent.editModule.formObj.rules[cols[parseInt(i.toString(), 10)].field] =\n cols[parseInt(i.toString(), 10)].validationRules;\n }\n }\n };\n };\n return InlineEditRender;\n}());\nexport { InlineEditRender };\n","import { classList } from '@syncfusion/ej2-base';\nimport * as literals from '../base/string-literals';\n/**\n * Edit render module is used to render grid edit row.\n *\n * @hidden\n */\nvar BatchEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {IGrid} parent - specifies the IGrid\n */\n function BatchEditRender(parent) {\n this.parent = parent;\n }\n BatchEditRender.prototype.update = function (elements, args) {\n if (this.parent.isReact && args.columnObject && args.columnObject.template) {\n var parentRow = args.cell.parentElement;\n var newTd = args.cell.cloneNode(true);\n parentRow.insertBefore(newTd, args.cell);\n newTd.focus();\n args.cell.remove();\n args.cell = newTd;\n }\n args.cell.setAttribute('aria-label', args.cell.innerHTML + this.parent.localeObj.getConstant('ColumnHeader') + args.columnObject.field);\n args.cell.innerHTML = '';\n args.cell.appendChild(this.getEditElement(elements, args));\n args.cell.classList.add('e-editedbatchcell');\n classList(args.row, [literals.editedRow, 'e-batchrow'], []);\n };\n BatchEditRender.prototype.getEditElement = function (elements, args) {\n var gObj = this.parent;\n var form = this.parent\n .createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n form.appendChild(elements[args.columnObject.uid]);\n if (args.columnObject.editType === 'booleanedit') {\n args.cell.classList.add('e-boolcell');\n }\n if (!args.columnObject.editType) {\n args.cell.classList.add('e-inputbox');\n }\n return form;\n };\n BatchEditRender.prototype.removeEventListener = function () {\n //To destroy the renderer\n };\n return BatchEditRender;\n}());\nexport { BatchEditRender };\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { remove, extend, updateBlazorTemplate, initializeCSPTemplate } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { appendChildren, applyBiggerTheme, addBiggerDialog } from '../base/util';\nimport { ResponsiveDialogRenderer } from './responsive-dialog-renderer';\nimport { ResponsiveDialogAction } from '../base/enum';\nimport * as literals from '../base/string-literals';\n/**\n * Edit render module is used to render grid edit row.\n *\n * @hidden\n */\nvar DialogEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {ServiceLocator} serviceLocator - specifies the serviceLocator\n */\n function DialogEditRender(parent, serviceLocator) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.dialogDestroy, this.destroy, this);\n this.parent.on(events.destroy, this.destroy, this);\n }\n DialogEditRender.prototype.setLocaleObj = function () {\n this.l10n = this.serviceLocator.getService('localization');\n };\n DialogEditRender.prototype.addNew = function (elements, args) {\n this.isEdit = false;\n this.createDialog(elements, args);\n };\n DialogEditRender.prototype.update = function (elements, args) {\n this.isEdit = true;\n this.createDialog(elements, args);\n };\n DialogEditRender.prototype.createDialogHeader = function (args) {\n var _this = this;\n var gObj = this.parent;\n var header;\n if (this.parent.enableAdaptiveUI) {\n var responsiveDlgRenderer = new ResponsiveDialogRenderer(this.parent, this.serviceLocator);\n responsiveDlgRenderer.action = this.isEdit ? ResponsiveDialogAction.isEdit : ResponsiveDialogAction.isAdd;\n return responsiveDlgRenderer.renderResponsiveHeader(undefined, args);\n }\n else {\n if (gObj.editSettings.headerTemplate) {\n header = initializeCSPTemplate(function () {\n return _this.getDialogEditTemplateElement('HeaderTemplate', args).outerHTML;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n });\n }\n else if (this.isEdit) {\n header = this.l10n.getConstant('EditFormTitle') + args.primaryKeyValue[0];\n }\n else {\n header = this.l10n.getConstant('AddFormTitle');\n }\n }\n return header;\n };\n DialogEditRender.prototype.createDialog = function (elements, args) {\n var _this = this;\n var gObj = this.parent;\n this.dialog = this.parent.createElement('div', { id: gObj.element.id + '_dialogEdit_wrapper', styles: 'width: auto' });\n if (gObj.enableAdaptiveUI) {\n this.dialog.classList.add('e-responsive-dialog');\n }\n gObj.element.appendChild(this.dialog);\n this.setLocaleObj();\n this.dialog.setAttribute('aria-label', this.l10n.getConstant('DialogEdit'));\n // let position: PositionDataModel = this.parent.element.getBoundingClientRect().height < 400 ?\n // { X: 'center', Y: 'top' } : { X: 'center', Y: 'center' };\n this.dialogObj = new Dialog(extend({\n header: this.createDialogHeader(args), isModal: true, visible: true,\n cssClass: this.parent.cssClass ? 'e-edit-dialog' + ' ' + this.parent.cssClass : 'e-edit-dialog',\n content: this.getEditElement(elements, args),\n showCloseIcon: true,\n allowDragging: true,\n // position: position,\n close: this.dialogClose.bind(this),\n created: this.dialogCreated.bind(this),\n closeOnEscape: true, width: gObj.editSettings.template ? 'auto' : '330px',\n target: args.target ? args.target : document.body, animationSettings: { effect: 'None' },\n footerTemplate: gObj.editSettings.footerTemplate ? initializeCSPTemplate(function () {\n return _this.getDialogEditTemplateElement('FooterTemplate', args).outerHTML;\n }) : null,\n buttons: [{\n click: this.btnClick.bind(this),\n buttonModel: { content: this.l10n.getConstant('SaveButton'),\n cssClass: this.parent.cssClass ? 'e-primary' + ' ' + this.parent.cssClass : 'e-primary',\n isPrimary: true }\n },\n { click: this.btnClick.bind(this),\n buttonModel: {\n cssClass: this.parent.cssClass ? 'e-flat' + ' ' + this.parent.cssClass : 'e-flat',\n content: this.l10n.getConstant('CancelButton')\n } }]\n }, gObj.editSettings.dialog ? (gObj.editSettings.dialog.params || {}) : {}));\n args.dialog = this.dialogObj;\n var isStringTemplate = 'isStringTemplate';\n this.dialogObj[\"\" + isStringTemplate] = true;\n this.renderResponsiveDialog();\n this.dialogObj.appendTo(this.dialog);\n applyBiggerTheme(this.parent.element, this.dialogObj.element.parentElement);\n if (gObj.enableAdaptiveUI) {\n this.dialogObj.show(true);\n }\n };\n DialogEditRender.prototype.dialogCreated = function () {\n addBiggerDialog(this.parent);\n };\n DialogEditRender.prototype.renderResponsiveDialog = function () {\n var _this = this;\n if (this.parent.enableAdaptiveUI) {\n if (this.parent.adaptiveDlgTarget) {\n this.dialogObj.target = this.parent.adaptiveDlgTarget;\n }\n this.dialogObj.buttons = [{}];\n this.dialogObj.showCloseIcon = true;\n this.dialogObj.visible = false;\n this.dialogObj.width = '100%';\n this.dialogObj.open = function () {\n _this.dialogObj.element.style.maxHeight = '100%';\n };\n }\n };\n DialogEditRender.prototype.btnClick = function (e) {\n if (this.l10n.getConstant('CancelButton').toLowerCase() === e.target.innerText.trim().toLowerCase()) {\n this.dialogClose();\n }\n else {\n this.parent.endEdit();\n }\n };\n DialogEditRender.prototype.dialogClose = function () {\n this.parent.closeEdit();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DialogEditRender.prototype.destroy = function (args) {\n var dialogEditTemplates = ['template', 'headerTemplate', 'footerTemplate'];\n for (var i = 0; i < dialogEditTemplates.length; i++) {\n if (this.parent.editSettings[dialogEditTemplates[parseInt(i.toString(), 10)]]) {\n var templateName = dialogEditTemplates[parseInt(i.toString(), 10)].charAt(0).toUpperCase()\n + dialogEditTemplates[parseInt(i.toString(), 10)].slice(1);\n var editTemplateID = this.parent.element.id + 'editSettings' + templateName;\n updateBlazorTemplate(editTemplateID, templateName, this.parent.editSettings);\n }\n }\n this.parent.notify(events.destroyForm, {});\n this.parent.isEdit = false;\n this.parent.notify(events.toolbarRefresh, {});\n if (this.dialog && !this.dialogObj.isDestroyed) {\n this.dialogObj.destroy();\n remove(this.dialog);\n }\n };\n DialogEditRender.prototype.getDialogEditTemplateElement = function (dialogTemp, args) {\n var tempDiv = this.parent.createElement('div', { className: 'e-dialog' + dialogTemp });\n var dummyData = extend({}, args.rowData, { isAdd: !this.isEdit }, true);\n var templateID = this.parent.element.id + 'editSettings' + dialogTemp;\n appendChildren(tempDiv, (dialogTemp === 'HeaderTemplate' ? this.parent.getEditHeaderTemplate() :\n this.parent.getEditFooterTemplate())(dummyData, this.parent, 'editSettings' + dialogTemp, templateID));\n updateBlazorTemplate(templateID, dialogTemp, this.parent.editSettings);\n return tempDiv;\n };\n DialogEditRender.prototype.getEditElement = function (elements, args) {\n var _this = this;\n var gObj = this.parent;\n var div = this.parent.createElement('div', { className: this.isEdit ? literals.editedRow : 'e-insertedrow' });\n var form = args.form =\n this.parent.createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n if (this.parent.editSettings.template) {\n var editTemplateID = this.parent.element.id + 'editSettingsTemplate';\n var dummyData = extend({}, args.rowData, { isAdd: !this.isEdit }, true);\n var isReactCompiler = this.parent.isReact && typeof (this.parent.editSettings.template) !== 'string';\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n this.parent.parentDetails.parentInstObj.isReact;\n if (isReactCompiler || isReactChild) {\n this.parent.getEditTemplate()(dummyData, this.parent, 'editSettingsTemplate', editTemplateID, null, null, form);\n this.parent.renderTemplates();\n }\n else {\n appendChildren(form, this.parent.getEditTemplate()(dummyData, this.parent, 'editSettingsTemplate', editTemplateID));\n }\n var setRules = function () {\n var columns = _this.parent.getColumns();\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].validationRules) {\n _this.parent.editModule.formObj.rules[columns[parseInt(i.toString(), 10)].field] =\n columns[parseInt(i.toString(), 10)].validationRules;\n }\n }\n };\n updateBlazorTemplate(editTemplateID, 'Template', this.parent.editSettings, true, setRules);\n div.appendChild(form);\n return div;\n }\n var table = this.parent.createElement('table', { className: literals.table, attrs: { cellspacing: '6px', role: 'grid' } });\n var tbody = this.parent.createElement(literals.tbody, { attrs: { role: 'rowgroup' } });\n var cols = gObj.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (this.parent.editModule.checkColumnIsGrouped(cols[parseInt(i.toString(), 10)]) || cols[parseInt(i.toString(), 10)].commands\n || cols[parseInt(i.toString(), 10)].commandsTemplate || cols[parseInt(i.toString(), 10)].type === 'checkbox') {\n continue;\n }\n var tr = this.parent.createElement('tr', { attrs: { role: 'row' } });\n var dataCell = this.parent.createElement('td', {\n className: literals.rowCell, attrs: {\n style: 'text-align:' + (this.parent.enableRtl ? 'right' : 'left') + ';width:190px'\n }\n });\n elements[cols[parseInt(i.toString(), 10)].uid].classList.remove('e-input');\n dataCell.appendChild(elements[cols[parseInt(i.toString(), 10)].uid]);\n tr.appendChild(dataCell);\n tbody.appendChild(tr);\n }\n table.appendChild(tbody);\n form.appendChild(table);\n div.appendChild(form);\n return div;\n };\n DialogEditRender.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.dialogDestroy, this.destroy);\n this.parent.off(events.destroy, this.destroy);\n };\n return DialogEditRender;\n}());\nexport { DialogEditRender };\n","import { isNullOrUndefined, closest, extend } from '@syncfusion/ej2-base';\nimport { InlineEditRender } from './inline-edit-renderer';\nimport { BatchEditRender } from './batch-edit-renderer';\nimport { DialogEditRender } from './dialog-edit-renderer';\nimport { attributes, classList, select } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { getComplexFieldID, getObject, appendChildren, parentsUntil, extendObjWithFn, padZero } from '../base/util';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\n/**\n * Edit render module is used to render grid edit row.\n *\n * @hidden\n */\nvar EditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {IGrid} parent -specifies the IGrid\n * @param {ServiceLocator} serviceLocator - specifies the serviceLocator\n */\n function EditRender(parent, serviceLocator) {\n //Internal variables\n this.editType = {\n 'Inline': InlineEditRender,\n 'Normal': InlineEditRender, 'Batch': BatchEditRender, 'Dialog': DialogEditRender\n };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.renderer = new this.editType[this.parent.editSettings.mode](parent, serviceLocator);\n this.focus = serviceLocator.getService('focus');\n }\n EditRender.prototype.addNew = function (args) {\n this.renderer.addNew(this.getEditElements(args), args);\n this.convertWidget(args);\n };\n EditRender.prototype.update = function (args) {\n this.renderer.update(this.getEditElements(args), args);\n var isCustomFormValidation = args.isCustomFormValidation;\n if (!isCustomFormValidation) {\n this.parent.notify(events.beforeStartEdit, args);\n this.convertWidget(args);\n }\n };\n EditRender.prototype.convertWidget = function (args) {\n var gObj = this.parent;\n var isFocused;\n var cell;\n var value;\n var form = gObj.editSettings.mode === 'Dialog' ?\n select('#' + gObj.element.id + '_dialogEdit_wrapper .e-gridform', document) :\n gObj.element.getElementsByClassName('e-gridform')[0];\n var cols = gObj.editSettings.mode !== 'Batch' ? gObj.getColumns() : [gObj.getColumnByField(args.columnName)];\n for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {\n var col = cols_1[_i];\n if (this.parent.editSettings.template && !isNullOrUndefined(col.field)) {\n var cellArgs = extend({}, args);\n cellArgs.element = form.querySelector('[name=' + getComplexFieldID(col.field) + ']');\n if (typeof col.edit.write === 'string') {\n getObject(col.edit.write, window)(cellArgs);\n }\n else {\n col.edit.write(cellArgs);\n }\n continue;\n }\n if (this.parent.editModule.checkColumnIsGrouped(col) || col.commands) {\n continue;\n }\n // eslint-disable-next-line\n value = (col.valueAccessor(col.field, args.rowData, col));\n cell = form.querySelector('[e-mappinguid=' + col.uid + ']');\n var temp = col.edit.write;\n if (!isNullOrUndefined(cell)) {\n if (typeof temp === 'string') {\n temp = getObject(temp, window);\n temp({\n rowData: args.rowData, element: cell, column: col, requestType: args.requestType, row: args.row,\n foreignKeyData: col.isForeignColumn() && getObject(col.field, args.foreignKeyData)\n });\n }\n else {\n col.edit.write({\n rowData: args.rowData, element: cell, column: col, requestType: args.requestType, row: args.row,\n foreignKeyData: col.isForeignColumn() && getObject(col.field, args.foreignKeyData)\n });\n }\n if (!isFocused && !cell.getAttribute('disabled') && !parentsUntil(cell, 'e-checkbox-disabled')) {\n this.focusElement(cell, args.type);\n isFocused = true;\n }\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n EditRender.prototype.focusElement = function (elem, type) {\n var chkBox = this.parent.element.querySelector('.e-edit-checkselect');\n if (!isNullOrUndefined(chkBox) && chkBox.nextElementSibling) {\n chkBox.nextElementSibling.classList.add('e-focus');\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.focus.onClick({ target: closest(elem, 'td') }, true);\n }\n else {\n var isFocus = (this.parent.enableVirtualization || this.parent.enableColumnVirtualization) && this.parent.editSettings.mode === 'Normal' ? false : true;\n if (isFocus || ((this.parent.enableVirtualization || this.parent.enableColumnVirtualization) && this.parent.editSettings.newRowPosition === 'Bottom'\n && parentsUntil(elem, literals.addedRow))) {\n elem.focus();\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n elem.focus({ preventScroll: true });\n }\n }\n if (elem.classList.contains('e-defaultcell')) {\n elem.setSelectionRange(elem.value.length, elem.value.length);\n }\n };\n EditRender.prototype.getEditElements = function (args) {\n var gObj = this.parent;\n var elements = {};\n var cols = gObj.editSettings.mode !== 'Batch' ? gObj.getColumns() : [gObj.getColumnByField(args.columnName)];\n if (args.isCustomFormValidation) {\n cols = this.parent.columnModel;\n }\n if (this.parent.editSettings.template) {\n return {};\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n var col = cols[parseInt(i.toString(), 10)];\n if (col.commands || col.commandsTemplate) {\n var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n var model = new RowModelGenerator(this.parent);\n var cellRenderer = cellRendererFact.getCellRenderer(CellType.CommandColumn);\n var cells = model.generateRows(args.rowData)[0].cells;\n var cell = cells.filter(function (cell) { return cell.rowID; });\n var td = cellRenderer.render(cell[parseInt(i.toString(), 10)], args.rowData, { 'index': args.row ? args.row.getAttribute(literals.dataRowIndex) : 0 }, this.parent.enableVirtualization);\n var div = td.firstElementChild;\n div.setAttribute('textAlign', td.getAttribute('textAlign'));\n elements[col.uid] = div;\n continue;\n }\n if (col.type === 'dateonly' && args.rowData[col.field] instanceof Date) {\n var cellValue = args.rowData[col.field];\n args.rowData[col.field] = cellValue.getFullYear() + '-' + padZero(cellValue.getMonth() + 1) + '-' + padZero(cellValue.getDate());\n }\n var value = (col.valueAccessor(col.field, args.rowData, col));\n var tArgs = { column: col, value: value, type: args.requestType, data: args.rowData };\n var temp = col.edit.create;\n var input = void 0;\n if (col.editTemplate) {\n input = this.parent.createElement('span', { attrs: { 'e-mappinguid': col.uid } });\n var tempID = this.parent.element.id + col.uid + 'editTemplate';\n var tempData = extendObjWithFn({}, args.rowData, { column: col });\n var isReactCompiler = this.parent.isReact && typeof (col.editTemplate) !== 'string';\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n this.parent.parentDetails.parentInstObj.isReact;\n if (isReactCompiler || isReactChild) {\n col.getEditTemplate()(extend({ 'index': args.rowIndex }, tempData), this.parent, 'editTemplate', tempID, null, null, input);\n this.parent.renderTemplates();\n }\n else {\n var template = col.getEditTemplate()(extend({ 'index': args.rowIndex }, tempData), this.parent, 'editTemplate', tempID);\n appendChildren(input, template);\n }\n }\n else {\n if (typeof temp === 'string') {\n temp = getObject(temp, window);\n input = temp(tArgs);\n }\n else {\n input = col.edit.create(tArgs);\n }\n if (typeof input === 'string') {\n var div = this.parent.createElement('div');\n div.innerHTML = input;\n input = div.firstChild;\n }\n var isInput = input.tagName !== 'input' && input.querySelectorAll('input').length;\n var complexFieldName = getComplexFieldID(col.field);\n attributes(isInput ? input.querySelector('input') : input, {\n name: complexFieldName, 'e-mappinguid': col.uid,\n id: gObj.element.id + complexFieldName\n });\n classList(input, ['e-input', 'e-field'], []);\n if (col.textAlign === 'Right') {\n input.classList.add('e-ralign');\n }\n if ((col.isPrimaryKey || col.isIdentity) && args.requestType === 'beginEdit' ||\n (col.isIdentity && args.requestType === 'add')) { // already disabled in cell plugins\n input.setAttribute('disabled', '');\n }\n }\n elements[col.uid] = input;\n }\n return elements;\n };\n EditRender.prototype.destroy = function () {\n this.renderer.removeEventListener();\n };\n return EditRender;\n}());\nexport { EditRender };\n","import { createEditElement } from '../base/util';\n/**\n * `DropDownEditCell` is used to handle dropdown cell type editing.\n *\n * @hidden\n */\nvar EditCellBase = /** @class */ (function () {\n function EditCellBase(parent) {\n this.parent = parent;\n }\n EditCellBase.prototype.create = function (args) {\n return createEditElement(this.parent, args.column, 'e-field', { type: 'text' });\n };\n EditCellBase.prototype.read = function (element) {\n return element.ej2_instances[0].value;\n };\n EditCellBase.prototype.destroy = function () {\n if (this.obj && !this.obj.isDestroyed) {\n if (this.removeEventHandler) {\n this.removeEventHandler();\n }\n this.obj.destroy();\n }\n };\n return EditCellBase;\n}());\nexport { EditCellBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { extend } from '@syncfusion/ej2-base';\nimport { isEditable, addRemoveActiveClasses, createEditElement, getObject } from '../base/util';\nimport * as literals from '../base/string-literals';\nimport { EditCellBase } from './edit-cell-base';\n/**\n * `BooleanEditCell` is used to handle boolean cell type editing.\n *\n * @hidden\n */\nvar BooleanEditCell = /** @class */ (function (_super) {\n __extends(BooleanEditCell, _super);\n function BooleanEditCell() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.activeClasses = ['e-selectionbackground', 'e-active'];\n return _this;\n }\n BooleanEditCell.prototype.create = function (args) {\n var col = args.column;\n var classNames = 'e-field e-boolcell';\n if (col.type === 'checkbox') {\n classNames = 'e-field e-boolcell e-edit-checkselect';\n }\n this.removeEventHandler = this.removeEventListener;\n return createEditElement(this.parent, args.column, classNames, { type: 'checkbox', value: args.value });\n };\n BooleanEditCell.prototype.read = function (element) {\n return element.checked;\n };\n BooleanEditCell.prototype.write = function (args) {\n var selectChkBox;\n var chkState;\n if (!isNullOrUndefined(args.row)) {\n selectChkBox = args.row.querySelector('.e-edit-checkselect');\n }\n if (getObject(args.column.field, args.rowData)) {\n chkState = JSON.parse(getObject(args.column.field, args.rowData).toString().toLowerCase());\n }\n if (!isNullOrUndefined(selectChkBox) && args.column.type === 'checkbox') {\n this.editType = this.parent.editSettings.mode;\n this.editRow = args.row;\n if (args.requestType !== 'add') {\n var row = this.parent.getRowObjectFromUID(args.row.getAttribute('data-uid'));\n chkState = row ? row.isSelected : false;\n }\n addRemoveActiveClasses.apply(void 0, [[].slice.call(args.row.getElementsByClassName(literals.rowCell)), chkState].concat(this.activeClasses));\n }\n this.obj = new CheckBox(extend({\n label: this.parent.editSettings.mode !== 'Dialog' ? ' ' : args.column.headerText,\n checked: chkState,\n disabled: !isEditable(args.column, args.requestType, args.element), enableRtl: this.parent.enableRtl,\n cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n }, args.column.edit.params));\n this.addEventListener();\n this.obj.appendTo(args.element);\n };\n BooleanEditCell.prototype.addEventListener = function () {\n this.cbChange = this.checkBoxChange.bind(this);\n this.obj.addEventListener(literals.change, this.cbChange);\n };\n BooleanEditCell.prototype.removeEventListener = function () {\n if (this.obj.isDestroyed) {\n return;\n }\n this.obj.removeEventListener(literals.change, this.cbChange);\n };\n BooleanEditCell.prototype.checkBoxChange = function (args) {\n if (this.editRow && this.editType !== 'Dialog') {\n var add = false;\n if (!args.checked) {\n this.editRow.removeAttribute('aria-selected');\n }\n else {\n add = true;\n this.editRow.setAttribute('aria-selected', add.toString());\n }\n addRemoveActiveClasses.apply(void 0, [[].slice.call(this.editRow.getElementsByClassName(literals.rowCell)), add].concat(this.activeClasses));\n }\n };\n return BooleanEditCell;\n}(EditCellBase));\nexport { BooleanEditCell };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { extend, isNullOrUndefined, select } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Query, DataManager, DataUtil, Predicate } from '@syncfusion/ej2-data';\nimport { isEditable, getComplexFieldID, getObject } from '../base/util';\nimport { parentsUntil } from '../base/util';\nimport { EditCellBase } from './edit-cell-base';\nimport * as literals from '../base/string-literals';\nimport * as events from '../base/constant';\n/**\n * `DropDownEditCell` is used to handle dropdown cell type editing.\n *\n * @hidden\n */\nvar DropDownEditCell = /** @class */ (function (_super) {\n __extends(DropDownEditCell, _super);\n function DropDownEditCell(parent) {\n var _this = \n //constructor\n _super.call(this) || this;\n _this.parent = parent;\n _this.flag = false;\n _this.removeEventHandler = _this.removeEventListener;\n return _this;\n }\n DropDownEditCell.prototype.write = function (args) {\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n this.column = args.column;\n var pred = new Predicate(args.column.field, 'notequal', null, true, false);\n var params = {};\n if (args.column.edit.params) {\n var keys = Object.keys(args.column.edit.params);\n for (var i = 0; i < keys.length; i++) {\n params[keys[parseInt(i.toString(), 10)]] = keys[parseInt(i.toString(), 10)] === 'query' ?\n args.column.edit.params[keys[parseInt(i.toString(), 10)]].clone() :\n args.column.edit.params[keys[parseInt(i.toString(), 10)]];\n }\n }\n this.obj = new DropDownList(extend({\n dataSource: this.parent.dataSource instanceof DataManager ?\n this.parent.dataSource : new DataManager(this.parent.dataSource),\n query: new Query().where(pred).select(args.column.field), enabled: isEditable(args.column, args.requestType, args.element),\n fields: { value: args.column.field },\n value: getObject(args.column.field, args.rowData),\n enableRtl: this.parent.enableRtl,\n placeholder: isInline ? '' : args.column.headerText, popupHeight: '200px',\n floatLabelType: isInline ? 'Never' : 'Always',\n sortOrder: 'Ascending',\n cssClass: this.parent.cssClass ? this.parent.cssClass : null,\n close: this.dropDownClose.bind(this)\n }, params));\n if (this.parent.enableVirtualization) {\n if (params.dataSource) {\n this.obj.dataSource = params.dataSource;\n }\n else {\n this.obj.dataSource = args.column.isForeignColumn() ? [args.foreignKeyData[0]] : [args.rowData];\n }\n }\n this.addEventListener();\n this.obj.query.params = this.parent.query.params;\n this.obj.appendTo(args.element);\n /* tslint:disable-next-line:no-any */\n args.element.setAttribute('name', getComplexFieldID(args.column.field));\n };\n DropDownEditCell.prototype.dropDownClose = function (args) {\n if (args.event && args.event.action === 'escape') {\n this.parent.editModule.editCellDialogClose = true;\n }\n };\n DropDownEditCell.prototype.addEventListener = function () {\n this.ddCreated = this.dropdownCreated.bind(this);\n this.ddOpen = this.dropDownOpen.bind(this);\n this.ddBeforeOpen = this.dropdownBeforeOpen.bind(this);\n this.ddComplete = this.ddActionComplete.bind(this);\n this.obj.addEventListener(literals.create, this.ddCreated);\n this.obj.addEventListener(literals['open'], this.ddOpen);\n this.obj.addEventListener(literals.beforeOpen, this.ddBeforeOpen);\n this.obj.addEventListener(events.actionComplete, this.ddComplete);\n };\n DropDownEditCell.prototype.removeEventListener = function () {\n if (this.obj.isDestroyed) {\n return;\n }\n this.obj.removeEventListener(literals.create, this.ddCreated);\n this.obj.removeEventListener(literals['open'], this.ddOpen);\n this.obj.removeEventListener(literals.beforeOpen, this.ddBeforeOpen);\n this.obj.removeEventListener(events.actionComplete, this.ddComplete);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DropDownEditCell.prototype.dropdownCreated = function (e) {\n this.flag = true;\n };\n DropDownEditCell.prototype.dropdownBeforeOpen = function () {\n if (this.parent.enableVirtualization) {\n if (this.column.edit.params && this.column.edit.params.dataSource) {\n this.obj.dataSource = this.column.edit.params.dataSource;\n }\n else {\n this.obj.dataSource = !this.column.isForeignColumn() ? (this.parent.dataSource instanceof DataManager ?\n this.parent.dataSource : new DataManager(this.parent.dataSource))\n : this.column.dataSource instanceof DataManager ?\n this.column.dataSource : new DataManager(this.column.dataSource);\n }\n }\n };\n DropDownEditCell.prototype.ddActionComplete = function (e) {\n e.result = DataUtil.distinct(e.result, this.obj.fields.value, true);\n if (this.flag && this.column.dataSource && !(this.column.edit.params &&\n this.column.edit.params.ddEditedData)) {\n if ('result' in this.column.dataSource) {\n this.column.dataSource.result = e.result;\n }\n else if (this.column.dataSource instanceof DataManager) {\n this.column.dataSource.dataSource.json = e.result;\n }\n }\n this.flag = false;\n };\n DropDownEditCell.prototype.dropDownOpen = function (args) {\n var dlgElement = parentsUntil(this.obj.element, 'e-dialog');\n if (this.parent.editSettings.mode === 'Dialog' && !isNullOrUndefined(dlgElement)) {\n var dlgObj = select('#' + dlgElement.id, document).ej2_instances[0];\n args.popup.element.style.zIndex = (dlgObj.zIndex + 1).toString();\n }\n };\n return DropDownEditCell;\n}(EditCellBase));\nexport { DropDownEditCell };\n","import { extend, Internationalization } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { isEditable, getComplexFieldID, getObject, createEditElement } from '../base/util';\n/**\n * `NumericEditCell` is used to handle numeric cell type editing.\n *\n * @hidden\n */\nvar NumericEditCell = /** @class */ (function () {\n function NumericEditCell(parent) {\n this.parent = parent;\n }\n NumericEditCell.prototype.keyEventHandler = function (args) {\n if (args.keyCode === 13 || args.keyCode === 9) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent('change', false, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.dispatchEvent(evt);\n }\n };\n NumericEditCell.prototype.create = function (args) {\n this.instances = new Internationalization(this.parent.locale);\n return createEditElement(this.parent, args.column, 'e-field', {});\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n NumericEditCell.prototype.read = function (element) {\n return this.obj.value;\n };\n NumericEditCell.prototype.write = function (args) {\n var col = args.column;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n this.obj = new NumericTextBox(extend({\n value: parseFloat(getObject(args.column.field, args.rowData)),\n enableRtl: this.parent.enableRtl,\n placeholder: isInline ? '' : args.column.headerText,\n enabled: isEditable(args.column, args.requestType, args.element),\n floatLabelType: this.parent.editSettings.mode !== 'Dialog' ? 'Never' : 'Always',\n locale: this.parent.locale,\n cssClass: this.parent.cssClass ? this.parent.cssClass : null\n }, col.edit.params));\n args.element.setAttribute('name', getComplexFieldID(args.column.field));\n this.obj.appendTo(args.element);\n this.obj.element.addEventListener('keydown', this.keyEventHandler);\n };\n NumericEditCell.prototype.destroy = function () {\n if (this.obj && !this.obj.isDestroyed) {\n this.obj.element.removeEventListener('keydown', this.keyEventHandler);\n this.obj.destroy();\n }\n };\n return NumericEditCell;\n}());\nexport { NumericEditCell };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { isEditable, createEditElement } from '../base/util';\nimport { TextBox } from '@syncfusion/ej2-inputs';\nimport { EditCellBase } from './edit-cell-base';\n/**\n * `DefaultEditCell` is used to handle default cell type editing.\n *\n * @hidden\n */\nvar DefaultEditCell = /** @class */ (function (_super) {\n __extends(DefaultEditCell, _super);\n function DefaultEditCell() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n DefaultEditCell.prototype.create = function (args) {\n var attr = {\n type: 'text', value: !isNullOrUndefined(args.value) ? args.value : '', style: 'text-align:' + args.column.textAlign\n };\n return createEditElement(this.parent, args.column, 'e-field e-input e-defaultcell', attr);\n };\n DefaultEditCell.prototype.read = function (element) {\n return element.value;\n };\n DefaultEditCell.prototype.write = function (args) {\n var col = args.column;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n this.obj = new TextBox(extend({\n element: args.element, floatLabelType: this.parent.editSettings.mode !== 'Dialog' ? 'Never' : 'Always',\n enableRtl: this.parent.enableRtl, enabled: isEditable(args.column, args.requestType, args.element),\n placeholder: isInline ? '' : args.column.headerText,\n cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n }, col.edit.params));\n this.obj.appendTo(args.element);\n if (this.parent.editSettings.mode === 'Batch') {\n this.obj.element.addEventListener('keydown', this.keyEventHandler);\n }\n };\n DefaultEditCell.prototype.keyEventHandler = function (args) {\n if (args.key === 'Enter' || args.key === 'Tab') {\n var evt = new Event('change', { bubbles: false, cancelable: true });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.dispatchEvent(evt);\n }\n };\n DefaultEditCell.prototype.destroy = function () {\n if (this.obj && !this.obj.isDestroyed) {\n this.obj.element.removeEventListener('keydown', this.keyEventHandler);\n this.obj.destroy();\n }\n };\n return DefaultEditCell;\n}(EditCellBase));\nexport { DefaultEditCell };\n","import { extend, select } from '@syncfusion/ej2-base';\nimport { remove, isNullOrUndefined, updateBlazorTemplate } from '@syncfusion/ej2-base';\nimport { parentsUntil, isGroupAdaptive, refreshForeignData, getObject } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { addRemoveEventListener, addFixedColumnBorder } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * `NormalEdit` module is used to handle normal('inline, dialog, external') editing actions.\n *\n * @hidden\n */\nvar NormalEdit = /** @class */ (function () {\n function NormalEdit(parent, serviceLocator, renderer) {\n this.args = {};\n this.currentVirtualData = {};\n this.parent = parent;\n this.renderer = renderer;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n NormalEdit.prototype.clickHandler = function (e) {\n var target = e.target;\n var gObj = this.parent;\n if ((((parentsUntil(target, literals.gridContent) &&\n parentsUntil(parentsUntil(target, literals.gridContent), 'e-grid').id === gObj.element.id)) || (gObj.frozenRows\n && parentsUntil(target, literals.headerContent))) && !parentsUntil(target, 'e-unboundcelldiv')) {\n this.rowIndex = parentsUntil(target, literals.rowCell)\n ? parseInt(target.parentElement.getAttribute(literals.dataRowIndex), 10) : -1;\n if (gObj.isEdit) {\n gObj.editModule.endEdit();\n }\n }\n };\n NormalEdit.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, literals.rowCell) && this.parent.editSettings.allowEditOnDblClick) {\n this.parent.editModule.startEdit(parentsUntil(e.target, literals.row));\n }\n };\n /**\n * The function used to trigger editComplete\n *\n * @param {NotifyArgs} e - specifies the NotifyArgs\n * @returns {void}\n * @hidden\n */\n NormalEdit.prototype.editComplete = function (e) {\n this.parent.isEdit = false;\n var action = 'action';\n switch (e.requestType) {\n case 'save':\n if (!(this.parent.isCheckBoxSelection || this.parent.selectionSettings.type === 'Multiple')\n || (!this.parent.isPersistSelection)) {\n if (e[\"\" + action] !== 'edit') {\n this.parent.selectRow(e['index']);\n }\n }\n this.parent.trigger(events.actionComplete, extend(e, {\n requestType: 'save',\n type: events.actionComplete\n }));\n break;\n case 'delete':\n this.parent.trigger(events.actionComplete, extend(e, {\n requestType: 'delete',\n type: events.actionComplete\n }));\n if (!this.parent.isCheckBoxSelection) {\n this.parent.selectRow(this.editRowIndex);\n }\n break;\n }\n };\n NormalEdit.prototype.getEditArgs = function (editedData, rowObj, isScroll) {\n var primaryKeys = this.parent.getPrimaryKeyFieldNames();\n var primaryKeyValues = [];\n for (var i = 0; i < primaryKeys.length; i++) {\n primaryKeyValues.push(getObject(primaryKeys[parseInt(i.toString(), 10)], editedData));\n }\n var args = {\n primaryKey: primaryKeys, primaryKeyValue: primaryKeyValues, requestType: 'beginEdit',\n rowData: editedData, rowIndex: this.rowIndex, type: 'edit', cancel: false,\n foreignKeyData: rowObj && rowObj.foreignKeyData, target: undefined, isScroll: isScroll\n };\n return args;\n };\n NormalEdit.prototype.startEdit = function (tr) {\n var _this = this;\n var gObj = this.parent;\n this.rowIndex = this.editRowIndex = parseInt(tr.getAttribute(literals.dataRowIndex), 10);\n if (gObj.enableVirtualization || gObj.enableColumnVirtualization || gObj.enableInfiniteScrolling) {\n var selector = '.e-row[data-rowindex=\"' + this.rowIndex + '\"]';\n var virtualRow = this.parent.element.querySelector(selector);\n if (!virtualRow) {\n return;\n }\n }\n var e = { data: undefined, index: this.rowIndex, isScroll: false };\n this.parent.notify(events.virtualScrollEditActionBegin, e);\n if (isGroupAdaptive(gObj)) {\n var rObj = gObj.getRowObjectFromUID(tr.getAttribute('data-uid'));\n this.previousData = rObj.data;\n }\n else if (this.parent.enableVirtualization || this.parent.enableColumnVirtualization ||\n (this.parent.enableInfiniteScrolling && !this.previousData)) {\n this.previousData = e.data;\n }\n else if (!this.parent.enableVirtualization) {\n this.previousData = extend({}, {}, gObj.getCurrentViewRecords()[this.rowIndex], true);\n }\n var editedData = extend({}, {}, e.data || this.previousData, true);\n this.uid = tr.getAttribute('data-uid');\n var rowObj = gObj.getRowObjectFromUID(this.uid);\n var args = this.getEditArgs(editedData, rowObj, e.isScroll);\n args.row = tr;\n if (!args.isScroll) {\n this.parent.notify(events.createVirtualValidationForm, { uid: this.uid, prevData: this.previousData, argsCreator: this.getEditArgs.bind(this), renderer: this.renderer });\n gObj.trigger(events.beginEdit, args, function (begineditargs) {\n begineditargs.type = 'actionBegin';\n gObj.trigger(events.actionBegin, begineditargs, function (editargs) {\n if (!editargs.cancel) {\n _this.inlineEditHandler(editargs, tr);\n }\n });\n });\n }\n else {\n this.inlineEditHandler(args, tr);\n }\n };\n NormalEdit.prototype.inlineEditHandler = function (editargs, tr) {\n var gObj = this.parent;\n gObj.isEdit = true;\n editargs.row = editargs.row ? editargs.row : tr;\n if (gObj.editSettings.mode !== 'Dialog') {\n gObj.clearSelection();\n }\n if (gObj.editSettings.mode === 'Dialog' && gObj.selectionModule) {\n gObj.selectionModule.preventFocus = true;\n editargs.row.classList.add('e-dlgeditrow');\n }\n this.renderer.update(editargs);\n this.uid = tr.getAttribute('data-uid');\n gObj.editModule.applyFormValidation();\n editargs.type = 'actionComplete';\n gObj.trigger(events.actionComplete, editargs);\n if (gObj.editSettings.template) {\n gObj.editModule.applyFormValidation(undefined, editargs.form.ej2_instances[0].rules);\n }\n this.args = editargs;\n if (this.parent.allowTextWrap) {\n this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n };\n NormalEdit.prototype.updateRow = function (index, data) {\n var _this = this;\n var gObj = this.parent;\n this.editRowIndex = index;\n var args = {\n requestType: 'save', action: 'edit', type: events.actionBegin, data: data, cancel: false,\n previousData: gObj.getCurrentViewRecords()[parseInt(index.toString(), 10)],\n row: gObj.getRowByIndex(index)\n };\n gObj.showSpinner();\n if (gObj.enableInfiniteScrolling) {\n this.uid = args.row.getAttribute('data-uid');\n var index_1 = parseInt(args.row.getAttribute('data-rowindex'), 10);\n this.parent.notify(events.refreshInfiniteEditrowindex, { index: index_1 });\n }\n gObj.notify(events.updateData, args);\n if (args.promise) {\n args.promise.then(function () { return gObj.refresh(); }).catch(function (e) { return _this.edFail(e); });\n }\n else {\n if (!gObj.enableInfiniteScrolling) {\n gObj.refresh();\n }\n }\n };\n NormalEdit.prototype.editFormValidate = function () {\n var gObj = this.parent;\n var isValid = gObj.editModule.editFormValidate();\n var validationArgs = {\n prevData: this.previousData, isValid: true, editIdx: this.editRowIndex, addIdx: this.addedRowIndex\n };\n gObj.notify(events.validateVirtualForm, validationArgs);\n return (isValid && validationArgs.isValid);\n };\n NormalEdit.prototype.endEdit = function () {\n var _this = this;\n var gObj = this.parent;\n if (!this.parent.isEdit || !this.editFormValidate()) {\n return;\n }\n var editedData = extend({}, {}, this.previousData, true);\n var args = extend(this.args, {\n requestType: 'save', type: events.actionBegin, data: editedData, cancel: false,\n previousData: this.previousData, selectedRow: gObj.selectedRowIndex, foreignKeyData: {}\n });\n var isDlg = gObj.editSettings.mode === 'Dialog';\n var dlgWrapper = select('#' + gObj.element.id + '_dialogEdit_wrapper', document);\n var dlgForm = isDlg ? dlgWrapper.querySelector('.e-gridform') : gObj.element.getElementsByClassName('e-gridform')[0];\n var data = {\n virtualData: extend({}, {}, this.previousData, true), isAdd: false, isScroll: false, endEdit: true\n };\n this.parent.notify(events.getVirtualData, data);\n if ((this.parent.enableVirtualization || this.parent.enableColumnVirtualization || this.parent.enableInfiniteScrolling)\n && this.parent.editSettings.mode === 'Normal' && Object.keys(data.virtualData).length) {\n if (this.parent.isEdit) {\n this.currentVirtualData = editedData = args.data = data.virtualData;\n }\n }\n else {\n editedData = gObj.editModule.getCurrentEditedData(dlgForm, editedData);\n }\n var eleLength = [].slice.call(gObj.element.getElementsByClassName(literals.editedRow)).length;\n if (!data.isAdd && Object.keys(this.currentVirtualData).length && !eleLength) {\n eleLength = 1;\n }\n if (isDlg ? dlgWrapper.getElementsByClassName(literals.editedRow).length : eleLength) {\n args.action = 'edit';\n gObj.trigger(events.actionBegin, args, function (endEditArgs) {\n if (endEditArgs.cancel) {\n return;\n }\n if (_this.parent.loadingIndicator.indicatorType === 'Spinner') {\n gObj.showSpinner();\n }\n if (_this.parent.loadingIndicator.indicatorType === 'Shimmer') {\n _this.parent.showMaskRow();\n }\n gObj.notify(events.updateData, endEditArgs);\n });\n }\n else {\n args.action = 'add';\n args.selectedRow = 0;\n args.index = this.addedRowIndex;\n gObj.notify(events.virtualScrollEditSuccess, {});\n gObj.notify(events.modelChanged, args);\n this.addedRowIndex = null;\n if (args.cancel) {\n return;\n }\n }\n };\n NormalEdit.prototype.destroyElements = function () {\n var gObj = this.parent;\n gObj.editModule.destroyWidgets();\n gObj.editModule.destroyForm();\n this.parent.notify(events.dialogDestroy, {});\n };\n NormalEdit.prototype.editHandler = function (args) {\n var _this = this;\n if (args.promise) {\n args.promise.then(function (e) { return _this.edSucc(e, args); }).catch(function (e) { return _this.edFail(e); });\n }\n else {\n this.editSuccess(args.data, args);\n }\n };\n NormalEdit.prototype.edSucc = function (e, args) {\n this.editSuccess(e, args);\n };\n NormalEdit.prototype.edFail = function (e) {\n this.editFailure(e);\n };\n NormalEdit.prototype.updateCurrentViewData = function (data) {\n if (!this.parent.enableVirtualization && !this.parent.enableInfiniteScrolling) {\n this.parent.getCurrentViewRecords()[this.editRowIndex] = data;\n }\n };\n NormalEdit.prototype.requestSuccess = function (args) {\n if (this.parent.editModule.formObj && !this.parent.editModule.formObj.isDestroyed) {\n this.destroyElements();\n this.stopEditStatus();\n if (this.parent.editSettings.mode === 'Dialog' && args.action !== 'add' &&\n this.parent.selectionModule) {\n this.parent.element.querySelector('.e-dlgeditrow').classList.remove('e-dlgeditrow');\n }\n }\n };\n NormalEdit.prototype.editSuccess = function (e, args) {\n if (!isNullOrUndefined(e) && !(e instanceof Array)) {\n var rowData = 'rowData';\n args.data = extend({}, extend({}, args[\"\" + rowData], args.data), e);\n }\n this.requestSuccess(args);\n this.parent.trigger(events.beforeDataBound, args);\n args.type = events.actionComplete;\n this.parent.isEdit = false;\n this.refreshRow(args.data);\n this.parent.notify(events.virtualScrollEditSuccess, args);\n this.parent.editModule.checkLastRow(args.row);\n this.parent.editModule.isLastRow = false;\n this.updateCurrentViewData(args.data);\n this.blazorTemplate();\n this.editRowIndex = null;\n if (this.parent.allowGrouping && this.parent.groupSettings.columns.length\n && this.parent.groupSettings.showGroupedColumn) {\n var dragRow = args.row;\n var rows = this.parent.getRowsObject();\n var dragRowUid = dragRow.getAttribute('data-uid');\n var dragRowObject_1 = this.parent.getRowObjectFromUID(dragRowUid);\n var _loop_1 = function (i) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var thisRef = this_1;\n rows = rows.filter(function (data) {\n var flag = data.isDataRow && data !== dragRowObject_1;\n if (flag) {\n var groupedColumn = thisRef.parent.groupSettings.columns[parseInt(i.toString(), 10)].split('.');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var comparer1 = data.data[groupedColumn[0]];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var comparer2 = args.data[groupedColumn[0]];\n for (var j = 1; j < groupedColumn.length; j++) {\n comparer1 = comparer1[groupedColumn[j]];\n comparer2 = comparer2[groupedColumn[j]];\n }\n return flag && comparer1 === comparer2;\n }\n else {\n return flag;\n }\n });\n };\n var this_1 = this;\n for (var i = 0; i < this.parent.groupSettings.columns.length; i++) {\n _loop_1(i);\n }\n var dropRowObject = rows[0];\n if (!isNullOrUndefined(dragRowObject_1) && !isNullOrUndefined(dropRowObject) &&\n dragRowObject_1.parentUid !== dropRowObject.parentUid) {\n this.parent['groupModule'].groupedRowReorder(dragRowObject_1, dropRowObject);\n }\n else if (this.parent.aggregates.length) {\n this.parent.aggregateModule.refresh(args.data, this.parent.groupSettings.enableLazyLoading ? args.row : undefined);\n }\n }\n else if (this.parent.aggregates.length) {\n this.parent.aggregateModule.refresh(args.data, this.parent.groupSettings.enableLazyLoading ? args.row : undefined);\n }\n this.parent.trigger(events.actionComplete, args);\n if (!(this.parent.isCheckBoxSelection || this.parent.selectionSettings.type === 'Multiple')\n || (!this.parent.isPersistSelection) && !this.parent.selectionSettings.checkboxOnly) {\n if (this.parent.editSettings.mode !== 'Dialog') {\n this.parent.selectRow(this.rowIndex > -1 ? this.rowIndex : this.editRowIndex);\n }\n }\n if (this.parent.aggregates.length && this.parent.groupSettings.enableLazyLoading && this.parent.groupSettings.columns.length\n && (this.parent.groupModule.getGroupAggregateTemplates(true).length\n || this.parent.groupModule.getGroupAggregateTemplates(false).length)) {\n return;\n }\n this.parent.removeMaskRow();\n this.parent.hideSpinner();\n };\n NormalEdit.prototype.closeForm = function () {\n if (!this.cloneRow && this.parent.isEdit) {\n this.stopEditStatus();\n }\n if (this.cloneRow) {\n this.cloneRow.remove();\n this.cloneRow = null;\n this.originalRow.classList.remove('e-hiddenrow');\n }\n if (this.cloneFrozen) {\n this.cloneFrozen.remove();\n if (this.frozen) {\n this.frozen.classList.remove('e-hiddenrow');\n }\n }\n };\n NormalEdit.prototype.blazorTemplate = function () {\n var cols = this.parent.getColumns();\n if (this.parent.editSettings.template && this.parent.editSettings.mode === 'Normal') {\n updateBlazorTemplate(this.parent.element.id + 'editSettingsTemplate', 'Template', this.parent.editSettings);\n }\n for (var i = 0; i < cols.length; i++) {\n var col = cols[parseInt(i.toString(), 10)];\n if (col.template) {\n updateBlazorTemplate(this.parent.element.id + col.uid, 'Template', col, false);\n }\n if (col.editTemplate) {\n updateBlazorTemplate(this.parent.element.id + col.uid + 'editTemplate', 'EditTemplate', col);\n }\n }\n };\n NormalEdit.prototype.editFailure = function (e) {\n this.parent.removeMaskRow();\n this.parent.trigger(events.actionFailure, ({ error: e }));\n this.parent.hideSpinner();\n this.parent.log('actionfailure', { error: e });\n };\n NormalEdit.prototype.needRefresh = function () {\n var refresh = true;\n var editedRow = this.parent.element.querySelector('.e-gridform');\n if ((this.parent.enableVirtualization || this.parent.infiniteScrollSettings.enableCache)\n && this.parent.editSettings.mode === 'Normal' && !editedRow) {\n refresh = false;\n }\n return refresh;\n };\n NormalEdit.prototype.refreshRow = function (data) {\n var row = new RowRenderer(this.serviceLocator, null, this.parent);\n var rowObj = this.parent.getRowObjectFromUID(this.uid);\n if (rowObj) {\n rowObj.changes = data;\n this.parent.notify(events.refreshVirtualCache, { data: data });\n refreshForeignData(rowObj, this.parent.getForeignKeyColumns(), rowObj.changes);\n if (this.needRefresh()) {\n row.refresh(rowObj, this.parent.getColumns(), true);\n }\n var tr = [].slice.call(this.parent.element.querySelectorAll('[data-rowindex=\"' + rowObj.index + '\"]'));\n for (var i = 0; i < tr.length; i++) {\n addFixedColumnBorder(tr[parseInt(i.toString(), 10)]);\n if (this.parent.enableColumnVirtualization &&\n tr[parseInt(i.toString(), 10)].querySelectorAll('.e-leftfreeze,.e-rightfreeze,.e-fixedfreeze').length) {\n var cols = this.parent.getColumns();\n var leftrightCells = [].slice.call(tr[parseInt(i.toString(), 10)].querySelectorAll('.e-leftfreeze,.e-rightfreeze.e-fixedfreeze'));\n for (var j = 0; j < leftrightCells.length; j++) {\n if (leftrightCells[parseInt(j.toString(), 10)].classList.contains('e-leftfreeze')) {\n leftrightCells[parseInt(j.toString(), 10)].style.left = (cols[parseInt(j.toString(), 10)].valueX - this.parent.translateX) + 'px';\n }\n else if (leftrightCells[parseInt(j.toString(), 10)].classList.contains('e-rightfreeze')) {\n var idx = parseInt(leftrightCells[parseInt(j.toString(), 10)].getAttribute('data-colindex'), 10);\n leftrightCells[parseInt(j.toString(), 10)].style.right = ((cols[parseInt(idx.toString(), 10)].valueX + this.parent.translateX)) + 'px';\n }\n else {\n leftrightCells[parseInt(j.toString(), 10)].style.left = (this.parent.leftrightColumnWidth('left') -\n this.parent.translateX) + 'px';\n leftrightCells[parseInt(j.toString(), 10)].style.right = (this.parent.leftrightColumnWidth('right') +\n this.parent.translateX) + 'px';\n }\n }\n }\n }\n }\n };\n NormalEdit.prototype.closeEdit = function () {\n var _this = this;\n if (!this.parent.isEdit) {\n return;\n }\n var gObj = this.parent;\n var args = extend(this.args, {\n requestType: 'cancel', type: events.actionBegin, cancel: false, data: this.previousData, selectedRow: gObj.selectedRowIndex\n });\n gObj.notify(events.virtualScrollEditCancel, args);\n this.blazorTemplate();\n gObj.trigger(events.actionBegin, args, function (closeEditArgs) {\n if (closeEditArgs.cancel) {\n return;\n }\n if (_this.parent.editSettings.mode === 'Dialog') {\n _this.parent.notify(events.dialogDestroy, {});\n }\n gObj.isEdit = false;\n _this.stopEditStatus();\n closeEditArgs.type = events.actionComplete;\n if (gObj.editSettings.mode !== 'Dialog') {\n _this.refreshRow(closeEditArgs.data);\n }\n var isLazyLoad = gObj.groupSettings.enableLazyLoading && gObj.groupSettings.columns.length\n && !gObj.getContentTable().querySelector('tr.e-emptyrow');\n if (!gObj.getContentTable().querySelector('tr.e-emptyrow') &&\n !gObj.getContentTable().querySelector('tr.e-row') && !isLazyLoad) {\n gObj.renderModule.emptyRow();\n }\n if (gObj.editSettings.mode !== 'Dialog') {\n gObj.selectRow(_this.rowIndex);\n }\n gObj.trigger(events.actionComplete, closeEditArgs);\n });\n };\n NormalEdit.prototype.addRecord = function (data, index) {\n var _this = this;\n var gObj = this.parent;\n this.addedRowIndex = index = !isNullOrUndefined(index) ? index : 0;\n if (data) {\n gObj.notify(events.modelChanged, {\n requestType: 'save', type: events.actionBegin, data: data, selectedRow: 0, action: 'add', index: index\n });\n return;\n }\n if (gObj.isEdit) {\n return;\n }\n this.previousData = {};\n this.uid = '';\n var cols = gObj.getColumns();\n var rowData = { virtualData: {}, isScroll: false };\n this.parent.notify(events.getVirtualData, rowData);\n for (var i = 0; i < cols.length; i++) {\n if (rowData.isScroll) {\n continue;\n }\n if (cols[parseInt(i.toString(), 10)].field) {\n if (cols[parseInt(i.toString(), 10)].type === 'string') {\n cols[parseInt(i.toString(), 10)].defaultValue = this.parent.sanitize(cols[parseInt(i.toString(), 10)].defaultValue);\n }\n DataUtil.setValue(cols[parseInt(i.toString(), 10)].field, cols[parseInt(i.toString(), 10)].defaultValue, this.previousData);\n }\n }\n var args = {\n cancel: false, foreignKeyData: {},\n requestType: 'add', data: this.previousData, type: events.actionBegin, index: index,\n rowData: this.previousData, target: undefined, isScroll: rowData.isScroll\n };\n if ((this.parent.enableVirtualization || this.parent.enableColumnVirtualization || this.parent.infiniteScrollSettings.enableCache)\n && Object.keys(rowData.virtualData).length) {\n args.data = args.rowData = rowData.virtualData;\n }\n if (!args.isScroll) {\n this.parent.notify(events.createVirtualValidationForm, { uid: this.uid, prevData: this.previousData, argsCreator: this.getEditArgs.bind(this), renderer: this.renderer });\n gObj.trigger(events.actionBegin, args, function (addArgs) {\n if (addArgs.cancel) {\n return;\n }\n _this.inlineAddHandler(addArgs);\n });\n }\n else {\n this.inlineAddHandler(args);\n }\n };\n NormalEdit.prototype.inlineAddHandler = function (addArgs) {\n var gObj = this.parent;\n gObj.isEdit = true;\n if (gObj.editSettings.mode !== 'Dialog') {\n gObj.clearSelection();\n }\n this.renderer.addNew(addArgs);\n gObj.editModule.applyFormValidation();\n addArgs.type = events.actionComplete;\n addArgs.row = gObj.element.querySelector('.' + literals.addedRow);\n gObj.trigger(events.actionComplete, addArgs);\n if (gObj.editSettings.template) {\n gObj.editModule.applyFormValidation(undefined, addArgs.form.ej2_instances[0].rules);\n }\n this.args = addArgs;\n };\n NormalEdit.prototype.deleteRecord = function (fieldname, data) {\n this.editRowIndex = this.parent.selectedRowIndex;\n if (data) {\n data = (data instanceof Array) ? data : [data];\n var gObj = this.parent;\n var dataLen = Object.keys(data).length;\n fieldname = fieldname || this.parent.getPrimaryKeyFieldNames()[0];\n var _loop_2 = function (i) {\n var _a;\n var tmpRecord;\n var contained = gObj.currentViewData.some(function (record) {\n tmpRecord = record;\n return data[parseInt(i.toString(), 10)] === getObject(fieldname, record) || data[parseInt(i.toString(), 10)] === record;\n });\n data[parseInt(i.toString(), 10)] = contained ? tmpRecord : data[parseInt(i.toString(), 10)][\"\" + fieldname] ?\n data[parseInt(i.toString(), 10)] : (_a = {}, _a[fieldname] = data[parseInt(i.toString(), 10)], _a);\n };\n for (var i = 0; i < dataLen; i++) {\n _loop_2(i);\n }\n }\n var args = {\n requestType: 'delete', type: events.actionBegin, foreignKeyData: {},\n data: data ? data : this.parent.getSelectedRecords(), tr: this.parent.getSelectedRows(), cancel: false\n };\n if (!isNullOrUndefined(this.parent.commandDelIndex)) {\n args.data[0] =\n this.parent.getRowObjectFromUID(this.parent.getRowByIndex(this.parent.commandDelIndex).getAttribute('data-uid')).data;\n }\n if ((this.parent.enableVirtualization || this.parent.enableColumnVirtualization) && args.data.length > 1) {\n var uid = this.parent.getSelectedRows()[0].getAttribute('data-uid');\n args.data = [this.parent.getRowObjectFromUID(uid).data];\n }\n this.parent.notify(events.modelChanged, args);\n };\n NormalEdit.prototype.stopEditStatus = function () {\n var gObj = this.parent;\n var addElements = [].slice.call(gObj.element.getElementsByClassName(literals.addedRow));\n var editElements = [].slice.call(gObj.element.getElementsByClassName(literals.editedRow));\n for (var i = 0; i < addElements.length; i++) {\n remove(addElements[parseInt(i.toString(), 10)]);\n }\n for (var i = 0; i < editElements.length; i++) {\n editElements[parseInt(i.toString(), 10)].classList.remove(literals.editedRow);\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n NormalEdit.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.evtHandlers = [{ event: events.crudAction, handler: this.editHandler },\n { event: events.doubleTap, handler: this.dblClickHandler },\n { event: events.click, handler: this.clickHandler },\n { event: events.recordAdded, handler: this.requestSuccess },\n { event: events.dblclick, handler: this.dblClickHandler },\n { event: events.deleteComplete, handler: this.editComplete },\n { event: events.saveComplete, handler: this.editComplete },\n { event: events.rowModeChange, handler: this.closeEdit },\n { event: events.closeInline, handler: this.closeForm }];\n addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n };\n /**\n * @returns {void}\n * @hidden\n */\n NormalEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n addRemoveEventListener(this.parent, this.evtHandlers, false);\n };\n /**\n * @returns {void}\n * @hidden\n */\n NormalEdit.prototype.destroy = function () {\n this.removeEventListener();\n this.renderer.destroy();\n };\n return NormalEdit;\n}());\nexport { NormalEdit };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { NormalEdit } from './normal-edit';\n/**\n * `InlineEdit` module is used to handle inline editing actions.\n *\n * @hidden\n */\nvar InlineEdit = /** @class */ (function (_super) {\n __extends(InlineEdit, _super);\n function InlineEdit(parent, serviceLocator, renderer) {\n var _this = _super.call(this, parent, serviceLocator) || this;\n _this.parent = parent;\n _this.serviceLocator = serviceLocator;\n _this.renderer = renderer;\n return _this;\n }\n InlineEdit.prototype.closeEdit = function () {\n _super.prototype.closeEdit.call(this);\n };\n InlineEdit.prototype.addRecord = function (data, index) {\n _super.prototype.addRecord.call(this, data, index);\n };\n InlineEdit.prototype.endEdit = function () {\n _super.prototype.endEdit.call(this);\n };\n InlineEdit.prototype.updateRow = function (index, data) {\n _super.prototype.updateRow.call(this, index, data);\n };\n InlineEdit.prototype.deleteRecord = function (fieldname, data) {\n _super.prototype.deleteRecord.call(this, fieldname, data);\n };\n InlineEdit.prototype.startEdit = function (tr) {\n _super.prototype.startEdit.call(this, tr);\n };\n return InlineEdit;\n}(NormalEdit));\nexport { InlineEdit };\n","import { extend, addClass, removeClass, setValue, closest, select, EventHandler } from '@syncfusion/ej2-base';\nimport { remove, classList } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { parentsUntil, refreshForeignData, getObject, addRemoveEventListener, } from '../base/util';\nimport { getCellByColAndRowIndex, addFixedColumnBorder } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { Row } from '../models/row';\nimport { Cell } from '../models/cell';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport * as literals from '../base/string-literals';\n/**\n * `BatchEdit` module is used to handle batch editing actions.\n *\n * @hidden\n */\nvar BatchEdit = /** @class */ (function () {\n function BatchEdit(parent, serviceLocator, renderer) {\n this.cellDetails = {};\n this.originalCell = {};\n this.cloneCell = {};\n this.editNext = false;\n this.preventSaveCell = false;\n this.initialRender = true;\n this.validationColObj = [];\n /** @hidden */\n this.addBatchRow = false;\n this.prevEditedBatchCell = false;\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.renderer = renderer;\n this.focus = serviceLocator.getService('focus');\n this.addEventListener();\n }\n /**\n * @returns {void}\n * @hidden\n */\n BatchEdit.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.evtHandlers = [{ event: events.click, handler: this.clickHandler },\n { event: events.dblclick, handler: this.dblClickHandler },\n { event: events.beforeCellFocused, handler: this.onBeforeCellFocused },\n { event: events.cellFocused, handler: this.onCellFocused },\n { event: events.doubleTap, handler: this.dblClickHandler },\n { event: events.keyPressed, handler: this.keyDownHandler },\n { event: events.editNextValCell, handler: this.editNextValCell },\n { event: events.destroy, handler: this.destroy }];\n addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n EventHandler.add(this.parent.element, 'mousedown', this.mouseDownHandler, this);\n this.dataBoundFunction = this.dataBound.bind(this);\n this.batchCancelFunction = this.batchCancel.bind(this);\n this.parent.addEventListener(events.dataBound, this.dataBoundFunction);\n this.parent.addEventListener(events.batchCancel, this.batchCancelFunction);\n };\n /**\n * @returns {void}\n * @hidden\n */\n BatchEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n addRemoveEventListener(this.parent, this.evtHandlers, false);\n EventHandler.remove(this.parent.element, 'mousedown', this.mouseDownHandler);\n this.parent.removeEventListener(events.dataBound, this.dataBoundFunction);\n this.parent.removeEventListener(events.batchCancel, this.batchCancelFunction);\n };\n BatchEdit.prototype.batchCancel = function () {\n this.parent.focusModule.restoreFocus();\n };\n BatchEdit.prototype.dataBound = function () {\n this.parent.notify(events.toolbarRefresh, {});\n };\n /**\n * @returns {void}\n * @hidden\n */\n BatchEdit.prototype.destroy = function () {\n this.removeEventListener();\n };\n BatchEdit.prototype.mouseDownHandler = function (e) {\n if (!isNullOrUndefined(this.parent.element.querySelector('.e-gridform'))) {\n this.mouseDownElement = e.target;\n }\n else {\n this.mouseDownElement = undefined;\n }\n };\n BatchEdit.prototype.clickHandler = function (e) {\n if (!parentsUntil(e.target, this.parent.element.id + '_add', true)) {\n if ((this.parent.isEdit && closest(this.form, 'td') !== closest(e.target, 'td'))\n && isNullOrUndefined(this.mouseDownElement) || this.mouseDownElement === e.target) {\n this.saveCell();\n this.editNextValCell();\n }\n if (parentsUntil(e.target, literals.rowCell) && !this.parent.isEdit) {\n this.setCellIdx(e.target);\n }\n }\n };\n BatchEdit.prototype.dblClickHandler = function (e) {\n var target = parentsUntil(e.target, literals.rowCell);\n var tr = parentsUntil(e.target, literals.row);\n var rowIndex = tr && parseInt(tr.getAttribute(literals.dataRowIndex), 10);\n var colIndex = target && parseInt(target.getAttribute(literals.dataColIndex), 10);\n if (!isNullOrUndefined(target) && !isNullOrUndefined(rowIndex) && !isNaN(colIndex)\n && !target.parentElement.classList.contains(literals.editedRow) &&\n this.parent.getColumns()[parseInt(colIndex.toString(), 10)].allowEditing) {\n this.editCell(rowIndex, this.parent.getColumns()[parseInt(colIndex.toString(), 10)].field, this.isAddRow(rowIndex));\n }\n };\n BatchEdit.prototype.onBeforeCellFocused = function (e) {\n if (this.parent.isEdit && this.validateFormObj() &&\n (e.byClick || (['tab', 'shiftTab', 'enter', 'shiftEnter'].indexOf(e.keyArgs.action) > -1))) {\n e.cancel = true;\n if (e.byClick) {\n e.clickArgs.preventDefault();\n }\n else {\n e.keyArgs.preventDefault();\n }\n }\n };\n BatchEdit.prototype.onCellFocused = function (e) {\n var clear = (!e.container.isContent || !e.container.isDataCell) && !(this.parent.frozenRows && e.container.isHeader);\n if (this.parent.focusModule.active) {\n this.prevEditedBatchCell = this.parent.focusModule.active.matrix.current.toString() === this.prevEditedBatchCellMatrix()\n .toString();\n this.crtRowIndex = [].slice.call(this.parent.focusModule.active.getTable().rows).indexOf(closest(e.element, 'tr'));\n }\n if (!e.byKey || clear) {\n if ((this.parent.isEdit && clear)) {\n this.saveCell();\n }\n return;\n }\n var _a = e.container.indexes, rowIndex = _a[0], cellIndex = _a[1];\n var actualIndex = e.element.getAttribute('data-colindex') ? parseInt(e.element.getAttribute('data-colindex')) : cellIndex;\n if (actualIndex !== cellIndex) {\n cellIndex = actualIndex;\n }\n if (this.parent.frozenRows && e.container.isContent) {\n rowIndex += ((this.parent.getContent().querySelector('.e-hiddenrow') ? 0 : this.parent.frozenRows) +\n this.parent.getHeaderContent().querySelectorAll('.e-insertedrow').length);\n }\n var isEdit = this.parent.isEdit;\n if (!this.parent.element.getElementsByClassName('e-popup-open').length) {\n isEdit = isEdit && !this.validateFormObj();\n switch (e.keyArgs.action) {\n case 'tab':\n case 'shiftTab':\n // eslint-disable-next-line no-case-declarations\n var indent = this.parent.isRowDragable() && this.parent.isDetail() ? 2 :\n this.parent.isRowDragable() || this.parent.isDetail() ? 1 : 0;\n // eslint-disable-next-line no-case-declarations\n var col = this.parent.getColumns()[cellIndex - indent];\n if (col && !this.parent.isEdit) {\n this.editCell(rowIndex, col.field);\n }\n if (isEdit || this.parent.isLastCellPrimaryKey) {\n this.editCellFromIndex(rowIndex, cellIndex);\n }\n break;\n case 'enter':\n case 'shiftEnter':\n e.keyArgs.preventDefault();\n // eslint-disable-next-line no-case-declarations\n var args = { cancel: false, keyArgs: e.keyArgs };\n this.parent.notify('beforeFocusCellEdit', args);\n if (!args.cancel && isEdit) {\n this.editCell(rowIndex, this.cellDetails.column.field);\n }\n break;\n case 'f2':\n this.editCellFromIndex(rowIndex, cellIndex);\n this.focus.focus();\n break;\n }\n }\n };\n BatchEdit.prototype.isAddRow = function (index) {\n return this.parent.getDataRows()[parseInt(index.toString(), 10)].classList.contains('e-insertedrow');\n };\n BatchEdit.prototype.editCellFromIndex = function (rowIdx, cellIdx) {\n this.cellDetails.rowIndex = rowIdx;\n this.cellDetails.cellIndex = cellIdx;\n this.editCell(rowIdx, this.parent.getColumns()[parseInt(cellIdx.toString(), 10)].field, this.isAddRow(rowIdx));\n };\n BatchEdit.prototype.closeEdit = function () {\n var gObj = this.parent;\n var rows = this.parent.getRowsObject();\n var argument = { cancel: false, batchChanges: this.getBatchChanges() };\n gObj.notify(events.beforeBatchCancel, argument);\n if (argument.cancel) {\n return;\n }\n if (gObj.isEdit) {\n this.saveCell(true);\n }\n this.isAdded = false;\n gObj.clearSelection();\n for (var i = 0; i < rows.length; i++) {\n var isInsert = false;\n var isDirty = rows[parseInt(i.toString(), 10)].isDirty;\n isInsert = this.removeBatchElementChanges(rows[parseInt(i.toString(), 10)], isDirty);\n if (isInsert) {\n rows.splice(i, 1);\n }\n if (isInsert) {\n i--;\n }\n }\n if (!gObj.getContentTable().querySelector('tr.e-row')) {\n gObj.renderModule.renderEmptyRow();\n }\n var args = {\n requestType: 'batchCancel', rows: this.parent.getRowsObject()\n };\n gObj.notify(events.batchCancel, {\n rows: this.parent.getRowsObject().length ? this.parent.getRowsObject() :\n [new Row({ isDataRow: true, cells: [new Cell({ isDataCell: true, visible: true })] })]\n });\n gObj.selectRow(this.cellDetails.rowIndex);\n this.refreshRowIdx();\n gObj.notify(events.toolbarRefresh, {});\n this.parent.notify(events.tooltipDestroy, {});\n args = { requestType: 'batchCancel', rows: this.parent.getRowsObject() };\n gObj.trigger(events.batchCancel, args);\n };\n BatchEdit.prototype.removeBatchElementChanges = function (row, isDirty) {\n var gObj = this.parent;\n var rowRenderer = new RowRenderer(this.serviceLocator, null, this.parent);\n var isInstertedRemoved = false;\n if (isDirty) {\n row.isDirty = isDirty;\n var tr = gObj.getRowElementByUID(row.uid);\n if (tr) {\n if (tr.classList.contains('e-insertedrow')) {\n remove(tr);\n isInstertedRemoved = true;\n }\n else {\n refreshForeignData(row, this.parent.getForeignKeyColumns(), row.data);\n delete row.changes;\n delete row.edit;\n row.isDirty = false;\n classList(tr, [], ['e-hiddenrow', 'e-updatedtd']);\n rowRenderer.refresh(row, gObj.getColumns(), false);\n }\n if (this.parent.aggregates.length > 0) {\n var type = 'type';\n var editType = [];\n editType[\"\" + type] = 'cancel';\n this.parent.notify(events.refreshFooterRenderer, editType);\n if (this.parent.groupSettings.columns.length > 0) {\n this.parent.notify(events.groupAggregates, editType);\n }\n }\n }\n }\n return isInstertedRemoved;\n };\n BatchEdit.prototype.deleteRecord = function (fieldname, data) {\n this.saveCell();\n if (this.validateFormObj()) {\n this.saveCell(true);\n }\n this.isAdded = false;\n this.bulkDelete(fieldname, data);\n if (this.parent.aggregates.length > 0) {\n this.parent.notify(events.refreshFooterRenderer, {});\n if (this.parent.groupSettings.columns.length > 0) {\n this.parent.notify(events.groupAggregates, {});\n }\n }\n };\n BatchEdit.prototype.addRecord = function (data) {\n this.bulkAddRow(data);\n };\n BatchEdit.prototype.endEdit = function () {\n if (this.parent.isEdit && this.validateFormObj()) {\n return;\n }\n this.batchSave();\n };\n BatchEdit.prototype.validateFormObj = function () {\n return this.parent.editModule.formObj && !this.parent.editModule.formObj.validate();\n };\n BatchEdit.prototype.batchSave = function () {\n var gObj = this.parent;\n var deletedRecords = 'deletedRecords';\n if (gObj.isCheckBoxSelection) {\n var checkAllBox = gObj.element.querySelector('.e-checkselectall').parentElement;\n if (checkAllBox.classList.contains('e-checkbox-disabled') &&\n gObj.pageSettings.totalRecordsCount > gObj.currentViewData.length) {\n removeClass([checkAllBox], ['e-checkbox-disabled']);\n }\n }\n this.saveCell();\n if (gObj.isEdit || this.editNextValCell() || gObj.isEdit) {\n return;\n }\n var changes = this.getBatchChanges();\n if (this.parent.selectionSettings.type === 'Multiple' && changes[\"\" + deletedRecords].length &&\n this.parent.selectionSettings.persistSelection) {\n changes[\"\" + deletedRecords] = this.removeSelectedData;\n this.removeSelectedData = [];\n }\n var original = {\n changedRecords: this.parent.getRowsObject()\n .filter(function (row) { return row.isDirty && ['add', 'delete'].indexOf(row.edit) === -1; })\n .map(function (row) { return row.data; })\n };\n var args = { batchChanges: changes, cancel: false };\n gObj.trigger(events.beforeBatchSave, args, function (beforeBatchSaveArgs) {\n if (beforeBatchSaveArgs.cancel) {\n return;\n }\n gObj.showSpinner();\n gObj.notify(events.bulkSave, { changes: changes, original: original });\n });\n };\n BatchEdit.prototype.getBatchChanges = function () {\n var changes = {\n addedRecords: [],\n deletedRecords: [],\n changedRecords: []\n };\n var rows = this.parent.getRowsObject();\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n if (row.isDirty) {\n switch (row.edit) {\n case 'add':\n changes.addedRecords.push(row.changes);\n break;\n case 'delete':\n changes.deletedRecords.push(row.data);\n break;\n default:\n changes.changedRecords.push(row.changes);\n }\n }\n }\n return changes;\n };\n /**\n * @param {string} uid - specifes the uid\n * @returns {void}\n * @hidden\n */\n BatchEdit.prototype.removeRowObjectFromUID = function (uid) {\n var rows = this.parent.getRowsObject();\n var i = 0;\n for (var len = rows.length; i < len; i++) {\n if (rows[parseInt(i.toString(), 10)].uid === uid) {\n break;\n }\n }\n rows.splice(i, 1);\n };\n /**\n * @param {Row} row - specifies the row object\n * @param {freezeTable} newTableName - specifies the table name\n * @returns {void}\n * @hidden\n */\n BatchEdit.prototype.addRowObject = function (row) {\n var gObj = this.parent;\n var isTop = gObj.editSettings.newRowPosition === 'Top';\n var rowClone = row.clone();\n if (isTop) {\n gObj.getRowsObject().unshift(rowClone);\n }\n else {\n gObj.getRowsObject().push(rowClone);\n }\n };\n // tslint:disable-next-line:max-func-body-length\n BatchEdit.prototype.bulkDelete = function (fieldname, data) {\n var _this = this;\n this.removeSelectedData = [];\n var gObj = this.parent;\n var index = gObj.selectedRowIndex;\n var selectedRows = gObj.getSelectedRows();\n var args = {\n primaryKey: this.parent.getPrimaryKeyFieldNames(),\n rowIndex: index,\n rowData: data ? data : gObj.getSelectedRecords()[0],\n cancel: false\n };\n if (data) {\n args.row = gObj.editModule.deleteRowUid ? gObj.getRowElementByUID(gObj.editModule.deleteRowUid)\n : gObj.getRows()[gObj.getCurrentViewRecords().indexOf(data)];\n }\n else {\n args.row = selectedRows[0];\n }\n if (!args.row) {\n return;\n }\n // tslint:disable-next-line:max-func-body-length\n gObj.trigger(events.beforeBatchDelete, args, function (beforeBatchDeleteArgs) {\n if (beforeBatchDeleteArgs.cancel) {\n return;\n }\n _this.removeSelectedData = gObj.getSelectedRecords();\n gObj.clearSelection();\n beforeBatchDeleteArgs.row = beforeBatchDeleteArgs.row ?\n beforeBatchDeleteArgs.row : data ? gObj.getRows()[parseInt(index.toString(), 10)] : selectedRows[0];\n if (selectedRows.length === 1 || data) {\n var uid = beforeBatchDeleteArgs.row.getAttribute('data-uid');\n uid = data && _this.parent.editModule.deleteRowUid ? uid = _this.parent.editModule.deleteRowUid : uid;\n if (beforeBatchDeleteArgs.row.classList.contains('e-insertedrow')) {\n _this.removeRowObjectFromUID(uid);\n remove(beforeBatchDeleteArgs.row);\n }\n else {\n var rowObj = gObj.getRowObjectFromUID(uid);\n rowObj.isDirty = true;\n rowObj.edit = 'delete';\n classList(beforeBatchDeleteArgs.row, ['e-hiddenrow', 'e-updatedtd'], []);\n if (gObj.frozenRows && index < gObj.frozenRows && gObj.getDataRows().length >= gObj.frozenRows) {\n gObj.getHeaderTable().querySelector(literals.tbody).appendChild(gObj.getRowByIndex(gObj.frozenRows - 1));\n }\n }\n delete beforeBatchDeleteArgs.row;\n }\n else {\n if (data) {\n index = parseInt(beforeBatchDeleteArgs.row.getAttribute(literals.dataRowIndex), 10);\n }\n for (var i = 0; i < selectedRows.length; i++) {\n var uniqueid = selectedRows[parseInt(i.toString(), 10)].getAttribute('data-uid');\n if (selectedRows[parseInt(i.toString(), 10)].classList.contains('e-insertedrow')) {\n _this.removeRowObjectFromUID(uniqueid);\n remove(selectedRows[parseInt(i.toString(), 10)]);\n }\n else {\n classList(selectedRows[parseInt(i.toString(), 10)], ['e-hiddenrow', 'e-updatedtd'], []);\n var selectedRow = gObj.getRowObjectFromUID(uniqueid);\n selectedRow.isDirty = true;\n selectedRow.edit = 'delete';\n delete selectedRows[parseInt(i.toString(), 10)];\n if (gObj.frozenRows && index < gObj.frozenRows && gObj.getDataRows().length >= gObj.frozenRows) {\n gObj.getHeaderTable().querySelector(literals.tbody).appendChild(gObj.getRowByIndex(gObj.frozenRows - 1));\n }\n }\n }\n }\n _this.refreshRowIdx();\n if (data) {\n gObj.editModule.deleteRowUid = undefined;\n }\n if (!gObj.isCheckBoxSelection) {\n gObj.selectRow(index);\n }\n gObj.trigger(events.batchDelete, beforeBatchDeleteArgs);\n gObj.notify(events.batchDelete, { rows: _this.parent.getRowsObject() });\n gObj.notify(events.toolbarRefresh, {});\n });\n };\n BatchEdit.prototype.refreshRowIdx = function () {\n var gObj = this.parent;\n var rows = gObj.getAllDataRows(true);\n var dataObjects = gObj.getRowsObject().filter(function (row) { return !row.isDetailRow; });\n for (var i = 0, j = 0, len = rows.length; i < len; i++) {\n if (rows[parseInt(i.toString(), 10)].classList.contains(literals.row) && !rows[parseInt(i.toString(), 10)].classList.contains('e-hiddenrow')) {\n rows[parseInt(i.toString(), 10)].setAttribute(literals.dataRowIndex, j.toString());\n rows[parseInt(i.toString(), 10)].setAttribute(literals.ariaRowIndex, (j + 1).toString());\n dataObjects[parseInt(i.toString(), 10)].index = j;\n j++;\n }\n else {\n rows[parseInt(i.toString(), 10)].removeAttribute(literals.dataRowIndex);\n rows[parseInt(i.toString(), 10)].removeAttribute(literals.ariaRowIndex);\n dataObjects[parseInt(i.toString(), 10)].index = -1;\n }\n }\n };\n BatchEdit.prototype.bulkAddRow = function (data) {\n var _this = this;\n var gObj = this.parent;\n if (!gObj.editSettings.allowAdding) {\n if (gObj.isEdit) {\n this.saveCell();\n }\n return;\n }\n if (gObj.isEdit) {\n this.saveCell();\n this.parent.notify(events.editNextValCell, {});\n }\n if (this.initialRender) {\n var visibleColumns = gObj.getVisibleColumns();\n for (var i = 0; i < visibleColumns.length; i++) {\n if (visibleColumns[parseInt(i.toString(), 10)].validationRules &&\n visibleColumns[parseInt(i.toString(), 10)].validationRules['required']) {\n var obj = { field: (visibleColumns[parseInt(i.toString(), 10)]['field']).slice(), cellIdx: i };\n this.validationColObj.push(obj);\n }\n }\n this.initialRender = false;\n }\n this.parent.element.classList.add('e-editing');\n var defaultData = data ? data : this.getDefaultData();\n var args = {\n defaultData: defaultData,\n primaryKey: gObj.getPrimaryKeyFieldNames(),\n cancel: false\n };\n gObj.trigger(events.beforeBatchAdd, args, function (beforeBatchAddArgs) {\n if (beforeBatchAddArgs.cancel) {\n return;\n }\n _this.isAdded = true;\n gObj.clearSelection();\n var row = new RowRenderer(_this.serviceLocator, null, _this.parent);\n var model = new RowModelGenerator(_this.parent);\n var modelData = model.generateRows([beforeBatchAddArgs.defaultData]);\n var tr = row.render(modelData[0], gObj.getColumns());\n addFixedColumnBorder(tr);\n var col;\n var index;\n for (var i = 0; i < _this.parent.groupSettings.columns.length; i++) {\n tr.insertBefore(_this.parent.createElement('td', { className: 'e-indentcell' }), tr.firstChild);\n modelData[0].cells.unshift(new Cell({ cellType: CellType.Indent }));\n }\n var tbody = gObj.getContentTable().querySelector(literals.tbody);\n tr.classList.add('e-insertedrow');\n if (tbody.querySelector('.e-emptyrow')) {\n var emptyRow = tbody.querySelector('.e-emptyrow');\n emptyRow.parentNode.removeChild(emptyRow);\n if (gObj.frozenRows && gObj.element.querySelector('.e-frozenrow-empty')) {\n gObj.element.querySelector('.e-frozenrow-empty').classList.remove('e-frozenrow-empty');\n }\n }\n if (gObj.frozenRows && gObj.editSettings.newRowPosition === 'Top') {\n tbody = gObj.getHeaderTable().querySelector(literals.tbody);\n }\n else {\n tbody = gObj.getContentTable().querySelector(literals.tbody);\n }\n if (_this.parent.editSettings.newRowPosition === 'Top') {\n tbody.insertBefore(tr, tbody.firstChild);\n }\n else {\n tbody.appendChild(tr);\n }\n addClass([].slice.call(tr.getElementsByClassName(literals.rowCell)), ['e-updatedtd']);\n modelData[0].isDirty = true;\n modelData[0].changes = extend({}, {}, modelData[0].data, true);\n modelData[0].edit = 'add';\n _this.addRowObject(modelData[0]);\n _this.refreshRowIdx();\n _this.focus.forgetPrevious();\n gObj.notify(events.batchAdd, { rows: _this.parent.getRowsObject() });\n var changes = _this.getBatchChanges();\n var btmIdx = _this.getBottomIndex();\n if (_this.parent.editSettings.newRowPosition === 'Top') {\n gObj.selectRow(0);\n }\n else {\n gObj.selectRow(btmIdx);\n }\n if (!data) {\n index = _this.findNextEditableCell(0, true);\n col = gObj.getColumns()[parseInt(index.toString(), 10)];\n if (_this.parent.editSettings.newRowPosition === 'Top') {\n _this.editCell(0, col.field, true);\n }\n else {\n _this.editCell(btmIdx, col.field, true);\n }\n }\n if (_this.parent.aggregates.length > 0 && (data || changes[literals.addedRecords].length)) {\n _this.parent.notify(events.refreshFooterRenderer, {});\n }\n var args1 = {\n defaultData: beforeBatchAddArgs.defaultData, row: tr,\n columnObject: col, columnIndex: index, primaryKey: beforeBatchAddArgs.primaryKey,\n cell: !isNullOrUndefined(index) ? tr.cells[parseInt(index.toString(), 10)] : undefined\n };\n gObj.trigger(events.batchAdd, args1);\n });\n };\n BatchEdit.prototype.findNextEditableCell = function (columnIndex, isAdd, isValOnly) {\n var cols = this.parent.getColumns();\n var endIndex = cols.length;\n var validation;\n for (var i = columnIndex; i < endIndex; i++) {\n validation = isValOnly ? isNullOrUndefined(cols[parseInt(i.toString(), 10)].validationRules) : false;\n // if (!isAdd && this.checkNPCell(cols[parseInt(i.toString(), 10)])) {\n // return i;\n // } else \n if (isAdd && (!cols[parseInt(i.toString(), 10)].template || cols[parseInt(i.toString(), 10)].field)\n && cols[parseInt(i.toString(), 10)].allowEditing && cols[parseInt(i.toString(), 10)].visible &&\n !(cols[parseInt(i.toString(), 10)].isIdentity && cols[parseInt(i.toString(), 10)].isPrimaryKey) && !validation) {\n return i;\n }\n }\n return -1;\n };\n BatchEdit.prototype.getDefaultData = function () {\n var gObj = this.parent;\n var data = {};\n var dValues = { 'number': 0, 'string': null, 'boolean': false, 'date': null, 'datetime': null };\n for (var _i = 0, _a = (gObj.columnModel); _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.field) {\n setValue(col.field, Object.keys(col).indexOf('defaultValue') >= 0 ? col.defaultValue : dValues[col.type], data);\n }\n }\n return data;\n };\n BatchEdit.prototype.setCellIdx = function (target) {\n var gLen = 0;\n if (this.parent.allowGrouping) {\n gLen = this.parent.groupSettings.columns.length;\n }\n this.cellDetails.cellIndex = target.cellIndex - gLen;\n this.cellDetails.rowIndex = parseInt(target.getAttribute('index'), 10);\n };\n BatchEdit.prototype.editCell = function (index, field, isAdd) {\n var gObj = this.parent;\n var col = gObj.getColumnByField(field);\n this.index = index;\n this.field = field;\n this.isAdd = isAdd;\n var checkEdit = gObj.isEdit && !(this.cellDetails.column.field === field\n && (this.cellDetails.rowIndex === index && this.parent.getDataRows().length - 1 !== index && this.prevEditedBatchCell));\n if (gObj.editSettings.allowEditing) {\n if (!checkEdit && (col.allowEditing || (!col.allowEditing && gObj.focusModule.active\n && gObj.focusModule.active.getTable().rows[this.crtRowIndex]\n && gObj.focusModule.active.getTable().rows[this.crtRowIndex].classList.contains('e-insertedrow')))) {\n this.editCellExtend(index, field, isAdd);\n }\n else if (checkEdit) {\n this.editNext = true;\n this.saveCell();\n }\n }\n };\n BatchEdit.prototype.editCellExtend = function (index, field, isAdd) {\n var _this = this;\n var gObj = this.parent;\n var col = gObj.getColumnByField(field);\n var keys = gObj.getPrimaryKeyFieldNames();\n if (gObj.isEdit) {\n return;\n }\n var rowData = extend({}, {}, this.getDataByIndex(index), true);\n var row = gObj.getDataRows()[parseInt(index.toString(), 10)];\n rowData = extend({}, {}, this.getDataByIndex(index), true);\n if ((keys[0] === col.field && !row.classList.contains('e-insertedrow')) || col.columns ||\n (col.isPrimaryKey && col.isIdentity) || col.commands) {\n this.parent.isLastCellPrimaryKey = true;\n return;\n }\n this.parent.isLastCellPrimaryKey = false;\n this.parent.element.classList.add('e-editing');\n var rowObj = gObj.getRowObjectFromUID(row.getAttribute('data-uid'));\n var cells = [].slice.apply(row.cells);\n var args = {\n columnName: col.field, isForeignKey: !isNullOrUndefined(col.foreignKeyValue),\n primaryKey: keys, rowData: rowData,\n validationRules: extend({}, col.validationRules ? col.validationRules : {}),\n value: getObject(col.field, rowData),\n type: !isAdd ? 'edit' : 'add', cancel: false,\n foreignKeyData: rowObj && rowObj.foreignKeyData\n };\n args.cell = cells[this.getColIndex(cells, this.getCellIdx(col.uid))];\n args.row = row;\n args.columnObject = col;\n if (!args.cell) {\n return;\n }\n gObj.trigger(events.cellEdit, args, function (cellEditArgs) {\n if (cellEditArgs.cancel) {\n return;\n }\n cellEditArgs.cell = cellEditArgs.cell ? cellEditArgs.cell : cells[_this.getColIndex(cells, _this.getCellIdx(col.uid))];\n cellEditArgs.row = cellEditArgs.row ? cellEditArgs.row : row;\n cellEditArgs.columnObject = cellEditArgs.columnObject ? cellEditArgs.columnObject : col;\n // cellEditArgs.columnObject.index = isNullOrUndefined(cellEditArgs.columnObject.index) ? 0 : cellEditArgs.columnObject.index;\n _this.cellDetails = {\n rowData: rowData, column: col, value: cellEditArgs.value, isForeignKey: cellEditArgs.isForeignKey, rowIndex: index,\n cellIndex: parseInt(cellEditArgs.cell.getAttribute(literals.dataColIndex), 10),\n foreignKeyData: cellEditArgs.foreignKeyData\n };\n if (cellEditArgs.cell.classList.contains('e-updatedtd')) {\n _this.isColored = true;\n cellEditArgs.cell.classList.remove('e-updatedtd');\n }\n gObj.isEdit = true;\n gObj.clearSelection();\n if (!gObj.isCheckBoxSelection || !gObj.isPersistSelection) {\n gObj.selectRow(_this.cellDetails.rowIndex, true);\n }\n _this.renderer.update(cellEditArgs);\n _this.parent.notify(events.batchEditFormRendered, cellEditArgs);\n _this.form = select('#' + gObj.element.id + 'EditForm', gObj.element);\n gObj.editModule.applyFormValidation([col]);\n _this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n });\n };\n BatchEdit.prototype.updateCell = function (rowIndex, field, value) {\n var gObj = this.parent;\n var col = gObj.getColumnByField(field);\n var index = gObj.getColumnIndexByField(field);\n if (col && !col.isPrimaryKey && col.allowEditing) {\n var td_1 = getCellByColAndRowIndex(this.parent, col, rowIndex, index);\n var rowObj_1 = gObj.getRowObjectFromUID(td_1.parentElement.getAttribute('data-uid'));\n if (gObj.isEdit ||\n (!rowObj_1.changes && ((!(value instanceof Date) && rowObj_1.data[\"\" + field] !== value) ||\n ((value instanceof Date) && new Date(rowObj_1.data[\"\" + field]).toString() !== new Date(value).toString()))) ||\n (rowObj_1.changes && ((!(value instanceof Date) && rowObj_1.changes[\"\" + field] !== value) ||\n ((value instanceof Date) && new Date(rowObj_1.changes[\"\" + field]).toString() !== new Date(value).toString())))) {\n this.refreshTD(td_1, col, rowObj_1, value);\n var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n this.parent.parentDetails.parentInstObj.isReact;\n if (((this.parent.isReact && this.parent.requireTemplateRef) || (isReactChild &&\n this.parent.parentDetails.parentInstObj.requireTemplateRef)) && col.template) {\n var thisRef_1 = this;\n var newReactTd_1 = this.newReactTd;\n thisRef_1.parent.renderTemplates(function () {\n thisRef_1.parent.trigger(events.queryCellInfo, {\n cell: newReactTd_1 || td_1, column: col, data: rowObj_1.changes\n });\n });\n }\n else if ((this.parent.isReact || isReactChild) && col.template) {\n this.parent.renderTemplates();\n this.parent.trigger(events.queryCellInfo, {\n cell: this.newReactTd || td_1, column: col, data: rowObj_1.changes\n });\n }\n else {\n this.parent.trigger(events.queryCellInfo, {\n cell: this.newReactTd || td_1, column: col, data: rowObj_1.changes\n });\n }\n }\n }\n };\n BatchEdit.prototype.setChanges = function (rowObj, field, value) {\n if (!rowObj.changes) {\n rowObj.changes = extend({}, {}, rowObj.data, true);\n }\n if (!isNullOrUndefined(field)) {\n if (typeof value === 'string') {\n value = this.parent.sanitize(value);\n }\n DataUtil.setValue(field, value, rowObj.changes);\n }\n if (rowObj.data[\"\" + field] !== value) {\n var type = this.parent.getColumnByField(field).type;\n if ((type === 'date' || type === 'datetime')) {\n if (new Date(rowObj.data[\"\" + field]).toString() !== new Date(value).toString()) {\n rowObj.isDirty = true;\n }\n }\n else {\n rowObj.isDirty = true;\n }\n }\n };\n BatchEdit.prototype.updateRow = function (index, data) {\n var keys = Object.keys(data);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var col = keys_1[_i];\n this.updateCell(index, col, data[\"\" + col]);\n }\n };\n BatchEdit.prototype.getCellIdx = function (uid) {\n var cIdx = this.parent.getColumnIndexByUid(uid) + this.parent.groupSettings.columns.length;\n if (!isNullOrUndefined(this.parent.detailTemplate) || !isNullOrUndefined(this.parent.childGrid)) {\n cIdx++;\n }\n if (this.parent.isRowDragable()) {\n cIdx++;\n }\n return cIdx;\n };\n BatchEdit.prototype.refreshTD = function (td, column, rowObj, value) {\n var cell = new CellRenderer(this.parent, this.serviceLocator);\n value = column.type === 'number' && !isNullOrUndefined(value) ? parseFloat(value) : value;\n if (rowObj) {\n this.setChanges(rowObj, column.field, value);\n refreshForeignData(rowObj, this.parent.getForeignKeyColumns(), rowObj.changes);\n }\n var rowcell = rowObj ? rowObj.cells : undefined;\n var parentElement;\n var cellIndex;\n if (this.parent.isReact) {\n parentElement = td.parentElement;\n cellIndex = td.cellIndex;\n }\n var index = 0;\n if (rowObj) {\n cell.refreshTD(td, rowcell[this.getCellIdx(column.uid) - index], rowObj.changes, { 'index': this.getCellIdx(column.uid) });\n }\n if (this.parent.isReact) {\n this.newReactTd = parentElement.cells[parseInt(cellIndex.toString(), 10)];\n parentElement.cells[parseInt(cellIndex.toString(), 10)].classList.add('e-updatedtd');\n }\n else {\n td.classList.add('e-updatedtd');\n }\n td.classList.add('e-updatedtd');\n this.parent.notify(events.toolbarRefresh, {});\n };\n BatchEdit.prototype.getColIndex = function (cells, index) {\n var cIdx = 0;\n if (this.parent.allowGrouping && this.parent.groupSettings.columns) {\n cIdx = this.parent.groupSettings.columns.length;\n }\n if (!isNullOrUndefined(this.parent.detailTemplate) || !isNullOrUndefined(this.parent.childGrid)) {\n cIdx++;\n }\n if (this.parent.isRowDragable()) {\n cIdx++;\n }\n for (var m = 0; m < cells.length; m++) {\n var colIndex = parseInt(cells[parseInt(m.toString(), 10)].getAttribute(literals.dataColIndex), 10);\n if (colIndex === index - cIdx) {\n return m;\n }\n }\n return -1;\n };\n BatchEdit.prototype.editNextValCell = function () {\n var gObj = this.parent;\n var insertedRows = gObj.element.querySelectorAll('.e-insertedrow');\n var isSingleInsert = insertedRows.length === 1 ? true : false;\n if (isSingleInsert && this.isAdded && !gObj.isEdit) {\n var btmIdx = this.getBottomIndex();\n for (var i = this.cellDetails.cellIndex; i < gObj.getColumns().length; i++) {\n if (gObj.isEdit) {\n return;\n }\n var index = this.findNextEditableCell(this.cellDetails.cellIndex + 1, true, true);\n var col = gObj.getColumns()[parseInt(index.toString(), 10)];\n if (col) {\n if (this.parent.editSettings.newRowPosition === 'Bottom') {\n this.editCell(btmIdx, col.field, true);\n }\n else {\n var args = { index: 0, column: col };\n this.parent.notify(events.nextCellIndex, args);\n this.editCell(args.index, col.field, true);\n }\n this.saveCell();\n }\n }\n if (!gObj.isEdit) {\n this.isAdded = false;\n }\n }\n else if (!isSingleInsert && this.isAdded && !gObj.isEdit) {\n var editRowIdx = 0;\n if (gObj.editSettings.newRowPosition === 'Bottom') {\n var changes = this.getBatchChanges();\n editRowIdx = gObj.getCurrentViewRecords().length - changes[literals.deletedRecords].length;\n }\n for (var i = 0; i < insertedRows.length; i++) {\n if (!gObj.isEdit) {\n for (var j = 0; j < this.validationColObj.length; j++) {\n if (gObj.isEdit) {\n break;\n }\n else if (insertedRows[parseInt(i.toString(), 10)].querySelectorAll('td:not(.e-hide)')[this.validationColObj[parseInt(j.toString(), 10)].cellIdx].innerHTML === '') {\n this.editCell(parseInt(insertedRows[parseInt(i.toString(), 10)].getAttribute('data-rowindex'), 10), this.validationColObj[parseInt(j.toString(), 10)].field);\n if (this.validateFormObj()) {\n this.saveCell();\n }\n }\n }\n }\n else {\n break;\n }\n }\n if (!gObj.isEdit) {\n this.isAdded = false;\n }\n }\n };\n BatchEdit.prototype.escapeCellEdit = function () {\n var args = this.generateCellArgs();\n args.value = args.previousValue;\n if (args.value || !this.cellDetails.column.validationRules) {\n this.successCallBack(args, args.cell.parentElement, args.column, true)(args);\n }\n };\n BatchEdit.prototype.generateCellArgs = function () {\n var gObj = this.parent;\n this.parent.element.classList.remove('e-editing');\n var column = this.cellDetails.column;\n var obj = {};\n obj[column.field] = getObject(column.field, this.cellDetails.rowData);\n var editedData = gObj.editModule.getCurrentEditedData(this.form, obj);\n var cloneEditedData = extend({}, editedData);\n editedData = extend({}, editedData, this.cellDetails.rowData);\n var value = getObject(column.field, cloneEditedData);\n if (!isNullOrUndefined(column.field) && !isUndefined(value)) {\n setValue(column.field, value, editedData);\n }\n var args = {\n columnName: column.field,\n value: getObject(column.field, editedData),\n rowData: this.cellDetails.rowData,\n column: column,\n previousValue: this.cellDetails.value,\n isForeignKey: this.cellDetails.isForeignKey,\n cancel: false\n };\n args.cell = this.form.parentElement;\n args.columnObject = column;\n return args;\n };\n BatchEdit.prototype.saveCell = function (isForceSave) {\n if (this.preventSaveCell || !this.form) {\n return;\n }\n var gObj = this.parent;\n if (!isForceSave && (!gObj.isEdit || this.validateFormObj())) {\n return;\n }\n this.preventSaveCell = true;\n var args = this.generateCellArgs();\n var tr = args.cell.parentElement;\n var col = args.column;\n args.cell.removeAttribute('aria-label');\n if (!isForceSave) {\n gObj.trigger(events.cellSave, args, this.successCallBack(args, tr, col));\n gObj.notify(events.batchForm, { formObj: this.form });\n }\n else {\n this.successCallBack(args, tr, col)(args);\n }\n };\n BatchEdit.prototype.successCallBack = function (cellSaveArgs, tr, column, isEscapeCellEdit) {\n var _this = this;\n return function (cellSaveArgs) {\n var gObj = _this.parent;\n cellSaveArgs.cell = cellSaveArgs.cell ? cellSaveArgs.cell : _this.form.parentElement;\n cellSaveArgs.columnObject = cellSaveArgs.columnObject ? cellSaveArgs.columnObject : column;\n // cellSaveArgs.columnObject.index = isNullOrUndefined(cellSaveArgs.columnObject.index) ? 0 : cellSaveArgs.columnObject.index;\n if (cellSaveArgs.cancel) {\n _this.preventSaveCell = false;\n if (_this.editNext) {\n _this.editNext = false;\n if (_this.cellDetails.rowIndex === _this.index && _this.cellDetails.column.field === _this.field) {\n return;\n }\n _this.editCellExtend(_this.index, _this.field, _this.isAdd);\n }\n return;\n }\n gObj.editModule.destroyWidgets([column]);\n gObj.isEdit = false;\n gObj.editModule.destroyForm();\n _this.parent.notify(events.tooltipDestroy, {});\n var rowObj = gObj.getRowObjectFromUID(tr.getAttribute('data-uid'));\n _this.refreshTD(cellSaveArgs.cell, column, rowObj, cellSaveArgs.value);\n if (_this.parent.isReact) {\n cellSaveArgs.cell = _this.newReactTd;\n }\n removeClass([tr], [literals.editedRow, 'e-batchrow']);\n removeClass([cellSaveArgs.cell], ['e-editedbatchcell', 'e-boolcell']);\n if (!isNullOrUndefined(cellSaveArgs.value) && cellSaveArgs.value.toString() ===\n (!isNullOrUndefined(_this.cellDetails.value) ? _this.cellDetails.value : '').toString() && !_this.isColored\n || (isNullOrUndefined(cellSaveArgs.value) && isNullOrUndefined(rowObj.data[column.field]) &&\n isNullOrUndefined(_this.cellDetails.value) && !cellSaveArgs.cell.parentElement.classList.contains('e-insertedrow'))) {\n cellSaveArgs.cell.classList.remove('e-updatedtd');\n }\n if (isNullOrUndefined(isEscapeCellEdit)) {\n var isReactCompiler = gObj.isReact && column.template && typeof (column.template) !== 'string';\n var isReactChild = gObj.parentDetails && gObj.parentDetails.parentInstObj\n && gObj.parentDetails.parentInstObj.isReact;\n if (isReactCompiler || isReactChild) {\n if (gObj.requireTemplateRef) {\n gObj.renderTemplates(function () {\n gObj.trigger(events.cellSaved, cellSaveArgs);\n });\n }\n else {\n gObj.renderTemplates();\n gObj.trigger(events.cellSaved, cellSaveArgs);\n }\n }\n else {\n gObj.trigger(events.cellSaved, cellSaveArgs);\n }\n }\n gObj.notify(events.toolbarRefresh, {});\n _this.isColored = false;\n if (_this.parent.aggregates.length > 0) {\n if (!(_this.parent.isReact || _this.parent.isVue)) {\n _this.parent.notify(events.refreshFooterRenderer, {});\n }\n if (_this.parent.groupSettings.columns.length > 0 && !_this.isAddRow(_this.cellDetails.rowIndex)) {\n _this.parent.notify(events.groupAggregates, {});\n }\n if (_this.parent.isReact || _this.parent.isVue) {\n _this.parent.notify(events.refreshFooterRenderer, {});\n }\n }\n _this.preventSaveCell = false;\n if (_this.editNext) {\n _this.editNext = false;\n if (_this.cellDetails.rowIndex === _this.index && _this.cellDetails.column.field === _this.field && _this.prevEditedBatchCell) {\n return;\n }\n var col = gObj.getColumnByField(_this.field);\n if (col && (col.allowEditing || (!col.allowEditing && gObj.focusModule.active\n && gObj.focusModule.active.getTable().rows[_this.crtRowIndex]\n && gObj.focusModule.active.getTable().rows[_this.crtRowIndex].classList.contains('e-insertedrow')))) {\n _this.editCellExtend(_this.index, _this.field, _this.isAdd);\n }\n }\n if (isEscapeCellEdit) {\n gObj.notify(events.restoreFocus, {});\n }\n };\n };\n BatchEdit.prototype.prevEditedBatchCellMatrix = function () {\n var editedBatchCellMatrix = [];\n var gObj = this.parent;\n var editedBatchCell = gObj.focusModule.active.getTable().querySelector('.e-editedbatchcell');\n if (editedBatchCell) {\n var tr = editedBatchCell.parentElement;\n var rowIndex = [].slice.call(this.parent.focusModule.active.getTable().rows).indexOf(tr);\n var cellIndex = [].slice.call(tr.cells).indexOf(editedBatchCell);\n editedBatchCellMatrix = [rowIndex, cellIndex];\n }\n return editedBatchCellMatrix;\n };\n BatchEdit.prototype.getDataByIndex = function (index) {\n var row = this.parent.getRowObjectFromUID(this.parent.getDataRows()[parseInt(index.toString(), 10)].getAttribute('data-uid'));\n return row.changes ? row.changes : row.data;\n };\n BatchEdit.prototype.keyDownHandler = function (e) {\n if (this.addBatchRow || ((e.action === 'tab' || e.action === 'shiftTab') && this.parent.isEdit)) {\n var gObj = this.parent;\n var btmIdx = this.getBottomIndex();\n var rowcell = parentsUntil(e.target, literals.rowCell);\n if (this.addBatchRow || (rowcell && !this.parent.isReact)) {\n var cell = void 0;\n if (rowcell) {\n cell = rowcell.querySelector('.e-field');\n }\n if (this.addBatchRow || cell) {\n var visibleColumns = this.parent.getVisibleColumns();\n var columnIndex = e.action === 'tab' ? visibleColumns.length - 1 : 0;\n if (this.addBatchRow\n || visibleColumns[parseInt(columnIndex.toString(), 10)].field === cell.getAttribute('id').slice(this.parent.element.id.length)) {\n if (this.cellDetails.rowIndex === btmIdx && e.action === 'tab') {\n if (gObj.editSettings.newRowPosition === 'Top') {\n gObj.editSettings.newRowPosition = 'Bottom';\n this.addRecord();\n gObj.editSettings.newRowPosition = 'Top';\n }\n else {\n this.addRecord();\n }\n this.addBatchRow = false;\n }\n else {\n this.saveCell();\n }\n }\n }\n }\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n BatchEdit.prototype.addCancelWhilePaging = function () {\n if (this.validateFormObj()) {\n this.parent.notify(events.destroyForm, {});\n this.parent.isEdit = false;\n this.editNext = false;\n this.mouseDownElement = undefined;\n this.isColored = false;\n }\n };\n BatchEdit.prototype.getBottomIndex = function () {\n var changes = this.getBatchChanges();\n return this.parent.getCurrentViewRecords().length + changes[literals.addedRecords].length -\n changes[literals.deletedRecords].length - 1;\n };\n return BatchEdit;\n}());\nexport { BatchEdit };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { NormalEdit } from './normal-edit';\n/**\n * `DialogEdit` module is used to handle dialog editing actions.\n *\n * @hidden\n */\nvar DialogEdit = /** @class */ (function (_super) {\n __extends(DialogEdit, _super);\n function DialogEdit(parent, serviceLocator, renderer) {\n var _this = \n //constructor\n _super.call(this, parent, serviceLocator) || this;\n _this.parent = parent;\n _this.serviceLocator = serviceLocator;\n _this.renderer = renderer;\n return _this;\n }\n DialogEdit.prototype.closeEdit = function () {\n //closeEdit\n _super.prototype.closeEdit.call(this);\n };\n DialogEdit.prototype.addRecord = function (data, index) {\n //addRecord\n _super.prototype.addRecord.call(this, data, index);\n };\n DialogEdit.prototype.endEdit = function () {\n //endEdit\n _super.prototype.endEdit.call(this);\n };\n DialogEdit.prototype.updateRow = function (index, data) {\n _super.prototype.updateRow.call(this, index, data);\n };\n DialogEdit.prototype.deleteRecord = function (fieldname, data) {\n //deleteRecord\n _super.prototype.deleteRecord.call(this, fieldname, data);\n };\n DialogEdit.prototype.startEdit = function (tr) {\n _super.prototype.startEdit.call(this, tr);\n };\n return DialogEdit;\n}(NormalEdit));\nexport { DialogEdit };\n","import { L10n, getValue, getDefaultDateObject, cldrData } from '@syncfusion/ej2-base';\nvar ARROWLEFT = 'ArrowLeft';\nvar ARROWRIGHT = 'ArrowRight';\nvar ARROWUP = 'ArrowUp';\nvar ARROWDOWN = 'ArrowDown';\nvar TAB = 'Tab';\nvar SHIFTTAB = 'shiftTab';\nvar END = 'End';\nvar HOME = 'Home';\nvar MaskedDateTime = /** @class */ (function () {\n function MaskedDateTime(parent) {\n this.mask = '';\n this.defaultConstant = {\n day: 'day',\n month: 'month',\n year: 'year',\n hour: 'hour',\n minute: 'minute',\n second: 'second',\n dayOfTheWeek: 'day of the week'\n };\n this.hiddenMask = '';\n this.validCharacters = 'dMyhmHfasz';\n this.isDayPart = false;\n this.isMonthPart = false;\n this.isYearPart = false;\n this.isHourPart = false;\n this.isMinutePart = false;\n this.isSecondsPart = false;\n this.isMilliSecondsPart = false;\n this.monthCharacter = '';\n this.periodCharacter = '';\n this.isHiddenMask = false;\n this.isComplete = false;\n this.isNavigate = false;\n this.navigated = false;\n this.isBlur = false;\n this.formatRegex = /EEEEE|EEEE|EEE|EE|E|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|HH|H|hh|h|mm|m|fff|ff|f|aa|a|ss|s|zzzz|zzz|zz|z|'[^']*'|'[^']*'/g;\n this.isDeletion = false;\n this.isShortYear = false;\n this.isDeleteKey = false;\n this.isDateZero = false;\n this.isMonthZero = false;\n this.isYearZero = false;\n this.isLeadingZero = false;\n this.dayTypeCount = 0;\n this.monthTypeCount = 0;\n this.hourTypeCount = 0;\n this.minuteTypeCount = 0;\n this.secondTypeCount = 0;\n this.parent = parent;\n this.dateformat = this.getCulturedFormat();\n this.maskDateValue = this.parent.value != null ? new Date(+this.parent.value) : new Date();\n this.maskDateValue.setMonth(0);\n this.maskDateValue.setHours(0);\n this.maskDateValue.setMinutes(0);\n this.maskDateValue.setSeconds(0);\n this.previousDate = new Date(this.maskDateValue.getFullYear(), this.maskDateValue.getMonth(), this.maskDateValue.getDate(), this.maskDateValue.getHours(), this.maskDateValue.getMinutes(), this.maskDateValue.getSeconds());\n this.removeEventListener();\n this.addEventListener();\n }\n MaskedDateTime.prototype.getModuleName = function () {\n return 'MaskedDateTime';\n };\n MaskedDateTime.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('createMask', this.createMask, this);\n this.parent.on('setMaskSelection', this.validCharacterCheck, this);\n this.parent.on('inputHandler', this.maskInputHandler, this);\n this.parent.on('keyDownHandler', this.maskKeydownHandler, this);\n this.parent.on('clearHandler', this.clearHandler, this);\n };\n MaskedDateTime.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('createMask', this.createMask);\n this.parent.off('setMaskSelection', this.validCharacterCheck);\n this.parent.off('inputHandler', this.maskInputHandler);\n this.parent.off('keyDownHandler', this.maskKeydownHandler);\n this.parent.off('clearHandler', this.clearHandler);\n };\n MaskedDateTime.prototype.createMask = function (mask) {\n this.isDayPart = this.isMonthPart = this.isYearPart = this.isHourPart = this.isMinutePart = this.isSecondsPart = false;\n this.dateformat = this.getCulturedFormat();\n if (this.parent.maskPlaceholder.day) {\n this.defaultConstant['day'] = this.parent.maskPlaceholder.day;\n }\n if (this.parent.maskPlaceholder.month) {\n this.defaultConstant['month'] = this.parent.maskPlaceholder.month;\n }\n if (this.parent.maskPlaceholder.year) {\n this.defaultConstant['year'] = this.parent.maskPlaceholder.year;\n }\n if (this.parent.maskPlaceholder.hour) {\n this.defaultConstant['hour'] = this.parent.maskPlaceholder.hour;\n }\n if (this.parent.maskPlaceholder.minute) {\n this.defaultConstant['minute'] = this.parent.maskPlaceholder.minute;\n }\n if (this.parent.maskPlaceholder.second) {\n this.defaultConstant['second'] = this.parent.maskPlaceholder.second;\n }\n if (this.parent.maskPlaceholder.dayOfTheWeek) {\n this.defaultConstant['dayOfTheWeek'] = this.parent.maskPlaceholder.dayOfTheWeek.toString();\n }\n this.getCUltureMaskFormat();\n var inputValue = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = true;\n this.hiddenMask = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = false;\n this.previousHiddenMask = this.hiddenMask;\n this.mask = this.previousValue = inputValue;\n this.parent.maskedDateValue = this.mask;\n if (this.parent.value) {\n this.navigated = true;\n this.isBlur = mask.isBlur;\n this.setDynamicValue();\n }\n };\n MaskedDateTime.prototype.getCUltureMaskFormat = function () {\n this.l10n = new L10n(this.parent.moduleName, this.defaultConstant, this.parent.locale);\n this.objectString = Object.keys(this.defaultConstant);\n for (var i = 0; i < this.objectString.length; i++) {\n this.defaultConstant[this.objectString[i].toString()] =\n this.l10n.getConstant(this.objectString[i].toString());\n }\n };\n MaskedDateTime.prototype.validCharacterCheck = function () {\n var start = this.parent.inputElement.selectionStart;\n if (this.parent.moduleName !== 'timepicker') {\n if (start === this.hiddenMask.length && this.mask === this.parent.inputElement.value) {\n start = 0;\n }\n }\n for (var i = start, j = start - 1; i < this.hiddenMask.length || j >= 0; i++, j--) {\n if (i < this.hiddenMask.length && this.validCharacters.indexOf(this.hiddenMask[i]) !== -1) {\n this.setSelection(this.hiddenMask[i]);\n return;\n }\n if (j >= 0 && this.validCharacters.indexOf(this.hiddenMask[j]) !== -1) {\n this.setSelection(this.hiddenMask[j]);\n return;\n }\n }\n };\n MaskedDateTime.prototype.setDynamicValue = function () {\n this.maskDateValue = new Date(+this.parent.value);\n this.isDayPart = this.isMonthPart = this.isYearPart = this.isHourPart = this.isMinutePart = this.isSecondsPart = true;\n this.updateValue();\n if (!this.isBlur) {\n this.validCharacterCheck();\n }\n };\n MaskedDateTime.prototype.setSelection = function (validChar) {\n var start = -1;\n var end = 0;\n for (var i = 0; i < this.hiddenMask.length; i++) {\n if (this.hiddenMask[i] === validChar) {\n end = i + 1;\n if (start === -1) {\n start = i;\n }\n }\n }\n if (start < 0) {\n start = 0;\n }\n this.parent.inputElement.setSelectionRange(start, end);\n };\n MaskedDateTime.prototype.maskKeydownHandler = function (args) {\n this.dayTypeCount = this.monthTypeCount = this.hourTypeCount = this.minuteTypeCount = this.secondTypeCount = 0;\n if (args.e.key === 'Delete') {\n this.isDeleteKey = true;\n return;\n }\n if ((!args.e.altKey && !args.e.ctrlKey) && (args.e.key === ARROWLEFT || args.e.key === ARROWRIGHT\n || args.e.key === SHIFTTAB || args.e.key === TAB || args.e.action === SHIFTTAB ||\n args.e.key === END || args.e.key === HOME)) {\n var start = this.parent.inputElement.selectionStart;\n var end = this.parent.inputElement.selectionEnd;\n var length_1 = this.parent.inputElement.value.length;\n if ((start === 0 && end === length_1) && (args.e.key === TAB || args.e.action === SHIFTTAB)) {\n var index = args.e.action === SHIFTTAB ? end : 0;\n this.parent.inputElement.selectionStart = this.parent.inputElement.selectionEnd = index;\n }\n if (args.e.key === END || args.e.key === HOME) {\n var range = args.e.key === END ? length_1 : 0;\n this.parent.inputElement.selectionStart = this.parent.inputElement.selectionEnd = range;\n }\n this.navigateSelection(args.e.key === ARROWLEFT || args.e.action === SHIFTTAB || args.e.key === END ? true : false);\n }\n if ((!args.e.altKey && !args.e.ctrlKey) && (args.e.key === ARROWUP || args.e.key === ARROWDOWN)) {\n var start = this.parent.inputElement.selectionStart;\n var formatText = '';\n if (this.validCharacters.indexOf(this.hiddenMask[start]) !== -1) {\n formatText = this.hiddenMask[start];\n }\n this.dateAlteration(args.e.key === ARROWDOWN ? true : false);\n var inputValue = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = true;\n this.hiddenMask = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = false;\n this.previousHiddenMask = this.hiddenMask;\n this.previousValue = inputValue;\n this.parent.inputElement.value = inputValue;\n for (var i = 0; i < this.hiddenMask.length; i++) {\n if (formatText === this.hiddenMask[i]) {\n start = i;\n break;\n }\n }\n this.parent.inputElement.selectionStart = start;\n this.validCharacterCheck();\n }\n };\n MaskedDateTime.prototype.isPersist = function () {\n var isPersist = this.parent.isFocused || this.navigated;\n return isPersist;\n };\n MaskedDateTime.prototype.differenceCheck = function () {\n var start = this.parent.inputElement.selectionStart;\n var inputValue = this.parent.inputElement.value;\n var previousVal = this.previousValue.substring(0, start + this.previousValue.length - inputValue.length);\n var newVal = inputValue.substring(0, start);\n var newDateValue = new Date(+this.maskDateValue);\n var maxDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth() + 1, 0).getDate();\n if (previousVal.indexOf(newVal) === 0 && (newVal.length === 0 ||\n this.previousHiddenMask[newVal.length - 1] !== this.previousHiddenMask[newVal.length])) {\n for (var i = newVal.length; i < previousVal.length; i++) {\n if (this.previousHiddenMask[i] !== '' && this.validCharacters.indexOf(this.previousHiddenMask[i]) >= 0) {\n this.isDeletion = this.handleDeletion(this.previousHiddenMask[i], false);\n }\n }\n if (this.isDeletion) {\n return;\n }\n }\n switch (this.previousHiddenMask[start - 1]) {\n case 'd':\n {\n var date = (this.isDayPart && newDateValue.getDate().toString().length < 2 &&\n !this.isPersist() ? newDateValue.getDate() * 10 : 0) + parseInt(newVal[start - 1], 10);\n this.isDateZero = (newVal[start - 1] === '0');\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n if (isNaN(date)) {\n return;\n }\n for (var i = 0; date > maxDate; i++) {\n date = parseInt(date.toString().slice(1), 10);\n }\n if (date >= 1) {\n newDateValue.setDate(date);\n this.isNavigate = date.toString().length === 2;\n this.previousDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth(), newDateValue.getDate());\n if (newDateValue.getMonth() !== this.maskDateValue.getMonth()) {\n return;\n }\n this.isDayPart = true;\n this.dayTypeCount = this.dayTypeCount + 1;\n }\n else {\n this.isDayPart = false;\n this.dayTypeCount = this.isDateZero ? this.dayTypeCount + 1 : this.dayTypeCount;\n }\n break;\n }\n case 'M':\n {\n var month = void 0;\n if (newDateValue.getMonth().toString().length < 2 && !this.isPersist()) {\n month = (this.isMonthPart ? (newDateValue.getMonth() + 1) * 10 : 0) + parseInt(newVal[start - 1], 10);\n }\n else {\n month = parseInt(newVal[start - 1], 10);\n }\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n this.isMonthZero = (newVal[start - 1] === '0');\n if (!isNaN(month)) {\n while (month > 12) {\n month = parseInt(month.toString().slice(1), 10);\n }\n if (month >= 1) {\n newDateValue.setMonth(month - 1);\n if (month >= 10 || month == 1) {\n if (this.isLeadingZero && month == 1) {\n this.isNavigate = month.toString().length === 1;\n this.isLeadingZero = false;\n }\n else {\n this.isNavigate = month.toString().length === 2;\n }\n }\n else {\n this.isNavigate = month.toString().length === 1;\n }\n if (newDateValue.getMonth() !== month - 1) {\n newDateValue.setDate(1);\n newDateValue.setMonth(month - 1);\n }\n if (this.isDayPart) {\n var previousMaxDate = new Date(this.previousDate.getFullYear(), this.previousDate.getMonth() + 1, 0).getDate();\n var currentMaxDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth() + 1, 0).getDate();\n if (this.previousDate.getDate() === previousMaxDate && currentMaxDate <= previousMaxDate) {\n newDateValue.setDate(currentMaxDate);\n }\n }\n this.previousDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth(), newDateValue.getDate());\n this.isMonthPart = true;\n this.monthTypeCount = this.monthTypeCount + 1;\n }\n else {\n newDateValue.setMonth(0);\n this.isLeadingZero = true;\n this.isMonthPart = false;\n this.monthTypeCount = this.isMonthZero ? this.monthTypeCount + 1 : this.monthTypeCount;\n }\n }\n else {\n var monthString = (this.getCulturedValue('months[stand-alone].wide'));\n var monthValue = Object.keys(monthString);\n this.monthCharacter += newVal[start - 1].toLowerCase();\n while (this.monthCharacter.length > 0) {\n var i = 1;\n for (var _i = 0, monthValue_1 = monthValue; _i < monthValue_1.length; _i++) {\n var months = monthValue_1[_i];\n if (monthString[i].toLowerCase().indexOf(this.monthCharacter) === 0) {\n newDateValue.setMonth(i - 1);\n this.isMonthPart = true;\n this.maskDateValue = newDateValue;\n return;\n }\n i++;\n }\n this.monthCharacter = this.monthCharacter.substring(1, this.monthCharacter.length);\n }\n }\n break;\n }\n case 'y':\n {\n var year = (this.isYearPart && (newDateValue.getFullYear().toString().length < 4\n && !this.isShortYear) ? newDateValue.getFullYear() * 10 : 0) + parseInt(newVal[start - 1], 10);\n var yearValue = (this.dateformat.match(/y/g) || []).length;\n this.isShortYear = false;\n this.isYearZero = (newVal[start - 1] === '0');\n if (isNaN(year)) {\n return;\n }\n while (year > 9999) {\n year = parseInt(year.toString().slice(1), 10);\n }\n if (year < 1) {\n this.isYearPart = false;\n }\n else {\n newDateValue.setFullYear(year);\n if (year.toString().length === yearValue) {\n this.isNavigate = true;\n }\n this.previousDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth(), newDateValue.getDate());\n this.isYearPart = true;\n }\n break;\n }\n case 'h':\n this.hour = (this.isHourPart && (newDateValue.getHours() % 12 || 12).toString().length < 2\n && !this.isPersist() ? (newDateValue.getHours() % 12 || 12) * 10 : 0) + parseInt(newVal[start - 1], 10);\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n if (isNaN(this.hour)) {\n return;\n }\n while (this.hour > 12) {\n this.hour = parseInt(this.hour.toString().slice(1), 10);\n }\n newDateValue.setHours(Math.floor(newDateValue.getHours() / 12) * 12 + (this.hour % 12));\n this.isNavigate = this.hour.toString().length === 2;\n this.isHourPart = true;\n this.hourTypeCount = this.hourTypeCount + 1;\n break;\n case 'H':\n this.hour = (this.isHourPart && newDateValue.getHours().toString().length < 2 &&\n !this.isPersist() ? newDateValue.getHours() * 10 : 0) + parseInt(newVal[start - 1], 10);\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n if (isNaN(this.hour)) {\n return;\n }\n for (var i = 0; this.hour > 23; i++) {\n this.hour = parseInt(this.hour.toString().slice(1), 10);\n }\n newDateValue.setHours(this.hour);\n this.isNavigate = this.hour.toString().length === 2;\n this.isHourPart = true;\n this.hourTypeCount = this.hourTypeCount + 1;\n break;\n case 'm':\n {\n var minutes = (this.isMinutePart && newDateValue.getMinutes().toString().length < 2\n && !this.isPersist() ? newDateValue.getMinutes() * 10 : 0) + parseInt(newVal[start - 1], 10);\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n if (isNaN(minutes)) {\n return;\n }\n for (var i = 0; minutes > 59; i++) {\n minutes = parseInt(minutes.toString().slice(1), 10);\n }\n newDateValue.setMinutes(minutes);\n this.isNavigate = minutes.toString().length === 2;\n this.isMinutePart = true;\n this.minuteTypeCount = this.minuteTypeCount + 1;\n break;\n }\n case 's':\n {\n var seconds = (this.isSecondsPart && newDateValue.getSeconds().toString().length < 2 &&\n !this.isPersist() ? newDateValue.getSeconds() * 10 : 0) + parseInt(newVal[start - 1], 10);\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n if (isNaN(seconds)) {\n return;\n }\n for (var i = 0; seconds > 59; i++) {\n seconds = parseInt(seconds.toString().slice(1), 10);\n }\n newDateValue.setSeconds(seconds);\n this.isNavigate = seconds.toString().length === 2;\n this.isSecondsPart = true;\n this.secondTypeCount = this.secondTypeCount + 1;\n break;\n }\n case 'a':\n {\n this.periodCharacter += newVal[start - 1].toLowerCase();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var periodString = (this.getCulturedValue('dayPeriods.format.wide'));\n var periodkeys = Object.keys(periodString);\n for (var i = 0; this.periodCharacter.length > 0; i++) {\n if ((periodString[periodkeys[0]].toLowerCase().indexOf(this.periodCharacter) === 0\n && newDateValue.getHours() >= 12) || (periodString[periodkeys[1]].toLowerCase().\n indexOf(this.periodCharacter) === 0 && newDateValue.getHours() < 12)) {\n newDateValue.setHours((newDateValue.getHours() + 12) % 24);\n this.maskDateValue = newDateValue;\n }\n this.periodCharacter = this.periodCharacter.substring(1, this.periodCharacter.length);\n }\n break;\n }\n default:\n break;\n }\n this.maskDateValue = newDateValue;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n MaskedDateTime.prototype.formatCheck = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n function formatValueSpecifier(formattext) {\n var result;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var daysAbbreviated = proxy.getCulturedValue('days[stand-alone].abbreviated');\n var dayKeyAbbreviated = Object.keys(daysAbbreviated);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var daysWide = (proxy.getCulturedValue('days[stand-alone].wide'));\n var dayKeyWide = Object.keys(daysWide);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var daysNarrow = (proxy.getCulturedValue('days[stand-alone].narrow'));\n var dayKeyNarrow = Object.keys(daysNarrow);\n var monthAbbreviated = (proxy.getCulturedValue('months[stand-alone].abbreviated'));\n var monthWide = (proxy.getCulturedValue('months[stand-alone].wide'));\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var periodString = (proxy.getCulturedValue('dayPeriods.format.wide'));\n var periodkeys = Object.keys(periodString);\n var milliseconds;\n var dateOptions;\n switch (formattext) {\n case 'ddd':\n case 'dddd':\n case 'd':\n result = proxy.isDayPart ? proxy.maskDateValue.getDate().toString() : proxy.defaultConstant['day'].toString();\n result = proxy.zeroCheck(proxy.isDateZero, proxy.isDayPart, result);\n if (proxy.dayTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.dayTypeCount = 0;\n }\n break;\n case 'dd':\n result = proxy.isDayPart ? proxy.roundOff(proxy.maskDateValue.getDate(), 2) : proxy.defaultConstant['day'].toString();\n result = proxy.zeroCheck(proxy.isDateZero, proxy.isDayPart, result);\n if (proxy.dayTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.dayTypeCount = 0;\n }\n break;\n case 'E':\n case 'EE':\n case 'EEE':\n result = proxy.isDayPart && proxy.isMonthPart && proxy.isYearPart ? daysAbbreviated[dayKeyAbbreviated[proxy.maskDateValue.getDay()]].toString() : proxy.defaultConstant['dayOfTheWeek'].toString();\n break;\n case 'EEEE':\n result = proxy.isDayPart && proxy.isMonthPart && proxy.isYearPart ? daysWide[dayKeyWide[proxy.maskDateValue.getDay()]].toString() : proxy.defaultConstant['dayOfTheWeek'].toString();\n break;\n case 'EEEEE':\n result = proxy.isDayPart && proxy.isMonthPart && proxy.isYearPart ? daysNarrow[dayKeyNarrow[proxy.maskDateValue.getDay()]].toString() : proxy.defaultConstant['dayOfTheWeek'].toString();\n break;\n case 'M':\n result = proxy.isMonthPart ? (proxy.maskDateValue.getMonth() + 1).toString() : proxy.defaultConstant['month'].toString();\n result = proxy.zeroCheck(proxy.isMonthZero, proxy.isMonthPart, result);\n if (proxy.monthTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.monthTypeCount = 0;\n }\n break;\n case 'MM':\n result = proxy.isMonthPart ? proxy.roundOff(proxy.maskDateValue.getMonth() + 1, 2) : proxy.defaultConstant['month'].toString();\n result = proxy.zeroCheck(proxy.isMonthZero, proxy.isMonthPart, result);\n if (proxy.monthTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.monthTypeCount = 0;\n }\n break;\n case 'MMM':\n result = proxy.isMonthPart ? monthAbbreviated[proxy.maskDateValue.getMonth() + 1] : proxy.defaultConstant['month'].toString();\n break;\n case 'MMMM':\n result = proxy.isMonthPart ? monthWide[proxy.maskDateValue.getMonth() + 1] : proxy.defaultConstant['month'].toString();\n break;\n case 'yy':\n result = proxy.isYearPart ? proxy.roundOff(proxy.maskDateValue.getFullYear() % 100, 2) : proxy.defaultConstant['year'].toString();\n result = proxy.zeroCheck(proxy.isYearZero, proxy.isYearPart, result);\n break;\n case 'y':\n case 'yyyy':\n result = proxy.isYearPart ? proxy.roundOff(proxy.maskDateValue.getFullYear(), 4) : proxy.defaultConstant['year'].toString();\n result = proxy.zeroCheck(proxy.isYearZero, proxy.isYearPart, result);\n break;\n case 'h':\n result = proxy.isHourPart ? (proxy.maskDateValue.getHours() % 12 || 12).toString() : proxy.defaultConstant['hour'].toString();\n if (proxy.hourTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.hourTypeCount = 0;\n }\n break;\n case 'hh':\n result = proxy.isHourPart ? proxy.roundOff(proxy.maskDateValue.getHours() % 12 || 12, 2) : proxy.defaultConstant['hour'].toString();\n if (proxy.hourTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.hourTypeCount = 0;\n }\n break;\n case 'H':\n result = proxy.isHourPart ? proxy.maskDateValue.getHours().toString() : proxy.defaultConstant['hour'].toString();\n if (proxy.hourTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.hourTypeCount = 0;\n }\n break;\n case 'HH':\n result = proxy.isHourPart ? proxy.roundOff(proxy.maskDateValue.getHours(), 2) : proxy.defaultConstant['hour'].toString();\n if (proxy.hourTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.hourTypeCount = 0;\n }\n break;\n case 'm':\n result = proxy.isMinutePart ? proxy.maskDateValue.getMinutes().toString() : proxy.defaultConstant['minute'].toString();\n if (proxy.minuteTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.minuteTypeCount = 0;\n }\n break;\n case 'mm':\n result = proxy.isMinutePart ? proxy.roundOff(proxy.maskDateValue.getMinutes(), 2) : proxy.defaultConstant['minute'].toString();\n if (proxy.minuteTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.minuteTypeCount = 0;\n }\n break;\n case 's':\n result = proxy.isSecondsPart ? proxy.maskDateValue.getSeconds().toString() : proxy.defaultConstant['second'].toString();\n if (proxy.secondTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.secondTypeCount = 0;\n }\n break;\n case 'ss':\n result = proxy.isSecondsPart ? proxy.roundOff(proxy.maskDateValue.getSeconds(), 2) : proxy.defaultConstant['second'].toString();\n if (proxy.secondTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.secondTypeCount = 0;\n }\n break;\n case 'f':\n result = Math.floor(proxy.maskDateValue.getMilliseconds() / 100).toString();\n break;\n case 'ff':\n milliseconds = proxy.maskDateValue.getMilliseconds();\n if (proxy.maskDateValue.getMilliseconds() > 99) {\n milliseconds = Math.floor(proxy.maskDateValue.getMilliseconds() / 10);\n }\n result = proxy.roundOff(milliseconds, 2);\n break;\n case 'fff':\n result = proxy.roundOff(proxy.maskDateValue.getMilliseconds(), 3);\n break;\n case 'a':\n case 'aa':\n result = proxy.maskDateValue.getHours() < 12 ? periodString[periodkeys[0]] : periodString[periodkeys[1]];\n break;\n case 'z':\n case 'zz':\n case 'zzz':\n case 'zzzz':\n dateOptions = {\n format: formattext,\n type: 'dateTime', skeleton: 'yMd', calendar: proxy.parent.calendarMode\n };\n result = proxy.parent.globalize.formatDate(proxy.maskDateValue, dateOptions);\n break;\n }\n result = result !== undefined ? result : formattext.slice(1, formattext.length - 1);\n if (proxy.isHiddenMask) {\n var hiddenChar = '';\n for (var i = 0; i < result.length; i++) {\n hiddenChar += formattext[0];\n }\n return hiddenChar;\n }\n else {\n return result;\n }\n }\n return formatValueSpecifier;\n };\n MaskedDateTime.prototype.maskInputHandler = function () {\n var start = this.parent.inputElement.selectionStart;\n var formatText = '';\n if (this.validCharacters.indexOf(this.hiddenMask[start]) !== -1) {\n formatText = this.hiddenMask[start];\n }\n this.differenceCheck();\n var inputValue = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = true;\n this.hiddenMask = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isDateZero = this.isMonthZero = this.isYearZero = false;\n this.isHiddenMask = false;\n this.previousHiddenMask = this.hiddenMask;\n this.previousValue = inputValue;\n this.parent.inputElement.value = inputValue;\n this.parent.inputElement.value = inputValue;\n for (var i = 0; i < this.hiddenMask.length; i++) {\n if (formatText === this.hiddenMask[i]) {\n start = i;\n break;\n }\n }\n this.parent.inputElement.selectionStart = start;\n this.validCharacterCheck();\n if ((this.isNavigate || this.isDeletion) && !this.isDeleteKey) {\n var isbackward = this.isNavigate ? false : true;\n this.isNavigate = this.isDeletion = false;\n this.navigateSelection(isbackward);\n }\n if (this.isDeleteKey) {\n this.isDeletion = false;\n }\n this.isDeleteKey = false;\n };\n MaskedDateTime.prototype.navigateSelection = function (isbackward) {\n var start = this.parent.inputElement.selectionStart;\n var end = this.parent.inputElement.selectionEnd;\n var formatIndex = isbackward ? start - 1 : end;\n this.navigated = true;\n while (formatIndex < this.hiddenMask.length && formatIndex >= 0) {\n if (this.validCharacters.indexOf(this.hiddenMask[formatIndex]) >= 0) {\n this.setSelection(this.hiddenMask[formatIndex]);\n break;\n }\n formatIndex = formatIndex + (isbackward ? -1 : 1);\n }\n };\n MaskedDateTime.prototype.roundOff = function (val, count) {\n var valueText = val.toString();\n var length = count - valueText.length;\n var result = '';\n for (var i = 0; i < length; i++) {\n result += '0';\n }\n return result + valueText;\n };\n MaskedDateTime.prototype.zeroCheck = function (isZero, isDayPart, resultValue) {\n var result = resultValue;\n if (isZero && !isDayPart) {\n result = '0';\n }\n return result;\n };\n MaskedDateTime.prototype.handleDeletion = function (format, isSegment) {\n switch (format) {\n case 'd':\n this.isDayPart = isSegment;\n break;\n case 'M':\n this.isMonthPart = isSegment;\n if (!isSegment) {\n this.maskDateValue.setMonth(0);\n this.monthCharacter = '';\n }\n break;\n case 'y':\n this.isYearPart = isSegment;\n break;\n case 'H':\n case 'h':\n this.isHourPart = isSegment;\n if (!isSegment) {\n this.periodCharacter = '';\n }\n break;\n case 'm':\n this.isMinutePart = isSegment;\n break;\n case 's':\n this.isSecondsPart = isSegment;\n break;\n default:\n return false;\n }\n return true;\n };\n MaskedDateTime.prototype.dateAlteration = function (isDecrement) {\n var start = this.parent.inputElement.selectionStart;\n var formatText = '';\n if (this.validCharacters.indexOf(this.hiddenMask[start]) !== -1) {\n formatText = this.hiddenMask[start];\n }\n else {\n return;\n }\n var newDateValue = new Date(this.maskDateValue.getFullYear(), this.maskDateValue.getMonth(), this.maskDateValue.getDate(), this.maskDateValue.getHours(), this.maskDateValue.getMinutes(), this.maskDateValue.getSeconds());\n this.previousDate = new Date(this.maskDateValue.getFullYear(), this.maskDateValue.getMonth(), this.maskDateValue.getDate(), this.maskDateValue.getHours(), this.maskDateValue.getMinutes(), this.maskDateValue.getSeconds());\n var incrementValue = isDecrement ? -1 : 1;\n switch (formatText) {\n case 'd':\n newDateValue.setDate(newDateValue.getDate() + incrementValue);\n break;\n case 'M':\n {\n var newMonth = newDateValue.getMonth() + incrementValue;\n newDateValue.setDate(1);\n newDateValue.setMonth(newMonth);\n if (this.isDayPart) {\n var previousMaxDate = new Date(this.previousDate.getFullYear(), this.previousDate.getMonth() + 1, 0).getDate();\n var currentMaxDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth() + 1, 0).getDate();\n if (this.previousDate.getDate() === previousMaxDate && currentMaxDate <= previousMaxDate) {\n newDateValue.setDate(currentMaxDate);\n }\n else {\n newDateValue.setDate(this.previousDate.getDate());\n }\n }\n else {\n newDateValue.setDate(this.previousDate.getDate());\n }\n this.previousDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth(), newDateValue.getDate());\n break;\n }\n case 'y':\n newDateValue.setFullYear(newDateValue.getFullYear() + incrementValue);\n break;\n case 'H':\n case 'h':\n newDateValue.setHours(newDateValue.getHours() + incrementValue);\n break;\n case 'm':\n newDateValue.setMinutes(newDateValue.getMinutes() + incrementValue);\n break;\n case 's':\n newDateValue.setSeconds(newDateValue.getSeconds() + incrementValue);\n break;\n case 'a':\n newDateValue.setHours((newDateValue.getHours() + 12) % 24);\n break;\n default:\n break;\n }\n this.maskDateValue = newDateValue.getFullYear() > 0 ? newDateValue : this.maskDateValue;\n if (this.validCharacters.indexOf(this.hiddenMask[start]) !== -1) {\n this.handleDeletion(this.hiddenMask[start], true);\n }\n };\n MaskedDateTime.prototype.getCulturedValue = function (format) {\n var locale = this.parent.locale;\n var result;\n if (locale === 'en' || locale === 'en-US') {\n result = getValue(format, getDefaultDateObject());\n }\n else {\n result = getValue('main.' + '' + locale + ('.dates.calendars.gregorian.' + format), cldrData);\n }\n return result;\n };\n MaskedDateTime.prototype.getCulturedFormat = function () {\n var formatString = (this.getCulturedValue('dateTimeFormats[availableFormats].yMd')).toString();\n if (this.parent.moduleName === 'datepicker') {\n formatString = (this.getCulturedValue('dateTimeFormats[availableFormats].yMd')).toString();\n if (this.parent.format && this.parent.formatString) {\n formatString = this.parent.formatString;\n }\n }\n if (this.parent.moduleName === 'datetimepicker') {\n formatString = (this.getCulturedValue('dateTimeFormats[availableFormats].yMd')).toString();\n if (this.parent.dateTimeFormat) {\n formatString = this.parent.dateTimeFormat;\n }\n }\n if (this.parent.moduleName === 'timepicker') {\n formatString = this.parent.cldrTimeFormat();\n }\n return formatString;\n };\n MaskedDateTime.prototype.clearHandler = function () {\n this.isDayPart = this.isMonthPart = this.isYearPart = this.isHourPart = this.isMinutePart = this.isSecondsPart = false;\n this.updateValue();\n };\n MaskedDateTime.prototype.updateValue = function () {\n this.monthCharacter = this.periodCharacter = '';\n var inputValue = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = true;\n this.hiddenMask = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = false;\n this.previousHiddenMask = this.hiddenMask;\n this.previousValue = inputValue;\n this.parent.updateInputValue(inputValue);\n };\n MaskedDateTime.prototype.destroy = function () {\n this.removeEventListener();\n };\n return MaskedDateTime;\n}());\nexport { MaskedDateTime };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { extend } from '@syncfusion/ej2-base';\nimport { DatePicker, DateTimePicker, MaskedDateTime } from '@syncfusion/ej2-calendars';\nimport { isEditable, getObject, getCustomDateFormat } from '../base/util';\nimport { EditCellBase } from './edit-cell-base';\nDatePicker.Inject(MaskedDateTime);\n/**\n * `DatePickerEditCell` is used to handle datepicker cell type editing.\n *\n * @hidden\n */\nvar DatePickerEditCell = /** @class */ (function (_super) {\n __extends(DatePickerEditCell, _super);\n function DatePickerEditCell() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n DatePickerEditCell.prototype.write = function (args) {\n this.edit = this.parent.editModule;\n if (args.column.editType === 'datepickeredit') {\n this.obj = new DatePicker(extend(dateanddatetimerender(args, this.parent.editSettings.mode, this.parent.enableRtl, this.parent.cssClass, this), args.column.edit.params));\n }\n else if (args.column.editType === 'datetimepickeredit') {\n this.obj = new DateTimePicker(extend(dateanddatetimerender(args, this.parent.editSettings.mode, this.parent.enableRtl, this.parent.cssClass, this), args.column.edit.params));\n }\n this.obj.appendTo(args.element);\n };\n return DatePickerEditCell;\n}(EditCellBase));\nexport { DatePickerEditCell };\n// eslint-disable-next-line\nfunction dateanddatetimerender(args, mode, rtl, css, datePickerEditCell) {\n var isInline = mode !== 'Dialog';\n var format = getCustomDateFormat(args.column.format, args.column.type);\n var value = getObject(args.column.field, args.rowData);\n value = value ? new Date(value) : null;\n return {\n floatLabelType: isInline ? 'Never' : 'Always',\n value: value,\n format: format,\n placeholder: isInline ?\n '' : args.column.headerText, enableRtl: rtl,\n enabled: isEditable(args.column, args.requestType, args.element),\n cssClass: css ? css : null,\n close: datePickerClose.bind(datePickerEditCell)\n };\n}\n// eslint-disable-next-line\nfunction datePickerClose(args) {\n if (args.event && args.event.action === 'escape') {\n this.edit.editCellDialogClose = true;\n }\n}\n","/**\n * `TemplateEditCell` is used to handle template cell.\n *\n * @hidden\n */\nvar TemplateEditCell = /** @class */ (function () {\n function TemplateEditCell(parent) {\n this.parent = parent;\n }\n TemplateEditCell.prototype.read = function (element, value) {\n return value;\n };\n TemplateEditCell.prototype.write = function () {\n //\n };\n TemplateEditCell.prototype.destroy = function () {\n //\n };\n return TemplateEditCell;\n}());\nexport { TemplateEditCell };\n","import { closest, addClass, select } from '@syncfusion/ej2-base';\nimport { extend, getValue } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { EditRender } from '../renderer/edit-renderer';\nimport { BooleanEditCell } from '../renderer/boolean-edit-cell';\nimport { DropDownEditCell } from '../renderer/dropdown-edit-cell';\nimport { NumericEditCell } from '../renderer/numeric-edit-cell';\nimport { DefaultEditCell } from '../renderer/default-edit-cell';\nimport { InlineEdit } from './inline-edit';\nimport { BatchEdit } from './batch-edit';\nimport { DialogEdit } from './dialog-edit';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { parentsUntil, getComplexFieldID, getParsedFieldID, setComplexFieldID, getScrollBarWidth, setValidationRuels } from '../base/util';\nimport { FormValidator } from '@syncfusion/ej2-inputs';\nimport { DatePickerEditCell } from '../renderer/datepicker-edit-cell';\nimport { calculateRelativeBasedPosition } from '@syncfusion/ej2-popups';\nimport { TemplateEditCell } from '../renderer/template-edit-cell';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { addRemoveEventListener, padZero } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * The `Edit` module is used to handle editing actions.\n */\nvar Edit = /** @class */ (function () {\n /**\n * Constructor for the Grid editing module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {ServiceLocator} serviceLocator - specifies the servicelocator\n * @hidden\n */\n function Edit(parent, serviceLocator) {\n this.editType = { 'Inline': InlineEdit, 'Normal': InlineEdit, 'Batch': BatchEdit, 'Dialog': DialogEdit };\n this.fieldname = '';\n this.data = {};\n /* @hidden */\n this.editCellDialogClose = false;\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.l10n = this.serviceLocator.getService('localization');\n this.addEventListener();\n this.updateEditObj();\n this.createAlertDlg();\n this.createConfirmDlg();\n }\n Edit.prototype.updateColTypeObj = function () {\n var cols = this.parent.columnModel;\n for (var i = 0; i < cols.length; i++) {\n if (this.parent.editSettings.template || cols[parseInt(i.toString(), 10)].editTemplate) {\n var templteCell = 'templateedit';\n cols[parseInt(i.toString(), 10)].edit = extend(new Edit.editCellType[\"\" + templteCell](this.parent), cols[parseInt(i.toString(), 10)].edit || {});\n }\n else {\n cols[parseInt(i.toString(), 10)].edit = extend(new Edit.editCellType[cols[parseInt(i.toString(), 10)].editType\n && Edit.editCellType[cols[parseInt(i.toString(), 10)].editType] ?\n cols[parseInt(i.toString(), 10)].editType : 'defaultedit'](this.parent, this.serviceLocator), cols[parseInt(i.toString(), 10)].edit || {});\n }\n }\n this.parent.log('primary_column_missing');\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n */\n Edit.prototype.getModuleName = function () {\n return 'edit';\n };\n /**\n * @param {NotifyArgs} e - specifies the notifyargs\n * @returns {void}\n * @hidden\n */\n Edit.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var gObj = this.parent;\n for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowAdding':\n case 'allowDeleting':\n case 'allowEditing':\n if (gObj.editSettings.allowAdding || gObj.editSettings.allowEditing || gObj.editSettings.allowDeleting) {\n this.initialEnd();\n }\n break;\n case 'mode':\n this.updateEditObj();\n gObj.isEdit = false;\n gObj.refresh();\n break;\n }\n }\n };\n Edit.prototype.updateEditObj = function () {\n if (this.editModule) {\n this.editModule.destroy();\n }\n this.renderer = new EditRender(this.parent, this.serviceLocator);\n this.editModule = new this.editType[this.parent.editSettings.mode](this.parent, this.serviceLocator, this.renderer);\n };\n Edit.prototype.initialEnd = function () {\n this.updateColTypeObj();\n };\n /**\n * Edits any bound record in the Grid by TR element.\n *\n * @param {HTMLTableRowElement} tr - Defines the table row to be edited.\n * @returns {void}\n */\n Edit.prototype.startEdit = function (tr) {\n var gObj = this.parent;\n if (!gObj.editSettings.allowEditing || gObj.isEdit || gObj.editSettings.mode === 'Batch') {\n return;\n }\n this.parent.element.classList.add('e-editing');\n if (!gObj.getSelectedRows().length || isNullOrUndefined(this.parent.getRowByIndex(parseInt(this.parent.getSelectedRows()[0].getAttribute('data-rowindex'), 10)))) {\n if (!tr) {\n this.showDialog('EditOperationAlert', this.alertDObj);\n return;\n }\n }\n else if (!tr) {\n tr = gObj.getSelectedRows()[0];\n }\n if (this.parent.enableVirtualization && this.parent.editSettings.mode === 'Normal') {\n var idx = parseInt(tr.getAttribute('data-rowindex'), 10);\n tr = this.parent.getRowByIndex(idx);\n }\n var lastTr = gObj.getContent().querySelector('tr:last-child');\n var hdrTbody = gObj.getHeaderContent().querySelector('tbody');\n if (gObj.frozenRows && isNullOrUndefined(lastTr) && hdrTbody && hdrTbody.querySelector('tr:last-child')) {\n this.isLastRow = tr.rowIndex === parseInt(gObj.getHeaderContent().querySelector('tbody').querySelector('tr:last-child').getAttribute('data-rowindex'), 10);\n }\n else if (lastTr) {\n this.isLastRow = tr.rowIndex === lastTr.rowIndex;\n }\n if (tr.style.display === 'none') {\n return;\n }\n this.editModule.startEdit(tr);\n this.refreshToolbar();\n gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n this.parent.notify('start-edit', {});\n };\n /**\n * @param {Element} tr - specifies the tr element\n * @param {object} args - specifies the object\n * @param {Element} args.row -specfifes the row\n * @param {string} args.requestType - specifies the request type\n * @returns {void}\n * @hidden\n */\n Edit.prototype.checkLastRow = function (tr, args) {\n var checkLastRow = this.isLastRow;\n if (this.parent.height !== 'auto' && this.parent.editSettings.newRowPosition === 'Bottom' && args && args.requestType === 'add' &&\n this.parent.getContent().firstElementChild.offsetHeight > this.parent.getContentTable().scrollHeight) {\n addClass([].slice.call(tr.getElementsByClassName(literals.rowCell)), 'e-lastrowadded');\n }\n else if (checkLastRow && tr && tr.classList) {\n addClass([].slice.call(tr.getElementsByClassName(literals.rowCell)), 'e-lastrowcell');\n }\n };\n /**\n * Cancels edited state.\n *\n * @returns {void}\n */\n Edit.prototype.closeEdit = function () {\n if (this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.showConfirmDialog\n && this.parent.element.getElementsByClassName('e-updatedtd').length) {\n this.showDialog('CancelEdit', this.dialogObj);\n return;\n }\n this.parent.element.classList.remove('e-editing');\n this.editModule.closeEdit();\n this.refreshToolbar();\n this.parent.notify(events.closeEdit, {});\n };\n Edit.prototype.refreshToolbar = function () {\n this.parent.notify(events.toolbarRefresh, {});\n };\n /**\n * To adds a new row at the top with the given data. When data is not passed, it will add empty rows.\n * > `editSettings.allowEditing` should be true.\n *\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added\n * @returns {void}\n */\n Edit.prototype.addRecord = function (data, index) {\n if (!this.parent.editSettings.allowAdding) {\n return;\n }\n var args = { startEdit: true };\n if (!data) {\n this.parent.notify(events.virtualScrollAddActionBegin, args);\n }\n if (args.startEdit) {\n this.parent.element.classList.add('e-editing');\n this.editModule.addRecord(data, index);\n this.refreshToolbar();\n this.parent.notify('start-add', {});\n }\n };\n /**\n * Deletes a record with the given options. If fieldname and data are not given, the Grid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n *\n * @param {string} fieldname - Defines the primary key field name of the column.\n * @param {Object} data - Defines the JSON data record to be deleted.\n * @returns {void}\n */\n Edit.prototype.deleteRecord = function (fieldname, data) {\n var gObj = this.parent;\n if (!gObj.editSettings.allowDeleting) {\n return;\n }\n if (!data) {\n if (!gObj.getSelectedRecords().length && isNullOrUndefined(gObj.commandDelIndex)) {\n this.showDialog('DeleteOperationAlert', this.alertDObj);\n return;\n }\n }\n if (gObj.editSettings.showDeleteConfirmDialog) {\n this.fieldname = fieldname;\n this.data = data;\n this.showDialog('ConfirmDelete', this.dialogObj);\n return;\n }\n this.editModule.deleteRecord(fieldname, data);\n };\n /**\n * Deletes a visible row by TR element.\n *\n * @param {HTMLTableRowElement} tr - Defines the table row element.\n * @returns {void}\n */\n Edit.prototype.deleteRow = function (tr) {\n this.deleteRowUid = tr.getAttribute('data-uid');\n var rowObj = this.parent.getRowObjectFromUID(this.deleteRowUid);\n if (!isNullOrUndefined(rowObj)) {\n this.deleteRecord(null, rowObj.data);\n }\n };\n /**\n * If Grid is in editable state, you can save a record by invoking endEdit.\n *\n * @returns {void}\n */\n Edit.prototype.endEdit = function () {\n if (this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.showConfirmDialog &&\n (isNullOrUndefined(this.formObj) || this.formObj.validate())) {\n this.parent.editModule.saveCell();\n this.parent.notify(events.editNextValCell, {});\n if (isNullOrUndefined(this.formObj) || this.formObj.validate()) {\n this.showDialog('BatchSaveConfirm', this.dialogObj);\n return;\n }\n }\n this.endEditing();\n };\n /**\n * To update the specified cell by given value without changing into edited state.\n *\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 * @returns {void}\n */\n Edit.prototype.updateCell = function (rowIndex, field, value) {\n this.editModule.updateCell(rowIndex, field, value);\n };\n /**\n * To update the specified row by given values without changing into edited state.\n *\n * @param {number} index Defines the row index.\n * @param {Object} data Defines the data object to be updated.\n * @returns {void}\n */\n Edit.prototype.updateRow = function (index, data) {\n this.editModule.updateRow(index, data);\n };\n /**\n * Resets added, edited, and deleted records in the batch mode.\n *\n * @returns {void}\n */\n Edit.prototype.batchCancel = function () {\n this.closeEdit();\n };\n /**\n * Bulk saves added, edited, and deleted records in the batch mode.\n *\n * @returns {void}\n */\n Edit.prototype.batchSave = function () {\n this.endEdit();\n };\n /**\n * Changes a particular cell into edited state based on the row index and field name provided in the `batch` mode.\n *\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 * @returns {void}\n */\n Edit.prototype.editCell = function (index, field) {\n this.editModule.editCell(index, field);\n };\n /**\n * Checks the status of validation at the time of editing. If validation is passed, it returns true.\n *\n * @returns {boolean} returns whether the form is validated\n */\n Edit.prototype.editFormValidate = function () {\n var form1 = this.formObj ? this.formObj.validate() : true;\n var form2 = this.mFormObj ? this.mFormObj.validate() : true;\n var form3 = this.frFormObj ? this.frFormObj.validate() : true;\n return form1 && form2 && form3;\n };\n /**\n * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.\n *\n * @returns {Object} returns the Object\n */\n Edit.prototype.getBatchChanges = function () {\n return this.editModule.getBatchChanges ? this.editModule.getBatchChanges() : {};\n };\n /**\n * Gets the current value of the edited component.\n *\n * @returns {Object} returns the Object\n */\n Edit.prototype.getCurrentEditCellData = function () {\n var obj = this.getCurrentEditedData(this.formObj.element, {});\n return obj[Object.keys(obj)[0]];\n };\n /**\n * Saves the cell that is currently edited. It does not save the value to the DataSource.\n *\n * @returns {void}\n */\n Edit.prototype.saveCell = function () {\n this.editModule.saveCell();\n };\n Edit.prototype.endEditing = function () {\n this.parent.element.classList.remove('e-editing');\n this.editModule.endEdit();\n this.refreshToolbar();\n };\n Edit.prototype.showDialog = function (content, obj) {\n obj.content = '
' + this.l10n.getConstant(content) + '
';\n obj.dataBind();\n obj.show();\n };\n Edit.prototype.getValueFromType = function (col, value) {\n var val = value;\n switch (col.type) {\n case 'number':\n val = !isNaN(parseFloat(value)) ? parseFloat(value) : null;\n break;\n case 'boolean':\n if (col.editType !== 'booleanedit') {\n val = value === this.l10n.getConstant('True') || value === true ? true : false;\n }\n break;\n case 'date':\n case 'datetime':\n if (col.editType !== 'datepickeredit' && col.editType !== 'datetimepickeredit'\n && value && value.length) {\n val = new Date(value);\n }\n else if (value === '') {\n val = null;\n }\n break;\n case 'dateonly':\n val = value && (value = new Date(value)) ?\n value.getFullYear() + '-' + padZero(value.getMonth() + 1) + '-' + padZero(value.getDate()) : null;\n break;\n }\n return val;\n };\n Edit.prototype.destroyToolTip = function () {\n var elements = [].slice.call(this.parent.element.getElementsByClassName('e-griderror'));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var elem = elements_1[_i];\n remove(elem);\n }\n this.parent.getContent().firstElementChild.style.position = 'relative';\n if (this.parent.isFrozenGrid()) {\n if (this.parent.element.querySelector('.e-gridheader')) {\n this.parent.element.querySelector('.e-gridheader').style.position = '';\n }\n this.parent.element.querySelector('.e-gridcontent').style.position = '';\n }\n };\n Edit.prototype.createConfirmDlg = function () {\n this.dialogObj = this.dlgWidget([\n {\n click: this.dlgOk.bind(this),\n buttonModel: { content: this.l10n.getConstant('OKButton'),\n cssClass: this.parent.cssClass ? 'e-primary' + ' ' + this.parent.cssClass : 'e-primary',\n isPrimary: true }\n },\n {\n click: this.dlgCancel.bind(this),\n buttonModel: { cssClass: this.parent.cssClass ? 'e-flat' + ' ' + this.parent.cssClass : 'e-flat',\n content: this.l10n.getConstant('CancelButton') }\n }\n ], 'EditConfirm');\n };\n Edit.prototype.createAlertDlg = function () {\n this.alertDObj = this.dlgWidget([\n {\n click: this.alertClick.bind(this),\n buttonModel: { content: this.l10n.getConstant('OKButton'),\n cssClass: this.parent.cssClass ? 'e-flat' + ' ' + this.parent.cssClass : 'e-flat',\n isPrimary: true }\n }\n ], 'EditAlert');\n };\n Edit.prototype.alertClick = function () {\n this.alertDObj.hide();\n };\n Edit.prototype.dlgWidget = function (btnOptions, name) {\n var div = this.parent.createElement('div', { id: this.parent.element.id + name });\n this.parent.element.appendChild(div);\n var options = {\n showCloseIcon: false,\n isModal: true,\n visible: false,\n closeOnEscape: true,\n target: this.parent.element,\n width: '320px',\n animationSettings: { effect: 'None' },\n cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n };\n options.buttons = btnOptions;\n var obj = new Dialog(options);\n var isStringTemplate = 'isStringTemplate';\n obj[\"\" + isStringTemplate] = true;\n obj.appendTo(div);\n return obj;\n };\n Edit.prototype.dlgCancel = function () {\n if (this.parent.pagerModule) {\n this.parent.pagerModule.isForceCancel = false;\n }\n this.parent.focusModule.clearIndicator();\n this.parent.focusModule.restoreFocus();\n this.dialogObj.hide();\n this.parent.notify('cancelcnfrmDlg', {});\n };\n Edit.prototype.dlgOk = function () {\n switch (this.dialogObj.element.querySelector('.e-dlg-content').firstElementChild.innerText) {\n case this.l10n.getConstant('ConfirmDelete'):\n this.editModule.deleteRecord(this.fieldname, this.data);\n break;\n case this.l10n.getConstant('CancelEdit'):\n this.editModule.closeEdit();\n break;\n case this.l10n.getConstant('BatchSaveConfirm'):\n this.endEditing();\n break;\n case this.l10n.getConstant('BatchSaveLostChanges'):\n if (this.parent.editSettings.mode === 'Batch') {\n this.editModule.addCancelWhilePaging();\n }\n if (this.parent.pagerModule) {\n this.parent.pagerModule.isForceCancel = false;\n }\n this.executeAction();\n break;\n }\n this.dlgCancel();\n };\n Edit.prototype.destroyEditComponents = function () {\n if (this.parent.isEdit) {\n this.destroyWidgets();\n this.destroyForm();\n }\n this.destroy();\n };\n /**\n * @returns {void}\n * @hidden\n */\n Edit.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.eventDetails = [{ event: events.inBoundModelChanged, handler: this.onPropertyChanged },\n { event: events.initialEnd, handler: this.initialEnd },\n { event: events.keyPressed, handler: this.keyPressHandler },\n { event: events.autoCol, handler: this.updateColTypeObj },\n { event: events.tooltipDestroy, handler: this.destroyToolTip },\n { event: events.preventBatch, handler: this.preventBatch },\n { event: events.destroyForm, handler: this.destroyForm },\n { event: events.destroy, handler: this.destroyEditComponents }];\n addRemoveEventListener(this.parent, this.eventDetails, true, this);\n this.actionBeginFunction = this.onActionBegin.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 };\n /**\n * @returns {void}\n * @hidden\n */\n Edit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n addRemoveEventListener(this.parent, this.eventDetails, false);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.removeEventListener(events.actionBegin, this.actionBeginFunction);\n };\n Edit.prototype.actionComplete = function (e) {\n var actions = ['add', 'beginEdit', 'save', 'delete', 'cancel', 'filterAfterOpen', 'filterchoicerequest'];\n if (actions.indexOf(e.requestType) < 0) {\n this.parent.isEdit = false;\n }\n if (e.requestType === 'batchsave') {\n this.parent.focusModule.restoreFocus();\n }\n this.refreshToolbar();\n };\n /**\n * @param {Element} form - specifies the element\n * @param {Object} editedData - specifies the edited data\n * @returns {Object} returns the object\n * @hidden\n */\n Edit.prototype.getCurrentEditedData = function (form, editedData) {\n var gObj = this.parent;\n if (gObj.editSettings.template) {\n var elements = [].slice.call(form.elements);\n for (var k = 0; k < elements.length; k++) {\n if (((elements[parseInt(k.toString(), 10)].hasAttribute('name') && (elements[parseInt(k.toString(), 10)].className !== 'e-multi-hidden')) ||\n elements[parseInt(k.toString(), 10)].classList.contains('e-multiselect')) && !(elements[parseInt(k.toString(), 10)].type === 'hidden' &&\n (parentsUntil(elements[parseInt(k.toString(), 10)], 'e-switch-wrapper') || parentsUntil(elements[parseInt(k.toString(), 10)], 'e-checkbox-wrapper')))) {\n var field = (elements[parseInt(k.toString(), 10)].hasAttribute('name')) ? setComplexFieldID(elements[parseInt(k.toString(), 10)].getAttribute('name')) :\n setComplexFieldID(elements[parseInt(k.toString(), 10)].getAttribute('id'));\n var column = gObj.getColumnByField(field) || { field: field, type: elements[parseInt(k.toString(), 10)].getAttribute('type') };\n var value = void 0;\n if (column.type === 'checkbox' || column.type === 'boolean') {\n value = elements[parseInt(k.toString(), 10)].checked;\n }\n else if (elements[parseInt(k.toString(), 10)].value) {\n value = elements[parseInt(k.toString(), 10)].value;\n if (elements[parseInt(k.toString(), 10)].ej2_instances &&\n elements[parseInt(k.toString(), 10)].ej2_instances.length &&\n !isNullOrUndefined(elements[parseInt(k.toString(), 10)].ej2_instances[0].value)) {\n elements[parseInt(k.toString(), 10)].blur();\n value = elements[parseInt(k.toString(), 10)]\n .ej2_instances[0].value;\n }\n }\n else if (elements[parseInt(k.toString(), 10)].ej2_instances) {\n value = elements[parseInt(k.toString(), 10)]\n .ej2_instances[0].value;\n }\n if (column.edit && typeof column.edit.read === 'string') {\n value = getValue(column.edit.read, window)(elements[parseInt(k.toString(), 10)], value);\n }\n else if (column.edit && column.edit.read) {\n value = column.edit.read(elements[parseInt(k.toString(), 10)], value);\n }\n value = gObj.editModule.getValueFromType(column, value);\n if (elements[parseInt(k.toString(), 10)].type === 'radio') {\n if (elements[parseInt(k.toString(), 10)].checked) {\n DataUtil.setValue(column.field, value, editedData);\n }\n }\n else {\n if (typeof value === 'string') {\n this.parent.sanitize(value);\n }\n DataUtil.setValue(column.field, value, editedData);\n }\n }\n }\n return editedData;\n }\n var col = gObj.columnModel.filter(function (col) { return col.editTemplate; });\n for (var j = 0; j < col.length; j++) {\n if (form[getComplexFieldID(col[parseInt(j.toString(), 10)].field)]) {\n var inputElements = [].slice.call(form[getComplexFieldID(col[parseInt(j.toString(), 10)].field)]);\n inputElements = inputElements.length ? inputElements : [form[getComplexFieldID(col[parseInt(j.toString(), 10)].field)]];\n var temp = inputElements.filter(function (e) {\n return !isNullOrUndefined((e.ej2_instances));\n });\n if (temp.length === 0) {\n temp = inputElements.filter(function (e) { return e.hasAttribute('name'); });\n }\n for (var k = 0; k < temp.length; k++) {\n var value = this.getValue(col[parseInt(j.toString(), 10)], temp[parseInt(k.toString(), 10)], editedData);\n if (col[parseInt(j.toString(), 10)].type === 'string') {\n value = this.parent.sanitize(value);\n }\n DataUtil.setValue(col[parseInt(j.toString(), 10)].field, value, editedData);\n }\n }\n }\n var inputs = [].slice.call(form.getElementsByClassName('e-field'));\n for (var i = 0, len = inputs.length; i < len; i++) {\n var col_1 = gObj.getColumnByUid(inputs[parseInt(i.toString(), 10)].getAttribute('e-mappinguid'));\n if (col_1 && col_1.field) {\n var value = this.getValue(col_1, inputs[parseInt(i.toString(), 10)], editedData);\n if (col_1.type === 'string') {\n value = this.parent.sanitize(value);\n }\n DataUtil.setValue(col_1.field, value, editedData);\n }\n }\n return editedData;\n };\n Edit.prototype.getValue = function (col, input, editedData) {\n var value = input.ej2_instances ?\n input.ej2_instances[0].value : input.value;\n var gObj = this.parent;\n var temp = col.edit.read;\n if (col.type === 'checkbox' || col.type === 'boolean') {\n value = input.checked;\n }\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n value = gObj.editModule.getValueFromType(col, (temp)(input, value));\n }\n else {\n value = gObj.editModule.getValueFromType(col, col.edit.read(input, value));\n }\n if (isNullOrUndefined(editedData[col.field]) && value === '') {\n value = editedData[col.field];\n }\n return value;\n };\n /**\n * @param {NotifyArgs} e - specifies the NotifyArgs\n * @returns {void}\n * @hidden\n */\n Edit.prototype.onActionBegin = function (e) {\n if (e.requestType === 'columnstate' && this.parent.isEdit\n && this.parent.editSettings.mode !== 'Batch') {\n this.closeEdit();\n }\n else {\n var editRow = this.parent.element.querySelector('.' + literals.editedRow);\n var addRow = this.parent.element.querySelector('.' + literals.addedRow);\n if (editRow && this.parent.frozenRows && e.requestType === 'virtualscroll'\n && parseInt(parentsUntil(editRow, literals.row).getAttribute(literals.dataRowIndex), 10) < this.parent.frozenRows) {\n return;\n }\n var restrictedRequestTypes = ['filterAfterOpen', 'filterBeforeOpen', 'filterchoicerequest', 'filterSearchBegin', 'save', 'infiniteScroll', 'virtualscroll'];\n var isRestrict = restrictedRequestTypes.indexOf(e.requestType) === -1;\n var isDestroyVirtualForm = this.parent.enableVirtualization && this.formObj\n && !this.formObj.isDestroyed && (editRow || addRow || e.requestType === 'cancel') && isRestrict;\n if ((!this.parent.enableVirtualization && this.parent.editSettings.mode !== 'Batch' && this.formObj && !this.formObj.isDestroyed\n && isRestrict && !e.cancel) || isDestroyVirtualForm) {\n this.destroyWidgets();\n this.destroyForm();\n }\n }\n };\n /**\n * @param {Column[]} cols - specfies the column\n * @returns {void}\n * @hidden\n */\n Edit.prototype.destroyWidgets = function (cols) {\n var gObj = this.parent;\n if (gObj.editSettings.template) {\n this.parent.destroyTemplate(['editSettingsTemplate']);\n if (this.parent.isReact) {\n this.parent.renderTemplates();\n }\n }\n cols = cols ? cols : this.parent.getCurrentVisibleColumns(this.parent.enableColumnVirtualization);\n if (cols.some(function (column) { return !isNullOrUndefined(column.editTemplate); })) {\n this.parent.destroyTemplate(['editTemplate']);\n if (this.parent.isReact) {\n this.parent.renderTemplates();\n }\n }\n for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {\n var col = cols_1[_i];\n var temp = col.edit.destroy;\n if (col.edit.destroy) {\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp();\n }\n else {\n col.edit.destroy();\n }\n }\n }\n var elements = [].slice.call(this.formObj.element.elements);\n for (var i = 0; i < elements.length; i++) {\n if (elements[parseInt(i.toString(), 10)].hasAttribute('name')) {\n if (elements[parseInt(i.toString(), 10)].ej2_instances &&\n elements[parseInt(i.toString(), 10)].ej2_instances.length &&\n !elements[parseInt(i.toString(), 10)].ej2_instances[0].isDestroyed) {\n elements[parseInt(i.toString(), 10)].ej2_instances[0].destroy();\n }\n }\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Edit.prototype.destroyForm = function () {\n this.destroyToolTip();\n var formObjects = [this.formObj, this.mFormObj, this.frFormObj, this.virtualFormObj];\n for (var i = 0; i < formObjects.length; i++) {\n if (formObjects[parseInt(i.toString(), 10)] && formObjects[parseInt(i.toString(), 10)].element\n && !formObjects[parseInt(i.toString(), 10)].isDestroyed) {\n formObjects[parseInt(i.toString(), 10)].destroy();\n }\n }\n this.destroyToolTip();\n };\n /**\n * To destroy the editing.\n *\n * @returns {void}\n * @hidden\n */\n Edit.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement) {\n return;\n }\n var hasGridChild = gridElement.querySelector('.' + literals.gridHeader) &&\n gridElement.querySelector('.' + literals.gridContent) ? true : false;\n if (hasGridChild) {\n this.destroyForm();\n }\n this.removeEventListener();\n var elem = this.dialogObj.element;\n if (elem.childElementCount > 0) {\n this.dialogObj.destroy();\n remove(elem);\n }\n elem = this.alertDObj.element;\n if (elem.childElementCount > 0) {\n this.alertDObj.destroy();\n remove(elem);\n }\n if (!hasGridChild) {\n return;\n }\n if (this.editModule) {\n this.editModule.destroy();\n }\n };\n Edit.prototype.keyPressHandler = function (e) {\n var isMacLike = /(Mac)/i.test(navigator.platform);\n if (isMacLike && e.metaKey && e.action === 'ctrlEnter') {\n e.action = 'insert';\n }\n switch (e.action) {\n case 'insert':\n this.addRecord();\n break;\n case 'delete':\n if ((e.target.tagName !== 'INPUT' || e.target.classList.contains('e-checkselect'))\n && !document.querySelector('.e-popup-open.e-edit-dialog')) {\n this.deleteRecord();\n }\n break;\n case 'f2':\n this.startEdit();\n break;\n case 'enter':\n if (!parentsUntil(e.target, 'e-unboundcelldiv') && this.parent.editSettings.mode !== 'Batch' &&\n (parentsUntil(e.target, literals.gridContent) || (this.parent.frozenRows\n && parentsUntil(e.target, literals.headerContent)))\n && !document.getElementsByClassName('e-popup-open').length) {\n e.preventDefault();\n this.endEdit();\n }\n break;\n case 'escape':\n if (this.parent.isEdit && !this.editCellDialogClose) {\n if (this.parent.editSettings.mode === 'Batch') {\n this.editModule.escapeCellEdit();\n }\n else {\n this.curretRowFocus(e);\n }\n }\n if (this.editCellDialogClose) {\n this.editCellDialogClose = false;\n }\n break;\n case 'tab':\n case 'shiftTab':\n this.curretRowFocus(e);\n break;\n }\n };\n Edit.prototype.curretRowFocus = function (e) {\n if (this.parent.isEdit && this.parent.editSettings.mode !== 'Batch') {\n var editedRow = parentsUntil(e.target, 'e-editedrow') || parentsUntil(e.target, 'e-addedrow');\n if (editedRow) {\n var focusableEditCells = [].slice.call(editedRow.querySelectorAll('.e-input:not(.e-disabled)'));\n var commandColCell = [].slice.call(editedRow.querySelectorAll('.e-unboundcell'));\n if (commandColCell) {\n for (var i = 0; i < commandColCell.length; i++) {\n focusableEditCells = focusableEditCells.concat([].slice\n .call(commandColCell[parseInt(i.toString(), 10)].querySelectorAll('.e-btn:not(.e-hide)')));\n }\n }\n var rowCell = parentsUntil(e.target, 'e-rowcell');\n if ((rowCell === parentsUntil(focusableEditCells[focusableEditCells.length - 1], 'e-rowcell')\n && e.action === 'tab' && !rowCell.classList.contains('e-unboundcell'))\n || (rowCell === parentsUntil(focusableEditCells[0], 'e-rowcell') && e.action === 'shiftTab')\n || e.action === 'escape') {\n var uid = editedRow.getAttribute('data-uid');\n var rows = this.parent.getRows();\n var rowIndex = rows.map(function (m) { return m.getAttribute('data-uid'); }).indexOf(uid);\n if (this.parent.frozenRows && parentsUntil(editedRow, 'e-content')) {\n rowIndex = rowIndex - this.parent.frozenRows;\n }\n if (editedRow.classList.contains('e-addedrow')) {\n rowIndex = 0;\n }\n if (e.action === 'escape') {\n this.closeEdit();\n }\n else {\n this.endEdit();\n }\n if (this.parent.focusModule.active) {\n this.parent.focusModule.active.matrix.current = [rowIndex, 0];\n }\n }\n }\n }\n };\n Edit.prototype.preventBatch = function (args) {\n this.preventObj = args;\n this.showDialog('BatchSaveLostChanges', this.dialogObj);\n };\n Edit.prototype.executeAction = function () {\n this.preventObj.handler.call(this.preventObj.instance, this.preventObj.arg1, this.preventObj.arg2, this.preventObj.arg3, this.preventObj.arg4, this.preventObj.arg5, this.preventObj.arg6, this.preventObj.arg7, this.preventObj.arg8);\n };\n /**\n * @param {Column[]} cols - specifies the column\n * @param {Object} newRule - specifies the new rule object\n * @returns {void}\n * @hidden\n */\n Edit.prototype.applyFormValidation = function (cols, newRule) {\n var gObj = this.parent;\n var idx = 0;\n var form = this.parent.editSettings.mode !== 'Dialog' ?\n gObj.element.getElementsByClassName('e-gridform')[parseInt(idx.toString(), 10)] :\n select('#' + gObj.element.id + '_dialogEdit_wrapper .e-gridform', document);\n var index = 1;\n var rules = {};\n var mRules = {};\n var frRules = {};\n cols = cols ? cols : gObj.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (!cols[parseInt(i.toString(), 10)].visible && (gObj.editSettings.mode !== 'Dialog' || (gObj.groupSettings.columns.indexOf(cols[parseInt(i.toString(), 10)].field) === -1\n && gObj.editSettings.mode === 'Dialog'))) {\n continue;\n }\n if (cols[parseInt(i.toString(), 10)].validationRules && isNullOrUndefined(newRule)) {\n setValidationRuels(cols[parseInt(i.toString(), 10)], index, rules, mRules, frRules, cols.length);\n }\n }\n rules = extend(rules, mRules, frRules);\n this.parent.editModule.formObj = this.createFormObj(form, newRule ? newRule : rules);\n };\n /**\n * @param {HTMLFormElement} form - Defined Form element\n * @param {Object} rules - Defines form rules\n * @returns {FormValidator} Returns formvalidator instance\n * @hidden\n */\n Edit.prototype.createFormObj = function (form, rules) {\n var _this = this;\n return new FormValidator(form, {\n rules: rules,\n locale: this.parent.locale,\n validationComplete: function (args) {\n _this.validationComplete(args);\n },\n customPlacement: function (inputElement, error) {\n var uid = inputElement.getAttribute('e-mappinguid');\n var args = {\n column: _this.parent.getColumnByUid(uid),\n error: error,\n inputElement: inputElement,\n value: inputElement.value\n };\n if (!(event && event['relatedTarget'] && event['relatedTarget'].classList.contains('e-cancelbutton'))) {\n _this.valErrorPlacement(inputElement, error);\n }\n _this.parent.notify(events.valCustomPlacement, args);\n }\n });\n };\n Edit.prototype.valErrorPlacement = function (inputElement, error) {\n if (this.parent.isEdit) {\n var id = error.getAttribute('for');\n var elem = this.getElemTable(inputElement).querySelector('#' + getParsedFieldID(id) + '_Error');\n if (!elem) {\n this.createTooltip(inputElement, error, id, '');\n }\n else {\n elem.querySelector('.e-tip-content').innerHTML = error.outerHTML;\n }\n }\n };\n Edit.prototype.getElemTable = function (inputElement) {\n var isFHdr;\n var gObj = this.parent;\n var table;\n if (gObj.editSettings.mode !== 'Dialog') {\n isFHdr = (gObj.frozenRows && gObj.frozenRows\n > (parseInt(closest(inputElement, '.' + literals.row).getAttribute(literals.dataRowIndex), 10) || 0));\n var field = inputElement.name;\n table = this.parent.isFrozenGrid() ? gObj.element : isFHdr ? gObj.getHeaderTable() : gObj.getContentTable();\n }\n else {\n table = select('#' + gObj.element.id + '_dialogEdit_wrapper', document);\n }\n return table;\n };\n Edit.prototype.resetElemPosition = function (elem, args) {\n var td = parentsUntil(args.element, literals.rowCell);\n if (td) {\n var tdRight = td.getBoundingClientRect().right;\n var elemRight = elem.getBoundingClientRect().right;\n if (elemRight > tdRight) {\n var offSet = elemRight - tdRight;\n elem.style.left = (elem.offsetLeft - offSet) + 'px';\n }\n }\n };\n Edit.prototype.validationComplete = function (args) {\n if (this.parent.isEdit) {\n var elem = this.getElemTable(args.element).querySelector('#' + getParsedFieldID(args.inputName) + '_Error');\n if (elem) {\n if (args.status === 'failure') {\n elem.style.display = '';\n this.resetElemPosition(elem, args);\n }\n else {\n elem.style.display = 'none';\n }\n }\n }\n };\n Edit.prototype.createTooltip = function (element, error, name, display) {\n var formObj = this.formObj.element;\n var customForm = parentsUntil(element, 'e-virtual-validation');\n if (customForm) {\n formObj = this.virtualFormObj.element;\n }\n var gcontent = this.parent.getContent().firstElementChild;\n var isScroll = gcontent.scrollHeight > gcontent.clientHeight || gcontent.scrollWidth > gcontent.clientWidth;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n var td = closest(element, '.' + literals.rowCell);\n var row = closest(element, '.' + literals.row);\n var isFHdr;\n var isFHdrLastRow = false;\n var validationForBottomRowPos;\n var isBatchModeLastRow = false;\n var viewPortRowCount = Math.round(this.parent.getContent().clientHeight / this.parent.getRowHeight()) - 1;\n var rows = [].slice.call(this.parent.getContent().getElementsByClassName(literals.row));\n if (this.parent.editSettings.mode === 'Batch') {\n rows = [].slice.call(this.parent.getContent().querySelectorAll('.e-row:not(.e-hiddenrow)'));\n if (viewPortRowCount >= 1 && rows.length >= viewPortRowCount\n && rows[rows.length - 1].getAttribute(literals.dataRowIndex) === row.getAttribute(literals.dataRowIndex)) {\n isBatchModeLastRow = true;\n }\n }\n if (isInline) {\n if (this.parent.frozenRows) {\n var fHearderRows = [].slice.call(this.parent.getHeaderTable().querySelector(literals.tbody).querySelectorAll('.e-row:not(.e-hiddenrow)'));\n isFHdr = fHearderRows.length > (parseInt(row.getAttribute(literals.dataRowIndex), 10) || 0);\n isFHdrLastRow = isFHdr && parseInt(row.getAttribute(literals.dataRowIndex), 10) === fHearderRows.length - 1;\n var insertRow = [].slice.call(this.parent.getHeaderTable().querySelector(literals.tbody).querySelectorAll('.e-row:not(.e-hiddenrow)'));\n if (insertRow.length === 1 && (insertRow[0].classList.contains('e-addedrow') || insertRow[0].classList.contains('e-insertedrow'))) {\n isFHdrLastRow = true;\n }\n }\n if (isFHdrLastRow || (viewPortRowCount >= 1 && rows.length >= viewPortRowCount\n && ((this.parent.editSettings.newRowPosition === 'Bottom' && (this.editModule.args\n && this.editModule.args.requestType === 'add')) || (td.classList.contains('e-lastrowcell')\n && !row.classList.contains(literals.addedRow)))) || isBatchModeLastRow) {\n validationForBottomRowPos = true;\n }\n }\n var table = isInline ?\n (isFHdr ? this.parent.getHeaderTable() : this.parent.getContentTable()) :\n select('#' + this.parent.element.id + '_dialogEdit_wrapper .e-dlg-content', document);\n var client = table.getBoundingClientRect();\n var left = isInline ?\n this.parent.element.getBoundingClientRect().left : client.left;\n var input = closest(element, 'td');\n var inputClient = input ? input.getBoundingClientRect() : element.parentElement.getBoundingClientRect();\n var div = this.parent.createElement('div', {\n className: 'e-tooltip-wrap e-lib e-control e-popup e-griderror',\n id: name + '_Error',\n styles: 'display:' + display + ';top:' +\n ((isFHdr ? inputClient.top + inputClient.height : inputClient.bottom - client.top) + table.scrollTop + 9) + 'px;left:' +\n (inputClient.left - left + table.scrollLeft + inputClient.width / 2) + 'px;' +\n 'max-width:' + inputClient.width + 'px;text-align:center;'\n });\n if (this.parent.cssClass) {\n div.classList.add(this.parent.cssClass);\n }\n if (isInline && client.left < left) {\n div.style.left = parseInt(div.style.left, 10) - client.left + left + 'px';\n }\n var content = this.parent.createElement('div', { className: 'e-tip-content' });\n content.appendChild(error);\n var arrow;\n if (validationForBottomRowPos) {\n arrow = this.parent.createElement('div', { className: 'e-arrow-tip e-tip-bottom' });\n arrow.appendChild(this.parent.createElement('div', { className: 'e-arrow-tip-outer e-tip-bottom' }));\n arrow.appendChild(this.parent.createElement('div', { className: 'e-arrow-tip-inner e-tip-bottom' }));\n }\n else {\n arrow = this.parent.createElement('div', { className: 'e-arrow-tip e-tip-top' });\n arrow.appendChild(this.parent.createElement('div', { className: 'e-arrow-tip-outer e-tip-top' }));\n arrow.appendChild(this.parent.createElement('div', { className: 'e-arrow-tip-inner e-tip-top' }));\n }\n div.appendChild(content);\n div.appendChild(arrow);\n if (!customForm && (this.parent.frozenRows) && this.parent.editSettings.mode !== 'Dialog') {\n var getEditCell = this.parent.editSettings.mode === 'Normal' ?\n closest(element, '.e-editcell') : closest(element, '.' + literals.table);\n getEditCell.style.position = 'relative';\n div.style.position = 'absolute';\n if (this.parent.editSettings.mode === 'Batch' ||\n (closest(element, '.' + literals.frozenContent) || closest(element, '.' + literals.frozenHeader))\n || (this.parent.frozenRows)) {\n if (this.parent.isFrozenGrid()) {\n if (td.classList.contains('e-unfreeze')) {\n addClass([div], 'e-unfreeze');\n formObj.appendChild(div);\n }\n else {\n var elem = closest(td, '.e-gridheader') ? this.parent.element.querySelector('.e-gridheader') :\n rows.length === 1 ? this.parent.element.querySelector('.e-gridcontent').querySelector('.e-content') :\n this.parent.element.querySelector('.e-gridcontent');\n elem.appendChild(div);\n elem.style.position = 'relative';\n }\n }\n else {\n formObj.appendChild(div);\n }\n }\n else {\n this.mFormObj.element.appendChild(div);\n }\n }\n else {\n if (customForm) {\n this.virtualFormObj.element.appendChild(div);\n }\n else {\n if (this.parent.isFrozenGrid()) {\n if (td.classList.contains('e-unfreeze')) {\n addClass([div], 'e-unfreeze');\n this.formObj.element.appendChild(div);\n }\n else {\n var elem = closest(td, '.e-gridheader') ? this.parent.element.querySelector('.e-gridheader') :\n rows.length === 1 ? this.parent.element.querySelector('.e-gridcontent').querySelector('.e-content') :\n this.parent.element.querySelector('.e-gridcontent');\n elem.appendChild(div);\n elem.style.position = 'relative';\n }\n }\n else {\n this.formObj.element.appendChild(div);\n }\n }\n }\n if (!isNullOrUndefined(td)) {\n if (td.classList.contains('e-fixedfreeze')) {\n div.classList.add('e-fixederror');\n }\n else if (td.classList.contains('e-leftfreeze') || td.classList.contains('e-rightfreeze')) {\n div.classList.add('e-freezeerror');\n }\n }\n if (!validationForBottomRowPos && isInline && gcontent.getBoundingClientRect().bottom < inputClient.bottom + inputClient.height) {\n var contentDiv = this.parent.getContent().querySelector('.e-content');\n if (this.parent.currentViewData.length === 0 && contentDiv.scrollTop === 0) {\n contentDiv.scrollTop = div.offsetHeight + arrow.scrollHeight;\n }\n else {\n gcontent.scrollTop = gcontent.scrollTop + div.offsetHeight + arrow.scrollHeight;\n }\n }\n var lineHeight = parseInt(document.defaultView.getComputedStyle(div, null).getPropertyValue('font-size'), 10);\n if (div.getBoundingClientRect().width < inputClient.width &&\n div.querySelector('label').getBoundingClientRect().height / (lineHeight * 1.2) >= 2) {\n div.style.width = div.style.maxWidth;\n }\n if (this.parent.frozenRows && this.parent.editSettings.mode !== 'Dialog') {\n div.style.left = input.offsetLeft + (input.offsetWidth / 2 - div.offsetWidth / 2) + 'px';\n }\n else {\n div.style.left = (parseInt(div.style.left, 10) - div.offsetWidth / 2) + 'px';\n }\n if (isInline && !isScroll && !this.parent.allowPaging || this.parent.frozenRows) {\n // gcontent.style.position = 'static';\n var pos = calculateRelativeBasedPosition(input, div);\n div.style.top = pos.top + inputClient.height + 9 + 'px';\n }\n if (validationForBottomRowPos) {\n if (isScroll && this.parent.height !== 'auto' && !this.parent.frozenRows\n && !this.parent.enableVirtualization && !(div.classList.contains('e-freezeerror') && div.classList.contains('e-fixederror'))) {\n var scrollWidth = gcontent.scrollWidth > gcontent.offsetWidth ? getScrollBarWidth() : 0;\n var gHeight = this.parent.height.toString().indexOf('%') === -1 ?\n parseInt(this.parent.height, 10) : gcontent.offsetHeight;\n div.style.bottom = (gHeight - gcontent.querySelector('table').offsetHeight\n - scrollWidth) + inputClient.height + 9 + 'px';\n }\n else {\n div.style.bottom = inputClient.height + 9 + 'px';\n }\n if (rows.length < viewPortRowCount && this.parent.editSettings.newRowPosition === 'Bottom' && (this.editModule.args\n && this.editModule.args.requestType === 'add')) {\n var rowsCount = this.parent.frozenRows ? this.parent.frozenRows + (rows.length - 1) : rows.length - 1;\n var rowsHeight = rowsCount * this.parent.getRowHeight();\n var position = this.parent.getContent().clientHeight - rowsHeight;\n div.style.bottom = position + 9 + 'px';\n }\n div.style.top = null;\n }\n };\n /**\n * @param {Column} col - specfies the column\n * @returns {boolean} returns the whether column is grouped\n * @hidden\n */\n Edit.prototype.checkColumnIsGrouped = function (col) {\n return !col.visible && !(this.parent.groupSettings.columns.indexOf(col.field) > -1);\n };\n /**\n * @param {object} editors -specfies the editors\n * @returns {void}\n * @hidden\n */\n Edit.AddEditors = function (editors) {\n Edit.editCellType = extend(Edit.editCellType, editors);\n };\n Edit.editCellType = {\n 'dropdownedit': DropDownEditCell, 'numericedit': NumericEditCell,\n 'datepickeredit': DatePickerEditCell, 'datetimepickeredit': DatePickerEditCell,\n 'booleanedit': BooleanEditCell, 'defaultedit': DefaultEditCell,\n 'templateedit': TemplateEditCell\n };\n return Edit;\n}());\nexport { Edit };\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { EventHandler, isNullOrUndefined, remove, Browser } from '@syncfusion/ej2-base';\nimport { parentsUntil, addBiggerDialog, addRemoveEventListener } from '../base/util';\nimport * as events from '../base/constant';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { ResponsiveDialogAction } from '../base/enum';\n/**\n *\n * The `ResponsiveDialogRenderer` module is used to render the responsive dialogs.\n */\nvar ResponsiveDialogRenderer = /** @class */ (function () {\n function ResponsiveDialogRenderer(parent, serviceLocator) {\n this.sortedCols = [];\n this.sortPredicate = [];\n /** @hidden */\n this.isCustomDialog = false;\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n ResponsiveDialogRenderer.prototype.addEventListener = function () {\n this.evtHandlers = [{ event: events.filterDialogClose, handler: this.closeCustomDialog },\n { event: events.refreshCustomFilterOkBtn, handler: this.refreshCustomFilterOkBtn },\n { event: events.renderResponsiveCmenu, handler: this.renderResponsiveContextMenu },\n { event: events.filterCmenuSelect, handler: this.renderCustomFilterDiv },\n { event: events.customFilterClose, handler: this.customExFilterClose },\n { event: events.refreshCustomFilterClearBtn, handler: this.refreshCustomFilterClearBtn }];\n addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n this.onActionCompleteFn = this.editComplate.bind(this);\n this.parent.addEventListener(events.actionComplete, this.onActionCompleteFn);\n };\n ResponsiveDialogRenderer.prototype.customExFilterClose = function () {\n this.isCustomDlgRender = false;\n };\n ResponsiveDialogRenderer.prototype.renderCustomFilterDiv = function () {\n var header = this.customResponsiveDlg.element.querySelector('.e-dlg-header-content');\n var title = header.querySelector('.e-dlg-custom-header');\n var closeBtn = header.querySelector('.e-dlg-closeicon-btn');\n this.isCustomDlgRender = true;\n this.parent.filterModule.filterModule.closeDialog();\n this.saveBtn.element.style.display = '';\n this.refreshCustomFilterOkBtn({ disabled: false });\n this.backBtn.element.style.display = 'none';\n closeBtn.style.display = '';\n title.innerHTML = this.parent.localeObj.getConstant('CustomFilter');\n var content = this.customResponsiveDlg.element.querySelector('.e-dlg-content');\n this.customExcelFilterParent = this.parent.createElement('div', { className: 'e-xl-customfilterdiv e-default-filter' });\n content.appendChild(this.customExcelFilterParent);\n };\n ResponsiveDialogRenderer.prototype.renderResponsiveContextMenu = function (args) {\n if (this.action === ResponsiveDialogAction.isFilter) {\n var content = this.customResponsiveDlg.element.querySelector('.e-dlg-content');\n var header = this.customResponsiveDlg.element.querySelector('.e-dlg-header-content');\n var closeBtn = header.querySelector('.e-dlg-closeicon-btn');\n var text = header.querySelector('.e-dlg-custom-header');\n if (args.isOpen) {\n content.firstChild.style.display = 'none';\n content.appendChild(args.target);\n closeBtn.style.display = 'none';\n this.saveBtn.element.style.display = 'none';\n this.filterClearBtn.element.style.display = 'none';\n text.innerHTML = args.header;\n var backBtn = this.parent.createElement('button');\n var span = this.parent.createElement('span', { className: 'e-btn-icon e-resfilterback e-icons' });\n backBtn.appendChild(span);\n this.backBtn = new Button({\n cssClass: this.parent.cssClass ? 'e-res-back-btn' + ' ' + this.parent.cssClass : 'e-res-back-btn'\n });\n this.backBtn.appendTo(backBtn);\n text.parentElement.insertBefore(backBtn, text);\n }\n else if (this.backBtn && !this.isCustomDlgRender) {\n content.firstChild.style.display = '';\n remove(this.backBtn.element);\n closeBtn.style.display = '';\n this.saveBtn.element.style.display = '';\n if (this.isFiltered) {\n this.filterClearBtn.element.style.display = '';\n }\n text.innerHTML = this.getHeaderTitle({ action: ResponsiveDialogAction.isFilter }, args.col);\n }\n }\n };\n ResponsiveDialogRenderer.prototype.refreshCustomFilterClearBtn = function (args) {\n if (this.filterClearBtn) {\n this.isFiltered = args.isFiltered;\n this.filterClearBtn.element.style.display = args.isFiltered ? '' : 'none';\n }\n };\n ResponsiveDialogRenderer.prototype.refreshCustomFilterOkBtn = function (args) {\n if (this.saveBtn) {\n this.saveBtn.disabled = args.disabled;\n }\n if (this.parent.columnChooserModule && this.parent.columnChooserModule.responsiveDialogRenderer.saveBtn) {\n this.parent.columnChooserModule.responsiveDialogRenderer.saveBtn.disabled = args.disabled;\n }\n };\n ResponsiveDialogRenderer.prototype.columnMenuResponsiveContent = function (str, locale, disabled) {\n var cDiv = this.parent.createElement('div', { className: 'e-responsivecoldiv e-responsive' + str.toLowerCase() + 'div' + (disabled ? ' e-disabled' : '') });\n var span = this.parent.createElement('span', { className: 'e-icons e-res' + str.toLowerCase() + '-icon e-btn-icon' });\n var icon = this.parent.createElement('span', { innerHTML: locale, className: 'e-rescolumn-menu e-res-header-text' });\n cDiv.appendChild(span);\n cDiv.appendChild(icon);\n this.customColumnDiv.appendChild(cDiv);\n };\n ResponsiveDialogRenderer.prototype.renderResponsiveContent = function (col, column) {\n var _this = this;\n var gObj = this.parent;\n var isColumnChooser = this.action === ResponsiveDialogAction.isColumnChooser;\n if (col || isColumnChooser) {\n this.filterParent = this.parent.createElement('div', { className: (isColumnChooser ? 'e-maincolumnchooserdiv ' : '') + 'e-mainfilterdiv e-default-filter',\n id: (isColumnChooser ? 'columchooser' : col.uid) + '-main-filter' });\n return this.filterParent;\n }\n else {\n this.customColumnDiv = gObj.createElement('div', { className: 'columndiv columnmenudiv', styles: 'width: 100%' });\n if (this.parent.showColumnMenu && this.parent.rowRenderingMode === 'Horizontal' && this.action === ResponsiveDialogAction.isColMenu) {\n this.columnMenuResponsiveContent('AutoFitAll', gObj.localeObj.getConstant('AutoFitAll'));\n this.columnMenuResponsiveContent('AutoFit', gObj.localeObj.getConstant('AutoFit'));\n if (column.allowGrouping && gObj.allowGrouping) {\n this.columnMenuResponsiveContent('Group', gObj.localeObj.getConstant('Group'), gObj.groupSettings.columns.indexOf(column.field) >= 0);\n this.columnMenuResponsiveContent('UnGroup', gObj.localeObj.getConstant('Ungroup'), gObj.groupSettings.columns.indexOf(column.field) < 0);\n }\n if (column.allowSorting && gObj.allowSorting) {\n var direction = 'None';\n var sortColumns = this.parent.sortSettings.columns;\n for (var i = 0; i < sortColumns.length; i++) {\n if (sortColumns[parseInt(i.toString(), 10)].field === column.field) {\n direction = sortColumns[parseInt(i.toString(), 10)].direction;\n break;\n }\n }\n this.columnMenuResponsiveContent('ascending', gObj.localeObj.getConstant('SortAscending'), direction === 'Ascending');\n this.columnMenuResponsiveContent('descending', gObj.localeObj.getConstant('SortDescending'), direction === 'Descending');\n }\n if (gObj.showColumnChooser) {\n this.columnMenuResponsiveContent('Column', gObj.localeObj.getConstant('Columnchooser'));\n }\n if (column.allowFiltering && gObj.allowFiltering) {\n this.columnMenuResponsiveContent('Filter', gObj.localeObj.getConstant('FilterMenu'));\n }\n }\n else {\n var cols = gObj.getColumns();\n var sortBtnParent = gObj.createElement('div', { className: 'e-ressortbutton-parent' });\n var filteredCols = [];\n var isSort = this.action === ResponsiveDialogAction.isSort;\n var isFilter = this.action === ResponsiveDialogAction.isFilter;\n if (isFilter) {\n for (var i = 0; i < gObj.filterSettings.columns.length; i++) {\n filteredCols.push(gObj.filterSettings.columns[parseInt(i.toString(), 10)].field);\n }\n }\n for (var i = 0; i < cols.length; i++) {\n if (!cols[parseInt(i.toString(), 10)].visible || (!cols[parseInt(i.toString(), 10)].allowSorting && isSort)\n || (!cols[parseInt(i.toString(), 10)].allowFiltering && isFilter)) {\n continue;\n }\n var cDiv = gObj.createElement('div', { className: 'e-responsivecoldiv' });\n cDiv.setAttribute('data-e-mappingname', cols[parseInt(i.toString(), 10)].field);\n cDiv.setAttribute('data-e-mappinguid', cols[parseInt(i.toString(), 10)].uid);\n var span = gObj.createElement('span', { innerHTML: cols[parseInt(i.toString(), 10)].headerText, className: 'e-res-header-text' });\n cDiv.appendChild(span);\n this.customColumnDiv.appendChild(cDiv);\n if (isSort) {\n var fields = this.getSortedFieldsAndDirections('field');\n var index = fields.indexOf(cols[parseInt(i.toString(), 10)].field);\n var button = gObj.createElement('button', { id: gObj.element.id + cols[parseInt(i.toString(), 10)].field + 'sortbutton' });\n var clone = sortBtnParent.cloneNode();\n clone.appendChild(button);\n cDiv.appendChild(clone);\n var btnObj = new Button({\n cssClass: this.parent.cssClass ? 'e-ressortbutton' + ' ' + this.parent.cssClass : 'e-ressortbutton'\n });\n btnObj.appendTo(button);\n var buttonInnerText = void 0;\n if ((!isNullOrUndefined(this.parent.sortSettings.columns[parseInt(index.toString(), 10)]))) {\n buttonInnerText = (this.parent.sortSettings.columns[parseInt(index.toString(), 10)].direction === 'Ascending') ?\n this.parent.localeObj.getConstant('AscendingText') : this.parent.localeObj.getConstant('DescendingText');\n }\n button.innerHTML = index > -1 ? buttonInnerText : this.parent.localeObj.getConstant('NoneText');\n button.onclick = function (e) {\n _this.sortButtonClickHandler(e.target);\n };\n }\n if (isFilter && filteredCols.indexOf(cols[parseInt(i.toString(), 10)].field) > -1) {\n var divIcon = gObj.createElement('div', { className: 'e-icons e-res-icon e-filtersetdiv' });\n var iconSpan = gObj.createElement('span', { className: 'e-icons e-res-icon e-filterset' });\n iconSpan.setAttribute('colType', cols[parseInt(i.toString(), 10)].type);\n divIcon.appendChild(iconSpan);\n cDiv.appendChild(divIcon);\n }\n }\n }\n EventHandler.add(this.customColumnDiv, Browser.isDevice ? 'touchend' : 'click', this.customFilterColumnClickHandler, this);\n return this.customColumnDiv;\n }\n };\n ResponsiveDialogRenderer.prototype.getSortedFieldsAndDirections = function (name) {\n var fields = [];\n for (var i = 0; i < this.parent.sortSettings.columns.length; i++) {\n fields.push(this.parent.sortSettings.columns[parseInt(i.toString(), 10)][\"\" + name]);\n }\n return fields;\n };\n ResponsiveDialogRenderer.prototype.sortButtonClickHandler = function (target) {\n if (target) {\n var columndiv = parentsUntil(target, 'e-responsivecoldiv');\n var field = columndiv.getAttribute('data-e-mappingname');\n if (!this.parent.allowMultiSorting) {\n this.sortPredicate = [];\n this.sortedCols = [];\n this.isSortApplied = false;\n this.resetSortButtons(target);\n }\n var txt = target.textContent;\n var directionTxt = txt === this.parent.localeObj.getConstant('NoneText') ? this.parent.localeObj.getConstant('AscendingText')\n : txt === this.parent.localeObj.getConstant('AscendingText') ? this.parent.localeObj.getConstant('DescendingText')\n : this.parent.localeObj.getConstant('NoneText');\n var direction = directionTxt === this.parent.localeObj.getConstant('AscendingText') ? 'Ascending'\n : directionTxt === this.parent.localeObj.getConstant('DescendingText') ? 'Descending' : 'None';\n target.innerHTML = directionTxt;\n this.setSortedCols(field, direction);\n }\n };\n ResponsiveDialogRenderer.prototype.resetSortButtons = function (target) {\n var buttons = [].slice.call(this.customColumnDiv.getElementsByClassName('e-ressortbutton'));\n for (var i = 0; i < buttons.length; i++) {\n if (buttons[parseInt(i.toString(), 10)] !== target) {\n buttons[parseInt(i.toString(), 10)].innerHTML = 'None';\n }\n }\n };\n ResponsiveDialogRenderer.prototype.setSortedCols = function (field, direction) {\n var fields = this.getCurrentSortedFields();\n var index = fields.indexOf(field);\n if (this.parent.allowMultiSorting && index > -1) {\n this.sortedCols.splice(index, 1);\n this.sortPredicate.splice(index, 1);\n }\n this.isSortApplied = true;\n if (direction !== 'None') {\n this.sortedCols.push(field);\n this.sortPredicate.push({ field: field, direction: direction });\n }\n };\n ResponsiveDialogRenderer.prototype.getCurrentSortedFields = function () {\n var fields = [];\n for (var i = 0; i < this.sortedCols.length; i++) {\n fields.push(this.sortedCols[parseInt(i.toString(), 10)]);\n }\n return fields;\n };\n ResponsiveDialogRenderer.prototype.customFilterColumnClickHandler = function (e) {\n var gObj = this.parent;\n var target = e.target;\n if (parentsUntil(target, 'columnmenudiv') && this.action === ResponsiveDialogAction.isColMenu && !parentsUntil(target, 'e-disabled')) {\n var column = this.menuCol ? this.menuCol : this.filteredCol;\n if (parentsUntil(target, 'e-responsiveautofitalldiv')) {\n gObj.autoFitColumns([]);\n this.closeCustomFilter();\n }\n else if (parentsUntil(target, 'e-responsiveautofitdiv')) {\n gObj.autoFitColumns(column.field);\n this.closeCustomFilter();\n }\n else if (parentsUntil(target, 'e-responsivegroupdiv')) {\n gObj.groupColumn(column.field);\n this.closeCustomFilter();\n }\n else if (parentsUntil(target, 'e-responsiveungroupdiv')) {\n gObj.ungroupColumn(column.field);\n this.closeCustomFilter();\n }\n else if (parentsUntil(target, 'e-responsiveascendingdiv')) {\n gObj.sortColumn(column.field, 'Ascending');\n this.closeCustomFilter();\n }\n else if (parentsUntil(target, 'e-responsivedescendingdiv')) {\n gObj.sortColumn(column.field, 'Descending');\n this.closeCustomFilter();\n }\n else if (parentsUntil(target, 'e-responsivecolumndiv')) {\n gObj.notify(events.renderResponsiveChangeAction, { action: 5 });\n gObj.showResponsiveCustomColumnChooser();\n }\n else if (parentsUntil(target, 'e-responsivefilterdiv')) {\n gObj.notify(events.renderResponsiveChangeAction, { action: 3 });\n this.isRowResponsive = true;\n this.isCustomDialog = false;\n if (gObj.filterModule) {\n gObj.filterModule.responsiveDialogRenderer.showResponsiveDialog(column);\n }\n }\n e.preventDefault();\n }\n if (this.action !== ResponsiveDialogAction.isFilter) {\n return;\n }\n if (gObj.filterSettings.type !== 'FilterBar') {\n if (target.classList.contains('e-responsivecoldiv') || target.parentElement.classList.contains('e-responsivecoldiv')) {\n var field = target.getAttribute('data-e-mappingname');\n if (!field) {\n field = target.parentElement.getAttribute('data-e-mappingname');\n }\n if (field) {\n var col = gObj.getColumnByField(field);\n this.isRowResponsive = true;\n this.showResponsiveDialog(col);\n }\n }\n else if (target.classList.contains('e-filterset') || target.parentElement.classList.contains('e-filtersetdiv')) {\n var colDiv = parentsUntil(target, 'e-responsivecoldiv');\n if (colDiv) {\n var field = colDiv.getAttribute('data-e-mappingname');\n var col = gObj.getColumnByField(field);\n if (col.filter.type === 'Menu' || (!col.filter.type && gObj.filterSettings.type === 'Menu')) {\n this.isDialogClose = true;\n }\n this.parent.filterModule.filterModule.clearCustomFilter(col);\n this.removeCustomDlgFilterEle(target);\n }\n }\n }\n };\n /**\n * Function to show the responsive dialog\n *\n * @param {Column} col - specifies the filter column\n * @param {Column} column - specifies the menu column\n * @returns {void}\n */\n ResponsiveDialogRenderer.prototype.showResponsiveDialog = function (col, column) {\n if ((this.isCustomDialog && this.action === ResponsiveDialogAction.isFilter && !this.isRowResponsive) ||\n (column && this.action === ResponsiveDialogAction.isColMenu)) {\n this.menuCol = column;\n this.renderCustomFilterDialog(null, column);\n }\n else {\n this.filteredCol = col;\n this.renderResponsiveDialog(col);\n if (this.parent.enableAdaptiveUI && col) {\n this.parent.filterModule.setFilterModel(col);\n this.parent.filterModule.filterModule.openDialog(this.parent.filterModule.createOptions(col, undefined));\n }\n if (this.action === ResponsiveDialogAction.isColumnChooser) {\n this.parent.notify(events.renderResponsiveColumnChooserDiv, { action: 'open' });\n }\n if (this.action === ResponsiveDialogAction.isSort) {\n var args = {\n cancel: false, dialogObj: this.customResponsiveDlg, requestType: 'beforeOpenAptiveSortDialog'\n };\n this.parent.trigger(events.beforeOpenAdaptiveDialog, args);\n if (args.cancel) {\n return;\n }\n }\n this.customResponsiveDlg.show(true);\n this.customResponsiveDlg.element.style.maxHeight = '100%';\n this.setTopToChildDialog(this.customResponsiveDlg.element);\n }\n };\n ResponsiveDialogRenderer.prototype.setTopToChildDialog = function (dialogEle) {\n var child = dialogEle.querySelector('.e-dialog');\n if (child) {\n var top_1 = dialogEle.querySelector('.e-dlg-header-content').getBoundingClientRect().height;\n child.style.top = top_1 + 'px';\n }\n };\n ResponsiveDialogRenderer.prototype.renderCustomFilterDialog = function (col, column) {\n var gObj = this.parent;\n var isColMenu = this.action === ResponsiveDialogAction.isColMenu;\n if (this.action === ResponsiveDialogAction.isFilter && gObj.filterSettings.type === 'FilterBar') {\n return;\n }\n var colMenu = isColMenu ? 'e-customcolumnmenudiv ' : '';\n var outerDiv = this.parent.createElement('div', {\n id: gObj.element.id + (isColMenu ? 'customcolumnmenu' : 'customfilter'),\n className: this.parent.cssClass ? colMenu +\n 'e-customfilterdiv e-responsive-dialog ' + this.parent.cssClass : colMenu + 'e-customfilterdiv e-responsive-dialog'\n });\n this.parent.element.appendChild(outerDiv);\n this.customFilterDlg = this.getDialogOptions(col, true, null, column);\n var args = {\n cancel: false, dialogObj: this.customFilterDlg, requestType: 'beforeOpenAptiveFilterDialog'\n };\n this.parent.trigger(events.beforeOpenAdaptiveDialog, args);\n if (args.cancel) {\n return;\n }\n this.customFilterDlg.appendTo(outerDiv);\n this.customFilterDlg.show(true);\n this.customFilterDlg.element.style.maxHeight = '100%';\n };\n ResponsiveDialogRenderer.prototype.getDialogOptions = function (col, isCustomFilter, id, column) {\n var options = new Dialog({\n isModal: true,\n showCloseIcon: true,\n closeOnEscape: false,\n locale: this.parent.locale,\n target: this.parent.adaptiveDlgTarget ? this.parent.adaptiveDlgTarget : document.body,\n visible: false,\n enableRtl: this.parent.enableRtl,\n content: this.renderResponsiveContent(col, column),\n open: this.dialogOpen.bind(this),\n created: this.dialogCreated.bind(this),\n close: this.beforeDialogClose.bind(this),\n width: '100%',\n height: '100%',\n animationSettings: { effect: 'None' },\n cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n });\n var isStringTemplate = 'isStringTemplate';\n options[\"\" + isStringTemplate] = true;\n if (isCustomFilter) {\n options.header = this.renderResponsiveHeader(col, undefined, true);\n var colMenu = this.action === ResponsiveDialogAction.isColMenu ? 'e-customcolumnmenu ' : '';\n options.cssClass = colMenu + 'e-customfilter';\n }\n else {\n options.header = this.renderResponsiveHeader(col);\n options.cssClass = this.parent.rowRenderingMode === 'Vertical' && this.action === ResponsiveDialogAction.isFilter\n ? 'e-res' + id + ' e-row-responsive-filter' : 'e-res' + id;\n }\n return options;\n };\n ResponsiveDialogRenderer.prototype.renderResponsiveDialog = function (col) {\n var gObj = this.parent;\n if (this.action === ResponsiveDialogAction.isFilter && gObj.filterSettings.type === 'FilterBar') {\n return;\n }\n var id = this.action === ResponsiveDialogAction.isFilter ? 'filter' : 'sort';\n id = this.action === ResponsiveDialogAction.isColumnChooser ? 'columnchooser' : id;\n var outerDiv = this.parent.createElement('div', {\n id: gObj.element.id + 'responsive' + id,\n className: this.parent.cssClass ?\n 'e-res' + id + 'div e-responsive-dialog ' + this.parent.cssClass : 'e-res' + id + 'div e-responsive-dialog'\n });\n this.parent.element.appendChild(outerDiv);\n this.customResponsiveDlg = this.getDialogOptions(col, false, id);\n this.customResponsiveDlg.appendTo(outerDiv);\n };\n ResponsiveDialogRenderer.prototype.dialogCreated = function () {\n addBiggerDialog(this.parent);\n };\n ResponsiveDialogRenderer.prototype.dialogOpen = function () {\n if (this.action === ResponsiveDialogAction.isSort && this.parent.allowMultiSorting) {\n for (var i = 0; i < this.parent.sortSettings.columns.length; i++) {\n this.sortedCols.push(this.parent.sortSettings.columns[parseInt(i.toString(), 10)].field);\n var sortField = this.parent.sortSettings.columns[parseInt(i.toString(), 10)].field;\n var sortDirection = this.parent.sortSettings.columns[parseInt(i.toString(), 10)].direction;\n this.sortPredicate.push({ field: sortField, direction: sortDirection });\n }\n }\n };\n ResponsiveDialogRenderer.prototype.beforeDialogClose = function (args) {\n this.isDialogClose = args.element && !args.element.querySelector('.e-xl-customfilterdiv')\n && args.element.classList.contains('e-resfilterdiv');\n if (this.action === ResponsiveDialogAction.isFilter) {\n if (args.element.classList.contains('e-resfilterdiv')) {\n this.parent.filterModule.filterModule.closeResponsiveDialog(this.isCustomDlgRender);\n }\n else if (args.element.classList.contains('e-customfilterdiv')) {\n this.closeCustomFilter();\n }\n if (this.parent.rowRenderingMode === 'Horizontal' && this.parent.showColumnMenu) {\n this.parent.notify(events.renderResponsiveChangeAction, { action: 4 });\n var custom = document.querySelector('.e-resfilter');\n if (custom) {\n remove(custom);\n }\n }\n }\n else if (this.action === ResponsiveDialogAction.isSort) {\n this.closeCustomDialog();\n }\n else if (this.action === ResponsiveDialogAction.isColMenu) {\n this.closeCustomFilter();\n var custom = document.querySelector('.e-rescolummenu');\n if (custom) {\n remove(custom);\n }\n }\n else if (this.action === ResponsiveDialogAction.isColumnChooser) {\n this.parent.notify(events.renderResponsiveColumnChooserDiv, { action: 'clear' });\n var custom = document.querySelector('.e-rescolumnchooser');\n if (custom) {\n remove(custom);\n }\n if (this.parent.rowRenderingMode === 'Horizontal' && this.parent.showColumnMenu) {\n this.parent.notify(events.renderResponsiveChangeAction, { action: 4 });\n }\n this.isCustomDialog = false;\n this.isDialogClose = false;\n }\n this.parent.off(events.enterKeyHandler, this.keyHandler);\n };\n ResponsiveDialogRenderer.prototype.sortColumn = function () {\n if (!this.isSortApplied) {\n this.closeCustomDialog();\n return;\n }\n if (this.sortPredicate.length) {\n this.parent.setProperties({ sortSettings: { columns: [] } }, true);\n }\n for (var i = 0; i < this.sortPredicate.length; i++) {\n this.parent.sortColumn(this.sortPredicate[parseInt(i.toString(), 10)].field, this.sortPredicate[parseInt(i.toString(), 10)].direction, this.parent.allowMultiSorting);\n }\n if (!this.sortPredicate.length) {\n this.parent.clearSorting();\n }\n this.closeCustomDialog();\n };\n ResponsiveDialogRenderer.prototype.getHeaderTitle = function (args, col) {\n var gObj = this.parent;\n var title;\n if (this.action === ResponsiveDialogAction.isEdit) {\n title = gObj.localeObj.getConstant('EditFormTitle') + args.primaryKeyValue[0];\n }\n else if (this.action === ResponsiveDialogAction.isAdd) {\n title = gObj.localeObj.getConstant('AddFormTitle');\n }\n else if (this.action === ResponsiveDialogAction.isFilter) {\n title = col ? col.headerText || col.field : gObj.localeObj.getConstant('FilterButton');\n }\n else if (this.action === ResponsiveDialogAction.isSort) {\n title = gObj.localeObj.getConstant('Sort');\n }\n else if (this.action === ResponsiveDialogAction.isColMenu) {\n title = gObj.localeObj.getConstant('ColumnMenu');\n }\n else if (this.action === ResponsiveDialogAction.isColumnChooser) {\n title = gObj.localeObj.getConstant('ChooseColumns');\n }\n return title;\n };\n ResponsiveDialogRenderer.prototype.getDialogName = function (action) {\n var name;\n if (action === ResponsiveDialogAction.isAdd || action === ResponsiveDialogAction.isEdit) {\n name = 'dialogEdit_wrapper_title';\n }\n else if (action === ResponsiveDialogAction.isFilter) {\n name = 'responsive_filter_dialog_wrapper';\n }\n else if (action === ResponsiveDialogAction.isColumnChooser) {\n name = 'responsive_column_chooser_dialog_wrapper';\n }\n return name;\n };\n ResponsiveDialogRenderer.prototype.getButtonText = function (action) {\n var text;\n if (action === ResponsiveDialogAction.isAdd || action === ResponsiveDialogAction.isEdit) {\n text = 'Save';\n }\n else if (action === ResponsiveDialogAction.isFilter || this.action === ResponsiveDialogAction.isSort ||\n action === ResponsiveDialogAction.isColumnChooser || this.action === ResponsiveDialogAction.isColumnChooser) {\n text = 'OKButton';\n }\n return text;\n };\n /**\n * Function to render the responsive header\n *\n * @param {Column} col - specifies the column\n * @param {ResponsiveDialogArgs} args - specifies the responsive dialog arguments\n * @param {boolean} isCustomFilter - specifies whether it is custom filter or not\n * @returns {HTMLElement | string} returns the html element or string\n */\n ResponsiveDialogRenderer.prototype.renderResponsiveHeader = function (col, args, isCustomFilter) {\n var _this = this;\n var gObj = this.parent;\n gObj.on(events.enterKeyHandler, this.keyHandler, this);\n var id = gObj.element.id + this.getDialogName(this.action);\n var header = gObj.createElement('div', { className: 'e-res-custom-element' });\n var titleDiv = gObj.createElement('div', { className: 'e-dlg-custom-header', id: id });\n titleDiv.innerHTML = this.getHeaderTitle(args, col);\n header.appendChild(titleDiv);\n var saveBtn = gObj.createElement('button');\n if (!isCustomFilter) {\n this.saveBtn = new Button({\n cssClass: this.parent.cssClass ?\n 'e-primary e-flat e-res-apply-btn' + ' ' + this.parent.cssClass : 'e-primary e-flat e-res-apply-btn'\n });\n saveBtn.innerHTML = gObj.localeObj.getConstant(this.getButtonText(this.action));\n this.saveBtn.appendTo(saveBtn);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n saveBtn.onclick = function (e) {\n _this.dialogHdrBtnClickHandler();\n };\n }\n var isSort = this.action === ResponsiveDialogAction.isSort;\n var isFilter = this.action === ResponsiveDialogAction.isFilter;\n if (isFilter || isSort) {\n var id_1 = isSort ? 'sort' : 'filter';\n var clearBtn = gObj.createElement('button');\n this.filterClearBtn = new Button({\n cssClass: this.parent.cssClass ? 'e-primary e-flat e-res-' + id_1 + '-clear-btn' + ' ' + this.parent.cssClass\n : 'e-primary e-flat e-res-' + id_1 + '-clear-btn'\n });\n if (isFilter) {\n var span = gObj.createElement('span', { className: 'e-btn-icon e-icon-filter-clear e-icons' });\n clearBtn.appendChild(span);\n }\n else {\n clearBtn.innerHTML = gObj.localeObj.getConstant('Clear');\n }\n header.appendChild(clearBtn);\n this.filterClearBtn.appendTo(clearBtn);\n clearBtn.onclick = function (e) {\n if ((parentsUntil(e.target, 'e-customfilter'))) {\n _this.parent.filterModule.clearFiltering();\n _this.removeCustomDlgFilterEle();\n }\n else {\n if (isFilter) {\n _this.filterClear();\n }\n else {\n _this.resetSortButtons();\n _this.sortedCols = [];\n _this.sortPredicate = [];\n _this.isSortApplied = true;\n }\n }\n };\n header.appendChild(clearBtn);\n }\n if (!isCustomFilter) {\n header.appendChild(saveBtn);\n }\n return header;\n };\n ResponsiveDialogRenderer.prototype.filterClear = function () {\n this.parent.filterModule.filterModule.clearCustomFilter(this.filteredCol);\n this.parent.filterModule.filterModule.closeResponsiveDialog();\n };\n ResponsiveDialogRenderer.prototype.removeCustomFilterElement = function () {\n var elem = document.getElementById(this.parent.element.id + 'customcolumnmenu');\n if (elem) {\n remove(elem);\n var custom = document.querySelector('.e-customfilter');\n if (custom) {\n remove(custom);\n }\n }\n var custommenu = document.querySelector('.e-rescolumnchooser');\n if (custommenu) {\n remove(custommenu);\n }\n };\n ResponsiveDialogRenderer.prototype.dialogHdrBtnClickHandler = function () {\n if (this.action === ResponsiveDialogAction.isEdit || this.action === ResponsiveDialogAction.isAdd) {\n this.parent.endEdit();\n }\n else if (this.action === ResponsiveDialogAction.isFilter) {\n this.parent.filterModule.filterModule.applyCustomFilter({ col: this.filteredCol, isCustomFilter: this.isCustomDlgRender });\n this.removeCustomFilterElement();\n }\n else if (this.action === ResponsiveDialogAction.isSort) {\n this.sortColumn();\n this.removeCustomFilterElement();\n }\n else if (this.action === ResponsiveDialogAction.isColumnChooser) {\n this.parent.notify(events.renderResponsiveColumnChooserDiv, { action: 'confirm' });\n this.removeCustomFilterElement();\n this.isCustomDialog = false;\n this.isDialogClose = false;\n }\n };\n ResponsiveDialogRenderer.prototype.closeCustomDialog = function () {\n if (this.isCustomDlgRender) {\n var mainfilterdiv = this.customResponsiveDlg.element.querySelector('.e-mainfilterdiv');\n remove(mainfilterdiv);\n return;\n }\n this.isRowResponsive = false;\n this.isCustomDlgRender = false;\n this.destroyCustomFilterDialog();\n };\n ResponsiveDialogRenderer.prototype.destroyCustomFilterDialog = function () {\n if (!this.customResponsiveDlg) {\n return;\n }\n var elem = document.getElementById(this.customResponsiveDlg.element.id);\n if (this.customResponsiveDlg && !this.customResponsiveDlg.isDestroyed && elem) {\n this.customResponsiveDlg.destroy();\n remove(elem);\n }\n this.closeCustomFilter();\n if (this.action === ResponsiveDialogAction.isSort) {\n this.sortPredicate = [];\n this.sortedCols = [];\n this.isSortApplied = false;\n }\n };\n ResponsiveDialogRenderer.prototype.closeCustomFilter = function () {\n if (!this.isDialogClose && this.customFilterDlg) {\n var customEle = document.getElementById(this.customFilterDlg.element.id);\n if (this.customFilterDlg && !this.customFilterDlg.isDestroyed && customEle) {\n this.customFilterDlg.destroy();\n remove(customEle);\n }\n }\n this.isCustomDialog = false;\n this.isDialogClose = false;\n };\n ResponsiveDialogRenderer.prototype.removeCustomDlgFilterEle = function (target) {\n if (target) {\n if (target.parentElement.classList.contains('e-filtersetdiv')) {\n remove(target.parentElement);\n }\n else {\n remove(target);\n }\n }\n else {\n var child = this.customColumnDiv.children;\n for (var i = 0; i < child.length; i++) {\n target = child[parseInt(i.toString(), 10)].querySelector('.e-filtersetdiv');\n if (target) {\n remove(target);\n i--;\n }\n }\n }\n };\n ResponsiveDialogRenderer.prototype.keyHandler = function (e) {\n if (e.keyCode === 13 && ((this.action === ResponsiveDialogAction.isFilter\n && e.target.classList.contains('e-searchinput'))\n || (this.action === ResponsiveDialogAction.isEdit || this.action === ResponsiveDialogAction.isAdd))) {\n this.dialogHdrBtnClickHandler();\n }\n };\n ResponsiveDialogRenderer.prototype.editComplate = function (args) {\n if (args.requestType === 'save' || args.requestType === 'cancel') {\n this.parent.off(events.enterKeyHandler, this.keyHandler);\n }\n };\n ResponsiveDialogRenderer.prototype.removeEventListener = function () {\n if (this.customColumnDiv) {\n EventHandler.remove(this.customColumnDiv, Browser.isDevice ? 'touchend' : 'click', this.customFilterColumnClickHandler);\n }\n addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n this.parent.removeEventListener(events.actionComplete, this.onActionCompleteFn);\n };\n return ResponsiveDialogRenderer;\n}());\nexport { ResponsiveDialogRenderer };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { attributes, createElement, classList, append } from '@syncfusion/ej2-base';\n/**\n * `NumericContainer` module handles rendering and refreshing numeric container.\n */\nvar NumericContainer = /** @class */ (function () {\n /**\n * Constructor for numericContainer module\n *\n * @param {Pager} pagerModule - specifies the pagerModule\n * @hidden\n */\n function NumericContainer(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * The function is used to render numericContainer\n *\n * @returns {void}\n * @hidden\n */\n NumericContainer.prototype.render = function () {\n this.pagerElement = this.pagerModule.element;\n this.renderNumericContainer();\n this.refreshNumericLinks();\n this.wireEvents();\n };\n /**\n * Refreshes the numeric container of Pager.\n *\n * @returns {void}\n */\n NumericContainer.prototype.refresh = function () {\n this.pagerModule.updateTotalPages();\n if (this.links.length) {\n this.updateLinksHtml();\n }\n this.refreshAriaAttrLabel();\n this.updateStyles();\n };\n /**\n * The function is used to refresh refreshNumericLinks\n *\n * @returns {void}\n * @hidden\n */\n NumericContainer.prototype.refreshNumericLinks = function () {\n var link;\n var pagerObj = this.pagerModule;\n var div = pagerObj.element.querySelector('.e-numericcontainer');\n var frag = document.createDocumentFragment();\n div.innerHTML = '';\n for (var i = 1; i <= pagerObj.pageCount; i++) {\n link = createElement('a', {\n className: 'e-link e-numericitem e-spacing e-pager-default',\n attrs: { tabindex: '-1', 'aria-label': pagerObj.getLocalizedLabel('Page') + i + pagerObj.getLocalizedLabel('Of') +\n pagerObj.totalPages + pagerObj.getLocalizedLabel('Pages'), href: '#' }\n });\n if (pagerObj.currentPage === i) {\n classList(link, ['e-currentitem', 'e-active'], ['e-pager-default']);\n link.setAttribute('aria-current', 'page');\n }\n frag.appendChild(link);\n }\n div.appendChild(frag);\n this.links = [].slice.call(div.childNodes);\n };\n /**\n * Binding events to the element while component creation\n *\n * @returns {void}\n * @hidden\n */\n NumericContainer.prototype.wireEvents = function () {\n EventHandler.add(this.pagerElement, 'click', this.clickHandler, this);\n EventHandler.add(this.pagerElement, 'auxclick', this.auxiliaryClickHandler, this);\n };\n /**\n * Unbinding events from the element while component destroy\n *\n * @returns {void}\n * @hidden\n */\n NumericContainer.prototype.unwireEvents = function () {\n EventHandler.remove(this.pagerModule.element, 'click', this.clickHandler);\n EventHandler.remove(this.pagerModule.element, 'auxclick', this.auxiliaryClickHandler);\n };\n /**\n * To destroy the PagerMessage\n *\n * @function destroy\n * @returns {void}\n * @hidden\n */\n NumericContainer.prototype.destroy = function () {\n this.unwireEvents();\n };\n NumericContainer.prototype.refreshAriaAttrLabel = function () {\n var pagerObj = this.pagerModule;\n var numericContainer = pagerObj.element.querySelector('.e-numericcontainer');\n var links = numericContainer.querySelectorAll('a');\n for (var i = 0; i < links.length; i++) {\n if (links[parseInt(i.toString(), 10)].hasAttribute('aria-label') && links[parseInt(i.toString(), 10)].hasAttribute('index')) {\n links[parseInt(i.toString(), 10)].setAttribute('aria-label', pagerObj.getLocalizedLabel('Page') + links[parseInt(i.toString(), 10)].getAttribute('index')\n + pagerObj.getLocalizedLabel('Of') + pagerObj.totalPages + pagerObj.getLocalizedLabel('Pages'));\n }\n }\n };\n NumericContainer.prototype.renderNumericContainer = function () {\n this.element = createElement('div', {\n className: 'e-pagercontainer', attrs: { 'role': 'navigation' }\n });\n this.renderFirstNPrev(this.element);\n this.renderPrevPagerSet(this.element);\n this.element.appendChild(createElement('div', { className: 'e-numericcontainer' }));\n this.renderNextPagerSet(this.element);\n this.renderNextNLast(this.element);\n this.pagerModule.element.appendChild(this.element);\n };\n NumericContainer.prototype.renderFirstNPrev = function (pagerContainer) {\n this.first = createElement('div', {\n className: 'e-first e-icons e-icon-first',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('firstPageTooltip'),\n tabindex: '-1', role: 'button'\n }\n });\n this.prev = createElement('div', {\n className: 'e-prev e-icons e-icon-prev',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('previousPageTooltip'),\n tabindex: '-1', role: 'button'\n }\n });\n append([this.first, this.prev], pagerContainer);\n };\n NumericContainer.prototype.renderPrevPagerSet = function (pagerContainer) {\n var prevPager = createElement('div');\n this.PP = createElement('a', {\n className: 'e-link e-pp e-spacing', innerHTML: '...',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n tabindex: '-1',\n href: '#'\n }\n });\n prevPager.appendChild(this.PP);\n pagerContainer.appendChild(prevPager);\n };\n NumericContainer.prototype.renderNextPagerSet = function (pagerContainer) {\n var nextPager = createElement('div');\n this.NP = createElement('a', {\n className: 'e-link e-np e-spacing',\n innerHTML: '...', attrs: {\n title: this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n tabindex: '-1',\n href: '#'\n }\n });\n nextPager.appendChild(this.NP);\n pagerContainer.appendChild(nextPager);\n };\n NumericContainer.prototype.renderNextNLast = function (pagerContainer) {\n this.next = createElement('div', {\n className: 'e-next e-icons e-icon-next',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('nextPageTooltip'),\n tabindex: '-1', role: 'button'\n }\n });\n this.last = createElement('div', {\n className: 'e-last e-icons e-icon-last',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('lastPageTooltip'),\n tabindex: '-1', role: 'button'\n }\n });\n append([this.next, this.last], pagerContainer);\n };\n NumericContainer.prototype.clickHandler = function (e) {\n var pagerObj = this.pagerModule;\n this.target = e.target;\n if (this.target.classList.contains('e-numericitem')) {\n e.preventDefault();\n }\n pagerObj.previousPageNo = pagerObj.currentPage;\n if (!this.target.classList.contains('e-disable') && !isNullOrUndefined(this.target.getAttribute('index'))) {\n pagerObj.currentPage = parseInt(this.target.getAttribute('index'), 10);\n pagerObj.dataBind();\n }\n return false;\n };\n NumericContainer.prototype.auxiliaryClickHandler = function (e) {\n this.target = e.target;\n if (this.target.classList.contains('e-numericitem') && (e.button === 1)) {\n e.preventDefault();\n }\n };\n NumericContainer.prototype.updateLinksHtml = function () {\n var pagerObj = this.pagerModule;\n var currentPageSet;\n var isLastSet;\n var pageNo;\n var numItems = this.pagerElement.querySelectorAll('.e-numericitem:not(.e-hide):not([style*=\"display: none\"]):not(.e-np):not(.e-pp)');\n pagerObj.currentPage = pagerObj.totalPages === 1 ? 1 : pagerObj.currentPage;\n if (pagerObj.currentPage > pagerObj.totalPages && pagerObj.totalPages) {\n pagerObj.currentPage = pagerObj.totalPages;\n }\n currentPageSet = parseInt((pagerObj.currentPage / pagerObj.pageCount).toString(), 10);\n if (pagerObj.currentPage % pagerObj.pageCount === 0 && currentPageSet > 0) {\n currentPageSet = currentPageSet - 1;\n }\n for (var i = 0; i < pagerObj.pageCount; i++) {\n if (pagerObj.isPagerResized) {\n var focusedItem = this.pagerElement.querySelector('.e-focus');\n var focusedorTarget = this.target ? this.target : focusedItem ? focusedItem : null;\n var prevFocused = false;\n var nextFocused = false;\n var firstFocused = false;\n var lastFocused = false;\n var numItemFocused = false;\n var npFocused = false;\n var ppFocused = false;\n if (focusedorTarget) {\n var classList_1 = focusedorTarget.classList;\n if (classList_1.contains('e-icons')) {\n switch (true) {\n case classList_1.contains('e-prev'):\n prevFocused = true;\n break;\n case classList_1.contains('e-next'):\n nextFocused = true;\n break;\n case classList_1.contains('e-first'):\n firstFocused = true;\n break;\n case classList_1.contains('e-last'):\n lastFocused = true;\n break;\n }\n }\n else if (classList_1.contains('e-numericitem')) {\n switch (true) {\n case classList_1.contains('e-np'):\n npFocused = true;\n break;\n case classList_1.contains('e-pp'):\n ppFocused = true;\n break;\n default:\n numItemFocused = classList_1.contains('e-numericitem');\n break;\n }\n }\n }\n isLastSet = lastFocused || (this.pagerModule.keyAction === 'End');\n numItems = this.pagerElement.querySelectorAll('.e-numericitem:not(.e-hide):not([style*=\"display: none\"]):not(.e-np):not(.e-pp)');\n var isPageAvailable = Array.from(numItems).some(function (item) { return parseInt(item.getAttribute('index'), 10) === pagerObj.currentPage; });\n //Setting pageNo to render based on key action or click action.\n if (firstFocused || this.pagerModule.keyAction === 'Home') {\n pageNo = 1 + i;\n }\n else if (lastFocused || this.pagerModule.keyAction === 'End') {\n pageNo = (currentPageSet * pagerObj.pageCount) + 1 + i;\n }\n else if (nextFocused || this.pagerModule.keyAction === 'ArrowRight' || prevFocused || this.pagerModule.keyAction === 'ArrowLeft') {\n if (isPageAvailable) {\n pageNo = parseInt(numItems[0].getAttribute('index'), 10) + i;\n }\n else if (prevFocused || this.pagerModule.keyAction === 'ArrowLeft') {\n pageNo = parseInt(this.PP.getAttribute('index'), 10) + i;\n }\n else {\n pageNo = pagerObj.currentPage + i;\n }\n }\n else if (npFocused || ppFocused) {\n pageNo = pagerObj.currentPage + i;\n }\n else if (numItemFocused) {\n pageNo = (parseInt(numItems[0].getAttribute('index'), 10) + i);\n }\n else {\n pageNo = (currentPageSet * pagerObj.pageCount) + 1 + i;\n }\n }\n else {\n pageNo = (currentPageSet * pagerObj.pageCount) + 1 + i;\n }\n if (pageNo <= pagerObj.totalPages) {\n this.links[parseInt(i.toString(), 10)].classList.remove('e-hide');\n this.links[parseInt(i.toString(), 10)].style.display = '';\n this.links[parseInt(i.toString(), 10)].setAttribute('index', pageNo.toString());\n this.links[parseInt(i.toString(), 10)].innerHTML = !pagerObj.customText ? pageNo.toString() : pagerObj.customText + pageNo;\n if (pagerObj.currentPage !== pageNo) {\n this.links[parseInt(i.toString(), 10)].classList.add('e-pager-default');\n }\n else {\n this.links[parseInt(i.toString(), 10)].classList.remove('e-pager-default');\n }\n }\n else {\n this.links[parseInt(i.toString(), 10)].innerHTML = !pagerObj.customText ? pageNo.toString() : pagerObj.customText + pageNo;\n this.links[parseInt(i.toString(), 10)].style.display = 'none';\n }\n classList(this.links[parseInt(i.toString(), 10)], [], ['e-currentitem', 'e-active']);\n this.links[parseInt(i.toString(), 10)].removeAttribute('aria-current');\n }\n attributes(this.first, {\n 'index': '1',\n 'title': this.pagerModule.getLocalizedLabel('firstPageTooltip'),\n });\n attributes(this.pagerElement.querySelector('.e-mfirst'), {\n 'index': '1',\n 'title': this.pagerModule.getLocalizedLabel('firstPageTooltip'),\n });\n attributes(this.last, {\n 'index': pagerObj.totalPages.toString(),\n 'title': this.pagerModule.getLocalizedLabel('lastPageTooltip'),\n });\n attributes(this.pagerElement.querySelector('.e-mlast'), {\n 'index': pagerObj.totalPages.toString(),\n 'title': this.pagerModule.getLocalizedLabel('lastPageTooltip'),\n });\n attributes(this.prev, {\n 'index': (pagerObj.currentPage - 1).toString(),\n 'title': this.pagerModule.getLocalizedLabel('previousPageTooltip'),\n });\n attributes(this.pagerElement.querySelector('.e-mprev'), {\n 'index': (pagerObj.currentPage - 1).toString(),\n 'title': this.pagerModule.getLocalizedLabel('previousPageTooltip'),\n });\n attributes(this.next, {\n 'index': (pagerObj.currentPage + 1).toString(),\n 'title': this.pagerModule.getLocalizedLabel('nextPageTooltip'),\n });\n attributes(this.pagerElement.querySelector('.e-mnext'), {\n 'index': (pagerObj.currentPage + 1).toString(),\n 'title': this.pagerModule.getLocalizedLabel('nextPageTooltip'),\n });\n var ppIndex = (this.pagerModule.isPagerResized && numItems.length)\n ? isLastSet\n ? parseInt(numItems[0].getAttribute('index'), 10) - pagerObj.avgNumItems\n : parseInt(numItems[0].getAttribute('index'), 10) - numItems.length\n : parseInt(this.links[0].getAttribute('index'), 10) - pagerObj.pageCount;\n attributes(this.PP, {\n 'index': ((ppIndex < 1) ? '1' : ppIndex.toString()),\n 'title': this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('previousPagerTooltip')\n });\n var NPIndex = (this.pagerModule.isPagerResized && numItems.length)\n ? parseInt(numItems[numItems.length - 1].getAttribute('index'), 10)\n : parseInt(this.links[this.links.length - 1].getAttribute('index'), 10);\n attributes(this.NP, {\n 'index': (NPIndex + 1).toString(),\n 'title': this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('nextPagerTooltip')\n });\n this.target = undefined;\n };\n NumericContainer.prototype.updateStyles = function () {\n var _this = this;\n this.updateFirstNPrevStyles();\n this.updatePrevPagerSetStyles();\n this.updateNextPagerSetStyles();\n this.updateNextNLastStyles();\n if (this.links.length) {\n var currentPageIndex = this.links.findIndex(function (link) { return link.getAttribute('index') === _this.pagerModule.currentPage.toString(); });\n var currentPage = (this.pagerModule.isPagerResized && currentPageIndex !== -1) ? currentPageIndex\n : ((this.pagerModule.currentPage - 1) % this.pagerModule.pageCount);\n classList(this.links[parseInt(currentPage.toString(), 10)], ['e-currentitem', 'e-active'], []);\n this.links[parseInt(currentPage.toString(), 10)].setAttribute('aria-current', 'page');\n }\n };\n NumericContainer.prototype.updateFirstNPrevStyles = function () {\n var firstPage = ['e-firstpage', 'e-pager-default'];\n var firstPageDisabled = ['e-firstpagedisabled', 'e-disable'];\n var prevPage = ['e-prevpage', 'e-pager-default'];\n var prevPageDisabled = ['e-prevpagedisabled', 'e-disable'];\n if (this.pagerModule.totalPages > 0 && this.pagerModule.currentPage > 1) {\n classList(this.prev, prevPage, prevPageDisabled);\n classList(this.first, firstPage, firstPageDisabled);\n classList(this.pagerElement.querySelector('.e-mfirst'), firstPage, firstPageDisabled);\n classList(this.pagerElement.querySelector('.e-mprev'), prevPage, prevPageDisabled);\n }\n else {\n classList(this.prev, prevPageDisabled, prevPage);\n classList(this.first, firstPageDisabled, firstPage);\n classList(this.pagerElement.querySelector('.e-mprev'), prevPageDisabled, prevPage);\n classList(this.pagerElement.querySelector('.e-mfirst'), firstPageDisabled, firstPage);\n }\n };\n NumericContainer.prototype.updatePrevPagerSetStyles = function () {\n if (this.pagerModule.currentPage > this.pagerModule.pageCount || (this.pagerModule.isPagerResized\n && this.links.findIndex(function (link) { return parseInt(link.getAttribute('index'), 10) === 1; }))) {\n classList(this.PP, ['e-numericitem', 'e-pager-default'], ['e-nextprevitemdisabled', 'e-disable']);\n }\n else {\n classList(this.PP, ['e-nextprevitemdisabled', 'e-disable'], ['e-numericitem', 'e-pager-default']);\n }\n };\n NumericContainer.prototype.updateNextPagerSetStyles = function () {\n var pagerObj = this.pagerModule;\n var firstPage = this.links[0].innerHTML.replace(pagerObj.customText, '');\n var numItems = this.pagerElement.querySelectorAll('.e-numericitem:not(.e-hide):not([style*=\"display: none\"]):not(.e-np):not(.e-pp)');\n if (!firstPage.length || !this.links.length || (parseInt(firstPage, 10) + pagerObj.pageCount > pagerObj.totalPages)\n || (pagerObj.isPagerResized && Array.from(numItems).some(function (item) { return parseInt(item.getAttribute('index'), 10) === pagerObj.totalPages; }))) {\n classList(this.NP, ['e-nextprevitemdisabled', 'e-disable'], ['e-numericitem', 'e-pager-default']);\n }\n else {\n classList(this.NP, ['e-numericitem', 'e-pager-default'], ['e-nextprevitemdisabled', 'e-disable']);\n }\n };\n NumericContainer.prototype.updateNextNLastStyles = function () {\n var lastPage = ['e-lastpage', 'e-pager-default'];\n var lastPageDisabled = ['e-lastpagedisabled', 'e-disable'];\n var nextPage = ['e-nextpage', 'e-pager-default'];\n var nextPageDisabled = ['e-nextpagedisabled', 'e-disable'];\n var pagerObj = this.pagerModule;\n if (pagerObj.currentPage === pagerObj.totalPages || pagerObj.totalRecordsCount === 0) {\n classList(this.last, lastPageDisabled, lastPage);\n classList(this.next, nextPageDisabled, nextPage);\n classList(this.pagerElement.querySelector('.e-mlast'), lastPageDisabled, lastPage);\n classList(this.pagerElement.querySelector('.e-mnext'), nextPageDisabled, nextPage);\n }\n else {\n classList(this.last, lastPage, lastPageDisabled);\n classList(this.next, nextPage, nextPageDisabled);\n classList(this.pagerElement.querySelector('.e-mlast'), lastPage, lastPageDisabled);\n classList(this.pagerElement.querySelector('.e-mnext'), nextPage, nextPageDisabled);\n }\n };\n return NumericContainer;\n}());\nexport { NumericContainer };\n","import { createElement, append } from '@syncfusion/ej2-base';\n/**\n * `PagerMessage` module is used to display pager information.\n */\nvar PagerMessage = /** @class */ (function () {\n /**\n * Constructor for externalMessage module\n *\n * @param {Pager} pagerModule - specifies the pager Module\n * @hidden\n */\n function PagerMessage(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * The function is used to render pager message\n *\n * @returns {void}\n * @hidden\n */\n PagerMessage.prototype.render = function () {\n var div = createElement('div', { className: 'e-parentmsgbar' });\n this.pageNoMsgElem = createElement('span', { className: 'e-pagenomsg', styles: 'textalign:right' });\n this.pageCountMsgElem = createElement('span', { className: 'e-pagecountmsg', styles: 'textalign:right' });\n append([this.pageNoMsgElem, this.pageCountMsgElem], div);\n this.pagerModule.element.appendChild(div);\n this.refresh();\n };\n /**\n * Refreshes the pager information.\n *\n * @returns {void}\n */\n PagerMessage.prototype.refresh = function () {\n var pagerObj = this.pagerModule;\n this.pageNoMsgElem.textContent = this.format(pagerObj.getLocalizedLabel('currentPageInfo'), [pagerObj.totalRecordsCount === 0 ? 0 :\n pagerObj.currentPage, pagerObj.totalPages || 0, pagerObj.totalRecordsCount || 0]) + ' ';\n this.pageCountMsgElem.textContent = this.format(pagerObj.getLocalizedLabel(pagerObj.totalRecordsCount <= 1 ? 'totalItemInfo' : 'totalItemsInfo'), [pagerObj.totalRecordsCount || 0, pagerObj.totalRecordsCount ? (pagerObj.pageSize * (pagerObj.currentPage - 1)) + 1 : 0,\n pagerObj.pageSize * pagerObj.currentPage > pagerObj.totalRecordsCount ? pagerObj.totalRecordsCount :\n pagerObj.pageSize * pagerObj.currentPage]);\n this.pageNoMsgElem.parentElement.classList.remove('e-hide');\n };\n /**\n * Hides the Pager information.\n *\n * @returns {void}\n */\n PagerMessage.prototype.hideMessage = function () {\n if (this.pageNoMsgElem) {\n this.pageNoMsgElem.style.display = 'none';\n }\n if (this.pageCountMsgElem) {\n this.pageCountMsgElem.style.display = 'none';\n }\n };\n /**\n * Shows the Pager information.\n *\n * @returns {void}\n */\n PagerMessage.prototype.showMessage = function () {\n if (!this.pageNoMsgElem) {\n this.render();\n }\n this.pageNoMsgElem.style.display = '';\n this.pageCountMsgElem.style.display = '';\n };\n /**\n * To destroy the PagerMessage\n *\n * @function destroy\n * @returns {void}\n * @hidden\n */\n PagerMessage.prototype.destroy = function () {\n //destroy\n };\n /**\n * To format the PagerMessage\n *\n * @function format\n * @returns {string}\n * @hidden\n */\n PagerMessage.prototype.format = function (str, args) {\n var regx;\n for (var i = 0; i < args.length; i++) {\n // eslint-disable-next-line security/detect-non-literal-regexp\n regx = new RegExp('\\\\{' + (i) + '\\\\}', 'gm');\n str = str.replace(regx, args[parseInt(i.toString(), 10)].toString());\n }\n return str;\n };\n return PagerMessage;\n}());\nexport { PagerMessage };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, L10n, Browser, addClass, removeClass, classList } from '@syncfusion/ej2-base';\nimport { createElement, compile as templateCompiler, EventHandler, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Property, Event, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { NumericContainer } from './numeric-container';\nimport { PagerMessage } from './pager-message';\nimport { appendChildren, parentsUntil } from '../grid/base/util';\nimport * as events from '../grid/base/constant';\n/**\n * Represents the `Pager` component.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Pager = /** @class */ (function (_super) {\n __extends(Pager, _super);\n /**\n * Constructor for creating the component.\n *\n * @param {PagerModel} options - specifies the options\n * @param {string} element - specifies the element\n * @param {string} parent - specifies the pager parent\n * @hidden\n */\n function Pager(options, element, parent) {\n var _this = _super.call(this, options, element) || this;\n /** @hidden */\n _this.hasParent = false;\n _this.checkAll = true;\n _this.pageRefresh = 'pager-refresh';\n _this.firstPagerFocus = false;\n /** @hidden */\n _this.isCancel = false;\n _this.parent = parent;\n return _this;\n }\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} returns the modules declaration\n * @hidden\n */\n Pager.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableExternalMessage) {\n modules.push({\n member: 'externalMessage',\n args: [this]\n });\n }\n if (this.checkpagesizes()) {\n modules.push({\n member: 'pagerdropdown',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @hidden\n */\n Pager.prototype.preRender = function () {\n //preRender\n this.defaultConstants = {\n currentPageInfo: '{0} of {1} pages',\n totalItemsInfo: '({0} items)',\n totalItemInfo: '({0} item)',\n firstPageTooltip: 'Go to first page',\n lastPageTooltip: 'Go to last page',\n nextPageTooltip: 'Go to next page',\n previousPageTooltip: 'Go to previous page',\n nextPagerTooltip: 'Go to next pager items',\n previousPagerTooltip: 'Go to previous pager items',\n pagerDropDown: 'Items per page',\n pagerAllDropDown: 'Items',\n CurrentPageInfo: '{0} of {1} pages',\n TotalItemsInfo: '({0} items)',\n FirstPageTooltip: 'Go to first page',\n LastPageTooltip: 'Go to last page',\n NextPageTooltip: 'Go to next page',\n PreviousPageTooltip: 'Go to previous page',\n NextPagerTooltip: 'Go to next pager items',\n PreviousPagerTooltip: 'Go to previous pager items',\n PagerDropDown: 'Items per page',\n PagerAllDropDown: 'Items',\n All: 'All',\n Container: 'Pager Container',\n Information: 'Pager Information',\n ExternalMsg: 'Pager external message',\n Page: 'Page ',\n Of: ' of ',\n Pages: ' Pages'\n };\n this.containerModule = new NumericContainer(this);\n this.pagerMessageModule = new PagerMessage(this);\n };\n /**\n * To Initialize the component rendering\n *\n * @returns {void}\n */\n Pager.prototype.render = function () {\n this.element.setAttribute('data-role', 'pager');\n this.element.setAttribute('tabindex', '-1');\n this.initLocalization();\n if (this.cssClass) {\n if (this.cssClass.indexOf(' ') !== -1) {\n addClass([this.element], this.cssClass.split(' '));\n }\n else {\n addClass([this.element], [this.cssClass]);\n }\n }\n if (!this.hasParent) {\n this.element.setAttribute('tabindex', '0');\n }\n if (this.template) {\n if (this.isReactTemplate()) {\n this.on(this.pageRefresh, this.pagerTemplate, this);\n this.notify(this.pageRefresh, {});\n }\n else {\n this.pagerTemplate();\n }\n }\n else {\n this.updateRTL();\n this.totalRecordsCount = this.totalRecordsCount || 0;\n this.renderFirstPrevDivForDevice();\n this.containerModule.render();\n if (this.enablePagerMessage) {\n this.pagerMessageModule.render();\n }\n this.renderNextLastDivForDevice();\n if (this.checkpagesizes() && this.pagerdropdownModule) {\n this.pagerdropdownModule.render();\n }\n this.addAriaLabel();\n if (this.enableExternalMessage && this.externalMessageModule) {\n this.externalMessageModule.render();\n }\n this.refresh();\n this.trigger('created', { 'currentPage': this.currentPage, 'totalRecordsCount': this.totalRecordsCount });\n }\n this.wireEvents();\n this.addListener();\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} returns the persist data\n * @hidden\n */\n Pager.prototype.getPersistData = function () {\n var keyEntity = ['currentPage', 'pageSize'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To destroy the Pager component.\n *\n * @method destroy\n * @returns {void}\n */\n Pager.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (this.isReactTemplate()) {\n this.off(this.pageRefresh, this.pagerTemplate);\n if (!this.hasParent) {\n this.destroyTemplate(['template']);\n }\n }\n this.removeListener();\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n this.containerModule.destroy();\n this.pagerMessageModule.destroy();\n if (!this.isReactTemplate()) {\n this.element.innerHTML = '';\n }\n };\n /**\n * Destroys the given template reference.\n *\n * @param {string[]} propertyNames - Defines the collection of template name.\n * @param {any} index - Defines the index\n */\n // eslint-disable-next-line\n Pager.prototype.destroyTemplate = function (propertyNames, index) {\n this.clearTemplate(propertyNames, index);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n */\n Pager.prototype.getModuleName = function () {\n return 'pager';\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {PagerModel} newProp - specifies the new property\n * @param {PagerModel} oldProp - specifies the old propety\n * @returns {void}\n * @hidden\n */\n Pager.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.isDestroyed) {\n return;\n }\n if ((newProp.pageSize === this.getLocalizedLabel('All')) && oldProp.pageSize === this.totalRecordsCount) {\n this.pageSize = this.totalRecordsCount;\n return;\n }\n if (newProp.pageCount !== oldProp.pageCount) {\n this.containerModule.refreshNumericLinks();\n this.containerModule.refresh();\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'currentPage':\n if (this.checkGoToPage(newProp.currentPage, oldProp.currentPage)) {\n this.currentPageChanged(newProp, oldProp);\n }\n break;\n case 'pageSize':\n case 'totalRecordsCount':\n case 'customText':\n if (this.checkpagesizes() && this.pagerdropdownModule) {\n if (oldProp.pageSize !== newProp.pageSize) {\n this.currentPage = 1;\n }\n this.pagerdropdownModule.setDropDownValue('value', this.pageSize);\n }\n if (newProp.pageSize !== oldProp.pageSize) {\n this.pageSize = newProp.pageSize;\n this.currentPageChanged(newProp, oldProp);\n if (this.isCancel && this.hasParent) {\n this.parent\n .setProperties({ pageSettings: { pageSize: oldProp.pageSize } }, true);\n }\n }\n else {\n this.refresh();\n }\n break;\n case 'pageSizes':\n if (this.checkpagesizes() && this.pagerdropdownModule) {\n this.pagerdropdownModule.destroy();\n this.pagerdropdownModule.render();\n }\n this.refresh();\n break;\n case 'template':\n this.templateFn = this.compile(this.template);\n this.refresh();\n break;\n case 'locale':\n this.initLocalization();\n this.refresh();\n break;\n case 'enableExternalMessage':\n if (this.enableExternalMessage && this.externalMessageModule) {\n this.externalMessageModule.render();\n }\n break;\n case 'externalMessage':\n if (this.externalMessageModule) {\n this.externalMessageModule.refresh();\n }\n break;\n case 'enableRtl':\n this.updateRTL();\n break;\n case 'enablePagerMessage':\n if (this.enablePagerMessage) {\n this.pagerMessageModule.showMessage();\n }\n else {\n this.pagerMessageModule.hideMessage();\n }\n break;\n }\n }\n this.resizePager();\n };\n Pager.prototype.wireEvents = function () {\n if (!this.hasParent) {\n EventHandler.add(this.element, 'keydown', this.keyPressHandler, this);\n EventHandler.add(document.body, 'keydown', this.keyDownHandler, this);\n }\n EventHandler.add(this.element, 'focusin', this.onFocusIn, this);\n EventHandler.add(this.element, 'focusout', this.onFocusOut, this);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n EventHandler.add(window, 'resize', this.resizePager, this);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n EventHandler.add(window, 'load', this.resizePager, this);\n };\n Pager.prototype.unwireEvents = function () {\n if (!this.hasParent) {\n EventHandler.remove(this.element, 'keydown', this.keyPressHandler);\n EventHandler.remove(document.body, 'keydown', this.keyDownHandler);\n }\n EventHandler.remove(this.element, 'focusin', this.onFocusIn);\n EventHandler.remove(this.element, 'focusout', this.onFocusOut);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n EventHandler.remove(window, 'resize', this.resizePager);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n EventHandler.remove(window, 'load', this.resizePager);\n };\n Pager.prototype.onFocusIn = function (e) {\n var focusedTabIndexElement = this.getFocusedTabindexElement();\n if (isNullOrUndefined(focusedTabIndexElement)) {\n var target = e.target;\n var dropDownPage = this.getDropDownPage();\n if (!this.hasParent) {\n this.element.tabIndex = -1;\n }\n if (target === this.element && !this.hasParent) {\n var focusablePagerElements = this.getFocusablePagerElements(this.element, []);\n this.addFocus(focusablePagerElements[0], true);\n return;\n }\n if (target === this.element) {\n this.element.tabIndex = 0;\n return;\n }\n if (target !== dropDownPage && !target.classList.contains('e-disable')) {\n this.addFocus(target, true);\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Pager.prototype.onFocusOut = function (e) {\n var focusedElement = this.getFocusedElement();\n var dropDownPage = this.getDropDownPage();\n if (!isNullOrUndefined(focusedElement)) {\n this.removeFocus(focusedElement, true);\n }\n if (this.pageSizes && dropDownPage && dropDownPage.classList.contains('e-input-focus')) {\n this.removeFocus(dropDownPage, true);\n }\n this.setTabIndexForFocusLastElement();\n if (!this.hasParent) {\n this.element.tabIndex = 0;\n }\n if (this.hasParent) {\n this.element.tabIndex = -1;\n }\n };\n Pager.prototype.keyDownHandler = function (e) {\n if (e.altKey) {\n if (e.keyCode === 74) {\n var focusablePagerElements = this.getFocusablePagerElements(this.element, []);\n if (focusablePagerElements.length > 0) {\n focusablePagerElements[0].focus();\n }\n }\n }\n };\n Pager.prototype.keyPressHandler = function (e) {\n var presskey = extend(e, { cancel: false });\n this.notify(events.keyPressed, presskey);\n if (presskey.cancel === true) {\n e.stopImmediatePropagation();\n }\n };\n Pager.prototype.addListener = function () {\n if (this.isDestroyed) {\n return;\n }\n if (!this.hasParent) {\n this.on(events.keyPressed, this.onKeyPress, this);\n }\n };\n Pager.prototype.removeListener = function () {\n if (this.isDestroyed) {\n return;\n }\n if (!this.hasParent) {\n this.off(events.keyPressed, this.onKeyPress);\n }\n };\n Pager.prototype.onKeyPress = function (e) {\n if (!this.hasParent) {\n if (this.checkPagerHasFocus()) {\n this.changePagerFocus(e);\n }\n else {\n e.preventDefault();\n this.setPagerFocus();\n }\n }\n };\n /**\n * @returns {boolean} - Return the true value if pager has focus\n * @hidden */\n Pager.prototype.checkPagerHasFocus = function () {\n return this.getFocusedTabindexElement() ? true : false;\n };\n /**\n * @returns {void}\n * @hidden */\n Pager.prototype.setPagerContainerFocus = function () {\n this.element.focus();\n };\n /**\n * @returns {void}\n * @hidden */\n Pager.prototype.setPagerFocus = function () {\n var focusablePagerElements = this.getFocusablePagerElements(this.element, []);\n if (focusablePagerElements.length > 0) {\n focusablePagerElements[0].focus();\n }\n };\n Pager.prototype.setPagerFocusForActiveElement = function () {\n var currentActivePage = this.getActiveElement();\n if (currentActivePage) {\n currentActivePage.focus();\n }\n };\n Pager.prototype.setTabIndexForFocusLastElement = function () {\n var focusablePagerElements = this.getFocusablePagerElements(this.element, []);\n var dropDownPage = this.getDropDownPage();\n if (this.pageSizes && dropDownPage && !isNullOrUndefined(dropDownPage.offsetParent)) {\n dropDownPage.tabIndex = 0;\n }\n else if (focusablePagerElements.length > 0) {\n focusablePagerElements[focusablePagerElements.length - 1].tabIndex = 0;\n }\n };\n /**\n * @param {KeyboardEventArgs} e - Keyboard Event Args\n * @returns {void}\n * @hidden */\n Pager.prototype.changePagerFocus = function (e) {\n this.keyAction = e.key;\n if (e.shiftKey && e.keyCode === 9) {\n this.changeFocusByShiftTab(e);\n }\n else if (e.keyCode === 9) {\n this.changeFocusByTab(e);\n }\n else if (e.keyCode === 13 || e.keyCode === 32) {\n this.navigateToPageByEnterOrSpace(e);\n }\n else if (e.keyCode === 37 || e.keyCode === 39 || e.keyCode === 35 || e.keyCode === 36) {\n this.navigateToPageByKey(e);\n }\n this.keyAction = '';\n };\n Pager.prototype.getFocusedTabindexElement = function () {\n var focusedTabIndexElement;\n var tabindexElements = this.element.querySelectorAll('[tabindex]:not([tabindex=\"-1\"])');\n for (var i = 0; i < tabindexElements.length; i++) {\n var element = tabindexElements[parseInt(i.toString(), 10)];\n if (element && (element.classList.contains('e-focused') || element.classList.contains('e-input-focus'))) {\n focusedTabIndexElement = element;\n break;\n }\n }\n return focusedTabIndexElement;\n };\n Pager.prototype.changeFocusByTab = function (e) {\n var currentItemPagerFocus = this.getFocusedTabindexElement();\n var focusablePagerElements = this.getFocusablePagerElements(this.element, []);\n var dropDownPage = this.getDropDownPage();\n if (focusablePagerElements.length > 0) {\n if (this.pageSizes && dropDownPage && currentItemPagerFocus === focusablePagerElements[focusablePagerElements.length - 1]) {\n dropDownPage.tabIndex = 0;\n }\n else {\n for (var i = 0; i < focusablePagerElements.length; i++) {\n if (currentItemPagerFocus === focusablePagerElements[parseInt(i.toString(), 10)]) {\n var incrementNumber = i + 1;\n if (incrementNumber < focusablePagerElements.length) {\n e.preventDefault();\n focusablePagerElements[parseInt(incrementNumber.toString(), 10)].focus();\n }\n break;\n }\n }\n }\n }\n };\n Pager.prototype.changeFocusByShiftTab = function (e) {\n var currentItemPagerFocus = this.getFocusedTabindexElement();\n var focusablePagerElements = this.getFocusablePagerElements(this.element, []);\n var dropDownPage = this.getDropDownPage();\n if (this.pageSizes && dropDownPage && dropDownPage.classList.contains('e-input-focus')) {\n dropDownPage.tabIndex = -1;\n this.addFocus(focusablePagerElements[focusablePagerElements.length - 1], true);\n }\n else if (focusablePagerElements.length > 0) {\n for (var i = 0; i < focusablePagerElements.length; i++) {\n if (currentItemPagerFocus === focusablePagerElements[parseInt(i.toString(), 10)]) {\n var decrementNumber = i - 1;\n if (decrementNumber >= 0) {\n e.preventDefault();\n focusablePagerElements[parseInt(decrementNumber.toString(), 10)].focus();\n }\n else if (this.hasParent) {\n var rows = this.parent.getRows();\n var lastRow = rows[rows.length - 1];\n var lastCell = lastRow.lastChild;\n e.preventDefault();\n lastCell.focus();\n this.firstPagerFocus = true;\n }\n break;\n }\n }\n }\n };\n /**\n * @returns {void}\n * @hidden */\n Pager.prototype.checkFirstPagerFocus = function () {\n if (this.firstPagerFocus) {\n this.firstPagerFocus = false;\n return true;\n }\n return false;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Pager.prototype.navigateToPageByEnterOrSpace = function (e) {\n var currentItemPagerFocus = this.getFocusedElement();\n if (currentItemPagerFocus) {\n this.goToPage(parseInt(currentItemPagerFocus.getAttribute('index'), 10));\n var currentActivePage = this.getActiveElement();\n var selectedClass = this.getClass(currentItemPagerFocus);\n var classElement = this.getElementByClass(selectedClass);\n if ((selectedClass === 'e-first' || selectedClass === 'e-prev' || selectedClass === 'e-next'\n || selectedClass === 'e-last' || selectedClass === 'e-pp' || selectedClass === 'e-np')\n && classElement && !classElement.classList.contains('e-disable')) {\n classElement.focus();\n }\n else if (this.checkFocusInAdaptiveMode(currentItemPagerFocus)) {\n this.changeFocusInAdaptiveMode(currentItemPagerFocus);\n }\n else {\n if (currentActivePage) {\n currentActivePage.focus();\n }\n }\n }\n };\n Pager.prototype.navigateToPageByKey = function (e) {\n var actionClass = e.keyCode === 37 ? '.e-prev' : e.keyCode === 39 ? '.e-next'\n : e.keyCode === 35 ? '.e-last' : e.keyCode === 36 ? '.e-first' : '';\n var pagingItem = this.element.querySelector(actionClass);\n var currentItemPagerFocus = this.getFocusedElement();\n if (!isNullOrUndefined(pagingItem) && pagingItem.hasAttribute('index')\n && !isNaN(parseInt(pagingItem.getAttribute('index'), 10))) {\n this.goToPage(parseInt(pagingItem.getAttribute('index'), 10));\n var currentActivePage = this.getActiveElement();\n if (this.checkFocusInAdaptiveMode(currentItemPagerFocus)) {\n this.changeFocusInAdaptiveMode(currentItemPagerFocus);\n }\n else {\n if (currentActivePage) {\n currentActivePage.focus();\n }\n }\n }\n };\n Pager.prototype.checkFocusInAdaptiveMode = function (element) {\n var selectedClass = this.getClass(element);\n return selectedClass === 'e-mfirst' || selectedClass === 'e-mprev' || selectedClass === 'e-mnext'\n || selectedClass === 'e-mlast' ? true : false;\n };\n Pager.prototype.changeFocusInAdaptiveMode = function (element) {\n var selectedClass = this.getClass(element);\n var classElement = this.getElementByClass(selectedClass);\n if (classElement && classElement.classList.contains('e-disable')) {\n if (selectedClass === 'e-mnext' || selectedClass === 'e-mlast') {\n var mPrev = this.element.querySelector('.e-mprev');\n mPrev.focus();\n }\n else {\n this.setPagerFocus();\n }\n }\n };\n Pager.prototype.removeTabindexLastElements = function () {\n var tabIndexElements = this.element.querySelectorAll('[tabindex]:not([tabindex=\"-1\"])');\n if (tabIndexElements.length > 1) {\n for (var i = 1; i < tabIndexElements.length; i++) {\n var element = tabIndexElements[parseInt(i.toString(), 10)];\n if (element) {\n element.tabIndex = -1;\n }\n }\n }\n };\n Pager.prototype.getActiveElement = function () {\n return this.element.querySelector('.e-active');\n };\n /**\n * @returns {Element} - Returns DropDown Page\n * @hidden */\n Pager.prototype.getDropDownPage = function () {\n var dropDownPageHolder = this.element.querySelector('.e-pagerdropdown');\n var dropDownPage;\n if (dropDownPageHolder) {\n dropDownPage = dropDownPageHolder.children[0];\n }\n return dropDownPage;\n };\n Pager.prototype.getFocusedElement = function () {\n return this.element.querySelector('.e-focused');\n };\n Pager.prototype.getClass = function (element) {\n var currentClass;\n var classList = ['e-mfirst', 'e-mprev', 'e-first', 'e-prev', 'e-pp',\n 'e-np', 'e-next', 'e-last', 'e-mnext', 'e-mlast'];\n for (var i = 0; i < classList.length; i++) {\n if (element && element.classList.contains(classList[parseInt(i.toString(), 10)])) {\n currentClass = classList[parseInt(i.toString(), 10)];\n return currentClass;\n }\n }\n return currentClass;\n };\n Pager.prototype.getElementByClass = function (className) {\n return this.element.querySelector('.' + className);\n };\n /**\n * @param {Element} element - Pager element\n * @param {Element[]} previousElements - Iterating pager element\n * @returns {Element[]} - Returns focusable pager element\n * @hidden */\n Pager.prototype.getFocusablePagerElements = function (element, previousElements) {\n var target = element;\n var targetChildrens = target.children;\n var pagerElements = previousElements;\n for (var i = 0; i < targetChildrens.length; i++) {\n var element_1 = targetChildrens[parseInt(i.toString(), 10)];\n if (element_1.children.length > 0 && !element_1.classList.contains('e-pagesizes')) {\n pagerElements = this.getFocusablePagerElements(element_1, pagerElements);\n }\n else {\n var tabindexElement = targetChildrens[parseInt(i.toString(), 10)];\n if (tabindexElement.hasAttribute('tabindex') && !element_1.classList.contains('e-disable')\n && element_1.style.display !== 'none'\n && !isNullOrUndefined(element_1.offsetParent)) {\n pagerElements.push(tabindexElement);\n }\n }\n }\n return pagerElements;\n };\n Pager.prototype.addFocus = function (element, addFocusClass) {\n if (addFocusClass) {\n addClass([element], ['e-focused', 'e-focus']);\n }\n element.tabIndex = 0;\n };\n Pager.prototype.removeFocus = function (element, removeFocusClass) {\n if (removeFocusClass) {\n removeClass([element], ['e-focused', 'e-focus']);\n }\n element.tabIndex = -1;\n };\n /**\n * Gets the localized label by locale keyword.\n *\n * @param {string} key - specifies the key\n * @returns {string} returns the localized label\n */\n Pager.prototype.getLocalizedLabel = function (key) {\n return this.localeObj.getConstant(key);\n };\n /**\n * Navigate to target page by given number.\n *\n * @param {number} pageNo - Defines page number.\n * @returns {void}\n */\n Pager.prototype.goToPage = function (pageNo) {\n if (this.checkGoToPage(pageNo)) {\n this.currentPage = pageNo;\n this.dataBind();\n }\n };\n /**\n * @param {number} pageSize - specifies the pagesize\n * @returns {void}\n * @hidden\n */\n Pager.prototype.setPageSize = function (pageSize) {\n this.pageSize = pageSize;\n this.dataBind();\n };\n Pager.prototype.checkpagesizes = function () {\n if (this.pageSizes === true || this.pageSizes.length) {\n return true;\n }\n return false;\n };\n Pager.prototype.checkGoToPage = function (newPageNo, oldPageNo) {\n if (newPageNo !== this.currentPage) {\n this.previousPageNo = this.currentPage;\n }\n if (!isNullOrUndefined(oldPageNo)) {\n this.previousPageNo = oldPageNo;\n }\n if (this.previousPageNo !== newPageNo && (newPageNo >= 1 && newPageNo <= this.totalPages)) {\n return true;\n }\n return false;\n };\n Pager.prototype.currentPageChanged = function (newProp, oldProp) {\n if (this.enableQueryString) {\n this.updateQueryString(this.currentPage);\n }\n if (newProp.currentPage !== oldProp.currentPage || newProp.pageSize !== oldProp.pageSize) {\n var args = {\n currentPage: this.currentPage,\n newProp: newProp, oldProp: oldProp, cancel: false\n };\n this.trigger('click', args);\n if (!args.cancel) {\n this.isCancel = false;\n this.refresh();\n }\n else {\n this.isCancel = true;\n if (oldProp && oldProp.pageSize) {\n this.setProperties({ pageSize: oldProp.pageSize }, true);\n if (this.pagerdropdownModule) {\n this.pagerdropdownModule.setDropDownValue('value', oldProp.pageSize);\n this.pagerdropdownModule['dropDownListObject'].text = oldProp.pageSize + '';\n }\n }\n }\n }\n };\n Pager.prototype.pagerTemplate = function () {\n if (this.isReactTemplate() && this.hasParent) {\n return;\n }\n var result;\n this.element.classList.add('e-pagertemplate');\n this.compile(this.template);\n var data = {\n currentPage: this.currentPage, pageSize: this.pageSize, pageCount: this.pageCount,\n totalRecordsCount: this.totalRecordsCount, totalPages: this.totalPages\n };\n var tempId = this.element.parentElement.id + '_template';\n if (this.isReactTemplate() && !this.isVue) {\n this.getPagerTemplate()(data, this, 'template', tempId, null, null, this.element);\n this.renderReactTemplates();\n }\n else {\n result = this.isVue ? this.getPagerTemplate()(data, this, 'template') : this.getPagerTemplate()(data);\n appendChildren(this.element, result);\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Pager.prototype.updateTotalPages = function () {\n this.totalPages = this.isAllPage ? 1 : (this.totalRecordsCount % this.pageSize === 0) ? (this.totalRecordsCount / this.pageSize) :\n (parseInt((this.totalRecordsCount / this.pageSize).toString(), 10) + 1);\n };\n /**\n * @returns {Function} returns the function\n * @hidden\n */\n Pager.prototype.getPagerTemplate = function () {\n return this.templateFn;\n };\n /**\n * @param {string | Function} template - specifies the template\n * @returns {Function} returns the function\n * @hidden\n */\n Pager.prototype.compile = function (template) {\n if (template) {\n try {\n if (typeof template === 'function') {\n this.templateFn = templateCompiler(template);\n }\n else {\n if (document.querySelectorAll(template).length) {\n this.templateFn = templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n }\n }\n catch (e) {\n this.templateFn = templateCompiler(template);\n }\n }\n return undefined;\n };\n /**\n * Refreshes page count, pager information and external message.\n *\n * @returns {void}\n */\n Pager.prototype.refresh = function () {\n if (this.template) {\n if (this.isReactTemplate()) {\n this.updateTotalPages();\n this.notify(this.pageRefresh, {});\n }\n else {\n this.element.innerHTML = '';\n this.updateTotalPages();\n this.pagerTemplate();\n }\n }\n else {\n this.updateRTL();\n var focusedTabIndexElement = this.getFocusedTabindexElement();\n this.containerModule.refresh();\n this.removeTabindexLastElements();\n if (focusedTabIndexElement && focusedTabIndexElement.classList.contains('e-disable')) {\n if (this.checkFocusInAdaptiveMode(focusedTabIndexElement)) {\n this.changeFocusInAdaptiveMode(focusedTabIndexElement);\n }\n else {\n this.setPagerFocusForActiveElement();\n }\n }\n if (this.enablePagerMessage) {\n this.pagerMessageModule.refresh();\n }\n if (this.pagerdropdownModule) {\n this.pagerdropdownModule.refresh();\n }\n if (this.enableExternalMessage && this.externalMessageModule) {\n this.externalMessageModule.refresh();\n }\n this.setTabIndexForFocusLastElement();\n this.resizePager();\n }\n };\n Pager.prototype.updateRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n Pager.prototype.initLocalization = function () {\n this.localeObj = new L10n(this.getModuleName(), this.defaultConstants, this.locale);\n };\n Pager.prototype.updateQueryString = function (value) {\n var updatedUrl = this.getUpdatedURL(window.location.href, 'page', value.toString());\n window.history.pushState({ path: updatedUrl }, '', updatedUrl);\n };\n Pager.prototype.getUpdatedURL = function (uri, key, value) {\n // eslint-disable-next-line security/detect-non-literal-regexp\n var regx = new RegExp('([?|&])' + key + '=.*?(&|#|$)', 'i');\n if (uri.match(regx)) {\n return uri.replace(regx, '$1' + key + '=' + value + '$2');\n }\n else {\n var hash = '';\n if (uri.indexOf('#') !== -1) {\n hash = uri.replace(/.*#/, '#');\n uri = uri.replace(/#.*/, '');\n }\n return uri + (uri.indexOf('?') !== -1 ? '&' : '?') + key + '=' + value + hash;\n }\n };\n Pager.prototype.renderFirstPrevDivForDevice = function () {\n this.element.appendChild(createElement('div', {\n className: 'e-mfirst e-icons e-icon-first',\n attrs: { title: this.getLocalizedLabel('firstPageTooltip'), tabindex: '-1' }\n }));\n this.element.appendChild(createElement('div', {\n className: 'e-mprev e-icons e-icon-prev',\n attrs: { title: this.getLocalizedLabel('previousPageTooltip'), tabindex: '-1' }\n }));\n };\n Pager.prototype.renderNextLastDivForDevice = function () {\n this.element.appendChild(createElement('div', {\n className: 'e-mnext e-icons e-icon-next',\n attrs: { title: this.getLocalizedLabel('nextPageTooltip'), tabindex: '-1' }\n }));\n this.element.appendChild(createElement('div', {\n className: 'e-mlast e-icons e-icon-last',\n attrs: { title: this.getLocalizedLabel('lastPageTooltip'), tabindex: '-1' }\n }));\n };\n Pager.prototype.addAriaLabel = function () {\n var classList = ['.e-mfirst', '.e-mprev', '.e-mnext', '.e-mlast'];\n if (!Browser.isDevice) {\n for (var i = 0; i < classList.length; i++) {\n var element = this.element.querySelector(classList[parseInt(i.toString(), 10)]);\n element.setAttribute('aria-label', element.getAttribute('title'));\n }\n }\n };\n Pager.prototype.isReactTemplate = function () {\n return (this.isReact || this.isVue) && this.template && typeof (this.template) !== 'string';\n };\n /**\n * Loop through all the inner elements of pager to calculate the required width for pager child elements.\n *\n * @returns {number} returns the actual width occupied by pager elements.\n */\n Pager.prototype.calculateActualWidth = function () {\n var pagerElements = this.element.querySelectorAll(\n /* tslint:disable-next-line:max-line-length */\n '.e-mfirst, .e-mprev, .e-icon-first, .e-icon-prev, .e-pp:not(.e-disable), .e-numericitem:not(.e-hide), .e-numericitem.e-active.e-hide, .e-np:not(.e-disable), .e-icon-next, .e-icon-last, .e-parentmsgbar, .e-mnext, .e-mlast, .e-pagerdropdown, .e-pagerconstant');\n var actualWidth = 0;\n for (var i = 0; i < pagerElements.length; i++) {\n if (getComputedStyle(pagerElements[parseInt(i.toString(), 10)]).display !== 'none') {\n actualWidth += pagerElements[parseInt(i.toString(), 10)].offsetWidth\n + parseFloat(getComputedStyle(pagerElements[parseInt(i.toString(), 10)]).marginLeft)\n + parseFloat(getComputedStyle(pagerElements[parseInt(i.toString(), 10)]).marginRight);\n }\n }\n var pagerContainer = this.element.querySelector('.e-pagercontainer');\n actualWidth += parseFloat(getComputedStyle(pagerContainer).marginLeft)\n + parseFloat(getComputedStyle(pagerContainer).marginRight);\n return actualWidth;\n };\n /**\n * Resize pager component by hiding pager component's numeric items based on total width available for pager.\n *\n * @returns {void}\n */\n Pager.prototype.resizePager = function () {\n var _this = this;\n var isStyleApplied = this.element.classList.contains('e-pager') ? getComputedStyle(this.element).getPropertyValue('border-style').includes('solid') : null;\n if (!(this.template) && isStyleApplied) {\n var pagerContainer = this.element.querySelector('.e-pagercontainer');\n var actualWidth = this.calculateActualWidth();\n var pagerWidth = this.element.clientWidth\n - parseFloat(getComputedStyle(this.element).paddingLeft)\n - parseFloat(getComputedStyle(this.element).paddingRight)\n - parseFloat(getComputedStyle(this.element).marginLeft)\n - parseFloat(getComputedStyle(this.element).marginRight);\n var numItems = pagerContainer.querySelectorAll('.e-numericitem:not(.e-hide):not([style*=\"display: none\"]):not(.e-np):not(.e-pp)');\n var hiddenNumItems = pagerContainer.querySelectorAll('.e-numericitem.e-hide:not([style*=\"display: none\"])');\n var hideFrom = numItems.length;\n var showFrom = 1;\n var bufferWidth = (!isNullOrUndefined(parentsUntil(this.element, 'e-bigger'))) ? 10 : 5;\n var NP = pagerContainer.querySelector('.e-np');\n var PP = pagerContainer.querySelector('.e-pp');\n var detailItems = this.element.querySelectorAll('.e-parentmsgbar:not(.e-hide):not([style*=\"display: none\"]), .e-pagesizes:not(.e-hide):not([style*=\"display: none\"])');\n var totDetailWidth_1 = 0;\n if (detailItems.length) {\n detailItems.forEach(function (item) {\n totDetailWidth_1 += item.offsetWidth;\n });\n this.averageDetailWidth = totDetailWidth_1 / detailItems.length;\n }\n var totalWidth = 0;\n /**\n * Loop to calculate average width of numeric item.\n */\n for (var i = 0; i < numItems.length; i++) {\n totalWidth += numItems[parseInt(i.toString(), 10)].offsetWidth\n + parseFloat(getComputedStyle(numItems[parseInt(i.toString(), 10)]).marginLeft)\n + parseFloat(getComputedStyle(numItems[parseInt(i.toString(), 10)]).marginRight);\n }\n var numericItemWidth = totalWidth / numItems.length;\n /**\n * Condition to hide numeric items when calculated actual width exceeds available pager space.\n */\n if (pagerWidth > 0 && (actualWidth >= (pagerWidth - (numericItemWidth ? numericItemWidth : 0)))) {\n this.isPagerResized = true;\n if (this.currentPage !== this.totalPages) {\n classList(NP, ['e-numericitem', 'e-pager-default'], ['e-nextprevitemdisabled', 'e-disable']);\n }\n actualWidth = this.calculateActualWidth();\n var diff = Math.abs((actualWidth) - pagerWidth);\n // To calculate number of numeric items need to be hidden.\n var numToHide = Math.ceil(diff / (numericItemWidth));\n numToHide = (numToHide === 0) ? 1 : (numToHide > numItems.length) ? (numItems.length - 1) : numToHide;\n for (var i = 1; i <= numToHide; i++) {\n var hideIndex = hideFrom - parseInt(i.toString(), 10);\n numItems = pagerContainer.querySelectorAll('.e-numericitem:not(.e-hide):not([style*=\"display: none\"]):not(.e-np):not(.e-pp)');\n if (this.currentPage !== 1 && ((parseInt(numItems[Math.abs(hideIndex)].getAttribute('index'), 10) === this.currentPage)\n || parseInt(numItems[numItems.length - 1].getAttribute('index'), 10) === this.currentPage)) {\n hideIndex = 0;\n classList(PP, ['e-numericitem', 'e-pager-default'], ['e-nextprevitemdisabled', 'e-disable']);\n }\n if (numItems[Math.abs(hideIndex)] && !(numItems[Math.abs(hideIndex)].classList.contains('e-currentitem'))) {\n numItems[Math.abs(hideIndex)].classList.add('e-hide');\n }\n }\n numItems = pagerContainer.querySelectorAll('.e-numericitem:not(.e-hide):not([style*=\"display: none\"]):not(.e-np):not(.e-pp)');\n // To hide Pager message elements when no more numeric items available to hide.\n if (numItems.length <= 1 && detailItems.length && window.innerWidth >= 768) {\n var pagerDetailItemsWidth = this.calculateActualWidth();\n if ((pagerDetailItemsWidth) > (pagerWidth - bufferWidth)) {\n var detailtoHide = Math.floor((pagerWidth - (pagerDetailItemsWidth - totDetailWidth_1))\n / this.averageDetailWidth);\n detailtoHide = detailItems.length - detailtoHide;\n for (var i = 0; i < (detailtoHide > detailItems.length ? detailItems.length : detailtoHide); i++) {\n detailItems[parseInt(i.toString(), 10)].classList.add('e-hide');\n }\n }\n }\n }\n /**\n * Condition to show numeric items when space availble in pager at dom.\n */\n else if (actualWidth < (pagerWidth) && hiddenNumItems.length) {\n var diff = Math.abs(pagerWidth - (actualWidth));\n var hiddenDetailItems = this.element.querySelectorAll('.e-parentmsgbar.e-hide, .e-pagesizes.e-hide');\n // To show Pager message elements.\n if (hiddenDetailItems.length && (diff > (this.averageDetailWidth + (this.averageDetailWidth / 4)))) {\n hiddenDetailItems[(hiddenDetailItems.length - 1)].classList.remove('e-hide');\n }\n if ((diff > (numericItemWidth * 2) && !hiddenDetailItems.length && window.innerWidth >= 768)) {\n // To calculate number of numeric items need to be shown.\n var numToShow = Math.floor((diff) / (numericItemWidth + bufferWidth));\n numToShow = (numToShow > hiddenNumItems.length) ? hiddenNumItems.length : (numToShow - 1);\n //Seggregating hidden num items as less index and greater index values than current page value.\n var lesserIndexItems = Array.from(hiddenNumItems).filter(function (item) { return parseInt(item.getAttribute('index'), 10) < _this.currentPage; }).sort(function (a, b) { return parseInt(b.getAttribute('index'), 10) - parseInt(a.getAttribute('index'), 10); });\n var greaterIndexItems = Array.from(hiddenNumItems).filter(function (item) { return parseInt(item.getAttribute('index'), 10) > _this.currentPage; });\n var showItems = (lesserIndexItems.length && lesserIndexItems)\n || (greaterIndexItems.length && greaterIndexItems);\n for (var i = 1; i <= numToShow; i++) {\n var showItem = showItems && showItems[Math.abs(showFrom - i)];\n if (showItem) {\n showItem.classList.remove('e-hide');\n if (showItem === showItems[showItems.length - 1]) {\n showItems = null;\n }\n }\n }\n }\n }\n numItems = pagerContainer.querySelectorAll('.e-numericitem:not(.e-hide):not([style*=\"display: none\"]):not(.e-np):not(.e-pp)');\n if (numItems.length) {\n if (parseInt(numItems[numItems.length - 1].getAttribute('index'), 10) === this.totalPages) {\n classList(NP, ['e-nextprevitemdisabled', 'e-disable'], ['e-numericitem', 'e-pager-default']);\n }\n if (parseInt(numItems[0].getAttribute('index'), 10) === 1) {\n classList(PP, ['e-nextprevitemdisabled', 'e-disable'], ['e-numericitem', 'e-pager-default']);\n }\n var isLastSet = Array.from(numItems).some(function (item) { return parseInt(item.getAttribute('index'), 10) === _this.totalPages; });\n var ppIndex = (parseInt(numItems[0].getAttribute('index'), 10) - (isLastSet ? this.avgNumItems : numItems.length));\n PP.setAttribute('index', (ppIndex < 1) ? '1' : ppIndex.toString());\n NP.setAttribute('index', (parseInt(numItems[numItems.length - 1].getAttribute('index'), 10) + 1).toString());\n this.avgNumItems = isLastSet ? this.avgNumItems : numItems.length;\n }\n /**\n * Condition to add adaptive class name and set pagermessage content with \"/\" when media query css has been applied.\n */\n if (((this.element.offsetWidth < 769) && window.getComputedStyle(this.element.querySelector('.e-mfirst')).getPropertyValue('display') !== 'none') && this.pageSizes) {\n this.element.querySelector('.e-pagesizes').classList.remove('e-hide');\n this.element.querySelector('.e-parentmsgbar').classList.remove('e-hide');\n this.element.classList.add('e-adaptive');\n this.element.querySelector('.e-pagenomsg').innerHTML = this.element.offsetWidth < 481 ? (this.currentPage + ' / ' + this.totalPages) : this.pagerMessageModule.format(this.getLocalizedLabel('currentPageInfo'), [this.totalRecordsCount === 0 ? 0 :\n this.currentPage, this.totalPages || 0, this.totalRecordsCount || 0]) + ' ';\n }\n else {\n this.element.classList.remove('e-adaptive');\n this.element.querySelector('.e-pagenomsg').innerHTML = this.pagerMessageModule.format(this.getLocalizedLabel('currentPageInfo'), [this.totalRecordsCount === 0 ? 0 :\n this.currentPage, this.totalPages || 0, this.totalRecordsCount || 0]) + ' ';\n }\n }\n };\n __decorate([\n Property(false)\n ], Pager.prototype, \"enableQueryString\", void 0);\n __decorate([\n Property(false)\n ], Pager.prototype, \"enableExternalMessage\", void 0);\n __decorate([\n Property(true)\n ], Pager.prototype, \"enablePagerMessage\", void 0);\n __decorate([\n Property(12)\n ], Pager.prototype, \"pageSize\", void 0);\n __decorate([\n Property(10)\n ], Pager.prototype, \"pageCount\", void 0);\n __decorate([\n Property(1)\n ], Pager.prototype, \"currentPage\", void 0);\n __decorate([\n Property()\n ], Pager.prototype, \"totalRecordsCount\", void 0);\n __decorate([\n Property()\n ], Pager.prototype, \"externalMessage\", void 0);\n __decorate([\n Property(false)\n ], Pager.prototype, \"pageSizes\", void 0);\n __decorate([\n Property()\n ], Pager.prototype, \"template\", void 0);\n __decorate([\n Property('')\n ], Pager.prototype, \"customText\", void 0);\n __decorate([\n Event()\n ], Pager.prototype, \"click\", void 0);\n __decorate([\n Property('')\n ], Pager.prototype, \"cssClass\", void 0);\n __decorate([\n Event()\n ], Pager.prototype, \"dropDownChanged\", void 0);\n __decorate([\n Event()\n ], Pager.prototype, \"created\", void 0);\n Pager = __decorate([\n NotifyPropertyChanges\n ], Pager);\n return Pager;\n}(Component));\nexport { Pager };\n","import { createElement, remove } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\n/**\n * `PagerDropDown` module handles selected pageSize from DropDownList.\n */\nvar PagerDropDown = /** @class */ (function () {\n /**\n * Constructor for pager module\n *\n * @param {Pager} pagerModule - specifies the pagermodule\n * @hidden\n */\n function PagerDropDown(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n * @hidden\n */\n PagerDropDown.prototype.getModuleName = function () {\n return 'pagerdropdown';\n };\n /**\n * The function is used to render pager dropdown\n *\n * @returns {void}\n * @hidden\n */\n PagerDropDown.prototype.render = function () {\n var pagerObj = this.pagerModule;\n this.pagerDropDownDiv = createElement('div', { className: 'e-pagesizes' });\n var dropDownDiv = createElement('div', { className: 'e-pagerdropdown' });\n var defaultTextDiv = createElement('div', { className: 'e-pagerconstant' });\n var input = createElement('input', { attrs: { type: 'text', tabindex: '-1' } });\n this.pagerCons = createElement('span', {\n className: 'e-constant', innerHTML: this.pagerModule.getLocalizedLabel('pagerDropDown')\n });\n dropDownDiv.appendChild(input);\n defaultTextDiv.appendChild(this.pagerCons);\n this.pagerDropDownDiv.appendChild(dropDownDiv);\n this.pagerDropDownDiv.appendChild(defaultTextDiv);\n this.pagerModule.element.appendChild(this.pagerDropDownDiv);\n var pageSizesModule = this.pagerModule.pageSizes;\n var pageSizesArray = (pageSizesModule.length ? this.convertValue(pageSizesModule) :\n [this.pagerModule.getLocalizedLabel('All'), '5', '10', '12', '20']);\n var defaultValue = this.pagerModule.pageSize;\n this.dropDownListObject = new DropDownList({\n dataSource: pageSizesArray,\n value: defaultValue.toString(),\n change: this.onChange.bind(this),\n placeholder: this.pagerModule.getLocalizedLabel('pagerDropDown'),\n cssClass: this.pagerModule.cssClass ? 'e-alldrop' + ' ' + this.pagerModule.cssClass : 'e-alldrop'\n });\n this.dropDownListObject.appendTo(input);\n if (pageSizesModule.length) {\n this.dropDownListObject.element.value = this.pagerModule.pageSize.toString();\n }\n pagerObj.pageSize = defaultValue;\n pagerObj.dataBind();\n pagerObj.trigger('dropDownChanged', { pageSize: defaultValue });\n this.addEventListener();\n };\n /**\n * For internal use only - Get the pagesize.\n *\n * @param {ChangeEventArgs} e - specifies the changeeventargs\n * @returns {void}\n * @private\n * @hidden\n */\n PagerDropDown.prototype.onChange = function (e) {\n if (this.dropDownListObject.value === this.pagerModule.getLocalizedLabel('All')) {\n this.pagerModule.pageSize = this.pagerModule.totalRecordsCount;\n this.pagerModule.isAllPage = true;\n this.refresh();\n e.value = this.pagerModule.pageSize;\n if (document.getElementsByClassName('e-popup-open e-alldrop').length) {\n document.getElementsByClassName('e-popup-open e-alldrop')[0].style.display = 'none';\n }\n }\n else {\n this.pagerModule.pageSize = parseInt(this.dropDownListObject.value, 10);\n this.pagerModule.isAllPage = false;\n if (this.pagerCons.innerHTML !== this.pagerModule.getLocalizedLabel('pagerDropDown')) {\n this.refresh();\n }\n }\n this.pagerModule.dataBind();\n if (!this.pagerModule.isCancel) {\n this.pagerModule.trigger('dropDownChanged', {\n pageSize: this.pagerModule.isAllPage ||\n (this.pagerModule.isAllPage === undefined && this.dropDownListObject.value === this.pagerModule.getLocalizedLabel('All')) ?\n this.pagerModule.totalRecordsCount : parseInt(this.dropDownListObject.value, 10)\n });\n }\n };\n PagerDropDown.prototype.refresh = function () {\n if (this.pagerCons) {\n if (this.isPageSizeAll(this.pagerModule.pageSize)) {\n this.pagerCons.innerHTML = this.pagerModule.getLocalizedLabel('pagerAllDropDown');\n this.pagerCons.parentElement.classList.add('e-page-all');\n }\n else {\n this.pagerCons.innerHTML = this.pagerModule.getLocalizedLabel('pagerDropDown');\n this.pagerCons.parentElement.classList.remove('e-page-all');\n }\n this.pagerDropDownDiv.classList.remove('e-hide');\n }\n };\n PagerDropDown.prototype.beforeValueChange = function (prop) {\n if (typeof prop.newProp.value === 'number') {\n var val = prop.newProp.value.toString();\n prop.newProp.value = val;\n }\n };\n PagerDropDown.prototype.convertValue = function (pageSizeValue) {\n var item = pageSizeValue;\n for (var i = 0; i < item.length; i++) {\n item[parseInt(i.toString(), 10)] = parseInt(item[parseInt(i.toString(), 10)], 10) ?\n item[parseInt(i.toString(), 10)].toString() : (this.pagerModule.getLocalizedLabel(item[parseInt(i.toString(), 10)]) !== '')\n ? this.pagerModule.getLocalizedLabel(item[parseInt(i.toString(), 10)]) : item[parseInt(i.toString(), 10)];\n }\n return item;\n };\n PagerDropDown.prototype.isPageSizeAll = function (value) {\n var pageSizeNum = typeof (value) === 'string' && value !== this.pagerModule.getLocalizedLabel('All') ?\n parseInt(value, 10) : value;\n if (pageSizeNum === this.pagerModule.totalRecordsCount || value === this.pagerModule.getLocalizedLabel('All')) {\n return true;\n }\n else {\n return false;\n }\n };\n PagerDropDown.prototype.setDropDownValue = function (prop, value) {\n if (this.dropDownListObject) {\n var isbeforeAll = this.pagerModule.isAllPage;\n this.pagerModule.isAllPage = this.isPageSizeAll(value);\n this.pagerModule.checkAll = (isbeforeAll && this.pagerModule.isAllPage) ? true : false;\n this.dropDownListObject[\"\" + prop] = this.pagerModule.isAllPage ? this.pagerModule.getLocalizedLabel('All') : value;\n }\n };\n PagerDropDown.prototype.addEventListener = function () {\n this.dropDownListObject.on('beforeValueChange', this.beforeValueChange, this);\n };\n PagerDropDown.prototype.removeEventListener = function () {\n this.dropDownListObject.off('beforeValueChange', this.beforeValueChange);\n };\n /**\n * To destroy the Pagerdropdown\n *\n * @param {string} args - specifies the arguments\n * @param {string} args.requestType - specfies the request type\n * @returns {void}\n * @hidden\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n PagerDropDown.prototype.destroy = function (args) {\n if (this.dropDownListObject && !this.dropDownListObject.isDestroyed) {\n this.removeEventListener();\n this.dropDownListObject.destroy();\n remove(this.pagerDropDownDiv);\n }\n };\n return PagerDropDown;\n}());\nexport { PagerDropDown };\n","import { createElement, remove, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * `ExternalMessage` module is used to display user provided message.\n */\nvar ExternalMessage = /** @class */ (function () {\n /**\n * Constructor for externalMessage module\n *\n * @param {Pager} pagerModule - specifies the pagermodule\n * @hidden\n */\n function ExternalMessage(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n */\n ExternalMessage.prototype.getModuleName = function () {\n return 'externalMessage';\n };\n /**\n * The function is used to render pager externalMessage\n *\n * @returns {void}\n * @hidden\n */\n ExternalMessage.prototype.render = function () {\n this.element = createElement('div', { className: 'e-pagerexternalmsg', attrs: { 'aria-label': this.pagerModule.getLocalizedLabel('ExternalMsg') } });\n this.pagerModule.element.appendChild(this.element);\n this.refresh();\n };\n /**\n * Refreshes the external message of Pager.\n *\n * @returns {void}\n */\n ExternalMessage.prototype.refresh = function () {\n if (this.pagerModule.externalMessage && this.pagerModule.externalMessage.toString().length) {\n this.showMessage();\n this.element.innerHTML = this.pagerModule.externalMessage;\n }\n else {\n this.hideMessage();\n }\n };\n /**\n * Hides the external message of Pager.\n *\n * @returns {void}\n */\n ExternalMessage.prototype.hideMessage = function () {\n if (!isNullOrUndefined(this.element)) {\n this.element.style.display = 'none';\n }\n };\n /**\n * Shows the external message of the Pager.\n *\n * @returns {void}s\n */\n ExternalMessage.prototype.showMessage = function () {\n this.element.style.display = '';\n };\n /**\n * To destroy the PagerMessage\n *\n * @function destroy\n * @returns {void}\n * @hidden\n */\n ExternalMessage.prototype.destroy = function () {\n if (this.element && this.element.parentElement) {\n remove(this.element);\n }\n };\n return ExternalMessage;\n}());\nexport { ExternalMessage };\n","import { extend } from '@syncfusion/ej2-base';\nimport { remove, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Pager } from '../../pager/pager';\nimport { PagerDropDown } from '../../pager/pager-dropdown';\nimport { ExternalMessage } from '../../pager/external-message';\nimport { extend as gridExtend, getActualProperties, isActionPrevent, addRemoveEventListener, appendChildren } from '../base/util';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\n/**\n * The `Page` module is used to render pager and handle paging action.\n */\nvar Page = /** @class */ (function () {\n /**\n * Constructor for the Grid paging module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {PageSettingsModel} pageSettings - specifies the PageSettingsModel\n * @hidden\n */\n function Page(parent, pageSettings) {\n this.isInitialRender = true;\n /** @hidden */\n this.isCancel = false;\n Pager.Inject(ExternalMessage, PagerDropDown);\n this.parent = parent;\n this.pageSettings = pageSettings;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n */\n Page.prototype.getModuleName = function () {\n return 'pager';\n };\n /**\n * The function used to render pager from grid pageSettings\n *\n * @returns {void}\n * @hidden\n */\n Page.prototype.render = function () {\n var gObj = this.parent;\n this.pagerDestroy();\n if (!isNullOrUndefined(this.parent.pagerTemplate)) {\n this.pageSettings.template = this.parent.pagerTemplate;\n this.parent.pageTemplateChange = true;\n }\n this.element = this.parent.createElement('div', { className: 'e-gridpager' });\n var pagerObj = gridExtend({}, extend({}, getActualProperties(this.pageSettings)), {\n click: this.clickHandler.bind(this),\n dropDownChanged: this.onSelect.bind(this),\n enableRtl: gObj.enableRtl, locale: gObj.locale,\n created: this.addAriaAttr.bind(this)\n }, ['parentObj', 'propName']);\n pagerObj.cssClass = this.parent.cssClass ? this.parent.cssClass : '';\n this.pagerObj = new Pager(pagerObj, undefined, this.parent);\n this.pagerObj.hasParent = true;\n this.pagerObj.on(events.pagerRefresh, this.renderReactPagerTemplate, this);\n this.pagerObj.allowServerDataBinding = false;\n };\n Page.prototype.onSelect = function (e) {\n this.pageSettings.pageSize = e.pageSize;\n if (!this.isInitialLoad) {\n this.pageSettings.currentPage = 1;\n }\n };\n Page.prototype.addAriaAttr = function () {\n if (!(this.pageSettings.template)) {\n var numericContainerNew = this.parent.createElement('div', { className: 'e-numericcontainer' });\n var pagerContainer = this.element.querySelector('.e-pagercontainer');\n var frag = document.createDocumentFragment();\n var numericContainer = this.element.querySelector('.e-numericcontainer');\n var links = numericContainer.querySelectorAll('a');\n for (var i = 0; i < links.length; i++) {\n if (this.parent.getContentTable()) {\n links[parseInt(i.toString(), 10)].setAttribute('aria-owns', this.parent.getContentTable().id);\n }\n else {\n links[parseInt(i.toString(), 10)].setAttribute('aria-owns', this.parent.element.getAttribute('id') + '_content_table');\n }\n var numericContainerDiv = this.parent.createElement('div');\n numericContainerDiv.appendChild(links[parseInt(i.toString(), 10)]);\n frag.appendChild(numericContainerDiv);\n }\n numericContainerNew.appendChild(frag);\n pagerContainer.replaceChild(numericContainerNew, numericContainer);\n var classList = ['.e-mfirst', '.e-mprev', '.e-first', '.e-prev', '.e-next', '.e-last', '.e-mnext', '.e-mlast'];\n for (var j = 0; j < classList.length; j++) {\n var element = this.element.querySelector(classList[parseInt(j.toString(), 10)]);\n if (this.parent.getContentTable()) {\n element.setAttribute('aria-owns', this.parent.getContentTable().id);\n }\n }\n }\n };\n Page.prototype.dataReady = function (e) {\n this.updateModel(e);\n };\n /**\n * Refreshes the page count, pager information, and external message.\n *\n * @returns {void}\n */\n Page.prototype.refresh = function () {\n this.pagerObj.refresh();\n };\n /**\n * Navigates to the target page according to the given number.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n * @returns {void}\n */\n Page.prototype.goToPage = function (pageNo) {\n this.pagerObj.goToPage(pageNo);\n };\n /**\n * @param {number} pageSize - specifies the page size\n * @returns {void}\n * @hidden\n */\n Page.prototype.setPageSize = function (pageSize) {\n this.pagerObj.setPageSize(pageSize);\n };\n /**\n * The function used to update pageSettings model\n *\n * @param {NotifyArgs} e - specfies the NotifyArgs\n * @returns {void}\n * @hidden\n */\n Page.prototype.updateModel = function (e) {\n this.parent.pageSettings.totalRecordsCount = e.count;\n if (this.pagerObj.isAllPage) {\n this.parent.pageSettings.pageSize = this.parent.pageSettings.totalRecordsCount;\n }\n if ((e.action === 'add' && e.requestType === 'save') || (e.requestType === 'batchsave')) {\n if (this.pagerObj.isAllPage && (e.count === this.pageSettings.pageSize)) {\n this.pagerObj.setProperties({ pageSize: e.count }, true);\n }\n }\n this.parent.dataBind();\n };\n /**\n * The function used to trigger onActionComplete\n *\n * @param {NotifyArgs} e - specifies the NotifyArgs\n * @returns {void}\n * @hidden\n */\n Page.prototype.onActionComplete = function (e) {\n this.parent.trigger(events.actionComplete, extend(e, {\n currentPage: this.parent.pageSettings.currentPage, requestType: 'paging',\n type: events.actionComplete\n }));\n };\n /**\n * @param {NotifyArgs} e - specifies the NotifyArgs\n * @returns {void}\n * @hidden\n */\n Page.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var newProp = e.properties;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n this.pagerObj[\"\" + prop] = newProp[\"\" + prop];\n }\n this.pagerObj.dataBind();\n };\n Page.prototype.clickHandler = function (e) {\n var gObj = this.parent;\n if (this.isForceCancel || isActionPrevent(gObj) && !gObj.prevPageMoving && !this.isCancel) {\n if (!this.isForceCancel) {\n if (!isNullOrUndefined(e.newProp) && !isNullOrUndefined(e.newProp.pageSize)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.setPageSize, arg1: e.newProp.pageSize });\n this.pagerObj.setProperties({ pageSize: e.oldProp.pageSize }, true);\n gObj.setProperties({ pageSettings: { pageSize: e.oldProp.pageSize } }, true);\n this.pagerObj.setProperties({\n currentPage: gObj.pageSettings.currentPage === this.pagerObj.currentPage ?\n this.pagerObj.previousPageNo : gObj.pageSettings.currentPage\n }, true);\n }\n else if (e.currentPage) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.goToPage, arg1: e.currentPage });\n this.pagerObj.currentPage = gObj.pageSettings.currentPage === this.pagerObj.currentPage ?\n this.pagerObj.previousPageNo : gObj.pageSettings.currentPage;\n }\n this.isForceCancel = true;\n this.pagerObj.dataBind();\n }\n else {\n this.isForceCancel = false;\n }\n e.cancel = true;\n return;\n }\n gObj.pageSettings.pageSize = this.pagerObj.pageSize;\n gObj.prevPageMoving = false;\n var prevPage = this.pageSettings.currentPage;\n var args = {\n cancel: false, requestType: 'paging', previousPage: prevPage,\n currentPage: e.currentPage, pageSize: gObj.pageSettings.pageSize, type: events.actionBegin\n };\n if (!this.isCancel) {\n this.pageSettings.currentPage = e.currentPage;\n this.parent.notify(events.modelChanged, args);\n }\n if (args.cancel) {\n e.cancel = true;\n this.parent.setProperties({ pageSettings: { currentPage: prevPage } }, true);\n this.pagerObj.setProperties({ currentPage: prevPage }, true);\n this.isCancel = true;\n return;\n }\n this.isCancel = false;\n this.parent.requestTypeAction = 'paging';\n };\n Page.prototype.keyPressHandler = function (e) {\n if (e.action in keyActions) {\n e.preventDefault();\n this.element.querySelector(keyActions[e.action]).click();\n }\n };\n /**\n * Defines the text of the external message.\n *\n * @param {string} message - Defines the message to update.\n * @returns {void}\n */\n Page.prototype.updateExternalMessage = function (message) {\n if (!this.pagerObj.enableExternalMessage) {\n this.pagerObj.enableExternalMessage = true;\n this.pagerObj.dataBind();\n }\n this.pagerObj.externalMessage = message;\n this.pagerObj.dataBind();\n };\n Page.prototype.appendToElement = function () {\n this.isInitialLoad = true;\n this.parent.element.appendChild(this.element);\n this.parent.setGridPager(this.element);\n this.pagerObj.isReact = this.parent.isReact;\n this.pagerObj.isVue = this.parent.isVue;\n this.pagerObj.appendTo(this.element);\n this.isInitialLoad = false;\n };\n Page.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n this.appendToElement();\n if (this.isReactTemplate()) {\n this.pagerObj.updateTotalPages();\n this.created();\n }\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Page.prototype.addEventListener = function () {\n this.handlers = {\n load: this.render,\n end: this.appendToElement,\n ready: this.dataReady,\n complete: this.onActionComplete,\n updateLayout: this.enableAfterRender,\n inboundChange: this.onPropertyChanged,\n keyPress: this.keyPressHandler,\n created: this.created\n };\n if (this.parent.isDestroyed) {\n return;\n }\n if (this.parent.isReact || this.parent.isVue) {\n this.parent.addEventListener(literals.create, this.handlers.created.bind(this));\n }\n this.evtHandlers = [{ event: events.initialLoad, handler: this.handlers.load },\n { event: events.initialEnd, handler: this.handlers.end },\n { event: events.dataReady, handler: this.handlers.ready },\n { event: events.pageComplete, handler: this.handlers.complete },\n { event: events.uiUpdate, handler: this.handlers.updateLayout },\n { event: events.inBoundModelChanged, handler: this.handlers.inboundChange },\n { event: events.keyPressed, handler: this.handlers.keyPress },\n { event: events.destroy, handler: this.destroy }];\n addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n };\n Page.prototype.created = function () {\n if (this.isInitialRender && this.isReactTemplate()) {\n this.isInitialRender = false;\n this.renderReactPagerTemplate();\n }\n };\n Page.prototype.isReactTemplate = function () {\n return (this.parent.isReact || this.parent.isVue) && this.pagerObj.template && typeof (this.pagerObj.template) !== 'string';\n };\n Page.prototype.renderReactPagerTemplate = function () {\n if (!this.isInitialRender && this.isReactTemplate()) {\n var result = void 0;\n this.parent.destroyTemplate(['pagerTemplate']);\n this.element.classList.add('e-pagertemplate');\n this.pagerObj.compile(this.pagerObj.template);\n var page = this.parent.pageSettings;\n var data = {\n currentPage: page.currentPage, pageSize: page.pageSize, pageCount: page.pageCount,\n totalRecordsCount: page.totalRecordsCount, totalPages: this.pagerObj.totalPages\n };\n var tempId = this.parent.id + '_pagertemplate';\n if (this.parent.isReact) {\n this.pagerObj.templateFn(data, this.parent, 'pagerTemplate', tempId, null, null, this.pagerObj.element);\n this.parent.renderTemplates();\n }\n else {\n result = this.pagerObj.templateFn(data, this.parent, 'pagerTemplate');\n appendChildren(this.pagerObj.element, result);\n }\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Page.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n if (this.parent.isReact || this.parent.isVue) {\n this.parent.removeEventListener(literals.create, this.handlers.created);\n }\n this.parent.off(events.pagerRefresh, this.renderReactPagerTemplate);\n addRemoveEventListener(this.parent, this.evtHandlers, false);\n };\n /**\n * To destroy the pager\n *\n * @returns {void}\n * @hidden\n */\n Page.prototype.destroy = function () {\n this.removeEventListener();\n if (this.isReactTemplate()) {\n this.parent.destroyTemplate(['pagerTemplate']);\n }\n this.pagerObj.destroy();\n };\n Page.prototype.pagerDestroy = function () {\n if (this.pagerObj && !this.pagerObj.isDestroyed) {\n this.pagerObj.destroy();\n remove(this.element);\n }\n };\n return Page;\n}());\nexport { Page };\n/**\n * @hidden\n */\nvar keyActions = {\n pageUp: '.e-prev',\n pageDown: '.e-next',\n ctrlAltPageDown: '.e-last',\n ctrlAltPageUp: '.e-first',\n altPageUp: '.e-pp',\n altPageDown: '.e-np'\n};\n","import { Browser, EventHandler, createElement } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { remove, closest, select } from '@syncfusion/ej2-base';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\nimport { setCssInGridPopUp, getPosition, isGroupAdaptive, addRemoveActiveClasses, removeAddCboxClasses } from '../base/util';\nimport { getCellsByTableName, parentsUntil, getScrollBarWidth } from '../base/util';\nimport * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { iterateExtend, setChecked, isComplexField, getObject } from '../base/util';\nimport { addRemoveEventListener } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * The `Selection` module is used to handle cell and row selection.\n */\nvar Selection = /** @class */ (function () {\n /**\n * Constructor for the Grid selection module\n *\n * @param {IGrid} parent - specifies the IGrid\n * @param {SelectionSettings} selectionSettings - specifies the selectionsettings\n * @param {ServiceLocator} locator - specifies the ServiceLocator\n * @hidden\n */\n function Selection(parent, selectionSettings, locator) {\n //Internal letiables\n /**\n * @hidden\n */\n this.selectedRowIndexes = [];\n /**\n * @hidden\n */\n this.selectedRowCellIndexes = [];\n /**\n * @hidden\n */\n this.selectedRecords = [];\n /**\n * @hidden\n */\n this.preventFocus = false;\n /**\n * @hidden\n */\n this.selectedColumnsIndexes = [];\n this.checkBoxState = false;\n this.isMultiShiftRequest = false;\n this.isMultiCtrlRequest = false;\n this.isMultiCtrlRequestCell = false;\n this.enableSelectMultiTouch = false;\n this.clearRowCheck = false;\n this.selectRowCheck = false;\n this.selectedRowState = {};\n this.unSelectedRowState = {};\n this.totalRecordsCount = 0;\n this.chkAllCollec = [];\n this.isCheckedOnAdd = false;\n this.persistSelectedData = [];\n this.deSelectedData = [];\n this.isHdrSelectAllClicked = false;\n this.needColumnSelection = false;\n this.isCancelDeSelect = false;\n this.isPreventCellSelect = false;\n this.disableUI = false;\n this.isPersisted = false;\n this.cmdKeyPressed = false;\n this.cellselected = false;\n this.isMultiSelection = false;\n this.isAddRowsToSelection = false;\n this.initialRowSelection = false;\n this.isPrevRowSelection = false;\n this.isKeyAction = false;\n this.isRowDragSelected = false;\n this.isPartialSelection = false;\n this.rmtHdrChkbxClicked = false;\n this.isCheckboxReset = false;\n /**\n * @hidden\n */\n this.autoFillRLselection = true;\n this.bottom = '0 0 2px 0';\n this.top = '2px 0 0 0';\n /* eslint-disable */\n this.right_bottom = '0 2px 2px 0';\n this.bottom_left = '0 0 2px 2px';\n this.top_right = '2px 2px 0 0';\n this.top_left = '2px 0 0 2px';\n this.top_bottom = '2px 0 2px 0';\n this.top_right_bottom = '2px 2px 2px 0';\n this.top_bottom_left = '2px 0 2px 2px';\n this.top_right_left = '2px 2px 0 2px';\n this.right_bottom_left = '0 2px 2px 2px';\n this.all_border = '2px';\n this.parent = parent;\n this.selectionSettings = selectionSettings;\n this.factory = locator.getService('rendererFactory');\n this.focus = locator.getService('focus');\n this.addEventListener();\n this.wireEvents();\n }\n Selection.prototype.initializeSelection = function () {\n this.parent.log('selection_key_missing');\n this.render();\n };\n /**\n * The function used to trigger onActionBegin\n *\n * @param {Object} args - specifies the args\n * @param {string} type - specifies the type\n * @returns {void}\n * @hidden\n */\n Selection.prototype.onActionBegin = function (args, type) {\n this.parent.trigger(type, this.fDataUpdate(args));\n };\n Selection.prototype.fDataUpdate = function (args) {\n if (!this.isMultiSelection && (!isNullOrUndefined(args.cellIndex) || !isNullOrUndefined(args.rowIndex))) {\n var rowObj = this.getRowObj(isNullOrUndefined(args.rowIndex) ? isNullOrUndefined(args.cellIndex) ?\n this.currentIndex : args.cellIndex.rowIndex : args.rowIndex);\n args.foreignKeyData = rowObj.foreignKeyData;\n }\n return args;\n };\n /**\n * The function used to trigger onActionComplete\n *\n * @param {Object} args - specifies the args\n * @param {string} type - specifies the type\n * @returns {void}\n * @hidden\n */\n Selection.prototype.onActionComplete = function (args, type) {\n this.parent.trigger(type, this.fDataUpdate(args));\n this.isMultiSelection = false;\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} returns the module name\n * @private\n */\n Selection.prototype.getModuleName = function () {\n return 'selection';\n };\n /**\n * To destroy the selection\n *\n * @returns {void}\n * @hidden\n */\n Selection.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.' + literals.gridHeader) && !gridElement.querySelector('.' + literals.gridContent))) {\n return;\n }\n this.hidePopUp();\n this.clearSelection();\n this.removeEventListener();\n this.unWireEvents();\n EventHandler.remove(this.parent.getContent(), 'mousedown', this.mouseDownHandler);\n EventHandler.remove(this.parent.getHeaderContent(), 'mousedown', this.mouseDownHandler);\n };\n Selection.prototype.isEditing = function () {\n return (this.parent.editSettings.mode === 'Normal' || (this.parent.editSettings.mode === 'Batch' && this.parent.editModule &&\n this.parent.editModule.formObj && !this.parent.editModule.formObj.validate())) &&\n this.parent.isEdit && !this.parent.isPersistSelection;\n };\n Selection.prototype.getCurrentBatchRecordChanges = function () {\n var gObj = this.parent;\n if (gObj.editSettings.mode === 'Batch' && gObj.editModule) {\n var currentRecords = iterateExtend(this.parent.getCurrentViewRecords());\n currentRecords = gObj.editSettings.newRowPosition === 'Bottom' ?\n currentRecords.concat(this.parent.editModule.getBatchChanges()[literals.addedRecords]) :\n this.parent.editModule.getBatchChanges()[literals.addedRecords].concat(currentRecords);\n var deletedRecords = this.parent.editModule.getBatchChanges()[literals.deletedRecords];\n var primaryKey = this.parent.getPrimaryKeyFieldNames()[0];\n for (var i = 0; i < (deletedRecords.length); i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (deletedRecords[parseInt(i.toString(), 10)][\"\" + primaryKey] === currentRecords[parseInt(j.toString(), 10)][\"\" + primaryKey]) {\n currentRecords.splice(j, 1);\n break;\n }\n }\n }\n return currentRecords;\n }\n else if (this.parent.enableVirtualization && this.parent.groupSettings.columns.length && !this.parent.isPersistSelection) {\n var selectedGroupedData = gObj.getCurrentViewRecords().filter(function (col) { return col['key'] === undefined; });\n return selectedGroupedData;\n }\n else {\n return gObj.getCurrentViewRecords();\n }\n };\n /**\n * Selects a row by the given index.\n *\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n Selection.prototype.selectRow = function (index, isToggle) {\n if (this.selectedRowIndexes.length && this.selectionSettings.enableSimpleMultiRowSelection) {\n this.addRowsToSelection([index]);\n return;\n }\n var gObj = this.parent;\n var selectedRow = gObj.getRowByIndex(index);\n var rowObj = selectedRow && gObj.getRowObjectFromUID(selectedRow.getAttribute('data-uid'));\n if (this.isPartialSelection && rowObj && rowObj.isDataRow && !rowObj.isSelectable) {\n return;\n }\n var selectData;\n var isRemoved = false;\n if (gObj.enableVirtualization && index > -1) {\n var e = { selectedIndex: index, isAvailable: true };\n this.parent.notify(events.selectVirtualRow, e);\n if (selectedRow && (gObj.getRowObjectFromUID(selectedRow.getAttribute('data-uid')))) {\n selectData = gObj.getRowObjectFromUID(selectedRow.getAttribute('data-uid')).data;\n }\n else {\n if (e.isAvailable && !gObj.selectionSettings.persistSelection) {\n var prevSelectedData = this.parent.getSelectedRecords();\n if (prevSelectedData.length > 0) {\n this.clearRowSelection();\n }\n }\n return;\n }\n }\n else {\n selectData = this.getRowObj(index).data;\n }\n if (!this.isRowType() || !selectedRow || this.isEditing()) {\n // if (this.isEditing()) {\n // gObj.selectedRowIndex = index;\n // }\n return;\n }\n var isRowSelected = selectedRow.hasAttribute('aria-selected');\n this.activeTarget();\n isToggle = !isToggle ? isToggle :\n !this.selectedRowIndexes.length ? false :\n (this.selectedRowIndexes.length === 1 ? (this.isKeyAction && this.parent.isCheckBoxSelection ?\n false : index === this.selectedRowIndexes[0]) : false);\n this.isKeyAction = false;\n var args;\n var can = 'cancel';\n if (!isToggle) {\n args = {\n data: selectData, rowIndex: index, isCtrlPressed: this.isMultiCtrlRequest,\n isShiftPressed: this.isMultiShiftRequest, row: selectedRow,\n previousRow: gObj.getRowByIndex(this.prevRowIndex),\n previousRowIndex: this.prevRowIndex, target: this.actualTarget, cancel: false, isInteracted: this.isInteracted,\n isHeaderCheckboxClicked: this.isHeaderCheckboxClicked\n };\n this.parent.trigger(events.rowSelecting, this.fDataUpdate(args), this.rowSelectingCallBack(args, isToggle, index, selectData, isRemoved, isRowSelected, can));\n }\n else {\n this.rowSelectingCallBack(args, isToggle, index, selectData, isRemoved, isRowSelected, can)(args);\n }\n };\n Selection.prototype.rowSelectingCallBack = function (args, isToggle, index, selectData, isRemoved, isRowSelected, can) {\n var _this = this;\n return function (args) {\n if (!isNullOrUndefined(args) && args[\"\" + can] === true) {\n _this.disableInteracted();\n return;\n }\n _this.index = index;\n _this.toggle = isToggle;\n _this.data = selectData;\n _this.removed = isRemoved;\n if (isRowSelected && _this.selectionSettings.persistSelection && !(_this.selectionSettings.checkboxMode === 'ResetOnRowClick')) {\n _this.clearSelectedRow(index);\n _this.selectRowCallBack();\n }\n else if (!isRowSelected && _this.selectionSettings.persistSelection &&\n _this.selectionSettings.checkboxMode !== 'ResetOnRowClick') {\n _this.selectRowCallBack();\n }\n if (_this.selectionSettings.checkboxMode === 'ResetOnRowClick') {\n _this.isCheckboxReset = true;\n _this.clearSelection();\n }\n if (!_this.selectionSettings.persistSelection || _this.selectionSettings.checkboxMode === 'ResetOnRowClick' ||\n (!_this.parent.isCheckBoxSelection && _this.selectionSettings.persistSelection)) {\n _this.selectRowCheck = true;\n _this.clearRow();\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 if (!isToggle && !isRemoved) {\n if (this.selectedRowIndexes.indexOf(index) <= -1) {\n this.updateRowSelection(selectedRow, index);\n }\n this.selectRowIndex(index);\n }\n if (!isToggle) {\n args = {\n data: selectData, rowIndex: index,\n row: selectedRow, previousRow: gObj.getRowByIndex(this.prevRowIndex),\n previousRowIndex: this.prevRowIndex, target: this.actualTarget, isInteracted: this.isInteracted,\n isHeaderCheckBoxClicked: this.isHeaderCheckboxClicked, rowIndexes: index\n };\n this.onActionComplete(args, events.rowSelected);\n }\n this.isInteracted = false;\n this.updateRowProps(index);\n };\n /**\n * Selects a range of rows from start and end row indexes.\n *\n * @param {number} startIndex - Specifies the start row index.\n * @param {number} endIndex - Specifies the end row index.\n * @returns {void}\n */\n Selection.prototype.selectRowsByRange = function (startIndex, endIndex) {\n this.selectRows(this.getCollectionFromIndexes(startIndex, endIndex));\n this.selectRowIndex(endIndex);\n };\n Selection.prototype.selectedDataUpdate = function (selectedData, foreignKeyData, selectedRows, rowIndexes, selectableRowIndex) {\n for (var i = 0, len = rowIndexes.length; i < len; i++) {\n var currentRow = this.parent.getDataRows()[rowIndexes[parseInt(i.toString(), 10)]];\n if (this.parent.enableVirtualization) {\n currentRow = this.parent.getRowByIndex(rowIndexes[parseInt(i.toString(), 10)]);\n }\n var rowObj = this.getRowObj(currentRow);\n if (rowObj && rowObj.isDataRow && rowObj.isSelectable) {\n selectedData.push(rowObj.data);\n selectedRows.push(currentRow);\n foreignKeyData.push(rowObj.foreignKeyData);\n }\n else {\n if (this.isPartialSelection && selectableRowIndex) {\n selectableRowIndex.splice(selectableRowIndex.indexOf(rowIndexes[parseInt(i.toString(), 10)]), 1);\n }\n }\n }\n };\n /**\n * Selects a collection of rows by index.\n *\n * @param {number[]} rowIndexes - Specifies an array of row indexes.\n * @returns {void}\n */\n Selection.prototype.selectRows = function (rowIndexes) {\n var _this = this;\n var gObj = this.parent;\n var selectableRowIndex = rowIndexes.slice();\n var rowIndex = !this.isSingleSel() ? rowIndexes[0] : rowIndexes[rowIndexes.length - 1];\n this.isMultiSelection = true;\n var selectedRows = [];\n var foreignKeyData = [];\n var can = 'cancel';\n var selectedData = [];\n if (!this.isRowType() || this.isEditing()) {\n return;\n }\n this.selectedDataUpdate(selectedData, foreignKeyData, selectedRows, rowIndexes, selectableRowIndex);\n this.activeTarget();\n var args = {\n cancel: false,\n rowIndexes: selectableRowIndex, row: selectedRows, rowIndex: rowIndex, target: this.actualTarget,\n prevRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex,\n isInteracted: this.isInteracted, isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest,\n data: selectedData, isHeaderCheckboxClicked: this.isHeaderCheckboxClicked, foreignKeyData: foreignKeyData\n };\n this.parent.trigger(events.rowSelecting, this.fDataUpdate(args), function (args) {\n if (!isNullOrUndefined(args) && args[\"\" + can] === true) {\n _this.disableInteracted();\n return;\n }\n if (!(gObj.allowRowDragAndDrop && _this.isDragged && _this.selectionSettings.persistSelection)) {\n _this.clearRow();\n }\n _this.selectRowIndex(selectableRowIndex.slice(-1)[0]);\n var selectRowFn = function (index, preventFocus) {\n _this.updateRowSelection(gObj.getRowByIndex(index), index, preventFocus);\n _this.updateRowProps(rowIndex);\n };\n if (!_this.isSingleSel()) {\n for (var _i = 0, selectableRowIndex_1 = selectableRowIndex; _i < selectableRowIndex_1.length; _i++) {\n var rowIdx = selectableRowIndex_1[_i];\n selectRowFn(rowIdx, gObj.enableVirtualization ? true : false);\n }\n }\n else {\n selectRowFn(rowIndex);\n }\n args = {\n rowIndexes: selectableRowIndex, row: selectedRows, rowIndex: rowIndex, target: _this.actualTarget,\n prevRow: gObj.getRows()[_this.prevRowIndex], previousRowIndex: _this.prevRowIndex,\n data: _this.getSelectedRecords(), isInteracted: _this.isInteracted,\n isHeaderCheckboxClicked: _this.isHeaderCheckboxClicked, foreignKeyData: foreignKeyData\n };\n if (_this.isRowSelected) {\n _this.onActionComplete(args, events.rowSelected);\n }\n _this.isInteracted = false;\n });\n };\n /**\n * Select rows with existing row selection by passing row indexes.\n *\n * @param {number} rowIndexes - Specifies the row indexes.\n * @returns {void}\n * @hidden\n */\n Selection.prototype.addRowsToSelection = function (rowIndexes) {\n var gObj = this.parent;\n var can = 'cancel';\n var target = this.target;\n this.isMultiSelection = true;\n var selectedRows = [];\n var foreignKeyData = [];\n var selectedData = [];\n var indexes = gObj.getSelectedRowIndexes().concat(rowIndexes);\n var selectedRow = !this.isSingleSel() ? gObj.getRowByIndex(rowIndexes[0]) :\n gObj.getRowByIndex(rowIndexes[rowIndexes.length - 1]);\n if ((!this.isRowType() || this.isEditing()) && !this.selectionSettings.checkboxOnly) {\n return;\n }\n var args;\n var checkboxColumn = this.parent.getColumns().filter(function (col) { return col.type === 'checkbox'; });\n if (this.isMultiCtrlRequest && !checkboxColumn.length) {\n this.selectedDataUpdate(selectedData, foreignKeyData, selectedRows, indexes);\n }\n for (var _i = 0, rowIndexes_1 = rowIndexes; _i < rowIndexes_1.length; _i++) {\n var rowIndex = rowIndexes_1[_i];\n var rowObj = this.getRowObj(rowIndex);\n var isUnSelected = this.selectedRowIndexes.indexOf(rowIndex) > -1;\n if (this.isPartialSelection && rowObj && rowObj.isDataRow && !rowObj.isSelectable) {\n continue;\n }\n this.selectRowIndex(rowIndex);\n if (isUnSelected && ((checkboxColumn.length ? true : this.selectionSettings.enableToggle) || this.isMultiCtrlRequest)) {\n this.isAddRowsToSelection = true;\n this.rowDeselect(events.rowDeselecting, [rowIndex], [rowObj.data], [selectedRow], [rowObj.foreignKeyData], target);\n if (this.isCancelDeSelect) {\n return;\n }\n this.selectedRowIndexes.splice(this.selectedRowIndexes.indexOf(rowIndex), 1);\n this.selectedRecords.splice(this.selectedRecords.indexOf(selectedRow), 1);\n this.selectRowIndex(this.selectedRowIndexes.length ? this.selectedRowIndexes[this.selectedRowIndexes.length - 1] : -1);\n selectedRow.removeAttribute('aria-selected');\n this.addRemoveClassesForRow(selectedRow, false, null, 'e-selectionbackground', 'e-active');\n this.rowDeselect(events.rowDeselected, [rowIndex], [rowObj.data], [selectedRow], [rowObj.foreignKeyData], target, undefined, undefined, undefined);\n this.isInteracted = false;\n this.isMultiSelection = false;\n this.isAddRowsToSelection = false;\n this.isHdrSelectAllClicked = false;\n }\n else {\n this.activeTarget();\n args = {\n cancel: false,\n data: selectedData.length ? selectedData : rowObj.data, rowIndex: rowIndex, row: selectedRows.length ? selectedRows :\n selectedRow, target: this.actualTarget, prevRow: gObj.getRows()[this.prevRowIndex],\n previousRowIndex: this.prevRowIndex, isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest,\n foreignKeyData: foreignKeyData.length ? foreignKeyData : rowObj.foreignKeyData, isInteracted: this.isInteracted,\n isHeaderCheckboxClicked: this.isHeaderCheckboxClicked, rowIndexes: indexes\n };\n this.parent.trigger(events.rowSelecting, this.fDataUpdate(args));\n if (!isNullOrUndefined(args) && args[\"\" + can] === true) {\n this.disableInteracted();\n return;\n }\n if (this.isSingleSel()) {\n this.clearRow();\n }\n this.updateRowSelection(selectedRow, rowIndex);\n }\n if (!isUnSelected) {\n args = {\n data: selectedData.length ? selectedData : rowObj.data, rowIndex: rowIndex, row: selectedRows.length ? selectedRows :\n selectedRow, target: this.actualTarget, prevRow: gObj.getRows()[this.prevRowIndex],\n previousRowIndex: this.prevRowIndex, foreignKeyData: foreignKeyData.length ? foreignKeyData : rowObj.foreignKeyData,\n isInteracted: this.isInteracted, isHeaderCheckboxClicked: this.isHeaderCheckboxClicked, rowIndexes: indexes\n };\n this.onActionComplete(args, events.rowSelected);\n }\n this.isInteracted = false;\n this.updateRowProps(rowIndex);\n if (this.isSingleSel()) {\n break;\n }\n }\n };\n Selection.prototype.getCollectionFromIndexes = function (startIndex, endIndex) {\n var indexes = [];\n // eslint-disable-next-line prefer-const\n var _a = (startIndex <= endIndex) ?\n { i: startIndex, max: endIndex } : { i: endIndex, max: startIndex }, i = _a.i, max = _a.max;\n for (; i <= max; i++) {\n indexes.push(i);\n }\n if (startIndex > endIndex) {\n indexes.reverse();\n }\n return indexes;\n };\n Selection.prototype.clearRow = function () {\n this.clearRowCheck = true;\n this.clearRowSelection();\n };\n Selection.prototype.clearRowCallBack = function () {\n if (this.isCancelDeSelect && this.parent.checkAllRows !== 'Check') {\n return;\n }\n this.selectedRowIndexes = [];\n this.selectedRecords = [];\n this.selectRowIndex(-1);\n if (this.isSingleSel() && this.parent.isPersistSelection) {\n this.selectedRowState = {};\n }\n };\n Selection.prototype.clearSelectedRow = function (index) {\n if (this.toggle) {\n var selectedEle = this.parent.getRowByIndex(index);\n if (!this.disableUI) {\n selectedEle.removeAttribute('aria-selected');\n this.addRemoveClassesForRow(selectedEle, false, true, 'e-selectionbackground', 'e-active');\n }\n this.removed = true;\n this.updatePersistCollection(selectedEle, false);\n this.updateCheckBoxes(selectedEle);\n this.selectedRowIndexes.splice(this.selectedRowIndexes.indexOf(index), 1);\n this.selectedRecords.splice(this.selectedRecords.indexOf(this.parent.getRowByIndex(index)), 1);\n }\n };\n Selection.prototype.updateRowProps = function (startIndex) {\n this.prevRowIndex = startIndex;\n this.isRowSelected = this.selectedRowIndexes.length && true;\n };\n Selection.prototype.getPkValue = function (pkField, data) {\n return pkField ? isComplexField(pkField) ? getObject(pkField, data) : data[\"\" + pkField] : data[\"\" + pkField];\n };\n Selection.prototype.updatePersistCollection = function (selectedRow, chkState) {\n var _this = this;\n if ((this.parent.isPersistSelection || this.parent.selectionSettings.persistSelection &&\n this.parent.getPrimaryKeyFieldNames().length > 0) && !isNullOrUndefined(selectedRow)) {\n if (!this.parent.isPersistSelection) {\n this.ensureCheckboxFieldSelection();\n }\n var rowObj = this.getRowObj(selectedRow);\n var pKey_1 = rowObj.data ? this.getPkValue(this.primaryKey, rowObj.data) : null;\n if (pKey_1 === null) {\n return;\n }\n rowObj.isSelected = chkState;\n if ((chkState && !this.isPartialSelection) || (this.isPartialSelection && rowObj.isSelectable && rowObj.isSelected)) {\n this.selectedRowState[\"\" + pKey_1] = chkState;\n delete (this.unSelectedRowState[\"\" + pKey_1]);\n if (!this.persistSelectedData.some(function (data) { return _this.getPkValue(_this.primaryKey, data) === pKey_1; })) {\n this.persistSelectedData.push(rowObj.data);\n }\n }\n else {\n this.updatePersistDelete(pKey_1);\n }\n }\n };\n Selection.prototype.updatePersistDelete = function (pKey, isPartialSelection) {\n var _this = this;\n delete (this.selectedRowState[\"\" + pKey]);\n if (this.rmtHdrChkbxClicked) {\n this.unSelectedRowState[\"\" + pKey] = true;\n }\n var index;\n var isPresent = this.persistSelectedData.some(function (data, i) {\n index = i;\n return _this.getPkValue(_this.primaryKey, data) === pKey;\n });\n if (isPresent) {\n this.persistSelectedData.splice(index, 1);\n if (isPartialSelection) {\n this.parent.partialSelectedRecords.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 if (!isNullOrUndefined(chkBox)) {\n removeAddCboxClasses(chkBox.nextElementSibling, chkState);\n setChecked(chkBox, chkState);\n if (isNullOrUndefined(this.checkedTarget) || (!isNullOrUndefined(this.checkedTarget)\n && !this.checkedTarget.classList.contains('e-checkselectall'))) {\n this.setCheckAllState(rowIndex);\n }\n }\n }\n };\n Selection.prototype.updateRowSelection = function (selectedRow, startIndex, preventFocus) {\n if (!selectedRow) {\n return;\n }\n if (this.selectedRowIndexes.indexOf(startIndex) === -1) {\n this.selectedRowIndexes.push(startIndex);\n this.selectedRecords.push(selectedRow);\n }\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 if (!this.preventFocus) {\n var target = this.focus.getPrevIndexes().cellIndex ?\n selectedRow.cells[this.focus.getPrevIndexes().cellIndex] :\n selectedRow.querySelector('.e-selectionbackground:not(.e-hide):not(.e-detailrowcollapse):not(.e-detailrowexpand)');\n if (this.parent.contextMenuModule && this.mouseButton === 2) {\n target = this.parent.contextMenuModule.cell;\n }\n if (!target || preventFocus) {\n return;\n }\n this.focus.onClick({ target: target }, true);\n }\n };\n /**\n * Deselects the currently selected rows and cells.\n *\n * @returns {void}\n */\n Selection.prototype.clearSelection = function () {\n this.checkSelectAllClicked = true;\n if (this.selectionSettings.persistSelection && this.persistSelectedData.length) {\n this.deSelectedData = iterateExtend(this.persistSelectedData);\n }\n if (!this.parent.isPersistSelection || (this.parent.isPersistSelection && !this.parent.isEdit) ||\n (!isNullOrUndefined(this.checkedTarget) && this.checkedTarget.classList.contains('e-checkselectall'))) {\n var span = this.parent.element.querySelector('.e-gridpopup').querySelector('span');\n if (span.classList.contains('e-rowselect')) {\n span.classList.remove('e-spanclicked');\n }\n if (this.parent.isPersistSelection) {\n this.persistSelectedData = [];\n this.selectedRowState = {};\n }\n this.clearRowSelection();\n this.clearCellSelection();\n this.clearColumnSelection();\n this.prevRowIndex = undefined;\n this.prevCIdxs = undefined;\n this.prevECIdxs = undefined;\n this.enableSelectMultiTouch = false;\n this.isInteracted = false;\n this.checkSelectAllClicked = false;\n this.isHdrSelectAllClicked = false;\n }\n };\n /**\n * Deselects the currently selected rows.\n *\n * @returns {void}\n */\n Selection.prototype.clearRowSelection = function () {\n var _this = this;\n if (this.isRowSelected) {\n var rows_1 = this.parent.getDataRows();\n var data_1 = [];\n var row_1 = [];\n var rowIndex_1 = [];\n var foreignKeyData_1 = [];\n var target_1 = this.target;\n for (var i = 0, len = this.selectedRowIndexes.length; i < len; i++) {\n var currentRow = this.parent.editSettings.mode === 'Batch' ?\n this.parent.getRows()[this.selectedRowIndexes[parseInt(i.toString(), 10)]]\n : this.parent.getDataRows()[this.selectedRowIndexes[parseInt(i.toString(), 10)]];\n var rowObj = this.getRowObj(currentRow);\n if (rowObj) {\n data_1.push(rowObj.data);\n row_1.push(currentRow);\n rowIndex_1.push(this.selectedRowIndexes[parseInt(i.toString(), 10)]);\n foreignKeyData_1.push(rowObj.foreignKeyData);\n }\n }\n if (this.selectionSettings.persistSelection && this.selectionSettings.checkboxMode !== 'ResetOnRowClick') {\n this.isRowClicked = this.checkSelectAllClicked ? true : false;\n }\n this.rowDeselect(events.rowDeselecting, rowIndex_1, data_1, row_1, foreignKeyData_1, target_1, null, function () {\n if (_this.isCancelDeSelect && (_this.isRowClicked || _this.checkSelectAllClicked || (_this.isInteracted &&\n !_this.parent.isPersistSelection))) {\n if (_this.parent.isPersistSelection) {\n if (_this.getCheckAllStatus(_this.parent.element.querySelector('.e-checkselectall')) === 'Intermediate') {\n for (var i = 0; i < _this.selectedRecords.length; i++) {\n _this.updatePersistCollection(_this.selectedRecords[parseInt(i.toString(), 10)], true);\n }\n }\n else {\n _this.parent.checkAllRows = 'Check';\n _this.updatePersistSelectedData(true);\n }\n }\n if (_this.clearRowCheck) {\n _this.clearRowCallBack();\n _this.clearRowCheck = false;\n if (_this.selectRowCheck) {\n _this.selectRowCallBack();\n _this.selectRowCheck = false;\n }\n }\n return;\n }\n var element = [].slice.call(rows_1.filter(function (record) { return record.hasAttribute('aria-selected'); }));\n for (var j = 0; j < element.length; j++) {\n if (!_this.disableUI) {\n element[parseInt(j.toString(), 10)].removeAttribute('aria-selected');\n _this.addRemoveClassesForRow(element[parseInt(j.toString(), 10)], false, true, 'e-selectionbackground', 'e-active');\n }\n // tslint:disable-next-line:align\n if (!_this.isPrevRowSelection) {\n _this.updatePersistCollection(element[parseInt(j.toString(), 10)], false);\n }\n _this.updateCheckBoxes(element[parseInt(j.toString(), 10)]);\n }\n _this.selectedRowIndexes = [];\n _this.selectedRecords = [];\n _this.isRowSelected = false;\n _this.selectRowIndex(-1);\n _this.isPrevRowSelection = false;\n _this.rowDeselect(events.rowDeselected, rowIndex_1, data_1, row_1, foreignKeyData_1, target_1, null, undefined, null);\n if (_this.clearRowCheck) {\n _this.clearRowCallBack();\n _this.clearRowCheck = false;\n if (_this.selectRowCheck) {\n _this.selectRowCallBack();\n _this.selectRowCheck = false;\n }\n }\n }, null);\n }\n else {\n if (this.clearRowCheck) {\n this.clearRowCallBack();\n this.clearRowCheck = false;\n if (this.selectRowCheck) {\n this.selectRowCallBack();\n this.selectRowCheck = false;\n }\n }\n }\n };\n Selection.prototype.rowDeselect = function (type, rowIndex, data, row, foreignKeyData, target, mRow, rowDeselectCallBack, frozenRightRow) {\n var _this = this;\n if ((this.selectionSettings.persistSelection && (this.isRowClicked || this.checkSelectAllClicked || (this.focus['activeKey'] &&\n this.focus.currentInfo.element.classList.contains('e-gridchkbox') && this.focus['activeKey'] === 'space'))) ||\n !this.selectionSettings.persistSelection) {\n var cancl_1 = 'cancel';\n var isSingleDeSel = rowIndex.length === 1 && this.deSelectedData.length === 1;\n var rowDeselectObj = {\n rowIndex: rowIndex[0], data: this.selectionSettings.persistSelection && (this.parent.checkAllRows === 'Uncheck' &&\n !isSingleDeSel) && this.selectionSettings.checkboxMode !== 'ResetOnRowClick' ? this.deSelectedData : data,\n foreignKeyData: foreignKeyData, cancel: false, isInteracted: this.isInteracted,\n isHeaderCheckboxClicked: this.isHeaderCheckboxClicked\n };\n if (type === 'rowDeselected') {\n delete rowDeselectObj.cancel;\n }\n var rowInString = 'row';\n var target_2 = 'target';\n var rowidx = 'rowIndex';\n var rowidxex = 'rowIndexes';\n var dataTxt = 'data';\n var foreignKey = 'foreignKeyData';\n rowDeselectObj[\"\" + rowInString] = row;\n rowDeselectObj[\"\" + target_2] = this.actualTarget;\n var isHeaderCheckBxClick = this.actualTarget && !isNullOrUndefined(closest(this.actualTarget, 'thead'));\n if (isHeaderCheckBxClick || rowIndex.length > 1) {\n rowDeselectObj[\"\" + rowidx] = rowIndex[0];\n rowDeselectObj[\"\" + rowidxex] = rowIndex;\n }\n else if (rowIndex.length === 1) {\n rowDeselectObj[\"\" + dataTxt] = rowDeselectObj[\"\" + dataTxt][0];\n rowDeselectObj[\"\" + rowInString] = rowDeselectObj[\"\" + rowInString][0];\n rowDeselectObj[\"\" + foreignKey] = rowDeselectObj[\"\" + foreignKey][0];\n if (this.isAddRowsToSelection) {\n rowDeselectObj[\"\" + rowidxex] = rowIndex;\n }\n }\n this.parent.trigger(type, rowDeselectObj, function (args) {\n _this.isCancelDeSelect = args[\"\" + cancl_1];\n if (!_this.isCancelDeSelect || (!_this.isRowClicked && !_this.isInteracted && !_this.checkSelectAllClicked)) {\n _this.updatePersistCollection(row[0], false);\n _this.updateCheckBoxes(row[0], undefined, rowIndex[0]);\n }\n if (rowDeselectCallBack !== undefined) {\n rowDeselectCallBack();\n }\n });\n }\n else if (this.selectionSettings.persistSelection && !this.isInteracted) {\n if (rowDeselectCallBack !== undefined) {\n rowDeselectCallBack();\n }\n }\n };\n Selection.prototype.getRowObj = function (row) {\n if (row === void 0) { row = this.currentIndex; }\n if (isNullOrUndefined(row)) {\n return {};\n }\n if (typeof row === 'number') {\n row = this.parent.getRowByIndex(row);\n }\n if (row) {\n return this.parent.getRowObjectFromUID(row.getAttribute('data-uid')) || {};\n }\n return {};\n };\n /**\n * Selects a cell by the given index.\n *\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n Selection.prototype.selectCell = function (cellIndex, isToggle) {\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var args;\n var selectedCell = gObj.getCellFromIndex(cellIndex.rowIndex, this.getColIndex(cellIndex.rowIndex, cellIndex.cellIndex));\n this.currentIndex = cellIndex.rowIndex;\n var selectedData = this.getCurrentBatchRecordChanges()[this.currentIndex];\n if (!this.isCellType() || !selectedCell || this.isEditing()) {\n return;\n }\n var isCellSelected = selectedCell.classList.contains('e-cellselectionbackground');\n isToggle = !isToggle ? isToggle : (!isUndefined(this.prevCIdxs) &&\n cellIndex.rowIndex === this.prevCIdxs.rowIndex && cellIndex.cellIndex === this.prevCIdxs.cellIndex &&\n isCellSelected);\n if (!isToggle) {\n args = {\n data: selectedData, cellIndex: cellIndex,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest,\n previousRowCell: this.prevECIdxs ?\n this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined,\n cancel: false\n };\n var currentCell = 'currentCell';\n args[\"\" + currentCell] = selectedCell;\n var previousRowCellIndex = 'previousRowCellIndex';\n args[\"\" + previousRowCellIndex] = this.prevECIdxs;\n this.parent.trigger(events.cellSelecting, this.fDataUpdate(args), this.successCallBack(args, isToggle, cellIndex, selectedCell, selectedData));\n this.cellselected = true;\n }\n else {\n this.successCallBack(args, isToggle, cellIndex, selectedCell, selectedData)(args);\n }\n };\n Selection.prototype.successCallBack = function (cellSelectingArgs, isToggle, cellIndex, selectedCell, selectedData) {\n var _this = this;\n return function (cellSelectingArgs) {\n var cncl = 'cancel';\n var currentCell = 'currentCell';\n if (!isNullOrUndefined(cellSelectingArgs) && cellSelectingArgs[\"\" + cncl] === true) {\n return;\n }\n if (!isToggle) {\n cellSelectingArgs[\"\" + currentCell] = cellSelectingArgs[\"\" + currentCell] ? cellSelectingArgs[\"\" + currentCell] : selectedCell;\n }\n _this.clearCell();\n if (!isToggle) {\n _this.updateCellSelection(selectedCell, cellIndex.rowIndex, cellIndex.cellIndex);\n }\n if (!isToggle) {\n var args = {\n data: selectedData, cellIndex: cellIndex, currentCell: selectedCell,\n selectedRowCellIndex: _this.selectedRowCellIndexes,\n previousRowCell: _this.prevECIdxs ?\n _this.getCellIndex(_this.prevECIdxs.rowIndex, _this.prevECIdxs.cellIndex) : undefined\n };\n var previousRowCellIndex = 'previousRowCellIndex';\n args[\"\" + previousRowCellIndex] = _this.prevECIdxs;\n _this.updateCellProps(cellIndex, cellIndex);\n _this.onActionComplete(args, events.cellSelected);\n }\n };\n };\n Selection.prototype.getCellIndex = function (rIdx, cIdx) {\n return this.parent.getCellFromIndex(rIdx, cIdx);\n };\n /**\n * Selects a range of cells from start and end indexes.\n *\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 * @returns {void}\n */\n Selection.prototype.selectCellsByRange = function (startIndex, endIndex) {\n var _this = this;\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var selectedCell = gObj.getCellFromIndex(startIndex.rowIndex, startIndex.cellIndex);\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 if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n return;\n }\n var args = {\n data: selectedData, cellIndex: startIndex, currentCell: selectedCell,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n };\n var previousRowCellIndex = 'previousRowCellIndex';\n args[\"\" + previousRowCellIndex] = this.prevECIdxs;\n this.parent.trigger(events.cellSelecting, this.fDataUpdate(args), function (cellSelectingArgs) {\n if (!isNullOrUndefined(cellSelectingArgs) && cellSelectingArgs[\"\" + cncl] === true) {\n return;\n }\n _this.clearCell();\n if (startIndex.rowIndex > endIndex.rowIndex) {\n var temp = startIndex;\n startIndex = endIndex;\n endIndex = temp;\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 }\n else {\n min = startIndex.cellIndex;\n max = endIndex.cellIndex;\n }\n cellIndexes = [];\n for (var j = min < max ? min : max, len = min > max ? min : max; j <= len; j++) {\n selectedCell = gObj.getCellFromIndex(i, j);\n if (!selectedCell) {\n continue;\n }\n cellIndexes.push(j);\n _this.updateCellSelection(selectedCell);\n _this.addAttribute(selectedCell);\n }\n _this.selectedRowCellIndexes.push({ rowIndex: i, cellIndexes: cellIndexes });\n }\n var cellSelectedArgs = {\n data: selectedData, cellIndex: edIndex, currentCell: gObj.getCellFromIndex(edIndex.rowIndex, edIndex.cellIndex),\n selectedRowCellIndex: _this.selectedRowCellIndexes,\n previousRowCell: _this.prevECIdxs ? _this.getCellIndex(_this.prevECIdxs.rowIndex, _this.prevECIdxs.cellIndex) : undefined\n };\n var previousRowCellIndex = 'previousRowCellIndex';\n cellSelectedArgs[\"\" + previousRowCellIndex] = _this.prevECIdxs;\n if (!_this.isDragged) {\n _this.onActionComplete(cellSelectedArgs, events.cellSelected);\n _this.cellselected = true;\n }\n _this.updateCellProps(stIndex, edIndex);\n });\n };\n /**\n * Selects a collection of cells by row and column indexes.\n *\n * @param {ISelectedCell[]} rowCellIndexes - Specifies the row and column indexes.\n * @returns {void}\n */\n Selection.prototype.selectCells = function (rowCellIndexes) {\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var selectedCell = gObj.getCellFromIndex(rowCellIndexes[0].rowIndex, rowCellIndexes[0].cellIndexes[0]);\n this.currentIndex = rowCellIndexes[0].rowIndex;\n var selectedData = this.getCurrentBatchRecordChanges()[this.currentIndex];\n if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n return;\n }\n var cellSelectArgs = {\n data: selectedData, cellIndex: rowCellIndexes[0].cellIndexes[0],\n currentCell: selectedCell, isCtrlPressed: this.isMultiCtrlRequest,\n isShiftPressed: this.isMultiShiftRequest,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n };\n var previousRowCellIndex = 'previousRowCellIndex';\n cellSelectArgs[\"\" + previousRowCellIndex] = this.prevECIdxs;\n this.onActionBegin(cellSelectArgs, events.cellSelecting);\n for (var i = 0, len = rowCellIndexes.length; i < len; i++) {\n for (var j = 0, cellLen = rowCellIndexes[parseInt(i.toString(), 10)].cellIndexes.length; j < cellLen; j++) {\n selectedCell = gObj.getCellFromIndex(rowCellIndexes[parseInt(i.toString(), 10)].rowIndex, rowCellIndexes[parseInt(i.toString(), 10)].cellIndexes[parseInt(j.toString(), 10)]);\n if (!selectedCell) {\n continue;\n }\n this.updateCellSelection(selectedCell);\n this.addAttribute(selectedCell);\n this.addRowCellIndex({ rowIndex: rowCellIndexes[parseInt(i.toString(), 10)].rowIndex,\n cellIndex: rowCellIndexes[parseInt(i.toString(), 10)].cellIndexes[parseInt(j.toString(), 10)] });\n }\n }\n this.updateCellProps({ rowIndex: rowCellIndexes[0].rowIndex, cellIndex: rowCellIndexes[0].cellIndexes[0] }, { rowIndex: rowCellIndexes[0].rowIndex, cellIndex: rowCellIndexes[0].cellIndexes[0] });\n var cellSelectedArgs = {\n data: selectedData, cellIndex: rowCellIndexes[0].cellIndexes[0],\n currentCell: selectedCell, selectedRowCellIndex: this.selectedRowCellIndexes,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n };\n var prvRowCellIndex = 'previousRowCellIndex';\n cellSelectedArgs[\"\" + prvRowCellIndex] = this.prevECIdxs;\n this.onActionComplete(cellSelectedArgs, events.cellSelected);\n };\n /**\n * Select cells with existing cell selection by passing row and column index.\n *\n * @param {IIndex} cellIndexes - Defines the collection of row and column index.\n * @returns {void}\n * @hidden\n */\n Selection.prototype.addCellsToSelection = function (cellIndexes) {\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var selectedCell;\n var index;\n this.currentIndex = cellIndexes[0].rowIndex;\n var cncl = 'cancel';\n var selectedData = this.getCurrentBatchRecordChanges()[this.currentIndex];\n if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n return;\n }\n this.hideAutoFill();\n var rowObj;\n rowObj = gObj.getRowsObject()[cellIndexes[0].rowIndex];\n if (gObj.groupSettings.columns.length > 0) {\n rowObj = gObj.getRowObjectFromUID(this.target.parentElement.getAttribute('data-uid'));\n }\n var foreignKeyData = [];\n for (var _i = 0, cellIndexes_1 = cellIndexes; _i < cellIndexes_1.length; _i++) {\n var cellIndex = cellIndexes_1[_i];\n for (var i = 0, len = this.selectedRowCellIndexes.length; i < len; i++) {\n if (this.selectedRowCellIndexes[parseInt(i.toString(), 10)].rowIndex === cellIndex.rowIndex) {\n index = i;\n break;\n }\n }\n selectedCell = gObj.getCellFromIndex(cellIndex.rowIndex, this.getColIndex(cellIndex.rowIndex, cellIndex.cellIndex));\n var idx = cellIndex.cellIndex;\n if (gObj.groupSettings.columns.length > 0) {\n foreignKeyData.push(rowObj.cells[idx + gObj.groupSettings.columns.length].foreignKeyData);\n }\n else {\n foreignKeyData.push(rowObj.cells[parseInt(idx.toString(), 10)].foreignKeyData);\n }\n var args = {\n cancel: false, data: selectedData, cellIndex: cellIndexes[0],\n isShiftPressed: this.isMultiShiftRequest,\n currentCell: selectedCell, isCtrlPressed: this.isMultiCtrlRequest,\n previousRowCell: this.prevECIdxs ?\n gObj.getCellFromIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n };\n var prvRowCellIndex = 'previousRowCellIndex';\n args[\"\" + prvRowCellIndex] = this.prevECIdxs;\n var isUnSelected = index > -1;\n if (isUnSelected) {\n var selectedCellIdx = this.selectedRowCellIndexes[parseInt(index.toString(), 10)].cellIndexes;\n if (selectedCellIdx.indexOf(cellIndex.cellIndex) > -1 || (this.selectionSettings.mode === 'Both' &&\n selectedCell.classList.contains('e-gridchkbox') && !selectedCell.getAttribute('aria-selected'))) {\n this.cellDeselect(events.cellDeselecting, [{ rowIndex: cellIndex.rowIndex, cellIndexes: [cellIndex.cellIndex] }], selectedData, [selectedCell], foreignKeyData);\n selectedCellIdx.splice(selectedCellIdx.indexOf(cellIndex.cellIndex), 1);\n if (selectedCellIdx.length === 0) {\n this.selectedRowCellIndexes.splice(index, 1);\n }\n selectedCell.classList.remove('e-cellselectionbackground');\n selectedCell.removeAttribute('aria-selected');\n this.cellDeselect(events.cellDeselected, [{ rowIndex: cellIndex.rowIndex, cellIndexes: [cellIndex.cellIndex] }], selectedData, [selectedCell], foreignKeyData);\n }\n else {\n isUnSelected = false;\n this.onActionBegin(args, events.cellSelecting);\n this.addRowCellIndex({ rowIndex: cellIndex.rowIndex, cellIndex: cellIndex.cellIndex });\n this.updateCellSelection(selectedCell);\n this.addAttribute(selectedCell);\n }\n }\n else {\n this.onActionBegin(args, events.cellSelecting);\n if (!isNullOrUndefined(args) && args[\"\" + cncl] === true) {\n return;\n }\n this.updateCellSelection(selectedCell, cellIndex.rowIndex, cellIndex.cellIndex);\n }\n if (!isUnSelected) {\n var cellSelectedArgs = {\n data: selectedData, cellIndex: cellIndexes[0], currentCell: selectedCell,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) :\n undefined, selectedRowCellIndex: this.selectedRowCellIndexes\n };\n cellSelectedArgs[\"\" + prvRowCellIndex] = this.prevECIdxs;\n this.onActionComplete(cellSelectedArgs, events.cellSelected);\n this.cellselected = true;\n }\n this.updateCellProps(cellIndex, cellIndex);\n }\n };\n Selection.prototype.getColIndex = function (rowIndex, index) {\n var col = this.parent.getColumnByIndex(index);\n var cells = getCellsByTableName(this.parent, col, rowIndex);\n if (cells) {\n for (var m = 0; m < cells.length; m++) {\n var colIndex = parseInt(cells[parseInt(m.toString(), 10)].getAttribute(literals.dataColIndex), 10);\n if (colIndex === index) {\n return m;\n }\n }\n }\n return -1;\n };\n Selection.prototype.getLastColIndex = function (rowIndex) {\n var cells = this.parent.getDataRows()[parseInt(rowIndex.toString(), 10)].querySelectorAll('td.e-rowcell');\n return parseInt(cells[cells.length - 1].getAttribute(literals.dataColIndex), 10);\n };\n Selection.prototype.clearCell = function () {\n this.clearCellSelection();\n };\n Selection.prototype.cellDeselect = function (type, cellIndexes, data, cells, foreignKeyData) {\n var cancl = 'cancel';\n if (cells && cells.length > 0) {\n for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n var cell = cells_1[_i];\n if (cell && cell.classList.contains(literals.gridChkBox)) {\n this.updateCheckBoxes(closest(cell, 'tr'));\n }\n }\n }\n var args = {\n cells: cells, data: data, cellIndexes: cellIndexes, foreignKeyData: foreignKeyData, cancel: false\n };\n this.parent.trigger(type, args);\n this.isPreventCellSelect = args[\"\" + cancl];\n };\n Selection.prototype.updateCellSelection = function (selectedCell, rowIndex, cellIndex) {\n if (!isNullOrUndefined(rowIndex)) {\n this.addRowCellIndex({ rowIndex: rowIndex, cellIndex: cellIndex });\n }\n selectedCell.classList.add('e-cellselectionbackground');\n if (selectedCell.classList.contains(literals.gridChkBox)) {\n this.updateCheckBoxes(closest(selectedCell, 'tr'), true);\n }\n this.addAttribute(selectedCell);\n };\n Selection.prototype.addAttribute = function (cell) {\n this.target = cell;\n if (!isNullOrUndefined(cell)) {\n cell.setAttribute('aria-selected', 'true');\n if (!this.preventFocus) {\n this.focus.onClick({ target: cell }, true);\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 Selection.prototype.addRowCellIndex = function (rowCellIndex) {\n var isRowAvail;\n var index;\n for (var i = 0, len = this.selectedRowCellIndexes.length; i < len; i++) {\n if (this.selectedRowCellIndexes[parseInt(i.toString(), 10)].rowIndex === rowCellIndex.rowIndex) {\n isRowAvail = true;\n index = i;\n break;\n }\n }\n if (isRowAvail) {\n if (this.selectedRowCellIndexes[parseInt(index.toString(), 10)].cellIndexes.indexOf(rowCellIndex.cellIndex) < 0) {\n this.selectedRowCellIndexes[parseInt(index.toString(), 10)].cellIndexes.push(rowCellIndex.cellIndex);\n }\n }\n else {\n this.selectedRowCellIndexes.push({ rowIndex: rowCellIndex.rowIndex, cellIndexes: [rowCellIndex.cellIndex] });\n }\n };\n /**\n * Deselects the currently selected cells.\n *\n * @returns {void}\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 this.hideAutoFill();\n for (var i = 0, len = rowCell.length; i < len; i++) {\n data.push(currentViewData[rowCell[parseInt(i.toString(), 10)].rowIndex]);\n var rowObj = this.getRowObj(rowCell[parseInt(i.toString(), 10)].rowIndex);\n for (var j = 0, cLen = rowCell[parseInt(i.toString(), 10)].cellIndexes.length; j < cLen; j++) {\n if (rowObj.cells) {\n foreignKeyData.push(rowObj.cells[rowCell[parseInt(i.toString(), 10)]\n .cellIndexes[parseInt(j.toString(), 10)]].foreignKeyData);\n }\n cells.push(gObj.getCellFromIndex(rowCell[parseInt(i.toString(), 10)].rowIndex, rowCell[parseInt(i.toString(), 10)].cellIndexes[parseInt(j.toString(), 10)]));\n }\n }\n this.cellDeselect(events.cellDeselecting, rowCell, data, cells, foreignKeyData);\n if (this.isPreventCellSelect === true) {\n return;\n }\n for (var i = 0, len = selectedCells.length; i < len; i++) {\n selectedCells[parseInt(i.toString(), 10)].classList.remove('e-cellselectionbackground');\n selectedCells[parseInt(i.toString(), 10)].removeAttribute('aria-selected');\n }\n if (this.bdrElement) {\n this.showHideBorders('none');\n }\n this.selectedRowCellIndexes = [];\n this.isCellSelected = false;\n if (!this.isDragged && this.cellselected) {\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 cells = [];\n for (var i = 0, len = rows.length; i < len; i++) {\n cells = cells.concat([].slice.call(rows[parseInt(i.toString(), 10)].getElementsByClassName('e-cellselectionbackground')));\n }\n return cells;\n };\n Selection.prototype.mouseMoveHandler = function (e) {\n e.preventDefault();\n this.stopTimer();\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 if (!this.isCellDrag) {\n if (!target) {\n target = closest(document.elementFromPoint(this.parent.element.offsetLeft + 2, e.clientY), 'tr');\n }\n if (x1 > x2) {\n tmp = x2;\n x2 = x1;\n x1 = tmp;\n }\n if (y1 > y2) {\n tmp = y2;\n y2 = y1;\n y1 = tmp;\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 if (target && !e.ctrlKey && !e.shiftKey) {\n var rowIndex = parseInt(target.getAttribute(literals.dataRowIndex), 10);\n if (!this.isCellDrag) {\n this.hideAutoFill();\n this.selectRowsByRange(this.startDIndex, rowIndex);\n this.isRowDragSelected = true;\n }\n else {\n var td = parentsUntil(e.target, literals.rowCell);\n if (td) {\n this.startAFCell = this.startCell;\n this.endAFCell = parentsUntil(e.target, literals.rowCell);\n if (rowIndex > -1) {\n this.selectLikeExcel(e, rowIndex, parseInt(td.getAttribute(literals.dataColIndex), 10));\n }\n }\n }\n }\n if (!e.ctrlKey && !e.shiftKey && !this.parent.enableVirtualization && !this.parent.enableInfiniteScrolling &&\n !this.parent.enableColumnVirtualization && !this.parent.groupSettings.columns.length && this.isCellDrag) {\n this.updateScrollPosition(e, position, this.parent.getContent());\n }\n };\n Selection.prototype.updateScrollPosition = function (e, position, scrollElem) {\n var _this = this;\n var cliRect = scrollElem.getBoundingClientRect();\n if (cliRect.left >= position.x - 20) {\n this.timer1 = window.setInterval(function () { _this.setScrollPosition(scrollElem.firstElementChild, 'left', e); }, 200);\n }\n else if (cliRect.left + scrollElem.clientWidth - 20 -\n (this.parent.height !== 'auto' ? getScrollBarWidth() : 0) < position.x) {\n this.timer1 = window.setInterval(function () { _this.setScrollPosition(scrollElem.firstElementChild, 'right', e); }, 200);\n }\n if (cliRect.top >= position.y - (this.parent.getRowHeight() * 0.5)) {\n this.timer2 = window.setInterval(function () { _this.setScrollPosition(scrollElem.firstElementChild, 'up', e); }, 200);\n }\n else if (cliRect.top + scrollElem.clientHeight - (this.parent.getRowHeight() * 0.5) -\n (scrollElem.firstElementChild.scrollWidth > scrollElem.firstElementChild.offsetWidth ?\n getScrollBarWidth() : 0) <= position.y) {\n this.timer2 = window.setInterval(function () { _this.setScrollPosition(scrollElem.firstElementChild, 'down', e); }, 200);\n }\n };\n Selection.prototype.stopTimer = function () {\n if (this.timer1) {\n window.clearInterval(this.timer1);\n this.timer1 = null;\n }\n if (this.timer2) {\n window.clearInterval(this.timer2);\n this.timer2 = null;\n }\n this.preventFocus = false;\n };\n Selection.prototype.setScrollPosition = function (scrollElem, direction, e) {\n var rowIndex = -1;\n var colIndex = -1;\n if (this.endAFCell || this.prevECIdxs) {\n rowIndex = this.endAFCell ? parseInt(this.endAFCell.getAttribute('index')) : this.prevECIdxs.rowIndex;\n colIndex = this.endAFCell ? parseInt(this.endAFCell.getAttribute('data-colindex')) : this.prevECIdxs.cellIndex;\n }\n switch (direction) {\n case 'up':\n if (e && closest(e.target, '.e-headercontent'))\n return;\n if (this.isAutoFillSel && this.selectedRowCellIndexes.length &&\n ((this.selectedRowCellIndexes.length === 1 && this.startAFCell !== this.startCell) ||\n (this.selectedRowCellIndexes.length > 1 && this.startAFCell.getBoundingClientRect().top > 0))) {\n rowIndex = parseInt(this.startAFCell.getAttribute('index'));\n }\n rowIndex -= 1;\n if (this.parent.frozenRows)\n rowIndex += this.parent.frozenRows + 1;\n rowIndex < 1 ? scrollElem.scrollTop = 0 : scrollElem.scrollTop -= this.parent.getRowByIndex(rowIndex).offsetHeight;\n break;\n case 'down':\n if (rowIndex < this.parent.getRows().length - 1) {\n rowIndex += 1;\n scrollElem.scrollTop += this.parent.getRowByIndex(rowIndex).offsetHeight;\n }\n else {\n scrollElem.scrollTop = scrollElem.scrollHeight;\n }\n break;\n case 'left':\n if (colIndex > 0 && rowIndex > -1) {\n if (this.isAutoFillSel && this.selectedRowCellIndexes.length &&\n ((this.selectedRowCellIndexes[0].cellIndexes.length > 0 && this.startAFCell !== this.startCell) ||\n (this.selectedRowCellIndexes[0].cellIndexes.length > 1 && this.startAFCell.getBoundingClientRect().left > 0))) {\n colIndex = parseInt(this.startAFCell.getAttribute('data-colindex'));\n }\n var nextEle = this.findNextCell(scrollElem, direction, colIndex, rowIndex);\n colIndex = nextEle ? parseInt(nextEle.getAttribute('data-colindex')) : -1;\n colIndex < 1 ? scrollElem.scrollLeft = 0 : scrollElem.scrollLeft -= nextEle.offsetWidth;\n }\n break;\n case 'right':\n if (colIndex < this.parent.columns.length - 1) {\n var nextEle = this.findNextCell(scrollElem, direction, colIndex, rowIndex);\n colIndex = nextEle ? parseInt(nextEle.getAttribute('data-colindex')) : -1;\n colIndex < this.parent.columns.length - 1 ? scrollElem.scrollLeft += nextEle.offsetWidth : scrollElem.scrollLeft = scrollElem.scrollWidth;\n }\n break;\n }\n if (rowIndex > -1 && colIndex > -1) {\n var e_1 = { target: this.parent.getCellFromIndex(rowIndex, colIndex) };\n this.endAFCell = e_1.target;\n this.preventFocus = true;\n this.selectLikeExcel(e_1, rowIndex, colIndex);\n }\n };\n Selection.prototype.findNextCell = function (scrollElem, direction, colInd, rowInd) {\n var nextEle = this.parent.getCellFromIndex(rowInd, direction === 'left' ? colInd - 1 : colInd + 1);\n if (nextEle && nextEle.classList.contains('e-hide')) {\n var siblingEles = nextEle.closest('tr').querySelectorAll('.e-rowcell:not(.e-hide)');\n var nextEleInd = Array.from(siblingEles).indexOf(nextEle.nextElementSibling);\n if (nextEleInd > 0 && nextEleInd < siblingEles.length - 1) {\n nextEle = siblingEles[nextEleInd + (direction === 'left' ? -1 : 1)];\n return nextEle;\n }\n else {\n scrollElem.scrollLeft = 0;\n return null;\n }\n }\n return nextEle;\n };\n Selection.prototype.selectLikeExcel = function (e, rowIndex, cellIndex) {\n if (!this.isAutoFillSel) {\n this.clearCellSelection();\n this.selectCellsByRange({ rowIndex: this.startDIndex, cellIndex: this.startDCellIndex }, { rowIndex: rowIndex, cellIndex: cellIndex });\n this.drawBorders();\n }\n else { //Autofill\n this.showAFBorders();\n this.selectLikeAutoFill(e);\n }\n };\n Selection.prototype.setFrozenBorders = function (parentEle, border, bdrStr) {\n var width = border.style.borderWidth.toString().split(' ');\n var strCell = ['', 'e-leftfreeze', 'e-unfreeze', 'e-leftfreeze', 'e-unfreeze', 'e-rightfreeze', 'e-rightfreeze'];\n var cells = [].slice.call(parentEle.querySelectorAll('.e-cellselectionbackground' + '.' + strCell[\"\" + bdrStr])).\n filter(function (ele) { return ele.style.display === ''; });\n var fixedCells = [].slice.call(parentEle.querySelectorAll('.e-cellselectionbackground.e-fixedfreeze')).\n filter(function (ele) { return ele.style.display === ''; });\n var isRtl = this.parent.enableRtl;\n if (cells.length) {\n var firstRowIdx = cells[0].getAttribute('index');\n var firstColIdx = cells[0].getAttribute('data-colindex');\n var lastRowIdx = cells[cells.length - 1].getAttribute('index');\n var lastColIdx = cells[cells.length - 1].getAttribute('data-colindex');\n for (var i = 0; i < cells.length; i++) {\n if (cells[parseInt(i.toString(), 10)].getAttribute('index') === firstRowIdx && (width.length === 1 || (width.length === 3\n && parseInt(width[0], 10) === 2) || (width.length === 4 && parseInt(width[0], 10) === 2))) {\n cells[parseInt(i.toString(), 10)].classList.add('e-xlsel-top-border');\n }\n if (cells[parseInt(i.toString(), 10)].getAttribute('data-colindex') === firstColIdx && (width.length === 1 ||\n (width.length === 3 && parseInt(width[1], 10) === 2) || (width.length === 4 && (((!isRtl && parseInt(width[3], 10) === 2)) ||\n (isRtl && parseInt(width[1], 10) === 2))))) {\n cells[parseInt(i.toString(), 10)].classList.add(isRtl ? 'e-xlsel-right-border' : 'e-xlsel-left-border');\n }\n if (cells[parseInt(i.toString(), 10)].getAttribute('index') === lastRowIdx && (width.length === 1 ||\n (width.length === 3 && parseInt(width[2], 10) === 2) || (width.length === 4 && parseInt(width[2], 10) === 2))) {\n cells[parseInt(i.toString(), 10)].classList.add('e-xlsel-bottom-border');\n }\n if (cells[parseInt(i.toString(), 10)].getAttribute('data-colindex') === lastColIdx && (width.length === 1 ||\n (width.length === 3 && parseInt(width[1], 10) === 2) || (width.length === 4 && ((!isRtl && parseInt(width[1], 10) === 2)) ||\n (isRtl && parseInt(width[3], 10) === 2)))) {\n cells[parseInt(i.toString(), 10)].classList.add(isRtl ? 'e-xlsel-left-border' : 'e-xlsel-right-border');\n }\n }\n }\n if (fixedCells.length) {\n var firstRowIdx = fixedCells[0].getAttribute('index');\n var firstColIdx = fixedCells[0].getAttribute('data-colindex');\n var lastRowIdx = fixedCells[fixedCells.length - 1].getAttribute('index');\n var lastColIdx = fixedCells[fixedCells.length - 1].getAttribute('data-colindex');\n for (var i = 0; i < fixedCells.length; i++) {\n var idx = fixedCells[parseInt(i.toString(), 10)].getAttribute('index');\n var colIdx = fixedCells[parseInt(i.toString(), 10)].getAttribute('data-colindex');\n if (idx === firstRowIdx &&\n ((!this.parent.getHeaderContent().querySelector('.e-cellselectionbackground.e-fixedfreeze')\n && parentsUntil(parentEle, 'e-content')) || !parentsUntil(parentEle, 'e-content'))) {\n fixedCells[parseInt(i.toString(), 10)].classList.add('e-xlsel-top-border');\n }\n if (idx === lastRowIdx &&\n ((!this.parent.getContent().querySelector('.e-cellselectionbackground.e-fixedfreeze')\n && parentsUntil(parentEle, 'e-headercontent')) || !parentsUntil(parentEle, 'e-headercontent'))) {\n fixedCells[parseInt(i.toString(), 10)].classList.add('e-xlsel-bottom-border');\n }\n var preCell = fixedCells[parseInt(i.toString(), 10)].parentElement.children[parseInt(colIdx, 10) - 1];\n if (colIdx === firstColIdx && (!preCell || (preCell && !preCell.classList.contains('e-cellselectionbackground')))) {\n fixedCells[parseInt(i.toString(), 10)].classList.add(isRtl ? 'e-xlsel-right-border' : 'e-xlsel-left-border');\n }\n var nextCell = fixedCells[parseInt(i.toString(), 10)].parentElement.children[parseInt(colIdx, 10) + 1];\n if (colIdx === lastColIdx && (!nextCell || (nextCell && !nextCell.classList.contains('e-cellselectionbackground')))) {\n fixedCells[parseInt(i.toString(), 10)].classList.add(isRtl ? 'e-xlsel-left-border' : 'e-xlsel-right-border');\n }\n }\n }\n };\n Selection.prototype.refreshFrozenBorders = function () {\n if (this.bdrElement) {\n this.setFrozenBorders(this.parent.getContentTable(), this.bdrElement, '1');\n if (this.parent.isFrozenGrid() && this.parent.getFrozenMode() === literals.leftRight) {\n this.setFrozenBorders(this.parent.getContentTable(), this.frcBdrElement, '5');\n }\n if (this.parent.frozenRows) {\n this.setFrozenBorders(this.parent.getHeaderTable(), this.fhBdrElement, '3');\n if (this.parent.isFrozenGrid() && this.parent.getFrozenMode() === literals.leftRight) {\n this.setFrozenBorders(this.parent.getHeaderTable(), this.frhBdrElement, '6');\n }\n }\n }\n };\n Selection.prototype.drawBorders = function () {\n if (this.selectionSettings.cellSelectionMode === 'BoxWithBorder' && this.selectedRowCellIndexes.length && !this.parent.isEdit) {\n this.parent.element.classList.add('e-enabledboxbdr');\n if (!this.bdrElement) {\n this.createBorders();\n }\n this.positionBorders();\n if (this.parent.isFrozenGrid()) {\n this.showHideBorders('none', true);\n this.refreshFrozenBorders();\n }\n }\n else {\n this.showHideBorders('none');\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 Selection.prototype.isLastRow = function (cell) {\n var rows = [].slice.call(closest(cell, literals.tbody).querySelectorAll('.e-row:not(.e-hiddenrow)'));\n return cell.parentElement === rows[rows.length - 1];\n };\n Selection.prototype.isFirstRow = function (cell) {\n var rows = [].slice.call(closest(cell, literals.tbody).querySelectorAll('.e-row:not(.e-hiddenrow)'));\n return cell.parentElement === rows[0];\n };\n Selection.prototype.isFirstCell = function (cell) {\n var cells = [].slice.call(cell.parentElement.querySelectorAll('.e-rowcell:not(.e-hide)'));\n return cells[0] === cell;\n };\n Selection.prototype.setBorders = function (parentEle, border, bdrStr) {\n var cells = [].slice.call(parentEle.getElementsByClassName('e-cellselectionbackground')).\n filter(function (ele) { return ele.style.display === ''; });\n if (cells.length && this.parent.isFrozenGrid()) {\n var strCell = ['', 'e-leftfreeze', 'e-unfreeze', 'e-leftfreeze', 'e-unfreeze', 'e-rightfreeze', 'e-rightfreeze'];\n cells = [].slice.call(parentEle.querySelectorAll('.e-cellselectionbackground' + '.' + strCell[\"\" + bdrStr] + ':not(.e-hide)')).\n filter(function (ele) { return ele.style.display === ''; });\n }\n if (cells.length) {\n var isFrozen = this.parent.isFrozenGrid();\n var start = cells[0];\n var end = cells[cells.length - 1];\n var stOff = start.getBoundingClientRect();\n var endOff = end.getBoundingClientRect();\n var parentOff = start.offsetParent.getBoundingClientRect();\n if (start.offsetParent.classList.contains('e-content') || start.offsetParent.classList.contains('e-headercontent')) {\n parentOff = start.offsetParent.querySelector('table').getBoundingClientRect();\n }\n var rowHeight = !isFrozen && this.isLastRow(end) && (bdrStr === '1' || bdrStr === '2' || bdrStr === '5') ? 2 : 0;\n var topOffSet = 0;\n var leftOffset = isFrozen && (bdrStr === '2' || bdrStr === '4') && this.isFirstCell(start) ? 1 : 0;\n var rightOffset = ((this.parent.getFrozenMode() === 'Right' && (bdrStr === '1' || bdrStr === '3'))\n || (this.parent.getFrozenMode() === literals.leftRight && (bdrStr === '5' || bdrStr === '6')))\n && this.isFirstCell(start) ? 1 : 0;\n if (this.parent.enableRtl) {\n border.style.right = parentOff.right - stOff.right - leftOffset + 'px';\n border.style.width = stOff.right - endOff.left + leftOffset + 1 + 'px';\n }\n else {\n border.style.left = stOff.left - parentOff.left - leftOffset - rightOffset + 'px';\n border.style.width = endOff.right - stOff.left + leftOffset - rightOffset + 1 + 'px';\n }\n border.style.top = stOff.top - parentOff.top - topOffSet + 'px';\n border.style.height = endOff.top - stOff.top > 0 ?\n (endOff.top - parentOff.top + endOff.height + (isFrozen ? 0 : 1)) - (stOff.top - parentOff.top) - rowHeight + topOffSet + 'px' :\n endOff.height + topOffSet - rowHeight + (isFrozen ? 0 : 1) + 'px';\n this.selectDirection += bdrStr;\n }\n else {\n border.style.display = 'none';\n }\n };\n Selection.prototype.positionBorders = function () {\n this.updateStartEndCells();\n if (!this.startCell || !this.bdrElement || !this.selectedRowCellIndexes.length) {\n return;\n }\n this.selectDirection = '';\n this.showHideBorders('');\n this.setBorders(this.parent.getContentTable(), this.bdrElement, '1');\n if (this.parent.isFrozenGrid()) {\n this.setBorders(this.parent.getContentTable(), this.mcBdrElement, '2');\n if (this.parent.getFrozenMode() === literals.leftRight) {\n this.setBorders(this.parent.getContentTable(), this.frcBdrElement, '5');\n }\n }\n if (this.parent.frozenRows) {\n this.setBorders(this.parent.getHeaderTable(), this.fhBdrElement, '3');\n if (this.parent.isFrozenGrid()) {\n this.setBorders(this.parent.getHeaderTable(), this.mhBdrElement, '4');\n if (this.parent.getFrozenMode() === literals.leftRight) {\n this.setBorders(this.parent.getHeaderTable(), this.frhBdrElement, '6');\n }\n }\n }\n this.applyBorders(this.selectDirection);\n };\n /* eslint-enable */\n Selection.prototype.applyBothFrozenBorders = function (str) {\n var rtl = this.parent.enableRtl;\n switch (str.length) {\n case 6:\n {\n this.bdrElement.style.borderWidth = rtl ? this.right_bottom : this.bottom_left;\n this.mcBdrElement.style.borderWidth = this.bottom;\n this.fhBdrElement.style.borderWidth = rtl ? this.top_right : this.top_left;\n this.mhBdrElement.style.borderWidth = this.top;\n this.frcBdrElement.style.borderWidth = rtl ? this.bottom_left : this.right_bottom;\n this.frhBdrElement.style.borderWidth = rtl ? this.top_left : this.top_right;\n }\n break;\n case 4:\n {\n if (str.includes('1') && str.includes('2') && str.includes('3') && str.includes('4')) {\n this.fhBdrElement.style.borderWidth = rtl ? this.top_right : this.top_left;\n this.mhBdrElement.style.borderWidth = rtl ? this.top_left : this.top_right;\n this.bdrElement.style.borderWidth = rtl ? this.right_bottom : this.bottom_left;\n this.mcBdrElement.style.borderWidth = rtl ? this.bottom_left : this.right_bottom;\n }\n if (str.includes('2') && str.includes('4') && str.includes('5') && str.includes('6')) {\n this.mcBdrElement.style.borderWidth = rtl ? this.right_bottom : this.bottom_left;\n this.mhBdrElement.style.borderWidth = rtl ? this.top_right : this.top_left;\n this.frcBdrElement.style.borderWidth = rtl ? this.bottom_left : this.right_bottom;\n this.frhBdrElement.style.borderWidth = rtl ? this.top_left : this.top_right;\n }\n }\n break;\n case 3:\n {\n this.bdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n this.mcBdrElement.style.borderWidth = this.top_bottom;\n this.frcBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n if (this.parent.frozenRows) {\n this.fhBdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n this.mhBdrElement.style.borderWidth = this.top_bottom;\n this.frcBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n }\n }\n break;\n case 2:\n {\n if (str.includes('1')) {\n this.mcBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n if (this.parent.frozenRows) {\n this.fhBdrElement.style.borderWidth = this.top_right_left;\n }\n }\n if (str.includes('2')) {\n this.bdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n this.frcBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n if (this.parent.frozenRows) {\n this.mhBdrElement.style.borderWidth = this.top_right_left;\n }\n }\n if (str.includes('3')) {\n this.mhBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n this.bdrElement.style.borderWidth = this.right_bottom_left;\n }\n if (str.includes('4')) {\n this.fhBdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n this.frhBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n this.mcBdrElement.style.borderWidth = this.right_bottom_left;\n }\n if (str.includes('5')) {\n this.mcBdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n if (this.parent.frozenRows) {\n this.frhBdrElement.style.borderWidth = this.top_right_left;\n }\n }\n if (str.includes('6')) {\n this.mhBdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n this.frcBdrElement.style.borderWidth = this.right_bottom_left;\n }\n }\n break;\n default:\n this.bdrElement.style.borderWidth = this.all_border;\n this.mcBdrElement.style.borderWidth = this.all_border;\n this.frcBdrElement.style.borderWidth = this.all_border;\n if (this.parent.frozenRows) {\n this.fhBdrElement.style.borderWidth = this.all_border;\n this.mhBdrElement.style.borderWidth = this.all_border;\n this.frhBdrElement.style.borderWidth = this.all_border;\n }\n break;\n }\n };\n Selection.prototype.applyBorders = function (str) {\n var rtl = this.parent.enableRtl;\n if (this.parent.getFrozenMode() === literals.leftRight) {\n this.applyBothFrozenBorders(str);\n }\n else {\n switch (str.length) {\n case 4:\n {\n if (this.parent.getFrozenMode() === 'Right') {\n this.bdrElement.style.borderWidth = rtl ? this.bottom_left : this.right_bottom;\n this.mcBdrElement.style.borderWidth = rtl ? this.right_bottom : this.bottom_left;\n this.fhBdrElement.style.borderWidth = rtl ? this.top_left : this.top_right;\n this.mhBdrElement.style.borderWidth = rtl ? this.top_right : this.top_left;\n }\n else {\n this.bdrElement.style.borderWidth = rtl ? this.right_bottom : this.bottom_left;\n this.mcBdrElement.style.borderWidth = rtl ? this.bottom_left : this.right_bottom;\n this.fhBdrElement.style.borderWidth = rtl ? this.top_right : this.top_left;\n this.mhBdrElement.style.borderWidth = rtl ? this.top_left : this.top_right;\n }\n }\n break;\n case 2:\n {\n if (this.parent.getFrozenMode() === 'Right') {\n this.bdrElement.style.borderWidth = str.includes('2') ? rtl ? this.top_bottom_left\n : this.top_right_bottom : this.right_bottom_left;\n this.mcBdrElement.style.borderWidth = str.includes('1') ? rtl ? this.top_right_bottom\n : this.top_bottom_left : this.right_bottom_left;\n if (this.parent.frozenRows) {\n this.fhBdrElement.style.borderWidth = str.includes('1') ? this.top_right_left\n : rtl ? this.top_bottom_left : this.top_right_bottom;\n this.mhBdrElement.style.borderWidth = str.includes('2') ? this.top_right_left\n : rtl ? this.top_right_bottom : this.top_bottom_left;\n }\n }\n else {\n this.bdrElement.style.borderWidth = str.includes('2') ? rtl ? this.top_right_bottom\n : this.top_bottom_left : this.right_bottom_left;\n if (this.parent.isFrozenGrid()) {\n this.mcBdrElement.style.borderWidth = str.includes('1') ? rtl ? this.top_bottom_left\n : this.top_right_bottom : this.right_bottom_left;\n }\n if (this.parent.frozenRows) {\n this.fhBdrElement.style.borderWidth = str.includes('1') ? this.top_right_left\n : rtl ? this.top_right_bottom : this.top_bottom_left;\n if (this.parent.isFrozenGrid()) {\n this.mhBdrElement.style.borderWidth = str.includes('2') ? this.top_right_left\n : rtl ? this.top_bottom_left : this.top_right_bottom;\n }\n }\n }\n }\n break;\n default:\n this.bdrElement.style.borderWidth = this.all_border;\n if (this.parent.isFrozenGrid()) {\n this.mcBdrElement.style.borderWidth = this.all_border;\n }\n if (this.parent.frozenRows) {\n this.fhBdrElement.style.borderWidth = this.all_border;\n if (this.parent.isFrozenGrid()) {\n this.mhBdrElement.style.borderWidth = this.all_border;\n }\n }\n break;\n }\n }\n };\n Selection.prototype.createBorders = function () {\n if (!this.bdrElement) {\n this.bdrElement = this.parent.getContentTable().parentElement.appendChild(createElement('div', {\n className: 'e-xlsel', id: this.parent.element.id + '_bdr',\n styles: 'width: 2px; border-width: 0;'\n }));\n if (this.parent.isFrozenGrid()) {\n this.mcBdrElement = this.parent.getContentTable().parentElement.appendChild(createElement('div', {\n className: 'e-xlsel', id: this.parent.element.id + '_mcbdr',\n styles: 'height: 2px; border-width: 0;'\n }));\n if (this.parent.getFrozenMode() === literals.leftRight) {\n this.frcBdrElement = this.parent.getContentTable().parentElement.appendChild(createElement('div', {\n className: 'e-xlsel', id: this.parent.element.id + '_frcbdr',\n styles: 'height: 2px; border-width: 0;'\n }));\n }\n }\n if (this.parent.frozenRows) {\n this.fhBdrElement = this.parent.getHeaderTable().parentElement.appendChild(createElement('div', { className: 'e-xlsel', id: this.parent.element.id + '_fhbdr', styles: 'height: 2px;' }));\n }\n if (this.parent.frozenRows && this.parent.isFrozenGrid()) {\n this.mhBdrElement = this.parent.getHeaderTable().parentElement.appendChild(createElement('div', { className: 'e-xlsel', id: this.parent.element.id + '_mhbdr', styles: 'height: 2px;' }));\n if (this.parent.getFrozenMode() === literals.leftRight) {\n this.frhBdrElement = this.parent.getHeaderTable().parentElement.appendChild(createElement('div', { className: 'e-xlsel', id: this.parent.element.id + '_frhbdr', styles: 'height: 2px;' }));\n }\n }\n }\n };\n Selection.prototype.showHideBorders = function (display, freeze) {\n if (this.bdrElement) {\n this.bdrElement.style.display = display;\n if (this.parent.isFrozenGrid()) {\n var parentEle = this.parent.getContentTable();\n removeClass(parentEle.querySelectorAll('.e-xlsel-top-border'), 'e-xlsel-top-border');\n removeClass(parentEle.querySelectorAll('.e-xlsel-left-border'), 'e-xlsel-left-border');\n removeClass(parentEle.querySelectorAll('.e-xlsel-right-border'), 'e-xlsel-right-border');\n removeClass(parentEle.querySelectorAll('.e-xlsel-bottom-border'), 'e-xlsel-bottom-border');\n if (!freeze) {\n this.mcBdrElement.style.display = display;\n }\n if (this.parent.getFrozenMode() === literals.leftRight) {\n this.frcBdrElement.style.display = display;\n }\n }\n if (this.parent.frozenRows) {\n var parentEle = this.parent.getHeaderTable();\n removeClass(parentEle.querySelectorAll('.e-xlsel-top-border'), 'e-xlsel-top-border');\n removeClass(parentEle.querySelectorAll('.e-xlsel-left-border'), 'e-xlsel-left-border');\n removeClass(parentEle.querySelectorAll('.e-xlsel-right-border'), 'e-xlsel-right-border');\n removeClass(parentEle.querySelectorAll('.e-xlsel-bottom-border'), 'e-xlsel-bottom-border');\n this.fhBdrElement.style.display = display;\n }\n if (this.parent.frozenRows && this.parent.isFrozenGrid()) {\n if (!freeze) {\n this.mhBdrElement.style.display = display;\n }\n if (this.parent.getFrozenMode() === literals.leftRight) {\n this.frhBdrElement.style.display = display;\n }\n }\n }\n };\n Selection.prototype.drawAFBorders = function () {\n if (!this.bdrAFBottom) {\n this.createAFBorders();\n }\n this.positionAFBorders();\n };\n Selection.prototype.positionAFBorders = function () {\n if (!this.startCell || !this.bdrAFLeft) {\n return;\n }\n var stOff = this.startAFCell.getBoundingClientRect();\n var endOff = this.endAFCell.getBoundingClientRect();\n var top = endOff.top - stOff.top > 0 ? 1 : 0;\n var firstCellTop = endOff.top - stOff.top >= 0 && (parentsUntil(this.startAFCell, literals.movableContent) ||\n parentsUntil(this.startAFCell, 'e-frozencontent')) && this.isFirstRow(this.startAFCell) ? 1.5 : 0;\n var firstCellLeft = (parentsUntil(this.startAFCell, literals.movableContent) ||\n parentsUntil(this.startAFCell, literals.movableHeader)) && this.isFirstCell(this.startAFCell) ? 1 : 0;\n var rowHeight = this.isLastRow(this.endAFCell) && (parentsUntil(this.endAFCell, literals.movableContent) ||\n parentsUntil(this.endAFCell, 'e-frozencontent')) ? 2 : 0;\n var parentOff = this.startAFCell.offsetParent.getBoundingClientRect();\n var parentRect = this.parent.element.getBoundingClientRect();\n var sTop = this.startAFCell.offsetParent.parentElement.scrollTop;\n var sLeft = this.startAFCell.offsetParent.parentElement.scrollLeft;\n var scrollTop = sTop - this.startAFCell.offsetTop;\n var scrollLeft = sLeft - this.startAFCell.offsetLeft;\n var totalHeight = this.parent.element.clientHeight - getScrollBarWidth();\n if (this.parent.allowPaging) {\n totalHeight -= this.parent.element.querySelector('.e-pager').offsetHeight;\n }\n if (this.parent.aggregates.length) {\n totalHeight -= this.parent.getFooterContent().offsetHeight;\n }\n var totalWidth = this.parent.element.clientWidth - (this.parent.height !== 'auto' ? getScrollBarWidth() : 0);\n scrollTop = scrollTop > 0 ? Math.floor(scrollTop) - 1 : 0;\n scrollLeft = scrollLeft > 0 ? scrollLeft : 0;\n var left = stOff.left - parentRect.left;\n if (!this.parent.enableRtl) {\n this.bdrAFLeft.style.left = left - firstCellLeft + scrollLeft - 1 + 'px';\n this.bdrAFRight.style.left = endOff.left - parentRect.left - 2 + endOff.width + 'px';\n this.bdrAFRight.style.width = totalWidth <= parseInt(this.bdrAFRight.style.left, 10) ? '0px' : '2px';\n this.bdrAFTop.style.left = left + scrollLeft - 0.5 + 'px';\n this.bdrAFTop.style.width = parseInt(this.bdrAFRight.style.left, 10) - parseInt(this.bdrAFLeft.style.left, 10)\n - firstCellLeft + 1 + 'px';\n if (totalWidth <= (parseInt(this.bdrAFTop.style.width, 10) + parseInt(this.bdrAFTop.style.left, 10))) {\n var leftRemove = (parseInt(this.bdrAFTop.style.width, 10) + parseInt(this.bdrAFTop.style.left, 10)) - totalWidth;\n this.bdrAFTop.style.width = parseInt(this.bdrAFTop.style.width, 10) - leftRemove + 'px';\n }\n }\n else {\n var scrolloffSet = (parentsUntil(this.startAFCell, literals.movableContent) ||\n parentsUntil(this.startAFCell, literals.movableHeader)) ? stOff.right -\n this.startAFCell.offsetParent.parentElement.getBoundingClientRect().width -\n parentRect.left : 0;\n this.bdrAFLeft.style.right = parentRect.right - endOff.right - 2 + endOff.width + 'px';\n this.bdrAFLeft.style.width = totalWidth <= parseInt(this.bdrAFLeft.style.right, 10) ? '0px' : '2px';\n this.bdrAFRight.style.right = parentRect.right - stOff.right - firstCellLeft + scrolloffSet - 1 + 'px';\n this.bdrAFTop.style.left = endOff.left - parentRect.left - 0.5 + 'px';\n this.bdrAFTop.style.width = parseInt(this.bdrAFLeft.style.right, 10) - parseInt(this.bdrAFRight.style.right, 10)\n - firstCellLeft + 1 + 'px';\n if (parseInt(this.bdrAFTop.style.left, 10) < 0) {\n this.bdrAFTop.style.width = parseInt(this.bdrAFTop.style.width, 10) + parseInt(this.bdrAFTop.style.left, 10) + 'px';\n this.bdrAFTop.style.left = '0px';\n }\n }\n this.bdrAFLeft.style.top = stOff.top - parentRect.top - firstCellTop + scrollTop + 'px';\n this.bdrAFLeft.style.height = endOff.top - stOff.top > 0 ?\n (endOff.top - parentOff.top + endOff.height + 1) - (stOff.top - parentOff.top) + firstCellTop - rowHeight - scrollTop + 'px' :\n endOff.height + firstCellTop - rowHeight - scrollTop + 'px';\n this.bdrAFRight.style.top = this.bdrAFLeft.style.top;\n this.bdrAFRight.style.height = parseInt(this.bdrAFLeft.style.height, 10) + 'px';\n this.bdrAFTop.style.top = this.bdrAFRight.style.top;\n this.bdrAFBottom.style.left = this.bdrAFTop.style.left;\n this.bdrAFBottom.style.top = parseFloat(this.bdrAFLeft.style.top) + parseFloat(this.bdrAFLeft.style.height) - top - 1 + 'px';\n this.bdrAFBottom.style.width = totalHeight <= parseFloat(this.bdrAFBottom.style.top) ? '0px' : this.bdrAFTop.style.width;\n if (totalHeight <= (parseInt(this.bdrAFLeft.style.height, 10) + parseInt(this.bdrAFLeft.style.top, 10))) {\n var topRemove = parseInt(this.bdrAFLeft.style.height, 10) + parseInt(this.bdrAFLeft.style.top, 10) - totalHeight;\n this.bdrAFLeft.style.height = parseInt(this.bdrAFLeft.style.height, 10) - topRemove + 'px';\n this.bdrAFRight.style.height = parseInt(this.bdrAFLeft.style.height, 10) + 'px';\n }\n };\n Selection.prototype.createAFBorders = function () {\n if (!this.bdrAFLeft) {\n this.bdrAFLeft = this.parent.element.appendChild(createElement('div', { className: 'e-xlselaf', id: this.parent.element.id + '_bdrafleft', styles: 'width: 2px;' }));\n this.bdrAFRight = this.parent.element.appendChild(createElement('div', { className: 'e-xlselaf', id: this.parent.element.id + '_bdrafright', styles: 'width: 2px;' }));\n this.bdrAFBottom = this.parent.element.appendChild(createElement('div', { className: 'e-xlselaf', id: this.parent.element.id + '_bdrafbottom', styles: 'height: 2px;' }));\n this.bdrAFTop = this.parent.element.appendChild(createElement('div', { className: 'e-xlselaf', id: this.parent.element.id + '_bdraftop', styles: 'height: 2px;' }));\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 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 Selection.prototype.updateValue = function (rIdx, cIdx, cell) {\n var args = this.createBeforeAutoFill(rIdx, cIdx, cell);\n if (!args.cancel) {\n var col = this.parent.getColumnByIndex(cIdx);\n if (this.parent.editModule && cell) {\n if (col.type === 'number') {\n this.parent.editModule.updateCell(rIdx, col.field, parseFloat(args.value));\n }\n else {\n this.parent.editModule.updateCell(rIdx, col.field, args.value);\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Selection.prototype.getAutoFillCells = function (rowIndex, startCellIdx) {\n var cls = '.e-cellselectionbackground';\n var cells = [].slice.call(this.parent.getDataRows()[parseInt(rowIndex.toString(), 10)].querySelectorAll(cls));\n return cells;\n };\n Selection.prototype.selectLikeAutoFill = function (e, isApply) {\n var startrowIdx = parseInt(parentsUntil(this.startAFCell, literals.row).getAttribute(literals.dataRowIndex), 10);\n var startCellIdx = parseInt(this.startAFCell.getAttribute(literals.dataColIndex), 10);\n var endrowIdx = parseInt(parentsUntil(this.endAFCell, literals.row).getAttribute(literals.dataRowIndex), 10);\n var endCellIdx = parseInt(this.endAFCell.getAttribute(literals.dataColIndex), 10);\n var rowLen = this.selectedRowCellIndexes.length - 1;\n var colLen = this.selectedRowCellIndexes[0].cellIndexes.length - 1;\n switch (true) { //direction\n case !isApply && this.endAFCell.classList.contains('e-cellselectionbackground') &&\n !!parentsUntil(e.target, literals.rowCell):\n this.startAFCell = this.parent.getCellFromIndex(startrowIdx, startCellIdx);\n this.endAFCell = this.parent.getCellFromIndex(startrowIdx + rowLen, startCellIdx + colLen);\n this.drawAFBorders();\n break;\n case this.autoFillRLselection && startCellIdx + colLen < endCellIdx && //right\n endCellIdx - startCellIdx - colLen + 1 > endrowIdx - startrowIdx - rowLen // right bottom\n && endCellIdx - startCellIdx - colLen + 1 > startrowIdx - endrowIdx: //right top\n this.endAFCell = this.parent.getCellFromIndex(startrowIdx + rowLen, endCellIdx);\n endrowIdx = parseInt(parentsUntil(this.endAFCell, literals.row).getAttribute(literals.dataRowIndex), 10);\n endCellIdx = parseInt(this.endAFCell.getAttribute(literals.dataColIndex), 10);\n if (!isApply) {\n this.drawAFBorders();\n }\n else {\n var cellIdx = parseInt(this.endCell.getAttribute(literals.dataColIndex), 10);\n for (var i = startrowIdx; i <= endrowIdx; i++) {\n var cells = this.getAutoFillCells(i, startCellIdx);\n var c = 0;\n for (var j = cellIdx + 1; j <= endCellIdx; j++) {\n if (c > colLen) {\n c = 0;\n }\n this.updateValue(i, j, cells[parseInt(c.toString(), 10)]);\n c++;\n }\n }\n this.selectCellsByRange({ rowIndex: startrowIdx, cellIndex: this.startCellIndex }, { rowIndex: endrowIdx, cellIndex: endCellIdx });\n }\n break;\n case this.autoFillRLselection && startCellIdx > endCellIdx && // left\n startCellIdx - endCellIdx + 1 > endrowIdx - startrowIdx - rowLen && //left top\n startCellIdx - endCellIdx + 1 > startrowIdx - endrowIdx: // left bottom\n this.startAFCell = this.parent.getCellFromIndex(startrowIdx, endCellIdx);\n this.endAFCell = this.endCell;\n if (!isApply) {\n this.drawAFBorders();\n }\n else {\n for (var i = startrowIdx; i <= startrowIdx + rowLen; i++) {\n var cells = this.getAutoFillCells(i, startCellIdx);\n cells.reverse();\n var c = 0;\n for (var j = this.startCellIndex - 1; j >= endCellIdx; j--) {\n if (c > colLen) {\n c = 0;\n }\n this.updateValue(i, j, cells[parseInt(c.toString(), 10)]);\n c++;\n }\n }\n this.selectCellsByRange({ rowIndex: startrowIdx, cellIndex: endCellIdx }, { rowIndex: startrowIdx + rowLen, cellIndex: this.startCellIndex + colLen });\n }\n break;\n case startrowIdx > endrowIdx: //up\n this.startAFCell = this.parent.getCellFromIndex(endrowIdx, startCellIdx);\n this.endAFCell = this.endCell;\n if (!isApply) {\n this.drawAFBorders();\n }\n else {\n var trIdx = parseInt(this.endCell.parentElement.getAttribute(literals.dataRowIndex), 10);\n var r = trIdx;\n for (var i = startrowIdx - 1; i >= endrowIdx; i--) {\n if (r === this.startIndex - 1) {\n r = trIdx;\n }\n var cells = this.getAutoFillCells(r, startCellIdx);\n var c = 0;\n r--;\n for (var j = this.startCellIndex; j <= this.startCellIndex + colLen; j++) {\n this.updateValue(i, j, cells[parseInt(c.toString(), 10)]);\n c++;\n }\n }\n this.selectCellsByRange({ rowIndex: endrowIdx, cellIndex: startCellIdx + colLen }, { rowIndex: startrowIdx + rowLen, cellIndex: startCellIdx });\n }\n break;\n default: //down\n this.endAFCell = this.parent.getCellFromIndex(endrowIdx, startCellIdx + colLen);\n if (!isApply) {\n this.drawAFBorders();\n }\n else {\n var trIdx = parseInt(this.endCell.parentElement.getAttribute(literals.dataRowIndex), 10);\n var r = this.startIndex;\n for (var i = trIdx + 1; i <= endrowIdx; i++) {\n if (r === trIdx + 1) {\n r = this.startIndex;\n }\n var cells = this.getAutoFillCells(r, startCellIdx);\n r++;\n var c = 0;\n for (var m = this.startCellIndex; m <= this.startCellIndex + colLen; m++) {\n this.updateValue(i, m, cells[parseInt(c.toString(), 10)]);\n c++;\n }\n }\n this.selectCellsByRange({ rowIndex: trIdx - rowLen, cellIndex: startCellIdx }, { rowIndex: endrowIdx, cellIndex: startCellIdx + colLen });\n }\n break;\n }\n };\n Selection.prototype.mouseUpHandler = function (e) {\n this.stopTimer();\n document.body.classList.remove('e-disableuserselect');\n if (this.element && !isNullOrUndefined(this.element.parentElement)) {\n remove(this.element);\n }\n if (this.isDragged && this.selectedRowCellIndexes.length === 1 && this.selectedRowCellIndexes[0].cellIndexes.length === 1) {\n this.mUPTarget = parentsUntil(e.target, literals.rowCell);\n }\n else {\n this.mUPTarget = null;\n }\n var closeRowCell = closest(e.target, '.e-rowcell');\n if (this.isDragged && !this.isAutoFillSel && this.selectionSettings.mode === 'Cell' &&\n closeRowCell && closeRowCell.classList.contains(literals.rowCell)) {\n var rowIndex = parseInt(closeRowCell.parentElement.getAttribute(literals.dataRowIndex), 10);\n var cellIndex = parseInt(closeRowCell.getAttribute(literals.dataColIndex), 10);\n this.isDragged = false;\n this.clearCellSelection();\n this.selectCellsByRange({ rowIndex: this.startDIndex, cellIndex: this.startDCellIndex }, { rowIndex: rowIndex, cellIndex: cellIndex });\n }\n this.isDragged = false;\n this.updateAutoFillPosition();\n if (this.isAutoFillSel) {\n this.preventFocus = true;\n var lastCell = parentsUntil(e.target, literals.rowCell);\n this.endAFCell = lastCell ? lastCell : this.endCell === this.endAFCell ? this.startAFCell : this.endAFCell;\n this.startAFCell = this.startCell;\n this.updateStartCellsIndex();\n this.selectLikeAutoFill(e, true);\n this.updateAutoFillPosition();\n this.hideAFBorders();\n this.positionBorders();\n if (this.parent.isFrozenGrid()) {\n this.showHideBorders('none', true);\n this.refreshFrozenBorders();\n }\n this.isAutoFillSel = false;\n if (this.parent.aggregates.length > 0) {\n this.parent.notify(events.refreshFooterRenderer, {});\n }\n this.preventFocus = false;\n }\n EventHandler.remove(this.parent.getContent(), 'mousemove', this.mouseMoveHandler);\n if (this.parent.frozenRows) {\n EventHandler.remove(this.parent.getHeaderContent(), 'mousemove', this.mouseMoveHandler);\n }\n EventHandler.remove(document, 'mouseup', this.mouseUpHandler);\n };\n Selection.prototype.hideAutoFill = function () {\n if (this.autofill) {\n this.autofill.style.display = 'none';\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Selection.prototype.updateAutoFillPosition = function () {\n if (this.parent.enableAutoFill && !this.parent.isEdit &&\n this.selectionSettings.cellSelectionMode.indexOf('Box') > -1 && !this.isRowType() && !this.isSingleSel()\n && this.selectedRowCellIndexes.length) {\n var index = parseInt(this.target.getAttribute(literals.dataColIndex), 10);\n var rindex = parseInt(this.target.getAttribute('index'), 10);\n var rowIndex = this.selectedRowCellIndexes[this.selectedRowCellIndexes.length - 1].rowIndex;\n var cells = this.getAutoFillCells(rowIndex, index).filter(function (ele) { return ele.style.display === ''; });\n var col = this.parent.getColumnByIndex(index);\n var isFrozenCol = col.getFreezeTableName() === 'movable';\n var isFrozenRow = rindex < this.parent.frozenRows;\n var isFrozenRight = this.parent.getFrozenMode() === literals.leftRight\n && col.getFreezeTableName() === literals.frozenRight;\n if (!select('#' + this.parent.element.id + '_autofill', parentsUntil(this.target, literals.table))) {\n if (select('#' + this.parent.element.id + '_autofill', this.parent.element)) {\n select('#' + this.parent.element.id + '_autofill', this.parent.element).remove();\n }\n this.autofill = createElement('div', { className: 'e-autofill', id: this.parent.element.id + '_autofill' });\n this.autofill.style.display = 'none';\n if (this.target.classList.contains('e-leftfreeze') || this.target.classList.contains('e-rightfreeze') ||\n this.target.classList.contains('e-fixedfreeze')) {\n this.autofill.classList.add('e-freeze-autofill');\n }\n if (!isFrozenRow) {\n if (!isFrozenCol) {\n this.parent.getContentTable().parentElement.appendChild(this.autofill);\n }\n else {\n this.parent.getContentTable().parentElement.appendChild(this.autofill);\n }\n }\n else {\n if (!isFrozenCol) {\n this.parent.getHeaderTable().parentElement.appendChild(this.autofill);\n }\n else {\n this.parent.getHeaderTable().parentElement.appendChild(this.autofill);\n }\n }\n if (isFrozenRight) {\n if (isFrozenRow) {\n this.parent.getHeaderTable().parentElement.appendChild(this.autofill);\n }\n else {\n this.parent.getContentTable().parentElement.appendChild(this.autofill);\n }\n }\n }\n var cell = cells[cells.length - 1];\n if (cell && cell.offsetParent) {\n var clientRect = cell.getBoundingClientRect();\n var parentOff = cell.offsetParent.getBoundingClientRect();\n if (cell.offsetParent.classList.contains('e-content') || cell.offsetParent.classList.contains('e-headercontent')) {\n parentOff = cell.offsetParent.querySelector('table').getBoundingClientRect();\n }\n var colWidth = this.isLastCell(cell) ? 4 : 0;\n var rowHeight = this.isLastRow(cell) ? 3 : 0;\n if (!this.parent.enableRtl) {\n this.autofill.style.left = clientRect.left - parentOff.left + clientRect.width - 4 - colWidth + 'px';\n }\n else {\n this.autofill.style.right = parentOff.right - clientRect.right + clientRect.width - 4 - colWidth + 'px';\n }\n this.autofill.style.top = clientRect.top - parentOff.top + clientRect.height - 5 - rowHeight + 'px';\n }\n this.autofill.style.display = '';\n }\n else {\n this.hideAutoFill();\n }\n };\n Selection.prototype.mouseDownHandler = function (e) {\n this.mouseButton = e.button;\n var target = e.target;\n var gObj = this.parent;\n var isDrag;\n var gridElement = parentsUntil(target, 'e-grid');\n if (gridElement && gridElement.id !== gObj.element.id || parentsUntil(target, literals.headerContent) && !this.parent.frozenRows ||\n parentsUntil(target, 'e-editedbatchcell') || parentsUntil(target, literals.editedRow)) {\n return;\n }\n if (e.shiftKey || e.ctrlKey) {\n e.preventDefault();\n }\n if (parentsUntil(target, literals.rowCell) && !e.shiftKey && !e.ctrlKey) {\n if (gObj.selectionSettings.cellSelectionMode.indexOf('Box') > -1 && !this.isRowType() && !this.isSingleSel()) {\n this.isCellDrag = true;\n isDrag = true;\n }\n else if (gObj.allowRowDragAndDrop && !gObj.isEdit && !this.parent.selectionSettings.checkboxOnly) {\n this.isRowDragSelected = false;\n if (!this.isRowType() || this.isSingleSel() || closest(target, 'td').classList.contains('e-selectionbackground')) {\n this.isDragged = false;\n return;\n }\n isDrag = true;\n this.element = this.parent.createElement('div', { className: 'e-griddragarea' });\n gObj.getContent().appendChild(this.element);\n }\n if (isDrag) {\n this.enableDrag(e, true);\n }\n }\n this.updateStartEndCells();\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 Selection.prototype.updateStartEndCells = function () {\n var cells = [].slice.call(this.parent.element.getElementsByClassName('e-cellselectionbackground'));\n this.startCell = cells[0];\n this.endCell = cells[cells.length - 1];\n if (this.startCell) {\n this.startIndex = parseInt(this.startCell.parentElement.getAttribute(literals.dataRowIndex), 10);\n this.startCellIndex = parseInt(parentsUntil(this.startCell, literals.rowCell).getAttribute(literals.dataColIndex), 10);\n }\n };\n Selection.prototype.updateStartCellsIndex = function () {\n if (this.startCell) {\n this.startIndex = parseInt(this.startCell.parentElement.getAttribute(literals.dataRowIndex), 10);\n this.startCellIndex = parseInt(parentsUntil(this.startCell, literals.rowCell).getAttribute(literals.dataColIndex), 10);\n }\n };\n Selection.prototype.enableDrag = function (e, isUpdate) {\n var gObj = this.parent;\n if (isUpdate) {\n var tr = closest(e.target, 'tr');\n this.startDIndex = parseInt(tr.getAttribute(literals.dataRowIndex), 10);\n this.startDCellIndex = parseInt(parentsUntil(e.target, literals.rowCell).getAttribute(literals.dataColIndex), 10);\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 if (this.parent.frozenRows) {\n EventHandler.add(gObj.getHeaderContent(), 'mousemove', this.mouseMoveHandler, this);\n }\n EventHandler.add(document, 'mouseup', this.mouseUpHandler, this);\n };\n Selection.prototype.clearSelAfterRefresh = function (e) {\n var isInfiniteScroll = this.parent.enableInfiniteScrolling && e.requestType === 'infiniteScroll';\n if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection && !isInfiniteScroll) {\n this.clearSelection();\n }\n if ((e.requestType === 'virtualscroll' || isInfiniteScroll) && this.parent.isPersistSelection && this.isPartialSelection\n && this.isHdrSelectAllClicked) {\n var rowObj = this.parent.getRowsObject().filter(function (e) { return e.isSelectable; });\n var indexes = [];\n this.selectedRowState = {};\n this.persistSelectedData = [];\n for (var i = 0; i < rowObj.length; i++) {\n indexes.push(rowObj[parseInt(i.toString(), 10)].index);\n var pkValue = this.getPkValue(this.primaryKey, rowObj[parseInt(i.toString(), 10)].data);\n this.selectedRowState[\"\" + pkValue] = true;\n this.persistSelectedData.push(rowObj[parseInt(i.toString(), 10)].data);\n }\n this.selectedRowIndexes = indexes;\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n Selection.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.evtHandlers = [{ event: events.uiUpdate, handler: this.enableAfterRender },\n { event: events.initialEnd, handler: this.initializeSelection },\n { event: events.rowSelectionComplete, handler: this.onActionComplete },\n { event: events.cellSelectionComplete, handler: this.onActionComplete },\n { event: events.inBoundModelChanged, handler: this.onPropertyChanged },\n { event: events.cellFocused, handler: this.onCellFocused },\n { event: events.beforeFragAppend, handler: this.clearSelAfterRefresh },\n { event: events.columnPositionChanged, handler: this.columnPositionChanged },\n { event: events.contentReady, handler: this.initialEnd },\n { event: events.rowsRemoved, handler: this.rowsRemoved },\n { event: events.headerRefreshed, handler: this.refreshHeader },\n { event: events.destroy, handler: this.destroy }];\n addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n this.actionBeginFunction = this.actionBegin.bind(this);\n this.actionCompleteFunction = this.actionComplete.bind(this);\n this.parent.addEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.addEventListener(events.actionComplete, this.actionCompleteFunction);\n this.addEventListener_checkbox();\n };\n /**\n * @returns {void}\n * @hidden\n */\n Selection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n EventHandler.remove(document, 'mouseup', this.mouseUpHandler);\n EventHandler.remove(this.parent.getContent(), 'mousedown', this.mouseDownHandler);\n EventHandler.remove(this.parent.getHeaderContent(), 'mousedown', this.mouseDownHandler);\n addRemoveEventListener(this.parent, this.evtHandlers, false);\n this.parent.removeEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunction);\n this.removeEventListener_checkbox();\n };\n Selection.prototype.wireEvents = function () {\n this.isMacOS = navigator.userAgent.indexOf('Mac OS') !== -1;\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 else {\n if (!this.parent.allowKeyboard) {\n EventHandler.add(this.parent.element, 'keydown', this.keyDownHandler, 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 else {\n if (!this.parent.allowKeyboard) {\n EventHandler.remove(this.parent.element, 'keydown', this.keyDownHandler);\n }\n }\n };\n Selection.prototype.columnPositionChanged = function () {\n if (!this.parent.isPersistSelection) {\n this.clearSelection();\n }\n };\n Selection.prototype.refreshHeader = function () {\n this.setCheckAllState();\n };\n Selection.prototype.rowsRemoved = function (e) {\n for (var i = 0; i < e.records.length; i++) {\n var pkValue = this.getPkValue(this.primaryKey, e.records[parseInt(i.toString(), 10)]);\n delete (this.selectedRowState[\"\" + pkValue]);\n --this.totalRecordsCount;\n }\n this.setCheckAllState();\n };\n Selection.prototype.beforeFragAppend = function (e) {\n if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection) {\n this.clearSelection();\n }\n };\n Selection.prototype.getCheckAllBox = function () {\n return this.parent.getHeaderContent().querySelector('.e-checkselectall');\n };\n Selection.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n this.initPerisistSelection();\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Selection.prototype.render = function (e) {\n EventHandler.add(this.parent.getContent(), 'mousedown', this.mouseDownHandler, this);\n EventHandler.add(this.parent.getHeaderContent(), 'mousedown', this.mouseDownHandler, this);\n };\n Selection.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var gObj = this.parent;\n if (!isNullOrUndefined(e.properties.type)) {\n if (this.selectionSettings.type === 'Single') {\n gObj.element.removeAttribute('aria-multiselectable');\n if (this.selectedRowCellIndexes.length > 1) {\n this.clearCellSelection();\n this.prevCIdxs = undefined;\n }\n if (this.selectedRowIndexes.length > 1) {\n this.clearRowSelection();\n this.prevRowIndex = undefined;\n }\n if (this.selectedColumnsIndexes.length > 1) {\n this.clearColumnSelection();\n this.prevColIndex = undefined;\n }\n this.enableSelectMultiTouch = false;\n this.hidePopUp();\n }\n else if (this.selectionSettings.type === 'Multiple') {\n gObj.element.setAttribute('aria-multiselectable', 'true');\n }\n }\n if (!isNullOrUndefined(e.properties.mode) ||\n !isNullOrUndefined(e.properties.cellSelectionMode)) {\n this.clearSelection();\n this.prevRowIndex = undefined;\n this.prevCIdxs = undefined;\n this.prevColIndex = undefined;\n }\n this.isPersisted = true;\n this.checkBoxSelectionChanged();\n this.isPersisted = false;\n if (!this.parent.isCheckBoxSelection) {\n this.initPerisistSelection();\n }\n var checkboxColumn = this.parent.getColumns().filter(function (col) { return col.type === 'checkbox'; });\n if (checkboxColumn.length) {\n gObj.isCheckBoxSelection = !(this.selectionSettings.checkboxMode === 'ResetOnRowClick');\n }\n this.drawBorders();\n };\n Selection.prototype.hidePopUp = function () {\n if (this.parent.element.querySelector('.e-gridpopup').getElementsByClassName('e-rowselect').length) {\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n };\n Selection.prototype.initialEnd = function () {\n if (!this.selectedRowIndexes.length) {\n this.parent.off(events.contentReady, this.initialEnd);\n this.selectRow(this.parent.selectedRowIndex);\n }\n };\n Selection.prototype.checkBoxSelectionChanged = function () {\n var gobj = this.parent;\n gobj.off(events.contentReady, this.checkBoxSelectionChanged);\n var checkboxColumn = gobj.getColumns().filter(function (col) { return col.type === 'checkbox'; });\n if (checkboxColumn.length > 0) {\n gobj.isCheckBoxSelection = true;\n this.chkField = checkboxColumn[0].field;\n this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n if (isNullOrUndefined(this.totalRecordsCount)) {\n this.totalRecordsCount = this.getCurrentBatchRecordChanges().length;\n }\n if (this.isSingleSel()) {\n gobj.selectionSettings.type = 'Multiple';\n gobj.dataBind();\n }\n else {\n this.initPerisistSelection();\n }\n }\n if (!gobj.isCheckBoxSelection && !this.isPersisted) {\n this.chkField = null;\n this.initPerisistSelection();\n }\n };\n Selection.prototype.initPerisistSelection = function () {\n var gobj = this.parent;\n if (this.parent.selectionSettings.persistSelection && this.parent.getPrimaryKeyFieldNames().length > 0) {\n gobj.isPersistSelection = true;\n this.ensureCheckboxFieldSelection();\n }\n else if (this.parent.getPrimaryKeyFieldNames().length > 0) {\n gobj.isPersistSelection = false;\n this.ensureCheckboxFieldSelection();\n }\n else {\n gobj.isPersistSelection = false;\n this.selectedRowState = {};\n }\n };\n Selection.prototype.ensureCheckboxFieldSelection = function () {\n var gobj = this.parent;\n this.primaryKey = this.parent.getPrimaryKeyFieldNames()[0];\n if (!gobj.enableVirtualization && this.chkField\n && ((gobj.isPersistSelection && Object.keys(this.selectedRowState).length === 0) ||\n !gobj.isPersistSelection)) {\n var data = this.parent.getDataModule();\n var query = new Query().where(this.chkField, 'equal', true);\n if (!query.params) {\n query.params = this.parent.query.params;\n }\n var dataManager = data.getData({}, query);\n // eslint-disable-next-line @typescript-eslint/no-this-alias\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 Selection.prototype.dataSuccess = function (res) {\n var data = (this.parent.getDataModule().isRemote() && !isNullOrUndefined(res['result'])) ? res['result'] : res;\n for (var i = 0; i < data.length; i++) {\n var pkValue = this.getPkValue(this.primaryKey, data[parseInt(i.toString(), 10)]);\n if (isNullOrUndefined(this.selectedRowState[\"\" + pkValue]) && data[parseInt(i.toString(), 10)][this.chkField]) {\n this.selectedRowState[\"\" + pkValue] = data[parseInt(i.toString(), 10)][this.chkField];\n }\n }\n this.persistSelectedData = data;\n };\n Selection.prototype.setRowSelection = function (state) {\n if (!(this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n && this.parent.dataSource.result))) {\n if (state) {\n if (this.isPartialSelection && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n var rowObj = this.parent.getRowsObject().filter(function (e) { return e.isSelectable; });\n for (var _i = 0, rowObj_1 = rowObj; _i < rowObj_1.length; _i++) {\n var row = rowObj_1[_i];\n this.selectedRowState[this.getPkValue(this.primaryKey, row.data)] = true;\n }\n }\n else {\n var selectedData = this.isPartialSelection ? this.parent.partialSelectedRecords : this.getData();\n if (this.parent.groupSettings.columns.length) {\n for (var _a = 0, _b = this.isPartialSelection ? selectedData : selectedData.records; _a < _b.length; _a++) {\n var data = _b[_a];\n this.selectedRowState[this.getPkValue(this.primaryKey, data)] = true;\n }\n }\n else {\n for (var _c = 0, selectedData_1 = selectedData; _c < selectedData_1.length; _c++) {\n var data = selectedData_1[_c];\n this.selectedRowState[this.getPkValue(this.primaryKey, data)] = true;\n }\n }\n }\n }\n else {\n this.selectedRowState = {};\n }\n // (this.getData()).forEach(function (data) {\n // this.selectedRowState[data[this.primaryKey]] = true;\n // })\n }\n else {\n if (state) {\n var selectedStateKeys = Object.keys(this.selectedRowState);\n var unSelectedRowStateKeys = Object.keys(this.unSelectedRowState);\n if (!this.isCheckboxReset) {\n var rowData = (this.parent.groupSettings.columns.length && this.parent.isPersistSelection) ?\n this.parent.currentViewData['records'] : this.parent.currentViewData;\n for (var _d = 0, rowData_1 = rowData; _d < rowData_1.length; _d++) {\n var data = rowData_1[_d];\n if (!isNullOrUndefined(data[this.primaryKey])) {\n var key = data[this.primaryKey].toString();\n if (selectedStateKeys.indexOf(key) === -1 && unSelectedRowStateKeys.indexOf(key) === -1) {\n this.selectedRowState[data[this.primaryKey]] = true;\n }\n }\n }\n }\n }\n else {\n this.selectedRowState = {};\n this.unSelectedRowState = {};\n this.rmtHdrChkbxClicked = false;\n }\n }\n };\n Selection.prototype.getData = function () {\n return this.parent.getDataModule().dataManager.executeLocal(this.parent.getDataModule().generateQuery(true));\n };\n Selection.prototype.getAvailableSelectedData = function () {\n var filteredSearchedSelectedData = new DataManager(this.persistSelectedData).executeLocal(this.parent.getDataModule().generateQuery(true));\n if (this.parent.groupSettings.columns.length && filteredSearchedSelectedData &&\n filteredSearchedSelectedData.records) {\n filteredSearchedSelectedData = filteredSearchedSelectedData.records.slice();\n }\n return filteredSearchedSelectedData;\n };\n Selection.prototype.refreshPersistSelection = function () {\n var rows = this.parent.getRows();\n this.totalRecordsCount = this.parent.getCurrentViewRecords().length;\n if (this.parent.allowPaging) {\n this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n }\n if (!isNullOrUndefined(rows) && rows.length > 0 && (this.parent.isPersistSelection || this.chkField)) {\n var indexes = [];\n for (var j = 0; j < rows.length; j++) {\n var rowObj = this.getRowObj(rows[parseInt(j.toString(), 10)]);\n var pKey = rowObj ? rowObj.data ? this.getPkValue(this.primaryKey, rowObj.data) : null : null;\n if (pKey === null) {\n return;\n }\n if (this.isPartialSelection && !rowObj.isSelectable) {\n continue;\n }\n var checkState = void 0;\n var chkBox = rows[parseInt(j.toString(), 10)].querySelector('.e-checkselect');\n if (this.selectedRowState[\"\" + pKey] || (this.parent.checkAllRows === 'Check' && this.selectedRowState[\"\" + pKey] &&\n this.totalRecordsCount === Object.keys(this.selectedRowState).length && this.chkAllCollec.indexOf(pKey) < 0)\n || (this.parent.checkAllRows === 'Uncheck' && this.chkAllCollec.indexOf(pKey) > 0 && !this.parent.selectedRowIndex)\n || (this.parent.checkAllRows === 'Intermediate' && !isNullOrUndefined(this.chkField) && rowObj.data[this.chkField])) {\n indexes.push(parseInt(rows[parseInt(j.toString(), 10)].getAttribute(literals.dataRowIndex), 10));\n checkState = true;\n }\n else {\n checkState = false;\n if (this.checkedTarget !== chkBox && this.parent.isCheckBoxSelection && chkBox) {\n removeAddCboxClasses(chkBox.nextElementSibling, checkState);\n }\n }\n this.updatePersistCollection(rows[parseInt(j.toString(), 10)], checkState);\n }\n if (this.isSingleSel() && indexes.length > 0) {\n this.selectRow(indexes[0], true);\n }\n else {\n this.selectRows(indexes);\n }\n }\n if ((this.parent.isCheckBoxSelection || this.parent.selectionSettings.checkboxMode === 'ResetOnRowClick') && this.getCurrentBatchRecordChanges().length > 0) {\n this.setCheckAllState();\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 if (!isNullOrUndefined(editChkBox)) {\n var row = closest(editChkBox, '.' + literals.editedRow);\n if (row) {\n if (this.parent.editSettings.mode === 'Dialog') {\n row = this.parent.element.querySelector('.e-dlgeditrow');\n }\n var rowObj = this.getRowObj(row);\n if (!rowObj) {\n return;\n }\n this.selectedRowState[this.getPkValue(this.primaryKey, rowObj.data)] = rowObj.isSelected = editChkBox.checked;\n }\n else {\n this.isCheckedOnAdd = editChkBox.checked;\n }\n }\n }\n if (this.parent.isPersistSelection && this.isPartialSelection) {\n if (e.requestType === 'paging' && (this.parent.getDataModule().isRemote()\n || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result))) {\n this.selectedRowIndexes = [];\n }\n if (e.requestType === 'filtering' || e.requestType === 'searching') {\n this.parent.partialSelectedRecords = [];\n this.parent.disableSelectedRecords = [];\n }\n }\n };\n Selection.prototype.actionComplete = function (e) {\n if (e.requestType === 'save' && this.parent.isPersistSelection) {\n if (e.action === 'add') {\n if (this.isCheckedOnAdd) {\n var rowObj = this.parent.getRowObjectFromUID(this.parent.getRows()[e.selectedRow].getAttribute('data-uid'));\n this.selectedRowState[this.getPkValue(this.primaryKey, rowObj.data)] = rowObj.isSelected = this.isCheckedOnAdd;\n }\n this.isHdrSelectAllClicked = false;\n this.setCheckAllState();\n }\n this.refreshPersistSelection();\n }\n if (e.requestType === 'delete' && this.parent.isPersistSelection) {\n var records = e.data;\n var data = records.slice();\n for (var i = 0; i < data.length; i++) {\n var pkValue = this.getPkValue(this.primaryKey, data[parseInt(i.toString(), 10)]);\n if (!isNullOrUndefined(pkValue)) {\n this.updatePersistDelete(pkValue, this.isPartialSelection);\n }\n }\n this.isHdrSelectAllClicked = false;\n this.setCheckAllState();\n this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n }\n if (e.requestType === 'paging') {\n if (this.parent.isPersistSelection && this.isPartialSelection && this.isHdrSelectAllClicked) {\n var rows = this.parent.getRowsObject();\n var indexes = [];\n for (var i = 0; i < rows.length; i++) {\n if (rows[parseInt(i.toString(), 10)].isSelectable) {\n indexes.push(rows[parseInt(i.toString(), 10)].index);\n }\n }\n if (indexes.length) {\n this.selectRows(indexes);\n }\n }\n this.prevRowIndex = undefined;\n this.prevCIdxs = undefined;\n this.prevECIdxs = undefined;\n }\n };\n Selection.prototype.onDataBound = function () {\n if (!this.parent.enableVirtualization && this.parent.isPersistSelection) {\n if (this.selectedRecords.length) {\n this.isPrevRowSelection = true;\n }\n }\n if ((this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n && this.parent.dataSource.result)) && this.rmtHdrChkbxClicked) {\n if (this.parent.checkAllRows === 'Intermediate') {\n this.setRowSelection(true);\n }\n else if (this.parent.checkAllRows === 'Uncheck') {\n this.setRowSelection(false);\n }\n }\n if (this.parent.enableVirtualization) {\n this.setCheckAllState();\n }\n if (this.parent.isPersistSelection) {\n this.refreshPersistSelection();\n }\n this.initialRowSelection = this.isRowType() && this.parent.element.querySelectorAll('.e-selectionbackground') &&\n this.parent.getSelectedRows().length ? true : false;\n if (this.parent.isCheckBoxSelection && !this.initialRowSelection) {\n var totalRecords = this.parent.getRowsObject();\n var indexes = [];\n for (var i = 0; i < totalRecords.length; i++) {\n if (totalRecords[parseInt(i.toString(), 10)].isSelected) {\n indexes.push(i);\n }\n }\n if (indexes.length) {\n this.selectRows(indexes);\n }\n this.initialRowSelection = true;\n }\n };\n Selection.prototype.updatePersistSelectedData = function (checkState) {\n if (this.parent.isPersistSelection) {\n var rows = this.parent.getRows();\n for (var i = 0; i < rows.length; i++) {\n this.updatePersistCollection(rows[parseInt(i.toString(), 10)], checkState);\n }\n if (this.parent.checkAllRows === 'Uncheck') {\n this.setRowSelection(false);\n this.persistSelectedData = (this.parent.getDataModule().isRemote()\n || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result))\n ? this.persistSelectedData : [];\n }\n else if (this.parent.checkAllRows === 'Check') {\n this.setRowSelection(true);\n this.persistSelectedData = !(this.parent.getDataModule().isRemote()\n || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result))\n && !this.isPartialSelection ?\n this.parent.groupSettings.columns.length ? this.getData().records.slice() :\n this.getData().slice() : this.persistSelectedData;\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 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 }\n else {\n this.parent.checkAllRows = 'Uncheck';\n this.updatePersistSelectedData(checkState);\n this.clearSelection();\n }\n this.chkAllCollec = [];\n if (!isNullOrUndefined(editForm)) {\n var editChkBox = editForm.querySelector('.e-edit-checkselect');\n if (!isNullOrUndefined(editChkBox)) {\n removeAddCboxClasses(editChkBox.nextElementSibling, checkState);\n }\n }\n };\n Selection.prototype.checkSelectAll = function (checkBox) {\n var _this = this;\n var stateStr = this.getCheckAllStatus(checkBox);\n var state = stateStr === 'Check';\n this.isHeaderCheckboxClicked = true;\n if ((this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n && this.parent.dataSource.result)) && ((stateStr === 'Uncheck' || this.isCheckboxReset) ||\n (stateStr === 'Intermediate' && this.parent.isPersistSelection))) {\n this.rmtHdrChkbxClicked = true;\n }\n else {\n this.rmtHdrChkbxClicked = false;\n }\n if (this.rmtHdrChkbxClicked && this.isCheckboxReset) {\n this.unSelectedRowState = {};\n }\n this.isCheckboxReset = false;\n if (stateStr === 'Intermediate') {\n if (!this.chkField && !this.parent.isPersistSelection) {\n state = this.getCurrentBatchRecordChanges().some(function (data) {\n return _this.getPkValue(_this.primaryKey, data) in _this.selectedRowState;\n });\n }\n if ((this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n && this.parent.dataSource.result)) && this.parent.isPersistSelection) {\n for (var i = 0; i < this.getCurrentBatchRecordChanges().length; i++) {\n if (!isNullOrUndefined(this.getPkValue(this.primaryKey, this.getCurrentBatchRecordChanges()[\"\" + i]))) {\n if (Object.keys(this.selectedRowState).includes((this.getPkValue(this.primaryKey, this.getCurrentBatchRecordChanges()[\"\" + i])).toString())) {\n state = true;\n }\n else {\n state = false;\n break;\n }\n }\n }\n }\n }\n if (this.parent.isPersistSelection && this.parent.allowPaging) {\n this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n }\n this.checkSelectAllAction(!state);\n this.target = null;\n if (this.getCurrentBatchRecordChanges().length > 0) {\n this.setCheckAllState();\n this.updateSelectedRowIndexes();\n }\n this.triggerChkChangeEvent(checkBox, !state);\n };\n Selection.prototype.getCheckAllStatus = function (ele) {\n var classes = ele ? ele.nextElementSibling.classList :\n this.getCheckAllBox().nextElementSibling.classList;\n var status;\n if (classes.contains('e-check')) {\n status = 'Check';\n }\n else if (classes.contains('e-uncheck')) {\n status = 'Uncheck';\n }\n else if (classes.contains('e-stop')) {\n status = 'Intermediate';\n }\n else {\n status = 'None';\n }\n return status;\n };\n Selection.prototype.checkSelect = function (checkBox) {\n var target = closest(this.checkedTarget, '.' + literals.rowCell);\n var gObj = this.parent;\n this.isMultiCtrlRequest = true;\n var rIndex = 0;\n this.isHeaderCheckboxClicked = false;\n if (isGroupAdaptive(gObj)) {\n var uid = target.parentElement.getAttribute('data-uid');\n if (this.parent.enableVirtualization && this.parent.groupSettings.columns.length) {\n rIndex = parseInt(target.parentElement.getAttribute(literals.dataRowIndex), 10);\n }\n else {\n rIndex = gObj.getRows().map(function (m) { return m.getAttribute('data-uid'); }).indexOf(uid);\n }\n }\n else {\n rIndex = parseInt(target.parentElement.getAttribute(literals.dataRowIndex), 10);\n }\n if (this.parent.isPersistSelection && this.parent.element.getElementsByClassName(literals.addedRow).length > 0 &&\n this.parent.editSettings.newRowPosition === 'Top') {\n ++rIndex;\n }\n this.rowCellSelectionHandler(rIndex, parseInt(target.getAttribute(literals.dataColIndex), 10));\n this.moveIntoUncheckCollection(closest(target, '.' + literals.row));\n this.setCheckAllState();\n this.isMultiCtrlRequest = false;\n this.triggerChkChangeEvent(checkBox, checkBox.nextElementSibling.classList.contains('e-check'));\n };\n 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 ? this.getPkValue(this.primaryKey, rowObj.data) : null;\n if (!pKey) {\n return;\n }\n if (this.chkAllCollec.indexOf(pKey) < 0) {\n this.chkAllCollec.push(pKey);\n }\n else {\n this.chkAllCollec.splice(this.chkAllCollec.indexOf(pKey), 1);\n }\n }\n };\n Selection.prototype.triggerChkChangeEvent = function (checkBox, checkState) {\n this.parent.trigger(events.checkBoxChange, {\n checked: checkState, selectedRowIndexes: this.parent.getSelectedRowIndexes(),\n target: checkBox\n });\n if (!this.parent.isEdit) {\n this.checkedTarget = null;\n }\n };\n Selection.prototype.updateSelectedRowIndexes = function () {\n if (this.parent.isCheckBoxSelection && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) &&\n this.isPartialSelection && !(this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n && this.parent.dataSource.result))\n && this.parent.selectionSettings.persistSelection) {\n if (this.parent.checkAllRows !== 'Uncheck') {\n var rowObj = this.parent.getRowsObject().filter(function (e) { return e.isSelectable; });\n for (var _i = 0, rowObj_2 = rowObj; _i < rowObj_2.length; _i++) {\n var row = rowObj_2[_i];\n this.selectedRowIndexes.push(row.index);\n }\n }\n }\n if (this.parent.isCheckBoxSelection && this.parent.enableVirtualization && !this.isPartialSelection &&\n (this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n && this.parent.dataSource.result))\n && !this.parent.isPersistSelection && this.parent.checkAllRows === 'Check') {\n var rowObj = this.parent.getRowsObject().filter(function (e) { return e.isSelectable; });\n if (rowObj.length !== this.selectedRowIndexes.length) {\n for (var _a = 0, rowObj_3 = rowObj; _a < rowObj_3.length; _a++) {\n var row = rowObj_3[_a];\n if (this.selectedRowIndexes.indexOf(row.index) <= -1) {\n this.selectedRowIndexes.push(row.index);\n }\n }\n }\n }\n };\n Selection.prototype.updateSelectedRowIndex = function (index) {\n if (this.parent.isCheckBoxSelection && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)\n && !(this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n && this.parent.dataSource.result))\n && !this.isPartialSelection) {\n if (this.parent.checkAllRows === 'Check') {\n this.selectedRowIndexes = [];\n var dataLength = this.parent.groupSettings.columns.length ? this.getData()['records'].length :\n this.getData().length;\n for (var data = 0; data < dataLength; data++) {\n this.selectedRowIndexes.push(data);\n }\n }\n else if (this.parent.checkAllRows === 'Uncheck') {\n this.selectedRowIndexes = [];\n }\n else {\n var row = this.parent.getRowByIndex(index);\n if (index && row && row.getAttribute('aria-selected') === 'false') {\n var selectedVal = this.selectedRowIndexes.indexOf(index);\n this.selectedRowIndexes.splice(selectedVal, 1);\n }\n }\n }\n };\n Selection.prototype.isAllSelected = function (count) {\n if (this.parent.getDataModule().isRemote()\n || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result)) {\n return this.getAvailableSelectedData().length === (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling\n ? this.parent.totalDataRecordsCount : this.totalRecordsCount);\n }\n else {\n if (this.isPartialSelection) {\n if (this.parent.allowPaging && this.parent.pageSettings.pageSize < this.parent.pageSettings.totalRecordsCount) {\n var data = this.parent.partialSelectedRecords;\n for (var i = 0; i < data.length; i++) {\n var pKey = this.getPkValue(this.primaryKey, data[parseInt(i.toString(), 10)]);\n if (!this.selectedRowState[\"\" + pKey]) {\n return false;\n }\n }\n return true;\n }\n else {\n return this.isSelectAllRowCount(count);\n }\n }\n else {\n var data = (this.parent.groupSettings.columns.length) ? this.getData()['records'] : this.getData();\n for (var i = 0; i < data.length; i++) {\n var pKey = this.getPkValue(this.primaryKey, data[parseInt(i.toString(), 10)]);\n if (!this.selectedRowState[\"\" + pKey]) {\n return false;\n }\n }\n return true;\n }\n }\n };\n Selection.prototype.someDataSelected = function () {\n if ((this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n && this.parent.dataSource.result))\n && (this.parent.searchSettings.key.length || this.parent.filterSettings.columns.length)) {\n var filteredSearchedSelectedData = this.getAvailableSelectedData();\n for (var i = 0; i < filteredSearchedSelectedData.length; i++) {\n var pKey = this.getPkValue(this.primaryKey, filteredSearchedSelectedData[parseInt(i.toString(), 10)]);\n if (this.selectedRowState[\"\" + pKey]) {\n return false;\n }\n }\n }\n var data = this.isPartialSelection ? this.parent.partialSelectedRecords\n : (this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n && this.parent.dataSource.result)) ? [] : this.getData();\n for (var i = 0; i < data.length; i++) {\n var pKey = this.getPkValue(this.primaryKey, data[parseInt(i.toString(), 10)]);\n if (this.selectedRowState[\"\" + pKey]) {\n return false;\n }\n }\n return true;\n };\n Selection.prototype.setCheckAllState = function (index, isInteraction) {\n if (this.parent.isCheckBoxSelection || this.parent.selectionSettings.checkboxMode === 'ResetOnRowClick') {\n var checkToSelectAll = false;\n var isFiltered = false;\n var checkedLen = Object.keys(this.selectedRowState).length;\n if (!this.parent.isPersistSelection) {\n checkedLen = this.selectedRowIndexes.length;\n this.totalRecordsCount = this.getCurrentBatchRecordChanges().length;\n }\n if (this.parent.isPersistSelection && !((this.parent.getDataModule().isRemote() ||\n (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result)) &&\n this.isPartialSelection)\n && (this.parent.searchSettings.key.length || this.parent.filterSettings.columns.length)) {\n isFiltered = true;\n checkToSelectAll = this.isAllSelected(checkedLen);\n }\n var input = this.getCheckAllBox();\n if (input) {\n var spanEle = input.nextElementSibling;\n removeClass([spanEle], ['e-check', 'e-stop', 'e-uncheck']);\n setChecked(input, false);\n input.indeterminate = false;\n var getRecord = this.parent.getDataModule().isRemote() ? [] :\n (this.parent.groupSettings.columns.length) ? this.getData()['records'] : this.getData();\n if ((checkToSelectAll && isFiltered && (this.parent.getDataModule().isRemote() ||\n (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result) ||\n getRecord.length)) || (!isFiltered && ((checkedLen === this.totalRecordsCount && this.totalRecordsCount\n && !this.isPartialSelection && (!(this.parent.getDataModule().isRemote()\n || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result))\n || this.parent.allowPaging)) ||\n (!this.parent.enableVirtualization && !this.parent.enableInfiniteScrolling\n && this.isPartialSelection && (this.isSelectAllRowCount(checkedLen) || this.isHdrSelectAllClicked))\n || ((this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)\n && !this.parent.allowPaging && ((!(this.parent.getDataModule().isRemote()\n || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result)) &&\n getRecord.length && checkedLen === getRecord.length) || ((this.parent.getDataModule().isRemote()\n || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result)) &&\n !this.isPartialSelection && ((checkedLen === this.parent.totalDataRecordsCount) || ((this.isSelectAllRowCount(checkedLen)\n || checkedLen === this.totalRecordsCount) && !this.parent.isPersistSelection))) ||\n (this.isPartialSelection && (this.isHdrSelectAllClicked || this.isSelectAllRowCount(checkedLen)))))\n || (checkedLen === this.totalRecordsCount && this.totalRecordsCount && !this.isPartialSelection &&\n !this.parent.allowPaging && !this.parent.enableVirtualization && !this.parent.enableInfiniteScrolling)))) {\n addClass([spanEle], ['e-check']);\n setChecked(input, true);\n if (isInteraction) {\n this.getRenderer().setSelection(null, true, true);\n }\n this.parent.checkAllRows = 'Check';\n }\n else if (((!this.selectedRowIndexes.length && (!this.parent.enableVirtualization ||\n (!this.persistSelectedData.length && !isFiltered) || (isFiltered && this.someDataSelected())) ||\n checkedLen === 0 && this.getCurrentBatchRecordChanges().length === 0) && !this.parent.allowPaging) ||\n (this.parent.allowPaging && (checkedLen === 0 || (checkedLen && isFiltered && this.someDataSelected())))) {\n addClass([spanEle], ['e-uncheck']);\n if (isInteraction) {\n this.getRenderer().setSelection(null, false, true);\n }\n this.parent.checkAllRows = 'Uncheck';\n }\n else {\n addClass([spanEle], ['e-stop']);\n this.parent.checkAllRows = 'Intermediate';\n input.indeterminate = true;\n }\n if (checkedLen === 0 && this.getCurrentBatchRecordChanges().length === 0) {\n addClass([spanEle.parentElement], ['e-checkbox-disabled']);\n }\n else {\n removeClass([spanEle.parentElement], ['e-checkbox-disabled']);\n }\n if (this.isPartialSelection) {\n var rowCount = this.parent.getRowsObject().filter(function (e) { return e.isSelectable; }).length;\n if (rowCount === 0 && spanEle.parentElement.querySelector('.e-frame').classList.contains('e-uncheck')) {\n addClass([spanEle.parentElement], ['e-checkbox-disabled']);\n }\n else {\n removeClass([spanEle.parentElement], ['e-checkbox-disabled']);\n }\n }\n if ((this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)\n && !this.parent.allowPaging && !(this.parent.getDataModule().isRemote()\n || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result))) {\n this.updateSelectedRowIndex(index);\n }\n }\n }\n };\n Selection.prototype.isSelectAllRowCount = function (count) {\n var rowCount = 0;\n var rowObj = this.parent.getRowsObject();\n if (this.parent.selectionSettings.persistSelection && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n var dataLen = (this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n && this.parent.dataSource.result)) ?\n this.parent.totalDataRecordsCount : this.getData() && this.getData().length;\n if (dataLen === rowObj.length) {\n rowCount = rowObj.filter(function (e) { return e.isSelectable; }).length;\n return rowCount && count === rowCount;\n }\n else {\n return false;\n }\n }\n else {\n if (this.parent.allowPaging && this.parent.selectionSettings.persistSelection) {\n rowCount = this.parent.partialSelectedRecords.length + this.parent.disableSelectedRecords.length;\n if (rowCount === this.totalRecordsCount) {\n return this.parent.partialSelectedRecords.length && count === this.parent.partialSelectedRecords.length;\n }\n else {\n return false;\n }\n }\n else {\n rowCount = rowObj.filter(function (e) { return e.isSelectable; }).length;\n return rowCount && count === rowCount;\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)) ||\n (Browser.info.name === 'opera' && e.keyCode === 17) || (Browser.info.name === 'mozilla' && e.keyCode === 224)) {\n this.cmdKeyPressed = true;\n }\n var targetHeadCell = parentsUntil(e.target, 'e-headercell');\n var targetRowCell = parentsUntil(e.target, literals.rowCell);\n var isCheckBox = targetHeadCell ? targetHeadCell.children[0].classList.contains('e-headerchkcelldiv') :\n targetRowCell ? targetRowCell.classList.contains('e-gridchkbox') : false;\n if (isCheckBox && !this.parent.allowKeyboard && e.keyCode === 32) {\n e.preventDefault();\n }\n };\n Selection.prototype.keyUpHandler = function (e) {\n if ((((Browser.info.name === 'chrome') || (Browser.info.name === 'safari')) && (e.keyCode === 91 || e.keyCode === 93)) ||\n (Browser.info.name === 'opera' && e.keyCode === 17) || (Browser.info.name === 'mozilla' && e.keyCode === 224)) {\n this.cmdKeyPressed = false;\n }\n };\n Selection.prototype.clickHandler = function (e) {\n var target = e.target;\n this.actualTarget = target;\n if (this.selectionSettings.persistSelection) {\n this.deSelectedData = iterateExtend(this.persistSelectedData);\n }\n if (parentsUntil(target, literals.row) || parentsUntil(target, 'e-headerchkcelldiv') ||\n (this.selectionSettings.allowColumnSelection && target.classList.contains('e-headercell'))) {\n this.isInteracted = true;\n }\n this.cmdKeyPressed = e.metaKey;\n this.isMultiCtrlRequest = e.ctrlKey || this.enableSelectMultiTouch ||\n (this.isMacOS && this.cmdKeyPressed);\n if (!this.parent.allowKeyboard) {\n this.isMultiShiftRequest = false;\n this.isMultiCtrlRequest = false;\n }\n else {\n this.isMultiShiftRequest = e.shiftKey;\n }\n this.isMultiCtrlRequestCell = this.isMultiCtrlRequest;\n this.popUpClickHandler(e);\n var chkSelect = false;\n this.preventFocus = true;\n var checkBox;\n var checkWrap = parentsUntil(target, 'e-checkbox-wrapper');\n this.checkSelectAllClicked = checkWrap && checkWrap.getElementsByClassName('e-checkselectall') ||\n (this.selectionSettings.persistSelection && parentsUntil(target, literals.row)) ? true : false;\n if (this.selectionSettings.persistSelection && this.isPartialSelection && parentsUntil(target, 'e-headerchkcelldiv')\n && !target.querySelector('.e-checkbox-disabled')) {\n this.isHdrSelectAllClicked = true;\n }\n if (checkWrap && checkWrap.querySelectorAll('.e-checkselect,.e-checkselectall').length > 0) {\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n chkSelect = true;\n }\n this.drawBorders();\n this.updateAutoFillPosition();\n target = parentsUntil(target, literals.rowCell);\n if (this.parent.isReact && (target && !target.parentElement && target.classList.contains('e-rowcell'))) {\n target = this.parent.getCellFromIndex(parseInt(target.getAttribute('index'), 10), parseInt(target.getAttribute('data-colindex'), 10));\n }\n if (this.isRowDragSelected && isNullOrUndefined(target) && this.parent.allowRowDragAndDrop &&\n this.selectionSettings.persistSelection && this.checkSelectAllClicked) {\n this.isRowDragSelected = false;\n }\n if (((target && target.parentElement.classList.contains(literals.row) && !this.parent.selectionSettings.checkboxOnly) || chkSelect)\n && !this.isRowDragSelected) {\n if (this.parent.isCheckBoxSelection) {\n this.isMultiCtrlRequest = true;\n }\n this.target = target;\n if (!isNullOrUndefined(checkBox)) {\n this.checkedTarget = checkBox;\n if (checkBox.classList.contains('e-checkselectall')) {\n this.checkSelectAll(checkBox);\n }\n else {\n this.checkSelect(checkBox);\n }\n }\n else {\n var gObj = this.parent;\n var rIndex = 0;\n if (isGroupAdaptive(gObj)) {\n var uid = target.parentElement.getAttribute('data-uid');\n rIndex = gObj.getRows().map(function (m) { return m.getAttribute('data-uid'); }).indexOf(uid);\n }\n else {\n rIndex = parseInt(target.parentElement.getAttribute(literals.dataRowIndex), 10);\n }\n if (this.parent.isPersistSelection && this.parent.element.getElementsByClassName(literals.addedRow).length > 0) {\n ++rIndex;\n }\n if (!this.mUPTarget || !this.mUPTarget.isEqualNode(target)) {\n this.rowCellSelectionHandler(rIndex, parseInt(target.getAttribute(literals.dataColIndex), 10));\n }\n if (this.parent.isCheckBoxSelection) {\n this.moveIntoUncheckCollection(closest(target, '.' + literals.row));\n this.setCheckAllState();\n }\n }\n if (!this.parent.isCheckBoxSelection && Browser.isDevice && !this.isSingleSel()) {\n this.showPopup(e);\n }\n }\n else if (e.target.classList.contains('e-headercell') &&\n !e.target.classList.contains('e-stackedheadercell')) {\n var uid = e.target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n this.headerSelectionHandler(this.parent.getColumnIndexByUid(uid));\n }\n this.isMultiCtrlRequest = false;\n this.isMultiCtrlRequestCell = this.isMultiCtrlRequest;\n this.isMultiShiftRequest = false;\n if (isNullOrUndefined(closest(e.target, '.e-unboundcell'))) {\n this.preventFocus = false;\n }\n };\n Selection.prototype.popUpClickHandler = function (e) {\n var target = e.target;\n if (closest(target, '.e-headercell') || e.target.classList.contains(literals.rowCell) ||\n 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 }\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 }\n else {\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\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' +\n (!this.isSingleSel() && (this.selectedRecords.length > 1\n || this.selectedRowCellIndexes.length > 1) ? ' e-spanclicked' : ''));\n }\n };\n Selection.prototype.rowCellSelectionHandler = function (rowIndex, cellIndex) {\n if ((!this.isMultiCtrlRequest && !this.isMultiShiftRequest) || this.isSingleSel()) {\n if (!this.isDragged) {\n this.selectRow(rowIndex, this.selectionSettings.enableToggle);\n }\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, this.selectionSettings.enableToggle);\n if (this.selectedRowCellIndexes.length) {\n this.updateAutoFillPosition();\n }\n this.drawBorders();\n }\n else if (this.isMultiShiftRequest) {\n if (this.parent.isCheckBoxSelection || (!this.parent.isCheckBoxSelection &&\n !closest(this.target, '.' + literals.rowCell).classList.contains(literals.gridChkBox))) {\n this.selectRowsByRange(isUndefined(this.prevRowIndex) ? rowIndex : this.prevRowIndex, rowIndex);\n }\n else {\n this.addRowsToSelection([rowIndex]);\n }\n this.selectCellsByRange(isUndefined(this.prevCIdxs) ? { rowIndex: rowIndex, cellIndex: cellIndex } : this.prevCIdxs, { rowIndex: rowIndex, cellIndex: cellIndex });\n this.updateAutoFillPosition();\n this.drawBorders();\n }\n else {\n this.addRowsToSelection([rowIndex]);\n if (this.selectionSettings.mode === 'Both') {\n var checkboxColumn = this.parent.getColumns().find(function (col) { return col.type === 'checkbox'; });\n var checkboxColumnIndexCheck = checkboxColumn && checkboxColumn.index !== cellIndex;\n if (checkboxColumnIndexCheck && !this.isMultiCtrlRequestCell) {\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, this.selectionSettings.enableToggle);\n }\n else if (!checkboxColumn || checkboxColumnIndexCheck) {\n this.addCellsToSelection([{ rowIndex: rowIndex, cellIndex: cellIndex }]);\n }\n }\n else {\n this.addCellsToSelection([{ rowIndex: rowIndex, cellIndex: cellIndex }]);\n }\n this.showHideBorders('none');\n }\n this.isDragged = false;\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 }\n else {\n e.isJump = e.element.tagName === 'TH' ? true : false;\n }\n }\n else {\n if (e.keyArgs.action === 'downArrow') {\n var rIdx = Number(e.element.parentElement.getAttribute(literals.dataRowIndex));\n e.isJump = rIdx === 0 ? true : false;\n }\n else {\n if (e.keyArgs.action === 'ctrlHome') {\n e.isJump = true;\n }\n }\n }\n }\n var clear = ((e.container.isHeader && e.isJump) ||\n (e.container.isContent && !e.container.isSelectable)) && !(e.byKey && e.keyArgs.action === 'space')\n && !(e.element.classList.contains('e-detailrowexpand') || e.element.classList.contains('e-detailrowcollapse'));\n var headerAction = (e.container.isHeader && e.element.tagName !== 'TD' && !closest(e.element, '.' + literals.rowCell))\n && !(e.byKey && e.keyArgs.action === 'space');\n if (!e.byKey || clear) {\n if (clear && !this.parent.isCheckBoxSelection) {\n this.clearSelection();\n }\n return;\n }\n var _a = e.container.isContent ? e.container.indexes : e.indexes, rowIndex = _a[0], cellIndex = _a[1];\n var prev = this.focus.getPrevIndexes();\n if (e.element.parentElement.querySelector('.e-rowcelldrag') || e.element.parentElement.querySelector('.e-dtdiagonalright')\n || e.element.parentElement.querySelector('.e-dtdiagonaldown')) {\n prev.cellIndex = prev.cellIndex - 1;\n }\n if (this.parent.frozenRows) {\n if (e.container.isHeader && (e.element.tagName === 'TD' || closest(e.element, '.' + literals.rowCell))) {\n var thLen = this.parent.getHeaderTable().querySelector('thead').childElementCount;\n rowIndex -= thLen;\n prev.rowIndex = !isNullOrUndefined(prev.rowIndex) ? prev.rowIndex - thLen : null;\n }\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 if (this.parent.enableInfiniteScrolling && this.parent.infiniteScrollSettings.enableCache) {\n rowIndex = parseInt(e.element.parentElement.getAttribute('data-rowindex'), 10);\n }\n if ((headerAction || (['ctrlPlusA', 'escape'].indexOf(e.keyArgs.action) === -1 &&\n e.keyArgs.action !== 'space' && rowIndex === prev.rowIndex && cellIndex === prev.cellIndex)) &&\n !this.selectionSettings.allowColumnSelection) {\n return;\n }\n this.preventFocus = true;\n var columnIndex = this.getKeyColIndex(e);\n if (this.needColumnSelection) {\n cellIndex = columnIndex;\n }\n if (this.parent.element.classList.contains('e-gridcell-read') && (e.keyArgs.action === 'tab' || e.keyArgs.action === 'shiftTab'\n || e.keyArgs.action === 'rightArrow' || e.keyArgs.action === 'leftArrow')) {\n var targetLabel = this.target.getAttribute('aria-label');\n targetLabel = this.target.innerHTML + ' column header ' + this.parent.getColumnByIndex(cellIndex).field;\n this.target.setAttribute('aria-label', targetLabel);\n }\n switch (e.keyArgs.action) {\n case 'downArrow':\n case 'upArrow':\n case 'enter':\n case 'shiftEnter':\n this.target = e.element;\n this.isKeyAction = true;\n this.applyDownUpKey(rowIndex, cellIndex);\n break;\n case 'rightArrow':\n case 'leftArrow':\n this.applyRightLeftKey(rowIndex, cellIndex);\n break;\n case 'shiftDown':\n case 'shiftUp':\n this.shiftDownKey(rowIndex, cellIndex);\n break;\n case 'shiftLeft':\n case 'shiftRight':\n this.applyShiftLeftRightKey(rowIndex, cellIndex);\n break;\n case 'home':\n case 'end':\n cellIndex = e.keyArgs.action === 'end' ? this.getLastColIndex(rowIndex) : 0;\n this.applyHomeEndKey(rowIndex, cellIndex);\n break;\n case 'ctrlHome':\n case 'ctrlEnd':\n this.applyCtrlHomeEndKey(rowIndex, cellIndex);\n break;\n case 'escape':\n this.clearSelection();\n if (this.parent.clipboardModule) {\n window.navigator['clipboard'].writeText('');\n }\n break;\n case 'ctrlPlusA':\n this.ctrlPlusA();\n break;\n case 'space':\n this.applySpaceSelection(e.element);\n break;\n case 'tab':\n if (this.parent.editSettings.allowNextRowEdit) {\n this.selectRow(rowIndex);\n }\n break;\n }\n this.needColumnSelection = false;\n this.preventFocus = false;\n this.positionBorders();\n if (this.parent.isFrozenGrid()) {\n this.showHideBorders('none', true);\n this.refreshFrozenBorders();\n }\n this.updateAutoFillPosition();\n };\n Selection.prototype.getKeyColIndex = function (e) {\n var uid;\n var index = null;\n var stackedHeader = e.element.querySelector('.e-stackedheadercelldiv');\n if (this.selectionSettings.allowColumnSelection && parentsUntil(e.element, 'e-columnheader')) {\n this.needColumnSelection = e.container.isHeader ? true : false;\n if (stackedHeader) {\n if (e.keyArgs.action === 'rightArrow' || e.keyArgs.action === 'leftArrow') {\n return index;\n }\n uid = stackedHeader.getAttribute('e-mappinguid');\n var innerColumn = this.getstackedColumns(this.parent.getColumnByUid(uid).columns);\n var lastIndex = this.parent.getColumnIndexByUid(innerColumn[innerColumn.length - 1].uid);\n var firstIndex = this.parent.getColumnIndexByUid(innerColumn[0].uid);\n index = this.prevColIndex >= lastIndex ? firstIndex : lastIndex;\n }\n else {\n index = this.parent.getColumnIndexByUid(e.element\n .querySelector('.e-headercelldiv').getAttribute('e-mappinguid'));\n }\n }\n return index;\n };\n /**\n * Apply ctrl + A key selection\n *\n * @returns {void}\n * @hidden\n */\n Selection.prototype.ctrlPlusA = function () {\n if (this.isRowType() && !this.isSingleSel()) {\n this.selectRowsByRange(0, this.getCurrentBatchRecordChanges().length - 1);\n }\n if (this.isCellType() && !this.isSingleSel()) {\n this.selectCellsByRange({ rowIndex: 0, cellIndex: 0 }, { rowIndex: this.parent.getRows().length - 1, cellIndex: this.parent.getColumns().length - 1 });\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 }\n else {\n if (target.classList.contains('e-checkselect')) {\n this.checkedTarget = target;\n this.checkSelect(this.checkedTarget);\n }\n }\n };\n Selection.prototype.applyDownUpKey = function (rowIndex, cellIndex) {\n var gObj = this.parent;\n if (this.parent.isCheckBoxSelection && this.parent.checkAllRows === 'Check' && !this.selectionSettings.persistSelection &&\n !this.selectionSettings.checkboxOnly) {\n this.checkSelectAllAction(false);\n this.checkedTarget = null;\n }\n if (this.isRowType() && !this.selectionSettings.checkboxOnly) {\n if (this.parent.frozenRows) {\n this.selectRow(rowIndex, true);\n this.applyUpDown(gObj.selectedRowIndex);\n }\n else {\n this.selectRow(rowIndex, true);\n this.applyUpDown(gObj.selectedRowIndex);\n }\n }\n if (this.isCellType()) {\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n }\n if (this.selectionSettings.allowColumnSelection && this.needColumnSelection) {\n this.selectColumn(cellIndex);\n }\n };\n Selection.prototype.applyUpDown = function (rowIndex) {\n if (rowIndex < 0) {\n return;\n }\n if (!this.target) {\n this.target = this.parent.getRows()[0].children[this.parent.groupSettings.columns.length || 0];\n }\n var cIndex = parseInt(this.target.getAttribute(literals.dataColIndex), 10);\n var row = this.contentRenderer.getRowByIndex(rowIndex);\n if (row) {\n this.target = row.getElementsByClassName(literals.rowCell)[parseInt(cIndex.toString(), 10)];\n }\n this.addAttribute(this.target);\n if (this.parent.element.classList.contains('e-gridcell-read')) {\n var targetLabel = this.target.getAttribute('aria-label');\n targetLabel = this.target.innerHTML;\n this.target.setAttribute('aria-label', targetLabel);\n }\n };\n Selection.prototype.applyRightLeftKey = function (rowIndex, cellIndex) {\n if (this.selectionSettings.allowColumnSelection && this.needColumnSelection) {\n this.selectColumn(cellIndex);\n }\n else if (this.isCellType()) {\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n this.addAttribute(this.target);\n }\n };\n Selection.prototype.applyHomeEndKey = function (rowIndex, cellIndex) {\n if (this.isCellType()) {\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n }\n else {\n this.addAttribute(this.parent.getCellFromIndex(rowIndex, cellIndex));\n }\n };\n /**\n * Apply shift+down key selection\n *\n * @param {number} rowIndex - specfies the rowIndex\n * @param {number} cellIndex - specifies the CellIndex\n * @returns {void}\n * @hidden\n */\n Selection.prototype.shiftDownKey = function (rowIndex, cellIndex) {\n this.isMultiShiftRequest = true;\n if (this.isRowType() && !this.isSingleSel()) {\n if (!isUndefined(this.prevRowIndex)) {\n this.selectRowsByRange(this.prevRowIndex, rowIndex);\n this.applyUpDown(rowIndex);\n }\n else if (this.isPartialSelection) {\n this.selectRow(rowIndex, true);\n }\n else {\n this.selectRow(0, true);\n }\n }\n if (this.isCellType() && !this.isSingleSel()) {\n this.selectCellsByRange(this.prevCIdxs || { rowIndex: 0, cellIndex: 0 }, { rowIndex: rowIndex, cellIndex: cellIndex });\n }\n this.isMultiShiftRequest = false;\n };\n Selection.prototype.applyShiftLeftRightKey = function (rowIndex, cellIndex) {\n this.isMultiShiftRequest = true;\n if (this.selectionSettings.allowColumnSelection && this.needColumnSelection) {\n this.selectColumnsByRange(this.prevColIndex, cellIndex);\n }\n else {\n this.selectCellsByRange(this.prevCIdxs, { rowIndex: rowIndex, cellIndex: cellIndex });\n }\n this.isMultiShiftRequest = false;\n };\n Selection.prototype.getstackedColumns = function (column) {\n var innerColumnIndexes = [];\n for (var i = 0, len = column.length; i < len; i++) {\n if (column[parseInt(i.toString(), 10)].columns) {\n this.getstackedColumns(column[parseInt(i.toString(), 10)].columns);\n }\n else {\n innerColumnIndexes.push(column[parseInt(i.toString(), 10)]);\n }\n }\n return innerColumnIndexes;\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 if (this.isCellType()) {\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n }\n };\n Selection.prototype.addRemoveClassesForRow = function (row, isAdd, clearAll) {\n var args = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n args[_i - 3] = arguments[_i];\n }\n if (row) {\n var cells = [].slice.call(row.getElementsByClassName(literals.rowCell));\n var detailIndentCell = row.querySelector('.e-detailrowcollapse') || row.querySelector('.e-detailrowexpand');\n var dragdropIndentCell = row.querySelector('.e-rowdragdrop');\n if (detailIndentCell) {\n cells.push(detailIndentCell);\n }\n if (dragdropIndentCell) {\n cells.push(dragdropIndentCell);\n }\n addRemoveActiveClasses.apply(void 0, [cells, isAdd].concat(args));\n }\n this.getRenderer().setSelection(row ? row.getAttribute('data-uid') : null, isAdd, clearAll);\n };\n Selection.prototype.isRowType = function () {\n return this.selectionSettings.mode === 'Row' || this.selectionSettings.mode === 'Both';\n };\n Selection.prototype.isCellType = function () {\n return this.selectionSettings.mode === 'Cell' || this.selectionSettings.mode === 'Both';\n };\n Selection.prototype.isSingleSel = function () {\n return this.selectionSettings.type === 'Single';\n };\n Selection.prototype.getRenderer = function () {\n if (isNullOrUndefined(this.contentRenderer)) {\n this.contentRenderer = this.factory.getRenderer(RenderType.Content);\n }\n return this.contentRenderer;\n };\n /**\n * Gets the collection of selected records.\n *\n * @returns {Object[]} returns the Object\n */\n Selection.prototype.getSelectedRecords = function () {\n var selectedData = [];\n if (!this.selectionSettings.persistSelection && this.selectedRecords.length) {\n selectedData = this.parent.getRowsObject().filter(function (row) { return row.isSelected; })\n .map(function (m) { return m.data; });\n }\n else {\n selectedData = this.persistSelectedData;\n }\n return selectedData;\n };\n /**\n * Select the column by passing start column index\n *\n * @param {number} index - specifies the index\n * @returns {void}\n */\n Selection.prototype.selectColumn = function (index) {\n var gObj = this.parent;\n if (isNullOrUndefined(gObj.getColumns()[parseInt(index.toString(), 10)])) {\n return;\n }\n var column = gObj.getColumnByIndex(index);\n var selectedCol = gObj.getColumnHeaderByUid(column.uid);\n var isColSelected = selectedCol.classList.contains('e-columnselection');\n if ((!gObj.selectionSettings.allowColumnSelection)) {\n return;\n }\n var isMultiColumns = this.selectedColumnsIndexes.length > 1 &&\n this.selectedColumnsIndexes.indexOf(index) > -1;\n this.clearColDependency();\n if (!isColSelected || !this.selectionSettings.enableToggle || isMultiColumns) {\n var args = {\n columnIndex: index, headerCell: selectedCol,\n column: column,\n cancel: false, target: this.actualTarget,\n isInteracted: this.isInteracted, previousColumnIndex: this.prevColIndex,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest\n };\n this.onActionBegin(args, events.columnSelecting);\n if (args.cancel) {\n this.disableInteracted();\n return;\n }\n if (!(gObj.selectionSettings.enableToggle && index === this.prevColIndex && isColSelected) || isMultiColumns) {\n this.updateColSelection(selectedCol, index);\n }\n var selectedArgs = {\n columnIndex: index, headerCell: selectedCol,\n column: column,\n target: this.actualTarget,\n isInteracted: this.isInteracted, previousColumnIndex: this.prevColIndex\n };\n this.onActionComplete(selectedArgs, events.columnSelected);\n }\n this.updateColProps(index);\n };\n /**\n * Select the columns by passing start and end column index\n *\n * @param {number} startIndex - specifies the start index\n * @param {number} endIndex - specifies the end index\n * @returns {void}\n */\n Selection.prototype.selectColumnsByRange = function (startIndex, endIndex) {\n var gObj = this.parent;\n if (isNullOrUndefined(gObj.getColumns()[parseInt(startIndex.toString(), 10)])) {\n return;\n }\n var indexes = [];\n if (gObj.selectionSettings.type === 'Single' || isNullOrUndefined(endIndex)) {\n indexes[0] = startIndex;\n }\n else {\n var min = startIndex < endIndex;\n for (var i = startIndex; min ? i <= endIndex : i >= endIndex; min ? i++ : i--) {\n indexes.push(i);\n }\n }\n this.selectColumns(indexes);\n };\n /**\n * Select the columns by passing column indexes\n *\n * @param {number[]} columnIndexes - specifies the columnIndexes\n * @returns {void}\n */\n Selection.prototype.selectColumns = function (columnIndexes) {\n var gObj = this.parent;\n var selectedCol = this.getselectedCols();\n if (gObj.selectionSettings.type === 'Single') {\n columnIndexes = [columnIndexes[0]];\n }\n if (!gObj.selectionSettings.allowColumnSelection) {\n return;\n }\n this.clearColDependency();\n var selectingArgs = {\n columnIndex: columnIndexes[0], headerCell: selectedCol,\n columnIndexes: columnIndexes,\n column: gObj.getColumnByIndex(columnIndexes[0]),\n cancel: false, target: this.actualTarget,\n isInteracted: this.isInteracted, previousColumnIndex: this.prevColIndex,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest\n };\n this.onActionBegin(selectingArgs, events.columnSelecting);\n if (selectingArgs.cancel) {\n this.disableInteracted();\n return;\n }\n for (var i = 0, len = columnIndexes.length; i < len; i++) {\n this.updateColSelection(gObj.getColumnHeaderByUid(gObj.getColumnByIndex(columnIndexes[parseInt(i.toString(), 10)]).uid), columnIndexes[parseInt(i.toString(), 10)]);\n }\n selectedCol = this.getselectedCols();\n var selectedArgs = {\n columnIndex: columnIndexes[0], headerCell: selectedCol,\n columnIndexes: columnIndexes,\n column: gObj.getColumnByIndex(columnIndexes[0]),\n target: this.actualTarget,\n isInteracted: this.isInteracted, previousColumnIndex: this.prevColIndex\n };\n this.onActionComplete(selectedArgs, events.columnSelected);\n this.updateColProps(columnIndexes[0]);\n };\n /**\n * Select the column with existing column by passing column index\n *\n * @param {number} startIndex - specifies the start index\n * @returns {void}\n */\n Selection.prototype.selectColumnWithExisting = function (startIndex) {\n var gObj = this.parent;\n if (isNullOrUndefined(gObj.getColumns()[parseInt(startIndex.toString(), 10)])) {\n return;\n }\n var newCol = gObj.getColumnHeaderByUid(gObj.getColumnByIndex(startIndex).uid);\n var selectedCol = this.getselectedCols();\n if (gObj.selectionSettings.type === 'Single') {\n this.clearColDependency();\n }\n if (!gObj.selectionSettings.allowColumnSelection) {\n return;\n }\n if (this.selectedColumnsIndexes.indexOf(startIndex) > -1) {\n this.clearColumnSelection(startIndex);\n }\n else {\n var selectingArgs = {\n columnIndex: startIndex, headerCell: selectedCol,\n columnIndexes: this.selectedColumnsIndexes,\n column: gObj.getColumnByIndex(startIndex),\n cancel: false, target: this.actualTarget,\n isInteracted: this.isInteracted, previousColumnIndex: this.prevColIndex,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest\n };\n this.onActionBegin(selectingArgs, events.columnSelecting);\n if (selectingArgs.cancel) {\n this.disableInteracted();\n return;\n }\n this.updateColSelection(newCol, startIndex);\n selectedCol = this.getselectedCols();\n var selectedArgs = {\n columnIndex: startIndex, headerCell: selectedCol,\n column: gObj.getColumnByIndex(startIndex),\n columnIndexes: this.selectedColumnsIndexes,\n target: this.actualTarget,\n isInteracted: this.isInteracted, previousColumnIndex: this.prevColIndex\n };\n this.onActionComplete(selectedArgs, events.columnSelected);\n }\n this.updateColProps(startIndex);\n };\n /**\n * Clear the column selection\n *\n * @param {number} clearIndex - specifies the clearIndex\n * @returns {void}\n */\n Selection.prototype.clearColumnSelection = function (clearIndex) {\n if (this.isColumnSelected) {\n var gObj = this.parent;\n if (!isNullOrUndefined(clearIndex) && this.selectedColumnsIndexes.indexOf(clearIndex) === -1) {\n return;\n }\n var index = !isNullOrUndefined(clearIndex) ? clearIndex :\n this.selectedColumnsIndexes[this.selectedColumnsIndexes.length - 1];\n var column = gObj.getColumnByIndex(index);\n var selectedCol = gObj.getColumnHeaderByUid(column.uid);\n var deselectedArgs = {\n columnIndex: index, headerCell: selectedCol,\n columnIndexes: this.selectedColumnsIndexes,\n column: column,\n cancel: false, target: this.actualTarget,\n isInteracted: this.isInteracted\n };\n var isCanceled = this.columnDeselect(deselectedArgs, events.columnDeselecting);\n if (isCanceled) {\n this.disableInteracted();\n return;\n }\n var selectedHeader = !isNullOrUndefined(clearIndex) ? [selectedCol] :\n [].slice.call(gObj.getHeaderContent().getElementsByClassName('e-columnselection'));\n var selectedCells = this.getSelectedColumnCells(clearIndex);\n for (var i = 0, len = selectedHeader.length; i < len; i++) {\n addRemoveActiveClasses([selectedHeader[parseInt(i.toString(), 10)]], false, 'e-columnselection');\n }\n for (var i = 0, len = selectedCells.length; i < len; i++) {\n addRemoveActiveClasses([selectedCells[parseInt(i.toString(), 10)]], false, 'e-columnselection');\n }\n if (!isNullOrUndefined(clearIndex)) {\n this.selectedColumnsIndexes.splice(this.selectedColumnsIndexes.indexOf(clearIndex), 1);\n this.parent.getColumns()[parseInt(clearIndex.toString(), 10)].isSelected = false;\n }\n else {\n this.columnDeselect(deselectedArgs, events.columnDeselected);\n this.selectedColumnsIndexes = [];\n this.isColumnSelected = false;\n this.parent.getColumns().filter(function (col) { return col.isSelected = false; });\n }\n }\n };\n Selection.prototype.getselectedCols = function () {\n var gObj = this.parent;\n var selectedCol;\n if (this.selectedColumnsIndexes.length > 1) {\n selectedCol = [];\n for (var i = 0; i < this.selectedColumnsIndexes.length; i++) {\n (selectedCol).push(gObj.getColumnHeaderByUid(gObj.getColumnByIndex(this.selectedColumnsIndexes[parseInt(i.toString(), 10)]).uid));\n }\n }\n else {\n selectedCol = gObj.getColumnHeaderByUid(gObj.getColumnByIndex(this.selectedColumnsIndexes[0]).uid);\n }\n return selectedCol;\n };\n Selection.prototype.getSelectedColumnCells = function (clearIndex) {\n var gObj = this.parent;\n var isRowTemplate = !isNullOrUndefined(this.parent.rowTemplate);\n var rows = isRowTemplate ? gObj.getRows() : gObj.getDataRows();\n var seletedcells = [];\n var selectionString = !isNullOrUndefined(clearIndex) ? '[data-colindex=\"' + clearIndex + '\"]' : '.e-columnselection';\n for (var i = 0, len = rows.length; i < len; i++) {\n seletedcells = seletedcells.concat([].slice.call(rows[parseInt(i.toString(), 10)].querySelectorAll(selectionString)));\n }\n return seletedcells;\n };\n Selection.prototype.columnDeselect = function (args, event) {\n if (event === 'columnDeselected') {\n delete args.cancel;\n }\n this.onActionComplete(args, event);\n return args.cancel;\n };\n Selection.prototype.updateColProps = function (startIndex) {\n this.prevColIndex = startIndex;\n this.isColumnSelected = this.selectedColumnsIndexes.length && true;\n };\n Selection.prototype.clearColDependency = function () {\n this.clearColumnSelection();\n this.selectedColumnsIndexes = [];\n };\n Selection.prototype.updateColSelection = function (selectedCol, startIndex) {\n if (isNullOrUndefined(this.parent.getColumns()[parseInt(startIndex.toString(), 10)])) {\n return;\n }\n var isRowTemplate = !isNullOrUndefined(this.parent.rowTemplate);\n var rows = isRowTemplate ? this.parent.getRows() : this.parent.getDataRows();\n this.selectedColumnsIndexes.push(startIndex);\n this.parent.getColumns()[parseInt(startIndex.toString(), 10)].isSelected = true;\n startIndex = startIndex + this.parent.getIndentCount();\n addRemoveActiveClasses([selectedCol], true, 'e-columnselection');\n for (var j = 0, len = rows.length; j < len; j++) {\n if (rows[parseInt(j.toString(), 10)].classList.contains(literals.row)) {\n if ((rows[parseInt(j.toString(), 10)].classList.contains(literals.editedRow)\n || rows[parseInt(j.toString(), 10)].classList.contains(literals.addedRow))\n && this.parent.editSettings.mode === 'Normal'\n && !isNullOrUndefined(rows[parseInt(j.toString(), 10)].querySelector('tr').childNodes[parseInt(startIndex.toString(), 10)])) {\n addRemoveActiveClasses([rows[parseInt(j.toString(), 10)].querySelector('tr').childNodes[parseInt(startIndex.toString(), 10)]], true, 'e-columnselection');\n }\n else if (!isNullOrUndefined(rows[parseInt(j.toString(), 10)].childNodes[parseInt(startIndex.toString(), 10)])) {\n addRemoveActiveClasses([rows[parseInt(j.toString(), 10)].childNodes[parseInt(startIndex.toString(), 10)]], true, 'e-columnselection');\n }\n }\n }\n };\n Selection.prototype.headerSelectionHandler = function (colIndex) {\n if ((!this.isMultiCtrlRequest && !this.isMultiShiftRequest) || this.isSingleSel()) {\n this.selectColumn(colIndex);\n }\n else if (this.isMultiShiftRequest) {\n this.selectColumnsByRange(isUndefined(this.prevColIndex) ? colIndex : this.prevColIndex, colIndex);\n }\n else {\n this.selectColumnWithExisting(colIndex);\n }\n };\n // eslint-disable-next-line camelcase\n Selection.prototype.addEventListener_checkbox = function () {\n var _this = this;\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.refreshInfinitePersistSelection, this.onDataBoundFunction);\n this.parent.on(events.contentReady, this.checkBoxSelectionChanged, this);\n this.parent.on(events.beforeRefreshOnDataChange, this.initPerisistSelection, this);\n this.parent.on(events.onEmpty, this.setCheckAllForEmptyGrid, this);\n this.actionCompleteFunc = this.actionCompleteHandler.bind(this);\n this.parent.addEventListener(events.actionComplete, this.actionCompleteFunc);\n this.parent.on(events.click, this.clickHandler, this);\n this.resizeEndFn = function () {\n _this.updateAutoFillPosition();\n _this.drawBorders();\n };\n this.resizeEndFn.bind(this);\n this.parent.addEventListener(events.resizeStop, this.resizeEndFn);\n };\n // eslint-disable-next-line camelcase\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.refreshInfinitePersistSelection, this.onDataBoundFunction);\n this.parent.off(events.onEmpty, this.setCheckAllForEmptyGrid);\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.beforeRefreshOnDataChange, this.initPerisistSelection);\n };\n Selection.prototype.setCheckAllForEmptyGrid = function () {\n var checkAllBox = this.getCheckAllBox();\n if (checkAllBox) {\n this.parent.isCheckBoxSelection = true;\n var spanEle = checkAllBox.nextElementSibling;\n removeClass([spanEle], ['e-check', 'e-stop', 'e-uncheck']);\n addClass([spanEle.parentElement], ['e-checkbox-disabled']);\n }\n };\n Selection.prototype.dataReady = function (e) {\n this.isHeaderCheckboxClicked = false;\n var isInfinitecroll = this.parent.enableInfiniteScrolling && e.requestType === 'infiniteScroll';\n if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection && !isInfinitecroll) {\n this.disableUI = !this.parent.enableImmutableMode && !(e.requestType === 'save' && e['action'] === 'add');\n this.clearSelection();\n this.setCheckAllState();\n this.disableUI = false;\n }\n };\n Selection.prototype.actionCompleteHandler = function (e) {\n if (e.requestType === 'save' && this.parent.isPersistSelection) {\n this.refreshPersistSelection();\n }\n };\n Selection.prototype.selectRowIndex = function (index) {\n this.parent.isSelectedRowIndexUpdating = true;\n if ((isNullOrUndefined(this.parent.selectedRowIndex) || this.parent.selectedRowIndex === -1) || !this.parent.enablePersistence) {\n this.parent.selectedRowIndex = index;\n }\n else {\n this.parent.selectedRowIndex = -1;\n }\n };\n Selection.prototype.disableInteracted = function () {\n this.isInteracted = false;\n };\n Selection.prototype.activeTarget = function () {\n this.actualTarget = this.isInteracted ? this.actualTarget : null;\n };\n return Selection;\n}());\nexport { Selection };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { formatUnit } from '@syncfusion/ej2-base';\nimport { columnWidthChanged, preventFrozenScrollRefresh } from '../base/constant';\nimport { Column } from '../models/column';\nimport { parentsUntil, ispercentageWidth, getScrollBarWidth } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * ColumnWidthService\n *\n * @hidden\n */\nvar ColumnWidthService = /** @class */ (function () {\n function ColumnWidthService(parent) {\n this.parent = parent;\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 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 this.setColumnWidth(new Column({ width: '30px' }), i);\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n this.setColumnWidth(new Column({ width: '30px' }), i);\n i++;\n }\n if (this.parent.isRowDragable() && this.parent.getFrozenMode() !== 'Right') {\n this.setColumnWidth(new Column({ width: '30px' }), i);\n i++;\n }\n var columns = this.parent.getColumns();\n for (var j = 0; j < columns.length; j++) {\n this.setColumnWidth(columns[parseInt(j.toString(), 10)], wFlag && this.parent.enableColumnVirtualization ? undefined : j + i);\n }\n if (this.parent.isRowDragable() && this.parent.getFrozenMode() === 'Right') {\n this.setColumnWidth(new Column({ width: '30px' }), this.parent.groupSettings.columns.length + columns.length);\n }\n totalColumnsWidth = this.getTableWidth(this.parent.getColumns());\n if (this.parent.width !== 'auto' && this.parent.width.toString().indexOf('%') === -1) {\n this.setMinwidthBycalculation(totalColumnsWidth);\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 if (collection.length) {\n if (!isNullOrUndefined(this.parent.width) && this.parent.width !== 'auto' &&\n typeof (this.parent.width) === 'string' && this.parent.width.indexOf('%') === -1) {\n difference = (typeof this.parent.width === 'string' ? parseInt(this.parent.width, 10) : this.parent.width) - tWidth;\n }\n else {\n difference = this.parent.element.getBoundingClientRect().width - tWidth;\n }\n var tmWidth = 0;\n for (var _i = 0, collection_1 = collection; _i < collection_1.length; _i++) {\n var cols = collection_1[_i];\n tmWidth += !isNullOrUndefined(cols.minWidth) ?\n ((typeof cols.minWidth === 'string' ? parseInt(cols.minWidth, 10) : cols.minWidth)) : 0;\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 var index = this.parent.getColumnIndexByField(collection[parseInt(i.toString(), 10)].field) + this.parent.getIndentCount();\n if (tWidth !== 0 && difference < tmWidth) {\n this.setWidth(collection[parseInt(i.toString(), 10)].minWidth, index);\n }\n else if (tWidth !== 0 && difference > tmWidth) {\n this.setWidth('', index, true);\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[parseInt(k.toString(), 10)].width = 200;\n this.setWidth(200, this.parent.getColumnIndexByField(collection[parseInt(k.toString(), 10)].field));\n }\n }\n };\n ColumnWidthService.prototype.setColumnWidth = function (column, index, module) {\n if (this.parent.getColumns().length < 1) {\n return;\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 if (cWidth !== null) {\n this.setWidth(cWidth, columnIndex);\n if (this.parent.width !== 'auto' && this.parent.width.toString().indexOf('%') === -1) {\n this.setMinwidthBycalculation(tgridWidth);\n }\n if ((this.parent.allowResizing && module === 'resize')) {\n this.setWidthToTable();\n }\n this.parent.notify(columnWidthChanged, { index: columnIndex, width: cWidth, column: column, module: module });\n }\n };\n ColumnWidthService.prototype.setWidth = function (width, index, clear) {\n if (this.parent.groupSettings.columns.length > index && ispercentageWidth(this.parent)) {\n var elementWidth = this.parent.element.offsetWidth;\n width = (30 / elementWidth * 100).toFixed(1) + '%';\n }\n var header = this.parent.getHeaderTable();\n var content = this.parent.getContentTable();\n var fWidth = formatUnit(width);\n var headerCol = header.querySelector(literals.colGroup).children[parseInt(index.toString(), 10)];\n if (headerCol && !clear) {\n headerCol.style.width = fWidth;\n }\n else if (headerCol && clear) {\n headerCol.style.width = '';\n }\n var contentCol = content.querySelector(literals.colGroup).children[parseInt(index.toString(), 10)];\n if (contentCol && !clear) {\n contentCol.style.width = fWidth;\n }\n else if (contentCol && clear) {\n contentCol.style.width = '';\n }\n if (!this.parent.enableColumnVirtualization && this.parent.isEdit) {\n var edit = this.parent.element.querySelectorAll('.e-table.e-inline-edit');\n var editTableCol = [];\n for (var i = 0; i < edit.length; i++) {\n if (parentsUntil(edit[parseInt(i.toString(), 10)], 'e-grid').id === this.parent.element.id) {\n for (var j = 0; j < edit[parseInt(i.toString(), 10)].querySelector('colgroup').children.length; j++) {\n editTableCol.push(edit[parseInt(i.toString(), 10)].querySelector('colgroup').children[parseInt(j.toString(), 10)]);\n }\n }\n }\n if (edit.length && editTableCol.length) {\n editTableCol[parseInt(index.toString(), 10)].style.width = fWidth;\n }\n }\n if (this.parent.isFrozenGrid() && this.parent.enableColumnVirtualization) {\n this.refreshFrozenScrollbar();\n }\n };\n /**\n * @returns {void}\n * @hidden\n */\n ColumnWidthService.prototype.refreshFrozenScrollbar = function () {\n var args = { cancel: false };\n this.parent.notify(preventFrozenScrollRefresh, args);\n if (args.cancel) {\n return;\n }\n var scrollWidth = getScrollBarWidth();\n var movableScrollbar = this.parent.element.querySelector('.e-movablescrollbar');\n var movableWidth = this.parent.getContent().firstElementChild.getBoundingClientRect().width;\n if (this.parent.enableColumnVirtualization) {\n var placeHolder = this.parent.getContent().querySelector('.e-virtualtrack');\n if (placeHolder) {\n movableWidth = placeHolder.scrollWidth;\n }\n }\n if (this.parent.height !== 'auto') {\n movableWidth = movableWidth + scrollWidth;\n }\n movableScrollbar.firstElementChild.style.width = movableWidth + 'px';\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 ColumnWidthService.prototype.getHeightFromDirection = function (element, direction) {\n var sibling = element[direction + 'ElementSibling'];\n var result = 0;\n var classList = [literals.gridHeader, literals.gridFooter, 'e-groupdroparea', 'e-gridpager', 'e-toolbar', 'e-temp-toolbar'];\n while (sibling) {\n if (classList.some(function (value) { return sibling.classList.contains(value); })) {\n result += sibling.offsetHeight;\n }\n sibling = sibling[direction + 'ElementSibling'];\n }\n return result;\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 ColumnWidthService.prototype.getWidth = function (column) {\n if (isNullOrUndefined(column.width) && this.parent.allowResizing\n && isNullOrUndefined(column.minWidth) && !this.isWidthUndefined()) {\n column.width = 200;\n }\n if (!column.width) {\n return null;\n }\n var width = parseInt(column.width.toString(), 10);\n if (column.minWidth && width < parseInt(column.minWidth.toString(), 10)) {\n return column.minWidth;\n }\n else if ((column.maxWidth && width > parseInt(column.maxWidth.toString(), 10))) {\n return column.maxWidth;\n }\n else {\n return column.width;\n }\n };\n ColumnWidthService.prototype.getTableWidth = function (columns) {\n var tWidth = 0;\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 if (column.width === 'auto') {\n cWidth = 0;\n }\n if (column.visible !== false && cWidth !== null) {\n tWidth += parseInt(cWidth.toString(), 10);\n }\n }\n return tWidth;\n };\n ColumnWidthService.prototype.setWidthToTable = function () {\n var tWidth = formatUnit(this.getTableWidth(this.parent.getColumns()));\n if (this.parent.detailTemplate || this.parent.childGrid) {\n this.setColumnWidth(new Column({ width: '30px' }));\n }\n tWidth = this.isAutoResize() ? '100%' : tWidth;\n this.parent.getHeaderTable().style.width = tWidth;\n this.parent.getContentTable().style.width = tWidth;\n var edit = this.parent.element.querySelector('.e-table.e-inline-edit');\n if (edit) {\n edit.style.width = tWidth;\n }\n };\n ColumnWidthService.prototype.isAutoResize = function () {\n return this.parent.allowResizing && this.parent.resizeSettings.mode === 'Auto';\n };\n return ColumnWidthService;\n}());\nexport { ColumnWidthService };\n","import { select, detach } from '@syncfusion/ej2-base';\nimport { VScroll } from './v-scroll';\nimport { HScroll } from './h-scroll';\n/**\n * Used to add scroll in menu.\n *\n * @param {createElementType} createElement - Specifies the create element model\n * @param {HTMLElement} container - Specifies the element container\n * @param {HTMLElement} content - Specifies the content element\n * @param {string} scrollType - Specifies the scroll type\n * @param {boolean} enableRtl - Specifies the enable RTL property\n * @param {boolean} offset - Specifies the offset value\n * @returns {HTMLElement} - Element\n * @hidden\n */\nexport function addScrolling(createElement, container, content, scrollType, enableRtl, offset) {\n var containerOffset;\n var contentOffset;\n var parentElem = container.parentElement;\n if (scrollType === 'vscroll') {\n containerOffset = offset || container.getBoundingClientRect().height;\n contentOffset = content.getBoundingClientRect().height;\n }\n else {\n containerOffset = container.getBoundingClientRect().width;\n contentOffset = content.getBoundingClientRect().width;\n }\n if (containerOffset < contentOffset) {\n return createScrollbar(createElement, container, content, scrollType, enableRtl, offset);\n }\n else if (parentElem) {\n var width = parentElem.getBoundingClientRect().width;\n if (width < containerOffset && scrollType === 'hscroll') {\n contentOffset = width;\n container.style.maxWidth = width + 'px';\n return createScrollbar(createElement, container, content, scrollType, enableRtl, offset);\n }\n return content;\n }\n else {\n return content;\n }\n}\n/**\n * Used to create scroll bar in menu.\n *\n * @param {createElementType} createElement - Specifies the create element model\n * @param {HTMLElement} container - Specifies the element container\n * @param {HTMLElement} content - Specifies the content element\n * @param {string} scrollType - Specifies the scroll type\n * @param {boolean} enableRtl - Specifies the enable RTL property\n * @param {boolean} offset - Specifies the offset value\n * @returns {HTMLElement} - Element\n * @hidden\n */\nfunction createScrollbar(createElement, container, content, scrollType, enableRtl, offset) {\n var scrollEle = createElement('div', { className: 'e-menu-' + scrollType });\n container.appendChild(scrollEle);\n scrollEle.appendChild(content);\n if (offset) {\n scrollEle.style.overflow = 'hidden';\n scrollEle.style.height = offset + 'px';\n }\n else {\n scrollEle.style.maxHeight = container.style.maxHeight;\n container.style.overflow = 'hidden';\n }\n var scrollObj;\n if (scrollType === 'vscroll') {\n scrollObj = new VScroll({ enableRtl: enableRtl }, scrollEle);\n scrollObj.scrollStep = select('.e-' + scrollType + '-bar', container).offsetHeight / 2;\n }\n else {\n scrollObj = new HScroll({ enableRtl: enableRtl }, scrollEle);\n scrollObj.scrollStep = select('.e-' + scrollType + '-bar', container).offsetWidth;\n }\n return scrollEle;\n}\n/**\n * Used to destroy the scroll option.\n *\n * @param {VScroll | HScroll} scrollObj - Specifies the scroller object\n * @param {Element} element - Specifies the element\n * @param {HTMLElement} skipEle - Specifies the skip element\n * @returns {void}\n * @hidden\n */\nexport function destroyScroll(scrollObj, element, skipEle) {\n if (scrollObj) {\n var menu = select('.e-menu-parent', element);\n if (menu) {\n if (!skipEle || skipEle === menu) {\n scrollObj.destroy();\n element.parentElement.appendChild(menu);\n detach(element);\n }\n }\n else {\n scrollObj.destroy();\n detach(element);\n }\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, ChildProperty, NotifyPropertyChanges, isBlazor } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, KeyboardEvents, Touch } from '@syncfusion/ej2-base';\nimport { Animation } from '@syncfusion/ej2-base';\nimport { Browser, Collection, setValue, getValue, getUniqueID, getInstance, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { select, selectAll, closest, detach, append, rippleEffect, isVisible, Complex, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { getZindexPartial, calculatePosition, isCollide, fit, Popup } from '@syncfusion/ej2-popups';\nimport { SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { getScrollableParent } from '@syncfusion/ej2-popups';\nimport { HScroll } from '../common/h-scroll';\nimport { VScroll } from '../common/v-scroll';\nimport { addScrolling, destroyScroll } from '../common/menu-scroll';\nvar ENTER = 'enter';\nvar ESCAPE = 'escape';\nvar FOCUSED = 'e-focused';\nvar HEADER = 'e-menu-header';\nvar SELECTED = 'e-selected';\nvar SEPARATOR = 'e-separator';\nvar UPARROW = 'uparrow';\nvar DOWNARROW = 'downarrow';\nvar LEFTARROW = 'leftarrow';\nvar RIGHTARROW = 'rightarrow';\nvar HOME = 'home';\nvar END = 'end';\nvar TAB = 'tab';\nvar CARET = 'e-caret';\nvar ITEM = 'e-menu-item';\nvar DISABLED = 'e-disabled';\nvar HIDE = 'e-menu-hide';\nvar ICONS = 'e-icons';\nvar RTL = 'e-rtl';\nvar POPUP = 'e-menu-popup';\nvar TEMPLATE_PROPERTY = 'Template';\n/**\n * Configures the field options of the Menu.\n */\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('id')\n ], FieldSettings.prototype, \"itemId\", void 0);\n __decorate([\n Property('parentId')\n ], FieldSettings.prototype, \"parentId\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('url')\n ], FieldSettings.prototype, \"url\", void 0);\n __decorate([\n Property('separator')\n ], FieldSettings.prototype, \"separator\", void 0);\n __decorate([\n Property('items')\n ], FieldSettings.prototype, \"children\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Specifies menu items.\n */\nvar MenuItem = /** @class */ (function (_super) {\n __extends(MenuItem, _super);\n function MenuItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], MenuItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"id\", void 0);\n __decorate([\n Property(false)\n ], MenuItem.prototype, \"separator\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], MenuItem.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"url\", void 0);\n return MenuItem;\n}(ChildProperty));\nexport { MenuItem };\n/**\n * Animation configuration settings.\n */\nvar MenuAnimationSettings = /** @class */ (function (_super) {\n __extends(MenuAnimationSettings, _super);\n function MenuAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SlideDown')\n ], MenuAnimationSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], MenuAnimationSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], MenuAnimationSettings.prototype, \"easing\", void 0);\n return MenuAnimationSettings;\n}(ChildProperty));\nexport { MenuAnimationSettings };\n/**\n * Base class for Menu and ContextMenu components.\n *\n * @private\n */\nvar MenuBase = /** @class */ (function (_super) {\n __extends(MenuBase, _super);\n /**\n * Constructor for creating the widget.\n *\n * @private\n * @param {MenuBaseModel} options - Specifies the menu base model\n * @param {string | HTMLUListElement} element - Specifies the element\n */\n function MenuBase(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.navIdx = [];\n _this.animation = new Animation({});\n _this.isTapHold = false;\n _this.tempItem = [];\n _this.showSubMenuOn = 'Auto';\n return _this;\n }\n /**\n * Initialized third party configuration settings.\n *\n * @private\n * @returns {void}\n */\n MenuBase.prototype.preRender = function () {\n if (!this.isMenu) {\n var ul = void 0;\n if (this.element.tagName === 'EJS-CONTEXTMENU') {\n ul = this.createElement('ul', {\n id: getUniqueID(this.getModuleName()), className: 'e-control e-lib e-' + this.getModuleName()\n });\n var ejInst = getValue('ej2_instances', this.element);\n removeClass([this.element], ['e-control', 'e-lib', 'e-' + this.getModuleName()]);\n this.clonedElement = this.element;\n this.element = ul;\n setValue('ej2_instances', ejInst, this.element);\n }\n else {\n ul = this.createElement('ul', { id: getUniqueID(this.getModuleName()) });\n append([].slice.call(this.element.cloneNode(true).children), ul);\n var refEle = this.element.nextElementSibling;\n if (refEle) {\n this.element.parentElement.insertBefore(ul, refEle);\n }\n else {\n this.element.parentElement.appendChild(ul);\n }\n this.clonedElement = ul;\n }\n this.clonedElement.style.display = 'none';\n }\n if (this.element.tagName === 'EJS-MENU') {\n var ele = this.element;\n var ejInstance = getValue('ej2_instances', ele);\n var ul = this.createElement('ul');\n var wrapper = this.createElement('EJS-MENU', { className: 'e-' + this.getModuleName() + '-wrapper' });\n for (var idx = 0, len = ele.attributes.length; idx < len; idx++) {\n ul.setAttribute(ele.attributes[idx].nodeName, ele.attributes[idx].nodeValue);\n }\n ele.parentNode.insertBefore(wrapper, ele);\n detach(ele);\n ele = ul;\n wrapper.appendChild(ele);\n setValue('ej2_instances', ejInstance, ele);\n this.clonedElement = wrapper;\n this.element = ele;\n if (!this.element.id) {\n this.element.id = getUniqueID(this.getModuleName());\n }\n }\n };\n /**\n * Initialize the control rendering.\n *\n * @private\n * @returns {void}\n */\n MenuBase.prototype.render = function () {\n var _this = this;\n this.initialize();\n this.renderItems();\n this.wireEvents();\n this.renderComplete();\n var wrapper = this.getWrapper();\n // eslint-disable-next-line\n if (this.template && this.enableScrolling && (this.isReact || this.isAngular)) {\n requestAnimationFrame(function () {\n addScrolling(_this.createElement, wrapper, _this.element, 'hscroll', _this.enableRtl);\n });\n }\n };\n MenuBase.prototype.initialize = function () {\n var wrapper = this.getWrapper();\n if (!wrapper) {\n wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n if (this.isMenu) {\n this.element.parentElement.insertBefore(wrapper, this.element);\n }\n else {\n document.body.appendChild(wrapper);\n }\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n wrapper.appendChild(this.element);\n if (this.isMenu && this.hamburgerMode) {\n if (!this.target) {\n this.createHeaderContainer(wrapper);\n }\n }\n this.defaultOption = this.showItemOnClick;\n };\n MenuBase.prototype.renderItems = function () {\n if (!this.items.length) {\n var items = ListBase.createJsonFromElement(this.element, { fields: { child: 'items' } });\n this.setProperties({ items: items }, true);\n if (isBlazor() && !this.isMenu) {\n this.element = this.removeChildElement(this.element);\n }\n else {\n this.element.innerHTML = '';\n }\n }\n var ul = this.createItems(this.items);\n append(Array.prototype.slice.call(ul.children), this.element);\n this.element.classList.add('e-menu-parent');\n if (this.isMenu) {\n if (!this.hamburgerMode && this.element.classList.contains('e-vertical')) {\n this.setBlankIconStyle(this.element);\n }\n if (this.enableScrolling) {\n var wrapper = this.getWrapper();\n if (this.element.classList.contains('e-vertical')) {\n addScrolling(this.createElement, wrapper, this.element, 'vscroll', this.enableRtl);\n }\n else {\n addScrolling(this.createElement, wrapper, this.element, 'hscroll', this.enableRtl);\n }\n }\n }\n else {\n this.element.parentElement.setAttribute('role', 'dialog');\n this.element.parentElement.setAttribute('aria-label', 'context menu');\n }\n };\n MenuBase.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n if (this.target) {\n var target = void 0;\n var targetElems = selectAll(this.target);\n for (var i = 0, len = targetElems.length; i < len; i++) {\n target = targetElems[i];\n if (this.isMenu) {\n EventHandler.add(target, 'click', this.menuHeaderClickHandler, this);\n }\n else {\n if (Browser.isIos) {\n new Touch(target, { tapHold: this.touchHandler.bind(this) });\n }\n else {\n EventHandler.add(target, 'contextmenu', this.cmenuHandler, this);\n }\n }\n }\n this.targetElement = target;\n if (!this.isMenu) {\n EventHandler.add(this.targetElement, 'mousewheel DOMMouseScroll', this.scrollHandler, this);\n for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {\n var parent_1 = _a[_i];\n EventHandler.add(parent_1, 'mousewheel DOMMouseScroll', this.scrollHandler, this);\n }\n }\n }\n if (!Browser.isDevice) {\n this.delegateMoverHandler = this.moverHandler.bind(this);\n this.delegateMouseDownHandler = this.mouseDownHandler.bind(this);\n EventHandler.add(this.isMenu ? document : wrapper, 'mouseover', this.delegateMoverHandler, this);\n EventHandler.add(document, 'mousedown', this.delegateMouseDownHandler, this);\n }\n this.delegateClickHandler = this.clickHandler.bind(this);\n EventHandler.add(document, 'click', this.delegateClickHandler, this);\n this.wireKeyboardEvent(wrapper);\n this.rippleFn = rippleEffect(wrapper, { selector: '.' + ITEM });\n };\n MenuBase.prototype.wireKeyboardEvent = function (element) {\n var keyConfigs = {\n downarrow: DOWNARROW,\n uparrow: UPARROW,\n enter: ENTER,\n leftarrow: LEFTARROW,\n rightarrow: RIGHTARROW,\n escape: ESCAPE\n };\n if (this.isMenu) {\n keyConfigs.home = HOME;\n keyConfigs.end = END;\n keyConfigs.tab = TAB;\n }\n new KeyboardEvents(element, {\n keyAction: this.keyBoardHandler.bind(this),\n keyConfigs: keyConfigs\n });\n };\n MenuBase.prototype.mouseDownHandler = function (e) {\n if (closest(e.target, '.e-' + this.getModuleName() + '-wrapper') !== this.getWrapper()\n && (!closest(e.target, '.e-' + this.getModuleName() + '-popup'))) {\n this.closeMenu(this.isMenu ? null : this.navIdx.length, e);\n }\n };\n MenuBase.prototype.keyHandler = function (e) {\n if (e.keyCode === 38 || e.keyCode === 40) {\n if (e.target && (e.target.classList.contains('e-contextmenu') || e.target.classList.contains('e-menu-item'))) {\n e.preventDefault();\n }\n }\n };\n MenuBase.prototype.keyBoardHandler = function (e) {\n var actionName = '';\n var trgt = e.target;\n var actionNeeded = this.isMenu && !this.hamburgerMode && !this.element.classList.contains('e-vertical')\n && this.navIdx.length < 1;\n e.preventDefault();\n if (this.enableScrolling && e.keyCode === 13 && trgt.classList.contains('e-scroll-nav')) {\n this.removeLIStateByClass([FOCUSED, SELECTED], [closest(trgt, '.e-' + this.getModuleName() + '-wrapper')]);\n }\n if (actionNeeded) {\n switch (e.action) {\n case RIGHTARROW:\n actionName = RIGHTARROW;\n e.action = DOWNARROW;\n break;\n case LEFTARROW:\n actionName = LEFTARROW;\n e.action = UPARROW;\n break;\n case DOWNARROW:\n actionName = DOWNARROW;\n e.action = RIGHTARROW;\n break;\n case UPARROW:\n actionName = UPARROW;\n e.action = '';\n break;\n }\n }\n else if (this.enableRtl) {\n switch (e.action) {\n case LEFTARROW:\n actionNeeded = true;\n actionName = LEFTARROW;\n e.action = RIGHTARROW;\n break;\n case RIGHTARROW:\n actionNeeded = true;\n actionName = RIGHTARROW;\n e.action = LEFTARROW;\n break;\n }\n }\n switch (e.action) {\n case DOWNARROW:\n case UPARROW:\n case END:\n case HOME:\n case TAB:\n this.upDownKeyHandler(e);\n break;\n case RIGHTARROW:\n this.rightEnterKeyHandler(e);\n break;\n case LEFTARROW:\n this.leftEscKeyHandler(e);\n break;\n case ENTER:\n if (this.hamburgerMode && trgt.tagName === 'SPAN' && trgt.classList.contains('e-menu-icon')) {\n this.menuHeaderClickHandler(e);\n }\n else {\n this.rightEnterKeyHandler(e);\n }\n break;\n case ESCAPE:\n this.leftEscKeyHandler(e);\n break;\n }\n if (actionNeeded) {\n e.action = actionName;\n }\n };\n MenuBase.prototype.upDownKeyHandler = function (e) {\n var cul = this.getUlByNavIdx();\n var defaultIdx = (e.action === DOWNARROW || e.action === HOME || e.action === TAB) ? 0 : cul.childElementCount - 1;\n var fliIdx = defaultIdx;\n var fli = this.getLIByClass(cul, FOCUSED);\n if (fli) {\n if (e.action !== END && e.action !== HOME) {\n fliIdx = this.getIdx(cul, fli);\n }\n fli.classList.remove(FOCUSED);\n if (e.action !== END && e.action !== HOME) {\n if (e.action === DOWNARROW) {\n fliIdx++;\n }\n else {\n fliIdx--;\n }\n if (fliIdx === (e.action === DOWNARROW ? cul.childElementCount : -1)) {\n fliIdx = defaultIdx;\n }\n }\n }\n var cli = cul.children[fliIdx];\n fliIdx = this.isValidLI(cli, fliIdx, e.action);\n cul.children[fliIdx].classList.add(FOCUSED);\n cul.children[fliIdx].focus();\n };\n MenuBase.prototype.isValidLI = function (cli, index, action) {\n var cul = this.getUlByNavIdx();\n var defaultIdx = (action === DOWNARROW || action === HOME || action === TAB) ? 0 : cul.childElementCount - 1;\n if (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE)) {\n if (action === DOWNARROW && index === cul.childElementCount - 1) {\n index = defaultIdx;\n }\n else if (action === UPARROW && index === 0) {\n index = defaultIdx;\n }\n else if ((action === DOWNARROW) || (action === RIGHTARROW)) {\n index++;\n }\n else {\n index--;\n }\n }\n cli = cul.children[index];\n if (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE)) {\n index = this.isValidLI(cli, index, action);\n }\n return index;\n };\n MenuBase.prototype.getUlByNavIdx = function (navIdxLen) {\n var _this = this;\n if (navIdxLen === void 0) { navIdxLen = this.navIdx.length; }\n if (this.isMenu) {\n var popup = [this.getWrapper()].concat([].slice.call(selectAll('.' + POPUP)))[navIdxLen];\n var popups_1 = [];\n var allPopup = selectAll('.' + POPUP);\n allPopup.forEach(function (elem) {\n if (_this.element.id === elem.id.split('-')[2] || elem.id.split('-')[2] + '-' + elem.id.split('-')[3]) {\n popups_1.push(elem);\n }\n });\n popup = [this.getWrapper()].concat([].slice.call(popups_1))[navIdxLen];\n return isNullOrUndefined(popup) ? null : select('.e-menu-parent', popup);\n }\n else {\n return this.getWrapper().children[navIdxLen];\n }\n };\n MenuBase.prototype.rightEnterKeyHandler = function (e) {\n var eventArgs;\n var cul = this.getUlByNavIdx();\n var fli = this.getLIByClass(cul, FOCUSED);\n if (fli) {\n var fliIdx = this.getIdx(cul, fli);\n var navIdx = this.navIdx.concat(fliIdx);\n var item = this.getItem(navIdx);\n if (item.items.length) {\n this.navIdx.push(fliIdx);\n this.keyType = 'right';\n this.action = e.action;\n this.openMenu(fli, item, -1, -1, e);\n }\n else {\n if (e.action === ENTER) {\n if (this.isMenu && this.navIdx.length === 0) {\n this.removeLIStateByClass([SELECTED], [this.getWrapper()]);\n }\n else {\n fli.classList.remove(FOCUSED);\n }\n fli.classList.add(SELECTED);\n eventArgs = { element: fli, item: item, event: e };\n this.trigger('select', eventArgs);\n var aEle = fli.querySelector('.e-menu-url');\n if (item.url && aEle) {\n switch (aEle.getAttribute('target')) {\n case '_blank':\n window.open(item.url, '_blank');\n break;\n case '_parent':\n window.parent.location.href = item.url;\n break;\n default:\n window.location.href = item.url;\n }\n }\n this.closeMenu(null, e);\n var sli = this.getLIByClass(this.getUlByNavIdx(), SELECTED);\n if (sli) {\n sli.classList.add(FOCUSED);\n sli.focus();\n }\n }\n }\n }\n };\n MenuBase.prototype.leftEscKeyHandler = function (e) {\n if (this.navIdx.length) {\n this.keyType = 'left';\n this.closeMenu(this.navIdx.length, e);\n }\n else {\n if (e.action === ESCAPE) {\n this.closeMenu(null, e);\n }\n }\n };\n MenuBase.prototype.scrollHandler = function (e) {\n this.closeMenu(null, e);\n };\n MenuBase.prototype.touchHandler = function (e) {\n this.isTapHold = true;\n this.cmenuHandler(e.originalEvent);\n };\n MenuBase.prototype.cmenuHandler = function (e) {\n e.preventDefault();\n this.currentTarget = e.target;\n this.isCMenu = true;\n this.pageX = e.changedTouches ? e.changedTouches[0].pageX + 1 : e.pageX + 1;\n this.pageY = e.changedTouches ? e.changedTouches[0].pageY + 1 : e.pageY + 1;\n this.closeMenu(null, e);\n if (this.isCMenu) {\n if (this.canOpen(e.target)) {\n this.openMenu(null, null, this.pageY, this.pageX, e);\n }\n this.isCMenu = false;\n }\n };\n // eslint:disable-next-line:max-func-body-length\n MenuBase.prototype.closeMenu = function (ulIndex, e, isIterated) {\n var _this = this;\n if (ulIndex === void 0) { ulIndex = 0; }\n if (e === void 0) { e = null; }\n if (this.isMenuVisible()) {\n var sli = void 0;\n var item_1;\n var wrapper_1 = this.getWrapper();\n var beforeCloseArgs = void 0;\n var items_1;\n var popups = this.getPopups();\n var isClose = false;\n var cnt = this.isMenu ? popups.length + 1 : wrapper_1.childElementCount;\n var ul_1 = this.isMenu && cnt !== 1 ? select('.e-ul', popups[cnt - 2])\n : selectAll('.e-menu-parent', wrapper_1)[cnt - 1];\n if (this.isMenu && ul_1.classList.contains('e-menu')) {\n sli = this.getLIByClass(ul_1, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n isClose = true;\n }\n if (!isClose) {\n var liElem_1 = e && e.target && this.getLI(e.target);\n if (liElem_1) {\n this.cli = liElem_1;\n }\n else {\n this.cli = ul_1.children[0];\n }\n item_1 = this.navIdx.length ? this.getItem(this.navIdx) : null;\n items_1 = item_1 ? item_1.items : this.items;\n beforeCloseArgs = { element: ul_1, parentItem: item_1, items: items_1, event: e, cancel: false, isFocused: true };\n this.trigger('beforeClose', beforeCloseArgs, function (observedCloseArgs) {\n var popupEle;\n var closeArgs;\n var popupId = '';\n var popupObj;\n var isOpen = !observedCloseArgs.cancel;\n if (isOpen || _this.isCMenu) {\n if (_this.isMenu) {\n popupEle = closest(ul_1, '.' + POPUP);\n if (_this.hamburgerMode) {\n popupEle.parentElement.style.minHeight = '';\n closest(ul_1, '.e-menu-item').setAttribute('aria-expanded', 'false');\n }\n _this.unWireKeyboardEvent(popupEle);\n destroyScroll(getInstance(popupEle.children[0], VScroll), popupEle.children[0]);\n popupObj = getInstance(popupEle, Popup);\n popupObj.hide();\n popupId = popupEle.id;\n popupObj.destroy();\n detach(popupEle);\n }\n else {\n _this.toggleAnimation(ul_1, false);\n }\n closeArgs = { element: ul_1, parentItem: item_1, items: items_1 };\n _this.trigger('onClose', closeArgs);\n _this.navIdx.pop();\n if (_this.navIdx.length === 0 && e && e.type === 'keyup') {\n _this.showSubMenu = false;\n }\n if (!_this.isMenu) {\n EventHandler.remove(ul_1, 'keydown', _this.keyHandler);\n if (_this.keyType === 'right') {\n _this.keyType = '';\n }\n }\n }\n _this.updateReactTemplate();\n var trgtliId;\n var closedLi;\n var trgtLi;\n var trgtpopUp = _this.getWrapper() && _this.getUlByNavIdx();\n if (_this.isCMenu) {\n if (_this.canOpen(e.target)) {\n _this.openMenu(null, null, _this.pageY, _this.pageX, e);\n }\n _this.isCMenu = false;\n }\n if (_this.isMenu && trgtpopUp && popupId.length) {\n // eslint-disable-next-line\n trgtliId = new RegExp('(.*)-ej2menu-' + _this.element.id + '-popup').exec(popupId)[1];\n closedLi = trgtpopUp.querySelector('[id=\"' + trgtliId + '\"]');\n trgtLi = (liElem_1 && trgtpopUp.querySelector('[id=\"' + liElem_1.id + '\"]'));\n }\n else if (trgtpopUp) {\n closedLi = trgtpopUp.querySelector('.e-menu-item.e-selected');\n trgtLi = (liElem_1 && trgtpopUp.querySelector('[id=\"' + liElem_1.id + '\"]'));\n }\n var submenus = liElem_1 && liElem_1.querySelectorAll('.e-menu-item');\n if (isOpen && _this.hamburgerMode && ulIndex && !(submenus.length)) {\n _this.afterCloseMenu(e);\n }\n else if (isOpen && !_this.hamburgerMode && closedLi && !trgtLi && _this.keyType !== 'left' && (_this.navIdx.length || !_this.isMenu && _this.navIdx.length === 0)) {\n var ele = (e && (e.target.classList.contains('e-vscroll') || e.target.classList.contains('e-scroll-nav')))\n ? closest(e.target, '.e-menu-wrapper') : null;\n if (ele) {\n ele = ele.querySelector('.e-menu-item');\n if (_this.showItemOnClick || (ele && _this.getIndex(ele.id, true).length <= _this.navIdx.length)) {\n _this.closeMenu(_this.navIdx[_this.navIdx.length - 1], e, true);\n }\n }\n else {\n if (!(e && e.target.classList.contains('e-nav-arrow'))) {\n _this.closeMenu(_this.navIdx[_this.navIdx.length - 1], e);\n }\n }\n }\n else if (isOpen && !isIterated && !ulIndex && ((_this.hamburgerMode && _this.navIdx.length) ||\n _this.navIdx.length === 1 && liElem_1 && trgtpopUp !== liElem_1.parentElement)) {\n _this.closeMenu(null, e);\n }\n else if (isOpen && isNullOrUndefined(ulIndex) && _this.navIdx.length) {\n _this.closeMenu(null, e);\n }\n else if (isOpen && !_this.isMenu && !ulIndex && _this.navIdx.length === 0 && !_this.isMenusClosed) {\n _this.isMenusClosed = true;\n _this.closeMenu(0, e);\n }\n else if (isOpen && _this.isMenu && e && e.target &&\n _this.navIdx.length !== 0 && closest(e.target, '.e-menu-parent.e-control')) {\n _this.closeMenu(0, e);\n }\n else if (isOpen && !_this.isMenu && selectAll('.e-menu-parent', wrapper_1)[ulIndex - 1] && e.which === 3) {\n _this.closeMenu(null, e);\n }\n else {\n if (isOpen && (_this.keyType === 'right' || _this.keyType === 'click')) {\n _this.afterCloseMenu(e);\n }\n else {\n var cul = _this.getUlByNavIdx();\n var sli_1 = _this.getLIByClass(cul, SELECTED);\n if (sli_1) {\n sli_1.setAttribute('aria-expanded', 'false');\n sli_1.classList.remove(SELECTED);\n if (observedCloseArgs.isFocused && liElem_1 || _this.keyType === 'left') {\n sli_1.classList.add(FOCUSED);\n if (!e.target || !e.target.classList.contains('e-edit-template')) {\n sli_1.focus();\n }\n }\n }\n if (!isOpen && _this.hamburgerMode && liElem_1 && liElem_1.getAttribute('aria-expanded') === 'false' &&\n liElem_1.getAttribute('aria-haspopup') === 'true') {\n if (closest(liElem_1, '.e-menu-parent.e-control')) {\n _this.navIdx = [];\n }\n else {\n _this.navIdx.pop();\n }\n _this.navIdx.push(_this.cliIdx);\n var item_2 = _this.getItem(_this.navIdx);\n liElem_1.setAttribute('aria-expanded', 'true');\n _this.openMenu(liElem_1, item_2, -1, -1, e);\n }\n }\n if (_this.navIdx.length < 1) {\n if (_this.showSubMenuOn === 'Hover' || _this.showSubMenuOn === 'Click') {\n _this.showItemOnClick = _this.defaultOption;\n _this.showSubMenuOn = 'Auto';\n }\n }\n }\n _this.removeStateWrapper();\n });\n }\n }\n };\n MenuBase.prototype.updateReactTemplate = function () {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact && this.template && this.navIdx.length === 0) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var portals = this.portals.splice(0, this.items.length);\n this.clearTemplate(['template']);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.portals = portals;\n this.renderReactTemplates();\n }\n };\n MenuBase.prototype.getMenuItemModel = function (item, level) {\n if (isNullOrUndefined(item)) {\n return null;\n }\n if (isNullOrUndefined(level)) {\n level = 0;\n }\n var fields = this.getFields(level);\n return { text: item[fields.text], id: item[fields.id], items: item[fields.child], separator: item[fields.separator],\n iconCss: item[fields.iconCss], url: item[fields.url] };\n };\n MenuBase.prototype.getPopups = function () {\n var _this = this;\n var popups = [];\n [].slice.call(document.querySelectorAll('.' + POPUP)).forEach(function (elem) {\n if (!isNullOrUndefined(elem.querySelector('.' + ITEM)) && _this.getIndex(elem.querySelector('.' + ITEM).id, true).length) {\n popups.push(elem);\n }\n });\n return popups;\n };\n MenuBase.prototype.isMenuVisible = function () {\n return (this.navIdx.length > 0 || (this.element.classList.contains('e-contextmenu') && isVisible(this.element).valueOf()));\n };\n MenuBase.prototype.canOpen = function (target) {\n var canOpen = true;\n if (this.filter) {\n canOpen = false;\n var filter = this.filter.split(' ');\n for (var i = 0, len = filter.length; i < len; i++) {\n if (closest(target, '.' + filter[i])) {\n canOpen = true;\n break;\n }\n }\n }\n return canOpen;\n };\n MenuBase.prototype.openMenu = function (li, item, top, left, e, target) {\n var _this = this;\n if (top === void 0) { top = 0; }\n if (left === void 0) { left = 0; }\n if (e === void 0) { e = null; }\n if (target === void 0) { target = this.targetElement; }\n var wrapper = this.getWrapper();\n this.lItem = li;\n var elemId = this.element.id !== '' ? this.element.id : 'menu';\n this.isMenusClosed = false;\n if (isNullOrUndefined(top)) {\n top = -1;\n }\n if (isNullOrUndefined(left)) {\n left = -1;\n }\n if (li) {\n this.uList = this.createItems(item[this.getField('children', this.navIdx.length - 1)]);\n if (!this.isMenu && Browser.isDevice) {\n wrapper.lastChild.style.display = 'none';\n var data = {\n text: item[this.getField('text')].toString(), iconCss: ICONS + ' e-previous'\n };\n var hdata = new MenuItem(this.items[0], 'items', data, true);\n var hli = this.createItems([hdata]).children[0];\n hli.classList.add(HEADER);\n this.uList.insertBefore(hli, this.uList.children[0]);\n }\n if (this.isMenu) {\n this.popupWrapper = this.createElement('div', {\n className: 'e-' + this.getModuleName() + '-wrapper ' + POPUP, id: li.id + '-ej2menu-' + elemId + '-popup'\n });\n if (this.hamburgerMode) {\n top = li.offsetHeight;\n li.appendChild(this.popupWrapper);\n }\n else {\n document.body.appendChild(this.popupWrapper);\n }\n this.isNestedOrVertical = this.element.classList.contains('e-vertical') || this.navIdx.length !== 1;\n this.popupObj = this.generatePopup(this.popupWrapper, this.uList, li, this.isNestedOrVertical);\n if (this.template) {\n this.renderReactTemplates();\n }\n if (this.hamburgerMode) {\n this.calculateIndentSize(this.uList, li);\n }\n else {\n if (this.cssClass) {\n addClass([this.popupWrapper], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n this.popupObj.hide();\n }\n if (!this.hamburgerMode && !this.showItemOnClick && this.hoverDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setTimeout(function () { _this.triggerBeforeOpen(li, _this.uList, item, e, 0, 0, 'menu'); }, this.hoverDelay);\n }\n else {\n this.triggerBeforeOpen(li, this.uList, item, e, 0, 0, 'menu');\n }\n }\n else {\n this.uList.style.zIndex = this.element.style.zIndex;\n wrapper.appendChild(this.uList);\n if (!this.showItemOnClick && this.hoverDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setTimeout(function () { _this.triggerBeforeOpen(li, _this.uList, item, e, top, left, 'none'); }, this.hoverDelay);\n }\n else {\n this.triggerBeforeOpen(li, this.uList, item, e, top, left, 'none');\n }\n }\n }\n else {\n this.uList = this.element;\n this.uList.style.zIndex = getZindexPartial(target ? target : this.element).toString();\n if (isNullOrUndefined(e)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ev = document.createEvent('MouseEvents');\n ev.initEvent('click', true, false);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var targetEvent = this.copyObject(ev, {});\n targetEvent.target = targetEvent.srcElement = target;\n targetEvent.currentTarget = target;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.triggerBeforeOpen(li, this.uList, item, targetEvent, top, left, 'none');\n }\n else {\n this.triggerBeforeOpen(li, this.uList, item, e, top, left, 'none');\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n MenuBase.prototype.copyObject = function (source, destination) {\n for (var prop in source) {\n destination[\"\" + prop] = source[\"\" + prop];\n }\n return destination;\n };\n MenuBase.prototype.calculateIndentSize = function (ul, li) {\n var liStyle = getComputedStyle(li);\n var liIndent = parseInt(liStyle.textIndent, 10);\n if (this.navIdx.length < 2 && !li.classList.contains('e-blankicon')) {\n liIndent *= 2;\n }\n else {\n liIndent += (liIndent / 4);\n }\n ul.style.textIndent = liIndent + 'px';\n var blankIconElem = ul.querySelectorAll('.e-blankicon');\n if (blankIconElem && blankIconElem.length) {\n var menuIconElem = ul.querySelector('.e-menu-icon');\n var menuIconElemStyle = getComputedStyle(menuIconElem);\n var blankIconIndent = (parseInt(menuIconElemStyle.marginRight, 10) + menuIconElem.offsetWidth + liIndent);\n for (var i = 0; i < blankIconElem.length; i++) {\n blankIconElem[i].style.textIndent = blankIconIndent + 'px';\n }\n }\n };\n MenuBase.prototype.generatePopup = function (popupWrapper, ul, li, isNestedOrVertical) {\n var _this = this;\n var popupObj = new Popup(popupWrapper, {\n actionOnScroll: this.hamburgerMode ? 'none' : 'reposition',\n relateTo: li,\n collision: this.hamburgerMode ? { X: 'none', Y: 'none' } : { X: isNestedOrVertical ||\n this.enableRtl ? 'none' : 'flip', Y: 'fit' },\n position: (isNestedOrVertical && !this.hamburgerMode) ? { X: 'right', Y: 'top' } : { X: 'left', Y: 'bottom' },\n targetType: 'relative',\n enableRtl: this.enableRtl,\n content: ul,\n open: function () {\n var scrollEle = select('.e-menu-vscroll', popupObj.element);\n if (scrollEle) {\n scrollEle.style.height = 'inherit';\n scrollEle.style.maxHeight = '';\n }\n var ul = select('.e-ul', popupObj.element);\n popupObj.element.style.maxHeight = '';\n ul.focus();\n _this.triggerOpen(ul);\n }\n });\n return popupObj;\n };\n MenuBase.prototype.createHeaderContainer = function (wrapper) {\n wrapper = wrapper || this.getWrapper();\n var spanElem = this.createElement('span', { className: 'e-' + this.getModuleName() + '-header' });\n var tempTitle = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(this.title) : this.title;\n var spanTitle = this.createElement('span', {\n className: 'e-' + this.getModuleName() + '-title', innerHTML: tempTitle\n });\n var spanIcon = this.createElement('span', {\n className: 'e-icons e-' + this.getModuleName() + '-icon', attrs: { 'tabindex': '0' }\n });\n spanElem.appendChild(spanTitle);\n spanElem.appendChild(spanIcon);\n wrapper.insertBefore(spanElem, this.element);\n };\n MenuBase.prototype.openHamburgerMenu = function (e) {\n if (this.hamburgerMode) {\n this.triggerBeforeOpen(null, this.element, null, e, 0, 0, 'hamburger');\n }\n };\n MenuBase.prototype.closeHamburgerMenu = function (e) {\n var _this = this;\n var beforeCloseArgs = { element: this.element, parentItem: null, event: e,\n items: this.items, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs, function (observedHamburgerCloseArgs) {\n if (!observedHamburgerCloseArgs.cancel) {\n _this.closeMenu(null, e);\n _this.element.classList.add('e-hide-menu');\n _this.trigger('onClose', { element: _this.element, parentItem: null, items: _this.items });\n }\n });\n };\n MenuBase.prototype.callFit = function (element, x, y, top, left) {\n return fit(element, null, { X: x, Y: y }, { top: top, left: left });\n };\n MenuBase.prototype.triggerBeforeOpen = function (li, ul, item, e, top, left, type) {\n var _this = this;\n var items = li ? item[this.getField('children', this.navIdx.length - 1)] : this.items;\n var eventArgs = {\n element: ul, items: items, parentItem: item, event: e, cancel: false, top: top, left: left, showSubMenuOn: 'Auto'\n };\n var menuType = type;\n this.trigger('beforeOpen', eventArgs, function (observedOpenArgs) {\n switch (menuType) {\n case 'menu':\n if (!_this.hamburgerMode) {\n if (observedOpenArgs.showSubMenuOn !== 'Auto') {\n _this.showItemOnClick = !_this.defaultOption;\n _this.showSubMenuOn = observedOpenArgs.showSubMenuOn;\n }\n _this.top = observedOpenArgs.top;\n _this.left = observedOpenArgs.left;\n }\n _this.popupWrapper.style.display = 'block';\n if (!_this.hamburgerMode) {\n _this.popupWrapper.style.maxHeight = _this.popupWrapper.getBoundingClientRect().height + 'px';\n if (_this.enableScrolling) {\n addScrolling(_this.createElement, _this.popupWrapper, _this.uList, 'vscroll', _this.enableRtl);\n }\n _this.checkScrollOffset(e);\n }\n if (!_this.hamburgerMode && !_this.left && !_this.top) {\n _this.popupObj.refreshPosition(_this.lItem, true);\n _this.left = parseInt(_this.popupWrapper.style.left, 10);\n _this.top = parseInt(_this.popupWrapper.style.top, 10);\n if (_this.enableRtl) {\n _this.left =\n _this.isNestedOrVertical ? _this.left - _this.popupWrapper.offsetWidth - _this.lItem.parentElement.offsetWidth + 2\n : _this.left - _this.popupWrapper.offsetWidth + _this.lItem.offsetWidth;\n }\n // eslint-disable-next-line\n if (_this.template && (_this.isReact || _this.isAngular)) {\n requestAnimationFrame(function () {\n _this.collision();\n _this.popupWrapper.style.display = '';\n });\n }\n else {\n _this.collision();\n _this.popupWrapper.style.display = '';\n }\n }\n else {\n _this.popupObj.collision = { X: 'none', Y: 'none' };\n _this.popupWrapper.style.display = '';\n }\n break;\n case 'none':\n _this.top = observedOpenArgs.top;\n _this.left = observedOpenArgs.left;\n break;\n case 'hamburger':\n if (!observedOpenArgs.cancel) {\n _this.element.classList.remove('e-hide-menu');\n _this.triggerOpen(_this.element);\n }\n break;\n }\n if (menuType !== 'hamburger') {\n if (observedOpenArgs.cancel) {\n if (_this.isMenu) {\n _this.popupObj.destroy();\n detach(_this.popupWrapper);\n }\n else if (ul.className.indexOf('e-ul') > -1) {\n detach(ul);\n }\n _this.navIdx.pop();\n }\n else {\n if (_this.isMenu) {\n if (_this.hamburgerMode) {\n _this.popupWrapper.style.top = _this.top + 'px';\n _this.popupWrapper.style.left = 0 + 'px';\n _this.toggleAnimation(_this.popupWrapper);\n }\n else {\n _this.setBlankIconStyle(_this.popupWrapper);\n _this.wireKeyboardEvent(_this.popupWrapper);\n rippleEffect(_this.popupWrapper, { selector: '.' + ITEM });\n _this.popupWrapper.style.left = _this.left + 'px';\n _this.popupWrapper.style.top = _this.top + 'px';\n var animationOptions = _this.animationSettings.effect !== 'None' ? {\n name: _this.animationSettings.effect, duration: _this.animationSettings.duration,\n timingFunction: _this.animationSettings.easing\n } : null;\n _this.popupObj.show(animationOptions, _this.lItem);\n }\n }\n else {\n _this.setBlankIconStyle(_this.uList);\n _this.setPosition(_this.lItem, _this.uList, _this.top, _this.left);\n _this.toggleAnimation(_this.uList);\n }\n }\n }\n if (_this.keyType === 'right') {\n var cul = _this.getUlByNavIdx();\n li.classList.remove(FOCUSED);\n if (_this.isMenu && _this.navIdx.length === 1) {\n _this.removeLIStateByClass([SELECTED], [_this.getWrapper()]);\n }\n li.classList.add(SELECTED);\n if (_this.action === ENTER) {\n var eventArgs_1 = { element: li, item: item, event: e };\n _this.trigger('select', eventArgs_1);\n }\n li.focus();\n cul = _this.getUlByNavIdx();\n var index = _this.isValidLI(cul.children[0], 0, _this.action);\n cul.children[index].classList.add(FOCUSED);\n cul.children[index].focus();\n }\n });\n };\n MenuBase.prototype.collision = function () {\n var collide;\n collide = isCollide(this.popupWrapper, null, this.left, this.top);\n if ((this.isNestedOrVertical || this.enableRtl) && (collide.indexOf('right') > -1\n || collide.indexOf('left') > -1)) {\n this.popupObj.collision.X = 'none';\n var offWidth = closest(this.lItem, '.e-' + this.getModuleName() + '-wrapper').offsetWidth;\n this.left =\n this.enableRtl ? calculatePosition(this.lItem, this.isNestedOrVertical ? 'right' : 'left', 'top').left\n : this.left - this.popupWrapper.offsetWidth - offWidth + 2;\n }\n collide = isCollide(this.popupWrapper, null, this.left, this.top);\n if (collide.indexOf('left') > -1 || collide.indexOf('right') > -1) {\n this.left = this.callFit(this.popupWrapper, true, false, this.top, this.left).left;\n }\n this.popupWrapper.style.left = this.left + 'px';\n };\n MenuBase.prototype.setBlankIconStyle = function (menu) {\n var blankIconList = [].slice.call(menu.getElementsByClassName('e-blankicon'));\n if (!blankIconList.length) {\n return;\n }\n var iconLi = menu.querySelector('.e-menu-item:not(.e-blankicon):not(.e-separator)');\n if (!iconLi) {\n return;\n }\n var icon = iconLi.querySelector('.e-menu-icon');\n if (!icon) {\n return;\n }\n var cssProp = this.enableRtl ? { padding: 'paddingRight', margin: 'marginLeft' } :\n { padding: 'paddingLeft', margin: 'marginRight' };\n var iconCssProps = getComputedStyle(icon);\n var iconSize = parseInt(iconCssProps.fontSize, 10);\n if (!!parseInt(iconCssProps.width, 10) && parseInt(iconCssProps.width, 10) > iconSize) {\n iconSize = parseInt(iconCssProps.width, 10);\n }\n // eslint:disable\n var size = iconSize + parseInt(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n iconCssProps[cssProp.margin], 10) + parseInt(getComputedStyle(iconLi)[cssProp.padding], 10) + \"px\";\n blankIconList.forEach(function (li) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n li.style[cssProp.padding] = size;\n });\n // eslint:enable\n };\n MenuBase.prototype.checkScrollOffset = function (e) {\n var wrapper = this.getWrapper();\n if (wrapper.children[0].classList.contains('e-menu-hscroll') && this.navIdx.length === 1) {\n var trgt = isNullOrUndefined(e) ? this.element : closest(e.target, '.' + ITEM);\n var offsetEle = select('.e-hscroll-bar', wrapper);\n if (offsetEle.scrollLeft > trgt.offsetLeft) {\n offsetEle.scrollLeft -= (offsetEle.scrollLeft - trgt.offsetLeft);\n }\n var offsetLeft = offsetEle.scrollLeft + offsetEle.offsetWidth;\n var offsetRight = trgt.offsetLeft + trgt.offsetWidth;\n if (offsetLeft < offsetRight) {\n offsetEle.scrollLeft += (offsetRight - offsetLeft);\n }\n }\n };\n MenuBase.prototype.setPosition = function (li, ul, top, left) {\n var px = 'px';\n this.toggleVisiblity(ul);\n if (ul === this.element || (left > -1 && top > -1)) {\n var collide = isCollide(ul, null, left, top);\n if (collide.indexOf('right') > -1) {\n left = left - ul.offsetWidth;\n }\n if (collide.indexOf('bottom') > -1) {\n var offset = this.callFit(ul, false, true, top, left);\n top = offset.top - 20;\n if (top < 0) {\n var newTop = (pageYOffset + document.documentElement.clientHeight) - ul.getBoundingClientRect().height;\n if (newTop > -1) {\n top = newTop;\n }\n }\n }\n collide = isCollide(ul, null, left, top);\n if (collide.indexOf('left') > -1) {\n var offset = this.callFit(ul, true, false, top, left);\n left = offset.left;\n }\n }\n else {\n if (Browser.isDevice) {\n top = Number(this.element.style.top.replace(px, ''));\n left = Number(this.element.style.left.replace(px, ''));\n }\n else {\n var x = this.enableRtl ? 'left' : 'right';\n var offset = calculatePosition(li, x, 'top');\n top = offset.top;\n left = offset.left;\n var collide = isCollide(ul, null, this.enableRtl ? left - ul.offsetWidth : left, top);\n var xCollision = collide.indexOf('left') > -1 || collide.indexOf('right') > -1;\n if (xCollision) {\n offset = calculatePosition(li, this.enableRtl ? 'right' : 'left', 'top');\n left = offset.left;\n }\n if (this.enableRtl || xCollision) {\n left = (this.enableRtl && xCollision) ? left : left - ul.offsetWidth;\n }\n if (collide.indexOf('bottom') > -1) {\n offset = this.callFit(ul, false, true, top, left);\n top = offset.top;\n }\n }\n }\n this.toggleVisiblity(ul, false);\n ul.style.top = top + px;\n ul.style.left = left + px;\n };\n MenuBase.prototype.toggleVisiblity = function (ul, isVisible) {\n if (isVisible === void 0) { isVisible = true; }\n ul.style.visibility = isVisible ? 'hidden' : '';\n ul.style.display = isVisible ? 'block' : 'none';\n };\n MenuBase.prototype.createItems = function (items) {\n var _this = this;\n var level = this.navIdx ? this.navIdx.length : 0;\n var fields = this.getFields(level);\n var showIcon = this.hasField(items, this.getField('iconCss', level));\n var listBaseOptions = {\n showIcon: showIcon,\n moduleName: 'menu',\n fields: fields,\n template: this.template,\n itemNavigable: true,\n itemCreating: function (args) {\n if (!args.curData[args.fields[fields.id]]) {\n args.curData[args.fields[fields.id]] = getUniqueID('menuitem');\n }\n if (isNullOrUndefined(args.curData.htmlAttributes)) {\n args.curData.htmlAttributes = {};\n }\n if (Browser.isIE) {\n args.curData.htmlAttributes.role = 'menuitem';\n args.curData.htmlAttributes.tabindex = '-1';\n }\n else {\n Object.assign(args.curData.htmlAttributes, { role: 'menuitem', tabindex: '-1' });\n }\n if (_this.isMenu && !args.curData[_this.getField('separator', level)]) {\n args.curData.htmlAttributes['aria-label'] = args.curData[args.fields.text] ?\n args.curData[args.fields.text] : args.curData[args.fields.id];\n }\n if (args.curData[args.fields[fields.iconCss]] === '') {\n args.curData[args.fields[fields.iconCss]] = null;\n }\n },\n itemCreated: function (args) {\n if (args.curData[_this.getField('separator', level)]) {\n args.item.classList.add(SEPARATOR);\n args.item.setAttribute('role', 'separator');\n }\n if (showIcon && !args.curData[args.fields.iconCss]\n && !args.curData[_this.getField('separator', level)]) {\n args.item.classList.add('e-blankicon');\n }\n if (args.curData[args.fields.child]\n && args.curData[args.fields.child].length) {\n var span = _this.createElement('span', { className: ICONS + ' ' + CARET });\n args.item.appendChild(span);\n args.item.setAttribute('aria-haspopup', 'true');\n args.item.setAttribute('aria-expanded', 'false');\n args.item.classList.add('e-menu-caret-icon');\n }\n if (_this.isMenu && _this.template) {\n args.item.setAttribute('id', args.curData[args.fields.id].toString());\n args.item.removeAttribute('data-uid');\n if (args.item.classList.contains('e-level-1')) {\n args.item.classList.remove('e-level-1');\n }\n if (args.item.classList.contains('e-has-child')) {\n args.item.classList.remove('e-has-child');\n }\n args.item.removeAttribute('aria-level');\n }\n var eventArgs = { item: args.curData, element: args.item };\n _this.trigger('beforeItemRender', eventArgs);\n }\n };\n this.setProperties({ 'items': this.items }, true);\n if (this.isMenu) {\n listBaseOptions.templateID = this.element.id + TEMPLATE_PROPERTY;\n }\n var ul = ListBase.createList(this.createElement, items, listBaseOptions, !this.template, this);\n ul.setAttribute('tabindex', '0');\n if (this.isMenu) {\n ul.setAttribute('role', 'menu');\n }\n else {\n ul.setAttribute('role', 'menubar');\n }\n return ul;\n };\n MenuBase.prototype.moverHandler = function (e) {\n var trgt = e.target;\n this.liTrgt = trgt;\n var cli = this.getLI(trgt);\n var wrapper = cli ? closest(cli, '.e-' + this.getModuleName() + '-wrapper') : this.getWrapper();\n var hdrWrapper = this.getWrapper();\n var regex = new RegExp('-ej2menu-(.*)-popup');\n var ulId;\n var isDifferentElem = false;\n if (!wrapper) {\n return;\n }\n if (wrapper.id !== '') {\n ulId = regex.exec(wrapper.id)[1];\n }\n else {\n ulId = wrapper.querySelector('ul').id;\n }\n if (ulId !== this.element.id) {\n this.removeLIStateByClass([FOCUSED, SELECTED], [this.getWrapper()]);\n if (this.navIdx.length) {\n isDifferentElem = true;\n }\n else {\n return;\n }\n }\n if (cli && closest(cli, '.e-' + this.getModuleName() + '-wrapper') && !isDifferentElem) {\n this.removeLIStateByClass([FOCUSED], this.isMenu ? [wrapper].concat(this.getPopups()) : [wrapper]);\n this.removeLIStateByClass([FOCUSED], this.isMenu ? [hdrWrapper].concat(this.getPopups()) : [hdrWrapper]);\n cli.classList.add(FOCUSED);\n if (!this.showItemOnClick) {\n this.clickHandler(e);\n }\n }\n else if (this.isMenu && this.showItemOnClick && !isDifferentElem) {\n this.removeLIStateByClass([FOCUSED], [wrapper].concat(this.getPopups()));\n }\n if (this.isMenu) {\n if (!this.showItemOnClick && (trgt.parentElement !== wrapper && !closest(trgt, '.e-' + this.getModuleName() + '-popup'))\n && (!cli || (cli && !this.getIndex(cli.id, true).length)) && this.showSubMenuOn !== 'Hover') {\n this.removeLIStateByClass([FOCUSED], [wrapper]);\n if (this.navIdx.length) {\n this.isClosed = true;\n this.closeMenu(null, e);\n }\n }\n else if (isDifferentElem && !this.showItemOnClick) {\n if (this.navIdx.length) {\n this.isClosed = true;\n this.closeMenu(null, e);\n }\n }\n if (!this.isClosed) {\n this.removeStateWrapper();\n }\n this.isClosed = false;\n }\n };\n MenuBase.prototype.removeStateWrapper = function () {\n if (this.liTrgt) {\n var wrapper = closest(this.liTrgt, '.e-menu-vscroll');\n if (this.liTrgt.tagName === 'DIV' && wrapper) {\n this.removeLIStateByClass([FOCUSED, SELECTED], [wrapper]);\n }\n }\n };\n MenuBase.prototype.removeLIStateByClass = function (classList, element) {\n var li;\n var _loop_1 = function (i) {\n classList.forEach(function (className) {\n li = select('.' + className, element[i]);\n if (li) {\n li.classList.remove(className);\n }\n });\n };\n for (var i = 0; i < element.length; i++) {\n _loop_1(i);\n }\n };\n MenuBase.prototype.getField = function (propName, level) {\n if (level === void 0) { level = 0; }\n var fieldName = this.fields[\"\" + propName];\n return typeof fieldName === 'string' ? fieldName :\n (!fieldName[level] ? fieldName[fieldName.length - 1].toString()\n : fieldName[level].toString());\n };\n MenuBase.prototype.getFields = function (level) {\n if (level === void 0) { level = 0; }\n return {\n id: this.getField('itemId', level),\n iconCss: this.getField('iconCss', level),\n text: this.getField('text', level),\n url: this.getField('url', level),\n child: this.getField('children', level),\n separator: this.getField('separator', level)\n };\n };\n MenuBase.prototype.hasField = function (items, field) {\n for (var i = 0, len = items.length; i < len; i++) {\n if (items[i][\"\" + field]) {\n return true;\n }\n }\n return false;\n };\n MenuBase.prototype.menuHeaderClickHandler = function (e) {\n if (closest(e.target, '.e-menu-wrapper').querySelector('ul.e-menu-parent').id !== this.element.id) {\n return;\n }\n if (this.element.className.indexOf('e-hide-menu') > -1) {\n this.openHamburgerMenu(e);\n }\n else {\n this.closeHamburgerMenu(e);\n }\n };\n MenuBase.prototype.clickHandler = function (e) {\n if (this.isTapHold) {\n this.isTapHold = false;\n }\n else {\n var wrapper = this.getWrapper();\n var trgt = e.target;\n var cli = this.cli = this.getLI(trgt);\n var regex = new RegExp('-ej2menu-(.*)-popup');\n var cliWrapper = cli ? closest(cli, '.e-' + this.getModuleName() + '-wrapper') : null;\n var isInstLI = cli && cliWrapper && (this.isMenu ? this.getIndex(cli.id, true).length > 0\n : wrapper.firstElementChild.id === cliWrapper.firstElementChild.id);\n if (Browser.isDevice && this.isMenu) {\n this.removeLIStateByClass([FOCUSED], [wrapper].concat(this.getPopups()));\n this.mouseDownHandler(e);\n }\n if (cli && cliWrapper && this.isMenu) {\n var cliWrapperId = cliWrapper.id ? regex.exec(cliWrapper.id)[1] : cliWrapper.querySelector('.e-menu-parent').id;\n if (this.element.id !== cliWrapperId) {\n return;\n }\n }\n if (isInstLI && e.type === 'click' && !cli.classList.contains(HEADER)) {\n this.setLISelected(cli);\n var navIdx = this.getIndex(cli.id, true);\n var item = this.getItem(navIdx);\n var eventArgs = { element: cli, item: item, event: e };\n this.trigger('select', eventArgs);\n }\n if (isInstLI && (e.type === 'mouseover' || Browser.isDevice || this.showItemOnClick)) {\n var ul = void 0;\n if (cli.classList.contains(HEADER)) {\n ul = wrapper.children[this.navIdx.length - 1];\n this.toggleAnimation(ul);\n var sli = this.getLIByClass(ul, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n detach(cli.parentNode);\n this.navIdx.pop();\n }\n else {\n if (!cli.classList.contains(SEPARATOR)) {\n this.showSubMenu = true;\n var cul = cli.parentNode;\n if (isNullOrUndefined(cul)) {\n return;\n }\n this.cliIdx = this.getIdx(cul, cli);\n if (this.isMenu || !Browser.isDevice) {\n var culIdx = this.isMenu ? Array.prototype.indexOf.call([wrapper].concat(this.getPopups()), closest(cul, '.' + 'e-' + this.getModuleName() + '-wrapper'))\n : this.getIdx(wrapper, cul);\n if (this.navIdx[culIdx] === this.cliIdx) {\n this.showSubMenu = false;\n }\n if (culIdx !== this.navIdx.length && (e.type !== 'mouseover' || this.showSubMenu)) {\n var sli = this.getLIByClass(cul, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n this.isClosed = true;\n this.keyType = 'click';\n if (this.showItemOnClick) {\n this.setLISelected(cli);\n }\n this.closeMenu(culIdx + 1, e);\n if (this.showItemOnClick) {\n this.setLISelected(cli);\n }\n }\n }\n if (!this.isClosed) {\n this.afterCloseMenu(e);\n }\n this.isClosed = false;\n }\n }\n }\n else {\n if (this.isMenu && trgt.tagName === 'DIV' && this.navIdx.length && closest(trgt, '.e-menu-vscroll')) {\n var popupEle = closest(trgt, '.' + POPUP);\n var cIdx = Array.prototype.indexOf.call(this.getPopups(), popupEle) + 1;\n if (cIdx < this.navIdx.length) {\n this.closeMenu(cIdx + 1, e);\n if (popupEle) {\n this.removeLIStateByClass([FOCUSED, SELECTED], [popupEle]);\n }\n }\n }\n else if (this.isMenu && this.hamburgerMode && trgt.tagName === 'SPAN'\n && trgt.classList.contains('e-menu-icon')) {\n this.menuHeaderClickHandler(e);\n }\n else {\n if (trgt.tagName !== 'UL' || (this.isMenu ? trgt.parentElement.classList.contains('e-menu-wrapper') &&\n !this.getIndex(trgt.querySelector('.' + ITEM).id, true).length : trgt.parentElement !== wrapper)) {\n if (!cli) {\n this.removeLIStateByClass([SELECTED], [wrapper]);\n }\n if (!cli || !cli.querySelector('.' + CARET)) {\n this.closeMenu(null, e);\n }\n }\n }\n }\n }\n };\n MenuBase.prototype.afterCloseMenu = function (e) {\n if (isNullOrUndefined(e)) {\n return;\n }\n var isHeader;\n if (this.showSubMenu) {\n if (this.showItemOnClick && this.navIdx.length === 0) {\n isHeader = closest(e.target, '.e-menu-parent.e-control');\n }\n else {\n isHeader = closest(this.element, '.e-menu-parent.e-control');\n }\n var idx = this.navIdx.concat(this.cliIdx);\n var item = this.getItem(idx);\n if (item && item[this.getField('children', idx.length - 1)] &&\n item[this.getField('children', idx.length - 1)].length) {\n if (e.type === 'mouseover' || (Browser.isDevice && this.isMenu)) {\n this.setLISelected(this.cli);\n }\n if ((!this.hamburgerMode && isHeader) || (this.hamburgerMode && this.cli.getAttribute('aria-expanded') === 'false')) {\n this.cli.setAttribute('aria-expanded', 'true');\n this.navIdx.push(this.cliIdx);\n this.openMenu(this.cli, item, null, null, e);\n }\n }\n else {\n if (e.type !== 'mouseover') {\n this.closeMenu(null, e);\n }\n }\n if (!isHeader) {\n var cul = this.getUlByNavIdx();\n var sli = this.getLIByClass(cul, SELECTED);\n if (sli) {\n sli.setAttribute('aria-expanded', 'false');\n sli.classList.remove(SELECTED);\n }\n }\n }\n this.keyType = '';\n };\n MenuBase.prototype.setLISelected = function (li) {\n var sli = this.getLIByClass(li.parentElement, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n if (!this.isMenu) {\n li.classList.remove(FOCUSED);\n }\n li.classList.add(SELECTED);\n };\n MenuBase.prototype.getLIByClass = function (ul, classname) {\n for (var i = 0, len = ul.children.length; i < len; i++) {\n if (ul.children[i].classList.contains(classname)) {\n return ul.children[i];\n }\n }\n return null;\n };\n /**\n * This method is used to get the index of the menu item in the Menu based on the argument.\n *\n * @param {MenuItem | string} item - item be passed to get the index | id to be passed to get the item index.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.getItemIndex = function (item, isUniqueId) {\n var idx;\n if (typeof item === 'string') {\n idx = item;\n }\n else {\n idx = item.id;\n }\n var isText = (isUniqueId === false) ? false : true;\n var navIdx = this.getIndex(idx, isText);\n return navIdx;\n };\n /**\n * This method is used to set the menu item in the Menu based on the argument.\n *\n * @param {MenuItem} item - item need to be updated.\n * @param {string} id - id / text to be passed to update the item.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.setItem = function (item, id, isUniqueId) {\n var idx;\n if (isUniqueId) {\n idx = id ? id : item.id;\n }\n else {\n idx = id ? id : item.text;\n }\n var navIdx = this.getIndex(idx, isUniqueId);\n var newItem = this.getItem(navIdx);\n Object.assign(newItem, item);\n };\n MenuBase.prototype.getItem = function (navIdx) {\n navIdx = navIdx.slice();\n var idx = navIdx.pop();\n var items = this.getItems(navIdx);\n return items[idx];\n };\n MenuBase.prototype.getItems = function (navIdx) {\n var items = this.items;\n for (var i = 0; i < navIdx.length; i++) {\n items = items[navIdx[i]][this.getField('children', i)];\n }\n return items;\n };\n MenuBase.prototype.setItems = function (newItems, navIdx) {\n var items = this.getItems(navIdx);\n items.splice(0, items.length);\n for (var i = 0; i < newItems.length; i++) {\n items.splice(i, 0, newItems[i]);\n }\n };\n MenuBase.prototype.getIdx = function (ul, li, skipHdr) {\n if (skipHdr === void 0) { skipHdr = true; }\n var idx = Array.prototype.indexOf.call(ul.children, li);\n if (skipHdr && ul.children[0].classList.contains(HEADER)) {\n idx--;\n }\n return idx;\n };\n MenuBase.prototype.getLI = function (elem) {\n if (elem.tagName === 'LI' && elem.classList.contains('e-menu-item')) {\n return elem;\n }\n return closest(elem, 'li.e-menu-item');\n };\n MenuBase.prototype.updateItemsByNavIdx = function () {\n var items = this.items;\n var count = 0;\n for (var index = 0; index < this.navIdx.length; index++) {\n items = items[index].items;\n if (!items) {\n break;\n }\n count++;\n var ul = this.getUlByNavIdx(count);\n if (!ul) {\n break;\n }\n this.updateItem(ul, items);\n }\n };\n MenuBase.prototype.removeChildElement = function (elem) {\n while (elem.firstElementChild) {\n elem.removeChild(elem.firstElementChild);\n }\n return elem;\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @private\n * @param {MenuBaseModel} newProp - Specifies the new properties\n * @param {MenuBaseModel} oldProp - Specifies the old properties\n * @returns {void}\n */\n MenuBase.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n var wrapper = this.getWrapper();\n var _loop_2 = function (prop) {\n switch (prop) {\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([wrapper], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([wrapper], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (this_1.enableRtl) {\n wrapper.classList.add(RTL);\n }\n else {\n wrapper.classList.remove(RTL);\n }\n break;\n case 'showItemOnClick':\n this_1.unWireEvents();\n this_1.showItemOnClick = newProp.showItemOnClick;\n this_1.wireEvents();\n break;\n case 'enableScrolling':\n if (newProp.enableScrolling) {\n var ul_2;\n if (this_1.element.classList.contains('e-vertical')) {\n addScrolling(this_1.createElement, wrapper, this_1.element, 'vscroll', this_1.enableRtl);\n }\n else {\n addScrolling(this_1.createElement, wrapper, this_1.element, 'hscroll', this_1.enableRtl);\n }\n this_1.getPopups().forEach(function (wrapper) {\n ul_2 = select('.e-ul', wrapper);\n addScrolling(_this.createElement, wrapper, ul_2, 'vscroll', _this.enableRtl);\n });\n }\n else {\n var ul_3 = wrapper.children[0];\n if (this_1.element.classList.contains('e-vertical')) {\n destroyScroll(getInstance(ul_3, VScroll), ul_3);\n }\n else {\n destroyScroll(getInstance(ul_3, HScroll), ul_3);\n }\n wrapper.style.overflow = '';\n wrapper.appendChild(this_1.element);\n this_1.getPopups().forEach(function (wrapper) {\n ul_3 = wrapper.children[0];\n destroyScroll(getInstance(ul_3, VScroll), ul_3);\n wrapper.style.overflow = '';\n });\n }\n break;\n case 'items': {\n var idx = void 0;\n var navIdx = void 0;\n var item = void 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this_1.isReact && this_1.template) {\n this_1.clearTemplate(['template']);\n }\n if (!Object.keys(oldProp.items).length) {\n this_1.updateItem(this_1.element, this_1.items);\n if (this_1.enableScrolling && this_1.element.parentElement.classList.contains('e-custom-scroll')) {\n if (this_1.element.classList.contains('e-vertical')) {\n addScrolling(this_1.createElement, wrapper, this_1.element, 'vscroll', this_1.enableRtl);\n }\n else {\n addScrolling(this_1.createElement, wrapper, this_1.element, 'hscroll', this_1.enableRtl);\n }\n }\n if (!this_1.hamburgerMode) {\n for (var i = 1, count = wrapper.childElementCount; i < count; i++) {\n detach(wrapper.lastElementChild);\n }\n }\n this_1.navIdx = [];\n }\n else {\n var keys = Object.keys(newProp.items);\n for (var i = 0; i < keys.length; i++) {\n navIdx = this_1.getChangedItemIndex(newProp, [], Number(keys[i]));\n if (navIdx.length <= this_1.getWrapper().children.length) {\n idx = navIdx.pop();\n item = this_1.getItems(navIdx);\n this_1.insertAfter([item[idx]], item[idx].text);\n this_1.removeItem(item, navIdx, idx);\n this_1.setItems(item, navIdx);\n }\n navIdx.length = 0;\n }\n }\n break;\n }\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_2(prop);\n }\n };\n MenuBase.prototype.updateItem = function (ul, items) {\n if (isBlazor() && !this.isMenu) {\n ul = this.removeChildElement(ul);\n }\n else {\n if (this.enableScrolling) {\n var wrapper1 = this.getWrapper();\n var ul1 = wrapper1.children[0];\n if (this.element.classList.contains('e-vertical')) {\n destroyScroll(getInstance(ul1, VScroll), ul1);\n }\n else {\n destroyScroll(getInstance(ul1, HScroll), ul1);\n }\n }\n ul.innerHTML = '';\n }\n var lis = [].slice.call(this.createItems(items).children);\n lis.forEach(function (li) {\n ul.appendChild(li);\n });\n };\n MenuBase.prototype.getChangedItemIndex = function (newProp, index, idx) {\n index.push(idx);\n var key = Object.keys(newProp.items[idx]).pop();\n if (key === 'items') {\n var item = newProp.items[idx];\n var popStr = Object.keys(item.items).pop();\n if (popStr) {\n this.getChangedItemIndex(item, index, Number(popStr));\n }\n }\n else {\n if (key === 'isParentArray' && index.length > 1) {\n index.pop();\n }\n }\n return index;\n };\n MenuBase.prototype.removeItem = function (item, navIdx, idx) {\n item.splice(idx, 1);\n var uls = this.getWrapper().children;\n if (navIdx.length < uls.length) {\n detach(uls[navIdx.length].children[idx]);\n }\n };\n /**\n * Used to unwire the bind events.\n *\n * @private\n * @param {string} targetSelctor - Specifies the target selector\n * @returns {void}\n */\n MenuBase.prototype.unWireEvents = function (targetSelctor) {\n if (targetSelctor === void 0) { targetSelctor = this.target; }\n var wrapper = this.getWrapper();\n if (targetSelctor) {\n var target = void 0;\n var touchModule = void 0;\n var targetElems = selectAll(targetSelctor);\n for (var i = 0, len = targetElems.length; i < len; i++) {\n target = targetElems[i];\n if (this.isMenu) {\n EventHandler.remove(target, 'click', this.menuHeaderClickHandler);\n }\n else {\n if (Browser.isIos) {\n touchModule = getInstance(target, Touch);\n if (touchModule) {\n touchModule.destroy();\n }\n }\n else {\n EventHandler.remove(target, 'contextmenu', this.cmenuHandler);\n }\n }\n }\n if (!this.isMenu) {\n EventHandler.remove(this.targetElement, 'mousewheel DOMMouseScroll', this.scrollHandler);\n for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {\n var parent_2 = _a[_i];\n EventHandler.remove(parent_2, 'mousewheel DOMMouseScroll', this.scrollHandler);\n }\n }\n }\n if (!Browser.isDevice) {\n EventHandler.remove(this.isMenu ? document : wrapper, 'mouseover', this.delegateMoverHandler);\n EventHandler.remove(document, 'mousedown', this.delegateMouseDownHandler);\n }\n EventHandler.remove(document, 'click', this.delegateClickHandler);\n this.unWireKeyboardEvent(wrapper);\n this.rippleFn();\n };\n MenuBase.prototype.unWireKeyboardEvent = function (element) {\n var keyboardModule = getInstance(element, KeyboardEvents);\n if (keyboardModule) {\n keyboardModule.destroy();\n }\n };\n MenuBase.prototype.toggleAnimation = function (ul, isMenuOpen) {\n var _this = this;\n if (isMenuOpen === void 0) { isMenuOpen = true; }\n var pUlHeight;\n var pElement;\n if (this.animationSettings.effect === 'None' || !isMenuOpen) {\n this.end(ul, isMenuOpen);\n }\n else {\n this.animation.animate(ul, {\n name: this.animationSettings.effect,\n duration: this.animationSettings.duration,\n timingFunction: this.animationSettings.easing,\n begin: function (options) {\n if (_this.hamburgerMode) {\n pElement = options.element.parentElement;\n options.element.style.position = 'absolute';\n pUlHeight = pElement.offsetHeight;\n options.element.style.maxHeight = options.element.offsetHeight + 'px';\n pElement.style.maxHeight = '';\n }\n else {\n options.element.style.display = 'block';\n options.element.style.maxHeight = options.element.getBoundingClientRect().height + 'px';\n }\n },\n progress: function (options) {\n if (_this.hamburgerMode) {\n pElement.style.minHeight = (pUlHeight + options.element.offsetHeight) + 'px';\n }\n },\n end: function (options) {\n if (_this.hamburgerMode) {\n options.element.style.position = '';\n options.element.style.maxHeight = '';\n pElement.style.minHeight = '';\n options.element.style.top = 0 + 'px';\n options.element.children[0].focus();\n _this.triggerOpen(options.element.children[0]);\n }\n else {\n _this.end(options.element, isMenuOpen);\n }\n }\n });\n }\n };\n MenuBase.prototype.triggerOpen = function (ul) {\n var item = this.navIdx.length ? this.getItem(this.navIdx) : null;\n var eventArgs = {\n element: ul, parentItem: item, items: item ? item.items : this.items\n };\n this.trigger('onOpen', eventArgs);\n if (!this.isMenu) {\n EventHandler.add(ul, 'keydown', this.keyHandler, this);\n }\n };\n MenuBase.prototype.end = function (ul, isMenuOpen) {\n if (isMenuOpen) {\n ul.style.display = 'block';\n ul.style.maxHeight = '';\n this.triggerOpen(ul);\n if (ul.querySelector('.' + FOCUSED)) {\n ul.querySelector('.' + FOCUSED).focus();\n }\n else {\n var ele = this.getWrapper().children[this.getIdx(this.getWrapper(), ul) - 1];\n if (this.currentTarget) {\n if (!(this.currentTarget.classList.contains('e-numerictextbox') || this.currentTarget.classList.contains('e-textbox') || this.currentTarget.tagName === 'INPUT')) {\n if (ele) {\n ele.querySelector('.' + SELECTED).focus();\n }\n else {\n this.element.focus();\n }\n }\n }\n else {\n if (ele) {\n ele.querySelector('.' + SELECTED).focus();\n }\n else {\n this.element.focus();\n }\n }\n }\n }\n else {\n if (ul === this.element) {\n var fli = this.getLIByClass(this.element, FOCUSED);\n if (fli) {\n fli.classList.remove(FOCUSED);\n }\n var sli = this.getLIByClass(this.element, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n ul.style.display = 'none';\n }\n else {\n detach(ul);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n MenuBase.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Get wrapper element.\n *\n * @returns {Element} - Wrapper element\n * @private\n */\n MenuBase.prototype.getWrapper = function () {\n return closest(this.element, '.e-' + this.getModuleName() + '-wrapper');\n };\n MenuBase.prototype.getIndex = function (data, isUniqueId, items, nIndex, isCallBack, level) {\n if (items === void 0) { items = this.items; }\n if (nIndex === void 0) { nIndex = []; }\n if (isCallBack === void 0) { isCallBack = false; }\n if (level === void 0) { level = 0; }\n var item;\n level = isCallBack ? level + 1 : 0;\n for (var i = 0, len = items.length; i < len; i++) {\n item = items[i];\n if ((isUniqueId ? item[this.getField('itemId', level)] : item[this.getField('text', level)]) === data) {\n nIndex.push(i);\n break;\n }\n else if (item[this.getField('children', level)]\n && item[this.getField('children', level)].length) {\n nIndex = this.getIndex(data, isUniqueId, item[this.getField('children', level)], nIndex, true, level);\n if (nIndex[nIndex.length - 1] === -1) {\n if (i !== len - 1) {\n nIndex.pop();\n }\n }\n else {\n nIndex.unshift(i);\n break;\n }\n }\n else {\n if (i === len - 1) {\n nIndex.push(-1);\n }\n }\n }\n return (!isCallBack && nIndex[0] === -1) ? [] : nIndex;\n };\n /**\n * This method is used to enable or disable the menu items in the Menu based on the items and enable argument.\n *\n * @param {string[]} items - Text items that needs to be enabled/disabled.\n * @param {boolean} enable - Set `true`/`false` to enable/disable the list items.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.enableItems = function (items, enable, isUniqueId) {\n if (enable === void 0) { enable = true; }\n var ul;\n var idx;\n var navIdx;\n var disabled = DISABLED;\n var skipItem;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i], isUniqueId);\n if (this.navIdx.length) {\n if (navIdx.length !== 1) {\n skipItem = false;\n for (var i_1 = 0, len = navIdx.length - 1; i_1 < len; i_1++) {\n if (navIdx[i_1] !== this.navIdx[i_1]) {\n skipItem = true;\n break;\n }\n }\n if (skipItem) {\n continue;\n }\n }\n }\n else {\n if (navIdx.length !== 1) {\n continue;\n }\n }\n idx = navIdx.pop();\n ul = this.getUlByNavIdx(navIdx.length);\n if (ul && !isNullOrUndefined(idx)) {\n if (enable) {\n if (this.isMenu) {\n ul.children[idx].classList.remove(disabled);\n ul.children[idx].removeAttribute('aria-disabled');\n }\n else {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[idx + 1].classList.remove(disabled);\n }\n else {\n ul.children[idx].classList.remove(disabled);\n }\n }\n }\n else {\n if (this.isMenu) {\n ul.children[idx].classList.add(disabled);\n ul.children[idx].setAttribute('aria-disabled', 'true');\n }\n else {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[idx + 1].classList.add(disabled);\n }\n else {\n ul.children[idx].classList.add(disabled);\n }\n }\n }\n }\n }\n };\n /**\n * This method is used to show the menu items in the Menu based on the items text.\n *\n * @param {string[]} items - Text items that needs to be shown.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.showItems = function (items, isUniqueId) {\n this.showHideItems(items, false, isUniqueId);\n };\n /**\n * This method is used to hide the menu items in the Menu based on the items text.\n *\n * @param {string[]} items - Text items that needs to be hidden.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.hideItems = function (items, isUniqueId) {\n this.showHideItems(items, true, isUniqueId);\n };\n MenuBase.prototype.showHideItems = function (items, ishide, isUniqueId) {\n var ul;\n var index;\n var navIdx;\n var item;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i], isUniqueId);\n index = navIdx.pop();\n ul = this.getUlByNavIdx(navIdx.length);\n item = this.getItems(navIdx);\n if (ul) {\n var validUl = isUniqueId ? ul.children[index].id : item[index].text.toString();\n if (ishide && validUl === items[i]) {\n ul.children[index].classList.add(HIDE);\n }\n else if (!ishide && validUl === items[i]) {\n ul.children[index].classList.remove(HIDE);\n }\n }\n }\n };\n /**\n * It is used to remove the menu items from the Menu based on the items text.\n *\n * @param {string[]} items Text items that needs to be removed.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.removeItems = function (items, isUniqueId) {\n var idx;\n var navIdx;\n var iitems;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i], isUniqueId);\n idx = navIdx.pop();\n iitems = this.getItems(navIdx);\n if (!isNullOrUndefined(idx)) {\n this.removeItem(iitems, navIdx, idx);\n }\n }\n };\n /**\n * It is used to insert the menu items after the specified menu item text.\n *\n * @param {MenuItemModel[]} items - Items that needs to be inserted.\n * @param {string} text - Text item after that the element to be inserted.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.insertAfter = function (items, text, isUniqueId) {\n this.insertItems(items, text, isUniqueId);\n };\n /**\n * It is used to insert the menu items before the specified menu item text.\n *\n * @param {MenuItemModel[]} items - Items that needs to be inserted.\n * @param {string} text - Text item before that the element to be inserted.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.insertBefore = function (items, text, isUniqueId) {\n this.insertItems(items, text, isUniqueId, false);\n };\n MenuBase.prototype.insertItems = function (items, text, isUniqueId, isAfter) {\n if (isAfter === void 0) { isAfter = true; }\n var li;\n var idx;\n var navIdx;\n var iitems;\n var menuitem;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(text, isUniqueId);\n idx = navIdx.pop();\n iitems = this.getItems(navIdx);\n menuitem = new MenuItem(iitems[0], 'items', items[i], true);\n iitems.splice(isAfter ? idx + 1 : idx, 0, menuitem);\n var uls = this.isMenu ? [this.getWrapper()].concat(this.getPopups()) : [].slice.call(this.getWrapper().children);\n if (!isNullOrUndefined(idx) && navIdx.length < uls.length) {\n idx = isAfter ? idx + 1 : idx;\n li = this.createItems(iitems).children[idx];\n var ul = this.isMenu ? select('.e-menu-parent', uls[navIdx.length]) : uls[navIdx.length];\n ul.insertBefore(li, ul.children[idx]);\n }\n }\n };\n MenuBase.prototype.removeAttributes = function () {\n var _this = this;\n ['top', 'left', 'display', 'z-index'].forEach(function (key) {\n _this.element.style.removeProperty(key);\n });\n ['role', 'tabindex', 'class', 'style'].forEach(function (key) {\n if (key === 'class' && _this.element.classList.contains('e-menu-parent')) {\n _this.element.classList.remove('e-menu-parent');\n }\n if (['class', 'style'].indexOf(key) === -1 || !_this.element.getAttribute(key)) {\n _this.element.removeAttribute(key);\n }\n if (_this.isMenu && key === 'class' && _this.element.classList.contains('e-vertical')) {\n _this.element.classList.remove('e-vertical');\n }\n });\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n MenuBase.prototype.destroy = function () {\n var wrapper = this.getWrapper();\n if (wrapper) {\n this.unWireEvents();\n if (!this.isMenu) {\n this.clonedElement.style.display = '';\n if (this.clonedElement.tagName === 'EJS-CONTEXTMENU') {\n addClass([this.clonedElement], ['e-control', 'e-lib', 'e-' + this.getModuleName()]);\n this.element = this.clonedElement;\n }\n else {\n if (this.refreshing && this.clonedElement.childElementCount && this.clonedElement.children[0].tagName === 'LI') {\n this.setProperties({ 'items': [] }, true);\n }\n if (document.getElementById(this.clonedElement.id)) {\n var refEle = this.clonedElement.nextElementSibling;\n if (refEle && refEle !== wrapper) {\n this.clonedElement.parentElement.insertBefore(this.element, refEle);\n }\n else {\n this.clonedElement.parentElement.appendChild(this.element);\n }\n if (isBlazor() && !this.isMenu) {\n this.element = this.removeChildElement(this.element);\n }\n else {\n this.element.innerHTML = '';\n }\n append([].slice.call(this.clonedElement.children), this.element);\n detach(this.clonedElement);\n this.removeAttributes();\n }\n }\n this.clonedElement = null;\n }\n else {\n this.closeMenu();\n if (isBlazor() && !this.isMenu) {\n this.element = this.removeChildElement(this.element);\n }\n else {\n this.element.innerHTML = '';\n }\n this.removeAttributes();\n wrapper.parentNode.insertBefore(this.element, wrapper);\n this.clonedElement = null;\n }\n if (this.isMenu && this.clonedElement) {\n detach(this.element);\n wrapper.style.display = '';\n wrapper.classList.remove('e-' + this.getModuleName() + '-wrapper');\n wrapper.removeAttribute('data-ripple');\n }\n else {\n detach(wrapper);\n }\n _super.prototype.destroy.call(this);\n if (this.template) {\n this.clearTemplate(['template']);\n }\n }\n this.rippleFn = null;\n };\n __decorate([\n Event()\n ], MenuBase.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"onOpen\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"onClose\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"created\", void 0);\n __decorate([\n Property('')\n ], MenuBase.prototype, \"cssClass\", void 0);\n __decorate([\n Property(0)\n ], MenuBase.prototype, \"hoverDelay\", void 0);\n __decorate([\n Property(false)\n ], MenuBase.prototype, \"showItemOnClick\", void 0);\n __decorate([\n Property('')\n ], MenuBase.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], MenuBase.prototype, \"filter\", void 0);\n __decorate([\n Property(null)\n ], MenuBase.prototype, \"template\", void 0);\n __decorate([\n Property(false)\n ], MenuBase.prototype, \"enableScrolling\", void 0);\n __decorate([\n Property(false)\n ], MenuBase.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Complex({ itemId: 'id', text: 'text', parentId: 'parentId', iconCss: 'iconCss', url: 'url', separator: 'separator', children: 'items' }, FieldSettings)\n ], MenuBase.prototype, \"fields\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], MenuBase.prototype, \"items\", void 0);\n __decorate([\n Complex({ duration: 400, easing: 'ease', effect: 'SlideDown' }, MenuAnimationSettings)\n ], MenuBase.prototype, \"animationSettings\", void 0);\n MenuBase = __decorate([\n NotifyPropertyChanges\n ], MenuBase);\n return MenuBase;\n}(Component));\nexport { MenuBase };\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var StackedColumnsDirective = vueDefineComponent({\n inject: { custom: { default: null } },\n render: function (createElement) {\n if (!isExecute) {\n var h = !isExecute ? gh : createElement;\n var slots = null;\n if (!isNullOrUndefined(this.$slots.default)) {\n slots = !isExecute ? this.$slots.default() : this.$slots.default;\n }\n return h('div', { class: 'e-directive' }, slots);\n }\n return;\n },\n updated: function () {\n if (!isExecute && this.custom) {\n this.custom();\n }\n },\n methods: {\n getTag: function () {\n return 'e-stacked-columns';\n }\n }\n});\nexport var StackedColumnsPlugin = {\n name: 'e-stacked-columns',\n install: function (Vue) {\n Vue.component(StackedColumnsPlugin.name, StackedColumnsDirective);\n }\n};\nexport var StackedColumnDirective = vueDefineComponent({\n render: function () {\n return;\n },\n methods: {\n getTag: function () {\n return 'e-stacked-column';\n }\n }\n});\nexport var StackedColumnPlugin = {\n name: 'e-stacked-column',\n install: function (Vue) {\n Vue.component(StackedColumnPlugin.name, StackedColumnDirective);\n }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var ColumnsDirective = vueDefineComponent({\n inject: { custom: { default: null } },\n render: function (createElement) {\n if (!isExecute) {\n var h = !isExecute ? gh : createElement;\n var slots = null;\n if (!isNullOrUndefined(this.$slots.default)) {\n slots = !isExecute ? this.$slots.default() : this.$slots.default;\n }\n return h('div', { class: 'e-directive' }, slots);\n }\n return;\n },\n updated: function () {\n if (!isExecute && this.custom) {\n this.custom();\n }\n },\n methods: {\n getTag: function () {\n return 'e-columns';\n }\n }\n});\nexport var ColumnsPlugin = {\n name: 'e-columns',\n install: function (Vue) {\n Vue.component(ColumnsPlugin.name, ColumnsDirective);\n }\n};\n/**\n * `e-column` directive represent a column of the VueJS Grid.\n * It must be contained in a Grid component(`ejs-grid`).\n * ```vue\n * \n * \n * \n * \n * \n * \n * ```\n */\nexport var ColumnDirective = vueDefineComponent({\n render: function () {\n return;\n },\n methods: {\n getTag: function () {\n return 'e-column';\n }\n }\n});\nexport var ColumnPlugin = {\n name: 'e-column',\n install: function (Vue) {\n Vue.component(ColumnPlugin.name, ColumnDirective);\n }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var AggregateColumnsDirective = vueDefineComponent({\n inject: { custom: { default: null } },\n render: function (createElement) {\n if (!isExecute) {\n var h = !isExecute ? gh : createElement;\n var slots = null;\n if (!isNullOrUndefined(this.$slots.default)) {\n slots = !isExecute ? this.$slots.default() : this.$slots.default;\n }\n return h('div', { class: 'e-directive' }, slots);\n }\n return;\n },\n updated: function () {\n if (!isExecute && this.custom) {\n this.custom();\n }\n },\n methods: {\n getTag: function () {\n return 'e-columns';\n }\n }\n});\nexport var AggregateColumnsPlugin = {\n name: 'e-columns',\n install: function (Vue) {\n Vue.component(AggregateColumnsPlugin.name, AggregateColumnsDirective);\n }\n};\n/**\n * `e-aggregate->e-column` directive represent a aggregate column of the VueJS Grid.\n * ```vue\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * ```\n */\nexport var AggregateColumnDirective = vueDefineComponent({\n render: function () {\n return;\n },\n methods: {\n getTag: function () {\n return 'e-column';\n }\n }\n});\nexport var AggregateColumnPlugin = {\n name: 'e-column',\n install: function (Vue) {\n Vue.component(AggregateColumnPlugin.name, AggregateColumnDirective);\n }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var AggregatesDirective = vueDefineComponent({\n inject: { custom: { default: null } },\n render: function (createElement) {\n if (!isExecute) {\n var h = !isExecute ? gh : createElement;\n var slots = null;\n if (!isNullOrUndefined(this.$slots.default)) {\n slots = !isExecute ? this.$slots.default() : this.$slots.default;\n }\n return h('div', { class: 'e-directive' }, slots);\n }\n return;\n },\n updated: function () {\n if (!isExecute && this.custom) {\n this.custom();\n }\n },\n methods: {\n getTag: function () {\n return 'e-aggregates';\n }\n }\n});\nexport var AggregatesPlugin = {\n name: 'e-aggregates',\n install: function (Vue) {\n Vue.component(AggregatesPlugin.name, AggregatesDirective);\n }\n};\n/**\n * `e-aggregate` directive represent a aggregate row of the VueJS Grid.\n * It must be contained in a Grid component(`ejs-grid`).\n * ```vue\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * ```\n */\nexport var AggregateDirective = vueDefineComponent({\n render: function () {\n return;\n },\n methods: {\n getTag: function () {\n return 'e-aggregate';\n }\n }\n});\nexport var AggregatePlugin = {\n name: 'e-aggregate',\n install: function (Vue) {\n Vue.component(AggregatePlugin.name, AggregateDirective);\n }\n};\n","import { ComponentBase, gh, getProps, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { isUndefined } from '@syncfusion/ej2-base';\nimport { Grid } from '@syncfusion/ej2-grids';\nimport { StackedColumnsDirective, StackedColumnDirective, StackedColumnsPlugin, StackedColumnPlugin } from './stacked-column.directive';\nimport { ColumnsDirective, ColumnDirective, ColumnsPlugin, ColumnPlugin } from './columns.directive';\nimport { AggregateColumnsDirective, AggregateColumnDirective, AggregateColumnsPlugin, AggregateColumnPlugin } from './aggregate-columns.directive';\nimport { AggregatesDirective, AggregateDirective, AggregatesPlugin, AggregatePlugin } from './aggregates.directive';\nexport var properties = ['isLazyUpdate', 'plugins', 'aggregates', 'allowExcelExport', 'allowFiltering', 'allowGrouping', 'allowKeyboard', 'allowMultiSorting', 'allowPaging', 'allowPdfExport', 'allowReordering', 'allowResizing', 'allowRowDragAndDrop', 'allowSelection', 'allowSorting', 'allowTextWrap', 'autoFit', 'childGrid', 'clipMode', 'columnChooserSettings', 'columnMenuItems', 'columnQueryMode', 'columns', 'contextMenuItems', 'cssClass', 'currencyCode', 'currentAction', 'currentViewData', 'dataSource', 'detailTemplate', 'editSettings', 'ej2StatePersistenceVersion', 'emptyRecordTemplate', 'enableAdaptiveUI', 'enableAltRow', 'enableAutoFill', 'enableColumnVirtualization', 'enableHeaderFocus', 'enableHover', 'enableHtmlSanitizer', 'enableImmutableMode', 'enableInfiniteScrolling', 'enablePersistence', 'enableRtl', 'enableStickyHeader', 'enableVirtualMaskRow', 'enableVirtualization', 'exportGrids', 'filterSettings', 'frozenColumns', 'frozenRows', 'gridLines', 'groupSettings', 'height', 'hierarchyPrintMode', 'infiniteScrollSettings', 'loadingIndicator', 'locale', 'pageSettings', 'pagerTemplate', 'parentDetails', 'printMode', 'query', 'queryString', 'resizeSettings', 'rowDropSettings', 'rowHeight', 'rowRenderingMode', 'rowTemplate', 'searchSettings', 'selectedRowIndex', 'selectionSettings', 'showColumnChooser', 'showColumnMenu', 'showHider', 'sortSettings', 'textWrapSettings', 'toolbar', 'toolbarTemplate', 'width', 'actionBegin', 'actionComplete', 'actionFailure', 'batchAdd', 'batchCancel', 'batchDelete', 'beforeAutoFill', 'beforeBatchAdd', 'beforeBatchDelete', 'beforeBatchSave', 'beforeCopy', 'beforeDataBound', 'beforeExcelExport', 'beforeOpenAdaptiveDialog', 'beforeOpenColumnChooser', 'beforePaste', 'beforePdfExport', 'beforePrint', 'beginEdit', 'cellDeselected', 'cellDeselecting', 'cellEdit', 'cellSave', 'cellSaved', 'cellSelected', 'cellSelecting', 'checkBoxChange', 'columnDataStateChange', 'columnDeselected', 'columnDeselecting', 'columnDrag', 'columnDragStart', 'columnDrop', 'columnMenuClick', 'columnMenuOpen', 'columnSelected', 'columnSelecting', 'commandClick', 'contextMenuClick', 'contextMenuOpen', 'created', 'dataBound', 'dataSourceChanged', 'dataStateChange', 'destroyed', 'detailDataBound', 'excelAggregateQueryCellInfo', 'excelExportComplete', 'excelHeaderQueryCellInfo', 'excelQueryCellInfo', 'exportDetailDataBound', 'exportDetailTemplate', 'exportGroupCaption', 'headerCellInfo', 'keyPressed', 'lazyLoadGroupCollapse', 'lazyLoadGroupExpand', 'load', 'pdfAggregateQueryCellInfo', 'pdfExportComplete', 'pdfHeaderQueryCellInfo', 'pdfQueryCellInfo', 'printComplete', 'queryCellInfo', 'recordClick', 'recordDoubleClick', 'resizeStart', 'resizeStop', 'resizing', 'rowDataBound', 'rowDeselected', 'rowDeselecting', 'rowDrag', 'rowDragStart', 'rowDragStartHelper', 'rowDrop', 'rowSelected', 'rowSelecting', 'toolbarClick'];\nexport var modelProps = ['dataSource'];\nexport var testProp = getProps({ props: properties });\nexport var props = testProp[0], watch = testProp[1], emitProbs = Object.keys(watch);\nemitProbs.push('modelchanged', 'update:modelValue');\nfor (var _i = 0, modelProps_1 = modelProps; _i < modelProps_1.length; _i++) {\n var props_1 = modelProps_1[_i];\n emitProbs.push('update:' + props_1);\n}\n/**\n * `ejs-grid` represents the VueJS Grid Component.\n * ```vue\n * \n * ```\n */\nexport var GridComponent = vueDefineComponent({\n name: 'GridComponent',\n mixins: [ComponentBase],\n props: props,\n watch: watch,\n emits: emitProbs,\n model: { event: 'modelchanged' },\n provide: function () { return { custom: this.custom }; },\n data: function () {\n return {\n ej2Instances: new Grid({}),\n propKeys: properties,\n models: modelProps,\n hasChildDirective: true,\n hasInjectedModules: true,\n tagMapper: { \"e-columns\": { \"e-column\": { \"e-stacked-columns\": \"e-stacked-column\" } }, \"e-aggregates\": { \"e-aggregate\": { \"e-columns\": \"e-column\" } } },\n tagNameMapper: { \"e-stacked-columns\": \"e-columns\" },\n isVue3: !isExecute,\n templateCollection: {},\n };\n },\n created: function () {\n this.ej2Instances._trigger = this.ej2Instances.trigger;\n this.ej2Instances.trigger = this.trigger;\n this.bindProperties();\n this.ej2Instances._setProperties = this.ej2Instances.setProperties;\n this.ej2Instances.setProperties = this.setProperties;\n this.ej2Instances.clearTemplate = this.clearTemplate;\n this.updated = this.updated;\n },\n render: function (createElement) {\n var h = !isExecute ? gh : createElement;\n var slots = null;\n if (!isNullOrUndefined(this.$slots.default)) {\n slots = !isExecute ? this.$slots.default() : this.$slots.default;\n }\n return h('div', slots);\n },\n methods: {\n clearTemplate: function (templateNames) {\n if (!templateNames) {\n templateNames = Object.keys(this.templateCollection || {});\n }\n if (templateNames.length && this.templateCollection) {\n for (var _i = 0, templateNames_1 = templateNames; _i < templateNames_1.length; _i++) {\n var tempName = templateNames_1[_i];\n var elementCollection = this.templateCollection[tempName];\n if (elementCollection && elementCollection.length) {\n for (var _a = 0, elementCollection_1 = elementCollection; _a < elementCollection_1.length; _a++) {\n var ele = elementCollection_1[_a];\n var destroy = getValue('__vue__.$destroy', ele);\n if (destroy) {\n ele.__vue__.$destroy();\n }\n if (ele.innerHTML) {\n ele.innerHTML = '';\n }\n }\n delete this.templateCollection[tempName];\n }\n }\n }\n },\n setProperties: function (prop, muteOnChange) {\n var _this = this;\n if (this.isVue3) {\n this.models = !this.models ? this.ej2Instances.referModels : this.models;\n }\n if (this.ej2Instances && this.ej2Instances._setProperties) {\n this.ej2Instances._setProperties(prop, muteOnChange);\n }\n if (prop && this.models && this.models.length) {\n Object.keys(prop).map(function (key) {\n _this.models.map(function (model) {\n if ((key === model) && !(/datasource/i.test(key))) {\n if (_this.isVue3) {\n _this.ej2Instances.vueInstance.$emit('update:' + key, prop[key]);\n }\n else {\n _this.$emit('update:' + key, prop[key]);\n _this.$emit('modelchanged', prop[key]);\n }\n }\n });\n });\n }\n },\n trigger: function (eventName, eventProp, successHandler) {\n if (!isExecute) {\n this.models = !this.models ? this.ej2Instances.referModels : this.models;\n }\n if ((eventName === 'change' || eventName === 'input') && this.models && (this.models.length !== 0)) {\n var key = this.models.toString().match(/checked|value/) || [];\n var propKey = key[0];\n if (eventProp && key && !isUndefined(eventProp[propKey])) {\n if (!isExecute) {\n this.ej2Instances.vueInstance.$emit('update:' + propKey, eventProp[propKey]);\n this.ej2Instances.vueInstance.$emit('modelchanged', eventProp[propKey]);\n this.ej2Instances.vueInstance.$emit('update:modelValue', eventProp[propKey]);\n }\n else {\n if (eventName === 'change' || (this.$props && !this.$props.isLazyUpdate)) {\n this.$emit('update:' + propKey, eventProp[propKey]);\n this.$emit('modelchanged', eventProp[propKey]);\n }\n }\n }\n }\n else if ((eventName === 'actionBegin' && eventProp.requestType === 'dateNavigate') && this.models && (this.models.length !== 0)) {\n var key = this.models.toString().match(/currentView|selectedDate/) || [];\n var propKey = key[0];\n if (eventProp && key && !isUndefined(eventProp[propKey])) {\n if (!isExecute) {\n this.ej2Instances.vueInstance.$emit('update:' + propKey, eventProp[propKey]);\n this.ej2Instances.vueInstance.$emit('modelchanged', eventProp[propKey]);\n }\n else {\n this.$emit('update:' + propKey, eventProp[propKey]);\n this.$emit('modelchanged', eventProp[propKey]);\n }\n }\n }\n if ((this.ej2Instances && this.ej2Instances._trigger)) {\n this.ej2Instances._trigger(eventName, eventProp, successHandler);\n }\n },\n custom: function () {\n this.updated();\n },\n addRecord: function (data, index) {\n return this.ej2Instances.addRecord(data, index);\n },\n addShimmerEffect: function () {\n return this.ej2Instances.addShimmerEffect();\n },\n autoFitColumns: function (fieldNames) {\n return this.ej2Instances.autoFitColumns(fieldNames);\n },\n batchAsyncUpdate: function (changes) {\n return this.ej2Instances.batchAsyncUpdate(changes);\n },\n batchUpdate: function (changes) {\n return this.ej2Instances.batchUpdate(changes);\n },\n calculatePageSizeByParentHeight: function (containerHeight) {\n return this.ej2Instances.calculatePageSizeByParentHeight(containerHeight);\n },\n changeDataSource: function (dataSource, columns) {\n return this.ej2Instances.changeDataSource(dataSource, columns);\n },\n clearCellSelection: function () {\n return this.ej2Instances.clearCellSelection();\n },\n clearFiltering: function (fields) {\n return this.ej2Instances.clearFiltering(fields);\n },\n clearGrouping: function () {\n return this.ej2Instances.clearGrouping();\n },\n clearRowSelection: function () {\n return this.ej2Instances.clearRowSelection();\n },\n clearSelection: function () {\n return this.ej2Instances.clearSelection();\n },\n clearSorting: function () {\n return this.ej2Instances.clearSorting();\n },\n closeEdit: function () {\n return this.ej2Instances.closeEdit();\n },\n copy: function (withHeader) {\n return this.ej2Instances.copy(withHeader);\n },\n csvExport: function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n return this.ej2Instances.csvExport(excelExportProperties, isMultipleExport, workbook, isBlob);\n },\n dataReady: function () {\n return this.ej2Instances.dataReady();\n },\n deleteRecord: function (fieldname, data) {\n return this.ej2Instances.deleteRecord(fieldname, data);\n },\n deleteRow: function (tr) {\n return this.ej2Instances.deleteRow(tr);\n },\n destroyTemplate: function (propertyNames, index) {\n return this.ej2Instances.destroyTemplate(propertyNames, index);\n },\n detailCollapseAll: function () {\n return this.ej2Instances.detailCollapseAll();\n },\n detailExpandAll: function () {\n return this.ej2Instances.detailExpandAll();\n },\n editCell: function (index, field) {\n return this.ej2Instances.editCell(index, field);\n },\n enableToolbarItems: function (items, isEnable) {\n return this.ej2Instances.enableToolbarItems(items, isEnable);\n },\n endEdit: function () {\n return this.ej2Instances.endEdit();\n },\n excelExport: function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n return this.ej2Instances.excelExport(excelExportProperties, isMultipleExport, workbook, isBlob);\n },\n extendRequiredModules: function (modules) {\n return this.ej2Instances.extendRequiredModules(modules);\n },\n filterByColumn: function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n return this.ej2Instances.filterByColumn(fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator);\n },\n getBatchChanges: function () {\n return this.ej2Instances.getBatchChanges();\n },\n getCellFromIndex: function (rowIndex, columnIndex) {\n return this.ej2Instances.getCellFromIndex(rowIndex, columnIndex);\n },\n getColumnByField: function (field) {\n return this.ej2Instances.getColumnByField(field);\n },\n getColumnByUid: function (uid) {\n return this.ej2Instances.getColumnByUid(uid);\n },\n getColumnFieldNames: function () {\n return this.ej2Instances.getColumnFieldNames();\n },\n getColumnHeaderByField: function (field) {\n return this.ej2Instances.getColumnHeaderByField(field);\n },\n getColumnHeaderByIndex: function (index) {\n return this.ej2Instances.getColumnHeaderByIndex(index);\n },\n getColumnHeaderByUid: function (uid) {\n return this.ej2Instances.getColumnHeaderByUid(uid);\n },\n getColumnIndexByField: function (field) {\n return this.ej2Instances.getColumnIndexByField(field);\n },\n getColumnIndexByUid: function (uid) {\n return this.ej2Instances.getColumnIndexByUid(uid);\n },\n getColumns: function (isRefresh) {\n return this.ej2Instances.getColumns(isRefresh);\n },\n getContent: function () {\n return this.ej2Instances.getContent();\n },\n getContentTable: function () {\n return this.ej2Instances.getContentTable();\n },\n getCurrentViewRecords: function () {\n return this.ej2Instances.getCurrentViewRecords();\n },\n getDataModule: function () {\n return this.ej2Instances.getDataModule();\n },\n getDataRows: function () {\n return this.ej2Instances.getDataRows();\n },\n getFilterUIInfo: function () {\n return this.ej2Instances.getFilterUIInfo();\n },\n getFilteredRecords: function () {\n return this.ej2Instances.getFilteredRecords();\n },\n getFooterContent: function () {\n return this.ej2Instances.getFooterContent();\n },\n getFooterContentTable: function () {\n return this.ej2Instances.getFooterContentTable();\n },\n getForeignKeyColumns: function () {\n return this.ej2Instances.getForeignKeyColumns();\n },\n getFrozenDataRows: function () {\n return this.ej2Instances.getFrozenDataRows();\n },\n getFrozenLeftColumnHeaderByIndex: function (index) {\n return this.ej2Instances.getFrozenLeftColumnHeaderByIndex(index);\n },\n getFrozenLeftCount: function () {\n return this.ej2Instances.getFrozenLeftCount();\n },\n getFrozenMode: function () {\n return this.ej2Instances.getFrozenMode();\n },\n getFrozenRightCellFromIndex: function (rowIndex, columnIndex) {\n return this.ej2Instances.getFrozenRightCellFromIndex(rowIndex, columnIndex);\n },\n getFrozenRightColumnHeaderByIndex: function (index) {\n return this.ej2Instances.getFrozenRightColumnHeaderByIndex(index);\n },\n getFrozenRightDataRows: function () {\n return this.ej2Instances.getFrozenRightDataRows();\n },\n getFrozenRightRowByIndex: function (index) {\n return this.ej2Instances.getFrozenRightRowByIndex(index);\n },\n getFrozenRightRows: function () {\n return this.ej2Instances.getFrozenRightRows();\n },\n getFrozenRowByIndex: function (index) {\n return this.ej2Instances.getFrozenRowByIndex(index);\n },\n getHeaderContent: function () {\n return this.ej2Instances.getHeaderContent();\n },\n getHeaderTable: function () {\n return this.ej2Instances.getHeaderTable();\n },\n getHiddenColumns: function () {\n return this.ej2Instances.getHiddenColumns();\n },\n getMediaColumns: function () {\n return this.ej2Instances.getMediaColumns();\n },\n getMovableCellFromIndex: function (rowIndex, columnIndex) {\n return this.ej2Instances.getMovableCellFromIndex(rowIndex, columnIndex);\n },\n getMovableColumnHeaderByIndex: function (index) {\n return this.ej2Instances.getMovableColumnHeaderByIndex(index);\n },\n getMovableDataRows: function () {\n return this.ej2Instances.getMovableDataRows();\n },\n getMovableRowByIndex: function (index) {\n return this.ej2Instances.getMovableRowByIndex(index);\n },\n getMovableRows: function () {\n return this.ej2Instances.getMovableRows();\n },\n getPager: function () {\n return this.ej2Instances.getPager();\n },\n getPrimaryKeyFieldNames: function () {\n return this.ej2Instances.getPrimaryKeyFieldNames();\n },\n getRowByIndex: function (index) {\n return this.ej2Instances.getRowByIndex(index);\n },\n getRowIndexByPrimaryKey: function (value) {\n return this.ej2Instances.getRowIndexByPrimaryKey(value);\n },\n getRowInfo: function (target) {\n return this.ej2Instances.getRowInfo(target);\n },\n getRows: function () {\n return this.ej2Instances.getRows();\n },\n getSelectedColumnsUid: function () {\n return this.ej2Instances.getSelectedColumnsUid();\n },\n getSelectedRecords: function () {\n return this.ej2Instances.getSelectedRecords();\n },\n getSelectedRowCellIndexes: function () {\n return this.ej2Instances.getSelectedRowCellIndexes();\n },\n getSelectedRowIndexes: function () {\n return this.ej2Instances.getSelectedRowIndexes();\n },\n getSelectedRows: function () {\n return this.ej2Instances.getSelectedRows();\n },\n getSummaryValues: function (summaryCol, summaryData) {\n return this.ej2Instances.getSummaryValues(summaryCol, summaryData);\n },\n getUidByColumnField: function (field) {\n return this.ej2Instances.getUidByColumnField(field);\n },\n getVisibleColumns: function () {\n return this.ej2Instances.getVisibleColumns();\n },\n goToPage: function (pageNo) {\n return this.ej2Instances.goToPage(pageNo);\n },\n groupCollapseAll: function () {\n return this.ej2Instances.groupCollapseAll();\n },\n groupColumn: function (columnName) {\n return this.ej2Instances.groupColumn(columnName);\n },\n groupExpandAll: function () {\n return this.ej2Instances.groupExpandAll();\n },\n hideColumns: function (keys, hideBy) {\n return this.ej2Instances.hideColumns(keys, hideBy);\n },\n hideScroll: function () {\n return this.ej2Instances.hideScroll();\n },\n hideSpinner: function () {\n return this.ej2Instances.hideSpinner();\n },\n isFrozenGrid: function () {\n return this.ej2Instances.isFrozenGrid();\n },\n openColumnChooser: function (x, y) {\n return this.ej2Instances.openColumnChooser(x, y);\n },\n pdfExport: function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n return this.ej2Instances.pdfExport(pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n },\n print: function () {\n return this.ej2Instances.print();\n },\n refresh: function () {\n return this.ej2Instances.refresh();\n },\n refreshColumns: function () {\n return this.ej2Instances.refreshColumns();\n },\n refreshHeader: function () {\n return this.ej2Instances.refreshHeader();\n },\n removeMaskRow: function () {\n return this.ej2Instances.removeMaskRow();\n },\n reorderColumnByIndex: function (fromIndex, toIndex) {\n return this.ej2Instances.reorderColumnByIndex(fromIndex, toIndex);\n },\n reorderColumnByTargetIndex: function (fieldName, toIndex) {\n return this.ej2Instances.reorderColumnByTargetIndex(fieldName, toIndex);\n },\n reorderColumns: function (fromFName, toFName) {\n return this.ej2Instances.reorderColumns(fromFName, toFName);\n },\n reorderRows: function (fromIndexes, toIndex) {\n return this.ej2Instances.reorderRows(fromIndexes, toIndex);\n },\n saveCell: function () {\n return this.ej2Instances.saveCell();\n },\n search: function (searchString) {\n return this.ej2Instances.search(searchString);\n },\n selectCell: function (cellIndex, isToggle) {\n return this.ej2Instances.selectCell(cellIndex, isToggle);\n },\n selectCells: function (rowCellIndexes) {\n return this.ej2Instances.selectCells(rowCellIndexes);\n },\n selectCellsByRange: function (startIndex, endIndex) {\n return this.ej2Instances.selectCellsByRange(startIndex, endIndex);\n },\n selectRow: function (index, isToggle) {\n return this.ej2Instances.selectRow(index, isToggle);\n },\n selectRows: function (rowIndexes) {\n return this.ej2Instances.selectRows(rowIndexes);\n },\n selectRowsByRange: function (startIndex, endIndex) {\n return this.ej2Instances.selectRowsByRange(startIndex, endIndex);\n },\n serverCsvExport: function (url) {\n return this.ej2Instances.serverCsvExport(url);\n },\n serverExcelExport: function (url) {\n return this.ej2Instances.serverExcelExport(url);\n },\n serverPdfExport: function (url) {\n return this.ej2Instances.serverPdfExport(url);\n },\n setCellValue: function (key, field, value) {\n return this.ej2Instances.setCellValue(key, field, value);\n },\n setGridContent: function (element) {\n return this.ej2Instances.setGridContent(element);\n },\n setGridContentTable: function (element) {\n return this.ej2Instances.setGridContentTable(element);\n },\n setGridHeaderContent: function (element) {\n return this.ej2Instances.setGridHeaderContent(element);\n },\n setGridHeaderTable: function (element) {\n return this.ej2Instances.setGridHeaderTable(element);\n },\n setGridPager: function (element) {\n return this.ej2Instances.setGridPager(element);\n },\n setRowData: function (key, rowData) {\n return this.ej2Instances.setRowData(key, rowData);\n },\n showAdaptiveFilterDialog: function () {\n return this.ej2Instances.showAdaptiveFilterDialog();\n },\n showAdaptiveSortDialog: function () {\n return this.ej2Instances.showAdaptiveSortDialog();\n },\n showColumns: function (keys, showBy) {\n return this.ej2Instances.showColumns(keys, showBy);\n },\n showMaskRow: function (axisDirection, dialogElement) {\n return this.ej2Instances.showMaskRow(axisDirection, dialogElement);\n },\n showSpinner: function () {\n return this.ej2Instances.showSpinner();\n },\n sortColumn: function (columnName, direction, isMultiSort) {\n return this.ej2Instances.sortColumn(columnName, direction, isMultiSort);\n },\n startEdit: function () {\n return this.ej2Instances.startEdit();\n },\n ungroupColumn: function (columnName) {\n return this.ej2Instances.ungroupColumn(columnName);\n },\n updateCell: function (rowIndex, field, value) {\n return this.ej2Instances.updateCell(rowIndex, field, value);\n },\n updateExternalMessage: function (message) {\n return this.ej2Instances.updateExternalMessage(message);\n },\n updateRow: function (index, data) {\n return this.ej2Instances.updateRow(index, data);\n },\n updateRowValue: function (key, rowData) {\n return this.ej2Instances.updateRowValue(key, rowData);\n },\n }\n});\nexport var GridPlugin = {\n name: 'ejs-grid',\n install: function (Vue) {\n Vue.component(GridPlugin.name, GridComponent);\n Vue.component(ColumnPlugin.name, ColumnDirective);\n Vue.component(ColumnsPlugin.name, ColumnsDirective);\n Vue.component(StackedColumnPlugin.name, StackedColumnDirective);\n Vue.component(StackedColumnsPlugin.name, StackedColumnsDirective);\n Vue.component(AggregatePlugin.name, AggregateDirective);\n Vue.component(AggregatesPlugin.name, AggregatesDirective);\n Vue.component(AggregateColumnPlugin.name, AggregateColumnDirective);\n Vue.component(AggregateColumnsPlugin.name, AggregateColumnsDirective);\n }\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { EventHandler, getValue, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, extend, Browser } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport * as event from '../base/constant';\nimport { Row } from '../models/row';\nimport { RowModelGenerator } from './row-model-generator';\nimport { parentsUntil, addRemoveEventListener, findCellIndex } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * FocusStrategy class\n *\n * @hidden\n */\nvar FocusStrategy = /** @class */ (function () {\n function FocusStrategy(parent) {\n this.currentInfo = {};\n this.oneTime = true;\n this.swap = {};\n /** @hidden */\n this.isInfiniteScroll = false;\n this.forget = false;\n this.skipFocus = true;\n this.focusByClick = false;\n this.firstHeaderCellClick = false;\n this.prevIndexes = {};\n this.refMatrix = this.refreshMatrix(true);\n this.actions = ['downArrow', 'upArrow'];\n this.isVirtualScroll = false;\n this.parent = parent;\n this.rowModelGen = new RowModelGenerator(this.parent);\n this.addEventListener();\n }\n FocusStrategy.prototype.focusCheck = function (e) {\n var target = e.target;\n this.focusByClick = true;\n this.firstHeaderCellClick = true;\n this.skipFocus = target.classList.contains('e-grid');\n };\n FocusStrategy.prototype.onFocus = function (e) {\n if (this.parent.isDestroyed || Browser.isDevice || this.parent.enableVirtualization\n || this.parent.element.querySelector('.e-masked-table') || (!this.parent.isInitialLoad && e\n && e.target === this.parent.element && this.parent.element.querySelector('.e-spin-show'))) {\n return;\n }\n this.setActive(!this.parent.enableHeaderFocus && this.parent.frozenRows === 0);\n if (!this.parent.enableHeaderFocus && !this.parent.getCurrentViewRecords().length && ((this.parent.editSettings.mode !== 'Batch')\n || (this.parent.editSettings.mode === 'Batch' && this.parent.editModule && !this.parent.editModule.getBatchChanges()[literals.addedRecords].length))) {\n this.getContent().matrix.\n generate(this.rowModelGen.generateRows({ rows: [new Row({ isDataRow: true })] }), this.getContent().selector, false);\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 if (this.skipFocus && !(e && e.target === this.parent.element)) {\n this.focus(e);\n this.skipFocus = false;\n }\n };\n FocusStrategy.prototype.passiveFocus = function (e) {\n if (this.parent.isDestroyed) {\n return;\n }\n var firstHeaderCell = this.parent.getHeaderContent().querySelector('.e-headercell:not(.e-hide)');\n if (e.target === firstHeaderCell && e.relatedTarget && !parentsUntil(e.relatedTarget, 'e-grid')\n && !this.firstHeaderCellClick) {\n var firstHeaderCellIndex = [0, 0];\n if (this.active.matrix.matrix[firstHeaderCellIndex[0]][firstHeaderCellIndex[1]] === 0) {\n firstHeaderCellIndex = findCellIndex(this.active.matrix.matrix, firstHeaderCellIndex, true);\n }\n this.active.matrix.current = firstHeaderCellIndex;\n this.currentInfo.element = e.target;\n this.currentInfo.elementToFocus = e.target;\n addClass([this.currentInfo.element], ['e-focused', 'e-focus']);\n }\n this.firstHeaderCellClick = false;\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 FocusStrategy.prototype.onBlur = function (e) {\n // The below boolean condition for gantt team focus fix.\n var isGantt = parentsUntil(e.target, 'e-gantt') && e.target.classList.contains('e-rowcell')\n && (!isNullOrUndefined(e.target.nextElementSibling)\n && e.target.nextElementSibling.classList.contains('e-rowcell')) ? true : false;\n if ((this.parent.isEdit || e && (!e.relatedTarget || closest(e.relatedTarget, '.e-grid'))\n && !(this.parent.element.classList.contains('e-childgrid') && !this.parent.element.matches(':focus-within')))\n && !(!isGantt && isNullOrUndefined(e.relatedTarget) && parseInt(e.target.getAttribute('data-colindex'), 10) === 0\n && parseInt(e.target.getAttribute('index'), 10) === 0) && !(!isGantt && isNullOrUndefined(e.relatedTarget)\n && !closest(document.activeElement, '.e-grid') && !isNullOrUndefined(e['sourceCapabilities']))) {\n return;\n }\n this.removeFocus();\n this.skipFocus = true;\n this.currentInfo.skipAction = false;\n this.setLastContentCellTabIndex();\n this.setFirstFocusableTabIndex();\n this.firstHeaderCellClick = false;\n };\n /**\n * @returns {void}\n * @hidden */\n FocusStrategy.prototype.setFirstFocusableTabIndex = function () {\n var gObj = this.parent;\n gObj.element.tabIndex = -1;\n if (gObj.allowGrouping && gObj.groupSettings.showDropArea) {\n var groupModule = gObj.groupModule;\n var focusableGroupedItems = groupModule.getFocusableGroupedItems();\n if (focusableGroupedItems.length > 0) {\n groupModule.element.tabIndex = -1;\n focusableGroupedItems[0].tabIndex = 0;\n }\n else {\n groupModule.element.tabIndex = 0;\n }\n return;\n }\n if (gObj.toolbar || gObj.toolbarTemplate) {\n var toolbarElement = gObj.toolbarModule.element;\n var focusableToolbarItems = this.parent.toolbarModule.getFocusableToolbarItems();\n if (focusableToolbarItems.length > 0 && focusableToolbarItems[0].querySelector('.e-toolbar-item-focus,.e-btn,.e-input')) {\n toolbarElement.tabIndex = -1;\n focusableToolbarItems[0].querySelector('.e-toolbar-item-focus,.e-btn,.e-input').tabIndex = 0;\n }\n else {\n toolbarElement.tabIndex = 0;\n }\n return;\n }\n if (gObj.getColumns().length) {\n var firstHeaderCell = gObj.getHeaderContent().querySelector('.e-headercell:not(.e-hide)');\n firstHeaderCell.tabIndex = 0;\n this.setActive(false);\n if (!isNullOrUndefined(this.active) && (isNullOrUndefined(this.active.target) || !this.active.target.classList.contains('e-columnmenu'))) {\n var firstHeaderCellIndex = [0, 0];\n if (this.active.matrix.matrix[firstHeaderCellIndex[0]][firstHeaderCellIndex[1]] === 0) {\n firstHeaderCellIndex = findCellIndex(this.active.matrix.matrix, firstHeaderCellIndex, true);\n }\n this.active.matrix.current = firstHeaderCellIndex;\n }\n return;\n }\n };\n FocusStrategy.prototype.setLastContentCellTabIndex = function () {\n var contentTable = this.parent.getContentTable();\n if (contentTable.rows[contentTable.rows.length - 1]) {\n var lastCell = contentTable.rows[contentTable.rows.length - 1].lastElementChild;\n lastCell.tabIndex = 0;\n }\n };\n FocusStrategy.prototype.onClick = function (e, force) {\n if (parentsUntil(e.target, 'e-filterbarcell') && (parentsUntil(e.target, 'e-multiselect') ||\n e.target.classList.contains('e-input-group-icon'))) {\n return;\n }\n var isContent = !isNullOrUndefined(closest(e.target, '.' + literals.gridContent));\n var isHeader = !isNullOrUndefined(closest(e.target, '.' + literals.gridHeader));\n isContent = isContent && isHeader ? !isContent : isContent;\n if (!isContent && isNullOrUndefined(closest(e.target, '.' + literals.gridHeader)) ||\n e.target.classList.contains(literals.content) ||\n !isNullOrUndefined(closest(e.target, '.e-unboundcell'))) {\n return;\n }\n this.setActive(isContent);\n if (!isContent && isNullOrUndefined(closest(e.target, '.' + literals.gridHeader))) {\n this.clearOutline();\n return;\n }\n var beforeArgs = { cancel: false, byKey: false, byClick: !isNullOrUndefined(e.target), clickArgs: e };\n this.parent.notify(event.beforeCellFocused, beforeArgs);\n if (beforeArgs.cancel || closest(e.target, '.e-inline-edit')) {\n return;\n }\n this.setActive(isContent);\n if (this.getContent()) {\n var returnVal = this.getContent().onClick(e, force);\n if (returnVal === false) {\n return;\n }\n this.focus();\n if (this.currentInfo.element.classList.contains('e-rowcell') && e.type && e.type === 'click') {\n addClass([this.currentInfo.element], ['e-focused', 'e-focus']);\n }\n }\n };\n FocusStrategy.prototype.handleFilterNavigation = function (e, inputSelector, buttonSelector) {\n if (e.target === document.querySelector(inputSelector) && e.key === 'Tab' && e.shiftKey) {\n e.preventDefault();\n document.querySelector(buttonSelector).focus();\n }\n else if (e.target === document.querySelector(buttonSelector) && e.key === 'Tab' && !e.shiftKey &&\n document.activeElement === document.querySelector(buttonSelector)) {\n e.preventDefault();\n document.querySelector(inputSelector).focus();\n }\n };\n FocusStrategy.prototype.onKeyPress = function (e) {\n if (this.parent.allowPaging) {\n var pagerElement = this.parent.pagerModule.pagerObj.element;\n var focusablePagerElements = this.parent.pagerModule.pagerObj.getFocusablePagerElements(pagerElement, []);\n if (this.parent.childGrid && !parentsUntil(e.target, 'e-gridpager') && this.allowToPaging(e) && focusablePagerElements.length) {\n focusablePagerElements[0].tabIndex = 0;\n }\n if (this.parent.pagerModule.pagerObj.checkPagerHasFocus()) {\n if (e.action === 'shiftTab' && focusablePagerElements.length && focusablePagerElements[0] === e.target) {\n this.setActive(true);\n var lastHeaderCellIndex = [this.active.matrix.matrix.length - 1,\n this.active.matrix.matrix[this.active.matrix.matrix.length - 1].length - 1];\n if (this.active.matrix.matrix[lastHeaderCellIndex[0]][lastHeaderCellIndex[1]] === 0) {\n lastHeaderCellIndex = findCellIndex(this.active.matrix.matrix, lastHeaderCellIndex, false);\n }\n this.active.matrix.current = this.parent.editSettings.mode === 'Batch' ?\n this.isValidBatchEditCell(lastHeaderCellIndex) ? lastHeaderCellIndex :\n this.findBatchEditCell(lastHeaderCellIndex, false) : lastHeaderCellIndex;\n e.preventDefault();\n this.focus(e);\n return;\n }\n if (!(e.action === 'tab' && this.parent.element.classList.contains('e-childgrid')\n && ((!this.parent.pageSettings.pageSizes && focusablePagerElements.length\n && focusablePagerElements[focusablePagerElements.length - 1] === e.target)\n || (this.parent.pagerModule.pagerObj.getDropDownPage() === e.target)))) {\n this.parent.pagerModule.pagerObj.changePagerFocus(e);\n return;\n }\n else {\n var parentCell = parentsUntil(this.parent.element, 'e-detailcell');\n removeClass([this.parent.element], ['e-focus']);\n removeClass([parentCell], ['e-focused']);\n parentCell.tabIndex = -1;\n }\n }\n if (this.parent.pagerModule.pagerObj.element.tabIndex === 0 && (e.keyCode === 38 || (e.shiftKey && e.keyCode === 9))) {\n e.preventDefault();\n this.focus(e);\n return;\n }\n else if (this.parent.pagerModule.pagerObj.element.tabIndex === 0 && e.keyCode === 9) {\n e.preventDefault();\n this.parent.pagerModule.pagerObj.setPagerFocus();\n return;\n }\n if (this.parent.pagerModule.pagerObj.checkFirstPagerFocus()) {\n var lastRow = this.getContent().matrix.rows;\n var lastColumn = this.getContent().matrix.columns;\n this.getContent().matrix.current = [lastRow, lastColumn];\n }\n }\n if (this.parent.filterSettings.type === 'Excel') {\n this.handleFilterNavigation(e, '.e-excelfilter .e-menu-item:not(.e-disabled)', '.e-excelfilter .e-footer-content button:nth-child(2)');\n }\n if (this.parent.filterSettings.type === 'CheckBox') {\n this.handleFilterNavigation(e, '.e-searchinput.e-input', '.e-checkboxfilter .e-footer-content button:nth-child(2)');\n }\n if (this.parent.filterSettings.type === 'Menu') {\n this.handleFilterNavigation(e, '.e-flmenu .e-input-group.e-popup-flmenu', '.e-flmenu .e-footer-content button:nth-child(2)');\n }\n if (this.skipOn(e)) {\n return;\n }\n if (e.target && parentsUntil(e.target, 'e-gridcontent')) {\n var rows = [].slice.call(this.parent.getContentTable().rows);\n var lastCell = rows[rows.length - 1].lastElementChild;\n if (e.target === lastCell) {\n this.setActive(true);\n this.setLastContentCellActive();\n }\n }\n if (e.action === 'shiftTab' && e.target && (e.target === this.parent.element || parentsUntil(e.target, 'e-toolbar')\n || parentsUntil(e.target, 'e-groupdroparea'))) {\n if (e.target === this.parent.element) {\n if (this.parent.element.classList.contains('e-childgrid')) {\n this.focusOutFromChildGrid(e);\n }\n return;\n }\n if (parentsUntil(e.target, 'e-groupdroparea')) {\n if (this.parent.element.classList.contains('e-childgrid')) {\n e.preventDefault();\n this.parent.element.focus();\n }\n return;\n }\n if (parentsUntil(e.target, 'e-toolbar')) {\n if (this.parent.allowGrouping && this.parent.groupSettings.showDropArea) {\n var groupModule = this.parent.groupModule;\n var focusableGroupedItems = groupModule.getFocusableGroupedItems();\n e.preventDefault();\n if (focusableGroupedItems.length > 0) {\n focusableGroupedItems[focusableGroupedItems.length - 1].focus();\n }\n else {\n groupModule.element.focus();\n }\n }\n else if (this.parent.element.classList.contains('e-childgrid')) {\n e.preventDefault();\n this.parent.element.focus();\n }\n return;\n }\n }\n var focusFirstHeaderCell = false;\n if (e.action === 'tab' && e.target && (e.target === this.parent.element || parentsUntil(e.target, 'e-toolbar')\n || parentsUntil(e.target, 'e-groupdroparea'))) {\n if (this.parent.allowGrouping && this.parent.groupSettings.showDropArea\n && (e.target === this.parent.element || e.target.classList.contains('e-groupdroparea'))) {\n var groupModule = this.parent.groupModule;\n var focusableGroupedItems = groupModule.getFocusableGroupedItems();\n if (focusableGroupedItems.length > 0) {\n e.preventDefault();\n focusableGroupedItems[0].focus();\n return;\n }\n if (!e.target.classList.contains('e-groupdroparea')) {\n e.preventDefault();\n groupModule.element.focus();\n return;\n }\n }\n if ((this.parent.toolbar || this.parent.toolbarTemplate) && (e.target === this.parent.element\n || parentsUntil(e.target, 'e-groupdroparea')\n || e.target.classList.contains('e-toolbar'))) {\n var toolbarElement = this.parent.toolbarModule.element;\n var focusableToolbarItems = this.parent.toolbarModule.getFocusableToolbarItems();\n if (focusableToolbarItems.length > 0) {\n e.preventDefault();\n focusableToolbarItems[0].querySelector('.e-toolbar-item-focus,.e-btn,.e-input').focus();\n return;\n }\n if (!e.target.classList.contains('e-toolbar')) {\n e.preventDefault();\n toolbarElement.focus();\n return;\n }\n }\n if (e.target === this.parent.element || parentsUntil(e.target, 'e-toolbar')\n || parentsUntil(e.target, 'e-groupdroparea')) {\n focusFirstHeaderCell = true;\n }\n }\n if (focusFirstHeaderCell) {\n if (this.parent.allowGrouping && this.parent.groupSettings.columns.length === this.parent.columns.length) {\n this.setActive(true);\n }\n else {\n this.setActive(false);\n }\n this.active.matrix.current = [0, -1];\n }\n this.activeKey = e.action;\n var beforeArgs = { cancel: false, byKey: true, byClick: false, keyArgs: e };\n this.parent.notify(event.beforeCellFocused, beforeArgs);\n if (beforeArgs.cancel) {\n return;\n }\n var bValue = this.getContent().matrix.current;\n var prevBatchValue = this.active && this.active.matrix.current ?\n [this.active.matrix.current[0], this.active.matrix.current[1]] : undefined;\n this.currentInfo.outline = true;\n var swapInfo = this.getContent().jump(e.action, bValue);\n this.swap = swapInfo;\n if (swapInfo.swap && !(this.parent.editSettings.mode === 'Batch'\n && (e.action === 'tab' || e.action === 'shiftTab'))) {\n this.setActive(!swapInfo.toHeader);\n this.getContent().matrix.current = this.getContent().getNextCurrent(bValue, swapInfo, this.active, e.action);\n this.prevIndexes = {};\n }\n this.setActiveByKey(e.action, this.getContent());\n var returnVal = this.content.lastIdxCell ? false : this.getContent().onKeyPress(e);\n if (e.target && parentsUntil(e.target, 'e-gridheader')) {\n if (e.action === 'tab' && bValue.toString() === this.active.matrix.current.toString()) {\n var nextHeaderCellIndex = findCellIndex(this.active.matrix.matrix, this.active.matrix.current, true);\n var lastHeaderCellIndex = [this.active.matrix.matrix.length - 1,\n this.active.matrix.matrix[this.active.matrix.matrix.length - 1].length - 1];\n if (this.active.matrix.matrix[lastHeaderCellIndex[0]][lastHeaderCellIndex[1]] === 0) {\n lastHeaderCellIndex = findCellIndex(this.active.matrix.matrix, lastHeaderCellIndex, false);\n }\n if (this.active.matrix.current.toString() === lastHeaderCellIndex.toString() && this.content.matrix.matrix.length) {\n returnVal = true;\n this.setActive(true);\n var firstContentCellIndex = [0, 0];\n if (this.active.matrix.matrix[firstContentCellIndex[0]][firstContentCellIndex[1]] === 0) {\n firstContentCellIndex = findCellIndex(this.active.matrix.matrix, [0, 0], true);\n }\n this.active.matrix.current = this.parent.editSettings.mode === 'Batch' ?\n this.isValidBatchEditCell(firstContentCellIndex) ? firstContentCellIndex :\n this.findBatchEditCell(firstContentCellIndex, true) : firstContentCellIndex;\n }\n else if (this.active.matrix.current.toString() !== nextHeaderCellIndex.toString()) {\n this.active.matrix.current = nextHeaderCellIndex;\n }\n }\n if (e.action === 'shiftTab' && bValue.toString() === this.active.matrix.current.toString()) {\n var previousCellIndex = findCellIndex(this.active.matrix.matrix, this.active.matrix.current, false);\n if (previousCellIndex.toString() === this.active.matrix.current.toString()) {\n this.focusOutFromHeader(e);\n return;\n }\n if (this.active.matrix.current.toString() !== previousCellIndex.toString() && !returnVal) {\n returnVal = true;\n this.active.matrix.current = previousCellIndex;\n }\n }\n }\n if (e.target && parentsUntil(e.target, 'e-gridcontent')) {\n if (this.parent.editSettings.mode === 'Batch' && (e.action === 'tab' || e.action === 'shiftTab')) {\n this.active.matrix.current = this.findBatchEditCell(prevBatchValue, e.action === 'tab' ? true : false);\n if (e.action === 'tab' && prevBatchValue.toString() === this.active.matrix.current.toString()) {\n this.parent.editModule.editModule.addBatchRow = true;\n }\n }\n if (e.action === 'shiftTab' && bValue.toString() === this.active.matrix.current.toString()) {\n if (this.parent.allowGrouping && this.parent.groupSettings.columns.length === this.parent.columns.length) {\n this.focusOutFromHeader(e);\n return;\n }\n var firstContentCellIndex = [0, 0];\n if (this.active.matrix.matrix[firstContentCellIndex[0]][firstContentCellIndex[1]] === 0) {\n firstContentCellIndex = findCellIndex(this.active.matrix.matrix, [0, 0], true);\n }\n if (!returnVal && (firstContentCellIndex.toString() === this.active.matrix.current.toString()\n || (this.parent.editSettings.mode === 'Batch'\n && prevBatchValue.toString() === this.active.matrix.current.toString()))) {\n returnVal = true;\n this.setActive(false);\n this.setLastContentCellActive();\n }\n }\n }\n if (returnVal === false) {\n this.clearIndicator();\n if (e.action === 'shiftTab' && bValue.toString() === [0, 0].toString()) {\n this.parent.element.tabIndex = -1;\n }\n if (this.parent.allowPaging && !this.parent.pagerModule.pagerObj.checkPagerHasFocus() && this.allowToPaging(e)\n && bValue.toString() !== [0, 0].toString()) {\n e.preventDefault();\n if (e.keyCode === 40) {\n this.parent.pagerModule.pagerObj.setPagerContainerFocus();\n return;\n }\n else if (e.keyCode === 9) {\n this.parent.pagerModule.pagerObj.setPagerFocus();\n return;\n }\n }\n if (this.parent.element.classList.contains('e-childgrid')) {\n this.focusOutFromChildGrid(e);\n }\n return;\n }\n e.preventDefault();\n this.focus(e);\n };\n FocusStrategy.prototype.isValidBatchEditCell = function (cellIndex) {\n var cell = this.active.getTable().rows[cellIndex[0]].cells[cellIndex[1]];\n var tr = closest(cell, 'tr');\n var cellColIndex = parseInt(cell.getAttribute('data-colindex'), 10);\n var cellCol = this.parent.getColumns()[parseInt(cellColIndex.toString(), 10)];\n if (this.active.matrix.matrix[cellIndex[0]][cellIndex[1]] === 1\n && (!tr.classList.contains('e-row') || (tr.classList.contains('e-insertedrow') || !cellCol.isPrimaryKey) && cellCol.allowEditing)) {\n return true;\n }\n return false;\n };\n FocusStrategy.prototype.findBatchEditCell = function (currentCellIndex, next, limitRow) {\n var cellIndex = currentCellIndex;\n var tempCellIndex = currentCellIndex;\n var cellIndexObtain = false;\n while (!cellIndexObtain) {\n var prevTempCellIndex = tempCellIndex;\n tempCellIndex = findCellIndex(this.active.matrix.matrix, tempCellIndex, next);\n if ((prevTempCellIndex.toString() === tempCellIndex.toString())\n || (limitRow && prevTempCellIndex[0] !== tempCellIndex[0])) {\n cellIndexObtain = true;\n continue;\n }\n if (this.isValidBatchEditCell(tempCellIndex)) {\n cellIndex = tempCellIndex;\n cellIndexObtain = true;\n }\n }\n return cellIndex;\n };\n FocusStrategy.prototype.setLastContentCellActive = function () {\n var lastContentCellIndex = [this.active.matrix.matrix.length - 1,\n this.active.matrix.matrix[this.active.matrix.matrix.length - 1].length - 1];\n if (this.active.matrix.matrix[lastContentCellIndex[0]][lastContentCellIndex[1]] === 0) {\n lastContentCellIndex = findCellIndex(this.active.matrix.matrix, lastContentCellIndex, false);\n }\n this.active.matrix.current = lastContentCellIndex;\n };\n FocusStrategy.prototype.focusOutFromChildGrid = function (e) {\n var parentTable = parentsUntil(this.parent.element, 'e-table');\n var parentGrid = parentsUntil(parentTable, 'e-grid').ej2_instances[0];\n var parentCell = parentsUntil(this.parent.element, 'e-detailcell');\n var uid = parentsUntil(this.parent.element, 'e-detailrow').getAttribute('data-uid');\n var parentRows = [].slice.call(parentGrid.getContentTable().rows);\n var parentRowIndex = parentRows.map(function (m) { return m.getAttribute('data-uid'); }).indexOf(uid);\n if (e.action === 'tab' && parentRowIndex >= parentRows.length - 1) {\n return;\n }\n removeClass([this.parent.element], ['e-focus']);\n removeClass([parentCell], ['e-focused']);\n parentCell.tabIndex = -1;\n e.preventDefault();\n var nextFocusCell;\n parentGrid.focusModule.removeFocus();\n if (e.action === 'shiftTab') {\n var previousRow = parentRows[parentRowIndex - 1];\n var rowCells = previousRow.cells;\n for (var i = rowCells.length - 1; i >= 0; i--) {\n nextFocusCell = rowCells[parseInt(i.toString(), 10)];\n if (!nextFocusCell.classList.contains('e-hide')) {\n parentGrid.focusModule.active.matrix.current = [parentRowIndex - 1, i];\n break;\n }\n }\n }\n else {\n nextFocusCell = parentRows[parentRowIndex + 1].cells[0];\n parentGrid.focusModule.active.matrix.current = [parentRowIndex + 1, 0];\n }\n parentGrid.focusModule.currentInfo.element = nextFocusCell;\n parentGrid.focusModule.currentInfo.elementToFocus = nextFocusCell;\n addClass([nextFocusCell], ['e-focused', 'e-focus']);\n nextFocusCell.tabIndex = 0;\n nextFocusCell.focus();\n };\n FocusStrategy.prototype.focusOutFromHeader = function (e) {\n this.removeFocus();\n if (this.parent.toolbar || this.parent.toolbarTemplate) {\n var toolbarElement = this.parent.toolbarModule.element;\n var focusableToolbarItems = this.parent.toolbarModule.getFocusableToolbarItems();\n e.preventDefault();\n if (focusableToolbarItems.length > 0) {\n focusableToolbarItems[focusableToolbarItems.length - 1].querySelector('.e-toolbar-item-focus,.e-btn,.e-input').focus();\n }\n else {\n toolbarElement.focus();\n }\n return;\n }\n if (this.parent.allowGrouping && this.parent.groupSettings.showDropArea) {\n var groupModule = this.parent.groupModule;\n var focusableGroupedItems = groupModule.getFocusableGroupedItems();\n e.preventDefault();\n if (focusableGroupedItems.length > 0) {\n focusableGroupedItems[focusableGroupedItems.length - 1].focus();\n }\n else {\n groupModule.element.focus();\n }\n return;\n }\n if (this.parent.element.classList.contains('e-childgrid')) {\n e.preventDefault();\n this.parent.element.focus();\n }\n };\n FocusStrategy.prototype.allowToPaging = function (e) {\n if (this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.allowAdding && e.keyCode !== 40) {\n return false;\n }\n return true;\n };\n FocusStrategy.prototype.skipOn = function (e) {\n var target = e.target;\n if (!target) {\n return false;\n }\n if (this.currentInfo.skipAction) {\n this.clearIndicator();\n return true;\n }\n if (['pageUp', 'pageDown', 'altDownArrow'].indexOf(e.action) > -1) {\n this.clearIndicator();\n return true;\n }\n if (this.parent.allowGrouping) {\n var focusableGroupedItems = this.parent.groupModule.getFocusableGroupedItems();\n if (parentsUntil(e.target, 'e-groupheadercell')\n && !((e.target === focusableGroupedItems[0] && e.action === 'shiftTab')\n || (e.target === focusableGroupedItems[focusableGroupedItems.length - 1] && e.action === 'tab'))) {\n return true;\n }\n }\n if (this.parent.toolbar || this.parent.toolbarTemplate) {\n var toolbarElement = this.parent.toolbarModule.element;\n var focusableToolbarItems = toolbarElement\n .querySelectorAll('.e-toolbar-item:not(.e-overlay):not(.e-hidden)');\n if (parentsUntil(e.target, 'e-toolbar-item')\n && !(focusableToolbarItems.length > 0 && ((parentsUntil(e.target, 'e-toolbar-item') === focusableToolbarItems[0] && e.action === 'shiftTab')\n || (parentsUntil(e.target, 'e-toolbar-item') === focusableToolbarItems[focusableToolbarItems.length - 1] && e.action === 'tab')))) {\n return true;\n }\n }\n var th = closest(target, 'th') && !closest(target, 'th').tabIndex;\n if (e.target.classList.contains('e-filterbaroperator') && (e.keyCode === 13 || e.keyCode === 27)) {\n var inputTarget = closest(e.target, '.e-filterbarcell');\n inputTarget.querySelector('input').focus();\n }\n if (th && closest(document.activeElement, '.e-filterbarcell') !== null) {\n this.removeFocus();\n }\n var filterCell = closest(document.activeElement, '.e-filterbarcell') !== null;\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 return (e.action === 'delete'\n || (this.parent.editSettings.mode !== 'Batch' && (this.parent.isEdit || ['insert', 'f2'].indexOf(e.action) > -1))\n || ((filterCell && this.parent.enableHeaderFocus) || (filterCell && e.action !== 'tab' && e.action !== 'shiftTab') ||\n closest(document.activeElement, '#' + this.parent.element.id + '_searchbar') !== null\n && ['enter', 'leftArrow', 'rightArrow',\n 'shiftLeft', 'shiftRight', 'ctrlPlusA'].indexOf(e.action) > -1)\n || (closest(target, '.' + literals.gridContent) === null && closest(target, '.' + literals.gridHeader) === null\n && !(e.target === this.parent.element || parentsUntil(e.target, 'e-toolbar')\n || parentsUntil(e.target, 'e-groupdroparea')))\n || (e.action === 'space' && (!target.classList.contains(literals.gridChkBox) && closest(target, '.' + literals.gridChkBox) === null\n && closest(target, '.e-headerchkcelldiv') === null))) || closest(target, '.e-filter-popup') !== null;\n };\n FocusStrategy.prototype.focusVirtualElement = function (e) {\n var _this = this;\n if (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) {\n var data = { virtualData: {}, isAdd: false, isCancel: false };\n this.parent.notify(event.getVirtualData, data);\n var isKeyFocus = this.actions.some(function (value) { return value === _this.activeKey; });\n var isSelected = this.parent.contentModule ?\n this.parent.contentModule.selectedRowIndex > -1 : false;\n if (data.isAdd || Object.keys(data.virtualData).length || isKeyFocus || data.isCancel || isSelected) {\n this.parent.notify(event.resetVirtualFocus, { isCancel: false });\n data.isCancel = false;\n this.parent.contentModule.selectedRowIndex = -1;\n if (isKeyFocus) {\n this.activeKey = this.empty;\n this.parent.notify('virtaul-key-handler', e);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.currentInfo.elementToFocus.focus({ preventScroll: true });\n }\n else {\n if (this.isVirtualScroll || this.isInfiniteScroll) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.currentInfo.elementToFocus.focus({ preventScroll: true });\n }\n else {\n this.currentInfo.elementToFocus.focus();\n }\n }\n }\n this.isVirtualScroll = this.isInfiniteScroll = false;\n };\n FocusStrategy.prototype.getFocusedElement = function () {\n return this.currentInfo.elementToFocus;\n };\n FocusStrategy.prototype.getContent = function () {\n return this.active || this.content;\n };\n FocusStrategy.prototype.setActive = function (content) {\n this.active = content ? this.content : this.header;\n };\n FocusStrategy.prototype.setFocusedElement = function (element, e) {\n var _this = this;\n this.currentInfo.elementToFocus = element;\n setTimeout(function () {\n if (!isNullOrUndefined(_this.currentInfo.elementToFocus)) {\n if (_this.parent.enableVirtualization || _this.parent.enableInfiniteScrolling) {\n _this.focusVirtualElement(e);\n }\n else if (isNullOrUndefined(_this.parent.element.querySelector('.e-flmenu')) ||\n parentsUntil(document.activeElement, 'e-flmenu-valuediv') !== _this.parent.element.querySelector('.e-flmenu-valuediv')) {\n _this.currentInfo.elementToFocus.focus();\n }\n }\n }, 0);\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n FocusStrategy.prototype.removeFocus = function (e) {\n if (!this.currentInfo.element) {\n return;\n }\n if (this.parent.isReact && !this.parent.isEdit && this.currentInfo.element.classList.contains('e-rowcell')\n && !this.currentInfo.element.parentElement && !(this.parent.allowGrouping && this.parent.groupSettings.columns.length) &&\n this.parent.getRowByIndex(this.prevIndexes.rowIndex)) {\n var cellElem = this.parent.getCellFromIndex(this.prevIndexes.rowIndex, this.prevIndexes.cellIndex);\n this.currentInfo.element = cellElem ? cellElem : this.currentInfo.element;\n }\n removeClass([this.currentInfo.element, this.currentInfo.elementToFocus], ['e-focused', 'e-focus']);\n this.currentInfo.element.tabIndex = -1;\n };\n /**\n * @returns {void}\n * @hidden */\n FocusStrategy.prototype.addOutline = function () {\n var info = this.getContent().getFocusInfo();\n if (info.element) {\n addClass([info.element], ['e-focused']);\n addClass([info.elementToFocus], ['e-focus']);\n }\n };\n /**\n * @returns {void}\n * @hidden */\n FocusStrategy.prototype.focusHeader = function () {\n this.setActive(false);\n this.resetFocus();\n };\n /**\n * @returns {void}\n * @hidden */\n FocusStrategy.prototype.focusContent = function () {\n this.setActive(true);\n this.resetFocus();\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 FocusStrategy.prototype.addFocus = function (info, e) {\n this.currentInfo = info;\n this.currentInfo.outline = info.outline && (!isNullOrUndefined(e) || this.isVirtualScroll);\n if (this.isInfiniteScroll) {\n this.currentInfo.outline = true;\n }\n if (!info.element) {\n return;\n }\n var isFocused = info.elementToFocus.classList.contains('e-focus');\n if (isFocused) {\n return;\n }\n if (this.currentInfo.outline) {\n addClass([info.element], ['e-focused']);\n }\n addClass([info.elementToFocus], ['e-focus']);\n info.element.tabIndex = 0;\n if (!isFocused) {\n this.setFocusedElement(info.elementToFocus, e);\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, rowIndex = _a[0], cellIndex = _a[1];\n this.prevIndexes = { rowIndex: rowIndex, cellIndex: cellIndex };\n this.focusedColumnUid = this.parent.getColumnByIndex(cellIndex).uid;\n this.focusByClick = false;\n };\n FocusStrategy.prototype.refreshMatrix = function (content) {\n var _this = this;\n return function (e) {\n if (content && !_this.content) {\n _this.content = new ContentFocus(_this.parent);\n }\n if (!content && !_this.header) {\n _this.header = new HeaderFocus(_this.parent);\n }\n var cFocus = content ? _this.content : _this.header;\n var frozenRow = _this.parent.frozenRows;\n var batchLen = 0;\n if (frozenRow && _this.parent.editSettings.mode === 'Batch') {\n batchLen = _this.parent.getHeaderContent().querySelectorAll('.e-insertedrow').length +\n _this.parent.getHeaderContent().querySelectorAll('.e-hiddenrow').length;\n }\n if (_this.parent.groupSettings.columns.length && frozenRow && content) {\n frozenRow = 0;\n for (var i = 0; i < e.rows.length; i++) {\n frozenRow++;\n if (e.rows[parseInt(i.toString(), 10)].index + 1 === _this.parent.frozenRows) {\n break;\n }\n }\n }\n var rows = content ? e.rows.slice(frozenRow + batchLen) : e.rows;\n var updateRow = content ? e.rows.slice(0, frozenRow + batchLen) : e.rows;\n if (_this.parent.isCollapseStateEnabled() && content) {\n rows = rows.filter(function (x) { return x.visible !== false; });\n }\n var isRowTemplate = !isNullOrUndefined(_this.parent.rowTemplate);\n if (frozenRow && ((_this.parent.editSettings.mode === 'Batch' && content && (e.name === 'batchDelete' || e.name === 'batchAdd' ||\n e.name === 'batchCancel' || (e.args && (e.args.requestType === 'batchsave')))) ||\n (e.args && (e.args.requestType === 'delete' || e.args.requestType === 'save')))) {\n var matrixcs = _this.header.matrix.matrix;\n var hdrLen = _this.parent.headerModule.rows.length;\n matrixcs.splice(hdrLen, matrixcs.length - hdrLen);\n }\n var matrix = cFocus.matrix.generate(updateRow, cFocus.selector, isRowTemplate);\n cFocus.matrix.generate(rows, cFocus.selector, isRowTemplate);\n if (!(_this.parent.isFrozenGrid() && (e.args && (e.args.requestType === 'sorting'\n || e.args.requestType === 'batchsave' || e.args.requestType === 'paging'))) ||\n (frozenRow && _this.parent.editSettings.mode === 'Batch' && content && (e.name === 'batchDelete' || e.name === 'batchAdd' ||\n e.name === 'batchCancel' || e.args.requestType === 'batchsave'\n || e.name === 'batchAdd' || e.name === 'batchCancel'))) {\n cFocus.generateRows(updateRow, {\n matrix: matrix, handlerInstance: _this.header\n });\n }\n if (!Browser.isDevice && e && e.args) {\n if (!_this.focusByClick && e.args.requestType === 'paging' && !_this.parent.pagerModule.pagerObj.checkPagerHasFocus()) {\n _this.skipFocus = false;\n _this.parent.element.focus();\n }\n if (e.args.requestType === 'grouping') {\n _this.skipFocus = true;\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 if (bool) {\n _this.content.matrix.current[0] = index_1;\n _this.content.matrix.current[1] = _this.parent.getColumnIndexByUid(_this.focusedColumnUid) || 0;\n var focusElement = _this.getContent().getFocusInfo().elementToFocus;\n if (focusElement) {\n var cellPosition = focusElement.getBoundingClientRect();\n var gridPosition = _this.parent.element.getBoundingClientRect();\n if (cellPosition.top >= 0 && cellPosition.left >= 0 &&\n cellPosition.right <= Math.min(gridPosition.right, window.innerWidth ||\n document.documentElement.clientWidth) &&\n cellPosition.bottom <= Math.min(gridPosition.bottom, window.innerHeight ||\n document.documentElement.clientHeight)) {\n _this.isVirtualScroll = true;\n _this.focus();\n }\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 if (focusElement) {\n focusElement.focus();\n }\n }\n }\n if (e && e.args && e.args.requestType === 'infiniteScroll') {\n _this.isInfiniteScroll = true;\n }\n };\n };\n FocusStrategy.prototype.addEventListener = function () {\n var _this = this;\n if (this.parent.isDestroyed) {\n return;\n }\n EventHandler.add(this.parent.element, 'mousedown', this.focusCheck, this);\n EventHandler.add(this.parent.element, 'touchstart', this.focusCheck, this);\n EventHandler.add(this.parent.element, 'focus', this.onFocus, this);\n this.parent.element.addEventListener('focus', this.passiveHandler = function (e) { return _this.passiveFocus(e); }, true);\n EventHandler.add(this.parent.element, 'focusout', this.onBlur, this);\n this.evtHandlers = [{ event: event.keyPressed, handler: this.onKeyPress },\n { event: event.click, handler: this.onClick },\n { event: event.contentReady, handler: this.refMatrix },\n { event: event.partialRefresh, handler: this.refMatrix },\n { event: event.refreshExpandandCollapse, handler: this.refMatrix },\n { event: event.headerRefreshed, handler: this.refreshMatrix() },\n { event: event.closeEdit, handler: this.restoreFocus },\n { event: event.restoreFocus, handler: this.restoreFocus },\n { event: 'start-edit', handler: this.clearIndicator },\n { event: 'start-add', handler: this.clearIndicator },\n { event: 'sorting-complete', handler: this.restoreFocus },\n { event: 'filtering-complete', handler: this.filterfocus },\n { event: 'grouping-complete', handler: this.restoreFocusWithAction },\n { event: 'ungrouping-complete', handler: this.restoreFocusWithAction },\n { event: event.batchAdd, handler: this.refMatrix },\n { event: event.batchCancel, handler: this.refMatrix },\n { event: event.batchDelete, handler: this.refMatrix },\n { event: event.detailDataBound, handler: this.refMatrix },\n { event: event.onEmpty, handler: this.refMatrix },\n { event: event.cellFocused, handler: this.internalCellFocus }];\n addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n };\n FocusStrategy.prototype.filterfocus = function () {\n if (this.parent.filterSettings.type !== 'FilterBar') {\n this.restoreFocus();\n }\n };\n FocusStrategy.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n EventHandler.remove(this.parent.element, 'mousedown', this.focusCheck);\n EventHandler.remove(this.parent.element, 'touchstart', this.focusCheck);\n EventHandler.remove(this.parent.element, 'focus', this.onFocus);\n EventHandler.remove(this.parent.element, 'focusout', this.onBlur);\n this.parent.element.removeEventListener('focus', this.passiveHandler, true);\n addRemoveEventListener(this.parent, this.evtHandlers, false);\n };\n FocusStrategy.prototype.destroy = function () {\n this.removeEventListener();\n };\n FocusStrategy.prototype.restoreFocus = function () {\n var groupModule = this.parent.groupModule;\n if (this.parent.allowGrouping && groupModule && (groupModule.groupSortFocus || groupModule.groupTextFocus)) {\n groupModule.groupSortFocus = false;\n groupModule.groupTextFocus = false;\n return;\n }\n this.firstHeaderCellClick = true;\n this.addFocus(this.getContent().getFocusInfo());\n };\n FocusStrategy.prototype.restoreFocusWithAction = function (e) {\n if (!this.parent.enableInfiniteScrolling) {\n var matrix = this.getContent().matrix;\n var current = matrix.current;\n switch (e.requestType) {\n case 'grouping':\n case 'ungrouping':\n current[1] = current.length &&\n !this.parent.groupSettings.showGroupedColumn && !isNullOrUndefined(matrix.matrix[current[0]]) ?\n matrix.matrix[current[0]].indexOf(1) : e.requestType === 'grouping' ? current[1] + 1 : current[1] - 1;\n break;\n }\n this.getContent().matrix.current = current;\n var groupModule = this.parent.groupModule;\n if (this.parent.allowGrouping && groupModule && groupModule.groupCancelFocus) {\n var focusableGroupedItems = groupModule.getFocusableGroupedItems();\n if (focusableGroupedItems.length) {\n if (focusableGroupedItems[0].parentElement.getAttribute('ej-mappingname') === e.columnName) {\n focusableGroupedItems[3].focus();\n }\n else {\n focusableGroupedItems[0].focus();\n }\n }\n else {\n groupModule.element.focus();\n }\n groupModule.groupCancelFocus = false;\n return;\n }\n this.addFocus(this.getContent().getFocusInfo());\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 FocusStrategy.prototype.clearIndicator = function () {\n if (!this.currentInfo.element || !this.currentInfo.elementToFocus) {\n return;\n }\n removeClass([this.currentInfo.element, this.currentInfo.elementToFocus], ['e-focus', 'e-focused']);\n };\n FocusStrategy.prototype.getPrevIndexes = function () {\n var forget = this.forget;\n this.forget = false;\n return forget || !Object.keys(this.prevIndexes).length ? { rowIndex: null, cellIndex: null } : this.prevIndexes;\n };\n FocusStrategy.prototype.forgetPrevious = function () {\n this.forget = true;\n };\n FocusStrategy.prototype.setActiveByKey = function (action, active) {\n if (this.parent.frozenRows === 0) {\n return;\n }\n // eslint-disable-next-line prefer-const\n var info;\n var actions = {\n 'home': function () { return ({ toHeader: !info.isContent, toFrozen: true }); },\n 'end': function () { return ({ toHeader: !info.isContent, toFrozen: false }); },\n 'ctrlHome': function () { return ({ toHeader: true, toFrozen: false }); },\n 'ctrlEnd': function () { return ({ toHeader: false, toFrozen: false }); }\n };\n if (!(action in actions)) {\n return;\n }\n info = active.getInfo();\n var swap = actions[\"\" + action]();\n this.setActive(!swap.toHeader);\n this.getContent().matrix.current = active.matrix.current;\n };\n FocusStrategy.prototype.internalCellFocus = function (e) {\n if (!(e.byKey && e.container.isContent && e.keyArgs.action === 'enter'\n && (e.parent.classList.contains('e-detailcell') ||\n e.parent.classList.contains('e-unboundcell')))) {\n return;\n }\n this.clearIndicator();\n var focusEle = this.getContent().getFocusable(this.getFocusedElement());\n this.setFocusedElement(focusEle);\n this.currentInfo.skipAction = true;\n };\n return FocusStrategy;\n}());\nexport { FocusStrategy };\n/**\n * Create matrix from row collection which act as mental model for cell navigation\n *\n * @hidden\n */\nvar Matrix = /** @class */ (function () {\n function Matrix() {\n this.matrix = [];\n this.current = [];\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[parseInt(rowIndex.toString(), 10)] = this.matrix[parseInt(rowIndex.toString(), 10)] || [];\n this.matrix[parseInt(rowIndex.toString(), 10)][parseInt(columnIndex.toString(), 10)] = allow ? 1 : 0;\n };\n Matrix.prototype.get = function (rowIndex, columnIndex, navigator, action, validator) {\n var tmp = columnIndex;\n if (rowIndex + navigator[0] < 0) {\n return [rowIndex, columnIndex];\n }\n rowIndex = Math.max(0, Math.min(rowIndex + navigator[0], this.rows));\n var emptyTable = true;\n if (isNullOrUndefined(this.matrix[parseInt(rowIndex.toString(), 10)])) {\n return null;\n }\n columnIndex = Math.max(0, Math.min(columnIndex + navigator[1], this.matrix[parseInt(rowIndex.toString(), 10)].length - 1));\n if (tmp + navigator[1] > this.matrix[parseInt(rowIndex.toString(), 10)].length - 1\n && validator(rowIndex, columnIndex, action)) {\n return [rowIndex, tmp];\n }\n var first = this.first(this.matrix[parseInt(rowIndex.toString(), 10)], columnIndex, navigator, true, action);\n columnIndex = first === null ? tmp : first;\n var val = getValue(rowIndex + \".\" + columnIndex, this.matrix);\n if (rowIndex === this.rows && (action === 'downArrow' || action === 'enter')) {\n navigator[0] = -1;\n }\n if (first === null) {\n for (var i = 0; i < this.rows; i++) {\n if (this.matrix[parseInt(i.toString(), 10)].some(function (v) { return v === 1; })) {\n emptyTable = false;\n break;\n }\n }\n if (emptyTable) {\n rowIndex = this.current.length ? this.current[0] : 0;\n return [rowIndex, columnIndex];\n }\n }\n return this.inValid(val) || !validator(rowIndex, columnIndex, action) ?\n this.get(rowIndex, tmp, navigator, action, validator) : [rowIndex, columnIndex];\n };\n Matrix.prototype.first = function (vector, index, navigator, moveTo, action) {\n if (((index < 0 || index === vector.length) && this.inValid(vector[parseInt(index.toString(), 10)])\n && (action !== 'upArrow' && action !== 'downArrow')) || !vector.some(function (v) { return v === 1; })) {\n return null;\n }\n return !this.inValid(vector[parseInt(index.toString(), 10)]) ? index :\n this.first(vector, (['upArrow', 'downArrow', 'shiftUp', 'shiftDown'].indexOf(action) !== -1) ? moveTo ? 0 : ++index : index + navigator[1], navigator, false, action);\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[parseInt(rowIndex.toString(), 10)].length - 1));\n this.current = [rowIndex, columnIndex];\n };\n Matrix.prototype.generate = function (rows, selector, isRowTemplate) {\n this.rows = rows.length - 1;\n this.matrix = [];\n for (var i = 0; i < rows.length; i++) {\n var cells = rows[parseInt(i.toString(), 10)].cells.filter(function (c) { return c.isSpanned !== true; });\n this.columns = Math.max(cells.length - 1, this.columns | 0);\n var incrementNumber = 0;\n for (var j = 0; j < cells.length; j++) {\n if (cells[parseInt(j.toString(), 10)].column && cells[parseInt(j.toString(), 10)].column.columns) {\n incrementNumber = this.columnsCount(cells[parseInt(j.toString(), 10)].column.columns, incrementNumber);\n }\n else {\n incrementNumber++;\n }\n this.set(i, j, rows[parseInt(i.toString(), 10)].visible === false ?\n false : selector(rows[parseInt(i.toString(), 10)], cells[parseInt(j.toString(), 10)], isRowTemplate));\n }\n this.columns = Math.max(incrementNumber - 1, this.columns | 0);\n }\n return this.matrix;\n };\n Matrix.prototype.columnsCount = function (rowColumns, currentColumnCount) {\n var columns = rowColumns;\n var incrementNumber = currentColumnCount;\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].columns) {\n incrementNumber = this.columnsCount(columns[parseInt(i.toString(), 10)].columns, incrementNumber);\n }\n else {\n incrementNumber++;\n }\n }\n return incrementNumber;\n };\n Matrix.prototype.inValid = function (value) {\n return value === 0 || value === undefined;\n };\n return Matrix;\n}());\nexport { Matrix };\n/**\n * @hidden\n */\nvar ContentFocus = /** @class */ (function () {\n function ContentFocus(parent) {\n var _this = this;\n this.matrix = new Matrix();\n this.lastIdxCell = false;\n this.parent = parent;\n this.keyActions = {\n 'rightArrow': [0, 1],\n 'tab': [0, 1],\n 'leftArrow': [0, -1],\n 'shiftTab': [0, -1],\n 'upArrow': [-1, 0],\n 'downArrow': [1, 0],\n 'shiftUp': [-1, 0],\n 'shiftDown': [1, 0],\n 'shiftRight': [0, 1],\n 'shiftLeft': [0, -1],\n 'enter': [1, 0],\n 'shiftEnter': [-1, 0]\n };\n 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 ContentFocus.prototype.getTable = function () {\n return (this.parent.getContentTable());\n };\n ContentFocus.prototype.onKeyPress = function (e) {\n var isMacLike = /(Mac)/i.test(navigator.platform);\n if (isMacLike && e.metaKey) {\n if (e.action === 'home') {\n e.action = 'ctrlHome';\n }\n else if (e.action === 'end') {\n e.action = 'ctrlEnd';\n }\n else if (['downArrow', 'upArrow', 'leftArrow', 'rightArrow'].indexOf(e.action) !== -1) {\n return;\n }\n }\n var navigators = this.keyActions[e.action];\n var current = this.getCurrentFromAction(e.action, navigators, e.action in this.keyActions, e);\n if (!current) {\n return;\n }\n if (((['tab', 'shiftTab'].indexOf(e.action) > -1 && this.matrix.current || []).toString() === current.toString())\n || (this.parent.allowPaging && !this.parent.pagerModule.pagerObj.checkPagerHasFocus()\n && this.matrix.current[0] === this.matrix.rows && ((this.parent.editSettings.mode === 'Batch'\n && this.parent.editSettings.allowAdding && e.keyCode === 40) || (e.keyCode === 40)))) {\n if (current.toString() === [this.matrix.rows, this.matrix.columns].toString() ||\n current.toString() === [0, 0].toString() || (this.matrix.current[0] === this.matrix.rows &&\n this.matrix.current.toString() === current.toString()) || (this.parent.allowGrouping &&\n this.parent.infiniteScrollSettings.enableCache && current.toString() === [0, 1].toString())) {\n return false;\n }\n else {\n current = this.editNextRow(current[0], current[1], e.action);\n }\n }\n this.matrix.select(current[0], current[1]);\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[parseInt(rowIndex.toString(), 10)].cells[parseInt(cellIndex.toString(), 10)];\n if (action === 'tab' && editNextRow) {\n rowIndex++;\n var index = (this.getTable().rows[parseInt(rowIndex.toString(), 10)].getElementsByClassName('e-indentcell').length +\n this.getTable().rows[parseInt(rowIndex.toString(), 10)].getElementsByClassName('e-detailrowcollapse').length);\n cellIndex = visibleIndex + index;\n }\n if (action === 'shiftTab' && editNextRow) {\n rowIndex--;\n cellIndex = gObj.getColumnIndexByField(gObj.getVisibleColumns()[gObj.getVisibleColumns().length - 1].field);\n }\n return !cell.classList.contains(literals.rowCell) && !cell.classList.contains('e-headercell') &&\n !cell.classList.contains('e-groupcaption') && !cell.classList.contains('e-filterbarcell') ?\n this.editNextRow(rowIndex, cellIndex, action) : [rowIndex, cellIndex];\n };\n ContentFocus.prototype.getCurrentFromAction = function (action, navigator, isPresent, e) {\n if (navigator === void 0) { navigator = [0, 0]; }\n if (!isPresent && !this.indexesByKey(action) || (this.matrix.current.length === 0)) {\n return null;\n }\n if (!this.shouldFocusChange(e)) {\n return this.matrix.current;\n }\n // eslint-disable-next-line\n var _a = this.indexesByKey(action) || this.matrix.current.concat(navigator), rowIndex = _a[0], cellIndex = _a[1], rN = _a[2], cN = _a[3];\n if (this.parent.allowGrouping && this.parent.groupSettings.columns.length && this.parent.aggregates.length && action === 'enter') {\n for (var i = rowIndex; i < this.matrix.matrix.length; i++) {\n var row = this.getTable().rows[i + 1];\n if (row && row.cells[parseInt(cellIndex.toString(), 10)] && row.cells[parseInt(cellIndex.toString(), 10)].classList.contains('e-rowcell')) {\n return [i + 1, cellIndex];\n }\n if (i === this.matrix.matrix.length - 1) {\n return [rowIndex, cellIndex];\n }\n }\n }\n if (action === 'ctrlEnd' || action === 'end') {\n var lastContentCellIndex = [this.matrix.matrix.length - 1,\n this.matrix.matrix[this.matrix.matrix.length - 1].length - 1];\n if (action === 'end') {\n lastContentCellIndex = [rowIndex, this.matrix.matrix[parseInt(rowIndex.toString(), 10)].length - 1];\n }\n if (this.matrix.matrix[lastContentCellIndex[0]][lastContentCellIndex[1]] === 0) {\n lastContentCellIndex = findCellIndex(this.matrix.matrix, lastContentCellIndex, false);\n }\n rowIndex = lastContentCellIndex[0];\n cellIndex = lastContentCellIndex[1] + 1;\n }\n var current = this.matrix.get(rowIndex, cellIndex, [rN, cN], action, this.validator());\n return current;\n };\n ContentFocus.prototype.onClick = function (e, force) {\n var target = e.target;\n this.target = target;\n target = (target.classList.contains(literals.rowCell) ? target : closest(target, 'td'));\n target = target ? target : closest(e.target, 'td.e-detailrowcollapse')\n || closest(e.target, 'td.e-detailrowexpand');\n target = closest(e.target, 'td.e-detailcell') ?\n isNullOrUndefined(closest(closest(e.target, '.e-grid'), 'td.e-detailcell')) ? null : target : target;\n target = target && closest(target, 'table').classList.contains(literals.table) ? target : null;\n if (!target) {\n return false;\n }\n var _a = [target.parentElement.rowIndex, target.cellIndex], rowIndex = _a[0], cellIndex = _a[1];\n var _b = this.matrix.current, oRowIndex = _b[0], oCellIndex = _b[1];\n var val = getValue(rowIndex + \".\" + cellIndex, this.matrix.matrix);\n if (this.matrix.inValid(val) || (!force && oRowIndex === rowIndex && oCellIndex === cellIndex) ||\n (!parentsUntil(e.target, literals.rowCell) && !parentsUntil(e.target, 'e-groupcaption')\n && !parentsUntil(e.target, 'e-recordpluscollapse') && !parentsUntil(e.target, 'e-recordplusexpand')\n && !parentsUntil(e.target, 'e-detailrowcollapse') && !parentsUntil(e.target, 'e-detailrowexpand')\n && !parentsUntil(e.target, 'e-templatecell'))) {\n return false;\n }\n this.matrix.select(rowIndex, cellIndex);\n };\n ContentFocus.prototype.getFocusInfo = function () {\n var info = {};\n var _a = this.matrix.current, _b = _a[0], rowIndex = _b === void 0 ? 0 : _b, _c = _a[1], cellIndex = _c === void 0 ? 0 : _c;\n this.matrix.current = [rowIndex, cellIndex];\n info.element = !isNullOrUndefined(this.getTable().rows[parseInt(rowIndex.toString(), 10)]) ?\n this.getTable().rows[parseInt(rowIndex.toString(), 10)].cells[parseInt(cellIndex.toString(), 10)] : null;\n if (!info.element) {\n return info;\n }\n info.elementToFocus = !info.element.classList.contains('e-unboundcell') && !info.element.classList.contains('e-detailcell')\n ? this.getFocusable(info.element) : info.element;\n info.elementToFocus = info.element.classList.contains('e-detailcell') && info.element.querySelector('.e-childgrid')\n ? info.element.querySelector('.e-childgrid') : info.elementToFocus;\n info.outline = true;\n info.uid = info.element.parentElement.getAttribute('data-uid');\n return info;\n };\n ContentFocus.prototype.getFocusable = function (element) {\n var query = 'button, [href], input:not([type=\"hidden\"]), select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n var isTemplate = !isNullOrUndefined(closest(element, '.e-templatecell'));\n if (this.parent.isEdit) {\n query = 'input:not([type=\"hidden\"]), select:not([aria-hidden=\"true\"]), textarea';\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 return child.length ? isTemplate && child.length > 1 ? this.target ? this.target : element : child[0] : element;\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))\n || (row.isDataRow && cell.cellType === CellType.DetailExpand && isNullOrUndefined(cell.visible))\n || (!row.isDataRow && types.indexOf(cell.cellType) > -1\n && !((cell.cellType === CellType.GroupSummary || cell.cellType === CellType.CaptionSummary)\n && !(cell.isDataCell && cell.visible)))\n || (cell.column && cell.visible && cell.column.type === 'checkbox')\n || (cell.cellType === CellType.CommandColumn)\n || (row.isDataRow && isRowTemplate))\n && !(row.edit === 'delete' && row.isDirty);\n };\n ContentFocus.prototype.nextRowFocusValidate = function (index) {\n var lastIndex = index;\n for (var i = index, len = this.matrix.rows; i <= len; i++) {\n if (this.matrix.matrix[parseInt(index.toString(), 10)].indexOf(1) === -1) {\n index = index + 1;\n }\n else {\n return index;\n }\n }\n this.lastIdxCell = true;\n return lastIndex;\n };\n ContentFocus.prototype.previousRowFocusValidate = function (index) {\n var firstIndex = index;\n for (var i = index, len = 0; i >= len; i--) {\n if (this.matrix.matrix[parseInt(index.toString(), 10)].indexOf(1) === -1) {\n index = index - 1;\n if (index < 0) {\n this.lastIdxCell = true;\n return firstIndex;\n }\n }\n else {\n return index;\n }\n }\n return firstIndex;\n };\n ContentFocus.prototype.jump = function (action, current) {\n this.lastIdxCell = false;\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'shiftEnter';\n var headerSwap = (action === 'upArrow' || enterFrozen) && current[0] === 0;\n if (action === 'tab' && this.matrix.matrix.length &&\n current[1] === this.matrix.matrix[current[0]].lastIndexOf(1) && this.matrix.matrix.length - 1 !== current[0]) {\n this.matrix.current[0] = this.nextRowFocusValidate(this.matrix.current[0] + 1);\n this.matrix.current[1] = -1;\n }\n if (action === 'shiftTab' &&\n current[0] !== 0 && this.matrix.matrix[current[0]].indexOf(1) === current[1]) {\n this.matrix.current[0] = this.previousRowFocusValidate(this.matrix.current[0] - 1);\n this.matrix.current[1] = this.matrix.matrix[current[0]].length;\n }\n var isHeaderFocus = false;\n var row = parentsUntil(document.activeElement, 'e-row');\n if ((this.parent.enableVirtualization || this.parent.infiniteScrollSettings.enableCache)\n && !isNullOrUndefined(row) && row.classList.contains(literals.row)) {\n var rowIndex = parseInt(row.getAttribute(literals.dataRowIndex), 10);\n isHeaderFocus = rowIndex > 0;\n }\n var info = {\n swap: !isHeaderFocus ? ((action === 'upArrow' || enterFrozen) && current[0] === 0) : false,\n toHeader: headerSwap\n };\n return info;\n };\n ContentFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current = [];\n if (action === 'rightArrow' || action === 'tab') {\n current[0] = previous[0];\n current[1] = -1;\n }\n if (action === 'downArrow' || action === 'enter') {\n current[0] = -1;\n current[1] = previous[1];\n }\n return current;\n };\n ContentFocus.prototype.generateRows = function (rows, optionals) {\n var _a;\n var matrix = optionals.matrix, 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 handlerInstance.matrix.rows = defaultLen;\n (_a = handlerInstance.matrix.matrix).push.apply(_a, matrix);\n handlerInstance.matrix.rows += matrix.length;\n };\n ContentFocus.prototype.getInfo = function (e) {\n var info = this.getFocusInfo();\n var _a = this.matrix.current, rIndex = _a[0], cIndex = _a[1];\n var isData = info.element.classList.contains(literals.rowCell);\n var isSelectable = isData || (e && e.action !== 'enter' && (info.element.classList.contains('e-detailrowcollapse')\n || info.element.classList.contains('e-detailrowexpand')));\n // eslint-disable-next-line\n var _b = [Math.min(parseInt(info.element.parentElement.getAttribute(literals.dataRowIndex), 10), rIndex),\n Math.min(parseInt(info.element.getAttribute(literals.dataColIndex), 10), cIndex)], rowIndex = _b[0], cellIndex = _b[1];\n if (this.parent.allowGrouping && this.parent.groupSettings.enableLazyLoading && isData) {\n rowIndex = this.parent.getDataRows().indexOf(info.element.parentElement);\n }\n return { isContent: true, isDataCell: isData, indexes: [rowIndex, cellIndex], isSelectable: isSelectable };\n };\n ContentFocus.prototype.validator = function () {\n var table = this.getTable();\n return function (rowIndex, cellIndex, action) {\n if (!isNullOrUndefined(table.rows[parseInt(rowIndex.toString(), 10)])) {\n var cell = void 0;\n cellIndex = table.querySelector('.e-emptyrow') ? 0 : cellIndex;\n if (table.rows[parseInt(rowIndex.toString(), 10)].cells[0].classList.contains('e-editcell')) {\n cell = table.rows[parseInt(rowIndex.toString(), 10)].cells[0].querySelectorAll('td')[parseInt(cellIndex.toString(), 10)];\n }\n else {\n cell = table.rows[parseInt(rowIndex.toString(), 10)].cells[parseInt(cellIndex.toString(), 10)];\n }\n var isCellWidth = cell.getBoundingClientRect().width !== 0;\n if (action === 'enter' || action === 'shiftEnter') {\n return isCellWidth && cell.classList.contains(literals.rowCell);\n }\n if ((action === 'shiftUp' || action === 'shiftDown') && cell.classList.contains(literals.rowCell)) {\n return isCellWidth;\n }\n else if (action !== 'shiftUp' && action !== 'shiftDown') {\n return isCellWidth;\n }\n }\n return false;\n };\n };\n ContentFocus.prototype.shouldFocusChange = function (e) {\n var _a = this.matrix.current, _b = _a[0], rIndex = _b === void 0 ? -1 : _b, _c = _a[1], cIndex = _c === void 0 ? -1 : _c;\n if (rIndex < 0 || cIndex < 0) {\n return true;\n }\n var cell = getValue(rIndex + \".cells.\" + cIndex, this.getTable().rows);\n if (!cell) {\n return true;\n }\n return e.action === 'enter' || e.action === 'shiftEnter' ?\n cell.classList.contains(literals.rowCell) && !cell.classList.contains('e-unboundcell')\n || cell.classList.contains('e-editedbatchcell') && !cell.classList.contains('e-detailcell') : true;\n };\n ContentFocus.prototype.getGridSeletion = function () {\n return this.parent.allowSelection && this.parent.selectionSettings.allowColumnSelection;\n };\n return ContentFocus;\n}());\nexport { ContentFocus };\n/**\n * @hidden\n */\nvar HeaderFocus = /** @class */ (function (_super) {\n __extends(HeaderFocus, _super);\n function HeaderFocus(parent) {\n return _super.call(this, parent) || this;\n }\n HeaderFocus.prototype.getTable = function () {\n return (this.parent.getHeaderTable());\n };\n HeaderFocus.prototype.onClick = function (e) {\n var target = e.target;\n this.target = target;\n target = (target.classList.contains('e-headercell') ? target : closest(target, 'th'));\n if (!target && this.parent.frozenRows !== 0) {\n target = (e.target.classList.contains(literals.rowCell) ? e.target :\n closest(e.target, 'td'));\n }\n if (e.target.classList.contains('e-columnheader') ||\n e.target.querySelector('.e-stackedheadercell')) {\n return false;\n }\n if (!target) {\n return;\n }\n var _a = [target.parentElement.rowIndex, target.cellIndex], rowIndex = _a[0], cellIndex = _a[1];\n var val = getValue(rowIndex + \".\" + cellIndex, this.matrix.matrix);\n if (this.matrix.inValid(val)) {\n return false;\n }\n this.matrix.select(target.parentElement.rowIndex, target.cellIndex);\n };\n HeaderFocus.prototype.getFocusInfo = function () {\n var info = {};\n var _a = this.matrix.current, _b = _a[0], rowIndex = _b === void 0 ? 0 : _b, _c = _a[1], cellIndex = _c === void 0 ? 0 : _c;\n info.element = this.getTable().rows[parseInt(rowIndex.toString(), 10)].cells[parseInt(cellIndex.toString(), 10)];\n if (!isNullOrUndefined(info.element)) {\n info.elementToFocus = this.getFocusable(info.element);\n info.outline = !info.element.classList.contains('e-filterbarcell');\n }\n return info;\n };\n HeaderFocus.prototype.selector = function (row, cell) {\n return (cell.visible && (cell.column.field !== undefined || cell.isTemplate || !isNullOrUndefined(cell.column.template)\n || !isNullOrUndefined(cell.column.commands))) || cell.column.type === 'checkbox' || cell.cellType === CellType.StackedHeader;\n };\n HeaderFocus.prototype.jump = function (action, current) {\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'enter';\n var isLastCell;\n var lastRow;\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 if (isLastCell) {\n if (!lastRow) {\n this.matrix.current[0] = this.matrix.current[0] + 1;\n }\n else {\n this.matrix.current[0] = 0;\n }\n this.matrix.current[1] = -1;\n }\n }\n return {\n swap: ((action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1) ||\n (action === 'tab' && lastRow && isLastCell)\n };\n };\n HeaderFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current1 = [];\n if (action === 'rightArrow' || (action === 'shiftRight' && this.getGridSeletion()) || action === 'tab') {\n current1[0] = previous[0];\n current1[1] = -1;\n }\n if (action === 'upArrow' || action === 'shiftEnter') {\n current1[0] = this.matrix.matrix.length;\n current1[1] = previous[1];\n }\n return current1;\n };\n HeaderFocus.prototype.generateRows = function (rows) {\n var length = this.matrix.matrix.length;\n if (this.parent.allowFiltering && this.parent.filterSettings.type === 'FilterBar') {\n this.matrix.rows = ++this.matrix.rows;\n var cells = rows[0].cells;\n var incrementNumber = 0;\n for (var i = 0; i < cells.length; i++) {\n if (cells[parseInt(i.toString(), 10)].column && cells[parseInt(i.toString(), 10)].column.columns) {\n incrementNumber = this.checkFilterColumn(cells[parseInt(i.toString(), 10)].column.columns, length, incrementNumber);\n }\n else {\n this.matrix.set(length, incrementNumber, cells[parseInt(i.toString(), 10)].visible && cells[parseInt(i.toString(), 10)].column.allowFiltering !== false);\n incrementNumber++;\n }\n }\n }\n };\n HeaderFocus.prototype.checkFilterColumn = function (rowColumns, rowIndex, columnIndex) {\n var columns = rowColumns;\n var incrementNumber = columnIndex;\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].columns) {\n incrementNumber = this.checkFilterColumn(columns[parseInt(i.toString(), 10)].columns, rowIndex, incrementNumber);\n }\n else {\n this.matrix.set(rowIndex, incrementNumber, columns[parseInt(i.toString(), 10)].visible && columns[parseInt(i.toString(), 10)].allowFiltering !== false);\n incrementNumber++;\n }\n }\n return incrementNumber;\n };\n HeaderFocus.prototype.getInfo = function (e) {\n return extend(_super.prototype.getInfo.call(this, e), { isContent: false, isHeader: true });\n };\n HeaderFocus.prototype.validator = function () {\n return function () { return true; };\n };\n HeaderFocus.prototype.shouldFocusChange = function (e) {\n var _a = this.matrix.current, rowIndex = _a[0], columnIndex = _a[1];\n if (rowIndex < 0 || columnIndex < 0) {\n return true;\n }\n var cell = getValue(rowIndex + \".cells.\" + columnIndex, this.getTable().rows);\n if (!cell) {\n return true;\n }\n return e.action === 'enter' || e.action === 'altDownArrow' ? !cell.classList.contains('e-headercell') : true;\n };\n HeaderFocus.prototype.getHeaderType = function () {\n return 'HeaderFocus';\n };\n return HeaderFocus;\n}(ContentFocus));\nexport { HeaderFocus };\n/** @hidden */\nvar SearchBox = /** @class */ (function () {\n function SearchBox(searchBox, serviceLocator) {\n this.searchBox = searchBox;\n this.serviceLocator = serviceLocator;\n this.l10n = this.serviceLocator.getService('localization');\n }\n SearchBox.prototype.searchFocus = function (args) {\n args.target.parentElement.classList.add('e-input-focus');\n if (args.target.classList.contains('e-input') && args.target.classList.contains('e-search') && args.target.value) {\n var sIcon = args.target.parentElement.querySelector('.e-sicon');\n sIcon.classList.add('e-clear-icon');\n sIcon.setAttribute('title', this.l10n.getConstant('ClearButton'));\n (sIcon).style.cursor = 'pointer';\n }\n };\n SearchBox.prototype.searchBlur = function (args) {\n var relatedTarget = args.relatedTarget ? args.relatedTarget : null;\n if (relatedTarget && relatedTarget.classList.contains('e-sicon')) {\n if (relatedTarget.classList.contains('e-clear-icon')) {\n args.target.parentElement.classList.remove('e-input-focus');\n }\n }\n else {\n args.target.parentElement.classList.remove('e-input-focus');\n }\n if (args.target.classList.contains('e-search') && ((relatedTarget && !(relatedTarget.classList.contains('e-sicon e-clear-icon'))\n && !(relatedTarget.classList.contains('e-sicon'))) || isNullOrUndefined(relatedTarget))) {\n var sIcon = args.target.parentElement.querySelector('.e-sicon');\n sIcon.classList.remove('e-clear-icon');\n sIcon.removeAttribute('title');\n sIcon.style.cursor = 'default';\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 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 return SearchBox;\n}());\nexport { SearchBox };\n","/** @hidden */\nexport var created = 'create';\n/** @hidden */\nexport var destroyed = 'destroy';\n/** @hidden */\nexport var load = 'load';\n/** @hidden */\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var headerCellInfo = 'headerCellInfo';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var rowSelecting = 'rowSelecting';\n/** @hidden */\nexport var rowSelected = 'rowSelected';\n/** @hidden */\nexport var rowDeselecting = 'rowDeselecting';\n/** @hidden */\nexport var rowDeselected = 'rowDeselected';\n/** @hidden */\nexport var cellSelecting = 'cellSelecting';\n/** @hidden */\nexport var cellSelected = 'cellSelected';\n/** @hidden */\nexport var cellDeselecting = 'cellDeselecting';\n/** @hidden */\nexport var cellDeselected = 'cellDeselected';\n/** @hidden */\nexport var columnSelecting = 'columnSelecting';\n/** @hidden */\nexport var columnSelected = 'columnSelected';\n/** @hidden */\nexport var columnDeselecting = 'columnDeselecting';\n/** @hidden */\nexport var columnDeselected = 'columnDeselected';\n/** @hidden */\nexport var columnDragStart = 'columnDragStart';\n/** @hidden */\nexport var columnDrag = 'columnDrag';\n/** @hidden */\nexport var columnDrop = 'columnDrop';\n/** @hidden */\nexport var rowDragStartHelper = 'rowDragStartHelper';\n/** @hidden */\nexport var rowDragStart = 'rowDragStart';\n/** @hidden */\nexport var rowDrag = 'rowDrag';\n/** @hidden */\nexport var rowDrop = 'rowDrop';\n/** @hidden */\nexport var beforePrint = 'beforePrint';\n/** @hidden */\nexport var printComplete = 'printComplete';\n/** @hidden */\nexport var detailDataBound = 'detailDataBound';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var batchAdd = 'batchAdd';\n/** @hidden */\nexport var batchCancel = 'batchCancel';\n/** @hidden */\nexport var batchDelete = 'batchDelete';\n/** @hidden */\nexport var beforeBatchAdd = 'beforeBatchAdd';\n/** @hidden */\nexport var beforeBatchDelete = 'beforeBatchDelete';\n/** @hidden */\nexport var beforeBatchSave = 'beforeBatchSave';\n/** @hidden */\nexport var beginEdit = 'beginEdit';\n/** @hidden */\nexport var cellEdit = 'cellEdit';\n/** @hidden */\nexport var cellSave = 'cellSave';\n/** @hidden */\nexport var cellSaved = 'cellSaved';\n/** @hidden */\nexport var endAdd = 'endAdd';\n/** @hidden */\nexport var endDelete = 'endDelete';\n/** @hidden */\nexport var endEdit = 'endEdit';\n/** @hidden */\nexport var recordDoubleClick = 'recordDoubleClick';\n/** @hidden */\nexport var recordClick = 'recordClick';\n/** @hidden */\nexport var beforeDataBound = 'beforeDataBound';\n/** @hidden */\nexport var beforeOpenColumnChooser = 'beforeOpenColumnChooser';\n/** @hidden */\nexport var beforeOpenAdaptiveDialog = 'beforeOpenAdaptiveDialog';\n/** @hidden */\nexport var resizeStart = 'resizeStart';\n/** @hidden */\nexport var onResize = 'resizing';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var checkBoxChange = 'checkBoxChange';\n/** @hidden */\nexport var beforeCopy = 'beforeCopy';\n/** @hidden */\nexport var beforePaste = 'beforePaste';\n/** @hidden */\nexport var beforeAutoFill = 'beforeAutoFill';\n/** @hidden */\nexport var filterChoiceRequest = 'filterchoicerequest';\n/** @hidden */\nexport var filterAfterOpen = 'filterAfterOpen';\n/** @hidden */\nexport var filterBeforeOpen = 'filterBeforeOpen';\n/** @hidden */\nexport var filterSearchBegin = 'filterSearchBegin';\n/** @hidden */\nexport var commandClick = 'commandClick';\n/** @hidden */\nexport var exportGroupCaption = 'exportGroupCaption';\n/** @hidden */\nexport var lazyLoadGroupExpand = 'lazyLoadGroupExpand';\n/** @hidden */\nexport var lazyLoadGroupCollapse = 'lazyLoadGroupCollapse';\n/**\n * Specifies grid internal events\n */\n/** @hidden */\nexport var initialLoad = 'initial-load';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var dataReady = 'data-ready';\n/** @hidden */\nexport var contentReady = 'content-ready';\n/** @hidden */\nexport var uiUpdate = 'ui-update';\n/** @hidden */\nexport var onEmpty = 'on-empty';\n/** @hidden */\nexport var inBoundModelChanged = 'inbound-model-changed';\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var colGroupRefresh = 'colgroup-refresh';\n/** @hidden */\nexport var headerRefreshed = 'header-refreshed';\n/** @hidden */\nexport var pageBegin = 'paging-begin';\n/** @hidden */\nexport var pageComplete = 'paging-complete';\n/** @hidden */\nexport var sortBegin = 'sorting-begin';\n/** @hidden */\nexport var sortComplete = 'sorting-complete';\n/** @hidden */\nexport var filterBegin = 'filtering-begin';\n/** @hidden */\nexport var filterComplete = 'filtering-complete';\n/** @hidden */\nexport var searchBegin = 'searching-begin';\n/** @hidden */\nexport var searchComplete = 'searching-complete';\n/** @hidden */\nexport var reorderBegin = 'reorder-begin';\n/** @hidden */\nexport var reorderComplete = 'reorder-complete';\n/** @hidden */\nexport var rowDragAndDropBegin = 'rowdraganddrop-begin';\n/** @hidden */\nexport var rowDragAndDropComplete = 'rowdraganddrop-complete';\n/** @hidden */\nexport var groupBegin = 'grouping-begin';\n/** @hidden */\nexport var groupComplete = 'grouping-complete';\n/** @hidden */\nexport var ungroupBegin = 'ungrouping-begin';\n/** @hidden */\nexport var ungroupComplete = 'ungrouping-complete';\n/** @hidden */\nexport var groupAggregates = 'group-aggregates';\n/** @hidden */\nexport var refreshFooterRenderer = 'refresh-footer-rendered';\n/** @hidden */\nexport var refreshAggregateCell = 'refresh-aggregate-cell';\n/** @hidden */\nexport var refreshAggregates = 'refresh-aggregates';\n/** @hidden */\nexport var rowSelectionBegin = 'rowselecting';\n/** @hidden */\nexport var rowSelectionComplete = 'rowselected';\n/** @hidden */\nexport var columnSelectionBegin = 'columnselecting';\n/** @hidden */\nexport var columnSelectionComplete = 'columnselected';\n/** @hidden */\nexport var cellSelectionBegin = 'cellselecting';\n/** @hidden */\nexport var cellSelectionComplete = 'cellselected';\n/** @hidden */\nexport var beforeCellFocused = 'beforecellfocused';\n/** @hidden */\nexport var cellFocused = 'cellfocused';\n/** @hidden */\nexport var keyPressed = 'key-pressed';\n/** @hidden */\nexport var click = 'click';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var columnVisibilityChanged = 'column-visible-changed';\n/** @hidden */\nexport var scroll = 'scroll';\n/** @hidden */\nexport var columnWidthChanged = 'column-width-changed';\n/** @hidden */\nexport var columnPositionChanged = 'column-position-changed';\n/** @hidden */\nexport var rowDragAndDrop = 'row-drag-and-drop';\n/** @hidden */\nexport var rowsAdded = 'rows-added';\n/** @hidden */\nexport var rowsRemoved = 'rows-removed';\n/** @hidden */\nexport var columnDragStop = 'column-drag-stop';\n/** @hidden */\nexport var headerDrop = 'header-drop';\n/** @hidden */\nexport var dataSourceModified = 'datasource-modified';\n/** @hidden */\nexport var refreshComplete = 'refresh-complete';\n/** @hidden */\nexport var refreshVirtualBlock = 'refresh-virtual-block';\n/** @hidden */\nexport var dblclick = 'dblclick';\n/** @hidden */\nexport var toolbarRefresh = 'toolbar-refresh';\n/** @hidden */\nexport var bulkSave = 'bulk-save';\n/** @hidden */\nexport var autoCol = 'auto-col';\n/** @hidden */\nexport var tooltipDestroy = 'tooltip-destroy';\n/** @hidden */\nexport var updateData = 'update-data';\n/** @hidden */\nexport var editBegin = 'edit-begin';\n/** @hidden */\nexport var editComplete = 'edit-complete';\n/** @hidden */\nexport var addBegin = 'add-begin';\n/** @hidden */\nexport var addComplete = 'add-complete';\n/** @hidden */\nexport var saveComplete = 'save-complete';\n/** @hidden */\nexport var deleteBegin = 'delete-begin';\n/** @hidden */\nexport var deleteComplete = 'delete-complete';\n/** @hidden */\nexport var preventBatch = 'prevent-batch';\n/** @hidden */\nexport var dialogDestroy = 'dialog-destroy';\n/** @hidden */\nexport var crudAction = 'crud-Action';\n/** @hidden */\nexport var addDeleteAction = 'add-delete-Action';\n/** @hidden */\nexport var destroyForm = 'destroy-form';\n/** @hidden */\nexport var doubleTap = 'double-tap';\n/** @hidden */\nexport var beforeExcelExport = 'beforeExcelExport';\n/** @hidden */\nexport var excelExportComplete = 'excelExportComplete';\n/** @hidden */\nexport var excelQueryCellInfo = 'excelQueryCellInfo';\n/** @hidden */\nexport var excelHeaderQueryCellInfo = 'excelHeaderQueryCellInfo';\n/** @hidden */\nexport var exportDetailDataBound = 'exportDetailDataBound';\n/** @hidden */\nexport var exportDetailTemplate = 'exportDetailTemplate';\n/** @hidden */\nexport var beforePdfExport = 'beforePdfExport';\n/** @hidden */\nexport var pdfExportComplete = 'pdfExportComplete';\n/** @hidden */\nexport var pdfQueryCellInfo = 'pdfQueryCellInfo';\n/** @hidden */\nexport var pdfHeaderQueryCellInfo = 'pdfHeaderQueryCellInfo';\n/** @hidden */\nexport var accessPredicate = 'access-predicate';\n/** @hidden */\nexport var contextMenuClick = 'contextMenuClick';\n/** @hidden */\nexport var freezeRender = 'freezerender';\n/** @hidden */\nexport var freezeRefresh = 'freezerefresh';\n/** @hidden */\nexport var contextMenuOpen = 'contextMenuOpen';\n/** @hidden */\nexport var columnMenuClick = 'columnMenuClick';\n/** @hidden */\nexport var columnMenuOpen = 'columnMenuOpen';\n/** @hidden */\nexport var filterOpen = 'filterOpen';\n/** @hidden */\nexport var filterDialogCreated = 'filterDialogCreated';\n/** @hidden */\nexport var filterMenuClose = 'filter-menu-close';\n/** @hidden */\nexport var initForeignKeyColumn = 'initForeignKeyColumn';\n/** @hidden */\nexport var getForeignKeyData = 'getForeignKeyData';\n/** @hidden */\nexport var generateQuery = 'generateQuery';\n/** @hidden */\nexport var showEmptyGrid = 'showEmptyGrid';\n/** @hidden */\nexport var foreignKeyData = 'foreignKeyData';\n/** @hidden */\nexport var columnDataStateChange = 'columnDataStateChange';\n/** @hidden */\nexport var dataStateChange = 'dataStateChange';\n/** @hidden */\nexport var dataSourceChanged = 'dataSourceChanged';\n/** @hidden */\nexport var rtlUpdated = 'rtl-updated';\n/** @hidden */\nexport var beforeFragAppend = 'beforeFragAppend';\n/** @hidden */\nexport var frozenHeight = 'frozenHeight';\n/** @hidden */\nexport var textWrapRefresh = 'textWrapRefresh';\n/** @hidden */\nexport var recordAdded = 'recordAdded';\n/** @hidden */\nexport var cancelBegin = 'cancel-Begin';\n/** @hidden */\nexport var editNextValCell = 'editNextValCell';\n/** @hidden */\nexport var hierarchyPrint = 'hierarchyprint';\n/** @hidden */\nexport var expandChildGrid = 'expandchildgrid';\n/** @hidden */\nexport var printGridInit = 'printGrid-Init';\n/** @hidden */\nexport var exportRowDataBound = 'export-RowDataBound';\n/** @hidden */\nexport var exportDataBound = 'export-DataBound';\n/** @hidden */\nexport var rowPositionChanged = 'row-position-changed';\n/** @hidden */\nexport var columnChooserOpened = 'columnChooserOpened';\n/** @hidden */\nexport var batchForm = 'batchedit-form';\n/** @hidden */\nexport var beforeStartEdit = 'edit-form';\n/** @hidden */\nexport var beforeBatchCancel = 'before-batch-cancel';\n/** @hidden */\nexport var batchEditFormRendered = 'batcheditform-rendered';\n/** @hidden */\nexport var partialRefresh = 'partial-refresh';\n/** @hidden */\nexport var beforeCustomFilterOpen = 'beforeCustomFilterOpen';\n/** @hidden */\nexport var selectVirtualRow = 'select-virtual-Row';\n/** @hidden */\nexport var columnsPrepared = 'columns-prepared';\n/** @hidden */\nexport var cBoxFltrBegin = 'cbox-filter-begin';\n/** @hidden */\nexport var cBoxFltrComplete = 'cbox-filter-complete';\n/** @hidden */\nexport var fltrPrevent = 'filter-Prevent';\n/** @hidden */\nexport var beforeFltrcMenuOpen = 'before-filter-cmenu-open';\n/** @hidden */\nexport var valCustomPlacement = 'validation-custom-placement';\n/** @hidden */\nexport var filterCboxValue = 'filter-cbox-value';\n/** @hidden */\nexport var componentRendered = 'component-rendered';\n/** @hidden */\nexport var restoreFocus = 'restore-Focus';\n/** @hidden */\nexport var detailStateChange = 'detail-state-change';\n/** @hidden */\nexport var detailIndentCellInfo = 'detail-indentcell-info';\n/** @hidden */\nexport var virtaulKeyHandler = 'virtaul-key-handler';\n/** @hidden */\nexport var virtaulCellFocus = 'virtaul-cell-focus';\n/** @hidden */\nexport var virtualScrollEditActionBegin = 'virtual-scroll-edit-action-begin';\n/** @hidden */\nexport var virtualScrollEditSuccess = 'virtual-scroll-edit-success';\n/** @hidden */\nexport var virtualScrollEditCancel = 'virtual-scroll-edit-cancel';\n/** @hidden */\nexport var virtualScrollEdit = 'virtual-scroll-edit';\n/** @hidden */\nexport var refreshVirtualCache = 'refresh-virtual-cache';\n/** @hidden */\nexport var editReset = 'edit-reset';\n/** @hidden */\nexport var virtualScrollAddActionBegin = 'virtual-scroll-add-action-begin';\n/** @hidden */\nexport var getVirtualData = 'get-virtual-data';\n/** @hidden */\nexport var refreshInfiniteModeBlocks = 'refresh-infinite-mode-blocks';\n/** @hidden */\nexport var resetInfiniteBlocks = 'reset-infinite-blocks';\n/** @hidden */\nexport var infiniteScrollHandler = 'infinite-scroll-handler';\n/** @hidden */\nexport var infinitePageQuery = 'infinite-page-query';\n/** @hidden */\nexport var infiniteShowHide = 'infinite-show-hide';\n/** @hidden */\nexport var appendInfiniteContent = 'append-infinite-content';\n/** @hidden */\nexport var removeInfiniteRows = 'remove-infinite-rows';\n/** @hidden */\nexport var setInfiniteCache = 'set-infinite-cache';\n/** @hidden */\nexport var infiniteEditHandler = 'infinite-edit-handler';\n/** @hidden */\nexport var initialCollapse = 'initial-collapse';\n/** @hidden */\nexport var getAggregateQuery = 'get-aggregate-query';\n/** @hidden */\nexport var closeFilterDialog = 'close-filter-dialog';\n/** @hidden */\nexport var columnChooserCancelBtnClick = 'columnChooserCancelBtnClick';\n/** @hidden */\nexport var getFilterBarOperator = 'get-filterbar-operator';\n/** @hidden */\nexport var resetColumns = 'reset-columns';\n/** @hidden */\nexport var pdfAggregateQueryCellInfo = 'pdfAggregateQueryCellInfo';\n/** @hidden */\nexport var excelAggregateQueryCellInfo = 'excelAggregateQueryCellInfo';\n/** @hidden */\nexport var setGroupCache = 'group-cache';\n/** @hidden */\nexport var lazyLoadScrollHandler = 'lazy-load-scroll-handler';\n/** @hidden */\nexport var groupCollapse = 'group-collapse';\n/** @hidden */\nexport var beforeCheckboxRenderer = 'beforeCheckboxRenderer';\n/** @hidden */\nexport var refreshHandlers = 'refreshResizeHandlers';\n/** @hidden */\nexport var refreshFrozenColumns = 'refresh-frozen-columns';\n/** @hidden */\nexport var setReorderDestinationElement = 'set-reorder-destination-element';\n/** @hidden */\nexport var refreshVirtualFrozenHeight = 'refresh-virtual-frozen-height';\n/** @hidden */\nexport var setFreezeSelection = 'set-freeze-selection';\n/** @hidden */\nexport var setInfiniteFrozenHeight = 'set-infinite-frozen-height';\n/** @hidden */\nexport var setInfiniteColFrozenHeight = 'set-infinite-col-frozen-height';\n/** @hidden */\nexport var beforeRefreshOnDataChange = 'before-refresh-on-data-change';\n/** @hidden */\nexport var immutableBatchCancel = 'immutable-batch-cancel';\n/** @hidden */\nexport var refreshVirtualFrozenRows = 'refresh-virtual-frozenrows';\n/** @hidden */\nexport var checkScrollReset = 'check-scroll-reset';\n/** @hidden */\nexport var refreshFrozenHeight = 'refresh-frozen-height';\n/** @hidden */\nexport var setHeightToFrozenElement = 'set-height-to-frozen-element';\n/** @hidden */\nexport var preventFrozenScrollRefresh = 'prevent-frozen-scroll-refresh';\n/** @hidden */\nexport var nextCellIndex = 'next-cell-index';\n/** @hidden */\nexport var refreshInfiniteCurrentViewData = 'refresh-infinite-current-view-data';\n/** @hidden */\nexport var infiniteCrudCancel = 'infinite-crud-cancel';\n/** @hidden */\nexport var filterDialogClose = 'filter-dialog-close';\n/** @hidden */\nexport var refreshCustomFilterOkBtn = 'refresh-cutsom-filter-ok-button';\n/** @hidden */\nexport var refreshCustomFilterClearBtn = 'refresh-cutsom-filter-clear-button';\n/** @hidden */\nexport var renderResponsiveCmenu = 'render-responsive-cmenu';\n/** @hidden */\nexport var filterCmenuSelect = 'filter-cmenu-select';\n/** @hidden */\nexport var customFilterClose = 'custom-filter-close';\n/** @hidden */\nexport var setFullScreenDialog = 'set-fullscreen-dialog';\n/** @hidden */\nexport var refreshExpandandCollapse = 'refresh-Expand-and-Collapse';\n/** @hidden */\nexport var rowModeChange = 'row-mode-change';\n/** @hidden */\nexport var enterKeyHandler = 'enter-key-handler';\n/** @hidden */\nexport var refreshVirtualMaxPage = 'refresh-virtual-max-page';\n/** @hidden */\nexport var setVirtualPageQuery = 'set-virtual-page-query';\n/** @hidden */\nexport var selectRowOnContextOpen = 'select-row-on-context-open';\n/** @hidden */\nexport var pagerRefresh = 'pager-refresh';\n/** @hidden */\nexport var closeInline = 'closeinline';\n/** @hidden */\nexport var closeBatch = 'closebatch';\n/** @hidden */\nexport var closeEdit = 'close-edit';\n/** @hidden */\nexport var resetVirtualFocus = 'reset-virtual-focus';\n/** @hidden */\nexport var afterContentRender = 'after-content-renderer';\n/** @hidden */\nexport var refreshVirtualEditFormCells = 'refresh-virtual-editform-cells';\n/** @hidden */\nexport var scrollToEdit = 'scroll-to-edit';\n/** @hidden */\nexport var beforeCheckboxRendererQuery = 'before-checkbox-renderer-query';\n/** @hidden */\nexport var createVirtualValidationForm = 'create-virtual-validation-form';\n/** @hidden */\nexport var validateVirtualForm = 'validate-virtual-form';\n/** @hidden */\nexport var destroyChildGrid = 'destroy-child-grid';\n/** @hidden */\nexport var stickyScrollComplete = 'sticky-scroll-complete';\n/** @hidden */\nexport var captionActionComplete = 'infinite-group-collapse';\n/** @hidden */\nexport var refreshInfinitePersistSelection = 'refresh-infinite-persist-selection';\n/** @hidden */\nexport var refreshInfiniteEditrowindex = 'refresh-infinite-editrowindex';\n/** @hidden */\nexport var afterFilterColumnMenuClose = 'after-filter-column-menu-close';\n/** @hidden */\nexport var beforeCheckboxfilterRenderer = 'beforeCheckboxfilterRenderer';\n/** @hidden */\nexport var commandColumnDestroy = 'commandColumnDestroy';\n/** @hidden */\nexport var batchCnfrmDlgCancel = 'cancelcnfrmDlg';\n/** @hidden */\nexport var refreshVirtualLazyLoadCache = 'refresh-Virtual-LazyLoad-Cache';\n/** @hidden */\nexport var refreshFrozenPosition = 'refresh-Frozen-Position';\n/** @hidden */\nexport var refreshResizePosition = 'refresh-Resize-Position';\n/** @hidden */\nexport var refreshSplitFrozenColumn = 'refresh-Split-Frozen-Column';\n/** @hidden */\nexport var renderResponsiveChangeAction = 'render-Responsive-Change-Action';\n/** @hidden */\nexport var renderResponsiveColumnChooserDiv = 'render-Responsive-Column-Chooser-Div';\n","import { Droppable } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, remove, updateBlazorTemplate } from '@syncfusion/ej2-base';\nimport { getUpdateUsingRaf, appendChildren, setDisplayValue, clearReactVueTemplates, getScrollBarWidth, getScrollWidth } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from './row-renderer';\nimport { CellMergeRender } from './cell-merge-renderer';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupModelGenerator } from '../services/group-model-generator';\nimport { isGroupAdaptive, addFixedColumnBorder } from '../base/util';\nimport * as literals from '../base/string-literals';\n// eslint-disable-next-line valid-jsdoc\n/**\n * Content module is used to render grid content\n *\n * @hidden\n */\nvar ContentRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n *\n * @param {IGrid} parent - specifies the Igrid\n * @param {ServiceLocator} serviceLocator - specifies the service locator\n */\n function ContentRender(parent, serviceLocator) {\n var _this = this;\n this.rows = [];\n this.freezeRows = [];\n this.movableRows = [];\n this.freezeRowElements = [];\n /** @hidden */\n this.currentInfo = {};\n /** @hidden */\n this.prevCurrentView = [];\n this.isLoaded = true;\n this.drop = function (e) {\n _this.parent.notify(events.columnDrop, { target: e.target, droppedElement: e.droppedElement });\n remove(e.droppedElement);\n };\n this.infiniteCache = {};\n /** @hidden */\n this.visibleRows = [];\n this.visibleFrozenRows = [];\n this.rightFreezeRows = [];\n this.isAddRows = false;\n this.isInfiniteFreeze = false;\n this.useGroupCache = false;\n /** @hidden */\n this.tempFreezeRows = [];\n this.rafCallback = function (args) {\n var arg = args;\n return function () {\n _this.ariaService.setBusy(_this.getPanel().querySelector('.' + literals.content), false);\n if (_this.parent.isDestroyed) {\n return;\n }\n var rows = _this.rows.slice(0);\n if (_this.parent.enableInfiniteScrolling) {\n if (_this.parent.groupSettings.enableLazyLoading) {\n for (var i = 0; i < _this.visibleRows.length; i++) {\n _this.setRowsInLazyGroup(_this.visibleRows[parseInt(i.toString(), 10)], i);\n }\n }\n rows = _this.parent.getRowsObject();\n var prevPage = arg.prevPage;\n if (_this.parent.infiniteScrollSettings.enableCache && prevPage) {\n var maxBlock = _this.parent.infiniteScrollSettings.maxBlocks;\n rows = [];\n var rowIdx = (parseInt(_this.rowElements[0].getAttribute('data-rowindex'), 10) + 1);\n var startIdx = Math.ceil(rowIdx / _this.parent.pageSettings.pageSize);\n for (var i = 0, count = startIdx; i < maxBlock; i++, count++) {\n if (_this.infiniteCache[parseInt(count.toString(), 10)]) {\n rows = rows.concat(_this.infiniteCache[parseInt(count.toString(), 10)]);\n }\n }\n }\n }\n _this.parent.notify(events.contentReady, { rows: rows, args: arg });\n if (_this.parent.autoFit) {\n _this.parent.preventAdjustColumns();\n }\n if (!_this.parent.isInitialLoad) {\n _this.parent.focusModule.setFirstFocusableTabIndex();\n }\n if (_this.isLoaded) {\n _this.parent.isManualRefresh = false;\n if (_this.parent.enableInfiniteScrolling && _this.parent.groupSettings.enableLazyLoading && args.requestType === 'sorting') {\n _this.parent.infiniteScrollModule['groupCaptionAction'] = undefined;\n }\n var isReactChild = _this.parent.parentDetails && _this.parent.parentDetails.parentInstObj &&\n _this.parent.parentDetails.parentInstObj.isReact;\n if ((_this.parent.isReact || isReactChild) && _this.parent.element.querySelectorAll('.e-templatecell').length) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var thisRef_1 = _this;\n thisRef_1.parent.renderTemplates(function () {\n thisRef_1.parent.trigger(events.dataBound, {}, function () {\n if (thisRef_1.parent.allowTextWrap) {\n thisRef_1.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n });\n });\n }\n else {\n _this.parent.trigger(events.dataBound, {}, function () {\n if (_this.parent.allowTextWrap) {\n _this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n });\n }\n if (_this.parent.allowTextWrap && _this.parent.height === 'auto') {\n if (_this.parent.getContentTable().scrollHeight > _this.parent.getContent().clientHeight) {\n _this.parent.scrollModule.setPadding();\n }\n else {\n _this.parent.scrollModule.removePadding();\n }\n }\n }\n if (arg) {\n var action = (arg.requestType || '').toLowerCase() + '-complete';\n _this.parent.notify(action, arg);\n if (args.requestType === 'batchsave') {\n args.cancel = false;\n _this.parent.trigger(events.actionComplete, args);\n }\n }\n if (_this.isLoaded) {\n _this.parent.hideSpinner();\n }\n };\n };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.widthService = serviceLocator.getService('widthService');\n this.ariaService = this.serviceLocator.getService('ariaService');\n this.parent.enableDeepCompare = this.parent.getDataModule().isRemote();\n this.generator = this.getModelGenerator();\n if (this.parent.isDestroyed) {\n return;\n }\n if (!this.parent.enableColumnVirtualization && !this.parent.enableVirtualization\n && !this.parent.groupSettings.enableLazyLoading) {\n this.parent.on(events.columnVisibilityChanged, this.setVisible, this);\n }\n this.parent.on(events.colGroupRefresh, this.colGroupRefresh, this);\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.refreshInfiniteModeBlocks, this.refreshContentRows, this);\n this.parent.on(events.beforeCellFocused, this.beforeCellFocused, this);\n this.parent.on(events.destroy, this.droppableDestroy, this);\n }\n ContentRender.prototype.beforeCellFocused = function (e) {\n if (e.byKey && (e.keyArgs.action === 'upArrow' || e.keyArgs.action === 'downArrow')) {\n this.pressedKey = e.keyArgs.action;\n }\n else {\n this.pressedKey = undefined;\n }\n };\n /**\n * The function is used to render grid content div\n *\n * @returns {void}\n */\n ContentRender.prototype.renderPanel = function () {\n var gObj = this.parent;\n var div = this.parent.element.querySelector('.' + literals.gridContent);\n if (div) {\n this.ariaService.setOptions(this.parent.element.querySelector('.' + literals.content), { busy: false });\n this.setPanel(div);\n return;\n }\n div = this.parent.createElement('div', { className: literals.gridContent });\n var innerDiv = this.parent.createElement('div', {\n className: literals.content\n });\n this.ariaService.setOptions(innerDiv, { busy: false });\n if (this.parent.enableColumnVirtualization && this.parent.isFrozenGrid()) {\n this.renderHorizontalScrollbar(div);\n innerDiv.classList.add('e-virtual-content');\n }\n div.appendChild(innerDiv);\n this.setPanel(div);\n gObj.element.appendChild(div);\n };\n ContentRender.prototype.renderHorizontalScrollbar = function (element) {\n var parent = this.parent.createElement('div', { className: 'e-movablescrollbar' });\n var child = this.parent.createElement('div', { className: 'e-movablechild' });\n var scrollbarHeight = getScrollBarWidth().toString();\n this.setScrollbarHeight(child, scrollbarHeight);\n this.setScrollbarHeight(parent, scrollbarHeight);\n parent.appendChild(child);\n element.appendChild(parent);\n };\n ContentRender.prototype.setScrollbarHeight = function (ele, height) {\n ele.style.minHeight = height + 'px';\n ele.style.maxHeight = height + 'px';\n };\n /**\n * The function is used to render grid content table\n *\n * @returns {void}\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 if (this.parent.enableVirtualization && !isNullOrUndefined(virtualTable) && !isNullOrUndefined(virtualTrack)) {\n remove(virtualTable);\n remove(virtualTrack);\n }\n contentDiv.appendChild(this.createContentTable('_content_table'));\n this.setTable(contentDiv.querySelector('.' + literals.table));\n if (this.parent.selectionSettings.type === 'Multiple') {\n this.ariaService.setOptions(this.parent.element, {\n multiselectable: true\n });\n }\n this.initializeContentDrop();\n if (this.parent.frozenRows) {\n this.parent.getHeaderContent().classList.add('e-frozenhdr');\n }\n };\n /**\n * The function is used to create content table elements\n *\n * @param {string} id - specifies the id\n * @returns {Element} returns the element\n * @hidden\n */\n ContentRender.prototype.createContentTable = function (id) {\n var innerDiv = this.getPanel().firstElementChild;\n if (this.getTable()) {\n remove(this.getTable());\n }\n var table = innerDiv.querySelector('.' + literals.table) ? innerDiv.querySelector('.' + literals.table) :\n this.parent.createElement('table', {\n className: literals.table, attrs: {\n cellspacing: '0.25px', role: 'presentation',\n id: this.parent.element.id + id\n }\n });\n this.setColGroup(this.parent.getHeaderTable().querySelector(literals.colGroup).cloneNode(true));\n table.appendChild(this.getColGroup());\n table.appendChild(this.parent.createElement(literals.tbody, { attrs: { role: 'rowgroup' } }));\n innerDiv.appendChild(table);\n return innerDiv;\n };\n /**\n * Refresh the content of the Grid.\n *\n * @param {NotifyArgs} args - specifies the args\n * @returns {void}\n */\n // tslint:disable-next-line:max-func-body-length\n ContentRender.prototype.refreshContentRows = function (args) {\n var _this = this;\n if (args === void 0) { args = {}; }\n var gObj = this.parent;\n if (gObj.currentViewData.length === 0) {\n return;\n }\n if (gObj.editSettings && gObj.editModule && gObj.editSettings.mode === 'Batch' && gObj.editModule.formObj\n && gObj.editSettings.showConfirmDialog === false) {\n gObj.editModule.destroyForm();\n }\n var dataSource = this.currentMovableRows || gObj.currentViewData;\n var isReact = gObj.isReact && !isNullOrUndefined(gObj.rowTemplate);\n var frag = isReact ? gObj.createElement(literals.tbody, { attrs: { role: 'rowgroup' } }) : document.createDocumentFragment();\n if (!this.initialPageRecords) {\n this.initialPageRecords = extend([], dataSource);\n }\n var hdrfrag = isReact ? gObj.createElement(literals.tbody, { attrs: { role: 'rowgroup' } }) : document.createDocumentFragment();\n var refFrag;\n var refHdrfrag;\n if (gObj.isReact && gObj.rowTemplate) {\n refFrag = frag;\n refHdrfrag = hdrfrag;\n }\n var columns = gObj.getColumns();\n var tr;\n var hdrTbody;\n var trElement;\n var row = new RowRenderer(this.serviceLocator, null, this.parent);\n var isInfiniteScroll = this.parent.enableInfiniteScrolling\n && args.requestType === 'infiniteScroll';\n gObj.notify(events.destroyChildGrid, {});\n this.rowElements = [];\n this.rows = [];\n this.tempFreezeRows = [];\n var tbdy;\n var tableName;\n var isGroupFrozenHdr = this.parent.frozenRows && this.parent.groupSettings.columns.length ? true : false;\n if (isGroupAdaptive(gObj)) {\n if (['sorting', 'filtering', 'searching', 'grouping', 'ungrouping', 'reorder', 'save', 'delete']\n .some(function (value) { return args.requestType === value; })) {\n this.emptyVcRows();\n }\n }\n var modelData;\n modelData = this.checkCache(modelData, args);\n if (!this.isAddRows && !this.useGroupCache) {\n modelData = this.generator.generateRows(dataSource, args);\n }\n this.setGroupCache(modelData, args);\n this.parent.notify(events.setInfiniteCache, { isInfiniteScroll: isInfiniteScroll, modelData: modelData, args: args });\n var isFrozenLeft = false;\n /* eslint-disable */\n if (!(args.requestType === 'infiniteScroll' && !this.parent.infiniteScrollSettings.enableCache) && this.parent.registeredTemplate\n && this.parent.registeredTemplate.template && !args.isFrozen && !isFrozenLeft) {\n var templatetoclear = [];\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 /* eslint-enable */\n }\n }\n }\n this.parent.destroyTemplate(['template'], templatetoclear);\n }\n if ((this.parent.isReact || this.parent.isVue) && !(args.requestType === 'infiniteScroll' && !this.parent.infiniteScrollSettings.enableCache) && !args.isFrozen) {\n var templates = [\n this.parent.isVue ? 'template' : 'columnTemplate', 'rowTemplate', 'detailTemplate',\n 'captionTemplate', 'commandsTemplate', 'groupFooterTemplate', 'groupCaptionTemplate'\n ];\n if (args.requestType === 'infiniteScroll' && this.parent.infiniteScrollSettings.enableCache) {\n templates = [\n this.parent.isVue ? 'template' : 'columnTemplate', 'commandsTemplate'\n ];\n }\n clearReactVueTemplates(this.parent, templates);\n }\n if (this.parent.enableColumnVirtualization) {\n var cellMerge = new CellMergeRender(this.serviceLocator, this.parent);\n cellMerge.updateVirtualCells(modelData);\n }\n this.tbody = this.getTable().querySelector(literals.tbody);\n var startIndex = 0;\n var blockLoad = true;\n if (isGroupAdaptive(gObj) && gObj.vcRows.length) {\n var top_1 = 'top';\n var scrollTop = !isNullOrUndefined(args.virtualInfo.offsets) ? args.virtualInfo.offsets.top :\n (!isNullOrUndefined(args.scrollTop) ? args.scrollTop[\"\" + top_1] : 0);\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) { return offsets_1[\"\" + key]; });\n for (var m = 0; m < values.length; m++) {\n if (scrollTop < values[parseInt(m.toString(), 10)]) {\n if (!isNullOrUndefined(args.virtualInfo) && args.virtualInfo.direction === 'up') {\n startIndex = m > 0 ? ((m - 1) * bSize) : (m * bSize);\n break;\n }\n else {\n startIndex = m * bSize;\n if (this.parent.contentModule.isEndBlock(m) || this.parent.contentModule.isEndBlock(m + 1)) {\n args.virtualInfo.blockIndexes = [m, m + 1];\n }\n break;\n }\n }\n }\n if (Math.round(scrollTop + this.contentPanel.firstElementChild.offsetHeight) >=\n this.contentPanel.firstElementChild.scrollHeight && !args.rowObject) {\n blockLoad = false;\n }\n }\n }\n var isVFFrozenOnly = gObj.frozenRows && this.parent.enableVirtualization\n && args.requestType === 'reorder';\n if ((gObj.frozenRows && args.requestType === 'virtualscroll' && args.virtualInfo.sentinelInfo.axis === 'X') || isVFFrozenOnly) {\n var bIndex = args.virtualInfo.blockIndexes;\n var page = args.virtualInfo.page;\n args.virtualInfo.blockIndexes = [1, 2];\n if (isVFFrozenOnly) {\n args.virtualInfo.page = 1;\n }\n var data = isVFFrozenOnly ? this.initialPageRecords : dataSource;\n var mhdrData = this.vgenerator\n .generateRows(data, args);\n mhdrData.splice(this.parent.frozenRows);\n for (var i = 0; i < this.parent.frozenRows; i++) {\n // mhdrData[parseInt(i.toString(), 10)].cells.splice(0, this.parent.getFrozenColumns());\n tr = row.render(mhdrData[parseInt(i.toString(), 10)], columns);\n addFixedColumnBorder(tr);\n hdrfrag.appendChild(tr);\n }\n args.virtualInfo.blockIndexes = bIndex;\n args.virtualInfo.page = page;\n if (isVFFrozenOnly && args.virtualInfo.page === 1) {\n modelData.splice(0, this.parent.frozenRows);\n }\n }\n this.virtualFrozenHdrRefresh(hdrfrag, modelData, row, args, dataSource, columns);\n if (this.parent.groupSettings.enableLazyLoading && !this.useGroupCache && this.parent.groupSettings.columns.length) {\n (this.parent.enableVirtualization ? this.parent.lazyLoadRender :\n this.parent.contentModule).refRowsObj[this.parent.pageSettings.currentPage] = [];\n }\n if (this.parent.enableInfiniteScrolling && this.parent.groupSettings.enableLazyLoading && args.requestType === 'delete') { // || (this.parent.infiniteScrollSettings && this.parent.infiniteScrollSettings.enableCache))\n this.visibleRows = [];\n }\n var _loop_1 = function (i, len) {\n this_1.rows.push(modelData[parseInt(i.toString(), 10)]);\n if (this_1.parent.groupSettings.enableLazyLoading && !this_1.useGroupCache && this_1.parent.groupSettings.columns.length) {\n (this_1.parent.enableVirtualization ? this_1.parent.lazyLoadRender :\n this_1.parent.contentModule).refRowsObj[this_1.parent.pageSettings.currentPage].push(modelData[parseInt(i.toString(), 10)]);\n this_1.setRowsInLazyGroup(modelData[parseInt(i.toString(), 10)], i);\n if (isNullOrUndefined(modelData[parseInt(i.toString(), 10)].indent)) {\n return \"continue\";\n }\n }\n this_1.setInfiniteVisibleRows(args, modelData[parseInt(i.toString(), 10)]);\n if (isGroupAdaptive(gObj) && args.virtualInfo && args.virtualInfo.blockIndexes\n && (this_1.rowElements.length >= (args.virtualInfo.blockIndexes.length * this_1.parent.contentModule.getBlockSize()))\n && blockLoad) {\n this_1.parent.currentViewData['records'] = this_1.rows.map(function (m) { return m.data; });\n return \"break\";\n }\n if (!gObj.rowTemplate) {\n tr = row.render(modelData[parseInt(i.toString(), 10)], columns);\n addFixedColumnBorder(tr);\n var isVFreorder = this_1.ensureFrozenHeaderRender(args);\n if (gObj.frozenRows && (i < gObj.frozenRows || isGroupFrozenHdr) && !isInfiniteScroll && args.requestType !== 'virtualscroll' && isVFreorder\n && this_1.ensureVirtualFrozenHeaderRender(args)) {\n hdrfrag.appendChild(tr);\n }\n else {\n frag.appendChild(tr);\n }\n var rowIdx = parseInt(tr.getAttribute('data-rowindex'), 10);\n if (rowIdx + 1 === gObj.frozenRows) {\n isGroupFrozenHdr = false;\n }\n if (modelData[parseInt(i.toString(), 10)].isExpand) {\n gObj.notify(events.expandChildGrid, tr.cells[gObj.groupSettings.columns.length]);\n }\n }\n else {\n var rowTemplateID = gObj.element.id + 'rowTemplate';\n var elements = void 0;\n if (gObj.isReact) {\n var isHeader = gObj.frozenRows && i < gObj.frozenRows;\n var copied = extend({ index: i }, dataSource[parseInt(i.toString(), 10)]);\n gObj.getRowTemplate()(copied, gObj, 'rowTemplate', rowTemplateID, null, null, isHeader ? hdrfrag : frag);\n if (gObj.requireTemplateRef) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var thisRef_2 = this_1;\n thisRef_2.parent.renderTemplates(function () {\n if (gObj.frozenRows && i < gObj.frozenRows) {\n tr = refHdrfrag.childNodes[parseInt(i.toString(), 10)];\n }\n else {\n trElement = refFrag.childNodes[parseInt(i.toString(), 10)];\n }\n var arg = { data: modelData[parseInt(i.toString(), 10)].data,\n row: trElement ? trElement : tr };\n thisRef_2.parent.trigger(events.rowDataBound, arg);\n if (modelData[parseInt(i.toString(), 10)].isDataRow || (thisRef_2.parent.enableVirtualization &&\n thisRef_2.parent.groupSettings.enableLazyLoading)) {\n thisRef_2.rowElements.push(tr);\n }\n thisRef_2.ariaService.setOptions(thisRef_2.parent.element, {\n colcount: gObj.getColumns().length.toString()\n });\n if (i === modelData.length - 1) {\n refFrag = null;\n refHdrfrag = null;\n }\n });\n return \"continue\";\n }\n }\n else {\n elements = gObj.getRowTemplate()(extend({ index: i }, dataSource[parseInt(i.toString(), 10)]), gObj, 'rowTemplate', rowTemplateID, undefined, undefined, undefined, this_1.parent['root']);\n }\n if (!gObj.isReact && elements[0].tagName === 'TBODY') {\n for (var j = 0; j < elements.length; j++) {\n var isTR = elements[parseInt(j.toString(), 10)].nodeName.toLowerCase() === 'tr';\n if (isTR || (elements[parseInt(j.toString(), 10)].querySelectorAll && elements[parseInt(j.toString(), 10)].querySelectorAll('tr').length)) {\n tr = isTR ? elements[parseInt(j.toString(), 10)] : elements[parseInt(j.toString(), 10)].querySelector('tr');\n }\n }\n if (gObj.frozenRows && i < gObj.frozenRows) {\n hdrfrag.appendChild(tr);\n }\n else {\n frag.appendChild(tr);\n }\n }\n else {\n if (gObj.frozenRows && i < gObj.frozenRows) {\n tr = !gObj.isReact ? appendChildren(hdrfrag, elements) : hdrfrag.lastElementChild;\n }\n else {\n // frag.appendChild(tr);\n if (!gObj.isReact) {\n tr = appendChildren(frag, elements);\n }\n trElement = gObj.isReact ? frag.lastElementChild : tr.lastElementChild;\n }\n }\n var arg = { data: modelData[parseInt(i.toString(), 10)].data, row: trElement ? trElement : tr };\n this_1.parent.trigger(events.rowDataBound, arg);\n }\n if (modelData[parseInt(i.toString(), 10)].isDataRow || (this_1.parent.enableVirtualization &&\n this_1.parent.groupSettings.enableLazyLoading)) {\n this_1.rowElements.push(tr);\n }\n this_1.ariaService.setOptions(this_1.parent.element, { colcount: gObj.getColumns().length.toString() });\n };\n var this_1 = this;\n for (var i = startIndex, len = modelData.length; i < len; i++) {\n var state_1 = _loop_1(i, len);\n if (state_1 === \"break\")\n break;\n }\n var isReactChild = gObj.parentDetails && gObj.parentDetails.parentInstObj && gObj.parentDetails.parentInstObj.isReact;\n if ((gObj.isReact || isReactChild) && !gObj.requireTemplateRef) {\n gObj.renderTemplates();\n }\n if (this.parent.enableInfiniteScrolling && this.parent.groupSettings.enableLazyLoading) {\n this.parent.contentModule.refRowsObj[this.parent.pageSettings.currentPage] =\n this.parent.contentModule['groupCache'][this.parent.pageSettings.currentPage];\n }\n if (this.parent.groupSettings.enableLazyLoading && !this.useGroupCache && this.parent.groupSettings.columns.length) {\n this.parent.notify(events.refreshExpandandCollapse, {\n rows: (this.parent.enableVirtualization ? this.parent.lazyLoadRender :\n this.parent.contentModule).refRowsObj[this.parent.pageSettings.currentPage]\n });\n }\n gObj.removeMaskRow();\n this.parent.notify('removeGanttShimmer', { requestType: 'hideShimmer' });\n if ((gObj.frozenRows && args.requestType !== 'virtualscroll' && !isInfiniteScroll && this.ensureVirtualFrozenHeaderRender(args))\n || (args.requestType === 'virtualscroll' && args.virtualInfo.sentinelInfo && args.virtualInfo.sentinelInfo.axis === 'X')) {\n hdrTbody = gObj.getHeaderTable().querySelector(literals.tbody);\n if (isReact) {\n var parentTable = hdrTbody.parentElement;\n remove(hdrTbody);\n parentTable.appendChild(hdrfrag);\n }\n else {\n hdrTbody.innerHTML = '';\n hdrTbody.appendChild(hdrfrag);\n }\n if (!gObj.isInitialLoad) {\n gObj.scrollModule.setHeight();\n }\n }\n // if (!gObj.enableVirtualization && hdrTbody && gObj.frozenRows && idx === 0 && cont.offsetHeight === Number(gObj.height)) {\n // cont.style.height = (cont.offsetHeight - hdrTbody.offsetHeight) + 'px';\n // }\n args.rows = this.rows.slice(0);\n getUpdateUsingRaf(function () {\n _this.parent.notify(events.beforeFragAppend, args);\n if (!_this.parent.enableVirtualization && !_this.parent.enableColumnVirtualization && !isInfiniteScroll) {\n if (!gObj.isReact) {\n _this.tbody.innerHTML = '';\n }\n if (!isNullOrUndefined(_this.tbody.parentElement)) {\n remove(_this.tbody);\n }\n else {\n remove(gObj.getContentTable().querySelector(literals.tbody));\n }\n _this.tbody = _this.parent.createElement(literals.tbody, { attrs: { role: 'rowgroup' } });\n }\n if (gObj.rowTemplate) {\n updateBlazorTemplate(gObj.element.id + 'rowTemplate', 'RowTemplate', gObj);\n }\n if (!isNullOrUndefined(_this.parent.infiniteScrollModule) && _this.parent.enableInfiniteScrolling) {\n _this.isAddRows = false;\n _this.parent.notify(events.removeInfiniteRows, { args: args });\n _this.parent.notify(events.appendInfiniteContent, {\n tbody: tbdy ? tbdy : _this.tbody, frag: frag, args: args, rows: _this.rows,\n rowElements: _this.rowElements, visibleRows: _this.visibleRows,\n tableName: tableName\n });\n }\n else {\n _this.useGroupCache = false;\n _this.appendContent(_this.tbody, frag, args);\n }\n if (_this.parent.getVisibleFrozenRightCount() && _this.parent.getContent() && getScrollWidth(_this.parent) > 0) {\n _this.parent.element.classList.add('e-right-shadow');\n }\n frag = null;\n }, this.rafCallback(extend({}, args)));\n };\n ContentRender.prototype.emptyVcRows = function () {\n this.parent.vcRows = [];\n this.parent.vRows = [];\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ContentRender.prototype.appendContent = function (tbody, frag, args, tableName) {\n var isReact = this.parent.isReact && !isNullOrUndefined(this.parent.rowTemplate);\n if (isReact) {\n this.getTable().appendChild(frag);\n }\n else {\n tbody.appendChild(frag);\n this.getTable().appendChild(tbody);\n }\n if (this.parent.rowRenderingMode === 'Vertical' && this.parent.allowTextWrap && (this.parent.textWrapSettings.wrapMode === 'Header'\n || this.parent.textWrapSettings.wrapMode === 'Both')) {\n var cells = tbody.querySelectorAll('td');\n for (var i = 0; i < cells.length; i++) {\n var headerCellHeight = parseFloat(document.defaultView.getComputedStyle(cells[parseInt(i.toString(), 10)], '::before').getPropertyValue('height'));\n var cellHeight = cells[parseInt(i.toString(), 10)].offsetHeight;\n if (headerCellHeight > cellHeight) {\n cells[parseInt(i.toString(), 10)].style.height = headerCellHeight + 'px';\n cells[parseInt(i.toString(), 10)].style.boxSizing = 'content-box';\n }\n }\n }\n if (this.parent.getVisibleFrozenLeftCount() && this.parent.enableColumnVirtualization) {\n this.widthService.refreshFrozenScrollbar();\n }\n };\n ContentRender.prototype.setRowsInLazyGroup = function (row, index) {\n if (this.parent.groupSettings.enableLazyLoading && !this.useGroupCache && this.parent.groupSettings.columns.length) {\n (this.parent.enableVirtualization ? this.parent.lazyLoadRender :\n this.parent.contentModule).maintainRows(row, index);\n }\n };\n ContentRender.prototype.setGroupCache = function (data, args) {\n if (!this.useGroupCache && this.parent.groupSettings.enableLazyLoading) {\n this.parent.notify(events.setGroupCache, { args: args, data: data });\n }\n };\n ContentRender.prototype.ensureFrozenHeaderRender = function (args) {\n return !((this.parent.enableVirtualization\n && (args.requestType === 'reorder' || args.requestType === 'refresh')) || (this.parent.infiniteScrollSettings.enableCache\n && this.parent.frozenRows && this.parent.infiniteScrollModule.requestType === 'delete'\n && this.parent.pageSettings.currentPage !== 1));\n };\n ContentRender.prototype.ensureVirtualFrozenHeaderRender = function (args) {\n return !(this.parent.enableVirtualization && args.requestType === 'delete');\n };\n ContentRender.prototype.checkCache = function (modelData, args) {\n if (this.parent.infiniteScrollSettings.enableCache && args.requestType === 'infiniteScroll') {\n this.isAddRows = !isNullOrUndefined(this.infiniteCache[this.parent.pageSettings.currentPage]);\n if (this.isAddRows) {\n var data = this.infiniteCache[this.parent.pageSettings.currentPage];\n modelData = this.parent.pageSettings.currentPage === 1 ? data.slice(this.parent.frozenRows) : data;\n }\n return modelData;\n }\n if (this.parent.groupSettings.enableLazyLoading && this.parent.groupSettings.columns.length && (args.requestType === 'paging'\n || args.requestType === 'columnstate' || args.requestType === 'reorder' || args.requestType === 'virtualscroll')\n && (this.parent.enableVirtualization ? this.parent.lazyLoadRender :\n this.parent.contentModule).getGroupCache()[this.parent.pageSettings.currentPage]) {\n if (!this.parent.enableVirtualization) {\n this.useGroupCache = true;\n }\n return this.parent.enableVirtualization ? this.parent.getRowsObject() :\n this.parent.contentModule.initialGroupRows(args.requestType === 'reorder');\n }\n return null;\n };\n ContentRender.prototype.setInfiniteVisibleRows = function (args, data) {\n if (this.parent.enableInfiniteScrolling && !this.parent.infiniteScrollSettings.enableCache) {\n if (!this.parent.infiniteScrollSettings.enableCache) {\n this.visibleRows.push(data);\n }\n }\n };\n ContentRender.prototype.getCurrentBlockInfiniteRecords = function () {\n var data = [];\n if (this.parent.infiniteScrollSettings.enableCache) {\n if (!Object.keys(this.infiniteCache).length) {\n return [];\n }\n var rows = this.parent.getRows();\n var index = parseInt(rows[this.parent.frozenRows].getAttribute(literals.dataRowIndex), 10);\n var first = Math.ceil((index + 1) / this.parent.pageSettings.pageSize);\n index = parseInt(rows[rows.length - 1].getAttribute(literals.dataRowIndex), 10);\n var last = Math.ceil((index + (rows.length ? 1 : 0)) / this.parent.pageSettings.pageSize);\n for (var i = first; i <= last; i++) {\n data = !data.length ? this.infiniteCache[parseInt(i.toString(), 10)]\n : data.concat(this.infiniteCache[parseInt(i.toString(), 10)]);\n }\n if (this.parent.frozenRows && this.parent.pageSettings.currentPage > 1) {\n data = this.infiniteCache[1].slice(0, this.parent.frozenRows).concat(data);\n }\n }\n return data;\n };\n ContentRender.prototype.getReorderedRows = function (args) {\n return this.parent.contentModule.getReorderedFrozenRows(args);\n };\n ContentRender.prototype.virtualFrozenHdrRefresh = function (hdrfrag, modelData, row, args, dataSource, columns) {\n if (this.parent.frozenRows && this.parent.enableVirtualization\n && (args.requestType === 'reorder' || args.requestType === 'refresh')) {\n var tr = void 0;\n var fhdrData = this.getReorderedRows(args);\n for (var i = 0; i < fhdrData.length; i++) {\n tr = row.render(fhdrData[parseInt(i.toString(), 10)], columns);\n hdrfrag.appendChild(tr);\n }\n if (args.virtualInfo.page === 1) {\n modelData.splice(0, this.parent.frozenRows);\n }\n }\n };\n ContentRender.prototype.getInfiniteRows = function () {\n var rows = [];\n if (this.parent.enableInfiniteScrolling) {\n if (this.parent.infiniteScrollSettings.enableCache) {\n var keys = Object.keys(this.infiniteCache);\n for (var i = 0; i < keys.length; i++) {\n rows = rows.concat(this.infiniteCache[keys[parseInt(i.toString(), 10)]]);\n }\n }\n else {\n rows = this.visibleRows;\n }\n }\n return rows;\n };\n ContentRender.prototype.getInfiniteMovableRows = function () {\n var infiniteCacheRows = this.getCurrentBlockInfiniteRecords();\n var infiniteRows = this.parent.enableInfiniteScrolling ? infiniteCacheRows.length ? infiniteCacheRows\n : this.visibleRows : [];\n return infiniteRows;\n };\n /**\n * Get the content div element of grid\n *\n * @returns {Element} returns the element\n */\n ContentRender.prototype.getPanel = function () {\n return this.contentPanel;\n };\n /**\n * Set the content div element of grid\n *\n * @param {Element} panel - specifies the panel\n * @returns {void}\n */\n ContentRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the content table element of grid\n *\n * @returns {Element} returns the element\n */\n ContentRender.prototype.getTable = function () {\n return this.contentTable;\n };\n /**\n * Set the content table element of grid\n *\n * @param {Element} table - specifies the table\n * @returns {void}\n */\n ContentRender.prototype.setTable = function (table) {\n this.contentTable = table;\n };\n /**\n * Get the Movable Row collection in the Freeze pane Grid.\n *\n * @returns {Row[] | HTMLCollectionOf} returns the row\n */\n ContentRender.prototype.getRows = function () {\n var infiniteRows = this.getInfiniteRows();\n return infiniteRows.length ? infiniteRows : this.rows;\n };\n /**\n * Get the content table data row elements\n *\n * @returns {Element} returns the element\n */\n ContentRender.prototype.getRowElements = function () {\n return this.rowElements;\n };\n /**\n * Get the content table data row elements\n *\n * @param {Element[]} elements - specifies the elements\n * @returns {void}\n */\n ContentRender.prototype.setRowElements = function (elements) {\n this.rowElements = elements;\n };\n /**\n * Get the header colgroup element\n *\n * @returns {Element} returns the element\n */\n ContentRender.prototype.getColGroup = function () {\n return this.colgroup;\n };\n /**\n * Set the header colgroup element\n *\n * @param {Element} colGroup - specifies the colgroup\n * @returns {Element} returns the element\n */\n ContentRender.prototype.setColGroup = function (colGroup) {\n if (!isNullOrUndefined(colGroup)) {\n colGroup.id = 'content-' + colGroup.id;\n }\n return this.colgroup = colGroup;\n };\n /**\n * Function to hide content table column based on visible property\n *\n * @param {Column[]} columns - specifies the column\n * @returns {void}\n */\n ContentRender.prototype.setVisible = function (columns) {\n var gObj = this.parent;\n var rows = this.getRows();\n var testRow;\n rows.some(function (r) { if (r.isDataRow) {\n testRow = r;\n } return r.isDataRow; });\n var needFullRefresh = true;\n if (!gObj.groupSettings.columns.length && testRow) {\n needFullRefresh = false;\n }\n var tr = gObj.getDataRows();\n var args = {};\n var infiniteData = this.infiniteRowVisibility();\n var contentrows = infiniteData ? infiniteData\n : this.rows.filter(function (row) { return !row.isDetailRow; });\n for (var c = 0, clen = columns.length; c < clen; c++) {\n var column = columns[parseInt(c.toString(), 10)];\n var idx = this.parent.getNormalizedColumnIndex(column.uid);\n var colIdx = this.parent.getColumnIndexByUid(column.uid);\n var displayVal = column.visible === true ? '' : 'none';\n if (idx !== -1 && testRow && idx < testRow.cells.length) {\n setStyleAttribute(this.getColGroup().childNodes[parseInt(idx.toString(), 10)], { 'display': displayVal });\n }\n if (!needFullRefresh) {\n this.setDisplayNone(tr, colIdx, displayVal, contentrows);\n }\n if (!this.parent.invokedFromMedia && column.hideAtMedia) {\n this.parent.updateMediaColumns(column);\n }\n this.parent.invokedFromMedia = false;\n }\n if (needFullRefresh) {\n this.refreshContentRows({ requestType: 'refresh' });\n }\n else {\n this.parent.notify(events.partialRefresh, { rows: contentrows, args: args });\n }\n };\n /**\n * @param {Object} tr - specifies the trr\n * @param {number} idx - specifies the idx\n * @param {string} displayVal - specifies the displayval\n * @param {Row} rows - specifies the rows\n * @returns {void}\n * @hidden\n */\n ContentRender.prototype.setDisplayNone = function (tr, idx, displayVal, rows) {\n setDisplayValue(tr, idx, displayVal, rows, this.parent, this.parent.isRowDragable());\n this.parent.notify(events.infiniteShowHide, { visible: displayVal, index: idx, isFreeze: this.isInfiniteFreeze });\n };\n ContentRender.prototype.infiniteRowVisibility = function (isFreeze) {\n var infiniteData;\n if (this.parent.enableInfiniteScrolling) {\n this.isInfiniteFreeze = isFreeze;\n if (this.parent.infiniteScrollSettings.enableCache) {\n infiniteData = isFreeze ? this.getCurrentBlockInfiniteRecords() : this.getCurrentBlockInfiniteRecords();\n }\n else {\n infiniteData = isFreeze ? this.visibleFrozenRows : this.visibleRows;\n }\n }\n return infiniteData;\n };\n ContentRender.prototype.colGroupRefresh = function () {\n if (this.getColGroup()) {\n var colGroup = this.getHeaderColGroup();\n this.getTable().replaceChild(colGroup, this.getColGroup());\n this.setColGroup(colGroup);\n }\n };\n ContentRender.prototype.getHeaderColGroup = function () {\n return this.parent.element.querySelector('.' + literals.gridHeader)\n .querySelector(literals.colGroup + ':not(.e-masked-colgroup)').cloneNode(true);\n };\n ContentRender.prototype.initializeContentDrop = function () {\n var gObj = this.parent;\n this.droppable = new Droppable(gObj.element, {\n accept: '.e-dragclone',\n drop: this.drop\n });\n };\n ContentRender.prototype.droppableDestroy = function () {\n if (this.droppable && !this.droppable.isDestroyed) {\n this.droppable.destroy();\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[parseInt(index.toString(), 10)].visible === column.visible; //(3)\n };\n ContentRender.prototype.getModelGenerator = function () {\n return this.generator = this.parent.allowGrouping ? new GroupModelGenerator(this.parent) : new RowModelGenerator(this.parent);\n };\n ContentRender.prototype.renderEmpty = function (tbody) {\n this.getTable().appendChild(tbody);\n if (this.parent.frozenRows) {\n this.parent.getHeaderContent().querySelector(literals.tbody).innerHTML = '';\n }\n };\n ContentRender.prototype.setSelection = function (uid, set, clearAll) {\n this.parent.notify(events.setFreezeSelection, { uid: uid, set: set, clearAll: clearAll });\n var row = this.getRows().filter(function (row) { return clearAll || uid === row.uid; });\n for (var j = 0; j < row.length; j++) {\n row[parseInt(j.toString(), 10)].isSelected = set;\n var cells = row[parseInt(j.toString(), 10)].cells;\n for (var k = 0; k < cells.length; k++) {\n cells[parseInt(k.toString(), 10)].isSelected = set;\n }\n }\n };\n ContentRender.prototype.getRowByIndex = function (index) {\n index = this.getInfiniteRowIndex(index);\n return !isNullOrUndefined(index) ? this.parent.getDataRows()[parseInt(index.toString(), 10)] : undefined;\n };\n ContentRender.prototype.getInfiniteRowIndex = function (index) {\n if (this.parent.infiniteScrollSettings.enableCache && !isNullOrUndefined(index)) {\n var fRows = this.parent.frozenRows;\n var idx = fRows > index ? 0 : fRows;\n var firstRowIndex = parseInt(this.parent.getRows()[parseInt(idx.toString(), 10)]\n .getAttribute(literals.dataRowIndex), 10);\n index = fRows > index ? index : (index - firstRowIndex) + fRows;\n }\n return index;\n };\n ContentRender.prototype.getVirtualRowIndex = function (index) {\n return index;\n };\n ContentRender.prototype.enableAfterRender = function (e) {\n if (e.module === 'group' && e.enable) {\n this.generator = this.getModelGenerator();\n }\n };\n ContentRender.prototype.setRowObjects = function (rows) {\n this.rows = rows;\n };\n /**\n * @param {NotifyArgs} args - specifies the args\n * @returns {void}\n * @hidden\n */\n ContentRender.prototype.immutableModeRendering = function (args) {\n var _this = this;\n if (args === void 0) { args = {}; }\n var gObj = this.parent;\n gObj.hideSpinner();\n var key = gObj.getPrimaryKeyFieldNames()[0];\n var oldKeys = {};\n var newKeys = {};\n var newRowObjs = [];\n var oldIndexes = {};\n var oldRowObjs = gObj.getRowsObject().slice();\n var batchChangeKeys = this.getBatchEditedRecords(key, oldRowObjs);\n var newIndexes = {};\n var hasBatch = Object.keys(batchChangeKeys).length !== 0;\n if (gObj.getContent().querySelector('.e-emptyrow') || args.requestType === 'reorder'\n || this.parent.groupSettings.columns.length) {\n this.refreshContentRows(args);\n }\n else {\n if (gObj.currentViewData.length === 0) {\n return;\n }\n var oldRowElements = {};\n var tbody = gObj.createElement(literals.tbody, { attrs: { role: 'rowgroup' } });\n var dataSource = gObj.currentViewData;\n var trs = [].slice.call(this.getTable().querySelector(literals.tbody).children);\n if (this.prevCurrentView.length) {\n var prevLen = this.prevCurrentView.length;\n var currentLen = dataSource.length;\n if (prevLen === currentLen) {\n for (var i = 0; i < currentLen; i++) {\n if (this.parent.editSettings.mode === 'Batch'\n && trs[parseInt(i.toString(), 10)].classList.contains('e-insertedrow')) {\n trs.splice(i, 1);\n --i;\n continue;\n }\n newKeys[dataSource[parseInt(i.toString(), 10)][\"\" + key]] = oldKeys[this.prevCurrentView[parseInt(i.toString(), 10)][\"\" + key]] = i;\n newIndexes[parseInt(i.toString(), 10)] = dataSource[parseInt(i.toString(), 10)][\"\" + key];\n oldRowElements[oldRowObjs[parseInt(i.toString(), 10)].uid] = trs[parseInt(i.toString(), 10)];\n oldIndexes[parseInt(i.toString(), 10)] = this.prevCurrentView[parseInt(i.toString(), 10)][\"\" + key];\n }\n }\n else {\n for (var i = 0; i < currentLen; i++) {\n newKeys[dataSource[parseInt(i.toString(), 10)][\"\" + key]] = i;\n newIndexes[parseInt(i.toString(), 10)] = dataSource[parseInt(i.toString(), 10)][\"\" + key];\n }\n for (var i = 0; i < prevLen; i++) {\n if (this.parent.editSettings.mode === 'Batch'\n && trs[parseInt(i.toString(), 10)].classList.contains('e-insertedrow')) {\n trs.splice(i, 1);\n --i;\n continue;\n }\n oldRowElements[oldRowObjs[parseInt(i.toString(), 10)].uid] = trs[parseInt(i.toString(), 10)];\n oldKeys[this.prevCurrentView[parseInt(i.toString(), 10)][\"\" + key]] = i;\n oldIndexes[parseInt(i.toString(), 10)] = this.prevCurrentView[parseInt(i.toString(), 10)][\"\" + key];\n }\n }\n }\n for (var i = 0; i < dataSource.length; i++) {\n var oldIndex = oldKeys[dataSource[parseInt(i.toString(), 10)][\"\" + key]];\n if (!isNullOrUndefined(oldIndex)) {\n var isEqual = false;\n if (this.parent.enableDeepCompare) {\n isEqual = this.objectEqualityChecker(this.prevCurrentView[parseInt(oldIndex.toString(), 10)], dataSource[parseInt(i.toString(), 10)]);\n }\n var tr = oldRowElements[oldRowObjs[parseInt(oldIndex.toString(), 10)]\n .uid];\n newRowObjs.push(oldRowObjs[parseInt(oldIndex.toString(), 10)]);\n if (this.rowElements[parseInt(oldIndex.toString(), 10)] && this.rowElements[parseInt(oldIndex.toString(), 10)].getAttribute('data-uid') === newRowObjs[parseInt(i.toString(), 10)].uid\n && ((hasBatch && isNullOrUndefined(batchChangeKeys[newIndexes[parseInt(i.toString(), 10)]]))\n || (!hasBatch && (isEqual\n || this.prevCurrentView[parseInt(oldIndex.toString(), 10)] === dataSource[parseInt(i.toString(), 10)])))) {\n if (oldIndex !== i) {\n this.refreshImmutableContent(i, tr, newRowObjs[parseInt(i.toString(), 10)]);\n }\n tbody.appendChild(tr);\n continue;\n }\n if ((hasBatch && !isNullOrUndefined(batchChangeKeys[newIndexes[parseInt(i.toString(), 10)]]))\n || (!this.parent.enableDeepCompare\n && dataSource[parseInt(i.toString(), 10)] !== this.prevCurrentView[parseInt(oldIndex.toString(), 10)])\n || (this.parent.enableDeepCompare && !isEqual)) {\n oldRowObjs[parseInt(oldIndex.toString(), 10)].setRowValue(dataSource[parseInt(i.toString(), 10)]);\n }\n tbody.appendChild(tr);\n this.refreshImmutableContent(i, tr, newRowObjs[parseInt(i.toString(), 10)]);\n }\n else {\n var row = new RowRenderer(this.serviceLocator, null, gObj);\n var args_1 = { startIndex: i };\n var modelData = this.generator.generateRows([dataSource[parseInt(i.toString(), 10)]], args_1);\n newRowObjs.push(modelData[0]);\n var tr = row.render(modelData[0], gObj.getColumns());\n tbody.appendChild(tr);\n this.refreshImmutableContent(i, tr, newRowObjs[parseInt(i.toString(), 10)]);\n }\n }\n this.rows = newRowObjs;\n this.rowElements = [].slice.call(tbody.children);\n remove(this.getTable().querySelector(literals.tbody));\n this.getTable().appendChild(tbody);\n this.parent.trigger(events.dataBound, {}, function () {\n if (_this.parent.allowTextWrap) {\n _this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n });\n if (args) {\n var action = (args.requestType || '').toLowerCase() + '-complete';\n this.parent.notify(action, args);\n }\n }\n };\n ContentRender.prototype.objectEqualityChecker = function (old, next) {\n var keys = Object.keys(old);\n var isEqual = true;\n for (var i = 0; i < keys.length; i++) {\n if (old[keys[parseInt(i.toString(), 10)]] !== next[keys[parseInt(i.toString(), 10)]]) {\n var isDate = old[keys[parseInt(i.toString(), 10)]] instanceof Date\n && next[keys[parseInt(i.toString(), 10)]] instanceof Date;\n if (!isDate || (old[keys[parseInt(i.toString(), 10)]]\n .getTime() !== next[keys[parseInt(i.toString(), 10)]].getTime())) {\n isEqual = false;\n break;\n }\n }\n }\n return isEqual;\n };\n ContentRender.prototype.getBatchEditedRecords = function (primaryKey, rows) {\n var keys = {};\n var changes = this.parent.getBatchChanges();\n var changedRecords = [];\n var addedRecords = [];\n if (Object.keys(changes).length) {\n changedRecords = changes.changedRecords;\n addedRecords = changes.addedRecords;\n }\n var args = { cancel: false };\n this.parent.notify(events.immutableBatchCancel, { rows: rows, args: args });\n if (addedRecords.length) {\n if (this.parent.editSettings.newRowPosition === 'Bottom') {\n rows.splice(rows.length - 1, addedRecords.length);\n }\n else {\n if (!args.cancel) {\n rows.splice(0, addedRecords.length);\n }\n }\n }\n for (var i = 0; i < changedRecords.length; i++) {\n keys[changedRecords[parseInt(i.toString(), 10)][\"\" + primaryKey]] = i;\n }\n return keys;\n };\n ContentRender.prototype.refreshImmutableContent = function (index, tr, row) {\n row.isAltRow = this.parent.enableAltRow ? index % 2 !== 0 : false;\n if (row.isAltRow) {\n tr.classList.add('e-altrow');\n }\n else {\n tr.classList.remove('e-altrow');\n }\n row.index = index;\n row.edit = undefined;\n row.isDirty = false;\n tr.setAttribute(literals.dataRowIndex, index.toString());\n tr.setAttribute(literals.ariaRowIndex, (index + 1).toString());\n this.updateCellIndex(tr, index);\n };\n ContentRender.prototype.updateCellIndex = function (rowEle, index) {\n for (var i = 0; i < rowEle.cells.length; i++) {\n rowEle.cells[parseInt(i.toString(), 10)].setAttribute('index', index.toString());\n }\n };\n return ContentRender;\n}());\nexport { ContentRender };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Row } from '../models/row';\nimport { isNullOrUndefined, extend, setValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\nimport { getForeignData, getUid } from '../../grid/base/util';\n/**\n * GroupModelGenerator is used to generate group caption rows and data rows.\n *\n * @hidden\n */\nvar GroupModelGenerator = /** @class */ (function (_super) {\n __extends(GroupModelGenerator, _super);\n function GroupModelGenerator(parent) {\n var _this = _super.call(this, parent) || this;\n _this.rows = [];\n /** @hidden */\n _this.index = 0;\n _this.infiniteChildCount = 0;\n _this.renderInfiniteAgg = true;\n _this.parent = parent;\n _this.summaryModelGen = new GroupSummaryModelGenerator(parent);\n _this.captionModelGen = new CaptionSummaryModelGenerator(parent);\n return _this;\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 this.isInfiniteScroll = (args.requestType === 'infiniteScroll');\n this.rows = [];\n this.index = this.parent.enableVirtualization || this.isInfiniteScroll ? args.startIndex : 0;\n for (var i = 0, len = data.length; i < len; i++) {\n this.infiniteChildCount = 0;\n this.renderInfiniteAgg = true;\n this.getGroupedRecords(0, data[parseInt(i.toString(), 10)], data.level, i, undefined, this.rows.length);\n }\n this.index = 0;\n if (this.parent.isCollapseStateEnabled()) {\n this.ensureRowVisibility();\n }\n return this.rows;\n };\n GroupModelGenerator.prototype.getGroupedRecords = function (index, data, raw, parentid, childId, tIndex, parentUid) {\n var _a;\n var level = raw;\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 }\n else {\n for (var j = 0, len = data.length; j < len; j++) {\n this.getGroupedRecords(index, data[parseInt(j.toString(), 10)], data.level, parentid, index, this.rows.length, parentUid);\n }\n }\n }\n else {\n var preCaption = void 0;\n var captionRow = this.generateCaptionRow(data, index, parentid, childId, tIndex, parentUid);\n if (this.isInfiniteScroll) {\n preCaption = this.getPreCaption(index, captionRow.data.key);\n }\n if (!preCaption) {\n this.rows = this.rows.concat(captionRow);\n }\n else {\n captionRow.uid = preCaption.uid;\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 if (this.parent.aggregates.length && this.isRenderAggregate(captionRow)) {\n var rowCnt = this.rows.length;\n (_a = this.rows).push.apply(_a, this.summaryModelGen.generateRows(data, { level: level, parentUid: captionRow.uid }));\n for (var i = rowCnt - 1; i >= 0; i--) {\n if (this.rows[parseInt(i.toString(), 10)].isCaptionRow) {\n this.rows[parseInt(i.toString(), 10)].aggregatesCount = this.rows.length - rowCnt;\n }\n else if (!this.rows[parseInt(i.toString(), 10)].isCaptionRow && !this.rows[parseInt(i.toString(), 10)].isDataRow) {\n break;\n }\n }\n }\n if (preCaption) {\n this.setInfiniteRowVisibility(preCaption);\n }\n }\n };\n GroupModelGenerator.prototype.isRenderAggregate = function (data) {\n if (this.parent.enableInfiniteScrolling) {\n if (!this.renderInfiniteAgg) {\n return false;\n }\n this.getPreCaption(data.indent, data.data.key);\n this.renderInfiniteAgg = data.data.count === this.infiniteChildCount;\n return this.renderInfiniteAgg;\n }\n return !this.parent.enableInfiniteScrolling;\n };\n GroupModelGenerator.prototype.getPreCaption = function (indent, key) {\n var rowObj = this.parent.getRowsObject().concat(this.rows);\n var preCap;\n this.infiniteChildCount = 0;\n var i = rowObj.length;\n while (i--) {\n if (rowObj[parseInt(i.toString(), 10)].isCaptionRow && rowObj[parseInt(i.toString(), 10)].indent === indent\n && rowObj[parseInt(i.toString(), 10)].data.key === key) {\n preCap = rowObj[parseInt(i.toString(), 10)];\n }\n if (rowObj[parseInt(i.toString(), 10)].indent === indent || rowObj[parseInt(i.toString(), 10)].indent < indent) {\n break;\n }\n if (rowObj[parseInt(i.toString(), 10)].indent === indent + 1) {\n this.infiniteChildCount++;\n }\n }\n return preCap;\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 if (this.parent.enableColumnVirtualization) {\n column = this.parent.columns.filter(function (c) { return c.field === field; })[0];\n }\n var groupedLen = this.parent.groupSettings.columns.length;\n var gObj = this.parent;\n if (!this.parent.enableColumnVirtualization || indexes.indexOf(indent) !== -1) {\n for (var i = 0; i < indent; i++) {\n cells.push(this.generateIndentCell());\n }\n cells.push(this.generateCell({}, null, CellType.Expand));\n }\n indent = this.parent.enableColumnVirtualization ? 1 :\n (this.parent.getVisibleColumns().length + groupedLen + (gObj.detailTemplate || gObj.childGrid ? 1 : 0) -\n indent + (this.parent.getVisibleColumns().length ? -1 : 0));\n //Captionsummary cells will be added here.\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) { cIndex_1 = index; return cell.visible && cell.isDataCell; });\n visibles = captionCells.cells.slice(cIndex_1).filter(function (cell) { return cell.visible; });\n if (captionCells.visible && visibles[0].column.field === this.parent.getVisibleColumns()[0].field) {\n visibles = visibles.slice(1);\n }\n if (this.parent.getVisibleColumns().length === 1) {\n visibles = [];\n }\n indent = indent - visibles.length;\n }\n var cols = (!this.parent.enableColumnVirtualization ? [column] : this.parent.getColumns());\n var wFlag = true;\n for (var j = 0; j < cols.length; j++) {\n var tmpFlag = wFlag && indexes.indexOf(indent) !== -1;\n if (tmpFlag) {\n wFlag = false;\n }\n var cellType = !this.parent.enableColumnVirtualization || tmpFlag ?\n CellType.GroupCaption : CellType.GroupCaptionEmpty;\n indent = this.parent.enableColumnVirtualization && cellType === CellType.GroupCaption ? indent + groupedLen : indent;\n if (gObj.isRowDragable()) {\n indent++;\n }\n cells.push(this.generateCell(column, null, cellType, indent));\n }\n cells.push.apply(cells, visibles);\n return cells;\n };\n /**\n * @param {GroupedData} data - specifies the data\n * @param {number} indent - specifies the indent\n * @param {number} parentID - specifies the parentID\n * @param {number} childID - specifies the childID\n * @param {number} tIndex - specifies the TIndex\n * @param {string} parentUid - specifies the ParentUid\n * @returns {Row} returns the Row object\n * @hidden\n */\n GroupModelGenerator.prototype.generateCaptionRow = function (data, indent, parentID, childID, tIndex, parentUid) {\n var options = {};\n var records = 'records';\n var col = this.parent.getColumnByField(data.field);\n options.data = extend({}, data);\n if (col) {\n options.data.field = data.field;\n }\n options.isDataRow = false;\n options.isExpand = !this.parent.groupSettings.enableLazyLoading && !this.parent.isCollapseStateEnabled();\n options.parentGid = parentID;\n options.childGid = childID;\n options.tIndex = tIndex;\n options.isCaptionRow = true;\n options.parentUid = parentUid;\n options.gSummary = !isNullOrUndefined(data.items[\"\" + records]) ? data.items[\"\" + records].length : data.items.length;\n options.uid = getUid('grid-row');\n var row = new Row(options);\n row.indent = indent;\n this.getForeignKeyData(row);\n row.cells = this.getCaptionRowCells(data.field, indent, row.data);\n return row;\n };\n GroupModelGenerator.prototype.getForeignKeyData = function (row) {\n var data = row.data;\n var col = this.parent.getColumnByField(data.field);\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 * @param {Object[]} data - specifies the data\n * @param {number} indent - specifies the indent\n * @param {number} childID - specifies the childID\n * @param {number} tIndex - specifies the tIndex\n * @param {string} parentUid - specifies the ParentUid\n * @returns {Row[]} returns the row object\n * @hidden\n */\n GroupModelGenerator.prototype.generateDataRows = function (data, indent, childID, tIndex, parentUid) {\n var rows = [];\n var indexes = this.parent.getColumnIndexesInView();\n for (var i = 0, len = data.length; i < len; i++, tIndex++) {\n rows[parseInt(i.toString(), 10)] = this.generateRow(data[parseInt(i.toString(), 10)], this.index, i ? undefined : 'e-firstchildrow', indent, childID, tIndex, parentUid);\n for (var j = 0; j < indent; j++) {\n if (this.parent.enableColumnVirtualization && indexes.indexOf(indent) === -1) {\n continue;\n }\n rows[parseInt(i.toString(), 10)].cells.unshift(this.generateIndentCell());\n }\n this.index++;\n }\n return rows;\n };\n GroupModelGenerator.prototype.generateIndentCell = function () {\n return this.generateCell({}, null, CellType.Indent);\n };\n GroupModelGenerator.prototype.refreshRows = function (input) {\n var indexes = this.parent.getColumnIndexesInView();\n for (var i = 0; i < input.length; i++) {\n if (input[parseInt(i.toString(), 10)].isDataRow) {\n input[parseInt(i.toString(), 10)].cells = this.generateCells(input[parseInt(i.toString(), 10)]);\n for (var j = 0; j < input[parseInt(i.toString(), 10)].indent; j++) {\n if (this.parent.enableColumnVirtualization\n && indexes.indexOf(input[parseInt(i.toString(), 10)].indent) === -1) {\n continue;\n }\n input[parseInt(i.toString(), 10)].cells.unshift(this.generateIndentCell());\n }\n }\n else {\n var cRow = this.generateCaptionRow(input[parseInt(i.toString(), 10)].data, input[parseInt(i.toString(), 10)].indent);\n input[parseInt(i.toString(), 10)].cells = cRow.cells;\n }\n }\n return input;\n };\n GroupModelGenerator.prototype.setInfiniteRowVisibility = function (caption) {\n if (!caption.isExpand || caption.visible === false) {\n for (var _i = 0, _a = this.rows; _i < _a.length; _i++) {\n var row = _a[_i];\n if (row.parentUid === caption.uid) {\n row.visible = false;\n if (row.isCaptionRow) {\n this.setInfiniteRowVisibility(row);\n }\n }\n }\n }\n };\n GroupModelGenerator.prototype.ensureRowVisibility = function () {\n for (var i = 0; i < this.rows.length; i++) {\n var row = this.rows[parseInt(i.toString(), 10)];\n if (!row.isCaptionRow) {\n continue;\n }\n for (var j = i + 1; j < this.rows.length; j++) {\n var childRow = this.rows[parseInt(j.toString(), 10)];\n if (row.uid === childRow.parentUid) {\n this.rows[parseInt(j.toString(), 10)].visible = row.isExpand;\n }\n }\n }\n };\n return GroupModelGenerator;\n}(RowModelGenerator));\nexport { GroupModelGenerator };\n","import { ChildProperty, compile as baseTemplateComplier, setValue, Internationalization, isUndefined } 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, select, selectAll } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager, Predicate, UrlAdaptor, Deferred } from '@syncfusion/ej2-data';\nimport { Column } from '../models/column';\nimport { calculateRelativeBasedPosition } from '@syncfusion/ej2-popups';\nimport { Print } from '../actions/print';\nimport { CheckBoxFilterBase } from '../common/checkbox-filter-base';\nimport * as literals from '../base/string-literals';\n//https://typescript.codeplex.com/discussions/401501\n/**\n * Function to check whether target object implement specific interface\n *\n * @param {Object} target - specifies the target\n * @param {string} checkFor - specifies the checkfors\n * @returns {boolean} returns the boolean\n * @hidden\n */\nexport function doesImplementInterface(target, checkFor) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return target.prototype && checkFor in target.prototype;\n}\n/**\n * Function to get value from provided data\n *\n * @param {string} field - specifies the field\n * @param {Object} data - specifies the data\n * @param {ColumnModel} column - specifies the column\n * @returns {Object} returns the object\n * @hidden\n */\n// eslint-disable-next-line\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 *\n * @param {string} field - specifies the field\n * @param {ColumnModel} column - specifies the column\n * @returns {object} headerValueAccessor\n * @hidden\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 *\n * @param {Function} updateFunction - Function that contains the actual action\n * @param {object} callBack - defines the callback\n * @returns {void}\n * @hidden\n */\n// eslint-disable-next-line\nexport function getUpdateUsingRaf(updateFunction, callBack) {\n requestAnimationFrame(function () {\n try {\n callBack(null, updateFunction());\n }\n catch (e) {\n callBack(e);\n }\n });\n}\n/**\n * @hidden\n * @param {PdfExportProperties | ExcelExportProperties} exportProperties - Defines the export properties\n * @returns {boolean} Returns isExportColumns\n */\nexport function isExportColumns(exportProperties) {\n return !isNullOrUndefined(exportProperties) &&\n !isNullOrUndefined(exportProperties.columns) && exportProperties.columns.length > 0;\n}\n/**\n * @param {PdfExportProperties | ExcelExportProperties} exportProperties - Defines the export properties\n * @param {IGrid} gObj - Defines the grid object\n * @returns {void}\n * @hidden\n */\nexport function updateColumnTypeForExportColumns(exportProperties, gObj) {\n var exportColumns = exportProperties.columns;\n var gridColumns = gObj.columns;\n for (var i = 0; i < exportColumns.length; i++) {\n if (gridColumns.length - 1 >= i) {\n if (gridColumns[parseInt(i.toString(), 10)].columns) {\n for (var j = 0; j < gridColumns[parseInt(i.toString(), 10)].columns.length; j++) {\n exportColumns[parseInt(i.toString(), 10)].columns[parseInt(j.toString(), 10)]\n .type = gridColumns[parseInt(i.toString(), 10)].columns[parseInt(j.toString(), 10)].type;\n }\n }\n else {\n exportColumns[parseInt(i.toString(), 10)].type = gridColumns[parseInt(i.toString(), 10)].type;\n }\n }\n }\n}\n/**\n * @hidden\n * @param {IGrid} grid - Defines the grid\n * @returns {void}\n */\nexport function updatecloneRow(grid) {\n var nRows = [];\n var actualRows = grid.vRows;\n for (var i = 0; i < actualRows.length; i++) {\n if (actualRows[parseInt(i.toString(), 10)].isDataRow) {\n nRows.push(actualRows[parseInt(i.toString(), 10)]);\n }\n else if (!actualRows[parseInt(i.toString(), 10)].isDataRow) {\n nRows.push(actualRows[parseInt(i.toString(), 10)]);\n if (!actualRows[parseInt(i.toString(), 10)].isExpand && actualRows[parseInt(i.toString(), 10)].isCaptionRow) {\n i += getCollapsedRowsCount(actualRows[parseInt(i.toString(), 10)], grid);\n }\n }\n }\n grid.vcRows = nRows;\n}\nvar count = 0;\n/**\n * @hidden\n * @param {Row} val - Defines the value\n * @param {IGrid} grid - Defines the grid\n * @returns {number} Returns the collapsed row count\n */\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 if (value === val.data[\"\" + total]) {\n if (grid.groupSettings.columns.length && !isNullOrUndefined(val[\"\" + agrCnt]) && val[\"\" + agrCnt]) {\n if (grid.groupSettings.columns.length !== 1) {\n count += (val.indent !== 0 && (value) < 2) ? (val[\"\" + gSummary] * ((gLen - val.indent) + (gLen - val.indent) * val[\"\" + agrCnt])) :\n (val[\"\" + gSummary] * ((gLen - val.indent) + (gLen - val.indent - 1) * val[\"\" + agrCnt])) + val[\"\" + agrCnt];\n }\n else if (grid.groupSettings.columns.length === 1) {\n count += (val[\"\" + gSummary] * (gLen - val.indent)) + val[\"\" + agrCnt];\n }\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 }\n else {\n count += val[\"\" + gSummary];\n }\n }\n return count;\n }\n else {\n for (var i = 0, len = val.data[\"\" + items].length; i < len; i++) {\n var gLevel = val.data[\"\" + items][parseInt(i.toString(), 10)];\n count += gLevel[\"\" + items].length + ((gLen !== grid.columns.length) &&\n !isNullOrUndefined(gLevel[\"\" + items][\"\" + records]) ? gLevel[\"\" + items][\"\" + records].length : 0);\n dataRowCnt += (!isNullOrUndefined(gLevel[\"\" + items][\"\" + records]) && !isNullOrUndefined(val[\"\" + agrCnt])) ? gLevel[\"\" + items][\"\" + records].length :\n gLevel[\"\" + items].length;\n if (gLevel[\"\" + items].GroupGuid && gLevel[\"\" + items].childLevels !== 0) {\n recursive(gLevel);\n }\n }\n count += val.data[\"\" + items].length;\n if (!isNullOrUndefined(val[\"\" + agrCnt])) {\n if (val[\"\" + agrCnt] && count && dataRowCnt !== 0) {\n count += ((count - dataRowCnt) * val[\"\" + agrCnt]) + val[\"\" + agrCnt];\n }\n }\n }\n return count;\n}\n/**\n * @param {Object[]} row - Defines the row\n * @returns {void}\n * @hidden\n */\nexport function recursive(row) {\n var items = 'items';\n var rCount = 'count';\n for (var j = 0, length_1 = row[\"\" + items].length; j < length_1; j++) {\n var nLevel = row[\"\" + items][parseInt(j.toString(), 10)];\n count += nLevel[\"\" + rCount];\n if (nLevel[\"\" + items].childLevels !== 0) {\n recursive(nLevel);\n }\n }\n}\n/**\n * @param {Object[]} collection - Defines the array\n * @param {Object} predicate - Defines the predicate\n * @returns {Object} Returns the object\n * @hidden\n */\nexport function iterateArrayOrObject(collection, predicate) {\n var result = [];\n for (var i = 0, len = collection.length; i < len; i++) {\n var pred = predicate(collection[parseInt(i.toString(), 10)], i);\n if (!isNullOrUndefined(pred)) {\n result.push(pred);\n }\n }\n return result;\n}\n/**\n * @param {Object[]} array - Defines the array\n * @returns {Object} Returns the object\n * @hidden\n */\nexport function iterateExtend(array) {\n var obj = [];\n for (var i = 0; i < array.length; i++) {\n obj.push(baseExtend({}, getActualProperties(array[parseInt(i.toString(), 10)]), {}, true));\n }\n return obj;\n}\n/**\n * @param {string | Function} template - Defines the template\n * @returns {Function} Returns the function\n * @hidden\n */\nexport function templateCompiler(template) {\n if (template) {\n try {\n var validSelector = template[0] !== '<';\n if (typeof template === 'function') {\n return baseTemplateComplier(template);\n }\n else if (validSelector && document.querySelectorAll(template).length) {\n return baseTemplateComplier(document.querySelector(template).innerHTML.trim());\n }\n else {\n return baseTemplateComplier(template);\n }\n }\n catch (e) {\n return baseTemplateComplier(template);\n }\n }\n return undefined;\n}\n/**\n * @param {Element} node - Defines the column\n * @param {Object} customAttributes - Defines the index\n * @returns {void}\n * @hidden\n */\nexport function setStyleAndAttributes(node, customAttributes) {\n var copyAttr = {};\n var literals = ['style', 'class'];\n //Dont touch the original object - make a copy\n baseExtend(copyAttr, customAttributes, {});\n if ('style' in copyAttr) {\n setStyleAttribute(node, copyAttr[literals[0]]);\n delete copyAttr[literals[0]];\n }\n if ('class' in copyAttr) {\n addClass([node], copyAttr[literals[1]]);\n delete copyAttr[literals[1]];\n }\n attributes(node, copyAttr);\n}\n/**\n * @param {Object} copied - Defines the column\n * @param {Object} first - Defines the inndex\n * @param {Object} second - Defines the second object\n * @param {string[]} exclude - Defines the exclude\n * @returns {Object} Returns the object\n * @hidden\n */\nexport function extend(copied, first, second, exclude) {\n var moved = baseExtend(copied, first, second);\n var values = Object.keys(moved);\n for (var i = 0; i < values.length; i++) {\n if (exclude && exclude.indexOf(values[parseInt(i.toString(), 10)]) !== -1) {\n delete moved[values[parseInt(i.toString(), 10)]];\n }\n }\n return moved;\n}\n/**\n * @param {Column[]} columnModel - Defines the column\n * @param {number} ind - Defines the inndex\n * @returns {number} - Returns the columnindex\n * @hidden\n */\nexport function setColumnIndex(columnModel, ind) {\n if (ind === void 0) { ind = 0; }\n for (var i = 0, len = columnModel.length; i < len; i++) {\n if (columnModel[parseInt(i.toString(), 10)].columns) {\n columnModel[parseInt(i.toString(), 10)].index = isNullOrUndefined(columnModel[parseInt(i.toString(), 10)].index) ? ind\n : columnModel[parseInt(i.toString(), 10)].index;\n ind++;\n ind = setColumnIndex(columnModel[parseInt(i.toString(), 10)].columns, ind);\n }\n else {\n columnModel[parseInt(i.toString(), 10)].index = isNullOrUndefined(columnModel[parseInt(i.toString(), 10)].index) ? ind\n : columnModel[parseInt(i.toString(), 10)].index;\n ind++;\n }\n }\n return ind;\n}\n/**\n * @param {Column[] | string[] | ColumnModel[]} columns - Defines the column\n * @param {boolean} autoWidth - Defines the autowidth\n * @param {IGrid} gObj - Defines the class name\n * @returns {Column} - Returns the columns\n * @hidden\n */\nexport function prepareColumns(columns, autoWidth, gObj) {\n for (var c = 0, len = columns.length; c < len; c++) {\n var column = void 0;\n if (typeof columns[parseInt(c.toString(), 10)] === 'string') {\n column = new Column({ field: columns[parseInt(c.toString(), 10)] }, gObj);\n }\n else if (!(columns[parseInt(c.toString(), 10)] instanceof Column) || columns[parseInt(c.toString(), 10)].columns) {\n if (!columns[parseInt(c.toString(), 10)].columns) {\n column = new Column(columns[parseInt(c.toString(), 10)], gObj);\n }\n else {\n columns[parseInt(c.toString(), 10)].columns = prepareColumns(columns[parseInt(c.toString(), 10)].columns, null, gObj);\n column = new Column(columns[parseInt(c.toString(), 10)], gObj);\n }\n }\n else {\n column = columns[parseInt(c.toString(), 10)];\n }\n if (column.type && column.type.toLowerCase() === 'checkbox') {\n column.allowReordering = false;\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)\n : column.valueAccessor) || valueAccessor;\n column.width = autoWidth && isNullOrUndefined(column.width) ? 200 : column.width;\n if (isNullOrUndefined(column.visible)) {\n column.visible = true;\n }\n columns[parseInt(c.toString(), 10)] = column;\n }\n return columns;\n}\n/**\n * @param {HTMLElement} popUp - Defines the popup element\n * @param {MouseEvent | TouchEvent} e - Defines the moouse event\n * @param {string} className - Defines the class name\n * @returns {void}\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 popUpSpan.className = className;\n popUp.style.display = '';\n var isBottomTail = (isNullOrUndefined(e.clientY) ? e.changedTouches[0].clientY :\n e.clientY) > popUp.offsetHeight + 10;\n popUp.style.top = targetPosition.top - position.top +\n (isBottomTail ? -(popUp.offsetHeight + 10) : popUp.offsetHeight + 10) + 'px'; //10px for tail element\n popUp.style.left = getPopupLeftPosition(popUp, e, targetPosition, position.left) + 'px';\n if (isBottomTail) {\n popUp.querySelector('.e-downtail').style.display = '';\n popUp.querySelector('.e-uptail').style.display = 'none';\n }\n else {\n popUp.querySelector('.e-downtail').style.display = 'none';\n popUp.querySelector('.e-uptail').style.display = '';\n }\n}\n/**\n * @param {HTMLElement} popup - Defines the popup element\n * @param {MouseEvent | TouchEvent} e - Defines the mouse event\n * @param {Object} targetPosition - Defines the target position\n * @param {number} targetPosition.top - Defines the top position\n * @param {number} targetPosition.left - Defines the left position\n * @param {number} targetPosition.right - Defines the right position\n * @param {number} left - Defines the left position\n * @returns {number} Returns the popup left position\n * @hidden\n */\nfunction getPopupLeftPosition(popup, e, targetPosition, left) {\n var width = popup.offsetWidth / 2;\n var x = getPosition(e).x;\n if (x - targetPosition.left < width) {\n return targetPosition.left - left;\n }\n else if (targetPosition.right - x < width) {\n return targetPosition.right - left - width * 2;\n }\n else {\n return x - left - width;\n }\n}\n/**\n * @param {Object} obj - Defines the object\n * @returns {Object} Returns the Properties\n * @hidden\n */\nexport function getActualProperties(obj) {\n if (obj instanceof ChildProperty) {\n return getValue('properties', obj);\n }\n else {\n return obj;\n }\n}\n/**\n * @param {Element} elem - Defines the element\n * @param {string} selector - Defines the string selector\n * @param {boolean} isID - Defines the isID\n * @returns {Element} Returns the element\n * @hidden\n */\nexport function parentsUntil(elem, selector, isID) {\n var parent = elem;\n while (parent) {\n if (isID ? parent.id === selector : parent.classList.contains(selector)) {\n break;\n }\n parent = parent.parentElement;\n }\n return parent;\n}\n/**\n * @param {Element} element - Defines the element\n * @param {Element} elements - Defines the element\n * @returns {number} Returns the element index\n * @hidden\n */\nexport function getElementIndex(element, elements) {\n var index = -1;\n for (var i = 0, len = elements.length; i < len; i++) {\n if (elements[parseInt(i.toString(), 10)].isEqualNode(element)) {\n index = i;\n break;\n }\n }\n return index;\n}\n/**\n * @param {Object} value - Defines the value\n * @param {Object} collection - defines the collection\n * @returns {number} Returns the array\n * @hidden\n */\nexport function inArray(value, collection) {\n for (var i = 0, len = collection.length; i < len; i++) {\n if (collection[parseInt(i.toString(), 10)] === value) {\n return i;\n }\n }\n return -1;\n}\n/**\n * @param {Object} collection - Defines the collection\n * @returns {Object} Returns the object\n * @hidden\n */\nexport function getActualPropFromColl(collection) {\n var coll = [];\n for (var i = 0, len = collection.length; i < len; i++) {\n // eslint-disable-next-line no-prototype-builtins\n if (collection[parseInt(i.toString(), 10)].hasOwnProperty('properties')) {\n coll.push(collection[parseInt(i.toString(), 10)].properties);\n }\n else {\n coll.push(collection[parseInt(i.toString(), 10)]);\n }\n }\n return coll;\n}\n/**\n * @param {Element} target - Defines the target element\n * @param {string} selector - Defines the selector\n * @returns {void}\n * @hidden\n */\nexport function removeElement(target, selector) {\n var elements = [].slice.call(target.querySelectorAll(selector));\n for (var i = 0; i < elements.length; i++) {\n remove(elements[parseInt(i.toString(), 10)]);\n }\n}\n/**\n * @param {MouseEvent | TouchEvent} e Defines the mouse event\n * @returns {IPosition} Returns the position\n * @hidden\n */\nexport function getPosition(e) {\n var position = {};\n position.x = (isNullOrUndefined(e.clientX) ? e.changedTouches[0].clientX :\n e.clientX);\n position.y = (isNullOrUndefined(e.clientY) ? e.changedTouches[0].clientY :\n e.clientY);\n return position;\n}\nvar uid = 0;\n/**\n * @param {string} prefix - Defines the prefix string\n * @returns {string} Returns the uid\n * @hidden\n */\nexport function getUid(prefix) {\n return prefix + uid++;\n}\n/**\n * @param {Element | DocumentFragment} elem - Defines the element\n * @param {Element[] | NodeList} children - Defines the Element\n * @returns {Element} Returns the element\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[parseInt(i.toString(), 10)]);\n }\n else {\n elem.appendChild(children[0]);\n }\n }\n return elem;\n}\n/**\n * @param {Element} elem - Defines the element\n * @param {string} selector - Defines the selector\n * @param {boolean} isID - Defines isID\n * @returns {Element} Return the element\n * @hidden\n */\nexport function parents(elem, selector, isID) {\n var parent = elem;\n var parents = [];\n while (parent) {\n if (isID ? parent.id === selector : parent.classList.contains(selector)) {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\n/**\n * @param {AggregateType | string} type - Defines the type\n * @param {Object} data - Defines the data\n * @param {AggregateColumnModel} column - Defines the column\n * @param {Object} context - Defines the context\n * @returns {Object} Returns the calculated aggragate\n * @hidden\n */\nexport function calculateAggregate(type, data, column, context) {\n if (type === 'Custom') {\n var temp = column.customAggregate;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n return temp ? temp.call(context, data, column) : '';\n }\n return (column.field in data || data instanceof Array) ? DataUtil.aggregates[type.toLowerCase()](data, column.field) : null;\n}\n/** @hidden */\nvar scrollWidth = null;\n/** @hidden\n * @returns {number} - Returns the scrollbarwidth\n */\nexport function getScrollBarWidth() {\n if (scrollWidth !== null) {\n return scrollWidth;\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 */\nvar rowHeight;\n/**\n * @param {HTMLElement} element - Defines the element\n * @returns {number} Returns the roww height\n * @hidden\n */\nexport function getRowHeight(element) {\n if (rowHeight !== undefined) {\n return rowHeight;\n }\n var table = createElement('table', { className: literals.table, styles: 'visibility: hidden', attrs: { role: 'grid' } });\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 */\nvar actualRowHeight;\n/**\n * @param {HTMLElement} element - Defines the HTMl element\n * @returns {number} Returns the row height\n * @hidden\n */\nexport function getActualRowHeight(element) {\n if (actualRowHeight !== undefined) {\n return rowHeight;\n }\n var table = createElement('table', { className: literals.table, styles: 'visibility: hidden', attrs: { role: 'grid' } });\n table.innerHTML = 'A';\n element.appendChild(table);\n var rect = table.querySelector('tr').getBoundingClientRect();\n element.removeChild(table);\n return rect.height;\n}\n/**\n * @param {string} field - Defines the field\n * @returns {boolean} - Returns is complex field\n * @hidden\n */\nexport function isComplexField(field) {\n return field.split('.').length > 1;\n}\n/**\n * @param {string} field - Defines the field\n * @returns {string} - Returns the get complex field ID\n * @hidden\n */\nexport function getComplexFieldID(field) {\n if (field === void 0) { field = ''; }\n return field.replace(/\\./g, '___');\n}\n/**\n * @param {string} field - Defines the field\n * @returns {string} - Returns the parsed column field id\n * @hidden\n */\nexport function getParsedFieldID(field) {\n if (field === void 0) { field = ''; }\n return field.replace(/[^a-zA-Z0-9_.]/g, '\\\\$&');\n}\n/**\n * @param {string} field - Defines the field\n * @returns {string} - Returns the set complex field ID\n * @hidden\n */\nexport function setComplexFieldID(field) {\n if (field === void 0) { field = ''; }\n return field.replace(/___/g, '.');\n}\n/**\n * @param {Column} col - Defines the column\n * @param {string} type - Defines the type\n * @param {Element} elem - Defines th element\n * @returns {boolean} Returns is Editable\n * @hidden\n */\nexport function isEditable(col, type, elem) {\n var row = parentsUntil(elem, literals.row);\n var isOldRow = !row ? true : row && !row.classList.contains('e-insertedrow');\n if (type === 'beginEdit' && isOldRow) {\n if (col.isIdentity || col.isPrimaryKey || !col.allowEditing) {\n return false;\n }\n return true;\n }\n else if (type === 'add' && col.isIdentity) {\n return false;\n }\n else {\n if (isOldRow && !col.allowEditing && !col.isIdentity && !col.isPrimaryKey) {\n return false;\n }\n return true;\n }\n}\n/**\n * @param {IGrid} inst - Defines the IGrid\n * @returns {boolean} Returns is action prevent in boolean\n * @hidden\n */\nexport function isActionPrevent(inst) {\n var dlg = select('#' + inst.element.id + 'EditConfirm', inst.element);\n return inst.editSettings.mode === 'Batch' &&\n (selectAll('.e-updatedtd', inst.element).length || selectAll('.e-gridform.e-formvalidator', inst.element).length)\n && inst.editSettings.showConfirmDialog && (dlg ? dlg.classList.contains('e-popup-close') : true);\n}\n/**\n * @param {any} elem - Defines the element\n * @param {boolean} action - Defines the boolean for action\n * @returns {void}\n * @hidden\n */\n// eslint-disable-next-line\nexport function wrap(elem, action) {\n var clName = 'e-wrap';\n elem = elem instanceof Array ? elem : [elem];\n for (var i = 0; i < elem.length; i++) {\n if (action) {\n elem[parseInt(i.toString(), 10)].classList.add(clName);\n }\n else {\n elem[parseInt(i.toString(), 10)].classList.remove(clName);\n }\n }\n}\n/**\n * @param {ServiceLocator} serviceLocator - Defines the service locator\n * @param {Column} column - Defines the column\n * @returns {void}\n * @hidden\n */\nexport function setFormatter(serviceLocator, column) {\n var fmtr = serviceLocator.getService('valueFormatter');\n var format = 'format';\n var args;\n if (column.type === 'date' || column.type === 'datetime' || column.type === 'dateonly') {\n args = { type: column.type === 'dateonly' ? 'date' : column.type, skeleton: column.format };\n if ((typeof (column.format) === 'string') && column.format !== 'yMd') {\n args[\"\" + format] = column.format;\n }\n }\n switch (column.type) {\n case 'date':\n column.setFormatter(fmtr.getFormatFunction(args));\n column.setParser(fmtr.getParserFunction(args));\n break;\n case 'dateonly':\n column.setFormatter(fmtr.getFormatFunction(args));\n column.setParser(fmtr.getParserFunction(args));\n break;\n case 'datetime':\n column.setFormatter(fmtr.getFormatFunction(args));\n column.setParser(fmtr.getParserFunction(args));\n break;\n case 'number':\n column.setFormatter(fmtr.getFormatFunction({ format: column.format }));\n column.setParser(fmtr.getParserFunction({ format: column.format }));\n break;\n }\n}\n/**\n * @param {Element} cells - Defines the cell element\n * @param {boolean} add - Defines the add\n * @param {string} args - Defines the args\n * @returns {void}\n * @hidden\n */\nexport function addRemoveActiveClasses(cells, add) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n for (var i = 0, len = cells.length; i < len; i++) {\n if (add) {\n classList(cells[parseInt(i.toString(), 10)], args.slice(), []);\n cells[parseInt(i.toString(), 10)].setAttribute('aria-selected', 'true');\n }\n else {\n classList(cells[parseInt(i.toString(), 10)], [], args.slice());\n cells[parseInt(i.toString(), 10)].removeAttribute('aria-selected');\n }\n }\n}\n/**\n * @param {string} result - Defines th string\n * @returns {string} Returns the distinct staing values\n * @hidden\n */\nexport function distinctStringValues(result) {\n var temp = {};\n var res = [];\n for (var i = 0; i < result.length; i++) {\n if (!(result[parseInt(i.toString(), 10)] in temp)) {\n res.push(result[parseInt(i.toString(), 10)].toString());\n temp[result[parseInt(i.toString(), 10)]] = 1;\n }\n }\n return res;\n}\n/**\n * @param {Element} target - Defines the target\n * @param {Dialog} dialogObj - Defines the dialog\n * @returns {void}\n * @hidden\n */\nexport function getFilterMenuPostion(target, dialogObj) {\n var elementVisible = dialogObj.element.style.display;\n dialogObj.element.style.display = 'block';\n var dlgWidth = dialogObj.width;\n var 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 if (leftPos < 1) {\n dialogObj.element.style.left = (dlgWidth + leftPos) - 16 + 'px'; // right calculation\n }\n else {\n dialogObj.element.style.left = leftPos + -4 + 'px';\n }\n}\n/**\n * @param {Object} args - Defines the args\n * @param {Popup} args.popup - Defines the args for popup\n * @param {Dialog} dialogObj - Defines the dialog obj\n * @returns {void}\n * @hidden\n */\nexport function getZIndexCalcualtion(args, dialogObj) {\n args.popup.element.style.zIndex = (dialogObj.zIndex + 1).toString();\n}\n/**\n * @param {Element} elem - Defines the element\n * @returns {void}\n * @hidden\n */\nexport function toogleCheckbox(elem) {\n var span = elem.querySelector('.e-frame');\n var input = span.previousSibling;\n if (span.classList.contains('e-check')) {\n input.checked = false;\n classList(span, ['e-uncheck'], ['e-check']);\n }\n else {\n input.checked = true;\n classList(span, ['e-check'], ['e-uncheck']);\n }\n}\n/**\n * @param {HTMLInputElement} elem - Defines the element\n * @param {boolean} checked - Defines is checked\n * @returns {void}\n * @hidden\n */\nexport function setChecked(elem, checked) {\n elem.checked = checked;\n}\n/**\n * @param {string} uid - Defines the string\n * @param {Element} elem - Defines the Element\n * @param {string} className - Defines the classname\n * @returns {Element} Returns the box wrap\n * @hidden\n */\nexport function createCboxWithWrap(uid, elem, className) {\n var div = createElement('div', { className: className });\n div.appendChild(elem);\n div.setAttribute('uid', uid);\n return div;\n}\n/**\n * @param {Element} elem - Defines the element\n * @param {boolean} checked - Defines is checked\n * @returns {void}\n * @hidden\n */\nexport function removeAddCboxClasses(elem, checked) {\n removeClass([elem], ['e-check', 'e-stop', 'e-uncheck']);\n if (checked) {\n elem.classList.add('e-check');\n }\n else {\n elem.classList.add('e-uncheck');\n }\n}\n/**\n * Refresh the Row model's foreign data.\n *\n * @param {IRow} row - Grid Row model object.\n * @param {Column[]} columns - Foreign columns array.\n * @param {Object} data - Updated Row data.\n * @returns {void}\n * @hidden\n */\nexport function refreshForeignData(row, columns, data) {\n for (var i = 0; i < columns.length; i++) {\n setValue(columns[parseInt(i.toString(), 10)].field, getForeignData(columns[parseInt(i.toString(), 10)], data), row.foreignKeyData);\n }\n var cells = row.cells;\n for (var i = 0; i < cells.length; i++) {\n if (cells[parseInt(i.toString(), 10)].isForeignKey) {\n setValue('foreignKeyData', getValue(cells[parseInt(i.toString(), 10)].column.field, row.foreignKeyData), cells[parseInt(i.toString(), 10)]);\n }\n }\n}\n/**\n * Get the foreign data for the corresponding cell value.\n *\n * @param {Column} column - Foreign Key column\n * @param {Object} data - Row data.\n * @param {string | number} lValue - cell value.\n * @param {Object} foreignKeyData - foreign data source.\n * @returns {Object} Returns the object\n * @hidden\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 ?\n column.dataSource.dataSource.json : column.columnData);\n if (key.getDay) {\n query.where(getDatePredicate({ field: fField, operator: 'equal', value: key, matchCase: false }));\n }\n else {\n query.where(fField, '==', key, false);\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 *\n * @param {string} foreignKeyValue - Defines ForeignKeyValue.\n * @param {Column[]} columns - Array of column object.\n * @returns {Column} Returns the element\n * @hidden\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 * @param {number} value - Defines the date or month value\n * @returns {string} Returns string\n * @hidden\n */\nexport function padZero(value) {\n if (value < 10) {\n return '0' + value;\n }\n return String(value);\n}\n/**\n * @param {PredicateModel} filterObject - Defines the filterObject\n * @param {string} type - Defines the type\n * @param {boolean} isExecuteLocal - Defines whether the data actions performed in client and used for dateonly type field\n * @returns {Predicate} Returns the Predicate\n * @hidden\n */\nexport function getDatePredicate(filterObject, type, isExecuteLocal) {\n var datePredicate;\n var prevDate;\n var nextDate;\n var prevObj = baseExtend({}, getActualProperties(filterObject));\n var nextObj = baseExtend({}, getActualProperties(filterObject));\n if (isNullOrUndefined(filterObject.value) || filterObject.value === '') {\n datePredicate = new Predicate(prevObj.field, prevObj.operator, prevObj.value, false);\n return datePredicate;\n }\n var value = new Date(filterObject.value);\n if (type === 'dateonly' && !isExecuteLocal) {\n if (typeof (prevObj.value) === 'string') {\n prevObj.value = new Date(prevObj.value);\n }\n var dateOnlyString = prevObj.value.getFullYear() + '-' + padZero(prevObj.value.getMonth() + 1) + '-' + padZero(prevObj.value.getDate());\n var predicates = new Predicate(prevObj.field, prevObj.operator, dateOnlyString, false);\n datePredicate = predicates;\n }\n else {\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 }\n else {\n prevDate = new Date(value.setHours(0) - 1);\n nextDate = new Date(value.setHours(24));\n }\n prevObj.value = prevDate;\n nextObj.value = nextDate;\n if (filterObject.operator === 'equal') {\n prevObj.operator = 'greaterthan';\n nextObj.operator = 'lessthan';\n }\n else if (filterObject.operator === 'notequal') {\n prevObj.operator = 'lessthanorequal';\n nextObj.operator = 'greaterthanorequal';\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 }\n else {\n if (type === 'date' && (filterObject.operator === 'lessthanorequal' || filterObject.operator === 'greaterthan')) {\n prevObj.value = new Date(value.setHours(24) - 1);\n }\n if (typeof (prevObj.value) === 'string') {\n prevObj.value = new Date(prevObj.value);\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({ ejpredicate: datePredicate }, true);\n }\n else {\n filterObject.ejpredicate = datePredicate;\n }\n return datePredicate;\n}\n/**\n * @param {IGrid} grid - Defines the IGrid\n * @returns {boolean} Returns true if group adaptive is true\n * @hidden\n */\nexport function isGroupAdaptive(grid) {\n return grid.enableVirtualization && grid.groupSettings.columns.length > 0 && grid.isVirtualAdaptive &&\n !grid.groupSettings.enableLazyLoading;\n}\n/**\n * @param {string} field - Defines the Field\n * @param {Object} object - Defines the objec\n * @returns {any} Returns the object\n * @hidden\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getObject(field, object) {\n if (field === void 0) { field = ''; }\n if (field) {\n var value = object;\n var splits = field.split('.');\n for (var i = 0; i < splits.length && !isNullOrUndefined(value); i++) {\n value = value[splits[parseInt(i.toString(), 10)]];\n if (isUndefined(value)) {\n var newCase = splits[parseInt(i.toString(), 10)].charAt(0).toUpperCase()\n + splits[parseInt(i.toString(), 10)].slice(1);\n value = object[\"\" + newCase] || object[(\"\" + newCase).charAt(0).toLowerCase() + (\"\" + newCase).slice(1)];\n }\n }\n return value;\n }\n}\n/**\n * @param {string | Object} format - defines the format\n * @param {string} colType - Defines the coltype\n * @returns {string} Returns the custom Data format\n * @hidden\n */\nexport function getCustomDateFormat(format, colType) {\n var intl = new Internationalization();\n var formatvalue;\n var formatter = 'format';\n var type = 'type';\n if (colType === 'date') {\n formatvalue = typeof (format) === 'object' ?\n intl.getDatePattern({ type: format[\"\" + type] ? format[\"\" + type] : 'date', format: format[\"\" + formatter] }, false) :\n intl.getDatePattern({ type: 'dateTime', skeleton: format }, false);\n }\n else {\n formatvalue = typeof (format) === 'object' ?\n intl.getDatePattern({ type: format[\"\" + type] ? format[\"\" + type] : 'dateTime', format: format[\"\" + formatter] }, false) :\n intl.getDatePattern({ type: 'dateTime', skeleton: format }, false);\n }\n return formatvalue;\n}\n/**\n * @param {IGrid} gObj - Defines the IGrid\n * @param {HierarchyGridPrintMode} hierarchyPrintMode - Defines the hierarchyPrintMode\n * @returns {Object} Returns the object\n * @hidden\n */\nexport function getExpandedState(gObj, hierarchyPrintMode) {\n var rows = gObj.getRowsObject();\n var obj = {};\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n if (row.isExpand && !row.isDetailRow) {\n var index = gObj.allowPaging && gObj.printMode === 'AllPages' ? row.index +\n (gObj.pageSettings.currentPage * gObj.pageSettings.pageSize) - gObj.pageSettings.pageSize : row.index;\n if (!isNullOrUndefined(index)) {\n obj[parseInt(index.toString(), 10)] = {};\n obj[parseInt(index.toString(), 10)].isExpand = true;\n if (gObj.childGrid) {\n obj[parseInt(index.toString(), 10)].gridModel = getPrintGridModel(row.childGrid, hierarchyPrintMode);\n obj[parseInt(index.toString(), 10)].gridModel.query = gObj.childGrid.query;\n }\n }\n }\n }\n return obj;\n}\n/**\n * @param {IGrid} gObj - Defines the grid objct\n * @param {HierarchyGridPrintMode} hierarchyPrintMode - Defines the hierarchyPrintMode\n * @returns {IGrid} Returns the IGrid\n * @hidden\n */\nexport function getPrintGridModel(gObj, hierarchyPrintMode) {\n if (hierarchyPrintMode === void 0) { hierarchyPrintMode = 'Expanded'; }\n var printGridModel = {};\n if (!gObj) {\n return printGridModel;\n }\n for (var _i = 0, _a = Print.printGridProp; _i < _a.length; _i++) {\n var key = _a[_i];\n if (key === 'columns') {\n printGridModel[\"\" + key] = getActualPropFromColl(gObj.getColumns());\n }\n else if (key === 'allowPaging') {\n printGridModel[\"\" + key] = gObj.printMode === 'CurrentPage';\n }\n else {\n printGridModel[\"\" + key] = getActualProperties(gObj[\"\" + key]);\n }\n }\n printGridModel['enableHover'] = false;\n if ((gObj.childGrid || gObj.detailTemplate) && hierarchyPrintMode !== 'None') {\n printGridModel.expandedRows = getExpandedState(gObj, hierarchyPrintMode);\n }\n return printGridModel;\n}\n/**\n * @param {Object} copied - Defines the copied object\n * @param {Object} first - Defines the first object\n * @param {Object} second - Defines the second object\n * @param {boolean} deep - Defines the deep\n * @returns {Object} Returns the extended object\n * @hidden\n */\nexport function extendObjWithFn(copied, first, second, deep) {\n var res = copied || {};\n var len = arguments.length;\n if (deep) {\n len = len - 1;\n }\n for (var i = 1; i < len; i++) {\n // eslint-disable-next-line prefer-rest-params\n if (!arguments[parseInt(i.toString(), 10)]) {\n continue;\n }\n // eslint-disable-next-line prefer-rest-params\n var obj1 = arguments[parseInt(i.toString(), 10)];\n var keys = Object.keys(Object.getPrototypeOf(obj1)).length ?\n Object.keys(obj1).concat(getPrototypesOfObj(obj1)) : Object.keys(obj1);\n for (var i_1 = 0; i_1 < keys.length; i_1++) {\n var source = res[keys[parseInt(i_1.toString(), 10)]];\n var cpy = obj1[keys[parseInt(i_1.toString(), 10)]];\n var cln = void 0;\n if (deep && (isObject(cpy) || Array.isArray(cpy))) {\n if (isObject(cpy)) {\n cln = source ? source : {};\n res[keys[parseInt(i_1.toString(), 10)]] = baseExtend({}, cln, cpy, deep);\n }\n else {\n cln = source ? source : [];\n res[keys[parseInt(i_1.toString(), 10)]] = baseExtend([], cln, cpy, deep);\n }\n }\n else {\n res[keys[parseInt(i_1.toString(), 10)]] = cpy;\n }\n }\n }\n return res;\n}\n/**\n * @param {Object} obj - Defines the obj\n * @returns {string[]} Returns the string\n * @hidden\n */\nfunction getPrototypesOfObj(obj) {\n var keys = [];\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 return keys;\n}\n/**\n * @param {Column[]} column - Defines the Column\n * @returns {number} Returns the column Depth\n * @hidden\n */\nexport function measureColumnDepth(column) {\n var max = 0;\n for (var i = 0; i < column.length; i++) {\n var depth = checkDepth(column[parseInt(i.toString(), 10)], 0);\n if (max < depth) {\n max = depth;\n }\n }\n return max + 1;\n}\n/**\n * @param {Column} col - Defines the Column\n * @param {number} index - Defines the index\n * @returns {number} Returns the depth\n * @hidden\n */\nexport function checkDepth(col, index) {\n var max = index;\n var indices = [];\n if (col.columns) {\n index++;\n for (var i = 0; i < col.columns.length; i++) {\n indices[parseInt(i.toString(), 10)] = checkDepth(col.columns[parseInt(i.toString(), 10)], index);\n }\n for (var j = 0; j < indices.length; j++) {\n if (max < indices[parseInt(j.toString(), 10)]) {\n max = indices[parseInt(j.toString(), 10)];\n }\n }\n index = max;\n }\n return index;\n}\n/**\n * @param {IGrid} gObj - Defines the IGrid\n * @param {PredicateModel[]} filteredCols - Defines the PredicateModel\n * @returns {void}\n * @hidden\n */\nexport function refreshFilteredColsUid(gObj, filteredCols) {\n for (var i = 0; i < filteredCols.length; i++) {\n filteredCols[parseInt(i.toString(), 10)].uid = filteredCols[parseInt(i.toString(), 10)].isForeignKey ?\n getColumnByForeignKeyValue(filteredCols[parseInt(i.toString(), 10)].field, gObj.getForeignKeyColumns()).uid\n : gObj.enableColumnVirtualization ? getColumnModelByFieldName(gObj, filteredCols[parseInt(i.toString(), 10)].field).uid\n : gObj.getColumnByField(filteredCols[parseInt(i.toString(), 10)].field).uid;\n }\n}\n/** @hidden */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var Global;\n(function (Global) {\n // eslint-disable-next-line prefer-const\n Global.timer = null;\n})(Global || (Global = {}));\n/**\n * @param {Element} element - Defines the element\n * @returns {Object} Returns the transform values\n * @hidden\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 { width: translateX, height: translateY };\n}\n/**\n * @param {Element} rootElement - Defines the root Element\n * @param {Element} element - Defines the element\n * @returns {void}\n * @hidden\n */\nexport function applyBiggerTheme(rootElement, element) {\n if (rootElement.classList.contains('e-bigger')) {\n element.classList.add('e-bigger');\n }\n}\n/**\n * @param {IGrid} gObj - Defines grid object\n * @returns {number} - Returns scroll width\n * @hidden\n */\nexport function getScrollWidth(gObj) {\n var scrollElem = gObj.getContent().firstElementChild;\n return scrollElem.scrollWidth > scrollElem.offsetWidth ? getScrollBarWidth() : 0;\n}\n/**\n * @param {IGrid} gObj - Defines grid object\n * @param {number} idx - Defines the index\n * @returns {number} Returns colSpan index\n * @hidden\n */\nexport function resetColspanGroupCaption(gObj, idx) {\n var colspan = 0;\n var cols = gObj.getColumns();\n var width = idx * 30;\n if (gObj.isRowDragable()) {\n colspan++;\n width += 30;\n }\n colspan += (gObj.groupSettings.columns.length - idx);\n width += (30 * (gObj.groupSettings.columns.length - idx));\n var gridWidth = (gObj.width === 'auto' ? gObj.element.offsetWidth : parseInt(gObj.width.toString(), 10)) -\n getScrollWidth(gObj);\n for (var i = 0; i < cols.length; i++) {\n if (cols[parseInt(i.toString(), 10)].visible) {\n width += parseInt(cols[parseInt(i.toString(), 10)].width.toString(), 10);\n colspan++;\n }\n if (width > gridWidth) {\n colspan--;\n break;\n }\n }\n return colspan;\n}\n/**\n * @param {HTMLElement} tr - Defines the tr Element\n * @param {IGrid} gObj - Defines grid object\n * @returns {void}\n * @hidden\n */\nexport function groupCaptionRowLeftRightPos(tr, gObj) {\n var width = 0;\n for (var j = 0; j < tr.childNodes.length; j++) {\n var td = tr.childNodes[parseInt(j.toString(), 10)];\n td.classList.add('e-leftfreeze');\n applyStickyLeftRightPosition(td, width, gObj.enableRtl, 'Left');\n if (td.classList.contains('e-indentcell') || td.classList.contains('e-recordplusexpand') ||\n td.classList.contains('e-recordpluscollapse')) {\n width += 30;\n }\n if (td.classList.contains('e-groupcaption')) {\n var colspan = parseInt(td.getAttribute('colspan'), 10);\n if (gObj.isRowDragable()) {\n colspan--;\n width += 30;\n }\n colspan = colspan - (gObj.groupSettings.columns.length - j);\n width = width + (30 * (gObj.groupSettings.columns.length - j));\n var cols = gObj.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if ((parseInt(td.getAttribute('colspan'), 10) > 1) &&\n (parseInt(cols[parseInt(i.toString(), 10)].width.toString(), 10)\n + width) > (parseInt(gObj.width.toString(), 10) - getScrollWidth(gObj))) {\n var newColspan = resetColspanGroupCaption(gObj, j);\n td.setAttribute('colspan', newColspan.toString());\n break;\n }\n if (cols[parseInt(i.toString(), 10)].visible) {\n width += parseInt(cols[parseInt(i.toString(), 10)].width.toString(), 10);\n colspan--;\n }\n if (colspan === 0) {\n break;\n }\n }\n }\n if (td.classList.contains('e-summarycell')) {\n var uid_1 = td.getAttribute('e-mappinguid');\n var column = gObj.getColumnByUid(uid_1);\n width += parseInt(column.width.toString(), 10);\n }\n }\n}\n/**\n * @param {Element} row - Defines row element\n * @param {IGrid} gridObj - Defines grid object\n * @returns {boolean} Returns isRowEnteredInGrid\n * @hidden\n */\nexport function ensureLastRow(row, gridObj) {\n var content = gridObj.getContent().firstElementChild;\n return row && (row.getBoundingClientRect().top - content.getBoundingClientRect().top +\n gridObj.getRowHeight()) > content.offsetHeight;\n}\n/**\n * @param {Element} row - Defines row element\n * @param {number} rowTop - Defines row top number\n * @returns {boolean} Returns first row is true\n * @hidden\n */\nexport function ensureFirstRow(row, rowTop) {\n return row && row.getBoundingClientRect().top < rowTop;\n}\n/**\n * @param {number} index - Defines index\n * @param {IGrid} gObj - Defines grid object\n * @returns {boolean} Returns isRowEnteredInGrid\n * @hidden\n */\nexport function isRowEnteredInGrid(index, gObj) {\n var rowHeight = gObj.getRowHeight();\n var startIndex = gObj.getContent().firstElementChild.scrollTop / rowHeight;\n var endIndex = startIndex + (gObj.getContent().firstElementChild.offsetHeight / rowHeight);\n return index < endIndex && index > startIndex;\n}\n/**\n * @param {IGrid} gObj - Defines the grid object\n * @param {Object} data - Defines the query\n * @returns {number} Returns the edited data index\n * @hidden\n */\nexport function getEditedDataIndex(gObj, data) {\n var keyField = gObj.getPrimaryKeyFieldNames()[0];\n var dataIndex;\n gObj.getCurrentViewRecords().filter(function (e, index) {\n if (keyField.includes('.')) {\n var currentValue = getObject(keyField, e);\n var originalValue = getObject(keyField, data);\n if (currentValue === originalValue) {\n dataIndex = index;\n }\n }\n else {\n if (e[\"\" + keyField] === data[\"\" + keyField]) {\n dataIndex = index;\n }\n }\n });\n return dataIndex;\n}\n/**\n * @param {Object} args - Defines the argument\n * @param {Query} query - Defines the query\n * @returns {FilterStateObj} Returns the filter state object\n * @hidden\n */\nexport function eventPromise(args, query) {\n var state = getStateEventArgument(query);\n var def = new Deferred();\n state.dataSource = def.resolve;\n state.action = args;\n return { state: state, deffered: def };\n}\n/**\n * @param {Query} query - Defines the query\n * @returns {Object} Returns the state event argument\n * @hidden\n */\nexport function getStateEventArgument(query) {\n var adaptr = new UrlAdaptor();\n var dm = new DataManager({ url: '', adaptor: new UrlAdaptor });\n var state = adaptr.processQuery(dm, query);\n var data = JSON.parse(state.data);\n return data;\n}\n/**\n * @param {IGrid} gObj - Defines the Igrid\n * @returns {boolean} Returns the ispercentageWidth\n * @hidden\n */\nexport function ispercentageWidth(gObj) {\n var columns = gObj.getVisibleColumns();\n var percentageCol = 0;\n var undefinedWidthCol = 0;\n for (var i = 0; i < columns.length; i++) {\n if (isUndefined(columns[parseInt(i.toString(), 10)].width)) {\n undefinedWidthCol++;\n }\n else if (columns[parseInt(i.toString(), 10)].width.toString().indexOf('%') !== -1) {\n percentageCol++;\n }\n }\n return (gObj.width === 'auto' || typeof (gObj.width) === 'string' && gObj.width.indexOf('%') !== -1) &&\n !gObj.groupSettings.showGroupedColumn && gObj.groupSettings.columns.length\n && percentageCol && !undefinedWidthCol;\n}\n/**\n * @param {IGrid} gObj - Defines the IGrid\n * @param {Row[]} rows - Defines the row\n * @param {HTMLTableRowElement[]} rowElms - Row elements\n * @param {number} index - Row index\n * @param {number} startRowIndex - Start Row Index\n * @returns {void}\n * @hidden\n */\nexport function resetRowIndex(gObj, rows, rowElms, index, startRowIndex) {\n var startIndex = index ? index : 0;\n for (var i = startRowIndex ? startRowIndex : 0; i < rows.length; i++) {\n if (rows[parseInt(i.toString(), 10)] && rows[parseInt(i.toString(), 10)].isDataRow) {\n rows[parseInt(i.toString(), 10)].index = startIndex;\n rows[parseInt(i.toString(), 10)].isAltRow = gObj.enableAltRow ? startIndex % 2 !== 0 : false;\n rowElms[parseInt(i.toString(), 10)].setAttribute(literals.dataRowIndex, startIndex.toString());\n rowElms[parseInt(i.toString(), 10)].setAttribute(literals.ariaRowIndex, (startIndex + 1).toString());\n if (rows[parseInt(i.toString(), 10)].isAltRow) {\n rowElms[parseInt(i.toString(), 10)].classList.add('e-altrow');\n }\n else {\n rowElms[parseInt(i.toString(), 10)].classList.remove('e-altrow');\n }\n for (var j = 0; j < rowElms[parseInt(i.toString(), 10)].cells.length; j++) {\n rowElms[parseInt(i.toString(), 10)].cells[parseInt(j.toString(), 10)].setAttribute('index', startIndex.toString());\n }\n startIndex++;\n }\n }\n if (!rows.length) {\n gObj.renderModule.emptyRow(true);\n }\n}\n/**\n * @param {IGrid} gObj - Defines the grid object\n * @param {Object} changes - Defines the changes\n * @param {string} type - Defines the type\n * @param {string} keyField - Defines the keyfield\n * @returns {void}\n * @hidden\n */\nexport function compareChanges(gObj, changes, type, keyField) {\n var newArray = gObj.dataToBeUpdated[\"\" + type].concat(changes[\"\" + type]).reduce(function (r, o) {\n r[o[\"\" + keyField]] = r[o[\"\" + keyField]] === undefined ? o : Object.assign(r[o[\"\" + keyField]], o);\n return r;\n }, {});\n gObj.dataToBeUpdated[\"\" + type] = Object.keys(newArray).map(function (k) { return newArray[\"\" + k]; });\n}\n/**\n * @param {IGrid} gObj - Defines the grid object\n * @returns {void}\n * @hidden\n */\nexport function setRowElements(gObj) {\n (gObj).contentModule.rowElements =\n [].slice.call(gObj.element.querySelectorAll('.e-row:not(.e-addedrow)'));\n}\n/**\n * @param {Element} row - Defines the row\n * @param {number} start - Defines the start index\n * @param {number} end - Defines the end index\n * @returns {void}\n * @hidden\n */\nexport function sliceElements(row, start, end) {\n var cells = row.children;\n var len = cells.length;\n var k = 0;\n for (var i = 0; i < len; i++, k++) {\n if (i >= start && i < end) {\n continue;\n }\n row.removeChild(row.children[parseInt(k.toString(), 10)]);\n k--;\n }\n}\n/**\n * @param {Column} column - Defines the column\n * @param {string} uid - Defines the uid\n * @returns {boolean} Returns is child column\n * @hidden\n */\nexport function isChildColumn(column, uid) {\n var uids = [];\n uids.push(column.uid);\n pushuid(column, uids);\n if (uids.indexOf(uid) > -1) {\n return true;\n }\n else {\n return false;\n }\n}\n/**\n * @param {Column} column - Defines the column\n * @param {string[]} uids - Defines the uid\n * @returns {void}\n * @hidden\n */\nexport function pushuid(column, uids) {\n for (var i = 0; i < column.columns.length; i++) {\n if (column.columns[parseInt(i.toString(), 10)].uid) {\n uids.push(column.columns[parseInt(i.toString(), 10)].uid);\n }\n if (column.columns[parseInt(i.toString(), 10)].columns &&\n column.columns[parseInt(i.toString(), 10)].columns.length) {\n pushuid(column.columns[parseInt(i.toString(), 10)], uids);\n }\n }\n}\n/**\n * @param {Column} column - Defines the column\n * @returns {string} Returns the direction\n * @hidden\n */\nexport function frozenDirection(column) {\n if (column.columns[0].freeze || column.columns[0].isFrozen) {\n if (column.columns[0].freeze === 'Left' || column.columns[0].isFrozen) {\n return 'Left';\n }\n else if (column.columns[0].freeze === 'Right') {\n return 'Right';\n }\n else if (column.columns[0].freeze === 'Fixed') {\n return 'Fixed';\n }\n else {\n return 'None';\n }\n }\n else {\n if (column.columns[0].columns && column.columns[0].columns.length) {\n return frozenDirection(column.columns[0]);\n }\n else {\n return 'None';\n }\n }\n}\n/**\n * @param {Element} row - Defines the row\n * @returns {void}\n * @hidden\n */\nexport function addFixedColumnBorder(row) {\n if (row.querySelector('.e-fixedfreeze')) {\n var cells = [].slice.call(row.querySelectorAll('.e-filterbarcell:not(.e-hide),.e-summarycell:not(.e-hide),.e-headercell:not(.e-hide),.e-rowcell:not(.e-hide)'));\n for (var j = 0; j < cells.length; j++) {\n if (cells[parseInt(j.toString(), 10)].classList.contains('e-fixedfreeze') && (!(cells[j - 1]) ||\n (cells[j - 1] && !cells[j - 1].classList.contains('e-fixedfreeze')))) {\n cells[parseInt(j.toString(), 10)].classList.add('e-freezeleftborder');\n }\n if (cells[parseInt(j.toString(), 10)].classList.contains('e-fixedfreeze') && (!(cells[j + 1]) ||\n (cells[j + 1] && !cells[j + 1].classList.contains('e-fixedfreeze')))) {\n cells[parseInt(j.toString(), 10)].classList.add('e-freezerightborder');\n }\n }\n }\n}\n/**\n * @param {HTMLElement} node - Defines the row\n * @param {number} width - Defines the width\n * @param {boolean} isRtl - Boolean property\n * @param {string} position - Defines the position\n * @returns {void}\n * @hidden\n */\nexport function applyStickyLeftRightPosition(node, width, isRtl, position) {\n if (position === 'Left') {\n if (isRtl) {\n node.style.right = width + 'px';\n }\n else {\n node.style.left = width + 'px';\n }\n }\n if (position === 'Right') {\n if (isRtl) {\n node.style.left = width + 'px';\n }\n else {\n node.style.right = width + 'px';\n }\n }\n}\n/**\n * @param {IGrid} gObj - Defines the grid\n * @param {Column} column - Defines the column\n * @param {Element} node - Defines the Element\n * @returns {void}\n * @hidden\n */\nexport function addStickyColumnPosition(gObj, column, node) {\n if (column.freeze === 'Left' || column.isFrozen) {\n node.classList.add('e-leftfreeze');\n if (column.border === 'Left') {\n node.classList.add('e-freezeleftborder');\n }\n if (column.index === 0) {\n applyStickyLeftRightPosition(node, (gObj.getIndentCount() * 30), gObj.enableRtl, 'Left');\n if (gObj.enableColumnVirtualization) {\n column.valueX = (gObj.getIndentCount() * 30);\n }\n }\n else {\n var cols = gObj.getColumns();\n var width = gObj.getIndentCount() * 30;\n for (var i = 0; i < cols.length; i++) {\n if (column.uid === cols[parseInt(i.toString(), 10)].uid) {\n break;\n }\n if (cols[parseInt(i.toString(), 10)].visible) {\n width += parseFloat(cols[parseInt(i.toString(), 10)].width.toString());\n }\n }\n applyStickyLeftRightPosition(node, width, gObj.enableRtl, 'Left');\n if (gObj.enableColumnVirtualization) {\n column.valueX = width;\n }\n }\n }\n else if (column.freeze === 'Right') {\n node.classList.add('e-rightfreeze');\n var cols = gObj.getColumns();\n if (column.border === 'Right') {\n node.classList.add('e-freezerightborder');\n }\n if (column.index === cols[cols.length - 1].index) {\n var width = gObj.getFrozenMode() === 'Right' && gObj.isRowDragable() ? 30 : 0;\n applyStickyLeftRightPosition(node, width, gObj.enableRtl, 'Right');\n if (gObj.enableColumnVirtualization) {\n column.valueX = width;\n }\n }\n else {\n var width = gObj.getFrozenMode() === 'Right' && gObj.isRowDragable() ? 30 : 0;\n for (var i = cols.length - 1; i >= 0; i--) {\n if (column.uid === cols[parseInt(i.toString(), 10)].uid) {\n break;\n }\n if (cols[parseInt(i.toString(), 10)].visible) {\n width += parseFloat(cols[parseInt(i.toString(), 10)].width.toString());\n }\n }\n applyStickyLeftRightPosition(node, width, gObj.enableRtl, 'Right');\n if (gObj.enableColumnVirtualization) {\n column.valueX = width;\n }\n }\n }\n else if (column.freeze === 'Fixed') {\n node.classList.add('e-fixedfreeze');\n var cols = gObj.getColumns();\n var width = 0;\n if (gObj.getVisibleFrozenLeftCount()) {\n width = gObj.getIndentCount() * 30;\n }\n else if (gObj.getFrozenMode() === 'Right') {\n width = gObj.groupSettings.columns.length * 30;\n }\n for (var i = 0; i < cols.length; i++) {\n if (column.uid === cols[parseInt(i.toString(), 10)].uid) {\n break;\n }\n if ((cols[parseInt(i.toString(), 10)].freeze === 'Left' || cols[parseInt(i.toString(), 10)].isFrozen) ||\n cols[parseInt(i.toString(), 10)].freeze === 'Fixed') {\n if (cols[parseInt(i.toString(), 10)].visible) {\n width += parseFloat(cols[parseInt(i.toString(), 10)].width.toString());\n }\n }\n }\n applyStickyLeftRightPosition(node, (width - 1), gObj.enableRtl, 'Left');\n width = gObj.getFrozenMode() === 'Right' && gObj.isRowDragable() ? 30 : 0;\n for (var i = cols.length - 1; i >= 0; i--) {\n if (column.uid === cols[parseInt(i.toString(), 10)].uid) {\n break;\n }\n if (cols[parseInt(i.toString(), 10)].freeze === 'Right' || cols[parseInt(i.toString(), 10)].freeze === 'Fixed') {\n if (cols[parseInt(i.toString(), 10)].visible) {\n width += parseFloat(cols[parseInt(i.toString(), 10)].width.toString());\n }\n }\n }\n applyStickyLeftRightPosition(node, (width - 1), gObj.enableRtl, 'Right');\n }\n else {\n node.classList.add('e-unfreeze');\n }\n}\n/**\n * @param {IGrid} gObj - Defines the grid Object\n * @param {Column} col - Defines the column\n * @param {number} rowIndex - Defines the rowindex\n * @returns {Element} Returns the element\n * @hidden\n */\nexport function getCellsByTableName(gObj, col, rowIndex) {\n return [].slice.call(gObj.getDataRows()[parseInt(rowIndex.toString(), 10)].getElementsByClassName(literals.rowCell));\n}\n/**\n * @param {IGrid} gObj - Defines the column\n * @param {Column} col - Defines the index\n * @param {number} rowIndex - Defines the rules\n * @param {number} index - Defines the movable column rules\n * @returns {Element} Returns the Element\n * @hidden\n */\nexport function getCellByColAndRowIndex(gObj, col, rowIndex, index) {\n return getCellsByTableName(gObj, col, rowIndex)[parseInt(index.toString(), 10)];\n}\n/**\n * @param {Column} col - Defines the column\n * @param {number} index - Defines the index\n * @param {Object} rules - Defines the rules\n * @param {Object} mRules - Defines the movable column rules\n * @param {Object} frRules - Defines the Frozen rules\n * @param {number} len - Defines the length\n * @param {boolean} isCustom - Defines custom form validation\n * @returns {void}\n * @hidden\n */\nexport function setValidationRuels(col, index, rules, mRules, frRules, len, isCustom) {\n if (isCustom) {\n rules[getComplexFieldID(col.field)] = col.validationRules;\n }\n else {\n if (col.getFreezeTableName() === literals.frozenLeft\n || (!index && col.getFreezeTableName() === literals.frozenRight) || len === 1) {\n rules[getComplexFieldID(col.field)] = col.validationRules;\n }\n else if (col.getFreezeTableName() === 'movable' || !col.getFreezeTableName()) {\n mRules[getComplexFieldID(col.field)] = col.validationRules;\n }\n else if (col.getFreezeTableName() === literals.frozenRight) {\n frRules[getComplexFieldID(col.field)] = col.validationRules;\n }\n }\n}\n/**\n * @param {string} numberFormat - Format\n * @param {string} type - Value type\n * @param {boolean} isExcel - Boolean property\n * @param {string} currencyCode - Specifies the currency code to be used for formatting.\n * @returns {string} returns formated value\n * @hidden\n */\nexport function getNumberFormat(numberFormat, type, isExcel, currencyCode) {\n var format;\n var intl = new Internationalization();\n if (type === 'number') {\n try {\n format = intl.getNumberPattern({ format: numberFormat, currency: currencyCode, useGrouping: true }, true);\n }\n catch (error) {\n format = numberFormat;\n }\n }\n else if (type === 'date' || type === 'time' || type === 'datetime') {\n try {\n format = intl.getDatePattern({ skeleton: numberFormat, type: type }, isExcel);\n if (isNullOrUndefined(format)) {\n // eslint-disable-next-line\n throw 'error';\n }\n }\n catch (error) {\n try {\n format = intl.getDatePattern({ format: numberFormat, type: type }, isExcel);\n }\n catch (error) {\n format = numberFormat;\n }\n }\n }\n else {\n format = numberFormat;\n }\n if (type !== 'number') {\n var patternRegex = /G|H|c|'| a|yy|y|EEEE|E/g;\n var mtch_1 = { 'G': '', 'H': 'h', 'c': 'd', '\\'': '\"', ' a': ' AM/PM', 'yy': 'yy', 'y': 'yyyy', 'EEEE': 'dddd', 'E': 'ddd' };\n format = format.replace(patternRegex, function (pattern) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return mtch_1[\"\" + pattern];\n });\n }\n return format;\n}\n/**\n * @param {IGrid} gObj - Grid instance\n * @returns {void}\n * @hidden\n */\nexport function addBiggerDialog(gObj) {\n if (gObj.enableAdaptiveUI) {\n var dialogs = document.getElementsByClassName('e-responsive-dialog');\n for (var i = 0; i < dialogs.length; i++) {\n dialogs[parseInt(i.toString(), 10)].classList.add('e-bigger');\n }\n }\n}\n/**\n * @param {string} value - specifies the trr\n * @param {Object} mapObject - specifies the idx\n * @returns {Object | string} returns object or string\n * @hidden\n */\nexport function performComplexDataOperation(value, mapObject) {\n var returnObj;\n var length = value.split('.').length;\n var splits = value.split('.');\n var duplicateMap = mapObject;\n for (var i = 0; i < length; i++) {\n returnObj = duplicateMap[splits[parseInt(i.toString(), 10)]];\n duplicateMap = returnObj;\n }\n return returnObj;\n}\n/**\n * @param {Object} tr - specifies the trr\n * @param {number} idx - specifies the idx\n * @param {string} displayVal - specifies the displayval\n * @param {Row} rows - specifies the rows\n * @param {IGrid} parent - Grid instance\n * @param {boolean} isContent - check for content renderer\n * @returns {void}\n * @hidden\n */\nexport function setDisplayValue(tr, idx, displayVal, rows, parent, isContent) {\n var trs = Object.keys(tr);\n var actualIndex = idx;\n for (var i = 0; i < trs.length; i++) {\n var td = tr[trs[parseInt(i.toString(), 10)]].querySelectorAll('td.e-rowcell')[parseInt(idx.toString(), 10)];\n if (parent && !parent.isFrozenGrid() && !parent.isRowDragable()) {\n td = (!isNullOrUndefined(td) && (parseInt(td.getAttribute('data-colindex'), 10) === idx))\n ? td : tr[parseInt(i.toString(), 10)].querySelector(\"td[data-colindex=\\\"\" + idx + \"\\\"]\");\n if (isNullOrUndefined(td)) {\n continue;\n }\n else {\n idx = (parent.getContentTable().querySelector('.e-detailrowcollapse, .e-detailrowexpand')) ?\n (td.cellIndex - 1) : td.cellIndex;\n }\n }\n if (tr[trs[parseInt(i.toString(), 10)]].querySelectorAll('td.e-rowcell').length && td) {\n setStyleAttribute(tr[trs[parseInt(i.toString(), 10)]].querySelectorAll('td.e-rowcell')[parseInt(idx.toString(), 10)], { 'display': displayVal });\n if (tr[trs[parseInt(i.toString(), 10)]].querySelectorAll('td.e-rowcell')[parseInt(idx.toString(), 10)].classList.contains('e-hide')) {\n removeClass([tr[trs[parseInt(i.toString(), 10)]].querySelectorAll('td.e-rowcell')[parseInt(idx.toString(), 10)]], ['e-hide']);\n }\n if ((isContent && parent.isRowDragable()) || (parent && parent.isDetail())) {\n var index = idx + 1;\n rows[trs[parseInt(i.toString(), 10)]].cells[parseInt(index.toString(), 10)].visible = displayVal === '' ? true : false;\n }\n else {\n if (!isNullOrUndefined(rows[trs[parseInt(i.toString(), 10)]])) {\n rows[trs[parseInt(i.toString(), 10)]].cells[parseInt(idx.toString(), 10)].visible = displayVal === '' ? true : false;\n if (rows[trs[parseInt(i.toString(), 10)]].cells[parseInt(idx.toString(), 10)].visible === false) {\n tr[trs[parseInt(i.toString(), 10)]].querySelectorAll('td.e-rowcell')[parseInt(idx.toString(), 10)].classList.add('e-hide');\n }\n }\n }\n idx = actualIndex;\n }\n }\n}\n// eslint-disable-next-line\n/** @hidden */\nexport function addRemoveEventListener(parent, evt, isOn, module) {\n for (var _i = 0, evt_1 = evt; _i < evt_1.length; _i++) {\n var inst = evt_1[_i];\n if (isOn) {\n parent.on(inst.event, inst.handler, module);\n }\n else {\n parent.off(inst.event, inst.handler);\n }\n }\n}\n// eslint-disable-next-line\n/** @hidden */\nexport function createEditElement(parent, column, classNames, attr) {\n var complexFieldName = getComplexFieldID(column.field);\n attr = Object.assign(attr, {\n id: parent.element.id + complexFieldName,\n name: complexFieldName, 'e-mappinguid': column.uid\n });\n return parent.createElement('input', {\n className: classNames, attrs: attr\n });\n}\n/**\n * @param {IGrid} gObj - Grid instance\n * @param {string} uid - Defines column's uid\n * @returns {Column} returns column model\n * @hidden\n */\nexport function getColumnModelByUid(gObj, uid) {\n var column;\n for (var _i = 0, _a = (gObj.columnModel); _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.uid === uid) {\n column = col;\n break;\n }\n }\n return column;\n}\n/**\n * @param {IGrid} gObj - Grid instance\n * @param {string} field - Defines column's uid\n * @returns {Column} returns column model\n * @hidden\n */\nexport function getColumnModelByFieldName(gObj, field) {\n var column;\n if (!gObj.columnModel) {\n gObj.getColumns();\n }\n for (var _i = 0, _a = (gObj.columnModel); _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.field === field) {\n column = col;\n break;\n }\n }\n return column;\n}\n/**\n * @param {string} id - Defines component id\n * @param {string[]} evts - Defines events\n * @param {object} handlers - Defines event handlers\n * @param {any} instance - Defines class instance\n * @returns {void}\n * @hidden\n */\n// eslint-disable-next-line\nexport function registerEventHandlers(id, evts, handlers, instance) {\n instance.eventHandlers[\"\" + id] = {};\n for (var i = 0; i < evts.length; i++) {\n instance.eventHandlers[\"\" + id][evts[parseInt(i.toString(), 10)]] = handlers[evts[parseInt(i.toString(), 10)]];\n }\n}\n/**\n * @param {any} component - Defines component instance\n * @param {string[]} evts - Defines events\n * @param {any} instance - Defines class instance\n * @returns {void}\n * @hidden\n */\n// eslint-disable-next-line\nexport function removeEventHandlers(component, evts, instance) {\n for (var i = 0; i < evts.length; i++) {\n if (component.isDestroyed) {\n break;\n }\n component.removeEventListener(evts[parseInt(i.toString(), 10)], instance.eventHandlers[component.element.id][evts[parseInt(i.toString(), 10)]]);\n }\n}\n/**\n * @param {IGrid | IXLFilter} parent - Defines parent instance\n * @param {string[]} templates - Defines the templates name which are needs to clear\n * @returns {void}\n * @hidden\n */\nexport function clearReactVueTemplates(parent, templates) {\n parent.destroyTemplate(templates);\n if (parent.isReact) {\n parent.renderTemplates();\n }\n}\n/**\n *\n * @param { Element } row - Defines row element\n * @returns { number } row index\n */\nexport function getRowIndexFromElement(row) {\n return parseInt(row.getAttribute(literals.dataRowIndex), 10);\n}\n/**\n *\n * @param { string[] } fields - Defines grouped fields\n * @param { values } values - Defines caption keys\n * @param { any } instance - Defines dynamic class instance\n * @returns { Predicate } returns filter predicate\n */\n// eslint-disable-next-line\nexport function generateExpandPredicates(fields, values, instance) {\n var filterCols = [];\n for (var i = 0; i < fields.length; i++) {\n var column = instance.parent.getColumnByField(fields[parseInt(i.toString(), 10)]);\n var value = values[parseInt(i.toString(), 10)] === 'null' ? null : values[parseInt(i.toString(), 10)];\n var pred = {\n field: fields[parseInt(i.toString(), 10)], predicate: 'or', uid: column.uid, operator: 'equal', type: column.type,\n matchCase: instance.allowCaseSensitive, ignoreAccent: instance.parent.filterSettings.ignoreAccent\n };\n if (value === '' || isNullOrUndefined(value)) {\n filterCols = filterCols.concat(CheckBoxFilterBase.generateNullValuePredicates(pred));\n }\n else {\n filterCols.push(extend({}, { value: value }, pred));\n }\n }\n return CheckBoxFilterBase.getPredicate(filterCols);\n}\n/**\n *\n * @param { Predicate } pred - Defines filter predicate\n * @returns { Predicate[] } Returns formed predicate\n */\nexport function getPredicates(pred) {\n var predicateList = [];\n for (var _i = 0, _a = Object.keys(pred); _i < _a.length; _i++) {\n var prop = _a[_i];\n predicateList.push(pred[\"\" + prop]);\n }\n return predicateList;\n}\n/**\n *\n * @param { number } index - Defines group caption indent\n * @param { Row[] } rowsObject - Defines rows object\n * @returns { { fields: string[], keys: string[] } } Returns grouped keys and values\n */\nexport function getGroupKeysAndFields(index, rowsObject) {\n var fields = [];\n var keys = [];\n for (var i = index; i >= 0; i--) {\n if (rowsObject[parseInt(i.toString(), 10)].isCaptionRow\n && fields.indexOf(rowsObject[parseInt(i.toString(), 10)].data.field) === -1\n && (rowsObject[parseInt(i.toString(), 10)].indent < rowsObject[parseInt(index.toString(), 10)].indent || i === index)) {\n fields.push(rowsObject[parseInt(i.toString(), 10)].data.field);\n keys.push(rowsObject[parseInt(i.toString(), 10)].data.key);\n if (rowsObject[parseInt(i.toString(), 10)].indent === 0) {\n break;\n }\n }\n }\n return { fields: fields, keys: keys };\n}\n// eslint-disable-next-line\n/**\n *\n * @param { number[][] } checkActiveMatrix - Defines matrix to check\n * @param { number[] } checkCellIndex - Defines index to check\n * @param { boolean } next - Defines select next or previous index\n * @returns { number[] } - Returns next active current index\n */\nexport function findCellIndex(checkActiveMatrix, checkCellIndex, next) {\n var activeMatrix = checkActiveMatrix;\n var cellIndex = checkCellIndex;\n var currentCellIndexPass = false;\n if (next) {\n for (var i = cellIndex[0]; i < activeMatrix.length; i++) {\n var rowCell = activeMatrix[parseInt(i.toString(), 10)];\n for (var j = 0; j < rowCell.length; j++) {\n if (currentCellIndexPass && activeMatrix[parseInt(i.toString(), 10)][parseInt(j.toString(), 10)] === 1) {\n cellIndex = [i, j];\n return cellIndex;\n }\n if (!currentCellIndexPass && cellIndex.toString() === [i, j].toString()) {\n currentCellIndexPass = true;\n }\n }\n }\n }\n else {\n for (var i = cellIndex[0]; i >= 0; i--) {\n var rowCell = activeMatrix[parseInt(i.toString(), 10)];\n for (var j = rowCell.length - 1; j >= 0; j--) {\n if (currentCellIndexPass && activeMatrix[parseInt(i.toString(), 10)][parseInt(j.toString(), 10)] === 1) {\n cellIndex = [i, j];\n return cellIndex;\n }\n if (!currentCellIndexPass && cellIndex.toString() === [i, j].toString()) {\n currentCellIndexPass = true;\n }\n }\n }\n }\n return cellIndex;\n}\n/**\n *\n * @param { string } string - Defines string need to capitalized first letter\n * @returns { string } - Returns capitalized first letter string\n */\nexport function capitalizeFirstLetter(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n","import { isNullOrUndefined, attributes } from '@syncfusion/ej2-base';\nimport { iterateArrayOrObject } from '../base/util';\nimport { CellType } from '../base/enum';\n/**\n * `CellMergeRender` module.\n *\n * @hidden\n */\nvar CellMergeRender = /** @class */ (function () {\n function CellMergeRender(serviceLocator, parent) {\n this.serviceLocator = serviceLocator;\n this.parent = parent;\n }\n CellMergeRender.prototype.render = function (cellArgs, row, i, td) {\n var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n var cellRenderer = cellRendererFact.getCellRenderer(row.cells[parseInt(i.toString(), 10)].cellType\n || CellType.Data);\n var colSpan = row.cells[parseInt(i.toString(), 10)].cellSpan ? row.cells[parseInt(i.toString(), 10)].cellSpan :\n (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 if (row.index > 0) {\n var rowsObject = this.parent.getRowsObject();\n var cells = this.parent.groupSettings.columns.length > 0 &&\n !rowsObject[row.index - 1].isDataRow ? rowsObject[row.index].cells : rowsObject[row.index - 1].cells;\n var targetCell_1 = row.cells[parseInt(i.toString(), 10)];\n var uid_1 = 'uid';\n spannedCell = cells.filter(function (cell) { return cell.column.uid === targetCell_1.column[\"\" + uid_1]; })[0];\n }\n var colSpanLen = spannedCell && spannedCell.colSpanRange > 1 && spannedCell.rowSpanRange > 1 ?\n spannedCell.colSpanRange : colSpan;\n for (var j = i + 1; j < i + colSpanLen && j < row.cells.length; j++) {\n if (row.cells[parseInt(j.toString(), 10)].visible === false) {\n visible++;\n }\n else {\n row.cells[parseInt(j.toString(), 10)].isSpanned = true;\n }\n }\n if (visible > 0) {\n for (var j = i + colSpan; j < i + colSpan + visible && j < row.cells.length; j++) {\n row.cells[parseInt(j.toString(), 10)].isSpanned = true;\n }\n if (i + colSpan + visible >= row.cells.length) {\n colSpan -= (i + colSpan + visible) - row.cells.length;\n }\n }\n if (row.cells[parseInt(i.toString(), 10)].cellSpan) {\n row.data[cellArgs.column.field] = row.cells[parseInt(i.toString(), 10)].spanText;\n td = cellRenderer.render(row.cells[parseInt(i.toString(), 10)], row.data, { 'index': !isNullOrUndefined(row.index) ? row.index.toString() : '' });\n }\n if (colSpan > 1) {\n attributes(td, { 'colSpan': colSpan.toString(), 'aria-colSpan': colSpan.toString() });\n }\n if (rowSpan > 1) {\n attributes(td, { 'rowspan': rowSpan.toString(), 'aria-rowspan': rowSpan.toString() });\n row.cells[parseInt(i.toString(), 10)].isRowSpanned = true;\n row.cells[parseInt(i.toString(), 10)].rowSpanRange = Number(rowSpan);\n if (colSpan > 1) {\n row.cells[parseInt(i.toString(), 10)].colSpanRange = Number(colSpan);\n }\n }\n if (row.index > 0 && (spannedCell.rowSpanRange > 1)) {\n row.cells[parseInt(i.toString(), 10)].isSpanned = true;\n row.cells[parseInt(i.toString(), 10)].rowSpanRange = Number(spannedCell.rowSpanRange - 1);\n row.cells[parseInt(i.toString(), 10)].colSpanRange = spannedCell.rowSpanRange > 0 ? spannedCell.colSpanRange : 1;\n }\n if (this.parent.enableColumnVirtualization && !row.cells[parseInt(i.toString(), 10)].cellSpan &&\n !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 return td;\n };\n CellMergeRender.prototype.backupMergeCells = function (fName, data, span) {\n this.setMergeCells(this.generteKey(fName, data), span);\n };\n CellMergeRender.prototype.generteKey = function (fname, data) {\n return fname + '__' + data.toString();\n };\n CellMergeRender.prototype.splitKey = function (key) {\n return key.split('__');\n };\n CellMergeRender.prototype.containsKey = function (fname, data) {\n // eslint-disable-next-line no-prototype-builtins\n return this.getMergeCells().hasOwnProperty(this.generteKey(fname, data));\n };\n CellMergeRender.prototype.getMergeCells = function () {\n return this.parent.mergeCells;\n };\n CellMergeRender.prototype.setMergeCells = function (key, span) {\n this.parent.mergeCells[\"\" + key] = span;\n };\n CellMergeRender.prototype.updateVirtualCells = function (rows) {\n var mCells = this.getMergeCells();\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 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 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 return rows;\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 return undefined;\n })[0];\n return index;\n };\n return CellMergeRender;\n}());\nexport { CellMergeRender };\n","import { EventHandler, extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { remove, select, removeClass } from '@syncfusion/ej2-base';\nimport { Toolbar as tool } from '@syncfusion/ej2-navigations';\nimport * as events from '../base/constant';\nimport { templateCompiler, appendChildren, parentsUntil, addRemoveEventListener, applyBiggerTheme } from '../base/util';\nimport { ResponsiveToolbarAction } from '../base/enum';\nimport { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { calculatePosition } from '@syncfusion/ej2-popups';\nimport { SearchBox } from '../services/focus-strategy';\n/**\n *\n * The `Toolbar` module is used to handle ToolBar actions.\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent, serviceLocator) {\n this.predefinedItems = {};\n this.isSearched = false;\n this.items = ['Add', 'Edit', 'Update', 'Delete', 'Cancel', 'Print', 'Search',\n 'ColumnChooser', 'PdfExport', 'ExcelExport', 'CsvExport', 'WordExport'];\n this.isRightToolbarMenu = false;\n this.parent = parent;\n this.gridID = parent.element.id;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n Toolbar.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n var preItems = ['Add', 'Edit', 'Update', 'Delete', 'Cancel', 'Print',\n 'PdfExport', 'ExcelExport', 'WordExport', 'CsvExport'];\n var isAdaptive = this.parent.enableAdaptiveUI;\n var excludingItems = ['Edit', 'Delete', 'Update', 'Cancel'];\n for (var _i = 0, preItems_1 = preItems; _i < preItems_1.length; _i++) {\n var item = preItems_1[_i];\n var itemStr = item.toLowerCase();\n var localeName = itemStr[0].toUpperCase() + itemStr.slice(1);\n this.predefinedItems[\"\" + item] = {\n id: this.gridID + '_' + itemStr, prefixIcon: 'e-' + itemStr,\n text: this.l10n.getConstant(localeName), tooltipText: this.l10n.getConstant(localeName)\n };\n if (isAdaptive) {\n this.predefinedItems[\"\" + item].text = '';\n this.predefinedItems[\"\" + item].visible = excludingItems.indexOf(item) === -1;\n }\n }\n this.predefinedItems.Search = {\n id: this.gridID + '_search',\n tooltipText: this.l10n.getConstant('Search'), align: 'Right', cssClass: 'e-search-wrapper',\n type: 'Input'\n };\n this.isRightToolbarMenu = false;\n if (this.parent.enableAdaptiveUI && this.isResponsiveToolbarMenuItems(true) && ((this.parent.rowRenderingMode === 'Horizontal') ||\n (this.parent.rowRenderingMode === 'Vertical' && !this.parent.allowFiltering && !this.parent.allowSorting))) {\n this.isRightToolbarMenu = true;\n }\n if (isAdaptive && this.isResponsiveToolbarMenuItems(false)) {\n this.predefinedItems.responsiveToolbarItems = {\n id: this.gridID + '_' + 'responsivetoolbaritems', cssClass: 'e-responsive-toolbar-items e-menu-toolbar', suffixIcon: 'e-' + 'responsivetoolbaritems-btn',\n align: this.isRightToolbarMenu ? 'Left' : 'Right'\n };\n }\n else {\n this.predefinedItems.ColumnChooser = {\n id: this.gridID + '_' + 'columnchooser', cssClass: 'e-cc e-ccdiv e-cc-toolbar', suffixIcon: 'e-' + 'columnchooser-btn',\n text: isAdaptive ? '' : this.l10n.getConstant('Columnchooser'),\n tooltipText: this.l10n.getConstant('Columnchooser'), align: 'Right'\n };\n }\n if (this.parent.rowRenderingMode === 'Vertical') {\n if (this.parent.allowFiltering && this.parent.filterSettings.type !== 'FilterBar') {\n this.predefinedItems.responsiveFilter = {\n id: this.gridID + '_' + 'responsivefilter', cssClass: 'e-gridresponsiveicons e-icons',\n suffixIcon: 'e-' + 'resfilter-icon', tooltipText: this.l10n.getConstant('FilterButton')\n };\n }\n if (this.parent.allowSorting) {\n this.predefinedItems.responsiveSort = {\n id: this.gridID + '_' + 'responsivesort', cssClass: 'e-gridresponsiveicons e-icons',\n suffixIcon: 'e-' + 'ressort-icon', tooltipText: this.l10n.getConstant('Sort')\n };\n }\n }\n if (this.parent.enableAdaptiveUI && this.parent.toolbar && this.parent.toolbar.indexOf('Search') > -1) {\n this.predefinedItems.responsiveBack = {\n id: this.gridID + '_' + 'responsiveback', cssClass: 'e-gridresponsiveicons e-icons',\n suffixIcon: 'e-' + 'resback-icon', visible: false\n };\n }\n this.createToolbar();\n if (this.parent.enableAdaptiveUI) {\n if (isNullOrUndefined(this.responsiveToolbarMenu)) {\n this.renderResponsiveToolbarpopup();\n }\n this.toolbar.refreshOverflow();\n }\n };\n Toolbar.prototype.isResponsiveToolbarMenuItems = function (isRight) {\n var items = isRight ? ['Add', 'Edit', 'Delete', 'Search'] : ['Print', 'ColumnChooser', 'PdfExport', 'ExcelExport', 'CsvExport'];\n var toolbarItems = this.parent.toolbar || [];\n for (var i = 0; i < items.length; i++) {\n if (toolbarItems.indexOf(items[parseInt(i.toString(), 10)]) >= 0) {\n return isRight ? false : true;\n }\n }\n return isRight ? true : false;\n };\n /**\n * Gets the toolbar of the Grid.\n *\n * @returns {Element} returns the element\n * @hidden\n */\n Toolbar.prototype.getToolbar = function () {\n return this.toolbar.element;\n };\n /**\n * Destroys the ToolBar.\n *\n * @function destroy\n * @returns {void}\n */\n Toolbar.prototype.destroy = function () {\n if (this.toolbar && !this.toolbar.isDestroyed) {\n if (this.responsiveToolbarMenu) {\n this.responsiveToolbarMenu.destroy();\n }\n if (!this.toolbar.element) {\n this.parent.destroyTemplate(['toolbarTemplate']);\n if (this.parent.isReact) {\n this.parent.renderTemplates();\n }\n }\n else {\n this.toolbar.off('render-react-toolbar-template', this.addReactToolbarPortals);\n this.toolbar.destroy();\n }\n this.unWireEvent();\n this.removeEventListener();\n if (this.element.parentNode) {\n remove(this.element);\n }\n }\n };\n Toolbar.prototype.bindSearchEvents = function () {\n this.searchElement = select('#' + this.gridID + '_searchbar', this.element);\n this.wireEvent();\n this.refreshToolbarItems();\n if (this.parent.searchSettings) {\n this.updateSearchBox();\n }\n };\n Toolbar.prototype.toolbarCreated = function (isNormal) {\n if (this.element.querySelector('.e-search-wrapper')) {\n if (!this.parent.enableAdaptiveUI || isNormal) {\n var classList = this.parent.cssClass ? 'e-input-group e-search ' + this.parent.cssClass\n : 'e-input-group e-search';\n this.element.querySelector('.e-search-wrapper').innerHTML = '
\\\n \\\n \\\n \\\n
';\n }\n else {\n this.element.querySelector('.e-search-wrapper').innerHTML = '\\\n \\\n
';\n }\n }\n if (this.element.querySelector('.e-responsive-toolbar-items')) {\n this.element.querySelector('.e-responsive-toolbar-items').innerHTML = '