{"version":3,"sources":["../node_modules/react-tabulator/lib/Utils.js","../node_modules/react-tabulator/lib/ReactTabulator.js","../node_modules/pick-react-known-prop/dist/index.js","../node_modules/react-tabulator/lib/ConfigUtils.js","../node_modules/tabulator-tables/dist/js/tabulator.es2015.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/regenerator/index.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../node_modules/react-tabulator/lib/index.js","../config/versionTemplate.txt","../lib/es6-promise/utils.js","../lib/es6-promise/asap.js","../lib/es6-promise/then.js","../lib/es6-promise/promise/resolve.js","../lib/es6-promise/-internal.js","../lib/es6-promise/enumerator.js","../lib/es6-promise/promise.js","../lib/es6-promise/promise/reject.js","../lib/es6-promise/promise/all.js","../lib/es6-promise/promise/race.js","../lib/es6-promise.js","../lib/es6-promise/polyfill.js","../node_modules/react-tabulator/lib/React15Tabulator.js","../node_modules/react-tabulator/lib/ReactTabulatorExample.js","../node_modules/react-tabulator/lib/editors/DateEditor.js","../node_modules/react-tabulator/lib/editors/DateEditorUtils.js","../node_modules/react-tabulator/lib/editors/MultiSelectEditor.js","../node_modules/react-tag-autocomplete/dist-es5/ReactTags.js","../node_modules/react-tag-autocomplete/dist-es5/Tag.js","../node_modules/react-tag-autocomplete/dist-es5/Input.js","../node_modules/react-tag-autocomplete/dist-es5/Suggestions.js","../node_modules/react-tabulator/lib/formatters/MultiValueFormatter.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createSuper.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/fuse.js/dist/fuse.mjs"],"names":["exports","__esModule","reactFormatter","isSameObject","isSameArray","clone","React","require","react_dom_1","stringifyCensor","censor","i","key","value","obj","JSON","parse","stringify","a","b","length","JSX","cell","formatterParams","onRendered","renderFn","cellEl","getElement","querySelector","CompWithMoreProps","cloneElement","render","setTimeout","__extends","this","extendStatics","d","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","TypeError","String","__","constructor","create","__assign","assign","t","s","n","arguments","apply","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","Symbol","iterator","v","op","pop","push","__spreadArray","to","from","il","j","ReactDOM","pick_react_known_prop_1","ConfigUtils_1","Utils_1","tabulator_tables_1","default_1","_super","_this","state","data","columns","props","options","ref","htmlProps","mainId","Date","Math","floor","random","table","pickValidHTMLProps","pickHTMLProps","initTabulator","_a","domEle","that","_b","propOptions","_c","findDOMNode","propsToOptions","layout","tableBuilding","dataLoaded","invalidOptionWarnings","setState","componentDidMount","componentWillUnmount","destroy","getDerivedStateFromProps","noData","componentDidUpdate","prevProps","prevState","setData","setColumns","className","createElement","Component","module","modules","installedModules","__webpack_require__","moduleId","id","loaded","m","c","defineProperty","pickSVGProps","undefined","_pickHtmlProps2","_interopRequireDefault","_pickSvgProps2","default","_extends","target","source","_htmlAttributes2","_pickProps2","ReactHTMLAttrs","reduce","attrs","prop","Boolean","test","_lodash","_lodash2","filter","Error","out","func","transform","funcProto","Function","objectProto","funcToString","toString","objectCtorString","objectToString","getPrototype","getPrototypeOf","arg","isObjectLike","isHostObject","proto","Ctor","_svgAttributes2","Es6Promise","NOOPS","syncRender","comp","el","output","_i","defaultOptions_1","opt","callbackNames_1","callbackName","document","innerHTML","_typeof","findIndex","predicate","o","len","k","kValue","find","includes","search","start","RegExp","indexOf","searchElement","fromIndex","x","max","abs","isNaN","varArgs","index","nextSource","nextKey","writable","configurable","ColumnManager","blockHozScrollEvent","headersElement","createHeadersElement","element","createHeaderElement","rowManager","columnsByIndex","columnsByField","scrollLeft","insertBefore","firstChild","classList","add","headerVisible","initialize","setRowManager","manager","getHeadersElement","scrollHorizontal","left","hozAdjust","scrollWidth","clientWidth","style","marginLeft","modExists","frozenColumns","generateColumnsFromRowData","row","sorter","cols","definitions","autoColumnsDefinitions","col","field","title","isArray","match","forEach","def","self","removeChild","reset","_addColumn","_reIndexColumns","responsiveLayout","virtualDomHoz","vdomHoz","reinitialize","redraw","definition","before","nextToColumn","column","Column","colEl","findColumnIndex","parentIndex","getTopColumn","nextEl","splice","parentNode","nextSibling","unshift","appendChild","columnRendered","registerColumnField","registerColumnPosition","reRegisterPosition","_verticalAlignHeaders","minHeight","height","clearVerticalAlign","getHeight","verticalAlign","columnHeaderVertAlign","adjustTableSize","findColumn","subject","ColumnComponent","_getSelf","HTMLElement","getColumnByField","getColumnsByFieldRoot","root","matches","keys","split","getColumnByIndex","getFirstVisibileColumn","visible","getColumns","getRealColumns","traverse","callback","getDefinitions","active","getDefinition","getDefinitionTree","getComponents","structured","getComponent","getWidth","width","moveColumn","after","moveColumnActual","columnCalcs","recalc","activeRows","parent","isGroup","_moveColumnInArray","columnMoved","columnManager","persistence","config","save","updateRows","toIndex","_this2","rows","dataTree","concat","getTreeChildren","cells","scrollToColumn","position","ifVisible","_this3","offset","adjust","scrollToColumnPosition","scrollToColumnIfVisible","offsetLeft","offsetWidth","min","console","warn","generateCells","generateCell","getFlexBaseWidth","totalWidth","fixedWidth","scrollHeight","clientHeight","minWidth","colWidth","columnMinWidth","parseInt","addColumn","_this4","getMode","reinitializeWidth","deregisterColumn","getField","force","Tabulator","helpers","elVisible","resetScroll","update","footerManager","_column","type","getCells","getVisibility","isVisible","show","hide","toggle","delete","getSubColumns","getParentColumn","scrollTo","getTable","headerFilterFocus","setHeaderFilterFocus","reloadHeaderFilter","getHeaderFilterValue","setHeaderFilterValue","move","toColumn","getNextColumn","nextCol","nextColumn","getPrevColumn","prevCol","prevColumn","updateDefinition","updates","setWidth","validate","contentElement","titleHolderElement","titleElement","groupElement","createGroupElement","tooltip","hozAlign","vertAlign","fieldStructure","getFieldValue","setFieldValue","titleFormatterRendered","setField","checkDefinition","cellEvents","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","widthStyled","maxWidth","maxWidthStyled","minWidthStyled","widthFixed","component","_mapDepricatedFunctionality","newCol","attachColumn","checkColumnVisibility","rowHandle","movableRows","moveRow","setHandle","_buildHeader","bindModuleColumns","setAttribute","_this5","defaultOptionList","nestedFieldSeparator","_getNestedData","_getFlatData","_setNestedData","_setFlatData","hideInHtml","htmlOutput","align","downloadTitle","titleDownload","setTooltip","headerTooltip","tooltipsHeader","localize","bind","headerVertical","_bindEvents","_buildColumnHeaderContent","_buildGroupHeader","_buildColumnHeader","resizableColumns","resizeColumns","initializeColumn","headerFilter","headerFilterPlaceholder","setHeaderFilterColumnPlaceholder","movableColumns","topCalc","bottomCalc","addEventListener","dblTap","tapHold","tap","headerClick","headerDblClick","headerContext","headerTap","passive","headerDblTap","clearTimeout","headerTapHold","cellEdited","cellEditing","cellEditCancelled","_this6","sort","headerContextMenu","headerClickMenu","headerMenu","menu","initializeColumnHeader","format","editor","edit","validator","mutator","accessor","cssClass","setMinWidth","columnMaxWidth","setMaxWidth","tooltips","cellHozAlign","cellVertAlign","textAlign","headerHozAlign","_buildColumnHeaderTitle","editableTitle","stopPropagation","focus","columnTitleChanged","text","_formatColumnHeaderTitle","formatter","contents","params","mockCell","_this7","titleFormatter","getFormatter","getValue","titleFormatterParams","Node","_this8","dataObj","structure","_i2","alignment","parentHeight","getGroupElement","offsetHeight","paddingTop","rowNumColumn","getFirstColumn","getLastColumn","updateBranches","colDefs","columnVisibilityChanged","silent","responsiveToggle","display","updateColumnVisibility","matchChildWidths","childWidth","child","setWidthActual","checkCellHeights","heightInitialized","offsetParent","clearCellHeight","calcHeight","setCellHeight","_this9","currentCell","cancelEdit","cellCount","_i3","invalid","Cell","_nextVisibleColumn","_prevVisibleColumn","hideHeaderFilterElements","fitToData","showHeaderFilterElements","clearWidth","_this10","catch","err","deleteCell","RowManager","createHolderElement","tableElement","createTableElement","heightFixer","firstRender","renderMode","fixedHeight","activeRowsCount","displayRows","displayRowsCount","scrollTop","vDomRowHeight","vDomTop","vDomBottom","vDomScrollPosTop","vDomScrollPosBottom","vDomTopPad","vDomBottomPad","vDomMaxRenderChain","vDomWindowBuffer","vDomWindowMinTotalRows","vDomWindowMinMarginRows","vDomTopNewRows","vDomBottomNewRows","redrawBlock","redrawBlockRestoreConfig","redrawBlockRederInPosition","getTableElement","getRowPosition","setColumnManager","setRenderMode","groupBy","groupRows","scrollHeaders","top","dir","scrollVertical","ajaxProgressiveLoad","ajax","nextPage","findRow","Row","RowComponent","getRowFromDataObject","getRowFromPosition","scrollToRow","rowTop","_this11","rowIndex","getDisplayRows","rowEl","scrollToRowPosition","scrollToRowIfVisible","elOffset","_virtualRenderFill","offsetTop","renderInPosition","columnsChanged","_this12","pagination","_setDataActual","reRenderInPosition","autoColumns","dataLoading","_wipeElements","history","clear","selectRow","clearSelectionData","reactiveData","watchData","refreshActiveData","error","wipe","deleteRow","blockRedraw","allIndex","activeIndex","setActiveRows","displayRowIterator","displayIndex","regenerateRowNumbers","rowDeleted","dataChanged","getData","updateGroupRows","addRow","pos","addRowActual","action","addRows","_this13","findAddRowPos","reverse","item","addRowPos","dispRows","paginationAddRow","page","getPageSize","assignRowToGroup","getGroup","_moveRowInArray","rowAdded","posFrom","posTo","moveRowActual","rowMoved","_this14","Group","prevDisplayRow","toGroup","fromGroup","removeRow","insertRow","end","_i4","styleRow","clearData","getRowIndex","findRowIndex","getDisplayRowIndex","nextDisplayRow","rowOnly","nextRow","prevRow","list","getRows","getDataCount","_genRemoteRequest","_this15","ajaxSorting","sorters","getSort","paginationDataSentNames","ajaxFiltering","filters","getFilters","setParams","sendRequest","filterRefresh","setPage","loadData","sorterRefresh","loadOrignalData","progressiveLoad","stage","skipStage","cascadeOrder","selectable","selectablePersistence","deselectRows","slice","resetDisplayRows","frozenRows","isFrozen","getDisplayIndex","setDisplayIndex","getNextDisplayIndex","setDisplayRows","setMaxRows","dataChange","renderTable","layoutColumnsOnNewData","_this16","getCell","_generateContents","getVisibleRows","viewable","topEdge","bottomEdge","topFound","topRow","bottomRow","selectedRows","getRenderMode","topOffset","diff","virtualDom","renderStarted","_simpleRender","renderEmptyScroll","placeholder","renderComplete","_clearVirtualDom","checkClassicModeGroupHeaderWidth","onlyGroupHeaders","paddingBottom","visibility","remove","forceMove","holder","topPad","rowsHeight","topPadHeight","heightOccupied","ceil","rowHeight","normalizeHeight","vDomScrollHeight","countGroups","topDiff","bottomDiff","margin","_addTopRow","_removeBottomRow","_removeTopRow","_addBottomRow","topRowHeight","initialized","_quickNormalizeRowHeight","bottomRowHeight","initialHeight","otherHeight","getBoundingClientRect","external","maxHeight","virtualDomBuffer","resizeTable","autoResize","restoreRedraw","tableWidth","browser","event","createEvent","initEvent","dispatchEvent","Event","VDomHoz","holderEl","leftCol","rightCol","vDomScrollPosLeft","vDomScrollPosRight","vDomPadLeft","vDomPadRight","fitDataColAvg","window","compatabilityCheck","ok","rtl","frozen","_this17","scroll","deinitialize","change","collsWidth","colEnd","getGroups","fitDataLayoutOverride","_i5","_this18","old","colPos","leftPos","rightPos","paddingLeft","paddingRight","reinitChanged","renitializeRows","_this19","_this20","reinitializeRow","addColRight","removeColLeft","addColLeft","removeColRight","colPositionAdjust","_i6","oldWidth","widthDiff","cellRendered","prepend","initializeRow","_i7","_row","getIndex","getPosition","pageTo","setPageToRow","moveToRow","updateData","select","selectRows","deselect","toggleSelect","toggleRow","isSelected","isRowSelected","freeze","freezeRow","unfreeze","unfreezeRow","treeCollapse","collapseRow","treeExpand","expandRow","treeToggle","getTreeParent","addTreeChild","addTreeChildRow","reformat","getNextRow","getPrevRow","heightStyled","manualHeight","outerHeight","created","generateElement","detachElement","rowContextMenu","rowClickMenu","rowClick","rowDblClick","rowContext","rowMouseEnter","rowMouseLeave","rowMouseOver","rowMouseOut","rowMouseMove","rowTap","rowDblTap","rowTapHold","_this21","deleteCells","layoutRow","rowFormatter","resizableRows","resizeRows","reinitializeHeight","children","setHeight","clearHeight","transformRow","watchRow","updatedData","newRowData","_this22","tempData","attrname","block","unblock","setValueProcessData","groupUpdateOnCellEdit","reassignRowToGroup","redrawNeeded","rowUpdated","getCellIndex","findCell","findNextEditableCell","nextCell","allowEdit","check","findPrevEditableCell","prevCell","toRow","_this23","deleteActual","detatchModules","group","rowDelete","recalcRowGroup","_deselectRow","detachRow","_i8","CellComponent","_cell","getOldValue","getInitialValue","initialValue","getRow","getColumn","setValue","mutate","restoreOldValue","setValueActual","restoreInitialValue","isEdited","edited","clearEdited","isValid","clearValidation","nav","checkHeight","oldValue","build","_configureCell","alignItems","bottom","middle","justifyContent","right","center","tooltipGenerationMode","_generateTooltip","_bindClickEvents","_bindTouchEvents","_bindMouseEvents","bindEditor","initializeCell","preventDefault","selection","range","createTextRange","moveToElementText","getSelection","createRange","selectNode","removeAllRanges","addRange","val","formatValue","containerOnly","layoutElement","newValue","changed","transformCell","contextMenu","clickMenu","editCell","editing","getCurrentCell","clearComponentHistory","calcs","prev","up","down","FooterManager","links","_initialize","footerElement","append","activate","deactivate","link","footerRedraw","browserSlow","browserMobile","initializeElement","initializeOptions","_create","comms","register","defaultOptions","columnVertAlign","initialSort","initialFilter","initialHeaderFilter","columnHeaderSortMulti","sortOrderReverse","headerSort","headerSortTristate","headerSortElement","textDirection","keybindings","tabEndNewRow","clipboard","clipboardCopyStyled","clipboardCopyConfig","clipboardCopyFormatter","clipboardCopyRowRange","clipboardPasteParser","clipboardPasteAction","clipboardCopied","clipboardPasted","clipboardPasteError","downloadDataFormatter","downloadReady","blob","downloadComplete","downloadConfig","downloadRowRange","dataTreeFilter","dataTreeSort","dataTreeElementColumn","dataTreeBranchElement","dataTreeChildIndent","dataTreeChildField","dataTreeCollapseElement","dataTreeExpandElement","dataTreeStartExpanded","dataTreeRowExpanded","dataTreeRowCollapsed","dataTreeChildColumnCalcs","dataTreeSelectPropagate","printAsHtml","printFormatter","printHeader","printFooter","printCopyStyle","printStyled","printVisibleRows","printRowRange","printConfig","selectableRangeMode","selectableRollingSelection","selectableCheck","headerFilterLiveFilterDelay","locale","langs","persistentLayout","persistentSort","persistentFilter","persistenceID","persistenceMode","persistenceReaderFunc","persistenceWriterFunc","responsiveLayoutCollapseStartOpen","responsiveLayoutCollapseUseFormatters","responsiveLayoutCollapseFormatter","paginationSize","paginationInitialPage","paginationButtonCount","paginationSizeSelector","paginationElement","paginationDataSent","paginationDataReceived","ajaxURL","ajaxURLGenerator","ajaxParams","ajaxConfig","ajaxContentType","ajaxRequestFunc","ajaxLoader","ajaxLoaderLoading","ajaxLoaderError","ajaxProgressiveLoadDelay","ajaxProgressiveLoadScrollMargin","groupStartOpen","groupValues","groupHeader","groupHeaderPrint","groupHeaderClipboard","groupHeaderHtmlOutput","groupHeaderDownload","htmlOutputConfig","movableRowsConnectedTables","movableRowsConnectedElements","movableRowsSender","movableRowsReceiver","movableRowsSendingStart","movableRowsSent","movableRowsSentFailed","movableRowsSendingStop","movableRowsReceivingStart","movableRowsReceived","movableRowsReceivedFailed","movableRowsReceivingStop","movableRowsElementDrop","rowFormatterPrint","rowFormatterClipboard","rowFormatterHtmlOutput","tableBuilt","rowSelectionChanged","rowSelected","rowDeselected","rowResized","columnResized","htmlImporting","htmlImported","dataEdited","ajaxRequesting","ajaxResponse","ajaxError","dataFiltering","dataFiltered","dataSorting","dataSorted","groupToggleElement","groupClosedShowCalcs","dataGrouping","dataGrouped","groupVisibilityChanged","groupClick","groupDblClick","groupContext","groupContextMenu","groupClickMenu","groupTap","groupDblTap","groupTapHold","pageLoaded","localized","validationMode","validationFailed","historyUndo","historyRedo","rtlCheck","getComputedStyle","direction","clipboardCopyHeader","columnHeaders","_clearSelection","empty","_clearObjectPointers","bindModules","tagName","htmlTableImport","parseTable","_buildElement","_loadInitialData","_this24","mod","_detectBrowser","setHeaderFilterPlaceholder","installLang","setLocale","span","load","setSort","setFilter","print","deregister","unwatchData","clearBindings","ua","navigator","userAgent","vendor","opera","substr","setDataFromLocalFile","extensions","_this25","input","accept","file","files","reader","FileReader","readAsText","onload","onerror","click","blockActiveRequest","_setData","inPosition","getUrl","setConfig","setUrl","searchRows","searchData","getHtml","export","printFullscreen","getAjaxUrl","replaceData","_this26","responses","addData","_this27","updateOrAddData","_this28","newRows","_this29","count","successCount","foundRows","doneCheck","_this30","updateOrAddRow","_this31","updateRow","_this32","_this33","fromRow","copyToClipboard","selector","copy","getColumnDefinitions","getColumnLayout","parseColumns","setColumnLayout","mergeDefinition","showColumn","hideColumn","toggleColumn","_this34","deleteColumn","_this35","updateColumnDefinition","_this36","fromColumn","_this37","getLocale","getLang","sortList","getSorters","clearSort","refreshFilter","addFilter","all","getHeaderFilters","removeFilter","clearFilter","clearHeaderFilter","deselectRow","toggleSelectRow","getSelectedRows","getSelectedData","getInvalidCells","clearCellValidation","_this38","valid","setMaxPage","_this39","setPageSize","size","previousPage","getPage","getPageMax","setGroupBy","groups","setGroupValues","setGroupStartOpen","values","setGroupHeader","getGroupedData","getEditedCells","clearCellEdited","_this40","getCalcResults","getResults","recalcAll","navigatePrev","navigateNext","navigateLeft","navigateRight","navigateUp","navigateDown","undo","redo","getHistoryUndoSize","getHistoryRedoSize","clearHistory","download","filename","downloadToTab","tableComms","receive","moduleBindings","extendModule","name","property","registerModule","plugin","required","box","pageYOffset","documentElement","clientTop","pageXOffset","clientLeft","deepClone","tables","lookupTable","query","results","querySelectorAll","matchElement","findTable","Layout","mode","modes","_this41","colsWidth","gap","lastCol","responsive","flexColWidth","overflowWidth","flexWidth","flexGrowUnits","flexColumns","fixedShrinkColumns","flexShrinkUnits","gapFill","calcWidth","scaleColumns","freeSpace","shrinkCols","oversizeCols","oversizeSpace","remainingSpace","nextColWidth","remainingFlexGrowUnits","changeUnits","undersizeCols","calcGrow","widthGrow","calcShrink","widthShrink","Localize","lang","bindings","langList","headerFilters","_setLangProp","desiredLocale","language","toLowerCase","prefix","traverseLang","trans","path","_executeBindings","getText","pathArray","_getLangElement","level","rootPath","_loop","binding","Comms","getConnections","selectors","connections","con","send","connection","commsReceived","Accessor","allowedTypes","charAt","toUpperCase","lookupAccessor","accessors","rowComponent","colCompnent","Ajax","url","urlGenerator","loaderElement","createLoaderElement","msgElement","createMsgElement","loadingElement","errorElement","loaderPromise","loading","requestOrder","template","trim","content","defaultLoaderPromise","defaultURLGenerator","initializeProgressive","getParams","_loadDefaultConfig","method","defaultConfig","_loadDataProgressive","_loadDataStandard","_this42","generateParamsList","serializeParams","encoded","encodeURIComponent","join","requestNo","_this43","showLoader","hideLoader","showError","contentType","contentTypeFormatters","headers","Accept","location","origin","credentials","fetch","response","json","status","statusText","form","FormData","CalcComponent","ColumnCalcs","topCalcs","botCalcs","genColumn","topElement","botElement","botRow","topInitialized","botInitialized","topCalcParams","botCalcParams","bottomCalcParams","calculations","initializeTopRow","botCalc","initializeBottomRow","removeCalcs","rowsToData","generateRow","recalcGroup","getRowGroup","_this44","getChildGroups","rowData","generateRowData","generateTopRow","generateBottomRow","_this45","open","getFilteredTreeChildren","disable","enable","paramKey","hasTopCalcs","hasBottomCalcs","getKey","getGroupResults","groupObj","subGroups","getSubGroups","subGroupResults","subgroup","calcParams","precision","sum","Number","toFixed","parseFloat","Clipboard","pasteParser","pasteAction","customSelection","rowRange","blocked","_this46","plain","html","generateExportList","genereateHTMLTable","generatePlainContent","clipboardData","originalEvent","paste","setPasteParser","setPasteAction","internal","sel","textRange","selectNodeContents","execCommand","pasteActions","parser","pasteParsers","checkPaseOrigin","getPasteData","mutateData","headerFindSuccess","columnMap","shift","replace","insert","DataTree","indent","collapseEl","expandEl","branchEl","elementField","startOpen","dummyEl","firstCol","tabIndex","childArray","controlEl","generateControlElement","cloneNode","marginRight","getPropertyValue","_this47","oldControl","replaceChild","_this48","getChildren","allChildren","_this49","generateChildren","sub","_this50","childData","childRow","childIndex","findChildIndex","_this51","recurse","_this52","checkForRestyle","getChildField","Download","interceptCallback","downloadFunc","downloaders","mime","triggerDownload","_group","getRowCount","newTab","Blob","URL","createObjectURL","msSaveOrOpenBlob","intercept","csv","setFileContents","delimiter","fileContents","depth","bom","pdf","header","autoTableParams","rowGroupStyles","fontStyle","fontSize","cellPadding","fillColor","rowCalcStyles","jsPDFParams","jsPDF","parseRow","styles","colSpan","rowSpan","orientation","unit","doc","autoTable","addPageContent","head","documentProcessing","xlsx","sheetName","workbook","XLSX","utils","book_new","generateSheet","merges","worksheet","r","sheet_add_aoa","encode_range","SheetNames","Sheets","sheetOnly","sheets","sheet","buf","ArrayBuffer","view","Uint8Array","charCodeAt","s2ab","write","bookType","bookSST","Edit","mouseClick","recursionBlock","invalidEdit","editedCells","editable","editorParams","editors","clearEditor","cancel","variableHeight","contains","preventScroll","button","focusCellNoEvent","forceEdit","focusScrollAdjust","leftEdge","rightEdge","leftMargin","rightMargin","cellEditor","rendered","blur","maskInput","mask","maskLetter","maskLetterChar","maskNumber","maskNumberChar","maskWildcard","maskWildcardChar","fillSymbols","symbol","char","keyCode","maskAutoFill","editIndex","success","cellValue","padding","boxSizing","elementAttributes","getAttribute","onChange","textarea","vertNav","verticalNavigation","whiteSpace","resize","heightNow","selectionStart","stopImmediatePropagation","number","blurFunc","removeEventListener","_this53","initialDisplayValue","defaultValue","listEl","multiselect","dataItems","currentItem","displayItems","currentItems","blurable","blockListShow","searchWord","searchWordTimeout","getUniqueColumnValues","parseItems","inputValues","curentValues","dataList","displayList","processComplexListItem","itemParams","setItem","sortValuesList","listItemFormatter","toggleItem","chooseItem","fillList","setCurrentItem","scrollIntoView","behavior","inline","fillInput","unsetItem","hideList","chooseItems","cancelItem","cursor","readOnly","_i9","unsetItems","character","fromCharCode","startsWith","scrollTovalue","showList","autocomplete","_this54","uniqueColumnValues","genUniqueColumnValues","filterList","term","intialLoad","items","searchFunc","addNotice","searchingPlaceholder","fillListIfNotEmpty","showListOnEmpty","notice","searchEl","clearList","itemList","current","emptyPlaceholder","freetext","allowEmpty","showInputValue","log","star","maxStars","getElementsByTagName","stars","starsHolder","createElementNS","starChange","buildStar","starHolder","nextStar","changeValue","overflow","textOverflow","progress","mouseDrag","mouseDragWidth","percent","handle","bar","updateValue","calcVal","round","backgroundColor","screenX","tickCross","tristate","indetermValue","indeterminateValue","indetermState","marginTop","checked","indeterminate","ExportRow","ExportColumn","Export","cloneTableStyle","colVisProp","headersToExportRows","generateColumnGroupHeaders","bodyToExportRows","rowLookup","genereateTable","genereateTableElement","_this55","_this56","columnGroups","colData","processColumnGroup","_this57","maxDepth","groupData","subGroup","subGroupData","columnVisCheck","headerDepth","exportRows","parseColumnGroup","_i10","_i11","_this58","rowGroups","exportCols","_this59","headerEl","bodyEl","lookupTableStyles","setup","treeElementField","mapElementStyles","genereateHeaderElement","genereateGroupElement","genereateCalcElement","genereateRowElement","evenRow","oddRow","calcRow","firstRow","firstGroup","getElementsByClassName","styleCells","firstCell","lastCell","_this60","classNames","_this61","cellWrapper","formatCells","formatExportValue","renderedCallback","lookup","fromStyle","Filter","headerFilterColumns","prevHeaderFilterChangeCheck","filterFunc","filterType","tagType","attrType","filterChangeCheck","prevSuccess","emptyFunc","headerFilterFunc","headerFilterFuncParams","fieldVal","colVal","generateHeaderFilterElement","filterElement","editorElement","typingTimer","searchTrigger","_this62","headerElement","headerFilterEmptyCheck","headerFilterParams","hasAttribute","headerFilterLiveFilter","hasChanged","findFilter","findSubFilters","filtersToArray","_this63","searchType","filterRecurse","rowList","activeRowComponents","filterRow","subFilter","filterVal","rowVal","filterParams","keywords","separator","keyword","matchAll","endsWith","Format","lookupFormatter","formatterPrint","formatterClipboard","formatterHtmlOutput","crossElement","formatters","plaintext","sanitizeHTML","entityMap","emptyToSpace","money","integer","decimal","rgx","floatVal","decimalSym","thousandSym","thousand","symbolAfter","urlPrefix","labelField","urlField","image","src","urlSuffix","truthy","allowTruthy","tick","tickElement","cross","datetime","inputFormat","outputFormat","invalidPlaceholder","newDatetime","moment","timezone","tz","datetimediff","suffix","humanize","date","duration","traffic","percentValue","colors","color","legend","legendColor","legendAlign","barEl","legendEl","buttonTick","buttonCross","rownum","responsiveCollapse","toggleList","isOpen","rowSelection","_this64","checkbox","registerRowSelectCheckbox","registerHeaderSelectCheckbox","FrozenColumns","leftColumns","rightColumns","rightPadding","initializationMode","scrollEndTimer","edge","frozenCheck","_this65","calcMargins","layoutColumnPosition","layoutCalcRows","_calcSpace","allCells","_this66","leftParents","parentEl","getColGroupParentElement","_this67","_i12","FrozenRows","styleRows","GroupComponent","getParentGroup","toggleVisibility","groupManager","oldGroup","hasSubGroups","groupIDLookups","_addRowToGroup","_addRow","groupList","elementContents","arrowElement","createElements","addBindings","createValueGroups","arrow","initializeGroupHeader","_this68","allowedValues","_createGroup","initializeGroup","groupID","groupKey","headerGenerator","conformRowData","generateGroupHeaderContents","scrollHeader","removeGroup","getHeadersAndRows","noCalc","_visSet","compoment","getPath","addBindingsd","childNodes","GroupRows","langValue","lookupFunc","generateGroups","groupComponents","_this69","pullGroupListData","groupListData","rowCount","headerContent","oldGroups","createGroup","assignRowToExistingGroup","newGroupNeeded","oldRowGroup","oldGroupPath","newGroupPath","getExpectedPath","every","groupPath","groupId","History","undoers","redoers","cellEdit","rowAdd","newRow","_rebindRow","rowMove","oldRow","HtmlTableImport","fieldIndex","hasIndex","_extractOptions","_extractHeaders","_generateBlankHeaders","newElement","attributes","optionsArr","optionsList","attrib","_attribValue","_findCol","exists","textContent","Keybindings","watchKeys","pressedKeys","keyupBinding","keydownBinding","mergedBindings","_key","mapBindings","bindEvents","_this70","_loop2","actions","mapBinding","symbolsList","ctrl","meta","code","checkBinding","ctrlKey","shiftKey","metaKey","navPrev","navNext","navUp","navDown","scrollPageUp","scrollPageDown","scrollToStart","scrollToEnd","keyBlock","newPos","scrollMax","navLeft","navRight","Menu","menuElements","blurEvent","hideMenu","escEvent","escMenu","nestedMenuBlock","positionReversedX","headerMenuEl","_this71","LoadMenuEvent","loadMenu","_this72","_this73","touch","MouseEvent","menuEl","itemEl","disabled","hideOldSubMenus","positionMenu","_i13","parentOffset","_this74","docHeight","innerHeight","touches","pageX","pageY","menus","MoveColumns","placeholderElement","createPlaceholderElement","hoverElement","checkTimeout","checkPeriod","moving","toCol","toColAfter","startX","autoScrollMargin","autoScrollStep","autoScrollTimeout","touchMove","moveHover","endMove","mousemove","which","startMove","bindTouchEvents","prevColWidth","nextColWidthLast","prevColWidthLast","startXMove","moveToCol","_bindMouseMove","_unbindMouseMove","movingCells","scrollPos","columnHolder","xPos","MoveRows","toRowAfter","hasHandle","startY","tableRowDropEvent","connectionSelectorsTables","connectionSelectorsElements","connectionElements","connectedTable","connectedRow","mouseup","tableRowDrop","previousSibling","nextRowHeight","prevRowHeight","nextRowHeightLast","prevRowHeightLast","startYMove","setStartPosition","connectToTables","pointerEvents","disconnectFromTables","moveHoverConnections","moveHoverTable","rowHolder","yPos","elementRowDrop","connectionTables","_this75","dropEvent","tabulatorElementDropEvent","connect","disconnect","dropComplete","sender","senders","receiver","receivers","fromTable","toTable","Mutator","enabled","lookupMutator","mutators","mutatorEdit","Page","initialLoad","pageSizes","dataReceivedNames","dataSentNames","pagesElement","firstBut","prevBut","nextBut","lastBut","pageSizeSelect","generatePageSizeSelectList","_this76","_i14","hidden","pageSelectLabel","testElRow","testElCell","paginationDataReceivedNames","trigger","_this77","_this78","_setPageButtons","leftSize","rightSize","_i15","_generatePageButton","_this79","_this80","_i16","_this81","_getRemotePage","oldParams","pageParams","_this82","_parseRemoteData","last_page","footer","Persistence","defWatcherBlock","readFunc","writeFunc","localStorageTest","testKey","localStorage","removeItem","retreivedData","readers","writers","retreiveData","getOwnPropertyDescriptor","set","get","oldCols","newCols","_findColumn","validateSorters","getGroupConfig","getPageConfig","excludedKeys","defStore","colDef","local","getItem","cookie","cookiePos","expireDate","setDate","getDate","toUTCString","Print","manualBlock","replaceTable","cleanup","footerContent","scrollX","scrollY","footerEl","tableEl","ReactiveData","origFuncs","currentVersion","version","enumerable","args","startRow","oldRows","watchKey","watchTreeChildren","childField","rebuildTree","unwatchRow","ResizeColumns","startColumn","startWidth","prevHandle","handleDown","nearestColumn","_checkResizability","_mouseDown","prevHandleDown","colIndex","resizable","mouseMove","mouseUp","ResizeRows","startHeight","screenY","ResizeTable","observer","containerObserver","tableHeight","containerHeight","containerWidth","tableStyle","_this83","ResizeObserver","entry","nodeHeight","contentRect","nodeWidth","observe","unobserve","ResponsiveLayout","hiddenColumns","collapseFormatter","collapseStartOpen","collapseHandleColumn","formatCollapsedData","order","generateCollapsedContent","_iterator","_isArray","_i17","_ref","generateCollapsedRowContent","colCount","working","generateCollapsedRowData","mockCellComponent","node_content","titleData","valueData","titleHighlight","innerText","SelectRow","selecting","lastClickedRow","selectPrev","headerCheckboxElement","_rowSelectionChanged","endSelect","selected","lastClickedRowIdx","rowIdx","fromRowIdx","toRowIdx","toggledRows","toggledRow","_selectRow","rowMatch","_this84","rowInfo","checkboxEl","childRowSelection","_i18","selectedRow","_iterator2","_isArray2","_i19","_ref2","_iterator3","_isArray3","_i20","_ref3","_child","Sort","arrowEl","sorterParams","startingDir","headerSortStartingDir","newSortList","findSorter","sortListActual","rowComponents","clearColumnHeaders","setColumnHeader","sortObj","_sortItems","_this85","sorterCount","sortItem","_sortRow","el1Comp","el2Comp","el1","el2","aRow","bRow","alignEmptyValues","decimalSeparator","thousandSeparator","emptyAlign","string","localeCompare","time","boolean","array","calc","alphanum","as","bs","a1","b1","L","rx","rd","isFinite","Validate","invalidCells","_extractValidator","substring","_buildValidator","parameters","validators","invalidIndex","float","numeric","starts","ends","minLength","maxLength","in","regex","unique","cellData","_toConsumableArray","arr","arrayLikeToArray","iter","unsupportedIterableToArray","asyncGeneratorStep","gen","_next","_throw","info","_asyncToGenerator","fn","__createBinding","k2","ReactTabulatorExample","React15Tabulator","ReactTabulator","isFunction","vertxNext","customSchedulerFn","asap","queue","flush","scheduleFlush","browserWindow","browserGlobal","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","isNode","process","isWorker","Uint8ClampedArray","importScripts","MessageChannel","useSetTimeout","globalSetTimeout","onFulfillment","onRejection","noop","PROMISE_ID","makePromise","_state","invokeCallback","_result","subscribe","object","promise","_resolve","nextTick","iterations","node","createTextNode","characterData","useMutationObserver","channel","port1","onmessage","port2","postMessage","useMessageChannel","vertx","runOnLoop","runOnContext","attemptVertx","PENDING","handleMaybeThenable","maybeThenable","originalThen","originalResolve","thenable","fulfill","reason","handleOwnThenable","sealed","fulfillmentHandler","rejectionHandler","tryThen","_label","handleForeignThenable","objectOrFunction","publishRejection","_onerror","publish","_subscribers","subscribers","settled","detail","hasCallback","succeeded","Enumerator","Constructor","_instanceConstructor","_remaining","_enumerate","_eachEntry","_then","didError","_settledAt","_willSettleAt","enumerator","resolver","needsResolver","initializePromise","needsNew","finally","entries","race","Resolve","_reject","_setScheduler","scheduleFn","_setAsap","asapFn","_asap","polyfill","global","promiseToString","cast","componentWillReceiveProps","ReactTabulator_1","DateEditor_1","MultiSelectEditor_1","MultiValueFormatter_1","onClick","alert","age","dob","rating","passed","pets","colorOptions","red","green","yellow","editableColumns","selectedName","renderAjaxScrollExample","current_page","newData","href","DateEditorUtils_1","DEFAULT_DATE_INPUT_FORMAT","inputCss","fontFamily","Editor","setValueOnSuccess","valueDate","ev","onKeyPress","today","onBlur","valueDt","onKeyUp","container","setGlobalDateMasks","setGlobalDateI18n","defaultI18n","token","twoDigitsOptional","twoDigits","word","literal","shorten","sLen","newArr","monthUpdate","arrName","i18n","map","origObj","args_1","dayNames","monthNames","monthNamesShort","dayNamesShort","amPm","DoFn","dayOfMonth","globalI18n","regexEscape","str","pad","formatFlags","D","dateObj","DD","Do","getDay","dd","ddd","dddd","M","getMonth","MM","MMM","MMMM","YY","getFullYear","YYYY","h","getHours","hh","H","HH","getMinutes","mm","getSeconds","ss","S","getMilliseconds","SS","SSS","A","ZZ","getTimezoneOffset","Z","monthParse","emptyDigits","emptyWord","timezoneOffset","parts","minutes","parseFlags","cent","globalMasks","shortDate","mediumDate","longDate","fullDate","isoDate","isoDateTime","shortTime","mediumTime","longTime","masks","getTime","literals","$0","$1","combinedI18nSettings","dateStr","dateInfo","year","month","day","hour","minute","second","millisecond","isPm","parseInfo","newFormat","specifiedFields","requiredFields","requiredField","dateWithoutTZ","validateFields","UTC","ReactTags","autofocus","handleDelete","newValues","handleAddition","handleBlur","parentElement","zIndex","suggestions","tags","allowNew","autoresize","minQueryLength","PropTypes","Tag","Input","Suggestions","KEYS","CLASS_NAMES","rootFocused","selectedTag","selectedTagName","searchInput","suggestionActive","suggestionDisabled","superclass","focused","expandable","selectedIndex","inputEventHandlers","onFocus","handleFocus","onInput","handleInput","onKeyDown","handleKeyDown","createRef","newProps","handleInputChange","ref$1","delimiters","delimiterChars","handleDelimiter","allowBackspace","deleteTag","suggestion","addTag","handleClick","activeElement","addOnBlur","handleDeleteTag","interactiveEls","currentEl","currentTarget","tag","handleValidate","clearInputOnDelete","this$1","listboxId","TagComponent","tagComponent","onDelete","inputAttributes","ariaLabel","noSuggestionsText","suggestionsFilter","maxSuggestionsLength","defaultProps","propTypes","arrayOf","bool","isRequired","oneOfType","SIZER_STYLES","STYLE_PROPS","inputWidth","copyInputStyles","updateInputWidth","inputStyle","sizer","role","escapeForRegExp","markIt","__html","filterSuggestions","filtered","disableMarkIt","handleMouseDown","onMouseDown","dangerouslySetInnerHTML","markInput","createCellEl","_setPrototypeOf","_inherits","subClass","superClass","_getPrototypeOf","_possibleConstructorReturn","ReferenceError","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Super","NewTarget","_classCallCheck","instance","_defineProperties","descriptor","_createClass","protoProps","staticProps","getTag","isString","isNumber","isBoolean","isObject","isDefined","isBlank","LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY","PATTERN_LENGTH_TOO_LARGE","hasOwn","KeyStore","_keys","_keyMap","totalWeight","createKey","weight","keyId","getFn","createKeyPath","createKeyId","MISSING_KEY_PROPERTY","INVALID_KEY_WEIGHT_VALUE","AdvancedOptions","useExtendedSearch","deepGet","baseToString","ignoreLocation","ignoreFieldNorm","fieldNormWeight","Config","isCaseSensitive","includeScore","shouldSort","sortFn","score","idx","includeMatches","findAllMatches","minMatchCharLength","threshold","distance","SPACE","norm","mantissa","cache","Map","pow","numTokens","has","FuseIndex","isCreated","setIndexRecords","docs","records","_keysMap","docIndex","_addString","_addObject","record","$","keyIndex","subRecords","stack","nestedArrIndex","subRecord","createIndex","myIndex","setKeys","setSources","computeScore$1","pattern","errors","currentLocation","expectedLocation","accuracy","proximity","convertMaskToIndices","matchmask","indices","MAX_BITS","createPatternAlphabet","BitapSearch","chunks","addChunk","startIndex","alphabet","remainder","isMatch","allIndices","totalScore","hasMatches","patternAlphabet","patternLen","textLen","currentThreshold","bestLocation","computeMatches","matchMask","lastBitArr","finalScore","binMax","binMin","binMid","finish","bitArr","charMatch","BaseMatch","getMatch","multiRegex","singleRegex","exp","ExactMatch","InverseExactMatch","PrefixExactMatch","InversePrefixExactMatch","SuffixExactMatch","InverseSuffixExactMatch","FuzzyMatch","_bitapSearch","searchIn","IncludeMatch","searchers","searchersLen","SPACE_RE","parseQuery","queryItem","found","searcher","isMultiMatch","isSingleMatch","MultiMatchSet","Set","ExtendedSearch","numMatches","qLen","pLen","registeredSearchers","createSearcher","searcherClass","condition","LogicalOperator","KeyType","isExpression","isPath","isLeaf","convertToExplicit","auto","isQueryPath","operator","computeScore","EPSILON","transformMatches","refIndex","transformScore","transformers","transformer","Fuse","_keyStore","setCollection","_docs","_myIndex","removeAt","limit","_searchStringList","_searchObjectList","_searchLogical","expression","evaluate","_findMatches","getValueForItemAtKeyId","res","resultMap","expResults","parseIndex"],"mappings":"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","file":"static/js/1.bb5261eb.chunk.js","sourcesContent":["\"use strict\";\r\nexports.__esModule = true;\r\nexports.reactFormatter = exports.isSameObject = exports.isSameArray = exports.clone = void 0;\r\nvar React = require(\"react\");\r\nvar react_dom_1 = require(\"react-dom\");\r\nfunction clone(obj) {\r\n return JSON.parse(JSON.stringify(obj));\r\n}\r\nexports.clone = clone;\r\nfunction isSameArray(a, b) {\r\n var i = a && a.length ? a.length : 0;\r\n if (i !== (b && b.length ? b.length : 0)) {\r\n return false;\r\n }\r\n while (i--) {\r\n if (a[i] !== b[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nexports.isSameArray = isSameArray;\r\n// source: https://stackoverflow.com/questions/4816099/chrome-sendrequest-error-typeerror-converting-circular-structure-to-json\r\nfunction stringifyCensor(censor) {\r\n var i = 0;\r\n return function (key, value) {\r\n if (i !== 0 && typeof censor === 'object' && typeof value == 'object' && censor == value) {\r\n return '[Circular]';\r\n }\r\n if (i >= 29) {\r\n // seems to be a harded maximum of 30 serialized objects?\r\n return '[Unknown]';\r\n }\r\n ++i; // so we know we aren't using the original object anymore\r\n return value;\r\n };\r\n}\r\nfunction isSameObject(a, b) {\r\n return JSON.stringify(a, stringifyCensor(a)) === JSON.stringify(b, stringifyCensor(b));\r\n}\r\nexports.isSameObject = isSameObject;\r\nfunction reactFormatter(JSX) {\r\n return function customFormatter(cell, formatterParams, onRendered) {\r\n // cell - the cell component\r\n // formatterParams - parameters set for the column\r\n // onRendered - function to call when the formatter has been rendered\r\n var renderFn = function () {\r\n var cellEl = cell.getElement();\r\n if (cellEl) {\r\n var formatterCell = cellEl.querySelector('.formatterCell');\r\n if (formatterCell) {\r\n var CompWithMoreProps = React.cloneElement(JSX, { cell: cell });\r\n react_dom_1.render(CompWithMoreProps, cellEl.querySelector('.formatterCell'));\r\n }\r\n }\r\n };\r\n onRendered(renderFn); // initial render only.\r\n setTimeout(function () {\r\n renderFn(); // render every time cell value changed.\r\n }, 0);\r\n return '
';\r\n };\r\n}\r\nexports.reactFormatter = reactFormatter;\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nvar __spreadArray = (this && this.__spreadArray) || function (to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n};\r\nexports.__esModule = true;\r\nvar React = require(\"react\");\r\nvar ReactDOM = require(\"react-dom\");\r\nvar pick_react_known_prop_1 = require(\"pick-react-known-prop\");\r\nvar ConfigUtils_1 = require(\"./ConfigUtils\");\r\nvar Utils_1 = require(\"./Utils\");\r\n/* tslint:disable-next-line */\r\nvar tabulator_tables_1 = require(\"tabulator-tables\");\r\nvar default_1 = /** @class */ (function (_super) {\r\n __extends(default_1, _super);\r\n function default_1() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.state = {\r\n data: [],\r\n columns: _this.props.columns,\r\n options: _this.props.options\r\n };\r\n _this.ref = null;\r\n _this.htmlProps = null;\r\n _this.mainId = \"tabulator-\" + +new Date() + \"-\" + Math.floor(Math.random() * 9999999); // random id\r\n _this.table = null; // will be set once Tabulator instantiated.\r\n _this.pickValidHTMLProps = function () {\r\n // run once\r\n if (!_this.htmlProps) {\r\n _this.htmlProps = pick_react_known_prop_1.pickHTMLProps(_this.props); // pick valid html props\r\n delete _this.htmlProps['data']; // don't render data & columns as attributes\r\n delete _this.htmlProps['columns'];\r\n }\r\n };\r\n return _this;\r\n }\r\n default_1.prototype.initTabulator = function () {\r\n var _a;\r\n return __awaiter(this, void 0, void 0, function () {\r\n var domEle, that, _b, columns, data, options, propOptions;\r\n return __generator(this, function (_c) {\r\n switch (_c.label) {\r\n case 0:\r\n domEle = ReactDOM.findDOMNode(this.ref);\r\n that = this;\r\n _b = this.props, columns = _b.columns, data = _b.data, options = _b.options;\r\n return [4 /*yield*/, ConfigUtils_1.propsToOptions(this.props)];\r\n case 1:\r\n propOptions = _c.sent();\r\n new tabulator_tables_1[\"default\"](domEle, __assign(__assign(__assign(__assign({ columns: columns }, propOptions), { layout: (_a = this.props.layout) !== null && _a !== void 0 ? _a : 'fitColumns', // fit columns to width of table (optional)\r\n tableBuilding: function () {\r\n that.table = this; // keep the table instance.\r\n that.props.tableBuilding ? that.props.tableBuilding() : '';\r\n },\r\n dataLoaded: function () {\r\n that.props.dataLoaded ? that.props.dataLoaded() : '';\r\n }, invalidOptionWarnings: false }), options), { // props.options are passed to Tabulator's options.\r\n data: data }));\r\n // await table.setData(data);\r\n if (data && data.length > 0) {\r\n this.setState({ data: data });\r\n }\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n default_1.prototype.componentDidMount = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.initTabulator()];\r\n case 1:\r\n _a.sent();\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n default_1.prototype.componentWillUnmount = function () {\r\n this.table && this.table.destroy();\r\n };\r\n // React 16.5.x - \"getDerivedStateFromProps\" replaces both \"componentWillMount\" & \"componentWillReceiveProps\"\r\n // This function will be ignored when running with React 15.6.x\r\n default_1.getDerivedStateFromProps = function (props, state) {\r\n // console.log('- getDerivedStateFromProps', props, state);\r\n var noData = !props.data || props.data.length === 0;\r\n if (!state && noData) {\r\n // first time (similar to: componentWillMount)\r\n return null;\r\n }\r\n if (state && state.data.length && state.data.length === 0 && props && props.data && props.data.length === 0) {\r\n return null;\r\n }\r\n // if (state && props.columns) {\r\n // // this triggers componentDidUpdate\r\n // if (!isSameArray(state.columns, props.columns)) {\r\n // console.log('--- Columns changed');\r\n // // console.log('columns changed!');\r\n // return { ...state, columns: [...props.columns] };\r\n // }\r\n // }\r\n if (state && (props.data || props.columns | props.options)) {\r\n // this triggers componentDidUpdate\r\n if (!Utils_1.isSameArray(state.data, props.data) ||\r\n !Utils_1.isSameArray(state.columns, props.columns) ||\r\n !Utils_1.isSameObject(state.options, props.options)) {\r\n // console.log('data changed!');\r\n return __assign(__assign({}, state), { data: __spreadArray([], props.data), columns: __spreadArray([], props.columns), options: __assign({}, props.options) });\r\n }\r\n }\r\n return {};\r\n };\r\n // componentDidUpdate(prevProps, prevState)\r\n default_1.prototype.componentDidUpdate = function (prevProps, prevState) {\r\n // props data changed! (see: getDerivedStateFromProps)\r\n if (!Utils_1.isSameArray(prevState.data, this.state.data)) {\r\n // only when data is really different: call this.table.setData (will re-render table)\r\n this.table && this.table.setData(this.state.data);\r\n }\r\n if (!Utils_1.isSameArray(prevState.columns, this.state.columns)) {\r\n // only when data is really different: call this.table.setData (will re-render table)\r\n this.table && this.table.setColumns(this.state.columns);\r\n }\r\n if (!Utils_1.isSameObject(prevState.options, this.state.options)) {\r\n // console.log('options changed', this.state.options);\r\n this.initTabulator();\r\n }\r\n };\r\n default_1.prototype.render = function () {\r\n var _this = this;\r\n this.pickValidHTMLProps();\r\n var className = this.props.className;\r\n return (React.createElement(\"div\", __assign({ ref: function (ref) { return (_this.ref = ref); }, \"data-instance\": this.mainId }, this.htmlProps, { className: className })));\r\n };\r\n return default_1;\r\n}(React.Component));\r\nexports[\"default\"] = default_1;\r\n","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.pickSVGProps = exports.pickHTMLProps = undefined;\n\n\tvar _pickHtmlProps = __webpack_require__(1);\n\n\tvar _pickHtmlProps2 = _interopRequireDefault(_pickHtmlProps);\n\n\tvar _pickSvgProps = __webpack_require__(5);\n\n\tvar _pickSvgProps2 = _interopRequireDefault(_pickSvgProps);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.pickHTMLProps = _pickHtmlProps2.default;\n\texports.pickSVGProps = _pickSvgProps2.default;\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\tvar _htmlAttributes = __webpack_require__(2);\n\n\tvar _htmlAttributes2 = _interopRequireDefault(_htmlAttributes);\n\n\tvar _pickProps = __webpack_require__(3);\n\n\tvar _pickProps2 = _interopRequireDefault(_pickProps);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar extra = ['about', 'datatype', 'defaultChecked', 'defaultValue', 'inlist', 'prefix', 'property', 'resource', 'typeof', 'vocab', 'autoCapitalize', 'autoCorrect', 'color', 'itemProp', 'itemScope', 'itemType', 'itemRef', 'itemID', 'security', 'unselectable', 'results', 'autoSave', 'allowtransparency', 'charSet', 'ismap', 'typemustmatch',\n\n\t// handlers:\n\t'onBlur', 'onChange', 'onClick', 'onContextMenu', 'onCopy', 'onCut', 'onDoubleClick', 'onDrag', 'onDragEnd', 'onDragEnter', 'onDragExit', 'onDragLeave', 'onDragOver', 'onDragStart', 'onDrop', 'onFocus', 'onInput', 'onKeyDown', 'onKeyPress', 'onKeyUp', 'onMouseDown', 'onMouseEnter', 'onMouseLeave', 'onMouseMove', 'onMouseOut', 'onMouseOver', 'onMouseUp', 'onPaste', 'onScroll', 'onSubmit', 'onTouchCancel', 'onTouchEnd', 'onTouchMove', 'onTouchStart', 'onWheel', 'onCompositionEnd', 'onCompositionStart', 'onCompositionUpdate', 'onInvalid', 'onPointerDown', 'onPointerMove', 'onPointerUp', 'onPointerCancel', 'onGotPointerCapture', 'onLostPointerCapture', 'onPointerEnter', 'onPointerLeave', 'onPointerOver', 'onPointerOut', 'onSelect', 'onAbort', 'onCanPlay', 'onCanPlayThrough', 'onDurationChange', 'onEmptied', 'onEncrypted', 'onEnded', 'onError', 'onLoadedData', 'onLoadedMetadata', 'onLoadStart', 'onPause', 'onPlay', 'onPlaying', 'onProgress', 'onRateChange', 'onSeeked', 'onSeeking', 'onStalled', 'onSuspend', 'onTimeUpdate', 'onVolumeChange', 'onWaiting', 'onLoad', 'onError', 'onAnimationStart', 'onAnimationEnd', 'onAnimationIteration', 'onTransitionEnd', 'onToggle'];\n\n\tvar ReactHTMLAttrs = _extends({}, _htmlAttributes2.default, extra.reduce(function (attrs, prop) {\n\t attrs[prop] = prop;\n\t return attrs;\n\t}, {}));\n\n\texports.default = (0, _pickProps2.default)(function (prop) {\n\t return Boolean(ReactHTMLAttrs[prop]) || /^(data|aria)-/.test(prop);\n\t});\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t/*!\n\t * html-attributes\n\t * https://github.com/alexmingoia/html-attributes\n\t */\n\n\t'use strict';\n\n\t/**\n\t * @module html-attributes\n\t */\n\n\tmodule.exports = {\n\t \"abbr\": \"abbr\",\n\t \"accept\": \"accept\",\n\t \"acceptCharset\": \"accept-charset\",\n\t \"accessKey\": \"accesskey\",\n\t \"action\": \"action\",\n\t \"allowFullScreen\": \"allowfullscreen\",\n\t \"allowTransparency\": \"allowtransparency\",\n\t \"alt\": \"alt\",\n\t \"async\": \"async\",\n\t \"autoComplete\": \"autocomplete\",\n\t \"autoFocus\": \"autofocus\",\n\t \"autoPlay\": \"autoplay\",\n\t \"cellPadding\": \"cellpadding\",\n\t \"cellSpacing\": \"cellspacing\",\n\t \"challenge\": \"challenge\",\n\t \"charset\": \"charset\",\n\t \"checked\": \"checked\",\n\t \"cite\": \"cite\",\n\t \"class\": \"class\",\n\t \"className\": \"class\",\n\t \"cols\": \"cols\",\n\t \"colSpan\": \"colspan\",\n\t \"command\": \"command\",\n\t \"content\": \"content\",\n\t \"contentEditable\": \"contenteditable\",\n\t \"contextMenu\": \"contextmenu\",\n\t \"controls\": \"controls\",\n\t \"coords\": \"coords\",\n\t \"crossOrigin\": \"crossorigin\",\n\t \"data\": \"data\",\n\t \"dateTime\": \"datetime\",\n\t \"default\": \"default\",\n\t \"defer\": \"defer\",\n\t \"dir\": \"dir\",\n\t \"disabled\": \"disabled\",\n\t \"download\": \"download\",\n\t \"draggable\": \"draggable\",\n\t \"dropzone\": \"dropzone\",\n\t \"encType\": \"enctype\",\n\t \"for\": \"for\",\n\t \"form\": \"form\",\n\t \"formAction\": \"formaction\",\n\t \"formEncType\": \"formenctype\",\n\t \"formMethod\": \"formmethod\",\n\t \"formNoValidate\": \"formnovalidate\",\n\t \"formTarget\": \"formtarget\",\n\t \"frameBorder\": \"frameBorder\",\n\t \"headers\": \"headers\",\n\t \"height\": \"height\",\n\t \"hidden\": \"hidden\",\n\t \"high\": \"high\",\n\t \"href\": \"href\",\n\t \"hrefLang\": \"hreflang\",\n\t \"htmlFor\": \"for\",\n\t \"httpEquiv\": \"http-equiv\",\n\t \"icon\": \"icon\",\n\t \"id\": \"id\",\n\t \"inputMode\": \"inputmode\",\n\t \"isMap\": \"ismap\",\n\t \"itemId\": \"itemid\",\n\t \"itemProp\": \"itemprop\",\n\t \"itemRef\": \"itemref\",\n\t \"itemScope\": \"itemscope\",\n\t \"itemType\": \"itemtype\",\n\t \"kind\": \"kind\",\n\t \"label\": \"label\",\n\t \"lang\": \"lang\",\n\t \"list\": \"list\",\n\t \"loop\": \"loop\",\n\t \"manifest\": \"manifest\",\n\t \"max\": \"max\",\n\t \"maxLength\": \"maxlength\",\n\t \"media\": \"media\",\n\t \"mediaGroup\": \"mediagroup\",\n\t \"method\": \"method\",\n\t \"min\": \"min\",\n\t \"minLength\": \"minlength\",\n\t \"multiple\": \"multiple\",\n\t \"muted\": \"muted\",\n\t \"name\": \"name\",\n\t \"noValidate\": \"novalidate\",\n\t \"open\": \"open\",\n\t \"optimum\": \"optimum\",\n\t \"pattern\": \"pattern\",\n\t \"ping\": \"ping\",\n\t \"placeholder\": \"placeholder\",\n\t \"poster\": \"poster\",\n\t \"preload\": \"preload\",\n\t \"radioGroup\": \"radiogroup\",\n\t \"readOnly\": \"readonly\",\n\t \"rel\": \"rel\",\n\t \"required\": \"required\",\n\t \"role\": \"role\",\n\t \"rows\": \"rows\",\n\t \"rowSpan\": \"rowspan\",\n\t \"sandbox\": \"sandbox\",\n\t \"scope\": \"scope\",\n\t \"scoped\": \"scoped\",\n\t \"scrolling\": \"scrolling\",\n\t \"seamless\": \"seamless\",\n\t \"selected\": \"selected\",\n\t \"shape\": \"shape\",\n\t \"size\": \"size\",\n\t \"sizes\": \"sizes\",\n\t \"sortable\": \"sortable\",\n\t \"span\": \"span\",\n\t \"spellCheck\": \"spellcheck\",\n\t \"src\": \"src\",\n\t \"srcDoc\": \"srcdoc\",\n\t \"srcSet\": \"srcset\",\n\t \"start\": \"start\",\n\t \"step\": \"step\",\n\t \"style\": \"style\",\n\t \"tabIndex\": \"tabindex\",\n\t \"target\": \"target\",\n\t \"title\": \"title\",\n\t \"translate\": \"translate\",\n\t \"type\": \"type\",\n\t \"typeMustMatch\": \"typemustmatch\",\n\t \"useMap\": \"usemap\",\n\t \"value\": \"value\",\n\t \"width\": \"width\",\n\t \"wmode\": \"wmode\",\n\t \"wrap\": \"wrap\"\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\n\tvar _lodash = __webpack_require__(4);\n\n\tvar _lodash2 = _interopRequireDefault(_lodash);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = function (filter) {\n\t return function (props) {\n\t if (!(0, _lodash2.default)(props)) throw new Error('props should be a plain object');\n\t var out = {};\n\t for (var key in props) {\n\t if (props.hasOwnProperty(key) && filter(key)) {\n\t out[key] = props[key];\n\t }\n\t }\n\t return out;\n\t };\n\t};\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t/**\n\t * lodash (Custom Build) \n\t * Build: `lodash modularize exports=\"npm\" -o ./`\n\t * Copyright jQuery Foundation and other contributors \n\t * Released under MIT license \n\t * Based on Underscore.js 1.8.3 \n\t * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t */\n\n\t/** `Object#toString` result references. */\n\tvar objectTag = '[object Object]';\n\n\t/**\n\t * Checks if `value` is a host object in IE < 9.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n\t */\n\tfunction isHostObject(value) {\n\t // Many host objects are `Object` objects that can coerce to strings\n\t // despite having improperly defined `toString` methods.\n\t var result = false;\n\t if (value != null && typeof value.toString != 'function') {\n\t try {\n\t result = !!(value + '');\n\t } catch (e) {}\n\t }\n\t return result;\n\t}\n\n\t/**\n\t * Creates a unary function that invokes `func` with its argument transformed.\n\t *\n\t * @private\n\t * @param {Function} func The function to wrap.\n\t * @param {Function} transform The argument transform.\n\t * @returns {Function} Returns the new function.\n\t */\n\tfunction overArg(func, transform) {\n\t return function(arg) {\n\t return func(transform(arg));\n\t };\n\t}\n\n\t/** Used for built-in method references. */\n\tvar funcProto = Function.prototype,\n\t objectProto = Object.prototype;\n\n\t/** Used to resolve the decompiled source of functions. */\n\tvar funcToString = funcProto.toString;\n\n\t/** Used to check objects for own properties. */\n\tvar hasOwnProperty = objectProto.hasOwnProperty;\n\n\t/** Used to infer the `Object` constructor. */\n\tvar objectCtorString = funcToString.call(Object);\n\n\t/**\n\t * Used to resolve the\n\t * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n\t * of values.\n\t */\n\tvar objectToString = objectProto.toString;\n\n\t/** Built-in value references. */\n\tvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\n\t/**\n\t * Checks if `value` is object-like. A value is object-like if it's not `null`\n\t * and has a `typeof` result of \"object\".\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n\t * @example\n\t *\n\t * _.isObjectLike({});\n\t * // => true\n\t *\n\t * _.isObjectLike([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isObjectLike(_.noop);\n\t * // => false\n\t *\n\t * _.isObjectLike(null);\n\t * // => false\n\t */\n\tfunction isObjectLike(value) {\n\t return !!value && typeof value == 'object';\n\t}\n\n\t/**\n\t * Checks if `value` is a plain object, that is, an object created by the\n\t * `Object` constructor or one with a `[[Prototype]]` of `null`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.8.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * }\n\t *\n\t * _.isPlainObject(new Foo);\n\t * // => false\n\t *\n\t * _.isPlainObject([1, 2, 3]);\n\t * // => false\n\t *\n\t * _.isPlainObject({ 'x': 0, 'y': 0 });\n\t * // => true\n\t *\n\t * _.isPlainObject(Object.create(null));\n\t * // => true\n\t */\n\tfunction isPlainObject(value) {\n\t if (!isObjectLike(value) ||\n\t objectToString.call(value) != objectTag || isHostObject(value)) {\n\t return false;\n\t }\n\t var proto = getPrototype(value);\n\t if (proto === null) {\n\t return true;\n\t }\n\t var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n\t return (typeof Ctor == 'function' &&\n\t Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString);\n\t}\n\n\tmodule.exports = isPlainObject;\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\n\tvar _pickProps = __webpack_require__(3);\n\n\tvar _pickProps2 = _interopRequireDefault(_pickProps);\n\n\tvar _svgAttributes = __webpack_require__(6);\n\n\tvar _svgAttributes2 = _interopRequireDefault(_svgAttributes);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = (0, _pickProps2.default)(function (prop) {\n\t return Boolean(_svgAttributes2.default[prop]);\n\t});\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n\t/*!\n\t * svg-attributes\n\t * https://github.com/alexmingoia/svg-attributes\n\t */\n\n\t'use strict';\n\n\t/**\n\t * @module svg-attributes\n\t */\n\n\tmodule.exports = {\n\t /**\n\t * Regular attributes\n\t */\n\t \"accentHeight\": \"accent-height\",\n\t \"accumulate\": \"accumulate\",\n\t \"additive\": \"additive\",\n\t \"alphabetic\": \"alphabetic\",\n\t \"amplitude\": \"amplitude\",\n\t \"arabicForm\": \"arabic-form\",\n\t \"ascent\": \"ascent\",\n\t \"attributeName\": \"attributeName\",\n\t \"attributeType\": \"attributeType\",\n\t \"azimuth\": \"azimuth\",\n\t \"baseFrequency\": \"baseFrequency\",\n\t \"baseProfile\": \"baseProfile\",\n\t \"bbox\": \"bbox\",\n\t \"begin\": \"begin\",\n\t \"bias\": \"bias\",\n\t \"by\": \"by\",\n\t \"calcMode\": \"calcMode\",\n\t \"capHeight\": \"cap-height\",\n\t \"class\": \"class\",\n\t \"clipPathUnits\": \"clipPathUnits\",\n\t \"contentScriptType\": \"contentScriptType\",\n\t \"contentStyleType\": \"contentStyleType\",\n\t \"cx\": \"cx\",\n\t \"cy\": \"cy\",\n\t \"d\": \"d\",\n\t \"descent\": \"descent\",\n\t \"diffuseConstant\": \"diffuseConstant\",\n\t \"divisor\": \"divisor\",\n\t \"dur\": \"dur\",\n\t \"dx\": \"dx\",\n\t \"dy\": \"dy\",\n\t \"edgeMode\": \"edgeMode\",\n\t \"elevation\": \"elevation\",\n\t \"end\": \"end\",\n\t \"exponent\": \"exponent\",\n\t \"externalResourcesRequired\": \"externalResourcesRequired\",\n\t \"fill\": \"fill\",\n\t \"filterRes\": \"filterRes\",\n\t \"filterUnits\": \"filterUnits\",\n\t \"fontFamily\": \"font-family\",\n\t \"fontSize\": \"font-size\",\n\t \"fontStretch\": \"font-stretch\",\n\t \"fontStyle\": \"font-style\",\n\t \"format\": \"format\",\n\t \"from\": \"from\",\n\t \"fx\": \"fx\",\n\t \"fy\": \"fy\",\n\t \"g1\": \"g1\",\n\t \"g2\": \"g2\",\n\t \"glyphame\": \"glyph-name\",\n\t \"glyphRef\": \"glyphRef\",\n\t \"gradientTransform\": \"gradientTransform\",\n\t \"gradientUnits\": \"gradientUnits\",\n\t \"hanging\": \"hanging\",\n\t \"height\": \"height\",\n\t \"horizAdvX\": \"horiz-adv-x\",\n\t \"horizOriginX\": \"horiz-origin-x\",\n\t \"horizOriginY\": \"horiz-origin-y\",\n\t \"id\": \"id\",\n\t \"ideographic\": \"ideographic\",\n\t \"in\": \"in\",\n\t \"in2\": \"in2\",\n\t \"intercept\": \"intercept\",\n\t \"k\": \"k\",\n\t \"k1\": \"k1\",\n\t \"k2\": \"k2\",\n\t \"k3\": \"k3\",\n\t \"k4\": \"k4\",\n\t \"kernelMatrix\": \"kernelMatrix\",\n\t \"kernelUnitLength\": \"kernelUnitLength\",\n\t \"keyPoints\": \"keyPoints\",\n\t \"keySplines\": \"keySplines\",\n\t \"keyTimes\": \"keyTimes\",\n\t \"lang\": \"lang\",\n\t \"lengthAdjust\": \"lengthAdjust\",\n\t \"limitingConeAngle\": \"limitingConeAngle\",\n\t \"local\": \"local\",\n\t \"markerHeight\": \"markerHeight\",\n\t \"markerUnits\": \"markerUnits\",\n\t \"markerWidth\": \"markerWidth\",\n\t \"maskContentUnits\": \"maskContentUnits\",\n\t \"maskUnits\": \"maskUnits\",\n\t \"mathematical\": \"mathematical\",\n\t \"max\": \"max\",\n\t \"media\": \"media\",\n\t \"method\": \"method\",\n\t \"min\": \"min\",\n\t \"mode\": \"mode\",\n\t \"name\": \"name\",\n\t \"numOctaves\": \"numOctaves\",\n\t \"offset\": \"offset\",\n\t \"onAbort\": \"onabort\",\n\t \"onActivate\": \"onactivate\",\n\t \"onBegin\": \"onbegin\",\n\t \"onClick\": \"onclick\",\n\t \"onEnd\": \"onend\",\n\t \"onError\": \"onerror\",\n\t \"onFocusIn\": \"onfocusin\",\n\t \"onFocusOut\": \"onfocusout\",\n\t \"onLoad\": \"onload\",\n\t \"onMouseDown\": \"onmousedown\",\n\t \"onMouseMove\": \"onmousemove\",\n\t \"onMouseOut\": \"onmouseout\",\n\t \"onMouseOver\": \"onmouseover\",\n\t \"onMouseUp\": \"onmouseup\",\n\t \"onRepeat\": \"onrepeat\",\n\t \"onResize\": \"onresize\",\n\t \"onScroll\": \"onscroll\",\n\t \"onUnload\": \"onunload\",\n\t \"onZoom\": \"onzoom\",\n\t \"operator\": \"operator\",\n\t \"order\": \"order\",\n\t \"orient\": \"orient\",\n\t \"orientation\": \"orientation\",\n\t \"origin\": \"origin\",\n\t \"overlinePosition\": \"overline-position\",\n\t \"overlineThickness\": \"overline-thickness\",\n\t \"panose1\": \"panose-1\",\n\t \"path\": \"path\",\n\t \"pathLength\": \"pathLength\",\n\t \"patternContentUnits\": \"patternContentUnits\",\n\t \"patternTransform\": \"patternTransform\",\n\t \"patternUnits\": \"patternUnits\",\n\t \"points\": \"points\",\n\t \"pointsAtX\": \"pointsAtX\",\n\t \"pointsAtY\": \"pointsAtY\",\n\t \"pointsAtZ\": \"pointsAtZ\",\n\t \"preserveAlpha\": \"preserveAlpha\",\n\t \"preserveAspectRatio\": \"preserveAspectRatio\",\n\t \"primitiveUnits\": \"primitiveUnits\",\n\t \"r\": \"r\",\n\t \"radius\": \"radius\",\n\t \"refX\": \"refX\",\n\t \"refY\": \"refY\",\n\t \"renderingIntent\": \"rendering-intent\",\n\t \"repeatCount\": \"repeatCount\",\n\t \"repeatDur\": \"repeatDur\",\n\t \"requiredExtensions\": \"requiredExtensions\",\n\t \"requiredFeatures\": \"requiredFeatures\",\n\t \"restart\": \"restart\",\n\t \"result\": \"result\",\n\t \"rotate\": \"rotate\",\n\t \"rx\": \"rx\",\n\t \"ry\": \"ry\",\n\t \"scale\": \"scale\",\n\t \"seed\": \"seed\",\n\t \"slope\": \"slope\",\n\t \"spacing\": \"spacing\",\n\t \"specularConstant\": \"specularConstant\",\n\t \"specularExponent\": \"specularExponent\",\n\t \"spreadMethod\": \"spreadMethod\",\n\t \"startOffset\": \"startOffset\",\n\t \"stdDeviation\": \"stdDeviation\",\n\t \"stemh\": \"stemh\",\n\t \"stemv\": \"stemv\",\n\t \"stitchTiles\": \"stitchTiles\",\n\t \"strikethroughPosition\": \"strikethrough-position\",\n\t \"strikethroughThickness\": \"strikethrough-thickness\",\n\t \"string\": \"string\",\n\t \"style\": \"style\",\n\t \"surfaceScale\": \"surfaceScale\",\n\t \"systemLanguage\": \"systemLanguage\",\n\t \"tableValues\": \"tableValues\",\n\t \"target\": \"target\",\n\t \"targetX\": \"targetX\",\n\t \"targetY\": \"targetY\",\n\t \"textLength\": \"textLength\",\n\t \"title\": \"title\",\n\t \"to\": \"to\",\n\t \"transform\": \"transform\",\n\t \"type\": \"type\",\n\t \"u1\": \"u1\",\n\t \"u2\": \"u2\",\n\t \"underlinePosition\": \"underline-position\",\n\t \"underlineThickness\": \"underline-thickness\",\n\t \"unicode\": \"unicode\",\n\t \"unicodeRange\": \"unicode-range\",\n\t \"unitsPerEm\": \"units-per-em\",\n\t \"vAlphabetic\": \"v-alphabetic\",\n\t \"vHanging\": \"v-hanging\",\n\t \"vIdeographic\": \"v-ideographic\",\n\t \"vMathematical\": \"v-mathematical\",\n\t \"values\": \"values\",\n\t \"version\": \"version\",\n\t \"vertAdvY\": \"vert-adv-y\",\n\t \"vertOriginX\": \"vert-origin-x\",\n\t \"vertOriginY\": \"vert-origin-y\",\n\t \"viewBox\": \"viewBox\",\n\t \"viewTarget\": \"viewTarget\",\n\t \"width\": \"width\",\n\t \"widths\": \"widths\",\n\t \"x\": \"x\",\n\t \"xHeight\": \"x-height\",\n\t \"x1\": \"x1\",\n\t \"x2\": \"x2\",\n\t \"xChannelSelector\": \"xChannelSelector\",\n\t \"xlink\": \"xlink\",\n\t \"xml\": \"xml\",\n\t \"y\": \"y\",\n\t \"y1\": \"y1\",\n\t \"y2\": \"y2\",\n\t \"yChannelSelector\": \"yChannelSelector\",\n\t \"z\": \"z\",\n\t \"zoomAndPan\": \"zoomAndPan\",\n\t /**\n\t * Presentation attributes\n\t */\n\t \"alignmentBaseline\": \"alignment-baseline\",\n\t \"baselineShift\": \"baseline-shift\",\n\t \"clipPath\": \"clip-path\",\n\t \"clipRule\": \"clip-rule\",\n\t \"clip\": \"clip\",\n\t \"colorInterpolationFilters\": \"color-interpolation-filters\",\n\t \"colorInterpolation\": \"color-interpolation\",\n\t \"colorProfile\": \"color-profile\",\n\t \"colorRendering\": \"color-rendering\",\n\t \"color\": \"color\",\n\t \"cursor\": \"cursor\",\n\t \"direction\": \"direction\",\n\t \"display\": \"display\",\n\t \"dominantBaseline\": \"dominant-baseline\",\n\t \"enableBackground\": \"enable-background\",\n\t \"fillOpacity\": \"fill-opacity\",\n\t \"fillRule\": \"fill-rule\",\n\t \"filter\": \"filter\",\n\t \"floodColor\": \"flood-color\",\n\t \"floodOpacity\": \"flood-opacity\",\n\t \"fontSizeAdjust\": \"font-size-adjust\",\n\t \"fontVariant\": \"font-variant\",\n\t \"fontWeight\": \"font-weight\",\n\t \"glyphOrientationHorizontal\": \"glyph-orientation-horizontal\",\n\t \"glyphOrientationVertical\": \"glyph-orientation-vertical\",\n\t \"imageRendering\": \"image-rendering\",\n\t \"kerning\": \"kerning\",\n\t \"letterSpacing\": \"letter-spacing\",\n\t \"lightingColor\": \"lighting-color\",\n\t \"markerEnd\": \"marker-end\",\n\t \"markerMid\": \"marker-mid\",\n\t \"markerStart\": \"marker-start\",\n\t \"mask\": \"mask\",\n\t \"opacity\": \"opacity\",\n\t \"overflow\": \"overflow\",\n\t \"pointerEvents\": \"pointer-events\",\n\t \"shapeRendering\": \"shape-rendering\",\n\t \"stopColor\": \"stop-color\",\n\t \"stopOpacity\": \"stop-opacity\",\n\t \"strokeDasharray\": \"stroke-dasharray\",\n\t \"strokeDashoffset\": \"stroke-dashoffset\",\n\t \"strokeLinecap\": \"stroke-linecap\",\n\t \"strokeLinejoin\": \"stroke-linejoin\",\n\t \"strokeMiterlimit\": \"stroke-miterlimit\",\n\t \"strokeOpacity\": \"stroke-opacity\",\n\t \"strokeWidth\": \"stroke-width\",\n\t \"stroke\": \"stroke\",\n\t \"textAnchor\": \"text-anchor\",\n\t \"textDecoration\": \"text-decoration\",\n\t \"textRendering\": \"text-rendering\",\n\t \"unicodeBidi\": \"unicode-bidi\",\n\t \"visibility\": \"visibility\",\n\t \"wordSpacing\": \"word-spacing\",\n\t \"writingMode\": \"writing-mode\"\n\t};\n\n\n/***/ }\n/******/ ]);","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nexports.__esModule = true;\r\nexports.propsToOptions = void 0;\r\nvar Es6Promise = require(\"es6-promise\"); // without this, 'yarn build' will complain about Promise.\r\nvar react_dom_1 = require(\"react-dom\");\r\n// .prettierignore (to keep relevant props together)\r\nvar NOOPS = function () { };\r\nfunction syncRender(comp, el) {\r\n return new Es6Promise.Promise(function (resolve, reject) {\r\n react_dom_1.render(comp, el, function () {\r\n resolve(el);\r\n });\r\n });\r\n}\r\n// get callbacks from props (default: NOOP) to set them to Tabulator options later.\r\nvar propsToOptions = function (props) { return __awaiter(void 0, void 0, void 0, function () {\r\n var output, defaultOptions, _i, defaultOptions_1, opt, callbackNames, _a, callbackNames_1, callbackName, el;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n output = {};\r\n defaultOptions = ['height', 'layout', 'layoutColumnsOnNewData', 'columnMinWidth', 'columnVertAlign',\r\n 'resizableColumns', 'resizableRows', 'autoResize', 'tooltips', 'tooltipsHeader', 'tooltipGenerationMode',\r\n 'initialSort', 'initialFilter', 'initialHeaderFilter', 'footerElement', 'index', 'keybindings', 'clipboard', 'clipboardCopyStyled',\r\n 'clipboardCopySelector', 'clipboardCopyFormatter', 'clipboardCopyHeader', 'clipboardPasteParser',\r\n 'clipboardPasteAction', 'rowFormatter', 'placeholder', 'selectable'];\r\n for (_i = 0, defaultOptions_1 = defaultOptions; _i < defaultOptions_1.length; _i++) {\r\n opt = defaultOptions_1[_i];\r\n if (typeof props[opt] !== 'undefined') {\r\n output[opt] = props[opt];\r\n }\r\n }\r\n callbackNames = ['tableBuilt', 'rowClick', 'rowDblClick', 'rowContext', 'rowTap', 'rowDblTap', 'rowTapHold',\r\n 'rowAdded', 'rowDeleted', 'rowMoved', 'rowUpdated', 'rowSelectionChanged', 'rowSelected', 'rowDeselected', 'rowResized',\r\n 'cellClick', 'cellDblClick', 'cellContext', 'cellTap', 'cellDblTap', 'cellTapHold', 'cellEditing', 'cellEdited', 'cellEditCancelled',\r\n 'columnMoved', 'columnResized', 'columnTitleChanged', 'columnVisibilityChanged',\r\n 'htmlImporting', 'htmlImported', 'dataLoading', 'dataLoaded', 'dataChanged',\r\n 'ajaxRequesting', 'ajaxResponse', 'ajaxError', 'dataFiltering', 'dataFiltered', 'dataSorting', 'dataSorted',\r\n 'renderStarted', 'renderComplete', 'pageLoaded', 'localized', 'dataGrouping', 'dataGrouped',\r\n 'groupVisibilityChanged', 'groupClick', 'groupDblClick', 'groupContext', 'groupTap', 'groupDblTap', 'groupTapHold',\r\n 'movableRowsSendingStart', 'movableRowsSent', 'movableRowsSentFailed', 'movableRowsSendingStop', 'movableRowsReceivingStart', 'movableRowsReceived', 'movableRowsReceivedFailed', 'movableRowsReceivingStop',\r\n 'validationFailed', 'clipboardCopied', 'clipboardPasted', 'clipboardPasteError',\r\n 'downloadReady', 'downloadComplete'];\r\n for (_a = 0, callbackNames_1 = callbackNames; _a < callbackNames_1.length; _a++) {\r\n callbackName = callbackNames_1[_a];\r\n output[callbackName] = props[callbackName] || NOOPS;\r\n }\r\n if (!(typeof props['footerElement'] === 'object')) return [3 /*break*/, 2];\r\n return [4 /*yield*/, syncRender(props['footerElement'], document.createElement('div'))];\r\n case 1:\r\n el = _b.sent();\r\n output['footerElement'] = el.innerHTML;\r\n _b.label = 2;\r\n case 2: return [2 /*return*/, output];\r\n }\r\n });\r\n}); };\r\nexports.propsToOptions = propsToOptions;\r\n","/* Tabulator v4.9.3 (c) Oliver Folkerd */\n\n'use strict';\n\n// https://tc39.github.io/ecma262/#sec-array.prototype.findIndex\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nif (!Array.prototype.findIndex) {\n\n\tObject.defineProperty(Array.prototype, 'findIndex', {\n\n\t\tvalue: function value(predicate) {\n\n\t\t\t// 1. Let O be ? ToObject(this value).\n\n\t\t\tif (this == null) {\n\n\t\t\t\tthrow new TypeError('\"this\" is null or not defined');\n\t\t\t}\n\n\t\t\tvar o = Object(this);\n\n\t\t\t// 2. Let len be ? ToLength(? Get(O, \"length\")).\n\n\t\t\tvar len = o.length >>> 0;\n\n\t\t\t// 3. If IsCallable(predicate) is false, throw a TypeError exception.\n\n\t\t\tif (typeof predicate !== 'function') {\n\n\t\t\t\tthrow new TypeError('predicate must be a function');\n\t\t\t}\n\n\t\t\t// 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n\n\t\t\tvar thisArg = arguments[1];\n\n\t\t\t// 5. Let k be 0.\n\n\t\t\tvar k = 0;\n\n\t\t\t// 6. Repeat, while k < len\n\n\t\t\twhile (k < len) {\n\n\t\t\t\t// a. Let Pk be ! ToString(k).\n\n\t\t\t\t// b. Let kValue be ? Get(O, Pk).\n\n\t\t\t\t// c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\n\n\t\t\t\t// d. If testResult is true, return k.\n\n\t\t\t\tvar kValue = o[k];\n\n\t\t\t\tif (predicate.call(thisArg, kValue, k, o)) {\n\n\t\t\t\t\treturn k;\n\t\t\t\t}\n\n\t\t\t\t// e. Increase k by 1.\n\n\t\t\t\tk++;\n\t\t\t}\n\n\t\t\t// 7. Return -1.\n\n\t\t\treturn -1;\n\t\t}\n\n\t});\n}\n\n// https://tc39.github.io/ecma262/#sec-array.prototype.find\n\nif (!Array.prototype.find) {\n\n\tObject.defineProperty(Array.prototype, 'find', {\n\n\t\tvalue: function value(predicate) {\n\n\t\t\t// 1. Let O be ? ToObject(this value).\n\n\t\t\tif (this == null) {\n\n\t\t\t\tthrow new TypeError('\"this\" is null or not defined');\n\t\t\t}\n\n\t\t\tvar o = Object(this);\n\n\t\t\t// 2. Let len be ? ToLength(? Get(O, \"length\")).\n\n\t\t\tvar len = o.length >>> 0;\n\n\t\t\t// 3. If IsCallable(predicate) is false, throw a TypeError exception.\n\n\t\t\tif (typeof predicate !== 'function') {\n\n\t\t\t\tthrow new TypeError('predicate must be a function');\n\t\t\t}\n\n\t\t\t// 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n\n\t\t\tvar thisArg = arguments[1];\n\n\t\t\t// 5. Let k be 0.\n\n\t\t\tvar k = 0;\n\n\t\t\t// 6. Repeat, while k < len\n\n\t\t\twhile (k < len) {\n\n\t\t\t\t// a. Let Pk be ! ToString(k).\n\n\t\t\t\t// b. Let kValue be ? Get(O, Pk).\n\n\t\t\t\t// c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\n\n\t\t\t\t// d. If testResult is true, return kValue.\n\n\t\t\t\tvar kValue = o[k];\n\n\t\t\t\tif (predicate.call(thisArg, kValue, k, o)) {\n\n\t\t\t\t\treturn kValue;\n\t\t\t\t}\n\n\t\t\t\t// e. Increase k by 1.\n\n\t\t\t\tk++;\n\t\t\t}\n\n\t\t\t// 7. Return undefined.\n\n\t\t\treturn undefined;\n\t\t}\n\n\t});\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill\n\nif (!String.prototype.includes) {\n\n\tString.prototype.includes = function (search, start) {\n\n\t\t'use strict';\n\n\t\tif (search instanceof RegExp) {\n\n\t\t\tthrow TypeError('first argument must not be a RegExp');\n\t\t}\n\n\t\tif (start === undefined) {\n\t\t\tstart = 0;\n\t\t}\n\n\t\treturn this.indexOf(search, start) !== -1;\n\t};\n}\n\n// https://tc39.github.io/ecma262/#sec-array.prototype.includes\n\nif (!Array.prototype.includes) {\n\n\tObject.defineProperty(Array.prototype, 'includes', {\n\n\t\tvalue: function value(searchElement, fromIndex) {\n\n\t\t\tif (this == null) {\n\n\t\t\t\tthrow new TypeError('\"this\" is null or not defined');\n\t\t\t}\n\n\t\t\t// 1. Let O be ? ToObject(this value).\n\n\t\t\tvar o = Object(this);\n\n\t\t\t// 2. Let len be ? ToLength(? Get(O, \"length\")).\n\n\t\t\tvar len = o.length >>> 0;\n\n\t\t\t// 3. If len is 0, return false.\n\n\t\t\tif (len === 0) {\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// 4. Let n be ? ToInteger(fromIndex).\n\n\t\t\t// (If fromIndex is undefined, this step produces the value 0.)\n\n\t\t\tvar n = fromIndex | 0;\n\n\t\t\t// 5. If n ≥ 0, then\n\n\t\t\t// a. Let k be n.\n\n\t\t\t// 6. Else n < 0,\n\n\t\t\t// a. Let k be len + n.\n\n\t\t\t// b. If k < 0, let k be 0.\n\n\t\t\tvar k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n\n\t\t\tfunction sameValueZero(x, y) {\n\n\t\t\t\treturn x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n\t\t\t}\n\n\t\t\t// 7. Repeat, while k < len\n\n\t\t\twhile (k < len) {\n\n\t\t\t\t// a. Let elementK be the result of ? Get(O, ! ToString(k)).\n\n\t\t\t\t// b. If SameValueZero(searchElement, elementK) is true, return true.\n\n\t\t\t\tif (sameValueZero(o[k], searchElement)) {\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// c. Increase k by 1.\n\n\t\t\t\tk++;\n\t\t\t}\n\n\t\t\t// 8. Return false\n\n\t\t\treturn false;\n\t\t}\n\n\t});\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill\n\nif (typeof Object.assign !== 'function') {\n\n\t// Must be writable: true, enumerable: false, configurable: true\n\n\tObject.defineProperty(Object, \"assign\", {\n\n\t\tvalue: function assign(target, varArgs) {\n\t\t\t// .length of function is 2\n\n\t\t\t'use strict';\n\n\t\t\tif (target === null || target === undefined) {\n\n\t\t\t\tthrow new TypeError('Cannot convert undefined or null to object');\n\t\t\t}\n\n\t\t\tvar to = Object(target);\n\n\t\t\tfor (var index = 1; index < arguments.length; index++) {\n\n\t\t\t\tvar nextSource = arguments[index];\n\n\t\t\t\tif (nextSource !== null && nextSource !== undefined) {\n\n\t\t\t\t\tfor (var nextKey in nextSource) {\n\n\t\t\t\t\t\t// Avoid bugs when hasOwnProperty is shadowed\n\n\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n\n\t\t\t\t\t\t\tto[nextKey] = nextSource[nextKey];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn to;\n\t\t},\n\n\t\twritable: true,\n\n\t\tconfigurable: true\n\n\t});\n}\n\nvar ColumnManager = function ColumnManager(table) {\n\n\tthis.table = table; //hold parent table\n\n\tthis.blockHozScrollEvent = false;\n\n\tthis.headersElement = this.createHeadersElement();\n\n\tthis.element = this.createHeaderElement(); //containing element\n\n\tthis.rowManager = null; //hold row manager object\n\n\tthis.columns = []; // column definition object\n\n\tthis.columnsByIndex = []; //columns by index\n\n\tthis.columnsByField = {}; //columns by field\n\n\tthis.scrollLeft = 0;\n\n\tthis.element.insertBefore(this.headersElement, this.element.firstChild);\n};\n\n////////////// Setup Functions /////////////////\n\n\nColumnManager.prototype.createHeadersElement = function () {\n\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-headers\");\n\n\treturn el;\n};\n\nColumnManager.prototype.createHeaderElement = function () {\n\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-header\");\n\n\tif (!this.table.options.headerVisible) {\n\n\t\tel.classList.add(\"tabulator-header-hidden\");\n\t}\n\n\treturn el;\n};\n\nColumnManager.prototype.initialize = function () {\n\n\tvar self = this;\n\n\t//scroll body along with header\n\n\t// self.element.addEventListener(\"scroll\", function(e){\n\n\t// \tif(!self.blockHozScrollEvent){\n\n\t// \t\tself.table.rowManager.scrollHorizontal(self.element.scrollLeft);\n\n\t// \t}\n\n\t// });\n};\n\n//link to row manager\n\nColumnManager.prototype.setRowManager = function (manager) {\n\n\tthis.rowManager = manager;\n};\n\n//return containing element\n\nColumnManager.prototype.getElement = function () {\n\n\treturn this.element;\n};\n\n//return header containing element\n\nColumnManager.prototype.getHeadersElement = function () {\n\n\treturn this.headersElement;\n};\n\n// ColumnManager.prototype.tempScrollBlock = function(){\n\n// \tclearTimeout(this.blockHozScrollEvent);\n\n// \tthis.blockHozScrollEvent = setTimeout(() => {this.blockHozScrollEvent = false;}, 50);\n\n// }\n\n\n//scroll horizontally to match table body\n\nColumnManager.prototype.scrollHorizontal = function (left) {\n\n\tvar hozAdjust = 0,\n\t scrollWidth = this.element.scrollWidth - this.table.element.clientWidth;\n\n\t// this.tempScrollBlock();\n\n\tthis.element.scrollLeft = left;\n\n\t//adjust for vertical scrollbar moving table when present\n\n\tif (left > scrollWidth) {\n\n\t\thozAdjust = left - scrollWidth;\n\n\t\tthis.element.style.marginLeft = -hozAdjust + \"px\";\n\t} else {\n\n\t\tthis.element.style.marginLeft = 0;\n\t}\n\n\t//keep frozen columns fixed in position\n\n\t//this._calcFrozenColumnsPos(hozAdjust + 3);\n\n\n\tthis.scrollLeft = left;\n\n\tif (this.table.modExists(\"frozenColumns\")) {\n\n\t\tthis.table.modules.frozenColumns.scrollHorizontal();\n\t}\n};\n\n///////////// Column Setup Functions /////////////\n\n\nColumnManager.prototype.generateColumnsFromRowData = function (data) {\n\n\tvar cols = [],\n\t definitions = this.table.options.autoColumnsDefinitions,\n\t row,\n\t sorter;\n\n\tif (data && data.length) {\n\n\t\trow = data[0];\n\n\t\tfor (var key in row) {\n\n\t\t\tvar col = {\n\n\t\t\t\tfield: key,\n\n\t\t\t\ttitle: key\n\n\t\t\t};\n\n\t\t\tvar value = row[key];\n\n\t\t\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\n\t\t\t\tcase \"undefined\":\n\n\t\t\t\t\tsorter = \"string\";\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"boolean\":\n\n\t\t\t\t\tsorter = \"boolean\";\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"object\":\n\n\t\t\t\t\tif (Array.isArray(value)) {\n\n\t\t\t\t\t\tsorter = \"array\";\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif (!isNaN(value) && value !== \"\") {\n\n\t\t\t\t\t\tsorter = \"number\";\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) {\n\n\t\t\t\t\t\t\tsorter = \"alphanum\";\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tcol.sorter = sorter;\n\n\t\t\tcols.push(col);\n\t\t}\n\n\t\tif (definitions) {\n\n\t\t\tswitch (typeof definitions === 'undefined' ? 'undefined' : _typeof(definitions)) {\n\n\t\t\t\tcase \"function\":\n\n\t\t\t\t\tthis.table.options.columns = definitions.call(this.table, cols);\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"object\":\n\n\t\t\t\t\tif (Array.isArray(definitions)) {\n\n\t\t\t\t\t\tcols.forEach(function (col) {\n\n\t\t\t\t\t\t\tvar match = definitions.find(function (def) {\n\n\t\t\t\t\t\t\t\treturn def.field === col.field;\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t\t\tObject.assign(col, match);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tcols.forEach(function (col) {\n\n\t\t\t\t\t\t\tif (definitions[col.field]) {\n\n\t\t\t\t\t\t\t\tObject.assign(col, definitions[col.field]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.table.options.columns = cols;\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\t\t} else {\n\n\t\t\tthis.table.options.columns = cols;\n\t\t}\n\n\t\tthis.setColumns(this.table.options.columns);\n\t}\n};\n\nColumnManager.prototype.setColumns = function (cols, row) {\n\n\tvar self = this;\n\n\twhile (self.headersElement.firstChild) {\n\t\tself.headersElement.removeChild(self.headersElement.firstChild);\n\t}self.columns = [];\n\n\tself.columnsByIndex = [];\n\n\tself.columnsByField = {};\n\n\t//reset frozen columns\n\n\tif (self.table.modExists(\"frozenColumns\")) {\n\n\t\tself.table.modules.frozenColumns.reset();\n\t}\n\n\tcols.forEach(function (def, i) {\n\n\t\tself._addColumn(def);\n\t});\n\n\tself._reIndexColumns();\n\n\tif (self.table.options.responsiveLayout && self.table.modExists(\"responsiveLayout\", true)) {\n\n\t\tself.table.modules.responsiveLayout.initialize();\n\t}\n\n\tif (this.table.options.virtualDomHoz) {\n\n\t\tthis.table.vdomHoz.reinitialize(false, true);\n\t}\n\n\tself.redraw(true);\n};\n\nColumnManager.prototype._addColumn = function (definition, before, nextToColumn) {\n\n\tvar column = new Column(definition, this),\n\t colEl = column.getElement(),\n\t index = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;\n\n\tif (nextToColumn && index > -1) {\n\n\t\tvar parentIndex = this.columns.indexOf(nextToColumn.getTopColumn());\n\n\t\tvar nextEl = nextToColumn.getElement();\n\n\t\tif (before) {\n\n\t\t\tthis.columns.splice(parentIndex, 0, column);\n\n\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl);\n\t\t} else {\n\n\t\t\tthis.columns.splice(parentIndex + 1, 0, column);\n\n\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);\n\t\t}\n\t} else {\n\n\t\tif (before) {\n\n\t\t\tthis.columns.unshift(column);\n\n\t\t\tthis.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);\n\t\t} else {\n\n\t\t\tthis.columns.push(column);\n\n\t\t\tthis.headersElement.appendChild(column.getElement());\n\t\t}\n\n\t\tcolumn.columnRendered();\n\t}\n\n\treturn column;\n};\n\nColumnManager.prototype.registerColumnField = function (col) {\n\n\tif (col.definition.field) {\n\n\t\tthis.columnsByField[col.definition.field] = col;\n\t}\n};\n\nColumnManager.prototype.registerColumnPosition = function (col) {\n\n\tthis.columnsByIndex.push(col);\n};\n\nColumnManager.prototype._reIndexColumns = function () {\n\n\tthis.columnsByIndex = [];\n\n\tthis.columns.forEach(function (column) {\n\n\t\tcolumn.reRegisterPosition();\n\t});\n};\n\n//ensure column headers take up the correct amount of space in column groups\n\nColumnManager.prototype._verticalAlignHeaders = function () {\n\n\tvar self = this,\n\t minHeight = 0;\n\n\tself.columns.forEach(function (column) {\n\n\t\tvar height;\n\n\t\tcolumn.clearVerticalAlign();\n\n\t\theight = column.getHeight();\n\n\t\tif (height > minHeight) {\n\n\t\t\tminHeight = height;\n\t\t}\n\t});\n\n\tself.columns.forEach(function (column) {\n\n\t\tcolumn.verticalAlign(self.table.options.columnHeaderVertAlign, minHeight);\n\t});\n\n\tself.rowManager.adjustTableSize();\n};\n\n//////////////// Column Details /////////////////\n\n\nColumnManager.prototype.findColumn = function (subject) {\n\n\tvar self = this;\n\n\tif ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == \"object\") {\n\n\t\tif (subject instanceof Column) {\n\n\t\t\t//subject is column element\n\n\t\t\treturn subject;\n\t\t} else if (subject instanceof ColumnComponent) {\n\n\t\t\t//subject is public column component\n\n\t\t\treturn subject._getSelf() || false;\n\t\t} else if (typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement) {\n\n\t\t\t//subject is a HTML element of the column header\n\n\t\t\tvar match = self.columns.find(function (column) {\n\n\t\t\t\treturn column.element === subject;\n\t\t\t});\n\n\t\t\treturn match || false;\n\t\t}\n\t} else {\n\n\t\t//subject should be treated as the field name of the column\n\n\t\treturn this.columnsByField[subject] || false;\n\t}\n\n\t//catch all for any other type of input\n\n\n\treturn false;\n};\n\nColumnManager.prototype.getColumnByField = function (field) {\n\n\treturn this.columnsByField[field];\n};\n\nColumnManager.prototype.getColumnsByFieldRoot = function (root) {\n\tvar _this = this;\n\n\tvar matches = [];\n\n\tObject.keys(this.columnsByField).forEach(function (field) {\n\n\t\tvar fieldRoot = field.split(\".\")[0];\n\n\t\tif (fieldRoot === root) {\n\n\t\t\tmatches.push(_this.columnsByField[field]);\n\t\t}\n\t});\n\n\treturn matches;\n};\n\nColumnManager.prototype.getColumnByIndex = function (index) {\n\n\treturn this.columnsByIndex[index];\n};\n\nColumnManager.prototype.getFirstVisibileColumn = function (index) {\n\n\tvar index = this.columnsByIndex.findIndex(function (col) {\n\n\t\treturn col.visible;\n\t});\n\n\treturn index > -1 ? this.columnsByIndex[index] : false;\n};\n\nColumnManager.prototype.getColumns = function () {\n\n\treturn this.columns;\n};\n\nColumnManager.prototype.findColumnIndex = function (column) {\n\n\treturn this.columnsByIndex.findIndex(function (col) {\n\n\t\treturn column === col;\n\t});\n};\n\n//return all columns that are not groups\n\nColumnManager.prototype.getRealColumns = function () {\n\n\treturn this.columnsByIndex;\n};\n\n//travers across columns and call action\n\nColumnManager.prototype.traverse = function (callback) {\n\n\tvar self = this;\n\n\tself.columnsByIndex.forEach(function (column, i) {\n\n\t\tcallback(column, i);\n\t});\n};\n\n//get defintions of actual columns\n\nColumnManager.prototype.getDefinitions = function (active) {\n\n\tvar self = this,\n\t output = [];\n\n\tself.columnsByIndex.forEach(function (column) {\n\n\t\tif (!active || active && column.visible) {\n\n\t\t\toutput.push(column.getDefinition());\n\t\t}\n\t});\n\n\treturn output;\n};\n\n//get full nested definition tree\n\nColumnManager.prototype.getDefinitionTree = function () {\n\n\tvar self = this,\n\t output = [];\n\n\tself.columns.forEach(function (column) {\n\n\t\toutput.push(column.getDefinition(true));\n\t});\n\n\treturn output;\n};\n\nColumnManager.prototype.getComponents = function (structured) {\n\n\tvar self = this,\n\t output = [],\n\t columns = structured ? self.columns : self.columnsByIndex;\n\n\tcolumns.forEach(function (column) {\n\n\t\toutput.push(column.getComponent());\n\t});\n\n\treturn output;\n};\n\nColumnManager.prototype.getWidth = function () {\n\n\tvar width = 0;\n\n\tthis.columnsByIndex.forEach(function (column) {\n\n\t\tif (column.visible) {\n\n\t\t\twidth += column.getWidth();\n\t\t}\n\t});\n\n\treturn width;\n};\n\nColumnManager.prototype.moveColumn = function (from, to, after) {\n\n\tthis.moveColumnActual(from, to, after);\n\n\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\tthis.table.modules.responsiveLayout.initialize();\n\t}\n\n\tif (this.table.modExists(\"columnCalcs\")) {\n\n\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\n\t}\n\n\tto.element.parentNode.insertBefore(from.element, to.element);\n\n\tif (after) {\n\n\t\tto.element.parentNode.insertBefore(to.element, from.element);\n\t}\n\n\tthis._verticalAlignHeaders();\n\n\tthis.table.rowManager.reinitialize();\n};\n\nColumnManager.prototype.moveColumnActual = function (from, to, after) {\n\n\tif (from.parent.isGroup) {\n\n\t\tthis._moveColumnInArray(from.parent.columns, from, to, after);\n\t} else {\n\n\t\tthis._moveColumnInArray(this.columns, from, to, after);\n\t}\n\n\tthis._moveColumnInArray(this.columnsByIndex, from, to, after, true);\n\n\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\tthis.table.modules.responsiveLayout.initialize();\n\t}\n\n\tif (this.table.options.virtualDomHoz) {\n\n\t\tthis.table.vdomHoz.reinitialize(true);\n\t}\n\n\tif (this.table.options.columnMoved) {\n\n\t\tthis.table.options.columnMoved.call(this.table, from.getComponent(), this.table.columnManager.getComponents());\n\t}\n\n\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns) {\n\n\t\tthis.table.modules.persistence.save(\"columns\");\n\t}\n};\n\nColumnManager.prototype._moveColumnInArray = function (columns, from, to, after, updateRows) {\n\tvar _this2 = this;\n\n\tvar fromIndex = columns.indexOf(from),\n\t toIndex,\n\t rows = [];\n\n\tif (fromIndex > -1) {\n\n\t\tcolumns.splice(fromIndex, 1);\n\n\t\ttoIndex = columns.indexOf(to);\n\n\t\tif (toIndex > -1) {\n\n\t\t\tif (after) {\n\n\t\t\t\ttoIndex = toIndex + 1;\n\t\t\t}\n\t\t} else {\n\n\t\t\ttoIndex = fromIndex;\n\t\t}\n\n\t\tcolumns.splice(toIndex, 0, from);\n\n\t\tif (updateRows) {\n\n\t\t\tif (this.table.options.dataTree && this.table.modExists(\"dataTree\", true)) {\n\n\t\t\t\tthis.table.rowManager.rows.forEach(function (row) {\n\n\t\t\t\t\trows = rows.concat(_this2.table.modules.dataTree.getTreeChildren(row, false, true));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\trows = rows.concat(this.table.rowManager.rows);\n\n\t\t\trows.forEach(function (row) {\n\n\t\t\t\tif (row.cells.length) {\n\n\t\t\t\t\tvar cell = row.cells.splice(fromIndex, 1)[0];\n\n\t\t\t\t\trow.cells.splice(toIndex, 0, cell);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n};\n\nColumnManager.prototype.scrollToColumn = function (column, position, ifVisible) {\n\tvar _this3 = this;\n\n\tvar left = 0,\n\t offset = 0,\n\t adjust = 0,\n\t colEl = column.getElement();\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\tif (typeof position === \"undefined\") {\n\n\t\t\tposition = _this3.table.options.scrollToColumnPosition;\n\t\t}\n\n\t\tif (typeof ifVisible === \"undefined\") {\n\n\t\t\tifVisible = _this3.table.options.scrollToColumnIfVisible;\n\t\t}\n\n\t\tif (column.visible) {\n\n\t\t\t//align to correct position\n\n\t\t\tswitch (position) {\n\n\t\t\t\tcase \"middle\":\n\n\t\t\t\tcase \"center\":\n\n\t\t\t\t\tadjust = -_this3.element.clientWidth / 2;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"right\":\n\n\t\t\t\t\tadjust = colEl.clientWidth - _this3.headersElement.clientWidth;\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\t//check column visibility\n\n\t\t\tif (!ifVisible) {\n\n\t\t\t\toffset = colEl.offsetLeft;\n\n\t\t\t\tif (offset > 0 && offset + colEl.offsetWidth < _this3.element.clientWidth) {\n\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//calculate scroll position\n\n\t\t\tleft = colEl.offsetLeft + adjust;\n\n\t\t\tleft = Math.max(Math.min(left, _this3.table.rowManager.element.scrollWidth - _this3.table.rowManager.element.clientWidth), 0);\n\n\t\t\t_this3.table.rowManager.scrollHorizontal(left);\n\n\t\t\t_this3.scrollHorizontal(left);\n\n\t\t\tresolve();\n\t\t} else {\n\n\t\t\tconsole.warn(\"Scroll Error - Column not visible\");\n\n\t\t\treject(\"Scroll Error - Column not visible\");\n\t\t}\n\t});\n};\n\n//////////////// Cell Management /////////////////\n\n\nColumnManager.prototype.generateCells = function (row) {\n\n\tvar self = this;\n\n\tvar cells = [];\n\n\tself.columnsByIndex.forEach(function (column) {\n\n\t\tcells.push(column.generateCell(row));\n\t});\n\n\treturn cells;\n};\n\n//////////////// Column Management /////////////////\n\n\nColumnManager.prototype.getFlexBaseWidth = function () {\n\n\tvar self = this,\n\t totalWidth = self.table.element.clientWidth,\n\t //table element width\n\n\tfixedWidth = 0;\n\n\t//adjust for vertical scrollbar if present\n\n\tif (self.rowManager.element.scrollHeight > self.rowManager.element.clientHeight) {\n\n\t\ttotalWidth -= self.rowManager.element.offsetWidth - self.rowManager.element.clientWidth;\n\t}\n\n\tthis.columnsByIndex.forEach(function (column) {\n\n\t\tvar width, minWidth, colWidth;\n\n\t\tif (column.visible) {\n\n\t\t\twidth = column.definition.width || 0;\n\n\t\t\tminWidth = typeof column.minWidth == \"undefined\" ? self.table.options.columnMinWidth : parseInt(column.minWidth);\n\n\t\t\tif (typeof width == \"string\") {\n\n\t\t\t\tif (width.indexOf(\"%\") > -1) {\n\n\t\t\t\t\tcolWidth = totalWidth / 100 * parseInt(width);\n\t\t\t\t} else {\n\n\t\t\t\t\tcolWidth = parseInt(width);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\tcolWidth = width;\n\t\t\t}\n\n\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\n\t\t}\n\t});\n\n\treturn fixedWidth;\n};\n\nColumnManager.prototype.addColumn = function (definition, before, nextToColumn) {\n\tvar _this4 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\tvar column = _this4._addColumn(definition, before, nextToColumn);\n\n\t\t_this4._reIndexColumns();\n\n\t\tif (_this4.table.options.responsiveLayout && _this4.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t_this4.table.modules.responsiveLayout.initialize();\n\t\t}\n\n\t\tif (_this4.table.modExists(\"columnCalcs\")) {\n\n\t\t\t_this4.table.modules.columnCalcs.recalc(_this4.table.rowManager.activeRows);\n\t\t}\n\n\t\t_this4.redraw(true);\n\n\t\tif (_this4.table.modules.layout.getMode() != \"fitColumns\") {\n\n\t\t\tcolumn.reinitializeWidth();\n\t\t}\n\n\t\t_this4._verticalAlignHeaders();\n\n\t\t_this4.table.rowManager.reinitialize();\n\n\t\tif (_this4.table.options.virtualDomHoz) {\n\n\t\t\t_this4.table.vdomHoz.reinitialize();\n\t\t}\n\n\t\tresolve(column);\n\t});\n};\n\n//remove column from system\n\nColumnManager.prototype.deregisterColumn = function (column) {\n\n\tvar field = column.getField(),\n\t index;\n\n\t//remove from field list\n\n\tif (field) {\n\n\t\tdelete this.columnsByField[field];\n\t}\n\n\t//remove from index list\n\n\tindex = this.columnsByIndex.indexOf(column);\n\n\tif (index > -1) {\n\n\t\tthis.columnsByIndex.splice(index, 1);\n\t}\n\n\t//remove from column list\n\n\tindex = this.columns.indexOf(column);\n\n\tif (index > -1) {\n\n\t\tthis.columns.splice(index, 1);\n\t}\n\n\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\tthis.table.modules.responsiveLayout.initialize();\n\t}\n\n\tthis._verticalAlignHeaders();\n\n\tthis.redraw();\n};\n\n//redraw columns\n\nColumnManager.prototype.redraw = function (force) {\n\n\tif (force) {\n\n\t\tif (Tabulator.prototype.helpers.elVisible(this.element)) {\n\n\t\t\tthis._verticalAlignHeaders();\n\t\t}\n\n\t\tthis.table.rowManager.resetScroll();\n\n\t\tthis.table.rowManager.reinitialize();\n\t}\n\n\tif ([\"fitColumns\", \"fitDataStretch\"].indexOf(this.table.modules.layout.getMode()) > -1) {\n\n\t\tthis.table.modules.layout.layout();\n\t} else {\n\n\t\tif (force) {\n\n\t\t\tthis.table.modules.layout.layout();\n\t\t} else {\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\t\t}\n\t}\n\n\tif (this.table.modExists(\"frozenColumns\")) {\n\n\t\tthis.table.modules.frozenColumns.layout();\n\t}\n\n\tif (this.table.modExists(\"columnCalcs\")) {\n\n\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\n\t}\n\n\tif (force) {\n\n\t\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns) {\n\n\t\t\tthis.table.modules.persistence.save(\"columns\");\n\t\t}\n\n\t\tif (this.table.modExists(\"columnCalcs\")) {\n\n\t\t\tthis.table.modules.columnCalcs.redraw();\n\t\t}\n\t}\n\n\tthis.table.footerManager.redraw();\n};\n\n//public column object\nvar ColumnComponent = function ColumnComponent(column) {\n\tthis._column = column;\n\tthis.type = \"ColumnComponent\";\n};\n\nColumnComponent.prototype.getElement = function () {\n\treturn this._column.getElement();\n};\n\nColumnComponent.prototype.getDefinition = function () {\n\treturn this._column.getDefinition();\n};\n\nColumnComponent.prototype.getField = function () {\n\treturn this._column.getField();\n};\n\nColumnComponent.prototype.getCells = function () {\n\tvar cells = [];\n\n\tthis._column.cells.forEach(function (cell) {\n\t\tcells.push(cell.getComponent());\n\t});\n\n\treturn cells;\n};\n\nColumnComponent.prototype.getVisibility = function () {\n\tconsole.warn(\"getVisibility function is deprecated, you should now use the isVisible function\");\n\treturn this._column.visible;\n};\n\nColumnComponent.prototype.isVisible = function () {\n\treturn this._column.visible;\n};\n\nColumnComponent.prototype.show = function () {\n\tif (this._column.isGroup) {\n\t\tthis._column.columns.forEach(function (column) {\n\t\t\tcolumn.show();\n\t\t});\n\t} else {\n\t\tthis._column.show();\n\t}\n};\n\nColumnComponent.prototype.hide = function () {\n\tif (this._column.isGroup) {\n\t\tthis._column.columns.forEach(function (column) {\n\t\t\tcolumn.hide();\n\t\t});\n\t} else {\n\t\tthis._column.hide();\n\t}\n};\n\nColumnComponent.prototype.toggle = function () {\n\tif (this._column.visible) {\n\t\tthis.hide();\n\t} else {\n\t\tthis.show();\n\t}\n};\n\nColumnComponent.prototype.delete = function () {\n\treturn this._column.delete();\n};\n\nColumnComponent.prototype.getSubColumns = function () {\n\tvar output = [];\n\n\tif (this._column.columns.length) {\n\t\tthis._column.columns.forEach(function (column) {\n\t\t\toutput.push(column.getComponent());\n\t\t});\n\t}\n\n\treturn output;\n};\n\nColumnComponent.prototype.getParentColumn = function () {\n\treturn this._column.parent instanceof Column ? this._column.parent.getComponent() : false;\n};\n\nColumnComponent.prototype._getSelf = function () {\n\treturn this._column;\n};\n\nColumnComponent.prototype.scrollTo = function () {\n\treturn this._column.table.columnManager.scrollToColumn(this._column);\n};\n\nColumnComponent.prototype.getTable = function () {\n\treturn this._column.table;\n};\n\nColumnComponent.prototype.headerFilterFocus = function () {\n\tif (this._column.table.modExists(\"filter\", true)) {\n\t\tthis._column.table.modules.filter.setHeaderFilterFocus(this._column);\n\t}\n};\n\nColumnComponent.prototype.reloadHeaderFilter = function () {\n\tif (this._column.table.modExists(\"filter\", true)) {\n\t\tthis._column.table.modules.filter.reloadHeaderFilter(this._column);\n\t}\n};\n\nColumnComponent.prototype.getHeaderFilterValue = function () {\n\tif (this._column.table.modExists(\"filter\", true)) {\n\t\treturn this._column.table.modules.filter.getHeaderFilterValue(this._column);\n\t}\n};\n\nColumnComponent.prototype.setHeaderFilterValue = function (value) {\n\tif (this._column.table.modExists(\"filter\", true)) {\n\t\tthis._column.table.modules.filter.setHeaderFilterValue(this._column, value);\n\t}\n};\n\nColumnComponent.prototype.move = function (to, after) {\n\tvar toColumn = this._column.table.columnManager.findColumn(to);\n\n\tif (toColumn) {\n\t\tthis._column.table.columnManager.moveColumn(this._column, toColumn, after);\n\t} else {\n\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\n\t}\n};\n\nColumnComponent.prototype.getNextColumn = function () {\n\tvar nextCol = this._column.nextColumn();\n\n\treturn nextCol ? nextCol.getComponent() : false;\n};\n\nColumnComponent.prototype.getPrevColumn = function () {\n\tvar prevCol = this._column.prevColumn();\n\n\treturn prevCol ? prevCol.getComponent() : false;\n};\n\nColumnComponent.prototype.updateDefinition = function (updates) {\n\treturn this._column.updateDefinition(updates);\n};\n\nColumnComponent.prototype.getWidth = function () {\n\treturn this._column.getWidth();\n};\n\nColumnComponent.prototype.setWidth = function (width) {\n\tvar result;\n\n\tif (width === true) {\n\t\tresult = this._column.reinitializeWidth(true);\n\t} else {\n\t\tresult = this._column.setWidth(width);\n\t}\n\n\tif (this._column.table.options.virtualDomHoz) {\n\t\tthis._column.table.vdomHoz.reinitialize(true);\n\t}\n\n\treturn result;\n};\n\nColumnComponent.prototype.validate = function () {\n\treturn this._column.validate();\n};\n\nvar Column = function Column(def, parent) {\n\tvar self = this;\n\n\tthis.table = parent.table;\n\tthis.definition = def; //column definition\n\tthis.parent = parent; //hold parent object\n\tthis.type = \"column\"; //type of element\n\tthis.columns = []; //child columns\n\tthis.cells = []; //cells bound to this column\n\tthis.element = this.createElement(); //column header element\n\tthis.contentElement = false;\n\tthis.titleHolderElement = false;\n\tthis.titleElement = false;\n\tthis.groupElement = this.createGroupElement(); //column group holder element\n\tthis.isGroup = false;\n\tthis.tooltip = false; //hold column tooltip\n\tthis.hozAlign = \"\"; //horizontal text alignment\n\tthis.vertAlign = \"\"; //vert text alignment\n\n\t//multi dimensional filed handling\n\tthis.field = \"\";\n\tthis.fieldStructure = \"\";\n\tthis.getFieldValue = \"\";\n\tthis.setFieldValue = \"\";\n\n\tthis.titleFormatterRendered = false;\n\n\tthis.setField(this.definition.field);\n\n\tif (this.table.options.invalidOptionWarnings) {\n\t\tthis.checkDefinition();\n\t}\n\n\tthis.modules = {}; //hold module variables;\n\n\tthis.cellEvents = {\n\t\tcellClick: false,\n\t\tcellDblClick: false,\n\t\tcellContext: false,\n\t\tcellTap: false,\n\t\tcellDblTap: false,\n\t\tcellTapHold: false,\n\t\tcellMouseEnter: false,\n\t\tcellMouseLeave: false,\n\t\tcellMouseOver: false,\n\t\tcellMouseOut: false,\n\t\tcellMouseMove: false\n\t};\n\n\tthis.width = null; //column width\n\tthis.widthStyled = \"\"; //column width prestyled to improve render efficiency\n\tthis.maxWidth = null; //column maximum width\n\tthis.maxWidthStyled = \"\"; //column maximum prestyled to improve render efficiency\n\tthis.minWidth = null; //column minimum width\n\tthis.minWidthStyled = \"\"; //column minimum prestyled to improve render efficiency\n\tthis.widthFixed = false; //user has specified a width for this column\n\n\tthis.visible = true; //default visible state\n\n\tthis.component = null;\n\n\tthis._mapDepricatedFunctionality();\n\n\t//initialize column\n\tif (def.columns) {\n\n\t\tthis.isGroup = true;\n\n\t\tdef.columns.forEach(function (def, i) {\n\t\t\tvar newCol = new Column(def, self);\n\t\t\tself.attachColumn(newCol);\n\t\t});\n\n\t\tself.checkColumnVisibility();\n\t} else {\n\t\tparent.registerColumnField(this);\n\t}\n\n\tif (def.rowHandle && this.table.options.movableRows !== false && this.table.modExists(\"moveRow\")) {\n\t\tthis.table.modules.moveRow.setHandle(true);\n\t}\n\n\tthis._buildHeader();\n\n\tthis.bindModuleColumns();\n};\n\nColumn.prototype.createElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-col\");\n\tel.setAttribute(\"role\", \"columnheader\");\n\tel.setAttribute(\"aria-sort\", \"none\");\n\n\treturn el;\n};\n\nColumn.prototype.createGroupElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-col-group-cols\");\n\n\treturn el;\n};\n\nColumn.prototype.checkDefinition = function () {\n\tvar _this5 = this;\n\n\tObject.keys(this.definition).forEach(function (key) {\n\t\tif (_this5.defaultOptionList.indexOf(key) === -1) {\n\t\t\tconsole.warn(\"Invalid column definition option in '\" + (_this5.field || _this5.definition.title) + \"' column:\", key);\n\t\t}\n\t});\n};\n\nColumn.prototype.setField = function (field) {\n\tthis.field = field;\n\tthis.fieldStructure = field ? this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field] : [];\n\tthis.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;\n\tthis.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;\n};\n\n//register column position with column manager\nColumn.prototype.registerColumnPosition = function (column) {\n\tthis.parent.registerColumnPosition(column);\n};\n\n//register column position with column manager\nColumn.prototype.registerColumnField = function (column) {\n\tthis.parent.registerColumnField(column);\n};\n\n//trigger position registration\nColumn.prototype.reRegisterPosition = function () {\n\tif (this.isGroup) {\n\t\tthis.columns.forEach(function (column) {\n\t\t\tcolumn.reRegisterPosition();\n\t\t});\n\t} else {\n\t\tthis.registerColumnPosition(this);\n\t}\n};\n\nColumn.prototype._mapDepricatedFunctionality = function () {\n\tif (typeof this.definition.hideInHtml !== \"undefined\") {\n\t\tthis.definition.htmlOutput = !this.definition.hideInHtml;\n\t\tconsole.warn(\"hideInHtml column definition property is deprecated, you should now use htmlOutput\");\n\t}\n\n\tif (typeof this.definition.align !== \"undefined\") {\n\t\tthis.definition.hozAlign = this.definition.align;\n\t\tconsole.warn(\"align column definition property is deprecated, you should now use hozAlign\");\n\t}\n\n\tif (typeof this.definition.downloadTitle !== \"undefined\") {\n\t\tthis.definition.titleDownload = this.definition.downloadTitle;\n\t\tconsole.warn(\"downloadTitle definition property is deprecated, you should now use titleDownload\");\n\t}\n};\n\nColumn.prototype.setTooltip = function () {\n\tvar self = this,\n\t def = self.definition;\n\n\t//set header tooltips\n\tvar tooltip = def.headerTooltip || def.tooltip === false ? def.headerTooltip : self.table.options.tooltipsHeader;\n\n\tif (tooltip) {\n\t\tif (tooltip === true) {\n\t\t\tif (def.field) {\n\t\t\t\tself.table.modules.localize.bind(\"columns|\" + def.field, function (value) {\n\t\t\t\t\tself.element.setAttribute(\"title\", value || def.title);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tself.element.setAttribute(\"title\", def.title);\n\t\t\t}\n\t\t} else {\n\t\t\tif (typeof tooltip == \"function\") {\n\t\t\t\ttooltip = tooltip(self.getComponent());\n\n\t\t\t\tif (tooltip === false) {\n\t\t\t\t\ttooltip = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tself.element.setAttribute(\"title\", tooltip);\n\t\t}\n\t} else {\n\t\tself.element.setAttribute(\"title\", \"\");\n\t}\n};\n\n//build header element\nColumn.prototype._buildHeader = function () {\n\tvar self = this,\n\t def = self.definition;\n\n\twhile (self.element.firstChild) {\n\t\tself.element.removeChild(self.element.firstChild);\n\t}if (def.headerVertical) {\n\t\tself.element.classList.add(\"tabulator-col-vertical\");\n\n\t\tif (def.headerVertical === \"flip\") {\n\t\t\tself.element.classList.add(\"tabulator-col-vertical-flip\");\n\t\t}\n\t}\n\n\tself.contentElement = self._bindEvents();\n\n\tself.contentElement = self._buildColumnHeaderContent();\n\n\tself.element.appendChild(self.contentElement);\n\n\tif (self.isGroup) {\n\t\tself._buildGroupHeader();\n\t} else {\n\t\tself._buildColumnHeader();\n\t}\n\n\tself.setTooltip();\n\n\t//set resizable handles\n\tif (self.table.options.resizableColumns && self.table.modExists(\"resizeColumns\")) {\n\t\tself.table.modules.resizeColumns.initializeColumn(\"header\", self, self.element);\n\t}\n\n\t//set resizable handles\n\tif (def.headerFilter && self.table.modExists(\"filter\") && self.table.modExists(\"edit\")) {\n\t\tif (typeof def.headerFilterPlaceholder !== \"undefined\" && def.field) {\n\t\t\tself.table.modules.localize.setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder);\n\t\t}\n\n\t\tself.table.modules.filter.initializeColumn(self);\n\t}\n\n\t//set resizable handles\n\tif (self.table.modExists(\"frozenColumns\")) {\n\t\tself.table.modules.frozenColumns.initializeColumn(self);\n\t}\n\n\t//set movable column\n\tif (self.table.options.movableColumns && !self.isGroup && self.table.modExists(\"moveColumn\")) {\n\t\tself.table.modules.moveColumn.initializeColumn(self);\n\t}\n\n\t//set calcs column\n\tif ((def.topCalc || def.bottomCalc) && self.table.modExists(\"columnCalcs\")) {\n\t\tself.table.modules.columnCalcs.initializeColumn(self);\n\t}\n\n\t//handle persistence\n\tif (self.table.modExists(\"persistence\") && self.table.modules.persistence.config.columns) {\n\t\tself.table.modules.persistence.initializeColumn(self);\n\t}\n\n\t//update header tooltip on mouse enter\n\tself.element.addEventListener(\"mouseenter\", function (e) {\n\t\tself.setTooltip();\n\t});\n};\n\nColumn.prototype._bindEvents = function () {\n\n\tvar self = this,\n\t def = self.definition,\n\t dblTap,\n\t tapHold,\n\t tap;\n\n\t//setup header click event bindings\n\tif (typeof def.headerClick == \"function\") {\n\t\tself.element.addEventListener(\"click\", function (e) {\n\t\t\tdef.headerClick(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (typeof def.headerDblClick == \"function\") {\n\t\tself.element.addEventListener(\"dblclick\", function (e) {\n\t\t\tdef.headerDblClick(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (typeof def.headerContext == \"function\") {\n\t\tself.element.addEventListener(\"contextmenu\", function (e) {\n\t\t\tdef.headerContext(e, self.getComponent());\n\t\t});\n\t}\n\n\t//setup header tap event bindings\n\tif (typeof def.headerTap == \"function\") {\n\t\ttap = false;\n\n\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\t\t\ttap = true;\n\t\t}, { passive: true });\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\t\t\tif (tap) {\n\t\t\t\tdef.headerTap(e, self.getComponent());\n\t\t\t}\n\n\t\t\ttap = false;\n\t\t});\n\t}\n\n\tif (typeof def.headerDblTap == \"function\") {\n\t\tdblTap = null;\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\n\t\t\tif (dblTap) {\n\t\t\t\tclearTimeout(dblTap);\n\t\t\t\tdblTap = null;\n\n\t\t\t\tdef.headerDblTap(e, self.getComponent());\n\t\t\t} else {\n\n\t\t\t\tdblTap = setTimeout(function () {\n\t\t\t\t\tclearTimeout(dblTap);\n\t\t\t\t\tdblTap = null;\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (typeof def.headerTapHold == \"function\") {\n\t\ttapHold = null;\n\n\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\n\t\t\ttapHold = setTimeout(function () {\n\t\t\t\tclearTimeout(tapHold);\n\t\t\t\ttapHold = null;\n\t\t\t\ttap = false;\n\t\t\t\tdef.headerTapHold(e, self.getComponent());\n\t\t\t}, 1000);\n\t\t}, { passive: true });\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\t\t\ttapHold = null;\n\t\t});\n\t}\n\n\t//store column cell click event bindings\n\tif (typeof def.cellClick == \"function\") {\n\t\tself.cellEvents.cellClick = def.cellClick;\n\t}\n\n\tif (typeof def.cellDblClick == \"function\") {\n\t\tself.cellEvents.cellDblClick = def.cellDblClick;\n\t}\n\n\tif (typeof def.cellContext == \"function\") {\n\t\tself.cellEvents.cellContext = def.cellContext;\n\t}\n\n\t//store column mouse event bindings\n\tif (typeof def.cellMouseEnter == \"function\") {\n\t\tself.cellEvents.cellMouseEnter = def.cellMouseEnter;\n\t}\n\n\tif (typeof def.cellMouseLeave == \"function\") {\n\t\tself.cellEvents.cellMouseLeave = def.cellMouseLeave;\n\t}\n\n\tif (typeof def.cellMouseOver == \"function\") {\n\t\tself.cellEvents.cellMouseOver = def.cellMouseOver;\n\t}\n\n\tif (typeof def.cellMouseOut == \"function\") {\n\t\tself.cellEvents.cellMouseOut = def.cellMouseOut;\n\t}\n\n\tif (typeof def.cellMouseMove == \"function\") {\n\t\tself.cellEvents.cellMouseMove = def.cellMouseMove;\n\t}\n\n\t//setup column cell tap event bindings\n\tif (typeof def.cellTap == \"function\") {\n\t\tself.cellEvents.cellTap = def.cellTap;\n\t}\n\n\tif (typeof def.cellDblTap == \"function\") {\n\t\tself.cellEvents.cellDblTap = def.cellDblTap;\n\t}\n\n\tif (typeof def.cellTapHold == \"function\") {\n\t\tself.cellEvents.cellTapHold = def.cellTapHold;\n\t}\n\n\t//setup column cell edit callbacks\n\tif (typeof def.cellEdited == \"function\") {\n\t\tself.cellEvents.cellEdited = def.cellEdited;\n\t}\n\n\tif (typeof def.cellEditing == \"function\") {\n\t\tself.cellEvents.cellEditing = def.cellEditing;\n\t}\n\n\tif (typeof def.cellEditCancelled == \"function\") {\n\t\tself.cellEvents.cellEditCancelled = def.cellEditCancelled;\n\t}\n};\n\n//build header element for header\nColumn.prototype._buildColumnHeader = function () {\n\tvar _this6 = this;\n\n\tvar def = this.definition,\n\t table = this.table,\n\t sortable;\n\n\t//set column sorter\n\tif (table.modExists(\"sort\")) {\n\t\ttable.modules.sort.initializeColumn(this, this.titleHolderElement);\n\t}\n\n\t//set column header context menu\n\tif ((def.headerContextMenu || def.headerClickMenu || def.headerMenu) && table.modExists(\"menu\")) {\n\t\ttable.modules.menu.initializeColumnHeader(this);\n\t}\n\n\t//set column formatter\n\tif (table.modExists(\"format\")) {\n\t\ttable.modules.format.initializeColumn(this);\n\t}\n\n\t//set column editor\n\tif (typeof def.editor != \"undefined\" && table.modExists(\"edit\")) {\n\t\ttable.modules.edit.initializeColumn(this);\n\t}\n\n\t//set colum validator\n\tif (typeof def.validator != \"undefined\" && table.modExists(\"validate\")) {\n\t\ttable.modules.validate.initializeColumn(this);\n\t}\n\n\t//set column mutator\n\tif (table.modExists(\"mutator\")) {\n\t\ttable.modules.mutator.initializeColumn(this);\n\t}\n\n\t//set column accessor\n\tif (table.modExists(\"accessor\")) {\n\t\ttable.modules.accessor.initializeColumn(this);\n\t}\n\n\t//set respoviveLayout\n\tif (_typeof(table.options.responsiveLayout) && table.modExists(\"responsiveLayout\")) {\n\t\ttable.modules.responsiveLayout.initializeColumn(this);\n\t}\n\n\t//set column visibility\n\tif (typeof def.visible != \"undefined\") {\n\t\tif (def.visible) {\n\t\t\tthis.show(true);\n\t\t} else {\n\t\t\tthis.hide(true);\n\t\t}\n\t}\n\n\t//asign additional css classes to column header\n\tif (def.cssClass) {\n\t\tvar classeNames = def.cssClass.split(\" \");\n\t\tclasseNames.forEach(function (className) {\n\t\t\t_this6.element.classList.add(className);\n\t\t});\n\t}\n\n\tif (def.field) {\n\t\tthis.element.setAttribute(\"tabulator-field\", def.field);\n\t}\n\n\t//set min width if present\n\tthis.setMinWidth(typeof def.minWidth == \"undefined\" ? this.table.options.columnMinWidth : parseInt(def.minWidth));\n\n\tif (def.maxWidth || this.table.options.columnMaxWidth) {\n\t\tif (def.maxWidth !== false) {\n\t\t\tthis.setMaxWidth(typeof def.maxWidth == \"undefined\" ? this.table.options.columnMaxWidth : parseInt(def.maxWidth));\n\t\t}\n\t}\n\n\tthis.reinitializeWidth();\n\n\t//set tooltip if present\n\tthis.tooltip = this.definition.tooltip || this.definition.tooltip === false ? this.definition.tooltip : this.table.options.tooltips;\n\n\t//set orizontal text alignment\n\tthis.hozAlign = typeof this.definition.hozAlign == \"undefined\" ? this.table.options.cellHozAlign : this.definition.hozAlign;\n\tthis.vertAlign = typeof this.definition.vertAlign == \"undefined\" ? this.table.options.cellVertAlign : this.definition.vertAlign;\n\n\tthis.titleElement.style.textAlign = this.definition.headerHozAlign || this.table.options.headerHozAlign;\n};\n\nColumn.prototype._buildColumnHeaderContent = function () {\n\tvar def = this.definition,\n\t table = this.table;\n\n\tvar contentElement = document.createElement(\"div\");\n\tcontentElement.classList.add(\"tabulator-col-content\");\n\n\tthis.titleHolderElement = document.createElement(\"div\");\n\tthis.titleHolderElement.classList.add(\"tabulator-col-title-holder\");\n\n\tcontentElement.appendChild(this.titleHolderElement);\n\n\tthis.titleElement = this._buildColumnHeaderTitle();\n\n\tthis.titleHolderElement.appendChild(this.titleElement);\n\n\treturn contentElement;\n};\n\n//build title element of column\nColumn.prototype._buildColumnHeaderTitle = function () {\n\tvar self = this,\n\t def = self.definition,\n\t table = self.table,\n\t title;\n\n\tvar titleHolderElement = document.createElement(\"div\");\n\ttitleHolderElement.classList.add(\"tabulator-col-title\");\n\n\tif (def.editableTitle) {\n\t\tvar titleElement = document.createElement(\"input\");\n\t\ttitleElement.classList.add(\"tabulator-title-editor\");\n\n\t\ttitleElement.addEventListener(\"click\", function (e) {\n\t\t\te.stopPropagation();\n\t\t\ttitleElement.focus();\n\t\t});\n\n\t\ttitleElement.addEventListener(\"change\", function () {\n\t\t\tdef.title = titleElement.value;\n\t\t\ttable.options.columnTitleChanged.call(self.table, self.getComponent());\n\t\t});\n\n\t\ttitleHolderElement.appendChild(titleElement);\n\n\t\tif (def.field) {\n\t\t\ttable.modules.localize.bind(\"columns|\" + def.field, function (text) {\n\t\t\t\ttitleElement.value = text || def.title || \" \";\n\t\t\t});\n\t\t} else {\n\t\t\ttitleElement.value = def.title || \" \";\n\t\t}\n\t} else {\n\t\tif (def.field) {\n\t\t\ttable.modules.localize.bind(\"columns|\" + def.field, function (text) {\n\t\t\t\tself._formatColumnHeaderTitle(titleHolderElement, text || def.title || \" \");\n\t\t\t});\n\t\t} else {\n\t\t\tself._formatColumnHeaderTitle(titleHolderElement, def.title || \" \");\n\t\t}\n\t}\n\n\treturn titleHolderElement;\n};\n\nColumn.prototype._formatColumnHeaderTitle = function (el, title) {\n\tvar _this7 = this;\n\n\tvar formatter, contents, params, mockCell, onRendered;\n\n\tif (this.definition.titleFormatter && this.table.modExists(\"format\")) {\n\n\t\tformatter = this.table.modules.format.getFormatter(this.definition.titleFormatter);\n\n\t\tonRendered = function onRendered(callback) {\n\t\t\t_this7.titleFormatterRendered = callback;\n\t\t};\n\n\t\tmockCell = {\n\t\t\tgetValue: function getValue() {\n\t\t\t\treturn title;\n\t\t\t},\n\t\t\tgetElement: function getElement() {\n\t\t\t\treturn el;\n\t\t\t}\n\t\t};\n\n\t\tparams = this.definition.titleFormatterParams || {};\n\n\t\tparams = typeof params === \"function\" ? params() : params;\n\n\t\tcontents = formatter.call(this.table.modules.format, mockCell, params, onRendered);\n\n\t\tswitch (typeof contents === 'undefined' ? 'undefined' : _typeof(contents)) {\n\t\t\tcase \"object\":\n\t\t\t\tif (contents instanceof Node) {\n\t\t\t\t\tel.appendChild(contents);\n\t\t\t\t} else {\n\t\t\t\t\tel.innerHTML = \"\";\n\t\t\t\t\tconsole.warn(\"Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", contents);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"undefined\":\n\t\t\tcase \"null\":\n\t\t\t\tel.innerHTML = \"\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tel.innerHTML = contents;\n\t\t}\n\t} else {\n\t\tel.innerHTML = title;\n\t}\n};\n\n//build header element for column group\nColumn.prototype._buildGroupHeader = function () {\n\tvar _this8 = this;\n\n\tthis.element.classList.add(\"tabulator-col-group\");\n\tthis.element.setAttribute(\"role\", \"columngroup\");\n\tthis.element.setAttribute(\"aria-title\", this.definition.title);\n\n\t//asign additional css classes to column header\n\tif (this.definition.cssClass) {\n\t\tvar classeNames = this.definition.cssClass.split(\" \");\n\t\tclasseNames.forEach(function (className) {\n\t\t\t_this8.element.classList.add(className);\n\t\t});\n\t}\n\n\t//set column header context menu\n\tif ((this.definition.headerContextMenu || this.definition.headerMenu) && this.table.modExists(\"menu\")) {\n\t\tthis.table.modules.menu.initializeColumnHeader(this);\n\t}\n\n\tthis.titleElement.style.textAlign = this.definition.headerHozAlign || this.table.options.headerHozAlign;\n\n\tthis.element.appendChild(this.groupElement);\n};\n\n//flat field lookup\nColumn.prototype._getFlatData = function (data) {\n\treturn data[this.field];\n};\n\n//nested field lookup\nColumn.prototype._getNestedData = function (data) {\n\tvar dataObj = data,\n\t structure = this.fieldStructure,\n\t length = structure.length,\n\t output;\n\n\tfor (var _i = 0; _i < length; _i++) {\n\n\t\tdataObj = dataObj[structure[_i]];\n\n\t\toutput = dataObj;\n\n\t\tif (!dataObj) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn output;\n};\n\n//flat field set\nColumn.prototype._setFlatData = function (data, value) {\n\tif (this.field) {\n\t\tdata[this.field] = value;\n\t}\n};\n\n//nested field set\nColumn.prototype._setNestedData = function (data, value) {\n\tvar dataObj = data,\n\t structure = this.fieldStructure,\n\t length = structure.length;\n\n\tfor (var _i2 = 0; _i2 < length; _i2++) {\n\n\t\tif (_i2 == length - 1) {\n\t\t\tdataObj[structure[_i2]] = value;\n\t\t} else {\n\t\t\tif (!dataObj[structure[_i2]]) {\n\t\t\t\tif (typeof value !== \"undefined\") {\n\t\t\t\t\tdataObj[structure[_i2]] = {};\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdataObj = dataObj[structure[_i2]];\n\t\t}\n\t}\n};\n\n//attach column to this group\nColumn.prototype.attachColumn = function (column) {\n\tvar self = this;\n\n\tif (self.groupElement) {\n\t\tself.columns.push(column);\n\t\tself.groupElement.appendChild(column.getElement());\n\t} else {\n\t\tconsole.warn(\"Column Warning - Column being attached to another column instead of column group\");\n\t}\n};\n\n//vertically align header in column\nColumn.prototype.verticalAlign = function (alignment, height) {\n\n\t//calculate height of column header and group holder element\n\tvar parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : height || this.parent.getHeadersElement().clientHeight;\n\t// var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;\n\n\tthis.element.style.height = parentHeight + \"px\";\n\n\tif (this.isGroup) {\n\t\tthis.groupElement.style.minHeight = parentHeight - this.contentElement.offsetHeight + \"px\";\n\t}\n\n\t//vertically align cell contents\n\tif (!this.isGroup && alignment !== \"top\") {\n\t\tif (alignment === \"bottom\") {\n\t\t\tthis.element.style.paddingTop = this.element.clientHeight - this.contentElement.offsetHeight + \"px\";\n\t\t} else {\n\t\t\tthis.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) / 2 + \"px\";\n\t\t}\n\t}\n\n\tthis.columns.forEach(function (column) {\n\t\tcolumn.verticalAlign(alignment);\n\t});\n};\n\n//clear vertical alignmenet\nColumn.prototype.clearVerticalAlign = function () {\n\tthis.element.style.paddingTop = \"\";\n\tthis.element.style.height = \"\";\n\tthis.element.style.minHeight = \"\";\n\tthis.groupElement.style.minHeight = \"\";\n\n\tthis.columns.forEach(function (column) {\n\t\tcolumn.clearVerticalAlign();\n\t});\n};\n\nColumn.prototype.bindModuleColumns = function () {\n\t//check if rownum formatter is being used on a column\n\tif (this.definition.formatter == \"rownum\") {\n\t\tthis.table.rowManager.rowNumColumn = this;\n\t}\n};\n\n//// Retreive Column Information ////\n\n//return column header element\nColumn.prototype.getElement = function () {\n\treturn this.element;\n};\n\n//return colunm group element\nColumn.prototype.getGroupElement = function () {\n\treturn this.groupElement;\n};\n\n//return field name\nColumn.prototype.getField = function () {\n\treturn this.field;\n};\n\n//return the first column in a group\nColumn.prototype.getFirstColumn = function () {\n\tif (!this.isGroup) {\n\t\treturn this;\n\t} else {\n\t\tif (this.columns.length) {\n\t\t\treturn this.columns[0].getFirstColumn();\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\n//return the last column in a group\nColumn.prototype.getLastColumn = function () {\n\tif (!this.isGroup) {\n\t\treturn this;\n\t} else {\n\t\tif (this.columns.length) {\n\t\t\treturn this.columns[this.columns.length - 1].getLastColumn();\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\n//return all columns in a group\nColumn.prototype.getColumns = function () {\n\treturn this.columns;\n};\n\n//return all columns in a group\nColumn.prototype.getCells = function () {\n\treturn this.cells;\n};\n\n//retreive the top column in a group of columns\nColumn.prototype.getTopColumn = function () {\n\tif (this.parent.isGroup) {\n\t\treturn this.parent.getTopColumn();\n\t} else {\n\t\treturn this;\n\t}\n};\n\n//return column definition object\nColumn.prototype.getDefinition = function (updateBranches) {\n\tvar colDefs = [];\n\n\tif (this.isGroup && updateBranches) {\n\t\tthis.columns.forEach(function (column) {\n\t\t\tcolDefs.push(column.getDefinition(true));\n\t\t});\n\n\t\tthis.definition.columns = colDefs;\n\t}\n\n\treturn this.definition;\n};\n\n//////////////////// Actions ////////////////////\n\nColumn.prototype.checkColumnVisibility = function () {\n\tvar visible = false;\n\n\tthis.columns.forEach(function (column) {\n\t\tif (column.visible) {\n\t\t\tvisible = true;\n\t\t}\n\t});\n\n\tif (visible) {\n\t\tthis.show();\n\t\tthis.parent.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);\n\t} else {\n\t\tthis.hide();\n\t}\n};\n\n//show column\nColumn.prototype.show = function (silent, responsiveToggle) {\n\tif (!this.visible) {\n\t\tthis.visible = true;\n\n\t\tthis.element.style.display = \"\";\n\n\t\tif (this.parent.isGroup) {\n\t\t\tthis.parent.checkColumnVisibility();\n\t\t}\n\n\t\tthis.cells.forEach(function (cell) {\n\t\t\tcell.show();\n\t\t});\n\n\t\tif (!this.isGroup && this.width === null) {\n\t\t\tthis.reinitializeWidth();\n\t\t}\n\n\t\tthis.table.columnManager._verticalAlignHeaders();\n\n\t\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns) {\n\t\t\tthis.table.modules.persistence.save(\"columns\");\n\t\t}\n\n\t\tif (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\tthis.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);\n\t\t}\n\n\t\tif (!silent) {\n\t\t\tthis.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), true);\n\t\t}\n\n\t\tif (this.parent.isGroup) {\n\t\t\tthis.parent.matchChildWidths();\n\t\t}\n\n\t\tif (!this.silent && this.table.options.virtualDomHoz) {\n\t\t\tthis.table.vdomHoz.reinitialize();\n\t\t}\n\t}\n};\n\n//hide column\nColumn.prototype.hide = function (silent, responsiveToggle) {\n\tif (this.visible) {\n\t\tthis.visible = false;\n\n\t\tthis.element.style.display = \"none\";\n\n\t\tthis.table.columnManager._verticalAlignHeaders();\n\n\t\tif (this.parent.isGroup) {\n\t\t\tthis.parent.checkColumnVisibility();\n\t\t}\n\n\t\tthis.cells.forEach(function (cell) {\n\t\t\tcell.hide();\n\t\t});\n\n\t\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns) {\n\t\t\tthis.table.modules.persistence.save(\"columns\");\n\t\t}\n\n\t\tif (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\tthis.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);\n\t\t}\n\n\t\tif (!silent) {\n\t\t\tthis.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);\n\t\t}\n\n\t\tif (this.parent.isGroup) {\n\t\t\tthis.parent.matchChildWidths();\n\t\t}\n\n\t\tif (!this.silent && this.table.options.virtualDomHoz) {\n\t\t\tthis.table.vdomHoz.reinitialize();\n\t\t}\n\t}\n};\n\nColumn.prototype.matchChildWidths = function () {\n\tvar childWidth = 0;\n\n\tif (this.contentElement && this.columns.length) {\n\t\tthis.columns.forEach(function (column) {\n\t\t\tif (column.visible) {\n\t\t\t\tchildWidth += column.getWidth();\n\t\t\t}\n\t\t});\n\n\t\tthis.contentElement.style.maxWidth = childWidth - 1 + \"px\";\n\n\t\tif (this.parent.isGroup) {\n\t\t\tthis.parent.matchChildWidths();\n\t\t}\n\t}\n};\n\nColumn.prototype.removeChild = function (child) {\n\tvar index = this.columns.indexOf(child);\n\n\tif (index > -1) {\n\t\tthis.columns.splice(index, 1);\n\t}\n\n\tif (!this.columns.length) {\n\t\tthis.delete();\n\t}\n};\n\nColumn.prototype.setWidth = function (width) {\n\tthis.widthFixed = true;\n\tthis.setWidthActual(width);\n};\n\nColumn.prototype.setWidthActual = function (width) {\n\tif (isNaN(width)) {\n\t\twidth = Math.floor(this.table.element.clientWidth / 100 * parseInt(width));\n\t}\n\n\twidth = Math.max(this.minWidth, width);\n\n\tif (this.maxWidth) {\n\t\twidth = Math.min(this.maxWidth, width);\n\t}\n\n\tthis.width = width;\n\tthis.widthStyled = width ? width + \"px\" : \"\";\n\n\tthis.element.style.width = this.widthStyled;\n\n\tif (!this.isGroup) {\n\t\tthis.cells.forEach(function (cell) {\n\t\t\tcell.setWidth();\n\t\t});\n\t}\n\n\tif (this.parent.isGroup) {\n\t\tthis.parent.matchChildWidths();\n\t}\n\n\t//set resizable handles\n\tif (this.table.modExists(\"frozenColumns\")) {\n\t\tthis.table.modules.frozenColumns.layout();\n\t}\n};\n\nColumn.prototype.checkCellHeights = function () {\n\tvar rows = [];\n\n\tthis.cells.forEach(function (cell) {\n\t\tif (cell.row.heightInitialized) {\n\t\t\tif (cell.row.getElement().offsetParent !== null) {\n\t\t\t\trows.push(cell.row);\n\t\t\t\tcell.row.clearCellHeight();\n\t\t\t} else {\n\t\t\t\tcell.row.heightInitialized = false;\n\t\t\t}\n\t\t}\n\t});\n\n\trows.forEach(function (row) {\n\t\trow.calcHeight();\n\t});\n\n\trows.forEach(function (row) {\n\t\trow.setCellHeight();\n\t});\n};\n\nColumn.prototype.getWidth = function () {\n\tvar width = 0;\n\n\tif (this.isGroup) {\n\t\tthis.columns.forEach(function (column) {\n\t\t\tif (column.visible) {\n\t\t\t\twidth += column.getWidth();\n\t\t\t}\n\t\t});\n\t} else {\n\t\twidth = this.width;\n\t}\n\n\treturn width;\n};\n\nColumn.prototype.getHeight = function () {\n\treturn this.element.offsetHeight;\n};\n\nColumn.prototype.setMinWidth = function (minWidth) {\n\tthis.minWidth = minWidth;\n\tthis.minWidthStyled = minWidth ? minWidth + \"px\" : \"\";\n\n\tthis.element.style.minWidth = this.minWidthStyled;\n\n\tthis.cells.forEach(function (cell) {\n\t\tcell.setMinWidth();\n\t});\n};\n\nColumn.prototype.setMaxWidth = function (maxWidth) {\n\tthis.maxWidth = maxWidth;\n\tthis.maxWidthStyled = maxWidth ? maxWidth + \"px\" : \"\";\n\n\tthis.element.style.maxWidth = this.maxWidthStyled;\n\n\tthis.cells.forEach(function (cell) {\n\t\tcell.setMaxWidth();\n\t});\n};\n\nColumn.prototype.delete = function () {\n\tvar _this9 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar index;\n\n\t\tif (_this9.isGroup) {\n\t\t\t_this9.columns.forEach(function (column) {\n\t\t\t\tcolumn.delete();\n\t\t\t});\n\t\t}\n\n\t\t//cancel edit if column is currently being edited\n\t\tif (_this9.table.modExists(\"edit\")) {\n\t\t\tif (_this9.table.modules.edit.currentCell.column === _this9) {\n\t\t\t\t_this9.table.modules.edit.cancelEdit();\n\t\t\t}\n\t\t}\n\n\t\tvar cellCount = _this9.cells.length;\n\n\t\tfor (var _i3 = 0; _i3 < cellCount; _i3++) {\n\t\t\t_this9.cells[0].delete();\n\t\t}\n\n\t\tif (_this9.element.parentNode) {\n\t\t\t_this9.element.parentNode.removeChild(_this9.element);\n\t\t}\n\n\t\t_this9.element = false;\n\t\t_this9.contentElement = false;\n\t\t_this9.titleElement = false;\n\t\t_this9.groupElement = false;\n\n\t\tif (_this9.parent.isGroup) {\n\t\t\t_this9.parent.removeChild(_this9);\n\t\t}\n\n\t\t_this9.table.columnManager.deregisterColumn(_this9);\n\n\t\tif (_this9.table.options.virtualDomHoz) {\n\t\t\t_this9.table.vdomHoz.reinitialize(true);\n\t\t}\n\n\t\tresolve();\n\t});\n};\n\nColumn.prototype.columnRendered = function () {\n\tif (this.titleFormatterRendered) {\n\t\tthis.titleFormatterRendered();\n\t}\n};\n\nColumn.prototype.validate = function () {\n\tvar invalid = [];\n\n\tthis.cells.forEach(function (cell) {\n\t\tif (!cell.validate()) {\n\t\t\tinvalid.push(cell.getComponent());\n\t\t}\n\t});\n\n\treturn invalid.length ? invalid : true;\n};\n\n//////////////// Cell Management /////////////////\n\n//generate cell for this column\nColumn.prototype.generateCell = function (row) {\n\tvar self = this;\n\n\tvar cell = new Cell(self, row);\n\n\tthis.cells.push(cell);\n\n\treturn cell;\n};\n\nColumn.prototype.nextColumn = function () {\n\tvar index = this.table.columnManager.findColumnIndex(this);\n\treturn index > -1 ? this._nextVisibleColumn(index + 1) : false;\n};\n\nColumn.prototype._nextVisibleColumn = function (index) {\n\tvar column = this.table.columnManager.getColumnByIndex(index);\n\treturn !column || column.visible ? column : this._nextVisibleColumn(index + 1);\n};\n\nColumn.prototype.prevColumn = function () {\n\tvar index = this.table.columnManager.findColumnIndex(this);\n\treturn index > -1 ? this._prevVisibleColumn(index - 1) : false;\n};\n\nColumn.prototype._prevVisibleColumn = function (index) {\n\tvar column = this.table.columnManager.getColumnByIndex(index);\n\treturn !column || column.visible ? column : this._prevVisibleColumn(index - 1);\n};\n\nColumn.prototype.reinitializeWidth = function (force) {\n\tthis.widthFixed = false;\n\n\t//set width if present\n\tif (typeof this.definition.width !== \"undefined\" && !force) {\n\t\tthis.setWidth(this.definition.width);\n\t}\n\n\t//hide header filters to prevent them altering column width\n\tif (this.table.modExists(\"filter\")) {\n\t\tthis.table.modules.filter.hideHeaderFilterElements();\n\t}\n\n\tthis.fitToData();\n\n\t//show header filters again after layout is complete\n\tif (this.table.modExists(\"filter\")) {\n\t\tthis.table.modules.filter.showHeaderFilterElements();\n\t}\n};\n\n//set column width to maximum cell width\nColumn.prototype.fitToData = function () {\n\tvar self = this;\n\n\tif (!this.widthFixed) {\n\t\tthis.element.style.width = \"\";\n\n\t\tself.cells.forEach(function (cell) {\n\t\t\tcell.clearWidth();\n\t\t});\n\t}\n\n\tvar maxWidth = this.element.offsetWidth;\n\n\tif (!self.width || !this.widthFixed) {\n\t\tself.cells.forEach(function (cell) {\n\t\t\tvar width = cell.getWidth();\n\n\t\t\tif (width > maxWidth) {\n\t\t\t\tmaxWidth = width;\n\t\t\t}\n\t\t});\n\n\t\tif (maxWidth) {\n\t\t\tself.setWidthActual(maxWidth + 1);\n\t\t}\n\t}\n};\n\nColumn.prototype.updateDefinition = function (updates) {\n\tvar _this10 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar definition;\n\n\t\tif (!_this10.isGroup) {\n\t\t\tif (!_this10.parent.isGroup) {\n\t\t\t\tdefinition = Object.assign({}, _this10.getDefinition());\n\t\t\t\tdefinition = Object.assign(definition, updates);\n\n\t\t\t\t_this10.table.columnManager.addColumn(definition, false, _this10).then(function (column) {\n\n\t\t\t\t\tif (definition.field == _this10.field) {\n\t\t\t\t\t\t_this10.field = false; //cleair field name to prevent deletion of duplicate column from arrays\n\t\t\t\t\t}\n\n\t\t\t\t\t_this10.delete().then(function () {\n\t\t\t\t\t\tresolve(column.getComponent());\n\t\t\t\t\t}).catch(function (err) {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}).catch(function (err) {\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\n\t\t\t\treject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\n\t\t\treject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\n\t\t}\n\t});\n};\n\nColumn.prototype.deleteCell = function (cell) {\n\tvar index = this.cells.indexOf(cell);\n\n\tif (index > -1) {\n\t\tthis.cells.splice(index, 1);\n\t}\n};\n\nColumn.prototype.defaultOptionList = [\"title\", \"field\", \"columns\", \"visible\", \"align\", \"hozAlign\", \"vertAlign\", \"width\", \"minWidth\", \"maxWidth\", \"widthGrow\", \"widthShrink\", \"resizable\", \"frozen\", \"responsive\", \"tooltip\", \"cssClass\", \"rowHandle\", \"hideInHtml\", \"print\", \"htmlOutput\", \"sorter\", \"sorterParams\", \"formatter\", \"formatterParams\", \"variableHeight\", \"editable\", \"editor\", \"editorParams\", \"validator\", \"mutator\", \"mutatorParams\", \"mutatorData\", \"mutatorDataParams\", \"mutatorEdit\", \"mutatorEditParams\", \"mutatorClipboard\", \"mutatorClipboardParams\", \"accessor\", \"accessorParams\", \"accessorData\", \"accessorDataParams\", \"accessorDownload\", \"accessorDownloadParams\", \"accessorClipboard\", \"accessorClipboardParams\", \"accessorPrint\", \"accessorPrintParams\", \"accessorHtmlOutput\", \"accessorHtmlOutputParams\", \"clipboard\", \"download\", \"downloadTitle\", \"topCalc\", \"topCalcParams\", \"topCalcFormatter\", \"topCalcFormatterParams\", \"bottomCalc\", \"bottomCalcParams\", \"bottomCalcFormatter\", \"bottomCalcFormatterParams\", \"cellClick\", \"cellDblClick\", \"cellContext\", \"cellTap\", \"cellDblTap\", \"cellTapHold\", \"cellMouseEnter\", \"cellMouseLeave\", \"cellMouseOver\", \"cellMouseOut\", \"cellMouseMove\", \"cellEditing\", \"cellEdited\", \"cellEditCancelled\", \"headerSort\", \"headerSortStartingDir\", \"headerSortTristate\", \"headerClick\", \"headerDblClick\", \"headerContext\", \"headerTap\", \"headerDblTap\", \"headerTapHold\", \"headerTooltip\", \"headerVertical\", \"headerHozAlign\", \"editableTitle\", \"titleFormatter\", \"titleFormatterParams\", \"headerFilter\", \"headerFilterPlaceholder\", \"headerFilterParams\", \"headerFilterEmptyCheck\", \"headerFilterFunc\", \"headerFilterFuncParams\", \"headerFilterLiveFilter\", \"print\", \"headerContextMenu\", \"headerMenu\", \"contextMenu\",\n// \"headerClickMenu\",\n\"clickMenu\", \"formatterPrint\", \"formatterPrintParams\", \"formatterClipboard\", \"formatterClipboardParams\", \"formatterHtmlOutput\", \"formatterHtmlOutputParams\", \"titlePrint\", \"titleClipboard\", \"titleHtmlOutput\", \"titleDownload\"];\n\n//////////////// Event Bindings /////////////////\n\n//////////////// Object Generation /////////////////\nColumn.prototype.getComponent = function () {\n\tif (!this.component) {\n\t\tthis.component = new ColumnComponent(this);\n\t}\n\n\treturn this.component;\n};\n\nvar RowManager = function RowManager(table) {\n\n\tthis.table = table;\n\tthis.element = this.createHolderElement(); //containing element\n\tthis.tableElement = this.createTableElement(); //table element\n\tthis.heightFixer = this.createTableElement(); //table element\n\tthis.columnManager = null; //hold column manager object\n\tthis.height = 0; //hold height of table element\n\n\tthis.firstRender = false; //handle first render\n\tthis.renderMode = \"virtual\"; //current rendering mode\n\tthis.fixedHeight = false; //current rendering mode\n\n\tthis.rows = []; //hold row data objects\n\tthis.activeRows = []; //rows currently available to on display in the table\n\tthis.activeRowsCount = 0; //count of active rows\n\n\tthis.displayRows = []; //rows currently on display in the table\n\tthis.displayRowsCount = 0; //count of display rows\n\n\tthis.scrollTop = 0;\n\tthis.scrollLeft = 0;\n\n\tthis.vDomRowHeight = 20; //approximation of row heights for padding\n\n\tthis.vDomTop = 0; //hold position for first rendered row in the virtual DOM\n\tthis.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM\n\n\tthis.vDomScrollPosTop = 0; //last scroll position of the vDom top;\n\tthis.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;\n\n\tthis.vDomTopPad = 0; //hold value of padding for top of virtual DOM\n\tthis.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM\n\n\tthis.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go\n\n\tthis.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling\n\n\tthis.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)\n\tthis.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin\n\n\tthis.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed\n\tthis.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed\n\n\tthis.rowNumColumn = false; //hold column component for row number column\n\n\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations becore continuing\n\tthis.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed\n\tthis.redrawBlockRederInPosition = false; //store latest redraw function calls for when redraw is needed\n};\n\n//////////////// Setup Functions /////////////////\n\nRowManager.prototype.createHolderElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-tableHolder\");\n\tel.setAttribute(\"tabindex\", 0);\n\n\treturn el;\n};\n\nRowManager.prototype.createTableElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-table\");\n\n\treturn el;\n};\n\n//return containing element\nRowManager.prototype.getElement = function () {\n\treturn this.element;\n};\n\n//return table element\nRowManager.prototype.getTableElement = function () {\n\treturn this.tableElement;\n};\n\n//return position of row in table\nRowManager.prototype.getRowPosition = function (row, active) {\n\tif (active) {\n\t\treturn this.activeRows.indexOf(row);\n\t} else {\n\t\treturn this.rows.indexOf(row);\n\t}\n};\n\n//link to column manager\nRowManager.prototype.setColumnManager = function (manager) {\n\tthis.columnManager = manager;\n};\n\nRowManager.prototype.initialize = function () {\n\tvar self = this;\n\n\tself.setRenderMode();\n\n\t//initialize manager\n\tself.element.appendChild(self.tableElement);\n\n\tself.firstRender = true;\n\n\t//scroll header along with table body\n\tself.element.addEventListener(\"scroll\", function () {\n\t\tvar left = self.element.scrollLeft;\n\n\t\t//handle horizontal scrolling\n\t\tif (self.scrollLeft != left) {\n\t\t\tself.columnManager.scrollHorizontal(left);\n\n\t\t\tif (self.table.options.groupBy) {\n\t\t\t\tself.table.modules.groupRows.scrollHeaders(left);\n\t\t\t}\n\n\t\t\tif (self.table.modExists(\"columnCalcs\")) {\n\t\t\t\tself.table.modules.columnCalcs.scrollHorizontal(left);\n\t\t\t}\n\n\t\t\tself.table.options.scrollHorizontal(left);\n\t\t}\n\n\t\tself.scrollLeft = left;\n\t});\n\n\t//handle virtual dom scrolling\n\tif (this.renderMode === \"virtual\") {\n\n\t\tself.element.addEventListener(\"scroll\", function () {\n\t\t\tvar top = self.element.scrollTop;\n\t\t\tvar dir = self.scrollTop > top;\n\n\t\t\t//handle verical scrolling\n\t\t\tif (self.scrollTop != top) {\n\t\t\t\tself.scrollTop = top;\n\t\t\t\tself.scrollVertical(dir);\n\n\t\t\t\tif (self.table.options.ajaxProgressiveLoad == \"scroll\") {\n\t\t\t\t\tself.table.modules.ajax.nextPage(self.element.scrollHeight - self.element.clientHeight - top);\n\t\t\t\t}\n\n\t\t\t\tself.table.options.scrollVertical(top);\n\t\t\t} else {\n\t\t\t\tself.scrollTop = top;\n\t\t\t}\n\t\t});\n\t}\n};\n\n////////////////// Row Manipulation //////////////////\n\nRowManager.prototype.findRow = function (subject) {\n\tvar self = this;\n\n\tif ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == \"object\") {\n\n\t\tif (subject instanceof Row) {\n\t\t\t//subject is row element\n\t\t\treturn subject;\n\t\t} else if (subject instanceof RowComponent) {\n\t\t\t//subject is public row component\n\t\t\treturn subject._getSelf() || false;\n\t\t} else if (typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement) {\n\t\t\t//subject is a HTML element of the row\n\t\t\tvar match = self.rows.find(function (row) {\n\t\t\t\treturn row.getElement() === subject;\n\t\t\t});\n\n\t\t\treturn match || false;\n\t\t}\n\t} else if (typeof subject == \"undefined\" || subject === null) {\n\t\treturn false;\n\t} else {\n\t\t//subject should be treated as the index of the row\n\t\tvar _match = self.rows.find(function (row) {\n\t\t\treturn row.data[self.table.options.index] == subject;\n\t\t});\n\n\t\treturn _match || false;\n\t}\n\n\t//catch all for any other type of input\n\n\treturn false;\n};\n\nRowManager.prototype.getRowFromDataObject = function (data) {\n\tvar match = this.rows.find(function (row) {\n\t\treturn row.data === data;\n\t});\n\n\treturn match || false;\n};\n\nRowManager.prototype.getRowFromPosition = function (position, active) {\n\tif (active) {\n\t\treturn this.activeRows[position];\n\t} else {\n\t\treturn this.rows[position];\n\t}\n};\n\nRowManager.prototype.scrollToRow = function (row, position, ifVisible) {\n\tvar _this11 = this;\n\n\tvar rowIndex = this.getDisplayRows().indexOf(row),\n\t rowEl = row.getElement(),\n\t rowTop,\n\t offset = 0;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (rowIndex > -1) {\n\n\t\t\tif (typeof position === \"undefined\") {\n\t\t\t\tposition = _this11.table.options.scrollToRowPosition;\n\t\t\t}\n\n\t\t\tif (typeof ifVisible === \"undefined\") {\n\t\t\t\tifVisible = _this11.table.options.scrollToRowIfVisible;\n\t\t\t}\n\n\t\t\tif (position === \"nearest\") {\n\t\t\t\tswitch (_this11.renderMode) {\n\t\t\t\t\tcase \"classic\":\n\t\t\t\t\t\trowTop = Tabulator.prototype.helpers.elOffset(rowEl).top;\n\t\t\t\t\t\tposition = Math.abs(_this11.element.scrollTop - rowTop) > Math.abs(_this11.element.scrollTop + _this11.element.clientHeight - rowTop) ? \"bottom\" : \"top\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"virtual\":\n\t\t\t\t\t\tposition = Math.abs(_this11.vDomTop - rowIndex) > Math.abs(_this11.vDomBottom - rowIndex) ? \"bottom\" : \"top\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//check row visibility\n\t\t\tif (!ifVisible) {\n\t\t\t\tif (Tabulator.prototype.helpers.elVisible(rowEl)) {\n\t\t\t\t\toffset = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this11.element).top;\n\n\t\t\t\t\tif (offset > 0 && offset < _this11.element.clientHeight - rowEl.offsetHeight) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//scroll to row\n\t\t\tswitch (_this11.renderMode) {\n\t\t\t\tcase \"classic\":\n\t\t\t\t\t_this11.element.scrollTop = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this11.element).top + _this11.element.scrollTop;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"virtual\":\n\t\t\t\t\t_this11._virtualRenderFill(rowIndex, true);\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t//align to correct position\n\t\t\tswitch (position) {\n\t\t\t\tcase \"middle\":\n\t\t\t\tcase \"center\":\n\n\t\t\t\t\tif (_this11.element.scrollHeight - _this11.element.scrollTop == _this11.element.clientHeight) {\n\t\t\t\t\t\t_this11.element.scrollTop = _this11.element.scrollTop + (rowEl.offsetTop - _this11.element.scrollTop) - (_this11.element.scrollHeight - rowEl.offsetTop) / 2;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_this11.element.scrollTop = _this11.element.scrollTop - _this11.element.clientHeight / 2;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"bottom\":\n\n\t\t\t\t\tif (_this11.element.scrollHeight - _this11.element.scrollTop == _this11.element.clientHeight) {\n\t\t\t\t\t\t_this11.element.scrollTop = _this11.element.scrollTop - (_this11.element.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_this11.element.scrollTop = _this11.element.scrollTop - _this11.element.clientHeight + rowEl.offsetHeight;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tresolve();\n\t\t} else {\n\t\t\tconsole.warn(\"Scroll Error - Row not visible\");\n\t\t\treject(\"Scroll Error - Row not visible\");\n\t\t}\n\t});\n};\n\n////////////////// Data Handling //////////////////\n\nRowManager.prototype.setData = function (data, renderInPosition, columnsChanged) {\n\tvar _this12 = this;\n\n\tvar self = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (renderInPosition && _this12.getDisplayRows().length) {\n\t\t\tif (self.table.options.pagination) {\n\t\t\t\tself._setDataActual(data, true);\n\t\t\t} else {\n\t\t\t\t_this12.reRenderInPosition(function () {\n\t\t\t\t\tself._setDataActual(data);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tif (_this12.table.options.autoColumns && columnsChanged) {\n\t\t\t\t_this12.table.columnManager.generateColumnsFromRowData(data);\n\t\t\t}\n\t\t\t_this12.resetScroll();\n\n\t\t\t_this12._setDataActual(data);\n\t\t}\n\n\t\tresolve();\n\t});\n};\n\nRowManager.prototype._setDataActual = function (data, renderInPosition) {\n\tvar self = this;\n\n\tself.table.options.dataLoading.call(this.table, data);\n\n\tthis._wipeElements();\n\n\tif (this.table.options.history && this.table.modExists(\"history\")) {\n\t\tthis.table.modules.history.clear();\n\t}\n\n\tif (Array.isArray(data)) {\n\n\t\tif (this.table.modExists(\"selectRow\")) {\n\t\t\tthis.table.modules.selectRow.clearSelectionData();\n\t\t}\n\n\t\tif (this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)) {\n\t\t\tthis.table.modules.reactiveData.watchData(data);\n\t\t}\n\n\t\tdata.forEach(function (def, i) {\n\t\t\tif (def && (typeof def === 'undefined' ? 'undefined' : _typeof(def)) === \"object\") {\n\t\t\t\tvar row = new Row(def, self);\n\t\t\t\tself.rows.push(row);\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Data Loading Warning - Invalid row data detected and ignored, expecting object but received:\", def);\n\t\t\t}\n\t\t});\n\n\t\tself.refreshActiveData(false, false, renderInPosition);\n\n\t\tself.table.options.dataLoaded.call(this.table, data);\n\t} else {\n\t\tconsole.error(\"Data Loading Error - Unable to process data due to invalid data type \\nExpecting: array \\nReceived: \", typeof data === 'undefined' ? 'undefined' : _typeof(data), \"\\nData: \", data);\n\t}\n};\n\nRowManager.prototype._wipeElements = function () {\n\tthis.rows.forEach(function (row) {\n\t\trow.wipe();\n\t});\n\n\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\tthis.table.modules.groupRows.wipe();\n\t}\n\n\tthis.rows = [];\n\tthis.activeRows = [];\n\tthis.activeRowsCount = 0;\n\tthis.displayRows = [];\n\tthis.displayRowsCount = 0;\n\n\tthis.adjustTableSize();\n};\n\nRowManager.prototype.deleteRow = function (row, blockRedraw) {\n\tvar allIndex = this.rows.indexOf(row),\n\t activeIndex = this.activeRows.indexOf(row);\n\n\tif (activeIndex > -1) {\n\t\tthis.activeRows.splice(activeIndex, 1);\n\t}\n\n\tif (allIndex > -1) {\n\t\tthis.rows.splice(allIndex, 1);\n\t}\n\n\tthis.setActiveRows(this.activeRows);\n\n\tthis.displayRowIterator(function (rows) {\n\t\tvar displayIndex = rows.indexOf(row);\n\n\t\tif (displayIndex > -1) {\n\t\t\trows.splice(displayIndex, 1);\n\t\t}\n\t});\n\n\tif (!blockRedraw) {\n\t\tthis.reRenderInPosition();\n\t}\n\n\tthis.regenerateRowNumbers();\n\n\tthis.table.options.rowDeleted.call(this.table, row.getComponent());\n\n\tif (this.table.options.dataChanged) {\n\t\tthis.table.options.dataChanged.call(this.table, this.getData());\n\t}\n\n\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\tthis.table.modules.groupRows.updateGroupRows(true);\n\t} else if (this.table.options.pagination && this.table.modExists(\"page\")) {\n\t\tthis.refreshActiveData(false, false, true);\n\t} else {\n\t\tif (this.table.options.pagination && this.table.modExists(\"page\")) {\n\t\t\tthis.refreshActiveData(\"page\");\n\t\t}\n\t}\n};\n\nRowManager.prototype.addRow = function (data, pos, index, blockRedraw) {\n\n\tvar row = this.addRowActual(data, pos, index, blockRedraw);\n\n\tif (this.table.options.history && this.table.modExists(\"history\")) {\n\t\tthis.table.modules.history.action(\"rowAdd\", row, { data: data, pos: pos, index: index });\n\t}\n\n\treturn row;\n};\n\n//add multiple rows\nRowManager.prototype.addRows = function (data, pos, index) {\n\tvar _this13 = this;\n\n\tvar self = this,\n\t length = 0,\n\t rows = [];\n\n\treturn new Promise(function (resolve, reject) {\n\t\tpos = _this13.findAddRowPos(pos);\n\n\t\tif (!Array.isArray(data)) {\n\t\t\tdata = [data];\n\t\t}\n\n\t\tlength = data.length - 1;\n\n\t\tif (typeof index == \"undefined\" && pos || typeof index !== \"undefined\" && !pos) {\n\t\t\tdata.reverse();\n\t\t}\n\n\t\tdata.forEach(function (item, i) {\n\t\t\tvar row = self.addRow(item, pos, index, true);\n\t\t\trows.push(row);\n\t\t});\n\n\t\tif (_this13.table.options.groupBy && _this13.table.modExists(\"groupRows\")) {\n\t\t\t_this13.table.modules.groupRows.updateGroupRows(true);\n\t\t} else if (_this13.table.options.pagination && _this13.table.modExists(\"page\")) {\n\t\t\t_this13.refreshActiveData(false, false, true);\n\t\t} else {\n\t\t\t_this13.reRenderInPosition();\n\t\t}\n\n\t\t//recalc column calculations if present\n\t\tif (_this13.table.modExists(\"columnCalcs\")) {\n\t\t\t_this13.table.modules.columnCalcs.recalc(_this13.table.rowManager.activeRows);\n\t\t}\n\n\t\t_this13.regenerateRowNumbers();\n\t\tresolve(rows);\n\t});\n};\n\nRowManager.prototype.findAddRowPos = function (pos) {\n\tif (typeof pos === \"undefined\") {\n\t\tpos = this.table.options.addRowPos;\n\t}\n\n\tif (pos === \"pos\") {\n\t\tpos = true;\n\t}\n\n\tif (pos === \"bottom\") {\n\t\tpos = false;\n\t}\n\n\treturn pos;\n};\n\nRowManager.prototype.addRowActual = function (data, pos, index, blockRedraw) {\n\tvar row = data instanceof Row ? data : new Row(data || {}, this),\n\t top = this.findAddRowPos(pos),\n\t allIndex = -1,\n\t activeIndex,\n\t dispRows;\n\n\tif (!index && this.table.options.pagination && this.table.options.paginationAddRow == \"page\") {\n\t\tdispRows = this.getDisplayRows();\n\n\t\tif (top) {\n\t\t\tif (dispRows.length) {\n\t\t\t\tindex = dispRows[0];\n\t\t\t} else {\n\t\t\t\tif (this.activeRows.length) {\n\t\t\t\t\tindex = this.activeRows[this.activeRows.length - 1];\n\t\t\t\t\ttop = false;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (dispRows.length) {\n\t\t\t\tindex = dispRows[dispRows.length - 1];\n\t\t\t\ttop = dispRows.length < this.table.modules.page.getPageSize() ? false : true;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (typeof index !== \"undefined\") {\n\t\tindex = this.findRow(index);\n\t}\n\n\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\tthis.table.modules.groupRows.assignRowToGroup(row);\n\n\t\tvar groupRows = row.getGroup().rows;\n\n\t\tif (groupRows.length > 1) {\n\n\t\t\tif (!index || index && groupRows.indexOf(index) == -1) {\n\t\t\t\tif (top) {\n\t\t\t\t\tif (groupRows[0] !== row) {\n\t\t\t\t\t\tindex = groupRows[0];\n\t\t\t\t\t\tthis._moveRowInArray(row.getGroup().rows, row, index, !top);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (groupRows[groupRows.length - 1] !== row) {\n\t\t\t\t\t\tindex = groupRows[groupRows.length - 1];\n\t\t\t\t\t\tthis._moveRowInArray(row.getGroup().rows, row, index, !top);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._moveRowInArray(row.getGroup().rows, row, index, !top);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (index) {\n\t\tallIndex = this.rows.indexOf(index);\n\t}\n\n\tif (index && allIndex > -1) {\n\t\tactiveIndex = this.activeRows.indexOf(index);\n\n\t\tthis.displayRowIterator(function (rows) {\n\t\t\tvar displayIndex = rows.indexOf(index);\n\n\t\t\tif (displayIndex > -1) {\n\t\t\t\trows.splice(top ? displayIndex : displayIndex + 1, 0, row);\n\t\t\t}\n\t\t});\n\n\t\tif (activeIndex > -1) {\n\t\t\tthis.activeRows.splice(top ? activeIndex : activeIndex + 1, 0, row);\n\t\t}\n\n\t\tthis.rows.splice(top ? allIndex : allIndex + 1, 0, row);\n\t} else {\n\n\t\tif (top) {\n\n\t\t\tthis.displayRowIterator(function (rows) {\n\t\t\t\trows.unshift(row);\n\t\t\t});\n\n\t\t\tthis.activeRows.unshift(row);\n\t\t\tthis.rows.unshift(row);\n\t\t} else {\n\t\t\tthis.displayRowIterator(function (rows) {\n\t\t\t\trows.push(row);\n\t\t\t});\n\n\t\t\tthis.activeRows.push(row);\n\t\t\tthis.rows.push(row);\n\t\t}\n\t}\n\n\tthis.setActiveRows(this.activeRows);\n\n\tthis.table.options.rowAdded.call(this.table, row.getComponent());\n\n\tif (this.table.options.dataChanged) {\n\t\tthis.table.options.dataChanged.call(this.table, this.getData());\n\t}\n\n\tif (!blockRedraw) {\n\t\tthis.reRenderInPosition();\n\t}\n\n\treturn row;\n};\n\nRowManager.prototype.moveRow = function (from, to, after) {\n\tif (this.table.options.history && this.table.modExists(\"history\")) {\n\t\tthis.table.modules.history.action(\"rowMove\", from, { posFrom: this.getRowPosition(from), posTo: this.getRowPosition(to), to: to, after: after });\n\t}\n\n\tthis.moveRowActual(from, to, after);\n\n\tthis.regenerateRowNumbers();\n\n\tthis.table.options.rowMoved.call(this.table, from.getComponent());\n};\n\nRowManager.prototype.moveRowActual = function (from, to, after) {\n\tvar _this14 = this;\n\n\tthis._moveRowInArray(this.rows, from, to, after);\n\tthis._moveRowInArray(this.activeRows, from, to, after);\n\n\tthis.displayRowIterator(function (rows) {\n\t\t_this14._moveRowInArray(rows, from, to, after);\n\t});\n\n\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\n\t\tif (!after && to instanceof Group) {\n\t\t\tto = this.table.rowManager.prevDisplayRow(from) || to;\n\t\t}\n\n\t\tvar toGroup = to.getGroup();\n\t\tvar fromGroup = from.getGroup();\n\n\t\tif (toGroup === fromGroup) {\n\t\t\tthis._moveRowInArray(toGroup.rows, from, to, after);\n\t\t} else {\n\t\t\tif (fromGroup) {\n\t\t\t\tfromGroup.removeRow(from);\n\t\t\t}\n\n\t\t\ttoGroup.insertRow(from, to, after);\n\t\t}\n\t}\n};\n\nRowManager.prototype._moveRowInArray = function (rows, from, to, after) {\n\tvar fromIndex, toIndex, start, end;\n\n\tif (from !== to) {\n\n\t\tfromIndex = rows.indexOf(from);\n\n\t\tif (fromIndex > -1) {\n\n\t\t\trows.splice(fromIndex, 1);\n\n\t\t\ttoIndex = rows.indexOf(to);\n\n\t\t\tif (toIndex > -1) {\n\n\t\t\t\tif (after) {\n\t\t\t\t\trows.splice(toIndex + 1, 0, from);\n\t\t\t\t} else {\n\t\t\t\t\trows.splice(toIndex, 0, from);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\trows.splice(fromIndex, 0, from);\n\t\t\t}\n\t\t}\n\n\t\t//restyle rows\n\t\tif (rows === this.getDisplayRows()) {\n\n\t\t\tstart = fromIndex < toIndex ? fromIndex : toIndex;\n\t\t\tend = toIndex > fromIndex ? toIndex : fromIndex + 1;\n\n\t\t\tfor (var _i4 = start; _i4 <= end; _i4++) {\n\t\t\t\tif (rows[_i4]) {\n\t\t\t\t\tthis.styleRow(rows[_i4], _i4);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nRowManager.prototype.clearData = function () {\n\tthis.setData([]);\n};\n\nRowManager.prototype.getRowIndex = function (row) {\n\treturn this.findRowIndex(row, this.rows);\n};\n\nRowManager.prototype.getDisplayRowIndex = function (row) {\n\tvar index = this.getDisplayRows().indexOf(row);\n\treturn index > -1 ? index : false;\n};\n\nRowManager.prototype.nextDisplayRow = function (row, rowOnly) {\n\tvar index = this.getDisplayRowIndex(row),\n\t nextRow = false;\n\n\tif (index !== false && index < this.displayRowsCount - 1) {\n\t\tnextRow = this.getDisplayRows()[index + 1];\n\t}\n\n\tif (nextRow && (!(nextRow instanceof Row) || nextRow.type != \"row\")) {\n\t\treturn this.nextDisplayRow(nextRow, rowOnly);\n\t}\n\n\treturn nextRow;\n};\n\nRowManager.prototype.prevDisplayRow = function (row, rowOnly) {\n\tvar index = this.getDisplayRowIndex(row),\n\t prevRow = false;\n\n\tif (index) {\n\t\tprevRow = this.getDisplayRows()[index - 1];\n\t}\n\n\tif (rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != \"row\")) {\n\t\treturn this.prevDisplayRow(prevRow, rowOnly);\n\t}\n\n\treturn prevRow;\n};\n\nRowManager.prototype.findRowIndex = function (row, list) {\n\tvar rowIndex;\n\n\trow = this.findRow(row);\n\n\tif (row) {\n\t\trowIndex = list.indexOf(row);\n\n\t\tif (rowIndex > -1) {\n\t\t\treturn rowIndex;\n\t\t}\n\t}\n\n\treturn false;\n};\n\nRowManager.prototype.getData = function (active, transform) {\n\tvar output = [],\n\t rows = this.getRows(active);\n\n\trows.forEach(function (row) {\n\t\tif (row.type == \"row\") {\n\t\t\toutput.push(row.getData(transform || \"data\"));\n\t\t}\n\t});\n\n\treturn output;\n};\n\nRowManager.prototype.getComponents = function (active) {\n\tvar output = [],\n\t rows = this.getRows(active);\n\n\trows.forEach(function (row) {\n\t\toutput.push(row.getComponent());\n\t});\n\n\treturn output;\n};\n\nRowManager.prototype.getDataCount = function (active) {\n\tvar rows = this.getRows(active);\n\n\treturn rows.length;\n};\n\nRowManager.prototype._genRemoteRequest = function () {\n\tvar _this15 = this;\n\n\tvar table = this.table,\n\t options = table.options,\n\t params = {};\n\n\tif (table.modExists(\"page\")) {\n\t\t//set sort data if defined\n\t\tif (options.ajaxSorting) {\n\t\t\tvar sorters = this.table.modules.sort.getSort();\n\n\t\t\tsorters.forEach(function (item) {\n\t\t\t\tdelete item.column;\n\t\t\t});\n\n\t\t\tparams[this.table.modules.page.paginationDataSentNames.sorters] = sorters;\n\t\t}\n\n\t\t//set filter data if defined\n\t\tif (options.ajaxFiltering) {\n\t\t\tvar filters = this.table.modules.filter.getFilters(true, true);\n\n\t\t\tparams[this.table.modules.page.paginationDataSentNames.filters] = filters;\n\t\t}\n\n\t\tthis.table.modules.ajax.setParams(params, true);\n\t}\n\n\ttable.modules.ajax.sendRequest().then(function (data) {\n\t\t_this15._setDataActual(data, true);\n\t}).catch(function (e) {});\n};\n\n//choose the path to refresh data after a filter update\nRowManager.prototype.filterRefresh = function () {\n\tvar table = this.table,\n\t options = table.options,\n\t left = this.scrollLeft;\n\n\tif (options.ajaxFiltering) {\n\t\tif (options.pagination == \"remote\" && table.modExists(\"page\")) {\n\t\t\ttable.modules.page.reset(true);\n\t\t\ttable.modules.page.setPage(1).then(function () {}).catch(function () {});\n\t\t} else if (options.ajaxProgressiveLoad) {\n\t\t\ttable.modules.ajax.loadData().then(function () {}).catch(function () {});\n\t\t} else {\n\t\t\t//assume data is url, make ajax call to url to get data\n\t\t\tthis._genRemoteRequest();\n\t\t}\n\t} else {\n\t\tthis.refreshActiveData(\"filter\");\n\t}\n\n\tthis.scrollHorizontal(left);\n};\n\n//choose the path to refresh data after a sorter update\nRowManager.prototype.sorterRefresh = function (loadOrignalData) {\n\tvar table = this.table,\n\t options = this.table.options,\n\t left = this.scrollLeft;\n\n\tif (options.ajaxSorting) {\n\t\tif ((options.pagination == \"remote\" || options.progressiveLoad) && table.modExists(\"page\")) {\n\t\t\ttable.modules.page.reset(true);\n\t\t\ttable.modules.page.setPage(1).then(function () {}).catch(function () {});\n\t\t} else if (options.ajaxProgressiveLoad) {\n\t\t\ttable.modules.ajax.loadData().then(function () {}).catch(function () {});\n\t\t} else {\n\t\t\t//assume data is url, make ajax call to url to get data\n\t\t\tthis._genRemoteRequest();\n\t\t}\n\t} else {\n\t\tthis.refreshActiveData(loadOrignalData ? \"filter\" : \"sort\");\n\t}\n\n\tthis.scrollHorizontal(left);\n};\n\nRowManager.prototype.scrollHorizontal = function (left) {\n\tthis.scrollLeft = left;\n\tthis.element.scrollLeft = left;\n\n\tif (this.table.options.groupBy) {\n\t\tthis.table.modules.groupRows.scrollHeaders(left);\n\t}\n\n\tif (this.table.modExists(\"columnCalcs\")) {\n\t\tthis.table.modules.columnCalcs.scrollHorizontal(left);\n\t}\n};\n\n//set active data set\nRowManager.prototype.refreshActiveData = function (stage, skipStage, renderInPosition) {\n\tvar self = this,\n\t table = this.table,\n\t cascadeOrder = [\"all\", \"filter\", \"sort\", \"display\", \"freeze\", \"group\", \"tree\", \"page\"],\n\t displayIndex;\n\n\tif (this.redrawBlock) {\n\n\t\tif (!this.redrawBlockRestoreConfig || cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage)) {\n\t\t\tthis.redrawBlockRestoreConfig = {\n\t\t\t\tstage: stage,\n\t\t\t\tskipStage: skipStage,\n\t\t\t\trenderInPosition: renderInPosition\n\t\t\t};\n\t\t}\n\n\t\treturn;\n\t} else {\n\n\t\tif (self.table.modExists(\"edit\")) {\n\t\t\tself.table.modules.edit.cancelEdit();\n\t\t}\n\n\t\tif (!stage) {\n\t\t\tstage = \"all\";\n\t\t}\n\n\t\tif (table.options.selectable && !table.options.selectablePersistence && table.modExists(\"selectRow\")) {\n\t\t\ttable.modules.selectRow.deselectRows();\n\t\t}\n\n\t\t//cascade through data refresh stages\n\t\tswitch (stage) {\n\t\t\tcase \"all\":\n\n\t\t\tcase \"filter\":\n\t\t\t\tif (!skipStage) {\n\t\t\t\t\tif (table.modExists(\"filter\")) {\n\t\t\t\t\t\tself.setActiveRows(table.modules.filter.filter(self.rows));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.setActiveRows(self.rows.slice(0));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tskipStage = false;\n\t\t\t\t}\n\n\t\t\tcase \"sort\":\n\t\t\t\tif (!skipStage) {\n\t\t\t\t\tif (table.modExists(\"sort\")) {\n\t\t\t\t\t\ttable.modules.sort.sort(this.activeRows);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tskipStage = false;\n\t\t\t\t}\n\n\t\t\t\t//regenerate row numbers for row number formatter if in use\n\t\t\t\tthis.regenerateRowNumbers();\n\n\t\t\t//generic stage to allow for pipeline trigger after the data manipulation stage\n\t\t\tcase \"display\":\n\t\t\t\tthis.resetDisplayRows();\n\n\t\t\tcase \"freeze\":\n\t\t\t\tif (!skipStage) {\n\t\t\t\t\tif (this.table.modExists(\"frozenRows\")) {\n\t\t\t\t\t\tif (table.modules.frozenRows.isFrozen()) {\n\t\t\t\t\t\t\tif (!table.modules.frozenRows.getDisplayIndex()) {\n\t\t\t\t\t\t\t\ttable.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex());\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdisplayIndex = table.modules.frozenRows.getDisplayIndex();\n\n\t\t\t\t\t\t\tdisplayIndex = self.setDisplayRows(table.modules.frozenRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\n\n\t\t\t\t\t\t\tif (displayIndex !== true) {\n\t\t\t\t\t\t\t\ttable.modules.frozenRows.setDisplayIndex(displayIndex);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tskipStage = false;\n\t\t\t\t}\n\n\t\t\tcase \"group\":\n\t\t\t\tif (!skipStage) {\n\t\t\t\t\tif (table.options.groupBy && table.modExists(\"groupRows\")) {\n\n\t\t\t\t\t\tif (!table.modules.groupRows.getDisplayIndex()) {\n\t\t\t\t\t\t\ttable.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdisplayIndex = table.modules.groupRows.getDisplayIndex();\n\n\t\t\t\t\t\tdisplayIndex = self.setDisplayRows(table.modules.groupRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\n\n\t\t\t\t\t\tif (displayIndex !== true) {\n\t\t\t\t\t\t\ttable.modules.groupRows.setDisplayIndex(displayIndex);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tskipStage = false;\n\t\t\t\t}\n\n\t\t\tcase \"tree\":\n\n\t\t\t\tif (!skipStage) {\n\t\t\t\t\tif (table.options.dataTree && table.modExists(\"dataTree\")) {\n\t\t\t\t\t\tif (!table.modules.dataTree.getDisplayIndex()) {\n\t\t\t\t\t\t\ttable.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdisplayIndex = table.modules.dataTree.getDisplayIndex();\n\n\t\t\t\t\t\tdisplayIndex = self.setDisplayRows(table.modules.dataTree.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\n\n\t\t\t\t\t\tif (displayIndex !== true) {\n\t\t\t\t\t\t\ttable.modules.dataTree.setDisplayIndex(displayIndex);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tskipStage = false;\n\t\t\t\t}\n\n\t\t\t\tif (table.options.pagination && table.modExists(\"page\") && !renderInPosition) {\n\t\t\t\t\tif (table.modules.page.getMode() == \"local\") {\n\t\t\t\t\t\ttable.modules.page.reset();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tcase \"page\":\n\t\t\t\tif (!skipStage) {\n\t\t\t\t\tif (table.options.pagination && table.modExists(\"page\")) {\n\n\t\t\t\t\t\tif (!table.modules.page.getDisplayIndex()) {\n\t\t\t\t\t\t\ttable.modules.page.setDisplayIndex(this.getNextDisplayIndex());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdisplayIndex = table.modules.page.getDisplayIndex();\n\n\t\t\t\t\t\tif (table.modules.page.getMode() == \"local\") {\n\t\t\t\t\t\t\ttable.modules.page.setMaxRows(this.getDisplayRows(displayIndex - 1).length);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdisplayIndex = self.setDisplayRows(table.modules.page.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\n\n\t\t\t\t\t\tif (displayIndex !== true) {\n\t\t\t\t\t\t\ttable.modules.page.setDisplayIndex(displayIndex);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tskipStage = false;\n\t\t\t\t}\n\t\t}\n\n\t\tif (Tabulator.prototype.helpers.elVisible(self.element)) {\n\t\t\tif (renderInPosition) {\n\t\t\t\tself.reRenderInPosition();\n\t\t\t} else {\n\n\t\t\t\tif (stage === \"all\" && this.table.options.virtualDomHoz) {\n\t\t\t\t\tthis.table.vdomHoz.dataChange();\n\t\t\t\t}\n\n\t\t\t\tself.renderTable();\n\n\t\t\t\tif (table.options.layoutColumnsOnNewData) {\n\t\t\t\t\tself.table.columnManager.redraw(true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (table.modExists(\"columnCalcs\")) {\n\t\t\ttable.modules.columnCalcs.recalc(this.activeRows);\n\t\t}\n\t}\n};\n\n//regenerate row numbers for row number formatter if in use\nRowManager.prototype.regenerateRowNumbers = function () {\n\tvar _this16 = this;\n\n\tif (this.rowNumColumn) {\n\t\tthis.activeRows.forEach(function (row) {\n\t\t\tvar cell = row.getCell(_this16.rowNumColumn);\n\n\t\t\tif (cell) {\n\t\t\t\tcell._generateContents();\n\t\t\t}\n\t\t});\n\t}\n};\n\nRowManager.prototype.setActiveRows = function (activeRows) {\n\tthis.activeRows = activeRows;\n\tthis.activeRowsCount = this.activeRows.length;\n};\n\n//reset display rows array\nRowManager.prototype.resetDisplayRows = function () {\n\tthis.displayRows = [];\n\n\tthis.displayRows.push(this.activeRows.slice(0));\n\n\tthis.displayRowsCount = this.displayRows[0].length;\n\n\tif (this.table.modExists(\"frozenRows\")) {\n\t\tthis.table.modules.frozenRows.setDisplayIndex(0);\n\t}\n\n\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\tthis.table.modules.groupRows.setDisplayIndex(0);\n\t}\n\n\tif (this.table.options.pagination && this.table.modExists(\"page\")) {\n\t\tthis.table.modules.page.setDisplayIndex(0);\n\t}\n};\n\nRowManager.prototype.getNextDisplayIndex = function () {\n\treturn this.displayRows.length;\n};\n\n//set display row pipeline data\nRowManager.prototype.setDisplayRows = function (displayRows, index) {\n\n\tvar output = true;\n\n\tif (index && typeof this.displayRows[index] != \"undefined\") {\n\t\tthis.displayRows[index] = displayRows;\n\t\toutput = true;\n\t} else {\n\t\tthis.displayRows.push(displayRows);\n\t\toutput = index = this.displayRows.length - 1;\n\t}\n\n\tif (index == this.displayRows.length - 1) {\n\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length - 1].length;\n\t}\n\n\treturn output;\n};\n\nRowManager.prototype.getDisplayRows = function (index) {\n\tif (typeof index == \"undefined\") {\n\t\treturn this.displayRows.length ? this.displayRows[this.displayRows.length - 1] : [];\n\t} else {\n\t\treturn this.displayRows[index] || [];\n\t}\n};\n\nRowManager.prototype.getVisibleRows = function (viewable) {\n\tvar topEdge = this.element.scrollTop,\n\t bottomEdge = this.element.clientHeight + topEdge,\n\t topFound = false,\n\t topRow = 0,\n\t bottomRow = 0,\n\t rows = this.getDisplayRows();\n\n\tif (viewable) {\n\n\t\tthis.getDisplayRows();\n\t\tfor (var i = this.vDomTop; i <= this.vDomBottom; i++) {\n\t\t\tif (rows[i]) {\n\t\t\t\tif (!topFound) {\n\t\t\t\t\tif (topEdge - rows[i].getElement().offsetTop >= 0) {\n\t\t\t\t\t\ttopRow = i;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttopFound = true;\n\n\t\t\t\t\t\tif (bottomEdge - rows[i].getElement().offsetTop >= 0) {\n\t\t\t\t\t\t\tbottomRow = i;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (bottomEdge - rows[i].getElement().offsetTop >= 0) {\n\t\t\t\t\t\tbottomRow = i;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\ttopRow = this.vDomTop;\n\t\tbottomRow = this.vDomBottom;\n\t}\n\n\treturn rows.slice(topRow, bottomRow + 1);\n};\n\n//repeat action accross display rows\nRowManager.prototype.displayRowIterator = function (callback) {\n\tthis.displayRows.forEach(callback);\n\n\tthis.displayRowsCount = this.displayRows[this.displayRows.length - 1].length;\n};\n\n//return only actual rows (not group headers etc)\nRowManager.prototype.getRows = function (active) {\n\tvar rows;\n\n\tswitch (active) {\n\t\tcase \"active\":\n\t\t\trows = this.activeRows;\n\t\t\tbreak;\n\n\t\tcase \"display\":\n\t\t\trows = this.table.rowManager.getDisplayRows();\n\t\t\tbreak;\n\n\t\tcase \"visible\":\n\t\t\trows = this.getVisibleRows(true);\n\t\t\tbreak;\n\n\t\tcase \"selected\":\n\t\t\trows = this.table.modules.selectRow.selectedRows;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\trows = this.rows;\n\t}\n\n\treturn rows;\n};\n\n///////////////// Table Rendering /////////////////\n\n//trigger rerender of table in current position\nRowManager.prototype.reRenderInPosition = function (callback) {\n\tif (this.getRenderMode() == \"virtual\") {\n\n\t\tif (this.redrawBlock) {\n\t\t\tif (callback) {\n\t\t\t\tcallback();\n\t\t\t} else {\n\t\t\t\tthis.redrawBlockRederInPosition = true;\n\t\t\t}\n\t\t} else {\n\t\t\tvar scrollTop = this.element.scrollTop;\n\t\t\tvar topRow = false;\n\t\t\tvar topOffset = false;\n\n\t\t\tvar left = this.scrollLeft;\n\n\t\t\tvar rows = this.getDisplayRows();\n\n\t\t\tfor (var i = this.vDomTop; i <= this.vDomBottom; i++) {\n\n\t\t\t\tif (rows[i]) {\n\t\t\t\t\tvar diff = scrollTop - rows[i].getElement().offsetTop;\n\n\t\t\t\t\tif (topOffset === false || Math.abs(diff) < topOffset) {\n\t\t\t\t\t\ttopOffset = diff;\n\t\t\t\t\t\ttopRow = i;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (callback) {\n\t\t\t\tcallback();\n\t\t\t}\n\n\t\t\tthis._virtualRenderFill(topRow === false ? this.displayRowsCount - 1 : topRow, true, topOffset || 0);\n\n\t\t\tthis.scrollHorizontal(left);\n\t\t}\n\t} else {\n\t\tthis.renderTable();\n\n\t\tif (callback) {\n\t\t\tcallback();\n\t\t}\n\t}\n};\n\nRowManager.prototype.setRenderMode = function () {\n\n\tif (this.table.options.virtualDom) {\n\n\t\tthis.renderMode = \"virtual\";\n\n\t\tif (this.table.element.clientHeight || this.table.options.height) {\n\t\t\tthis.fixedHeight = true;\n\t\t} else {\n\t\t\tthis.fixedHeight = false;\n\t\t}\n\t} else {\n\t\tthis.renderMode = \"classic\";\n\t}\n};\n\nRowManager.prototype.getRenderMode = function () {\n\treturn this.renderMode;\n};\n\nRowManager.prototype.renderTable = function () {\n\n\tthis.table.options.renderStarted.call(this.table);\n\n\tthis.element.scrollTop = 0;\n\n\tswitch (this.renderMode) {\n\t\tcase \"classic\":\n\t\t\tthis._simpleRender();\n\t\t\tbreak;\n\n\t\tcase \"virtual\":\n\t\t\tthis._virtualRenderFill();\n\t\t\tbreak;\n\t}\n\n\tif (this.firstRender) {\n\t\tif (this.displayRowsCount) {\n\t\t\tthis.firstRender = false;\n\t\t\tthis.table.modules.layout.layout();\n\t\t} else {\n\t\t\tthis.renderEmptyScroll();\n\t\t}\n\t}\n\n\tif (this.table.modExists(\"frozenColumns\")) {\n\t\tthis.table.modules.frozenColumns.layout();\n\t}\n\n\tif (!this.displayRowsCount) {\n\t\tif (this.table.options.placeholder) {\n\n\t\t\tthis.table.options.placeholder.setAttribute(\"tabulator-render-mode\", this.renderMode);\n\n\t\t\tthis.getElement().appendChild(this.table.options.placeholder);\n\t\t\tthis.table.options.placeholder.style.width = this.table.columnManager.getWidth() + \"px\";\n\t\t}\n\t}\n\n\tthis.table.options.renderComplete.call(this.table);\n};\n\n//simple render on heightless table\nRowManager.prototype._simpleRender = function () {\n\tthis._clearVirtualDom();\n\n\tif (this.displayRowsCount) {\n\t\tthis.checkClassicModeGroupHeaderWidth();\n\t} else {\n\t\tthis.renderEmptyScroll();\n\t}\n};\n\nRowManager.prototype.checkClassicModeGroupHeaderWidth = function () {\n\tvar self = this,\n\t element = this.tableElement,\n\t onlyGroupHeaders = true;\n\n\tself.getDisplayRows().forEach(function (row, index) {\n\t\tself.styleRow(row, index);\n\t\telement.appendChild(row.getElement());\n\t\trow.initialize(true);\n\n\t\tif (row.type !== \"group\") {\n\t\t\tonlyGroupHeaders = false;\n\t\t}\n\t});\n\n\tif (onlyGroupHeaders) {\n\t\telement.style.minWidth = self.table.columnManager.getWidth() + \"px\";\n\t} else {\n\t\telement.style.minWidth = \"\";\n\t}\n};\n\n//show scrollbars on empty table div\nRowManager.prototype.renderEmptyScroll = function () {\n\tif (this.table.options.placeholder) {\n\t\tthis.tableElement.style.display = \"none\";\n\t} else {\n\t\tthis.tableElement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\n\t\t// this.tableElement.style.minHeight = \"1px\";\n\t\t// this.tableElement.style.visibility = \"hidden\";\n\t}\n};\n\nRowManager.prototype._clearVirtualDom = function () {\n\tvar element = this.tableElement;\n\n\tif (this.table.options.placeholder && this.table.options.placeholder.parentNode) {\n\t\tthis.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);\n\t}\n\n\t// element.children.detach();\n\twhile (element.firstChild) {\n\t\telement.removeChild(element.firstChild);\n\t}element.style.paddingTop = \"\";\n\telement.style.paddingBottom = \"\";\n\telement.style.minWidth = \"\";\n\telement.style.minHeight = \"\";\n\telement.style.display = \"\";\n\telement.style.visibility = \"\";\n\n\tthis.scrollTop = 0;\n\tthis.scrollLeft = 0;\n\tthis.vDomTop = 0;\n\tthis.vDomBottom = 0;\n\tthis.vDomTopPad = 0;\n\tthis.vDomBottomPad = 0;\n};\n\nRowManager.prototype.styleRow = function (row, index) {\n\tvar rowEl = row.getElement();\n\n\tif (index % 2) {\n\t\trowEl.classList.add(\"tabulator-row-even\");\n\t\trowEl.classList.remove(\"tabulator-row-odd\");\n\t} else {\n\t\trowEl.classList.add(\"tabulator-row-odd\");\n\t\trowEl.classList.remove(\"tabulator-row-even\");\n\t}\n};\n\n//full virtual render\nRowManager.prototype._virtualRenderFill = function (position, forceMove, offset) {\n\tvar self = this,\n\t element = self.tableElement,\n\t holder = self.element,\n\t topPad = 0,\n\t rowsHeight = 0,\n\t topPadHeight = 0,\n\t i = 0,\n\t onlyGroupHeaders = true,\n\t rows = self.getDisplayRows();\n\n\tposition = position || 0;\n\n\toffset = offset || 0;\n\n\tif (!position) {\n\t\tself._clearVirtualDom();\n\t} else {\n\t\twhile (element.firstChild) {\n\t\t\telement.removeChild(element.firstChild);\n\t\t} //check if position is too close to bottom of table\n\t\tvar heightOccupied = (self.displayRowsCount - position + 1) * self.vDomRowHeight;\n\n\t\tif (heightOccupied < self.height) {\n\t\t\tposition -= Math.ceil((self.height - heightOccupied) / self.vDomRowHeight);\n\n\t\t\tif (position < 0) {\n\t\t\t\tposition = 0;\n\t\t\t}\n\t\t}\n\n\t\t//calculate initial pad\n\t\ttopPad = Math.min(Math.max(Math.floor(self.vDomWindowBuffer / self.vDomRowHeight), self.vDomWindowMinMarginRows), position);\n\t\tposition -= topPad;\n\t}\n\n\tif (self.displayRowsCount && Tabulator.prototype.helpers.elVisible(self.element)) {\n\n\t\tself.vDomTop = position;\n\n\t\tself.vDomBottom = position - 1;\n\n\t\twhile ((rowsHeight <= self.height + self.vDomWindowBuffer || i < self.vDomWindowMinTotalRows) && self.vDomBottom < self.displayRowsCount - 1) {\n\t\t\tvar index = self.vDomBottom + 1,\n\t\t\t row = rows[index],\n\t\t\t rowHeight = 0;\n\n\t\t\tself.styleRow(row, index);\n\n\t\t\telement.appendChild(row.getElement());\n\n\t\t\trow.initialize();\n\n\t\t\tif (!row.heightInitialized) {\n\t\t\t\trow.normalizeHeight(true);\n\t\t\t}\n\n\t\t\t// if(!row.initialized){\n\t\t\t// \trow.initialize(true);\n\t\t\t// }else{\n\t\t\t// \tif(!row.heightInitialized){\n\t\t\t// \t\trow.normalizeHeight(true);\n\t\t\t// \t}\n\t\t\t// }\n\n\t\t\trowHeight = row.getHeight();\n\n\t\t\tif (i < topPad) {\n\t\t\t\ttopPadHeight += rowHeight;\n\t\t\t} else {\n\t\t\t\trowsHeight += rowHeight;\n\t\t\t}\n\n\t\t\tif (rowHeight > this.vDomWindowBuffer) {\n\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\n\t\t\t}\n\n\t\t\tif (row.type !== \"group\") {\n\t\t\t\tonlyGroupHeaders = false;\n\t\t\t}\n\n\t\t\tself.vDomBottom++;\n\t\t\ti++;\n\t\t}\n\n\t\tif (!position) {\n\t\t\tthis.vDomTopPad = 0;\n\t\t\t//adjust rowheight to match average of rendered elements\n\t\t\tself.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i);\n\t\t\tself.vDomBottomPad = self.vDomRowHeight * (self.displayRowsCount - self.vDomBottom - 1);\n\n\t\t\tself.vDomScrollHeight = topPadHeight + rowsHeight + self.vDomBottomPad - self.height;\n\t\t} else {\n\t\t\tself.vDomTopPad = !forceMove ? self.scrollTop - topPadHeight : self.vDomRowHeight * this.vDomTop + offset;\n\t\t\tself.vDomBottomPad = self.vDomBottom == self.displayRowsCount - 1 ? 0 : Math.max(self.vDomScrollHeight - self.vDomTopPad - rowsHeight - topPadHeight, 0);\n\t\t}\n\n\t\telement.style.paddingTop = self.vDomTopPad + \"px\";\n\t\telement.style.paddingBottom = self.vDomBottomPad + \"px\";\n\n\t\tif (forceMove) {\n\t\t\tthis.scrollTop = self.vDomTopPad + topPadHeight + offset - (this.element.scrollWidth > this.element.clientWidth ? this.element.offsetHeight - this.element.clientHeight : 0);\n\t\t}\n\n\t\tthis.scrollTop = Math.min(this.scrollTop, this.element.scrollHeight - this.height);\n\n\t\t//adjust for horizontal scrollbar if present (and not at top of table)\n\t\tif (this.element.scrollWidth > this.element.offsetWidth && forceMove) {\n\t\t\tthis.scrollTop += this.element.offsetHeight - this.element.clientHeight;\n\t\t}\n\n\t\tthis.vDomScrollPosTop = this.scrollTop;\n\t\tthis.vDomScrollPosBottom = this.scrollTop;\n\n\t\tholder.scrollTop = this.scrollTop;\n\n\t\telement.style.minWidth = onlyGroupHeaders ? self.table.columnManager.getWidth() + \"px\" : \"\";\n\n\t\tif (self.table.options.groupBy) {\n\t\t\tif (self.table.modules.layout.getMode() != \"fitDataFill\" && self.displayRowsCount == self.table.modules.groupRows.countGroups()) {\n\t\t\t\tself.tableElement.style.minWidth = self.table.columnManager.getWidth();\n\t\t\t}\n\t\t}\n\t} else {\n\t\tthis.renderEmptyScroll();\n\t}\n\n\tif (!this.fixedHeight) {\n\t\tthis.adjustTableSize();\n\t}\n};\n\n//handle vertical scrolling\nRowManager.prototype.scrollVertical = function (dir) {\n\tvar topDiff = this.scrollTop - this.vDomScrollPosTop;\n\tvar bottomDiff = this.scrollTop - this.vDomScrollPosBottom;\n\tvar margin = this.vDomWindowBuffer * 2;\n\n\tif (-topDiff > margin || bottomDiff > margin) {\n\t\t//if big scroll redraw table;\n\t\tvar left = this.scrollLeft;\n\t\tthis._virtualRenderFill(Math.floor(this.element.scrollTop / this.element.scrollHeight * this.displayRowsCount));\n\t\tthis.scrollHorizontal(left);\n\t} else {\n\n\t\tif (dir) {\n\t\t\t//scrolling up\n\t\t\tif (topDiff < 0) {\n\n\t\t\t\tthis._addTopRow(-topDiff);\n\t\t\t}\n\n\t\t\tif (bottomDiff < 0) {\n\n\t\t\t\t//hide bottom row if needed\n\t\t\t\tif (this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer) {\n\t\t\t\t\tthis._removeBottomRow(-bottomDiff);\n\t\t\t\t} else {\n\t\t\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t//scrolling down\n\t\t\tif (topDiff >= 0) {\n\n\t\t\t\t//hide top row if needed\n\t\t\t\tif (this.scrollTop > this.vDomWindowBuffer) {\n\n\t\t\t\t\tthis._removeTopRow(topDiff);\n\t\t\t\t} else {\n\t\t\t\t\tthis.vDomScrollPosTop = this.scrollTop;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (bottomDiff >= 0) {\n\n\t\t\t\tthis._addBottomRow(bottomDiff);\n\t\t\t}\n\t\t}\n\t}\n};\n\nRowManager.prototype._addTopRow = function (topDiff) {\n\tvar i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n\tvar table = this.tableElement,\n\t rows = this.getDisplayRows();\n\n\tif (this.vDomTop) {\n\t\tvar index = this.vDomTop - 1,\n\t\t topRow = rows[index],\n\t\t topRowHeight = topRow.getHeight() || this.vDomRowHeight;\n\n\t\t//hide top row if needed\n\t\tif (topDiff >= topRowHeight) {\n\t\t\tthis.styleRow(topRow, index);\n\t\t\ttable.insertBefore(topRow.getElement(), table.firstChild);\n\t\t\tif (!topRow.initialized || !topRow.heightInitialized) {\n\t\t\t\tthis.vDomTopNewRows.push(topRow);\n\n\t\t\t\tif (!topRow.heightInitialized) {\n\t\t\t\t\ttopRow.clearCellHeight();\n\t\t\t\t}\n\t\t\t}\n\t\t\ttopRow.initialize();\n\n\t\t\tthis.vDomTopPad -= topRowHeight;\n\n\t\t\tif (this.vDomTopPad < 0) {\n\t\t\t\tthis.vDomTopPad = index * this.vDomRowHeight;\n\t\t\t}\n\n\t\t\tif (!index) {\n\t\t\t\tthis.vDomTopPad = 0;\n\t\t\t}\n\n\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\n\t\t\tthis.vDomScrollPosTop -= topRowHeight;\n\t\t\tthis.vDomTop--;\n\t\t}\n\n\t\ttopDiff = -(this.scrollTop - this.vDomScrollPosTop);\n\n\t\tif (topRow.getHeight() > this.vDomWindowBuffer) {\n\t\t\tthis.vDomWindowBuffer = topRow.getHeight() * 2;\n\t\t}\n\n\t\tif (i < this.vDomMaxRenderChain && this.vDomTop && topDiff >= (rows[this.vDomTop - 1].getHeight() || this.vDomRowHeight)) {\n\t\t\tthis._addTopRow(topDiff, i + 1);\n\t\t} else {\n\t\t\tthis._quickNormalizeRowHeight(this.vDomTopNewRows);\n\t\t}\n\t}\n};\n\nRowManager.prototype._removeTopRow = function (topDiff) {\n\tvar table = this.tableElement,\n\t topRow = this.getDisplayRows()[this.vDomTop],\n\t topRowHeight = topRow.getHeight() || this.vDomRowHeight;\n\n\tif (topDiff >= topRowHeight) {\n\n\t\tvar rowEl = topRow.getElement();\n\t\trowEl.parentNode.removeChild(rowEl);\n\n\t\tthis.vDomTopPad += topRowHeight;\n\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\n\t\tthis.vDomScrollPosTop += this.vDomTop ? topRowHeight : topRowHeight + this.vDomWindowBuffer;\n\t\tthis.vDomTop++;\n\n\t\ttopDiff = this.scrollTop - this.vDomScrollPosTop;\n\n\t\tthis._removeTopRow(topDiff);\n\t}\n};\n\nRowManager.prototype._addBottomRow = function (bottomDiff) {\n\tvar i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n\tvar table = this.tableElement,\n\t rows = this.getDisplayRows();\n\n\tif (this.vDomBottom < this.displayRowsCount - 1) {\n\t\tvar index = this.vDomBottom + 1,\n\t\t bottomRow = rows[index],\n\t\t bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;\n\n\t\t//hide bottom row if needed\n\t\tif (bottomDiff >= bottomRowHeight) {\n\t\t\tthis.styleRow(bottomRow, index);\n\t\t\ttable.appendChild(bottomRow.getElement());\n\n\t\t\tif (!bottomRow.initialized || !bottomRow.heightInitialized) {\n\t\t\t\tthis.vDomBottomNewRows.push(bottomRow);\n\n\t\t\t\tif (!bottomRow.heightInitialized) {\n\t\t\t\t\tbottomRow.clearCellHeight();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbottomRow.initialize();\n\n\t\t\tthis.vDomBottomPad -= bottomRowHeight;\n\n\t\t\tif (this.vDomBottomPad < 0 || index == this.displayRowsCount - 1) {\n\t\t\t\tthis.vDomBottomPad = 0;\n\t\t\t}\n\n\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\n\t\t\tthis.vDomScrollPosBottom += bottomRowHeight;\n\t\t\tthis.vDomBottom++;\n\t\t}\n\n\t\tbottomDiff = this.scrollTop - this.vDomScrollPosBottom;\n\n\t\tif (bottomRow.getHeight() > this.vDomWindowBuffer) {\n\t\t\tthis.vDomWindowBuffer = bottomRow.getHeight() * 2;\n\t\t}\n\n\t\tif (i < this.vDomMaxRenderChain && this.vDomBottom < this.displayRowsCount - 1 && bottomDiff >= (rows[this.vDomBottom + 1].getHeight() || this.vDomRowHeight)) {\n\t\t\tthis._addBottomRow(bottomDiff, i + 1);\n\t\t} else {\n\t\t\tthis._quickNormalizeRowHeight(this.vDomBottomNewRows);\n\t\t}\n\t}\n};\n\nRowManager.prototype._removeBottomRow = function (bottomDiff) {\n\tvar table = this.tableElement,\n\t bottomRow = this.getDisplayRows()[this.vDomBottom],\n\t bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;\n\n\tif (bottomDiff >= bottomRowHeight) {\n\n\t\tvar rowEl = bottomRow.getElement();\n\n\t\tif (rowEl.parentNode) {\n\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t}\n\n\t\tthis.vDomBottomPad += bottomRowHeight;\n\n\t\tif (this.vDomBottomPad < 0) {\n\t\t\tthis.vDomBottomPad = 0;\n\t\t}\n\n\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\n\t\tthis.vDomScrollPosBottom -= bottomRowHeight;\n\t\tthis.vDomBottom--;\n\n\t\tbottomDiff = -(this.scrollTop - this.vDomScrollPosBottom);\n\n\t\tthis._removeBottomRow(bottomDiff);\n\t}\n};\n\nRowManager.prototype._quickNormalizeRowHeight = function (rows) {\n\trows.forEach(function (row) {\n\t\trow.calcHeight();\n\t});\n\n\trows.forEach(function (row) {\n\t\trow.setCellHeight();\n\t});\n\n\trows.length = 0;\n};\n\n//normalize height of active rows\nRowManager.prototype.normalizeHeight = function () {\n\tthis.activeRows.forEach(function (row) {\n\t\trow.normalizeHeight();\n\t});\n};\n\n//adjust the height of the table holder to fit in the Tabulator element\nRowManager.prototype.adjustTableSize = function () {\n\tvar initialHeight = this.element.clientHeight,\n\t modExists;\n\n\tif (this.renderMode === \"virtual\") {\n\n\t\tvar otherHeight = Math.floor(this.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0));\n\n\t\tif (this.fixedHeight) {\n\t\t\tthis.element.style.minHeight = \"calc(100% - \" + otherHeight + \"px)\";\n\t\t\tthis.element.style.height = \"calc(100% - \" + otherHeight + \"px)\";\n\t\t\tthis.element.style.maxHeight = \"calc(100% - \" + otherHeight + \"px)\";\n\t\t} else {\n\t\t\tthis.element.style.height = \"\";\n\t\t\tthis.element.style.height = this.table.element.clientHeight - otherHeight + \"px\";\n\t\t\tthis.element.scrollTop = this.scrollTop;\n\t\t}\n\n\t\tthis.height = this.element.clientHeight;\n\t\tthis.vDomWindowBuffer = this.table.options.virtualDomBuffer || this.height;\n\n\t\t//check if the table has changed size when dealing with variable height tables\n\t\tif (!this.fixedHeight && initialHeight != this.element.clientHeight) {\n\t\t\tmodExists = this.table.modExists(\"resizeTable\");\n\n\t\t\tif (modExists && !this.table.modules.resizeTable.autoResize || !modExists) {\n\t\t\t\tthis.redraw();\n\t\t\t}\n\t\t}\n\t}\n};\n\n//renitialize all rows\nRowManager.prototype.reinitialize = function () {\n\tthis.rows.forEach(function (row) {\n\t\trow.reinitialize(true);\n\t});\n};\n\n//prevent table from being redrawn\nRowManager.prototype.blockRedraw = function () {\n\tthis.redrawBlock = true;\n\tthis.redrawBlockRestoreConfig = false;\n};\n\n//restore table redrawing\nRowManager.prototype.restoreRedraw = function () {\n\tthis.redrawBlock = false;\n\n\tif (this.redrawBlockRestoreConfig) {\n\t\tthis.refreshActiveData(this.redrawBlockRestoreConfig.stage, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition);\n\n\t\tthis.redrawBlockRestoreConfig = false;\n\t} else {\n\t\tif (this.redrawBlockRederInPosition) {\n\t\t\tthis.reRenderInPosition();\n\t\t}\n\t}\n\n\tthis.redrawBlockRederInPosition = false;\n};\n\n//redraw table\nRowManager.prototype.redraw = function (force) {\n\tvar pos = 0,\n\t left = this.scrollLeft;\n\n\tthis.adjustTableSize();\n\n\tthis.table.tableWidth = this.table.element.clientWidth;\n\n\tif (!force) {\n\t\tif (this.renderMode == \"classic\") {\n\n\t\t\tif (this.table.options.groupBy) {\n\t\t\t\tthis.refreshActiveData(\"group\", false, false);\n\t\t\t} else {\n\t\t\t\tthis._simpleRender();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.reRenderInPosition();\n\t\t\tthis.scrollHorizontal(left);\n\t\t}\n\n\t\tif (!this.displayRowsCount) {\n\t\t\tif (this.table.options.placeholder) {\n\t\t\t\tthis.getElement().appendChild(this.table.options.placeholder);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tthis.renderTable();\n\t}\n};\n\nRowManager.prototype.resetScroll = function () {\n\tthis.element.scrollLeft = 0;\n\tthis.element.scrollTop = 0;\n\n\tif (this.table.browser === \"ie\") {\n\t\tvar event = document.createEvent(\"Event\");\n\t\tevent.initEvent(\"scroll\", false, true);\n\t\tthis.element.dispatchEvent(event);\n\t} else {\n\t\tthis.element.dispatchEvent(new Event('scroll'));\n\t}\n};\n\nvar VDomHoz = function VDomHoz(table) {\n\tthis.table = table;\n\n\tthis.element = this.table.rowManager.tableElement;\n\tthis.holderEl = this.table.rowManager.element;\n\n\tthis.leftCol = 0;\n\tthis.rightCol = 0;\n\tthis.scrollLeft = 0;\n\n\tthis.vDomScrollPosLeft = 0;\n\tthis.vDomScrollPosRight = 0;\n\n\tthis.vDomPadLeft = 0;\n\tthis.vDomPadRight = 0;\n\n\tthis.fitDataColAvg = 0;\n\n\tthis.window = 200; //pixel margin to make column visible before it is shown on screen\n\n\tthis.initialized = false;\n\n\tthis.columns = [];\n\n\tif (this.compatabilityCheck()) {\n\t\tthis.initialize();\n\t}\n};\n\nVDomHoz.prototype.compatabilityCheck = function () {\n\tvar options = this.table.options,\n\t frozen = false,\n\t ok = true;\n\n\tif (options.layout == \"fitDataTable\") {\n\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with fitDataTable layout mode\");\n\t\tok = false;\n\t}\n\n\tif (options.responsiveLayout) {\n\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with responsive columns\");\n\t\tok = false;\n\t}\n\n\tif (this.table.rtl) {\n\t\tconsole.warn(\"Horizontal Vitrual DOM is not currently compatible with RTL text direction\");\n\t\tok = false;\n\t}\n\n\t// if(options.rowFormatter){\n\t// \tconsole.warn(\"Horizontal Vitrual DOM is not compatible with row formatters\");\n\t// \tok = false;\n\t// }\n\n\tif (options.columns) {\n\t\tfrozen = options.columns.find(function (col) {\n\t\t\treturn col.frozen;\n\t\t});\n\n\t\tif (frozen) {\n\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with frozen columns\");\n\t\t\tok = false;\n\t\t}\n\t}\n\n\tif (!ok) {\n\t\toptions.virtualDomHoz = false;\n\t}\n\n\treturn ok;\n};\n\nVDomHoz.prototype.initialize = function () {\n\tvar _this17 = this;\n\n\tthis.holderEl.addEventListener(\"scroll\", function () {\n\t\tvar left = _this17.holderEl.scrollLeft;\n\n\t\tif (_this17.scrollLeft != left) {\n\t\t\t_this17.scrollLeft = left;\n\t\t\t_this17.scroll(left - (_this17.vDomScrollPosLeft + _this17.window));\n\t\t}\n\t});\n};\n\nVDomHoz.prototype.deinitialize = function () {\n\tthis.initialized = false;\n};\n\nVDomHoz.prototype.clear = function () {\n\tthis.columns = [];\n\n\tthis.leftCol = -1;\n\tthis.rightCol = 0;\n\n\tthis.vDomScrollPosLeft = 0;\n\tthis.vDomScrollPosRight = 0;\n\tthis.vDomPadLeft = 0;\n\tthis.vDomPadRight = 0;\n};\n\nVDomHoz.prototype.dataChange = function () {\n\tvar change = false,\n\t collsWidth = 0,\n\t colEnd = 0,\n\t group,\n\t row,\n\t rowEl;\n\n\tif (this.table.options.layout === \"fitData\") {\n\t\tthis.table.columnManager.columnsByIndex.forEach(function (column) {\n\t\t\tif (!column.definition.width && column.visible) {\n\t\t\t\tchange = true;\n\t\t\t}\n\t\t});\n\n\t\tif (change) {\n\t\t\tif (change && this.table.rowManager.getDisplayRows().length) {\n\t\t\t\t// this.table.vdomHoz.deinitialize();\n\n\t\t\t\tthis.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window;\n\n\t\t\t\tif (this.table.options.groupBy) {\n\t\t\t\t\tgroup = this.table.modules.groupRows.getGroups(false)[0];\n\n\t\t\t\t\trow = group.getRows(false)[0];\n\t\t\t\t} else {\n\t\t\t\t\trow = this.table.rowManager.getDisplayRows()[0];\n\t\t\t\t}\n\n\t\t\t\tif (row) {\n\n\t\t\t\t\trowEl = row.getElement();\n\n\t\t\t\t\trow.generateCells();\n\n\t\t\t\t\tthis.element.appendChild(rowEl);\n\n\t\t\t\t\tfor (var colEnd = 0; colEnd < row.cells.length; colEnd++) {\n\t\t\t\t\t\tvar cell = row.cells[colEnd];\n\t\t\t\t\t\trowEl.appendChild(cell.getElement());\n\n\t\t\t\t\t\tcell.column.reinitializeWidth();\n\n\t\t\t\t\t\tcollsWidth += cell.column.getWidth();\n\n\t\t\t\t\t\tif (collsWidth > this.vDomScrollPosRight) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\n\t\t\t\t\tthis.fitDataColAvg = Math.floor(collsWidth / (colEnd + 1));\n\n\t\t\t\t\tfor (colEnd; colEnd < this.table.columnManager.columnsByIndex.length; colEnd++) {\n\t\t\t\t\t\tthis.table.columnManager.columnsByIndex[colEnd].setWidth(this.fitDataColAvg);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.reinitialize(false, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (this.table.options.layout === \"fitColumns\") {\n\t\t\tthis.table.modules.layout.layout();\n\t\t\tthis.table.vdomHoz.reinitialize(false, true);\n\t\t}\n\t}\n};\n\nVDomHoz.prototype.fitDataLayoutOverride = function () {\n\tfor (var _i5 = this.leftCol; _i5 <= this.rightCol; _i5++) {\n\t\tthis.columns[_i5].reinitializeWidth();\n\t}\n};\n\nVDomHoz.prototype.reinitialize = function (update, blockRedraw) {\n\tvar _this18 = this;\n\n\tvar old = {\n\t\tcols: this.columns,\n\t\tleftCol: this.leftCol,\n\t\trightCol: this.rightCol\n\t};\n\n\tif (update && !this.initialized) {\n\t\treturn;\n\t}\n\n\tthis.clear();\n\n\tthis.scrollLeft = this.holderEl.scrollLeft;\n\n\tthis.vDomScrollPosLeft = this.scrollLeft - this.window;\n\tthis.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window;\n\n\tvar colPos = 0;\n\n\tthis.table.columnManager.columnsByIndex.forEach(function (column) {\n\t\tvar config = {};\n\n\t\tif (column.visible) {\n\t\t\tvar width = column.getWidth();\n\n\t\t\tconfig.leftPos = colPos;\n\t\t\tconfig.rightPos = colPos + width;\n\n\t\t\tif (colPos + width > _this18.vDomScrollPosLeft && colPos < _this18.vDomScrollPosRight) {\n\t\t\t\t//column is visible\n\n\t\t\t\tif (_this18.leftCol == -1) {\n\t\t\t\t\t_this18.leftCol = _this18.columns.length;\n\t\t\t\t\t_this18.vDomPadLeft = colPos;\n\t\t\t\t}\n\n\t\t\t\t_this18.rightCol = _this18.columns.length;\n\t\t\t} else {\n\t\t\t\t// column is hidden\n\t\t\t\tif (_this18.leftCol !== -1) {\n\t\t\t\t\t_this18.vDomPadRight += width;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_this18.columns.push(column);\n\n\t\t\tcolumn.modules.vdomHoz = config;\n\n\t\t\tcolPos += width;\n\t\t}\n\t});\n\n\tthis.element.style.paddingLeft = this.vDomPadLeft + \"px\";\n\tthis.element.style.paddingRight = this.vDomPadRight + \"px\";\n\n\tthis.initialized = true;\n\n\tif (!blockRedraw) {\n\t\tif (!update || this.reinitChanged(old)) {\n\t\t\tthis.renitializeRows();\n\t\t}\n\t}\n\n\tthis.holderEl.scrollLeft = this.scrollLeft;\n};\n\nVDomHoz.prototype.reinitChanged = function (old) {\n\tvar _this19 = this;\n\n\tvar match = true;\n\n\tif (old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol) {\n\t\treturn true;\n\t}\n\n\told.cols.forEach(function (col, i) {\n\t\tif (col !== _this19.columns[i]) {\n\t\t\tmatch = false;\n\t\t}\n\t});\n\n\treturn !match;\n};\n\nVDomHoz.prototype.renitializeRows = function () {\n\tvar _this20 = this;\n\n\tvar rows = this.table.rowManager.getVisibleRows();\n\trows.forEach(function (row) {\n\t\t_this20.reinitializeRow(row, true);\n\t});\n};\n\nVDomHoz.prototype.scroll = function (diff) {\n\tthis.vDomScrollPosLeft += diff;\n\tthis.vDomScrollPosRight += diff;\n\n\tif (diff > this.holderEl.clientWidth * .8) {\n\t\tthis.reinitialize();\n\t} else {\n\t\tif (diff > 0) {\n\t\t\t//scroll right\n\t\t\tthis.addColRight();\n\t\t\tthis.removeColLeft();\n\t\t} else {\n\t\t\t//scroll left\n\t\t\tthis.addColLeft();\n\t\t\tthis.removeColRight();\n\t\t}\n\t}\n};\n\nVDomHoz.prototype.colPositionAdjust = function (start, end, diff) {\n\tfor (var _i6 = start; _i6 < end; _i6++) {\n\t\tvar column = this.columns[_i6];\n\n\t\tcolumn.modules.vdomHoz.leftPos -= diff;\n\t\tcolumn.modules.vdomHoz.rightPos -= diff;\n\t}\n};\n\nVDomHoz.prototype.addColRight = function () {\n\tvar column = this.columns[this.rightCol + 1],\n\t rows,\n\t oldWidth,\n\t widthDiff;\n\n\tif (column && column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight) {\n\n\t\trows = this.table.rowManager.getVisibleRows();\n\n\t\trows.forEach(function (row) {\n\t\t\tif (row.type !== \"group\") {\n\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\trow.getElement().appendChild(cell.getElement());\n\t\t\t\tcell.cellRendered();\n\t\t\t}\n\t\t});\n\n\t\tif (this.fitDataColAvg) {\n\n\t\t\toldWidth = column.getWidth();\n\n\t\t\tif (oldWidth === this.fitDataColAvg) {\n\t\t\t\tcolumn.reinitializeWidth();\n\n\t\t\t\twidthDiff = oldWidth - column.getWidth();\n\n\t\t\t\tif (widthDiff) {\n\t\t\t\t\tcolumn.modules.vdomHoz.rightPos -= widthDiff;\n\t\t\t\t\tthis.colPositionAdjust(this.rightCol + 1, this.columns.length, widthDiff);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.rightCol++;\n\n\t\tif (this.rightCol >= this.columns.length - 1) {\n\t\t\tthis.vDomPadRight = 0;\n\t\t} else {\n\t\t\tthis.vDomPadRight -= column.getWidth();\n\t\t}\n\n\t\tthis.element.style.paddingRight = this.vDomPadRight + \"px\";\n\n\t\tthis.addColRight();\n\t}\n};\n\nVDomHoz.prototype.addColLeft = function () {\n\tvar column = this.columns[this.leftCol - 1],\n\t rows;\n\n\tif (column && column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft) {\n\t\tvar rows = this.table.rowManager.getVisibleRows();\n\n\t\trows.forEach(function (row) {\n\t\t\tif (row.type !== \"group\") {\n\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\trow.getElement().prepend(cell.getElement());\n\t\t\t\tcell.cellRendered();\n\t\t\t}\n\t\t});\n\n\t\tif (!this.leftCol) {\n\t\t\tthis.vDomPadLeft = 0;\n\t\t} else {\n\t\t\tthis.vDomPadLeft -= column.getWidth();\n\t\t}\n\n\t\tthis.element.style.paddingLeft = this.vDomPadLeft + \"px\";\n\n\t\tthis.leftCol--;\n\n\t\tthis.addColLeft();\n\t}\n};\n\nVDomHoz.prototype.removeColRight = function (column) {\n\tvar column = this.columns[this.rightCol],\n\t rows;\n\n\tif (column && column.modules.vdomHoz.leftPos > this.vDomScrollPosRight) {\n\t\trows = this.table.rowManager.getVisibleRows();\n\n\t\tcolumn.modules.vdomHoz.visible = false;\n\n\t\trows.forEach(function (row) {\n\t\t\tif (row.type !== \"group\") {\n\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\trow.getElement().removeChild(cell.getElement());\n\t\t\t}\n\t\t});\n\n\t\tthis.vDomPadRight += column.getWidth();\n\t\tthis.element.style.paddingRight = this.vDomPadRight + \"px\";\n\n\t\tthis.rightCol--;\n\n\t\tthis.removeColRight();\n\t}\n};\n\nVDomHoz.prototype.removeColLeft = function () {\n\tvar column = this.columns[this.leftCol],\n\t rows;\n\n\tif (column && column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft) {\n\n\t\trows = this.table.rowManager.getVisibleRows();\n\n\t\trows.forEach(function (row) {\n\t\t\tif (row.type !== \"group\") {\n\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\trow.getElement().removeChild(cell.getElement());\n\t\t\t}\n\t\t});\n\n\t\tthis.vDomPadLeft += column.getWidth();\n\t\tthis.element.style.paddingLeft = this.vDomPadLeft + \"px\";\n\n\t\tthis.leftCol++;\n\n\t\tthis.removeColLeft();\n\t}\n};\n\nVDomHoz.prototype.initializeRow = function (row) {\n\tif (row.type !== \"group\") {\n\t\trow.modules.vdomHoz = {\n\t\t\tleftCol: this.leftCol,\n\t\t\trightCol: this.rightCol\n\t\t};\n\n\t\tfor (var _i7 = this.leftCol; _i7 <= this.rightCol; _i7++) {\n\t\t\tvar column = this.columns[_i7];\n\n\t\t\tif (column && column.visible) {\n\t\t\t\tvar cell = row.getCell(column);\n\n\t\t\t\trow.getElement().appendChild(cell.getElement());\n\t\t\t\tcell.cellRendered();\n\t\t\t}\n\t\t}\n\t}\n};\n\nVDomHoz.prototype.reinitializeRow = function (row, force) {\n\tif (row.type !== \"group\") {\n\t\tif (force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol) {\n\t\t\tvar rowEl = row.getElement();\n\t\t\twhile (rowEl.firstChild) {\n\t\t\t\trowEl.removeChild(rowEl.firstChild);\n\t\t\t}this.initializeRow(row);\n\t\t}\n\t}\n};\n//public row object\nvar RowComponent = function RowComponent(row) {\n\tthis._row = row;\n};\n\nRowComponent.prototype.getData = function (transform) {\n\treturn this._row.getData(transform);\n};\n\nRowComponent.prototype.getElement = function () {\n\treturn this._row.getElement();\n};\n\nRowComponent.prototype.getCells = function () {\n\tvar cells = [];\n\n\tthis._row.getCells().forEach(function (cell) {\n\t\tcells.push(cell.getComponent());\n\t});\n\n\treturn cells;\n};\n\nRowComponent.prototype.getCell = function (column) {\n\tvar cell = this._row.getCell(column);\n\treturn cell ? cell.getComponent() : false;\n};\n\nRowComponent.prototype.getIndex = function () {\n\treturn this._row.getData(\"data\")[this._row.table.options.index];\n};\n\nRowComponent.prototype.getPosition = function (active) {\n\treturn this._row.table.rowManager.getRowPosition(this._row, active);\n};\n\nRowComponent.prototype.delete = function () {\n\treturn this._row.delete();\n};\n\nRowComponent.prototype.scrollTo = function () {\n\treturn this._row.table.rowManager.scrollToRow(this._row);\n};\n\nRowComponent.prototype.pageTo = function () {\n\tif (this._row.table.modExists(\"page\", true)) {\n\t\treturn this._row.table.modules.page.setPageToRow(this._row);\n\t}\n};\n\nRowComponent.prototype.move = function (to, after) {\n\tthis._row.moveToRow(to, after);\n};\n\nRowComponent.prototype.update = function (data) {\n\treturn this._row.updateData(data);\n};\n\nRowComponent.prototype.normalizeHeight = function () {\n\tthis._row.normalizeHeight(true);\n};\n\nRowComponent.prototype.select = function () {\n\tthis._row.table.modules.selectRow.selectRows(this._row);\n};\n\nRowComponent.prototype.deselect = function () {\n\tthis._row.table.modules.selectRow.deselectRows(this._row);\n};\n\nRowComponent.prototype.toggleSelect = function () {\n\tthis._row.table.modules.selectRow.toggleRow(this._row);\n};\n\nRowComponent.prototype.isSelected = function () {\n\treturn this._row.table.modules.selectRow.isRowSelected(this._row);\n};\n\nRowComponent.prototype._getSelf = function () {\n\treturn this._row;\n};\n\nRowComponent.prototype.validate = function () {\n\treturn this._row.validate();\n};\n\nRowComponent.prototype.freeze = function () {\n\tif (this._row.table.modExists(\"frozenRows\", true)) {\n\t\tthis._row.table.modules.frozenRows.freezeRow(this._row);\n\t}\n};\n\nRowComponent.prototype.unfreeze = function () {\n\tif (this._row.table.modExists(\"frozenRows\", true)) {\n\t\tthis._row.table.modules.frozenRows.unfreezeRow(this._row);\n\t}\n};\n\nRowComponent.prototype.isFrozen = function () {\n\tif (this._row.table.modExists(\"frozenRows\", true)) {\n\t\tvar index = this._row.table.modules.frozenRows.rows.indexOf(this._row);\n\t\treturn index > -1;\n\t}\n\n\treturn false;\n};\n\nRowComponent.prototype.treeCollapse = function () {\n\tif (this._row.table.modExists(\"dataTree\", true)) {\n\t\tthis._row.table.modules.dataTree.collapseRow(this._row);\n\t}\n};\n\nRowComponent.prototype.treeExpand = function () {\n\tif (this._row.table.modExists(\"dataTree\", true)) {\n\t\tthis._row.table.modules.dataTree.expandRow(this._row);\n\t}\n};\n\nRowComponent.prototype.treeToggle = function () {\n\tif (this._row.table.modExists(\"dataTree\", true)) {\n\t\tthis._row.table.modules.dataTree.toggleRow(this._row);\n\t}\n};\n\nRowComponent.prototype.getTreeParent = function () {\n\tif (this._row.table.modExists(\"dataTree\", true)) {\n\t\treturn this._row.table.modules.dataTree.getTreeParent(this._row);\n\t}\n\n\treturn false;\n};\n\nRowComponent.prototype.getTreeChildren = function () {\n\tif (this._row.table.modExists(\"dataTree\", true)) {\n\t\treturn this._row.table.modules.dataTree.getTreeChildren(this._row, true);\n\t}\n\n\treturn false;\n};\n\nRowComponent.prototype.addTreeChild = function (data, pos, index) {\n\tif (this._row.table.modExists(\"dataTree\", true)) {\n\t\treturn this._row.table.modules.dataTree.addTreeChildRow(this._row, data, pos, index);\n\t}\n\n\treturn false;\n};\n\nRowComponent.prototype.reformat = function () {\n\treturn this._row.reinitialize();\n};\n\nRowComponent.prototype.getGroup = function () {\n\treturn this._row.getGroup().getComponent();\n};\n\nRowComponent.prototype.getTable = function () {\n\treturn this._row.table;\n};\n\nRowComponent.prototype.getNextRow = function () {\n\tvar row = this._row.nextRow();\n\treturn row ? row.getComponent() : row;\n};\n\nRowComponent.prototype.getPrevRow = function () {\n\tvar row = this._row.prevRow();\n\treturn row ? row.getComponent() : row;\n};\n\nvar Row = function Row(data, parent) {\n\tvar type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"row\";\n\n\tthis.table = parent.table;\n\tthis.parent = parent;\n\tthis.data = {};\n\tthis.type = type; //type of element\n\tthis.element = false;\n\tthis.modules = {}; //hold module variables;\n\tthis.cells = [];\n\tthis.height = 0; //hold element height\n\tthis.heightStyled = \"\"; //hold element height prestyled to improve render efficiency\n\tthis.manualHeight = false; //user has manually set row height\n\tthis.outerHeight = 0; //holde lements outer height\n\tthis.initialized = false; //element has been rendered\n\tthis.heightInitialized = false; //element has resized cells to fit\n\n\tthis.component = null;\n\n\tthis.created = false;\n\n\tthis.setData(data);\n};\n\nRow.prototype.create = function () {\n\tif (!this.created) {\n\t\tthis.created = true;\n\t\tthis.generateElement();\n\t}\n};\n\nRow.prototype.createElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-row\");\n\tel.setAttribute(\"role\", \"row\");\n\n\tthis.element = el;\n};\n\nRow.prototype.getElement = function () {\n\tthis.create();\n\treturn this.element;\n};\n\nRow.prototype.detachElement = function () {\n\tif (this.element && this.element.parentNode) {\n\t\tthis.element.parentNode.removeChild(this.element);\n\t}\n};\n\nRow.prototype.generateElement = function () {\n\tvar self = this,\n\t dblTap,\n\t tapHold,\n\t tap;\n\n\tthis.createElement();\n\n\t//set row selection characteristics\n\tif (self.table.options.selectable !== false && self.table.modExists(\"selectRow\")) {\n\t\tself.table.modules.selectRow.initializeRow(this);\n\t}\n\n\t//setup movable rows\n\tif (self.table.options.movableRows !== false && self.table.modExists(\"moveRow\")) {\n\t\tself.table.modules.moveRow.initializeRow(this);\n\t}\n\n\t//setup data tree\n\tif (self.table.options.dataTree !== false && self.table.modExists(\"dataTree\")) {\n\t\tself.table.modules.dataTree.initializeRow(this);\n\t}\n\n\t//setup column colapse container\n\tif (self.table.options.responsiveLayout === \"collapse\" && self.table.modExists(\"responsiveLayout\")) {\n\t\tself.table.modules.responsiveLayout.initializeRow(this);\n\t}\n\n\t//set column menu\n\tif ((self.table.options.rowContextMenu || self.table.options.rowClickMenu) && this.table.modExists(\"menu\")) {\n\t\tself.table.modules.menu.initializeRow(this);\n\t}\n\n\t//handle row click events\n\tif (self.table.options.rowClick) {\n\t\tself.element.addEventListener(\"click\", function (e) {\n\t\t\tself.table.options.rowClick(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.table.options.rowDblClick) {\n\t\tself.element.addEventListener(\"dblclick\", function (e) {\n\t\t\tself.table.options.rowDblClick(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.table.options.rowContext) {\n\t\tself.element.addEventListener(\"contextmenu\", function (e) {\n\t\t\tself.table.options.rowContext(e, self.getComponent());\n\t\t});\n\t}\n\n\t//handle mouse events\n\tif (self.table.options.rowMouseEnter) {\n\t\tself.element.addEventListener(\"mouseenter\", function (e) {\n\t\t\tself.table.options.rowMouseEnter(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.table.options.rowMouseLeave) {\n\t\tself.element.addEventListener(\"mouseleave\", function (e) {\n\t\t\tself.table.options.rowMouseLeave(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.table.options.rowMouseOver) {\n\t\tself.element.addEventListener(\"mouseover\", function (e) {\n\t\t\tself.table.options.rowMouseOver(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.table.options.rowMouseOut) {\n\t\tself.element.addEventListener(\"mouseout\", function (e) {\n\t\t\tself.table.options.rowMouseOut(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.table.options.rowMouseMove) {\n\t\tself.element.addEventListener(\"mousemove\", function (e) {\n\t\t\tself.table.options.rowMouseMove(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.table.options.rowTap) {\n\n\t\ttap = false;\n\n\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\t\t\ttap = true;\n\t\t}, { passive: true });\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\t\t\tif (tap) {\n\t\t\t\tself.table.options.rowTap(e, self.getComponent());\n\t\t\t}\n\n\t\t\ttap = false;\n\t\t});\n\t}\n\n\tif (self.table.options.rowDblTap) {\n\n\t\tdblTap = null;\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\n\t\t\tif (dblTap) {\n\t\t\t\tclearTimeout(dblTap);\n\t\t\t\tdblTap = null;\n\n\t\t\t\tself.table.options.rowDblTap(e, self.getComponent());\n\t\t\t} else {\n\n\t\t\t\tdblTap = setTimeout(function () {\n\t\t\t\t\tclearTimeout(dblTap);\n\t\t\t\t\tdblTap = null;\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (self.table.options.rowTapHold) {\n\n\t\ttapHold = null;\n\n\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\n\t\t\ttapHold = setTimeout(function () {\n\t\t\t\tclearTimeout(tapHold);\n\t\t\t\ttapHold = null;\n\t\t\t\ttap = false;\n\t\t\t\tself.table.options.rowTapHold(e, self.getComponent());\n\t\t\t}, 1000);\n\t\t}, { passive: true });\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\t\t\ttapHold = null;\n\t\t});\n\t}\n};\n\nRow.prototype.generateCells = function () {\n\tthis.cells = this.table.columnManager.generateCells(this);\n};\n\n//functions to setup on first render\nRow.prototype.initialize = function (force) {\n\tvar _this21 = this;\n\n\tthis.create();\n\n\tif (!this.initialized || force) {\n\n\t\tthis.deleteCells();\n\n\t\twhile (this.element.firstChild) {\n\t\t\tthis.element.removeChild(this.element.firstChild);\n\t\t} //handle frozen cells\n\t\tif (this.table.modExists(\"frozenColumns\")) {\n\t\t\tthis.table.modules.frozenColumns.layoutRow(this);\n\t\t}\n\n\t\tthis.generateCells();\n\n\t\tif (this.table.options.virtualDomHoz && this.table.vdomHoz.initialized) {\n\t\t\tthis.table.vdomHoz.initializeRow(this);\n\t\t} else {\n\t\t\tthis.cells.forEach(function (cell) {\n\t\t\t\t_this21.element.appendChild(cell.getElement());\n\t\t\t\tcell.cellRendered();\n\t\t\t});\n\t\t}\n\n\t\tif (force) {\n\t\t\tthis.normalizeHeight();\n\t\t}\n\n\t\t//setup movable rows\n\t\tif (this.table.options.dataTree && this.table.modExists(\"dataTree\")) {\n\t\t\tthis.table.modules.dataTree.layoutRow(this);\n\t\t}\n\n\t\t//setup column colapse container\n\t\tif (this.table.options.responsiveLayout === \"collapse\" && this.table.modExists(\"responsiveLayout\")) {\n\t\t\tthis.table.modules.responsiveLayout.layoutRow(this);\n\t\t}\n\n\t\tif (this.table.options.rowFormatter) {\n\t\t\tthis.table.options.rowFormatter(this.getComponent());\n\t\t}\n\n\t\t//set resizable handles\n\t\tif (this.table.options.resizableRows && this.table.modExists(\"resizeRows\")) {\n\t\t\tthis.table.modules.resizeRows.initializeRow(this);\n\t\t}\n\n\t\tthis.initialized = true;\n\t} else {\n\t\tif (this.table.options.virtualDomHoz) {\n\t\t\tthis.table.vdomHoz.reinitializeRow(this);\n\t\t}\n\t}\n};\n\nRow.prototype.reinitializeHeight = function () {\n\tthis.heightInitialized = false;\n\n\tif (this.element && this.element.offsetParent !== null) {\n\t\tthis.normalizeHeight(true);\n\t}\n};\n\nRow.prototype.reinitialize = function (children) {\n\tthis.initialized = false;\n\tthis.heightInitialized = false;\n\n\tif (!this.manualHeight) {\n\t\tthis.height = 0;\n\t\tthis.heightStyled = \"\";\n\t}\n\n\tif (this.element && this.element.offsetParent !== null) {\n\t\tthis.initialize(true);\n\t}\n\n\tif (this.table.options.dataTree && this.table.modExists(\"dataTree\", true)) {\n\t\tthis.table.modules.dataTree.getTreeChildren(this, false, true).forEach(function (child) {\n\t\t\tchild.reinitialize(true);\n\t\t});\n\t}\n};\n\n//get heights when doing bulk row style calcs in virtual DOM\nRow.prototype.calcHeight = function (force) {\n\n\tvar maxHeight = 0,\n\t minHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;\n\n\tthis.cells.forEach(function (cell) {\n\t\tvar height = cell.getHeight();\n\t\tif (height > maxHeight) {\n\t\t\tmaxHeight = height;\n\t\t}\n\t});\n\n\tif (force) {\n\t\tthis.height = Math.max(maxHeight, minHeight);\n\t} else {\n\t\tthis.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);\n\t}\n\n\tthis.heightStyled = this.height ? this.height + \"px\" : \"\";\n\tthis.outerHeight = this.element.offsetHeight;\n};\n\n//set of cells\nRow.prototype.setCellHeight = function () {\n\tthis.cells.forEach(function (cell) {\n\t\tcell.setHeight();\n\t});\n\n\tthis.heightInitialized = true;\n};\n\nRow.prototype.clearCellHeight = function () {\n\tthis.cells.forEach(function (cell) {\n\t\tcell.clearHeight();\n\t});\n};\n\n//normalize the height of elements in the row\nRow.prototype.normalizeHeight = function (force) {\n\n\tif (force) {\n\t\tthis.clearCellHeight();\n\t}\n\n\tthis.calcHeight(force);\n\n\tthis.setCellHeight();\n};\n\n// Row.prototype.setHeight = function(height){\n// \tthis.height = height;\n\n// \tthis.setCellHeight();\n// };\n\n//set height of rows\nRow.prototype.setHeight = function (height, force) {\n\tif (this.height != height || force) {\n\n\t\tthis.manualHeight = true;\n\n\t\tthis.height = height;\n\t\tthis.heightStyled = height ? height + \"px\" : \"\";\n\n\t\tthis.setCellHeight();\n\n\t\t// this.outerHeight = this.element.outerHeight();\n\t\tthis.outerHeight = this.element.offsetHeight;\n\t}\n};\n\n//return rows outer height\nRow.prototype.getHeight = function () {\n\treturn this.outerHeight;\n};\n\n//return rows outer Width\nRow.prototype.getWidth = function () {\n\treturn this.element.offsetWidth;\n};\n\n//////////////// Cell Management /////////////////\n\nRow.prototype.deleteCell = function (cell) {\n\tvar index = this.cells.indexOf(cell);\n\n\tif (index > -1) {\n\t\tthis.cells.splice(index, 1);\n\t}\n};\n\n//////////////// Data Management /////////////////\n\nRow.prototype.setData = function (data) {\n\tif (this.table.modExists(\"mutator\")) {\n\t\tdata = this.table.modules.mutator.transformRow(data, \"data\");\n\t}\n\n\tthis.data = data;\n\n\tif (this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)) {\n\t\tthis.table.modules.reactiveData.watchRow(this);\n\t}\n};\n\n//update the rows data\nRow.prototype.updateData = function (updatedData) {\n\tvar _this22 = this;\n\n\tvar visible = this.element && Tabulator.prototype.helpers.elVisible(this.element),\n\t tempData = {},\n\t newRowData;\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\tif (typeof updatedData === \"string\") {\n\t\t\tupdatedData = JSON.parse(updatedData);\n\t\t}\n\n\t\tif (_this22.table.options.reactiveData && _this22.table.modExists(\"reactiveData\", true)) {\n\t\t\t_this22.table.modules.reactiveData.block();\n\t\t}\n\n\t\t//mutate incomming data if needed\n\t\tif (_this22.table.modExists(\"mutator\")) {\n\n\t\t\ttempData = Object.assign(tempData, _this22.data);\n\t\t\ttempData = Object.assign(tempData, updatedData);\n\n\t\t\tnewRowData = _this22.table.modules.mutator.transformRow(tempData, \"data\", updatedData);\n\t\t} else {\n\t\t\tnewRowData = updatedData;\n\t\t}\n\n\t\t//set data\n\t\tfor (var attrname in newRowData) {\n\t\t\t_this22.data[attrname] = newRowData[attrname];\n\t\t}\n\n\t\tif (_this22.table.options.reactiveData && _this22.table.modExists(\"reactiveData\", true)) {\n\t\t\t_this22.table.modules.reactiveData.unblock();\n\t\t}\n\n\t\t//update affected cells only\n\t\tfor (var attrname in updatedData) {\n\n\t\t\tvar columns = _this22.table.columnManager.getColumnsByFieldRoot(attrname);\n\n\t\t\tcolumns.forEach(function (column) {\n\t\t\t\tvar cell = _this22.getCell(column.getField());\n\n\t\t\t\tif (cell) {\n\t\t\t\t\tvar value = column.getFieldValue(newRowData);\n\t\t\t\t\tif (cell.getValue() != value) {\n\t\t\t\t\t\tcell.setValueProcessData(value);\n\n\t\t\t\t\t\tif (visible) {\n\t\t\t\t\t\t\tcell.cellRendered();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (_this22.table.options.groupUpdateOnCellEdit && _this22.table.options.groupBy && _this22.table.modExists(\"groupRows\")) {\n\t\t\t_this22.table.modules.groupRows.reassignRowToGroup(_this22.row);\n\t\t}\n\n\t\t//Partial reinitialization if visible\n\t\tif (visible) {\n\t\t\t_this22.normalizeHeight(true);\n\n\t\t\tif (_this22.table.options.rowFormatter) {\n\t\t\t\t_this22.table.options.rowFormatter(_this22.getComponent());\n\t\t\t}\n\t\t} else {\n\t\t\t_this22.initialized = false;\n\t\t\t_this22.height = 0;\n\t\t\t_this22.heightStyled = \"\";\n\t\t}\n\n\t\tif (_this22.table.options.dataTree !== false && _this22.table.modExists(\"dataTree\") && _this22.table.modules.dataTree.redrawNeeded(updatedData)) {\n\t\t\t_this22.table.modules.dataTree.initializeRow(_this22);\n\n\t\t\tif (visible) {\n\t\t\t\t_this22.table.modules.dataTree.layoutRow(_this22);\n\t\t\t\t_this22.table.rowManager.refreshActiveData(\"tree\", false, true);\n\t\t\t}\n\t\t}\n\n\t\t//this.reinitialize();\n\n\t\t_this22.table.options.rowUpdated.call(_this22.table, _this22.getComponent());\n\n\t\tif (_this22.table.options.dataChanged) {\n\t\t\t_this22.table.options.dataChanged.call(_this22.table, _this22.table.rowManager.getData());\n\t\t}\n\n\t\tresolve();\n\t});\n};\n\nRow.prototype.getData = function (transform) {\n\tif (transform) {\n\t\tif (this.table.modExists(\"accessor\")) {\n\t\t\treturn this.table.modules.accessor.transformRow(this, transform);\n\t\t}\n\t}\n\n\treturn this.data;\n};\n\nRow.prototype.getCell = function (column) {\n\tvar match = false;\n\n\tcolumn = this.table.columnManager.findColumn(column);\n\n\tmatch = this.cells.find(function (cell) {\n\t\treturn cell.column === column;\n\t});\n\n\treturn match;\n};\n\nRow.prototype.getCellIndex = function (findCell) {\n\treturn this.cells.findIndex(function (cell) {\n\t\treturn cell === findCell;\n\t});\n};\n\nRow.prototype.findNextEditableCell = function (index) {\n\tvar nextCell = false;\n\n\tif (index < this.cells.length - 1) {\n\t\tfor (var i = index + 1; i < this.cells.length; i++) {\n\t\t\tvar cell = this.cells[i];\n\n\t\t\tif (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) {\n\t\t\t\tvar allowEdit = true;\n\n\t\t\t\tif (typeof cell.column.modules.edit.check == \"function\") {\n\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\n\t\t\t\t}\n\n\t\t\t\tif (allowEdit) {\n\t\t\t\t\tnextCell = cell;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nextCell;\n};\n\nRow.prototype.findPrevEditableCell = function (index) {\n\tvar prevCell = false;\n\n\tif (index > 0) {\n\t\tfor (var i = index - 1; i >= 0; i--) {\n\t\t\tvar cell = this.cells[i],\n\t\t\t allowEdit = true;\n\n\t\t\tif (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) {\n\t\t\t\tif (typeof cell.column.modules.edit.check == \"function\") {\n\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\n\t\t\t\t}\n\n\t\t\t\tif (allowEdit) {\n\t\t\t\t\tprevCell = cell;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn prevCell;\n};\n\nRow.prototype.getCells = function () {\n\treturn this.cells;\n};\n\nRow.prototype.nextRow = function () {\n\tvar row = this.table.rowManager.nextDisplayRow(this, true);\n\treturn row || false;\n};\n\nRow.prototype.prevRow = function () {\n\tvar row = this.table.rowManager.prevDisplayRow(this, true);\n\treturn row || false;\n};\n\nRow.prototype.moveToRow = function (to, before) {\n\tvar toRow = this.table.rowManager.findRow(to);\n\n\tif (toRow) {\n\t\tthis.table.rowManager.moveRowActual(this, toRow, !before);\n\t\tthis.table.rowManager.refreshActiveData(\"display\", false, true);\n\t} else {\n\t\tconsole.warn(\"Move Error - No matching row found:\", to);\n\t}\n};\n\nRow.prototype.validate = function () {\n\tvar invalid = [];\n\n\tthis.cells.forEach(function (cell) {\n\t\tif (!cell.validate()) {\n\t\t\tinvalid.push(cell.getComponent());\n\t\t}\n\t});\n\n\treturn invalid.length ? invalid : true;\n};\n\n///////////////////// Actions /////////////////////\n\nRow.prototype.delete = function () {\n\tvar _this23 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar index, rows;\n\n\t\tif (_this23.table.options.history && _this23.table.modExists(\"history\")) {\n\n\t\t\tif (_this23.table.options.groupBy && _this23.table.modExists(\"groupRows\")) {\n\t\t\t\trows = _this23.getGroup().rows;\n\t\t\t\tindex = rows.indexOf(_this23);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tindex = rows[index - 1];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tindex = _this23.table.rowManager.getRowIndex(_this23);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tindex = _this23.table.rowManager.rows[index - 1];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_this23.table.modules.history.action(\"rowDelete\", _this23, { data: _this23.getData(), pos: !index, index: index });\n\t\t}\n\n\t\t_this23.deleteActual();\n\n\t\tresolve();\n\t});\n};\n\nRow.prototype.deleteActual = function (blockRedraw) {\n\tvar index = this.table.rowManager.getRowIndex(this);\n\n\tthis.detatchModules();\n\n\t// if(this.table.options.dataTree && this.table.modExists(\"dataTree\")){\n\t// \tthis.table.modules.dataTree.collapseRow(this, true);\n\t// }\n\n\t//remove any reactive data watchers from row object\n\tif (this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)) {}\n\t// this.table.modules.reactiveData.unwatchRow(this);\n\n\n\t//remove from group\n\tif (this.modules.group) {\n\t\tthis.modules.group.removeRow(this);\n\t}\n\n\tthis.table.rowManager.deleteRow(this, blockRedraw);\n\n\tthis.deleteCells();\n\n\tthis.initialized = false;\n\tthis.heightInitialized = false;\n\tthis.element = false;\n\n\tif (this.table.options.dataTree && this.table.modExists(\"dataTree\", true)) {\n\t\tthis.table.modules.dataTree.rowDelete(this);\n\t}\n\n\t//recalc column calculations if present\n\tif (this.table.modExists(\"columnCalcs\")) {\n\t\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\t\tthis.table.modules.columnCalcs.recalcRowGroup(this);\n\t\t} else {\n\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\n\t\t}\n\t}\n};\n\nRow.prototype.detatchModules = function () {\n\t//deselect row if it is selected\n\tif (this.table.modExists(\"selectRow\")) {\n\t\tthis.table.modules.selectRow._deselectRow(this, true);\n\t}\n\n\t//cancel edit if row is currently being edited\n\tif (this.table.modExists(\"edit\")) {\n\t\tif (this.table.modules.edit.currentCell.row === this) {\n\t\t\tthis.table.modules.edit.cancelEdit();\n\t\t}\n\t}\n\n\tif (this.table.modExists(\"frozenRows\")) {\n\t\tthis.table.modules.frozenRows.detachRow(this);\n\t}\n};\n\nRow.prototype.deleteCells = function () {\n\tvar cellCount = this.cells.length;\n\n\tfor (var _i8 = 0; _i8 < cellCount; _i8++) {\n\t\tthis.cells[0].delete();\n\t}\n};\n\nRow.prototype.wipe = function () {\n\tthis.detatchModules();\n\tthis.deleteCells();\n\n\tif (this.element) {\n\t\twhile (this.element.firstChild) {\n\t\t\tthis.element.removeChild(this.element.firstChild);\n\t\t}if (this.element.parentNode) {\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\t}\n\n\tthis.element = false;\n\tthis.modules = {};\n};\n\nRow.prototype.getGroup = function () {\n\treturn this.modules.group || false;\n};\n\n//////////////// Object Generation /////////////////\nRow.prototype.getComponent = function () {\n\tif (!this.component) {\n\t\tthis.component = new RowComponent(this);\n\t}\n\n\treturn this.component;\n};\n\n//public row object\nvar CellComponent = function CellComponent(cell) {\n\tthis._cell = cell;\n};\n\nCellComponent.prototype.getValue = function () {\n\treturn this._cell.getValue();\n};\n\nCellComponent.prototype.getOldValue = function () {\n\treturn this._cell.getOldValue();\n};\n\nCellComponent.prototype.getInitialValue = function () {\n\treturn this._cell.initialValue;\n};\n\nCellComponent.prototype.getElement = function () {\n\treturn this._cell.getElement();\n};\n\nCellComponent.prototype.getRow = function () {\n\treturn this._cell.row.getComponent();\n};\n\nCellComponent.prototype.getData = function () {\n\treturn this._cell.row.getData();\n};\n\nCellComponent.prototype.getField = function () {\n\treturn this._cell.column.getField();\n};\n\nCellComponent.prototype.getColumn = function () {\n\treturn this._cell.column.getComponent();\n};\n\nCellComponent.prototype.setValue = function (value, mutate) {\n\tif (typeof mutate == \"undefined\") {\n\t\tmutate = true;\n\t}\n\n\tthis._cell.setValue(value, mutate);\n};\n\nCellComponent.prototype.restoreOldValue = function () {\n\tthis._cell.setValueActual(this._cell.getOldValue());\n};\n\nCellComponent.prototype.restoreInitialValue = function () {\n\tthis._cell.setValueActual(this._cell.initialValue);\n};\n\nCellComponent.prototype.edit = function (force) {\n\treturn this._cell.edit(force);\n};\n\nCellComponent.prototype.cancelEdit = function () {\n\tthis._cell.cancelEdit();\n};\n\nCellComponent.prototype.isEdited = function () {\n\treturn !!this._cell.modules.edit && this._cell.modules.edit.edited;\n};\n\nCellComponent.prototype.clearEdited = function () {\n\tif (self.table.modExists(\"edit\", true)) {\n\t\tthis._cell.table.modules.edit.clearEdited(this._cell);\n\t}\n};\n\nCellComponent.prototype.isValid = function () {\n\treturn this._cell.modules.validate ? !this._cell.modules.validate.invalid : true;\n};\n\nCellComponent.prototype.validate = function () {\n\treturn this._cell.validate();\n};\n\nCellComponent.prototype.clearValidation = function () {\n\tif (this._cell.table.modExists(\"validate\", true)) {\n\t\tthis._cell.table.modules.validate.clearValidation(this._cell);\n\t}\n};\n\nCellComponent.prototype.nav = function () {\n\treturn this._cell.nav();\n};\n\nCellComponent.prototype.checkHeight = function () {\n\tthis._cell.checkHeight();\n};\n\nCellComponent.prototype.getTable = function () {\n\treturn this._cell.table;\n};\n\nCellComponent.prototype._getSelf = function () {\n\treturn this._cell;\n};\n\nvar Cell = function Cell(column, row) {\n\n\tthis.table = column.table;\n\tthis.column = column;\n\tthis.row = row;\n\tthis.element = null;\n\tthis.value = null;\n\tthis.initialValue;\n\tthis.oldValue = null;\n\tthis.modules = {};\n\n\tthis.height = null;\n\tthis.width = null;\n\tthis.minWidth = null;\n\n\tthis.component = null;\n\n\tthis.loaded = false; //track if the cell has been added to the DOM yet\n\n\tthis.build();\n};\n\n//////////////// Setup Functions /////////////////\n\n//generate element\nCell.prototype.build = function () {\n\tthis.generateElement();\n\n\tthis.setWidth();\n\n\tthis._configureCell();\n\n\tthis.setValueActual(this.column.getFieldValue(this.row.data));\n\n\tthis.initialValue = this.value;\n};\n\nCell.prototype.generateElement = function () {\n\tthis.element = document.createElement('div');\n\tthis.element.className = \"tabulator-cell\";\n\tthis.element.setAttribute(\"role\", \"gridcell\");\n\tthis.element = this.element;\n};\n\nCell.prototype._configureCell = function () {\n\tvar self = this,\n\t cellEvents = self.column.cellEvents,\n\t element = self.element,\n\t field = this.column.getField(),\n\t vertAligns = {\n\t\ttop: \"flex-start\",\n\t\tbottom: \"flex-end\",\n\t\tmiddle: \"center\"\n\t},\n\t hozAligns = {\n\t\tleft: \"flex-start\",\n\t\tright: \"flex-end\",\n\t\tcenter: \"center\"\n\t};\n\n\t//set text alignment\n\telement.style.textAlign = self.column.hozAlign;\n\n\tif (self.column.vertAlign) {\n\t\telement.style.display = \"inline-flex\";\n\n\t\telement.style.alignItems = vertAligns[self.column.vertAlign] || \"\";\n\n\t\tif (self.column.hozAlign) {\n\t\t\telement.style.justifyContent = hozAligns[self.column.hozAlign] || \"\";\n\t\t}\n\t}\n\n\tif (field) {\n\t\telement.setAttribute(\"tabulator-field\", field);\n\t}\n\n\t//add class to cell if needed\n\tif (self.column.definition.cssClass) {\n\t\tvar classNames = self.column.definition.cssClass.split(\" \");\n\t\tclassNames.forEach(function (className) {\n\t\t\telement.classList.add(className);\n\t\t});\n\t}\n\n\t//update tooltip on mouse enter\n\tif (this.table.options.tooltipGenerationMode === \"hover\") {\n\t\telement.addEventListener(\"mouseenter\", function (e) {\n\t\t\tself._generateTooltip();\n\t\t});\n\t}\n\n\tself._bindClickEvents(cellEvents);\n\n\tself._bindTouchEvents(cellEvents);\n\n\tself._bindMouseEvents(cellEvents);\n\n\tif (self.column.modules.edit) {\n\t\tself.table.modules.edit.bindEditor(self);\n\t}\n\n\tif (self.column.definition.rowHandle && self.table.options.movableRows !== false && self.table.modExists(\"moveRow\")) {\n\t\tself.table.modules.moveRow.initializeCell(self);\n\t}\n\n\t//hide cell if not visible\n\tif (!self.column.visible) {\n\t\tself.hide();\n\t}\n};\n\nCell.prototype._bindClickEvents = function (cellEvents) {\n\tvar self = this,\n\t element = self.element;\n\n\t//set event bindings\n\tif (cellEvents.cellClick || self.table.options.cellClick) {\n\t\telement.addEventListener(\"click\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellClick) {\n\t\t\t\tcellEvents.cellClick.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellClick) {\n\t\t\t\tself.table.options.cellClick.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (cellEvents.cellDblClick || this.table.options.cellDblClick) {\n\t\telement.addEventListener(\"dblclick\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellDblClick) {\n\t\t\t\tcellEvents.cellDblClick.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellDblClick) {\n\t\t\t\tself.table.options.cellDblClick.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t} else {\n\t\telement.addEventListener(\"dblclick\", function (e) {\n\n\t\t\tif (self.table.modExists(\"edit\")) {\n\t\t\t\tif (self.table.modules.edit.currentCell === self) {\n\t\t\t\t\treturn; //prevent instant selection of editor content\n\t\t\t\t}\n\t\t\t}\n\n\t\t\te.preventDefault();\n\n\t\t\ttry {\n\t\t\t\tif (document.selection) {\n\t\t\t\t\t// IE\n\t\t\t\t\tvar range = document.body.createTextRange();\n\t\t\t\t\trange.moveToElementText(self.element);\n\t\t\t\t\trange.select();\n\t\t\t\t} else if (window.getSelection) {\n\t\t\t\t\tvar range = document.createRange();\n\t\t\t\t\trange.selectNode(self.element);\n\t\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t\t\twindow.getSelection().addRange(range);\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t});\n\t}\n\n\tif (cellEvents.cellContext || this.table.options.cellContext) {\n\t\telement.addEventListener(\"contextmenu\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellContext) {\n\t\t\t\tcellEvents.cellContext.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellContext) {\n\t\t\t\tself.table.options.cellContext.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t}\n};\n\nCell.prototype._bindMouseEvents = function (cellEvents) {\n\tvar self = this,\n\t element = self.element;\n\n\tif (cellEvents.cellMouseEnter || self.table.options.cellMouseEnter) {\n\t\telement.addEventListener(\"mouseenter\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellMouseEnter) {\n\t\t\t\tcellEvents.cellMouseEnter.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellMouseEnter) {\n\t\t\t\tself.table.options.cellMouseEnter.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (cellEvents.cellMouseLeave || self.table.options.cellMouseLeave) {\n\t\telement.addEventListener(\"mouseleave\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellMouseLeave) {\n\t\t\t\tcellEvents.cellMouseLeave.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellMouseLeave) {\n\t\t\t\tself.table.options.cellMouseLeave.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (cellEvents.cellMouseOver || self.table.options.cellMouseOver) {\n\t\telement.addEventListener(\"mouseover\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellMouseOver) {\n\t\t\t\tcellEvents.cellMouseOver.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellMouseOver) {\n\t\t\t\tself.table.options.cellMouseOver.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (cellEvents.cellMouseOut || self.table.options.cellMouseOut) {\n\t\telement.addEventListener(\"mouseout\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellMouseOut) {\n\t\t\t\tcellEvents.cellMouseOut.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellMouseOut) {\n\t\t\t\tself.table.options.cellMouseOut.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (cellEvents.cellMouseMove || self.table.options.cellMouseMove) {\n\t\telement.addEventListener(\"mousemove\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellMouseMove) {\n\t\t\t\tcellEvents.cellMouseMove.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellMouseMove) {\n\t\t\t\tself.table.options.cellMouseMove.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t}\n};\n\nCell.prototype._bindTouchEvents = function (cellEvents) {\n\tvar self = this,\n\t element = self.element,\n\t dblTap,\n\t tapHold,\n\t tap;\n\n\tif (cellEvents.cellTap || this.table.options.cellTap) {\n\t\ttap = false;\n\n\t\telement.addEventListener(\"touchstart\", function (e) {\n\t\t\ttap = true;\n\t\t}, { passive: true });\n\n\t\telement.addEventListener(\"touchend\", function (e) {\n\t\t\tif (tap) {\n\t\t\t\tvar component = self.getComponent();\n\n\t\t\t\tif (cellEvents.cellTap) {\n\t\t\t\t\tcellEvents.cellTap.call(self.table, e, component);\n\t\t\t\t}\n\n\t\t\t\tif (self.table.options.cellTap) {\n\t\t\t\t\tself.table.options.cellTap.call(self.table, e, component);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttap = false;\n\t\t});\n\t}\n\n\tif (cellEvents.cellDblTap || this.table.options.cellDblTap) {\n\t\tdblTap = null;\n\n\t\telement.addEventListener(\"touchend\", function (e) {\n\n\t\t\tif (dblTap) {\n\t\t\t\tclearTimeout(dblTap);\n\t\t\t\tdblTap = null;\n\n\t\t\t\tvar component = self.getComponent();\n\n\t\t\t\tif (cellEvents.cellDblTap) {\n\t\t\t\t\tcellEvents.cellDblTap.call(self.table, e, component);\n\t\t\t\t}\n\n\t\t\t\tif (self.table.options.cellDblTap) {\n\t\t\t\t\tself.table.options.cellDblTap.call(self.table, e, component);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\tdblTap = setTimeout(function () {\n\t\t\t\t\tclearTimeout(dblTap);\n\t\t\t\t\tdblTap = null;\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (cellEvents.cellTapHold || this.table.options.cellTapHold) {\n\t\ttapHold = null;\n\n\t\telement.addEventListener(\"touchstart\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\n\t\t\ttapHold = setTimeout(function () {\n\t\t\t\tclearTimeout(tapHold);\n\t\t\t\ttapHold = null;\n\t\t\t\ttap = false;\n\t\t\t\tvar component = self.getComponent();\n\n\t\t\t\tif (cellEvents.cellTapHold) {\n\t\t\t\t\tcellEvents.cellTapHold.call(self.table, e, component);\n\t\t\t\t}\n\n\t\t\t\tif (self.table.options.cellTapHold) {\n\t\t\t\t\tself.table.options.cellTapHold.call(self.table, e, component);\n\t\t\t\t}\n\t\t\t}, 1000);\n\t\t}, { passive: true });\n\n\t\telement.addEventListener(\"touchend\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\t\t\ttapHold = null;\n\t\t});\n\t}\n};\n\n//generate cell contents\nCell.prototype._generateContents = function () {\n\tvar val;\n\n\tif (this.table.modExists(\"format\")) {\n\t\tval = this.table.modules.format.formatValue(this);\n\t} else {\n\t\tval = this.element.innerHTML = this.value;\n\t}\n\n\tswitch (typeof val === 'undefined' ? 'undefined' : _typeof(val)) {\n\t\tcase \"object\":\n\t\t\tif (val instanceof Node) {\n\n\t\t\t\t//clear previous cell contents\n\t\t\t\twhile (this.element.firstChild) {\n\t\t\t\t\tthis.element.removeChild(this.element.firstChild);\n\t\t\t\t}this.element.appendChild(val);\n\t\t\t} else {\n\t\t\t\tthis.element.innerHTML = \"\";\n\n\t\t\t\tif (val != null) {\n\t\t\t\t\tconsole.warn(\"Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", val);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"undefined\":\n\t\tcase \"null\":\n\t\t\tthis.element.innerHTML = \"\";\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthis.element.innerHTML = val;\n\t}\n};\n\nCell.prototype.cellRendered = function () {\n\tif (this.table.modExists(\"format\") && this.table.modules.format.cellRendered) {\n\t\tthis.table.modules.format.cellRendered(this);\n\t}\n};\n\n//generate tooltip text\nCell.prototype._generateTooltip = function () {\n\tvar tooltip = this.column.tooltip;\n\n\tif (tooltip) {\n\t\tif (tooltip === true) {\n\t\t\ttooltip = this.value;\n\t\t} else if (typeof tooltip == \"function\") {\n\t\t\ttooltip = tooltip(this.getComponent());\n\n\t\t\tif (tooltip === false) {\n\t\t\t\ttooltip = \"\";\n\t\t\t}\n\t\t}\n\n\t\tif (typeof tooltip === \"undefined\") {\n\t\t\ttooltip = \"\";\n\t\t}\n\n\t\tthis.element.setAttribute(\"title\", tooltip);\n\t} else {\n\t\tthis.element.setAttribute(\"title\", \"\");\n\t}\n};\n\n//////////////////// Getters ////////////////////\nCell.prototype.getElement = function (containerOnly) {\n\tif (!this.loaded) {\n\t\tthis.loaded = true;\n\t\tif (!containerOnly) {\n\t\t\tthis.layoutElement();\n\t\t}\n\t}\n\n\treturn this.element;\n};\n\nCell.prototype.getValue = function () {\n\treturn this.value;\n};\n\nCell.prototype.getOldValue = function () {\n\treturn this.oldValue;\n};\n\n//////////////////// Actions ////////////////////\n\nCell.prototype.setValue = function (value, mutate) {\n\n\tvar changed = this.setValueProcessData(value, mutate),\n\t component;\n\n\tif (changed) {\n\t\tif (this.table.options.history && this.table.modExists(\"history\")) {\n\t\t\tthis.table.modules.history.action(\"cellEdit\", this, { oldValue: this.oldValue, newValue: this.value });\n\t\t}\n\n\t\tcomponent = this.getComponent();\n\n\t\tif (this.column.cellEvents.cellEdited) {\n\t\t\tthis.column.cellEvents.cellEdited.call(this.table, component);\n\t\t}\n\n\t\tif (this.table.options.groupUpdateOnCellEdit && this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\t\tthis.table.modules.groupRows.reassignRowToGroup(this.row);\n\t\t}\n\n\t\tthis.cellRendered();\n\n\t\tthis.table.options.cellEdited.call(this.table, component);\n\n\t\tif (this.table.options.dataChanged) {\n\t\t\tthis.table.options.dataChanged.call(this.table, this.table.rowManager.getData());\n\t\t}\n\t}\n};\n\nCell.prototype.setValueProcessData = function (value, mutate) {\n\tvar changed = false;\n\n\tif (this.value != value) {\n\n\t\tchanged = true;\n\n\t\tif (mutate) {\n\t\t\tif (this.column.modules.mutate) {\n\t\t\t\tvalue = this.table.modules.mutator.transformCell(this, value);\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.setValueActual(value);\n\n\tif (changed && this.table.modExists(\"columnCalcs\")) {\n\t\tif (this.column.definition.topCalc || this.column.definition.bottomCalc) {\n\t\t\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\n\t\t\t\tif (this.table.options.columnCalcs == \"table\" || this.table.options.columnCalcs == \"both\") {\n\t\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\n\t\t\t\t}\n\n\t\t\t\tif (this.table.options.columnCalcs != \"table\") {\n\t\t\t\t\tthis.table.modules.columnCalcs.recalcRowGroup(this.row);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn changed;\n};\n\nCell.prototype.setValueActual = function (value) {\n\tthis.oldValue = this.value;\n\n\tthis.value = value;\n\n\tif (this.table.options.reactiveData && this.table.modExists(\"reactiveData\")) {\n\t\tthis.table.modules.reactiveData.block();\n\t}\n\n\tthis.column.setFieldValue(this.row.data, value);\n\n\tif (this.table.options.reactiveData && this.table.modExists(\"reactiveData\")) {\n\t\tthis.table.modules.reactiveData.unblock();\n\t}\n\n\tif (this.loaded) {\n\t\tthis.layoutElement();\n\t}\n};\n\nCell.prototype.layoutElement = function () {\n\tthis._generateContents();\n\tthis._generateTooltip();\n\n\t//set resizable handles\n\tif (this.table.options.resizableColumns && this.table.modExists(\"resizeColumns\") && this.row.type === \"row\") {\n\t\tthis.table.modules.resizeColumns.initializeColumn(\"cell\", this.column, this.element);\n\t}\n\n\tif ((this.column.definition.contextMenu || this.column.definition.clickMenu) && this.table.modExists(\"menu\")) {\n\t\tthis.table.modules.menu.initializeCell(this);\n\t}\n\n\t//handle frozen cells\n\tif (this.table.modExists(\"frozenColumns\")) {\n\t\tthis.table.modules.frozenColumns.layoutElement(this.element, this.column);\n\t}\n};\n\nCell.prototype.setWidth = function () {\n\tthis.width = this.column.width;\n\tthis.element.style.width = this.column.widthStyled;\n};\n\nCell.prototype.clearWidth = function () {\n\tthis.width = \"\";\n\tthis.element.style.width = \"\";\n};\n\nCell.prototype.getWidth = function () {\n\treturn this.width || this.element.offsetWidth;\n};\n\nCell.prototype.setMinWidth = function () {\n\tthis.minWidth = this.column.minWidth;\n\tthis.element.style.minWidth = this.column.minWidthStyled;\n};\n\nCell.prototype.setMaxWidth = function () {\n\tthis.maxWidth = this.column.maxWidth;\n\tthis.element.style.maxWidth = this.column.maxWidthStyled;\n};\n\nCell.prototype.checkHeight = function () {\n\t// var height = this.element.css(\"height\");\n\tthis.row.reinitializeHeight();\n};\n\nCell.prototype.clearHeight = function () {\n\tthis.element.style.height = \"\";\n\tthis.height = null;\n};\n\nCell.prototype.setHeight = function () {\n\tthis.height = this.row.height;\n\tthis.element.style.height = this.row.heightStyled;\n};\n\nCell.prototype.getHeight = function () {\n\treturn this.height || this.element.offsetHeight;\n};\n\nCell.prototype.show = function () {\n\tthis.element.style.display = this.column.vertAlign ? \"inline-flex\" : \"\";\n};\n\nCell.prototype.hide = function () {\n\tthis.element.style.display = \"none\";\n};\n\nCell.prototype.edit = function (force) {\n\tif (this.table.modExists(\"edit\", true)) {\n\t\treturn this.table.modules.edit.editCell(this, force);\n\t}\n};\n\nCell.prototype.cancelEdit = function () {\n\tif (this.table.modExists(\"edit\", true)) {\n\t\tvar editing = this.table.modules.edit.getCurrentCell();\n\n\t\tif (editing && editing._getSelf() === this) {\n\t\t\tthis.table.modules.edit.cancelEdit();\n\t\t} else {\n\t\t\tconsole.warn(\"Cancel Editor Error - This cell is not currently being edited \");\n\t\t}\n\t}\n};\n\nCell.prototype.validate = function () {\n\tif (this.column.modules.validate && this.table.modExists(\"validate\", true)) {\n\t\tvar valid = this.table.modules.validate.validate(this.column.modules.validate, this, this.getValue());\n\n\t\treturn valid === true;\n\t} else {\n\t\treturn true;\n\t}\n};\n\nCell.prototype.delete = function () {\n\tif (!this.table.rowManager.redrawBlock && this.element.parentNode) {\n\t\tthis.element.parentNode.removeChild(this.element);\n\t}\n\n\tif (this.modules.validate && this.modules.validate.invalid) {\n\t\tthis.table.modules.validate.clearValidation(this);\n\t}\n\n\tif (this.modules.edit && this.modules.edit.edited) {\n\t\tthis.table.modules.edit.clearEdited(this);\n\t}\n\n\tif (this.table.options.history) {\n\t\tthis.table.modules.history.clearComponentHistory(this);\n\t}\n\n\tthis.element = false;\n\tthis.column.deleteCell(this);\n\tthis.row.deleteCell(this);\n\tthis.calcs = {};\n};\n\n//////////////// Navigation /////////////////\n\nCell.prototype.nav = function () {\n\n\tvar self = this,\n\t nextCell = false,\n\t index = this.row.getCellIndex(this);\n\n\treturn {\n\t\tnext: function next() {\n\t\t\tvar nextCell = this.right(),\n\t\t\t nextRow;\n\n\t\t\tif (!nextCell) {\n\t\t\t\tnextRow = self.table.rowManager.nextDisplayRow(self.row, true);\n\n\t\t\t\tif (nextRow) {\n\t\t\t\t\tnextCell = nextRow.findNextEditableCell(-1);\n\n\t\t\t\t\tif (nextCell) {\n\t\t\t\t\t\tnextCell.edit();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\t\tprev: function prev() {\n\t\t\tvar nextCell = this.left(),\n\t\t\t prevRow;\n\n\t\t\tif (!nextCell) {\n\t\t\t\tprevRow = self.table.rowManager.prevDisplayRow(self.row, true);\n\n\t\t\t\tif (prevRow) {\n\t\t\t\t\tnextCell = prevRow.findPrevEditableCell(prevRow.cells.length);\n\n\t\t\t\t\tif (nextCell) {\n\t\t\t\t\t\tnextCell.edit();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\t\tleft: function left() {\n\n\t\t\tnextCell = self.row.findPrevEditableCell(index);\n\n\t\t\tif (nextCell) {\n\t\t\t\tnextCell.edit();\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tright: function right() {\n\t\t\tnextCell = self.row.findNextEditableCell(index);\n\n\t\t\tif (nextCell) {\n\t\t\t\tnextCell.edit();\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tup: function up() {\n\t\t\tvar nextRow = self.table.rowManager.prevDisplayRow(self.row, true);\n\n\t\t\tif (nextRow) {\n\t\t\t\tnextRow.cells[index].edit();\n\t\t\t}\n\t\t},\n\t\tdown: function down() {\n\t\t\tvar nextRow = self.table.rowManager.nextDisplayRow(self.row, true);\n\n\t\t\tif (nextRow) {\n\t\t\t\tnextRow.cells[index].edit();\n\t\t\t}\n\t\t}\n\n\t};\n};\n\nCell.prototype.getIndex = function () {\n\tthis.row.getCellIndex(this);\n};\n\n//////////////// Object Generation /////////////////\nCell.prototype.getComponent = function () {\n\n\tif (!this.component) {\n\t\tthis.component = new CellComponent(this);\n\t}\n\n\treturn this.component;\n};\nvar FooterManager = function FooterManager(table) {\n\tthis.table = table;\n\tthis.active = false;\n\tthis.element = this.createElement(); //containing element\n\tthis.external = false;\n\tthis.links = [];\n\n\tthis._initialize();\n};\n\nFooterManager.prototype.createElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-footer\");\n\n\treturn el;\n};\n\nFooterManager.prototype._initialize = function (element) {\n\tif (this.table.options.footerElement) {\n\n\t\tswitch (_typeof(this.table.options.footerElement)) {\n\t\t\tcase \"string\":\n\n\t\t\t\tif (this.table.options.footerElement[0] === \"<\") {\n\t\t\t\t\tthis.element.innerHTML = this.table.options.footerElement;\n\t\t\t\t} else {\n\t\t\t\t\tthis.external = true;\n\t\t\t\t\tthis.element = document.querySelector(this.table.options.footerElement);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.element = this.table.options.footerElement;\n\t\t\t\tbreak;\n\t\t}\n\t}\n};\n\nFooterManager.prototype.getElement = function () {\n\treturn this.element;\n};\n\nFooterManager.prototype.append = function (element, parent) {\n\tthis.activate(parent);\n\n\tthis.element.appendChild(element);\n\tthis.table.rowManager.adjustTableSize();\n};\n\nFooterManager.prototype.prepend = function (element, parent) {\n\tthis.activate(parent);\n\n\tthis.element.insertBefore(element, this.element.firstChild);\n\tthis.table.rowManager.adjustTableSize();\n};\n\nFooterManager.prototype.remove = function (element) {\n\telement.parentNode.removeChild(element);\n\tthis.deactivate();\n};\n\nFooterManager.prototype.deactivate = function (force) {\n\tif (!this.element.firstChild || force) {\n\t\tif (!this.external) {\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\t\tthis.active = false;\n\t}\n\n\t// this.table.rowManager.adjustTableSize();\n};\n\nFooterManager.prototype.activate = function (parent) {\n\tif (!this.active) {\n\t\tthis.active = true;\n\t\tif (!this.external) {\n\t\t\tthis.table.element.appendChild(this.getElement());\n\t\t\tthis.table.element.style.display = '';\n\t\t}\n\t}\n\n\tif (parent) {\n\t\tthis.links.push(parent);\n\t}\n};\n\nFooterManager.prototype.redraw = function () {\n\tthis.links.forEach(function (link) {\n\t\tlink.footerRedraw();\n\t});\n};\n\nvar Tabulator = function Tabulator(element, options) {\n\n\tthis.options = {};\n\n\tthis.columnManager = null; // hold Column Manager\n\tthis.rowManager = null; //hold Row Manager\n\tthis.footerManager = null; //holder Footer Manager\n\tthis.vdomHoz = null; //holder horizontal virtual dom\n\n\n\tthis.browser = \"\"; //hold current browser type\n\tthis.browserSlow = false; //handle reduced functionality for slower browsers\n\tthis.browserMobile = false; //check if running on moble, prevent resize cancelling edit on keyboard appearence\n\tthis.rtl = false; //check if the table is in RTL mode\n\n\tthis.modules = {}; //hold all modules bound to this table\n\n\tif (this.initializeElement(element)) {\n\t\tthis.initializeOptions(options || {});\n\t\tthis._create();\n\t}\n\n\tTabulator.prototype.comms.register(this); //register table for inderdevice communication\n};\n\n//default setup options\nTabulator.prototype.defaultOptions = {\n\n\theight: false, //height of tabulator\n\tminHeight: false, //minimum height of tabulator\n\tmaxHeight: false, //maximum height of tabulator\n\n\tlayout: \"fitData\", ///layout type \"fitColumns\" | \"fitData\"\n\tlayoutColumnsOnNewData: false, //update column widths on setData\n\n\tcolumnMinWidth: 40, //minimum global width for a column\n\tcolumnMaxWidth: false, //minimum global width for a column\n\tcolumnHeaderVertAlign: \"top\", //vertical alignment of column headers\n\tcolumnVertAlign: false, // DEPRECATED - Left to allow warning\n\n\tresizableColumns: true, //resizable columns\n\tresizableRows: false, //resizable rows\n\tautoResize: true, //auto resize table\n\n\tcolumns: [], //store for colum header info\n\n\tcellHozAlign: \"\", //horizontal align columns\n\tcellVertAlign: \"\", //vertical align columns\n\theaderHozAlign: \"\", //horizontal header alignment\n\n\n\tdata: [], //default starting data\n\n\tautoColumns: false, //build columns from data row structure\n\tautoColumnsDefinitions: false,\n\n\treactiveData: false, //enable data reactivity\n\n\tnestedFieldSeparator: \".\", //seperatpr for nested data\n\n\ttooltips: false, //Tool tip value\n\ttooltipsHeader: false, //Tool tip for headers\n\ttooltipGenerationMode: \"load\", //when to generate tooltips\n\n\tinitialSort: false, //initial sorting criteria\n\tinitialFilter: false, //initial filtering criteria\n\tinitialHeaderFilter: false, //initial header filtering criteria\n\n\tcolumnHeaderSortMulti: true, //multiple or single column sorting\n\n\tsortOrderReverse: false, //reverse internal sort ordering\n\n\theaderSort: true, //set default global header sort\n\theaderSortTristate: false, //set default tristate header sorting\n\theaderSortElement: \"
\", //header sort element\n\n\tfooterElement: false, //hold footer element\n\n\tindex: \"id\", //filed for row index\n\n\ttextDirection: \"auto\",\n\n\tkeybindings: [], //array for keybindings\n\n\ttabEndNewRow: false, //create new row when tab to end of table\n\n\tinvalidOptionWarnings: true, //allow toggling of invalid option warnings\n\n\tclipboard: false, //enable clipboard\n\tclipboardCopyStyled: true, //formatted table data\n\tclipboardCopyConfig: false, //clipboard config\n\tclipboardCopyFormatter: false, //DEPRICATED - REMOVE in 5.0\n\tclipboardCopyRowRange: \"active\", //restrict clipboard to visible rows only\n\tclipboardPasteParser: \"table\", //convert pasted clipboard data to rows\n\tclipboardPasteAction: \"insert\", //how to insert pasted data into the table\n\n\tclipboardCopied: function clipboardCopied() {}, //data has been copied to the clipboard\n\tclipboardPasted: function clipboardPasted() {}, //data has been pasted into the table\n\tclipboardPasteError: function clipboardPasteError() {}, //data has not successfully been pasted into the table\n\n\tdownloadDataFormatter: false, //function to manipulate table data before it is downloaded\n\tdownloadReady: function downloadReady(data, blob) {\n\t\treturn blob;\n\t}, //function to manipulate download data\n\tdownloadComplete: false, //function to manipulate download data\n\tdownloadConfig: {}, //download config\n\tdownloadRowRange: \"active\", //restrict download to active rows only\n\n\tdataTree: false, //enable data tree\n\tdataTreeFilter: true, //filter child rows\n\tdataTreeSort: true, //sort child rows\n\tdataTreeElementColumn: false,\n\tdataTreeBranchElement: true, //show data tree branch element\n\tdataTreeChildIndent: 9, //data tree child indent in px\n\tdataTreeChildField: \"_children\", //data tre column field to look for child rows\n\tdataTreeCollapseElement: false, //data tree row collapse element\n\tdataTreeExpandElement: false, //data tree row expand element\n\tdataTreeStartExpanded: false,\n\tdataTreeRowExpanded: function dataTreeRowExpanded() {}, //row has been expanded\n\tdataTreeRowCollapsed: function dataTreeRowCollapsed() {}, //row has been collapsed\n\tdataTreeChildColumnCalcs: false, //include visible data tree rows in column calculations\n\tdataTreeSelectPropagate: false, //seleccting a parent row selects its children\n\n\tprintAsHtml: false, //enable print as html\n\tprintFormatter: false, //printing page formatter\n\tprintHeader: false, //page header contents\n\tprintFooter: false, //page footer contents\n\tprintCopyStyle: true, //DEPRICATED - REMOVE in 5.0\n\tprintStyled: true, //enable print as html styling\n\tprintVisibleRows: true, //DEPRICATED - REMOVE in 5.0\n\tprintRowRange: \"visible\", //restrict print to visible rows only\n\tprintConfig: {}, //print config options\n\n\taddRowPos: \"bottom\", //position to insert blank rows, top|bottom\n\n\tselectable: \"highlight\", //highlight rows on hover\n\tselectableRangeMode: \"drag\", //highlight rows on hover\n\tselectableRollingSelection: true, //roll selection once maximum number of selectable rows is reached\n\tselectablePersistence: true, // maintain selection when table view is updated\n\tselectableCheck: function selectableCheck(data, row) {\n\t\treturn true;\n\t}, //check wheather row is selectable\n\n\theaderFilterLiveFilterDelay: 300, //delay before updating column after user types in header filter\n\theaderFilterPlaceholder: false, //placeholder text to display in header filters\n\n\theaderVisible: true, //hide header\n\n\thistory: false, //enable edit history\n\n\tlocale: false, //current system language\n\tlangs: {},\n\n\tvirtualDom: true, //enable DOM virtualization\n\tvirtualDomBuffer: 0, // set virtual DOM buffer size\n\tvirtualDomHoz: false, //enable horizontal DOM virtualization\n\n\tpersistentLayout: false, //DEPRICATED - REMOVE in 5.0\n\tpersistentSort: false, //DEPRICATED - REMOVE in 5.0\n\tpersistentFilter: false, //DEPRICATED - REMOVE in 5.0\n\tpersistenceID: \"\", //key for persistent storage\n\tpersistenceMode: true, //mode for storing persistence information\n\tpersistenceReaderFunc: false, //function for handling persistence data reading\n\tpersistenceWriterFunc: false, //function for handling persistence data writing\n\n\tpersistence: false,\n\n\tresponsiveLayout: false, //responsive layout flags\n\tresponsiveLayoutCollapseStartOpen: true, //start showing collapsed data\n\tresponsiveLayoutCollapseUseFormatters: true, //responsive layout collapse formatter\n\tresponsiveLayoutCollapseFormatter: false, //responsive layout collapse formatter\n\n\tpagination: false, //set pagination type\n\tpaginationSize: false, //set number of rows to a page\n\tpaginationInitialPage: 1, //initail page to show on load\n\tpaginationButtonCount: 5, // set count of page button\n\tpaginationSizeSelector: false, //add pagination size selector element\n\tpaginationElement: false, //element to hold pagination numbers\n\tpaginationDataSent: {}, //pagination data sent to the server\n\tpaginationDataReceived: {}, //pagination data received from the server\n\tpaginationAddRow: \"page\", //add rows on table or page\n\n\tajaxURL: false, //url for ajax loading\n\tajaxURLGenerator: false,\n\tajaxParams: {}, //params for ajax loading\n\tajaxConfig: \"get\", //ajax request type\n\tajaxContentType: \"form\", //ajax request type\n\tajaxRequestFunc: false, //promise function\n\tajaxLoader: true, //show loader\n\tajaxLoaderLoading: false, //loader element\n\tajaxLoaderError: false, //loader element\n\tajaxFiltering: false,\n\tajaxSorting: false,\n\tajaxProgressiveLoad: false, //progressive loading\n\tajaxProgressiveLoadDelay: 0, //delay between requests\n\tajaxProgressiveLoadScrollMargin: 0, //margin before scroll begins\n\n\tgroupBy: false, //enable table grouping and set field to group by\n\tgroupStartOpen: true, //starting state of group\n\tgroupValues: false,\n\tgroupUpdateOnCellEdit: false,\n\n\tgroupHeader: false, //header generation function\n\tgroupHeaderPrint: null,\n\tgroupHeaderClipboard: null,\n\tgroupHeaderHtmlOutput: null,\n\tgroupHeaderDownload: null,\n\n\thtmlOutputConfig: false, //html outypu config\n\n\tmovableColumns: false, //enable movable columns\n\n\tmovableRows: false, //enable movable rows\n\tmovableRowsConnectedTables: false, //tables for movable rows to be connected to\n\tmovableRowsConnectedElements: false, //other elements for movable rows to be connected to\n\tmovableRowsSender: false,\n\tmovableRowsReceiver: \"insert\",\n\tmovableRowsSendingStart: function movableRowsSendingStart() {},\n\tmovableRowsSent: function movableRowsSent() {},\n\tmovableRowsSentFailed: function movableRowsSentFailed() {},\n\tmovableRowsSendingStop: function movableRowsSendingStop() {},\n\tmovableRowsReceivingStart: function movableRowsReceivingStart() {},\n\tmovableRowsReceived: function movableRowsReceived() {},\n\tmovableRowsReceivedFailed: function movableRowsReceivedFailed() {},\n\tmovableRowsReceivingStop: function movableRowsReceivingStop() {},\n\tmovableRowsElementDrop: function movableRowsElementDrop() {},\n\n\tscrollToRowPosition: \"top\",\n\tscrollToRowIfVisible: true,\n\n\tscrollToColumnPosition: \"left\",\n\tscrollToColumnIfVisible: true,\n\n\trowFormatter: false,\n\trowFormatterPrint: null,\n\trowFormatterClipboard: null,\n\trowFormatterHtmlOutput: null,\n\n\tplaceholder: false,\n\n\t//table building callbacks\n\ttableBuilding: function tableBuilding() {},\n\ttableBuilt: function tableBuilt() {},\n\n\t//render callbacks\n\trenderStarted: function renderStarted() {},\n\trenderComplete: function renderComplete() {},\n\n\t//row callbacks\n\trowClick: false,\n\trowDblClick: false,\n\trowContext: false,\n\trowTap: false,\n\trowDblTap: false,\n\trowTapHold: false,\n\trowMouseEnter: false,\n\trowMouseLeave: false,\n\trowMouseOver: false,\n\trowMouseOut: false,\n\trowMouseMove: false,\n\trowContextMenu: false,\n\trowClickMenu: false,\n\trowAdded: function rowAdded() {},\n\trowDeleted: function rowDeleted() {},\n\trowMoved: function rowMoved() {},\n\trowUpdated: function rowUpdated() {},\n\trowSelectionChanged: function rowSelectionChanged() {},\n\trowSelected: function rowSelected() {},\n\trowDeselected: function rowDeselected() {},\n\trowResized: function rowResized() {},\n\n\t//cell callbacks\n\t//row callbacks\n\tcellClick: false,\n\tcellDblClick: false,\n\tcellContext: false,\n\tcellTap: false,\n\tcellDblTap: false,\n\tcellTapHold: false,\n\tcellMouseEnter: false,\n\tcellMouseLeave: false,\n\tcellMouseOver: false,\n\tcellMouseOut: false,\n\tcellMouseMove: false,\n\tcellEditing: function cellEditing() {},\n\tcellEdited: function cellEdited() {},\n\tcellEditCancelled: function cellEditCancelled() {},\n\n\t//column callbacks\n\tcolumnMoved: false,\n\tcolumnResized: function columnResized() {},\n\tcolumnTitleChanged: function columnTitleChanged() {},\n\tcolumnVisibilityChanged: function columnVisibilityChanged() {},\n\n\t//HTML iport callbacks\n\thtmlImporting: function htmlImporting() {},\n\thtmlImported: function htmlImported() {},\n\n\t//data callbacks\n\tdataLoading: function dataLoading() {},\n\tdataLoaded: function dataLoaded() {},\n\tdataEdited: false, //DEPRECATED\n\tdataChanged: false,\n\n\t//ajax callbacks\n\tajaxRequesting: function ajaxRequesting() {},\n\tajaxResponse: false,\n\tajaxError: function ajaxError() {},\n\n\t//filtering callbacks\n\tdataFiltering: false,\n\tdataFiltered: false,\n\n\t//sorting callbacks\n\tdataSorting: function dataSorting() {},\n\tdataSorted: function dataSorted() {},\n\n\t//grouping callbacks\n\tgroupToggleElement: \"arrow\",\n\tgroupClosedShowCalcs: false,\n\tdataGrouping: function dataGrouping() {},\n\tdataGrouped: false,\n\tgroupVisibilityChanged: function groupVisibilityChanged() {},\n\tgroupClick: false,\n\tgroupDblClick: false,\n\tgroupContext: false,\n\tgroupContextMenu: false,\n\tgroupClickMenu: false,\n\tgroupTap: false,\n\tgroupDblTap: false,\n\tgroupTapHold: false,\n\n\tcolumnCalcs: true,\n\n\t//pagination callbacks\n\tpageLoaded: function pageLoaded() {},\n\n\t//localization callbacks\n\tlocalized: function localized() {},\n\n\t//validation callbacks\n\tvalidationMode: \"blocking\",\n\tvalidationFailed: function validationFailed() {},\n\n\t//history callbacks\n\thistoryUndo: function historyUndo() {},\n\thistoryRedo: function historyRedo() {},\n\n\t//scroll callbacks\n\tscrollHorizontal: function scrollHorizontal() {},\n\tscrollVertical: function scrollVertical() {}\n};\n\nTabulator.prototype.initializeOptions = function (options) {\n\n\t//warn user if option is not available\n\tif (options.invalidOptionWarnings !== false) {\n\t\tfor (var key in options) {\n\t\t\tif (typeof this.defaultOptions[key] === \"undefined\") {\n\t\t\t\tconsole.warn(\"Invalid table constructor option:\", key);\n\t\t\t}\n\t\t}\n\t}\n\n\t//assign options to table\n\tfor (var key in this.defaultOptions) {\n\t\tif (key in options) {\n\t\t\tthis.options[key] = options[key];\n\t\t} else {\n\t\t\tif (Array.isArray(this.defaultOptions[key])) {\n\t\t\t\tthis.options[key] = Object.assign([], this.defaultOptions[key]);\n\t\t\t} else if (_typeof(this.defaultOptions[key]) === \"object\" && this.defaultOptions[key] !== null) {\n\t\t\t\tthis.options[key] = Object.assign({}, this.defaultOptions[key]);\n\t\t\t} else {\n\t\t\t\tthis.options[key] = this.defaultOptions[key];\n\t\t\t}\n\t\t}\n\t}\n};\n\nTabulator.prototype.initializeElement = function (element) {\n\n\tif (typeof HTMLElement !== \"undefined\" && element instanceof HTMLElement) {\n\t\tthis.element = element;\n\t\treturn true;\n\t} else if (typeof element === \"string\") {\n\t\tthis.element = document.querySelector(element);\n\n\t\tif (this.element) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\tconsole.error(\"Tabulator Creation Error - no element found matching selector: \", element);\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\tconsole.error(\"Tabulator Creation Error - Invalid element provided:\", element);\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.rtlCheck = function () {\n\tvar style = window.getComputedStyle(this.element);\n\n\tswitch (this.options.textDirection) {\n\t\tcase \"auto\":\n\t\t\tif (style.direction !== \"rtl\") {\n\t\t\t\tbreak;\n\t\t\t};\n\n\t\tcase \"rtl\":\n\t\t\tthis.element.classList.add(\"tabulator-rtl\");\n\t\t\tthis.rtl = true;\n\t\t\tbreak;\n\n\t\tcase \"ltr\":\n\t\t\tthis.element.classList.add(\"tabulator-ltr\");\n\n\t\tdefault:\n\t\t\tthis.rtl = false;\n\t}\n};\n\n//convert depricated functionality to new functions\nTabulator.prototype._mapDepricatedFunctionality = function () {\n\n\t//map depricated persistance setup options\n\tif (this.options.persistentLayout || this.options.persistentSort || this.options.persistentFilter) {\n\t\tif (!this.options.persistence) {\n\t\t\tthis.options.persistence = {};\n\t\t}\n\t}\n\n\tif (this.options.dataEdited) {\n\t\tconsole.warn(\"DEPRECATION WARNING - dataEdited option has been deprecated, please use the dataChanged option instead\");\n\t\tthis.options.dataChanged = this.options.dataEdited;\n\t}\n\n\tif (this.options.downloadDataFormatter) {\n\t\tconsole.warn(\"DEPRECATION WARNING - downloadDataFormatter option has been deprecated\");\n\t}\n\n\tif (typeof this.options.clipboardCopyHeader !== \"undefined\") {\n\t\tthis.options.columnHeaders = this.options.clipboardCopyHeader;\n\t\tconsole.warn(\"DEPRECATION WARNING - clipboardCopyHeader option has been deprecated, please use the columnHeaders property on the clipboardCopyConfig option\");\n\t}\n\n\tif (this.options.printVisibleRows !== true) {\n\t\tconsole.warn(\"printVisibleRows option is deprecated, you should now use the printRowRange option\");\n\n\t\tthis.options.persistence.printRowRange = \"active\";\n\t}\n\n\tif (this.options.printCopyStyle !== true) {\n\t\tconsole.warn(\"printCopyStyle option is deprecated, you should now use the printStyled option\");\n\n\t\tthis.options.persistence.printStyled = this.options.printCopyStyle;\n\t}\n\n\tif (this.options.persistentLayout) {\n\t\tconsole.warn(\"persistentLayout option is deprecated, you should now use the persistence option\");\n\n\t\tif (this.options.persistence !== true && typeof this.options.persistence.columns === \"undefined\") {\n\t\t\tthis.options.persistence.columns = true;\n\t\t}\n\t}\n\n\tif (this.options.persistentSort) {\n\t\tconsole.warn(\"persistentSort option is deprecated, you should now use the persistence option\");\n\n\t\tif (this.options.persistence !== true && typeof this.options.persistence.sort === \"undefined\") {\n\t\t\tthis.options.persistence.sort = true;\n\t\t}\n\t}\n\n\tif (this.options.persistentFilter) {\n\t\tconsole.warn(\"persistentFilter option is deprecated, you should now use the persistence option\");\n\n\t\tif (this.options.persistence !== true && typeof this.options.persistence.filter === \"undefined\") {\n\t\t\tthis.options.persistence.filter = true;\n\t\t}\n\t}\n\n\tif (this.options.columnVertAlign) {\n\t\tconsole.warn(\"columnVertAlign option is deprecated, you should now use the columnHeaderVertAlign option\");\n\n\t\tthis.options.columnHeaderVertAlign = this.options.columnVertAlign;\n\t}\n};\n\nTabulator.prototype._clearSelection = function () {\n\n\tthis.element.classList.add(\"tabulator-block-select\");\n\n\tif (window.getSelection) {\n\t\tif (window.getSelection().empty) {\n\t\t\t// Chrome\n\t\t\twindow.getSelection().empty();\n\t\t} else if (window.getSelection().removeAllRanges) {\n\t\t\t// Firefox\n\t\t\twindow.getSelection().removeAllRanges();\n\t\t}\n\t} else if (document.selection) {\n\t\t// IE?\n\t\tdocument.selection.empty();\n\t}\n\n\tthis.element.classList.remove(\"tabulator-block-select\");\n};\n\n//concreate table\nTabulator.prototype._create = function () {\n\tthis._clearObjectPointers();\n\n\tthis._mapDepricatedFunctionality();\n\n\tthis.bindModules();\n\n\tthis.rtlCheck();\n\n\tif (this.element.tagName === \"TABLE\") {\n\t\tif (this.modExists(\"htmlTableImport\", true)) {\n\t\t\tthis.modules.htmlTableImport.parseTable();\n\t\t}\n\t}\n\n\tthis.columnManager = new ColumnManager(this);\n\tthis.rowManager = new RowManager(this);\n\tthis.footerManager = new FooterManager(this);\n\n\tthis.columnManager.setRowManager(this.rowManager);\n\tthis.rowManager.setColumnManager(this.columnManager);\n\n\tif (this.options.virtualDomHoz) {\n\t\tthis.vdomHoz = new VDomHoz(this);\n\t}\n\n\tthis._buildElement();\n\n\tthis._loadInitialData();\n};\n\n//clear pointers to objects in default config object\nTabulator.prototype._clearObjectPointers = function () {\n\tthis.options.columns = this.options.columns.slice(0);\n\n\tif (!this.options.reactiveData) {\n\t\tthis.options.data = this.options.data.slice(0);\n\t}\n};\n\n//build tabulator element\nTabulator.prototype._buildElement = function () {\n\tvar _this24 = this;\n\n\tvar element = this.element,\n\t mod = this.modules,\n\t options = this.options;\n\n\toptions.tableBuilding.call(this);\n\n\telement.classList.add(\"tabulator\");\n\telement.setAttribute(\"role\", \"grid\");\n\n\t//empty element\n\twhile (element.firstChild) {\n\t\telement.removeChild(element.firstChild);\n\t} //set table height\n\tif (options.height) {\n\t\toptions.height = isNaN(options.height) ? options.height : options.height + \"px\";\n\t\telement.style.height = options.height;\n\t}\n\n\t//set table min height\n\tif (options.minHeight !== false) {\n\t\toptions.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + \"px\";\n\t\telement.style.minHeight = options.minHeight;\n\t}\n\n\t//set table maxHeight\n\tif (options.maxHeight !== false) {\n\t\toptions.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + \"px\";\n\t\telement.style.maxHeight = options.maxHeight;\n\t}\n\n\tthis.columnManager.initialize();\n\tthis.rowManager.initialize();\n\n\tthis._detectBrowser();\n\n\tif (this.modExists(\"layout\", true)) {\n\t\tmod.layout.initialize(options.layout);\n\t}\n\n\t//set localization\n\n\tmod.localize.initialize();\n\n\tif (options.headerFilterPlaceholder !== false) {\n\t\tmod.localize.setHeaderFilterPlaceholder(options.headerFilterPlaceholder);\n\t}\n\n\tfor (var locale in options.langs) {\n\t\tmod.localize.installLang(locale, options.langs[locale]);\n\t}\n\n\tmod.localize.setLocale(options.locale);\n\n\t//configure placeholder element\n\tif (typeof options.placeholder == \"string\") {\n\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-placeholder\");\n\n\t\tvar span = document.createElement(\"span\");\n\t\tspan.innerHTML = options.placeholder;\n\n\t\tel.appendChild(span);\n\n\t\toptions.placeholder = el;\n\t}\n\n\t//build table elements\n\telement.appendChild(this.columnManager.getElement());\n\telement.appendChild(this.rowManager.getElement());\n\n\tif (options.footerElement) {\n\t\tthis.footerManager.activate();\n\t}\n\n\tif (options.persistence && this.modExists(\"persistence\", true)) {\n\t\tmod.persistence.initialize();\n\t}\n\n\tif (options.movableRows && this.modExists(\"moveRow\")) {\n\t\tmod.moveRow.initialize();\n\t}\n\n\tif (options.autoColumns && this.options.data) {\n\t\tthis.columnManager.generateColumnsFromRowData(this.options.data);\n\t}\n\n\tif (this.modExists(\"columnCalcs\")) {\n\t\tmod.columnCalcs.initialize();\n\t}\n\n\tthis.columnManager.setColumns(options.columns);\n\n\tif (options.dataTree && this.modExists(\"dataTree\", true)) {\n\t\tmod.dataTree.initialize();\n\t}\n\n\tif (this.modExists(\"frozenRows\")) {\n\t\tthis.modules.frozenRows.initialize();\n\t}\n\n\tif ((options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.sort || options.initialSort) && this.modExists(\"sort\", true)) {\n\t\tvar sorters = [];\n\n\t\tif (options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.sort) {\n\t\t\tsorters = mod.persistence.load(\"sort\");\n\n\t\t\tif (sorters === false && options.initialSort) {\n\t\t\t\tsorters = options.initialSort;\n\t\t\t}\n\t\t} else if (options.initialSort) {\n\t\t\tsorters = options.initialSort;\n\t\t}\n\n\t\tmod.sort.setSort(sorters);\n\t}\n\n\tif ((options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.filter || options.initialFilter) && this.modExists(\"filter\", true)) {\n\t\tvar filters = [];\n\n\t\tif (options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.filter) {\n\t\t\tfilters = mod.persistence.load(\"filter\");\n\n\t\t\tif (filters === false && options.initialFilter) {\n\t\t\t\tfilters = options.initialFilter;\n\t\t\t}\n\t\t} else if (options.initialFilter) {\n\t\t\tfilters = options.initialFilter;\n\t\t}\n\n\t\tmod.filter.setFilter(filters);\n\t}\n\n\tif (options.initialHeaderFilter && this.modExists(\"filter\", true)) {\n\t\toptions.initialHeaderFilter.forEach(function (item) {\n\n\t\t\tvar column = _this24.columnManager.findColumn(item.field);\n\n\t\t\tif (column) {\n\t\t\t\tmod.filter.setHeaderFilterValue(column, item.value);\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", item.field);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n\tif (this.modExists(\"ajax\")) {\n\t\tmod.ajax.initialize();\n\t}\n\n\tif (options.pagination && this.modExists(\"page\", true)) {\n\t\tmod.page.initialize();\n\t}\n\n\tif (options.groupBy && this.modExists(\"groupRows\", true)) {\n\t\tmod.groupRows.initialize();\n\t}\n\n\tif (this.modExists(\"keybindings\")) {\n\t\tmod.keybindings.initialize();\n\t}\n\n\tif (this.modExists(\"selectRow\")) {\n\t\tmod.selectRow.clearSelectionData(true);\n\t}\n\n\tif (options.autoResize && this.modExists(\"resizeTable\")) {\n\t\tmod.resizeTable.initialize();\n\t}\n\n\tif (this.modExists(\"clipboard\")) {\n\t\tmod.clipboard.initialize();\n\t}\n\n\tif (options.printAsHtml && this.modExists(\"print\")) {\n\t\tmod.print.initialize();\n\t}\n\n\toptions.tableBuilt.call(this);\n};\n\nTabulator.prototype._loadInitialData = function () {\n\tvar self = this;\n\n\tif (self.options.pagination && self.modExists(\"page\")) {\n\t\tself.modules.page.reset(true, true);\n\n\t\tif (self.options.pagination == \"local\") {\n\t\t\tif (self.options.data.length) {\n\t\t\t\tself.rowManager.setData(self.options.data, false, true);\n\t\t\t} else {\n\t\t\t\tif ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists(\"ajax\")) {\n\t\t\t\t\tself.modules.ajax.loadData(false, true).then(function () {}).catch(function () {\n\t\t\t\t\t\tif (self.options.paginationInitialPage) {\n\t\t\t\t\t\t\tself.modules.page.setPage(self.options.paginationInitialPage);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\treturn;\n\t\t\t\t} else {\n\t\t\t\t\tself.rowManager.setData(self.options.data, false, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (self.options.paginationInitialPage) {\n\t\t\t\tself.modules.page.setPage(self.options.paginationInitialPage);\n\t\t\t}\n\t\t} else {\n\t\t\tif (self.options.ajaxURL) {\n\t\t\t\tself.modules.page.setPage(self.options.paginationInitialPage).then(function () {}).catch(function () {});\n\t\t\t} else {\n\t\t\t\tself.rowManager.setData([], false, true);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (self.options.data.length) {\n\t\t\tself.rowManager.setData(self.options.data);\n\t\t} else {\n\t\t\tif ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists(\"ajax\")) {\n\t\t\t\tself.modules.ajax.loadData(false, true).then(function () {}).catch(function () {});\n\t\t\t} else {\n\t\t\t\tself.rowManager.setData(self.options.data, false, true);\n\t\t\t}\n\t\t}\n\t}\n};\n\n//deconstructor\nTabulator.prototype.destroy = function () {\n\tvar element = this.element;\n\n\tTabulator.prototype.comms.deregister(this); //deregister table from inderdevice communication\n\n\tif (this.options.reactiveData && this.modExists(\"reactiveData\", true)) {\n\t\tthis.modules.reactiveData.unwatchData();\n\t}\n\n\t//clear row data\n\tthis.rowManager.rows.forEach(function (row) {\n\t\trow.wipe();\n\t});\n\n\tthis.rowManager.rows = [];\n\tthis.rowManager.activeRows = [];\n\tthis.rowManager.displayRows = [];\n\n\t//clear event bindings\n\tif (this.options.autoResize && this.modExists(\"resizeTable\")) {\n\t\tthis.modules.resizeTable.clearBindings();\n\t}\n\n\tif (this.modExists(\"keybindings\")) {\n\t\tthis.modules.keybindings.clearBindings();\n\t}\n\n\t//clear DOM\n\twhile (element.firstChild) {\n\t\telement.removeChild(element.firstChild);\n\t}element.classList.remove(\"tabulator\");\n};\n\nTabulator.prototype._detectBrowser = function () {\n\tvar ua = navigator.userAgent || navigator.vendor || window.opera;\n\n\tif (ua.indexOf(\"Trident\") > -1) {\n\t\tthis.browser = \"ie\";\n\t\tthis.browserSlow = true;\n\t} else if (ua.indexOf(\"Edge\") > -1) {\n\t\tthis.browser = \"edge\";\n\t\tthis.browserSlow = true;\n\t} else if (ua.indexOf(\"Firefox\") > -1) {\n\t\tthis.browser = \"firefox\";\n\t\tthis.browserSlow = false;\n\t} else {\n\t\tthis.browser = \"other\";\n\t\tthis.browserSlow = false;\n\t}\n\n\tthis.browserMobile = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(ua.substr(0, 4));\n};\n\n////////////////// Data Handling //////////////////\n\n//block table redrawing\nTabulator.prototype.blockRedraw = function () {\n\treturn this.rowManager.blockRedraw();\n};\n\n//restore table redrawing\nTabulator.prototype.restoreRedraw = function () {\n\treturn this.rowManager.restoreRedraw();\n};\n\n//local data from local file\nTabulator.prototype.setDataFromLocalFile = function (extensions) {\n\tvar _this25 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar input = document.createElement(\"input\");\n\t\tinput.type = \"file\";\n\t\tinput.accept = extensions || \".json,application/json\";\n\n\t\tinput.addEventListener(\"change\", function (e) {\n\t\t\tvar file = input.files[0],\n\t\t\t reader = new FileReader(),\n\t\t\t data;\n\n\t\t\treader.readAsText(file);\n\n\t\t\treader.onload = function (e) {\n\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse(reader.result);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.warn(\"File Load Error - File contents is invalid JSON\", e);\n\t\t\t\t\treject(e);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t_this25.setData(data).then(function (data) {\n\t\t\t\t\tresolve(data);\n\t\t\t\t}).catch(function (err) {\n\t\t\t\t\tresolve(err);\n\t\t\t\t});\n\t\t\t};\n\n\t\t\treader.onerror = function (e) {\n\t\t\t\tconsole.warn(\"File Load Error - Unable to read file\");\n\t\t\t\treject();\n\t\t\t};\n\t\t});\n\n\t\tinput.click();\n\t});\n};\n\n//load data\nTabulator.prototype.setData = function (data, params, config) {\n\tif (this.modExists(\"ajax\")) {\n\t\tthis.modules.ajax.blockActiveRequest();\n\t}\n\n\treturn this._setData(data, params, config, false, true);\n};\n\nTabulator.prototype._setData = function (data, params, config, inPosition, columnsChanged) {\n\tvar self = this;\n\n\tif (typeof data === \"string\") {\n\t\tif (data.indexOf(\"{\") == 0 || data.indexOf(\"[\") == 0) {\n\t\t\t//data is a json encoded string\n\t\t\treturn self.rowManager.setData(JSON.parse(data), inPosition, columnsChanged);\n\t\t} else {\n\n\t\t\tif (self.modExists(\"ajax\", true)) {\n\t\t\t\tif (params) {\n\t\t\t\t\tself.modules.ajax.setParams(params);\n\t\t\t\t}\n\n\t\t\t\tif (config) {\n\t\t\t\t\tself.modules.ajax.setConfig(config);\n\t\t\t\t}\n\n\t\t\t\tself.modules.ajax.setUrl(data);\n\n\t\t\t\tif (self.options.pagination == \"remote\" && self.modExists(\"page\", true)) {\n\t\t\t\t\tself.modules.page.reset(true, true);\n\t\t\t\t\treturn self.modules.page.setPage(1);\n\t\t\t\t} else {\n\t\t\t\t\t//assume data is url, make ajax call to url to get data\n\t\t\t\t\treturn self.modules.ajax.loadData(inPosition, columnsChanged);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (data) {\n\t\t\t//asume data is already an object\n\t\t\treturn self.rowManager.setData(data, inPosition, columnsChanged);\n\t\t} else {\n\n\t\t\t//no data provided, check if ajaxURL is present;\n\t\t\tif (self.modExists(\"ajax\") && (self.modules.ajax.getUrl || self.options.ajaxURLGenerator)) {\n\n\t\t\t\tif (self.options.pagination == \"remote\" && self.modExists(\"page\", true)) {\n\t\t\t\t\tself.modules.page.reset(true, true);\n\t\t\t\t\treturn self.modules.page.setPage(1);\n\t\t\t\t} else {\n\t\t\t\t\treturn self.modules.ajax.loadData(inPosition, columnsChanged);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t//empty data\n\t\t\t\treturn self.rowManager.setData([], inPosition, columnsChanged);\n\t\t\t}\n\t\t}\n\t}\n};\n\n//clear data\nTabulator.prototype.clearData = function () {\n\tif (this.modExists(\"ajax\")) {\n\t\tthis.modules.ajax.blockActiveRequest();\n\t}\n\n\tthis.rowManager.clearData();\n};\n\n//get table data array\nTabulator.prototype.getData = function (active) {\n\n\tif (active === true) {\n\t\tconsole.warn(\"passing a boolean to the getData function is deprecated, you should now pass the string 'active'\");\n\t\tactive = \"active\";\n\t}\n\n\treturn this.rowManager.getData(active);\n};\n\n//get table data array count\nTabulator.prototype.getDataCount = function (active) {\n\n\tif (active === true) {\n\t\tconsole.warn(\"passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'\");\n\t\tactive = \"active\";\n\t}\n\n\treturn this.rowManager.getDataCount(active);\n};\n\n//search for specific row components\nTabulator.prototype.searchRows = function (field, type, value) {\n\tif (this.modExists(\"filter\", true)) {\n\t\treturn this.modules.filter.search(\"rows\", field, type, value);\n\t}\n};\n\n//search for specific data\nTabulator.prototype.searchData = function (field, type, value) {\n\tif (this.modExists(\"filter\", true)) {\n\t\treturn this.modules.filter.search(\"data\", field, type, value);\n\t}\n};\n\n//get table html\nTabulator.prototype.getHtml = function (visible, style, config) {\n\tif (this.modExists(\"export\", true)) {\n\t\treturn this.modules.export.getHtml(visible, style, config);\n\t}\n};\n\n//get print html\nTabulator.prototype.print = function (visible, style, config) {\n\tif (this.modExists(\"print\", true)) {\n\t\treturn this.modules.print.printFullscreen(visible, style, config);\n\t}\n};\n\n//retrieve Ajax URL\nTabulator.prototype.getAjaxUrl = function () {\n\tif (this.modExists(\"ajax\", true)) {\n\t\treturn this.modules.ajax.getUrl();\n\t}\n};\n\n//replace data, keeping table in position with same sort\nTabulator.prototype.replaceData = function (data, params, config) {\n\tif (this.modExists(\"ajax\")) {\n\t\tthis.modules.ajax.blockActiveRequest();\n\t}\n\n\treturn this._setData(data, params, config, true);\n};\n\n//update table data\nTabulator.prototype.updateData = function (data) {\n\tvar _this26 = this;\n\n\tvar self = this;\n\tvar responses = 0;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (_this26.modExists(\"ajax\")) {\n\t\t\t_this26.modules.ajax.blockActiveRequest();\n\t\t}\n\n\t\tif (typeof data === \"string\") {\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\tif (data) {\n\t\t\tdata.forEach(function (item) {\n\t\t\t\tvar row = self.rowManager.findRow(item[self.options.index]);\n\n\t\t\t\tif (row) {\n\t\t\t\t\tresponses++;\n\n\t\t\t\t\trow.updateData(item).then(function () {\n\t\t\t\t\t\tresponses--;\n\n\t\t\t\t\t\tif (!responses) {\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\treject(\"Update Error - No data provided\");\n\t\t}\n\t});\n};\n\nTabulator.prototype.addData = function (data, pos, index) {\n\tvar _this27 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (_this27.modExists(\"ajax\")) {\n\t\t\t_this27.modules.ajax.blockActiveRequest();\n\t\t}\n\n\t\tif (typeof data === \"string\") {\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\tif (data) {\n\t\t\t_this27.rowManager.addRows(data, pos, index).then(function (rows) {\n\t\t\t\tvar output = [];\n\n\t\t\t\trows.forEach(function (row) {\n\t\t\t\t\toutput.push(row.getComponent());\n\t\t\t\t});\n\n\t\t\t\tresolve(output);\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\treject(\"Update Error - No data provided\");\n\t\t}\n\t});\n};\n\n//update table data\nTabulator.prototype.updateOrAddData = function (data) {\n\tvar _this28 = this;\n\n\tvar self = this,\n\t rows = [],\n\t responses = 0;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (_this28.modExists(\"ajax\")) {\n\t\t\t_this28.modules.ajax.blockActiveRequest();\n\t\t}\n\n\t\tif (typeof data === \"string\") {\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\tif (data) {\n\t\t\tdata.forEach(function (item) {\n\t\t\t\tvar row = self.rowManager.findRow(item[self.options.index]);\n\n\t\t\t\tresponses++;\n\n\t\t\t\tif (row) {\n\t\t\t\t\trow.updateData(item).then(function () {\n\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\trows.push(row.getComponent());\n\n\t\t\t\t\t\tif (!responses) {\n\t\t\t\t\t\t\tresolve(rows);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tself.rowManager.addRows(item).then(function (newRows) {\n\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\trows.push(newRows[0].getComponent());\n\n\t\t\t\t\t\tif (!responses) {\n\t\t\t\t\t\t\tresolve(rows);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\treject(\"Update Error - No data provided\");\n\t\t}\n\t});\n};\n\n//get row object\nTabulator.prototype.getRow = function (index) {\n\tvar row = this.rowManager.findRow(index);\n\n\tif (row) {\n\t\treturn row.getComponent();\n\t} else {\n\t\tconsole.warn(\"Find Error - No matching row found:\", index);\n\t\treturn false;\n\t}\n};\n\n//get row object\nTabulator.prototype.getRowFromPosition = function (position, active) {\n\tvar row = this.rowManager.getRowFromPosition(position, active);\n\n\tif (row) {\n\t\treturn row.getComponent();\n\t} else {\n\t\tconsole.warn(\"Find Error - No matching row found:\", position);\n\t\treturn false;\n\t}\n};\n\n//delete row from table\nTabulator.prototype.deleteRow = function (index) {\n\tvar _this29 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar self = _this29,\n\t\t count = 0,\n\t\t successCount = 0,\n\t\t foundRows = [];\n\n\t\tfunction doneCheck() {\n\t\t\tcount++;\n\n\t\t\tif (count == index.length) {\n\t\t\t\tif (successCount) {\n\t\t\t\t\tself.rowManager.reRenderInPosition();\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!Array.isArray(index)) {\n\t\t\tindex = [index];\n\t\t}\n\n\t\t//find matching rows\n\t\tindex.forEach(function (item) {\n\t\t\tvar row = _this29.rowManager.findRow(item, true);\n\n\t\t\tif (row) {\n\t\t\t\tfoundRows.push(row);\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Delete Error - No matching row found:\", item);\n\t\t\t\treject(\"Delete Error - No matching row found\");\n\t\t\t\tdoneCheck();\n\t\t\t}\n\t\t});\n\n\t\t//sort rows into correct order to ensure smooth delete from table\n\t\tfoundRows.sort(function (a, b) {\n\t\t\treturn _this29.rowManager.rows.indexOf(a) > _this29.rowManager.rows.indexOf(b) ? 1 : -1;\n\t\t});\n\n\t\tfoundRows.forEach(function (row) {\n\t\t\trow.delete().then(function () {\n\t\t\t\tsuccessCount++;\n\t\t\t\tdoneCheck();\n\t\t\t}).catch(function (err) {\n\t\t\t\tdoneCheck();\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t});\n};\n\n//add row to table\nTabulator.prototype.addRow = function (data, pos, index) {\n\tvar _this30 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (typeof data === \"string\") {\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\t_this30.rowManager.addRows(data, pos, index).then(function (rows) {\n\t\t\t//recalc column calculations if present\n\t\t\tif (_this30.modExists(\"columnCalcs\")) {\n\t\t\t\t_this30.modules.columnCalcs.recalc(_this30.rowManager.activeRows);\n\t\t\t}\n\n\t\t\tresolve(rows[0].getComponent());\n\t\t});\n\t});\n};\n\n//update a row if it exitsts otherwise create it\nTabulator.prototype.updateOrAddRow = function (index, data) {\n\tvar _this31 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar row = _this31.rowManager.findRow(index);\n\n\t\tif (typeof data === \"string\") {\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\tif (row) {\n\t\t\trow.updateData(data).then(function () {\n\t\t\t\t//recalc column calculations if present\n\t\t\t\tif (_this31.modExists(\"columnCalcs\")) {\n\t\t\t\t\t_this31.modules.columnCalcs.recalc(_this31.rowManager.activeRows);\n\t\t\t\t}\n\n\t\t\t\tresolve(row.getComponent());\n\t\t\t}).catch(function (err) {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t} else {\n\t\t\trow = _this31.rowManager.addRows(data).then(function (rows) {\n\t\t\t\t//recalc column calculations if present\n\t\t\t\tif (_this31.modExists(\"columnCalcs\")) {\n\t\t\t\t\t_this31.modules.columnCalcs.recalc(_this31.rowManager.activeRows);\n\t\t\t\t}\n\n\t\t\t\tresolve(rows[0].getComponent());\n\t\t\t}).catch(function (err) {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t}\n\t});\n};\n\n//update row data\nTabulator.prototype.updateRow = function (index, data) {\n\tvar _this32 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar row = _this32.rowManager.findRow(index);\n\n\t\tif (typeof data === \"string\") {\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\tif (row) {\n\t\t\trow.updateData(data).then(function () {\n\t\t\t\tresolve(row.getComponent());\n\t\t\t}).catch(function (err) {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Update Error - No matching row found:\", index);\n\t\t\treject(\"Update Error - No matching row found\");\n\t\t}\n\t});\n};\n\n//scroll to row in DOM\nTabulator.prototype.scrollToRow = function (index, position, ifVisible) {\n\tvar _this33 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar row = _this33.rowManager.findRow(index);\n\n\t\tif (row) {\n\t\t\t_this33.rowManager.scrollToRow(row, position, ifVisible).then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function (err) {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Scroll Error - No matching row found:\", index);\n\t\t\treject(\"Scroll Error - No matching row found\");\n\t\t}\n\t});\n};\n\nTabulator.prototype.moveRow = function (from, to, after) {\n\tvar fromRow = this.rowManager.findRow(from);\n\n\tif (fromRow) {\n\t\tfromRow.moveToRow(to, after);\n\t} else {\n\t\tconsole.warn(\"Move Error - No matching row found:\", from);\n\t}\n};\n\nTabulator.prototype.getRows = function (active) {\n\n\tif (active === true) {\n\t\tconsole.warn(\"passing a boolean to the getRows function is deprecated, you should now pass the string 'active'\");\n\t\tactive = \"active\";\n\t}\n\n\treturn this.rowManager.getComponents(active);\n};\n\n//get position of row in table\nTabulator.prototype.getRowPosition = function (index, active) {\n\tvar row = this.rowManager.findRow(index);\n\n\tif (row) {\n\t\treturn this.rowManager.getRowPosition(row, active);\n\t} else {\n\t\tconsole.warn(\"Position Error - No matching row found:\", index);\n\t\treturn false;\n\t}\n};\n\n//copy table data to clipboard\nTabulator.prototype.copyToClipboard = function (selector) {\n\tif (this.modExists(\"clipboard\", true)) {\n\t\tthis.modules.clipboard.copy(selector);\n\t}\n};\n\n/////////////// Column Functions ///////////////\n\nTabulator.prototype.setColumns = function (definition) {\n\tthis.columnManager.setColumns(definition);\n};\n\nTabulator.prototype.getColumns = function (structured) {\n\treturn this.columnManager.getComponents(structured);\n};\n\nTabulator.prototype.getColumn = function (field) {\n\tvar col = this.columnManager.findColumn(field);\n\n\tif (col) {\n\t\treturn col.getComponent();\n\t} else {\n\t\tconsole.warn(\"Find Error - No matching column found:\", field);\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.getColumnDefinitions = function () {\n\treturn this.columnManager.getDefinitionTree();\n};\n\nTabulator.prototype.getColumnLayout = function () {\n\tif (this.modExists(\"persistence\", true)) {\n\t\treturn this.modules.persistence.parseColumns(this.columnManager.getColumns());\n\t}\n};\n\nTabulator.prototype.setColumnLayout = function (layout) {\n\tif (this.modExists(\"persistence\", true)) {\n\t\tthis.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns, layout));\n\t\treturn true;\n\t}\n\treturn false;\n};\n\nTabulator.prototype.showColumn = function (field) {\n\tvar column = this.columnManager.findColumn(field);\n\n\tif (column) {\n\t\tcolumn.show();\n\n\t\tif (this.options.responsiveLayout && this.modExists(\"responsiveLayout\", true)) {\n\t\t\tthis.modules.responsiveLayout.update();\n\t\t}\n\t} else {\n\t\tconsole.warn(\"Column Show Error - No matching column found:\", field);\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.hideColumn = function (field) {\n\tvar column = this.columnManager.findColumn(field);\n\n\tif (column) {\n\t\tcolumn.hide();\n\n\t\tif (this.options.responsiveLayout && this.modExists(\"responsiveLayout\", true)) {\n\t\t\tthis.modules.responsiveLayout.update();\n\t\t}\n\t} else {\n\t\tconsole.warn(\"Column Hide Error - No matching column found:\", field);\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.toggleColumn = function (field) {\n\tvar column = this.columnManager.findColumn(field);\n\n\tif (column) {\n\t\tif (column.visible) {\n\t\t\tcolumn.hide();\n\t\t} else {\n\t\t\tcolumn.show();\n\t\t}\n\t} else {\n\t\tconsole.warn(\"Column Visibility Toggle Error - No matching column found:\", field);\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.addColumn = function (definition, before, field) {\n\tvar _this34 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar column = _this34.columnManager.findColumn(field);\n\n\t\t_this34.columnManager.addColumn(definition, before, column).then(function (column) {\n\t\t\tresolve(column.getComponent());\n\t\t}).catch(function (err) {\n\t\t\treject(err);\n\t\t});\n\t});\n};\n\nTabulator.prototype.deleteColumn = function (field) {\n\tvar _this35 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar column = _this35.columnManager.findColumn(field);\n\n\t\tif (column) {\n\t\t\tcolumn.delete().then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function (err) {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Column Delete Error - No matching column found:\", field);\n\t\t\treject();\n\t\t}\n\t});\n};\n\nTabulator.prototype.updateColumnDefinition = function (field, definition) {\n\tvar _this36 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar column = _this36.columnManager.findColumn(field);\n\n\t\tif (column) {\n\t\t\tcolumn.updateDefinition(definition).then(function (col) {\n\t\t\t\tresolve(col);\n\t\t\t}).catch(function (err) {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Column Update Error - No matching column found:\", field);\n\t\t\treject();\n\t\t}\n\t});\n};\n\nTabulator.prototype.moveColumn = function (from, to, after) {\n\tvar fromColumn = this.columnManager.findColumn(from);\n\tvar toColumn = this.columnManager.findColumn(to);\n\n\tif (fromColumn) {\n\t\tif (toColumn) {\n\t\t\tthis.columnManager.moveColumn(fromColumn, toColumn, after);\n\t\t} else {\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\n\t\t}\n\t} else {\n\t\tconsole.warn(\"Move Error - No matching column found:\", from);\n\t}\n};\n\n//scroll to column in DOM\nTabulator.prototype.scrollToColumn = function (field, position, ifVisible) {\n\tvar _this37 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar column = _this37.columnManager.findColumn(field);\n\n\t\tif (column) {\n\t\t\t_this37.columnManager.scrollToColumn(column, position, ifVisible).then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function (err) {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Scroll Error - No matching column found:\", field);\n\t\t\treject(\"Scroll Error - No matching column found\");\n\t\t}\n\t});\n};\n\n//////////// Localization Functions ////////////\nTabulator.prototype.setLocale = function (locale) {\n\tthis.modules.localize.setLocale(locale);\n};\n\nTabulator.prototype.getLocale = function () {\n\treturn this.modules.localize.getLocale();\n};\n\nTabulator.prototype.getLang = function (locale) {\n\treturn this.modules.localize.getLang(locale);\n};\n\n//////////// General Public Functions ////////////\n\n//redraw list without updating data\nTabulator.prototype.redraw = function (force) {\n\tthis.columnManager.redraw(force);\n\tthis.rowManager.redraw(force);\n};\n\nTabulator.prototype.setHeight = function (height) {\n\n\tif (this.rowManager.renderMode !== \"classic\") {\n\t\tthis.options.height = isNaN(height) ? height : height + \"px\";\n\t\tthis.element.style.height = this.options.height;\n\t\tthis.rowManager.setRenderMode();\n\t\tthis.rowManager.redraw();\n\t} else {\n\t\tconsole.warn(\"setHeight function is not available in classic render mode\");\n\t}\n};\n\n///////////////////// Sorting ////////////////////\n\n//trigger sort\nTabulator.prototype.setSort = function (sortList, dir) {\n\tif (this.modExists(\"sort\", true)) {\n\t\tthis.modules.sort.setSort(sortList, dir);\n\t\tthis.rowManager.sorterRefresh();\n\t}\n};\n\nTabulator.prototype.getSorters = function () {\n\tif (this.modExists(\"sort\", true)) {\n\t\treturn this.modules.sort.getSort();\n\t}\n};\n\nTabulator.prototype.clearSort = function () {\n\tif (this.modExists(\"sort\", true)) {\n\t\tthis.modules.sort.clear();\n\t\tthis.rowManager.sorterRefresh();\n\t}\n};\n\n///////////////////// Filtering ////////////////////\n\n//set standard filters\nTabulator.prototype.setFilter = function (field, type, value, params) {\n\tif (this.modExists(\"filter\", true)) {\n\t\tthis.modules.filter.setFilter(field, type, value, params);\n\t\tthis.rowManager.filterRefresh();\n\t}\n};\n\n//set standard filters\nTabulator.prototype.refreshFilter = function () {\n\tif (this.modExists(\"filter\", true)) {\n\t\tthis.rowManager.filterRefresh();\n\t}\n};\n\n//add filter to array\nTabulator.prototype.addFilter = function (field, type, value, params) {\n\tif (this.modExists(\"filter\", true)) {\n\t\tthis.modules.filter.addFilter(field, type, value, params);\n\t\tthis.rowManager.filterRefresh();\n\t}\n};\n\n//get all filters\nTabulator.prototype.getFilters = function (all) {\n\tif (this.modExists(\"filter\", true)) {\n\t\treturn this.modules.filter.getFilters(all);\n\t}\n};\n\nTabulator.prototype.setHeaderFilterFocus = function (field) {\n\tif (this.modExists(\"filter\", true)) {\n\t\tvar column = this.columnManager.findColumn(field);\n\n\t\tif (column) {\n\t\t\tthis.modules.filter.setHeaderFilterFocus(column);\n\t\t} else {\n\t\t\tconsole.warn(\"Column Filter Focus Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\nTabulator.prototype.getHeaderFilterValue = function (field) {\n\tif (this.modExists(\"filter\", true)) {\n\t\tvar column = this.columnManager.findColumn(field);\n\n\t\tif (column) {\n\t\t\treturn this.modules.filter.getHeaderFilterValue(column);\n\t\t} else {\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\n\t\t}\n\t}\n};\n\nTabulator.prototype.setHeaderFilterValue = function (field, value) {\n\tif (this.modExists(\"filter\", true)) {\n\t\tvar column = this.columnManager.findColumn(field);\n\n\t\tif (column) {\n\t\t\tthis.modules.filter.setHeaderFilterValue(column, value);\n\t\t} else {\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\nTabulator.prototype.getHeaderFilters = function () {\n\tif (this.modExists(\"filter\", true)) {\n\t\treturn this.modules.filter.getHeaderFilters();\n\t}\n};\n\n//remove filter from array\nTabulator.prototype.removeFilter = function (field, type, value) {\n\tif (this.modExists(\"filter\", true)) {\n\t\tthis.modules.filter.removeFilter(field, type, value);\n\t\tthis.rowManager.filterRefresh();\n\t}\n};\n\n//clear filters\nTabulator.prototype.clearFilter = function (all) {\n\tif (this.modExists(\"filter\", true)) {\n\t\tthis.modules.filter.clearFilter(all);\n\t\tthis.rowManager.filterRefresh();\n\t}\n};\n\n//clear header filters\nTabulator.prototype.clearHeaderFilter = function () {\n\tif (this.modExists(\"filter\", true)) {\n\t\tthis.modules.filter.clearHeaderFilter();\n\t\tthis.rowManager.filterRefresh();\n\t}\n};\n\n///////////////////// select ////////////////////\nTabulator.prototype.selectRow = function (rows) {\n\tif (this.modExists(\"selectRow\", true)) {\n\t\tif (rows === true) {\n\t\t\tconsole.warn(\"passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'\");\n\t\t\trows = \"active\";\n\t\t}\n\t\tthis.modules.selectRow.selectRows(rows);\n\t}\n};\n\nTabulator.prototype.deselectRow = function (rows) {\n\tif (this.modExists(\"selectRow\", true)) {\n\t\tthis.modules.selectRow.deselectRows(rows);\n\t}\n};\n\nTabulator.prototype.toggleSelectRow = function (row) {\n\tif (this.modExists(\"selectRow\", true)) {\n\t\tthis.modules.selectRow.toggleRow(row);\n\t}\n};\n\nTabulator.prototype.getSelectedRows = function () {\n\tif (this.modExists(\"selectRow\", true)) {\n\t\treturn this.modules.selectRow.getSelectedRows();\n\t}\n};\n\nTabulator.prototype.getSelectedData = function () {\n\tif (this.modExists(\"selectRow\", true)) {\n\t\treturn this.modules.selectRow.getSelectedData();\n\t}\n};\n\n///////////////////// validation ////////////////////\nTabulator.prototype.getInvalidCells = function () {\n\tif (this.modExists(\"validate\", true)) {\n\t\treturn this.modules.validate.getInvalidCells();\n\t}\n};\n\nTabulator.prototype.clearCellValidation = function (cells) {\n\tvar _this38 = this;\n\n\tif (this.modExists(\"validate\", true)) {\n\n\t\tif (!cells) {\n\t\t\tcells = this.modules.validate.getInvalidCells();\n\t\t}\n\n\t\tif (!Array.isArray(cells)) {\n\t\t\tcells = [cells];\n\t\t}\n\n\t\tcells.forEach(function (cell) {\n\t\t\t_this38.modules.validate.clearValidation(cell._getSelf());\n\t\t});\n\t}\n};\n\nTabulator.prototype.validate = function (cells) {\n\tvar output = [];\n\n\t//clear row data\n\tthis.rowManager.rows.forEach(function (row) {\n\t\tvar valid = row.validate();\n\n\t\tif (valid !== true) {\n\t\t\toutput = output.concat(valid);\n\t\t}\n\t});\n\n\treturn output.length ? output : true;\n};\n\n//////////// Pagination Functions ////////////\n\nTabulator.prototype.setMaxPage = function (max) {\n\tif (this.options.pagination && this.modExists(\"page\")) {\n\t\tthis.modules.page.setMaxPage(max);\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.setPage = function (page) {\n\tif (this.options.pagination && this.modExists(\"page\")) {\n\t\treturn this.modules.page.setPage(page);\n\t} else {\n\t\treturn new Promise(function (resolve, reject) {\n\t\t\treject();\n\t\t});\n\t}\n};\n\nTabulator.prototype.setPageToRow = function (row) {\n\tvar _this39 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (_this39.options.pagination && _this39.modExists(\"page\")) {\n\t\t\trow = _this39.rowManager.findRow(row);\n\n\t\t\tif (row) {\n\t\t\t\t_this39.modules.page.setPageToRow(row).then(function () {\n\t\t\t\t\tresolve();\n\t\t\t\t}).catch(function () {\n\t\t\t\t\treject();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treject();\n\t\t\t}\n\t\t} else {\n\t\t\treject();\n\t\t}\n\t});\n};\n\nTabulator.prototype.setPageSize = function (size) {\n\tif (this.options.pagination && this.modExists(\"page\")) {\n\t\tthis.modules.page.setPageSize(size);\n\t\tthis.modules.page.setPage(1).then(function () {}).catch(function () {});\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.getPageSize = function () {\n\tif (this.options.pagination && this.modExists(\"page\", true)) {\n\t\treturn this.modules.page.getPageSize();\n\t}\n};\n\nTabulator.prototype.previousPage = function () {\n\tif (this.options.pagination && this.modExists(\"page\")) {\n\t\tthis.modules.page.previousPage();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.nextPage = function () {\n\tif (this.options.pagination && this.modExists(\"page\")) {\n\t\tthis.modules.page.nextPage();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.getPage = function () {\n\tif (this.options.pagination && this.modExists(\"page\")) {\n\t\treturn this.modules.page.getPage();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.getPageMax = function () {\n\tif (this.options.pagination && this.modExists(\"page\")) {\n\t\treturn this.modules.page.getPageMax();\n\t} else {\n\t\treturn false;\n\t}\n};\n\n///////////////// Grouping Functions ///////////////\n\nTabulator.prototype.setGroupBy = function (groups) {\n\tif (this.modExists(\"groupRows\", true)) {\n\t\tthis.options.groupBy = groups;\n\t\tthis.modules.groupRows.initialize();\n\t\tthis.rowManager.refreshActiveData(\"display\");\n\n\t\tif (this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group) {\n\t\t\tthis.modules.persistence.save(\"group\");\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.setGroupValues = function (groupValues) {\n\tif (this.modExists(\"groupRows\", true)) {\n\t\tthis.options.groupValues = groupValues;\n\t\tthis.modules.groupRows.initialize();\n\t\tthis.rowManager.refreshActiveData(\"display\");\n\n\t\tif (this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group) {\n\t\t\tthis.modules.persistence.save(\"group\");\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.setGroupStartOpen = function (values) {\n\tif (this.modExists(\"groupRows\", true)) {\n\t\tthis.options.groupStartOpen = values;\n\t\tthis.modules.groupRows.initialize();\n\t\tif (this.options.groupBy) {\n\t\t\tthis.rowManager.refreshActiveData(\"group\");\n\n\t\t\tif (this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group) {\n\t\t\t\tthis.modules.persistence.save(\"group\");\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.setGroupHeader = function (values) {\n\tif (this.modExists(\"groupRows\", true)) {\n\t\tthis.options.groupHeader = values;\n\t\tthis.modules.groupRows.initialize();\n\t\tif (this.options.groupBy) {\n\t\t\tthis.rowManager.refreshActiveData(\"group\");\n\n\t\t\tif (this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group) {\n\t\t\t\tthis.modules.persistence.save(\"group\");\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.getGroups = function (values) {\n\tif (this.modExists(\"groupRows\", true)) {\n\t\treturn this.modules.groupRows.getGroups(true);\n\t} else {\n\t\treturn false;\n\t}\n};\n\n// get grouped table data in the same format as getData()\nTabulator.prototype.getGroupedData = function () {\n\tif (this.modExists(\"groupRows\", true)) {\n\t\treturn this.options.groupBy ? this.modules.groupRows.getGroupedData() : this.getData();\n\t}\n};\n\nTabulator.prototype.getEditedCells = function () {\n\tif (this.modExists(\"edit\", true)) {\n\t\treturn this.modules.edit.getEditedCells();\n\t}\n};\n\nTabulator.prototype.clearCellEdited = function (cells) {\n\tvar _this40 = this;\n\n\tif (this.modExists(\"edit\", true)) {\n\n\t\tif (!cells) {\n\t\t\tcells = this.modules.edit.getEditedCells();\n\t\t}\n\n\t\tif (!Array.isArray(cells)) {\n\t\t\tcells = [cells];\n\t\t}\n\n\t\tcells.forEach(function (cell) {\n\t\t\t_this40.modules.edit.clearEdited(cell._getSelf());\n\t\t});\n\t}\n};\n\n///////////////// Column Calculation Functions ///////////////\nTabulator.prototype.getCalcResults = function () {\n\tif (this.modExists(\"columnCalcs\", true)) {\n\t\treturn this.modules.columnCalcs.getResults();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.recalc = function () {\n\tif (this.modExists(\"columnCalcs\", true)) {\n\t\tthis.modules.columnCalcs.recalcAll(this.rowManager.activeRows);\n\t}\n};\n\n/////////////// Navigation Management //////////////\n\nTabulator.prototype.navigatePrev = function () {\n\tvar cell = false;\n\n\tif (this.modExists(\"edit\", true)) {\n\t\tcell = this.modules.edit.currentCell;\n\n\t\tif (cell) {\n\t\t\treturn cell.nav().prev();\n\t\t}\n\t}\n\n\treturn false;\n};\n\nTabulator.prototype.navigateNext = function () {\n\tvar cell = false;\n\n\tif (this.modExists(\"edit\", true)) {\n\t\tcell = this.modules.edit.currentCell;\n\n\t\tif (cell) {\n\t\t\treturn cell.nav().next();\n\t\t}\n\t}\n\n\treturn false;\n};\n\nTabulator.prototype.navigateLeft = function () {\n\tvar cell = false;\n\n\tif (this.modExists(\"edit\", true)) {\n\t\tcell = this.modules.edit.currentCell;\n\n\t\tif (cell) {\n\t\t\te.preventDefault();\n\t\t\treturn cell.nav().left();\n\t\t}\n\t}\n\n\treturn false;\n};\n\nTabulator.prototype.navigateRight = function () {\n\tvar cell = false;\n\n\tif (this.modExists(\"edit\", true)) {\n\t\tcell = this.modules.edit.currentCell;\n\n\t\tif (cell) {\n\t\t\te.preventDefault();\n\t\t\treturn cell.nav().right();\n\t\t}\n\t}\n\n\treturn false;\n};\n\nTabulator.prototype.navigateUp = function () {\n\tvar cell = false;\n\n\tif (this.modExists(\"edit\", true)) {\n\t\tcell = this.modules.edit.currentCell;\n\n\t\tif (cell) {\n\t\t\te.preventDefault();\n\t\t\treturn cell.nav().up();\n\t\t}\n\t}\n\n\treturn false;\n};\n\nTabulator.prototype.navigateDown = function () {\n\tvar cell = false;\n\n\tif (this.modExists(\"edit\", true)) {\n\t\tcell = this.modules.edit.currentCell;\n\n\t\tif (cell) {\n\t\t\te.preventDefault();\n\t\t\treturn cell.nav().down();\n\t\t}\n\t}\n\n\treturn false;\n};\n\n/////////////// History Management //////////////\nTabulator.prototype.undo = function () {\n\tif (this.options.history && this.modExists(\"history\", true)) {\n\t\treturn this.modules.history.undo();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.redo = function () {\n\tif (this.options.history && this.modExists(\"history\", true)) {\n\t\treturn this.modules.history.redo();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.getHistoryUndoSize = function () {\n\tif (this.options.history && this.modExists(\"history\", true)) {\n\t\treturn this.modules.history.getHistoryUndoSize();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.getHistoryRedoSize = function () {\n\tif (this.options.history && this.modExists(\"history\", true)) {\n\t\treturn this.modules.history.getHistoryRedoSize();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.clearHistory = function () {\n\tif (this.options.history && this.modExists(\"history\", true)) {\n\t\treturn this.modules.history.clear();\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/////////////// Download Management //////////////\n\nTabulator.prototype.download = function (type, filename, options, active) {\n\tif (this.modExists(\"download\", true)) {\n\t\tthis.modules.download.download(type, filename, options, active);\n\t}\n};\n\nTabulator.prototype.downloadToTab = function (type, filename, options, active) {\n\tif (this.modExists(\"download\", true)) {\n\t\tthis.modules.download.download(type, filename, options, active, true);\n\t}\n};\n\n/////////// Inter Table Communications ///////////\n\nTabulator.prototype.tableComms = function (table, module, action, data) {\n\tthis.modules.comms.receive(table, module, action, data);\n};\n\n////////////// Extension Management //////////////\n\n//object to hold module\nTabulator.prototype.moduleBindings = {};\n\n//extend module\nTabulator.prototype.extendModule = function (name, property, values) {\n\n\tif (Tabulator.prototype.moduleBindings[name]) {\n\t\tvar source = Tabulator.prototype.moduleBindings[name].prototype[property];\n\n\t\tif (source) {\n\t\t\tif ((typeof values === 'undefined' ? 'undefined' : _typeof(values)) == \"object\") {\n\t\t\t\tfor (var key in values) {\n\t\t\t\t\tsource[key] = values[key];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Module Error - Invalid value type, it must be an object\");\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Module Error - property does not exist:\", property);\n\t\t}\n\t} else {\n\t\tconsole.warn(\"Module Error - module does not exist:\", name);\n\t}\n};\n\n//add module to tabulator\nTabulator.prototype.registerModule = function (name, module) {\n\tvar self = this;\n\tTabulator.prototype.moduleBindings[name] = module;\n};\n\n//ensure that module are bound to instantiated function\nTabulator.prototype.bindModules = function () {\n\tthis.modules = {};\n\n\tfor (var name in Tabulator.prototype.moduleBindings) {\n\t\tthis.modules[name] = new Tabulator.prototype.moduleBindings[name](this);\n\t}\n};\n\n//Check for module\nTabulator.prototype.modExists = function (plugin, required) {\n\tif (this.modules[plugin]) {\n\t\treturn true;\n\t} else {\n\t\tif (required) {\n\t\t\tconsole.error(\"Tabulator Module Not Installed: \" + plugin);\n\t\t}\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.helpers = {\n\n\telVisible: function elVisible(el) {\n\t\treturn !(el.offsetWidth <= 0 && el.offsetHeight <= 0);\n\t},\n\n\telOffset: function elOffset(el) {\n\t\tvar box = el.getBoundingClientRect();\n\n\t\treturn {\n\t\t\ttop: box.top + window.pageYOffset - document.documentElement.clientTop,\n\t\t\tleft: box.left + window.pageXOffset - document.documentElement.clientLeft\n\t\t};\n\t},\n\n\tdeepClone: function deepClone(obj) {\n\t\tvar clone = Object.assign(Array.isArray(obj) ? [] : {}, obj);\n\n\t\tfor (var i in obj) {\n\t\t\tif (obj[i] != null && _typeof(obj[i]) === \"object\") {\n\t\t\t\tif (obj[i] instanceof Date) {\n\t\t\t\t\tclone[i] = new Date(obj[i]);\n\t\t\t\t} else {\n\t\t\t\t\tclone[i] = this.deepClone(obj[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn clone;\n\t}\n};\n\nTabulator.prototype.comms = {\n\ttables: [],\n\tregister: function register(table) {\n\t\tTabulator.prototype.comms.tables.push(table);\n\t},\n\tderegister: function deregister(table) {\n\t\tvar index = Tabulator.prototype.comms.tables.indexOf(table);\n\n\t\tif (index > -1) {\n\t\t\tTabulator.prototype.comms.tables.splice(index, 1);\n\t\t}\n\t},\n\tlookupTable: function lookupTable(query, silent) {\n\t\tvar results = [],\n\t\t matches,\n\t\t match;\n\n\t\tif (typeof query === \"string\") {\n\t\t\tmatches = document.querySelectorAll(query);\n\n\t\t\tif (matches.length) {\n\t\t\t\tfor (var i = 0; i < matches.length; i++) {\n\t\t\t\t\tmatch = Tabulator.prototype.comms.matchElement(matches[i]);\n\n\t\t\t\t\tif (match) {\n\t\t\t\t\t\tresults.push(match);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (typeof HTMLElement !== \"undefined\" && query instanceof HTMLElement || query instanceof Tabulator) {\n\t\t\tmatch = Tabulator.prototype.comms.matchElement(query);\n\n\t\t\tif (match) {\n\t\t\t\tresults.push(match);\n\t\t\t}\n\t\t} else if (Array.isArray(query)) {\n\t\t\tquery.forEach(function (item) {\n\t\t\t\tresults = results.concat(Tabulator.prototype.comms.lookupTable(item));\n\t\t\t});\n\t\t} else {\n\t\t\tif (!silent) {\n\t\t\t\tconsole.warn(\"Table Connection Error - Invalid Selector\", query);\n\t\t\t}\n\t\t}\n\n\t\treturn results;\n\t},\n\tmatchElement: function matchElement(element) {\n\t\treturn Tabulator.prototype.comms.tables.find(function (table) {\n\t\t\treturn element instanceof Tabulator ? table === element : table.element === element;\n\t\t});\n\t}\n};\n\nTabulator.prototype.findTable = function (query) {\n\tvar results = Tabulator.prototype.comms.lookupTable(query, true);\n\treturn Array.isArray(results) && !results.length ? false : results;\n};\n\nvar Layout = function Layout(table) {\n\n\tthis.table = table;\n\n\tthis.mode = null;\n};\n\n//initialize layout system\n\nLayout.prototype.initialize = function (layout) {\n\n\tif (this.modes[layout]) {\n\n\t\tthis.mode = layout;\n\t} else {\n\n\t\tconsole.warn(\"Layout Error - invalid mode set, defaulting to 'fitData' : \" + layout);\n\n\t\tthis.mode = 'fitData';\n\t}\n\n\tthis.table.element.setAttribute(\"tabulator-layout\", this.mode);\n};\n\nLayout.prototype.getMode = function () {\n\n\treturn this.mode;\n};\n\n//trigger table layout\n\nLayout.prototype.layout = function () {\n\n\tthis.modes[this.mode].call(this, this.table.columnManager.columnsByIndex);\n\n\tif (this.mode.indexOf(\"fitData\") === 0 && this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns) {\n\n\t\tthis.table.modules.persistence.save(\"columns\");\n\t}\n};\n\n//layout render functions\n\nLayout.prototype.modes = {\n\n\t//resize columns to fit data they contain\n\n\t\"fitData\": function fitData(columns) {\n\n\t\tif (this.table.options.virtualDomHoz) {\n\n\t\t\tthis.table.vdomHoz.fitDataLayoutOverride();\n\t\t} else {\n\n\t\t\tcolumns.forEach(function (column) {\n\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t});\n\t\t}\n\n\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t}\n\t},\n\n\t//resize columns to fit data they contain and stretch row to fill table\n\n\t\"fitDataFill\": function fitDataFill(columns) {\n\n\t\tcolumns.forEach(function (column) {\n\n\t\t\tcolumn.reinitializeWidth();\n\t\t});\n\n\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t}\n\t},\n\n\t//resize columns to fit data they contain\n\n\t\"fitDataTable\": function fitDataTable(columns) {\n\n\t\tcolumns.forEach(function (column) {\n\n\t\t\tcolumn.reinitializeWidth();\n\t\t});\n\n\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t}\n\t},\n\n\t//resize columns to fit data the contain and stretch last column to fill table\n\n\t\"fitDataStretch\": function fitDataStretch(columns) {\n\t\tvar _this41 = this;\n\n\t\tvar colsWidth = 0,\n\t\t tableWidth = this.table.rowManager.element.clientWidth,\n\t\t gap = 0,\n\t\t lastCol = false;\n\n\t\tcolumns.forEach(function (column, i) {\n\n\t\t\tif (!column.widthFixed) {\n\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t}\n\n\t\t\tif (_this41.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible) {\n\n\t\t\t\tlastCol = column;\n\t\t\t}\n\n\t\t\tif (column.visible) {\n\n\t\t\t\tcolsWidth += column.getWidth();\n\t\t\t}\n\t\t});\n\n\t\tif (lastCol) {\n\n\t\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t\tlastCol.setWidth(0);\n\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\n\t\t\tif (gap > 0) {\n\n\t\t\t\tlastCol.setWidth(gap);\n\t\t\t} else {\n\n\t\t\t\tlastCol.reinitializeWidth();\n\t\t\t}\n\t\t} else {\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\t\t}\n\t},\n\n\t//resize columns to fit\n\n\t\"fitColumns\": function fitColumns(columns) {\n\n\t\tvar self = this;\n\n\t\tvar totalWidth = self.table.element.clientWidth; //table element width\n\n\t\tvar fixedWidth = 0; //total width of columns with a defined width\n\n\t\tvar flexWidth = 0; //total width available to flexible columns\n\n\t\tvar flexGrowUnits = 0; //total number of widthGrow blocks accross all columns\n\n\t\tvar flexColWidth = 0; //desired width of flexible columns\n\n\t\tvar flexColumns = []; //array of flexible width columns\n\n\t\tvar fixedShrinkColumns = []; //array of fixed width columns that can shrink\n\n\t\tvar flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns\n\n\t\tvar overflowWidth = 0; //horizontal overflow width\n\n\t\tvar gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps\n\n\n\t\tfunction calcWidth(width) {\n\n\t\t\tvar colWidth;\n\n\t\t\tif (typeof width == \"string\") {\n\n\t\t\t\tif (width.indexOf(\"%\") > -1) {\n\n\t\t\t\t\tcolWidth = totalWidth / 100 * parseInt(width);\n\t\t\t\t} else {\n\n\t\t\t\t\tcolWidth = parseInt(width);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\tcolWidth = width;\n\t\t\t}\n\n\t\t\treturn colWidth;\n\t\t}\n\n\t\t//ensure columns resize to take up the correct amount of space\n\n\t\tfunction scaleColumns(columns, freeSpace, colWidth, shrinkCols) {\n\n\t\t\tvar oversizeCols = [],\n\t\t\t oversizeSpace = 0,\n\t\t\t remainingSpace = 0,\n\t\t\t nextColWidth = 0,\n\t\t\t remainingFlexGrowUnits = flexGrowUnits,\n\t\t\t gap = 0,\n\t\t\t changeUnits = 0,\n\t\t\t undersizeCols = [];\n\n\t\t\tfunction calcGrow(col) {\n\n\t\t\t\treturn colWidth * (col.column.definition.widthGrow || 1);\n\t\t\t}\n\n\t\t\tfunction calcShrink(col) {\n\n\t\t\t\treturn calcWidth(col.width) - colWidth * (col.column.definition.widthShrink || 0);\n\t\t\t}\n\n\t\t\tcolumns.forEach(function (col, i) {\n\n\t\t\t\tvar width = shrinkCols ? calcShrink(col) : calcGrow(col);\n\n\t\t\t\tif (col.column.minWidth >= width) {\n\n\t\t\t\t\toversizeCols.push(col);\n\t\t\t\t} else {\n\n\t\t\t\t\tif (col.column.maxWidth && col.column.maxWidth < width) {\n\n\t\t\t\t\t\tcol.width = col.column.maxWidth;\n\n\t\t\t\t\t\tfreeSpace -= col.column.maxWidth;\n\n\t\t\t\t\t\tremainingFlexGrowUnits -= shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1;\n\n\t\t\t\t\t\tif (remainingFlexGrowUnits) {\n\n\t\t\t\t\t\t\tcolWidth = Math.floor(freeSpace / remainingFlexGrowUnits);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tundersizeCols.push(col);\n\n\t\t\t\t\t\tchangeUnits += shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (oversizeCols.length) {\n\n\t\t\t\toversizeCols.forEach(function (col) {\n\n\t\t\t\t\toversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;\n\n\t\t\t\t\tcol.width = col.column.minWidth;\n\t\t\t\t});\n\n\t\t\t\tremainingSpace = freeSpace - oversizeSpace;\n\n\t\t\t\tnextColWidth = changeUnits ? Math.floor(remainingSpace / changeUnits) : remainingSpace;\n\n\t\t\t\tgap = remainingSpace - nextColWidth * changeUnits;\n\n\t\t\t\tgap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);\n\t\t\t} else {\n\n\t\t\t\tgap = changeUnits ? freeSpace - Math.floor(freeSpace / changeUnits) * changeUnits : freeSpace;\n\n\t\t\t\tundersizeCols.forEach(function (column) {\n\n\t\t\t\t\tcolumn.width = shrinkCols ? calcShrink(column) : calcGrow(column);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn gap;\n\t\t}\n\n\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t}\n\n\t\t//adjust for vertical scrollbar if present\n\n\t\tif (this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight) {\n\n\t\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\n\t\t}\n\n\t\tcolumns.forEach(function (column) {\n\n\t\t\tvar width, minWidth, colWidth;\n\n\t\t\tif (column.visible) {\n\n\t\t\t\twidth = column.definition.width;\n\n\t\t\t\tminWidth = parseInt(column.minWidth);\n\n\t\t\t\tif (width) {\n\n\t\t\t\t\tcolWidth = calcWidth(width);\n\n\t\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\n\n\t\t\t\t\tif (column.definition.widthShrink) {\n\n\t\t\t\t\t\tfixedShrinkColumns.push({\n\n\t\t\t\t\t\t\tcolumn: column,\n\n\t\t\t\t\t\t\twidth: colWidth > minWidth ? colWidth : minWidth\n\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tflexShrinkUnits += column.definition.widthShrink;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\tflexColumns.push({\n\n\t\t\t\t\t\tcolumn: column,\n\n\t\t\t\t\t\twidth: 0\n\n\t\t\t\t\t});\n\n\t\t\t\t\tflexGrowUnits += column.definition.widthGrow || 1;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t//calculate available space\n\n\t\tflexWidth = totalWidth - fixedWidth;\n\n\t\t//calculate correct column size\n\n\t\tflexColWidth = Math.floor(flexWidth / flexGrowUnits);\n\n\t\t//generate column widths\n\n\t\tvar gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);\n\n\t\t//increase width of last column to account for rounding errors\n\n\t\tif (flexColumns.length && gapFill > 0) {\n\n\t\t\tflexColumns[flexColumns.length - 1].width += +gapFill;\n\t\t}\n\n\t\t//caculate space for columns to be shrunk into\n\n\t\tflexColumns.forEach(function (col) {\n\n\t\t\tflexWidth -= col.width;\n\t\t});\n\n\t\toverflowWidth = Math.abs(gapFill) + flexWidth;\n\n\t\t//shrink oversize columns if there is no available space\n\n\t\tif (overflowWidth > 0 && flexShrinkUnits) {\n\n\t\t\tgapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);\n\t\t}\n\n\t\t//decrease width of last column to account for rounding errors\n\n\t\tif (fixedShrinkColumns.length) {\n\n\t\t\tfixedShrinkColumns[fixedShrinkColumns.length - 1].width -= gapFill;\n\t\t}\n\n\t\tflexColumns.forEach(function (col) {\n\n\t\t\tcol.column.setWidth(col.width);\n\t\t});\n\n\t\tfixedShrinkColumns.forEach(function (col) {\n\n\t\t\tcol.column.setWidth(col.width);\n\t\t});\n\t}\n\n};\n\nTabulator.prototype.registerModule(\"layout\", Layout);\nvar Localize = function Localize(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.locale = \"default\"; //current locale\n\tthis.lang = false; //current language\n\tthis.bindings = {}; //update events to call when locale is changed\n\tthis.langList = {};\n};\n\nLocalize.prototype.initialize = function () {\n\tthis.langList = Tabulator.prototype.helpers.deepClone(this.langs);\n};\n\n//set header placehoder\nLocalize.prototype.setHeaderFilterPlaceholder = function (placeholder) {\n\tthis.langList.default.headerFilters.default = placeholder;\n};\n\n//set header filter placeholder by column\nLocalize.prototype.setHeaderFilterColumnPlaceholder = function (column, placeholder) {\n\tthis.langList.default.headerFilters.columns[column] = placeholder;\n\n\tif (this.lang && !this.lang.headerFilters.columns[column]) {\n\t\tthis.lang.headerFilters.columns[column] = placeholder;\n\t}\n};\n\n//setup a lang description object\nLocalize.prototype.installLang = function (locale, lang) {\n\tif (this.langList[locale]) {\n\t\tthis._setLangProp(this.langList[locale], lang);\n\t} else {\n\t\tthis.langList[locale] = lang;\n\t}\n};\n\nLocalize.prototype._setLangProp = function (lang, values) {\n\tfor (var key in values) {\n\t\tif (lang[key] && _typeof(lang[key]) == \"object\") {\n\t\t\tthis._setLangProp(lang[key], values[key]);\n\t\t} else {\n\t\t\tlang[key] = values[key];\n\t\t}\n\t}\n};\n\n//set current locale\nLocalize.prototype.setLocale = function (desiredLocale) {\n\tvar self = this;\n\n\tdesiredLocale = desiredLocale || \"default\";\n\n\t//fill in any matching languge values\n\tfunction traverseLang(trans, path) {\n\t\tfor (var prop in trans) {\n\t\t\tif (_typeof(trans[prop]) == \"object\") {\n\t\t\t\tif (!path[prop]) {\n\t\t\t\t\tpath[prop] = {};\n\t\t\t\t}\n\t\t\t\ttraverseLang(trans[prop], path[prop]);\n\t\t\t} else {\n\t\t\t\tpath[prop] = trans[prop];\n\t\t\t}\n\t\t}\n\t}\n\n\t//determing correct locale to load\n\tif (desiredLocale === true && navigator.language) {\n\t\t//get local from system\n\t\tdesiredLocale = navigator.language.toLowerCase();\n\t}\n\n\tif (desiredLocale) {\n\n\t\t//if locale is not set, check for matching top level locale else use default\n\t\tif (!self.langList[desiredLocale]) {\n\t\t\tvar prefix = desiredLocale.split(\"-\")[0];\n\n\t\t\tif (self.langList[prefix]) {\n\t\t\t\tconsole.warn(\"Localization Error - Exact matching locale not found, using closest match: \", desiredLocale, prefix);\n\t\t\t\tdesiredLocale = prefix;\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Localization Error - Matching locale not found, using default: \", desiredLocale);\n\t\t\t\tdesiredLocale = \"default\";\n\t\t\t}\n\t\t}\n\t}\n\n\tself.locale = desiredLocale;\n\n\t//load default lang template\n\tself.lang = Tabulator.prototype.helpers.deepClone(self.langList.default || {});\n\n\tif (desiredLocale != \"default\") {\n\t\ttraverseLang(self.langList[desiredLocale], self.lang);\n\t}\n\n\tself.table.options.localized.call(self.table, self.locale, self.lang);\n\n\tself._executeBindings();\n};\n\n//get current locale\nLocalize.prototype.getLocale = function (locale) {\n\treturn self.locale;\n};\n\n//get lang object for given local or current if none provided\nLocalize.prototype.getLang = function (locale) {\n\treturn locale ? this.langList[locale] : this.lang;\n};\n\n//get text for current locale\nLocalize.prototype.getText = function (path, value) {\n\tvar path = value ? path + \"|\" + value : path,\n\t pathArray = path.split(\"|\"),\n\t text = this._getLangElement(pathArray, this.locale);\n\n\t// if(text === false){\n\t// \tconsole.warn(\"Localization Error - Matching localized text not found for given path: \", path);\n\t// }\n\n\treturn text || \"\";\n};\n\n//traverse langs object and find localized copy\nLocalize.prototype._getLangElement = function (path, locale) {\n\tvar self = this;\n\tvar root = self.lang;\n\n\tpath.forEach(function (level) {\n\t\tvar rootPath;\n\n\t\tif (root) {\n\t\t\trootPath = root[level];\n\n\t\t\tif (typeof rootPath != \"undefined\") {\n\t\t\t\troot = rootPath;\n\t\t\t} else {\n\t\t\t\troot = false;\n\t\t\t}\n\t\t}\n\t});\n\n\treturn root;\n};\n\n//set update binding\nLocalize.prototype.bind = function (path, callback) {\n\tif (!this.bindings[path]) {\n\t\tthis.bindings[path] = [];\n\t}\n\n\tthis.bindings[path].push(callback);\n\n\tcallback(this.getText(path), this.lang);\n};\n\n//itterate through bindings and trigger updates\nLocalize.prototype._executeBindings = function () {\n\tvar self = this;\n\n\tvar _loop = function _loop(path) {\n\t\tself.bindings[path].forEach(function (binding) {\n\t\t\tbinding(self.getText(path), self.lang);\n\t\t});\n\t};\n\n\tfor (var path in self.bindings) {\n\t\t_loop(path);\n\t}\n};\n\n//Localized text listings\nLocalize.prototype.langs = {\n\t\"default\": { //hold default locale text\n\t\t\"groups\": {\n\t\t\t\"item\": \"item\",\n\t\t\t\"items\": \"items\"\n\t\t},\n\t\t\"columns\": {},\n\t\t\"ajax\": {\n\t\t\t\"loading\": \"Loading\",\n\t\t\t\"error\": \"Error\"\n\t\t},\n\t\t\"pagination\": {\n\t\t\t\"page_size\": \"Page Size\",\n\t\t\t\"page_title\": \"Show Page\",\n\t\t\t\"first\": \"First\",\n\t\t\t\"first_title\": \"First Page\",\n\t\t\t\"last\": \"Last\",\n\t\t\t\"last_title\": \"Last Page\",\n\t\t\t\"prev\": \"Prev\",\n\t\t\t\"prev_title\": \"Prev Page\",\n\t\t\t\"next\": \"Next\",\n\t\t\t\"next_title\": \"Next Page\",\n\t\t\t\"all\": \"All\"\n\t\t},\n\t\t\"headerFilters\": {\n\t\t\t\"default\": \"filter column...\",\n\t\t\t\"columns\": {}\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"localize\", Localize);\nvar Comms = function Comms(table) {\n\tthis.table = table;\n};\n\nComms.prototype.getConnections = function (selectors) {\n\tvar self = this,\n\t connections = [],\n\t connection;\n\n\tconnection = Tabulator.prototype.comms.lookupTable(selectors);\n\n\tconnection.forEach(function (con) {\n\t\tif (self.table !== con) {\n\t\t\tconnections.push(con);\n\t\t}\n\t});\n\n\treturn connections;\n};\n\nComms.prototype.send = function (selectors, module, action, data) {\n\tvar self = this,\n\t connections = this.getConnections(selectors);\n\n\tconnections.forEach(function (connection) {\n\t\tconnection.tableComms(self.table.element, module, action, data);\n\t});\n\n\tif (!connections.length && selectors) {\n\t\tconsole.warn(\"Table Connection Error - No tables matching selector found\", selectors);\n\t}\n};\n\nComms.prototype.receive = function (table, module, action, data) {\n\tif (this.table.modExists(module)) {\n\t\treturn this.table.modules[module].commsReceived(table, action, data);\n\t} else {\n\t\tconsole.warn(\"Inter-table Comms Error - no such module:\", module);\n\t}\n};\n\nTabulator.prototype.registerModule(\"comms\", Comms);\n\nvar Accessor = function Accessor(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.allowedTypes = [\"\", \"data\", \"download\", \"clipboard\", \"print\", \"htmlOutput\"]; //list of accessor types\n};\n\n//initialize column accessor\nAccessor.prototype.initializeColumn = function (column) {\n\tvar self = this,\n\t match = false,\n\t config = {};\n\n\tthis.allowedTypes.forEach(function (type) {\n\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\t accessor;\n\n\t\tif (column.definition[key]) {\n\t\t\taccessor = self.lookupAccessor(column.definition[key]);\n\n\t\t\tif (accessor) {\n\t\t\t\tmatch = true;\n\n\t\t\t\tconfig[key] = {\n\t\t\t\t\taccessor: accessor,\n\t\t\t\t\tparams: column.definition[key + \"Params\"] || {}\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t});\n\n\tif (match) {\n\t\tcolumn.modules.accessor = config;\n\t}\n};\n\nAccessor.prototype.lookupAccessor = function (value) {\n\tvar accessor = false;\n\n\t//set column accessor\n\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\t\tcase \"string\":\n\t\t\tif (this.accessors[value]) {\n\t\t\t\taccessor = this.accessors[value];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Accessor Error - No such accessor found, ignoring: \", value);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\taccessor = value;\n\t\t\tbreak;\n\t}\n\n\treturn accessor;\n};\n\n//apply accessor to row\nAccessor.prototype.transformRow = function (row, type) {\n\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t rowComponent = row.getComponent();\n\n\t//clone data object with deep copy to isolate internal data from returned result\n\tvar data = Tabulator.prototype.helpers.deepClone(row.data || {});\n\n\tthis.table.columnManager.traverse(function (column) {\n\t\tvar value, accessor, params, colCompnent;\n\n\t\tif (column.modules.accessor) {\n\n\t\t\taccessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;\n\n\t\t\tif (accessor) {\n\t\t\t\tvalue = column.getFieldValue(data);\n\n\t\t\t\tif (value != \"undefined\") {\n\t\t\t\t\tcolCompnent = column.getComponent();\n\t\t\t\t\tparams = typeof accessor.params === \"function\" ? accessor.params(value, data, type, colCompnent, rowComponent) : accessor.params;\n\t\t\t\t\tcolumn.setFieldValue(data, accessor.accessor(value, data, type, params, colCompnent, rowComponent));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn data;\n},\n\n//default accessors\nAccessor.prototype.accessors = {};\n\nTabulator.prototype.registerModule(\"accessor\", Accessor);\nvar Ajax = function Ajax(table) {\n\n\tthis.table = table; //hold Tabulator object\n\tthis.config = false; //hold config object for ajax request\n\tthis.url = \"\"; //request URL\n\tthis.urlGenerator = false;\n\tthis.params = false; //request parameters\n\n\tthis.loaderElement = this.createLoaderElement(); //loader message div\n\tthis.msgElement = this.createMsgElement(); //message element\n\tthis.loadingElement = false;\n\tthis.errorElement = false;\n\tthis.loaderPromise = false;\n\n\tthis.progressiveLoad = false;\n\tthis.loading = false;\n\n\tthis.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request\n};\n\n//initialize setup options\nAjax.prototype.initialize = function () {\n\tvar template;\n\n\tthis.loaderElement.appendChild(this.msgElement);\n\n\tif (this.table.options.ajaxLoaderLoading) {\n\t\tif (typeof this.table.options.ajaxLoaderLoading == \"string\") {\n\t\t\ttemplate = document.createElement('template');\n\t\t\ttemplate.innerHTML = this.table.options.ajaxLoaderLoading.trim();\n\t\t\tthis.loadingElement = template.content.firstChild;\n\t\t} else {\n\t\t\tthis.loadingElement = this.table.options.ajaxLoaderLoading;\n\t\t}\n\t}\n\n\tthis.loaderPromise = this.table.options.ajaxRequestFunc || this.defaultLoaderPromise;\n\n\tthis.urlGenerator = this.table.options.ajaxURLGenerator || this.defaultURLGenerator;\n\n\tif (this.table.options.ajaxLoaderError) {\n\t\tif (typeof this.table.options.ajaxLoaderError == \"string\") {\n\t\t\ttemplate = document.createElement('template');\n\t\t\ttemplate.innerHTML = this.table.options.ajaxLoaderError.trim();\n\t\t\tthis.errorElement = template.content.firstChild;\n\t\t} else {\n\t\t\tthis.errorElement = this.table.options.ajaxLoaderError;\n\t\t}\n\t}\n\n\tif (this.table.options.ajaxParams) {\n\t\tthis.setParams(this.table.options.ajaxParams);\n\t}\n\n\tif (this.table.options.ajaxConfig) {\n\t\tthis.setConfig(this.table.options.ajaxConfig);\n\t}\n\n\tif (this.table.options.ajaxURL) {\n\t\tthis.setUrl(this.table.options.ajaxURL);\n\t}\n\n\tif (this.table.options.ajaxProgressiveLoad) {\n\t\tif (this.table.options.pagination) {\n\t\t\tthis.progressiveLoad = false;\n\t\t\tconsole.error(\"Progressive Load Error - Pagination and progressive load cannot be used at the same time\");\n\t\t} else {\n\t\t\tif (this.table.modExists(\"page\")) {\n\t\t\t\tthis.progressiveLoad = this.table.options.ajaxProgressiveLoad;\n\t\t\t\tthis.table.modules.page.initializeProgressive(this.progressiveLoad);\n\t\t\t} else {\n\t\t\t\tconsole.error(\"Pagination plugin is required for progressive ajax loading\");\n\t\t\t}\n\t\t}\n\t}\n};\n\nAjax.prototype.createLoaderElement = function () {\n\tvar el = document.createElement(\"div\");\n\tel.classList.add(\"tabulator-loader\");\n\treturn el;\n};\n\nAjax.prototype.createMsgElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-loader-msg\");\n\tel.setAttribute(\"role\", \"alert\");\n\n\treturn el;\n};\n\n//set ajax params\nAjax.prototype.setParams = function (params, update) {\n\tif (update) {\n\t\tthis.params = this.params || {};\n\n\t\tfor (var key in params) {\n\t\t\tthis.params[key] = params[key];\n\t\t}\n\t} else {\n\t\tthis.params = params;\n\t}\n};\n\nAjax.prototype.getParams = function () {\n\treturn this.params || {};\n};\n\n//load config object\nAjax.prototype.setConfig = function (config) {\n\tthis._loadDefaultConfig();\n\n\tif (typeof config == \"string\") {\n\t\tthis.config.method = config;\n\t} else {\n\t\tfor (var key in config) {\n\t\t\tthis.config[key] = config[key];\n\t\t}\n\t}\n};\n\n//create config object from default\nAjax.prototype._loadDefaultConfig = function (force) {\n\tvar self = this;\n\tif (!self.config || force) {\n\n\t\tself.config = {};\n\n\t\t//load base config from defaults\n\t\tfor (var key in self.defaultConfig) {\n\t\t\tself.config[key] = self.defaultConfig[key];\n\t\t}\n\t}\n};\n\n//set request url\nAjax.prototype.setUrl = function (url) {\n\tthis.url = url;\n};\n\n//get request url\nAjax.prototype.getUrl = function () {\n\treturn this.url;\n};\n\n//lstandard loading function\nAjax.prototype.loadData = function (inPosition, columnsChanged) {\n\tvar self = this;\n\n\tif (this.progressiveLoad) {\n\t\treturn this._loadDataProgressive();\n\t} else {\n\t\treturn this._loadDataStandard(inPosition, columnsChanged);\n\t}\n};\n\nAjax.prototype.nextPage = function (diff) {\n\tvar margin;\n\n\tif (!this.loading) {\n\n\t\tmargin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.getElement().clientHeight * 2;\n\n\t\tif (diff < margin) {\n\t\t\tthis.table.modules.page.nextPage().then(function () {}).catch(function () {});\n\t\t}\n\t}\n};\n\nAjax.prototype.blockActiveRequest = function () {\n\tthis.requestOrder++;\n};\n\nAjax.prototype._loadDataProgressive = function () {\n\tthis.table.rowManager.setData([]);\n\treturn this.table.modules.page.setPage(1);\n};\n\nAjax.prototype._loadDataStandard = function (inPosition, columnsChanged) {\n\tvar _this42 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\t_this42.sendRequest(inPosition).then(function (data) {\n\t\t\t_this42.table.rowManager.setData(data, inPosition, columnsChanged).then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function (e) {\n\t\t\t\treject(e);\n\t\t\t});\n\t\t}).catch(function (e) {\n\t\t\treject(e);\n\t\t});\n\t});\n};\n\nAjax.prototype.generateParamsList = function (data, prefix) {\n\tvar self = this,\n\t output = [];\n\n\tprefix = prefix || \"\";\n\n\tif (Array.isArray(data)) {\n\t\tdata.forEach(function (item, i) {\n\t\t\toutput = output.concat(self.generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\n\t\t});\n\t} else if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === \"object\") {\n\t\tfor (var key in data) {\n\t\t\toutput = output.concat(self.generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\n\t\t}\n\t} else {\n\t\toutput.push({ key: prefix, value: data });\n\t}\n\n\treturn output;\n};\n\nAjax.prototype.serializeParams = function (params) {\n\tvar output = this.generateParamsList(params),\n\t encoded = [];\n\n\toutput.forEach(function (item) {\n\t\tencoded.push(encodeURIComponent(item.key) + \"=\" + encodeURIComponent(item.value));\n\t});\n\n\treturn encoded.join(\"&\");\n};\n\n//send ajax request\nAjax.prototype.sendRequest = function (silent) {\n\tvar _this43 = this;\n\n\tvar self = this,\n\t url = self.url,\n\t requestNo,\n\t esc,\n\t query;\n\n\tself.requestOrder++;\n\trequestNo = self.requestOrder;\n\n\tself._loadDefaultConfig();\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (self.table.options.ajaxRequesting.call(_this43.table, self.url, self.params) !== false) {\n\n\t\t\tself.loading = true;\n\n\t\t\tif (!silent) {\n\t\t\t\tself.showLoader();\n\t\t\t}\n\n\t\t\t_this43.loaderPromise(url, self.config, self.params).then(function (data) {\n\t\t\t\tif (requestNo === self.requestOrder) {\n\t\t\t\t\tif (self.table.options.ajaxResponse) {\n\t\t\t\t\t\tdata = self.table.options.ajaxResponse.call(self.table, self.url, self.params, data);\n\t\t\t\t\t}\n\t\t\t\t\tresolve(data);\n\n\t\t\t\t\tself.hideLoader();\n\t\t\t\t\tself.loading = false;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made\");\n\t\t\t\t}\n\t\t\t}).catch(function (error) {\n\t\t\t\tconsole.error(\"Ajax Load Error: \", error);\n\t\t\t\tself.table.options.ajaxError.call(self.table, error);\n\n\t\t\t\tself.showError();\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tself.hideLoader();\n\t\t\t\t}, 3000);\n\n\t\t\t\tself.loading = false;\n\n\t\t\t\treject(error);\n\t\t\t});\n\t\t} else {\n\t\t\treject();\n\t\t}\n\t});\n};\n\nAjax.prototype.showLoader = function () {\n\tvar shouldLoad = typeof this.table.options.ajaxLoader === \"function\" ? this.table.options.ajaxLoader() : this.table.options.ajaxLoader;\n\n\tif (shouldLoad) {\n\n\t\tthis.hideLoader();\n\n\t\twhile (this.msgElement.firstChild) {\n\t\t\tthis.msgElement.removeChild(this.msgElement.firstChild);\n\t\t}this.msgElement.classList.remove(\"tabulator-error\");\n\t\tthis.msgElement.classList.add(\"tabulator-loading\");\n\n\t\tif (this.loadingElement) {\n\t\t\tthis.msgElement.appendChild(this.loadingElement);\n\t\t} else {\n\t\t\tthis.msgElement.innerHTML = this.table.modules.localize.getText(\"ajax|loading\");\n\t\t}\n\n\t\tthis.table.element.appendChild(this.loaderElement);\n\t}\n};\n\nAjax.prototype.showError = function () {\n\tthis.hideLoader();\n\n\twhile (this.msgElement.firstChild) {\n\t\tthis.msgElement.removeChild(this.msgElement.firstChild);\n\t}this.msgElement.classList.remove(\"tabulator-loading\");\n\tthis.msgElement.classList.add(\"tabulator-error\");\n\n\tif (this.errorElement) {\n\t\tthis.msgElement.appendChild(this.errorElement);\n\t} else {\n\t\tthis.msgElement.innerHTML = this.table.modules.localize.getText(\"ajax|error\");\n\t}\n\n\tthis.table.element.appendChild(this.loaderElement);\n};\n\nAjax.prototype.hideLoader = function () {\n\tif (this.loaderElement.parentNode) {\n\t\tthis.loaderElement.parentNode.removeChild(this.loaderElement);\n\t}\n};\n\n//default ajax config object\nAjax.prototype.defaultConfig = {\n\tmethod: \"GET\"\n};\n\nAjax.prototype.defaultURLGenerator = function (url, config, params) {\n\n\tif (url) {\n\t\tif (params && Object.keys(params).length) {\n\t\t\tif (!config.method || config.method.toLowerCase() == \"get\") {\n\t\t\t\tconfig.method = \"get\";\n\n\t\t\t\turl += (url.includes(\"?\") ? \"&\" : \"?\") + this.modules.ajax.serializeParams(params);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn url;\n};\n\nAjax.prototype.defaultLoaderPromise = function (url, config, params) {\n\tvar self = this,\n\t contentType;\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\t//set url\n\t\turl = self.urlGenerator.call(self.table, url, config, params);\n\n\t\t//set body content if not GET request\n\t\tif (config.method.toUpperCase() != \"GET\") {\n\t\t\tcontentType = _typeof(self.table.options.ajaxContentType) === \"object\" ? self.table.options.ajaxContentType : self.contentTypeFormatters[self.table.options.ajaxContentType];\n\t\t\tif (contentType) {\n\n\t\t\t\tfor (var key in contentType.headers) {\n\t\t\t\t\tif (!config.headers) {\n\t\t\t\t\t\tconfig.headers = {};\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof config.headers[key] === \"undefined\") {\n\t\t\t\t\t\tconfig.headers[key] = contentType.headers[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconfig.body = contentType.body.call(self, url, config, params);\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Ajax Error - Invalid ajaxContentType value:\", self.table.options.ajaxContentType);\n\t\t\t}\n\t\t}\n\n\t\tif (url) {\n\n\t\t\t//configure headers\n\t\t\tif (typeof config.headers === \"undefined\") {\n\t\t\t\tconfig.headers = {};\n\t\t\t}\n\n\t\t\tif (typeof config.headers.Accept === \"undefined\") {\n\t\t\t\tconfig.headers.Accept = \"application/json\";\n\t\t\t}\n\n\t\t\tif (typeof config.headers[\"X-Requested-With\"] === \"undefined\") {\n\t\t\t\tconfig.headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\tif (typeof config.mode === \"undefined\") {\n\t\t\t\tconfig.mode = \"cors\";\n\t\t\t}\n\n\t\t\tif (config.mode == \"cors\") {\n\n\t\t\t\tif (typeof config.headers[\"Access-Control-Allow-Origin\"] === \"undefined\") {\n\t\t\t\t\tconfig.headers[\"Access-Control-Allow-Origin\"] = window.location.origin;\n\t\t\t\t}\n\n\t\t\t\tif (typeof config.credentials === \"undefined\") {\n\t\t\t\t\tconfig.credentials = 'same-origin';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (typeof config.credentials === \"undefined\") {\n\t\t\t\t\tconfig.credentials = 'include';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//send request\n\t\t\tfetch(url, config).then(function (response) {\n\t\t\t\tif (response.ok) {\n\t\t\t\t\tresponse.json().then(function (data) {\n\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t}).catch(function (error) {\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t\tconsole.warn(\"Ajax Load Error - Invalid JSON returned\", error);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \" + response.status, response.statusText);\n\t\t\t\t\treject(response);\n\t\t\t\t}\n\t\t\t}).catch(function (error) {\n\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \", error);\n\t\t\t\treject(error);\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Ajax Load Error - No URL Set\");\n\t\t\tresolve([]);\n\t\t}\n\t});\n};\n\nAjax.prototype.contentTypeFormatters = {\n\t\"json\": {\n\t\theaders: {\n\t\t\t'Content-Type': 'application/json'\n\t\t},\n\t\tbody: function body(url, config, params) {\n\t\t\treturn JSON.stringify(params);\n\t\t}\n\t},\n\t\"form\": {\n\t\theaders: {},\n\t\tbody: function body(url, config, params) {\n\t\t\tvar output = this.generateParamsList(params),\n\t\t\t form = new FormData();\n\n\t\t\toutput.forEach(function (item) {\n\t\t\t\tform.append(item.key, item.value);\n\t\t\t});\n\n\t\t\treturn form;\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"ajax\", Ajax);\n\n//public calc object\nvar CalcComponent = function CalcComponent(row) {\n\tthis._row = row;\n};\n\nCalcComponent.prototype.getData = function (transform) {\n\treturn this._row.getData(transform);\n};\n\nCalcComponent.prototype.getElement = function () {\n\treturn this._row.getElement();\n};\n\nCalcComponent.prototype.getTable = function () {\n\treturn this._row.table;\n};\n\nCalcComponent.prototype.getCells = function () {\n\tvar cells = [];\n\n\tthis._row.getCells().forEach(function (cell) {\n\t\tcells.push(cell.getComponent());\n\t});\n\n\treturn cells;\n};\n\nCalcComponent.prototype.getCell = function (column) {\n\tvar cell = this._row.getCell(column);\n\treturn cell ? cell.getComponent() : false;\n};\n\nCalcComponent.prototype._getSelf = function () {\n\treturn this._row;\n};\n\nvar ColumnCalcs = function ColumnCalcs(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.topCalcs = [];\n\tthis.botCalcs = [];\n\tthis.genColumn = false;\n\tthis.topElement = this.createElement();\n\tthis.botElement = this.createElement();\n\tthis.topRow = false;\n\tthis.botRow = false;\n\tthis.topInitialized = false;\n\tthis.botInitialized = false;\n\n\tthis.initialize();\n};\n\nColumnCalcs.prototype.createElement = function () {\n\tvar el = document.createElement(\"div\");\n\tel.classList.add(\"tabulator-calcs-holder\");\n\treturn el;\n};\n\nColumnCalcs.prototype.initialize = function () {\n\tthis.genColumn = new Column({ field: \"value\" }, this);\n};\n\n//dummy functions to handle being mock column manager\nColumnCalcs.prototype.registerColumnField = function () {};\n\n//initialize column calcs\nColumnCalcs.prototype.initializeColumn = function (column) {\n\tvar def = column.definition;\n\n\tvar config = {\n\t\ttopCalcParams: def.topCalcParams || {},\n\t\tbotCalcParams: def.bottomCalcParams || {}\n\t};\n\n\tif (def.topCalc) {\n\n\t\tswitch (_typeof(def.topCalc)) {\n\t\t\tcase \"string\":\n\t\t\t\tif (this.calculations[def.topCalc]) {\n\t\t\t\t\tconfig.topCalc = this.calculations[def.topCalc];\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.topCalc);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tconfig.topCalc = def.topCalc;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif (config.topCalc) {\n\t\t\tcolumn.modules.columnCalcs = config;\n\t\t\tthis.topCalcs.push(column);\n\n\t\t\tif (this.table.options.columnCalcs != \"group\") {\n\t\t\t\tthis.initializeTopRow();\n\t\t\t}\n\t\t}\n\t}\n\n\tif (def.bottomCalc) {\n\t\tswitch (_typeof(def.bottomCalc)) {\n\t\t\tcase \"string\":\n\t\t\t\tif (this.calculations[def.bottomCalc]) {\n\t\t\t\t\tconfig.botCalc = this.calculations[def.bottomCalc];\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.bottomCalc);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tconfig.botCalc = def.bottomCalc;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif (config.botCalc) {\n\t\t\tcolumn.modules.columnCalcs = config;\n\t\t\tthis.botCalcs.push(column);\n\n\t\t\tif (this.table.options.columnCalcs != \"group\") {\n\t\t\t\tthis.initializeBottomRow();\n\t\t\t}\n\t\t}\n\t}\n};\n\nColumnCalcs.prototype.removeCalcs = function () {\n\tvar changed = false;\n\n\tif (this.topInitialized) {\n\t\tthis.topInitialized = false;\n\t\tthis.topElement.parentNode.removeChild(this.topElement);\n\t\tchanged = true;\n\t}\n\n\tif (this.botInitialized) {\n\t\tthis.botInitialized = false;\n\t\tthis.table.footerManager.remove(this.botElement);\n\t\tchanged = true;\n\t}\n\n\tif (changed) {\n\t\tthis.table.rowManager.adjustTableSize();\n\t}\n};\n\nColumnCalcs.prototype.initializeTopRow = function () {\n\tif (!this.topInitialized) {\n\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\n\t\tthis.topInitialized = true;\n\t}\n};\n\nColumnCalcs.prototype.initializeBottomRow = function () {\n\tif (!this.botInitialized) {\n\t\tthis.table.footerManager.prepend(this.botElement);\n\t\tthis.botInitialized = true;\n\t}\n};\n\nColumnCalcs.prototype.scrollHorizontal = function (left) {\n\tif (this.botInitialized && this.botRow) {\n\t\tthis.botRow.getElement().style.marginLeft = -left + \"px\";\n\t}\n};\n\nColumnCalcs.prototype.recalc = function (rows) {\n\tvar data, row;\n\n\tif (this.topInitialized || this.botInitialized) {\n\t\tdata = this.rowsToData(rows);\n\n\t\tif (this.topInitialized) {\n\t\t\tif (this.topRow) {\n\t\t\t\tthis.topRow.deleteCells();\n\t\t\t}\n\n\t\t\trow = this.generateRow(\"top\", this.rowsToData(rows));\n\t\t\tthis.topRow = row;\n\t\t\twhile (this.topElement.firstChild) {\n\t\t\t\tthis.topElement.removeChild(this.topElement.firstChild);\n\t\t\t}this.topElement.appendChild(row.getElement());\n\t\t\trow.initialize(true);\n\t\t}\n\n\t\tif (this.botInitialized) {\n\t\t\tif (this.botRow) {\n\t\t\t\tthis.botRow.deleteCells();\n\t\t\t}\n\n\t\t\trow = this.generateRow(\"bottom\", this.rowsToData(rows));\n\t\t\tthis.botRow = row;\n\t\t\twhile (this.botElement.firstChild) {\n\t\t\t\tthis.botElement.removeChild(this.botElement.firstChild);\n\t\t\t}this.botElement.appendChild(row.getElement());\n\t\t\trow.initialize(true);\n\t\t}\n\n\t\tthis.table.rowManager.adjustTableSize();\n\n\t\t//set resizable handles\n\t\tif (this.table.modExists(\"frozenColumns\")) {\n\t\t\tthis.table.modules.frozenColumns.layout();\n\t\t}\n\t}\n};\n\nColumnCalcs.prototype.recalcRowGroup = function (row) {\n\tthis.recalcGroup(this.table.modules.groupRows.getRowGroup(row));\n};\n\nColumnCalcs.prototype.recalcAll = function () {\n\tvar _this44 = this;\n\n\tif (this.topCalcs.length || this.botCalcs.length) {\n\t\tif (this.table.options.columnCalcs !== \"group\") {\n\t\t\tthis.recalc(this.table.rowManager.activeRows);\n\t\t}\n\n\t\tif (this.table.options.groupBy && this.table.options.columnCalcs !== \"table\") {\n\n\t\t\tvar groups = table.modules.groupRows.getChildGroups();\n\n\t\t\tgroups.forEach(function (group) {\n\t\t\t\t_this44.recalcGroup(group);\n\t\t\t});\n\t\t}\n\t}\n};\n\nColumnCalcs.prototype.recalcGroup = function (group) {\n\tvar data, rowData;\n\n\tif (group) {\n\t\tif (group.calcs) {\n\t\t\tif (group.calcs.bottom) {\n\t\t\t\tdata = this.rowsToData(group.rows);\n\t\t\t\trowData = this.generateRowData(\"bottom\", data);\n\n\t\t\t\tgroup.calcs.bottom.updateData(rowData);\n\t\t\t\tgroup.calcs.bottom.reinitialize();\n\t\t\t}\n\n\t\t\tif (group.calcs.top) {\n\t\t\t\tdata = this.rowsToData(group.rows);\n\t\t\t\trowData = this.generateRowData(\"top\", data);\n\n\t\t\t\tgroup.calcs.top.updateData(rowData);\n\t\t\t\tgroup.calcs.top.reinitialize();\n\t\t\t}\n\t\t}\n\t}\n};\n\n//generate top stats row\nColumnCalcs.prototype.generateTopRow = function (rows) {\n\treturn this.generateRow(\"top\", this.rowsToData(rows));\n};\n//generate bottom stats row\nColumnCalcs.prototype.generateBottomRow = function (rows) {\n\treturn this.generateRow(\"bottom\", this.rowsToData(rows));\n};\n\nColumnCalcs.prototype.rowsToData = function (rows) {\n\tvar _this45 = this;\n\n\tvar data = [];\n\n\trows.forEach(function (row) {\n\t\tdata.push(row.getData());\n\n\t\tif (_this45.table.options.dataTree && _this45.table.options.dataTreeChildColumnCalcs) {\n\t\t\tif (row.modules.dataTree.open) {\n\t\t\t\tvar children = _this45.rowsToData(_this45.table.modules.dataTree.getFilteredTreeChildren(row));\n\t\t\t\tdata = data.concat(children);\n\t\t\t}\n\t\t}\n\t});\n\n\treturn data;\n};\n\n//generate stats row\nColumnCalcs.prototype.generateRow = function (pos, data) {\n\tvar self = this,\n\t rowData = this.generateRowData(pos, data),\n\t row;\n\n\tif (self.table.modExists(\"mutator\")) {\n\t\tself.table.modules.mutator.disable();\n\t}\n\n\trow = new Row(rowData, this, \"calc\");\n\n\tif (self.table.modExists(\"mutator\")) {\n\t\tself.table.modules.mutator.enable();\n\t}\n\n\trow.getElement().classList.add(\"tabulator-calcs\", \"tabulator-calcs-\" + pos);\n\n\trow.component = false;\n\n\trow.getComponent = function () {\n\t\tif (!this.component) {\n\t\t\tthis.component = new CalcComponent(this);\n\t\t}\n\n\t\treturn this.component;\n\t};\n\n\trow.generateCells = function () {\n\n\t\tvar cells = [];\n\n\t\tself.table.columnManager.columnsByIndex.forEach(function (column) {\n\n\t\t\t//set field name of mock column\n\t\t\tself.genColumn.setField(column.getField());\n\t\t\tself.genColumn.hozAlign = column.hozAlign;\n\n\t\t\tif (column.definition[pos + \"CalcFormatter\"] && self.table.modExists(\"format\")) {\n\t\t\t\tself.genColumn.modules.format = {\n\t\t\t\t\tformatter: self.table.modules.format.getFormatter(column.definition[pos + \"CalcFormatter\"]),\n\t\t\t\t\tparams: column.definition[pos + \"CalcFormatterParams\"] || {}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tself.genColumn.modules.format = {\n\t\t\t\t\tformatter: self.table.modules.format.getFormatter(\"plaintext\"),\n\t\t\t\t\tparams: {}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t//ensure css class defintion is replicated to calculation cell\n\t\t\tself.genColumn.definition.cssClass = column.definition.cssClass;\n\n\t\t\t//generate cell and assign to correct column\n\t\t\tvar cell = new Cell(self.genColumn, row);\n\t\t\tcell.getElement();\n\t\t\tcell.column = column;\n\t\t\tcell.setWidth();\n\n\t\t\tcolumn.cells.push(cell);\n\t\t\tcells.push(cell);\n\n\t\t\tif (!column.visible) {\n\t\t\t\tcell.hide();\n\t\t\t}\n\t\t});\n\n\t\tthis.cells = cells;\n\t};\n\n\treturn row;\n};\n\n//generate stats row\nColumnCalcs.prototype.generateRowData = function (pos, data) {\n\tvar rowData = {},\n\t calcs = pos == \"top\" ? this.topCalcs : this.botCalcs,\n\t type = pos == \"top\" ? \"topCalc\" : \"botCalc\",\n\t params,\n\t paramKey;\n\n\tcalcs.forEach(function (column) {\n\t\tvar values = [];\n\n\t\tif (column.modules.columnCalcs && column.modules.columnCalcs[type]) {\n\t\t\tdata.forEach(function (item) {\n\t\t\t\tvalues.push(column.getFieldValue(item));\n\t\t\t});\n\n\t\t\tparamKey = type + \"Params\";\n\t\t\tparams = typeof column.modules.columnCalcs[paramKey] === \"function\" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];\n\n\t\t\tcolumn.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));\n\t\t}\n\t});\n\n\treturn rowData;\n};\n\nColumnCalcs.prototype.hasTopCalcs = function () {\n\treturn !!this.topCalcs.length;\n};\n\nColumnCalcs.prototype.hasBottomCalcs = function () {\n\treturn !!this.botCalcs.length;\n};\n\n//handle table redraw\nColumnCalcs.prototype.redraw = function () {\n\tif (this.topRow) {\n\t\tthis.topRow.normalizeHeight(true);\n\t}\n\tif (this.botRow) {\n\t\tthis.botRow.normalizeHeight(true);\n\t}\n};\n\n//return the calculated\nColumnCalcs.prototype.getResults = function () {\n\tvar self = this,\n\t results = {},\n\t groups;\n\n\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\tgroups = this.table.modules.groupRows.getGroups(true);\n\n\t\tgroups.forEach(function (group) {\n\t\t\tresults[group.getKey()] = self.getGroupResults(group);\n\t\t});\n\t} else {\n\t\tresults = {\n\t\t\ttop: this.topRow ? this.topRow.getData() : {},\n\t\t\tbottom: this.botRow ? this.botRow.getData() : {}\n\t\t};\n\t}\n\n\treturn results;\n};\n\n//get results from a group\nColumnCalcs.prototype.getGroupResults = function (group) {\n\tvar self = this,\n\t groupObj = group._getSelf(),\n\t subGroups = group.getSubGroups(),\n\t subGroupResults = {},\n\t results = {};\n\n\tsubGroups.forEach(function (subgroup) {\n\t\tsubGroupResults[subgroup.getKey()] = self.getGroupResults(subgroup);\n\t});\n\n\tresults = {\n\t\ttop: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},\n\t\tbottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},\n\t\tgroups: subGroupResults\n\t};\n\n\treturn results;\n};\n\n//default calculations\nColumnCalcs.prototype.calculations = {\n\t\"avg\": function avg(values, data, calcParams) {\n\t\tvar output = 0,\n\t\t precision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : 2;\n\n\t\tif (values.length) {\n\t\t\toutput = values.reduce(function (sum, value) {\n\t\t\t\treturn Number(sum) + Number(value);\n\t\t\t});\n\n\t\t\toutput = output / values.length;\n\n\t\t\toutput = precision !== false ? output.toFixed(precision) : output;\n\t\t}\n\n\t\treturn parseFloat(output).toString();\n\t},\n\t\"max\": function max(values, data, calcParams) {\n\t\tvar output = null,\n\t\t precision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\tvalues.forEach(function (value) {\n\n\t\t\tvalue = Number(value);\n\n\t\t\tif (value > output || output === null) {\n\t\t\t\toutput = value;\n\t\t\t}\n\t\t});\n\n\t\treturn output !== null ? precision !== false ? output.toFixed(precision) : output : \"\";\n\t},\n\t\"min\": function min(values, data, calcParams) {\n\t\tvar output = null,\n\t\t precision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\tvalues.forEach(function (value) {\n\n\t\t\tvalue = Number(value);\n\n\t\t\tif (value < output || output === null) {\n\t\t\t\toutput = value;\n\t\t\t}\n\t\t});\n\n\t\treturn output !== null ? precision !== false ? output.toFixed(precision) : output : \"\";\n\t},\n\t\"sum\": function sum(values, data, calcParams) {\n\t\tvar output = 0,\n\t\t precision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\tif (values.length) {\n\t\t\tvalues.forEach(function (value) {\n\t\t\t\tvalue = Number(value);\n\n\t\t\t\toutput += !isNaN(value) ? Number(value) : 0;\n\t\t\t});\n\t\t}\n\n\t\treturn precision !== false ? output.toFixed(precision) : output;\n\t},\n\t\"concat\": function concat(values, data, calcParams) {\n\t\tvar output = 0;\n\n\t\tif (values.length) {\n\t\t\toutput = values.reduce(function (sum, value) {\n\t\t\t\treturn String(sum) + String(value);\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t},\n\t\"count\": function count(values, data, calcParams) {\n\t\tvar output = 0;\n\n\t\tif (values.length) {\n\t\t\tvalues.forEach(function (value) {\n\t\t\t\tif (value) {\n\t\t\t\t\toutput++;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n};\n\nTabulator.prototype.registerModule(\"columnCalcs\", ColumnCalcs);\n\nvar Clipboard = function Clipboard(table) {\n\tthis.table = table;\n\tthis.mode = true;\n\n\tthis.pasteParser = function () {};\n\tthis.pasteAction = function () {};\n\tthis.customSelection = false;\n\tthis.rowRange = false;\n\tthis.blocked = true; //block copy actions not originating from this command\n};\n\nClipboard.prototype.initialize = function () {\n\tvar _this46 = this;\n\n\tthis.mode = this.table.options.clipboard;\n\n\tthis.rowRange = this.table.options.clipboardCopyRowRange;\n\n\tif (this.mode === true || this.mode === \"copy\") {\n\t\tthis.table.element.addEventListener(\"copy\", function (e) {\n\t\t\tvar plain, html, list;\n\n\t\t\tif (!_this46.blocked) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif (_this46.customSelection) {\n\t\t\t\t\tplain = _this46.customSelection;\n\n\t\t\t\t\tif (_this46.table.options.clipboardCopyFormatter) {\n\t\t\t\t\t\tplain = _this46.table.options.clipboardCopyFormatter(\"plain\", plain);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\tvar list = _this46.table.modules.export.generateExportList(_this46.table.options.clipboardCopyConfig, _this46.table.options.clipboardCopyStyled, _this46.rowRange, \"clipboard\");\n\n\t\t\t\t\thtml = _this46.table.modules.export.genereateHTMLTable(list);\n\t\t\t\t\tplain = html ? _this46.generatePlainContent(list) : \"\";\n\n\t\t\t\t\tif (_this46.table.options.clipboardCopyFormatter) {\n\t\t\t\t\t\tplain = _this46.table.options.clipboardCopyFormatter(\"plain\", plain);\n\t\t\t\t\t\thtml = _this46.table.options.clipboardCopyFormatter(\"html\", html);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (window.clipboardData && window.clipboardData.setData) {\n\t\t\t\t\twindow.clipboardData.setData('Text', plain);\n\t\t\t\t} else if (e.clipboardData && e.clipboardData.setData) {\n\t\t\t\t\te.clipboardData.setData('text/plain', plain);\n\t\t\t\t\tif (html) {\n\t\t\t\t\t\te.clipboardData.setData('text/html', html);\n\t\t\t\t\t}\n\t\t\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.setData) {\n\t\t\t\t\te.originalEvent.clipboardData.setData('text/plain', plain);\n\t\t\t\t\tif (html) {\n\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/html', html);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t_this46.table.options.clipboardCopied.call(_this46.table, plain, html);\n\n\t\t\t\t_this46.reset();\n\t\t\t}\n\t\t});\n\t}\n\n\tif (this.mode === true || this.mode === \"paste\") {\n\t\tthis.table.element.addEventListener(\"paste\", function (e) {\n\t\t\t_this46.paste(e);\n\t\t});\n\t}\n\n\tthis.setPasteParser(this.table.options.clipboardPasteParser);\n\tthis.setPasteAction(this.table.options.clipboardPasteAction);\n};\n\nClipboard.prototype.reset = function () {\n\tthis.blocked = true;\n\tthis.customSelection = false;\n};\n\nClipboard.prototype.generatePlainContent = function (list) {\n\tvar output = [];\n\n\tlist.forEach(function (row) {\n\t\tvar rowData = [];\n\n\t\trow.columns.forEach(function (col) {\n\t\t\tvar value = \"\";\n\n\t\t\tif (col) {\n\n\t\t\t\tif (row.type === \"group\") {\n\t\t\t\t\tcol.value = col.component.getKey();\n\t\t\t\t}\n\n\t\t\t\tif (col.value === null) {\n\t\t\t\t\tvalue = \"\";\n\t\t\t\t} else {\n\t\t\t\t\tswitch (_typeof(col.value)) {\n\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\tvalue = JSON.stringify(col.value);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tvalue = col.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trowData.push(value);\n\t\t});\n\n\t\toutput.push(rowData.join(\"\\t\"));\n\t});\n\n\treturn output.join(\"\\n\");\n};\n\nClipboard.prototype.copy = function (range, internal) {\n\tvar range, sel, textRange;\n\tthis.blocked = false;\n\tthis.customSelection = false;\n\n\tif (this.mode === true || this.mode === \"copy\") {\n\n\t\tthis.rowRange = range || this.table.options.clipboardCopyRowRange;\n\n\t\tif (typeof window.getSelection != \"undefined\" && typeof document.createRange != \"undefined\") {\n\t\t\trange = document.createRange();\n\t\t\trange.selectNodeContents(this.table.element);\n\t\t\tsel = window.getSelection();\n\n\t\t\tif (sel.toString() && internal) {\n\t\t\t\tthis.customSelection = sel.toString();\n\t\t\t}\n\n\t\t\tsel.removeAllRanges();\n\t\t\tsel.addRange(range);\n\t\t} else if (typeof document.selection != \"undefined\" && typeof document.body.createTextRange != \"undefined\") {\n\t\t\ttextRange = document.body.createTextRange();\n\t\t\ttextRange.moveToElementText(this.table.element);\n\t\t\ttextRange.select();\n\t\t}\n\n\t\tdocument.execCommand('copy');\n\n\t\tif (sel) {\n\t\t\tsel.removeAllRanges();\n\t\t}\n\t}\n};\n\n//PASTE EVENT HANDLING\n\nClipboard.prototype.setPasteAction = function (action) {\n\n\tswitch (typeof action === 'undefined' ? 'undefined' : _typeof(action)) {\n\t\tcase \"string\":\n\t\t\tthis.pasteAction = this.pasteActions[action];\n\n\t\t\tif (!this.pasteAction) {\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste action found:\", action);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tthis.pasteAction = action;\n\t\t\tbreak;\n\t}\n};\n\nClipboard.prototype.setPasteParser = function (parser) {\n\tswitch (typeof parser === 'undefined' ? 'undefined' : _typeof(parser)) {\n\t\tcase \"string\":\n\t\t\tthis.pasteParser = this.pasteParsers[parser];\n\n\t\t\tif (!this.pasteParser) {\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste parser found:\", parser);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tthis.pasteParser = parser;\n\t\t\tbreak;\n\t}\n};\n\nClipboard.prototype.paste = function (e) {\n\tvar data, rowData, rows;\n\n\tif (this.checkPaseOrigin(e)) {\n\n\t\tdata = this.getPasteData(e);\n\n\t\trowData = this.pasteParser.call(this, data);\n\n\t\tif (rowData) {\n\t\t\te.preventDefault();\n\n\t\t\tif (this.table.modExists(\"mutator\")) {\n\t\t\t\trowData = this.mutateData(rowData);\n\t\t\t}\n\n\t\t\trows = this.pasteAction.call(this, rowData);\n\t\t\tthis.table.options.clipboardPasted.call(this.table, data, rowData, rows);\n\t\t} else {\n\t\t\tthis.table.options.clipboardPasteError.call(this.table, data);\n\t\t}\n\t}\n};\n\nClipboard.prototype.mutateData = function (data) {\n\tvar self = this,\n\t output = [];\n\n\tif (Array.isArray(data)) {\n\t\tdata.forEach(function (row) {\n\t\t\toutput.push(self.table.modules.mutator.transformRow(row, \"clipboard\"));\n\t\t});\n\t} else {\n\t\toutput = data;\n\t}\n\n\treturn output;\n};\n\nClipboard.prototype.checkPaseOrigin = function (e) {\n\tvar valid = true;\n\n\tif (e.target.tagName != \"DIV\" || this.table.modules.edit.currentCell) {\n\t\tvalid = false;\n\t}\n\n\treturn valid;\n};\n\nClipboard.prototype.getPasteData = function (e) {\n\tvar data;\n\n\tif (window.clipboardData && window.clipboardData.getData) {\n\t\tdata = window.clipboardData.getData('Text');\n\t} else if (e.clipboardData && e.clipboardData.getData) {\n\t\tdata = e.clipboardData.getData('text/plain');\n\t} else if (e.originalEvent && e.originalEvent.clipboardData.getData) {\n\t\tdata = e.originalEvent.clipboardData.getData('text/plain');\n\t}\n\n\treturn data;\n};\n\nClipboard.prototype.pasteParsers = {\n\ttable: function table(clipboard) {\n\t\tvar data = [],\n\t\t success = false,\n\t\t headerFindSuccess = true,\n\t\t columns = this.table.columnManager.columns,\n\t\t columnMap = [],\n\t\t rows = [];\n\n\t\t//get data from clipboard into array of columns and rows.\n\t\tclipboard = clipboard.split(\"\\n\");\n\n\t\tclipboard.forEach(function (row) {\n\t\t\tdata.push(row.split(\"\\t\"));\n\t\t});\n\n\t\tif (data.length && !(data.length === 1 && data[0].length < 2)) {\n\t\t\tsuccess = true;\n\n\t\t\t//check if headers are present by title\n\t\t\tdata[0].forEach(function (value) {\n\t\t\t\tvar column = columns.find(function (column) {\n\t\t\t\t\treturn value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();\n\t\t\t\t});\n\n\t\t\t\tif (column) {\n\t\t\t\t\tcolumnMap.push(column);\n\t\t\t\t} else {\n\t\t\t\t\theaderFindSuccess = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t//check if column headers are present by field\n\t\t\tif (!headerFindSuccess) {\n\t\t\t\theaderFindSuccess = true;\n\t\t\t\tcolumnMap = [];\n\n\t\t\t\tdata[0].forEach(function (value) {\n\t\t\t\t\tvar column = columns.find(function (column) {\n\t\t\t\t\t\treturn value && column.field && value.trim() && column.field.trim() === value.trim();\n\t\t\t\t\t});\n\n\t\t\t\t\tif (column) {\n\t\t\t\t\t\tcolumnMap.push(column);\n\t\t\t\t\t} else {\n\t\t\t\t\t\theaderFindSuccess = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (!headerFindSuccess) {\n\t\t\t\t\tcolumnMap = this.table.columnManager.columnsByIndex;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//remove header row if found\n\t\t\tif (headerFindSuccess) {\n\t\t\t\tdata.shift();\n\t\t\t}\n\n\t\t\tdata.forEach(function (item) {\n\t\t\t\tvar row = {};\n\n\t\t\t\titem.forEach(function (value, i) {\n\t\t\t\t\tif (columnMap[i]) {\n\t\t\t\t\t\trow[columnMap[i].field] = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\trows.push(row);\n\t\t\t});\n\n\t\t\treturn rows;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\nClipboard.prototype.pasteActions = {\n\treplace: function replace(rows) {\n\t\treturn this.table.setData(rows);\n\t},\n\tupdate: function update(rows) {\n\t\treturn this.table.updateOrAddData(rows);\n\t},\n\tinsert: function insert(rows) {\n\t\treturn this.table.addData(rows);\n\t}\n};\n\nTabulator.prototype.registerModule(\"clipboard\", Clipboard);\n\nvar DataTree = function DataTree(table) {\n\tthis.table = table;\n\tthis.indent = 10;\n\tthis.field = \"\";\n\tthis.collapseEl = null;\n\tthis.expandEl = null;\n\tthis.branchEl = null;\n\tthis.elementField = false;\n\n\tthis.startOpen = function () {};\n\n\tthis.displayIndex = 0;\n};\n\nDataTree.prototype.initialize = function () {\n\tvar dummyEl = null,\n\t firstCol = this.table.columnManager.getFirstVisibileColumn(),\n\t options = this.table.options;\n\n\tthis.field = options.dataTreeChildField;\n\tthis.indent = options.dataTreeChildIndent;\n\tthis.elementField = options.dataTreeElementColumn || (firstCol ? firstCol.field : false);\n\n\tif (options.dataTreeBranchElement) {\n\n\t\tif (options.dataTreeBranchElement === true) {\n\t\t\tthis.branchEl = document.createElement(\"div\");\n\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch\");\n\t\t} else {\n\t\t\tif (typeof options.dataTreeBranchElement === \"string\") {\n\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\tdummyEl.innerHTML = options.dataTreeBranchElement;\n\t\t\t\tthis.branchEl = dummyEl.firstChild;\n\t\t\t} else {\n\t\t\t\tthis.branchEl = options.dataTreeBranchElement;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (options.dataTreeCollapseElement) {\n\t\tif (typeof options.dataTreeCollapseElement === \"string\") {\n\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\tdummyEl.innerHTML = options.dataTreeCollapseElement;\n\t\t\tthis.collapseEl = dummyEl.firstChild;\n\t\t} else {\n\t\t\tthis.collapseEl = options.dataTreeCollapseElement;\n\t\t}\n\t} else {\n\t\tthis.collapseEl = document.createElement(\"div\");\n\t\tthis.collapseEl.classList.add(\"tabulator-data-tree-control\");\n\t\tthis.collapseEl.tabIndex = 0;\n\t\tthis.collapseEl.innerHTML = \"
\";\n\t}\n\n\tif (options.dataTreeExpandElement) {\n\t\tif (typeof options.dataTreeExpandElement === \"string\") {\n\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\tdummyEl.innerHTML = options.dataTreeExpandElement;\n\t\t\tthis.expandEl = dummyEl.firstChild;\n\t\t} else {\n\t\t\tthis.expandEl = options.dataTreeExpandElement;\n\t\t}\n\t} else {\n\t\tthis.expandEl = document.createElement(\"div\");\n\t\tthis.expandEl.classList.add(\"tabulator-data-tree-control\");\n\t\tthis.expandEl.tabIndex = 0;\n\t\tthis.expandEl.innerHTML = \"
\";\n\t}\n\n\tswitch (_typeof(options.dataTreeStartExpanded)) {\n\t\tcase \"boolean\":\n\t\t\tthis.startOpen = function (row, index) {\n\t\t\t\treturn options.dataTreeStartExpanded;\n\t\t\t};\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tthis.startOpen = options.dataTreeStartExpanded;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthis.startOpen = function (row, index) {\n\t\t\t\treturn options.dataTreeStartExpanded[index];\n\t\t\t};\n\t\t\tbreak;\n\t}\n};\n\nDataTree.prototype.initializeRow = function (row) {\n\tvar childArray = row.getData()[this.field];\n\tvar isArray = Array.isArray(childArray);\n\n\tvar children = isArray || !isArray && (typeof childArray === 'undefined' ? 'undefined' : _typeof(childArray)) === \"object\" && childArray !== null;\n\n\tif (!children && row.modules.dataTree && row.modules.dataTree.branchEl) {\n\t\trow.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);\n\t}\n\n\tif (!children && row.modules.dataTree && row.modules.dataTree.controlEl) {\n\t\trow.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);\n\t}\n\n\trow.modules.dataTree = {\n\t\tindex: row.modules.dataTree ? row.modules.dataTree.index : 0,\n\t\topen: children ? row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0) : false,\n\t\tcontrolEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,\n\t\tbranchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,\n\t\tparent: row.modules.dataTree ? row.modules.dataTree.parent : false,\n\t\tchildren: children\n\t};\n};\n\nDataTree.prototype.layoutRow = function (row) {\n\tvar cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],\n\t el = cell.getElement(),\n\t config = row.modules.dataTree;\n\n\tif (config.branchEl) {\n\t\tif (config.branchEl.parentNode) {\n\t\t\tconfig.branchEl.parentNode.removeChild(config.branchEl);\n\t\t}\n\t\tconfig.branchEl = false;\n\t}\n\n\tif (config.controlEl) {\n\t\tif (config.controlEl.parentNode) {\n\t\t\tconfig.controlEl.parentNode.removeChild(config.controlEl);\n\t\t}\n\t\tconfig.controlEl = false;\n\t}\n\n\tthis.generateControlElement(row, el);\n\n\trow.getElement().classList.add(\"tabulator-tree-level-\" + config.index);\n\n\tif (config.index) {\n\t\tif (this.branchEl) {\n\t\t\tconfig.branchEl = this.branchEl.cloneNode(true);\n\t\t\tel.insertBefore(config.branchEl, el.firstChild);\n\n\t\t\tif (this.table.rtl) {\n\t\t\t\tconfig.branchEl.style.marginRight = (config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1) + config.index * this.indent + \"px\";\n\t\t\t} else {\n\t\t\t\tconfig.branchEl.style.marginLeft = (config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1) + config.index * this.indent + \"px\";\n\t\t\t}\n\t\t} else {\n\n\t\t\tif (this.table.rtl) {\n\t\t\t\tel.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + config.index * this.indent + \"px\";\n\t\t\t} else {\n\t\t\t\tel.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + config.index * this.indent + \"px\";\n\t\t\t}\n\t\t}\n\t}\n};\n\nDataTree.prototype.generateControlElement = function (row, el) {\n\tvar _this47 = this;\n\n\tvar config = row.modules.dataTree,\n\t el = el || row.getCells()[0].getElement(),\n\t oldControl = config.controlEl;\n\n\tif (config.children !== false) {\n\n\t\tif (config.open) {\n\t\t\tconfig.controlEl = this.collapseEl.cloneNode(true);\n\t\t\tconfig.controlEl.addEventListener(\"click\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t\t_this47.collapseRow(row);\n\t\t\t});\n\t\t} else {\n\t\t\tconfig.controlEl = this.expandEl.cloneNode(true);\n\t\t\tconfig.controlEl.addEventListener(\"click\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t\t_this47.expandRow(row);\n\t\t\t});\n\t\t}\n\n\t\tconfig.controlEl.addEventListener(\"mousedown\", function (e) {\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tif (oldControl && oldControl.parentNode === el) {\n\t\t\toldControl.parentNode.replaceChild(config.controlEl, oldControl);\n\t\t} else {\n\t\t\tel.insertBefore(config.controlEl, el.firstChild);\n\t\t}\n\t}\n};\n\nDataTree.prototype.setDisplayIndex = function (index) {\n\tthis.displayIndex = index;\n};\n\nDataTree.prototype.getDisplayIndex = function () {\n\treturn this.displayIndex;\n};\n\nDataTree.prototype.getRows = function (rows) {\n\tvar _this48 = this;\n\n\tvar output = [];\n\n\trows.forEach(function (row, i) {\n\t\tvar config, children;\n\n\t\toutput.push(row);\n\n\t\tif (row instanceof Row) {\n\n\t\t\trow.create();\n\n\t\t\tconfig = row.modules.dataTree.children;\n\n\t\t\tif (!config.index && config.children !== false) {\n\t\t\t\tchildren = _this48.getChildren(row);\n\n\t\t\t\tchildren.forEach(function (child) {\n\t\t\t\t\tchild.create();\n\t\t\t\t\toutput.push(child);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n\n\treturn output;\n};\n\nDataTree.prototype.getChildren = function (row, allChildren) {\n\tvar _this49 = this;\n\n\tvar config = row.modules.dataTree,\n\t children = [],\n\t output = [];\n\n\tif (config.children !== false && (config.open || allChildren)) {\n\t\tif (!Array.isArray(config.children)) {\n\t\t\tconfig.children = this.generateChildren(row);\n\t\t}\n\n\t\tif (this.table.modExists(\"filter\") && this.table.options.dataTreeFilter) {\n\t\t\tchildren = this.table.modules.filter.filter(config.children);\n\t\t} else {\n\t\t\tchildren = config.children;\n\t\t}\n\n\t\tif (this.table.modExists(\"sort\") && this.table.options.dataTreeSort) {\n\t\t\tthis.table.modules.sort.sort(children);\n\t\t}\n\n\t\tchildren.forEach(function (child) {\n\t\t\toutput.push(child);\n\n\t\t\tvar subChildren = _this49.getChildren(child);\n\n\t\t\tsubChildren.forEach(function (sub) {\n\t\t\t\toutput.push(sub);\n\t\t\t});\n\t\t});\n\t}\n\n\treturn output;\n};\n\nDataTree.prototype.generateChildren = function (row) {\n\tvar _this50 = this;\n\n\tvar children = [];\n\n\tvar childArray = row.getData()[this.field];\n\n\tif (!Array.isArray(childArray)) {\n\t\tchildArray = [childArray];\n\t}\n\n\tchildArray.forEach(function (childData) {\n\t\tvar childRow = new Row(childData || {}, _this50.table.rowManager);\n\n\t\tchildRow.create();\n\n\t\tchildRow.modules.dataTree.index = row.modules.dataTree.index + 1;\n\t\tchildRow.modules.dataTree.parent = row;\n\n\t\tif (childRow.modules.dataTree.children) {\n\t\t\tchildRow.modules.dataTree.open = _this50.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);\n\t\t}\n\t\tchildren.push(childRow);\n\t});\n\n\treturn children;\n};\n\nDataTree.prototype.expandRow = function (row, silent) {\n\tvar config = row.modules.dataTree;\n\n\tif (config.children !== false) {\n\t\tconfig.open = true;\n\n\t\trow.reinitialize();\n\n\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\n\n\t\tthis.table.options.dataTreeRowExpanded(row.getComponent(), row.modules.dataTree.index);\n\t}\n};\n\nDataTree.prototype.collapseRow = function (row) {\n\tvar config = row.modules.dataTree;\n\n\tif (config.children !== false) {\n\t\tconfig.open = false;\n\n\t\trow.reinitialize();\n\n\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\n\n\t\tthis.table.options.dataTreeRowCollapsed(row.getComponent(), row.modules.dataTree.index);\n\t}\n};\n\nDataTree.prototype.toggleRow = function (row) {\n\tvar config = row.modules.dataTree;\n\n\tif (config.children !== false) {\n\t\tif (config.open) {\n\t\t\tthis.collapseRow(row);\n\t\t} else {\n\t\t\tthis.expandRow(row);\n\t\t}\n\t}\n};\n\nDataTree.prototype.getTreeParent = function (row) {\n\treturn row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;\n};\n\nDataTree.prototype.getFilteredTreeChildren = function (row) {\n\tvar config = row.modules.dataTree,\n\t output = [],\n\t children;\n\n\tif (config.children) {\n\n\t\tif (!Array.isArray(config.children)) {\n\t\t\tconfig.children = this.generateChildren(row);\n\t\t}\n\n\t\tif (this.table.modExists(\"filter\") && this.table.options.dataTreeFilter) {\n\t\t\tchildren = this.table.modules.filter.filter(config.children);\n\t\t} else {\n\t\t\tchildren = config.children;\n\t\t}\n\n\t\tchildren.forEach(function (childRow) {\n\t\t\tif (childRow instanceof Row) {\n\t\t\t\toutput.push(childRow);\n\t\t\t}\n\t\t});\n\t}\n\n\treturn output;\n};\n\nDataTree.prototype.rowDelete = function (row) {\n\tvar parent = row.modules.dataTree.parent,\n\t childIndex;\n\n\tif (parent) {\n\t\tchildIndex = this.findChildIndex(row, parent);\n\n\t\tif (childIndex !== false) {\n\t\t\tparent.data[this.field].splice(childIndex, 1);\n\t\t}\n\n\t\tif (!parent.data[this.field].length) {\n\t\t\tdelete parent.data[this.field];\n\t\t}\n\n\t\tthis.initializeRow(parent);\n\t\tthis.layoutRow(parent);\n\t}\n\n\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\n};\n\nDataTree.prototype.addTreeChildRow = function (row, data, top, index) {\n\tvar childIndex = false;\n\n\tif (typeof data === \"string\") {\n\t\tdata = JSON.parse(data);\n\t}\n\n\tif (!Array.isArray(row.data[this.field])) {\n\t\trow.data[this.field] = [];\n\n\t\trow.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);\n\t}\n\n\tif (typeof index !== \"undefined\") {\n\t\tchildIndex = this.findChildIndex(index, row);\n\n\t\tif (childIndex !== false) {\n\t\t\trow.data[this.field].splice(top ? childIndex : childIndex + 1, 0, data);\n\t\t}\n\t}\n\n\tif (childIndex === false) {\n\t\tif (top) {\n\t\t\trow.data[this.field].unshift(data);\n\t\t} else {\n\t\t\trow.data[this.field].push(data);\n\t\t}\n\t}\n\n\tthis.initializeRow(row);\n\tthis.layoutRow(row);\n\n\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\n};\n\nDataTree.prototype.findChildIndex = function (subject, parent) {\n\tvar _this51 = this;\n\n\tvar match = false;\n\n\tif ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == \"object\") {\n\n\t\tif (subject instanceof Row) {\n\t\t\t//subject is row element\n\t\t\tmatch = subject.data;\n\t\t} else if (subject instanceof RowComponent) {\n\t\t\t//subject is public row component\n\t\t\tmatch = subject._getSelf().data;\n\t\t} else if (typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement) {\n\t\t\tif (parent.modules.dataTree) {\n\t\t\t\tmatch = parent.modules.dataTree.children.find(function (childRow) {\n\t\t\t\t\treturn childRow instanceof Row ? childRow.element === subject : false;\n\t\t\t\t});\n\n\t\t\t\tif (match) {\n\t\t\t\t\tmatch = match.data;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else if (typeof subject == \"undefined\" || subject === null) {\n\t\tmatch = false;\n\t} else {\n\t\t//subject should be treated as the index of the row\n\t\tmatch = parent.data[this.field].find(function (row) {\n\t\t\treturn row.data[_this51.table.options.index] == subject;\n\t\t});\n\t}\n\n\tif (match) {\n\n\t\tif (Array.isArray(parent.data[this.field])) {\n\t\t\tmatch = parent.data[this.field].indexOf(match);\n\t\t}\n\n\t\tif (match == -1) {\n\t\t\tmatch = false;\n\t\t}\n\t}\n\n\t//catch all for any other type of input\n\n\treturn match;\n};\n\nDataTree.prototype.getTreeChildren = function (row, component, recurse) {\n\tvar _this52 = this;\n\n\tvar config = row.modules.dataTree,\n\t output = [];\n\n\tif (config.children) {\n\n\t\tif (!Array.isArray(config.children)) {\n\t\t\tconfig.children = this.generateChildren(row);\n\t\t}\n\n\t\tconfig.children.forEach(function (childRow) {\n\t\t\tif (childRow instanceof Row) {\n\t\t\t\toutput.push(component ? childRow.getComponent() : childRow);\n\n\t\t\t\tif (recurse) {\n\t\t\t\t\toutput = output.concat(_this52.getTreeChildren(childRow, component, recurse));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\treturn output;\n};\n\nDataTree.prototype.checkForRestyle = function (cell) {\n\tif (!cell.row.cells.indexOf(cell)) {\n\t\tcell.row.reinitialize();\n\t}\n};\n\nDataTree.prototype.getChildField = function () {\n\treturn this.field;\n};\n\nDataTree.prototype.redrawNeeded = function (data) {\n\treturn (this.field ? typeof data[this.field] !== \"undefined\" : false) || (this.elementField ? typeof data[this.elementField] !== \"undefined\" : false);\n};\n\nTabulator.prototype.registerModule(\"dataTree\", DataTree);\n\nvar Download = function Download(table) {\n\tthis.table = table; //hold Tabulator object\n};\n\n//trigger file download\nDownload.prototype.download = function (type, filename, options, range, interceptCallback) {\n\tvar self = this,\n\t downloadFunc = false;\n\n\tfunction buildLink(data, mime) {\n\t\tif (interceptCallback) {\n\t\t\tif (interceptCallback === true) {\n\t\t\t\tself.triggerDownload(data, mime, type, filename, true);\n\t\t\t} else {\n\t\t\t\tinterceptCallback(data);\n\t\t\t}\n\t\t} else {\n\t\t\tself.triggerDownload(data, mime, type, filename);\n\t\t}\n\t}\n\n\tif (typeof type == \"function\") {\n\t\tdownloadFunc = type;\n\t} else {\n\t\tif (self.downloaders[type]) {\n\t\t\tdownloadFunc = self.downloaders[type];\n\t\t} else {\n\t\t\tconsole.warn(\"Download Error - No such download type found: \", type);\n\t\t}\n\t}\n\n\tif (downloadFunc) {\n\t\tvar list = this.generateExportList(range);\n\n\t\tdownloadFunc.call(this.table, list, options || {}, buildLink);\n\t}\n};\n\nDownload.prototype.generateExportList = function (range) {\n\tvar list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, \"download\");\n\n\t//assign group header formatter\n\tvar groupHeader = this.table.options.groupHeaderDownload;\n\n\tif (groupHeader && !Array.isArray(groupHeader)) {\n\t\tgroupHeader = [groupHeader];\n\t}\n\n\tlist.forEach(function (row) {\n\t\tvar group;\n\n\t\tif (row.type === \"group\") {\n\t\t\tgroup = row.columns[0];\n\n\t\t\tif (groupHeader && groupHeader[row.indent]) {\n\t\t\t\tgroup.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t\t}\n\t\t}\n\t});\n\n\treturn list;\n};\n\nDownload.prototype.triggerDownload = function (data, mime, type, filename, newTab) {\n\tvar element = document.createElement('a'),\n\t blob = new Blob([data], { type: mime }),\n\t filename = filename || \"Tabulator.\" + (typeof type === \"function\" ? \"txt\" : type);\n\n\tblob = this.table.options.downloadReady.call(this.table, data, blob);\n\n\tif (blob) {\n\n\t\tif (newTab) {\n\t\t\twindow.open(window.URL.createObjectURL(blob));\n\t\t} else {\n\t\t\tif (navigator.msSaveOrOpenBlob) {\n\t\t\t\tnavigator.msSaveOrOpenBlob(blob, filename);\n\t\t\t} else {\n\t\t\t\telement.setAttribute('href', window.URL.createObjectURL(blob));\n\n\t\t\t\t//set file title\n\t\t\t\telement.setAttribute('download', filename);\n\n\t\t\t\t//trigger download\n\t\t\t\telement.style.display = 'none';\n\t\t\t\tdocument.body.appendChild(element);\n\t\t\t\telement.click();\n\n\t\t\t\t//remove temporary link element\n\t\t\t\tdocument.body.removeChild(element);\n\t\t\t}\n\t\t}\n\n\t\tif (this.table.options.downloadComplete) {\n\t\t\tthis.table.options.downloadComplete();\n\t\t}\n\t}\n};\n\nDownload.prototype.commsReceived = function (table, action, data) {\n\tswitch (action) {\n\t\tcase \"intercept\":\n\t\t\tthis.download(data.type, \"\", data.options, data.active, data.intercept);\n\t\t\tbreak;\n\t}\n};\n\n//downloaders\nDownload.prototype.downloaders = {\n\tcsv: function csv(list, options, setFileContents) {\n\t\tvar delimiter = options && options.delimiter ? options.delimiter : \",\",\n\t\t fileContents = [],\n\t\t headers = [];\n\n\t\tlist.forEach(function (row) {\n\t\t\tvar item = [];\n\n\t\t\tswitch (row.type) {\n\t\t\t\tcase \"group\":\n\t\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process row groups\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"calc\":\n\t\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process column calculations\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"header\":\n\t\t\t\t\trow.columns.forEach(function (col, i) {\n\t\t\t\t\t\tif (col && col.depth === 1) {\n\t\t\t\t\t\t\theaders[i] = typeof col.value == \"undefined\" || col.value === null ? \"\" : '\"' + String(col.value).split('\"').join('\"\"') + '\"';\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"row\":\n\t\t\t\t\trow.columns.forEach(function (col) {\n\n\t\t\t\t\t\tif (col) {\n\n\t\t\t\t\t\t\tswitch (_typeof(col.value)) {\n\t\t\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\t\t\tcol.value = JSON.stringify(col.value);\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\t\tcase \"null\":\n\t\t\t\t\t\t\t\t\tcol.value = \"\";\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\titem.push('\"' + String(col.value).split('\"').join('\"\"') + '\"');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tfileContents.push(item.join(delimiter));\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tif (headers.length) {\n\t\t\tfileContents.unshift(headers.join(delimiter));\n\t\t}\n\n\t\tfileContents = fileContents.join(\"\\n\");\n\n\t\tif (options.bom) {\n\t\t\tfileContents = '\\uFEFF' + fileContents;\n\t\t}\n\n\t\tsetFileContents(fileContents, \"text/csv\");\n\t},\n\n\tjson: function json(list, options, setFileContents) {\n\t\tvar fileContents = [];\n\n\t\tlist.forEach(function (row) {\n\t\t\tvar item = {};\n\n\t\t\tswitch (row.type) {\n\t\t\t\tcase \"header\":\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"group\":\n\t\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"calc\":\n\t\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"row\":\n\t\t\t\t\trow.columns.forEach(function (col) {\n\t\t\t\t\t\tif (col) {\n\t\t\t\t\t\t\titem[col.component.getField()] = col.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tfileContents.push(item);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tfileContents = JSON.stringify(fileContents, null, '\\t');\n\n\t\tsetFileContents(fileContents, \"application/json\");\n\t},\n\n\tpdf: function pdf(list, options, setFileContents) {\n\t\tvar header = [],\n\t\t body = [],\n\t\t autoTableParams = {},\n\t\t rowGroupStyles = options.rowGroupStyles || {\n\t\t\tfontStyle: \"bold\",\n\t\t\tfontSize: 12,\n\t\t\tcellPadding: 6,\n\t\t\tfillColor: 220\n\t\t},\n\t\t rowCalcStyles = options.rowCalcStyles || {\n\t\t\tfontStyle: \"bold\",\n\t\t\tfontSize: 10,\n\t\t\tcellPadding: 4,\n\t\t\tfillColor: 232\n\t\t},\n\t\t jsPDFParams = options.jsPDF || {},\n\t\t title = options && options.title ? options.title : \"\";\n\n\t\tif (!jsPDFParams.orientation) {\n\t\t\tjsPDFParams.orientation = options.orientation || \"landscape\";\n\t\t}\n\n\t\tif (!jsPDFParams.unit) {\n\t\t\tjsPDFParams.unit = \"pt\";\n\t\t}\n\n\t\t//parse row list\n\t\tlist.forEach(function (row) {\n\t\t\tvar item = {};\n\n\t\t\tswitch (row.type) {\n\t\t\t\tcase \"header\":\n\t\t\t\t\theader.push(parseRow(row));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"group\":\n\t\t\t\t\tbody.push(parseRow(row, rowGroupStyles));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"calc\":\n\t\t\t\t\tbody.push(parseRow(row, rowCalcStyles));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"row\":\n\t\t\t\t\tbody.push(parseRow(row));\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tfunction parseRow(row, styles) {\n\t\t\tvar rowData = [];\n\n\t\t\trow.columns.forEach(function (col) {\n\t\t\t\tvar cell;\n\n\t\t\t\tif (col) {\n\t\t\t\t\tswitch (_typeof(col.value)) {\n\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\tcol.value = JSON.stringify(col.value);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\tcase \"null\":\n\t\t\t\t\t\t\tcol.value = \"\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcell = {\n\t\t\t\t\t\tcontent: col.value,\n\t\t\t\t\t\tcolSpan: col.width,\n\t\t\t\t\t\trowSpan: col.height\n\t\t\t\t\t};\n\n\t\t\t\t\tif (styles) {\n\t\t\t\t\t\tcell.styles = styles;\n\t\t\t\t\t}\n\n\t\t\t\t\trowData.push(cell);\n\t\t\t\t} else {\n\t\t\t\t\trowData.push(\"\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn rowData;\n\t\t}\n\n\t\t//configure PDF\n\t\tvar doc = new jsPDF(jsPDFParams); //set document to landscape, better for most tables\n\n\t\tif (options && options.autoTable) {\n\t\t\tif (typeof options.autoTable === \"function\") {\n\t\t\t\tautoTableParams = options.autoTable(doc) || {};\n\t\t\t} else {\n\t\t\t\tautoTableParams = options.autoTable;\n\t\t\t}\n\t\t}\n\n\t\tif (title) {\n\t\t\tautoTableParams.addPageContent = function (data) {\n\t\t\t\tdoc.text(title, 40, 30);\n\t\t\t};\n\t\t}\n\n\t\tautoTableParams.head = header;\n\t\tautoTableParams.body = body;\n\n\t\tdoc.autoTable(autoTableParams);\n\n\t\tif (options && options.documentProcessing) {\n\t\t\toptions.documentProcessing(doc);\n\t\t}\n\n\t\tsetFileContents(doc.output(\"arraybuffer\"), \"application/pdf\");\n\t},\n\n\txlsx: function xlsx(list, options, setFileContents) {\n\t\tvar self = this,\n\t\t sheetName = options.sheetName || \"Sheet1\",\n\t\t workbook = XLSX.utils.book_new(),\n\t\t output;\n\n\t\tworkbook.SheetNames = [];\n\t\tworkbook.Sheets = {};\n\n\t\tfunction generateSheet() {\n\t\t\tvar rows = [],\n\t\t\t merges = [],\n\t\t\t worksheet = {},\n\t\t\t range = { s: { c: 0, r: 0 }, e: { c: list[0] ? list[0].columns.reduce(function (a, b) {\n\t\t\t\t\t\treturn a + (b && b.width ? b.width : 1);\n\t\t\t\t\t}, 0) : 0, r: list.length } };\n\n\t\t\t//parse row list\n\t\t\tlist.forEach(function (row, i) {\n\t\t\t\tvar rowData = [];\n\n\t\t\t\trow.columns.forEach(function (col, j) {\n\n\t\t\t\t\tif (col) {\n\t\t\t\t\t\trowData.push(!(col.value instanceof Date) && _typeof(col.value) === \"object\" ? JSON.stringify(col.value) : col.value);\n\n\t\t\t\t\t\tif (col.width > 1 || col.height > -1) {\n\t\t\t\t\t\t\tmerges.push({ s: { r: i, c: j }, e: { r: i + col.height - 1, c: j + col.width - 1 } });\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\trowData.push(\"\");\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\trows.push(rowData);\n\t\t\t});\n\n\t\t\t//convert rows to worksheet\n\t\t\tXLSX.utils.sheet_add_aoa(worksheet, rows);\n\n\t\t\tworksheet['!ref'] = XLSX.utils.encode_range(range);\n\n\t\t\tif (merges.length) {\n\t\t\t\tworksheet[\"!merges\"] = merges;\n\t\t\t}\n\n\t\t\treturn worksheet;\n\t\t}\n\n\t\tif (options.sheetOnly) {\n\t\t\tsetFileContents(generateSheet());\n\t\t\treturn;\n\t\t}\n\n\t\tif (options.sheets) {\n\t\t\tfor (var sheet in options.sheets) {\n\n\t\t\t\tif (options.sheets[sheet] === true) {\n\t\t\t\t\tworkbook.SheetNames.push(sheet);\n\t\t\t\t\tworkbook.Sheets[sheet] = generateSheet();\n\t\t\t\t} else {\n\n\t\t\t\t\tworkbook.SheetNames.push(sheet);\n\n\t\t\t\t\tthis.modules.comms.send(options.sheets[sheet], \"download\", \"intercept\", {\n\t\t\t\t\t\ttype: \"xlsx\",\n\t\t\t\t\t\toptions: { sheetOnly: true },\n\t\t\t\t\t\tactive: self.active,\n\t\t\t\t\t\tintercept: function intercept(data) {\n\t\t\t\t\t\t\tworkbook.Sheets[sheet] = data;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tworkbook.SheetNames.push(sheetName);\n\t\t\tworkbook.Sheets[sheetName] = generateSheet();\n\t\t}\n\n\t\tif (options.documentProcessing) {\n\t\t\tworkbook = options.documentProcessing(workbook);\n\t\t}\n\n\t\t//convert workbook to binary array\n\t\tfunction s2ab(s) {\n\t\t\tvar buf = new ArrayBuffer(s.length);\n\t\t\tvar view = new Uint8Array(buf);\n\t\t\tfor (var i = 0; i != s.length; ++i) {\n\t\t\t\tview[i] = s.charCodeAt(i) & 0xFF;\n\t\t\t}return buf;\n\t\t}\n\n\t\toutput = XLSX.write(workbook, { bookType: 'xlsx', bookSST: true, type: 'binary' });\n\n\t\tsetFileContents(s2ab(output), \"application/octet-stream\");\n\t},\n\n\thtml: function html(list, options, setFileContents) {\n\t\tif (this.modExists(\"export\", true)) {\n\t\t\tsetFileContents(this.modules.export.genereateHTMLTable(list), \"text/html\");\n\t\t}\n\t}\n\n};\n\nTabulator.prototype.registerModule(\"download\", Download);\n\nvar Edit = function Edit(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.currentCell = false; //hold currently editing cell\n\tthis.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening\n\tthis.recursionBlock = false; //prevent focus recursion\n\tthis.invalidEdit = false;\n\tthis.editedCells = [];\n};\n\n//initialize column editor\nEdit.prototype.initializeColumn = function (column) {\n\tvar self = this,\n\t config = {\n\t\teditor: false,\n\t\tblocked: false,\n\t\tcheck: column.definition.editable,\n\t\tparams: column.definition.editorParams || {}\n\t};\n\n\t//set column editor\n\tswitch (_typeof(column.definition.editor)) {\n\t\tcase \"string\":\n\n\t\t\tif (column.definition.editor === \"tick\") {\n\t\t\t\tcolumn.definition.editor = \"tickCross\";\n\t\t\t\tconsole.warn(\"DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor\");\n\t\t\t}\n\n\t\t\tif (self.editors[column.definition.editor]) {\n\t\t\t\tconfig.editor = self.editors[column.definition.editor];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Editor Error - No such editor found: \", column.definition.editor);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tconfig.editor = column.definition.editor;\n\t\t\tbreak;\n\n\t\tcase \"boolean\":\n\n\t\t\tif (column.definition.editor === true) {\n\n\t\t\t\tif (typeof column.definition.formatter !== \"function\") {\n\n\t\t\t\t\tif (column.definition.formatter === \"tick\") {\n\t\t\t\t\t\tcolumn.definition.formatter = \"tickCross\";\n\t\t\t\t\t\tconsole.warn(\"DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor\");\n\t\t\t\t\t}\n\n\t\t\t\t\tif (self.editors[column.definition.formatter]) {\n\t\t\t\t\t\tconfig.editor = self.editors[column.definition.formatter];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconfig.editor = self.editors[\"input\"];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Editor Error - Cannot auto lookup editor for a custom formatter: \", column.definition.formatter);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t}\n\n\tif (config.editor) {\n\t\tcolumn.modules.edit = config;\n\t}\n};\n\nEdit.prototype.getCurrentCell = function () {\n\treturn this.currentCell ? this.currentCell.getComponent() : false;\n};\n\nEdit.prototype.clearEditor = function (cancel) {\n\tvar cell = this.currentCell,\n\t cellEl;\n\n\tthis.invalidEdit = false;\n\n\tif (cell) {\n\t\tthis.currentCell = false;\n\n\t\tcellEl = cell.getElement();\n\n\t\tif (cancel) {\n\t\t\tcell.validate();\n\t\t} else {\n\t\t\tcellEl.classList.remove(\"tabulator-validation-fail\");\n\t\t}\n\n\t\tcellEl.classList.remove(\"tabulator-editing\");\n\t\twhile (cellEl.firstChild) {\n\t\t\tcellEl.removeChild(cellEl.firstChild);\n\t\t}cell.row.getElement().classList.remove(\"tabulator-row-editing\");\n\t}\n};\n\nEdit.prototype.cancelEdit = function () {\n\n\tif (this.currentCell) {\n\t\tvar cell = this.currentCell;\n\t\tvar component = this.currentCell.getComponent();\n\n\t\tthis.clearEditor(true);\n\t\tcell.setValueActual(cell.getValue());\n\t\tcell.cellRendered();\n\n\t\tif (cell.column.definition.editor == \"textarea\" || cell.column.definition.variableHeight) {\n\t\t\tcell.row.normalizeHeight(true);\n\t\t}\n\n\t\tif (cell.column.cellEvents.cellEditCancelled) {\n\t\t\tcell.column.cellEvents.cellEditCancelled.call(this.table, component);\n\t\t}\n\n\t\tthis.table.options.cellEditCancelled.call(this.table, component);\n\t}\n};\n\n//return a formatted value for a cell\nEdit.prototype.bindEditor = function (cell) {\n\tvar self = this,\n\t element = cell.getElement(true);\n\n\telement.setAttribute(\"tabindex\", 0);\n\n\telement.addEventListener(\"click\", function (e) {\n\t\tif (!element.classList.contains(\"tabulator-editing\")) {\n\t\t\telement.focus({ preventScroll: true });\n\t\t}\n\t});\n\n\telement.addEventListener(\"mousedown\", function (e) {\n\t\tif (e.button === 2) {\n\t\t\te.preventDefault();\n\t\t} else {\n\t\t\tself.mouseClick = true;\n\t\t}\n\t});\n\n\telement.addEventListener(\"focus\", function (e) {\n\t\tif (!self.recursionBlock) {\n\t\t\tself.edit(cell, e, false);\n\t\t}\n\t});\n};\n\nEdit.prototype.focusCellNoEvent = function (cell, block) {\n\tthis.recursionBlock = true;\n\tif (!(block && this.table.browser === \"ie\")) {\n\t\tcell.getElement().focus({ preventScroll: true });\n\t}\n\tthis.recursionBlock = false;\n};\n\nEdit.prototype.editCell = function (cell, forceEdit) {\n\tthis.focusCellNoEvent(cell);\n\tthis.edit(cell, false, forceEdit);\n};\n\nEdit.prototype.focusScrollAdjust = function (cell) {\n\tif (this.table.rowManager.getRenderMode() == \"virtual\") {\n\t\tvar topEdge = this.table.rowManager.element.scrollTop,\n\t\t bottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,\n\t\t rowEl = cell.row.getElement(),\n\t\t offset = rowEl.offsetTop;\n\n\t\tif (rowEl.offsetTop < topEdge) {\n\t\t\tthis.table.rowManager.element.scrollTop -= topEdge - rowEl.offsetTop;\n\t\t} else {\n\t\t\tif (rowEl.offsetTop + rowEl.offsetHeight > bottomEdge) {\n\t\t\t\tthis.table.rowManager.element.scrollTop += rowEl.offsetTop + rowEl.offsetHeight - bottomEdge;\n\t\t\t}\n\t\t}\n\n\t\tvar leftEdge = this.table.rowManager.element.scrollLeft,\n\t\t rightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,\n\t\t cellEl = cell.getElement(),\n\t\t offset = cellEl.offsetLeft;\n\n\t\tif (this.table.modExists(\"frozenColumns\")) {\n\t\t\tleftEdge += parseInt(this.table.modules.frozenColumns.leftMargin);\n\t\t\trightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin);\n\t\t}\n\n\t\tif (this.table.options.virtualDomHoz) {\n\t\t\tleftEdge -= parseInt(this.table.vdomHoz.vDomPadLeft);\n\t\t\trightEdge -= parseInt(this.table.vdomHoz.vDomPadLeft);\n\t\t}\n\n\t\tif (cellEl.offsetLeft < leftEdge) {\n\n\t\t\tthis.table.rowManager.element.scrollLeft -= leftEdge - cellEl.offsetLeft;\n\t\t} else {\n\t\t\tif (cellEl.offsetLeft + cellEl.offsetWidth > rightEdge) {\n\t\t\t\tthis.table.rowManager.element.scrollLeft += cellEl.offsetLeft + cellEl.offsetWidth - rightEdge;\n\t\t\t}\n\t\t}\n\t}\n};\n\nEdit.prototype.edit = function (cell, e, forceEdit) {\n\tvar self = this,\n\t allowEdit = true,\n\t rendered = function rendered() {},\n\t element = cell.getElement(),\n\t cellEditor,\n\t component,\n\t params;\n\n\t//prevent editing if another cell is refusing to leave focus (eg. validation fail)\n\tif (this.currentCell) {\n\t\tif (!this.invalidEdit) {\n\t\t\tthis.cancelEdit();\n\t\t}\n\t\treturn;\n\t}\n\n\t//handle successfull value change\n\tfunction success(value) {\n\t\tif (self.currentCell === cell) {\n\t\t\tvar valid = true;\n\n\t\t\tif (cell.column.modules.validate && self.table.modExists(\"validate\") && self.table.options.validationMode != \"manual\") {\n\t\t\t\tvalid = self.table.modules.validate.validate(cell.column.modules.validate, cell, value);\n\t\t\t}\n\n\t\t\tif (valid === true || self.table.options.validationMode === \"highlight\") {\n\t\t\t\tself.clearEditor();\n\n\t\t\t\tif (!cell.modules.edit) {\n\t\t\t\t\tcell.modules.edit = {};\n\t\t\t\t}\n\n\t\t\t\tcell.modules.edit.edited = true;\n\n\t\t\t\tif (self.editedCells.indexOf(cell) == -1) {\n\t\t\t\t\tself.editedCells.push(cell);\n\t\t\t\t}\n\n\t\t\t\tcell.setValue(value, true);\n\n\t\t\t\tif (self.table.options.dataTree && self.table.modExists(\"dataTree\")) {\n\t\t\t\t\tself.table.modules.dataTree.checkForRestyle(cell);\n\t\t\t\t}\n\n\t\t\t\tif (valid !== true) {\n\t\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\n\t\t\t\t\tself.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tself.invalidEdit = true;\n\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\n\t\t\t\tself.focusCellNoEvent(cell, true);\n\t\t\t\trendered();\n\t\t\t\tself.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);\n\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else {\n\t\t\t// console.warn(\"Edit Success Error - cannot call success on a cell that is no longer being edited\");\n\t\t}\n\t}\n\n\t//handle aborted edit\n\tfunction cancel() {\n\t\tif (self.currentCell === cell) {\n\t\t\tself.cancelEdit();\n\n\t\t\tif (self.table.options.dataTree && self.table.modExists(\"dataTree\")) {\n\t\t\t\tself.table.modules.dataTree.checkForRestyle(cell);\n\t\t\t}\n\t\t} else {\n\t\t\t// console.warn(\"Edit Success Error - cannot call cancel on a cell that is no longer being edited\");\n\t\t}\n\t}\n\n\tfunction onRendered(callback) {\n\t\trendered = callback;\n\t}\n\n\tif (!cell.column.modules.edit.blocked) {\n\t\tif (e) {\n\t\t\te.stopPropagation();\n\t\t}\n\n\t\tswitch (_typeof(cell.column.modules.edit.check)) {\n\t\t\tcase \"function\":\n\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\n\t\t\t\tbreak;\n\n\t\t\tcase \"boolean\":\n\t\t\t\tallowEdit = cell.column.modules.edit.check;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (allowEdit || forceEdit) {\n\n\t\t\tself.cancelEdit();\n\n\t\t\tself.currentCell = cell;\n\n\t\t\tthis.focusScrollAdjust(cell);\n\n\t\t\tcomponent = cell.getComponent();\n\n\t\t\tif (this.mouseClick) {\n\t\t\t\tthis.mouseClick = false;\n\n\t\t\t\tif (cell.column.cellEvents.cellClick) {\n\t\t\t\t\tcell.column.cellEvents.cellClick.call(this.table, e, component);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (cell.column.cellEvents.cellEditing) {\n\t\t\t\tcell.column.cellEvents.cellEditing.call(this.table, component);\n\t\t\t}\n\n\t\t\tself.table.options.cellEditing.call(this.table, component);\n\n\t\t\tparams = typeof cell.column.modules.edit.params === \"function\" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;\n\n\t\t\tcellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);\n\n\t\t\t//if editor returned, add to DOM, if false, abort edit\n\t\t\tif (cellEditor !== false) {\n\n\t\t\t\tif (cellEditor instanceof Node) {\n\t\t\t\t\telement.classList.add(\"tabulator-editing\");\n\t\t\t\t\tcell.row.getElement().classList.add(\"tabulator-row-editing\");\n\t\t\t\t\twhile (element.firstChild) {\n\t\t\t\t\t\telement.removeChild(element.firstChild);\n\t\t\t\t\t}element.appendChild(cellEditor);\n\n\t\t\t\t\t//trigger onRendered Callback\n\t\t\t\t\trendered();\n\n\t\t\t\t\t//prevent editing from triggering rowClick event\n\t\t\t\t\tvar children = element.children;\n\n\t\t\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\t\t\tchildren[i].addEventListener(\"click\", function (e) {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Edit Error - Editor should return an instance of Node, the editor returned:\", cellEditor);\n\t\t\t\t\telement.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telement.blur();\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.mouseClick = false;\n\t\t\telement.blur();\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\tthis.mouseClick = false;\n\t\telement.blur();\n\t\treturn false;\n\t}\n};\n\nEdit.prototype.maskInput = function (el, options) {\n\tvar mask = options.mask,\n\t maskLetter = typeof options.maskLetterChar !== \"undefined\" ? options.maskLetterChar : \"A\",\n\t maskNumber = typeof options.maskNumberChar !== \"undefined\" ? options.maskNumberChar : \"9\",\n\t maskWildcard = typeof options.maskWildcardChar !== \"undefined\" ? options.maskWildcardChar : \"*\",\n\t success = false;\n\n\tfunction fillSymbols(index) {\n\t\tvar symbol = mask[index];\n\t\tif (typeof symbol !== \"undefined\" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber) {\n\t\t\tel.value = el.value + \"\" + symbol;\n\t\t\tfillSymbols(index + 1);\n\t\t}\n\t}\n\n\tel.addEventListener(\"keydown\", function (e) {\n\t\tvar index = el.value.length,\n\t\t char = e.key;\n\n\t\tif (e.keyCode > 46) {\n\t\t\tif (index >= mask.length) {\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t\tsuccess = false;\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tswitch (mask[index]) {\n\t\t\t\t\tcase maskLetter:\n\t\t\t\t\t\tif (char.toUpperCase() == char.toLowerCase()) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tsuccess = false;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase maskNumber:\n\t\t\t\t\t\tif (isNaN(char)) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tsuccess = false;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase maskWildcard:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (char !== mask[index]) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tsuccess = false;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsuccess = true;\n\t\t}\n\n\t\treturn;\n\t});\n\n\tel.addEventListener(\"keyup\", function (e) {\n\t\tif (e.keyCode > 46) {\n\t\t\tif (options.maskAutoFill) {\n\t\t\t\tfillSymbols(el.value.length);\n\t\t\t}\n\t\t}\n\t});\n\n\tif (!el.placeholder) {\n\t\tel.placeholder = mask;\n\t}\n\n\tif (options.maskAutoFill) {\n\t\tfillSymbols(el.value.length);\n\t}\n};\n\nEdit.prototype.getEditedCells = function () {\n\tvar output = [];\n\n\tthis.editedCells.forEach(function (cell) {\n\t\toutput.push(cell.getComponent());\n\t});\n\n\treturn output;\n};\n\nEdit.prototype.clearEdited = function (cell) {\n\tvar editIndex;\n\n\tif (cell.modules.edit && cell.modules.edit.edited) {\n\t\tcell.modules.edit.edited = false;\n\n\t\tif (cell.modules.validate) {\n\t\t\tcell.modules.validate.invalid = false;\n\t\t}\n\t}\n\n\teditIndex = this.editedCells.indexOf(cell);\n\n\tif (editIndex > -1) {\n\t\tthis.editedCells.splice(editIndex, 1);\n\t}\n};\n\n//default data editors\nEdit.prototype.editors = {\n\n\t//input element\n\tinput: function input(cell, onRendered, success, cancel, editorParams) {\n\n\t\t//create and style input\n\t\tvar cellValue = cell.getValue(),\n\t\t input = document.createElement(\"input\");\n\n\t\tinput.setAttribute(\"type\", editorParams.search ? \"search\" : \"text\");\n\n\t\tinput.style.padding = \"4px\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinput.value = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\n\t\tonRendered(function () {\n\t\t\tinput.focus({ preventScroll: true });\n\t\t\tinput.style.height = \"100%\";\n\t\t});\n\n\t\tfunction onChange(e) {\n\t\t\tif ((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\" || input.value !== cellValue) {\n\t\t\t\tif (success(input.value)) {\n\t\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcancel();\n\t\t\t}\n\t\t}\n\n\t\t//submit new value on blur or change\n\t\tinput.addEventListener(\"change\", onChange);\n\t\tinput.addEventListener(\"blur\", onChange);\n\n\t\t//submit new value on enter\n\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\tswitch (e.keyCode) {\n\t\t\t\t// case 9:\n\t\t\t\tcase 13:\n\t\t\t\t\tonChange(e);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 27:\n\t\t\t\t\tcancel();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 35:\n\t\t\t\tcase 36:\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tif (editorParams.mask) {\n\t\t\tthis.table.modules.edit.maskInput(input, editorParams);\n\t\t}\n\n\t\treturn input;\n\t},\n\n\t//resizable text area element\n\ttextarea: function textarea(cell, onRendered, success, cancel, editorParams) {\n\t\tvar self = this,\n\t\t cellValue = cell.getValue(),\n\t\t vertNav = editorParams.verticalNavigation || \"hybrid\",\n\t\t value = String(cellValue !== null && typeof cellValue !== \"undefined\" ? cellValue : \"\"),\n\t\t count = (value.match(/(?:\\r\\n|\\r|\\n)/g) || []).length + 1,\n\t\t input = document.createElement(\"textarea\"),\n\t\t scrollHeight = 0;\n\n\t\t//create and style input\n\t\tinput.style.display = \"block\";\n\t\tinput.style.padding = \"2px\";\n\t\tinput.style.height = \"100%\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\t\tinput.style.whiteSpace = \"pre-wrap\";\n\t\tinput.style.resize = \"none\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinput.value = value;\n\n\t\tonRendered(function () {\n\t\t\tinput.focus({ preventScroll: true });\n\t\t\tinput.style.height = \"100%\";\n\n\t\t\tinput.scrollHeight;\n\t\t\tinput.style.height = input.scrollHeight + \"px\";\n\t\t\tcell.getRow().normalizeHeight();\n\t\t});\n\n\t\tfunction onChange(e) {\n\n\t\t\tif ((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\" || input.value !== cellValue) {\n\n\t\t\t\tif (success(input.value)) {\n\t\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t\t}\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tcell.getRow().normalizeHeight();\n\t\t\t\t}, 300);\n\t\t\t} else {\n\t\t\t\tcancel();\n\t\t\t}\n\t\t}\n\n\t\t//submit new value on blur or change\n\t\tinput.addEventListener(\"change\", onChange);\n\t\tinput.addEventListener(\"blur\", onChange);\n\n\t\tinput.addEventListener(\"keyup\", function () {\n\n\t\t\tinput.style.height = \"\";\n\n\t\t\tvar heightNow = input.scrollHeight;\n\n\t\t\tinput.style.height = heightNow + \"px\";\n\n\t\t\tif (heightNow != scrollHeight) {\n\t\t\t\tscrollHeight = heightNow;\n\t\t\t\tcell.getRow().normalizeHeight();\n\t\t\t}\n\t\t});\n\n\t\tinput.addEventListener(\"keydown\", function (e) {\n\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 27:\n\t\t\t\t\tcancel();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 38:\n\t\t\t\t\t//up arrow\n\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && input.selectionStart) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 40:\n\t\t\t\t\t//down arrow\n\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && input.selectionStart !== input.value.length) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 35:\n\t\t\t\tcase 36:\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tif (editorParams.mask) {\n\t\t\tthis.table.modules.edit.maskInput(input, editorParams);\n\t\t}\n\n\t\treturn input;\n\t},\n\n\t//input element with type of number\n\tnumber: function number(cell, onRendered, success, cancel, editorParams) {\n\n\t\tvar cellValue = cell.getValue(),\n\t\t vertNav = editorParams.verticalNavigation || \"editor\",\n\t\t input = document.createElement(\"input\");\n\n\t\tinput.setAttribute(\"type\", \"number\");\n\n\t\tif (typeof editorParams.max != \"undefined\") {\n\t\t\tinput.setAttribute(\"max\", editorParams.max);\n\t\t}\n\n\t\tif (typeof editorParams.min != \"undefined\") {\n\t\t\tinput.setAttribute(\"min\", editorParams.min);\n\t\t}\n\n\t\tif (typeof editorParams.step != \"undefined\") {\n\t\t\tinput.setAttribute(\"step\", editorParams.step);\n\t\t}\n\n\t\t//create and style input\n\t\tinput.style.padding = \"4px\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinput.value = cellValue;\n\n\t\tvar blurFunc = function blurFunc(e) {\n\t\t\tonChange();\n\t\t};\n\n\t\tonRendered(function () {\n\t\t\t//submit new value on blur\n\t\t\tinput.removeEventListener(\"blur\", blurFunc);\n\n\t\t\tinput.focus({ preventScroll: true });\n\t\t\tinput.style.height = \"100%\";\n\n\t\t\t//submit new value on blur\n\t\t\tinput.addEventListener(\"blur\", blurFunc);\n\t\t});\n\n\t\tfunction onChange() {\n\t\t\tvar value = input.value;\n\n\t\t\tif (!isNaN(value) && value !== \"\") {\n\t\t\t\tvalue = Number(value);\n\t\t\t}\n\n\t\t\tif (value !== cellValue) {\n\t\t\t\tif (success(value)) {\n\t\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcancel();\n\t\t\t}\n\t\t}\n\n\t\t//submit new value on enter\n\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 13:\n\t\t\t\t\t// case 9:\n\t\t\t\t\tonChange();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 27:\n\t\t\t\t\tcancel();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 38: //up arrow\n\t\t\t\tcase 40:\n\t\t\t\t\t//down arrow\n\t\t\t\t\tif (vertNav == \"editor\") {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 35:\n\t\t\t\tcase 36:\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tif (editorParams.mask) {\n\t\t\tthis.table.modules.edit.maskInput(input, editorParams);\n\t\t}\n\n\t\treturn input;\n\t},\n\n\t//input element with type of number\n\trange: function range(cell, onRendered, success, cancel, editorParams) {\n\n\t\tvar cellValue = cell.getValue(),\n\t\t input = document.createElement(\"input\");\n\n\t\tinput.setAttribute(\"type\", \"range\");\n\n\t\tif (typeof editorParams.max != \"undefined\") {\n\t\t\tinput.setAttribute(\"max\", editorParams.max);\n\t\t}\n\n\t\tif (typeof editorParams.min != \"undefined\") {\n\t\t\tinput.setAttribute(\"min\", editorParams.min);\n\t\t}\n\n\t\tif (typeof editorParams.step != \"undefined\") {\n\t\t\tinput.setAttribute(\"step\", editorParams.step);\n\t\t}\n\n\t\t//create and style input\n\t\tinput.style.padding = \"4px\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinput.value = cellValue;\n\n\t\tonRendered(function () {\n\t\t\tinput.focus({ preventScroll: true });\n\t\t\tinput.style.height = \"100%\";\n\t\t});\n\n\t\tfunction onChange() {\n\t\t\tvar value = input.value;\n\n\t\t\tif (!isNaN(value) && value !== \"\") {\n\t\t\t\tvalue = Number(value);\n\t\t\t}\n\n\t\t\tif (value != cellValue) {\n\t\t\t\tif (success(value)) {\n\t\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcancel();\n\t\t\t}\n\t\t}\n\n\t\t//submit new value on blur\n\t\tinput.addEventListener(\"blur\", function (e) {\n\t\t\tonChange();\n\t\t});\n\n\t\t//submit new value on enter\n\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 13:\n\t\t\t\t\t// case 9:\n\t\t\t\t\tonChange();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 27:\n\t\t\t\t\tcancel();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\treturn input;\n\t},\n\n\t//select\n\tselect: function select(cell, onRendered, success, cancel, editorParams) {\n\t\tvar _this53 = this;\n\n\t\tvar self = this,\n\t\t cellEl = cell.getElement(),\n\t\t initialValue = cell.getValue(),\n\t\t vertNav = editorParams.verticalNavigation || \"editor\",\n\t\t initialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? Array.isArray(initialValue) ? initialValue : [initialValue] : typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : [],\n\t\t input = document.createElement(\"input\"),\n\t\t listEl = document.createElement(\"div\"),\n\t\t multiselect = editorParams.multiselect,\n\t\t dataItems = [],\n\t\t currentItem = {},\n\t\t displayItems = [],\n\t\t currentItems = [],\n\t\t blurable = true,\n\t\t blockListShow = false,\n\t\t searchWord = \"\",\n\t\t searchWordTimeout = null;\n\n\t\tif (Array.isArray(editorParams) || !Array.isArray(editorParams) && (typeof editorParams === 'undefined' ? 'undefined' : _typeof(editorParams)) === \"object\" && !editorParams.values) {\n\t\t\tconsole.warn(\"DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object\");\n\t\t\teditorParams = { values: editorParams };\n\t\t}\n\n\t\tfunction getUniqueColumnValues(field) {\n\t\t\tvar output = {},\n\t\t\t data = self.table.getData(),\n\t\t\t column;\n\n\t\t\tif (field) {\n\t\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\n\t\t\t} else {\n\t\t\t\tcolumn = cell.getColumn()._getSelf();\n\t\t\t}\n\n\t\t\tif (column) {\n\t\t\t\tdata.forEach(function (row) {\n\t\t\t\t\tvar val = column.getFieldValue(row);\n\n\t\t\t\t\tif (val !== null && typeof val !== \"undefined\" && val !== \"\") {\n\t\t\t\t\t\toutput[val] = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"unable to find matching column to create select lookup list:\", field);\n\t\t\t}\n\n\t\t\treturn Object.keys(output);\n\t\t}\n\n\t\tfunction parseItems(inputValues, curentValues) {\n\t\t\tvar dataList = [];\n\t\t\tvar displayList = [];\n\n\t\t\tfunction processComplexListItem(item) {\n\t\t\t\tvar item = {\n\t\t\t\t\tlabel: item.label,\n\t\t\t\t\tvalue: item.value,\n\t\t\t\t\titemParams: item.itemParams,\n\t\t\t\t\telementAttributes: item.elementAttributes,\n\t\t\t\t\telement: false\n\t\t\t\t};\n\n\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\n\t\t\t\t// \tsetCurrentItem(item);\n\t\t\t\t// }\n\n\t\t\t\tif (curentValues.indexOf(item.value) > -1) {\n\t\t\t\t\tsetItem(item);\n\t\t\t\t}\n\n\t\t\t\tdataList.push(item);\n\t\t\t\tdisplayList.push(item);\n\n\t\t\t\treturn item;\n\t\t\t}\n\n\t\t\tif (typeof inputValues == \"function\") {\n\t\t\t\tinputValues = inputValues(cell);\n\t\t\t}\n\n\t\t\tif (Array.isArray(inputValues)) {\n\t\t\t\tinputValues.forEach(function (value) {\n\t\t\t\t\tvar item;\n\n\t\t\t\t\tif ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === \"object\") {\n\n\t\t\t\t\t\tif (value.options) {\n\t\t\t\t\t\t\titem = {\n\t\t\t\t\t\t\t\tlabel: value.label,\n\t\t\t\t\t\t\t\tgroup: true,\n\t\t\t\t\t\t\t\titemParams: value.itemParams,\n\t\t\t\t\t\t\t\telementAttributes: value.elementAttributes,\n\t\t\t\t\t\t\t\telement: false\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tdisplayList.push(item);\n\n\t\t\t\t\t\t\tvalue.options.forEach(function (item) {\n\t\t\t\t\t\t\t\tprocessComplexListItem(item);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tprocessComplexListItem(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\titem = {\n\t\t\t\t\t\t\tlabel: value,\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\telement: false\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\n\t\t\t\t\t\t// \tsetCurrentItem(item);\n\t\t\t\t\t\t// }\n\n\t\t\t\t\t\tif (curentValues.indexOf(item.value) > -1) {\n\t\t\t\t\t\t\tsetItem(item);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdataList.push(item);\n\t\t\t\t\t\tdisplayList.push(item);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tfor (var key in inputValues) {\n\t\t\t\t\tvar item = {\n\t\t\t\t\t\tlabel: inputValues[key],\n\t\t\t\t\t\tvalue: key,\n\t\t\t\t\t\telement: false\n\t\t\t\t\t};\n\n\t\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\n\t\t\t\t\t// \tsetCurrentItem(item);\n\t\t\t\t\t// }\n\n\t\t\t\t\tif (curentValues.indexOf(item.value) > -1) {\n\t\t\t\t\t\tsetItem(item);\n\t\t\t\t\t}\n\n\t\t\t\t\tdataList.push(item);\n\t\t\t\t\tdisplayList.push(item);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (editorParams.sortValuesList) {\n\t\t\t\tdataList.sort(function (a, b) {\n\t\t\t\t\treturn a.label < b.label ? -1 : a.label > b.label ? 1 : 0;\n\t\t\t\t});\n\n\t\t\t\tdisplayList.sort(function (a, b) {\n\t\t\t\t\treturn a.label < b.label ? -1 : a.label > b.label ? 1 : 0;\n\t\t\t\t});\n\n\t\t\t\tif (editorParams.sortValuesList !== \"asc\") {\n\t\t\t\t\tdataList.reverse();\n\t\t\t\t\tdisplayList.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdataItems = dataList;\n\t\t\tdisplayItems = displayList;\n\n\t\t\tfillList();\n\t\t}\n\n\t\tfunction fillList() {\n\t\t\twhile (listEl.firstChild) {\n\t\t\t\tlistEl.removeChild(listEl.firstChild);\n\t\t\t}displayItems.forEach(function (item) {\n\n\t\t\t\tvar el = item.element;\n\n\t\t\t\tif (!el) {\n\t\t\t\t\tel = document.createElement(\"div\");\n\t\t\t\t\titem.label = editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label, cell, el, item.itemParams) : item.label;\n\t\t\t\t\tif (item.group) {\n\t\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-group\");\n\t\t\t\t\t\tel.tabIndex = 0;\n\t\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\n\t\t\t\t\t\tel.tabIndex = 0;\n\t\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\n\n\t\t\t\t\t\tel.addEventListener(\"click\", function () {\n\t\t\t\t\t\t\tblockListShow = true;\n\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\tblockListShow = false;\n\t\t\t\t\t\t\t}, 10);\n\n\t\t\t\t\t\t\t// setCurrentItem(item);\n\t\t\t\t\t\t\t// chooseItem();\n\t\t\t\t\t\t\tif (multiselect) {\n\t\t\t\t\t\t\t\ttoggleItem(item);\n\t\t\t\t\t\t\t\tinput.focus();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tchooseItem(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// if(item === currentItem){\n\t\t\t\t\t\t// \tel.classList.add(\"active\");\n\t\t\t\t\t\t// }\n\n\t\t\t\t\t\tif (currentItems.indexOf(item) > -1) {\n\t\t\t\t\t\t\tel.classList.add(\"active\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (item.elementAttributes && _typeof(item.elementAttributes) == \"object\") {\n\t\t\t\t\t\tfor (var key in item.elementAttributes) {\n\t\t\t\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\t\t\t\tel.setAttribute(key, input.getAttribute(key) + item.elementAttributes[\"+\" + key]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tel.setAttribute(key, item.elementAttributes[key]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tel.addEventListener(\"mousedown\", function () {\n\t\t\t\t\t\tblurable = false;\n\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tblurable = true;\n\t\t\t\t\t\t}, 10);\n\t\t\t\t\t});\n\n\t\t\t\t\titem.element = el;\n\t\t\t\t}\n\n\t\t\t\tlistEl.appendChild(el);\n\t\t\t});\n\t\t}\n\n\t\tfunction setCurrentItem(item, active) {\n\n\t\t\tif (!multiselect && currentItem && currentItem.element) {\n\t\t\t\tcurrentItem.element.classList.remove(\"active\");\n\t\t\t}\n\n\t\t\tif (currentItem && currentItem.element) {\n\t\t\t\tcurrentItem.element.classList.remove(\"focused\");\n\t\t\t}\n\n\t\t\tcurrentItem = item;\n\n\t\t\tif (item.element) {\n\t\t\t\titem.element.classList.add(\"focused\");\n\t\t\t\tif (active) {\n\t\t\t\t\titem.element.classList.add(\"active\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (item && item.element && item.element.scrollIntoView) {\n\t\t\t\titem.element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' });\n\t\t\t}\n\t\t}\n\n\t\t// function chooseItem(){\n\t\t// \thideList();\n\n\t\t// \tif(initialValue !== currentItem.value){\n\t\t// \t\tinitialValue = currentItem.value;\n\t\t// \t\tsuccess(currentItem.value);\n\t\t// \t}else{\n\t\t// \t\tcancel();\n\t\t// \t}\n\t\t// }\n\n\t\tfunction setItem(item) {\n\t\t\tvar index = currentItems.indexOf(item);\n\n\t\t\tif (index == -1) {\n\t\t\t\tcurrentItems.push(item);\n\t\t\t\tsetCurrentItem(item, true);\n\t\t\t}\n\n\t\t\tfillInput();\n\t\t}\n\n\t\tfunction unsetItem(index) {\n\t\t\tvar item = currentItems[index];\n\n\t\t\tif (index > -1) {\n\t\t\t\tcurrentItems.splice(index, 1);\n\t\t\t\tif (item.element) {\n\t\t\t\t\titem.element.classList.remove(\"active\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction toggleItem(item) {\n\t\t\tif (!item) {\n\t\t\t\titem = currentItem;\n\t\t\t}\n\n\t\t\tvar index = currentItems.indexOf(item);\n\n\t\t\tif (index > -1) {\n\t\t\t\tunsetItem(index);\n\t\t\t} else {\n\t\t\t\tif (multiselect !== true && currentItems.length >= multiselect) {\n\t\t\t\t\tunsetItem(0);\n\t\t\t\t}\n\n\t\t\t\tsetItem(item);\n\t\t\t}\n\n\t\t\tfillInput();\n\t\t}\n\n\t\tfunction chooseItem(item) {\n\t\t\thideList();\n\n\t\t\tif (!item) {\n\t\t\t\titem = currentItem;\n\t\t\t}\n\n\t\t\tif (item) {\n\t\t\t\tinput.value = item.label;\n\t\t\t\tsuccess(item.value);\n\t\t\t}\n\n\t\t\tinitialDisplayValue = [item.value];\n\t\t}\n\n\t\tfunction chooseItems(silent) {\n\t\t\tif (!silent) {\n\t\t\t\thideList();\n\t\t\t}\n\n\t\t\tvar output = [];\n\n\t\t\tcurrentItems.forEach(function (item) {\n\t\t\t\toutput.push(item.value);\n\t\t\t});\n\n\t\t\tinitialDisplayValue = output;\n\n\t\t\tsuccess(output);\n\t\t}\n\n\t\tfunction fillInput() {\n\t\t\tvar output = [];\n\n\t\t\tcurrentItems.forEach(function (item) {\n\t\t\t\toutput.push(item.label);\n\t\t\t});\n\n\t\t\tinput.value = output.join(\", \");\n\n\t\t\tif (self.currentCell === false) {\n\t\t\t\tchooseItems(true);\n\t\t\t}\n\t\t}\n\n\t\tfunction unsetItems() {\n\n\t\t\tvar len = currentItems.length;\n\n\t\t\tfor (var _i9 = 0; _i9 < len; _i9++) {\n\t\t\t\tunsetItem(0);\n\t\t\t}\n\t\t}\n\n\t\tfunction cancelItem() {\n\t\t\thideList();\n\t\t\tcancel();\n\t\t}\n\n\t\tfunction showList() {\n\t\t\tcurrentItems = [];\n\n\t\t\tif (!listEl.parentNode) {\n\t\t\t\tif (editorParams.values === true) {\n\t\t\t\t\tparseItems(getUniqueColumnValues(), initialDisplayValue);\n\t\t\t\t} else if (typeof editorParams.values === \"string\") {\n\t\t\t\t\tparseItems(getUniqueColumnValues(editorParams.values), initialDisplayValue);\n\t\t\t\t} else {\n\t\t\t\t\tparseItems(editorParams.values || [], initialDisplayValue);\n\t\t\t\t}\n\n\t\t\t\tvar offset = Tabulator.prototype.helpers.elOffset(cellEl);\n\n\t\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\n\n\t\t\t\tlistEl.style.top = offset.top + cellEl.offsetHeight + \"px\";\n\t\t\t\tlistEl.style.left = offset.left + \"px\";\n\n\t\t\t\tlistEl.addEventListener(\"mousedown\", function (e) {\n\t\t\t\t\tblurable = false;\n\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tblurable = true;\n\t\t\t\t\t}, 10);\n\t\t\t\t});\n\n\t\t\t\tdocument.body.appendChild(listEl);\n\t\t\t}\n\t\t}\n\n\t\tfunction hideList() {\n\t\t\tif (listEl.parentNode) {\n\t\t\t\tlistEl.parentNode.removeChild(listEl);\n\t\t\t}\n\n\t\t\tremoveScrollListener();\n\t\t}\n\n\t\tfunction removeScrollListener() {\n\t\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\n\t\t}\n\n\t\tfunction scrollTovalue(char) {\n\n\t\t\tclearTimeout(searchWordTimeout);\n\n\t\t\tvar character = String.fromCharCode(event.keyCode).toLowerCase();\n\t\t\tsearchWord += character.toLowerCase();\n\n\t\t\tvar match = dataItems.find(function (item) {\n\t\t\t\treturn typeof item.label !== \"undefined\" && item.label.toLowerCase().startsWith(searchWord);\n\t\t\t});\n\n\t\t\tif (match) {\n\t\t\t\tsetCurrentItem(match, !multiselect);\n\t\t\t}\n\n\t\t\tsearchWordTimeout = setTimeout(function () {\n\t\t\t\tsearchWord = \"\";\n\t\t\t}, 800);\n\t\t}\n\n\t\t//style input\n\t\tinput.setAttribute(\"type\", \"text\");\n\n\t\tinput.style.padding = \"4px\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\t\tinput.style.cursor = \"default\";\n\t\tinput.readOnly = this.currentCell != false;\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinput.value = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : \"\";\n\n\t\t// if(editorParams.values === true){\n\t\t// \tparseItems(getUniqueColumnValues(), initialValue);\n\t\t// }else if(typeof editorParams.values === \"string\"){\n\t\t// \tparseItems(getUniqueColumnValues(editorParams.values), initialValue);\n\t\t// }else{\n\t\t// \tparseItems(editorParams.values || [], initialValue);\n\t\t// }\n\n\t\tinput.addEventListener(\"search\", function (e) {\n\t\t\tif (!input.value) {\n\t\t\t\tunsetItems();\n\t\t\t\tchooseItems();\n\t\t\t}\n\t\t});\n\n\t\t//allow key based navigation\n\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\tvar index;\n\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 38:\n\t\t\t\t\t//up arrow\n\t\t\t\t\tindex = dataItems.indexOf(currentItem);\n\n\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && index) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tif (index > 0) {\n\t\t\t\t\t\t\tsetCurrentItem(dataItems[index - 1], !multiselect);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 40:\n\t\t\t\t\t//down arrow\n\t\t\t\t\tindex = dataItems.indexOf(currentItem);\n\n\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && index < dataItems.length - 1) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tif (index < dataItems.length - 1) {\n\t\t\t\t\t\t\tif (index == -1) {\n\t\t\t\t\t\t\t\tsetCurrentItem(dataItems[0], !multiselect);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsetCurrentItem(dataItems[index + 1], !multiselect);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 37: //left arrow\n\t\t\t\tcase 39:\n\t\t\t\t\t//right arrow\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 13:\n\t\t\t\t\t//enter\n\t\t\t\t\t// chooseItem();\n\n\t\t\t\t\tif (multiselect) {\n\t\t\t\t\t\ttoggleItem();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchooseItem();\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 27:\n\t\t\t\t\t//escape\n\t\t\t\t\tcancelItem();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 9:\n\t\t\t\t\t//tab\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif (self.currentCell === false) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (e.keyCode >= 38 && e.keyCode <= 90) {\n\t\t\t\t\t\tscrollTovalue(e.keyCode);\n\t\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tinput.addEventListener(\"blur\", function (e) {\n\t\t\tif (blurable) {\n\t\t\t\tif (multiselect) {\n\t\t\t\t\tchooseItems();\n\t\t\t\t} else {\n\t\t\t\t\tcancelItem();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tinput.addEventListener(\"focus\", function (e) {\n\t\t\tif (!blockListShow) {\n\t\t\t\tshowList();\n\t\t\t}\n\t\t});\n\n\t\t//style list element\n\t\tlistEl = document.createElement(\"div\");\n\t\tlistEl.classList.add(\"tabulator-edit-select-list\");\n\n\t\tonRendered(function () {\n\t\t\tinput.style.height = \"100%\";\n\t\t\tinput.focus({ preventScroll: true });\n\t\t});\n\n\t\tsetTimeout(function () {\n\t\t\t_this53.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\n\t\t}, 10);\n\n\t\treturn input;\n\t},\n\n\t//autocomplete\n\tautocomplete: function autocomplete(cell, onRendered, success, cancel, editorParams) {\n\t\tvar _this54 = this;\n\n\t\tvar self = this,\n\t\t cellEl = cell.getElement(),\n\t\t initialValue = cell.getValue(),\n\t\t vertNav = editorParams.verticalNavigation || \"editor\",\n\t\t initialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : \"\",\n\t\t input = document.createElement(\"input\"),\n\t\t listEl = document.createElement(\"div\"),\n\t\t allItems = [],\n\t\t displayItems = [],\n\t\t values = [],\n\t\t currentItem = false,\n\t\t blurable = true,\n\t\t uniqueColumnValues = false;\n\n\t\t//style input\n\t\tinput.setAttribute(\"type\", \"search\");\n\n\t\tinput.style.padding = \"4px\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//style list element\n\t\tlistEl.classList.add(\"tabulator-edit-select-list\");\n\n\t\tlistEl.addEventListener(\"mousedown\", function (e) {\n\t\t\tblurable = false;\n\n\t\t\tsetTimeout(function () {\n\t\t\t\tblurable = true;\n\t\t\t}, 10);\n\t\t});\n\n\t\tfunction genUniqueColumnValues() {\n\t\t\tif (editorParams.values === true) {\n\t\t\t\tuniqueColumnValues = getUniqueColumnValues();\n\t\t\t} else if (typeof editorParams.values === \"string\") {\n\t\t\t\tuniqueColumnValues = getUniqueColumnValues(editorParams.values);\n\t\t\t}\n\t\t}\n\n\t\tfunction getUniqueColumnValues(field) {\n\t\t\tvar output = {},\n\t\t\t data = self.table.getData(),\n\t\t\t column;\n\n\t\t\tif (field) {\n\t\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\n\t\t\t} else {\n\t\t\t\tcolumn = cell.getColumn()._getSelf();\n\t\t\t}\n\n\t\t\tif (column) {\n\t\t\t\tdata.forEach(function (row) {\n\t\t\t\t\tvar val = column.getFieldValue(row);\n\n\t\t\t\t\tif (val !== null && typeof val !== \"undefined\" && val !== \"\") {\n\t\t\t\t\t\toutput[val] = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (editorParams.sortValuesList) {\n\t\t\t\t\tif (editorParams.sortValuesList == \"asc\") {\n\t\t\t\t\t\toutput = Object.keys(output).sort();\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput = Object.keys(output).sort().reverse();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\toutput = Object.keys(output);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"unable to find matching column to create autocomplete lookup list:\", field);\n\t\t\t}\n\n\t\t\treturn output;\n\t\t}\n\n\t\tfunction filterList(term, intialLoad) {\n\t\t\tvar matches = [],\n\t\t\t values,\n\t\t\t items,\n\t\t\t searchEl;\n\n\t\t\t//lookup base values list\n\t\t\tif (uniqueColumnValues) {\n\t\t\t\tvalues = uniqueColumnValues;\n\t\t\t} else {\n\t\t\t\tvalues = editorParams.values || [];\n\t\t\t}\n\n\t\t\tif (editorParams.searchFunc) {\n\t\t\t\tmatches = editorParams.searchFunc(term, values);\n\n\t\t\t\tif (matches instanceof Promise) {\n\n\t\t\t\t\taddNotice(typeof editorParams.searchingPlaceholder !== \"undefined\" ? editorParams.searchingPlaceholder : \"Searching...\");\n\n\t\t\t\t\tmatches.then(function (result) {\n\t\t\t\t\t\tfillListIfNotEmpty(parseItems(result), intialLoad);\n\t\t\t\t\t}).catch(function (err) {\n\t\t\t\t\t\tconsole.err(\"error in autocomplete search promise:\", err);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tfillListIfNotEmpty(parseItems(matches), intialLoad);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\titems = parseItems(values);\n\n\t\t\t\tif (term === \"\") {\n\t\t\t\t\tif (editorParams.showListOnEmpty) {\n\t\t\t\t\t\tmatches = items;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\titems.forEach(function (item) {\n\t\t\t\t\t\tif (item.value !== null || typeof item.value !== \"undefined\") {\n\t\t\t\t\t\t\tif (String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -1 || String(item.title).toLowerCase().indexOf(String(term).toLowerCase()) > -1) {\n\t\t\t\t\t\t\t\tmatches.push(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfillListIfNotEmpty(matches, intialLoad);\n\t\t\t}\n\t\t}\n\n\t\tfunction addNotice(notice) {\n\t\t\tvar searchEl = document.createElement(\"div\");\n\n\t\t\tclearList();\n\n\t\t\tif (notice !== false) {\n\t\t\t\tsearchEl.classList.add(\"tabulator-edit-select-list-notice\");\n\t\t\t\tsearchEl.tabIndex = 0;\n\n\t\t\t\tif (notice instanceof Node) {\n\t\t\t\t\tsearchEl.appendChild(notice);\n\t\t\t\t} else {\n\t\t\t\t\tsearchEl.innerHTML = notice;\n\t\t\t\t}\n\n\t\t\t\tlistEl.appendChild(searchEl);\n\t\t\t}\n\t\t}\n\n\t\tfunction parseItems(inputValues) {\n\t\t\tvar itemList = [];\n\n\t\t\tif (Array.isArray(inputValues)) {\n\t\t\t\tinputValues.forEach(function (value) {\n\n\t\t\t\t\tvar item = {};\n\n\t\t\t\t\tif ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === \"object\") {\n\t\t\t\t\t\titem.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value.value, value.label) : value.label;\n\t\t\t\t\t\titem.value = value.value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\titem.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value;\n\t\t\t\t\t\titem.value = value;\n\t\t\t\t\t}\n\n\t\t\t\t\titemList.push(item);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tfor (var key in inputValues) {\n\t\t\t\t\tvar item = {\n\t\t\t\t\t\ttitle: editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key],\n\t\t\t\t\t\tvalue: key\n\t\t\t\t\t};\n\n\t\t\t\t\titemList.push(item);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn itemList;\n\t\t}\n\n\t\tfunction clearList() {\n\t\t\twhile (listEl.firstChild) {\n\t\t\t\tlistEl.removeChild(listEl.firstChild);\n\t\t\t}\n\t\t}\n\n\t\tfunction fillListIfNotEmpty(items, intialLoad) {\n\t\t\tif (items.length) {\n\t\t\t\tfillList(items, intialLoad);\n\t\t\t} else {\n\t\t\t\tif (editorParams.emptyPlaceholder) {\n\t\t\t\t\taddNotice(editorParams.emptyPlaceholder);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction fillList(items, intialLoad) {\n\t\t\tvar current = false;\n\n\t\t\tclearList();\n\n\t\t\tdisplayItems = items;\n\n\t\t\tdisplayItems.forEach(function (item) {\n\t\t\t\tvar el = item.element;\n\n\t\t\t\tif (!el) {\n\t\t\t\t\tel = document.createElement(\"div\");\n\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\n\t\t\t\t\tel.tabIndex = 0;\n\t\t\t\t\tel.innerHTML = item.title;\n\n\t\t\t\t\tel.addEventListener(\"click\", function (e) {\n\t\t\t\t\t\tsetCurrentItem(item);\n\t\t\t\t\t\tchooseItem();\n\t\t\t\t\t});\n\n\t\t\t\t\tel.addEventListener(\"mousedown\", function (e) {\n\t\t\t\t\t\tblurable = false;\n\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tblurable = true;\n\t\t\t\t\t\t}, 10);\n\t\t\t\t\t});\n\n\t\t\t\t\titem.element = el;\n\n\t\t\t\t\tif (intialLoad && item.value == initialValue) {\n\t\t\t\t\t\tinput.value = item.title;\n\t\t\t\t\t\titem.element.classList.add(\"active\");\n\t\t\t\t\t\tcurrent = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (item === currentItem) {\n\t\t\t\t\t\titem.element.classList.add(\"active\");\n\t\t\t\t\t\tcurrent = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlistEl.appendChild(el);\n\t\t\t});\n\n\t\t\tif (!current) {\n\t\t\t\tsetCurrentItem(false);\n\t\t\t}\n\t\t}\n\n\t\tfunction chooseItem() {\n\t\t\thideList();\n\n\t\t\tif (currentItem) {\n\t\t\t\tif (initialValue !== currentItem.value) {\n\t\t\t\t\tinitialValue = currentItem.value;\n\t\t\t\t\tinput.value = currentItem.title;\n\t\t\t\t\tsuccess(currentItem.value);\n\t\t\t\t} else {\n\t\t\t\t\tcancel();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (editorParams.freetext) {\n\t\t\t\t\tinitialValue = input.value;\n\t\t\t\t\tsuccess(input.value);\n\t\t\t\t} else {\n\t\t\t\t\tif (editorParams.allowEmpty && input.value === \"\") {\n\t\t\t\t\t\tinitialValue = input.value;\n\t\t\t\t\t\tsuccess(input.value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcancel();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction showList() {\n\t\t\tif (!listEl.parentNode) {\n\n\t\t\t\tconsole.log(\"show\", initialDisplayValue);\n\t\t\t\twhile (listEl.firstChild) {\n\t\t\t\t\tlistEl.removeChild(listEl.firstChild);\n\t\t\t\t}var offset = Tabulator.prototype.helpers.elOffset(cellEl);\n\n\t\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\n\n\t\t\t\tlistEl.style.top = offset.top + cellEl.offsetHeight + \"px\";\n\t\t\t\tlistEl.style.left = offset.left + \"px\";\n\t\t\t\tdocument.body.appendChild(listEl);\n\t\t\t}\n\t\t}\n\n\t\tfunction setCurrentItem(item, showInputValue) {\n\t\t\tif (currentItem && currentItem.element) {\n\t\t\t\tcurrentItem.element.classList.remove(\"active\");\n\t\t\t}\n\n\t\t\tcurrentItem = item;\n\n\t\t\tif (item && item.element) {\n\t\t\t\titem.element.classList.add(\"active\");\n\t\t\t}\n\n\t\t\tif (item && item.element && item.element.scrollIntoView) {\n\t\t\t\titem.element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' });\n\t\t\t}\n\t\t}\n\n\t\tfunction hideList() {\n\t\t\tif (listEl.parentNode) {\n\t\t\t\tlistEl.parentNode.removeChild(listEl);\n\t\t\t}\n\n\t\t\tremoveScrollListener();\n\t\t}\n\n\t\tfunction cancelItem() {\n\t\t\thideList();\n\t\t\tcancel();\n\t\t}\n\n\t\tfunction removeScrollListener() {\n\t\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\n\t\t}\n\n\t\t//allow key based navigation\n\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\tvar index;\n\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 38:\n\t\t\t\t\t//up arrow\n\t\t\t\t\tindex = displayItems.indexOf(currentItem);\n\n\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && index) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tif (index > 0) {\n\t\t\t\t\t\t\tsetCurrentItem(displayItems[index - 1]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetCurrentItem(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 40:\n\t\t\t\t\t//down arrow\n\n\t\t\t\t\tindex = displayItems.indexOf(currentItem);\n\n\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && index < displayItems.length - 1) {\n\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tif (index < displayItems.length - 1) {\n\t\t\t\t\t\t\tif (index == -1) {\n\t\t\t\t\t\t\t\tsetCurrentItem(displayItems[0]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsetCurrentItem(displayItems[index + 1]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 37: //left arrow\n\t\t\t\tcase 39:\n\t\t\t\t\t//right arrow\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t// e.preventDefault();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 13:\n\t\t\t\t\t//enter\n\t\t\t\t\tchooseItem();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 27:\n\t\t\t\t\t//escape\n\t\t\t\t\tcancelItem();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 36: //home\n\t\t\t\tcase 35:\n\t\t\t\t\t//end\n\t\t\t\t\t//prevent table navigation while using input element\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tinput.addEventListener(\"keyup\", function (e) {\n\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 38: //up arrow\n\t\t\t\tcase 37: //left arrow\n\t\t\t\tcase 39: //up arrow\n\t\t\t\tcase 40: //right arrow\n\t\t\t\tcase 13: //enter\n\t\t\t\tcase 27:\n\t\t\t\t\t//escape\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tfilterList(input.value);\n\t\t\t}\n\t\t});\n\n\t\tinput.addEventListener(\"search\", function (e) {\n\t\t\tfilterList(input.value);\n\t\t});\n\n\t\tinput.addEventListener(\"blur\", function (e) {\n\t\t\tif (blurable) {\n\t\t\t\tchooseItem();\n\t\t\t}\n\t\t});\n\n\t\tinput.addEventListener(\"focus\", function (e) {\n\t\t\tvar value = initialDisplayValue;\n\t\t\tgenUniqueColumnValues();\n\t\t\tshowList();\n\t\t\tinput.value = value;\n\t\t\tfilterList(value, true);\n\t\t});\n\n\t\tonRendered(function () {\n\t\t\tinput.style.height = \"100%\";\n\t\t\tinput.focus({ preventScroll: true });\n\t\t});\n\n\t\tif (editorParams.mask) {\n\t\t\tthis.table.modules.edit.maskInput(input, editorParams);\n\t\t}\n\n\t\tsetTimeout(function () {\n\t\t\t_this54.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\n\t\t}, 10);\n\n\t\tgenUniqueColumnValues();\n\t\tinput.value = initialDisplayValue;\n\t\tfilterList(initialDisplayValue, true);\n\n\t\treturn input;\n\t},\n\n\t//star rating\n\tstar: function star(cell, onRendered, success, cancel, editorParams) {\n\t\tvar self = this,\n\t\t element = cell.getElement(),\n\t\t value = cell.getValue(),\n\t\t maxStars = element.getElementsByTagName(\"svg\").length || 5,\n\t\t size = element.getElementsByTagName(\"svg\")[0] ? element.getElementsByTagName(\"svg\")[0].getAttribute(\"width\") : 14,\n\t\t stars = [],\n\t\t starsHolder = document.createElement(\"div\"),\n\t\t star = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\n\n\t\t//change star type\n\t\tfunction starChange(val) {\n\t\t\tstars.forEach(function (star, i) {\n\t\t\t\tif (i < val) {\n\t\t\t\t\tif (self.table.browser == \"ie\") {\n\t\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-active\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstar.classList.replace(\"tabulator-star-inactive\", \"tabulator-star-active\");\n\t\t\t\t\t}\n\n\t\t\t\t\tstar.innerHTML = '';\n\t\t\t\t} else {\n\t\t\t\t\tif (self.table.browser == \"ie\") {\n\t\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-inactive\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstar.classList.replace(\"tabulator-star-active\", \"tabulator-star-inactive\");\n\t\t\t\t\t}\n\n\t\t\t\t\tstar.innerHTML = '';\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t//build stars\n\t\tfunction buildStar(i) {\n\n\t\t\tvar starHolder = document.createElement(\"span\");\n\t\t\tvar nextStar = star.cloneNode(true);\n\n\t\t\tstars.push(nextStar);\n\n\t\t\tstarHolder.addEventListener(\"mouseenter\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t\tstarChange(i);\n\t\t\t});\n\n\t\t\tstarHolder.addEventListener(\"mousemove\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t});\n\n\t\t\tstarHolder.addEventListener(\"click\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t\tsuccess(i);\n\t\t\t\telement.blur();\n\t\t\t});\n\n\t\t\tstarHolder.appendChild(nextStar);\n\t\t\tstarsHolder.appendChild(starHolder);\n\t\t}\n\n\t\t//handle keyboard navigation value change\n\t\tfunction changeValue(val) {\n\t\t\tvalue = val;\n\t\t\tstarChange(val);\n\t\t}\n\n\t\t//style cell\n\t\telement.style.whiteSpace = \"nowrap\";\n\t\telement.style.overflow = \"hidden\";\n\t\telement.style.textOverflow = \"ellipsis\";\n\n\t\t//style holding element\n\t\tstarsHolder.style.verticalAlign = \"middle\";\n\t\tstarsHolder.style.display = \"inline-block\";\n\t\tstarsHolder.style.padding = \"4px\";\n\n\t\t//style star\n\t\tstar.setAttribute(\"width\", size);\n\t\tstar.setAttribute(\"height\", size);\n\t\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\n\t\tstar.setAttribute(\"xml:space\", \"preserve\");\n\t\tstar.style.padding = \"0 1px\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tstarsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tstarsHolder.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//create correct number of stars\n\t\tfor (var i = 1; i <= maxStars; i++) {\n\t\t\tbuildStar(i);\n\t\t}\n\n\t\t//ensure value does not exceed number of stars\n\t\tvalue = Math.min(parseInt(value), maxStars);\n\n\t\t// set initial styling of stars\n\t\tstarChange(value);\n\n\t\tstarsHolder.addEventListener(\"mousemove\", function (e) {\n\t\t\tstarChange(0);\n\t\t});\n\n\t\tstarsHolder.addEventListener(\"click\", function (e) {\n\t\t\tsuccess(0);\n\t\t});\n\n\t\telement.addEventListener(\"blur\", function (e) {\n\t\t\tcancel();\n\t\t});\n\n\t\t//allow key based navigation\n\t\telement.addEventListener(\"keydown\", function (e) {\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 39:\n\t\t\t\t\t//right arrow\n\t\t\t\t\tchangeValue(value + 1);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 37:\n\t\t\t\t\t//left arrow\n\t\t\t\t\tchangeValue(value - 1);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 13:\n\t\t\t\t\t//enter\n\t\t\t\t\tsuccess(value);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 27:\n\t\t\t\t\t//escape\n\t\t\t\t\tcancel();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\treturn starsHolder;\n\t},\n\n\t//draggable progress bar\n\tprogress: function progress(cell, onRendered, success, cancel, editorParams) {\n\t\tvar element = cell.getElement(),\n\t\t max = typeof editorParams.max === \"undefined\" ? element.getElementsByTagName(\"div\")[0].getAttribute(\"max\") || 100 : editorParams.max,\n\t\t min = typeof editorParams.min === \"undefined\" ? element.getElementsByTagName(\"div\")[0].getAttribute(\"min\") || 0 : editorParams.min,\n\t\t percent = (max - min) / 100,\n\t\t value = cell.getValue() || 0,\n\t\t handle = document.createElement(\"div\"),\n\t\t bar = document.createElement(\"div\"),\n\t\t mouseDrag,\n\t\t mouseDragWidth;\n\n\t\t//set new value\n\t\tfunction updateValue() {\n\t\t\tvar style = window.getComputedStyle(element, null);\n\n\t\t\tvar calcVal = percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue(\"padding-left\")) - parseInt(style.getPropertyValue(\"padding-right\"))) / 100)) + min;\n\t\t\tsuccess(calcVal);\n\t\t\telement.setAttribute(\"aria-valuenow\", calcVal);\n\t\t\telement.setAttribute(\"aria-label\", value);\n\t\t}\n\n\t\t//style handle\n\t\thandle.style.position = \"absolute\";\n\t\thandle.style.right = \"0\";\n\t\thandle.style.top = \"0\";\n\t\thandle.style.bottom = \"0\";\n\t\thandle.style.width = \"5px\";\n\t\thandle.classList.add(\"tabulator-progress-handle\");\n\n\t\t//style bar\n\t\tbar.style.display = \"inline-block\";\n\t\tbar.style.position = \"relative\";\n\t\t// bar.style.top = \"8px\";\n\t\t// bar.style.bottom = \"8px\";\n\t\t// bar.style.left = \"4px\";\n\t\t// bar.style.marginRight = \"4px\";\n\t\tbar.style.height = \"100%\";\n\t\tbar.style.backgroundColor = \"#488CE9\";\n\t\tbar.style.maxWidth = \"100%\";\n\t\tbar.style.minWidth = \"0%\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tbar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tbar.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//style cell\n\t\telement.style.padding = \"4px 4px\";\n\n\t\t//make sure value is in range\n\t\tvalue = Math.min(parseFloat(value), max);\n\t\tvalue = Math.max(parseFloat(value), min);\n\n\t\t//workout percentage\n\t\tvalue = Math.round((value - min) / percent);\n\t\t// bar.style.right = value + \"%\";\n\t\tbar.style.width = value + \"%\";\n\n\t\telement.setAttribute(\"aria-valuemin\", min);\n\t\telement.setAttribute(\"aria-valuemax\", max);\n\n\t\tbar.appendChild(handle);\n\n\t\thandle.addEventListener(\"mousedown\", function (e) {\n\t\t\tmouseDrag = e.screenX;\n\t\t\tmouseDragWidth = bar.offsetWidth;\n\t\t});\n\n\t\thandle.addEventListener(\"mouseover\", function () {\n\t\t\thandle.style.cursor = \"ew-resize\";\n\t\t});\n\n\t\telement.addEventListener(\"mousemove\", function (e) {\n\t\t\tif (mouseDrag) {\n\t\t\t\tbar.style.width = mouseDragWidth + e.screenX - mouseDrag + \"px\";\n\t\t\t}\n\t\t});\n\n\t\telement.addEventListener(\"mouseup\", function (e) {\n\t\t\tif (mouseDrag) {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.stopImmediatePropagation();\n\n\t\t\t\tmouseDrag = false;\n\t\t\t\tmouseDragWidth = false;\n\n\t\t\t\tupdateValue();\n\t\t\t}\n\t\t});\n\n\t\t//allow key based navigation\n\t\telement.addEventListener(\"keydown\", function (e) {\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 39:\n\t\t\t\t\t//right arrow\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tbar.style.width = bar.clientWidth + element.clientWidth / 100 + \"px\";\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 37:\n\t\t\t\t\t//left arrow\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tbar.style.width = bar.clientWidth - element.clientWidth / 100 + \"px\";\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 9: //tab\n\t\t\t\tcase 13:\n\t\t\t\t\t//enter\n\t\t\t\t\tupdateValue();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 27:\n\t\t\t\t\t//escape\n\t\t\t\t\tcancel();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\t\t});\n\n\t\telement.addEventListener(\"blur\", function () {\n\t\t\tcancel();\n\t\t});\n\n\t\treturn bar;\n\t},\n\n\t//checkbox\n\ttickCross: function tickCross(cell, onRendered, success, cancel, editorParams) {\n\t\tvar value = cell.getValue(),\n\t\t input = document.createElement(\"input\"),\n\t\t tristate = editorParams.tristate,\n\t\t indetermValue = typeof editorParams.indeterminateValue === \"undefined\" ? null : editorParams.indeterminateValue,\n\t\t indetermState = false;\n\n\t\tinput.setAttribute(\"type\", \"checkbox\");\n\t\tinput.style.marginTop = \"5px\";\n\t\tinput.style.boxSizing = \"border-box\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinput.value = value;\n\n\t\tif (tristate && (typeof value === \"undefined\" || value === indetermValue || value === \"\")) {\n\t\t\tindetermState = true;\n\t\t\tinput.indeterminate = true;\n\t\t}\n\n\t\tif (this.table.browser != \"firefox\") {\n\t\t\t//prevent blur issue on mac firefox\n\t\t\tonRendered(function () {\n\t\t\t\tinput.focus({ preventScroll: true });\n\t\t\t});\n\t\t}\n\n\t\tinput.checked = value === true || value === \"true\" || value === \"True\" || value === 1;\n\n\t\tonRendered(function () {\n\t\t\tinput.focus();\n\t\t});\n\n\t\tfunction setValue(blur) {\n\t\t\tif (tristate) {\n\t\t\t\tif (!blur) {\n\t\t\t\t\tif (input.checked && !indetermState) {\n\t\t\t\t\t\tinput.checked = false;\n\t\t\t\t\t\tinput.indeterminate = true;\n\t\t\t\t\t\tindetermState = true;\n\t\t\t\t\t\treturn indetermValue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tindetermState = false;\n\t\t\t\t\t\treturn input.checked;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (indetermState) {\n\t\t\t\t\t\treturn indetermValue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn input.checked;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn input.checked;\n\t\t\t}\n\t\t}\n\n\t\t//submit new value on blur\n\t\tinput.addEventListener(\"change\", function (e) {\n\t\t\tsuccess(setValue());\n\t\t});\n\n\t\tinput.addEventListener(\"blur\", function (e) {\n\t\t\tsuccess(setValue(true));\n\t\t});\n\n\t\t//submit new value on enter\n\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\tif (e.keyCode == 13) {\n\t\t\t\tsuccess(setValue());\n\t\t\t}\n\t\t\tif (e.keyCode == 27) {\n\t\t\t\tcancel();\n\t\t\t}\n\t\t});\n\n\t\treturn input;\n\t}\n};\n\nTabulator.prototype.registerModule(\"edit\", Edit);\n\nvar ExportRow = function ExportRow(type, columns, component, indent) {\n\tthis.type = type;\n\tthis.columns = columns;\n\tthis.component = component || false;\n\tthis.indent = indent || 0;\n};\n\nvar ExportColumn = function ExportColumn(value, component, width, height, depth) {\n\tthis.value = value;\n\tthis.component = component || false;\n\tthis.width = width;\n\tthis.height = height;\n\tthis.depth = depth;\n};\n\nvar Export = function Export(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.config = {};\n\tthis.cloneTableStyle = true;\n\tthis.colVisProp = \"\";\n};\n\nExport.prototype.generateExportList = function (config, style, range, colVisProp) {\n\tthis.cloneTableStyle = style;\n\tthis.config = config || {};\n\tthis.colVisProp = colVisProp;\n\n\tvar headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];\n\tvar body = this.bodyToExportRows(this.rowLookup(range));\n\n\treturn headers.concat(body);\n};\n\nExport.prototype.genereateTable = function (config, style, range, colVisProp) {\n\tvar list = this.generateExportList(config, style, range, colVisProp);\n\n\treturn this.genereateTableElement(list);\n};\n\nExport.prototype.rowLookup = function (range) {\n\tvar _this55 = this;\n\n\tvar rows = [];\n\n\tif (typeof range == \"function\") {\n\t\trange.call(this.table).forEach(function (row) {\n\t\t\trow = _this55.table.rowManager.findRow(row);\n\n\t\t\tif (row) {\n\t\t\t\trows.push(row);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tswitch (range) {\n\t\t\tcase true:\n\t\t\tcase \"visible\":\n\t\t\t\trows = this.table.rowManager.getVisibleRows(true);\n\t\t\t\tbreak;\n\n\t\t\tcase \"all\":\n\t\t\t\trows = this.table.rowManager.rows;\n\t\t\t\tbreak;\n\n\t\t\tcase \"selected\":\n\t\t\t\trows = this.table.modules.selectRow.selectedRows;\n\t\t\t\tbreak;\n\n\t\t\tcase \"active\":\n\t\t\tdefault:\n\t\t\t\tif (this.table.options.pagination) {\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);\n\t\t\t\t} else {\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows();\n\t\t\t\t}\n\t\t}\n\t}\n\n\treturn Object.assign([], rows);\n};\n\nExport.prototype.generateColumnGroupHeaders = function () {\n\tvar _this56 = this;\n\n\tvar output = [];\n\n\tvar columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;\n\n\tcolumns.forEach(function (column) {\n\t\tvar colData = _this56.processColumnGroup(column);\n\n\t\tif (colData) {\n\t\t\toutput.push(colData);\n\t\t}\n\t});\n\n\treturn output;\n};\n\nExport.prototype.processColumnGroup = function (column) {\n\tvar _this57 = this;\n\n\tvar subGroups = column.columns,\n\t maxDepth = 0,\n\t title = column.definition[\"title\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;\n\n\tvar groupData = {\n\t\ttitle: title,\n\t\tcolumn: column,\n\t\tdepth: 1\n\t};\n\n\tif (subGroups.length) {\n\t\tgroupData.subGroups = [];\n\t\tgroupData.width = 0;\n\n\t\tsubGroups.forEach(function (subGroup) {\n\t\t\tvar subGroupData = _this57.processColumnGroup(subGroup);\n\n\t\t\tif (subGroupData) {\n\t\t\t\tgroupData.width += subGroupData.width;\n\t\t\t\tgroupData.subGroups.push(subGroupData);\n\n\t\t\t\tif (subGroupData.depth > maxDepth) {\n\t\t\t\t\tmaxDepth = subGroupData.depth;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tgroupData.depth += maxDepth;\n\n\t\tif (!groupData.width) {\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\tif (this.columnVisCheck(column)) {\n\t\t\tgroupData.width = 1;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn groupData;\n};\n\nExport.prototype.columnVisCheck = function (column) {\n\treturn column.definition[this.colVisProp] !== false && (column.visible || !column.visible && column.definition[this.colVisProp]);\n};\n\nExport.prototype.headersToExportRows = function (columns) {\n\tvar headers = [],\n\t headerDepth = 0,\n\t exportRows = [];\n\n\tfunction parseColumnGroup(column, level) {\n\n\t\tvar depth = headerDepth - level;\n\n\t\tif (typeof headers[level] === \"undefined\") {\n\t\t\theaders[level] = [];\n\t\t}\n\n\t\tcolumn.height = column.subGroups ? 1 : depth - column.depth + 1;\n\n\t\theaders[level].push(column);\n\n\t\tif (column.height > 1) {\n\t\t\tfor (var _i10 = 1; _i10 < column.height; _i10++) {\n\n\t\t\t\tif (typeof headers[level + _i10] === \"undefined\") {\n\t\t\t\t\theaders[level + _i10] = [];\n\t\t\t\t}\n\n\t\t\t\theaders[level + _i10].push(false);\n\t\t\t}\n\t\t}\n\n\t\tif (column.width > 1) {\n\t\t\tfor (var _i11 = 1; _i11 < column.width; _i11++) {\n\t\t\t\theaders[level].push(false);\n\t\t\t}\n\t\t}\n\n\t\tif (column.subGroups) {\n\t\t\tcolumn.subGroups.forEach(function (subGroup) {\n\t\t\t\tparseColumnGroup(subGroup, level + 1);\n\t\t\t});\n\t\t}\n\t}\n\n\t//calculate maximum header debth\n\tcolumns.forEach(function (column) {\n\t\tif (column.depth > headerDepth) {\n\t\t\theaderDepth = column.depth;\n\t\t}\n\t});\n\n\tcolumns.forEach(function (column) {\n\t\tparseColumnGroup(column, 0);\n\t});\n\n\theaders.forEach(function (header) {\n\t\tvar columns = [];\n\n\t\theader.forEach(function (col) {\n\t\t\tif (col) {\n\t\t\t\tcolumns.push(new ExportColumn(col.title, col.column.getComponent(), col.width, col.height, col.depth));\n\t\t\t} else {\n\t\t\t\tcolumns.push(null);\n\t\t\t}\n\t\t});\n\n\t\texportRows.push(new ExportRow(\"header\", columns));\n\t});\n\n\treturn exportRows;\n};\n\nExport.prototype.bodyToExportRows = function (rows) {\n\tvar _this58 = this;\n\n\tvar columns = [];\n\tvar exportRows = [];\n\n\tthis.table.columnManager.columnsByIndex.forEach(function (column) {\n\t\tif (_this58.columnVisCheck(column)) {\n\t\t\tcolumns.push(column.getComponent());\n\t\t}\n\t});\n\n\tif (this.config.columnCalcs !== false && this.table.modExists(\"columnCalcs\")) {\n\t\tif (this.table.modules.columnCalcs.topInitialized) {\n\t\t\trows.unshift(this.table.modules.columnCalcs.topRow);\n\t\t}\n\n\t\tif (this.table.modules.columnCalcs.botInitialized) {\n\t\t\trows.push(this.table.modules.columnCalcs.botRow);\n\t\t}\n\t}\n\n\trows = rows.filter(function (row) {\n\t\tswitch (row.type) {\n\t\t\tcase \"group\":\n\t\t\t\treturn _this58.config.rowGroups !== false;\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\treturn _this58.config.columnCalcs !== false;\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\treturn !(_this58.table.options.dataTree && _this58.config.dataTree === false && row.modules.dataTree.parent);\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn true;\n\t});\n\n\trows.forEach(function (row, i) {\n\t\tvar rowData = row.getData(_this58.colVisProp);\n\t\tvar exportCols = [];\n\t\tvar indent = 0;\n\n\t\tswitch (row.type) {\n\t\t\tcase \"group\":\n\t\t\t\tindent = row.level;\n\t\t\t\texportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\tcase \"row\":\n\t\t\t\tcolumns.forEach(function (col) {\n\t\t\t\t\texportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));\n\t\t\t\t});\n\n\t\t\t\tif (_this58.table.options.dataTree && _this58.config.dataTree !== false) {\n\t\t\t\t\tindent = row.modules.dataTree.index;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\texportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));\n\t});\n\n\treturn exportRows;\n};\n\nExport.prototype.genereateTableElement = function (list) {\n\tvar _this59 = this;\n\n\tvar table = document.createElement(\"table\"),\n\t headerEl = document.createElement(\"thead\"),\n\t bodyEl = document.createElement(\"tbody\"),\n\t styles = this.lookupTableStyles(),\n\t rowFormatter = this.table.options[\"rowFormatter\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],\n\t setup = {};\n\n\tsetup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;\n\n\tif (this.table.options.dataTree && this.config.dataTree !== false && this.table.modExists(\"columnCalcs\")) {\n\t\tsetup.treeElementField = this.table.modules.dataTree.elementField;\n\t}\n\n\t//assign group header formatter\n\tsetup.groupHeader = this.table.options[\"groupHeader\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];\n\n\tif (setup.groupHeader && !Array.isArray(setup.groupHeader)) {\n\t\tsetup.groupHeader = [setup.groupHeader];\n\t}\n\n\ttable.classList.add(\"tabulator-print-table\");\n\n\tthis.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\n\n\tif (list.length > 1000) {\n\t\tconsole.warn(\"It may take a long time to render an HTML table with more than 1000 rows\");\n\t}\n\n\tlist.forEach(function (row, i) {\n\t\tswitch (row.type) {\n\t\t\tcase \"header\":\n\t\t\t\theaderEl.appendChild(_this59.genereateHeaderElement(row, setup, styles));\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tbodyEl.appendChild(_this59.genereateGroupElement(row, setup, styles));\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tbodyEl.appendChild(_this59.genereateCalcElement(row, setup, styles));\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\tvar rowEl = _this59.genereateRowElement(row, setup, styles);\n\t\t\t\t_this59.mapElementStyles(i % 2 && styles.evenRow ? styles.evenRow : styles.oddRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\t\t\t\tbodyEl.appendChild(rowEl);\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif (headerEl.innerHTML) {\n\t\ttable.appendChild(headerEl);\n\t}\n\n\ttable.appendChild(bodyEl);\n\n\tthis.mapElementStyles(this.table.element, table, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\"]);\n\treturn table;\n};\n\nExport.prototype.lookupTableStyles = function () {\n\tvar styles = {};\n\n\t//lookup row styles\n\tif (this.cloneTableStyle && window.getComputedStyle) {\n\t\tstyles.oddRow = this.table.element.querySelector(\".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\tstyles.evenRow = this.table.element.querySelector(\".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\tstyles.calcRow = this.table.element.querySelector(\".tabulator-row.tabulator-calcs\");\n\t\tstyles.firstRow = this.table.element.querySelector(\".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\tstyles.firstGroup = this.table.element.getElementsByClassName(\"tabulator-group\")[0];\n\n\t\tif (styles.firstRow) {\n\t\t\tstyles.styleCells = styles.firstRow.getElementsByClassName(\"tabulator-cell\");\n\t\t\tstyles.firstCell = styles.styleCells[0];\n\t\t\tstyles.lastCell = styles.styleCells[styles.styleCells.length - 1];\n\t\t}\n\t}\n\n\treturn styles;\n};\n\nExport.prototype.genereateHeaderElement = function (row, setup, styles) {\n\tvar _this60 = this;\n\n\tvar rowEl = document.createElement(\"tr\");\n\n\trow.columns.forEach(function (column) {\n\t\tif (column) {\n\t\t\tvar cellEl = document.createElement(\"th\");\n\t\t\tvar classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(\" \") : [];\n\n\t\t\tcellEl.colSpan = column.width;\n\t\t\tcellEl.rowSpan = column.height;\n\n\t\t\tcellEl.innerHTML = column.value;\n\n\t\t\tif (_this60.cloneTableStyle) {\n\t\t\t\tcellEl.style.boxSizing = \"border-box\";\n\t\t\t}\n\n\t\t\tclassNames.forEach(function (className) {\n\t\t\t\tcellEl.classList.add(className);\n\t\t\t});\n\n\t\t\t_this60.mapElementStyles(column.component.getElement(), cellEl, [\"text-align\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\n\t\t\t_this60.mapElementStyles(column.component._column.contentElement, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\n\n\t\t\tif (column.component._column.visible) {\n\t\t\t\t_this60.mapElementStyles(column.component.getElement(), cellEl, [\"width\"]);\n\t\t\t} else {\n\t\t\t\tif (column.component._column.definition.width) {\n\t\t\t\t\tcellEl.style.width = column.component._column.definition.width + \"px\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (column.component._column.parent) {\n\t\t\t\t_this60.mapElementStyles(column.component._column.parent.groupElement, cellEl, [\"border-top\"]);\n\t\t\t}\n\n\t\t\trowEl.appendChild(cellEl);\n\t\t}\n\t});\n\n\treturn rowEl;\n};\n\nExport.prototype.genereateGroupElement = function (row, setup, styles) {\n\n\tvar rowEl = document.createElement(\"tr\"),\n\t cellEl = document.createElement(\"td\"),\n\t group = row.columns[0];\n\n\trowEl.classList.add(\"tabulator-print-table-row\");\n\n\tif (setup.groupHeader && setup.groupHeader[row.indent]) {\n\t\tgroup.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t} else {\n\t\tif (setup.groupHeader === false) {\n\t\t\tgroup.value = group.value;\n\t\t} else {\n\t\t\tgroup.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t}\n\t}\n\n\tcellEl.colSpan = group.width;\n\tcellEl.innerHTML = group.value;\n\n\trowEl.classList.add(\"tabulator-print-table-group\");\n\trowEl.classList.add(\"tabulator-group-level-\" + row.indent);\n\n\tif (group.component.isVisible()) {\n\t\trowEl.classList.add(\"tabulator-group-visible\");\n\t}\n\n\tthis.mapElementStyles(styles.firstGroup, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\tthis.mapElementStyles(styles.firstGroup, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\n\n\trowEl.appendChild(cellEl);\n\n\treturn rowEl;\n};\n\nExport.prototype.genereateCalcElement = function (row, setup, styles) {\n\tvar rowEl = this.genereateRowElement(row, setup, styles);\n\n\trowEl.classList.add(\"tabulator-print-table-calcs\");\n\tthis.mapElementStyles(styles.calcRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\n\treturn rowEl;\n};\n\nExport.prototype.genereateRowElement = function (row, setup, styles) {\n\tvar _this61 = this;\n\n\tvar rowEl = document.createElement(\"tr\");\n\n\trowEl.classList.add(\"tabulator-print-table-row\");\n\n\trow.columns.forEach(function (col) {\n\n\t\tif (col) {\n\t\t\tvar cellEl = document.createElement(\"td\"),\n\t\t\t column = col.component._column,\n\t\t\t value = col.value;\n\n\t\t\tvar cellWrapper = {\n\t\t\t\tmodules: {},\n\t\t\t\tgetValue: function getValue() {\n\t\t\t\t\treturn value;\n\t\t\t\t},\n\t\t\t\tgetField: function getField() {\n\t\t\t\t\treturn column.definition.field;\n\t\t\t\t},\n\t\t\t\tgetElement: function getElement() {\n\t\t\t\t\treturn cellEl;\n\t\t\t\t},\n\t\t\t\tgetColumn: function getColumn() {\n\t\t\t\t\treturn column.getComponent();\n\t\t\t\t},\n\t\t\t\tgetData: function getData() {\n\t\t\t\t\treturn row.component.getData();\n\t\t\t\t},\n\t\t\t\tgetRow: function getRow() {\n\t\t\t\t\treturn row.component;\n\t\t\t\t},\n\t\t\t\tgetComponent: function getComponent() {\n\t\t\t\t\treturn cellWrapper;\n\t\t\t\t},\n\t\t\t\tcolumn: column\n\t\t\t};\n\n\t\t\tvar classNames = column.definition.cssClass ? column.definition.cssClass.split(\" \") : [];\n\n\t\t\tclassNames.forEach(function (className) {\n\t\t\t\tcellEl.classList.add(className);\n\t\t\t});\n\n\t\t\tif (_this61.table.modExists(\"format\") && _this61.config.formatCells !== false) {\n\t\t\t\tvalue = _this61.table.modules.format.formatExportValue(cellWrapper, _this61.colVisProp);\n\t\t\t} else {\n\t\t\t\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\tvalue = JSON.stringify(value);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\tcase \"null\":\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (value instanceof Node) {\n\t\t\t\tcellEl.appendChild(value);\n\t\t\t} else {\n\t\t\t\tcellEl.innerHTML = value;\n\t\t\t}\n\n\t\t\tif (styles.firstCell) {\n\t\t\t\t_this61.mapElementStyles(styles.firstCell, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\n\n\t\t\t\tif (column.definition.align) {\n\t\t\t\t\tcellEl.style.textAlign = column.definition.align;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (_this61.table.options.dataTree && _this61.config.dataTree !== false) {\n\t\t\t\tif (setup.treeElementField && setup.treeElementField == column.field || !setup.treeElementField && i == 0) {\n\t\t\t\t\tif (row.component._row.modules.dataTree.controlEl) {\n\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);\n\t\t\t\t\t}\n\t\t\t\t\tif (row.component._row.modules.dataTree.branchEl) {\n\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trowEl.appendChild(cellEl);\n\n\t\t\tif (cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback) {\n\t\t\t\tcellWrapper.modules.format.renderedCallback();\n\t\t\t}\n\n\t\t\tif (setup.rowFormatter && _this61.config.formatCells !== false) {\n\t\t\t\tsetup.rowFormatter(row.component);\n\t\t\t}\n\t\t}\n\t});\n\n\treturn rowEl;\n};\n\nExport.prototype.genereateHTMLTable = function (list) {\n\tvar holder = document.createElement(\"div\");\n\n\tholder.appendChild(this.genereateTableElement(list));\n\n\treturn holder.innerHTML;\n};\n\nExport.prototype.getHtml = function (visible, style, config, colVisProp) {\n\tvar list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || \"htmlOutput\");\n\n\treturn this.genereateHTMLTable(list);\n};\n\nExport.prototype.mapElementStyles = function (from, to, props) {\n\tif (this.cloneTableStyle && from && to) {\n\n\t\tvar lookup = {\n\t\t\t\"background-color\": \"backgroundColor\",\n\t\t\t\"color\": \"fontColor\",\n\t\t\t\"width\": \"width\",\n\t\t\t\"font-weight\": \"fontWeight\",\n\t\t\t\"font-family\": \"fontFamily\",\n\t\t\t\"font-size\": \"fontSize\",\n\t\t\t\"text-align\": \"textAlign\",\n\t\t\t\"border-top\": \"borderTop\",\n\t\t\t\"border-left\": \"borderLeft\",\n\t\t\t\"border-right\": \"borderRight\",\n\t\t\t\"border-bottom\": \"borderBottom\",\n\t\t\t\"padding-top\": \"paddingTop\",\n\t\t\t\"padding-left\": \"paddingLeft\",\n\t\t\t\"padding-right\": \"paddingRight\",\n\t\t\t\"padding-bottom\": \"paddingBottom\"\n\t\t};\n\n\t\tif (window.getComputedStyle) {\n\t\t\tvar fromStyle = window.getComputedStyle(from);\n\n\t\t\tprops.forEach(function (prop) {\n\t\t\t\tto.style[lookup[prop]] = fromStyle.getPropertyValue(prop);\n\t\t\t});\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"export\", Export);\n\nvar Filter = function Filter(table) {\n\n\tthis.table = table; //hold Tabulator object\n\n\tthis.filterList = []; //hold filter list\n\tthis.headerFilters = {}; //hold column filters\n\tthis.headerFilterColumns = []; //hold columns that use header filters\n\n\tthis.prevHeaderFilterChangeCheck = \"\";\n\tthis.prevHeaderFilterChangeCheck = \"{}\";\n\n\tthis.changed = false; //has filtering changed since last render\n};\n\n//initialize column header filter\nFilter.prototype.initializeColumn = function (column, value) {\n\tvar self = this,\n\t field = column.getField(),\n\t params;\n\n\t//handle successfull value change\n\tfunction success(value) {\n\t\tvar filterType = column.modules.filter.tagType == \"input\" && column.modules.filter.attrType == \"text\" || column.modules.filter.tagType == \"textarea\" ? \"partial\" : \"match\",\n\t\t type = \"\",\n\t\t filterChangeCheck = \"\",\n\t\t filterFunc;\n\n\t\tif (typeof column.modules.filter.prevSuccess === \"undefined\" || column.modules.filter.prevSuccess !== value) {\n\n\t\t\tcolumn.modules.filter.prevSuccess = value;\n\n\t\t\tif (!column.modules.filter.emptyFunc(value)) {\n\t\t\t\tcolumn.modules.filter.value = value;\n\n\t\t\t\tswitch (_typeof(column.definition.headerFilterFunc)) {\n\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\tif (self.filters[column.definition.headerFilterFunc]) {\n\t\t\t\t\t\t\ttype = column.definition.headerFilterFunc;\n\t\t\t\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\n\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\n\n\t\t\t\t\t\t\t\treturn self.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.warn(\"Header Filter Error - Matching filter function not found: \", column.definition.headerFilterFunc);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\n\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\n\n\t\t\t\t\t\t\treturn column.definition.headerFilterFunc(value, fieldVal, data, params);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\ttype = filterFunc;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (!filterFunc) {\n\t\t\t\t\tswitch (filterType) {\n\t\t\t\t\t\tcase \"partial\":\n\t\t\t\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\t\t\t\tvar colVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\t\tif (typeof colVal !== 'undefined' && colVal !== null) {\n\t\t\t\t\t\t\t\t\treturn String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\ttype = \"like\";\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\t\t\t\treturn column.getFieldValue(data) == value;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\ttype = \"=\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tself.headerFilters[field] = { value: value, func: filterFunc, type: type, params: params || {} };\n\t\t\t} else {\n\t\t\t\tdelete self.headerFilters[field];\n\t\t\t}\n\n\t\t\tfilterChangeCheck = JSON.stringify(self.headerFilters);\n\n\t\t\tif (self.prevHeaderFilterChangeCheck !== filterChangeCheck) {\n\t\t\t\tself.prevHeaderFilterChangeCheck = filterChangeCheck;\n\n\t\t\t\tself.changed = true;\n\t\t\t\tself.table.rowManager.filterRefresh();\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tcolumn.modules.filter = {\n\t\tsuccess: success,\n\t\tattrType: false,\n\t\ttagType: false,\n\t\temptyFunc: false\n\t};\n\n\tthis.generateHeaderFilterElement(column);\n};\n\nFilter.prototype.generateHeaderFilterElement = function (column, initialValue, reinitialize) {\n\tvar _this62 = this;\n\n\tvar self = this,\n\t success = column.modules.filter.success,\n\t field = column.getField(),\n\t filterElement,\n\t editor,\n\t editorElement,\n\t cellWrapper,\n\t typingTimer,\n\t searchTrigger,\n\t params;\n\n\t//handle aborted edit\n\tfunction cancel() {}\n\n\tif (column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode) {\n\t\tcolumn.contentElement.removeChild(column.modules.filter.headerElement.parentNode);\n\t}\n\n\tif (field) {\n\n\t\t//set empty value function\n\t\tcolumn.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function (value) {\n\t\t\treturn !value && value !== \"0\" && value !== 0;\n\t\t};\n\n\t\tfilterElement = document.createElement(\"div\");\n\t\tfilterElement.classList.add(\"tabulator-header-filter\");\n\n\t\t//set column editor\n\t\tswitch (_typeof(column.definition.headerFilter)) {\n\t\t\tcase \"string\":\n\t\t\t\tif (self.table.modules.edit.editors[column.definition.headerFilter]) {\n\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.headerFilter];\n\n\t\t\t\t\tif ((column.definition.headerFilter === \"tick\" || column.definition.headerFilter === \"tickCross\") && !column.definition.headerFilterEmptyCheck) {\n\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function (value) {\n\t\t\t\t\t\t\treturn value !== true && value !== false;\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot build header filter, No such editor found: \", column.definition.editor);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\teditor = column.definition.headerFilter;\n\t\t\t\tbreak;\n\n\t\t\tcase \"boolean\":\n\t\t\t\tif (column.modules.edit && column.modules.edit.editor) {\n\t\t\t\t\teditor = column.modules.edit.editor;\n\t\t\t\t} else {\n\t\t\t\t\tif (column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]) {\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.formatter];\n\n\t\t\t\t\t\tif ((column.definition.formatter === \"tick\" || column.definition.formatter === \"tickCross\") && !column.definition.headerFilterEmptyCheck) {\n\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function (value) {\n\t\t\t\t\t\t\t\treturn value !== true && value !== false;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[\"input\"];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (editor) {\n\n\t\t\tcellWrapper = {\n\t\t\t\tgetValue: function getValue() {\n\t\t\t\t\treturn typeof initialValue !== \"undefined\" ? initialValue : \"\";\n\t\t\t\t},\n\t\t\t\tgetField: function getField() {\n\t\t\t\t\treturn column.definition.field;\n\t\t\t\t},\n\t\t\t\tgetElement: function getElement() {\n\t\t\t\t\treturn filterElement;\n\t\t\t\t},\n\t\t\t\tgetColumn: function getColumn() {\n\t\t\t\t\treturn column.getComponent();\n\t\t\t\t},\n\t\t\t\tgetRow: function getRow() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnormalizeHeight: function normalizeHeight() {}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tparams = column.definition.headerFilterParams || {};\n\n\t\t\tparams = typeof params === \"function\" ? params.call(self.table) : params;\n\n\t\t\teditorElement = editor.call(this.table.modules.edit, cellWrapper, function () {}, success, cancel, params);\n\n\t\t\tif (!editorElement) {\n\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor returned a value of false\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!(editorElement instanceof Node)) {\n\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor should return an instance of Node, the editor returned:\", editorElement);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//set Placeholder Text\n\t\t\tif (field) {\n\t\t\t\tself.table.modules.localize.bind(\"headerFilters|columns|\" + column.definition.field, function (value) {\n\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof value !== \"undefined\" && value ? value : self.table.modules.localize.getText(\"headerFilters|default\"));\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tself.table.modules.localize.bind(\"headerFilters|default\", function (value) {\n\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof self.column.definition.headerFilterPlaceholder !== \"undefined\" && self.column.definition.headerFilterPlaceholder ? self.column.definition.headerFilterPlaceholder : value);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//focus on element on click\n\t\t\teditorElement.addEventListener(\"click\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t\teditorElement.focus();\n\t\t\t});\n\n\t\t\teditorElement.addEventListener(\"focus\", function (e) {\n\t\t\t\tvar left = _this62.table.columnManager.element.scrollLeft;\n\n\t\t\t\tif (left !== _this62.table.rowManager.element.scrollLeft) {\n\t\t\t\t\t_this62.table.rowManager.scrollHorizontal(left);\n\t\t\t\t\t_this62.table.columnManager.scrollHorizontal(left);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t//live update filters as user types\n\t\t\ttypingTimer = false;\n\n\t\t\tsearchTrigger = function searchTrigger(e) {\n\t\t\t\tif (typingTimer) {\n\t\t\t\t\tclearTimeout(typingTimer);\n\t\t\t\t}\n\n\t\t\t\ttypingTimer = setTimeout(function () {\n\t\t\t\t\tsuccess(editorElement.value);\n\t\t\t\t}, self.table.options.headerFilterLiveFilterDelay);\n\t\t\t};\n\n\t\t\tcolumn.modules.filter.headerElement = editorElement;\n\t\t\tcolumn.modules.filter.attrType = editorElement.hasAttribute(\"type\") ? editorElement.getAttribute(\"type\").toLowerCase() : \"\";\n\t\t\tcolumn.modules.filter.tagType = editorElement.tagName.toLowerCase();\n\n\t\t\tif (column.definition.headerFilterLiveFilter !== false) {\n\n\t\t\t\tif (!(column.definition.headerFilter === 'autocomplete' || column.definition.headerFilter === 'tickCross' || (column.definition.editor === 'autocomplete' || column.definition.editor === 'tickCross') && column.definition.headerFilter === true)) {\n\t\t\t\t\teditorElement.addEventListener(\"keyup\", searchTrigger);\n\t\t\t\t\teditorElement.addEventListener(\"search\", searchTrigger);\n\n\t\t\t\t\t//update number filtered columns on change\n\t\t\t\t\tif (column.modules.filter.attrType == \"number\") {\n\t\t\t\t\t\teditorElement.addEventListener(\"change\", function (e) {\n\t\t\t\t\t\t\tsuccess(editorElement.value);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t//change text inputs to search inputs to allow for clearing of field\n\t\t\t\t\tif (column.modules.filter.attrType == \"text\" && this.table.browser !== \"ie\") {\n\t\t\t\t\t\teditorElement.setAttribute(\"type\", \"search\");\n\t\t\t\t\t\t// editorElement.off(\"change blur\"); //prevent blur from triggering filter and preventing selection click\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//prevent input and select elements from propegating click to column sorters etc\n\t\t\t\tif (column.modules.filter.tagType == \"input\" || column.modules.filter.tagType == \"select\" || column.modules.filter.tagType == \"textarea\") {\n\t\t\t\t\teditorElement.addEventListener(\"mousedown\", function (e) {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfilterElement.appendChild(editorElement);\n\n\t\t\tcolumn.contentElement.appendChild(filterElement);\n\n\t\t\tif (!reinitialize) {\n\t\t\t\tself.headerFilterColumns.push(column);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tconsole.warn(\"Filter Error - Cannot add header filter, column has no field set:\", column.definition.title);\n\t}\n};\n\n//hide all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\nFilter.prototype.hideHeaderFilterElements = function () {\n\tthis.headerFilterColumns.forEach(function (column) {\n\t\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\t\tcolumn.modules.filter.headerElement.style.display = 'none';\n\t\t}\n\t});\n};\n\n//show all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\nFilter.prototype.showHeaderFilterElements = function () {\n\tthis.headerFilterColumns.forEach(function (column) {\n\t\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\t\tcolumn.modules.filter.headerElement.style.display = '';\n\t\t}\n\t});\n};\n\n//programatically set focus of header filter\nFilter.prototype.setHeaderFilterFocus = function (column) {\n\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\tcolumn.modules.filter.headerElement.focus();\n\t} else {\n\t\tconsole.warn(\"Column Filter Focus Error - No header filter set on column:\", column.getField());\n\t}\n};\n\n//programmatically get value of header filter\nFilter.prototype.getHeaderFilterValue = function (column) {\n\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\treturn column.modules.filter.headerElement.value;\n\t} else {\n\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t}\n};\n\n//programatically set value of header filter\nFilter.prototype.setHeaderFilterValue = function (column, value) {\n\tif (column) {\n\t\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\t\tthis.generateHeaderFilterElement(column, value, true);\n\t\t\tcolumn.modules.filter.success(value);\n\t\t} else {\n\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t}\n\t}\n};\n\nFilter.prototype.reloadHeaderFilter = function (column) {\n\tif (column) {\n\t\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\t\tthis.generateHeaderFilterElement(column, column.modules.filter.value, true);\n\t\t} else {\n\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t}\n\t}\n};\n\n//check if the filters has changed since last use\nFilter.prototype.hasChanged = function () {\n\tvar changed = this.changed;\n\tthis.changed = false;\n\treturn changed;\n};\n\n//set standard filters\nFilter.prototype.setFilter = function (field, type, value, params) {\n\tvar self = this;\n\n\tself.filterList = [];\n\n\tif (!Array.isArray(field)) {\n\t\tfield = [{ field: field, type: type, value: value, params: params }];\n\t}\n\n\tself.addFilter(field);\n};\n\n//add filter to array\nFilter.prototype.addFilter = function (field, type, value, params) {\n\tvar self = this;\n\n\tif (!Array.isArray(field)) {\n\t\tfield = [{ field: field, type: type, value: value, params: params }];\n\t}\n\n\tfield.forEach(function (filter) {\n\n\t\tfilter = self.findFilter(filter);\n\n\t\tif (filter) {\n\t\t\tself.filterList.push(filter);\n\n\t\t\tself.changed = true;\n\t\t}\n\t});\n\n\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.filter) {\n\t\tthis.table.modules.persistence.save(\"filter\");\n\t}\n};\n\nFilter.prototype.findFilter = function (filter) {\n\tvar self = this,\n\t column;\n\n\tif (Array.isArray(filter)) {\n\t\treturn this.findSubFilters(filter);\n\t}\n\n\tvar filterFunc = false;\n\n\tif (typeof filter.field == \"function\") {\n\t\tfilterFunc = function filterFunc(data) {\n\t\t\treturn filter.field(data, filter.type || {}); // pass params to custom filter function\n\t\t};\n\t} else {\n\n\t\tif (self.filters[filter.type]) {\n\n\t\t\tcolumn = self.table.columnManager.getColumnByField(filter.field);\n\n\t\t\tif (column) {\n\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\treturn self.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {});\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\treturn self.filters[filter.type](filter.value, data[filter.field], data, filter.params || {});\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Filter Error - No such filter type found, ignoring: \", filter.type);\n\t\t}\n\t}\n\n\tfilter.func = filterFunc;\n\n\treturn filter.func ? filter : false;\n};\n\nFilter.prototype.findSubFilters = function (filters) {\n\tvar self = this,\n\t output = [];\n\n\tfilters.forEach(function (filter) {\n\t\tfilter = self.findFilter(filter);\n\n\t\tif (filter) {\n\t\t\toutput.push(filter);\n\t\t}\n\t});\n\n\treturn output.length ? output : false;\n};\n\n//get all filters\nFilter.prototype.getFilters = function (all, ajax) {\n\tvar output = [];\n\n\tif (all) {\n\t\toutput = this.getHeaderFilters();\n\t}\n\n\tif (ajax) {\n\t\toutput.forEach(function (item) {\n\t\t\tif (typeof item.type == \"function\") {\n\t\t\t\titem.type = \"function\";\n\t\t\t}\n\t\t});\n\t}\n\n\toutput = output.concat(this.filtersToArray(this.filterList, ajax));\n\n\treturn output;\n};\n\n//filter to Object\nFilter.prototype.filtersToArray = function (filterList, ajax) {\n\tvar _this63 = this;\n\n\tvar output = [];\n\n\tfilterList.forEach(function (filter) {\n\t\tvar item;\n\n\t\tif (Array.isArray(filter)) {\n\t\t\toutput.push(_this63.filtersToArray(filter, ajax));\n\t\t} else {\n\t\t\titem = { field: filter.field, type: filter.type, value: filter.value };\n\n\t\t\tif (ajax) {\n\t\t\t\tif (typeof item.type == \"function\") {\n\t\t\t\t\titem.type = \"function\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\toutput.push(item);\n\t\t}\n\t});\n\n\treturn output;\n};\n\n//get all filters\nFilter.prototype.getHeaderFilters = function () {\n\tvar self = this,\n\t output = [];\n\n\tfor (var key in this.headerFilters) {\n\t\toutput.push({ field: key, type: this.headerFilters[key].type, value: this.headerFilters[key].value });\n\t}\n\n\treturn output;\n};\n\n//remove filter from array\nFilter.prototype.removeFilter = function (field, type, value) {\n\tvar self = this;\n\n\tif (!Array.isArray(field)) {\n\t\tfield = [{ field: field, type: type, value: value }];\n\t}\n\n\tfield.forEach(function (filter) {\n\t\tvar index = -1;\n\n\t\tif (_typeof(filter.field) == \"object\") {\n\t\t\tindex = self.filterList.findIndex(function (element) {\n\t\t\t\treturn filter === element;\n\t\t\t});\n\t\t} else {\n\t\t\tindex = self.filterList.findIndex(function (element) {\n\t\t\t\treturn filter.field === element.field && filter.type === element.type && filter.value === element.value;\n\t\t\t});\n\t\t}\n\n\t\tif (index > -1) {\n\t\t\tself.filterList.splice(index, 1);\n\t\t\tself.changed = true;\n\t\t} else {\n\t\t\tconsole.warn(\"Filter Error - No matching filter type found, ignoring: \", filter.type);\n\t\t}\n\t});\n\n\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.filter) {\n\t\tthis.table.modules.persistence.save(\"filter\");\n\t}\n};\n\n//clear filters\nFilter.prototype.clearFilter = function (all) {\n\tthis.filterList = [];\n\n\tif (all) {\n\t\tthis.clearHeaderFilter();\n\t}\n\n\tthis.changed = true;\n\n\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.filter) {\n\t\tthis.table.modules.persistence.save(\"filter\");\n\t}\n};\n\n//clear header filters\nFilter.prototype.clearHeaderFilter = function () {\n\tvar self = this;\n\n\tthis.headerFilters = {};\n\tself.prevHeaderFilterChangeCheck = \"{}\";\n\n\tthis.headerFilterColumns.forEach(function (column) {\n\t\tif (typeof column.modules.filter.value !== \"undefined\") {\n\t\t\tdelete column.modules.filter.value;\n\t\t}\n\t\tcolumn.modules.filter.prevSuccess = undefined;\n\t\tself.reloadHeaderFilter(column);\n\t});\n\n\tthis.changed = true;\n};\n\n//search data and return matching rows\nFilter.prototype.search = function (searchType, field, type, value) {\n\tvar self = this,\n\t activeRows = [],\n\t filterList = [];\n\n\tif (!Array.isArray(field)) {\n\t\tfield = [{ field: field, type: type, value: value }];\n\t}\n\n\tfield.forEach(function (filter) {\n\t\tfilter = self.findFilter(filter);\n\n\t\tif (filter) {\n\t\t\tfilterList.push(filter);\n\t\t}\n\t});\n\n\tthis.table.rowManager.rows.forEach(function (row) {\n\t\tvar match = true;\n\n\t\tfilterList.forEach(function (filter) {\n\t\t\tif (!self.filterRecurse(filter, row.getData())) {\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t});\n\n\t\tif (match) {\n\t\t\tactiveRows.push(searchType === \"data\" ? row.getData(\"data\") : row.getComponent());\n\t\t}\n\t});\n\n\treturn activeRows;\n};\n\n//filter row array\nFilter.prototype.filter = function (rowList, filters) {\n\tvar self = this,\n\t activeRows = [],\n\t activeRowComponents = [];\n\n\tif (self.table.options.dataFiltering) {\n\t\tself.table.options.dataFiltering.call(self.table, self.getFilters());\n\t}\n\n\tif (!self.table.options.ajaxFiltering && (self.filterList.length || Object.keys(self.headerFilters).length)) {\n\n\t\trowList.forEach(function (row) {\n\t\t\tif (self.filterRow(row)) {\n\t\t\t\tactiveRows.push(row);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tactiveRows = rowList.slice(0);\n\t}\n\n\tif (self.table.options.dataFiltered) {\n\n\t\tactiveRows.forEach(function (row) {\n\t\t\tactiveRowComponents.push(row.getComponent());\n\t\t});\n\n\t\tself.table.options.dataFiltered.call(self.table, self.getFilters(), activeRowComponents);\n\t}\n\n\treturn activeRows;\n};\n\n//filter individual row\nFilter.prototype.filterRow = function (row, filters) {\n\tvar self = this,\n\t match = true,\n\t data = row.getData();\n\n\tself.filterList.forEach(function (filter) {\n\t\tif (!self.filterRecurse(filter, data)) {\n\t\t\tmatch = false;\n\t\t}\n\t});\n\n\tfor (var field in self.headerFilters) {\n\t\tif (!self.headerFilters[field].func(data)) {\n\t\t\tmatch = false;\n\t\t}\n\t}\n\n\treturn match;\n};\n\nFilter.prototype.filterRecurse = function (filter, data) {\n\tvar self = this,\n\t match = false;\n\n\tif (Array.isArray(filter)) {\n\t\tfilter.forEach(function (subFilter) {\n\t\t\tif (self.filterRecurse(subFilter, data)) {\n\t\t\t\tmatch = true;\n\t\t\t}\n\t\t});\n\t} else {\n\t\tmatch = filter.func(data);\n\t}\n\n\treturn match;\n};\n\n//list of available filters\nFilter.prototype.filters = {\n\n\t//equal to\n\t\"=\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\treturn rowVal == filterVal ? true : false;\n\t},\n\n\t//less than\n\t\"<\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\treturn rowVal < filterVal ? true : false;\n\t},\n\n\t//less than or equal to\n\t\"<=\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\treturn rowVal <= filterVal ? true : false;\n\t},\n\n\t//greater than\n\t\">\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\treturn rowVal > filterVal ? true : false;\n\t},\n\n\t//greater than or equal to\n\t\">=\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\treturn rowVal >= filterVal ? true : false;\n\t},\n\n\t//not equal to\n\t\"!=\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\treturn rowVal != filterVal ? true : false;\n\t},\n\n\t\"regex\": function regex(filterVal, rowVal, rowData, filterParams) {\n\n\t\tif (typeof filterVal == \"string\") {\n\t\t\tfilterVal = new RegExp(filterVal);\n\t\t}\n\n\t\treturn filterVal.test(rowVal);\n\t},\n\n\t//contains the string\n\t\"like\": function like(filterVal, rowVal, rowData, filterParams) {\n\t\tif (filterVal === null || typeof filterVal === \"undefined\") {\n\t\t\treturn rowVal === filterVal ? true : false;\n\t\t} else {\n\t\t\tif (typeof rowVal !== 'undefined' && rowVal !== null) {\n\t\t\t\treturn String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\t//contains the keywords\n\t\"keywords\": function keywords(filterVal, rowVal, rowData, filterParams) {\n\t\tvar keywords = filterVal.toLowerCase().split(typeof filterParams.separator === \"undefined\" ? \" \" : filterParams.separator),\n\t\t value = String(rowVal === null || typeof rowVal === \"undefined\" ? \"\" : rowVal).toLowerCase(),\n\t\t matches = [];\n\n\t\tkeywords.forEach(function (keyword) {\n\t\t\tif (value.includes(keyword)) {\n\t\t\t\tmatches.push(true);\n\t\t\t}\n\t\t});\n\n\t\treturn filterParams.matchAll ? matches.length === keywords.length : !!matches.length;\n\t},\n\n\t//starts with the string\n\t\"starts\": function starts(filterVal, rowVal, rowData, filterParams) {\n\t\tif (filterVal === null || typeof filterVal === \"undefined\") {\n\t\t\treturn rowVal === filterVal ? true : false;\n\t\t} else {\n\t\t\tif (typeof rowVal !== 'undefined' && rowVal !== null) {\n\t\t\t\treturn String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\t//ends with the string\n\t\"ends\": function ends(filterVal, rowVal, rowData, filterParams) {\n\t\tif (filterVal === null || typeof filterVal === \"undefined\") {\n\t\t\treturn rowVal === filterVal ? true : false;\n\t\t} else {\n\t\t\tif (typeof rowVal !== 'undefined' && rowVal !== null) {\n\t\t\t\treturn String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\t//in array\n\t\"in\": function _in(filterVal, rowVal, rowData, filterParams) {\n\t\tif (Array.isArray(filterVal)) {\n\t\t\treturn filterVal.length ? filterVal.indexOf(rowVal) > -1 : true;\n\t\t} else {\n\t\t\tconsole.warn(\"Filter Error - filter value is not an array:\", filterVal);\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"filter\", Filter);\n\nvar Format = function Format(table) {\n\tthis.table = table; //hold Tabulator object\n};\n\n//initialize column formatter\nFormat.prototype.initializeColumn = function (column) {\n\tcolumn.modules.format = this.lookupFormatter(column, \"\");\n\n\tif (typeof column.definition.formatterPrint !== \"undefined\") {\n\t\tcolumn.modules.format.print = this.lookupFormatter(column, \"Print\");\n\t}\n\n\tif (typeof column.definition.formatterClipboard !== \"undefined\") {\n\t\tcolumn.modules.format.clipboard = this.lookupFormatter(column, \"Clipboard\");\n\t}\n\n\tif (typeof column.definition.formatterHtmlOutput !== \"undefined\") {\n\t\tcolumn.modules.format.htmlOutput = this.lookupFormatter(column, \"HtmlOutput\");\n\t}\n};\n\nFormat.prototype.lookupFormatter = function (column, type) {\n\tvar config = { params: column.definition[\"formatter\" + type + \"Params\"] || {} },\n\t formatter = column.definition[\"formatter\" + type];\n\n\t//set column formatter\n\tswitch (typeof formatter === 'undefined' ? 'undefined' : _typeof(formatter)) {\n\t\tcase \"string\":\n\n\t\t\tif (formatter === \"tick\") {\n\t\t\t\tformatter = \"tickCross\";\n\n\t\t\t\tif (typeof config.params.crossElement == \"undefined\") {\n\t\t\t\t\tconfig.params.crossElement = false;\n\t\t\t\t}\n\n\t\t\t\tconsole.warn(\"DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false\");\n\t\t\t}\n\n\t\t\tif (this.formatters[formatter]) {\n\t\t\t\tconfig.formatter = this.formatters[formatter];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\n\t\t\t\tconfig.formatter = this.formatters.plaintext;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tconfig.formatter = formatter;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconfig.formatter = this.formatters.plaintext;\n\t\t\tbreak;\n\t}\n\n\treturn config;\n};\n\nFormat.prototype.cellRendered = function (cell) {\n\tif (cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered) {\n\t\tcell.modules.format.renderedCallback();\n\t\tcell.modules.format.rendered = true;\n\t}\n};\n\n//return a formatted value for a cell\nFormat.prototype.formatValue = function (cell) {\n\tvar component = cell.getComponent(),\n\t params = typeof cell.column.modules.format.params === \"function\" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;\n\n\tfunction onRendered(callback) {\n\t\tif (!cell.modules.format) {\n\t\t\tcell.modules.format = {};\n\t\t}\n\n\t\tcell.modules.format.renderedCallback = callback;\n\t\tcell.modules.format.rendered = false;\n\t}\n\n\treturn cell.column.modules.format.formatter.call(this, component, params, onRendered);\n};\n\nFormat.prototype.formatExportValue = function (cell, type) {\n\tvar formatter = cell.column.modules.format[type],\n\t params;\n\n\tif (formatter) {\n\t\tvar onRendered = function onRendered(callback) {\n\t\t\tif (!cell.modules.format) {\n\t\t\t\tcell.modules.format = {};\n\t\t\t}\n\n\t\t\tcell.modules.format.renderedCallback = callback;\n\t\t\tcell.modules.format.rendered = false;\n\t\t};\n\n\t\tparams = typeof formatter.params === \"function\" ? formatter.params(component) : formatter.params;\n\n\t\treturn formatter.formatter.call(this, cell.getComponent(), params, onRendered);\n\t} else {\n\t\treturn this.formatValue(cell);\n\t}\n};\n\nFormat.prototype.sanitizeHTML = function (value) {\n\tif (value) {\n\t\tvar entityMap = {\n\t\t\t'&': '&',\n\t\t\t'<': '<',\n\t\t\t'>': '>',\n\t\t\t'\"': '"',\n\t\t\t\"'\": ''',\n\t\t\t'/': '/',\n\t\t\t'`': '`',\n\t\t\t'=': '='\n\t\t};\n\n\t\treturn String(value).replace(/[&<>\"'`=\\/]/g, function (s) {\n\t\t\treturn entityMap[s];\n\t\t});\n\t} else {\n\t\treturn value;\n\t}\n};\n\nFormat.prototype.emptyToSpace = function (value) {\n\treturn value === null || typeof value === \"undefined\" || value === \"\" ? \" \" : value;\n};\n\n//get formatter for cell\nFormat.prototype.getFormatter = function (formatter) {\n\tvar formatter;\n\n\tswitch (typeof formatter === 'undefined' ? 'undefined' : _typeof(formatter)) {\n\t\tcase \"string\":\n\t\t\tif (this.formatters[formatter]) {\n\t\t\t\tformatter = this.formatters[formatter];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\n\t\t\t\tformatter = this.formatters.plaintext;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tformatter = formatter;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tformatter = this.formatters.plaintext;\n\t\t\tbreak;\n\t}\n\n\treturn formatter;\n};\n\n//default data formatters\nFormat.prototype.formatters = {\n\t//plain text value\n\tplaintext: function plaintext(cell, formatterParams, onRendered) {\n\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n\t},\n\n\t//html text value\n\thtml: function html(cell, formatterParams, onRendered) {\n\t\treturn cell.getValue();\n\t},\n\n\t//multiline text area\n\ttextarea: function textarea(cell, formatterParams, onRendered) {\n\t\tcell.getElement().style.whiteSpace = \"pre-wrap\";\n\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n\t},\n\n\t//currency formatting\n\tmoney: function money(cell, formatterParams, onRendered) {\n\t\tvar floatVal = parseFloat(cell.getValue()),\n\t\t number,\n\t\t integer,\n\t\t decimal,\n\t\t rgx;\n\n\t\tvar decimalSym = formatterParams.decimal || \".\";\n\t\tvar thousandSym = formatterParams.thousand || \",\";\n\t\tvar symbol = formatterParams.symbol || \"\";\n\t\tvar after = !!formatterParams.symbolAfter;\n\t\tvar precision = typeof formatterParams.precision !== \"undefined\" ? formatterParams.precision : 2;\n\n\t\tif (isNaN(floatVal)) {\n\t\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n\t\t}\n\n\t\tnumber = precision !== false ? floatVal.toFixed(precision) : floatVal;\n\t\tnumber = String(number).split(\".\");\n\n\t\tinteger = number[0];\n\t\tdecimal = number.length > 1 ? decimalSym + number[1] : \"\";\n\n\t\trgx = /(\\d+)(\\d{3})/;\n\n\t\twhile (rgx.test(integer)) {\n\t\t\tinteger = integer.replace(rgx, \"$1\" + thousandSym + \"$2\");\n\t\t}\n\n\t\treturn after ? integer + decimal + symbol : symbol + integer + decimal;\n\t},\n\n\t//clickable anchor tag\n\tlink: function link(cell, formatterParams, onRendered) {\n\t\tvar value = cell.getValue(),\n\t\t urlPrefix = formatterParams.urlPrefix || \"\",\n\t\t download = formatterParams.download,\n\t\t label = value,\n\t\t el = document.createElement(\"a\"),\n\t\t data;\n\n\t\tif (formatterParams.labelField) {\n\t\t\tdata = cell.getData();\n\t\t\tlabel = data[formatterParams.labelField];\n\t\t}\n\n\t\tif (formatterParams.label) {\n\t\t\tswitch (_typeof(formatterParams.label)) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tlabel = formatterParams.label;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\tlabel = formatterParams.label(cell);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (label) {\n\t\t\tif (formatterParams.urlField) {\n\t\t\t\tdata = cell.getData();\n\t\t\t\tvalue = data[formatterParams.urlField];\n\t\t\t}\n\n\t\t\tif (formatterParams.url) {\n\t\t\t\tswitch (_typeof(formatterParams.url)) {\n\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\tvalue = formatterParams.url;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\tvalue = formatterParams.url(cell);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tel.setAttribute(\"href\", urlPrefix + value);\n\n\t\t\tif (formatterParams.target) {\n\t\t\t\tel.setAttribute(\"target\", formatterParams.target);\n\t\t\t}\n\n\t\t\tif (formatterParams.download) {\n\n\t\t\t\tif (typeof download == \"function\") {\n\t\t\t\t\tdownload = download(cell);\n\t\t\t\t} else {\n\t\t\t\t\tdownload = download === true ? \"\" : download;\n\t\t\t\t}\n\n\t\t\t\tel.setAttribute(\"download\", download);\n\t\t\t}\n\n\t\t\tel.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));\n\n\t\t\treturn el;\n\t\t} else {\n\t\t\treturn \" \";\n\t\t}\n\t},\n\n\t//image element\n\timage: function image(cell, formatterParams, onRendered) {\n\t\tvar el = document.createElement(\"img\"),\n\t\t src = cell.getValue();\n\n\t\tif (formatterParams.urlPrefix) {\n\t\t\tsrc = formatterParams.urlPrefix + cell.getValue();\n\t\t}\n\n\t\tif (formatterParams.urlSuffix) {\n\t\t\tsrc = src + formatterParams.urlSuffix;\n\t\t}\n\n\t\tel.setAttribute(\"src\", src);\n\n\t\tswitch (_typeof(formatterParams.height)) {\n\t\t\tcase \"number\":\n\t\t\t\tel.style.height = formatterParams.height + \"px\";\n\t\t\t\tbreak;\n\n\t\t\tcase \"string\":\n\t\t\t\tel.style.height = formatterParams.height;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tswitch (_typeof(formatterParams.width)) {\n\t\t\tcase \"number\":\n\t\t\t\tel.style.width = formatterParams.width + \"px\";\n\t\t\t\tbreak;\n\n\t\t\tcase \"string\":\n\t\t\t\tel.style.width = formatterParams.width;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tel.addEventListener(\"load\", function () {\n\t\t\tcell.getRow().normalizeHeight();\n\t\t});\n\n\t\treturn el;\n\t},\n\n\t//tick or cross\n\ttickCross: function tickCross(cell, formatterParams, onRendered) {\n\t\tvar value = cell.getValue(),\n\t\t element = cell.getElement(),\n\t\t empty = formatterParams.allowEmpty,\n\t\t truthy = formatterParams.allowTruthy,\n\t\t tick = typeof formatterParams.tickElement !== \"undefined\" ? formatterParams.tickElement : '',\n\t\t cross = typeof formatterParams.crossElement !== \"undefined\" ? formatterParams.crossElement : '';\n\n\t\tif (truthy && value || value === true || value === \"true\" || value === \"True\" || value === 1 || value === \"1\") {\n\t\t\telement.setAttribute(\"aria-checked\", true);\n\t\t\treturn tick || \"\";\n\t\t} else {\n\t\t\tif (empty && (value === \"null\" || value === \"\" || value === null || typeof value === \"undefined\")) {\n\t\t\t\telement.setAttribute(\"aria-checked\", \"mixed\");\n\t\t\t\treturn \"\";\n\t\t\t} else {\n\t\t\t\telement.setAttribute(\"aria-checked\", false);\n\t\t\t\treturn cross || \"\";\n\t\t\t}\n\t\t}\n\t},\n\n\tdatetime: function datetime(cell, formatterParams, onRendered) {\n\t\tvar inputFormat = formatterParams.inputFormat || \"YYYY-MM-DD hh:mm:ss\";\n\t\tvar outputFormat = formatterParams.outputFormat || \"DD/MM/YYYY hh:mm:ss\";\n\t\tvar invalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\n\t\tvar value = cell.getValue();\n\n\t\tvar newDatetime = moment(value, inputFormat);\n\n\t\tif (newDatetime.isValid()) {\n\t\t\treturn formatterParams.timezone ? newDatetime.tz(formatterParams.timezone).format(outputFormat) : newDatetime.format(outputFormat);\n\t\t} else {\n\n\t\t\tif (invalid === true) {\n\t\t\t\treturn value;\n\t\t\t} else if (typeof invalid === \"function\") {\n\t\t\t\treturn invalid(value);\n\t\t\t} else {\n\t\t\t\treturn invalid;\n\t\t\t}\n\t\t}\n\t},\n\n\tdatetimediff: function datetime(cell, formatterParams, onRendered) {\n\t\tvar inputFormat = formatterParams.inputFormat || \"YYYY-MM-DD hh:mm:ss\";\n\t\tvar invalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\n\t\tvar suffix = typeof formatterParams.suffix !== \"undefined\" ? formatterParams.suffix : false;\n\t\tvar unit = typeof formatterParams.unit !== \"undefined\" ? formatterParams.unit : undefined;\n\t\tvar humanize = typeof formatterParams.humanize !== \"undefined\" ? formatterParams.humanize : false;\n\t\tvar date = typeof formatterParams.date !== \"undefined\" ? formatterParams.date : moment();\n\t\tvar value = cell.getValue();\n\n\t\tvar newDatetime = moment(value, inputFormat);\n\n\t\tif (newDatetime.isValid()) {\n\t\t\tif (humanize) {\n\t\t\t\treturn moment.duration(newDatetime.diff(date)).humanize(suffix);\n\t\t\t} else {\n\t\t\t\treturn newDatetime.diff(date, unit) + (suffix ? \" \" + suffix : \"\");\n\t\t\t}\n\t\t} else {\n\n\t\t\tif (invalid === true) {\n\t\t\t\treturn value;\n\t\t\t} else if (typeof invalid === \"function\") {\n\t\t\t\treturn invalid(value);\n\t\t\t} else {\n\t\t\t\treturn invalid;\n\t\t\t}\n\t\t}\n\t},\n\n\t//select\n\tlookup: function lookup(cell, formatterParams, onRendered) {\n\t\tvar value = cell.getValue();\n\n\t\tif (typeof formatterParams[value] === \"undefined\") {\n\t\t\tconsole.warn('Missing display value for ' + value);\n\t\t\treturn value;\n\t\t}\n\n\t\treturn formatterParams[value];\n\t},\n\n\t//star rating\n\tstar: function star(cell, formatterParams, onRendered) {\n\t\tvar value = cell.getValue(),\n\t\t element = cell.getElement(),\n\t\t maxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,\n\t\t stars = document.createElement(\"span\"),\n\t\t star = document.createElementNS('http://www.w3.org/2000/svg', \"svg\"),\n\t\t starActive = '',\n\t\t starInactive = '';\n\n\t\t//style stars holder\n\t\tstars.style.verticalAlign = \"middle\";\n\n\t\t//style star\n\t\tstar.setAttribute(\"width\", \"14\");\n\t\tstar.setAttribute(\"height\", \"14\");\n\t\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\n\t\tstar.setAttribute(\"xml:space\", \"preserve\");\n\t\tstar.style.padding = \"0 1px\";\n\n\t\tvalue = value && !isNaN(value) ? parseInt(value) : 0;\n\n\t\tvalue = Math.max(0, Math.min(value, maxStars));\n\n\t\tfor (var i = 1; i <= maxStars; i++) {\n\t\t\tvar nextStar = star.cloneNode(true);\n\t\t\tnextStar.innerHTML = i <= value ? starActive : starInactive;\n\n\t\t\tstars.appendChild(nextStar);\n\t\t}\n\n\t\telement.style.whiteSpace = \"nowrap\";\n\t\telement.style.overflow = \"hidden\";\n\t\telement.style.textOverflow = \"ellipsis\";\n\n\t\telement.setAttribute(\"aria-label\", value);\n\n\t\treturn stars;\n\t},\n\n\ttraffic: function traffic(cell, formatterParams, onRendered) {\n\t\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\n\t\t el = document.createElement(\"span\"),\n\t\t max = formatterParams && formatterParams.max ? formatterParams.max : 100,\n\t\t min = formatterParams && formatterParams.min ? formatterParams.min : 0,\n\t\t colors = formatterParams && typeof formatterParams.color !== \"undefined\" ? formatterParams.color : [\"red\", \"orange\", \"green\"],\n\t\t color = \"#666666\",\n\t\t percent,\n\t\t percentValue;\n\n\t\tif (isNaN(value) || typeof cell.getValue() === \"undefined\") {\n\t\t\treturn;\n\t\t}\n\n\t\tel.classList.add(\"tabulator-traffic-light\");\n\n\t\t//make sure value is in range\n\t\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\n\t\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\n\n\t\t//workout percentage\n\t\tpercent = (max - min) / 100;\n\t\tpercentValue = Math.round((percentValue - min) / percent);\n\n\t\t//set color\n\t\tswitch (typeof colors === 'undefined' ? 'undefined' : _typeof(colors)) {\n\t\t\tcase \"string\":\n\t\t\t\tcolor = colors;\n\t\t\t\tbreak;\n\t\t\tcase \"function\":\n\t\t\t\tcolor = colors(value);\n\t\t\t\tbreak;\n\t\t\tcase \"object\":\n\t\t\t\tif (Array.isArray(colors)) {\n\t\t\t\t\tvar unit = 100 / colors.length;\n\t\t\t\t\tvar index = Math.floor(percentValue / unit);\n\n\t\t\t\t\tindex = Math.min(index, colors.length - 1);\n\t\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\t\tcolor = colors[index];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t}\n\n\t\tel.style.backgroundColor = color;\n\n\t\treturn el;\n\t},\n\n\t//progress bar\n\tprogress: function progress(cell, formatterParams, onRendered) {\n\t\t//progress bar\n\t\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\n\t\t element = cell.getElement(),\n\t\t max = formatterParams && formatterParams.max ? formatterParams.max : 100,\n\t\t min = formatterParams && formatterParams.min ? formatterParams.min : 0,\n\t\t legendAlign = formatterParams && formatterParams.legendAlign ? formatterParams.legendAlign : \"center\",\n\t\t percent,\n\t\t percentValue,\n\t\t color,\n\t\t legend,\n\t\t legendColor,\n\t\t top,\n\t\t left,\n\t\t right,\n\t\t bottom;\n\n\t\t//make sure value is in range\n\t\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\n\t\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\n\n\t\t//workout percentage\n\t\tpercent = (max - min) / 100;\n\t\tpercentValue = Math.round((percentValue - min) / percent);\n\n\t\t//set bar color\n\t\tswitch (_typeof(formatterParams.color)) {\n\t\t\tcase \"string\":\n\t\t\t\tcolor = formatterParams.color;\n\t\t\t\tbreak;\n\t\t\tcase \"function\":\n\t\t\t\tcolor = formatterParams.color(value);\n\t\t\t\tbreak;\n\t\t\tcase \"object\":\n\t\t\t\tif (Array.isArray(formatterParams.color)) {\n\t\t\t\t\tvar unit = 100 / formatterParams.color.length;\n\t\t\t\t\tvar index = Math.floor(percentValue / unit);\n\n\t\t\t\t\tindex = Math.min(index, formatterParams.color.length - 1);\n\t\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\t\tcolor = formatterParams.color[index];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tcolor = \"#2DC214\";\n\t\t}\n\n\t\t//generate legend\n\t\tswitch (_typeof(formatterParams.legend)) {\n\t\t\tcase \"string\":\n\t\t\t\tlegend = formatterParams.legend;\n\t\t\t\tbreak;\n\t\t\tcase \"function\":\n\t\t\t\tlegend = formatterParams.legend(value);\n\t\t\t\tbreak;\n\t\t\tcase \"boolean\":\n\t\t\t\tlegend = value;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tlegend = false;\n\t\t}\n\n\t\t//set legend color\n\t\tswitch (_typeof(formatterParams.legendColor)) {\n\t\t\tcase \"string\":\n\t\t\t\tlegendColor = formatterParams.legendColor;\n\t\t\t\tbreak;\n\t\t\tcase \"function\":\n\t\t\t\tlegendColor = formatterParams.legendColor(value);\n\t\t\t\tbreak;\n\t\t\tcase \"object\":\n\t\t\t\tif (Array.isArray(formatterParams.legendColor)) {\n\t\t\t\t\tvar unit = 100 / formatterParams.legendColor.length;\n\t\t\t\t\tvar index = Math.floor(percentValue / unit);\n\n\t\t\t\t\tindex = Math.min(index, formatterParams.legendColor.length - 1);\n\t\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\t\tlegendColor = formatterParams.legendColor[index];\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tlegendColor = \"#000\";\n\t\t}\n\n\t\telement.style.minWidth = \"30px\";\n\t\telement.style.position = \"relative\";\n\n\t\telement.setAttribute(\"aria-label\", percentValue);\n\n\t\tvar barEl = document.createElement(\"div\");\n\t\tbarEl.style.display = \"inline-block\";\n\t\tbarEl.style.position = \"relative\";\n\t\tbarEl.style.width = percentValue + \"%\";\n\t\tbarEl.style.backgroundColor = color;\n\t\tbarEl.style.height = \"100%\";\n\n\t\tbarEl.setAttribute('data-max', max);\n\t\tbarEl.setAttribute('data-min', min);\n\n\t\tif (legend) {\n\t\t\tvar legendEl = document.createElement(\"div\");\n\t\t\tlegendEl.style.position = \"absolute\";\n\t\t\tlegendEl.style.top = \"4px\";\n\t\t\tlegendEl.style.left = 0;\n\t\t\tlegendEl.style.textAlign = legendAlign;\n\t\t\tlegendEl.style.width = \"100%\";\n\t\t\tlegendEl.style.color = legendColor;\n\t\t\tlegendEl.innerHTML = legend;\n\t\t}\n\n\t\tonRendered(function () {\n\n\t\t\t//handle custom element needed if formatter is to be included in printed/downloaded output\n\t\t\tif (!(cell instanceof CellComponent)) {\n\t\t\t\tvar holderEl = document.createElement(\"div\");\n\t\t\t\tholderEl.style.position = \"absolute\";\n\t\t\t\tholderEl.style.top = \"4px\";\n\t\t\t\tholderEl.style.bottom = \"4px\";\n\t\t\t\tholderEl.style.left = \"4px\";\n\t\t\t\tholderEl.style.right = \"4px\";\n\n\t\t\t\telement.appendChild(holderEl);\n\n\t\t\t\telement = holderEl;\n\t\t\t}\n\n\t\t\telement.appendChild(barEl);\n\n\t\t\tif (legend) {\n\t\t\t\telement.appendChild(legendEl);\n\t\t\t}\n\t\t});\n\n\t\treturn \"\";\n\t},\n\n\t//background color\n\tcolor: function color(cell, formatterParams, onRendered) {\n\t\tcell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());\n\t\treturn \"\";\n\t},\n\n\t//tick icon\n\tbuttonTick: function buttonTick(cell, formatterParams, onRendered) {\n\t\treturn '';\n\t},\n\n\t//cross icon\n\tbuttonCross: function buttonCross(cell, formatterParams, onRendered) {\n\t\treturn '';\n\t},\n\n\t//current row number\n\trownum: function rownum(cell, formatterParams, onRendered) {\n\t\treturn this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1;\n\t},\n\n\t//row handle\n\thandle: function handle(cell, formatterParams, onRendered) {\n\t\tcell.getElement().classList.add(\"tabulator-row-handle\");\n\t\treturn \"
\";\n\t},\n\n\tresponsiveCollapse: function responsiveCollapse(cell, formatterParams, onRendered) {\n\t\tvar self = this,\n\t\t open = false,\n\t\t el = document.createElement(\"div\"),\n\t\t config = cell.getRow()._row.modules.responsiveLayout;\n\n\t\tel.classList.add(\"tabulator-responsive-collapse-toggle\");\n\t\tel.innerHTML = \"+-\";\n\n\t\tcell.getElement().classList.add(\"tabulator-row-handle\");\n\n\t\tfunction toggleList(isOpen) {\n\t\t\tvar collapseEl = config.element;\n\n\t\t\tconfig.open = isOpen;\n\n\t\t\tif (collapseEl) {\n\n\t\t\t\tif (config.open) {\n\t\t\t\t\tel.classList.add(\"open\");\n\t\t\t\t\tcollapseEl.style.display = '';\n\t\t\t\t} else {\n\t\t\t\t\tel.classList.remove(\"open\");\n\t\t\t\t\tcollapseEl.style.display = 'none';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tel.addEventListener(\"click\", function (e) {\n\t\t\te.stopImmediatePropagation();\n\t\t\ttoggleList(!config.open);\n\t\t});\n\n\t\ttoggleList(config.open);\n\n\t\treturn el;\n\t},\n\n\trowSelection: function rowSelection(cell, formatterParams, onRendered) {\n\t\tvar _this64 = this;\n\n\t\tvar checkbox = document.createElement(\"input\");\n\n\t\tcheckbox.type = 'checkbox';\n\n\t\tif (this.table.modExists(\"selectRow\", true)) {\n\n\t\t\tcheckbox.addEventListener(\"click\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\n\t\t\tif (typeof cell.getRow == 'function') {\n\t\t\t\tvar row = cell.getRow();\n\n\t\t\t\tif (row instanceof RowComponent) {\n\n\t\t\t\t\tcheckbox.addEventListener(\"change\", function (e) {\n\t\t\t\t\t\trow.toggleSelect();\n\t\t\t\t\t});\n\n\t\t\t\t\tcheckbox.checked = row.isSelected && row.isSelected();\n\t\t\t\t\tthis.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);\n\t\t\t\t} else {\n\t\t\t\t\tcheckbox = \"\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcheckbox.addEventListener(\"change\", function (e) {\n\t\t\t\t\tif (_this64.table.modules.selectRow.selectedRows.length) {\n\t\t\t\t\t\t_this64.table.deselectRow();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_this64.table.selectRow(formatterParams.rowRange);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);\n\t\t\t}\n\t\t}\n\t\treturn checkbox;\n\t}\n};\n\nTabulator.prototype.registerModule(\"format\", Format);\n\nvar FrozenColumns = function FrozenColumns(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.leftColumns = [];\n\tthis.rightColumns = [];\n\tthis.leftMargin = 0;\n\tthis.rightMargin = 0;\n\tthis.rightPadding = 0;\n\tthis.initializationMode = \"left\";\n\tthis.active = false;\n\tthis.scrollEndTimer = false;\n};\n\n//reset initial state\nFrozenColumns.prototype.reset = function () {\n\tthis.initializationMode = \"left\";\n\tthis.leftColumns = [];\n\tthis.rightColumns = [];\n\tthis.leftMargin = 0;\n\tthis.rightMargin = 0;\n\tthis.rightMargin = 0;\n\tthis.active = false;\n\n\tthis.table.columnManager.headersElement.style.marginLeft = 0;\n\tthis.table.columnManager.element.style.paddingRight = 0;\n};\n\n//initialize specific column\nFrozenColumns.prototype.initializeColumn = function (column) {\n\tvar config = { margin: 0, edge: false };\n\n\tif (!column.isGroup) {\n\n\t\tif (this.frozenCheck(column)) {\n\n\t\t\tconfig.position = this.initializationMode;\n\n\t\t\tif (this.initializationMode == \"left\") {\n\t\t\t\tthis.leftColumns.push(column);\n\t\t\t} else {\n\t\t\t\tthis.rightColumns.unshift(column);\n\t\t\t}\n\n\t\t\tthis.active = true;\n\n\t\t\tcolumn.modules.frozen = config;\n\t\t} else {\n\t\t\tthis.initializationMode = \"right\";\n\t\t}\n\t}\n};\n\nFrozenColumns.prototype.frozenCheck = function (column) {\n\tvar frozen = false;\n\n\tif (column.parent.isGroup && column.definition.frozen) {\n\t\tconsole.warn(\"Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups\");\n\t}\n\n\tif (column.parent.isGroup) {\n\t\treturn this.frozenCheck(column.parent);\n\t} else {\n\t\treturn column.definition.frozen;\n\t}\n\n\treturn frozen;\n};\n\n//quick layout to smooth horizontal scrolling\nFrozenColumns.prototype.scrollHorizontal = function () {\n\tvar _this65 = this;\n\n\tvar rows;\n\n\tif (this.active) {\n\t\tclearTimeout(this.scrollEndTimer);\n\n\t\t//layout all rows after scroll is complete\n\t\tthis.scrollEndTimer = setTimeout(function () {\n\t\t\t_this65.layout();\n\t\t}, 100);\n\n\t\trows = this.table.rowManager.getVisibleRows();\n\n\t\tthis.calcMargins();\n\n\t\tthis.layoutColumnPosition();\n\n\t\tthis.layoutCalcRows();\n\n\t\trows.forEach(function (row) {\n\t\t\tif (row.type === \"row\") {\n\t\t\t\t_this65.layoutRow(row);\n\t\t\t}\n\t\t});\n\n\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\n\t}\n};\n\n//calculate margins for rows\nFrozenColumns.prototype.calcMargins = function () {\n\tthis.leftMargin = this._calcSpace(this.leftColumns, this.leftColumns.length) + \"px\";\n\tthis.table.columnManager.headersElement.style.marginLeft = this.leftMargin;\n\n\tthis.rightMargin = this._calcSpace(this.rightColumns, this.rightColumns.length) + \"px\";\n\tthis.table.columnManager.element.style.paddingRight = this.rightMargin;\n\n\t//calculate right frozen columns\n\tthis.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft;\n};\n\n//layout calculation rows\nFrozenColumns.prototype.layoutCalcRows = function () {\n\tif (this.table.modExists(\"columnCalcs\")) {\n\t\tif (this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow) {\n\t\t\tthis.layoutRow(this.table.modules.columnCalcs.topRow);\n\t\t}\n\t\tif (this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow) {\n\t\t\tthis.layoutRow(this.table.modules.columnCalcs.botRow);\n\t\t}\n\t}\n};\n\n//calculate column positions and layout headers\nFrozenColumns.prototype.layoutColumnPosition = function (allCells) {\n\tvar _this66 = this;\n\n\tvar leftParents = [];\n\n\tthis.leftColumns.forEach(function (column, i) {\n\t\tcolumn.modules.frozen.margin = _this66._calcSpace(_this66.leftColumns, i) + _this66.table.columnManager.scrollLeft + \"px\";\n\n\t\tif (i == _this66.leftColumns.length - 1) {\n\t\t\tcolumn.modules.frozen.edge = true;\n\t\t} else {\n\t\t\tcolumn.modules.frozen.edge = false;\n\t\t}\n\n\t\tif (column.parent.isGroup) {\n\t\t\tvar parentEl = _this66.getColGroupParentElement(column);\n\t\t\tif (!leftParents.includes(parentEl)) {\n\t\t\t\t_this66.layoutElement(parentEl, column);\n\t\t\t\tleftParents.push(parentEl);\n\t\t\t}\n\n\t\t\tif (column.modules.frozen.edge) {\n\t\t\t\tparentEl.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\n\t\t\t}\n\t\t} else {\n\t\t\t_this66.layoutElement(column.getElement(), column);\n\t\t}\n\n\t\tif (allCells) {\n\t\t\tcolumn.cells.forEach(function (cell) {\n\t\t\t\t_this66.layoutElement(cell.getElement(true), column);\n\t\t\t});\n\t\t}\n\t});\n\n\tthis.rightColumns.forEach(function (column, i) {\n\t\tcolumn.modules.frozen.margin = _this66.rightPadding - _this66._calcSpace(_this66.rightColumns, i + 1) + \"px\";\n\n\t\tif (i == _this66.rightColumns.length - 1) {\n\t\t\tcolumn.modules.frozen.edge = true;\n\t\t} else {\n\t\t\tcolumn.modules.frozen.edge = false;\n\t\t}\n\n\t\tif (column.parent.isGroup) {\n\t\t\t_this66.layoutElement(_this66.getColGroupParentElement(column), column);\n\t\t} else {\n\t\t\t_this66.layoutElement(column.getElement(), column);\n\t\t}\n\n\t\tif (allCells) {\n\t\t\tcolumn.cells.forEach(function (cell) {\n\t\t\t\t_this66.layoutElement(cell.getElement(true), column);\n\t\t\t});\n\t\t}\n\t});\n};\n\nFrozenColumns.prototype.getColGroupParentElement = function (column) {\n\treturn column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();\n};\n\n//layout columns appropropriatly\nFrozenColumns.prototype.layout = function () {\n\tvar self = this,\n\t rightMargin = 0;\n\n\tif (self.active) {\n\n\t\t//calculate row padding\n\t\tthis.calcMargins();\n\n\t\t// self.table.rowManager.activeRows.forEach(function(row){\n\t\t// \tself.layoutRow(row);\n\t\t// });\n\n\t\t// if(self.table.options.dataTree){\n\t\tself.table.rowManager.getDisplayRows().forEach(function (row) {\n\t\t\tif (row.type === \"row\") {\n\t\t\t\tself.layoutRow(row);\n\t\t\t}\n\t\t});\n\t\t// }\n\n\t\tthis.layoutCalcRows();\n\n\t\t//calculate left columns\n\t\tthis.layoutColumnPosition(true);\n\n\t\t// if(tableHolder.scrollHeight > tableHolder.clientHeight){\n\t\t// \trightMargin -= tableHolder.offsetWidth - tableHolder.clientWidth;\n\t\t// }\n\n\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\n\t}\n};\n\nFrozenColumns.prototype.layoutRow = function (row) {\n\tvar _this67 = this;\n\n\tvar rowEl = row.getElement();\n\n\trowEl.style.paddingLeft = this.leftMargin;\n\t// rowEl.style.paddingRight = this.rightMargin + \"px\";\n\n\tthis.leftColumns.forEach(function (column) {\n\t\tvar cell = row.getCell(column);\n\n\t\tif (cell) {\n\t\t\t_this67.layoutElement(cell.getElement(true), column);\n\t\t}\n\t});\n\n\tthis.rightColumns.forEach(function (column) {\n\t\tvar cell = row.getCell(column);\n\n\t\tif (cell) {\n\t\t\t_this67.layoutElement(cell.getElement(true), column);\n\t\t}\n\t});\n};\n\nFrozenColumns.prototype.layoutElement = function (element, column) {\n\n\tif (column.modules.frozen) {\n\t\telement.style.position = \"absolute\";\n\t\telement.style.left = column.modules.frozen.margin;\n\n\t\telement.classList.add(\"tabulator-frozen\");\n\n\t\tif (column.modules.frozen.edge) {\n\t\t\telement.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\n\t\t}\n\t}\n};\n\nFrozenColumns.prototype._calcSpace = function (columns, index) {\n\tvar width = 0;\n\n\tfor (var _i12 = 0; _i12 < index; _i12++) {\n\t\tif (columns[_i12].visible) {\n\t\t\twidth += columns[_i12].getWidth();\n\t\t}\n\t}\n\n\treturn width;\n};\n\nTabulator.prototype.registerModule(\"frozenColumns\", FrozenColumns);\nvar FrozenRows = function FrozenRows(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.topElement = document.createElement(\"div\");\n\tthis.rows = [];\n\tthis.displayIndex = 0; //index in display pipeline\n};\n\nFrozenRows.prototype.initialize = function () {\n\tthis.rows = [];\n\n\tthis.topElement.classList.add(\"tabulator-frozen-rows-holder\");\n\n\t// this.table.columnManager.element.append(this.topElement);\n\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\n};\n\nFrozenRows.prototype.setDisplayIndex = function (index) {\n\tthis.displayIndex = index;\n};\n\nFrozenRows.prototype.getDisplayIndex = function () {\n\treturn this.displayIndex;\n};\n\nFrozenRows.prototype.isFrozen = function () {\n\treturn !!this.rows.length;\n};\n\n//filter frozen rows out of display data\nFrozenRows.prototype.getRows = function (rows) {\n\tvar self = this,\n\t frozen = [],\n\t output = rows.slice(0);\n\n\tthis.rows.forEach(function (row) {\n\t\tvar index = output.indexOf(row);\n\n\t\tif (index > -1) {\n\t\t\toutput.splice(index, 1);\n\t\t}\n\t});\n\n\treturn output;\n};\n\nFrozenRows.prototype.freezeRow = function (row) {\n\tif (!row.modules.frozen) {\n\t\trow.modules.frozen = true;\n\t\tthis.topElement.appendChild(row.getElement());\n\t\trow.initialize();\n\t\trow.normalizeHeight();\n\t\tthis.table.rowManager.adjustTableSize();\n\n\t\tthis.rows.push(row);\n\n\t\tthis.table.rowManager.refreshActiveData(\"display\");\n\n\t\tthis.styleRows();\n\t} else {\n\t\tconsole.warn(\"Freeze Error - Row is already frozen\");\n\t}\n};\n\nFrozenRows.prototype.unfreezeRow = function (row) {\n\tvar index = this.rows.indexOf(row);\n\n\tif (row.modules.frozen) {\n\n\t\trow.modules.frozen = false;\n\n\t\tthis.detachRow(row);\n\n\t\tthis.table.rowManager.adjustTableSize();\n\n\t\tthis.table.rowManager.refreshActiveData(\"display\");\n\n\t\tif (this.rows.length) {\n\t\t\tthis.styleRows();\n\t\t}\n\t} else {\n\t\tconsole.warn(\"Freeze Error - Row is already unfrozen\");\n\t}\n};\n\nFrozenRows.prototype.detachRow = function (row) {\n\tvar index = this.rows.indexOf(row);\n\n\tif (index > -1) {\n\t\tvar rowEl = row.getElement();\n\t\trowEl.parentNode.removeChild(rowEl);\n\n\t\tthis.rows.splice(index, 1);\n\t}\n};\n\nFrozenRows.prototype.styleRows = function (row) {\n\tvar self = this;\n\n\tthis.rows.forEach(function (row, i) {\n\t\tself.table.rowManager.styleRow(row, i);\n\t});\n};\n\nTabulator.prototype.registerModule(\"frozenRows\", FrozenRows);\n\n//public group object\nvar GroupComponent = function GroupComponent(group) {\n\tthis._group = group;\n\tthis.type = \"GroupComponent\";\n};\n\nGroupComponent.prototype.getKey = function () {\n\treturn this._group.key;\n};\n\nGroupComponent.prototype.getField = function () {\n\treturn this._group.field;\n};\n\nGroupComponent.prototype.getElement = function () {\n\treturn this._group.element;\n};\n\nGroupComponent.prototype.getRows = function () {\n\treturn this._group.getRows(true);\n};\n\nGroupComponent.prototype.getSubGroups = function () {\n\treturn this._group.getSubGroups(true);\n};\n\nGroupComponent.prototype.getParentGroup = function () {\n\treturn this._group.parent ? this._group.parent.getComponent() : false;\n};\n\nGroupComponent.prototype.getVisibility = function () {\n\tconsole.warn(\"getVisibility function is deprecated, you should now use the isVisible function\");\n\treturn this._group.visible;\n};\n\nGroupComponent.prototype.isVisible = function () {\n\treturn this._group.visible;\n};\n\nGroupComponent.prototype.show = function () {\n\tthis._group.show();\n};\n\nGroupComponent.prototype.hide = function () {\n\tthis._group.hide();\n};\n\nGroupComponent.prototype.toggle = function () {\n\tthis._group.toggleVisibility();\n};\n\nGroupComponent.prototype._getSelf = function () {\n\treturn this._group;\n};\n\nGroupComponent.prototype.getTable = function () {\n\treturn this._group.groupManager.table;\n};\n\n//////////////////////////////////////////////////\n//////////////// Group Functions /////////////////\n//////////////////////////////////////////////////\n\nvar Group = function Group(groupManager, parent, level, key, field, generator, oldGroup) {\n\n\tthis.groupManager = groupManager;\n\tthis.parent = parent;\n\tthis.key = key;\n\tthis.level = level;\n\tthis.field = field;\n\tthis.hasSubGroups = level < groupManager.groupIDLookups.length - 1;\n\tthis.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;\n\tthis.type = \"group\"; //type of element\n\tthis.old = oldGroup;\n\tthis.rows = [];\n\tthis.groups = [];\n\tthis.groupList = [];\n\tthis.generator = generator;\n\tthis.elementContents = false;\n\tthis.height = 0;\n\tthis.outerHeight = 0;\n\tthis.initialized = false;\n\tthis.calcs = {};\n\tthis.initialized = false;\n\tthis.modules = {};\n\tthis.arrowElement = false;\n\n\tthis.visible = oldGroup ? oldGroup.visible : typeof groupManager.startOpen[level] !== \"undefined\" ? groupManager.startOpen[level] : groupManager.startOpen[0];\n\n\tthis.component = null;\n\n\tthis.createElements();\n\tthis.addBindings();\n\n\tthis.createValueGroups();\n};\n\nGroup.prototype.wipe = function () {\n\tif (this.groupList.length) {\n\t\tthis.groupList.forEach(function (group) {\n\t\t\tgroup.wipe();\n\t\t});\n\t} else {\n\t\tthis.element = false;\n\t\tthis.arrowElement = false;\n\t\tthis.elementContents = false;\n\t}\n};\n\nGroup.prototype.createElements = function () {\n\tvar arrow = document.createElement(\"div\");\n\tarrow.classList.add(\"tabulator-arrow\");\n\n\tthis.element = document.createElement(\"div\");\n\tthis.element.classList.add(\"tabulator-row\");\n\tthis.element.classList.add(\"tabulator-group\");\n\tthis.element.classList.add(\"tabulator-group-level-\" + this.level);\n\tthis.element.setAttribute(\"role\", \"rowgroup\");\n\n\tthis.arrowElement = document.createElement(\"div\");\n\tthis.arrowElement.classList.add(\"tabulator-group-toggle\");\n\tthis.arrowElement.appendChild(arrow);\n\n\t//setup movable rows\n\tif (this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists(\"moveRow\")) {\n\t\tthis.groupManager.table.modules.moveRow.initializeGroupHeader(this);\n\t}\n};\n\nGroup.prototype.createValueGroups = function () {\n\tvar _this68 = this;\n\n\tvar level = this.level + 1;\n\tif (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) {\n\t\tthis.groupManager.allowedValues[level].forEach(function (value) {\n\t\t\t_this68._createGroup(value, level);\n\t\t});\n\t}\n};\n\nGroup.prototype.addBindings = function () {\n\tvar self = this,\n\t dblTap,\n\t tapHold,\n\t tap,\n\t toggleElement;\n\n\t//handle group click events\n\tif (self.groupManager.table.options.groupClick) {\n\t\tself.element.addEventListener(\"click\", function (e) {\n\t\t\tself.groupManager.table.options.groupClick.call(self.groupManager.table, e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.groupManager.table.options.groupDblClick) {\n\t\tself.element.addEventListener(\"dblclick\", function (e) {\n\t\t\tself.groupManager.table.options.groupDblClick.call(self.groupManager.table, e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.groupManager.table.options.groupContext) {\n\t\tself.element.addEventListener(\"contextmenu\", function (e) {\n\t\t\tself.groupManager.table.options.groupContext.call(self.groupManager.table, e, self.getComponent());\n\t\t});\n\t}\n\n\tif ((self.groupManager.table.options.groupContextMenu || self.groupManager.table.options.groupClickMenu) && self.groupManager.table.modExists(\"menu\")) {\n\t\tself.groupManager.table.modules.menu.initializeGroup.call(self.groupManager.table.modules.menu, self);\n\t}\n\n\tif (self.groupManager.table.options.groupTap) {\n\n\t\ttap = false;\n\n\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\t\t\ttap = true;\n\t\t}, { passive: true });\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\t\t\tif (tap) {\n\t\t\t\tself.groupManager.table.options.groupTap(e, self.getComponent());\n\t\t\t}\n\n\t\t\ttap = false;\n\t\t});\n\t}\n\n\tif (self.groupManager.table.options.groupDblTap) {\n\n\t\tdblTap = null;\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\n\t\t\tif (dblTap) {\n\t\t\t\tclearTimeout(dblTap);\n\t\t\t\tdblTap = null;\n\n\t\t\t\tself.groupManager.table.options.groupDblTap(e, self.getComponent());\n\t\t\t} else {\n\n\t\t\t\tdblTap = setTimeout(function () {\n\t\t\t\t\tclearTimeout(dblTap);\n\t\t\t\t\tdblTap = null;\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (self.groupManager.table.options.groupTapHold) {\n\n\t\ttapHold = null;\n\n\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\n\t\t\ttapHold = setTimeout(function () {\n\t\t\t\tclearTimeout(tapHold);\n\t\t\t\ttapHold = null;\n\t\t\t\ttap = false;\n\t\t\t\tself.groupManager.table.options.groupTapHold(e, self.getComponent());\n\t\t\t}, 1000);\n\t\t}, { passive: true });\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\t\t\ttapHold = null;\n\t\t});\n\t}\n\n\tif (self.groupManager.table.options.groupToggleElement) {\n\t\ttoggleElement = self.groupManager.table.options.groupToggleElement == \"arrow\" ? self.arrowElement : self.element;\n\n\t\ttoggleElement.addEventListener(\"click\", function (e) {\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t\tself.toggleVisibility();\n\t\t});\n\t}\n};\n\nGroup.prototype._createGroup = function (groupID, level) {\n\tvar groupKey = level + \"_\" + groupID;\n\tvar group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);\n\n\tthis.groups[groupKey] = group;\n\tthis.groupList.push(group);\n};\n\nGroup.prototype._addRowToGroup = function (row) {\n\n\tvar level = this.level + 1;\n\n\tif (this.hasSubGroups) {\n\t\tvar groupID = this.groupManager.groupIDLookups[level].func(row.getData()),\n\t\t groupKey = level + \"_\" + groupID;\n\n\t\tif (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) {\n\t\t\tif (this.groups[groupKey]) {\n\t\t\t\tthis.groups[groupKey].addRow(row);\n\t\t\t}\n\t\t} else {\n\t\t\tif (!this.groups[groupKey]) {\n\t\t\t\tthis._createGroup(groupID, level);\n\t\t\t}\n\n\t\t\tthis.groups[groupKey].addRow(row);\n\t\t}\n\t}\n};\n\nGroup.prototype._addRow = function (row) {\n\tthis.rows.push(row);\n\trow.modules.group = this;\n};\n\nGroup.prototype.insertRow = function (row, to, after) {\n\tvar data = this.conformRowData({});\n\n\trow.updateData(data);\n\n\tvar toIndex = this.rows.indexOf(to);\n\n\tif (toIndex > -1) {\n\t\tif (after) {\n\t\t\tthis.rows.splice(toIndex + 1, 0, row);\n\t\t} else {\n\t\t\tthis.rows.splice(toIndex, 0, row);\n\t\t}\n\t} else {\n\t\tif (after) {\n\t\t\tthis.rows.push(row);\n\t\t} else {\n\t\t\tthis.rows.unshift(row);\n\t\t}\n\t}\n\n\trow.modules.group = this;\n\n\tthis.generateGroupHeaderContents();\n\n\tif (this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\") {\n\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\n\t}\n\n\tthis.groupManager.updateGroupRows(true);\n};\n\nGroup.prototype.scrollHeader = function (left) {\n\tthis.arrowElement.style.marginLeft = left;\n\n\tthis.groupList.forEach(function (child) {\n\t\tchild.scrollHeader(left);\n\t});\n};\n\nGroup.prototype.getRowIndex = function (row) {};\n\n//update row data to match grouping contraints\nGroup.prototype.conformRowData = function (data) {\n\tif (this.field) {\n\t\tdata[this.field] = this.key;\n\t} else {\n\t\tconsole.warn(\"Data Conforming Error - Cannot conform row data to match new group as groupBy is a function\");\n\t}\n\n\tif (this.parent) {\n\t\tdata = this.parent.conformRowData(data);\n\t}\n\n\treturn data;\n};\n\nGroup.prototype.removeRow = function (row) {\n\tvar index = this.rows.indexOf(row);\n\tvar el = row.getElement();\n\n\tif (index > -1) {\n\t\tthis.rows.splice(index, 1);\n\t}\n\n\tif (!this.groupManager.table.options.groupValues && !this.rows.length) {\n\t\tif (this.parent) {\n\t\t\tthis.parent.removeGroup(this);\n\t\t} else {\n\t\t\tthis.groupManager.removeGroup(this);\n\t\t}\n\n\t\tthis.groupManager.updateGroupRows(true);\n\t} else {\n\n\t\tif (el.parentNode) {\n\t\t\tel.parentNode.removeChild(el);\n\t\t}\n\n\t\tthis.generateGroupHeaderContents();\n\n\t\tif (this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\") {\n\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\n\t\t}\n\t}\n};\n\nGroup.prototype.removeGroup = function (group) {\n\tvar groupKey = group.level + \"_\" + group.key,\n\t index;\n\n\tif (this.groups[groupKey]) {\n\t\tdelete this.groups[groupKey];\n\n\t\tindex = this.groupList.indexOf(group);\n\n\t\tif (index > -1) {\n\t\t\tthis.groupList.splice(index, 1);\n\t\t}\n\n\t\tif (!this.groupList.length) {\n\t\t\tif (this.parent) {\n\t\t\t\tthis.parent.removeGroup(this);\n\t\t\t} else {\n\t\t\t\tthis.groupManager.removeGroup(this);\n\t\t\t}\n\t\t}\n\t}\n};\n\nGroup.prototype.getHeadersAndRows = function (noCalc) {\n\tvar output = [];\n\n\toutput.push(this);\n\n\tthis._visSet();\n\n\tif (this.visible) {\n\t\tif (this.groupList.length) {\n\t\t\tthis.groupList.forEach(function (group) {\n\t\t\t\toutput = output.concat(group.getHeadersAndRows(noCalc));\n\t\t\t});\n\t\t} else {\n\t\t\tif (!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) {\n\t\t\t\tif (this.calcs.top) {\n\t\t\t\t\tthis.calcs.top.detachElement();\n\t\t\t\t\tthis.calcs.top.deleteCells();\n\t\t\t\t}\n\n\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\n\t\t\t\toutput.push(this.calcs.top);\n\t\t\t}\n\n\t\t\toutput = output.concat(this.rows);\n\n\t\t\tif (!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) {\n\t\t\t\tif (this.calcs.bottom) {\n\t\t\t\t\tthis.calcs.bottom.detachElement();\n\t\t\t\t\tthis.calcs.bottom.deleteCells();\n\t\t\t\t}\n\n\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\n\t\t\t\toutput.push(this.calcs.bottom);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (!this.groupList.length && this.groupManager.table.options.columnCalcs != \"table\") {\n\n\t\t\tif (this.groupManager.table.modExists(\"columnCalcs\")) {\n\n\t\t\t\tif (!noCalc && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) {\n\t\t\t\t\tif (this.calcs.top) {\n\t\t\t\t\t\tthis.calcs.top.detachElement();\n\t\t\t\t\t\tthis.calcs.top.deleteCells();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.groupManager.table.options.groupClosedShowCalcs) {\n\t\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\n\t\t\t\t\t\toutput.push(this.calcs.top);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!noCalc && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) {\n\t\t\t\t\tif (this.calcs.bottom) {\n\t\t\t\t\t\tthis.calcs.bottom.detachElement();\n\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.groupManager.table.options.groupClosedShowCalcs) {\n\t\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\n\t\t\t\t\t\toutput.push(this.calcs.bottom);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output;\n};\n\nGroup.prototype.getData = function (visible, transform) {\n\tvar self = this,\n\t output = [];\n\n\tthis._visSet();\n\n\tif (!visible || visible && this.visible) {\n\t\tthis.rows.forEach(function (row) {\n\t\t\toutput.push(row.getData(transform || \"data\"));\n\t\t});\n\t}\n\n\treturn output;\n};\n\n// Group.prototype.getRows = function(){\n// \tthis._visSet();\n\n// \treturn this.visible ? this.rows : [];\n// };\n\nGroup.prototype.getRowCount = function () {\n\tvar count = 0;\n\n\tif (this.groupList.length) {\n\t\tthis.groupList.forEach(function (group) {\n\t\t\tcount += group.getRowCount();\n\t\t});\n\t} else {\n\t\tcount = this.rows.length;\n\t}\n\treturn count;\n};\n\nGroup.prototype.toggleVisibility = function () {\n\tif (this.visible) {\n\t\tthis.hide();\n\t} else {\n\t\tthis.show();\n\t}\n};\n\nGroup.prototype.hide = function () {\n\tthis.visible = false;\n\n\tif (this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination) {\n\n\t\tthis.element.classList.remove(\"tabulator-group-visible\");\n\n\t\tif (this.groupList.length) {\n\t\t\tthis.groupList.forEach(function (group) {\n\n\t\t\t\tvar rows = group.getHeadersAndRows();\n\n\t\t\t\trows.forEach(function (row) {\n\t\t\t\t\trow.detachElement();\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tthis.rows.forEach(function (row) {\n\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t});\n\t\t}\n\n\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\n\n\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\n\t} else {\n\t\tthis.groupManager.updateGroupRows(true);\n\t}\n\n\tthis.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), false);\n};\n\nGroup.prototype.show = function () {\n\tvar self = this;\n\n\tself.visible = true;\n\n\tif (this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination) {\n\n\t\tthis.element.classList.add(\"tabulator-group-visible\");\n\n\t\tvar prev = self.getElement();\n\n\t\tif (this.groupList.length) {\n\t\t\tthis.groupList.forEach(function (group) {\n\t\t\t\tvar rows = group.getHeadersAndRows();\n\n\t\t\t\trows.forEach(function (row) {\n\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\n\t\t\t\t\trow.initialize();\n\t\t\t\t\tprev = rowEl;\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tself.rows.forEach(function (row) {\n\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\n\t\t\t\trow.initialize();\n\t\t\t\tprev = rowEl;\n\t\t\t});\n\t\t}\n\n\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\n\n\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\n\t} else {\n\t\tthis.groupManager.updateGroupRows(true);\n\t}\n\n\tthis.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), true);\n};\n\nGroup.prototype._visSet = function () {\n\tvar data = [];\n\n\tif (typeof this.visible == \"function\") {\n\n\t\tthis.rows.forEach(function (row) {\n\t\t\tdata.push(row.getData());\n\t\t});\n\n\t\tthis.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());\n\t}\n};\n\nGroup.prototype.getRowGroup = function (row) {\n\tvar match = false;\n\tif (this.groupList.length) {\n\t\tthis.groupList.forEach(function (group) {\n\t\t\tvar result = group.getRowGroup(row);\n\n\t\t\tif (result) {\n\t\t\t\tmatch = result;\n\t\t\t}\n\t\t});\n\t} else {\n\t\tif (this.rows.find(function (item) {\n\t\t\treturn item === row;\n\t\t})) {\n\t\t\tmatch = this;\n\t\t}\n\t}\n\n\treturn match;\n};\n\nGroup.prototype.getSubGroups = function (component) {\n\tvar output = [];\n\n\tthis.groupList.forEach(function (child) {\n\t\toutput.push(component ? child.getComponent() : child);\n\t});\n\n\treturn output;\n};\n\nGroup.prototype.getRows = function (compoment) {\n\tvar output = [];\n\n\tthis.rows.forEach(function (row) {\n\t\toutput.push(compoment ? row.getComponent() : row);\n\t});\n\n\treturn output;\n};\n\nGroup.prototype.generateGroupHeaderContents = function () {\n\tvar data = [];\n\n\tthis.rows.forEach(function (row) {\n\t\tdata.push(row.getData());\n\t});\n\n\tthis.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());\n\n\twhile (this.element.firstChild) {\n\t\tthis.element.removeChild(this.element.firstChild);\n\t}if (typeof this.elementContents === \"string\") {\n\t\tthis.element.innerHTML = this.elementContents;\n\t} else {\n\t\tthis.element.appendChild(this.elementContents);\n\t}\n\n\tthis.element.insertBefore(this.arrowElement, this.element.firstChild);\n};\n\nGroup.prototype.getPath = function () {\n\tvar path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n\tpath.unshift(this.key);\n\tif (this.parent) {\n\t\tthis.parent.getPath(path);\n\t}\n\treturn path;\n};\n////////////// Standard Row Functions //////////////\n\nGroup.prototype.getElement = function () {\n\tthis.addBindingsd = false;\n\n\tthis._visSet();\n\n\tif (this.visible) {\n\t\tthis.element.classList.add(\"tabulator-group-visible\");\n\t} else {\n\t\tthis.element.classList.remove(\"tabulator-group-visible\");\n\t}\n\n\tfor (var i = 0; i < this.element.childNodes.length; ++i) {\n\t\tthis.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);\n\t}\n\n\tthis.generateGroupHeaderContents();\n\n\t// this.addBindings();\n\n\treturn this.element;\n};\n\nGroup.prototype.detachElement = function () {\n\tif (this.element && this.element.parentNode) {\n\t\tthis.element.parentNode.removeChild(this.element);\n\t}\n};\n\n//normalize the height of elements in the row\nGroup.prototype.normalizeHeight = function () {\n\tthis.setHeight(this.element.clientHeight);\n};\n\nGroup.prototype.initialize = function (force) {\n\tif (!this.initialized || force) {\n\t\tthis.normalizeHeight();\n\t\tthis.initialized = true;\n\t}\n};\n\nGroup.prototype.reinitialize = function () {\n\tthis.initialized = false;\n\tthis.height = 0;\n\n\tif (Tabulator.prototype.helpers.elVisible(this.element)) {\n\t\tthis.initialize(true);\n\t}\n};\n\nGroup.prototype.setHeight = function (height) {\n\tif (this.height != height) {\n\t\tthis.height = height;\n\t\tthis.outerHeight = this.element.offsetHeight;\n\t}\n};\n\n//return rows outer height\nGroup.prototype.getHeight = function () {\n\treturn this.outerHeight;\n};\n\nGroup.prototype.getGroup = function () {\n\treturn this;\n};\n\nGroup.prototype.reinitializeHeight = function () {};\nGroup.prototype.calcHeight = function () {};\nGroup.prototype.setCellHeight = function () {};\nGroup.prototype.clearCellHeight = function () {};\n\n//////////////// Object Generation /////////////////\nGroup.prototype.getComponent = function () {\n\tif (!this.component) {\n\t\tthis.component = new GroupComponent(this);\n\t}\n\n\treturn this.component;\n};\n\n//////////////////////////////////////////////////\n////////////// Group Row Extension ///////////////\n//////////////////////////////////////////////////\n\nvar GroupRows = function GroupRows(table) {\n\n\tthis.table = table; //hold Tabulator object\n\n\tthis.groupIDLookups = false; //enable table grouping and set field to group by\n\tthis.startOpen = [function () {\n\t\treturn false;\n\t}]; //starting state of group\n\tthis.headerGenerator = [function () {\n\t\treturn \"\";\n\t}];\n\tthis.groupList = []; //ordered list of groups\n\tthis.allowedValues = false;\n\tthis.groups = {}; //hold row groups\n\tthis.displayIndex = 0; //index in display pipeline\n};\n\n//initialize group configuration\nGroupRows.prototype.initialize = function () {\n\tvar self = this,\n\t groupBy = self.table.options.groupBy,\n\t startOpen = self.table.options.groupStartOpen,\n\t groupHeader = self.table.options.groupHeader;\n\n\tthis.allowedValues = self.table.options.groupValues;\n\n\tif (Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length) {\n\t\tconsole.warn(\"Error creating group headers, groupHeader array is shorter than groupBy array\");\n\t}\n\n\tself.headerGenerator = [function () {\n\t\treturn \"\";\n\t}];\n\tthis.startOpen = [function () {\n\t\treturn false;\n\t}]; //starting state of group\n\n\tself.table.modules.localize.bind(\"groups|item\", function (langValue, lang) {\n\t\tself.headerGenerator[0] = function (value, count, data) {\n\t\t\t//header layout function\n\t\t\treturn (typeof value === \"undefined\" ? \"\" : value) + \"(\" + count + \" \" + (count === 1 ? langValue : lang.groups.items) + \")\";\n\t\t};\n\t});\n\n\tthis.groupIDLookups = [];\n\n\tif (Array.isArray(groupBy) || groupBy) {\n\t\tif (this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"table\" && this.table.options.columnCalcs != \"both\") {\n\t\t\tthis.table.modules.columnCalcs.removeCalcs();\n\t\t}\n\t} else {\n\t\tif (this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"group\") {\n\n\t\t\tvar cols = this.table.columnManager.getRealColumns();\n\n\t\t\tcols.forEach(function (col) {\n\t\t\t\tif (col.definition.topCalc) {\n\t\t\t\t\tself.table.modules.columnCalcs.initializeTopRow();\n\t\t\t\t}\n\n\t\t\t\tif (col.definition.bottomCalc) {\n\t\t\t\t\tself.table.modules.columnCalcs.initializeBottomRow();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tif (!Array.isArray(groupBy)) {\n\t\tgroupBy = [groupBy];\n\t}\n\n\tgroupBy.forEach(function (group, i) {\n\t\tvar lookupFunc, column;\n\n\t\tif (typeof group == \"function\") {\n\t\t\tlookupFunc = group;\n\t\t} else {\n\t\t\tcolumn = self.table.columnManager.getColumnByField(group);\n\n\t\t\tif (column) {\n\t\t\t\tlookupFunc = function lookupFunc(data) {\n\t\t\t\t\treturn column.getFieldValue(data);\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tlookupFunc = function lookupFunc(data) {\n\t\t\t\t\treturn data[group];\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tself.groupIDLookups.push({\n\t\t\tfield: typeof group === \"function\" ? false : group,\n\t\t\tfunc: lookupFunc,\n\t\t\tvalues: self.allowedValues ? self.allowedValues[i] : false\n\t\t});\n\t});\n\n\tif (startOpen) {\n\n\t\tif (!Array.isArray(startOpen)) {\n\t\t\tstartOpen = [startOpen];\n\t\t}\n\n\t\tstartOpen.forEach(function (level) {\n\t\t\tlevel = typeof level == \"function\" ? level : function () {\n\t\t\t\treturn true;\n\t\t\t};\n\t\t});\n\n\t\tself.startOpen = startOpen;\n\t}\n\n\tif (groupHeader) {\n\t\tself.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];\n\t}\n\n\tthis.initialized = true;\n};\n\nGroupRows.prototype.setDisplayIndex = function (index) {\n\tthis.displayIndex = index;\n};\n\nGroupRows.prototype.getDisplayIndex = function () {\n\treturn this.displayIndex;\n};\n\n//return appropriate rows with group headers\nGroupRows.prototype.getRows = function (rows) {\n\tif (this.groupIDLookups.length) {\n\n\t\tthis.table.options.dataGrouping.call(this.table);\n\n\t\tthis.generateGroups(rows);\n\n\t\tif (this.table.options.dataGrouped) {\n\t\t\tthis.table.options.dataGrouped.call(this.table, this.getGroups(true));\n\t\t}\n\n\t\treturn this.updateGroupRows();\n\t} else {\n\t\treturn rows.slice(0);\n\t}\n};\n\nGroupRows.prototype.getGroups = function (compoment) {\n\tvar groupComponents = [];\n\n\tthis.groupList.forEach(function (group) {\n\t\tgroupComponents.push(compoment ? group.getComponent() : group);\n\t});\n\n\treturn groupComponents;\n};\n\nGroupRows.prototype.getChildGroups = function (group) {\n\tvar _this69 = this;\n\n\tvar groupComponents = [];\n\n\tif (!group) {\n\t\tgroup = this;\n\t}\n\n\tgroup.groupList.forEach(function (child) {\n\t\tif (child.groupList.length) {\n\t\t\tgroupComponents = groupComponents.concat(_this69.getChildGroups(child));\n\t\t} else {\n\t\t\tgroupComponents.push(child);\n\t\t}\n\t});\n\n\treturn groupComponents;\n};\n\nGroupRows.prototype.wipe = function () {\n\tthis.groupList.forEach(function (group) {\n\t\tgroup.wipe();\n\t});\n};\n\nGroupRows.prototype.pullGroupListData = function (groupList) {\n\tvar self = this;\n\tvar groupListData = [];\n\n\tgroupList.forEach(function (group) {\n\t\tvar groupHeader = {};\n\t\tgroupHeader.level = 0;\n\t\tgroupHeader.rowCount = 0;\n\t\tgroupHeader.headerContent = \"\";\n\t\tvar childData = [];\n\n\t\tif (group.hasSubGroups) {\n\t\t\tchildData = self.pullGroupListData(group.groupList);\n\n\t\t\tgroupHeader.level = group.level;\n\t\t\tgroupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers\n\t\t\tgroupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);\n\n\t\t\tgroupListData.push(groupHeader);\n\t\t\tgroupListData = groupListData.concat(childData);\n\t\t} else {\n\t\t\tgroupHeader.level = group.level;\n\t\t\tgroupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);\n\t\t\tgroupHeader.rowCount = group.getRows().length;\n\n\t\t\tgroupListData.push(groupHeader);\n\n\t\t\tgroup.getRows().forEach(function (row) {\n\t\t\t\tgroupListData.push(row.getData(\"data\"));\n\t\t\t});\n\t\t}\n\t});\n\n\treturn groupListData;\n};\n\nGroupRows.prototype.getGroupedData = function () {\n\n\treturn this.pullGroupListData(this.groupList);\n};\n\nGroupRows.prototype.getRowGroup = function (row) {\n\tvar match = false;\n\n\tthis.groupList.forEach(function (group) {\n\t\tvar result = group.getRowGroup(row);\n\n\t\tif (result) {\n\t\t\tmatch = result;\n\t\t}\n\t});\n\n\treturn match;\n};\n\nGroupRows.prototype.countGroups = function () {\n\treturn this.groupList.length;\n};\n\nGroupRows.prototype.generateGroups = function (rows) {\n\tvar self = this,\n\t oldGroups = self.groups;\n\n\tself.groups = {};\n\tself.groupList = [];\n\n\tif (this.allowedValues && this.allowedValues[0]) {\n\t\tthis.allowedValues[0].forEach(function (value) {\n\t\t\tself.createGroup(value, 0, oldGroups);\n\t\t});\n\n\t\trows.forEach(function (row) {\n\t\t\tself.assignRowToExistingGroup(row, oldGroups);\n\t\t});\n\t} else {\n\t\trows.forEach(function (row) {\n\t\t\tself.assignRowToGroup(row, oldGroups);\n\t\t});\n\t}\n};\n\nGroupRows.prototype.createGroup = function (groupID, level, oldGroups) {\n\tvar groupKey = level + \"_\" + groupID,\n\t group;\n\n\toldGroups = oldGroups || [];\n\n\tgroup = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);\n\n\tthis.groups[groupKey] = group;\n\tthis.groupList.push(group);\n};\n\n// GroupRows.prototype.assignRowToGroup = function(row, oldGroups){\n// \tvar groupID = this.groupIDLookups[0].func(row.getData()),\n// \tgroupKey = \"0_\" + groupID;\n\n// \tif(!this.groups[groupKey]){\n// \t\tthis.createGroup(groupID, 0, oldGroups);\n// \t}\n\n// \tthis.groups[groupKey].addRow(row);\n// };\n\nGroupRows.prototype.assignRowToExistingGroup = function (row, oldGroups) {\n\tvar groupID = this.groupIDLookups[0].func(row.getData()),\n\t groupKey = \"0_\" + groupID;\n\n\tif (this.groups[groupKey]) {\n\t\tthis.groups[groupKey].addRow(row);\n\t}\n};\n\nGroupRows.prototype.assignRowToGroup = function (row, oldGroups) {\n\tvar groupID = this.groupIDLookups[0].func(row.getData()),\n\t newGroupNeeded = !this.groups[\"0_\" + groupID];\n\n\tif (newGroupNeeded) {\n\t\tthis.createGroup(groupID, 0, oldGroups);\n\t}\n\n\tthis.groups[\"0_\" + groupID].addRow(row);\n\n\treturn !newGroupNeeded;\n};\n\nGroupRows.prototype.reassignRowToGroup = function (row) {\n\tvar oldRowGroup = row.getGroup(),\n\t oldGroupPath = oldRowGroup.getPath(),\n\t newGroupPath = this.getExpectedPath(row),\n\t samePath = true;\n\t// figure out if new group path is the same as old group path\n\tvar samePath = oldGroupPath.length == newGroupPath.length && oldGroupPath.every(function (element, index) {\n\t\treturn element === newGroupPath[index];\n\t});\n\t// refresh if they new path and old path aren't the same (aka the row's groupings have changed)\n\tif (!samePath) {\n\t\toldRowGroup.removeRow(row);\n\t\tthis.assignRowToGroup(row, self.groups);\n\t\tthis.table.rowManager.refreshActiveData(\"group\", false, true);\n\t}\n};\n\nGroupRows.prototype.getExpectedPath = function (row) {\n\tvar groupPath = [],\n\t rowData = row.getData();\n\tthis.groupIDLookups.forEach(function (groupId) {\n\t\tgroupPath.push(groupId.func(rowData));\n\t});\n\treturn groupPath;\n};\n\nGroupRows.prototype.updateGroupRows = function (force) {\n\tvar self = this,\n\t output = [],\n\t oldRowCount;\n\n\tself.groupList.forEach(function (group) {\n\t\toutput = output.concat(group.getHeadersAndRows());\n\t});\n\n\t//force update of table display\n\tif (force) {\n\n\t\tvar displayIndex = self.table.rowManager.setDisplayRows(output, this.getDisplayIndex());\n\n\t\tif (displayIndex !== true) {\n\t\t\tthis.setDisplayIndex(displayIndex);\n\t\t}\n\n\t\tself.table.rowManager.refreshActiveData(\"group\", true, true);\n\t}\n\n\treturn output;\n};\n\nGroupRows.prototype.scrollHeaders = function (left) {\n\tif (this.table.options.virtualDomHoz) {\n\t\tleft -= this.table.vdomHoz.vDomPadLeft;\n\t}\n\n\tleft = left + \"px\";\n\n\tthis.groupList.forEach(function (group) {\n\t\tgroup.scrollHeader(left);\n\t});\n};\n\nGroupRows.prototype.removeGroup = function (group) {\n\tvar groupKey = group.level + \"_\" + group.key,\n\t index;\n\n\tif (this.groups[groupKey]) {\n\t\tdelete this.groups[groupKey];\n\n\t\tindex = this.groupList.indexOf(group);\n\n\t\tif (index > -1) {\n\t\t\tthis.groupList.splice(index, 1);\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"groupRows\", GroupRows);\nvar History = function History(table) {\n\tthis.table = table; //hold Tabulator object\n\n\tthis.history = [];\n\tthis.index = -1;\n};\n\nHistory.prototype.clear = function () {\n\tthis.history = [];\n\tthis.index = -1;\n};\n\nHistory.prototype.action = function (type, component, data) {\n\n\tthis.history = this.history.slice(0, this.index + 1);\n\n\tthis.history.push({\n\t\ttype: type,\n\t\tcomponent: component,\n\t\tdata: data\n\t});\n\n\tthis.index++;\n};\n\nHistory.prototype.getHistoryUndoSize = function () {\n\treturn this.index + 1;\n};\n\nHistory.prototype.getHistoryRedoSize = function () {\n\treturn this.history.length - (this.index + 1);\n};\n\nHistory.prototype.clearComponentHistory = function (component) {\n\tvar index = this.history.findIndex(function (item) {\n\t\treturn item.component === component;\n\t});\n\n\tif (index > -1) {\n\t\tthis.history.splice(index, 1);\n\t\tif (index <= this.index) {\n\t\t\tthis.index--;\n\t\t}\n\n\t\tthis.clearComponentHistory(component);\n\t}\n};\n\nHistory.prototype.undo = function () {\n\n\tif (this.index > -1) {\n\t\tvar action = this.history[this.index];\n\n\t\tthis.undoers[action.type].call(this, action);\n\n\t\tthis.index--;\n\n\t\tthis.table.options.historyUndo.call(this.table, action.type, action.component.getComponent(), action.data);\n\n\t\treturn true;\n\t} else {\n\t\tconsole.warn(\"History Undo Error - No more history to undo\");\n\t\treturn false;\n\t}\n};\n\nHistory.prototype.redo = function () {\n\tif (this.history.length - 1 > this.index) {\n\n\t\tthis.index++;\n\n\t\tvar action = this.history[this.index];\n\n\t\tthis.redoers[action.type].call(this, action);\n\n\t\tthis.table.options.historyRedo.call(this.table, action.type, action.component.getComponent(), action.data);\n\n\t\treturn true;\n\t} else {\n\t\tconsole.warn(\"History Redo Error - No more history to redo\");\n\t\treturn false;\n\t}\n};\n\nHistory.prototype.undoers = {\n\tcellEdit: function cellEdit(action) {\n\t\taction.component.setValueProcessData(action.data.oldValue);\n\t},\n\n\trowAdd: function rowAdd(action) {\n\t\taction.component.deleteActual();\n\t},\n\n\trowDelete: function rowDelete(action) {\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\n\n\t\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\n\t\t}\n\n\t\tthis._rebindRow(action.component, newRow);\n\t},\n\n\trowMove: function rowMove(action) {\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posFrom], !action.data.after);\n\t\tthis.table.rowManager.redraw();\n\t}\n};\n\nHistory.prototype.redoers = {\n\tcellEdit: function cellEdit(action) {\n\t\taction.component.setValueProcessData(action.data.newValue);\n\t},\n\n\trowAdd: function rowAdd(action) {\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\n\n\t\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\n\t\t}\n\n\t\tthis._rebindRow(action.component, newRow);\n\t},\n\n\trowDelete: function rowDelete(action) {\n\t\taction.component.deleteActual();\n\t},\n\n\trowMove: function rowMove(action) {\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posTo], action.data.after);\n\t\tthis.table.rowManager.redraw();\n\t}\n};\n\n//rebind rows to new element after deletion\nHistory.prototype._rebindRow = function (oldRow, newRow) {\n\tthis.history.forEach(function (action) {\n\t\tif (action.component instanceof Row) {\n\t\t\tif (action.component === oldRow) {\n\t\t\t\taction.component = newRow;\n\t\t\t}\n\t\t} else if (action.component instanceof Cell) {\n\t\t\tif (action.component.row === oldRow) {\n\t\t\t\tvar field = action.component.column.getField();\n\n\t\t\t\tif (field) {\n\t\t\t\t\taction.component = newRow.getCell(field);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n};\n\nTabulator.prototype.registerModule(\"history\", History);\nvar HtmlTableImport = function HtmlTableImport(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.fieldIndex = [];\n\tthis.hasIndex = false;\n};\n\nHtmlTableImport.prototype.parseTable = function () {\n\tvar self = this,\n\t element = self.table.element,\n\t options = self.table.options,\n\t columns = options.columns,\n\t headers = element.getElementsByTagName(\"th\"),\n\t rows = element.getElementsByTagName(\"tbody\")[0],\n\t data = [],\n\t newTable;\n\n\tself.hasIndex = false;\n\n\tself.table.options.htmlImporting.call(this.table);\n\n\trows = rows ? rows.getElementsByTagName(\"tr\") : [];\n\n\t//check for tablator inline options\n\tself._extractOptions(element, options);\n\n\tif (headers.length) {\n\t\tself._extractHeaders(headers, rows);\n\t} else {\n\t\tself._generateBlankHeaders(headers, rows);\n\t}\n\n\t//iterate through table rows and build data set\n\tfor (var index = 0; index < rows.length; index++) {\n\t\tvar row = rows[index],\n\t\t cells = row.getElementsByTagName(\"td\"),\n\t\t item = {};\n\n\t\t//create index if the dont exist in table\n\t\tif (!self.hasIndex) {\n\t\t\titem[options.index] = index;\n\t\t}\n\n\t\tfor (var i = 0; i < cells.length; i++) {\n\t\t\tvar cell = cells[i];\n\t\t\tif (typeof this.fieldIndex[i] !== \"undefined\") {\n\t\t\t\titem[this.fieldIndex[i]] = cell.innerHTML;\n\t\t\t}\n\t\t}\n\n\t\t//add row data to item\n\t\tdata.push(item);\n\t}\n\n\t//create new element\n\tvar newElement = document.createElement(\"div\");\n\n\t//transfer attributes to new element\n\tvar attributes = element.attributes;\n\n\t// loop through attributes and apply them on div\n\n\tfor (var i in attributes) {\n\t\tif (_typeof(attributes[i]) == \"object\") {\n\t\t\tnewElement.setAttribute(attributes[i].name, attributes[i].value);\n\t\t}\n\t}\n\n\t// replace table with div element\n\telement.parentNode.replaceChild(newElement, element);\n\n\toptions.data = data;\n\n\tself.table.options.htmlImported.call(this.table);\n\n\t// // newElement.tabulator(options);\n\n\tthis.table.element = newElement;\n};\n\n//extract tabulator attribute options\nHtmlTableImport.prototype._extractOptions = function (element, options, defaultOptions) {\n\tvar attributes = element.attributes;\n\tvar optionsArr = defaultOptions ? Object.assign([], defaultOptions) : Object.keys(options);\n\tvar optionsList = {};\n\n\toptionsArr.forEach(function (item) {\n\t\toptionsList[item.toLowerCase()] = item;\n\t});\n\n\tfor (var index in attributes) {\n\t\tvar attrib = attributes[index];\n\t\tvar name;\n\n\t\tif (attrib && (typeof attrib === 'undefined' ? 'undefined' : _typeof(attrib)) == \"object\" && attrib.name && attrib.name.indexOf(\"tabulator-\") === 0) {\n\t\t\tname = attrib.name.replace(\"tabulator-\", \"\");\n\n\t\t\tif (typeof optionsList[name] !== \"undefined\") {\n\t\t\t\toptions[optionsList[name]] = this._attribValue(attrib.value);\n\t\t\t}\n\t\t}\n\t}\n};\n\n//get value of attribute\nHtmlTableImport.prototype._attribValue = function (value) {\n\tif (value === \"true\") {\n\t\treturn true;\n\t}\n\n\tif (value === \"false\") {\n\t\treturn false;\n\t}\n\n\treturn value;\n};\n\n//find column if it has already been defined\nHtmlTableImport.prototype._findCol = function (title) {\n\tvar match = this.table.options.columns.find(function (column) {\n\t\treturn column.title === title;\n\t});\n\n\treturn match || false;\n};\n\n//extract column from headers\nHtmlTableImport.prototype._extractHeaders = function (headers, rows) {\n\tfor (var index = 0; index < headers.length; index++) {\n\t\tvar header = headers[index],\n\t\t exists = false,\n\t\t col = this._findCol(header.textContent),\n\t\t width,\n\t\t attributes;\n\n\t\tif (col) {\n\t\t\texists = true;\n\t\t} else {\n\t\t\tcol = { title: header.textContent.trim() };\n\t\t}\n\n\t\tif (!col.field) {\n\t\t\tcol.field = header.textContent.trim().toLowerCase().replace(\" \", \"_\");\n\t\t}\n\n\t\twidth = header.getAttribute(\"width\");\n\n\t\tif (width && !col.width) {\n\t\t\tcol.width = width;\n\t\t}\n\n\t\t//check for tablator inline options\n\t\tattributes = header.attributes;\n\n\t\t// //check for tablator inline options\n\t\tthis._extractOptions(header, col, Column.prototype.defaultOptionList);\n\n\t\tthis.fieldIndex[index] = col.field;\n\n\t\tif (col.field == this.table.options.index) {\n\t\t\tthis.hasIndex = true;\n\t\t}\n\n\t\tif (!exists) {\n\t\t\tthis.table.options.columns.push(col);\n\t\t}\n\t}\n};\n\n//generate blank headers\nHtmlTableImport.prototype._generateBlankHeaders = function (headers, rows) {\n\tfor (var index = 0; index < headers.length; index++) {\n\t\tvar header = headers[index],\n\t\t col = { title: \"\", field: \"col\" + index };\n\n\t\tthis.fieldIndex[index] = col.field;\n\n\t\tvar width = header.getAttribute(\"width\");\n\n\t\tif (width) {\n\t\t\tcol.width = width;\n\t\t}\n\n\t\tthis.table.options.columns.push(col);\n\t}\n};\n\nTabulator.prototype.registerModule(\"htmlTableImport\", HtmlTableImport);\nvar Keybindings = function Keybindings(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.watchKeys = null;\n\tthis.pressedKeys = null;\n\tthis.keyupBinding = false;\n\tthis.keydownBinding = false;\n};\n\nKeybindings.prototype.initialize = function () {\n\tvar bindings = this.table.options.keybindings,\n\t mergedBindings = {};\n\n\tthis.watchKeys = {};\n\tthis.pressedKeys = [];\n\n\tif (bindings !== false) {\n\n\t\tfor (var key in this.bindings) {\n\t\t\tmergedBindings[key] = this.bindings[key];\n\t\t}\n\n\t\tif (Object.keys(bindings).length) {\n\n\t\t\tfor (var _key in bindings) {\n\t\t\t\tmergedBindings[_key] = bindings[_key];\n\t\t\t}\n\t\t}\n\n\t\tthis.mapBindings(mergedBindings);\n\t\tthis.bindEvents();\n\t}\n};\n\nKeybindings.prototype.mapBindings = function (bindings) {\n\tvar _this70 = this;\n\n\tvar self = this;\n\n\tvar _loop2 = function _loop2(key) {\n\n\t\tif (_this70.actions[key]) {\n\n\t\t\tif (bindings[key]) {\n\n\t\t\t\tif (_typeof(bindings[key]) !== \"object\") {\n\t\t\t\t\tbindings[key] = [bindings[key]];\n\t\t\t\t}\n\n\t\t\t\tbindings[key].forEach(function (binding) {\n\t\t\t\t\tself.mapBinding(key, binding);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Key Binding Error - no such action:\", key);\n\t\t}\n\t};\n\n\tfor (var key in bindings) {\n\t\t_loop2(key);\n\t}\n};\n\nKeybindings.prototype.mapBinding = function (action, symbolsList) {\n\tvar self = this;\n\n\tvar binding = {\n\t\taction: this.actions[action],\n\t\tkeys: [],\n\t\tctrl: false,\n\t\tshift: false,\n\t\tmeta: false\n\t};\n\n\tvar symbols = symbolsList.toString().toLowerCase().split(\" \").join(\"\").split(\"+\");\n\n\tsymbols.forEach(function (symbol) {\n\t\tswitch (symbol) {\n\t\t\tcase \"ctrl\":\n\t\t\t\tbinding.ctrl = true;\n\t\t\t\tbreak;\n\n\t\t\tcase \"shift\":\n\t\t\t\tbinding.shift = true;\n\t\t\t\tbreak;\n\n\t\t\tcase \"meta\":\n\t\t\t\tbinding.meta = true;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tsymbol = parseInt(symbol);\n\t\t\t\tbinding.keys.push(symbol);\n\n\t\t\t\tif (!self.watchKeys[symbol]) {\n\t\t\t\t\tself.watchKeys[symbol] = [];\n\t\t\t\t}\n\n\t\t\t\tself.watchKeys[symbol].push(binding);\n\t\t}\n\t});\n};\n\nKeybindings.prototype.bindEvents = function () {\n\tvar self = this;\n\n\tthis.keyupBinding = function (e) {\n\t\tvar code = e.keyCode;\n\t\tvar bindings = self.watchKeys[code];\n\n\t\tif (bindings) {\n\n\t\t\tself.pressedKeys.push(code);\n\n\t\t\tbindings.forEach(function (binding) {\n\t\t\t\tself.checkBinding(e, binding);\n\t\t\t});\n\t\t}\n\t};\n\n\tthis.keydownBinding = function (e) {\n\t\tvar code = e.keyCode;\n\t\tvar bindings = self.watchKeys[code];\n\n\t\tif (bindings) {\n\n\t\t\tvar index = self.pressedKeys.indexOf(code);\n\n\t\t\tif (index > -1) {\n\t\t\t\tself.pressedKeys.splice(index, 1);\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.table.element.addEventListener(\"keydown\", this.keyupBinding);\n\n\tthis.table.element.addEventListener(\"keyup\", this.keydownBinding);\n};\n\nKeybindings.prototype.clearBindings = function () {\n\tif (this.keyupBinding) {\n\t\tthis.table.element.removeEventListener(\"keydown\", this.keyupBinding);\n\t}\n\n\tif (this.keydownBinding) {\n\t\tthis.table.element.removeEventListener(\"keyup\", this.keydownBinding);\n\t}\n};\n\nKeybindings.prototype.checkBinding = function (e, binding) {\n\tvar self = this,\n\t match = true;\n\n\tif (e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta) {\n\t\tbinding.keys.forEach(function (key) {\n\t\t\tvar index = self.pressedKeys.indexOf(key);\n\n\t\t\tif (index == -1) {\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t});\n\n\t\tif (match) {\n\t\t\tbinding.action.call(self, e);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n//default bindings\nKeybindings.prototype.bindings = {\n\tnavPrev: \"shift + 9\",\n\tnavNext: 9,\n\tnavUp: 38,\n\tnavDown: 40,\n\tscrollPageUp: 33,\n\tscrollPageDown: 34,\n\tscrollToStart: 36,\n\tscrollToEnd: 35,\n\tundo: \"ctrl + 90\",\n\tredo: \"ctrl + 89\",\n\tcopyToClipboard: \"ctrl + 67\"\n};\n\n//default actions\nKeybindings.prototype.actions = {\n\tkeyBlock: function keyBlock(e) {\n\t\te.stopPropagation();\n\t\te.preventDefault();\n\t},\n\tscrollPageUp: function scrollPageUp(e) {\n\t\tvar rowManager = this.table.rowManager,\n\t\t newPos = rowManager.scrollTop - rowManager.height,\n\t\t scrollMax = rowManager.element.scrollHeight;\n\n\t\te.preventDefault();\n\n\t\tif (rowManager.displayRowsCount) {\n\t\t\tif (newPos >= 0) {\n\t\t\t\trowManager.element.scrollTop = newPos;\n\t\t\t} else {\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\n\t\t\t}\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tscrollPageDown: function scrollPageDown(e) {\n\t\tvar rowManager = this.table.rowManager,\n\t\t newPos = rowManager.scrollTop + rowManager.height,\n\t\t scrollMax = rowManager.element.scrollHeight;\n\n\t\te.preventDefault();\n\n\t\tif (rowManager.displayRowsCount) {\n\t\t\tif (newPos <= scrollMax) {\n\t\t\t\trowManager.element.scrollTop = newPos;\n\t\t\t} else {\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\n\t\t\t}\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tscrollToStart: function scrollToStart(e) {\n\t\tvar rowManager = this.table.rowManager;\n\n\t\te.preventDefault();\n\n\t\tif (rowManager.displayRowsCount) {\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tscrollToEnd: function scrollToEnd(e) {\n\t\tvar rowManager = this.table.rowManager;\n\n\t\te.preventDefault();\n\n\t\tif (rowManager.displayRowsCount) {\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tnavPrev: function navPrev(e) {\n\t\tvar cell = false;\n\n\t\tif (this.table.modExists(\"edit\")) {\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\t\t\t\te.preventDefault();\n\t\t\t\tcell.nav().prev();\n\t\t\t}\n\t\t}\n\t},\n\n\tnavNext: function navNext(e) {\n\t\tvar cell = false;\n\t\tvar newRow = this.table.options.tabEndNewRow;\n\t\tvar nav;\n\n\t\tif (this.table.modExists(\"edit\")) {\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tnav = cell.nav();\n\n\t\t\t\tif (!nav.next()) {\n\t\t\t\t\tif (newRow) {\n\n\t\t\t\t\t\tcell.getElement().firstChild.blur();\n\n\t\t\t\t\t\tif (newRow === true) {\n\t\t\t\t\t\t\tnewRow = this.table.addRow({});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (typeof newRow == \"function\") {\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow(newRow(cell.row.getComponent()));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow(Object.assign({}, newRow));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnewRow.then(function () {\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\tnav.next();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tnavLeft: function navLeft(e) {\n\t\tvar cell = false;\n\n\t\tif (this.table.modExists(\"edit\")) {\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\t\t\t\te.preventDefault();\n\t\t\t\tcell.nav().left();\n\t\t\t}\n\t\t}\n\t},\n\n\tnavRight: function navRight(e) {\n\t\tvar cell = false;\n\n\t\tif (this.table.modExists(\"edit\")) {\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\t\t\t\te.preventDefault();\n\t\t\t\tcell.nav().right();\n\t\t\t}\n\t\t}\n\t},\n\n\tnavUp: function navUp(e) {\n\t\tvar cell = false;\n\n\t\tif (this.table.modExists(\"edit\")) {\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\t\t\t\te.preventDefault();\n\t\t\t\tcell.nav().up();\n\t\t\t}\n\t\t}\n\t},\n\n\tnavDown: function navDown(e) {\n\t\tvar cell = false;\n\n\t\tif (this.table.modExists(\"edit\")) {\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\t\t\t\te.preventDefault();\n\t\t\t\tcell.nav().down();\n\t\t\t}\n\t\t}\n\t},\n\n\tundo: function undo(e) {\n\t\tvar cell = false;\n\t\tif (this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")) {\n\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (!cell) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.table.modules.history.undo();\n\t\t\t}\n\t\t}\n\t},\n\n\tredo: function redo(e) {\n\t\tvar cell = false;\n\t\tif (this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")) {\n\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (!cell) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.table.modules.history.redo();\n\t\t\t}\n\t\t}\n\t},\n\n\tcopyToClipboard: function copyToClipboard(e) {\n\t\tif (!this.table.modules.edit.currentCell) {\n\t\t\tif (this.table.modExists(\"clipboard\", true)) {\n\t\t\t\tthis.table.modules.clipboard.copy(false, true);\n\t\t\t}\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"keybindings\", Keybindings);\nvar Menu = function Menu(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.menuElements = [];\n\tthis.blurEvent = this.hideMenu.bind(this);\n\tthis.escEvent = this.escMenu.bind(this);\n\tthis.nestedMenuBlock = false;\n\tthis.positionReversedX = false;\n};\n\nMenu.prototype.initializeColumnHeader = function (column) {\n\tvar _this71 = this;\n\n\tvar headerMenuEl;\n\n\tif (column.definition.headerContextMenu) {\n\t\tcolumn.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, column, column.definition.headerContextMenu));\n\t\tthis.tapHold(column, column.definition.headerContextMenu);\n\t}\n\n\t// if(column.definition.headerClickMenu){\n\t// \tcolumn.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, column, column.definition.headerClickMenu));\n\t// }\n\n\tif (column.definition.headerMenu) {\n\n\t\theaderMenuEl = document.createElement(\"span\");\n\t\theaderMenuEl.classList.add(\"tabulator-header-menu-button\");\n\t\theaderMenuEl.innerHTML = \"⋮\";\n\n\t\theaderMenuEl.addEventListener(\"click\", function (e) {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\n\t\t\t_this71.LoadMenuEvent(column, column.definition.headerMenu, e);\n\t\t});\n\n\t\tcolumn.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);\n\t}\n};\n\nMenu.prototype.LoadMenuEvent = function (component, menu, e) {\n\tmenu = typeof menu == \"function\" ? menu.call(this.table, component.getComponent(), e) : menu;\n\n\t// if(component instanceof Cell){\n\t// \te.stopImmediatePropagation();\n\t// }\n\n\tthis.loadMenu(e, component, menu);\n};\n\nMenu.prototype.tapHold = function (component, menu) {\n\tvar _this72 = this;\n\n\tvar element = component.getElement(),\n\t tapHold = null,\n\t loaded = false;\n\n\telement.addEventListener(\"touchstart\", function (e) {\n\t\tclearTimeout(tapHold);\n\t\tloaded = false;\n\n\t\ttapHold = setTimeout(function () {\n\t\t\tclearTimeout(tapHold);\n\t\t\ttapHold = null;\n\t\t\tloaded = true;\n\n\t\t\t_this72.LoadMenuEvent(component, menu, e);\n\t\t}, 1000);\n\t}, { passive: true });\n\n\telement.addEventListener(\"touchend\", function (e) {\n\t\tclearTimeout(tapHold);\n\t\ttapHold = null;\n\n\t\tif (loaded) {\n\t\t\te.preventDefault();\n\t\t}\n\t});\n};\n\nMenu.prototype.initializeCell = function (cell) {\n\tif (cell.column.definition.contextMenu) {\n\t\tcell.getElement(true).addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, cell, cell.column.definition.contextMenu));\n\t\tthis.tapHold(cell, cell.column.definition.contextMenu);\n\t}\n\n\tif (cell.column.definition.clickMenu) {\n\t\tcell.getElement(true).addEventListener(\"click\", this.LoadMenuEvent.bind(this, cell, cell.column.definition.clickMenu));\n\t}\n};\n\nMenu.prototype.initializeRow = function (row) {\n\tif (this.table.options.rowContextMenu) {\n\t\trow.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, row, this.table.options.rowContextMenu));\n\t\tthis.tapHold(row, this.table.options.rowContextMenu);\n\t}\n\n\tif (this.table.options.rowClickMenu) {\n\t\trow.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, row, this.table.options.rowClickMenu));\n\t}\n};\n\nMenu.prototype.initializeGroup = function (group) {\n\tif (this.table.options.groupContextMenu) {\n\t\tgroup.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, group, this.table.options.groupContextMenu));\n\t\tthis.tapHold(group, this.table.options.groupContextMenu);\n\t}\n\n\tif (this.table.options.groupClickMenu) {\n\t\tgroup.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, group, this.table.options.groupClickMenu));\n\t}\n};\n\nMenu.prototype.loadMenu = function (e, component, menu, parentEl) {\n\tvar _this73 = this;\n\n\tvar touch = !(e instanceof MouseEvent);\n\n\tvar menuEl = document.createElement(\"div\");\n\tmenuEl.classList.add(\"tabulator-menu\");\n\n\tif (!touch) {\n\t\te.preventDefault();\n\t}\n\n\t//abort if no menu set\n\tif (!menu || !menu.length) {\n\t\treturn;\n\t}\n\n\tif (!parentEl) {\n\t\tif (this.nestedMenuBlock) {\n\t\t\t//abort if child menu already open\n\t\t\tif (this.isOpen()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\tthis.nestedMenuBlock = setTimeout(function () {\n\t\t\t\t_this73.nestedMenuBlock = false;\n\t\t\t}, 100);\n\t\t}\n\n\t\tthis.hideMenu();\n\t\tthis.menuElements = [];\n\t}\n\n\tmenu.forEach(function (item) {\n\t\tvar itemEl = document.createElement(\"div\"),\n\t\t label = item.label,\n\t\t disabled = item.disabled;\n\n\t\tif (item.separator) {\n\t\t\titemEl.classList.add(\"tabulator-menu-separator\");\n\t\t} else {\n\t\t\titemEl.classList.add(\"tabulator-menu-item\");\n\n\t\t\tif (typeof label == \"function\") {\n\t\t\t\tlabel = label.call(_this73.table, component.getComponent());\n\t\t\t}\n\n\t\t\tif (label instanceof Node) {\n\t\t\t\titemEl.appendChild(label);\n\t\t\t} else {\n\t\t\t\titemEl.innerHTML = label;\n\t\t\t}\n\n\t\t\tif (typeof disabled == \"function\") {\n\t\t\t\tdisabled = disabled.call(_this73.table, component.getComponent());\n\t\t\t}\n\n\t\t\tif (disabled) {\n\t\t\t\titemEl.classList.add(\"tabulator-menu-item-disabled\");\n\t\t\t\titemEl.addEventListener(\"click\", function (e) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tif (item.menu && item.menu.length) {\n\t\t\t\t\titemEl.addEventListener(\"click\", function (e) {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t_this73.hideOldSubMenus(menuEl);\n\t\t\t\t\t\t_this73.loadMenu(e, component, item.menu, itemEl);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif (item.action) {\n\t\t\t\t\t\titemEl.addEventListener(\"click\", function (e) {\n\t\t\t\t\t\t\titem.action(e, component.getComponent());\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (item.menu && item.menu.length) {\n\t\t\t\titemEl.classList.add(\"tabulator-menu-item-submenu\");\n\t\t\t}\n\t\t}\n\n\t\tmenuEl.appendChild(itemEl);\n\t});\n\n\tmenuEl.addEventListener(\"click\", function (e) {\n\t\t_this73.hideMenu();\n\t});\n\n\tthis.menuElements.push(menuEl);\n\tthis.positionMenu(menuEl, parentEl, touch, e);\n};\n\nMenu.prototype.hideOldSubMenus = function (menuEl) {\n\tvar index = this.menuElements.indexOf(menuEl);\n\n\tif (index > -1) {\n\t\tfor (var _i13 = this.menuElements.length - 1; _i13 > index; _i13--) {\n\t\t\tvar el = this.menuElements[_i13];\n\n\t\t\tif (el.parentNode) {\n\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t}\n\n\t\t\tthis.menuElements.pop();\n\t\t}\n\t}\n};\n\nMenu.prototype.positionMenu = function (element, parentEl, touch, e) {\n\tvar _this74 = this;\n\n\tvar docHeight = Math.max(document.body.offsetHeight, window.innerHeight),\n\t x,\n\t y,\n\t parentOffset;\n\n\tif (!parentEl) {\n\t\tx = touch ? e.touches[0].pageX : e.pageX;\n\t\ty = touch ? e.touches[0].pageY : e.pageY;\n\n\t\tthis.positionReversedX = false;\n\t} else {\n\t\tparentOffset = Tabulator.prototype.helpers.elOffset(parentEl);\n\t\tx = parentOffset.left + parentEl.offsetWidth;\n\t\ty = parentOffset.top - 1;\n\t}\n\n\telement.style.top = y + \"px\";\n\telement.style.left = x + \"px\";\n\n\tsetTimeout(function () {\n\t\t_this74.table.rowManager.element.addEventListener(\"scroll\", _this74.blurEvent);\n\t\tdocument.body.addEventListener(\"click\", _this74.blurEvent);\n\t\tdocument.body.addEventListener(\"contextmenu\", _this74.blurEvent);\n\t\twindow.addEventListener(\"resize\", _this74.blurEvent);\n\t\tdocument.body.addEventListener(\"keydown\", _this74.escEvent);\n\t}, 100);\n\n\tdocument.body.appendChild(element);\n\n\t//move menu to start on bottom edge if it is too close to the edge of the screen\n\tif (y + element.offsetHeight >= docHeight) {\n\t\telement.style.top = \"\";\n\n\t\tif (parentEl) {\n\t\t\telement.style.bottom = docHeight - parentOffset.top - parentEl.offsetHeight - 1 + \"px\";\n\t\t} else {\n\t\t\telement.style.bottom = docHeight - y + \"px\";\n\t\t}\n\t}\n\n\t//move menu to start on right edge if it is too close to the edge of the screen\n\tif (x + element.offsetWidth >= document.body.offsetWidth || this.positionReversedX) {\n\t\telement.style.left = \"\";\n\n\t\tif (parentEl) {\n\t\t\telement.style.right = document.documentElement.offsetWidth - parentOffset.left + \"px\";\n\t\t} else {\n\t\t\telement.style.right = document.documentElement.offsetWidth - x + \"px\";\n\t\t}\n\n\t\tthis.positionReversedX = true;\n\t}\n};\n\nMenu.prototype.isOpen = function () {\n\treturn !!this.menuElements.length;\n};\n\nMenu.prototype.escMenu = function (e) {\n\tif (e.keyCode == 27) {\n\t\tthis.hideMenu();\n\t}\n};\n\nMenu.prototype.hideMenu = function () {\n\tthis.menuElements.forEach(function (menuEl) {\n\t\tif (menuEl.parentNode) {\n\t\t\tmenuEl.parentNode.removeChild(menuEl);\n\t\t}\n\t});\n\n\tdocument.body.removeEventListener(\"keydown\", this.escEvent);\n\tdocument.body.removeEventListener(\"click\", this.blurEvent);\n\tdocument.body.removeEventListener(\"contextmenu\", this.blurEvent);\n\twindow.removeEventListener(\"resize\", this.blurEvent);\n\tthis.table.rowManager.element.removeEventListener(\"scroll\", this.blurEvent);\n};\n\n//default accessors\nMenu.prototype.menus = {};\n\nTabulator.prototype.registerModule(\"menu\", Menu);\nvar MoveColumns = function MoveColumns(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.placeholderElement = this.createPlaceholderElement();\n\tthis.hoverElement = false; //floating column header element\n\tthis.checkTimeout = false; //click check timeout holder\n\tthis.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click\n\tthis.moving = false; //currently moving column\n\tthis.toCol = false; //destination column\n\tthis.toColAfter = false; //position of moving column relative to the desitnation column\n\tthis.startX = 0; //starting position within header element\n\tthis.autoScrollMargin = 40; //auto scroll on edge when within margin\n\tthis.autoScrollStep = 5; //auto scroll distance in pixels\n\tthis.autoScrollTimeout = false; //auto scroll timeout\n\tthis.touchMove = false;\n\n\tthis.moveHover = this.moveHover.bind(this);\n\tthis.endMove = this.endMove.bind(this);\n};\n\nMoveColumns.prototype.createPlaceholderElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-col\");\n\tel.classList.add(\"tabulator-col-placeholder\");\n\n\treturn el;\n};\n\nMoveColumns.prototype.initializeColumn = function (column) {\n\tvar self = this,\n\t config = {},\n\t colEl;\n\n\tif (!column.modules.frozen) {\n\n\t\tcolEl = column.getElement();\n\n\t\tconfig.mousemove = function (e) {\n\t\t\tif (column.parent === self.moving.parent) {\n\t\t\t\tif ((self.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(colEl).left + self.table.columnManager.element.scrollLeft > column.getWidth() / 2) {\n\t\t\t\t\tif (self.toCol !== column || !self.toColAfter) {\n\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);\n\t\t\t\t\t\tself.moveColumn(column, true);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (self.toCol !== column || self.toColAfter) {\n\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl);\n\t\t\t\t\t\tself.moveColumn(column, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}.bind(self);\n\n\t\tcolEl.addEventListener(\"mousedown\", function (e) {\n\t\t\tself.touchMove = false;\n\t\t\tif (e.which === 1) {\n\t\t\t\tself.checkTimeout = setTimeout(function () {\n\t\t\t\t\tself.startMove(e, column);\n\t\t\t\t}, self.checkPeriod);\n\t\t\t}\n\t\t});\n\n\t\tcolEl.addEventListener(\"mouseup\", function (e) {\n\t\t\tif (e.which === 1) {\n\t\t\t\tif (self.checkTimeout) {\n\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tself.bindTouchEvents(column);\n\t}\n\n\tcolumn.modules.moveColumn = config;\n};\n\nMoveColumns.prototype.bindTouchEvents = function (column) {\n\tvar self = this,\n\t colEl = column.getElement(),\n\t startXMove = false,\n\t //shifting center position of the cell\n\tdir = false,\n\t currentCol,\n\t nextCol,\n\t prevCol,\n\t nextColWidth,\n\t prevColWidth,\n\t nextColWidthLast,\n\t prevColWidthLast;\n\n\tcolEl.addEventListener(\"touchstart\", function (e) {\n\t\tself.checkTimeout = setTimeout(function () {\n\t\t\tself.touchMove = true;\n\t\t\tcurrentCol = column;\n\t\t\tnextCol = column.nextColumn();\n\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\n\t\t\tprevCol = column.prevColumn();\n\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\n\t\t\tnextColWidthLast = 0;\n\t\t\tprevColWidthLast = 0;\n\t\t\tstartXMove = false;\n\n\t\t\tself.startMove(e, column);\n\t\t}, self.checkPeriod);\n\t}, { passive: true });\n\n\tcolEl.addEventListener(\"touchmove\", function (e) {\n\t\tvar halfCol, diff, moveToCol;\n\n\t\tif (self.moving) {\n\t\t\tself.moveHover(e);\n\n\t\t\tif (!startXMove) {\n\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t}\n\n\t\t\tdiff = e.touches[0].pageX - startXMove;\n\n\t\t\tif (diff > 0) {\n\t\t\t\tif (nextCol && diff - nextColWidthLast > nextColWidth) {\n\t\t\t\t\tmoveToCol = nextCol;\n\n\t\t\t\t\tif (moveToCol !== column) {\n\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(self.placeholderElement, moveToCol.getElement().nextSibling);\n\t\t\t\t\t\tself.moveColumn(moveToCol, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (prevCol && -diff - prevColWidthLast > prevColWidth) {\n\t\t\t\t\tmoveToCol = prevCol;\n\n\t\t\t\t\tif (moveToCol !== column) {\n\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(self.placeholderElement, moveToCol.getElement());\n\t\t\t\t\t\tself.moveColumn(moveToCol, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (moveToCol) {\n\t\t\t\tcurrentCol = moveToCol;\n\t\t\t\tnextCol = moveToCol.nextColumn();\n\t\t\t\tnextColWidthLast = nextColWidth;\n\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\n\t\t\t\tprevCol = moveToCol.prevColumn();\n\t\t\t\tprevColWidthLast = prevColWidth;\n\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\n\t\t\t}\n\t\t}\n\t}, { passive: true });\n\n\tcolEl.addEventListener(\"touchend\", function (e) {\n\t\tif (self.checkTimeout) {\n\t\t\tclearTimeout(self.checkTimeout);\n\t\t}\n\t\tif (self.moving) {\n\t\t\tself.endMove(e);\n\t\t}\n\t});\n};\n\nMoveColumns.prototype.startMove = function (e, column) {\n\tvar element = column.getElement();\n\n\tthis.moving = column;\n\tthis.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(element).left;\n\n\tthis.table.element.classList.add(\"tabulator-block-select\");\n\n\t//create placeholder\n\tthis.placeholderElement.style.width = column.getWidth() + \"px\";\n\tthis.placeholderElement.style.height = column.getHeight() + \"px\";\n\n\telement.parentNode.insertBefore(this.placeholderElement, element);\n\telement.parentNode.removeChild(element);\n\n\t//create hover element\n\tthis.hoverElement = element.cloneNode(true);\n\tthis.hoverElement.classList.add(\"tabulator-moving\");\n\n\tthis.table.columnManager.getElement().appendChild(this.hoverElement);\n\n\tthis.hoverElement.style.left = \"0\";\n\tthis.hoverElement.style.bottom = \"0\";\n\n\tif (!this.touchMove) {\n\t\tthis._bindMouseMove();\n\n\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\n\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\n\t}\n\n\tthis.moveHover(e);\n};\n\nMoveColumns.prototype._bindMouseMove = function () {\n\tthis.table.columnManager.columnsByIndex.forEach(function (column) {\n\t\tif (column.modules.moveColumn.mousemove) {\n\t\t\tcolumn.getElement().addEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\n\t\t}\n\t});\n};\n\nMoveColumns.prototype._unbindMouseMove = function () {\n\tthis.table.columnManager.columnsByIndex.forEach(function (column) {\n\t\tif (column.modules.moveColumn.mousemove) {\n\t\t\tcolumn.getElement().removeEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\n\t\t}\n\t});\n};\n\nMoveColumns.prototype.moveColumn = function (column, after) {\n\tvar movingCells = this.moving.getCells();\n\n\tthis.toCol = column;\n\tthis.toColAfter = after;\n\n\tif (after) {\n\t\tcolumn.getCells().forEach(function (cell, i) {\n\t\t\tvar cellEl = cell.getElement(true);\n\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);\n\t\t});\n\t} else {\n\t\tcolumn.getCells().forEach(function (cell, i) {\n\t\t\tvar cellEl = cell.getElement(true);\n\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);\n\t\t});\n\t}\n};\n\nMoveColumns.prototype.endMove = function (e) {\n\tif (e.which === 1 || this.touchMove) {\n\t\tthis._unbindMouseMove();\n\n\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\n\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\n\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\n\n\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\tif (this.toCol) {\n\t\t\tthis.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);\n\t\t}\n\n\t\tthis.moving = false;\n\t\tthis.toCol = false;\n\t\tthis.toColAfter = false;\n\n\t\tif (!this.touchMove) {\n\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\n\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\n\t\t}\n\t}\n};\n\nMoveColumns.prototype.moveHover = function (e) {\n\tvar self = this,\n\t columnHolder = self.table.columnManager.getElement(),\n\t scrollLeft = columnHolder.scrollLeft,\n\t xPos = (self.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(columnHolder).left + scrollLeft,\n\t scrollPos;\n\n\tself.hoverElement.style.left = xPos - self.startX + \"px\";\n\n\tif (xPos - scrollLeft < self.autoScrollMargin) {\n\t\tif (!self.autoScrollTimeout) {\n\t\t\tself.autoScrollTimeout = setTimeout(function () {\n\t\t\t\tscrollPos = Math.max(0, scrollLeft - 5);\n\t\t\t\tself.table.rowManager.getElement().scrollLeft = scrollPos;\n\t\t\t\tself.autoScrollTimeout = false;\n\t\t\t}, 1);\n\t\t}\n\t}\n\n\tif (scrollLeft + columnHolder.clientWidth - xPos < self.autoScrollMargin) {\n\t\tif (!self.autoScrollTimeout) {\n\t\t\tself.autoScrollTimeout = setTimeout(function () {\n\t\t\t\tscrollPos = Math.min(columnHolder.clientWidth, scrollLeft + 5);\n\t\t\t\tself.table.rowManager.getElement().scrollLeft = scrollPos;\n\t\t\t\tself.autoScrollTimeout = false;\n\t\t\t}, 1);\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"moveColumn\", MoveColumns);\n\nvar MoveRows = function MoveRows(table) {\n\n\tthis.table = table; //hold Tabulator object\n\tthis.placeholderElement = this.createPlaceholderElement();\n\tthis.hoverElement = false; //floating row header element\n\tthis.checkTimeout = false; //click check timeout holder\n\tthis.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click\n\tthis.moving = false; //currently moving row\n\tthis.toRow = false; //destination row\n\tthis.toRowAfter = false; //position of moving row relative to the desitnation row\n\tthis.hasHandle = false; //row has handle instead of fully movable row\n\tthis.startY = 0; //starting Y position within header element\n\tthis.startX = 0; //starting X position within header element\n\n\tthis.moveHover = this.moveHover.bind(this);\n\tthis.endMove = this.endMove.bind(this);\n\tthis.tableRowDropEvent = false;\n\n\tthis.touchMove = false;\n\n\tthis.connection = false;\n\tthis.connectionSelectorsTables = false;\n\tthis.connectionSelectorsElements = false;\n\tthis.connectionElements = [];\n\tthis.connections = [];\n\n\tthis.connectedTable = false;\n\tthis.connectedRow = false;\n};\n\nMoveRows.prototype.createPlaceholderElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-row\");\n\tel.classList.add(\"tabulator-row-placeholder\");\n\n\treturn el;\n};\n\nMoveRows.prototype.initialize = function (handle) {\n\tthis.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;\n\tthis.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;\n\n\tthis.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;\n};\n\nMoveRows.prototype.setHandle = function (handle) {\n\tthis.hasHandle = handle;\n};\n\nMoveRows.prototype.initializeGroupHeader = function (group) {\n\tvar self = this,\n\t config = {},\n\t rowEl;\n\n\t//inter table drag drop\n\tconfig.mouseup = function (e) {\n\t\tself.tableRowDrop(e, row);\n\t}.bind(self);\n\n\t//same table drag drop\n\tconfig.mousemove = function (e) {\n\t\tif (e.pageY - Tabulator.prototype.helpers.elOffset(group.element).top + self.table.rowManager.element.scrollTop > group.getHeight() / 2) {\n\t\t\tif (self.toRow !== group || !self.toRowAfter) {\n\t\t\t\tvar rowEl = group.getElement();\n\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\n\t\t\t\tself.moveRow(group, true);\n\t\t\t}\n\t\t} else {\n\t\t\tif (self.toRow !== group || self.toRowAfter) {\n\t\t\t\tvar rowEl = group.getElement();\n\t\t\t\tif (rowEl.previousSibling) {\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\n\t\t\t\t\tself.moveRow(group, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}.bind(self);\n\n\tgroup.modules.moveRow = config;\n};\n\nMoveRows.prototype.initializeRow = function (row) {\n\tvar self = this,\n\t config = {},\n\t rowEl;\n\n\t//inter table drag drop\n\tconfig.mouseup = function (e) {\n\t\tself.tableRowDrop(e, row);\n\t}.bind(self);\n\n\t//same table drag drop\n\tconfig.mousemove = function (e) {\n\t\tvar rowEl = row.getElement();\n\n\t\tif (e.pageY - Tabulator.prototype.helpers.elOffset(rowEl).top + self.table.rowManager.element.scrollTop > row.getHeight() / 2) {\n\t\t\tif (self.toRow !== row || !self.toRowAfter) {\n\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\n\t\t\t\tself.moveRow(row, true);\n\t\t\t}\n\t\t} else {\n\t\t\tif (self.toRow !== row || self.toRowAfter) {\n\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\n\t\t\t\tself.moveRow(row, false);\n\t\t\t}\n\t\t}\n\t}.bind(self);\n\n\tif (!this.hasHandle) {\n\n\t\trowEl = row.getElement();\n\n\t\trowEl.addEventListener(\"mousedown\", function (e) {\n\t\t\tif (e.which === 1) {\n\t\t\t\tself.checkTimeout = setTimeout(function () {\n\t\t\t\t\tself.startMove(e, row);\n\t\t\t\t}, self.checkPeriod);\n\t\t\t}\n\t\t});\n\n\t\trowEl.addEventListener(\"mouseup\", function (e) {\n\t\t\tif (e.which === 1) {\n\t\t\t\tif (self.checkTimeout) {\n\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.bindTouchEvents(row, row.getElement());\n\t}\n\n\trow.modules.moveRow = config;\n};\n\nMoveRows.prototype.initializeCell = function (cell) {\n\tvar self = this,\n\t cellEl = cell.getElement(true);\n\n\tcellEl.addEventListener(\"mousedown\", function (e) {\n\t\tif (e.which === 1) {\n\t\t\tself.checkTimeout = setTimeout(function () {\n\t\t\t\tself.startMove(e, cell.row);\n\t\t\t}, self.checkPeriod);\n\t\t}\n\t});\n\n\tcellEl.addEventListener(\"mouseup\", function (e) {\n\t\tif (e.which === 1) {\n\t\t\tif (self.checkTimeout) {\n\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t}\n\t\t}\n\t});\n\n\tthis.bindTouchEvents(cell.row, cellEl);\n};\n\nMoveRows.prototype.bindTouchEvents = function (row, element) {\n\tvar self = this,\n\t startYMove = false,\n\t //shifting center position of the cell\n\tdir = false,\n\t currentRow,\n\t nextRow,\n\t prevRow,\n\t nextRowHeight,\n\t prevRowHeight,\n\t nextRowHeightLast,\n\t prevRowHeightLast;\n\n\telement.addEventListener(\"touchstart\", function (e) {\n\t\tself.checkTimeout = setTimeout(function () {\n\t\t\tself.touchMove = true;\n\t\t\tcurrentRow = row;\n\t\t\tnextRow = row.nextRow();\n\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\n\t\t\tprevRow = row.prevRow();\n\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\n\t\t\tnextRowHeightLast = 0;\n\t\t\tprevRowHeightLast = 0;\n\t\t\tstartYMove = false;\n\n\t\t\tself.startMove(e, row);\n\t\t}, self.checkPeriod);\n\t}, { passive: true });\n\tthis.moving, this.toRow, this.toRowAfter;\n\telement.addEventListener(\"touchmove\", function (e) {\n\n\t\tvar halfCol, diff, moveToRow;\n\n\t\tif (self.moving) {\n\t\t\te.preventDefault();\n\n\t\t\tself.moveHover(e);\n\n\t\t\tif (!startYMove) {\n\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t}\n\n\t\t\tdiff = e.touches[0].pageY - startYMove;\n\n\t\t\tif (diff > 0) {\n\t\t\t\tif (nextRow && diff - nextRowHeightLast > nextRowHeight) {\n\t\t\t\t\tmoveToRow = nextRow;\n\n\t\t\t\t\tif (moveToRow !== row) {\n\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(self.placeholderElement, moveToRow.getElement().nextSibling);\n\t\t\t\t\t\tself.moveRow(moveToRow, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (prevRow && -diff - prevRowHeightLast > prevRowHeight) {\n\t\t\t\t\tmoveToRow = prevRow;\n\n\t\t\t\t\tif (moveToRow !== row) {\n\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(self.placeholderElement, moveToRow.getElement());\n\t\t\t\t\t\tself.moveRow(moveToRow, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (moveToRow) {\n\t\t\t\tcurrentRow = moveToRow;\n\t\t\t\tnextRow = moveToRow.nextRow();\n\t\t\t\tnextRowHeightLast = nextRowHeight;\n\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\n\t\t\t\tprevRow = moveToRow.prevRow();\n\t\t\t\tprevRowHeightLast = prevRowHeight;\n\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\n\t\t\t}\n\t\t}\n\t});\n\n\telement.addEventListener(\"touchend\", function (e) {\n\t\tif (self.checkTimeout) {\n\t\t\tclearTimeout(self.checkTimeout);\n\t\t}\n\t\tif (self.moving) {\n\t\t\tself.endMove(e);\n\t\t\tself.touchMove = false;\n\t\t}\n\t});\n};\n\nMoveRows.prototype._bindMouseMove = function () {\n\tvar self = this;\n\n\tself.table.rowManager.getDisplayRows().forEach(function (row) {\n\t\tif ((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow.mousemove) {\n\t\t\trow.getElement().addEventListener(\"mousemove\", row.modules.moveRow.mousemove);\n\t\t}\n\t});\n};\n\nMoveRows.prototype._unbindMouseMove = function () {\n\tvar self = this;\n\n\tself.table.rowManager.getDisplayRows().forEach(function (row) {\n\t\tif ((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow.mousemove) {\n\t\t\trow.getElement().removeEventListener(\"mousemove\", row.modules.moveRow.mousemove);\n\t\t}\n\t});\n};\n\nMoveRows.prototype.startMove = function (e, row) {\n\tvar element = row.getElement();\n\n\tthis.setStartPosition(e, row);\n\n\tthis.moving = row;\n\n\tthis.table.element.classList.add(\"tabulator-block-select\");\n\n\t//create placeholder\n\tthis.placeholderElement.style.width = row.getWidth() + \"px\";\n\tthis.placeholderElement.style.height = row.getHeight() + \"px\";\n\n\tif (!this.connection) {\n\t\telement.parentNode.insertBefore(this.placeholderElement, element);\n\t\telement.parentNode.removeChild(element);\n\t} else {\n\t\tthis.table.element.classList.add(\"tabulator-movingrow-sending\");\n\t\tthis.connectToTables(row);\n\t}\n\n\t//create hover element\n\tthis.hoverElement = element.cloneNode(true);\n\tthis.hoverElement.classList.add(\"tabulator-moving\");\n\n\tif (this.connection) {\n\t\tdocument.body.appendChild(this.hoverElement);\n\t\tthis.hoverElement.style.left = \"0\";\n\t\tthis.hoverElement.style.top = \"0\";\n\t\tthis.hoverElement.style.width = this.table.element.clientWidth + \"px\";\n\t\tthis.hoverElement.style.whiteSpace = \"nowrap\";\n\t\tthis.hoverElement.style.overflow = \"hidden\";\n\t\tthis.hoverElement.style.pointerEvents = \"none\";\n\t} else {\n\t\tthis.table.rowManager.getTableElement().appendChild(this.hoverElement);\n\n\t\tthis.hoverElement.style.left = \"0\";\n\t\tthis.hoverElement.style.top = \"0\";\n\n\t\tthis._bindMouseMove();\n\t}\n\n\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\n\tdocument.body.addEventListener(\"mouseup\", this.endMove);\n\n\tthis.moveHover(e);\n};\n\nMoveRows.prototype.setStartPosition = function (e, row) {\n\tvar pageX = this.touchMove ? e.touches[0].pageX : e.pageX,\n\t pageY = this.touchMove ? e.touches[0].pageY : e.pageY,\n\t element,\n\t position;\n\n\telement = row.getElement();\n\tif (this.connection) {\n\t\tposition = element.getBoundingClientRect();\n\n\t\tthis.startX = position.left - pageX + window.pageXOffset;\n\t\tthis.startY = position.top - pageY + window.pageYOffset;\n\t} else {\n\t\tthis.startY = pageY - element.getBoundingClientRect().top;\n\t}\n};\n\nMoveRows.prototype.endMove = function (e) {\n\tif (!e || e.which === 1 || this.touchMove) {\n\t\tthis._unbindMouseMove();\n\n\t\tif (!this.connection) {\n\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\n\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\n\t\t}\n\n\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\n\n\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\tif (this.toRow) {\n\t\t\tthis.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);\n\t\t}\n\n\t\tthis.moving = false;\n\t\tthis.toRow = false;\n\t\tthis.toRowAfter = false;\n\n\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\n\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\n\n\t\tif (this.connection) {\n\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-sending\");\n\t\t\tthis.disconnectFromTables();\n\t\t}\n\t}\n};\n\nMoveRows.prototype.moveRow = function (row, after) {\n\tthis.toRow = row;\n\tthis.toRowAfter = after;\n};\n\nMoveRows.prototype.moveHover = function (e) {\n\tif (this.connection) {\n\t\tthis.moveHoverConnections.call(this, e);\n\t} else {\n\t\tthis.moveHoverTable.call(this, e);\n\t}\n};\n\nMoveRows.prototype.moveHoverTable = function (e) {\n\tvar rowHolder = this.table.rowManager.getElement(),\n\t scrollTop = rowHolder.scrollTop,\n\t yPos = (this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top + scrollTop,\n\t scrollPos;\n\n\tthis.hoverElement.style.top = yPos - this.startY + \"px\";\n};\n\nMoveRows.prototype.moveHoverConnections = function (e) {\n\tthis.hoverElement.style.left = this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX) + \"px\";\n\tthis.hoverElement.style.top = this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY) + \"px\";\n};\n\nMoveRows.prototype.elementRowDrop = function (e, element, row) {\n\tif (this.table.options.movableRowsElementDrop) {\n\t\tthis.table.options.movableRowsElementDrop(e, element, row ? row.getComponent() : false);\n\t}\n};\n\n//establish connection with other tables\nMoveRows.prototype.connectToTables = function (row) {\n\tvar _this75 = this;\n\n\tvar connectionTables;\n\n\tif (this.connectionSelectorsTables) {\n\t\tconnectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables);\n\n\t\tthis.table.options.movableRowsSendingStart.call(this.table, connectionTables);\n\n\t\tthis.table.modules.comms.send(this.connectionSelectorsTables, \"moveRow\", \"connect\", {\n\t\t\trow: row\n\t\t});\n\t}\n\n\tif (this.connectionSelectorsElements) {\n\n\t\tthis.connectionElements = [];\n\n\t\tif (!Array.isArray(this.connectionSelectorsElements)) {\n\t\t\tthis.connectionSelectorsElements = [this.connectionSelectorsElements];\n\t\t}\n\n\t\tthis.connectionSelectorsElements.forEach(function (query) {\n\t\t\tif (typeof query === \"string\") {\n\t\t\t\t_this75.connectionElements = _this75.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));\n\t\t\t} else {\n\t\t\t\t_this75.connectionElements.push(query);\n\t\t\t}\n\t\t});\n\n\t\tthis.connectionElements.forEach(function (element) {\n\t\t\tvar dropEvent = function dropEvent(e) {\n\t\t\t\t_this75.elementRowDrop(e, element, _this75.moving);\n\t\t\t};\n\n\t\t\telement.addEventListener(\"mouseup\", dropEvent);\n\t\t\telement.tabulatorElementDropEvent = dropEvent;\n\n\t\t\telement.classList.add(\"tabulator-movingrow-receiving\");\n\t\t});\n\t}\n};\n\n//disconnect from other tables\nMoveRows.prototype.disconnectFromTables = function () {\n\tvar connectionTables;\n\n\tif (this.connectionSelectorsTables) {\n\t\tconnectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables);\n\n\t\tthis.table.options.movableRowsSendingStop.call(this.table, connectionTables);\n\n\t\tthis.table.modules.comms.send(this.connectionSelectorsTables, \"moveRow\", \"disconnect\");\n\t}\n\n\tthis.connectionElements.forEach(function (element) {\n\t\telement.classList.remove(\"tabulator-movingrow-receiving\");\n\t\telement.removeEventListener(\"mouseup\", element.tabulatorElementDropEvent);\n\t\tdelete element.tabulatorElementDropEvent;\n\t});\n};\n\n//accept incomming connection\nMoveRows.prototype.connect = function (table, row) {\n\tvar self = this;\n\tif (!this.connectedTable) {\n\t\tthis.connectedTable = table;\n\t\tthis.connectedRow = row;\n\n\t\tthis.table.element.classList.add(\"tabulator-movingrow-receiving\");\n\n\t\tself.table.rowManager.getDisplayRows().forEach(function (row) {\n\t\t\tif (row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup) {\n\t\t\t\trow.getElement().addEventListener(\"mouseup\", row.modules.moveRow.mouseup);\n\t\t\t}\n\t\t});\n\n\t\tself.tableRowDropEvent = self.tableRowDrop.bind(self);\n\n\t\tself.table.element.addEventListener(\"mouseup\", self.tableRowDropEvent);\n\n\t\tthis.table.options.movableRowsReceivingStart.call(this.table, row, table);\n\n\t\treturn true;\n\t} else {\n\t\tconsole.warn(\"Move Row Error - Table cannot accept connection, already connected to table:\", this.connectedTable);\n\t\treturn false;\n\t}\n};\n\n//close incomming connection\nMoveRows.prototype.disconnect = function (table) {\n\tvar self = this;\n\tif (table === this.connectedTable) {\n\t\tthis.connectedTable = false;\n\t\tthis.connectedRow = false;\n\n\t\tthis.table.element.classList.remove(\"tabulator-movingrow-receiving\");\n\n\t\tself.table.rowManager.getDisplayRows().forEach(function (row) {\n\t\t\tif (row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup) {\n\t\t\t\trow.getElement().removeEventListener(\"mouseup\", row.modules.moveRow.mouseup);\n\t\t\t}\n\t\t});\n\n\t\tself.table.element.removeEventListener(\"mouseup\", self.tableRowDropEvent);\n\n\t\tthis.table.options.movableRowsReceivingStop.call(this.table, table);\n\t} else {\n\t\tconsole.warn(\"Move Row Error - trying to disconnect from non connected table\");\n\t}\n};\n\nMoveRows.prototype.dropComplete = function (table, row, success) {\n\tvar sender = false;\n\n\tif (success) {\n\n\t\tswitch (_typeof(this.table.options.movableRowsSender)) {\n\t\t\tcase \"string\":\n\t\t\t\tsender = this.senders[this.table.options.movableRowsSender];\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tsender = this.table.options.movableRowsSender;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (sender) {\n\t\t\tsender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table);\n\t\t} else {\n\t\t\tif (this.table.options.movableRowsSender) {\n\t\t\t\tconsole.warn(\"Mover Row Error - no matching sender found:\", this.table.options.movableRowsSender);\n\t\t\t}\n\t\t}\n\n\t\tthis.table.options.movableRowsSent.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);\n\t} else {\n\t\tthis.table.options.movableRowsSentFailed.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);\n\t}\n\n\tthis.endMove();\n};\n\nMoveRows.prototype.tableRowDrop = function (e, row) {\n\tvar receiver = false,\n\t success = false;\n\n\te.stopImmediatePropagation();\n\n\tswitch (_typeof(this.table.options.movableRowsReceiver)) {\n\t\tcase \"string\":\n\t\t\treceiver = this.receivers[this.table.options.movableRowsReceiver];\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\treceiver = this.table.options.movableRowsReceiver;\n\t\t\tbreak;\n\t}\n\n\tif (receiver) {\n\t\tsuccess = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t} else {\n\t\tconsole.warn(\"Mover Row Error - no matching receiver found:\", this.table.options.movableRowsReceiver);\n\t}\n\n\tif (success) {\n\t\tthis.table.options.movableRowsReceived.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t} else {\n\t\tthis.table.options.movableRowsReceivedFailed.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t}\n\n\tthis.table.modules.comms.send(this.connectedTable, \"moveRow\", \"dropcomplete\", {\n\t\trow: row,\n\t\tsuccess: success\n\t});\n};\n\nMoveRows.prototype.receivers = {\n\tinsert: function insert(fromRow, toRow, fromTable) {\n\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\n\t\treturn true;\n\t},\n\n\tadd: function add(fromRow, toRow, fromTable) {\n\t\tthis.table.addRow(fromRow.getData());\n\t\treturn true;\n\t},\n\n\tupdate: function update(fromRow, toRow, fromTable) {\n\t\tif (toRow) {\n\t\t\ttoRow.update(fromRow.getData());\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\treplace: function replace(fromRow, toRow, fromTable) {\n\t\tif (toRow) {\n\t\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\n\t\t\ttoRow.delete();\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n};\n\nMoveRows.prototype.senders = {\n\tdelete: function _delete(fromRow, toRow, toTable) {\n\t\tfromRow.delete();\n\t}\n};\n\nMoveRows.prototype.commsReceived = function (table, action, data) {\n\tswitch (action) {\n\t\tcase \"connect\":\n\t\t\treturn this.connect(table, data.row);\n\t\t\tbreak;\n\n\t\tcase \"disconnect\":\n\t\t\treturn this.disconnect(table);\n\t\t\tbreak;\n\n\t\tcase \"dropcomplete\":\n\t\t\treturn this.dropComplete(table, data.row, data.success);\n\t\t\tbreak;\n\t}\n};\n\nTabulator.prototype.registerModule(\"moveRow\", MoveRows);\nvar Mutator = function Mutator(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.allowedTypes = [\"\", \"data\", \"edit\", \"clipboard\"]; //list of muatation types\n\tthis.enabled = true;\n};\n\n//initialize column mutator\nMutator.prototype.initializeColumn = function (column) {\n\tvar self = this,\n\t match = false,\n\t config = {};\n\n\tthis.allowedTypes.forEach(function (type) {\n\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\t mutator;\n\n\t\tif (column.definition[key]) {\n\t\t\tmutator = self.lookupMutator(column.definition[key]);\n\n\t\t\tif (mutator) {\n\t\t\t\tmatch = true;\n\n\t\t\t\tconfig[key] = {\n\t\t\t\t\tmutator: mutator,\n\t\t\t\t\tparams: column.definition[key + \"Params\"] || {}\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t});\n\n\tif (match) {\n\t\tcolumn.modules.mutate = config;\n\t}\n};\n\nMutator.prototype.lookupMutator = function (value) {\n\tvar mutator = false;\n\n\t//set column mutator\n\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\t\tcase \"string\":\n\t\t\tif (this.mutators[value]) {\n\t\t\t\tmutator = this.mutators[value];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Mutator Error - No such mutator found, ignoring: \", value);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tmutator = value;\n\t\t\tbreak;\n\t}\n\n\treturn mutator;\n};\n\n//apply mutator to row\nMutator.prototype.transformRow = function (data, type, updatedData) {\n\tvar self = this,\n\t key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t value;\n\n\tif (this.enabled) {\n\n\t\tself.table.columnManager.traverse(function (column) {\n\t\t\tvar mutator, params, component;\n\n\t\t\tif (column.modules.mutate) {\n\t\t\t\tmutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;\n\n\t\t\t\tif (mutator) {\n\t\t\t\t\tvalue = column.getFieldValue(typeof updatedData !== \"undefined\" ? updatedData : data);\n\n\t\t\t\t\tif (type == \"data\" || typeof value !== \"undefined\") {\n\t\t\t\t\t\tcomponent = column.getComponent();\n\t\t\t\t\t\tparams = typeof mutator.params === \"function\" ? mutator.params(value, data, type, component) : mutator.params;\n\t\t\t\t\t\tcolumn.setFieldValue(data, mutator.mutator(value, data, type, params, component));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\treturn data;\n};\n\n//apply mutator to new cell value\nMutator.prototype.transformCell = function (cell, value) {\n\tvar mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,\n\t tempData = {};\n\n\tif (mutator) {\n\t\ttempData = Object.assign(tempData, cell.row.getData());\n\t\tcell.column.setFieldValue(tempData, value);\n\t\treturn mutator.mutator(value, tempData, \"edit\", mutator.params, cell.getComponent());\n\t} else {\n\t\treturn value;\n\t}\n};\n\nMutator.prototype.enable = function () {\n\tthis.enabled = true;\n};\n\nMutator.prototype.disable = function () {\n\tthis.enabled = false;\n};\n\n//default mutators\nMutator.prototype.mutators = {};\n\nTabulator.prototype.registerModule(\"mutator\", Mutator);\nvar Page = function Page(table) {\n\n\tthis.table = table; //hold Tabulator object\n\n\tthis.mode = \"local\";\n\tthis.progressiveLoad = false;\n\n\tthis.size = 0;\n\tthis.page = 1;\n\tthis.count = 5;\n\tthis.max = 1;\n\n\tthis.displayIndex = 0; //index in display pipeline\n\n\tthis.initialLoad = true;\n\n\tthis.pageSizes = [];\n\n\tthis.dataReceivedNames = {};\n\tthis.dataSentNames = {};\n\n\tthis.createElements();\n};\n\nPage.prototype.createElements = function () {\n\n\tvar button;\n\n\tthis.element = document.createElement(\"span\");\n\tthis.element.classList.add(\"tabulator-paginator\");\n\n\tthis.pagesElement = document.createElement(\"span\");\n\tthis.pagesElement.classList.add(\"tabulator-pages\");\n\n\tbutton = document.createElement(\"button\");\n\tbutton.classList.add(\"tabulator-page\");\n\tbutton.setAttribute(\"type\", \"button\");\n\tbutton.setAttribute(\"role\", \"button\");\n\tbutton.setAttribute(\"aria-label\", \"\");\n\tbutton.setAttribute(\"title\", \"\");\n\n\tthis.firstBut = button.cloneNode(true);\n\tthis.firstBut.setAttribute(\"data-page\", \"first\");\n\n\tthis.prevBut = button.cloneNode(true);\n\tthis.prevBut.setAttribute(\"data-page\", \"prev\");\n\n\tthis.nextBut = button.cloneNode(true);\n\tthis.nextBut.setAttribute(\"data-page\", \"next\");\n\n\tthis.lastBut = button.cloneNode(true);\n\tthis.lastBut.setAttribute(\"data-page\", \"last\");\n\n\tif (this.table.options.paginationSizeSelector) {\n\t\tthis.pageSizeSelect = document.createElement(\"select\");\n\t\tthis.pageSizeSelect.classList.add(\"tabulator-page-size\");\n\t}\n};\n\nPage.prototype.generatePageSizeSelectList = function () {\n\tvar _this76 = this;\n\n\tvar pageSizes = [];\n\n\tif (this.pageSizeSelect) {\n\n\t\tif (Array.isArray(this.table.options.paginationSizeSelector)) {\n\t\t\tpageSizes = this.table.options.paginationSizeSelector;\n\t\t\tthis.pageSizes = pageSizes;\n\n\t\t\tif (this.pageSizes.indexOf(this.size) == -1) {\n\t\t\t\tpageSizes.unshift(this.size);\n\t\t\t}\n\t\t} else {\n\n\t\t\tif (this.pageSizes.indexOf(this.size) == -1) {\n\t\t\t\tpageSizes = [];\n\n\t\t\t\tfor (var _i14 = 1; _i14 < 5; _i14++) {\n\t\t\t\t\tpageSizes.push(this.size * _i14);\n\t\t\t\t}\n\n\t\t\t\tthis.pageSizes = pageSizes;\n\t\t\t} else {\n\t\t\t\tpageSizes = this.pageSizes;\n\t\t\t}\n\t\t}\n\n\t\twhile (this.pageSizeSelect.firstChild) {\n\t\t\tthis.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);\n\t\t}pageSizes.forEach(function (item) {\n\t\t\tvar itemEl = document.createElement(\"option\");\n\t\t\titemEl.value = item;\n\n\t\t\tif (item === true) {\n\t\t\t\t_this76.table.modules.localize.bind(\"pagination|all\", function (value) {\n\t\t\t\t\titemEl.innerHTML = value;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\titemEl.innerHTML = item;\n\t\t\t}\n\n\t\t\t_this76.pageSizeSelect.appendChild(itemEl);\n\t\t});\n\n\t\tthis.pageSizeSelect.value = this.size;\n\t}\n};\n\n//setup pageination\nPage.prototype.initialize = function (hidden) {\n\tvar self = this,\n\t pageSelectLabel,\n\t testElRow,\n\t testElCell;\n\n\t//update param names\n\tthis.dataSentNames = Object.assign({}, this.paginationDataSentNames);\n\tthis.dataSentNames = Object.assign(this.dataSentNames, this.table.options.paginationDataSent);\n\n\tthis.dataReceivedNames = Object.assign({}, this.paginationDataReceivedNames);\n\tthis.dataReceivedNames = Object.assign(this.dataReceivedNames, this.table.options.paginationDataReceived);\n\n\t//build pagination element\n\n\t//bind localizations\n\tself.table.modules.localize.bind(\"pagination|first\", function (value) {\n\t\tself.firstBut.innerHTML = value;\n\t});\n\n\tself.table.modules.localize.bind(\"pagination|first_title\", function (value) {\n\t\tself.firstBut.setAttribute(\"aria-label\", value);\n\t\tself.firstBut.setAttribute(\"title\", value);\n\t});\n\n\tself.table.modules.localize.bind(\"pagination|prev\", function (value) {\n\t\tself.prevBut.innerHTML = value;\n\t});\n\n\tself.table.modules.localize.bind(\"pagination|prev_title\", function (value) {\n\t\tself.prevBut.setAttribute(\"aria-label\", value);\n\t\tself.prevBut.setAttribute(\"title\", value);\n\t});\n\n\tself.table.modules.localize.bind(\"pagination|next\", function (value) {\n\t\tself.nextBut.innerHTML = value;\n\t});\n\n\tself.table.modules.localize.bind(\"pagination|next_title\", function (value) {\n\t\tself.nextBut.setAttribute(\"aria-label\", value);\n\t\tself.nextBut.setAttribute(\"title\", value);\n\t});\n\n\tself.table.modules.localize.bind(\"pagination|last\", function (value) {\n\t\tself.lastBut.innerHTML = value;\n\t});\n\n\tself.table.modules.localize.bind(\"pagination|last_title\", function (value) {\n\t\tself.lastBut.setAttribute(\"aria-label\", value);\n\t\tself.lastBut.setAttribute(\"title\", value);\n\t});\n\n\t//click bindings\n\tself.firstBut.addEventListener(\"click\", function () {\n\t\tself.setPage(1).then(function () {}).catch(function () {});\n\t});\n\n\tself.prevBut.addEventListener(\"click\", function () {\n\t\tself.previousPage().then(function () {}).catch(function () {});\n\t});\n\n\tself.nextBut.addEventListener(\"click\", function () {\n\t\tself.nextPage().then(function () {}).catch(function () {});\n\t});\n\n\tself.lastBut.addEventListener(\"click\", function () {\n\t\tself.setPage(self.max).then(function () {}).catch(function () {});\n\t});\n\n\tif (self.table.options.paginationElement) {\n\t\tself.element = self.table.options.paginationElement;\n\t}\n\n\tif (this.pageSizeSelect) {\n\t\tpageSelectLabel = document.createElement(\"label\");\n\n\t\tself.table.modules.localize.bind(\"pagination|page_size\", function (value) {\n\t\t\tself.pageSizeSelect.setAttribute(\"aria-label\", value);\n\t\t\tself.pageSizeSelect.setAttribute(\"title\", value);\n\t\t\tpageSelectLabel.innerHTML = value;\n\t\t});\n\n\t\tself.element.appendChild(pageSelectLabel);\n\t\tself.element.appendChild(self.pageSizeSelect);\n\n\t\tself.pageSizeSelect.addEventListener(\"change\", function (e) {\n\t\t\tself.setPageSize(self.pageSizeSelect.value == \"true\" ? true : self.pageSizeSelect.value);\n\t\t\tself.setPage(1).then(function () {}).catch(function () {});\n\t\t});\n\t}\n\n\t//append to DOM\n\tself.element.appendChild(self.firstBut);\n\tself.element.appendChild(self.prevBut);\n\tself.element.appendChild(self.pagesElement);\n\tself.element.appendChild(self.nextBut);\n\tself.element.appendChild(self.lastBut);\n\n\tif (!self.table.options.paginationElement && !hidden) {\n\t\tself.table.footerManager.append(self.element, self);\n\t}\n\n\t//set default values\n\tself.mode = self.table.options.pagination;\n\n\tif (self.table.options.paginationSize) {\n\t\tself.size = self.table.options.paginationSize;\n\t} else {\n\t\ttestElRow = document.createElement(\"div\");\n\t\ttestElRow.classList.add(\"tabulator-row\");\n\t\ttestElRow.style.visibility = hidden;\n\n\t\ttestElCell = document.createElement(\"div\");\n\t\ttestElCell.classList.add(\"tabulator-cell\");\n\t\ttestElCell.innerHTML = \"Page Row Test\";\n\n\t\ttestElRow.appendChild(testElCell);\n\n\t\tself.table.rowManager.getTableElement().appendChild(testElRow);\n\n\t\tself.size = Math.floor(self.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);\n\n\t\tself.table.rowManager.getTableElement().removeChild(testElRow);\n\t}\n\n\t// self.page = self.table.options.paginationInitialPage || 1;\n\tself.count = self.table.options.paginationButtonCount;\n\n\tself.generatePageSizeSelectList();\n};\n\nPage.prototype.initializeProgressive = function (mode) {\n\tthis.initialize(true);\n\tthis.mode = \"progressive_\" + mode;\n\tthis.progressiveLoad = true;\n};\n\nPage.prototype.setDisplayIndex = function (index) {\n\tthis.displayIndex = index;\n};\n\nPage.prototype.getDisplayIndex = function () {\n\treturn this.displayIndex;\n};\n\n//calculate maximum page from number of rows\nPage.prototype.setMaxRows = function (rowCount) {\n\tif (!rowCount) {\n\t\tthis.max = 1;\n\t} else {\n\t\tthis.max = this.size === true ? 1 : Math.ceil(rowCount / this.size);\n\t}\n\n\tif (this.page > this.max) {\n\t\tthis.page = this.max;\n\t}\n};\n\n//reset to first page without triggering action\nPage.prototype.reset = function (force, columnsChanged) {\n\tif (this.mode == \"local\" || force) {\n\t\tthis.page = 1;\n\t}\n\n\tif (columnsChanged) {\n\t\tthis.initialLoad = true;\n\t}\n\n\treturn true;\n};\n\n//set the maxmum page\nPage.prototype.setMaxPage = function (max) {\n\n\tmax = parseInt(max);\n\n\tthis.max = max || 1;\n\n\tif (this.page > this.max) {\n\t\tthis.page = this.max;\n\t\tthis.trigger();\n\t}\n};\n\n//set current page number\nPage.prototype.setPage = function (page) {\n\tvar _this77 = this;\n\n\tvar self = this;\n\n\tswitch (page) {\n\t\tcase \"first\":\n\t\t\treturn this.setPage(1);\n\t\t\tbreak;\n\n\t\tcase \"prev\":\n\t\t\treturn this.previousPage();\n\t\t\tbreak;\n\n\t\tcase \"next\":\n\t\t\treturn this.nextPage();\n\t\t\tbreak;\n\n\t\tcase \"last\":\n\t\t\treturn this.setPage(this.max);\n\t\t\tbreak;\n\t}\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\tpage = parseInt(page);\n\n\t\tif (page > 0 && page <= _this77.max || _this77.mode !== \"local\") {\n\t\t\t_this77.page = page;\n\t\t\t_this77.trigger().then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function () {\n\t\t\t\treject();\n\t\t\t});\n\n\t\t\tif (self.table.options.persistence && self.table.modExists(\"persistence\", true) && self.table.modules.persistence.config.page) {\n\t\t\t\tself.table.modules.persistence.save(\"page\");\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Pagination Error - Requested page is out of range of 1 - \" + _this77.max + \":\", page);\n\t\t\treject();\n\t\t}\n\t});\n};\n\nPage.prototype.setPageToRow = function (row) {\n\tvar _this78 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\tvar rows = _this78.table.rowManager.getDisplayRows(_this78.displayIndex - 1);\n\t\tvar index = rows.indexOf(row);\n\n\t\tif (index > -1) {\n\t\t\tvar page = _this78.size === true ? 1 : Math.ceil((index + 1) / _this78.size);\n\n\t\t\t_this78.setPage(page).then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function () {\n\t\t\t\treject();\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Pagination Error - Requested row is not visible\");\n\t\t\treject();\n\t\t}\n\t});\n};\n\nPage.prototype.setPageSize = function (size) {\n\tif (size !== true) {\n\t\tsize = parseInt(size);\n\t}\n\n\tif (size > 0) {\n\t\tthis.size = size;\n\t}\n\n\tif (this.pageSizeSelect) {\n\t\t// this.pageSizeSelect.value = size;\n\t\tthis.generatePageSizeSelectList();\n\t}\n\n\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.page) {\n\t\tthis.table.modules.persistence.save(\"page\");\n\t}\n};\n\n//setup the pagination buttons\nPage.prototype._setPageButtons = function () {\n\tvar self = this;\n\n\tvar leftSize = Math.floor((this.count - 1) / 2);\n\tvar rightSize = Math.ceil((this.count - 1) / 2);\n\tvar min = this.max - this.page + leftSize + 1 < this.count ? this.max - this.count + 1 : Math.max(this.page - leftSize, 1);\n\tvar max = this.page <= rightSize ? Math.min(this.count, this.max) : Math.min(this.page + rightSize, this.max);\n\n\twhile (self.pagesElement.firstChild) {\n\t\tself.pagesElement.removeChild(self.pagesElement.firstChild);\n\t}if (self.page == 1) {\n\t\tself.firstBut.disabled = true;\n\t\tself.prevBut.disabled = true;\n\t} else {\n\t\tself.firstBut.disabled = false;\n\t\tself.prevBut.disabled = false;\n\t}\n\n\tif (self.page == self.max) {\n\t\tself.lastBut.disabled = true;\n\t\tself.nextBut.disabled = true;\n\t} else {\n\t\tself.lastBut.disabled = false;\n\t\tself.nextBut.disabled = false;\n\t}\n\n\tfor (var _i15 = min; _i15 <= max; _i15++) {\n\t\tif (_i15 > 0 && _i15 <= self.max) {\n\t\t\tself.pagesElement.appendChild(self._generatePageButton(_i15));\n\t\t}\n\t}\n\n\tthis.footerRedraw();\n};\n\nPage.prototype._generatePageButton = function (page) {\n\tvar self = this,\n\t button = document.createElement(\"button\");\n\n\tbutton.classList.add(\"tabulator-page\");\n\tif (page == self.page) {\n\t\tbutton.classList.add(\"active\");\n\t}\n\n\tbutton.setAttribute(\"type\", \"button\");\n\tbutton.setAttribute(\"role\", \"button\");\n\n\tself.table.modules.localize.bind(\"pagination|page_title\", function (value) {\n\t\tbutton.setAttribute(\"aria-label\", value + \" \" + page);\n\t\tbutton.setAttribute(\"title\", value + \" \" + page);\n\t});\n\n\tbutton.setAttribute(\"data-page\", page);\n\tbutton.textContent = page;\n\n\tbutton.addEventListener(\"click\", function (e) {\n\t\tself.setPage(page).then(function () {}).catch(function () {});\n\t});\n\n\treturn button;\n};\n\n//previous page\nPage.prototype.previousPage = function () {\n\tvar _this79 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (_this79.page > 1) {\n\t\t\t_this79.page--;\n\t\t\t_this79.trigger().then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function () {\n\t\t\t\treject();\n\t\t\t});\n\n\t\t\tif (_this79.table.options.persistence && _this79.table.modExists(\"persistence\", true) && _this79.table.modules.persistence.config.page) {\n\t\t\t\t_this79.table.modules.persistence.save(\"page\");\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Pagination Error - Previous page would be less than page 1:\", 0);\n\t\t\treject();\n\t\t}\n\t});\n};\n\n//next page\nPage.prototype.nextPage = function () {\n\tvar _this80 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (_this80.page < _this80.max) {\n\t\t\t_this80.page++;\n\t\t\t_this80.trigger().then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function () {\n\t\t\t\treject();\n\t\t\t});\n\n\t\t\tif (_this80.table.options.persistence && _this80.table.modExists(\"persistence\", true) && _this80.table.modules.persistence.config.page) {\n\t\t\t\t_this80.table.modules.persistence.save(\"page\");\n\t\t\t}\n\t\t} else {\n\t\t\tif (!_this80.progressiveLoad) {\n\t\t\t\tconsole.warn(\"Pagination Error - Next page would be greater than maximum page of \" + _this80.max + \":\", _this80.max + 1);\n\t\t\t}\n\t\t\treject();\n\t\t}\n\t});\n};\n\n//return current page number\nPage.prototype.getPage = function () {\n\treturn this.page;\n};\n\n//return max page number\nPage.prototype.getPageMax = function () {\n\treturn this.max;\n};\n\nPage.prototype.getPageSize = function (size) {\n\treturn this.size;\n};\n\nPage.prototype.getMode = function () {\n\treturn this.mode;\n};\n\n//return appropriate rows for current page\nPage.prototype.getRows = function (data) {\n\tvar output, start, end;\n\n\tif (this.mode == \"local\") {\n\t\toutput = [];\n\n\t\tif (this.size === true) {\n\t\t\tstart = 0;\n\t\t\tend = data.length;\n\t\t} else {\n\t\t\tstart = this.size * (this.page - 1);\n\t\t\tend = start + parseInt(this.size);\n\t\t}\n\n\t\tthis._setPageButtons();\n\n\t\tfor (var _i16 = start; _i16 < end; _i16++) {\n\t\t\tif (data[_i16]) {\n\t\t\t\toutput.push(data[_i16]);\n\t\t\t}\n\t\t}\n\n\t\treturn output;\n\t} else {\n\n\t\tthis._setPageButtons();\n\n\t\treturn data.slice(0);\n\t}\n};\n\nPage.prototype.trigger = function () {\n\tvar _this81 = this;\n\n\tvar left;\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\tswitch (_this81.mode) {\n\t\t\tcase \"local\":\n\t\t\t\tleft = _this81.table.rowManager.scrollLeft;\n\n\t\t\t\t_this81.table.rowManager.refreshActiveData(\"page\");\n\t\t\t\t_this81.table.rowManager.scrollHorizontal(left);\n\n\t\t\t\t_this81.table.options.pageLoaded.call(_this81.table, _this81.getPage());\n\t\t\t\tresolve();\n\t\t\t\tbreak;\n\n\t\t\tcase \"remote\":\n\t\t\tcase \"progressive_load\":\n\t\t\tcase \"progressive_scroll\":\n\t\t\t\t_this81.table.modules.ajax.blockActiveRequest();\n\t\t\t\t_this81._getRemotePage().then(function () {\n\t\t\t\t\tresolve();\n\t\t\t\t}).catch(function () {\n\t\t\t\t\treject();\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn(\"Pagination Error - no such pagination mode:\", _this81.mode);\n\t\t\t\treject();\n\t\t}\n\t});\n};\n\nPage.prototype._getRemotePage = function () {\n\tvar _this82 = this;\n\n\tvar self = this,\n\t oldParams,\n\t pageParams;\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\tif (!self.table.modExists(\"ajax\", true)) {\n\t\t\treject();\n\t\t}\n\n\t\t//record old params and restore after request has been made\n\t\toldParams = Tabulator.prototype.helpers.deepClone(self.table.modules.ajax.getParams() || {});\n\t\tpageParams = self.table.modules.ajax.getParams();\n\n\t\t//configure request params\n\t\tpageParams[_this82.dataSentNames.page] = self.page;\n\n\t\t//set page size if defined\n\t\tif (_this82.size) {\n\t\t\tpageParams[_this82.dataSentNames.size] = _this82.size;\n\t\t}\n\n\t\t//set sort data if defined\n\t\tif (_this82.table.options.ajaxSorting && _this82.table.modExists(\"sort\")) {\n\t\t\tvar sorters = self.table.modules.sort.getSort();\n\n\t\t\tsorters.forEach(function (item) {\n\t\t\t\tdelete item.column;\n\t\t\t});\n\n\t\t\tpageParams[_this82.dataSentNames.sorters] = sorters;\n\t\t}\n\n\t\t//set filter data if defined\n\t\tif (_this82.table.options.ajaxFiltering && _this82.table.modExists(\"filter\")) {\n\t\t\tvar filters = self.table.modules.filter.getFilters(true, true);\n\t\t\tpageParams[_this82.dataSentNames.filters] = filters;\n\t\t}\n\n\t\tself.table.modules.ajax.setParams(pageParams);\n\n\t\tself.table.modules.ajax.sendRequest(_this82.progressiveLoad).then(function (data) {\n\t\t\tself._parseRemoteData(data);\n\t\t\tresolve();\n\t\t}).catch(function (e) {\n\t\t\treject();\n\t\t});\n\n\t\tself.table.modules.ajax.setParams(oldParams);\n\t});\n};\n\nPage.prototype._parseRemoteData = function (data) {\n\tvar self = this,\n\t left,\n\t data,\n\t margin;\n\n\tif (typeof data[this.dataReceivedNames.last_page] === \"undefined\") {\n\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + this.dataReceivedNames.last_page + \"' property\");\n\t}\n\n\tif (data[this.dataReceivedNames.data]) {\n\t\tthis.max = parseInt(data[this.dataReceivedNames.last_page]) || 1;\n\n\t\tif (this.progressiveLoad) {\n\t\t\tswitch (this.mode) {\n\t\t\t\tcase \"progressive_load\":\n\n\t\t\t\t\tif (this.page == 1) {\n\t\t\t\t\t\tthis.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.table.rowManager.addRows(data[this.dataReceivedNames.data]);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.page < this.max) {\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tself.nextPage().then(function () {}).catch(function () {});\n\t\t\t\t\t\t}, self.table.options.ajaxProgressiveLoadDelay);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"progressive_scroll\":\n\t\t\t\t\tdata = this.table.rowManager.getData().concat(data[this.dataReceivedNames.data]);\n\n\t\t\t\t\tthis.table.rowManager.setData(data, true, this.initialLoad && this.page == 1);\n\n\t\t\t\t\tmargin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.element.clientHeight * 2;\n\n\t\t\t\t\tif (self.table.rowManager.element.scrollHeight <= self.table.rowManager.element.clientHeight + margin) {\n\t\t\t\t\t\tself.nextPage().then(function () {}).catch(function () {});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t} else {\n\t\t\tleft = this.table.rowManager.scrollLeft;\n\n\t\t\tthis.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1);\n\n\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\n\t\t\tthis.table.columnManager.scrollHorizontal(left);\n\n\t\t\tthis.table.options.pageLoaded.call(this.table, this.getPage());\n\t\t}\n\n\t\tthis.initialLoad = false;\n\t} else {\n\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + this.dataReceivedNames.data + \"' property\");\n\t}\n};\n\n//handle the footer element being redrawn\nPage.prototype.footerRedraw = function () {\n\tvar footer = this.table.footerManager.element;\n\n\tif (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) {\n\t\tthis.pagesElement.style.display = 'none';\n\t} else {\n\t\tthis.pagesElement.style.display = '';\n\n\t\tif (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) {\n\t\t\tthis.pagesElement.style.display = 'none';\n\t\t}\n\t}\n};\n\n//set the paramter names for pagination requests\nPage.prototype.paginationDataSentNames = {\n\t\"page\": \"page\",\n\t\"size\": \"size\",\n\t\"sorters\": \"sorters\",\n\t// \"sort_dir\":\"sort_dir\",\n\t\"filters\": \"filters\"\n\t// \"filter_value\":\"filter_value\",\n\t// \"filter_type\":\"filter_type\",\n};\n\n//set the property names for pagination responses\nPage.prototype.paginationDataReceivedNames = {\n\t\"current_page\": \"current_page\",\n\t\"last_page\": \"last_page\",\n\t\"data\": \"data\"\n};\n\nTabulator.prototype.registerModule(\"page\", Page);\n\nvar Persistence = function Persistence(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.mode = \"\";\n\tthis.id = \"\";\n\t// this.persistProps = [\"field\", \"width\", \"visible\"];\n\tthis.defWatcherBlock = false;\n\tthis.config = {};\n\tthis.readFunc = false;\n\tthis.writeFunc = false;\n};\n\n// Test for whether localStorage is available for use.\nPersistence.prototype.localStorageTest = function () {\n\tvar testKey = \"_tabulator_test\";\n\n\ttry {\n\t\twindow.localStorage.setItem(testKey, testKey);\n\t\twindow.localStorage.removeItem(testKey);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\n//setup parameters\nPersistence.prototype.initialize = function () {\n\t//determine persistent layout storage type\n\n\tvar mode = this.table.options.persistenceMode,\n\t id = this.table.options.persistenceID,\n\t retreivedData;\n\n\tthis.mode = mode !== true ? mode : this.localStorageTest() ? \"local\" : \"cookie\";\n\n\tif (this.table.options.persistenceReaderFunc) {\n\t\tif (typeof this.table.options.persistenceReaderFunc === \"function\") {\n\t\t\tthis.readFunc = this.table.options.persistenceReaderFunc;\n\t\t} else {\n\t\t\tif (this.readers[this.table.options.persistenceReaderFunc]) {\n\t\t\t\tthis.readFunc = this.readers[this.table.options.persistenceReaderFunc];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.table.options.persistenceReaderFunc);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (this.readers[this.mode]) {\n\t\t\tthis.readFunc = this.readers[this.mode];\n\t\t} else {\n\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.mode);\n\t\t}\n\t}\n\n\tif (this.table.options.persistenceWriterFunc) {\n\t\tif (typeof this.table.options.persistenceWriterFunc === \"function\") {\n\t\t\tthis.writeFunc = this.table.options.persistenceWriterFunc;\n\t\t} else {\n\t\t\tif (this.readers[this.table.options.persistenceWriterFunc]) {\n\t\t\t\tthis.writeFunc = this.readers[this.table.options.persistenceWriterFunc];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Persistence Write Error - invalid reader set\", this.table.options.persistenceWriterFunc);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (this.writers[this.mode]) {\n\t\t\tthis.writeFunc = this.writers[this.mode];\n\t\t} else {\n\t\t\tconsole.warn(\"Persistence Write Error - invalid writer set\", this.mode);\n\t\t}\n\t}\n\n\t//set storage tag\n\tthis.id = \"tabulator-\" + (id || this.table.element.getAttribute(\"id\") || \"\");\n\n\tthis.config = {\n\t\tsort: this.table.options.persistence === true || this.table.options.persistence.sort,\n\t\tfilter: this.table.options.persistence === true || this.table.options.persistence.filter,\n\t\tgroup: this.table.options.persistence === true || this.table.options.persistence.group,\n\t\tpage: this.table.options.persistence === true || this.table.options.persistence.page,\n\t\tcolumns: this.table.options.persistence === true ? [\"title\", \"width\", \"visible\"] : this.table.options.persistence.columns\n\t};\n\n\t//load pagination data if needed\n\tif (this.config.page) {\n\t\tretreivedData = this.retreiveData(\"page\");\n\n\t\tif (retreivedData) {\n\t\t\tif (typeof retreivedData.paginationSize !== \"undefined\" && (this.config.page === true || this.config.page.size)) {\n\t\t\t\tthis.table.options.paginationSize = retreivedData.paginationSize;\n\t\t\t}\n\n\t\t\tif (typeof retreivedData.paginationInitialPage !== \"undefined\" && (this.config.page === true || this.config.page.page)) {\n\t\t\t\tthis.table.options.paginationInitialPage = retreivedData.paginationInitialPage;\n\t\t\t}\n\t\t}\n\t}\n\n\t//load group data if needed\n\tif (this.config.group) {\n\t\tretreivedData = this.retreiveData(\"group\");\n\n\t\tif (retreivedData) {\n\t\t\tif (typeof retreivedData.groupBy !== \"undefined\" && (this.config.group === true || this.config.group.groupBy)) {\n\t\t\t\tthis.table.options.groupBy = retreivedData.groupBy;\n\t\t\t}\n\t\t\tif (typeof retreivedData.groupStartOpen !== \"undefined\" && (this.config.group === true || this.config.group.groupStartOpen)) {\n\t\t\t\tthis.table.options.groupStartOpen = retreivedData.groupStartOpen;\n\t\t\t}\n\t\t\tif (typeof retreivedData.groupHeader !== \"undefined\" && (this.config.group === true || this.config.group.groupHeader)) {\n\t\t\t\tthis.table.options.groupHeader = retreivedData.groupHeader;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (this.config.columns) {\n\t\tthis.table.options.columns = this.load(\"columns\", this.table.options.columns);\n\t}\n};\n\nPersistence.prototype.initializeColumn = function (column) {\n\tvar self = this,\n\t def,\n\t keys;\n\n\tif (this.config.columns) {\n\t\tthis.defWatcherBlock = true;\n\n\t\tdef = column.getDefinition();\n\n\t\tkeys = this.config.columns === true ? Object.keys(def) : this.config.columns;\n\n\t\tkeys.forEach(function (key) {\n\t\t\tvar props = Object.getOwnPropertyDescriptor(def, key);\n\t\t\tvar value = def[key];\n\t\t\tif (props) {\n\t\t\t\tObject.defineProperty(def, key, {\n\t\t\t\t\tset: function set(newValue) {\n\t\t\t\t\t\tvalue = newValue;\n\n\t\t\t\t\t\tif (!self.defWatcherBlock) {\n\t\t\t\t\t\t\tself.save(\"columns\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (props.set) {\n\t\t\t\t\t\t\tprops.set(newValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tget: function get() {\n\t\t\t\t\t\tif (props.get) {\n\t\t\t\t\t\t\tprops.get();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tthis.defWatcherBlock = false;\n\t}\n};\n\n//load saved definitions\nPersistence.prototype.load = function (type, current) {\n\tvar data = this.retreiveData(type);\n\n\tif (current) {\n\t\tdata = data ? this.mergeDefinition(current, data) : current;\n\t}\n\n\treturn data;\n};\n\n//retreive data from memory\nPersistence.prototype.retreiveData = function (type) {\n\treturn this.readFunc ? this.readFunc(this.id, type) : false;\n};\n\n//merge old and new column definitions\nPersistence.prototype.mergeDefinition = function (oldCols, newCols) {\n\tvar self = this,\n\t output = [];\n\n\t// oldCols = oldCols || [];\n\tnewCols = newCols || [];\n\n\tnewCols.forEach(function (column, to) {\n\n\t\tvar from = self._findColumn(oldCols, column),\n\t\t keys;\n\n\t\tif (from) {\n\n\t\t\tif (self.config.columns === true || self.config.columns == undefined) {\n\t\t\t\tkeys = Object.keys(from);\n\t\t\t\tkeys.push(\"width\");\n\t\t\t} else {\n\t\t\t\tkeys = self.config.columns;\n\t\t\t}\n\n\t\t\tkeys.forEach(function (key) {\n\t\t\t\tif (key !== \"columns\" && typeof column[key] !== \"undefined\") {\n\t\t\t\t\tfrom[key] = column[key];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (from.columns) {\n\t\t\t\tfrom.columns = self.mergeDefinition(from.columns, column.columns);\n\t\t\t}\n\n\t\t\toutput.push(from);\n\t\t}\n\t});\n\n\toldCols.forEach(function (column, i) {\n\t\tvar from = self._findColumn(newCols, column);\n\t\tif (!from) {\n\t\t\tif (output.length > i) {\n\t\t\t\toutput.splice(i, 0, column);\n\t\t\t} else {\n\t\t\t\toutput.push(column);\n\t\t\t}\n\t\t}\n\t});\n\n\treturn output;\n};\n\n//find matching columns\nPersistence.prototype._findColumn = function (columns, subject) {\n\tvar type = subject.columns ? \"group\" : subject.field ? \"field\" : \"object\";\n\n\treturn columns.find(function (col) {\n\t\tswitch (type) {\n\t\t\tcase \"group\":\n\t\t\t\treturn col.title === subject.title && col.columns.length === subject.columns.length;\n\t\t\t\tbreak;\n\n\t\t\tcase \"field\":\n\t\t\t\treturn col.field === subject.field;\n\t\t\t\tbreak;\n\n\t\t\tcase \"object\":\n\t\t\t\treturn col === subject;\n\t\t\t\tbreak;\n\t\t}\n\t});\n};\n\n//save data\nPersistence.prototype.save = function (type) {\n\tvar data = {};\n\n\tswitch (type) {\n\t\tcase \"columns\":\n\t\t\tdata = this.parseColumns(this.table.columnManager.getColumns());\n\t\t\tbreak;\n\n\t\tcase \"filter\":\n\t\t\tdata = this.table.modules.filter.getFilters();\n\t\t\tbreak;\n\n\t\tcase \"sort\":\n\t\t\tdata = this.validateSorters(this.table.modules.sort.getSort());\n\t\t\tbreak;\n\n\t\tcase \"group\":\n\t\t\tdata = this.getGroupConfig();\n\t\t\tbreak;\n\n\t\tcase \"page\":\n\t\t\tdata = this.getPageConfig();\n\t\t\tbreak;\n\t}\n\n\tif (this.writeFunc) {\n\t\tthis.writeFunc(this.id, type, data);\n\t}\n};\n\n//ensure sorters contain no function data\nPersistence.prototype.validateSorters = function (data) {\n\tdata.forEach(function (item) {\n\t\titem.column = item.field;\n\t\tdelete item.field;\n\t});\n\n\treturn data;\n};\n\nPersistence.prototype.getGroupConfig = function () {\n\tvar data = {};\n\n\tif (this.config.group) {\n\t\tif (this.config.group === true || this.config.group.groupBy) {\n\t\t\tdata.groupBy = this.table.options.groupBy;\n\t\t}\n\n\t\tif (this.config.group === true || this.config.group.groupStartOpen) {\n\t\t\tdata.groupStartOpen = this.table.options.groupStartOpen;\n\t\t}\n\n\t\tif (this.config.group === true || this.config.group.groupHeader) {\n\t\t\tdata.groupHeader = this.table.options.groupHeader;\n\t\t}\n\t}\n\n\treturn data;\n};\n\nPersistence.prototype.getPageConfig = function () {\n\tvar data = {};\n\n\tif (this.config.page) {\n\t\tif (this.config.page === true || this.config.page.size) {\n\t\t\tdata.paginationSize = this.table.modules.page.getPageSize();\n\t\t}\n\n\t\tif (this.config.page === true || this.config.page.page) {\n\t\t\tdata.paginationInitialPage = this.table.modules.page.getPage();\n\t\t}\n\t}\n\n\treturn data;\n};\n\n//parse columns for data to store\nPersistence.prototype.parseColumns = function (columns) {\n\tvar self = this,\n\t definitions = [],\n\t excludedKeys = [\"headerContextMenu\", \"headerMenu\", \"contextMenu\", \"clickMenu\"];\n\n\tcolumns.forEach(function (column) {\n\t\tvar defStore = {},\n\t\t colDef = column.getDefinition(),\n\t\t keys;\n\n\t\tif (column.isGroup) {\n\t\t\tdefStore.title = colDef.title;\n\t\t\tdefStore.columns = self.parseColumns(column.getColumns());\n\t\t} else {\n\t\t\tdefStore.field = column.getField();\n\n\t\t\tif (self.config.columns === true || self.config.columns == undefined) {\n\t\t\t\tkeys = Object.keys(colDef);\n\t\t\t\tkeys.push(\"width\");\n\t\t\t} else {\n\t\t\t\tkeys = self.config.columns;\n\t\t\t}\n\n\t\t\tkeys.forEach(function (key) {\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase \"width\":\n\t\t\t\t\t\tdefStore.width = column.getWidth();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"visible\":\n\t\t\t\t\t\tdefStore.visible = column.visible;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (typeof colDef[key] !== \"function\" && excludedKeys.indexOf(key) === -1) {\n\t\t\t\t\t\t\tdefStore[key] = colDef[key];\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tdefinitions.push(defStore);\n\t});\n\n\treturn definitions;\n};\n\n// read peristence information from storage\nPersistence.prototype.readers = {\n\tlocal: function local(id, type) {\n\t\tvar data = localStorage.getItem(id + \"-\" + type);\n\n\t\treturn data ? JSON.parse(data) : false;\n\t},\n\tcookie: function cookie(id, type) {\n\t\tvar cookie = document.cookie,\n\t\t key = id + \"-\" + type,\n\t\t cookiePos = cookie.indexOf(key + \"=\"),\n\t\t end,\n\t\t data;\n\n\t\t//if cookie exists, decode and load column data into tabulator\n\t\tif (cookiePos > -1) {\n\t\t\tcookie = cookie.substr(cookiePos);\n\n\t\t\tend = cookie.indexOf(\";\");\n\n\t\t\tif (end > -1) {\n\t\t\t\tcookie = cookie.substr(0, end);\n\t\t\t}\n\n\t\t\tdata = cookie.replace(key + \"=\", \"\");\n\t\t}\n\n\t\treturn data ? JSON.parse(data) : false;\n\t}\n};\n\n//write persistence information to storage\nPersistence.prototype.writers = {\n\tlocal: function local(id, type, data) {\n\t\tlocalStorage.setItem(id + \"-\" + type, JSON.stringify(data));\n\t},\n\tcookie: function cookie(id, type, data) {\n\t\tvar expireDate = new Date();\n\n\t\texpireDate.setDate(expireDate.getDate() + 10000);\n\n\t\tdocument.cookie = id + \"-\" + type + \"=\" + JSON.stringify(data) + \"; expires=\" + expireDate.toUTCString();\n\t}\n};\n\nTabulator.prototype.registerModule(\"persistence\", Persistence);\n\nvar Print = function Print(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.element = false;\n\tthis.manualBlock = false;\n};\n\nPrint.prototype.initialize = function () {\n\twindow.addEventListener(\"beforeprint\", this.replaceTable.bind(this));\n\twindow.addEventListener(\"afterprint\", this.cleanup.bind(this));\n};\n\nPrint.prototype.replaceTable = function () {\n\tif (!this.manualBlock) {\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.classList.add(\"tabulator-print-table\");\n\n\t\tthis.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, \"print\"));\n\n\t\tthis.table.element.style.display = \"none\";\n\n\t\tthis.table.element.parentNode.insertBefore(this.element, this.table.element);\n\t}\n};\n\nPrint.prototype.cleanup = function () {\n\tdocument.body.classList.remove(\"tabulator-print-fullscreen-hide\");\n\n\tif (this.element && this.element.parentNode) {\n\t\tthis.element.parentNode.removeChild(this.element);\n\t\tthis.table.element.style.display = \"\";\n\t}\n};\n\nPrint.prototype.printFullscreen = function (visible, style, config) {\n\tvar scrollX = window.scrollX,\n\t scrollY = window.scrollY,\n\t headerEl = document.createElement(\"div\"),\n\t footerEl = document.createElement(\"div\"),\n\t tableEl = this.table.modules.export.genereateTable(typeof config != \"undefined\" ? config : this.table.options.printConfig, typeof style != \"undefined\" ? style : this.table.options.printStyled, visible, \"print\"),\n\t headerContent,\n\t footerContent;\n\n\tthis.manualBlock = true;\n\n\tthis.element = document.createElement(\"div\");\n\tthis.element.classList.add(\"tabulator-print-fullscreen\");\n\n\tif (this.table.options.printHeader) {\n\t\theaderEl.classList.add(\"tabulator-print-header\");\n\n\t\theaderContent = typeof this.table.options.printHeader == \"function\" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;\n\n\t\tif (typeof headerContent == \"string\") {\n\t\t\theaderEl.innerHTML = headerContent;\n\t\t} else {\n\t\t\theaderEl.appendChild(headerContent);\n\t\t}\n\n\t\tthis.element.appendChild(headerEl);\n\t}\n\n\tthis.element.appendChild(tableEl);\n\n\tif (this.table.options.printFooter) {\n\t\tfooterEl.classList.add(\"tabulator-print-footer\");\n\n\t\tfooterContent = typeof this.table.options.printFooter == \"function\" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;\n\n\t\tif (typeof footerContent == \"string\") {\n\t\t\tfooterEl.innerHTML = footerContent;\n\t\t} else {\n\t\t\tfooterEl.appendChild(footerContent);\n\t\t}\n\n\t\tthis.element.appendChild(footerEl);\n\t}\n\n\tdocument.body.classList.add(\"tabulator-print-fullscreen-hide\");\n\tdocument.body.appendChild(this.element);\n\n\tif (this.table.options.printFormatter) {\n\t\tthis.table.options.printFormatter(this.element, tableEl);\n\t}\n\n\twindow.print();\n\n\tthis.cleanup();\n\n\twindow.scrollTo(scrollX, scrollY);\n\n\tthis.manualBlock = false;\n};\n\nTabulator.prototype.registerModule(\"print\", Print);\nvar ReactiveData = function ReactiveData(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.data = false;\n\tthis.blocked = false; //block reactivity while performing update\n\tthis.origFuncs = {}; // hold original data array functions to allow replacement after data is done with\n\tthis.currentVersion = 0;\n};\n\nReactiveData.prototype.watchData = function (data) {\n\tvar self = this,\n\t pushFunc,\n\t version;\n\n\tthis.currentVersion++;\n\n\tversion = this.currentVersion;\n\n\tself.unwatchData();\n\n\tself.data = data;\n\n\t//override array push function\n\tself.origFuncs.push = data.push;\n\n\tObject.defineProperty(self.data, \"push\", {\n\t\tenumerable: false,\n\t\tconfigurable: true,\n\t\tvalue: function value() {\n\t\t\tvar args = Array.from(arguments);\n\n\t\t\tif (!self.blocked && version === self.currentVersion) {\n\t\t\t\targs.forEach(function (arg) {\n\t\t\t\t\tself.table.rowManager.addRowActual(arg, false);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn self.origFuncs.push.apply(data, arguments);\n\t\t}\n\t});\n\n\t//override array unshift function\n\tself.origFuncs.unshift = data.unshift;\n\n\tObject.defineProperty(self.data, \"unshift\", {\n\t\tenumerable: false,\n\t\tconfigurable: true,\n\t\tvalue: function value() {\n\t\t\tvar args = Array.from(arguments);\n\n\t\t\tif (!self.blocked && version === self.currentVersion) {\n\t\t\t\targs.forEach(function (arg) {\n\t\t\t\t\tself.table.rowManager.addRowActual(arg, true);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn self.origFuncs.unshift.apply(data, arguments);\n\t\t}\n\t});\n\n\t//override array shift function\n\tself.origFuncs.shift = data.shift;\n\n\tObject.defineProperty(self.data, \"shift\", {\n\t\tenumerable: false,\n\t\tconfigurable: true,\n\t\tvalue: function value() {\n\t\t\tvar row;\n\n\t\t\tif (!self.blocked && version === self.currentVersion) {\n\t\t\t\tif (self.data.length) {\n\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[0]);\n\n\t\t\t\t\tif (row) {\n\t\t\t\t\t\trow.deleteActual();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn self.origFuncs.shift.call(data);\n\t\t}\n\t});\n\n\t//override array pop function\n\tself.origFuncs.pop = data.pop;\n\n\tObject.defineProperty(self.data, \"pop\", {\n\t\tenumerable: false,\n\t\tconfigurable: true,\n\t\tvalue: function value() {\n\t\t\tvar row;\n\t\t\tif (!self.blocked && version === self.currentVersion) {\n\t\t\t\tif (self.data.length) {\n\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);\n\n\t\t\t\t\tif (row) {\n\t\t\t\t\t\trow.deleteActual();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn self.origFuncs.pop.call(data);\n\t\t}\n\t});\n\n\t//override array splice function\n\tself.origFuncs.splice = data.splice;\n\n\tObject.defineProperty(self.data, \"splice\", {\n\t\tenumerable: false,\n\t\tconfigurable: true,\n\t\tvalue: function value() {\n\t\t\tvar args = Array.from(arguments),\n\t\t\t start = args[0] < 0 ? data.length + args[0] : args[0],\n\t\t\t end = args[1],\n\t\t\t newRows = args[2] ? args.slice(2) : false,\n\t\t\t startRow;\n\n\t\t\tif (!self.blocked && version === self.currentVersion) {\n\n\t\t\t\t//add new rows\n\t\t\t\tif (newRows) {\n\t\t\t\t\tstartRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;\n\n\t\t\t\t\tif (startRow) {\n\t\t\t\t\t\tnewRows.forEach(function (rowData) {\n\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, startRow, true);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewRows = newRows.slice().reverse();\n\n\t\t\t\t\t\tnewRows.forEach(function (rowData) {\n\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, false, true);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//delete removed rows\n\t\t\t\tif (end !== 0) {\n\t\t\t\t\tvar oldRows = data.slice(start, typeof args[1] === \"undefined\" ? args[1] : start + end);\n\n\t\t\t\t\toldRows.forEach(function (rowData, i) {\n\t\t\t\t\t\tvar row = self.table.rowManager.getRowFromDataObject(rowData);\n\n\t\t\t\t\t\tif (row) {\n\t\t\t\t\t\t\trow.deleteActual(i !== oldRows.length - 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (newRows || end !== 0) {\n\t\t\t\t\tself.table.rowManager.reRenderInPosition();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn self.origFuncs.splice.apply(data, arguments);\n\t\t}\n\t});\n};\n\nReactiveData.prototype.unwatchData = function () {\n\tif (this.data !== false) {\n\t\tfor (var key in this.origFuncs) {\n\t\t\tObject.defineProperty(this.data, key, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\twritable: true,\n\t\t\t\tvalue: this.origFuncs.key\n\t\t\t});\n\t\t}\n\t}\n};\n\nReactiveData.prototype.watchRow = function (row) {\n\tvar data = row.getData();\n\n\tthis.blocked = true;\n\n\tfor (var key in data) {\n\t\tthis.watchKey(row, data, key);\n\t}\n\n\tif (this.table.options.dataTree) {\n\t\tthis.watchTreeChildren(row);\n\t}\n\n\tthis.blocked = false;\n};\n\nReactiveData.prototype.watchTreeChildren = function (row) {\n\tvar self = this,\n\t childField = row.getData()[this.table.options.dataTreeChildField],\n\t origFuncs = {};\n\n\tfunction rebuildTree() {\n\t\tself.table.modules.dataTree.initializeRow(row);\n\t\tself.table.modules.dataTree.layoutRow(row);\n\t\tself.table.rowManager.refreshActiveData(\"tree\", false, true);\n\t}\n\n\tif (childField) {\n\n\t\torigFuncs.push = childField.push;\n\n\t\tObject.defineProperty(childField, \"push\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function value() {\n\t\t\t\tvar result = origFuncs.push.apply(childField, arguments);\n\n\t\t\t\trebuildTree();\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\n\t\torigFuncs.unshift = childField.unshift;\n\n\t\tObject.defineProperty(childField, \"unshift\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function value() {\n\t\t\t\tvar result = origFuncs.unshift.apply(childField, arguments);\n\n\t\t\t\trebuildTree();\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\n\t\torigFuncs.shift = childField.shift;\n\n\t\tObject.defineProperty(childField, \"shift\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function value() {\n\t\t\t\tvar result = origFuncs.shift.call(childField);\n\n\t\t\t\trebuildTree();\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\n\t\torigFuncs.pop = childField.pop;\n\n\t\tObject.defineProperty(childField, \"pop\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function value() {\n\t\t\t\tvar result = origFuncs.pop.call(childField);\n\n\t\t\t\trebuildTree();\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\n\t\torigFuncs.splice = childField.splice;\n\n\t\tObject.defineProperty(childField, \"splice\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function value() {\n\t\t\t\tvar result = origFuncs.splice.apply(childField, arguments);\n\n\t\t\t\trebuildTree();\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t}\n};\n\nReactiveData.prototype.watchKey = function (row, data, key) {\n\tvar self = this,\n\t props = Object.getOwnPropertyDescriptor(data, key),\n\t value = data[key],\n\t version = this.currentVersion;\n\n\tObject.defineProperty(data, key, {\n\t\tset: function set(newValue) {\n\t\t\tvalue = newValue;\n\t\t\tif (!self.blocked && version === self.currentVersion) {\n\t\t\t\tvar update = {};\n\t\t\t\tupdate[key] = newValue;\n\t\t\t\trow.updateData(update);\n\t\t\t}\n\n\t\t\tif (props.set) {\n\t\t\t\tprops.set(newValue);\n\t\t\t}\n\t\t},\n\t\tget: function get() {\n\n\t\t\tif (props.get) {\n\t\t\t\tprops.get();\n\t\t\t}\n\n\t\t\treturn value;\n\t\t}\n\t});\n};\n\nReactiveData.prototype.unwatchRow = function (row) {\n\tvar data = row.getData();\n\n\tfor (var key in data) {\n\t\tObject.defineProperty(data, key, {\n\t\t\tvalue: data[key]\n\t\t});\n\t}\n};\n\nReactiveData.prototype.block = function () {\n\tthis.blocked = true;\n};\n\nReactiveData.prototype.unblock = function () {\n\tthis.blocked = false;\n};\n\nTabulator.prototype.registerModule(\"reactiveData\", ReactiveData);\n\nvar ResizeColumns = function ResizeColumns(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.startColumn = false;\n\tthis.startX = false;\n\tthis.startWidth = false;\n\tthis.handle = null;\n\tthis.prevHandle = null;\n};\n\nResizeColumns.prototype.initializeColumn = function (type, column, element) {\n\tvar self = this,\n\t variableHeight = false,\n\t mode = this.table.options.resizableColumns;\n\n\t//set column resize mode\n\tif (type === \"header\") {\n\t\tvariableHeight = column.definition.formatter == \"textarea\" || column.definition.variableHeight;\n\t\tcolumn.modules.resize = { variableHeight: variableHeight };\n\t}\n\n\tif (mode === true || mode == type) {\n\n\t\tvar handle = document.createElement('div');\n\t\thandle.className = \"tabulator-col-resize-handle\";\n\n\t\tvar prevHandle = document.createElement('div');\n\t\tprevHandle.className = \"tabulator-col-resize-handle prev\";\n\n\t\thandle.addEventListener(\"click\", function (e) {\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tvar handleDown = function handleDown(e) {\n\t\t\tvar nearestColumn = column.getLastColumn();\n\n\t\t\tif (nearestColumn && self._checkResizability(nearestColumn)) {\n\t\t\t\tself.startColumn = column;\n\t\t\t\tself._mouseDown(e, nearestColumn, handle);\n\t\t\t}\n\t\t};\n\n\t\thandle.addEventListener(\"mousedown\", handleDown);\n\t\thandle.addEventListener(\"touchstart\", handleDown, { passive: true });\n\n\t\t//reszie column on double click\n\t\thandle.addEventListener(\"dblclick\", function (e) {\n\t\t\tvar col = column.getLastColumn();\n\n\t\t\tif (col && self._checkResizability(col)) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tcol.reinitializeWidth(true);\n\t\t\t}\n\t\t});\n\n\t\tprevHandle.addEventListener(\"click\", function (e) {\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tvar prevHandleDown = function prevHandleDown(e) {\n\t\t\tvar nearestColumn, colIndex, prevColumn;\n\n\t\t\tnearestColumn = column.getFirstColumn();\n\n\t\t\tif (nearestColumn) {\n\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\n\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\n\n\t\t\t\tif (prevColumn && self._checkResizability(prevColumn)) {\n\t\t\t\t\tself.startColumn = column;\n\t\t\t\t\tself._mouseDown(e, prevColumn, prevHandle);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tprevHandle.addEventListener(\"mousedown\", prevHandleDown);\n\t\tprevHandle.addEventListener(\"touchstart\", prevHandleDown, { passive: true });\n\n\t\t//resize column on double click\n\t\tprevHandle.addEventListener(\"dblclick\", function (e) {\n\t\t\tvar nearestColumn, colIndex, prevColumn;\n\n\t\t\tnearestColumn = column.getFirstColumn();\n\n\t\t\tif (nearestColumn) {\n\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\n\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\n\n\t\t\t\tif (prevColumn && self._checkResizability(prevColumn)) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tprevColumn.reinitializeWidth(true);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\telement.appendChild(handle);\n\t\telement.appendChild(prevHandle);\n\t}\n};\n\nResizeColumns.prototype._checkResizability = function (column) {\n\treturn typeof column.definition.resizable != \"undefined\" ? column.definition.resizable : this.table.options.resizableColumns;\n};\n\nResizeColumns.prototype._mouseDown = function (e, column, handle) {\n\tvar self = this;\n\n\tself.table.element.classList.add(\"tabulator-block-select\");\n\n\tfunction mouseMove(e) {\n\t\t// self.table.columnManager.tempScrollBlock();\n\n\t\tif (self.table.rtl) {\n\t\t\tcolumn.setWidth(self.startWidth - ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\n\t\t} else {\n\t\t\tcolumn.setWidth(self.startWidth + ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\n\t\t}\n\n\t\tif (self.table.options.virtualDomHoz) {\n\t\t\tself.table.vdomHoz.reinitialize(true);\n\t\t}\n\n\t\tif (!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) {\n\t\t\tcolumn.checkCellHeights();\n\t\t}\n\t}\n\n\tfunction mouseUp(e) {\n\n\t\t//block editor from taking action while resizing is taking place\n\t\tif (self.startColumn.modules.edit) {\n\t\t\tself.startColumn.modules.edit.blocked = false;\n\t\t}\n\n\t\tif (self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) {\n\t\t\tcolumn.checkCellHeights();\n\t\t}\n\n\t\tdocument.body.removeEventListener(\"mouseup\", mouseUp);\n\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\n\n\t\thandle.removeEventListener(\"touchmove\", mouseMove);\n\t\thandle.removeEventListener(\"touchend\", mouseUp);\n\n\t\tself.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\tif (self.table.options.persistence && self.table.modExists(\"persistence\", true) && self.table.modules.persistence.config.columns) {\n\t\t\tself.table.modules.persistence.save(\"columns\");\n\t\t}\n\n\t\tself.table.options.columnResized.call(self.table, column.getComponent());\n\t}\n\n\te.stopPropagation(); //prevent resize from interfereing with movable columns\n\n\t//block editor from taking action while resizing is taking place\n\tif (self.startColumn.modules.edit) {\n\t\tself.startColumn.modules.edit.blocked = true;\n\t}\n\n\tself.startX = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX;\n\tself.startWidth = column.getWidth();\n\n\tdocument.body.addEventListener(\"mousemove\", mouseMove);\n\tdocument.body.addEventListener(\"mouseup\", mouseUp);\n\thandle.addEventListener(\"touchmove\", mouseMove, { passive: true });\n\thandle.addEventListener(\"touchend\", mouseUp);\n};\n\nTabulator.prototype.registerModule(\"resizeColumns\", ResizeColumns);\nvar ResizeRows = function ResizeRows(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.startColumn = false;\n\tthis.startY = false;\n\tthis.startHeight = false;\n\tthis.handle = null;\n\tthis.prevHandle = null;\n};\n\nResizeRows.prototype.initializeRow = function (row) {\n\tvar self = this,\n\t rowEl = row.getElement();\n\n\tvar handle = document.createElement('div');\n\thandle.className = \"tabulator-row-resize-handle\";\n\n\tvar prevHandle = document.createElement('div');\n\tprevHandle.className = \"tabulator-row-resize-handle prev\";\n\n\thandle.addEventListener(\"click\", function (e) {\n\t\te.stopPropagation();\n\t});\n\n\tvar handleDown = function handleDown(e) {\n\t\tself.startRow = row;\n\t\tself._mouseDown(e, row, handle);\n\t};\n\n\thandle.addEventListener(\"mousedown\", handleDown);\n\thandle.addEventListener(\"touchstart\", handleDown, { passive: true });\n\n\tprevHandle.addEventListener(\"click\", function (e) {\n\t\te.stopPropagation();\n\t});\n\n\tvar prevHandleDown = function prevHandleDown(e) {\n\t\tvar prevRow = self.table.rowManager.prevDisplayRow(row);\n\n\t\tif (prevRow) {\n\t\t\tself.startRow = prevRow;\n\t\t\tself._mouseDown(e, prevRow, prevHandle);\n\t\t}\n\t};\n\n\tprevHandle.addEventListener(\"mousedown\", prevHandleDown);\n\tprevHandle.addEventListener(\"touchstart\", prevHandleDown, { passive: true });\n\n\trowEl.appendChild(handle);\n\trowEl.appendChild(prevHandle);\n};\n\nResizeRows.prototype._mouseDown = function (e, row, handle) {\n\tvar self = this;\n\n\tself.table.element.classList.add(\"tabulator-block-select\");\n\n\tfunction mouseMove(e) {\n\t\trow.setHeight(self.startHeight + ((typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY) - self.startY));\n\t}\n\n\tfunction mouseUp(e) {\n\n\t\t// //block editor from taking action while resizing is taking place\n\t\t// if(self.startColumn.modules.edit){\n\t\t// \tself.startColumn.modules.edit.blocked = false;\n\t\t// }\n\n\t\tdocument.body.removeEventListener(\"mouseup\", mouseMove);\n\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\n\n\t\thandle.removeEventListener(\"touchmove\", mouseMove);\n\t\thandle.removeEventListener(\"touchend\", mouseUp);\n\n\t\tself.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\tself.table.options.rowResized.call(this.table, row.getComponent());\n\t}\n\n\te.stopPropagation(); //prevent resize from interfereing with movable columns\n\n\t//block editor from taking action while resizing is taking place\n\t// if(self.startColumn.modules.edit){\n\t// \tself.startColumn.modules.edit.blocked = true;\n\t// }\n\n\tself.startY = typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY;\n\tself.startHeight = row.getHeight();\n\n\tdocument.body.addEventListener(\"mousemove\", mouseMove);\n\tdocument.body.addEventListener(\"mouseup\", mouseUp);\n\n\thandle.addEventListener(\"touchmove\", mouseMove, { passive: true });\n\thandle.addEventListener(\"touchend\", mouseUp);\n};\n\nTabulator.prototype.registerModule(\"resizeRows\", ResizeRows);\nvar ResizeTable = function ResizeTable(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.binding = false;\n\tthis.observer = false;\n\tthis.containerObserver = false;\n\n\tthis.tableHeight = 0;\n\tthis.tableWidth = 0;\n\tthis.containerHeight = 0;\n\tthis.containerWidth = 0;\n\n\tthis.autoResize = false;\n};\n\nResizeTable.prototype.initialize = function (row) {\n\tvar _this83 = this;\n\n\tvar table = this.table,\n\t tableStyle;\n\n\tthis.tableHeight = table.element.clientHeight;\n\tthis.tableWidth = table.element.clientWidth;\n\n\tif (table.element.parentNode) {\n\t\tthis.containerHeight = table.element.parentNode.clientHeight;\n\t\tthis.containerWidth = table.element.parentNode.clientWidth;\n\t}\n\n\tif (typeof ResizeObserver !== \"undefined\" && table.rowManager.getRenderMode() === \"virtual\") {\n\n\t\tthis.autoResize = true;\n\n\t\tthis.observer = new ResizeObserver(function (entry) {\n\t\t\tif (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {\n\n\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\n\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\n\n\t\t\t\tif (_this83.tableHeight != nodeHeight || _this83.tableWidth != nodeWidth) {\n\t\t\t\t\t_this83.tableHeight = nodeHeight;\n\t\t\t\t\t_this83.tableWidth = nodeWidth;\n\n\t\t\t\t\tif (table.element.parentNode) {\n\t\t\t\t\t\t_this83.containerHeight = table.element.parentNode.clientHeight;\n\t\t\t\t\t\t_this83.containerWidth = table.element.parentNode.clientWidth;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (table.options.virtualDomHoz) {\n\t\t\t\t\t\ttable.vdomHoz.reinitialize(true);\n\t\t\t\t\t}\n\n\t\t\t\t\ttable.redraw();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.observer.observe(table.element);\n\n\t\ttableStyle = window.getComputedStyle(table.element);\n\n\t\tif (this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue(\"max-height\") || tableStyle.getPropertyValue(\"min-height\"))) {\n\n\t\t\tthis.containerObserver = new ResizeObserver(function (entry) {\n\t\t\t\tif (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {\n\n\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\n\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\n\n\t\t\t\t\tif (_this83.containerHeight != nodeHeight || _this83.containerWidth != nodeWidth) {\n\t\t\t\t\t\t_this83.containerHeight = nodeHeight;\n\t\t\t\t\t\t_this83.containerWidth = nodeWidth;\n\t\t\t\t\t\t_this83.tableHeight = table.element.clientHeight;\n\t\t\t\t\t\t_this83.tableWidth = table.element.clientWidth;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (table.options.virtualDomHoz) {\n\t\t\t\t\t\ttable.vdomHoz.reinitialize(true);\n\t\t\t\t\t}\n\n\t\t\t\t\ttable.redraw();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.containerObserver.observe(this.table.element.parentNode);\n\t\t}\n\t} else {\n\t\tthis.binding = function () {\n\t\t\tif (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {\n\t\t\t\tif (table.options.virtualDomHoz) {\n\t\t\t\t\ttable.vdomHoz.reinitialize(true);\n\t\t\t\t}\n\n\t\t\t\ttable.redraw();\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener(\"resize\", this.binding);\n\t}\n};\n\nResizeTable.prototype.clearBindings = function (row) {\n\tif (this.binding) {\n\t\twindow.removeEventListener(\"resize\", this.binding);\n\t}\n\n\tif (this.observer) {\n\t\tthis.observer.unobserve(this.table.element);\n\t}\n\n\tif (this.containerObserver) {\n\t\tthis.containerObserver.unobserve(this.table.element.parentNode);\n\t}\n};\n\nTabulator.prototype.registerModule(\"resizeTable\", ResizeTable);\nvar ResponsiveLayout = function ResponsiveLayout(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.columns = [];\n\tthis.hiddenColumns = [];\n\tthis.mode = \"\";\n\tthis.index = 0;\n\tthis.collapseFormatter = [];\n\tthis.collapseStartOpen = true;\n\tthis.collapseHandleColumn = false;\n};\n\n//generate resposive columns list\nResponsiveLayout.prototype.initialize = function () {\n\tvar self = this,\n\t columns = [];\n\n\tthis.mode = this.table.options.responsiveLayout;\n\tthis.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;\n\tthis.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;\n\tthis.hiddenColumns = [];\n\n\t//detemine level of responsivity for each column\n\tthis.table.columnManager.columnsByIndex.forEach(function (column, i) {\n\t\tif (column.modules.responsive) {\n\t\t\tif (column.modules.responsive.order && column.modules.responsive.visible) {\n\t\t\t\tcolumn.modules.responsive.index = i;\n\t\t\t\tcolumns.push(column);\n\n\t\t\t\tif (!column.visible && self.mode === \"collapse\") {\n\t\t\t\t\tself.hiddenColumns.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t//sort list by responsivity\n\tcolumns = columns.reverse();\n\tcolumns = columns.sort(function (a, b) {\n\t\tvar diff = b.modules.responsive.order - a.modules.responsive.order;\n\t\treturn diff || b.modules.responsive.index - a.modules.responsive.index;\n\t});\n\n\tthis.columns = columns;\n\n\tif (this.mode === \"collapse\") {\n\t\tthis.generateCollapsedContent();\n\t}\n\n\t//assign collapse column\n\tfor (var _iterator = this.table.columnManager.columnsByIndex, _isArray = Array.isArray(_iterator), _i17 = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n\t\tvar _ref;\n\n\t\tif (_isArray) {\n\t\t\tif (_i17 >= _iterator.length) break;\n\t\t\t_ref = _iterator[_i17++];\n\t\t} else {\n\t\t\t_i17 = _iterator.next();\n\t\t\tif (_i17.done) break;\n\t\t\t_ref = _i17.value;\n\t\t}\n\n\t\tvar col = _ref;\n\n\t\tif (col.definition.formatter == \"responsiveCollapse\") {\n\t\t\tthis.collapseHandleColumn = col;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (this.collapseHandleColumn) {\n\t\tif (this.hiddenColumns.length) {\n\t\t\tthis.collapseHandleColumn.show();\n\t\t} else {\n\t\t\tthis.collapseHandleColumn.hide();\n\t\t}\n\t}\n};\n\n//define layout information\nResponsiveLayout.prototype.initializeColumn = function (column) {\n\tvar def = column.getDefinition();\n\n\tcolumn.modules.responsive = { order: typeof def.responsive === \"undefined\" ? 1 : def.responsive, visible: def.visible === false ? false : true };\n};\n\nResponsiveLayout.prototype.initializeRow = function (row) {\n\tvar el;\n\n\tif (row.type !== \"calc\") {\n\t\tel = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-responsive-collapse\");\n\n\t\trow.modules.responsiveLayout = {\n\t\t\telement: el,\n\t\t\topen: this.collapseStartOpen\n\t\t};\n\n\t\tif (!this.collapseStartOpen) {\n\t\t\tel.style.display = 'none';\n\t\t}\n\t}\n};\n\nResponsiveLayout.prototype.layoutRow = function (row) {\n\tvar rowEl = row.getElement();\n\n\tif (row.modules.responsiveLayout) {\n\t\trowEl.appendChild(row.modules.responsiveLayout.element);\n\t\tthis.generateCollapsedRowContent(row);\n\t}\n};\n\n//update column visibility\nResponsiveLayout.prototype.updateColumnVisibility = function (column, visible) {\n\tvar index;\n\tif (column.modules.responsive) {\n\t\tcolumn.modules.responsive.visible = visible;\n\t\tthis.initialize();\n\t}\n};\n\nResponsiveLayout.prototype.hideColumn = function (column) {\n\tvar colCount = this.hiddenColumns.length;\n\n\tcolumn.hide(false, true);\n\n\tif (this.mode === \"collapse\") {\n\t\tthis.hiddenColumns.unshift(column);\n\t\tthis.generateCollapsedContent();\n\n\t\tif (this.collapseHandleColumn && !colCount) {\n\t\t\tthis.collapseHandleColumn.show();\n\t\t}\n\t}\n};\n\nResponsiveLayout.prototype.showColumn = function (column) {\n\tvar index;\n\n\tcolumn.show(false, true);\n\t//set column width to prevent calculation loops on uninitialized columns\n\tcolumn.setWidth(column.getWidth());\n\n\tif (this.mode === \"collapse\") {\n\t\tindex = this.hiddenColumns.indexOf(column);\n\n\t\tif (index > -1) {\n\t\t\tthis.hiddenColumns.splice(index, 1);\n\t\t}\n\n\t\tthis.generateCollapsedContent();\n\n\t\tif (this.collapseHandleColumn && !this.hiddenColumns.length) {\n\t\t\tthis.collapseHandleColumn.hide();\n\t\t}\n\t}\n};\n\n//redraw columns to fit space\nResponsiveLayout.prototype.update = function () {\n\tvar self = this,\n\t working = true;\n\n\twhile (working) {\n\n\t\tvar width = self.table.modules.layout.getMode() == \"fitColumns\" ? self.table.columnManager.getFlexBaseWidth() : self.table.columnManager.getWidth();\n\n\t\tvar diff = (self.table.options.headerVisible ? self.table.columnManager.element.clientWidth : self.table.element.clientWidth) - width;\n\n\t\tif (diff < 0) {\n\t\t\t//table is too wide\n\t\t\tvar column = self.columns[self.index];\n\n\t\t\tif (column) {\n\t\t\t\tself.hideColumn(column);\n\t\t\t\tself.index++;\n\t\t\t} else {\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t} else {\n\n\t\t\t//table has spare space\n\t\t\tvar _column = self.columns[self.index - 1];\n\n\t\t\tif (_column) {\n\t\t\t\tif (diff > 0) {\n\t\t\t\t\tif (diff >= _column.getWidth()) {\n\t\t\t\t\t\tself.showColumn(_column);\n\t\t\t\t\t\tself.index--;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tworking = false;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tif (!self.table.rowManager.activeRowsCount) {\n\t\t\tself.table.rowManager.renderEmptyScroll();\n\t\t}\n\t}\n};\n\nResponsiveLayout.prototype.generateCollapsedContent = function () {\n\tvar self = this,\n\t rows = this.table.rowManager.getDisplayRows();\n\n\trows.forEach(function (row) {\n\t\tself.generateCollapsedRowContent(row);\n\t});\n};\n\nResponsiveLayout.prototype.generateCollapsedRowContent = function (row) {\n\tvar el, contents;\n\n\tif (row.modules.responsiveLayout) {\n\t\tel = row.modules.responsiveLayout.element;\n\n\t\twhile (el.firstChild) {\n\t\t\tel.removeChild(el.firstChild);\n\t\t}contents = this.collapseFormatter(this.generateCollapsedRowData(row));\n\t\tif (contents) {\n\t\t\tel.appendChild(contents);\n\t\t}\n\t}\n};\n\nResponsiveLayout.prototype.generateCollapsedRowData = function (row) {\n\tvar self = this,\n\t data = row.getData(),\n\t output = [],\n\t mockCellComponent;\n\n\tthis.hiddenColumns.forEach(function (column) {\n\t\tvar value = column.getFieldValue(data);\n\n\t\tif (column.definition.title && column.field) {\n\t\t\tif (column.modules.format && self.table.options.responsiveLayoutCollapseUseFormatters) {\n\n\t\t\t\tmockCellComponent = {\n\t\t\t\t\tvalue: false,\n\t\t\t\t\tdata: {},\n\t\t\t\t\tgetValue: function getValue() {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t},\n\t\t\t\t\tgetData: function getData() {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t},\n\t\t\t\t\tgetElement: function getElement() {\n\t\t\t\t\t\treturn document.createElement(\"div\");\n\t\t\t\t\t},\n\t\t\t\t\tgetRow: function getRow() {\n\t\t\t\t\t\treturn row.getComponent();\n\t\t\t\t\t},\n\t\t\t\t\tgetColumn: function getColumn() {\n\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\toutput.push({\n\t\t\t\t\tfield: column.field,\n\t\t\t\t\ttitle: column.definition.title,\n\t\t\t\t\tvalue: column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params)\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\toutput.push({\n\t\t\t\t\tfield: column.field,\n\t\t\t\t\ttitle: column.definition.title,\n\t\t\t\t\tvalue: value\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n\n\treturn output;\n};\n\nResponsiveLayout.prototype.formatCollapsedData = function (data) {\n\tvar list = document.createElement(\"table\");\n\n\tdata.forEach(function (item) {\n\t\tvar row = document.createElement(\"tr\");\n\t\tvar titleData = document.createElement(\"td\");\n\t\tvar valueData = document.createElement(\"td\");\n\t\tvar node_content;\n\n\t\tvar titleHighlight = document.createElement(\"strong\");\n\t\ttitleData.appendChild(titleHighlight);\n\t\tthis.table.modules.localize.bind(\"columns|\" + item.field, function (text) {\n\t\t\ttitleHighlight.innerText = text || item.title;\n\t\t});\n\n\t\tif (item.value instanceof Node) {\n\t\t\tnode_content = document.createElement(\"div\");\n\t\t\tnode_content.appendChild(item.value);\n\t\t\tvalueData.appendChild(node_content);\n\t\t} else {\n\t\t\tvalueData.innerHTML = item.value;\n\t\t}\n\n\t\trow.appendChild(titleData);\n\t\trow.appendChild(valueData);\n\t\tlist.appendChild(row);\n\t}, this);\n\n\treturn Object.keys(data).length ? list : \"\";\n};\n\nTabulator.prototype.registerModule(\"responsiveLayout\", ResponsiveLayout);\n\nvar SelectRow = function SelectRow(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.selecting = false; //flag selecting in progress\n\tthis.lastClickedRow = false; //last clicked row\n\tthis.selectPrev = []; //hold previously selected element for drag drop selection\n\tthis.selectedRows = []; //hold selected rows\n\tthis.headerCheckboxElement = null; // hold header select element\n};\n\nSelectRow.prototype.clearSelectionData = function (silent) {\n\tthis.selecting = false;\n\tthis.lastClickedRow = false;\n\tthis.selectPrev = [];\n\tthis.selectedRows = [];\n\n\tif (!silent) {\n\t\tthis._rowSelectionChanged();\n\t}\n};\n\nSelectRow.prototype.initializeRow = function (row) {\n\tvar self = this,\n\t element = row.getElement();\n\n\t// trigger end of row selection\n\tvar endSelect = function endSelect() {\n\n\t\tsetTimeout(function () {\n\t\t\tself.selecting = false;\n\t\t}, 50);\n\n\t\tdocument.body.removeEventListener(\"mouseup\", endSelect);\n\t};\n\n\trow.modules.select = { selected: false };\n\n\t//set row selection class\n\tif (self.table.options.selectableCheck.call(this.table, row.getComponent())) {\n\t\telement.classList.add(\"tabulator-selectable\");\n\t\telement.classList.remove(\"tabulator-unselectable\");\n\n\t\tif (self.table.options.selectable && self.table.options.selectable != \"highlight\") {\n\t\t\tif (self.table.options.selectableRangeMode === \"click\") {\n\t\t\t\telement.addEventListener(\"click\", function (e) {\n\t\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\tself.lastClickedRow = self.lastClickedRow || row;\n\n\t\t\t\t\t\tvar lastClickedRowIdx = self.table.rowManager.getDisplayRowIndex(self.lastClickedRow);\n\t\t\t\t\t\tvar rowIdx = self.table.rowManager.getDisplayRowIndex(row);\n\n\t\t\t\t\t\tvar fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;\n\t\t\t\t\t\tvar toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;\n\n\t\t\t\t\t\tvar rows = self.table.rowManager.getDisplayRows().slice(0);\n\t\t\t\t\t\tvar toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);\n\n\t\t\t\t\t\tif (e.ctrlKey || e.metaKey) {\n\t\t\t\t\t\t\ttoggledRows.forEach(function (toggledRow) {\n\t\t\t\t\t\t\t\tif (toggledRow !== self.lastClickedRow) {\n\n\t\t\t\t\t\t\t\t\tif (self.table.options.selectable !== true && !self.isRowSelected(row)) {\n\t\t\t\t\t\t\t\t\t\tif (self.selectedRows.length < self.table.options.selectable) {\n\t\t\t\t\t\t\t\t\t\t\tself.toggleRow(toggledRow);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tself.toggleRow(toggledRow);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tself.lastClickedRow = row;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.deselectRows(undefined, true);\n\n\t\t\t\t\t\t\tif (self.table.options.selectable !== true) {\n\t\t\t\t\t\t\t\tif (toggledRows.length > self.table.options.selectable) {\n\t\t\t\t\t\t\t\t\ttoggledRows = toggledRows.slice(0, self.table.options.selectable);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tself.selectRows(toggledRows);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t} else if (e.ctrlKey || e.metaKey) {\n\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\tself.lastClickedRow = row;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.deselectRows(undefined, true);\n\t\t\t\t\t\tself.selectRows(row);\n\t\t\t\t\t\tself.lastClickedRow = row;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\telement.addEventListener(\"click\", function (e) {\n\t\t\t\t\tif (!self.table.modExists(\"edit\") || !self.table.modules.edit.getCurrentCell()) {\n\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!self.selecting) {\n\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\telement.addEventListener(\"mousedown\", function (e) {\n\t\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\t\tself.table._clearSelection();\n\n\t\t\t\t\t\tself.selecting = true;\n\n\t\t\t\t\t\tself.selectPrev = [];\n\n\t\t\t\t\t\tdocument.body.addEventListener(\"mouseup\", endSelect);\n\t\t\t\t\t\tdocument.body.addEventListener(\"keyup\", endSelect);\n\n\t\t\t\t\t\tself.toggleRow(row);\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\telement.addEventListener(\"mouseenter\", function (e) {\n\t\t\t\t\tif (self.selecting) {\n\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\tself.toggleRow(row);\n\n\t\t\t\t\t\tif (self.selectPrev[1] == row) {\n\t\t\t\t\t\t\tself.toggleRow(self.selectPrev[0]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\telement.addEventListener(\"mouseout\", function (e) {\n\t\t\t\t\tif (self.selecting) {\n\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\tself.selectPrev.unshift(row);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t} else {\n\t\telement.classList.add(\"tabulator-unselectable\");\n\t\telement.classList.remove(\"tabulator-selectable\");\n\t}\n};\n\n//toggle row selection\nSelectRow.prototype.toggleRow = function (row) {\n\tif (this.table.options.selectableCheck.call(this.table, row.getComponent())) {\n\t\tif (row.modules.select && row.modules.select.selected) {\n\t\t\tthis._deselectRow(row);\n\t\t} else {\n\t\t\tthis._selectRow(row);\n\t\t}\n\t}\n};\n\n//select a number of rows\nSelectRow.prototype.selectRows = function (rows) {\n\tvar _this84 = this;\n\n\tvar rowMatch;\n\n\tswitch (typeof rows === 'undefined' ? 'undefined' : _typeof(rows)) {\n\t\tcase \"undefined\":\n\t\t\tthis.table.rowManager.rows.forEach(function (row) {\n\t\t\t\t_this84._selectRow(row, true, true);\n\t\t\t});\n\n\t\t\tthis._rowSelectionChanged();\n\t\t\tbreak;\n\n\t\tcase \"string\":\n\n\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\n\t\t\tif (rowMatch) {\n\t\t\t\tthis._selectRow(rowMatch, true, true);\n\t\t\t} else {\n\t\t\t\tthis.table.rowManager.getRows(rows).forEach(function (row) {\n\t\t\t\t\t_this84._selectRow(row, true, true);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis._rowSelectionChanged();\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tif (Array.isArray(rows)) {\n\t\t\t\trows.forEach(function (row) {\n\t\t\t\t\t_this84._selectRow(row, true, true);\n\t\t\t\t});\n\n\t\t\t\tthis._rowSelectionChanged();\n\t\t\t} else {\n\t\t\t\tthis._selectRow(rows, false, true);\n\t\t\t}\n\t\t\tbreak;\n\t}\n};\n\n//select an individual row\nSelectRow.prototype._selectRow = function (rowInfo, silent, force) {\n\tvar index;\n\n\t//handle max row count\n\tif (!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force) {\n\t\tif (this.selectedRows.length >= this.table.options.selectable) {\n\t\t\tif (this.table.options.selectableRollingSelection) {\n\t\t\t\tthis._deselectRow(this.selectedRows[0]);\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar row = this.table.rowManager.findRow(rowInfo);\n\n\tif (row) {\n\t\tif (this.selectedRows.indexOf(row) == -1) {\n\t\t\trow.getElement().classList.add(\"tabulator-selected\");\n\t\t\tif (!row.modules.select) {\n\t\t\t\trow.modules.select = {};\n\t\t\t}\n\n\t\t\trow.modules.select.selected = true;\n\t\t\tif (row.modules.select.checkboxEl) {\n\t\t\t\trow.modules.select.checkboxEl.checked = true;\n\t\t\t}\n\n\t\t\tthis.selectedRows.push(row);\n\n\t\t\tif (this.table.options.dataTreeSelectPropagate) {\n\t\t\t\tthis.childRowSelection(row, true);\n\t\t\t}\n\n\t\t\tif (!silent) {\n\t\t\t\tthis.table.options.rowSelected.call(this.table, row.getComponent());\n\t\t\t}\n\n\t\t\tthis._rowSelectionChanged(silent);\n\t\t}\n\t} else {\n\t\tif (!silent) {\n\t\t\tconsole.warn(\"Selection Error - No such row found, ignoring selection:\" + rowInfo);\n\t\t}\n\t}\n};\n\nSelectRow.prototype.isRowSelected = function (row) {\n\treturn this.selectedRows.indexOf(row) !== -1;\n};\n\n//deselect a number of rows\nSelectRow.prototype.deselectRows = function (rows, silent) {\n\tvar self = this,\n\t rowCount;\n\n\tif (typeof rows == \"undefined\") {\n\n\t\trowCount = self.selectedRows.length;\n\n\t\tfor (var _i18 = 0; _i18 < rowCount; _i18++) {\n\t\t\tself._deselectRow(self.selectedRows[0], true);\n\t\t}\n\n\t\tself._rowSelectionChanged(silent);\n\t} else {\n\t\tif (Array.isArray(rows)) {\n\t\t\trows.forEach(function (row) {\n\t\t\t\tself._deselectRow(row, true);\n\t\t\t});\n\n\t\t\tself._rowSelectionChanged(silent);\n\t\t} else {\n\t\t\tself._deselectRow(rows, silent);\n\t\t}\n\t}\n};\n\n//deselect an individual row\nSelectRow.prototype._deselectRow = function (rowInfo, silent) {\n\tvar self = this,\n\t row = self.table.rowManager.findRow(rowInfo),\n\t index;\n\n\tif (row) {\n\t\tindex = self.selectedRows.findIndex(function (selectedRow) {\n\t\t\treturn selectedRow == row;\n\t\t});\n\n\t\tif (index > -1) {\n\n\t\t\trow.getElement().classList.remove(\"tabulator-selected\");\n\t\t\tif (!row.modules.select) {\n\t\t\t\trow.modules.select = {};\n\t\t\t}\n\n\t\t\trow.modules.select.selected = false;\n\t\t\tif (row.modules.select.checkboxEl) {\n\t\t\t\trow.modules.select.checkboxEl.checked = false;\n\t\t\t}\n\t\t\tself.selectedRows.splice(index, 1);\n\n\t\t\tif (this.table.options.dataTreeSelectPropagate) {\n\t\t\t\tthis.childRowSelection(row, false);\n\t\t\t}\n\n\t\t\tif (!silent) {\n\t\t\t\tself.table.options.rowDeselected.call(this.table, row.getComponent());\n\t\t\t}\n\n\t\t\tself._rowSelectionChanged(silent);\n\t\t}\n\t} else {\n\t\tif (!silent) {\n\t\t\tconsole.warn(\"Deselection Error - No such row found, ignoring selection:\" + rowInfo);\n\t\t}\n\t}\n};\n\nSelectRow.prototype.getSelectedData = function () {\n\tvar data = [];\n\n\tthis.selectedRows.forEach(function (row) {\n\t\tdata.push(row.getData());\n\t});\n\n\treturn data;\n};\n\nSelectRow.prototype.getSelectedRows = function () {\n\n\tvar rows = [];\n\n\tthis.selectedRows.forEach(function (row) {\n\t\trows.push(row.getComponent());\n\t});\n\n\treturn rows;\n};\n\nSelectRow.prototype._rowSelectionChanged = function (silent) {\n\tif (this.headerCheckboxElement) {\n\t\tif (this.selectedRows.length === 0) {\n\t\t\tthis.headerCheckboxElement.checked = false;\n\t\t\tthis.headerCheckboxElement.indeterminate = false;\n\t\t} else if (this.table.rowManager.rows.length === this.selectedRows.length) {\n\t\t\tthis.headerCheckboxElement.checked = true;\n\t\t\tthis.headerCheckboxElement.indeterminate = false;\n\t\t} else {\n\t\t\tthis.headerCheckboxElement.indeterminate = true;\n\t\t\tthis.headerCheckboxElement.checked = false;\n\t\t}\n\t}\n\n\tif (!silent) {\n\t\tthis.table.options.rowSelectionChanged.call(this.table, this.getSelectedData(), this.getSelectedRows());\n\t}\n};\n\nSelectRow.prototype.registerRowSelectCheckbox = function (row, element) {\n\tif (!row._row.modules.select) {\n\t\trow._row.modules.select = {};\n\t}\n\n\trow._row.modules.select.checkboxEl = element;\n};\n\nSelectRow.prototype.registerHeaderSelectCheckbox = function (element) {\n\tthis.headerCheckboxElement = element;\n};\n\nSelectRow.prototype.childRowSelection = function (row, select) {\n\tvar children = this.table.modules.dataTree.getChildren(row, true);\n\n\tif (select) {\n\t\tfor (var _iterator2 = children, _isArray2 = Array.isArray(_iterator2), _i19 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n\t\t\tvar _ref2;\n\n\t\t\tif (_isArray2) {\n\t\t\t\tif (_i19 >= _iterator2.length) break;\n\t\t\t\t_ref2 = _iterator2[_i19++];\n\t\t\t} else {\n\t\t\t\t_i19 = _iterator2.next();\n\t\t\t\tif (_i19.done) break;\n\t\t\t\t_ref2 = _i19.value;\n\t\t\t}\n\n\t\t\tvar child = _ref2;\n\n\t\t\tthis._selectRow(child, true);\n\t\t}\n\t} else {\n\t\tfor (var _iterator3 = children, _isArray3 = Array.isArray(_iterator3), _i20 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n\t\t\tvar _ref3;\n\n\t\t\tif (_isArray3) {\n\t\t\t\tif (_i20 >= _iterator3.length) break;\n\t\t\t\t_ref3 = _iterator3[_i20++];\n\t\t\t} else {\n\t\t\t\t_i20 = _iterator3.next();\n\t\t\t\tif (_i20.done) break;\n\t\t\t\t_ref3 = _i20.value;\n\t\t\t}\n\n\t\t\tvar _child = _ref3;\n\n\t\t\tthis._deselectRow(_child, true);\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"selectRow\", SelectRow);\n\nvar Sort = function Sort(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.sortList = []; //holder current sort\n\tthis.changed = false; //has the sort changed since last render\n};\n\n//initialize column header for sorting\nSort.prototype.initializeColumn = function (column, content) {\n\tvar self = this,\n\t sorter = false,\n\t colEl,\n\t arrowEl;\n\n\tswitch (_typeof(column.definition.sorter)) {\n\t\tcase \"string\":\n\t\t\tif (self.sorters[column.definition.sorter]) {\n\t\t\t\tsorter = self.sorters[column.definition.sorter];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Sort Error - No such sorter found: \", column.definition.sorter);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tsorter = column.definition.sorter;\n\t\t\tbreak;\n\t}\n\n\tcolumn.modules.sort = {\n\t\tsorter: sorter, dir: \"none\",\n\t\tparams: column.definition.sorterParams || {},\n\t\tstartingDir: column.definition.headerSortStartingDir || \"asc\",\n\t\ttristate: typeof column.definition.headerSortTristate !== \"undefined\" ? column.definition.headerSortTristate : this.table.options.headerSortTristate\n\t};\n\n\tif (typeof column.definition.headerSort === \"undefined\" ? this.table.options.headerSort !== false : column.definition.headerSort !== false) {\n\n\t\tcolEl = column.getElement();\n\n\t\tcolEl.classList.add(\"tabulator-sortable\");\n\n\t\tarrowEl = document.createElement(\"div\");\n\t\tarrowEl.classList.add(\"tabulator-col-sorter\");\n\n\t\tif (_typeof(this.table.options.headerSortElement) == \"object\") {\n\t\t\tarrowEl.appendChild(this.table.options.headerSortElement);\n\t\t} else {\n\t\t\tarrowEl.innerHTML = this.table.options.headerSortElement;\n\t\t}\n\n\t\t//create sorter arrow\n\t\tcontent.appendChild(arrowEl);\n\n\t\tcolumn.modules.sort.element = arrowEl;\n\n\t\t//sort on click\n\t\tcolEl.addEventListener(\"click\", function (e) {\n\t\t\tvar dir = \"\",\n\t\t\t sorters = [],\n\t\t\t match = false;\n\n\t\t\tif (column.modules.sort) {\n\t\t\t\tif (column.modules.sort.tristate) {\n\t\t\t\t\tif (column.modules.sort.dir == \"none\") {\n\t\t\t\t\t\tdir = column.modules.sort.startingDir;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (column.modules.sort.dir == column.modules.sort.startingDir) {\n\t\t\t\t\t\t\tdir = column.modules.sort.dir == \"asc\" ? \"desc\" : \"asc\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdir = \"none\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tswitch (column.modules.sort.dir) {\n\t\t\t\t\t\tcase \"asc\":\n\t\t\t\t\t\t\tdir = \"desc\";\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase \"desc\":\n\t\t\t\t\t\t\tdir = \"asc\";\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (self.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {\n\t\t\t\t\tsorters = self.getSort();\n\n\t\t\t\t\tmatch = sorters.findIndex(function (sorter) {\n\t\t\t\t\t\treturn sorter.field === column.getField();\n\t\t\t\t\t});\n\n\t\t\t\t\tif (match > -1) {\n\t\t\t\t\t\tsorters[match].dir = dir;\n\n\t\t\t\t\t\tif (match != sorters.length - 1) {\n\t\t\t\t\t\t\tmatch = sorters.splice(match, 1)[0];\n\t\t\t\t\t\t\tif (dir != \"none\") {\n\t\t\t\t\t\t\t\tsorters.push(match);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (dir != \"none\") {\n\t\t\t\t\t\t\tsorters.push({ column: column, dir: dir });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t//add to existing sort\n\t\t\t\t\tself.setSort(sorters);\n\t\t\t\t} else {\n\t\t\t\t\tif (dir == \"none\") {\n\t\t\t\t\t\tself.clear();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//sort by column only\n\t\t\t\t\t\tself.setSort(column, dir);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tself.table.rowManager.sorterRefresh(!self.sortList.length);\n\t\t\t}\n\t\t});\n\t}\n};\n\n//check if the sorters have changed since last use\nSort.prototype.hasChanged = function () {\n\tvar changed = this.changed;\n\tthis.changed = false;\n\treturn changed;\n};\n\n//return current sorters\nSort.prototype.getSort = function () {\n\tvar self = this,\n\t sorters = [];\n\n\tself.sortList.forEach(function (item) {\n\t\tif (item.column) {\n\t\t\tsorters.push({ column: item.column.getComponent(), field: item.column.getField(), dir: item.dir });\n\t\t}\n\t});\n\n\treturn sorters;\n};\n\n//change sort list and trigger sort\nSort.prototype.setSort = function (sortList, dir) {\n\tvar self = this,\n\t newSortList = [];\n\n\tif (!Array.isArray(sortList)) {\n\t\tsortList = [{ column: sortList, dir: dir }];\n\t}\n\n\tsortList.forEach(function (item) {\n\t\tvar column;\n\n\t\tcolumn = self.table.columnManager.findColumn(item.column);\n\n\t\tif (column) {\n\t\t\titem.column = column;\n\t\t\tnewSortList.push(item);\n\t\t\tself.changed = true;\n\t\t} else {\n\t\t\tconsole.warn(\"Sort Warning - Sort field does not exist and is being ignored: \", item.column);\n\t\t}\n\t});\n\n\tself.sortList = newSortList;\n\n\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.sort) {\n\t\tthis.table.modules.persistence.save(\"sort\");\n\t}\n};\n\n//clear sorters\nSort.prototype.clear = function () {\n\tthis.setSort([]);\n};\n\n//find appropriate sorter for column\nSort.prototype.findSorter = function (column) {\n\tvar row = this.table.rowManager.activeRows[0],\n\t sorter = \"string\",\n\t field,\n\t value;\n\n\tif (row) {\n\t\trow = row.getData();\n\t\tfield = column.getField();\n\n\t\tif (field) {\n\n\t\t\tvalue = column.getFieldValue(row);\n\n\t\t\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\t\t\t\tcase \"undefined\":\n\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tsorter = \"boolean\";\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif (!isNaN(value) && value !== \"\") {\n\t\t\t\t\t\tsorter = \"number\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) {\n\t\t\t\t\t\t\tsorter = \"alphanum\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn this.sorters[sorter];\n};\n\n//work through sort list sorting data\nSort.prototype.sort = function (data) {\n\tvar self = this,\n\t sortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,\n\t sortListActual = [],\n\t rowComponents = [],\n\t lastSort;\n\n\tif (self.table.options.dataSorting) {\n\t\tself.table.options.dataSorting.call(self.table, self.getSort());\n\t}\n\n\tself.clearColumnHeaders();\n\n\tif (!self.table.options.ajaxSorting) {\n\n\t\t//build list of valid sorters and trigger column specific callbacks before sort begins\n\t\tsortList.forEach(function (item, i) {\n\t\t\tvar sortObj = item.column.modules.sort;\n\n\t\t\tif (item.column && sortObj) {\n\n\t\t\t\t//if no sorter has been defined, take a guess\n\t\t\t\tif (!sortObj.sorter) {\n\t\t\t\t\tsortObj.sorter = self.findSorter(item.column);\n\t\t\t\t}\n\n\t\t\t\titem.params = typeof sortObj.params === \"function\" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;\n\n\t\t\t\tsortListActual.push(item);\n\t\t\t}\n\n\t\t\tself.setColumnHeader(item.column, item.dir);\n\t\t});\n\n\t\t//sort data\n\t\tif (sortListActual.length) {\n\t\t\tself._sortItems(data, sortListActual);\n\t\t}\n\t} else {\n\t\tsortList.forEach(function (item, i) {\n\t\t\tself.setColumnHeader(item.column, item.dir);\n\t\t});\n\t}\n\n\tif (self.table.options.dataSorted) {\n\t\tdata.forEach(function (row) {\n\t\t\trowComponents.push(row.getComponent());\n\t\t});\n\n\t\tself.table.options.dataSorted.call(self.table, self.getSort(), rowComponents);\n\t}\n};\n\n//clear sort arrows on columns\nSort.prototype.clearColumnHeaders = function () {\n\tthis.table.columnManager.getRealColumns().forEach(function (column) {\n\t\tif (column.modules.sort) {\n\t\t\tcolumn.modules.sort.dir = \"none\";\n\t\t\tcolumn.getElement().setAttribute(\"aria-sort\", \"none\");\n\t\t}\n\t});\n};\n\n//set the column header sort direction\nSort.prototype.setColumnHeader = function (column, dir) {\n\tcolumn.modules.sort.dir = dir;\n\tcolumn.getElement().setAttribute(\"aria-sort\", dir);\n};\n\n//sort each item in sort list\nSort.prototype._sortItems = function (data, sortList) {\n\tvar _this85 = this;\n\n\tvar sorterCount = sortList.length - 1;\n\n\tdata.sort(function (a, b) {\n\t\tvar result;\n\n\t\tfor (var i = sorterCount; i >= 0; i--) {\n\t\t\tvar sortItem = sortList[i];\n\n\t\t\tresult = _this85._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);\n\n\t\t\tif (result !== 0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t});\n};\n\n//process individual rows for a sort function on active data\nSort.prototype._sortRow = function (a, b, column, dir, params) {\n\tvar el1Comp, el2Comp, colComp;\n\n\t//switch elements depending on search direction\n\tvar el1 = dir == \"asc\" ? a : b;\n\tvar el2 = dir == \"asc\" ? b : a;\n\n\ta = column.getFieldValue(el1.getData());\n\tb = column.getFieldValue(el2.getData());\n\n\ta = typeof a !== \"undefined\" ? a : \"\";\n\tb = typeof b !== \"undefined\" ? b : \"\";\n\n\tel1Comp = el1.getComponent();\n\tel2Comp = el2.getComponent();\n\n\treturn column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);\n};\n\n//default data sorters\nSort.prototype.sorters = {\n\n\t//sort numbers\n\tnumber: function number(a, b, aRow, bRow, column, dir, params) {\n\t\tvar alignEmptyValues = params.alignEmptyValues;\n\t\tvar decimal = params.decimalSeparator;\n\t\tvar thousand = params.thousandSeparator;\n\t\tvar emptyAlign = 0;\n\n\t\ta = String(a);\n\t\tb = String(b);\n\n\t\tif (thousand) {\n\t\t\ta = a.split(thousand).join(\"\");\n\t\t\tb = b.split(thousand).join(\"\");\n\t\t}\n\n\t\tif (decimal) {\n\t\t\ta = a.split(decimal).join(\".\");\n\t\t\tb = b.split(decimal).join(\".\");\n\t\t}\n\n\t\ta = parseFloat(a);\n\t\tb = parseFloat(b);\n\n\t\t//handle non numeric values\n\t\tif (isNaN(a)) {\n\t\t\temptyAlign = isNaN(b) ? 0 : -1;\n\t\t} else if (isNaN(b)) {\n\t\t\temptyAlign = 1;\n\t\t} else {\n\t\t\t//compare valid values\n\t\t\treturn a - b;\n\t\t}\n\n\t\t//fix empty values in position\n\t\tif (alignEmptyValues === \"top\" && dir === \"desc\" || alignEmptyValues === \"bottom\" && dir === \"asc\") {\n\t\t\temptyAlign *= -1;\n\t\t}\n\n\t\treturn emptyAlign;\n\t},\n\n\t//sort strings\n\tstring: function string(a, b, aRow, bRow, column, dir, params) {\n\t\tvar alignEmptyValues = params.alignEmptyValues;\n\t\tvar emptyAlign = 0;\n\t\tvar locale;\n\n\t\t//handle empty values\n\t\tif (!a) {\n\t\t\temptyAlign = !b ? 0 : -1;\n\t\t} else if (!b) {\n\t\t\temptyAlign = 1;\n\t\t} else {\n\t\t\t//compare valid values\n\t\t\tswitch (_typeof(params.locale)) {\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tif (params.locale) {\n\t\t\t\t\t\tlocale = this.table.modules.localize.getLocale();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"string\":\n\t\t\t\t\tlocale = params.locale;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);\n\t\t}\n\n\t\t//fix empty values in position\n\t\tif (alignEmptyValues === \"top\" && dir === \"desc\" || alignEmptyValues === \"bottom\" && dir === \"asc\") {\n\t\t\temptyAlign *= -1;\n\t\t}\n\n\t\treturn emptyAlign;\n\t},\n\n\t//sort date\n\tdate: function date(a, b, aRow, bRow, column, dir, params) {\n\t\tif (!params.format) {\n\t\t\tparams.format = \"DD/MM/YYYY\";\n\t\t}\n\n\t\treturn this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params);\n\t},\n\n\t//sort HH:mm formatted times\n\ttime: function time(a, b, aRow, bRow, column, dir, params) {\n\t\tif (!params.format) {\n\t\t\tparams.format = \"HH:mm\";\n\t\t}\n\n\t\treturn this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params);\n\t},\n\n\t//sort datetime\n\tdatetime: function datetime(a, b, aRow, bRow, column, dir, params) {\n\t\tvar format = params.format || \"DD/MM/YYYY HH:mm:ss\",\n\t\t alignEmptyValues = params.alignEmptyValues,\n\t\t emptyAlign = 0;\n\n\t\tif (typeof moment != \"undefined\") {\n\t\t\ta = moment(a, format);\n\t\t\tb = moment(b, format);\n\n\t\t\tif (!a.isValid()) {\n\t\t\t\temptyAlign = !b.isValid() ? 0 : -1;\n\t\t\t} else if (!b.isValid()) {\n\t\t\t\temptyAlign = 1;\n\t\t\t} else {\n\t\t\t\t//compare valid values\n\t\t\t\treturn a - b;\n\t\t\t}\n\n\t\t\t//fix empty values in position\n\t\t\tif (alignEmptyValues === \"top\" && dir === \"desc\" || alignEmptyValues === \"bottom\" && dir === \"asc\") {\n\t\t\t\temptyAlign *= -1;\n\t\t\t}\n\n\t\t\treturn emptyAlign;\n\t\t} else {\n\t\t\tconsole.error(\"Sort Error - 'datetime' sorter is dependant on moment.js\");\n\t\t}\n\t},\n\n\t//sort booleans\n\tboolean: function boolean(a, b, aRow, bRow, column, dir, params) {\n\t\tvar el1 = a === true || a === \"true\" || a === \"True\" || a === 1 ? 1 : 0;\n\t\tvar el2 = b === true || b === \"true\" || b === \"True\" || b === 1 ? 1 : 0;\n\n\t\treturn el1 - el2;\n\t},\n\n\t//sort if element contains any data\n\tarray: function array(a, b, aRow, bRow, column, dir, params) {\n\t\tvar el1 = 0;\n\t\tvar el2 = 0;\n\t\tvar type = params.type || \"length\";\n\t\tvar alignEmptyValues = params.alignEmptyValues;\n\t\tvar emptyAlign = 0;\n\n\t\tfunction calc(value) {\n\n\t\t\tswitch (type) {\n\t\t\t\tcase \"length\":\n\t\t\t\t\treturn value.length;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"sum\":\n\t\t\t\t\treturn value.reduce(function (c, d) {\n\t\t\t\t\t\treturn c + d;\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"max\":\n\t\t\t\t\treturn Math.max.apply(null, value);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"min\":\n\t\t\t\t\treturn Math.min.apply(null, value);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"avg\":\n\t\t\t\t\treturn value.reduce(function (c, d) {\n\t\t\t\t\t\treturn c + d;\n\t\t\t\t\t}) / value.length;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t//handle non array values\n\t\tif (!Array.isArray(a)) {\n\t\t\talignEmptyValues = !Array.isArray(b) ? 0 : -1;\n\t\t} else if (!Array.isArray(b)) {\n\t\t\talignEmptyValues = 1;\n\t\t} else {\n\n\t\t\t//compare valid values\n\t\t\tel1 = a ? calc(a) : 0;\n\t\t\tel2 = b ? calc(b) : 0;\n\n\t\t\treturn el1 - el2;\n\t\t}\n\n\t\t//fix empty values in position\n\t\tif (alignEmptyValues === \"top\" && dir === \"desc\" || alignEmptyValues === \"bottom\" && dir === \"asc\") {\n\t\t\temptyAlign *= -1;\n\t\t}\n\n\t\treturn emptyAlign;\n\t},\n\n\t//sort if element contains any data\n\texists: function exists(a, b, aRow, bRow, column, dir, params) {\n\t\tvar el1 = typeof a == \"undefined\" ? 0 : 1;\n\t\tvar el2 = typeof b == \"undefined\" ? 0 : 1;\n\n\t\treturn el1 - el2;\n\t},\n\n\t//sort alpha numeric strings\n\talphanum: function alphanum(as, bs, aRow, bRow, column, dir, params) {\n\t\tvar a,\n\t\t b,\n\t\t a1,\n\t\t b1,\n\t\t i = 0,\n\t\t L,\n\t\t rx = /(\\d+)|(\\D+)/g,\n\t\t rd = /\\d/;\n\t\tvar alignEmptyValues = params.alignEmptyValues;\n\t\tvar emptyAlign = 0;\n\n\t\t//handle empty values\n\t\tif (!as && as !== 0) {\n\t\t\temptyAlign = !bs && bs !== 0 ? 0 : -1;\n\t\t} else if (!bs && bs !== 0) {\n\t\t\temptyAlign = 1;\n\t\t} else {\n\n\t\t\tif (isFinite(as) && isFinite(bs)) return as - bs;\n\t\t\ta = String(as).toLowerCase();\n\t\t\tb = String(bs).toLowerCase();\n\t\t\tif (a === b) return 0;\n\t\t\tif (!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\n\t\t\ta = a.match(rx);\n\t\t\tb = b.match(rx);\n\t\t\tL = a.length > b.length ? b.length : a.length;\n\t\t\twhile (i < L) {\n\t\t\t\ta1 = a[i];\n\t\t\t\tb1 = b[i++];\n\t\t\t\tif (a1 !== b1) {\n\t\t\t\t\tif (isFinite(a1) && isFinite(b1)) {\n\t\t\t\t\t\tif (a1.charAt(0) === \"0\") a1 = \".\" + a1;\n\t\t\t\t\t\tif (b1.charAt(0) === \"0\") b1 = \".\" + b1;\n\t\t\t\t\t\treturn a1 - b1;\n\t\t\t\t\t} else return a1 > b1 ? 1 : -1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn a.length > b.length;\n\t\t}\n\n\t\t//fix empty values in position\n\t\tif (alignEmptyValues === \"top\" && dir === \"desc\" || alignEmptyValues === \"bottom\" && dir === \"asc\") {\n\t\t\temptyAlign *= -1;\n\t\t}\n\n\t\treturn emptyAlign;\n\t}\n};\n\nTabulator.prototype.registerModule(\"sort\", Sort);\n\nvar Validate = function Validate(table) {\n\tthis.table = table;\n\tthis.invalidCells = [];\n};\n\n//validate\nValidate.prototype.initializeColumn = function (column) {\n\tvar self = this,\n\t config = [],\n\t validator;\n\n\tif (column.definition.validator) {\n\n\t\tif (Array.isArray(column.definition.validator)) {\n\t\t\tcolumn.definition.validator.forEach(function (item) {\n\t\t\t\tvalidator = self._extractValidator(item);\n\n\t\t\t\tif (validator) {\n\t\t\t\t\tconfig.push(validator);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tvalidator = this._extractValidator(column.definition.validator);\n\n\t\t\tif (validator) {\n\t\t\t\tconfig.push(validator);\n\t\t\t}\n\t\t}\n\n\t\tcolumn.modules.validate = config.length ? config : false;\n\t}\n};\n\nValidate.prototype._extractValidator = function (value) {\n\tvar type, params, pos;\n\n\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\t\tcase \"string\":\n\t\t\tpos = value.indexOf(':');\n\n\t\t\tif (pos > -1) {\n\t\t\t\ttype = value.substring(0, pos);\n\t\t\t\tparams = value.substring(pos + 1);\n\t\t\t} else {\n\t\t\t\ttype = value;\n\t\t\t}\n\n\t\t\treturn this._buildValidator(type, params);\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\treturn this._buildValidator(value);\n\t\t\tbreak;\n\n\t\tcase \"object\":\n\t\t\treturn this._buildValidator(value.type, value.parameters);\n\t\t\tbreak;\n\t}\n};\n\nValidate.prototype._buildValidator = function (type, params) {\n\n\tvar func = typeof type == \"function\" ? type : this.validators[type];\n\n\tif (!func) {\n\t\tconsole.warn(\"Validator Setup Error - No matching validator found:\", type);\n\t\treturn false;\n\t} else {\n\t\treturn {\n\t\t\ttype: typeof type == \"function\" ? \"function\" : type,\n\t\t\tfunc: func,\n\t\t\tparams: params\n\t\t};\n\t}\n};\n\nValidate.prototype.validate = function (validators, cell, value) {\n\tvar self = this,\n\t valid = [],\n\t invalidIndex = this.invalidCells.indexOf(cell);\n\n\tif (validators) {\n\t\tvalidators.forEach(function (item) {\n\t\t\tif (!item.func.call(self, cell.getComponent(), value, item.params)) {\n\t\t\t\tvalid.push({\n\t\t\t\t\ttype: item.type,\n\t\t\t\t\tparameters: item.params\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tvalid = valid.length ? valid : true;\n\n\tif (!cell.modules.validate) {\n\t\tcell.modules.validate = {};\n\t}\n\n\tif (valid === true) {\n\t\tcell.modules.validate.invalid = false;\n\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\n\n\t\tif (invalidIndex > -1) {\n\t\t\tthis.invalidCells.splice(invalidIndex, 1);\n\t\t}\n\t} else {\n\t\tcell.modules.validate.invalid = true;\n\n\t\tif (this.table.options.validationMode !== \"manual\") {\n\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\n\t\t}\n\n\t\tif (invalidIndex == -1) {\n\t\t\tthis.invalidCells.push(cell);\n\t\t}\n\t}\n\n\treturn valid;\n};\n\nValidate.prototype.getInvalidCells = function () {\n\tvar output = [];\n\n\tthis.invalidCells.forEach(function (cell) {\n\t\toutput.push(cell.getComponent());\n\t});\n\n\treturn output;\n};\n\nValidate.prototype.clearValidation = function (cell) {\n\tvar invalidIndex;\n\n\tif (cell.modules.validate && cell.modules.validate.invalid) {\n\n\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\n\t\tcell.modules.validate.invalid = false;\n\n\t\tinvalidIndex = this.invalidCells.indexOf(cell);\n\n\t\tif (invalidIndex > -1) {\n\t\t\tthis.invalidCells.splice(invalidIndex, 1);\n\t\t}\n\t}\n};\n\nValidate.prototype.validators = {\n\n\t//is integer\n\tinteger: function integer(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\tvalue = Number(value);\n\t\treturn typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n\t},\n\n\t//is float\n\tfloat: function float(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\tvalue = Number(value);\n\t\treturn typeof value === 'number' && isFinite(value) && value % 1 !== 0;\n\t},\n\n\t//must be a number\n\tnumeric: function numeric(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn !isNaN(value);\n\t},\n\n\t//must be a string\n\tstring: function string(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn isNaN(value);\n\t},\n\n\t//maximum value\n\tmax: function max(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn parseFloat(value) <= parameters;\n\t},\n\n\t//minimum value\n\tmin: function min(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn parseFloat(value) >= parameters;\n\t},\n\n\t//starts with value\n\tstarts: function starts(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).toLowerCase().startsWith(String(parameters).toLowerCase());\n\t},\n\n\t//ends with value\n\tends: function ends(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).toLowerCase().endsWith(String(parameters).toLowerCase());\n\t},\n\n\t//minimum string length\n\tminLength: function minLength(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).length >= parameters;\n\t},\n\n\t//maximum string length\n\tmaxLength: function maxLength(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).length <= parameters;\n\t},\n\n\t//in provided value list\n\tin: function _in(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\tif (typeof parameters == \"string\") {\n\t\t\tparameters = parameters.split(\"|\");\n\t\t}\n\n\t\treturn value === \"\" || parameters.indexOf(value) > -1;\n\t},\n\n\t//must match provided regex\n\tregex: function regex(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\tvar reg = new RegExp(parameters);\n\n\t\treturn reg.test(value);\n\t},\n\n\t//value must be unique in this column\n\tunique: function unique(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\tvar unique = true;\n\n\t\tvar cellData = cell.getData();\n\t\tvar column = cell.getColumn()._getSelf();\n\n\t\tthis.table.rowManager.rows.forEach(function (row) {\n\t\t\tvar data = row.getData();\n\n\t\t\tif (data !== cellData) {\n\t\t\t\tif (value == column.getFieldValue(data)) {\n\t\t\t\t\tunique = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn unique;\n\t},\n\n\t//must have a value\n\trequired: function required(cell, value, parameters) {\n\t\treturn value !== \"\" && value !== null && typeof value !== \"undefined\";\n\t}\n};\n\nTabulator.prototype.registerModule(\"validate\", Validate);\n\nexport default Tabulator;","import arrayWithoutHoles from \"@babel/runtime/helpers/esm/arrayWithoutHoles\";\nimport iterableToArray from \"@babel/runtime/helpers/esm/iterableToArray\";\nimport unsupportedIterableToArray from \"@babel/runtime/helpers/esm/unsupportedIterableToArray\";\nimport nonIterableSpread from \"@babel/runtime/helpers/esm/nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"@babel/runtime/helpers/esm/arrayLikeToArray\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","module.exports = require(\"regenerator-runtime\");\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","\"use strict\";\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nexports.__esModule = true;\r\nexports.reactFormatter = exports.ReactTabulatorExample = exports.React15Tabulator = exports.ReactTabulator = void 0;\r\nvar ReactTabulator_1 = require(\"./ReactTabulator\");\r\n__createBinding(exports, ReactTabulator_1, \"default\", \"ReactTabulator\");\r\nvar React15Tabulator_1 = require(\"./React15Tabulator\");\r\n__createBinding(exports, React15Tabulator_1, \"default\", \"React15Tabulator\");\r\nvar ReactTabulatorExample_1 = require(\"./ReactTabulatorExample\");\r\n__createBinding(exports, ReactTabulatorExample_1, \"default\", \"ReactTabulatorExample\");\r\nvar Utils_1 = require(\"./Utils\");\r\n__createBinding(exports, Utils_1, \"reactFormatter\");\r\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version v4.2.8+1e68dce6\n */\n","export function objectOrFunction(x) {\n var type = typeof x;\n return x !== null && (type === 'object' || type === 'function');\n}\n\nexport function isFunction(x) {\n return typeof x === 'function';\n}\n\nexport function isMaybeThenable(x) {\n return x !== null && typeof x === 'object';\n}\n\nvar _isArray = void 0;\nif (Array.isArray) {\n _isArray = Array.isArray;\n} else {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n}\n\nexport var isArray = _isArray;","var len = 0;\nvar vertxNext = void 0;\nvar customSchedulerFn = void 0;\n\nexport var asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nexport function setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nexport function setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function () {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var vertx = Function('return this')().require('vertx');\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = void 0;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}","import { invokeCallback, subscribe, FULFILLED, REJECTED, noop, makePromise, PROMISE_ID } from './-internal';\n\nimport { asap } from './asap';\n\nexport default function then(onFulfillment, onRejection) {\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n\n if (_state) {\n var callback = arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}","import { noop, resolve as _resolve } from '../-internal';\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nexport default function resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n _resolve(promise, object);\n return promise;\n}","import { objectOrFunction, isFunction } from './utils';\n\nimport { asap } from './asap';\n\nimport originalThen from './then';\nimport originalResolve from './promise/resolve';\n\nexport var PROMISE_ID = Math.random().toString(36).substring(2);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return resolve(promise, value);\n }, function (reason) {\n return reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor && then === originalThen && maybeThenable.constructor.resolve === originalResolve) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then)) {\n handleForeignThenable(promise, maybeThenable, then);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction resolve(promise, value) {\n if (promise === value) {\n reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n var then = void 0;\n try {\n then = value.then;\n } catch (error) {\n reject(promise, error);\n return;\n }\n handleMaybeThenable(promise, value, then);\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = void 0,\n callback = void 0,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = void 0,\n error = void 0,\n succeeded = true;\n\n if (hasCallback) {\n try {\n value = callback(detail);\n } catch (e) {\n succeeded = false;\n error = e;\n }\n\n if (promise === value) {\n reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n resolve(promise, value);\n } else if (succeeded === false) {\n reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n resolve(promise, value);\n }, function rejectPromise(reason) {\n reject(promise, reason);\n });\n } catch (e) {\n reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nexport { nextId, makePromise, noop, resolve, reject, fulfill, subscribe, publish, publishRejection, initializePromise, invokeCallback, FULFILLED, REJECTED, PENDING, handleMaybeThenable };","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { isArray, isMaybeThenable } from './utils';\nimport { noop, reject, fulfill, subscribe, FULFILLED, REJECTED, PENDING, handleMaybeThenable } from './-internal';\n\nimport then from './then';\nimport Promise from './promise';\nimport originalResolve from './promise/resolve';\nimport originalThen from './then';\nimport { makePromise, PROMISE_ID } from './-internal';\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n};\n\nvar Enumerator = function () {\n function Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate(input);\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n reject(this.promise, validationError());\n }\n }\n\n Enumerator.prototype._enumerate = function _enumerate(input) {\n for (var i = 0; this._state === PENDING && i < input.length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n\n if (resolve === originalResolve) {\n var _then = void 0;\n var error = void 0;\n var didError = false;\n try {\n _then = entry.then;\n } catch (e) {\n didError = true;\n error = e;\n }\n\n if (_then === originalThen && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise) {\n var promise = new c(noop);\n if (didError) {\n reject(promise, error);\n } else {\n handleMaybeThenable(promise, entry, _then);\n }\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve) {\n return resolve(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n Enumerator.prototype._settledAt = function _settledAt(state, i, value) {\n var promise = this.promise;\n\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n };\n\n Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n };\n\n return Enumerator;\n}();\n\nexport default Enumerator;\n;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { isFunction } from './utils';\nimport { noop, nextId, PROMISE_ID, initializePromise } from './-internal';\nimport { asap, setAsap, setScheduler } from './asap';\n\nimport all from './promise/all';\nimport race from './promise/race';\nimport Resolve from './promise/resolve';\nimport Reject from './promise/reject';\nimport then from './then';\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {Function} resolver\n Useful for tooling.\n @constructor\n*/\n\nvar Promise = function () {\n function Promise(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n }\n }\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n Chaining\n --------\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n Assimilation\n ------------\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n If the assimliated promise rejects, then the downstream promise will also reject.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n Simple Example\n --------------\n Synchronous Example\n ```javascript\n let result;\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n Advanced Example\n --------------\n Synchronous Example\n ```javascript\n let author, books;\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n function foundBooks(books) {\n }\n function failure(reason) {\n }\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n\n\n Promise.prototype.catch = function _catch(onRejection) {\n return this.then(null, onRejection);\n };\n\n /**\n `finally` will be invoked regardless of the promise's fate just as native\n try/catch/finally behaves\n \n Synchronous example:\n \n ```js\n findAuthor() {\n if (Math.random() > 0.5) {\n throw new Error();\n }\n return new Author();\n }\n \n try {\n return findAuthor(); // succeed or fail\n } catch(error) {\n return findOtherAuther();\n } finally {\n // always runs\n // doesn't affect the return value\n }\n ```\n \n Asynchronous example:\n \n ```js\n findAuthor().catch(function(reason){\n return findOtherAuther();\n }).finally(function(){\n // author was either found, or not\n });\n ```\n \n @method finally\n @param {Function} callback\n @return {Promise}\n */\n\n\n Promise.prototype.finally = function _finally(callback) {\n var promise = this;\n var constructor = promise.constructor;\n\n if (isFunction(callback)) {\n return promise.then(function (value) {\n return constructor.resolve(callback()).then(function () {\n return value;\n });\n }, function (reason) {\n return constructor.resolve(callback()).then(function () {\n throw reason;\n });\n });\n }\n\n return promise.then(callback, callback);\n };\n\n return Promise;\n}();\n\nPromise.prototype.then = then;\nexport default Promise;\nPromise.all = all;\nPromise.race = race;\nPromise.resolve = Resolve;\nPromise.reject = Reject;\nPromise._setScheduler = setScheduler;\nPromise._setAsap = setAsap;\nPromise._asap = asap;","import { noop, reject as _reject } from '../-internal';\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nexport default function reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n _reject(promise, reason);\n return promise;\n}","import Enumerator from '../enumerator';\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nexport default function all(entries) {\n return new Enumerator(this, entries).promise;\n}","import { isArray } from \"../utils\";\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nexport default function race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}","import Promise from './es6-promise/promise';\nimport polyfill from './es6-promise/polyfill';\n\n// Strange compat..\nPromise.polyfill = polyfill;\nPromise.Promise = Promise;\nexport default Promise;","/*global self*/\nimport Promise from './promise';\n\nexport default function polyfill() {\n var local = void 0;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise;\n}","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nexports.__esModule = true;\r\nvar React = require(\"react\");\r\nvar ReactDOM = require(\"react-dom\");\r\nvar pick_react_known_prop_1 = require(\"pick-react-known-prop\");\r\nvar ConfigUtils_1 = require(\"./ConfigUtils\");\r\nvar Utils_1 = require(\"./Utils\");\r\n/* tslint:disable-next-line */\r\nvar tabulator_tables_1 = require(\"tabulator-tables\");\r\nvar default_1 = /** @class */ (function (_super) {\r\n __extends(default_1, _super);\r\n function default_1() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.state = {\r\n data: [],\r\n columns: _this.props.columns\r\n };\r\n _this.ref = null;\r\n _this.htmlProps = null;\r\n _this.mainId = \"tabulator-\" + +new Date() + \"-\" + Math.floor(Math.random() * 9999999); // random id\r\n _this.table = null; // will be set once Tabulator instantiated\r\n _this.pickValidHTMLProps = function () {\r\n // run once\r\n if (!_this.htmlProps) {\r\n _this.htmlProps = pick_react_known_prop_1.pickHTMLProps(_this.props); // pick valid html props\r\n delete _this.htmlProps['data']; // don't render data & columns as attributes\r\n delete _this.htmlProps['columns'];\r\n }\r\n };\r\n return _this;\r\n }\r\n default_1.prototype.componentDidMount = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var domEle, that, _a, columns, data, options, propOptions;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n domEle = ReactDOM.findDOMNode(this.ref);\r\n that = this;\r\n _a = this.props, columns = _a.columns, data = _a.data, options = _a.options;\r\n return [4 /*yield*/, ConfigUtils_1.propsToOptions(this.props)];\r\n case 1:\r\n propOptions = _b.sent();\r\n new tabulator_tables_1[\"default\"](domEle, __assign(__assign(__assign(__assign({ columns: columns }, propOptions), { layout: 'fitColumns', // fit columns to width of table (optional)\r\n tableBuilding: function () {\r\n that.table = this; // keep table instance\r\n that.props.tableBuilding ? that.props.tableBuilding() : '';\r\n },\r\n dataLoaded: function () {\r\n that.props.dataLoaded ? that.props.dataLoaded() : '';\r\n }, invalidOptionWarnings: false }), options), { data: data }));\r\n // await table.setData(data);\r\n // console.log('- componentDidMount');\r\n if (data && data.length > 0) {\r\n this.setState({ data: data });\r\n }\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n default_1.prototype.componentWillUnmount = function () {\r\n this.table && this.table.destroy();\r\n };\r\n // this is for React 15.x only\r\n default_1.prototype.componentWillReceiveProps = function (props) {\r\n var _this = this;\r\n if (!Utils_1.isSameArray(this.state.data, props.data)) {\r\n // console.log('- data changed');\r\n this.setState({ data: props.data }, function () {\r\n _this.table && _this.table.setData(_this.state.data);\r\n });\r\n }\r\n if (!Utils_1.isSameArray(this.state.columns, props.columns)) {\r\n // console.log('- columns changed');\r\n this.setState({ columns: props.columns }, function () {\r\n _this.table && _this.table.setColumns(_this.state.columns);\r\n });\r\n }\r\n };\r\n default_1.prototype.render = function () {\r\n var _this = this;\r\n // console.log('*** render');\r\n this.pickValidHTMLProps();\r\n var className = this.props.className;\r\n return React.createElement(\"div\", __assign({ ref: function (ref) { return (_this.ref = ref); }, \"data-instance\": this.mainId }, this.htmlProps, { className: className }));\r\n };\r\n return default_1;\r\n}(React.Component));\r\nexports[\"default\"] = default_1;\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar _a;\r\nexports.__esModule = true;\r\nvar React = require(\"react\");\r\nvar ReactTabulator_1 = require(\"./ReactTabulator\");\r\nvar DateEditor_1 = require(\"./editors/DateEditor\");\r\nvar MultiSelectEditor_1 = require(\"./editors/MultiSelectEditor\");\r\nvar MultiValueFormatter_1 = require(\"./formatters/MultiValueFormatter\");\r\nvar Utils_1 = require(\"./Utils\");\r\nfunction SimpleButton(props) {\r\n var rowData = props.cell._cell.row.data;\r\n var cellValue = props.cell._cell.value || 'Edit | Show';\r\n return React.createElement(\"button\", { onClick: function () { return alert(rowData.name); } }, cellValue);\r\n}\r\nvar columns = [\r\n { title: 'Name', field: 'name', width: 150 },\r\n { title: 'Age', field: 'age', hozAlign: 'left', formatter: 'progress' },\r\n { title: 'Favourite Color', field: 'color' },\r\n { title: 'Date Of Birth', field: 'dob', sorter: 'date' },\r\n { title: 'Rating', field: 'rating', hozAlign: 'center', formatter: 'star' },\r\n { title: 'Passed?', field: 'passed', hozAlign: 'center', formatter: 'tickCross' },\r\n { title: 'Custom', field: 'custom', hozAlign: 'center', editor: 'input', formatter: Utils_1.reactFormatter(React.createElement(SimpleButton, null)) },\r\n];\r\nvar data = [\r\n { id: 1, name: 'Oli Bob', age: '12', color: 'red', dob: '01/01/1980', rating: 5, passed: true, pets: ['cat', 'dog'] },\r\n { id: 2, name: 'Mary May', age: '1', color: 'green', dob: '12/05/1989', rating: 4, passed: true, pets: ['cat'] },\r\n { id: 3, name: 'Christine Lobowski', age: '42', color: 'green', dob: '10/05/1985', rating: 4, passed: false },\r\n { id: 4, name: 'Brendon Philips', age: '125', color: 'red', dob: '01/08/1980', rating: 4.5, passed: true },\r\n { id: 5, name: 'Margret Marmajuke', age: '16', color: 'yellow', dob: '07/01/1999', rating: 4, passed: false },\r\n {\r\n id: 6,\r\n name: 'Van Ng',\r\n age: '37',\r\n color: 'green',\r\n dob: '06/10/1982',\r\n rating: 4,\r\n passed: true,\r\n pets: ['dog', 'fish']\r\n },\r\n { id: 7, name: 'Duc Ng', age: '37', color: 'yellow', dob: '10/10/1982', rating: 4, passed: true, pets: ['dog'] }\r\n];\r\n// Editable Example:\r\nvar colorOptions = (_a = {}, _a[''] = ' ', _a.red = 'red', _a.green = 'green', _a.yellow = 'yellow', _a);\r\nvar petOptions = [{ id: 'cat', name: 'cat' }, { id: 'dog', name: 'dog' }, { id: 'fish', name: 'fish' }];\r\nvar editableColumns = [\r\n { title: 'Name', field: 'name', width: 150, editor: 'input', headerFilter: 'input' },\r\n { title: 'Age', field: 'age', hozAlign: 'left', formatter: 'progress', editor: 'progress' },\r\n {\r\n title: 'Favourite Color',\r\n field: 'color',\r\n editor: 'select',\r\n editorParams: { allowEmpty: true, showListOnEmpty: true, values: colorOptions },\r\n headerFilter: 'select',\r\n headerFilterParams: { values: colorOptions }\r\n },\r\n { title: 'Date Of Birth', field: 'dob', editor: DateEditor_1[\"default\"], editorParams: { format: 'MM/DD/YYYY' } },\r\n {\r\n title: 'Pets',\r\n field: 'pets',\r\n sorter: function (a, b) { return a.toString().localeCompare(b.toString()); },\r\n editor: MultiSelectEditor_1[\"default\"],\r\n editorParams: { values: petOptions },\r\n formatter: MultiValueFormatter_1[\"default\"],\r\n formatterParams: { style: 'PILL' }\r\n },\r\n { title: 'Passed?', field: 'passed', hozAlign: 'center', formatter: 'tickCross', editor: true }\r\n];\r\nvar default_1 = /** @class */ (function (_super) {\r\n __extends(default_1, _super);\r\n function default_1() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.state = {\r\n data: [],\r\n selectedName: ''\r\n };\r\n _this.ref = null;\r\n _this.rowClick = function (e, row) {\r\n console.log('ref table: ', _this.ref.table); // this is the Tabulator table instance\r\n console.log('rowClick id: ${row.getData().id}', row, e);\r\n _this.setState({ selectedName: row.getData().name });\r\n };\r\n _this.setData = function () {\r\n _this.setState({ data: data });\r\n };\r\n _this.clearData = function () {\r\n _this.setState({ data: [] });\r\n };\r\n _this.renderAjaxScrollExample = function () {\r\n var columns = [\r\n { title: 'First Name', field: 'first_name', width: 150 },\r\n { title: 'Last Name', field: 'last_name', width: 150 },\r\n { title: 'Email', field: 'email', width: 150 },\r\n ];\r\n var options = {\r\n height: 150,\r\n movableRows: true,\r\n ajaxProgressiveLoad: 'scroll',\r\n ajaxProgressiveLoadDelay: 200,\r\n ajaxProgressiveLoadScrollMargin: 100,\r\n ajaxURL: 'https://reqres.in/api/users',\r\n paginationDataSent: {\r\n page: 'page',\r\n size: 'per_page' // change 'size' param to 'per_page'\r\n },\r\n paginationDataReceived: {\r\n last_page: 'total_pages'\r\n },\r\n current_page: 1,\r\n paginationSize: 3,\r\n ajaxResponse: function (url, params, response) {\r\n console.log('ajaxResponse', url);\r\n return response; //return the response data to tabulator\r\n },\r\n ajaxError: function (error) {\r\n console.log('ajaxError', error);\r\n }\r\n };\r\n return (React.createElement(ReactTabulator_1[\"default\"], { ref: function (ref) { return (_this.ref = ref); }, columns: columns, data: [], options: options }));\r\n };\r\n return _this;\r\n }\r\n default_1.prototype.render = function () {\r\n var _this = this;\r\n var options = {\r\n height: 150,\r\n movableRows: true\r\n };\r\n return (React.createElement(\"div\", null,\r\n React.createElement(ReactTabulator_1[\"default\"], { ref: function (ref) { return (_this.ref = ref); }, columns: columns, data: data, rowClick: this.rowClick, options: options, \"data-custom-attr\": \"test-custom-attribute\", className: \"custom-css-class\" }),\r\n React.createElement(\"i\", null,\r\n \"Selected Name: \",\r\n React.createElement(\"strong\", null, this.state.selectedName)),\r\n React.createElement(\"h3\", null,\r\n \"Asynchronous data: (e.g. fetch) - \",\r\n React.createElement(\"button\", { onClick: this.setData }, \"Set Data\"),\r\n ' ',\r\n React.createElement(\"button\", { onClick: this.clearData }, \"Clear\")),\r\n React.createElement(ReactTabulator_1[\"default\"], { columns: columns, data: this.state.data }),\r\n React.createElement(\"h3\", null, \"Editable Table\"),\r\n React.createElement(ReactTabulator_1[\"default\"], { columns: editableColumns, data: data, cellEdited: function (cell) { return console.log('cellEdited', cell); }, dataChanged: function (newData) { return console.log('dataChanged', newData); }, footerElement: React.createElement(\"span\", null, \"Footer\"), options: { movableColumns: true, movableRows: true } }),\r\n React.createElement(\"h3\", null, \"Infinite Scrolling with Ajax Requests\"),\r\n this.renderAjaxScrollExample(),\r\n React.createElement(\"p\", null,\r\n React.createElement(\"a\", { href: \"https://github.com/ngduc/react-tabulator\", target: \"_blank\" }, \"Back to: Github Repo: react-tabulator\")),\r\n React.createElement(\"p\", null,\r\n React.createElement(\"a\", { href: \"http://tabulator.info/examples/4.0\", target: \"_blank\" }, \"More Tabulator's Examples\"))));\r\n };\r\n return default_1;\r\n}(React.Component));\r\nexports[\"default\"] = default_1;\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nexports.__esModule = true;\r\nvar React = require(\"react\");\r\nvar react_dom_1 = require(\"react-dom\");\r\n// import { parse, format } from 'date-fns';\r\nvar DateEditorUtils_1 = require(\"./DateEditorUtils\");\r\nvar DEFAULT_DATE_INPUT_FORMAT = 'YYYY-MM-DD'; // date-fns 'yyyy-MM-dd';\r\nvar inputCss = {\r\n width: '100%',\r\n height: '100%',\r\n fontSize: '1em',\r\n fontFamily: 'inherit'\r\n};\r\nvar Editor = /** @class */ (function (_super) {\r\n __extends(Editor, _super);\r\n function Editor() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.state = { value: '' };\r\n _this.ref = null;\r\n // date-fns format 'MM/dd/yyyy'\r\n _this.format = _this.props.editorParams.format || 'MM/DD/YYYY'; // TODO: detect from user locale & set default.\r\n _this.setValueOnSuccess = function (value) {\r\n if (value === void 0) { value = _this.state.value; }\r\n var success = _this.props.success;\r\n if (!value) {\r\n // user deleted value in the cell => set to ''\r\n // const result = format(new Date(), this.format);\r\n success('');\r\n return;\r\n }\r\n var result = value;\r\n try {\r\n if (result.indexOf('-') > 0) {\r\n // value is \"yyyy-MM-dd\" => parse it\r\n var valueDate = DateEditorUtils_1.parse(value, 'YYYY-MM-DD');\r\n result = DateEditorUtils_1.format(valueDate, _this.format);\r\n }\r\n }\r\n catch (err) {\r\n console.error('ERROR', err);\r\n result = DateEditorUtils_1.format(new Date(), DEFAULT_DATE_INPUT_FORMAT);\r\n }\r\n success(result);\r\n };\r\n _this.onChange = function (ev) {\r\n var value = ev.target.value;\r\n _this.setState({ value: value });\r\n };\r\n _this.onKeyPress = function (ev) {\r\n var cancel = _this.props.cancel;\r\n if (ev.keyCode === 13) {\r\n // Enter pressed. If value is '' => set to today:\r\n var today = DateEditorUtils_1.format(new Date(), DEFAULT_DATE_INPUT_FORMAT);\r\n var value = _this.state.value || today;\r\n _this.setValueOnSuccess(value);\r\n }\r\n else if (ev.keyCode === 27) {\r\n cancel();\r\n }\r\n };\r\n _this.onBlur = function () {\r\n _this.setValueOnSuccess();\r\n };\r\n return _this;\r\n }\r\n Editor.prototype.componentDidMount = function () {\r\n var _this = this;\r\n this.props.onRendered(function () {\r\n var value = _this.props.cell.getValue();\r\n _this.setState({ value: value });\r\n _this.ref.focus();\r\n });\r\n };\r\n Editor.prototype.render = function () {\r\n var _this = this;\r\n var cell = this.props.cell;\r\n var valueDt = DateEditorUtils_1.parse(cell.getValue(), this.format);\r\n // console.log('this.format', this.format);\r\n // console.log('cell.getValue()', cell.getValue());\r\n // console.log('valueDt', valueDt);\r\n var value = DateEditorUtils_1.format(new Date(), DEFAULT_DATE_INPUT_FORMAT);\r\n try {\r\n value = DateEditorUtils_1.format(valueDt, DEFAULT_DATE_INPUT_FORMAT);\r\n }\r\n catch (err) { }\r\n return (React.createElement(\"input\", { type: \"date\", ref: function (r) { return (_this.ref = r); }, defaultValue: value, \r\n // value={value}\r\n onBlur: this.onBlur, onChange: this.onChange, onKeyUp: this.onKeyPress, style: inputCss }));\r\n };\r\n return Editor;\r\n}(React.Component));\r\nfunction default_1(cell, onRendered, success, cancel, editorParams) {\r\n var container = document.createElement('div');\r\n container.style.height = '100%';\r\n react_dom_1.render(React.createElement(Editor, { cell: cell, onRendered: onRendered, success: success, cancel: cancel, editorParams: editorParams }), container);\r\n return container;\r\n}\r\nexports[\"default\"] = default_1;\r\n","\"use strict\";\r\nexports.__esModule = true;\r\nexports.setGlobalDateMasks = exports.setGlobalDateI18n = exports.defaultI18n = exports.parse = exports.format = exports.assign = void 0;\r\n// source: https://github.com/taylorhakes/fecha\r\nvar token = /d{1,4}|M{1,4}|YY(?:YY)?|S{1,3}|Do|ZZ|Z|([HhMsDm])\\1?|[aA]|\"[^\"]*\"|'[^']*'/g;\r\nvar twoDigitsOptional = '[1-9]\\\\d?';\r\nvar twoDigits = '\\\\d\\\\d';\r\nvar threeDigits = '\\\\d{3}';\r\nvar fourDigits = '\\\\d{4}';\r\nvar word = '[^\\\\s]+';\r\nvar literal = /\\[([^]*?)\\]/gm;\r\nfunction shorten(arr, sLen) {\r\n var newArr = [];\r\n for (var i = 0, len = arr.length; i < len; i++) {\r\n newArr.push(arr[i].substr(0, sLen));\r\n }\r\n return newArr;\r\n}\r\nvar monthUpdate = function (arrName) { return function (v, i18n) {\r\n var lowerCaseArr = i18n[arrName].map(function (v) { return v.toLowerCase(); });\r\n var index = lowerCaseArr.indexOf(v.toLowerCase());\r\n if (index > -1) {\r\n return index;\r\n }\r\n return null;\r\n}; };\r\nfunction assign(origObj) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\r\n var obj = args_1[_a];\r\n for (var key in obj) {\r\n // @ts-ignore ex\r\n origObj[key] = obj[key];\r\n }\r\n }\r\n return origObj;\r\n}\r\nexports.assign = assign;\r\nvar dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\r\nvar monthNames = [\r\n 'January',\r\n 'February',\r\n 'March',\r\n 'April',\r\n 'May',\r\n 'June',\r\n 'July',\r\n 'August',\r\n 'September',\r\n 'October',\r\n 'November',\r\n 'December'\r\n];\r\nvar monthNamesShort = shorten(monthNames, 3);\r\nvar dayNamesShort = shorten(dayNames, 3);\r\nvar defaultI18n = {\r\n dayNamesShort: dayNamesShort,\r\n dayNames: dayNames,\r\n monthNamesShort: monthNamesShort,\r\n monthNames: monthNames,\r\n amPm: ['am', 'pm'],\r\n DoFn: function (dayOfMonth) {\r\n return (dayOfMonth +\r\n ['th', 'st', 'nd', 'rd'][dayOfMonth % 10 > 3 ? 0 : ((dayOfMonth - (dayOfMonth % 10) !== 10 ? 1 : 0) * dayOfMonth) % 10]);\r\n }\r\n};\r\nexports.defaultI18n = defaultI18n;\r\nvar globalI18n = assign({}, defaultI18n);\r\nvar setGlobalDateI18n = function (i18n) { return (globalI18n = assign(globalI18n, i18n)); };\r\nexports.setGlobalDateI18n = setGlobalDateI18n;\r\nvar regexEscape = function (str) { return str.replace(/[|\\\\{()[^$+*?.-]/g, '\\\\$&'); };\r\nvar pad = function (val, len) {\r\n if (len === void 0) { len = 2; }\r\n val = String(val);\r\n while (val.length < len) {\r\n val = '0' + val;\r\n }\r\n return val;\r\n};\r\nvar formatFlags = {\r\n D: function (dateObj) { return String(dateObj.getDate()); },\r\n DD: function (dateObj) { return pad(dateObj.getDate()); },\r\n Do: function (dateObj, i18n) { return i18n.DoFn(dateObj.getDate()); },\r\n d: function (dateObj) { return String(dateObj.getDay()); },\r\n dd: function (dateObj) { return pad(dateObj.getDay()); },\r\n ddd: function (dateObj, i18n) { return i18n.dayNamesShort[dateObj.getDay()]; },\r\n dddd: function (dateObj, i18n) { return i18n.dayNames[dateObj.getDay()]; },\r\n M: function (dateObj) { return String(dateObj.getMonth() + 1); },\r\n MM: function (dateObj) { return pad(dateObj.getMonth() + 1); },\r\n MMM: function (dateObj, i18n) { return i18n.monthNamesShort[dateObj.getMonth()]; },\r\n MMMM: function (dateObj, i18n) { return i18n.monthNames[dateObj.getMonth()]; },\r\n YY: function (dateObj) { return pad(String(dateObj.getFullYear()), 4).substr(2); },\r\n YYYY: function (dateObj) { return pad(dateObj.getFullYear(), 4); },\r\n h: function (dateObj) { return String(dateObj.getHours() % 12 || 12); },\r\n hh: function (dateObj) { return pad(dateObj.getHours() % 12 || 12); },\r\n H: function (dateObj) { return String(dateObj.getHours()); },\r\n HH: function (dateObj) { return pad(dateObj.getHours()); },\r\n m: function (dateObj) { return String(dateObj.getMinutes()); },\r\n mm: function (dateObj) { return pad(dateObj.getMinutes()); },\r\n s: function (dateObj) { return String(dateObj.getSeconds()); },\r\n ss: function (dateObj) { return pad(dateObj.getSeconds()); },\r\n S: function (dateObj) { return String(Math.round(dateObj.getMilliseconds() / 100)); },\r\n SS: function (dateObj) { return pad(Math.round(dateObj.getMilliseconds() / 10), 2); },\r\n SSS: function (dateObj) { return pad(dateObj.getMilliseconds(), 3); },\r\n a: function (dateObj, i18n) { return (dateObj.getHours() < 12 ? i18n.amPm[0] : i18n.amPm[1]); },\r\n A: function (dateObj, i18n) {\r\n return dateObj.getHours() < 12 ? i18n.amPm[0].toUpperCase() : i18n.amPm[1].toUpperCase();\r\n },\r\n ZZ: function (dateObj) {\r\n var offset = dateObj.getTimezoneOffset();\r\n return (offset > 0 ? '-' : '+') + pad(Math.floor(Math.abs(offset) / 60) * 100 + (Math.abs(offset) % 60), 4);\r\n },\r\n Z: function (dateObj) {\r\n var offset = dateObj.getTimezoneOffset();\r\n return (offset > 0 ? '-' : '+') + pad(Math.floor(Math.abs(offset) / 60), 2) + ':' + pad(Math.abs(offset) % 60, 2);\r\n }\r\n};\r\nvar monthParse = function (v) { return +v - 1; };\r\nvar emptyDigits = [null, twoDigitsOptional];\r\nvar emptyWord = [null, word];\r\nvar amPm = [\r\n 'isPm',\r\n word,\r\n function (v, i18n) {\r\n var val = v.toLowerCase();\r\n if (val === i18n.amPm[0]) {\r\n return 0;\r\n }\r\n else if (val === i18n.amPm[1]) {\r\n return 1;\r\n }\r\n return null;\r\n }\r\n];\r\nvar timezoneOffset = [\r\n 'timezoneOffset',\r\n '[^\\\\s]*?[\\\\+\\\\-]\\\\d\\\\d:?\\\\d\\\\d|[^\\\\s]*?Z?',\r\n function (v) {\r\n var parts = (v + '').match(/([+-]|\\d\\d)/gi);\r\n if (parts) {\r\n var minutes = +parts[1] * 60 + parseInt(parts[2], 10);\r\n return parts[0] === '+' ? minutes : -minutes;\r\n }\r\n return 0;\r\n }\r\n];\r\nvar parseFlags = {\r\n D: ['day', twoDigitsOptional],\r\n DD: ['day', twoDigits],\r\n Do: ['day', twoDigitsOptional + word, function (v) { return parseInt(v, 10); }],\r\n M: ['month', twoDigitsOptional, monthParse],\r\n MM: ['month', twoDigits, monthParse],\r\n YY: [\r\n 'year',\r\n twoDigits,\r\n function (v) {\r\n var now = new Date();\r\n var cent = +('' + now.getFullYear()).substr(0, 2);\r\n return +('' + (+v > 68 ? cent - 1 : cent) + v);\r\n }\r\n ],\r\n h: ['hour', twoDigitsOptional, undefined, 'isPm'],\r\n hh: ['hour', twoDigits, undefined, 'isPm'],\r\n H: ['hour', twoDigitsOptional],\r\n HH: ['hour', twoDigits],\r\n m: ['minute', twoDigitsOptional],\r\n mm: ['minute', twoDigits],\r\n s: ['second', twoDigitsOptional],\r\n ss: ['second', twoDigits],\r\n YYYY: ['year', fourDigits],\r\n S: ['millisecond', '\\\\d', function (v) { return +v * 100; }],\r\n SS: ['millisecond', twoDigits, function (v) { return +v * 10; }],\r\n SSS: ['millisecond', threeDigits],\r\n d: emptyDigits,\r\n dd: emptyDigits,\r\n ddd: emptyWord,\r\n dddd: emptyWord,\r\n MMM: ['month', word, monthUpdate('monthNamesShort')],\r\n MMMM: ['month', word, monthUpdate('monthNames')],\r\n a: amPm,\r\n A: amPm,\r\n ZZ: timezoneOffset,\r\n Z: timezoneOffset\r\n};\r\n// Some common format strings\r\nvar globalMasks = {\r\n \"default\": 'ddd MMM DD YYYY HH:mm:ss',\r\n shortDate: 'M/D/YY',\r\n mediumDate: 'MMM D, YYYY',\r\n longDate: 'MMMM D, YYYY',\r\n fullDate: 'dddd, MMMM D, YYYY',\r\n isoDate: 'YYYY-MM-DD',\r\n isoDateTime: 'YYYY-MM-DDTHH:mm:ssZ',\r\n shortTime: 'HH:mm',\r\n mediumTime: 'HH:mm:ss',\r\n longTime: 'HH:mm:ss.SSS'\r\n};\r\nvar setGlobalDateMasks = function (masks) { return assign(globalMasks, masks); };\r\nexports.setGlobalDateMasks = setGlobalDateMasks;\r\n/***\r\n * Format a date\r\n * @method format\r\n * @param {Date|number} dateObj\r\n * @param {string} mask Format of the date, i.e. 'mm-dd-yy' or 'shortDate'\r\n * @returns {string} Formatted date string\r\n */\r\nvar format = function (dateObj, mask, i18n) {\r\n if (mask === void 0) { mask = globalMasks['default']; }\r\n if (i18n === void 0) { i18n = {}; }\r\n if (typeof dateObj === 'number') {\r\n dateObj = new Date(dateObj);\r\n }\r\n if (Object.prototype.toString.call(dateObj) !== '[object Date]' || isNaN(dateObj.getTime())) {\r\n throw new Error('Invalid Date pass to format');\r\n }\r\n mask = globalMasks[mask] || mask;\r\n var literals = [];\r\n // Make literals inactive by replacing them with @@@\r\n mask = mask.replace(literal, function ($0, $1) {\r\n literals.push($1);\r\n return '@@@';\r\n });\r\n var combinedI18nSettings = assign(assign({}, globalI18n), i18n);\r\n // Apply formatting rules\r\n mask = mask.replace(token, function ($0) { return formatFlags[$0](dateObj, combinedI18nSettings); });\r\n // Inline literal values back into the formatted value\r\n return mask.replace(/@@@/g, function () { return literals.shift(); });\r\n};\r\nexports.format = format;\r\n/**\r\n * Parse a date string into a Javascript Date object /\r\n * @method parse\r\n * @param {string} dateStr Date string\r\n * @param {string} format Date parse format\r\n * @param {i18n} I18nSettingsOptional Full or subset of I18N settings\r\n * @returns {Date|null} Returns Date object. Returns null what date string is invalid or doesn't match format\r\n */\r\nfunction parse(dateStr, format, i18n) {\r\n if (i18n === void 0) { i18n = {}; }\r\n if (typeof format !== 'string') {\r\n throw new Error('Invalid format in fecha parse');\r\n }\r\n // Check to see if the format is actually a mask\r\n format = globalMasks[format] || format;\r\n // Avoid regular expression denial of service, fail early for really long strings\r\n // https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS\r\n if (dateStr.length > 1000) {\r\n return null;\r\n }\r\n // Default to the beginning of the year.\r\n var today = new Date();\r\n var dateInfo = {\r\n year: today.getFullYear(),\r\n month: 0,\r\n day: 1,\r\n hour: 0,\r\n minute: 0,\r\n second: 0,\r\n millisecond: 0,\r\n isPm: null,\r\n timezoneOffset: null\r\n };\r\n var parseInfo = [];\r\n var literals = [];\r\n // Replace all the literals with @@@. Hopefully a string that won't exist in the format\r\n var newFormat = format.replace(literal, function ($0, $1) {\r\n literals.push(regexEscape($1));\r\n return '@@@';\r\n });\r\n var specifiedFields = {};\r\n var requiredFields = {};\r\n // Change every token that we find into the correct regex\r\n newFormat = regexEscape(newFormat).replace(token, function ($0) {\r\n var info = parseFlags[$0];\r\n var field = info[0], regex = info[1], requiredField = info[3];\r\n // Check if the person has specified the same field twice. This will lead to confusing results.\r\n if (specifiedFields[field]) {\r\n throw new Error(\"Invalid format. \" + field + \" specified twice in format\");\r\n }\r\n specifiedFields[field] = true;\r\n // Check if there are any required fields. For instance, 12 hour time requires AM/PM specified\r\n if (requiredField) {\r\n requiredFields[requiredField] = true;\r\n }\r\n parseInfo.push(info);\r\n return '(' + regex + ')';\r\n });\r\n // Check all the required fields are present\r\n Object.keys(requiredFields).forEach(function (field) {\r\n if (!specifiedFields[field]) {\r\n throw new Error(\"Invalid format. \" + field + \" is required in specified format\");\r\n }\r\n });\r\n // Add back all the literals after\r\n newFormat = newFormat.replace(/@@@/g, function () { return literals.shift(); });\r\n // Check if the date string matches the format. If it doesn't return null\r\n var matches = dateStr.match(new RegExp(newFormat, 'i'));\r\n if (!matches) {\r\n return null;\r\n }\r\n var combinedI18nSettings = assign(assign({}, globalI18n), i18n);\r\n // For each match, call the parser function for that date part\r\n for (var i = 1; i < matches.length; i++) {\r\n var _a = parseInfo[i - 1], field = _a[0], parser = _a[2];\r\n var value = parser ? parser(matches[i], combinedI18nSettings) : +matches[i];\r\n // If the parser can't make sense of the value, return null\r\n if (value == null) {\r\n return null;\r\n }\r\n dateInfo[field] = value;\r\n }\r\n if (dateInfo.isPm === 1 && dateInfo.hour != null && +dateInfo.hour !== 12) {\r\n dateInfo.hour = +dateInfo.hour + 12;\r\n }\r\n else if (dateInfo.isPm === 0 && +dateInfo.hour === 12) {\r\n dateInfo.hour = 0;\r\n }\r\n var dateWithoutTZ = new Date(dateInfo.year, dateInfo.month, dateInfo.day, dateInfo.hour, dateInfo.minute, dateInfo.second, dateInfo.millisecond);\r\n var validateFields = [\r\n ['month', 'getMonth'],\r\n ['day', 'getDate'],\r\n ['hour', 'getHours'],\r\n ['minute', 'getMinutes'],\r\n ['second', 'getSeconds']\r\n ];\r\n for (var i = 0, len = validateFields.length; i < len; i++) {\r\n // Check to make sure the date field is within the allowed range. Javascript dates allows values\r\n // outside the allowed range. If the values don't match the value was invalid\r\n if (specifiedFields[validateFields[i][0]] &&\r\n dateInfo[validateFields[i][0]] !== dateWithoutTZ[validateFields[i][1]]()) {\r\n return null;\r\n }\r\n }\r\n if (dateInfo.timezoneOffset == null) {\r\n return dateWithoutTZ;\r\n }\r\n return new Date(Date.UTC(dateInfo.year, dateInfo.month, dateInfo.day, dateInfo.hour, dateInfo.minute - dateInfo.timezoneOffset, dateInfo.second, dateInfo.millisecond));\r\n}\r\nexports.parse = parse;\r\nexports[\"default\"] = {\r\n format: format,\r\n parse: parse,\r\n defaultI18n: defaultI18n,\r\n setGlobalDateI18n: setGlobalDateI18n,\r\n setGlobalDateMasks: setGlobalDateMasks\r\n};\r\n","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nexports.__esModule = true;\r\nvar React = require(\"react\");\r\nvar react_dom_1 = require(\"react-dom\");\r\nvar Utils_1 = require(\"../Utils\");\r\n// import { parse, format } from 'date-fns';\r\n// import ReactTags from 'react-tag-autocomplete';\r\nvar ReactTags = require('react-tag-autocomplete');\r\nvar DEFAULT_DATE_INPUT_FORMAT = 'yyyy-MM-dd';\r\nvar inputCss = {\r\n width: '100%',\r\n height: '100%',\r\n fontSize: '1em',\r\n fontFamily: 'inherit'\r\n};\r\nvar Editor = /** @class */ (function (_super) {\r\n __extends(Editor, _super);\r\n function Editor() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.state = { value: '', values: [], autofocus: false };\r\n _this.ref = null;\r\n _this.setValueOnSuccess = function (values) {\r\n if (values === void 0) { values = _this.state.values; }\r\n var _a = _this.props, success = _a.success, cancel = _a.cancel;\r\n // console.log('setValueOnSuccess: ', values);\r\n success(values);\r\n // cancel();\r\n };\r\n _this.handleDelete = function (i) {\r\n // console.log('- handleDelete ', i);\r\n var values = _this.state.values;\r\n var newValues = values.filter(function (item, index) { return index !== i; });\r\n _this.setState({ values: newValues }, function () {\r\n _this.setValueOnSuccess(newValues);\r\n });\r\n };\r\n _this.handleAddition = function (item) {\r\n var values = _this.state.values;\r\n if (item.name) {\r\n // console.log('- handleAddition: ', item);\r\n values.push({ id: item.name, name: item.name });\r\n _this.setState({ values: values }, function () {\r\n _this.setValueOnSuccess(values);\r\n });\r\n }\r\n };\r\n // order: handleBlur => sucess() => grid's cellEdited => grid's dataChanged => handleAddition\r\n _this.handleBlur = function () {\r\n var cancel = _this.props.cancel;\r\n var newValue = _this.ref.input.input.value;\r\n if (newValue) {\r\n // console.log(111, newValue, this.ref);\r\n var values = Utils_1.clone(_this.state.values);\r\n values.push({ id: newValue, name: newValue });\r\n // console.log('- handleBlur ', values);\r\n _this.setValueOnSuccess(values);\r\n }\r\n else {\r\n cancel();\r\n }\r\n var el = react_dom_1.findDOMNode(_this.ref);\r\n if (el && el.parentElement.parentElement.parentElement) {\r\n el.parentElement.parentElement.parentElement.style.overflow = 'hidden';\r\n }\r\n // console.log('- handleBlur END');\r\n };\r\n return _this;\r\n }\r\n Editor.prototype.componentDidMount = function () {\r\n var _this = this;\r\n this.props.onRendered(function () {\r\n var el = react_dom_1.findDOMNode(_this.ref);\r\n el.style.zIndex = 1;\r\n el.parentElement.parentElement.parentElement.style.overflow = 'inherit';\r\n el.querySelector('input').focus();\r\n var values = (_this.props.cell.getValue() || []).map(function (item) {\r\n return typeof item === 'string' ? { id: item, name: item } : item;\r\n });\r\n _this.setState({ values: values });\r\n });\r\n };\r\n Editor.prototype.render = function () {\r\n var _this = this;\r\n var editorParams = this.props.editorParams;\r\n var values = this.state.values;\r\n var suggestions = editorParams.values;\r\n return (React.createElement(\"div\", null,\r\n React.createElement(ReactTags, { ref: function (ref) { return (_this.ref = ref); }, placeholder: \"Select or Type\", tags: values, suggestions: suggestions, allowNew: true, autoresize: true, autofocus: this.state.autofocus, handleAddition: this.handleAddition, handleDelete: this.handleDelete, handleBlur: this.handleBlur, minQueryLength: 0 })));\r\n };\r\n return Editor;\r\n}(React.Component));\r\nfunction default_1(cell, onRendered, success, cancel, editorParams) {\r\n var container = document.createElement('div');\r\n container.style.height = '100%';\r\n react_dom_1.render(React.createElement(Editor, { cell: cell, onRendered: onRendered, success: success, cancel: cancel, editorParams: editorParams }), container);\r\n return container;\r\n}\r\nexports[\"default\"] = default_1;\r\n","'use strict'\n\nvar React = require('react')\nvar PropTypes = require('prop-types')\nvar Tag = require('./Tag')\nvar Input = require('./Input')\nvar Suggestions = require('./Suggestions')\n\nvar KEYS = {\n ENTER: 13,\n TAB: 9,\n BACKSPACE: 8,\n UP_ARROW: 38,\n DOWN_ARROW: 40\n}\n\nvar CLASS_NAMES = {\n root: 'react-tags',\n rootFocused: 'is-focused',\n selected: 'react-tags__selected',\n selectedTag: 'react-tags__selected-tag',\n selectedTagName: 'react-tags__selected-tag-name',\n search: 'react-tags__search',\n searchInput: 'react-tags__search-input',\n suggestions: 'react-tags__suggestions',\n suggestionActive: 'is-active',\n suggestionDisabled: 'is-disabled'\n}\n\nvar ReactTags = /*@__PURE__*/(function (superclass) {\n function ReactTags (props) {\n superclass.call(this, props)\n\n this.state = {\n query: '',\n focused: false,\n expandable: false,\n selectedIndex: -1,\n classNames: Object.assign({}, CLASS_NAMES, this.props.classNames)\n }\n\n this.inputEventHandlers = {\n // Provide a no-op function to the input component to avoid warnings\n // \n // \n onChange: function () { },\n onBlur: this.handleBlur.bind(this),\n onFocus: this.handleFocus.bind(this),\n onInput: this.handleInput.bind(this),\n onKeyDown: this.handleKeyDown.bind(this)\n }\n\n this.container = React.createRef()\n }\n\n if ( superclass ) ReactTags.__proto__ = superclass;\n ReactTags.prototype = Object.create( superclass && superclass.prototype );\n ReactTags.prototype.constructor = ReactTags;\n\n ReactTags.prototype.componentWillReceiveProps = function componentWillReceiveProps (newProps) {\n this.setState({\n classNames: Object.assign({}, CLASS_NAMES, newProps.classNames)\n })\n };\n\n ReactTags.prototype.handleInput = function handleInput (e) {\n var query = e.target.value\n\n if (this.props.handleInputChange) {\n this.props.handleInputChange(query)\n }\n\n this.setState({ query: query })\n };\n\n ReactTags.prototype.handleKeyDown = function handleKeyDown (e) {\n var ref = this.state;\n var query = ref.query;\n var selectedIndex = ref.selectedIndex;\n var ref$1 = this.props;\n var delimiters = ref$1.delimiters;\n var delimiterChars = ref$1.delimiterChars;\n\n // when one of the terminating keys is pressed, add current query to the tags.\n if (delimiters.indexOf(e.keyCode) > -1 || delimiterChars.indexOf(e.key) > -1) {\n if (query || selectedIndex > -1) {\n e.preventDefault()\n }\n\n this.handleDelimiter()\n }\n\n // when backspace key is pressed and query is blank, delete the last tag\n if (e.keyCode === KEYS.BACKSPACE && query.length === 0 && this.props.allowBackspace) {\n this.deleteTag(this.props.tags.length - 1)\n }\n\n if (e.keyCode === KEYS.UP_ARROW) {\n e.preventDefault()\n\n // if last item, cycle to the bottom\n if (selectedIndex <= 0) {\n this.setState({ selectedIndex: this.suggestions.state.options.length - 1 })\n } else {\n this.setState({ selectedIndex: selectedIndex - 1 })\n }\n }\n\n if (e.keyCode === KEYS.DOWN_ARROW) {\n e.preventDefault()\n\n this.setState({ selectedIndex: (selectedIndex + 1) % this.suggestions.state.options.length })\n }\n };\n\n ReactTags.prototype.handleDelimiter = function handleDelimiter () {\n var ref = this.state;\n var query = ref.query;\n var selectedIndex = ref.selectedIndex;\n\n if (query.length >= this.props.minQueryLength) {\n // Check if the user typed in an existing suggestion.\n var match = this.suggestions.state.options.findIndex(function (suggestion) {\n return suggestion.name.search(new RegExp((\"^\" + query + \"$\"), 'i')) === 0\n })\n\n var index = selectedIndex === -1 ? match : selectedIndex\n\n if (index > -1 && this.suggestions.state.options[index]) {\n this.addTag(this.suggestions.state.options[index])\n } else if (this.props.allowNew) {\n this.addTag({ name: query })\n }\n }\n };\n\n ReactTags.prototype.handleClick = function handleClick (e) {\n if (document.activeElement !== e.target) {\n this.input.input.focus()\n }\n };\n\n ReactTags.prototype.handleBlur = function handleBlur () {\n this.setState({ focused: false, selectedIndex: -1 })\n\n if (this.props.handleBlur) {\n this.props.handleBlur()\n }\n\n if (this.props.addOnBlur) {\n this.handleDelimiter()\n }\n };\n\n ReactTags.prototype.handleFocus = function handleFocus () {\n this.setState({ focused: true })\n\n if (this.props.handleFocus) {\n this.props.handleFocus()\n }\n };\n\n ReactTags.prototype.handleDeleteTag = function handleDeleteTag (index, event) {\n // Because we'll destroy the element with cursor focus we need to ensure\n // it does not get lost and move it to the next interactive element\n if (this.container.current) {\n var interactiveEls = this.container.current.querySelectorAll('a,button,input')\n\n var currentEl = Array.prototype.findIndex.call(interactiveEls, function (element) {\n return element === event.currentTarget\n })\n\n var nextEl = interactiveEls[currentEl - 1] || interactiveEls[currentEl + 1]\n\n if (nextEl) {\n nextEl.focus()\n }\n }\n\n this.deleteTag(index)\n };\n\n ReactTags.prototype.addTag = function addTag (tag) {\n if (tag.disabled) {\n return\n }\n\n if (typeof this.props.handleValidate === 'function' && !this.props.handleValidate(tag)) {\n return\n }\n\n this.props.handleAddition(tag)\n\n // reset the state\n this.setState({\n query: '',\n selectedIndex: -1\n })\n };\n\n ReactTags.prototype.deleteTag = function deleteTag (i) {\n this.props.handleDelete(i)\n\n if (this.props.clearInputOnDelete && this.state.query !== '') {\n this.setState({ query: '' })\n }\n };\n\n ReactTags.prototype.render = function render () {\n var this$1 = this;\n\n var listboxId = 'ReactTags-listbox'\n\n var TagComponent = this.props.tagComponent || Tag\n\n var tags = this.props.tags.map(function (tag, i) { return (\n React.createElement( TagComponent, {\n key: i, tag: tag, classNames: this$1.state.classNames, onDelete: this$1.handleDeleteTag.bind(this$1, i) })\n ); })\n\n var expandable = this.state.focused && this.state.query.length >= this.props.minQueryLength\n var classNames = [this.state.classNames.root]\n\n this.state.focused && classNames.push(this.state.classNames.rootFocused)\n\n return (\n React.createElement( 'div', { ref: this.container, className: classNames.join(' '), onClick: this.handleClick.bind(this) },\n React.createElement( 'div', { className: this.state.classNames.selected, 'aria-live': 'polite', 'aria-relevant': 'additions removals' },\n tags\n ),\n React.createElement( 'div', { className: this.state.classNames.search },\n React.createElement( Input, Object.assign({},\n this.state, { inputAttributes: this.props.inputAttributes, inputEventHandlers: this.inputEventHandlers, ref: function (c) { this$1.input = c }, listboxId: listboxId, autofocus: this.props.autofocus, autoresize: this.props.autoresize, expandable: expandable, placeholder: this.props.placeholder, ariaLabel: this.props.ariaLabel })),\n React.createElement( Suggestions, Object.assign({},\n this.state, { ref: function (c) { this$1.suggestions = c }, listboxId: listboxId, expandable: expandable, noSuggestionsText: this.props.noSuggestionsText, suggestions: this.props.suggestions, suggestionsFilter: this.props.suggestionsFilter, addTag: this.addTag.bind(this), maxSuggestionsLength: this.props.maxSuggestionsLength }))\n )\n )\n )\n };\n\n return ReactTags;\n}(React.Component));\n\nReactTags.defaultProps = {\n tags: [],\n placeholder: 'Add new tag',\n noSuggestionsText: null,\n suggestions: [],\n suggestionsFilter: null,\n autofocus: true,\n autoresize: true,\n delimiters: [KEYS.TAB, KEYS.ENTER],\n delimiterChars: [],\n minQueryLength: 2,\n maxSuggestionsLength: 6,\n allowNew: false,\n allowBackspace: true,\n tagComponent: null,\n inputAttributes: {},\n addOnBlur: false,\n clearInputOnDelete: true\n}\n\nReactTags.propTypes = {\n tags: PropTypes.arrayOf(PropTypes.object),\n placeholder: PropTypes.string,\n ariaLabel: PropTypes.string,\n noSuggestionsText: PropTypes.string,\n suggestions: PropTypes.arrayOf(PropTypes.object),\n suggestionsFilter: PropTypes.func,\n autofocus: PropTypes.bool,\n autoresize: PropTypes.bool,\n delimiters: PropTypes.arrayOf(PropTypes.number),\n delimiterChars: PropTypes.arrayOf(PropTypes.string),\n handleDelete: PropTypes.func.isRequired,\n handleAddition: PropTypes.func.isRequired,\n handleInputChange: PropTypes.func,\n handleFocus: PropTypes.func,\n handleBlur: PropTypes.func,\n handleValidate: PropTypes.func,\n minQueryLength: PropTypes.number,\n maxSuggestionsLength: PropTypes.number,\n classNames: PropTypes.object,\n allowNew: PropTypes.bool,\n allowBackspace: PropTypes.bool,\n tagComponent: PropTypes.oneOfType([\n PropTypes.func,\n PropTypes.element\n ]),\n inputAttributes: PropTypes.object,\n addOnBlur: PropTypes.bool,\n clearInputOnDelete: PropTypes.bool\n}\n\nmodule.exports = ReactTags\n","'use strict'\n\nvar React = require('react')\n\nmodule.exports = function (props) { return (\n React.createElement( 'button', { type: 'button', className: props.classNames.selectedTag, title: 'Click to remove tag', onClick: props.onDelete },\n React.createElement( 'span', { className: props.classNames.selectedTagName }, props.tag.name)\n )\n); }\n","'use strict'\n\nvar React = require('react')\n\nvar SIZER_STYLES = {\n position: 'absolute',\n width: 0,\n height: 0,\n visibility: 'hidden',\n overflow: 'scroll',\n whiteSpace: 'pre'\n}\n\nvar STYLE_PROPS = [\n 'fontSize',\n 'fontFamily',\n 'fontWeight',\n 'fontStyle',\n 'letterSpacing',\n 'textTransform'\n]\n\nvar Input = /*@__PURE__*/(function (superclass) {\n function Input (props) {\n superclass.call(this, props)\n this.state = { inputWidth: null }\n }\n\n if ( superclass ) Input.__proto__ = superclass;\n Input.prototype = Object.create( superclass && superclass.prototype );\n Input.prototype.constructor = Input;\n\n Input.prototype.componentDidMount = function componentDidMount () {\n if (this.props.autoresize) {\n this.copyInputStyles()\n this.updateInputWidth()\n }\n\n if (this.props.autofocus) {\n this.input.focus()\n }\n };\n\n Input.prototype.componentDidUpdate = function componentDidUpdate (ref) {\n var query = ref.query;\n var placeholder = ref.placeholder;\n\n if (query !== this.props.query || placeholder !== this.props.placeholder) {\n this.updateInputWidth()\n }\n };\n\n Input.prototype.copyInputStyles = function copyInputStyles () {\n var this$1 = this;\n\n var inputStyle = window.getComputedStyle(this.input)\n\n STYLE_PROPS.forEach(function (prop) {\n this$1.sizer.style[prop] = inputStyle[prop]\n })\n };\n\n Input.prototype.updateInputWidth = function updateInputWidth () {\n var inputWidth\n\n if (this.props.autoresize) {\n // scrollWidth is designed to be fast not accurate.\n // +2 is completely arbitrary but does the job.\n inputWidth = Math.ceil(this.sizer.scrollWidth) + 2\n }\n\n if (inputWidth !== this.state.inputWidth) {\n this.setState({ inputWidth: inputWidth })\n }\n };\n\n Input.prototype.render = function render () {\n var this$1 = this;\n\n var ref = this.props;\n var inputAttributes = ref.inputAttributes;\n var inputEventHandlers = ref.inputEventHandlers;\n var query = ref.query;\n var placeholder = ref.placeholder;\n var expandable = ref.expandable;\n var listboxId = ref.listboxId;\n var selectedIndex = ref.selectedIndex;\n var ariaLabel = ref.ariaLabel;\n\n return (\n React.createElement( 'div', { className: this.props.classNames.searchInput },\n React.createElement( 'input', Object.assign({},\n inputAttributes, inputEventHandlers, { ref: function (c) { this$1.input = c }, value: query, placeholder: placeholder, role: 'combobox', 'aria-autocomplete': 'list', 'aria-label': ariaLabel || placeholder, 'aria-owns': listboxId, 'aria-activedescendant': selectedIndex > -1 ? (listboxId + \"-\" + selectedIndex) : null, 'aria-expanded': expandable, style: { width: this.state.inputWidth } })),\n React.createElement( 'div', { ref: function (c) { this$1.sizer = c }, style: SIZER_STYLES }, query || placeholder)\n )\n )\n };\n\n return Input;\n}(React.Component));\n\nmodule.exports = Input\n","'use strict'\n\nvar React = require('react')\n\nfunction escapeForRegExp (query) {\n return query.replace(/[-\\\\^$*+?.()|[\\]{}]/g, '\\\\$&')\n}\n\nfunction markIt (input, query) {\n if (query) {\n var regex = RegExp(escapeForRegExp(query), 'gi')\n input = input.replace(regex, '$&')\n }\n\n return {\n __html: input\n }\n}\n\nfunction filterSuggestions (query, suggestions, length, suggestionsFilter, noSuggestionsText) {\n if (!suggestionsFilter) {\n var regex = new RegExp((\"(?:^|\\\\s)\" + (escapeForRegExp(query))), 'i')\n suggestionsFilter = function (item) { return regex.test(item.name); }\n }\n\n var filtered = suggestions.filter(function (item) { return suggestionsFilter(item, query); }).slice(0, length)\n\n if (filtered.length === 0 && noSuggestionsText) {\n filtered.push({ id: 0, name: noSuggestionsText, disabled: true, disableMarkIt: true })\n }\n\n return filtered\n}\n\nvar Suggestions = /*@__PURE__*/(function (superclass) {\n function Suggestions (props) {\n superclass.call(this, props)\n\n this.state = {\n options: filterSuggestions(this.props.query, this.props.suggestions, this.props.maxSuggestionsLength, this.props.suggestionsFilter, this.props.noSuggestionsText)\n }\n }\n\n if ( superclass ) Suggestions.__proto__ = superclass;\n Suggestions.prototype = Object.create( superclass && superclass.prototype );\n Suggestions.prototype.constructor = Suggestions;\n\n Suggestions.prototype.componentWillReceiveProps = function componentWillReceiveProps (newProps) {\n this.setState({\n options: filterSuggestions(newProps.query, newProps.suggestions, newProps.maxSuggestionsLength, newProps.suggestionsFilter, newProps.noSuggestionsText)\n })\n };\n\n Suggestions.prototype.handleMouseDown = function handleMouseDown (item, e) {\n // focus is shifted on mouse down but calling preventDefault prevents this\n e.preventDefault()\n this.props.addTag(item)\n };\n\n Suggestions.prototype.render = function render () {\n var this$1 = this;\n\n if (!this.props.expandable || !this.state.options.length) {\n return null\n }\n\n var options = this.state.options.map(function (item, i) {\n var key = (this$1.props.listboxId) + \"-\" + i\n var classNames = []\n\n if (this$1.props.selectedIndex === i) {\n classNames.push(this$1.props.classNames.suggestionActive)\n }\n\n if (item.disabled) {\n classNames.push(this$1.props.classNames.suggestionDisabled)\n }\n\n return (\n React.createElement( 'li', {\n id: key, key: key, role: 'option', className: classNames.join(' '), 'aria-disabled': item.disabled === true, onMouseDown: this$1.handleMouseDown.bind(this$1, item) },\n item.disableMarkIt ? item.name\n : React.createElement( 'span', { dangerouslySetInnerHTML: markIt(item.name, this$1.props.query, item.markInput) })\n )\n )\n })\n\n return (\n React.createElement( 'div', { className: this.props.classNames.suggestions },\n React.createElement( 'ul', { role: 'listbox', id: this.props.listboxId }, options)\n )\n )\n };\n\n return Suggestions;\n}(React.Component));\n\nmodule.exports = Suggestions\n","\"use strict\";\r\nexports.__esModule = true;\r\nvar React = require(\"react\");\r\nvar react_dom_1 = require(\"react-dom\");\r\nvar createCellEl = function () {\r\n var el = document.createElement('div');\r\n el.style.height = '100%';\r\n return el;\r\n};\r\n// example: { title: 'Pets', field: 'pets', formatter: MultiValueFormatter, formatterParams: { style: 'PILL' } }\r\n// default style: comma separated plain text\r\n// other styles: PILL\r\nfunction default_1(cell, formatterParams, onRendered) {\r\n var style = formatterParams.style || ''; // comma separated plain text\r\n var arr = cell.getValue() || [];\r\n var content = arr && arr.length > 0 && typeof arr[0] === 'string' ? React.createElement(\"span\", null, arr.join(', ')) : React.createElement(\"span\", null);\r\n if (style === 'PILL') {\r\n // TODO: use React.Fragment here to remove unnecessary div. (but will break React 15 example in Codesandbox)\r\n content = (React.createElement(\"div\", null, arr.map(function (item) {\r\n return typeof item === 'string' ? React.createElement(\"span\", { key: item }, item) : React.createElement(\"span\", { key: item.name }, item.name);\r\n })));\r\n }\r\n var el = createCellEl();\r\n el.className = 'multi-value-formatter-content';\r\n el.title = arr && arr.length > 0 && typeof arr[0] === 'string' ? arr.join(', ') : '';\r\n react_dom_1.render(content, el);\r\n return el;\r\n}\r\nexports[\"default\"] = default_1;\r\n","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"@babel/runtime/helpers/esm/setPrototypeOf\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","import getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nimport isNativeReflectConstruct from \"@babel/runtime/helpers/esm/isNativeReflectConstruct\";\nimport possibleConstructorReturn from \"@babel/runtime/helpers/esm/possibleConstructorReturn\";\nexport default function _createSuper(Derived) {\n var hasNativeReflectConstruct = isNativeReflectConstruct();\n return function _createSuperInternal() {\n var Super = getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return possibleConstructorReturn(this, result);\n };\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","/**\n * Fuse.js v7.0.0 - Lightweight fuzzy-search (http://fusejs.io)\n *\n * Copyright (c) 2023 Kiro Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction isArray(value) {\n return !Array.isArray\n ? getTag(value) === '[object Array]'\n : Array.isArray(value)\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/baseToString.js\nconst INFINITY = 1 / 0;\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value\n }\n let result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result\n}\n\nfunction toString(value) {\n return value == null ? '' : baseToString(value)\n}\n\nfunction isString(value) {\n return typeof value === 'string'\n}\n\nfunction isNumber(value) {\n return typeof value === 'number'\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/isBoolean.js\nfunction isBoolean(value) {\n return (\n value === true ||\n value === false ||\n (isObjectLike(value) && getTag(value) == '[object Boolean]')\n )\n}\n\nfunction isObject(value) {\n return typeof value === 'object'\n}\n\n// Checks if `value` is object-like.\nfunction isObjectLike(value) {\n return isObject(value) && value !== null\n}\n\nfunction isDefined(value) {\n return value !== undefined && value !== null\n}\n\nfunction isBlank(value) {\n return !value.trim().length\n}\n\n// Gets the `toStringTag` of `value`.\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/getTag.js\nfunction getTag(value) {\n return value == null\n ? value === undefined\n ? '[object Undefined]'\n : '[object Null]'\n : Object.prototype.toString.call(value)\n}\n\nconst EXTENDED_SEARCH_UNAVAILABLE = 'Extended search is not available';\n\nconst INCORRECT_INDEX_TYPE = \"Incorrect 'index' type\";\n\nconst LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY = (key) =>\n `Invalid value for key ${key}`;\n\nconst PATTERN_LENGTH_TOO_LARGE = (max) =>\n `Pattern length exceeds max of ${max}.`;\n\nconst MISSING_KEY_PROPERTY = (name) => `Missing ${name} property in key`;\n\nconst INVALID_KEY_WEIGHT_VALUE = (key) =>\n `Property 'weight' in key '${key}' must be a positive integer`;\n\nconst hasOwn = Object.prototype.hasOwnProperty;\n\nclass KeyStore {\n constructor(keys) {\n this._keys = [];\n this._keyMap = {};\n\n let totalWeight = 0;\n\n keys.forEach((key) => {\n let obj = createKey(key);\n\n this._keys.push(obj);\n this._keyMap[obj.id] = obj;\n\n totalWeight += obj.weight;\n });\n\n // Normalize weights so that their sum is equal to 1\n this._keys.forEach((key) => {\n key.weight /= totalWeight;\n });\n }\n get(keyId) {\n return this._keyMap[keyId]\n }\n keys() {\n return this._keys\n }\n toJSON() {\n return JSON.stringify(this._keys)\n }\n}\n\nfunction createKey(key) {\n let path = null;\n let id = null;\n let src = null;\n let weight = 1;\n let getFn = null;\n\n if (isString(key) || isArray(key)) {\n src = key;\n path = createKeyPath(key);\n id = createKeyId(key);\n } else {\n if (!hasOwn.call(key, 'name')) {\n throw new Error(MISSING_KEY_PROPERTY('name'))\n }\n\n const name = key.name;\n src = name;\n\n if (hasOwn.call(key, 'weight')) {\n weight = key.weight;\n\n if (weight <= 0) {\n throw new Error(INVALID_KEY_WEIGHT_VALUE(name))\n }\n }\n\n path = createKeyPath(name);\n id = createKeyId(name);\n getFn = key.getFn;\n }\n\n return { path, id, weight, src, getFn }\n}\n\nfunction createKeyPath(key) {\n return isArray(key) ? key : key.split('.')\n}\n\nfunction createKeyId(key) {\n return isArray(key) ? key.join('.') : key\n}\n\nfunction get(obj, path) {\n let list = [];\n let arr = false;\n\n const deepGet = (obj, path, index) => {\n if (!isDefined(obj)) {\n return\n }\n if (!path[index]) {\n // If there's no path left, we've arrived at the object we care about.\n list.push(obj);\n } else {\n let key = path[index];\n\n const value = obj[key];\n\n if (!isDefined(value)) {\n return\n }\n\n // If we're at the last value in the path, and if it's a string/number/bool,\n // add it to the list\n if (\n index === path.length - 1 &&\n (isString(value) || isNumber(value) || isBoolean(value))\n ) {\n list.push(toString(value));\n } else if (isArray(value)) {\n arr = true;\n // Search each item in the array.\n for (let i = 0, len = value.length; i < len; i += 1) {\n deepGet(value[i], path, index + 1);\n }\n } else if (path.length) {\n // An object. Recurse further.\n deepGet(value, path, index + 1);\n }\n }\n };\n\n // Backwards compatibility (since path used to be a string)\n deepGet(obj, isString(path) ? path.split('.') : path, 0);\n\n return arr ? list : list[0]\n}\n\nconst MatchOptions = {\n // Whether the matches should be included in the result set. When `true`, each record in the result\n // set will include the indices of the matched characters.\n // These can consequently be used for highlighting purposes.\n includeMatches: false,\n // When `true`, the matching function will continue to the end of a search pattern even if\n // a perfect match has already been located in the string.\n findAllMatches: false,\n // Minimum number of characters that must be matched before a result is considered a match\n minMatchCharLength: 1\n};\n\nconst BasicOptions = {\n // When `true`, the algorithm continues searching to the end of the input even if a perfect\n // match is found before the end of the same input.\n isCaseSensitive: false,\n // When true, the matching function will continue to the end of a search pattern even if\n includeScore: false,\n // List of properties that will be searched. This also supports nested properties.\n keys: [],\n // Whether to sort the result list, by score\n shouldSort: true,\n // Default sort function: sort by ascending score, ascending index\n sortFn: (a, b) =>\n a.score === b.score ? (a.idx < b.idx ? -1 : 1) : a.score < b.score ? -1 : 1\n};\n\nconst FuzzyOptions = {\n // Approximately where in the text is the pattern expected to be found?\n location: 0,\n // At what point does the match algorithm give up. A threshold of '0.0' requires a perfect match\n // (of both letters and location), a threshold of '1.0' would match anything.\n threshold: 0.6,\n // Determines how close the match must be to the fuzzy location (specified above).\n // An exact letter match which is 'distance' characters away from the fuzzy location\n // would score as a complete mismatch. A distance of '0' requires the match be at\n // the exact location specified, a threshold of '1000' would require a perfect match\n // to be within 800 characters of the fuzzy location to be found using a 0.8 threshold.\n distance: 100\n};\n\nconst AdvancedOptions = {\n // When `true`, it enables the use of unix-like search commands\n useExtendedSearch: false,\n // The get function to use when fetching an object's properties.\n // The default will search nested paths *ie foo.bar.baz*\n getFn: get,\n // When `true`, search will ignore `location` and `distance`, so it won't matter\n // where in the string the pattern appears.\n // More info: https://fusejs.io/concepts/scoring-theory.html#fuzziness-score\n ignoreLocation: false,\n // When `true`, the calculation for the relevance score (used for sorting) will\n // ignore the field-length norm.\n // More info: https://fusejs.io/concepts/scoring-theory.html#field-length-norm\n ignoreFieldNorm: false,\n // The weight to determine how much field length norm effects scoring.\n fieldNormWeight: 1\n};\n\nvar Config = {\n ...BasicOptions,\n ...MatchOptions,\n ...FuzzyOptions,\n ...AdvancedOptions\n};\n\nconst SPACE = /[^ ]+/g;\n\n// Field-length norm: the shorter the field, the higher the weight.\n// Set to 3 decimals to reduce index size.\nfunction norm(weight = 1, mantissa = 3) {\n const cache = new Map();\n const m = Math.pow(10, mantissa);\n\n return {\n get(value) {\n const numTokens = value.match(SPACE).length;\n\n if (cache.has(numTokens)) {\n return cache.get(numTokens)\n }\n\n // Default function is 1/sqrt(x), weight makes that variable\n const norm = 1 / Math.pow(numTokens, 0.5 * weight);\n\n // In place of `toFixed(mantissa)`, for faster computation\n const n = parseFloat(Math.round(norm * m) / m);\n\n cache.set(numTokens, n);\n\n return n\n },\n clear() {\n cache.clear();\n }\n }\n}\n\nclass FuseIndex {\n constructor({\n getFn = Config.getFn,\n fieldNormWeight = Config.fieldNormWeight\n } = {}) {\n this.norm = norm(fieldNormWeight, 3);\n this.getFn = getFn;\n this.isCreated = false;\n\n this.setIndexRecords();\n }\n setSources(docs = []) {\n this.docs = docs;\n }\n setIndexRecords(records = []) {\n this.records = records;\n }\n setKeys(keys = []) {\n this.keys = keys;\n this._keysMap = {};\n keys.forEach((key, idx) => {\n this._keysMap[key.id] = idx;\n });\n }\n create() {\n if (this.isCreated || !this.docs.length) {\n return\n }\n\n this.isCreated = true;\n\n // List is Array\n if (isString(this.docs[0])) {\n this.docs.forEach((doc, docIndex) => {\n this._addString(doc, docIndex);\n });\n } else {\n // List is Array\n this.docs.forEach((doc, docIndex) => {\n this._addObject(doc, docIndex);\n });\n }\n\n this.norm.clear();\n }\n // Adds a doc to the end of the index\n add(doc) {\n const idx = this.size();\n\n if (isString(doc)) {\n this._addString(doc, idx);\n } else {\n this._addObject(doc, idx);\n }\n }\n // Removes the doc at the specified index of the index\n removeAt(idx) {\n this.records.splice(idx, 1);\n\n // Change ref index of every subsquent doc\n for (let i = idx, len = this.size(); i < len; i += 1) {\n this.records[i].i -= 1;\n }\n }\n getValueForItemAtKeyId(item, keyId) {\n return item[this._keysMap[keyId]]\n }\n size() {\n return this.records.length\n }\n _addString(doc, docIndex) {\n if (!isDefined(doc) || isBlank(doc)) {\n return\n }\n\n let record = {\n v: doc,\n i: docIndex,\n n: this.norm.get(doc)\n };\n\n this.records.push(record);\n }\n _addObject(doc, docIndex) {\n let record = { i: docIndex, $: {} };\n\n // Iterate over every key (i.e, path), and fetch the value at that key\n this.keys.forEach((key, keyIndex) => {\n let value = key.getFn ? key.getFn(doc) : this.getFn(doc, key.path);\n\n if (!isDefined(value)) {\n return\n }\n\n if (isArray(value)) {\n let subRecords = [];\n const stack = [{ nestedArrIndex: -1, value }];\n\n while (stack.length) {\n const { nestedArrIndex, value } = stack.pop();\n\n if (!isDefined(value)) {\n continue\n }\n\n if (isString(value) && !isBlank(value)) {\n let subRecord = {\n v: value,\n i: nestedArrIndex,\n n: this.norm.get(value)\n };\n\n subRecords.push(subRecord);\n } else if (isArray(value)) {\n value.forEach((item, k) => {\n stack.push({\n nestedArrIndex: k,\n value: item\n });\n });\n } else ;\n }\n record.$[keyIndex] = subRecords;\n } else if (isString(value) && !isBlank(value)) {\n let subRecord = {\n v: value,\n n: this.norm.get(value)\n };\n\n record.$[keyIndex] = subRecord;\n }\n });\n\n this.records.push(record);\n }\n toJSON() {\n return {\n keys: this.keys,\n records: this.records\n }\n }\n}\n\nfunction createIndex(\n keys,\n docs,\n { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n myIndex.setKeys(keys.map(createKey));\n myIndex.setSources(docs);\n myIndex.create();\n return myIndex\n}\n\nfunction parseIndex(\n data,\n { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n const { keys, records } = data;\n const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n myIndex.setKeys(keys);\n myIndex.setIndexRecords(records);\n return myIndex\n}\n\nfunction computeScore$1(\n pattern,\n {\n errors = 0,\n currentLocation = 0,\n expectedLocation = 0,\n distance = Config.distance,\n ignoreLocation = Config.ignoreLocation\n } = {}\n) {\n const accuracy = errors / pattern.length;\n\n if (ignoreLocation) {\n return accuracy\n }\n\n const proximity = Math.abs(expectedLocation - currentLocation);\n\n if (!distance) {\n // Dodge divide by zero error.\n return proximity ? 1.0 : accuracy\n }\n\n return accuracy + proximity / distance\n}\n\nfunction convertMaskToIndices(\n matchmask = [],\n minMatchCharLength = Config.minMatchCharLength\n) {\n let indices = [];\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (let len = matchmask.length; i < len; i += 1) {\n let match = matchmask[i];\n if (match && start === -1) {\n start = i;\n } else if (!match && start !== -1) {\n end = i - 1;\n if (end - start + 1 >= minMatchCharLength) {\n indices.push([start, end]);\n }\n start = -1;\n }\n }\n\n // (i-1 - start) + 1 => i - start\n if (matchmask[i - 1] && i - start >= minMatchCharLength) {\n indices.push([start, i - 1]);\n }\n\n return indices\n}\n\n// Machine word size\nconst MAX_BITS = 32;\n\nfunction search(\n text,\n pattern,\n patternAlphabet,\n {\n location = Config.location,\n distance = Config.distance,\n threshold = Config.threshold,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n includeMatches = Config.includeMatches,\n ignoreLocation = Config.ignoreLocation\n } = {}\n) {\n if (pattern.length > MAX_BITS) {\n throw new Error(PATTERN_LENGTH_TOO_LARGE(MAX_BITS))\n }\n\n const patternLen = pattern.length;\n // Set starting location at beginning text and initialize the alphabet.\n const textLen = text.length;\n // Handle the case when location > text.length\n const expectedLocation = Math.max(0, Math.min(location, textLen));\n // Highest score beyond which we give up.\n let currentThreshold = threshold;\n // Is there a nearby exact match? (speedup)\n let bestLocation = expectedLocation;\n\n // Performance: only computer matches when the minMatchCharLength > 1\n // OR if `includeMatches` is true.\n const computeMatches = minMatchCharLength > 1 || includeMatches;\n // A mask of the matches, used for building the indices\n const matchMask = computeMatches ? Array(textLen) : [];\n\n let index;\n\n // Get all exact matches, here for speed up\n while ((index = text.indexOf(pattern, bestLocation)) > -1) {\n let score = computeScore$1(pattern, {\n currentLocation: index,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n currentThreshold = Math.min(score, currentThreshold);\n bestLocation = index + patternLen;\n\n if (computeMatches) {\n let i = 0;\n while (i < patternLen) {\n matchMask[index + i] = 1;\n i += 1;\n }\n }\n }\n\n // Reset the best location\n bestLocation = -1;\n\n let lastBitArr = [];\n let finalScore = 1;\n let binMax = patternLen + textLen;\n\n const mask = 1 << (patternLen - 1);\n\n for (let i = 0; i < patternLen; i += 1) {\n // Scan for the best match; each iteration allows for one more error.\n // Run a binary search to determine how far from the match location we can stray\n // at this error level.\n let binMin = 0;\n let binMid = binMax;\n\n while (binMin < binMid) {\n const score = computeScore$1(pattern, {\n errors: i,\n currentLocation: expectedLocation + binMid,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n if (score <= currentThreshold) {\n binMin = binMid;\n } else {\n binMax = binMid;\n }\n\n binMid = Math.floor((binMax - binMin) / 2 + binMin);\n }\n\n // Use the result from this iteration as the maximum for the next.\n binMax = binMid;\n\n let start = Math.max(1, expectedLocation - binMid + 1);\n let finish = findAllMatches\n ? textLen\n : Math.min(expectedLocation + binMid, textLen) + patternLen;\n\n // Initialize the bit array\n let bitArr = Array(finish + 2);\n\n bitArr[finish + 1] = (1 << i) - 1;\n\n for (let j = finish; j >= start; j -= 1) {\n let currentLocation = j - 1;\n let charMatch = patternAlphabet[text.charAt(currentLocation)];\n\n if (computeMatches) {\n // Speed up: quick bool to int conversion (i.e, `charMatch ? 1 : 0`)\n matchMask[currentLocation] = +!!charMatch;\n }\n\n // First pass: exact match\n bitArr[j] = ((bitArr[j + 1] << 1) | 1) & charMatch;\n\n // Subsequent passes: fuzzy match\n if (i) {\n bitArr[j] |=\n ((lastBitArr[j + 1] | lastBitArr[j]) << 1) | 1 | lastBitArr[j + 1];\n }\n\n if (bitArr[j] & mask) {\n finalScore = computeScore$1(pattern, {\n errors: i,\n currentLocation,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n // This match will almost certainly be better than any existing match.\n // But check anyway.\n if (finalScore <= currentThreshold) {\n // Indeed it is\n currentThreshold = finalScore;\n bestLocation = currentLocation;\n\n // Already passed `loc`, downhill from here on in.\n if (bestLocation <= expectedLocation) {\n break\n }\n\n // When passing `bestLocation`, don't exceed our current distance from `expectedLocation`.\n start = Math.max(1, 2 * expectedLocation - bestLocation);\n }\n }\n }\n\n // No hope for a (better) match at greater error levels.\n const score = computeScore$1(pattern, {\n errors: i + 1,\n currentLocation: expectedLocation,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n if (score > currentThreshold) {\n break\n }\n\n lastBitArr = bitArr;\n }\n\n const result = {\n isMatch: bestLocation >= 0,\n // Count exact matches (those with a score of 0) to be \"almost\" exact\n score: Math.max(0.001, finalScore)\n };\n\n if (computeMatches) {\n const indices = convertMaskToIndices(matchMask, minMatchCharLength);\n if (!indices.length) {\n result.isMatch = false;\n } else if (includeMatches) {\n result.indices = indices;\n }\n }\n\n return result\n}\n\nfunction createPatternAlphabet(pattern) {\n let mask = {};\n\n for (let i = 0, len = pattern.length; i < len; i += 1) {\n const char = pattern.charAt(i);\n mask[char] = (mask[char] || 0) | (1 << (len - i - 1));\n }\n\n return mask\n}\n\nclass BitapSearch {\n constructor(\n pattern,\n {\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance,\n includeMatches = Config.includeMatches,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n isCaseSensitive = Config.isCaseSensitive,\n ignoreLocation = Config.ignoreLocation\n } = {}\n ) {\n this.options = {\n location,\n threshold,\n distance,\n includeMatches,\n findAllMatches,\n minMatchCharLength,\n isCaseSensitive,\n ignoreLocation\n };\n\n this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n\n this.chunks = [];\n\n if (!this.pattern.length) {\n return\n }\n\n const addChunk = (pattern, startIndex) => {\n this.chunks.push({\n pattern,\n alphabet: createPatternAlphabet(pattern),\n startIndex\n });\n };\n\n const len = this.pattern.length;\n\n if (len > MAX_BITS) {\n let i = 0;\n const remainder = len % MAX_BITS;\n const end = len - remainder;\n\n while (i < end) {\n addChunk(this.pattern.substr(i, MAX_BITS), i);\n i += MAX_BITS;\n }\n\n if (remainder) {\n const startIndex = len - MAX_BITS;\n addChunk(this.pattern.substr(startIndex), startIndex);\n }\n } else {\n addChunk(this.pattern, 0);\n }\n }\n\n searchIn(text) {\n const { isCaseSensitive, includeMatches } = this.options;\n\n if (!isCaseSensitive) {\n text = text.toLowerCase();\n }\n\n // Exact match\n if (this.pattern === text) {\n let result = {\n isMatch: true,\n score: 0\n };\n\n if (includeMatches) {\n result.indices = [[0, text.length - 1]];\n }\n\n return result\n }\n\n // Otherwise, use Bitap algorithm\n const {\n location,\n distance,\n threshold,\n findAllMatches,\n minMatchCharLength,\n ignoreLocation\n } = this.options;\n\n let allIndices = [];\n let totalScore = 0;\n let hasMatches = false;\n\n this.chunks.forEach(({ pattern, alphabet, startIndex }) => {\n const { isMatch, score, indices } = search(text, pattern, alphabet, {\n location: location + startIndex,\n distance,\n threshold,\n findAllMatches,\n minMatchCharLength,\n includeMatches,\n ignoreLocation\n });\n\n if (isMatch) {\n hasMatches = true;\n }\n\n totalScore += score;\n\n if (isMatch && indices) {\n allIndices = [...allIndices, ...indices];\n }\n });\n\n let result = {\n isMatch: hasMatches,\n score: hasMatches ? totalScore / this.chunks.length : 1\n };\n\n if (hasMatches && includeMatches) {\n result.indices = allIndices;\n }\n\n return result\n }\n}\n\nclass BaseMatch {\n constructor(pattern) {\n this.pattern = pattern;\n }\n static isMultiMatch(pattern) {\n return getMatch(pattern, this.multiRegex)\n }\n static isSingleMatch(pattern) {\n return getMatch(pattern, this.singleRegex)\n }\n search(/*text*/) {}\n}\n\nfunction getMatch(pattern, exp) {\n const matches = pattern.match(exp);\n return matches ? matches[1] : null\n}\n\n// Token: 'file\n\nclass ExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'exact'\n }\n static get multiRegex() {\n return /^=\"(.*)\"$/\n }\n static get singleRegex() {\n return /^=(.*)$/\n }\n search(text) {\n const isMatch = text === this.pattern;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, this.pattern.length - 1]\n }\n }\n}\n\n// Token: !fire\n\nclass InverseExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-exact'\n }\n static get multiRegex() {\n return /^!\"(.*)\"$/\n }\n static get singleRegex() {\n return /^!(.*)$/\n }\n search(text) {\n const index = text.indexOf(this.pattern);\n const isMatch = index === -1;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\n// Token: ^file\n\nclass PrefixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'prefix-exact'\n }\n static get multiRegex() {\n return /^\\^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^\\^(.*)$/\n }\n search(text) {\n const isMatch = text.startsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, this.pattern.length - 1]\n }\n }\n}\n\n// Token: !^fire\n\nclass InversePrefixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-prefix-exact'\n }\n static get multiRegex() {\n return /^!\\^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^!\\^(.*)$/\n }\n search(text) {\n const isMatch = !text.startsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\n// Token: .file$\n\nclass SuffixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'suffix-exact'\n }\n static get multiRegex() {\n return /^\"(.*)\"\\$$/\n }\n static get singleRegex() {\n return /^(.*)\\$$/\n }\n search(text) {\n const isMatch = text.endsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [text.length - this.pattern.length, text.length - 1]\n }\n }\n}\n\n// Token: !.file$\n\nclass InverseSuffixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-suffix-exact'\n }\n static get multiRegex() {\n return /^!\"(.*)\"\\$$/\n }\n static get singleRegex() {\n return /^!(.*)\\$$/\n }\n search(text) {\n const isMatch = !text.endsWith(this.pattern);\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\nclass FuzzyMatch extends BaseMatch {\n constructor(\n pattern,\n {\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance,\n includeMatches = Config.includeMatches,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n isCaseSensitive = Config.isCaseSensitive,\n ignoreLocation = Config.ignoreLocation\n } = {}\n ) {\n super(pattern);\n this._bitapSearch = new BitapSearch(pattern, {\n location,\n threshold,\n distance,\n includeMatches,\n findAllMatches,\n minMatchCharLength,\n isCaseSensitive,\n ignoreLocation\n });\n }\n static get type() {\n return 'fuzzy'\n }\n static get multiRegex() {\n return /^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^(.*)$/\n }\n search(text) {\n return this._bitapSearch.searchIn(text)\n }\n}\n\n// Token: 'file\n\nclass IncludeMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'include'\n }\n static get multiRegex() {\n return /^'\"(.*)\"$/\n }\n static get singleRegex() {\n return /^'(.*)$/\n }\n search(text) {\n let location = 0;\n let index;\n\n const indices = [];\n const patternLen = this.pattern.length;\n\n // Get all exact matches\n while ((index = text.indexOf(this.pattern, location)) > -1) {\n location = index + patternLen;\n indices.push([index, location - 1]);\n }\n\n const isMatch = !!indices.length;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices\n }\n }\n}\n\n// ❗Order is important. DO NOT CHANGE.\nconst searchers = [\n ExactMatch,\n IncludeMatch,\n PrefixExactMatch,\n InversePrefixExactMatch,\n InverseSuffixExactMatch,\n SuffixExactMatch,\n InverseExactMatch,\n FuzzyMatch\n];\n\nconst searchersLen = searchers.length;\n\n// Regex to split by spaces, but keep anything in quotes together\nconst SPACE_RE = / +(?=(?:[^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)/;\nconst OR_TOKEN = '|';\n\n// Return a 2D array representation of the query, for simpler parsing.\n// Example:\n// \"^core go$ | rb$ | py$ xy$\" => [[\"^core\", \"go$\"], [\"rb$\"], [\"py$\", \"xy$\"]]\nfunction parseQuery(pattern, options = {}) {\n return pattern.split(OR_TOKEN).map((item) => {\n let query = item\n .trim()\n .split(SPACE_RE)\n .filter((item) => item && !!item.trim());\n\n let results = [];\n for (let i = 0, len = query.length; i < len; i += 1) {\n const queryItem = query[i];\n\n // 1. Handle multiple query match (i.e, once that are quoted, like `\"hello world\"`)\n let found = false;\n let idx = -1;\n while (!found && ++idx < searchersLen) {\n const searcher = searchers[idx];\n let token = searcher.isMultiMatch(queryItem);\n if (token) {\n results.push(new searcher(token, options));\n found = true;\n }\n }\n\n if (found) {\n continue\n }\n\n // 2. Handle single query matches (i.e, once that are *not* quoted)\n idx = -1;\n while (++idx < searchersLen) {\n const searcher = searchers[idx];\n let token = searcher.isSingleMatch(queryItem);\n if (token) {\n results.push(new searcher(token, options));\n break\n }\n }\n }\n\n return results\n })\n}\n\n// These extended matchers can return an array of matches, as opposed\n// to a singl match\nconst MultiMatchSet = new Set([FuzzyMatch.type, IncludeMatch.type]);\n\n/**\n * Command-like searching\n * ======================\n *\n * Given multiple search terms delimited by spaces.e.g. `^jscript .python$ ruby !java`,\n * search in a given text.\n *\n * Search syntax:\n *\n * | Token | Match type | Description |\n * | ----------- | -------------------------- | -------------------------------------- |\n * | `jscript` | fuzzy-match | Items that fuzzy match `jscript` |\n * | `=scheme` | exact-match | Items that are `scheme` |\n * | `'python` | include-match | Items that include `python` |\n * | `!ruby` | inverse-exact-match | Items that do not include `ruby` |\n * | `^java` | prefix-exact-match | Items that start with `java` |\n * | `!^earlang` | inverse-prefix-exact-match | Items that do not start with `earlang` |\n * | `.js$` | suffix-exact-match | Items that end with `.js` |\n * | `!.go$` | inverse-suffix-exact-match | Items that do not end with `.go` |\n *\n * A single pipe character acts as an OR operator. For example, the following\n * query matches entries that start with `core` and end with either`go`, `rb`,\n * or`py`.\n *\n * ```\n * ^core go$ | rb$ | py$\n * ```\n */\nclass ExtendedSearch {\n constructor(\n pattern,\n {\n isCaseSensitive = Config.isCaseSensitive,\n includeMatches = Config.includeMatches,\n minMatchCharLength = Config.minMatchCharLength,\n ignoreLocation = Config.ignoreLocation,\n findAllMatches = Config.findAllMatches,\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance\n } = {}\n ) {\n this.query = null;\n this.options = {\n isCaseSensitive,\n includeMatches,\n minMatchCharLength,\n findAllMatches,\n ignoreLocation,\n location,\n threshold,\n distance\n };\n\n this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n this.query = parseQuery(this.pattern, this.options);\n }\n\n static condition(_, options) {\n return options.useExtendedSearch\n }\n\n searchIn(text) {\n const query = this.query;\n\n if (!query) {\n return {\n isMatch: false,\n score: 1\n }\n }\n\n const { includeMatches, isCaseSensitive } = this.options;\n\n text = isCaseSensitive ? text : text.toLowerCase();\n\n let numMatches = 0;\n let allIndices = [];\n let totalScore = 0;\n\n // ORs\n for (let i = 0, qLen = query.length; i < qLen; i += 1) {\n const searchers = query[i];\n\n // Reset indices\n allIndices.length = 0;\n numMatches = 0;\n\n // ANDs\n for (let j = 0, pLen = searchers.length; j < pLen; j += 1) {\n const searcher = searchers[j];\n const { isMatch, indices, score } = searcher.search(text);\n\n if (isMatch) {\n numMatches += 1;\n totalScore += score;\n if (includeMatches) {\n const type = searcher.constructor.type;\n if (MultiMatchSet.has(type)) {\n allIndices = [...allIndices, ...indices];\n } else {\n allIndices.push(indices);\n }\n }\n } else {\n totalScore = 0;\n numMatches = 0;\n allIndices.length = 0;\n break\n }\n }\n\n // OR condition, so if TRUE, return\n if (numMatches) {\n let result = {\n isMatch: true,\n score: totalScore / numMatches\n };\n\n if (includeMatches) {\n result.indices = allIndices;\n }\n\n return result\n }\n }\n\n // Nothing was matched\n return {\n isMatch: false,\n score: 1\n }\n }\n}\n\nconst registeredSearchers = [];\n\nfunction register(...args) {\n registeredSearchers.push(...args);\n}\n\nfunction createSearcher(pattern, options) {\n for (let i = 0, len = registeredSearchers.length; i < len; i += 1) {\n let searcherClass = registeredSearchers[i];\n if (searcherClass.condition(pattern, options)) {\n return new searcherClass(pattern, options)\n }\n }\n\n return new BitapSearch(pattern, options)\n}\n\nconst LogicalOperator = {\n AND: '$and',\n OR: '$or'\n};\n\nconst KeyType = {\n PATH: '$path',\n PATTERN: '$val'\n};\n\nconst isExpression = (query) =>\n !!(query[LogicalOperator.AND] || query[LogicalOperator.OR]);\n\nconst isPath = (query) => !!query[KeyType.PATH];\n\nconst isLeaf = (query) =>\n !isArray(query) && isObject(query) && !isExpression(query);\n\nconst convertToExplicit = (query) => ({\n [LogicalOperator.AND]: Object.keys(query).map((key) => ({\n [key]: query[key]\n }))\n});\n\n// When `auto` is `true`, the parse function will infer and initialize and add\n// the appropriate `Searcher` instance\nfunction parse(query, options, { auto = true } = {}) {\n const next = (query) => {\n let keys = Object.keys(query);\n\n const isQueryPath = isPath(query);\n\n if (!isQueryPath && keys.length > 1 && !isExpression(query)) {\n return next(convertToExplicit(query))\n }\n\n if (isLeaf(query)) {\n const key = isQueryPath ? query[KeyType.PATH] : keys[0];\n\n const pattern = isQueryPath ? query[KeyType.PATTERN] : query[key];\n\n if (!isString(pattern)) {\n throw new Error(LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY(key))\n }\n\n const obj = {\n keyId: createKeyId(key),\n pattern\n };\n\n if (auto) {\n obj.searcher = createSearcher(pattern, options);\n }\n\n return obj\n }\n\n let node = {\n children: [],\n operator: keys[0]\n };\n\n keys.forEach((key) => {\n const value = query[key];\n\n if (isArray(value)) {\n value.forEach((item) => {\n node.children.push(next(item));\n });\n }\n });\n\n return node\n };\n\n if (!isExpression(query)) {\n query = convertToExplicit(query);\n }\n\n return next(query)\n}\n\n// Practical scoring function\nfunction computeScore(\n results,\n { ignoreFieldNorm = Config.ignoreFieldNorm }\n) {\n results.forEach((result) => {\n let totalScore = 1;\n\n result.matches.forEach(({ key, norm, score }) => {\n const weight = key ? key.weight : null;\n\n totalScore *= Math.pow(\n score === 0 && weight ? Number.EPSILON : score,\n (weight || 1) * (ignoreFieldNorm ? 1 : norm)\n );\n });\n\n result.score = totalScore;\n });\n}\n\nfunction transformMatches(result, data) {\n const matches = result.matches;\n data.matches = [];\n\n if (!isDefined(matches)) {\n return\n }\n\n matches.forEach((match) => {\n if (!isDefined(match.indices) || !match.indices.length) {\n return\n }\n\n const { indices, value } = match;\n\n let obj = {\n indices,\n value\n };\n\n if (match.key) {\n obj.key = match.key.src;\n }\n\n if (match.idx > -1) {\n obj.refIndex = match.idx;\n }\n\n data.matches.push(obj);\n });\n}\n\nfunction transformScore(result, data) {\n data.score = result.score;\n}\n\nfunction format(\n results,\n docs,\n {\n includeMatches = Config.includeMatches,\n includeScore = Config.includeScore\n } = {}\n) {\n const transformers = [];\n\n if (includeMatches) transformers.push(transformMatches);\n if (includeScore) transformers.push(transformScore);\n\n return results.map((result) => {\n const { idx } = result;\n\n const data = {\n item: docs[idx],\n refIndex: idx\n };\n\n if (transformers.length) {\n transformers.forEach((transformer) => {\n transformer(result, data);\n });\n }\n\n return data\n })\n}\n\nclass Fuse {\n constructor(docs, options = {}, index) {\n this.options = { ...Config, ...options };\n\n if (\n this.options.useExtendedSearch &&\n !true\n ) {\n throw new Error(EXTENDED_SEARCH_UNAVAILABLE)\n }\n\n this._keyStore = new KeyStore(this.options.keys);\n\n this.setCollection(docs, index);\n }\n\n setCollection(docs, index) {\n this._docs = docs;\n\n if (index && !(index instanceof FuseIndex)) {\n throw new Error(INCORRECT_INDEX_TYPE)\n }\n\n this._myIndex =\n index ||\n createIndex(this.options.keys, this._docs, {\n getFn: this.options.getFn,\n fieldNormWeight: this.options.fieldNormWeight\n });\n }\n\n add(doc) {\n if (!isDefined(doc)) {\n return\n }\n\n this._docs.push(doc);\n this._myIndex.add(doc);\n }\n\n remove(predicate = (/* doc, idx */) => false) {\n const results = [];\n\n for (let i = 0, len = this._docs.length; i < len; i += 1) {\n const doc = this._docs[i];\n if (predicate(doc, i)) {\n this.removeAt(i);\n i -= 1;\n len -= 1;\n\n results.push(doc);\n }\n }\n\n return results\n }\n\n removeAt(idx) {\n this._docs.splice(idx, 1);\n this._myIndex.removeAt(idx);\n }\n\n getIndex() {\n return this._myIndex\n }\n\n search(query, { limit = -1 } = {}) {\n const {\n includeMatches,\n includeScore,\n shouldSort,\n sortFn,\n ignoreFieldNorm\n } = this.options;\n\n let results = isString(query)\n ? isString(this._docs[0])\n ? this._searchStringList(query)\n : this._searchObjectList(query)\n : this._searchLogical(query);\n\n computeScore(results, { ignoreFieldNorm });\n\n if (shouldSort) {\n results.sort(sortFn);\n }\n\n if (isNumber(limit) && limit > -1) {\n results = results.slice(0, limit);\n }\n\n return format(results, this._docs, {\n includeMatches,\n includeScore\n })\n }\n\n _searchStringList(query) {\n const searcher = createSearcher(query, this.options);\n const { records } = this._myIndex;\n const results = [];\n\n // Iterate over every string in the index\n records.forEach(({ v: text, i: idx, n: norm }) => {\n if (!isDefined(text)) {\n return\n }\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n results.push({\n item: text,\n idx,\n matches: [{ score, value: text, norm, indices }]\n });\n }\n });\n\n return results\n }\n\n _searchLogical(query) {\n\n const expression = parse(query, this.options);\n\n const evaluate = (node, item, idx) => {\n if (!node.children) {\n const { keyId, searcher } = node;\n\n const matches = this._findMatches({\n key: this._keyStore.get(keyId),\n value: this._myIndex.getValueForItemAtKeyId(item, keyId),\n searcher\n });\n\n if (matches && matches.length) {\n return [\n {\n idx,\n item,\n matches\n }\n ]\n }\n\n return []\n }\n\n const res = [];\n for (let i = 0, len = node.children.length; i < len; i += 1) {\n const child = node.children[i];\n const result = evaluate(child, item, idx);\n if (result.length) {\n res.push(...result);\n } else if (node.operator === LogicalOperator.AND) {\n return []\n }\n }\n return res\n };\n\n const records = this._myIndex.records;\n const resultMap = {};\n const results = [];\n\n records.forEach(({ $: item, i: idx }) => {\n if (isDefined(item)) {\n let expResults = evaluate(expression, item, idx);\n\n if (expResults.length) {\n // Dedupe when adding\n if (!resultMap[idx]) {\n resultMap[idx] = { idx, item, matches: [] };\n results.push(resultMap[idx]);\n }\n expResults.forEach(({ matches }) => {\n resultMap[idx].matches.push(...matches);\n });\n }\n }\n });\n\n return results\n }\n\n _searchObjectList(query) {\n const searcher = createSearcher(query, this.options);\n const { keys, records } = this._myIndex;\n const results = [];\n\n // List is Array\n records.forEach(({ $: item, i: idx }) => {\n if (!isDefined(item)) {\n return\n }\n\n let matches = [];\n\n // Iterate over every key (i.e, path), and fetch the value at that key\n keys.forEach((key, keyIndex) => {\n matches.push(\n ...this._findMatches({\n key,\n value: item[keyIndex],\n searcher\n })\n );\n });\n\n if (matches.length) {\n results.push({\n idx,\n item,\n matches\n });\n }\n });\n\n return results\n }\n _findMatches({ key, value, searcher }) {\n if (!isDefined(value)) {\n return []\n }\n\n let matches = [];\n\n if (isArray(value)) {\n value.forEach(({ v: text, i: idx, n: norm }) => {\n if (!isDefined(text)) {\n return\n }\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n matches.push({\n score,\n key,\n value: text,\n idx,\n norm,\n indices\n });\n }\n });\n } else {\n const { v: text, n: norm } = value;\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n matches.push({ score, key, value: text, norm, indices });\n }\n }\n\n return matches\n }\n}\n\nFuse.version = '7.0.0';\nFuse.createIndex = createIndex;\nFuse.parseIndex = parseIndex;\nFuse.config = Config;\n\n{\n Fuse.parseQuery = parse;\n}\n\n{\n register(ExtendedSearch);\n}\n\nexport { Fuse as default };\n"],"sourceRoot":""}