{"version":3,"file":"tabulator.min.js","sources":["../../src/js/core/CoreFeature.js","../../src/js/core/column/ColumnComponent.js","../../src/js/core/column/defaults/options.js","../../src/js/core/cell/CellComponent.js","../../src/js/core/cell/Cell.js","../../src/js/core/column/Column.js","../../src/js/core/tools/Helpers.js","../../src/js/core/tools/OptionsList.js","../../src/js/core/rendering/Renderer.js","../../src/js/core/rendering/renderers/BasicHorizontal.js","../../src/js/core/rendering/renderers/VirtualDomHorizontal.js","../../src/js/core/ColumnManager.js","../../src/js/core/row/RowComponent.js","../../src/js/core/row/Row.js","../../src/js/core/rendering/renderers/BasicVertical.js","../../src/js/core/rendering/renderers/VirtualDomVertical.js","../../src/js/core/RowManager.js","../../src/js/core/FooterManager.js","../../src/js/core/tools/InteractionMonitor.js","../../src/js/core/tools/ComponentFunctionBinder.js","../../src/js/core/tools/DataLoader.js","../../src/js/core/tools/ExternalEventBus.js","../../src/js/core/tools/InternalEventBus.js","../../src/js/core/tools/DeprecationAdvisor.js","../../src/js/core/tools/TableRegistry.js","../../src/js/core/tools/Popup.js","../../src/js/core/Module.js","../../src/js/modules/Layout/defaults/modes/fitDataGeneral.js","../../src/js/modules/Layout/defaults/modes.js","../../src/js/modules/Layout/defaults/modes/fitData.js","../../src/js/modules/Layout/defaults/modes/fitDataStretch.js","../../src/js/modules/Layout/defaults/modes/fitColumns.js","../../src/js/modules/Layout/Layout.js","../../src/js/modules/Localize/Localize.js","../../src/js/modules/Localize/defaults/langs.js","../../src/js/modules/Comms/Comms.js","../../src/js/core/tools/ModuleBinder.js","../../src/js/core/tools/Alert.js","../../src/js/core/Tabulator.js","../../src/js/core/defaults/options.js","../../src/js/modules/Accessor/Accessor.js","../../src/js/modules/Accessor/defaults/accessors.js","../../src/js/modules/Ajax/defaults/urlGenerator.js","../../src/js/modules/Ajax/defaults/contentTypeFormatters.js","../../src/js/modules/Ajax/Ajax.js","../../src/js/modules/Ajax/defaults/config.js","../../src/js/modules/Ajax/defaults/loaderPromise.js","../../src/js/modules/Clipboard/Clipboard.js","../../src/js/modules/Clipboard/defaults/pasteActions.js","../../src/js/modules/Clipboard/defaults/pasteParsers.js","../../src/js/modules/ColumnCalcs/CalcComponent.js","../../src/js/modules/ColumnCalcs/defaults/calculations.js","../../src/js/modules/ColumnCalcs/ColumnCalcs.js","../../src/js/modules/DataTree/DataTree.js","../../src/js/modules/Download/defaults/downloaders.js","../../src/js/modules/Download/defaults/downloaders/csv.js","../../src/js/modules/Download/defaults/downloaders/json.js","../../src/js/modules/Download/defaults/downloaders/jsonLines.js","../../src/js/modules/Download/defaults/downloaders/pdf.js","../../src/js/modules/Download/defaults/downloaders/xlsx.js","../../src/js/modules/Download/defaults/downloaders/html.js","../../src/js/modules/Download/Download.js","../../src/js/modules/Edit/inputMask.js","../../src/js/modules/Edit/List.js","../../src/js/modules/Edit/defaults/editors.js","../../src/js/modules/Edit/defaults/editors/input.js","../../src/js/modules/Edit/defaults/editors/textarea.js","../../src/js/modules/Edit/defaults/editors/number.js","../../src/js/modules/Edit/defaults/editors/range.js","../../src/js/modules/Edit/defaults/editors/date.js","../../src/js/modules/Edit/defaults/editors/time.js","../../src/js/modules/Edit/defaults/editors/datetime.js","../../src/js/modules/Edit/defaults/editors/select.js","../../src/js/modules/Edit/defaults/editors/list.js","../../src/js/modules/Edit/defaults/editors/autocomplete.js","../../src/js/modules/Edit/defaults/editors/star.js","../../src/js/modules/Edit/defaults/editors/progress.js","../../src/js/modules/Edit/defaults/editors/tickCross.js","../../src/js/modules/Edit/Edit.js","../../src/js/modules/Export/ExportRow.js","../../src/js/modules/Export/ExportColumn.js","../../src/js/modules/Export/Export.js","../../src/js/modules/Filter/defaults/filters.js","../../src/js/modules/Filter/Filter.js","../../src/js/modules/Format/defaults/formatters.js","../../src/js/modules/Format/defaults/formatters/plaintext.js","../../src/js/modules/Format/defaults/formatters/html.js","../../src/js/modules/Format/defaults/formatters/textarea.js","../../src/js/modules/Format/defaults/formatters/money.js","../../src/js/modules/Format/defaults/formatters/link.js","../../src/js/modules/Format/defaults/formatters/image.js","../../src/js/modules/Format/defaults/formatters/tickCross.js","../../src/js/modules/Format/defaults/formatters/datetime.js","../../src/js/modules/Format/defaults/formatters/datetimediff.js","../../src/js/modules/Format/defaults/formatters/lookup.js","../../src/js/modules/Format/defaults/formatters/star.js","../../src/js/modules/Format/defaults/formatters/traffic.js","../../src/js/modules/Format/defaults/formatters/progress.js","../../src/js/modules/Format/defaults/formatters/color.js","../../src/js/modules/Format/defaults/formatters/buttonTick.js","../../src/js/modules/Format/defaults/formatters/buttonCross.js","../../src/js/modules/Format/defaults/formatters/rownum.js","../../src/js/modules/Format/defaults/formatters/handle.js","../../src/js/modules/Format/defaults/formatters/responsiveCollapse.js","../../src/js/modules/Format/defaults/formatters/rowSelection.js","../../src/js/modules/Format/Format.js","../../src/js/modules/FrozenColumns/FrozenColumns.js","../../src/js/modules/FrozenRows/FrozenRows.js","../../src/js/modules/GroupRows/GroupComponent.js","../../src/js/modules/GroupRows/Group.js","../../src/js/modules/GroupRows/GroupRows.js","../../src/js/modules/History/History.js","../../src/js/modules/History/defaults/undoers.js","../../src/js/modules/History/defaults/redoers.js","../../src/js/modules/HtmlTableImport/HtmlTableImport.js","../../src/js/modules/Import/defaults/importers.js","../../src/js/modules/Import/defaults/importers/csv.js","../../src/js/modules/Import/defaults/importers/json.js","../../src/js/modules/Import/defaults/importers/array.js","../../src/js/modules/Import/Import.js","../../src/js/modules/Interaction/Interaction.js","../../src/js/modules/Keybindings/Keybindings.js","../../src/js/modules/Keybindings/defaults/bindings.js","../../src/js/modules/Keybindings/defaults/actions.js","../../src/js/modules/Menu/Menu.js","../../src/js/modules/MoveColumns/MoveColumns.js","../../src/js/modules/MoveRows/MoveRows.js","../../src/js/modules/Mutator/Mutator.js","../../src/js/modules/Mutator/defaults/mutators.js","../../src/js/modules/Page/defaults/pageCounters.js","../../src/js/modules/Page/defaults/pageCounters/rows.js","../../src/js/modules/Page/defaults/pageCounters/pages.js","../../src/js/modules/Page/Page.js","../../src/js/modules/Persistence/defaults/readers.js","../../src/js/modules/Persistence/defaults/writers.js","../../src/js/modules/Persistence/Persistence.js","../../src/js/modules/Popup/Popup.js","../../src/js/modules/Print/Print.js","../../src/js/modules/ReactiveData/ReactiveData.js","../../src/js/modules/ResizeColumns/ResizeColumns.js","../../src/js/modules/ResizeRows/ResizeRows.js","../../src/js/modules/ResizeTable/ResizeTable.js","../../src/js/modules/ResponsiveLayout/ResponsiveLayout.js","../../src/js/modules/SelectRow/SelectRow.js","../../src/js/modules/Sort/defaults/sorters/datetime.js","../../src/js/modules/Sort/defaults/sorters.js","../../src/js/modules/Sort/defaults/sorters/number.js","../../src/js/modules/Sort/defaults/sorters/string.js","../../src/js/modules/Sort/defaults/sorters/date.js","../../src/js/modules/Sort/defaults/sorters/time.js","../../src/js/modules/Sort/defaults/sorters/boolean.js","../../src/js/modules/Sort/defaults/sorters/array.js","../../src/js/modules/Sort/defaults/sorters/exists.js","../../src/js/modules/Sort/defaults/sorters/alphanum.js","../../src/js/modules/Sort/Sort.js","../../src/js/modules/SelectRange/RangeComponent.js","../../src/js/modules/SelectRange/Range.js","../../src/js/modules/SelectRange/SelectRange.js","../../src/js/modules/Tooltip/Tooltip.js","../../src/js/modules/Validate/defaults/validators.js","../../src/js/modules/Validate/Validate.js","../../src/js/core/TabulatorFull.js"],"sourcesContent":["export default class CoreFeature{\n\n\tconstructor(table){\n\t\tthis.table = table;\n\t}\n\n\t//////////////////////////////////////////\n\t/////////////// DataLoad /////////////////\n\t//////////////////////////////////////////\n\n\treloadData(data, silent, columnsChanged){\n\t\treturn this.table.dataLoader.load(data, undefined, undefined, undefined, silent, columnsChanged);\n\t}\n\n\t//////////////////////////////////////////\n\t///////////// Localization ///////////////\n\t//////////////////////////////////////////\n\n\tlangText(){\n\t\treturn this.table.modules.localize.getText(...arguments);\n\t}\n\n\tlangBind(){\n\t\treturn this.table.modules.localize.bind(...arguments);\n\t}\n\n\tlangLocale(){\n\t\treturn this.table.modules.localize.getLocale(...arguments);\n\t}\n\n\n\t//////////////////////////////////////////\n\t////////// Inter Table Comms /////////////\n\t//////////////////////////////////////////\n\n\tcommsConnections(){\n\t\treturn this.table.modules.comms.getConnections(...arguments);\n\t}\n\n\tcommsSend(){\n\t\treturn this.table.modules.comms.send(...arguments);\n\t}\n\n\t//////////////////////////////////////////\n\t//////////////// Layout /////////////////\n\t//////////////////////////////////////////\n\n\tlayoutMode(){\n\t\treturn this.table.modules.layout.getMode();\n\t}\n\n\tlayoutRefresh(force){\n\t\treturn this.table.modules.layout.layout(force);\n\t}\n\n\n\t//////////////////////////////////////////\n\t/////////////// Event Bus ////////////////\n\t//////////////////////////////////////////\n\n\tsubscribe(){\n\t\treturn this.table.eventBus.subscribe(...arguments);\n\t}\n\n\tunsubscribe(){\n\t\treturn this.table.eventBus.unsubscribe(...arguments);\n\t}\n\n\tsubscribed(key){\n\t\treturn this.table.eventBus.subscribed(key);\n\t}\n\n\tsubscriptionChange(){\n\t\treturn this.table.eventBus.subscriptionChange(...arguments);\n\t}\n\n\tdispatch(){\n\t\treturn this.table.eventBus.dispatch(...arguments);\n\t}\n\n\tchain(){\n\t\treturn this.table.eventBus.chain(...arguments);\n\t}\n\n\tconfirm(){\n\t\treturn this.table.eventBus.confirm(...arguments);\n\t}\n\n\tdispatchExternal(){\n\t\treturn this.table.externalEvents.dispatch(...arguments);\n\t}\n\n\tsubscribedExternal(key){\n\t\treturn this.table.externalEvents.subscribed(key);\n\t}\n\n\tsubscriptionChangeExternal(){\n\t\treturn this.table.externalEvents.subscriptionChange(...arguments);\n\t}\n\n\t//////////////////////////////////////////\n\t//////////////// Options /////////////////\n\t//////////////////////////////////////////\n\n\toptions(key){\n\t\treturn this.table.options[key];\n\t}\n\n\tsetOption(key, value){\n\t\tif(typeof value !== \"undefined\"){\n\t\t\tthis.table.options[key] = value;\n\t\t}\n\n\t\treturn this.table.options[key];\n\t}\n\n\t//////////////////////////////////////////\n\t/////////// Deprecation Checks ///////////\n\t//////////////////////////////////////////\n\n\tdeprecationCheck(oldOption, newOption, convert){\n\t\treturn this.table.deprecationAdvisor.check(oldOption, newOption, convert);\n\t}\n\n\tdeprecationCheckMsg(oldOption, msg){\n\t\treturn this.table.deprecationAdvisor.checkMsg(oldOption, msg);\n\t}\n\n\tdeprecationMsg(msg){\n\t\treturn this.table.deprecationAdvisor.msg(msg);\n\t}\n\t//////////////////////////////////////////\n\t//////////////// Modules /////////////////\n\t//////////////////////////////////////////\n\n\tmodule(key){\n\t\treturn this.table.module(key);\n\t}\n}","import Column from './Column.js';\n\n//public column object\nexport default class ColumnComponent {\n\tconstructor (column){\n\t\tthis._column = column;\n\t\tthis.type = \"ColumnComponent\";\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._column.table.componentFunctionBinder.handle(\"column\", target._column, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetElement(){\n\t\treturn this._column.getElement();\n\t}\n\n\tgetDefinition(){\n\t\treturn this._column.getDefinition();\n\t}\n\n\tgetField(){\n\t\treturn this._column.getField();\n\t}\n\n\tgetTitleDownload() {\n\t\treturn this._column.getTitleDownload();\n\t}\n\n\tgetCells(){\n\t\tvar cells = [];\n\n\t\tthis._column.cells.forEach(function(cell){\n\t\t\tcells.push(cell.getComponent());\n\t\t});\n\n\t\treturn cells;\n\t}\n\n\tisVisible(){\n\t\treturn this._column.visible;\n\t}\n\n\tshow(){\n\t\tif(this._column.isGroup){\n\t\t\tthis._column.columns.forEach(function(column){\n\t\t\t\tcolumn.show();\n\t\t\t});\n\t\t}else{\n\t\t\tthis._column.show();\n\t\t}\n\t}\n\n\thide(){\n\t\tif(this._column.isGroup){\n\t\t\tthis._column.columns.forEach(function(column){\n\t\t\t\tcolumn.hide();\n\t\t\t});\n\t\t}else{\n\t\t\tthis._column.hide();\n\t\t}\n\t}\n\n\ttoggle(){\n\t\tif(this._column.visible){\n\t\t\tthis.hide();\n\t\t}else{\n\t\t\tthis.show();\n\t\t}\n\t}\n\n\tdelete(){\n\t\treturn this._column.delete();\n\t}\n\n\tgetSubColumns(){\n\t\tvar output = [];\n\n\t\tif(this._column.columns.length){\n\t\t\tthis._column.columns.forEach(function(column){\n\t\t\t\toutput.push(column.getComponent());\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tgetParentColumn(){\n\t\treturn this._column.parent instanceof Column ? this._column.parent.getComponent() : false;\n\t}\n\n\t_getSelf(){\n\t\treturn this._column;\n\t}\n\n\tscrollTo(position, ifVisible){\n\t\treturn this._column.table.columnManager.scrollToColumn(this._column, position, ifVisible);\n\t}\n\n\tgetTable(){\n\t\treturn this._column.table;\n\t}\n\n\tmove(to, after){\n\t\tvar toColumn = this._column.table.columnManager.findColumn(to);\n\n\t\tif(toColumn){\n\t\t\tthis._column.table.columnManager.moveColumn(this._column, toColumn, after);\n\t\t}else{\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\n\t\t}\n\t}\n\n\tgetNextColumn(){\n\t\tvar nextCol = this._column.nextColumn();\n\n\t\treturn nextCol ? nextCol.getComponent() : false;\n\t}\n\n\tgetPrevColumn(){\n\t\tvar prevCol = this._column.prevColumn();\n\n\t\treturn prevCol ? prevCol.getComponent() : false;\n\t}\n\n\tupdateDefinition(updates){\n\t\treturn this._column.updateDefinition(updates);\n\t}\n\n\tgetWidth(){\n\t\treturn this._column.getWidth();\n\t}\n\n\tsetWidth(width){\n\t\tvar result;\n\n\t\tif(width === true){\n\t\t\tresult = this._column.reinitializeWidth(true);\n\t\t}else{\n\t\t\tresult = this._column.setWidth(width);\n\t\t}\n\n\t\tthis._column.table.columnManager.rerenderColumns(true);\n\n\t\treturn result;\n\t}\n}","export default {\n\t\"title\": undefined,\n\t\"field\": undefined,\n\t\"columns\": undefined,\n\t\"visible\": undefined,\n\t\"hozAlign\": undefined,\n\t\"vertAlign\": undefined,\n\t\"width\": undefined,\n\t\"minWidth\": 40,\n\t\"maxWidth\": undefined,\n\t\"maxInitialWidth\": undefined,\n\t\"cssClass\": undefined,\n\t\"variableHeight\": undefined,\n\t\"headerVertical\": undefined,\n\t\"headerHozAlign\": undefined,\n\t\"headerWordWrap\": false,\n\t\"editableTitle\": undefined,\n};","//public cell object\nexport default class CellComponent {\n\n\tconstructor (cell){\n\t\tthis._cell = cell;\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._cell.table.componentFunctionBinder.handle(\"cell\", target._cell, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetValue(){\n\t\treturn this._cell.getValue();\n\t}\n\n\tgetOldValue(){\n\t\treturn this._cell.getOldValue();\n\t}\n\n\tgetInitialValue(){\n\t\treturn this._cell.initialValue;\n\t}\n\n\tgetElement(){\n\t\treturn this._cell.getElement();\n\t}\n\n\tgetRow(){\n\t\treturn this._cell.row.getComponent();\n\t}\n\n\tgetData(transform){\n\t\treturn this._cell.row.getData(transform);\n\t}\n\tgetType(){\n\t\treturn \"cell\";\n\t}\n\tgetField(){\n\t\treturn this._cell.column.getField();\n\t}\n\n\tgetColumn(){\n\t\treturn this._cell.column.getComponent();\n\t}\n\n\tsetValue(value, mutate){\n\t\tif(typeof mutate == \"undefined\"){\n\t\t\tmutate = true;\n\t\t}\n\n\t\tthis._cell.setValue(value, mutate);\n\t}\n\n\trestoreOldValue(){\n\t\tthis._cell.setValueActual(this._cell.getOldValue());\n\t}\n\n\trestoreInitialValue(){\n\t\tthis._cell.setValueActual(this._cell.initialValue);\n\t}\n\n\tcheckHeight(){\n\t\tthis._cell.checkHeight();\n\t}\n\n\tgetTable(){\n\t\treturn this._cell.table;\n\t}\n\n\t_getSelf(){\n\t\treturn this._cell;\n\t}\n}","import CoreFeature from '../CoreFeature.js';\nimport CellComponent from './CellComponent.js';\n\nexport default class Cell extends CoreFeature{\n\tconstructor(column, row){\n\t\tsuper(column.table);\n\n\t\tthis.table = column.table;\n\t\tthis.column = column;\n\t\tthis.row = row;\n\t\tthis.element = null;\n\t\tthis.value = null;\n\t\tthis.initialValue;\n\t\tthis.oldValue = null;\n\t\tthis.modules = {};\n\n\t\tthis.height = null;\n\t\tthis.width = null;\n\t\tthis.minWidth = null;\n\n\t\tthis.component = null;\n\n\t\tthis.loaded = false; //track if the cell has been added to the DOM yet\n\n\t\tthis.build();\n\t}\n\n\t//////////////// Setup Functions /////////////////\n\t//generate element\n\tbuild(){\n\t\tthis.generateElement();\n\n\t\tthis.setWidth();\n\n\t\tthis._configureCell();\n\n\t\tthis.setValueActual(this.column.getFieldValue(this.row.data));\n\n\t\tthis.initialValue = this.value;\n\t}\n\n\tgenerateElement(){\n\t\tthis.element = document.createElement('div');\n\t\tthis.element.className = \"tabulator-cell\";\n\t\tthis.element.setAttribute(\"role\", \"gridcell\");\n\t}\n\n\t_configureCell(){\n\t\tvar element = this.element,\n\t\tfield = this.column.getField(),\n\t\tvertAligns = {\n\t\t\ttop:\"flex-start\",\n\t\t\tbottom:\"flex-end\",\n\t\t\tmiddle:\"center\",\n\t\t},\n\t\thozAligns = {\n\t\t\tleft:\"flex-start\",\n\t\t\tright:\"flex-end\",\n\t\t\tcenter:\"center\",\n\t\t};\n\n\t\t//set text alignment\n\t\telement.style.textAlign = this.column.hozAlign;\n\n\t\tif(this.column.vertAlign){\n\t\t\telement.style.display = \"inline-flex\";\n\n\t\t\telement.style.alignItems = vertAligns[this.column.vertAlign] || \"\";\n\n\t\t\tif(this.column.hozAlign){\n\t\t\t\telement.style.justifyContent = hozAligns[this.column.hozAlign] || \"\";\n\t\t\t}\n\t\t}\n\n\t\tif(field){\n\t\t\telement.setAttribute(\"tabulator-field\", field);\n\t\t}\n\n\t\t//add class to cell if needed\n\t\tif(this.column.definition.cssClass){\n\t\t\tvar classNames = this.column.definition.cssClass.split(\" \");\n\t\t\tclassNames.forEach((className) => {\n\t\t\t\telement.classList.add(className);\n\t\t\t});\n\t\t}\n\n\t\tthis.dispatch(\"cell-init\", this);\n\n\t\t//hide cell if not visible\n\t\tif(!this.column.visible){\n\t\t\tthis.hide();\n\t\t}\n\t}\n\n\t//generate cell contents\n\t_generateContents(){\n\t\tvar val;\n\n\t\tval = this.chain(\"cell-format\", this, null, () => {\n\t\t\treturn this.element.innerHTML = this.value;\n\t\t});\n\n\t\tswitch(typeof val){\n\t\t\tcase \"object\":\n\t\t\t\tif(val instanceof Node){\n\n\t\t\t\t\t//clear previous cell contents\n\t\t\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\n\t\t\t\t\tthis.element.appendChild(val);\n\t\t\t\t}else{\n\t\t\t\t\tthis.element.innerHTML = \"\";\n\n\t\t\t\t\tif(val != null){\n\t\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\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"undefined\":\n\t\t\t\tthis.element.innerHTML = \"\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.element.innerHTML = val;\n\t\t}\n\t}\n\n\tcellRendered(){\n\t\tthis.dispatch(\"cell-rendered\", this);\n\t}\n\n\t//////////////////// Getters ////////////////////\n\tgetElement(containerOnly){\n\t\tif(!this.loaded){\n\t\t\tthis.loaded = true;\n\t\t\tif(!containerOnly){\n\t\t\t\tthis.layoutElement();\n\t\t\t}\n\t\t}\n\n\t\treturn this.element;\n\t}\n\n\tgetValue(){\n\t\treturn this.value;\n\t}\n\n\tgetOldValue(){\n\t\treturn this.oldValue;\n\t}\n\n\t//////////////////// Actions ////////////////////\n\tsetValue(value, mutate, force){\n\t\tvar changed = this.setValueProcessData(value, mutate, force);\n\n\t\tif(changed){\n\t\t\tthis.dispatch(\"cell-value-updated\", this);\n\n\t\t\tthis.cellRendered();\n\n\t\t\tif(this.column.definition.cellEdited){\n\t\t\t\tthis.column.definition.cellEdited.call(this.table, this.getComponent());\n\t\t\t}\n\n\t\t\tthis.dispatchExternal(\"cellEdited\", this.getComponent());\n\n\t\t\tif(this.subscribedExternal(\"dataChanged\")){\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\n\t\t\t}\n\t\t}\n\t}\n\n\tsetValueProcessData(value, mutate, force){\n\t\tvar changed = false;\n\n\t\tif(this.value !== value || force){\n\n\t\t\tchanged = true;\n\n\t\t\tif(mutate){\n\t\t\t\tvalue = this.chain(\"cell-value-changing\", [this, value], null, value);\n\t\t\t}\n\t\t}\n\n\t\tthis.setValueActual(value);\n\n\t\tif(changed){\n\t\t\tthis.dispatch(\"cell-value-changed\", this);\n\t\t}\n\n\t\treturn changed;\n\t}\n\n\tsetValueActual(value){\n\t\tthis.oldValue = this.value;\n\n\t\tthis.value = value;\n\n\t\tthis.dispatch(\"cell-value-save-before\", this);\n\n\t\tthis.column.setFieldValue(this.row.data, value);\n\n\t\tthis.dispatch(\"cell-value-save-after\", this);\n\n\t\tif(this.loaded){\n\t\t\tthis.layoutElement();\n\t\t}\n\t}\n\n\tlayoutElement(){\n\t\tthis._generateContents();\n\n\t\tthis.dispatch(\"cell-layout\", this);\n\t}\n\n\tsetWidth(){\n\t\tthis.width = this.column.width;\n\t\tthis.element.style.width = this.column.widthStyled;\n\t}\n\n\tclearWidth(){\n\t\tthis.width = \"\";\n\t\tthis.element.style.width = \"\";\n\t}\n\n\tgetWidth(){\n\t\treturn this.width || this.element.offsetWidth;\n\t}\n\n\tsetMinWidth(){\n\t\tthis.minWidth = this.column.minWidth;\n\t\tthis.element.style.minWidth = this.column.minWidthStyled;\n\t}\n\n\tsetMaxWidth(){\n\t\tthis.maxWidth = this.column.maxWidth;\n\t\tthis.element.style.maxWidth = this.column.maxWidthStyled;\n\t}\n\n\tcheckHeight(){\n\t\t// var height = this.element.css(\"height\");\n\t\tthis.row.reinitializeHeight();\n\t}\n\n\tclearHeight(){\n\t\tthis.element.style.height = \"\";\n\t\tthis.height = null;\n\n\t\tthis.dispatch(\"cell-height\", this, \"\");\n\t}\n\n\tsetHeight(){\n\t\tthis.height = this.row.height;\n\t\tthis.element.style.height = this.row.heightStyled;\n\n\t\tthis.dispatch(\"cell-height\", this, this.row.heightStyled);\n\t}\n\n\tgetHeight(){\n\t\treturn this.height || this.element.offsetHeight;\n\t}\n\n\tshow(){\n\t\tthis.element.style.display = this.column.vertAlign ? \"inline-flex\" : \"\";\n\t}\n\n\thide(){\n\t\tthis.element.style.display = \"none\";\n\t}\n\n\tdelete(){\n\t\tthis.dispatch(\"cell-delete\", this);\n\n\t\tif(!this.table.rowManager.redrawBlock && this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\n\t\tthis.element = false;\n\t\tthis.column.deleteCell(this);\n\t\tthis.row.deleteCell(this);\n\t\tthis.calcs = {};\n\t}\n\n\tgetIndex(){\n\t\treturn this.row.getCellIndex(this);\n\t}\n\n\t//////////////// Object Generation /////////////////\n\tgetComponent(){\n\t\tif(!this.component){\n\t\t\tthis.component = new CellComponent(this);\n\t\t}\n\n\t\treturn this.component;\n\t}\n}\n","import CoreFeature from '../CoreFeature.js';\nimport ColumnComponent from './ColumnComponent.js';\nimport defaultOptions from './defaults/options.js';\n\nimport Cell from '../cell/Cell.js';\n\nclass Column extends CoreFeature{\n\n\tconstructor(def, parent){\n\t\tsuper(parent.table);\n\n\t\tthis.definition = def; //column definition\n\t\tthis.parent = parent; //hold parent object\n\t\tthis.type = \"column\"; //type of element\n\t\tthis.columns = []; //child columns\n\t\tthis.cells = []; //cells bound to this column\n\t\tthis.element = this.createElement(); //column header element\n\t\tthis.contentElement = false;\n\t\tthis.titleHolderElement = false;\n\t\tthis.titleElement = false;\n\t\tthis.groupElement = this.createGroupElement(); //column group holder element\n\t\tthis.isGroup = false;\n\t\tthis.hozAlign = \"\"; //horizontal text alignment\n\t\tthis.vertAlign = \"\"; //vert text alignment\n\n\t\t//multi dimensional filed handling\n\t\tthis.field =\"\";\n\t\tthis.fieldStructure = \"\";\n\t\tthis.getFieldValue = \"\";\n\t\tthis.setFieldValue = \"\";\n\n\t\tthis.titleDownload = null;\n\t\tthis.titleFormatterRendered = false;\n\n\t\tthis.mapDefinitions();\n\n\t\tthis.setField(this.definition.field);\n\n\t\tthis.modules = {}; //hold module variables;\n\n\t\tthis.width = null; //column width\n\t\tthis.widthStyled = \"\"; //column width pre-styled to improve render efficiency\n\t\tthis.maxWidth = null; //column maximum width\n\t\tthis.maxWidthStyled = \"\"; //column maximum pre-styled to improve render efficiency\n\t\tthis.maxInitialWidth = null;\n\t\tthis.minWidth = null; //column minimum width\n\t\tthis.minWidthStyled = \"\"; //column minimum pre-styled to improve render efficiency\n\t\tthis.widthFixed = false; //user has specified a width for this column\n\n\t\tthis.visible = true; //default visible state\n\n\t\tthis.component = null;\n\n\t\t//initialize column\n\t\tif(this.definition.columns){\n\n\t\t\tthis.isGroup = true;\n\n\t\t\tthis.definition.columns.forEach((def, i) => {\n\t\t\t\tvar newCol = new Column(def, this);\n\t\t\t\tthis.attachColumn(newCol);\n\t\t\t});\n\n\t\t\tthis.checkColumnVisibility();\n\t\t}else{\n\t\t\tparent.registerColumnField(this);\n\t\t}\n\n\t\tthis._initialize();\n\t}\n\n\tcreateElement (){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-col\");\n\t\tel.setAttribute(\"role\", \"columnheader\");\n\t\tel.setAttribute(\"aria-sort\", \"none\");\n\n\t\tswitch(this.table.options.columnHeaderVertAlign){\n\t\t\tcase \"middle\":\n\t\t\t\tel.style.justifyContent = \"center\";\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\":\n\t\t\t\tel.style.justifyContent = \"flex-end\";\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn el;\n\t}\n\n\tcreateGroupElement (){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-col-group-cols\");\n\n\t\treturn el;\n\t}\n\n\tmapDefinitions(){\n\t\tvar defaults = this.table.options.columnDefaults;\n\n\t\t//map columnDefaults onto column definitions\n\t\tif(defaults){\n\t\t\tfor(let key in defaults){\n\t\t\t\tif(typeof this.definition[key] === \"undefined\"){\n\t\t\t\t\tthis.definition[key] = defaults[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.definition = this.table.columnManager.optionsList.generate(Column.defaultOptionList, this.definition);\n\t}\n\n\tcheckDefinition(){\n\t\tObject.keys(this.definition).forEach((key) => {\n\t\t\tif(Column.defaultOptionList.indexOf(key) === -1){\n\t\t\t\tconsole.warn(\"Invalid column definition option in '\" + (this.field || this.definition.title) + \"' column:\", key);\n\t\t\t}\n\t\t});\n\t}\n\n\tsetField(field){\n\t\tthis.field = field;\n\t\tthis.fieldStructure = field ? (this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field]) : [];\n\t\tthis.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;\n\t\tthis.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;\n\t}\n\n\t//register column position with column manager\n\tregisterColumnPosition(column){\n\t\tthis.parent.registerColumnPosition(column);\n\t}\n\n\t//register column position with column manager\n\tregisterColumnField(column){\n\t\tthis.parent.registerColumnField(column);\n\t}\n\n\t//trigger position registration\n\treRegisterPosition(){\n\t\tif(this.isGroup){\n\t\t\tthis.columns.forEach(function(column){\n\t\t\t\tcolumn.reRegisterPosition();\n\t\t\t});\n\t\t}else{\n\t\t\tthis.registerColumnPosition(this);\n\t\t}\n\t}\n\n\t//build header element\n\t_initialize(){\n\t\tvar def = this.definition;\n\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\n\t\tif(def.headerVertical){\n\t\t\tthis.element.classList.add(\"tabulator-col-vertical\");\n\n\t\t\tif(def.headerVertical === \"flip\"){\n\t\t\t\tthis.element.classList.add(\"tabulator-col-vertical-flip\");\n\t\t\t}\n\t\t}\n\n\t\tthis.contentElement = this._buildColumnHeaderContent();\n\n\t\tthis.element.appendChild(this.contentElement);\n\n\t\tif(this.isGroup){\n\t\t\tthis._buildGroupHeader();\n\t\t}else{\n\t\t\tthis._buildColumnHeader();\n\t\t}\n\n\t\tthis.dispatch(\"column-init\", this);\n\t}\n\n\t//build header element for header\n\t_buildColumnHeader(){\n\t\tvar def = this.definition;\n\n\t\tthis.dispatch(\"column-layout\", this);\n\n\t\t//set column visibility\n\t\tif(typeof def.visible != \"undefined\"){\n\t\t\tif(def.visible){\n\t\t\t\tthis.show(true);\n\t\t\t}else{\n\t\t\t\tthis.hide(true);\n\t\t\t}\n\t\t}\n\n\t\t//assign additional css classes to column header\n\t\tif(def.cssClass){\n\t\t\tvar classNames = def.cssClass.split(\" \");\n\t\t\tclassNames.forEach((className) => {\n\t\t\t\tthis.element.classList.add(className);\n\t\t\t});\n\t\t}\n\n\t\tif(def.field){\n\t\t\tthis.element.setAttribute(\"tabulator-field\", def.field);\n\t\t}\n\n\t\t//set min width if present\n\t\tthis.setMinWidth(parseInt(def.minWidth));\n\n\t\tif (def.maxInitialWidth) {\n\t\t\tthis.maxInitialWidth = parseInt(def.maxInitialWidth);\n\t\t}\n\t\t\n\t\tif(def.maxWidth){\n\t\t\tthis.setMaxWidth(parseInt(def.maxWidth));\n\t\t}\n\n\t\tthis.reinitializeWidth();\n\n\t\t//set horizontal text alignment\n\t\tthis.hozAlign = this.definition.hozAlign;\n\t\tthis.vertAlign = this.definition.vertAlign;\n\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\n\t}\n\n\t_buildColumnHeaderContent(){\n\t\tvar contentElement = document.createElement(\"div\");\n\t\tcontentElement.classList.add(\"tabulator-col-content\");\n\n\t\tthis.titleHolderElement = document.createElement(\"div\");\n\t\tthis.titleHolderElement.classList.add(\"tabulator-col-title-holder\");\n\n\t\tcontentElement.appendChild(this.titleHolderElement);\n\n\t\tthis.titleElement = this._buildColumnHeaderTitle();\n\n\t\tthis.titleHolderElement.appendChild(this.titleElement);\n\n\t\treturn contentElement;\n\t}\n\n\t//build title element of column\n\t_buildColumnHeaderTitle(){\n\t\tvar def = this.definition;\n\n\t\tvar titleHolderElement = document.createElement(\"div\");\n\t\ttitleHolderElement.classList.add(\"tabulator-col-title\");\n\t\t\n\t\tif(def.headerWordWrap){\n\t\t\ttitleHolderElement.classList.add(\"tabulator-col-title-wrap\");\n\t\t}\n\n\t\tif(def.editableTitle){\n\t\t\tvar titleElement = document.createElement(\"input\");\n\t\t\ttitleElement.classList.add(\"tabulator-title-editor\");\n\n\t\t\ttitleElement.addEventListener(\"click\", (e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t\ttitleElement.focus();\n\t\t\t});\n\n\t\t\ttitleElement.addEventListener(\"mousedown\", (e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\n\t\t\ttitleElement.addEventListener(\"change\", () => {\n\t\t\t\tdef.title = titleElement.value;\n\t\t\t\tthis.dispatchExternal(\"columnTitleChanged\", this.getComponent());\n\t\t\t});\n\n\t\t\ttitleHolderElement.appendChild(titleElement);\n\n\t\t\tif(def.field){\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\n\t\t\t\t\ttitleElement.value = text || (def.title || \" \");\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\ttitleElement.value = def.title || \" \";\n\t\t\t}\n\n\t\t}else{\n\t\t\tif(def.field){\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\n\t\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, text || (def.title || \" \"));\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, def.title || \" \");\n\t\t\t}\n\t\t}\n\n\t\treturn titleHolderElement;\n\t}\n\n\t_formatColumnHeaderTitle(el, title){\n\t\tvar contents = this.chain(\"column-format\", [this, title, el], null, () => {\n\t\t\treturn title;\n\t\t});\n\n\t\tswitch(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\t\tel.innerHTML = \"\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tel.innerHTML = contents;\n\t\t}\n\t}\n\n\t//build header element for column group\n\t_buildGroupHeader(){\n\t\tthis.element.classList.add(\"tabulator-col-group\");\n\t\tthis.element.setAttribute(\"role\", \"columngroup\");\n\t\tthis.element.setAttribute(\"aria-title\", this.definition.title);\n\n\t\t//asign additional css classes to column header\n\t\tif(this.definition.cssClass){\n\t\t\tvar classNames = this.definition.cssClass.split(\" \");\n\t\t\tclassNames.forEach((className) => {\n\t\t\t\tthis.element.classList.add(className);\n\t\t\t});\n\t\t}\n\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\n\n\t\tthis.element.appendChild(this.groupElement);\n\t}\n\n\t//flat field lookup\n\t_getFlatData(data){\n\t\treturn data[this.field];\n\t}\n\n\t//nested field lookup\n\t_getNestedData(data){\n\t\tvar dataObj = data,\n\t\tstructure = this.fieldStructure,\n\t\tlength = structure.length,\n\t\toutput;\n\n\t\tfor(let i = 0; i < length; i++){\n\n\t\t\tdataObj = dataObj[structure[i]];\n\n\t\t\toutput = dataObj;\n\n\t\t\tif(!dataObj){\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn output;\n\t}\n\n\t//flat field set\n\t_setFlatData(data, value){\n\t\tif(this.field){\n\t\t\tdata[this.field] = value;\n\t\t}\n\t}\n\n\t//nested field set\n\t_setNestedData(data, value){\n\t\tvar dataObj = data,\n\t\tstructure = this.fieldStructure,\n\t\tlength = structure.length;\n\n\t\tfor(let i = 0; i < length; i++){\n\n\t\t\tif(i == length -1){\n\t\t\t\tdataObj[structure[i]] = value;\n\t\t\t}else{\n\t\t\t\tif(!dataObj[structure[i]]){\n\t\t\t\t\tif(typeof value !== \"undefined\"){\n\t\t\t\t\t\tdataObj[structure[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\n\t\t\t\tdataObj = dataObj[structure[i]];\n\t\t\t}\n\t\t}\n\t}\n\n\t//attach column to this group\n\tattachColumn(column){\n\t\tif(this.groupElement){\n\t\t\tthis.columns.push(column);\n\t\t\tthis.groupElement.appendChild(column.getElement());\n\n\t\t\tcolumn.columnRendered();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Warning - Column being attached to another column instead of column group\");\n\t\t}\n\t}\n\n\t//vertically align header in column\n\tverticalAlign(alignment, height){\n\n\t\t//calculate height of column header and group holder element\n\t\tvar parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : (height || this.parent.getHeadersElement().clientHeight);\n\t\t// var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;\n\n\t\tthis.element.style.height = parentHeight + \"px\";\n\n\t\tthis.dispatch(\"column-height\", this, this.element.style.height);\n\n\t\tif(this.isGroup){\n\t\t\tthis.groupElement.style.minHeight = (parentHeight - this.contentElement.offsetHeight) + \"px\";\n\t\t}\n\n\t\t//vertically align cell contents\n\t\t// if(!this.isGroup && alignment !== \"top\"){\n\t\t// \tif(alignment === \"bottom\"){\n\t\t// \t\tthis.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) + \"px\";\n\t\t// \t}else{\n\t\t// \t\tthis.element.style.paddingTop = ((this.element.clientHeight - this.contentElement.offsetHeight) / 2) + \"px\";\n\t\t// \t}\n\t\t// }\n\n\t\tthis.columns.forEach(function(column){\n\t\t\tcolumn.verticalAlign(alignment);\n\t\t});\n\t}\n\n\t//clear vertical alignment\n\tclearVerticalAlign(){\n\t\tthis.element.style.paddingTop = \"\";\n\t\tthis.element.style.height = \"\";\n\t\tthis.element.style.minHeight = \"\";\n\t\tthis.groupElement.style.minHeight = \"\";\n\n\t\tthis.columns.forEach(function(column){\n\t\t\tcolumn.clearVerticalAlign();\n\t\t});\n\n\t\tthis.dispatch(\"column-height\", this, \"\");\n\t}\n\n\t//// Retrieve Column Information ////\n\t//return column header element\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\n\t//return column group element\n\tgetGroupElement(){\n\t\treturn this.groupElement;\n\t}\n\n\t//return field name\n\tgetField(){\n\t\treturn this.field;\n\t}\n\n\tgetTitleDownload() {\n\t\treturn this.titleDownload;\n\t}\n\n\t//return the first column in a group\n\tgetFirstColumn(){\n\t\tif(!this.isGroup){\n\t\t\treturn this;\n\t\t}else{\n\t\t\tif(this.columns.length){\n\t\t\t\treturn this.columns[0].getFirstColumn();\n\t\t\t}else{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\t//return the last column in a group\n\tgetLastColumn(){\n\t\tif(!this.isGroup){\n\t\t\treturn this;\n\t\t}else{\n\t\t\tif(this.columns.length){\n\t\t\t\treturn this.columns[this.columns.length -1].getLastColumn();\n\t\t\t}else{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\t//return all columns in a group\n\tgetColumns(traverse){\n\t\tvar columns = [];\n\n\t\tif(traverse){\n\t\t\tthis.columns.forEach((column) => {\n\t\t\t\tcolumns.push(column);\n\t\t\t\t\t\n\t\t\t\tcolumns = columns.concat(column.getColumns(true));\n\t\t\t});\n\t\t}else{\n\t\t\tcolumns = this.columns;\n\t\t}\n\t\t\n\t\treturn columns;\n\t}\n\n\t//return all columns in a group\n\tgetCells(){\n\t\treturn this.cells;\n\t}\n\n\t//retrieve the top column in a group of columns\n\tgetTopColumn(){\n\t\tif(this.parent.isGroup){\n\t\t\treturn this.parent.getTopColumn();\n\t\t}else{\n\t\t\treturn this;\n\t\t}\n\t}\n\n\t//return column definition object\n\tgetDefinition(updateBranches){\n\t\tvar colDefs = [];\n\n\t\tif(this.isGroup && updateBranches){\n\t\t\tthis.columns.forEach(function(column){\n\t\t\t\tcolDefs.push(column.getDefinition(true));\n\t\t\t});\n\n\t\t\tthis.definition.columns = colDefs;\n\t\t}\n\n\t\treturn this.definition;\n\t}\n\n\t//////////////////// Actions ////////////////////\n\tcheckColumnVisibility(){\n\t\tvar visible = false;\n\n\t\tthis.columns.forEach(function(column){\n\t\t\tif(column.visible){\n\t\t\t\tvisible = true;\n\t\t\t}\n\t\t});\n\n\t\tif(visible){\n\t\t\tthis.show();\n\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\n\t\t}else{\n\t\t\tthis.hide();\n\t\t}\n\t}\n\n\t//show column\n\tshow(silent, responsiveToggle){\n\t\tif(!this.visible){\n\t\t\tthis.visible = true;\n\n\t\t\tthis.element.style.display = \"\";\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.checkColumnVisibility();\n\t\t\t}\n\n\t\t\tthis.cells.forEach(function(cell){\n\t\t\t\tcell.show();\n\t\t\t});\n\n\t\t\tif(!this.isGroup && this.width === null){\n\t\t\t\tthis.reinitializeWidth();\n\t\t\t}\n\n\t\t\tthis.table.columnManager.verticalAlignHeaders();\n\n\t\t\tthis.dispatch(\"column-show\", this, responsiveToggle);\n\n\t\t\tif(!silent){\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), true);\n\t\t\t}\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.matchChildWidths();\n\t\t\t}\n\n\t\t\tif(!this.silent){\n\t\t\t\tthis.table.columnManager.rerenderColumns();\n\t\t\t}\n\t\t}\n\t}\n\n\t//hide column\n\thide(silent, responsiveToggle){\n\t\tif(this.visible){\n\t\t\tthis.visible = false;\n\n\t\t\tthis.element.style.display = \"none\";\n\n\t\t\tthis.table.columnManager.verticalAlignHeaders();\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.checkColumnVisibility();\n\t\t\t}\n\n\t\t\tthis.cells.forEach(function(cell){\n\t\t\t\tcell.hide();\n\t\t\t});\n\n\t\t\tthis.dispatch(\"column-hide\", this, responsiveToggle);\n\n\t\t\tif(!silent){\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\n\t\t\t}\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.matchChildWidths();\n\t\t\t}\n\n\t\t\tif(!this.silent){\n\t\t\t\tthis.table.columnManager.rerenderColumns();\n\t\t\t}\n\t\t}\n\t}\n\n\tmatchChildWidths(){\n\t\tvar childWidth = 0;\n\n\t\tif(this.contentElement && this.columns.length){\n\t\t\tthis.columns.forEach(function(column){\n\t\t\t\tif(column.visible){\n\t\t\t\t\tchildWidth += column.getWidth();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.contentElement.style.maxWidth = (childWidth - 1) + \"px\";\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.matchChildWidths();\n\t\t\t}\n\t\t}\n\t}\n\n\tremoveChild(child){\n\t\tvar index = this.columns.indexOf(child);\n\n\t\tif(index > -1){\n\t\t\tthis.columns.splice(index, 1);\n\t\t}\n\n\t\tif(!this.columns.length){\n\t\t\tthis.delete();\n\t\t}\n\t}\n\n\tsetWidth(width){\n\t\tthis.widthFixed = true;\n\t\tthis.setWidthActual(width);\n\t}\n\n\tsetWidthActual(width){\n\t\tif(isNaN(width)){\n\t\t\twidth = Math.floor((this.table.element.clientWidth/100) * parseInt(width));\n\t\t}\n\n\t\twidth = Math.max(this.minWidth, width);\n\n\t\tif(this.maxWidth){\n\t\t\twidth = Math.min(this.maxWidth, width);\n\t\t}\n\n\t\tthis.width = width;\n\t\tthis.widthStyled = width ? width + \"px\" : \"\";\n\n\t\tthis.element.style.width = this.widthStyled;\n\n\t\tif(!this.isGroup){\n\t\t\tthis.cells.forEach(function(cell){\n\t\t\t\tcell.setWidth();\n\t\t\t});\n\t\t}\n\n\t\tif(this.parent.isGroup){\n\t\t\tthis.parent.matchChildWidths();\n\t\t}\n\n\t\tthis.dispatch(\"column-width\", this);\n\t}\n\n\tcheckCellHeights(){\n\t\tvar rows = [];\n\n\t\tthis.cells.forEach(function(cell){\n\t\t\tif(cell.row.heightInitialized){\n\t\t\t\tif(cell.row.getElement().offsetParent !== null){\n\t\t\t\t\trows.push(cell.row);\n\t\t\t\t\tcell.row.clearCellHeight();\n\t\t\t\t}else{\n\t\t\t\t\tcell.row.heightInitialized = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\trows.forEach(function(row){\n\t\t\trow.calcHeight();\n\t\t});\n\n\t\trows.forEach(function(row){\n\t\t\trow.setCellHeight();\n\t\t});\n\t}\n\n\tgetWidth(){\n\t\tvar width = 0;\n\n\t\tif(this.isGroup){\n\t\t\tthis.columns.forEach(function(column){\n\t\t\t\tif(column.visible){\n\t\t\t\t\twidth += column.getWidth();\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\twidth = this.width;\n\t\t}\n\n\t\treturn width;\n\t}\n\n\tgetLeftOffset(){\n\t\tvar offset = this.element.offsetLeft;\n\n\t\tif(this.parent.isGroup){\n\t\t\toffset += this.parent.getLeftOffset();\n\t\t}\n\n\t\treturn offset;\n\t}\n\n\tgetHeight(){\n\t\treturn Math.ceil(this.element.getBoundingClientRect().height);\n\t}\n\n\tsetMinWidth(minWidth){\n\t\tif(this.maxWidth && minWidth > this.maxWidth){\n\t\t\tminWidth = this.maxWidth;\n\n\t\t\tconsole.warn(\"the minWidth (\"+ minWidth + \"px) for column '\" + this.field + \"' cannot be bigger that its maxWidth (\"+ this.maxWidthStyled + \")\");\n\t\t}\n\n\t\tthis.minWidth = minWidth;\n\t\tthis.minWidthStyled = minWidth ? minWidth + \"px\" : \"\";\n\n\t\tthis.element.style.minWidth = this.minWidthStyled;\n\n\t\tthis.cells.forEach(function(cell){\n\t\t\tcell.setMinWidth();\n\t\t});\n\t}\n\n\tsetMaxWidth(maxWidth){\n\t\tif(this.minWidth && maxWidth < this.minWidth){\n\t\t\tmaxWidth = this.minWidth;\n\n\t\t\tconsole.warn(\"the maxWidth (\"+ maxWidth + \"px) for column '\" + this.field + \"' cannot be smaller that its minWidth (\"+ this.minWidthStyled + \")\");\n\t\t}\n\n\t\tthis.maxWidth = maxWidth;\n\t\tthis.maxWidthStyled = maxWidth ? maxWidth + \"px\" : \"\";\n\n\t\tthis.element.style.maxWidth = this.maxWidthStyled;\n\n\t\tthis.cells.forEach(function(cell){\n\t\t\tcell.setMaxWidth();\n\t\t});\n\t}\n\n\tdelete(){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif(this.isGroup){\n\t\t\t\tthis.columns.forEach(function(column){\n\t\t\t\t\tcolumn.delete();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.dispatch(\"column-delete\", this);\n\n\t\t\tvar cellCount = this.cells.length;\n\n\t\t\tfor(let i = 0; i < cellCount; i++){\n\t\t\t\tthis.cells[0].delete();\n\t\t\t}\n\n\t\t\tif(this.element.parentNode){\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\t}\n\n\t\t\tthis.element = false;\n\t\t\tthis.contentElement = false;\n\t\t\tthis.titleElement = false;\n\t\t\tthis.groupElement = false;\n\n\t\t\tif(this.parent.isGroup){\n\t\t\t\tthis.parent.removeChild(this);\n\t\t\t}\n\n\t\t\tthis.table.columnManager.deregisterColumn(this);\n\n\t\t\tthis.table.columnManager.rerenderColumns(true);\n\n\t\t\tthis.dispatch(\"column-deleted\", this);\n\n\t\t\tresolve();\n\t\t});\n\t}\n\n\tcolumnRendered(){\n\t\tif(this.titleFormatterRendered){\n\t\t\tthis.titleFormatterRendered();\n\t\t}\n\n\t\tthis.dispatch(\"column-rendered\", this);\n\t}\n\n\t//////////////// Cell Management /////////////////\n\t//generate cell for this column\n\tgenerateCell(row){\n\t\tvar cell = new Cell(this, row);\n\n\t\tthis.cells.push(cell);\n\n\t\treturn cell;\n\t}\n\n\tnextColumn(){\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\n\t\treturn index > -1 ? this._nextVisibleColumn(index + 1) : false;\n\t}\n\n\t_nextVisibleColumn(index){\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\n\t\treturn !column || column.visible ? column : this._nextVisibleColumn(index + 1);\n\t}\n\n\tprevColumn(){\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\n\t\treturn index > -1 ? this._prevVisibleColumn(index - 1) : false;\n\t}\n\n\t_prevVisibleColumn(index){\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\n\t\treturn !column || column.visible ? column : this._prevVisibleColumn(index - 1);\n\t}\n\n\treinitializeWidth(force){\n\t\tthis.widthFixed = false;\n\n\t\t//set width if present\n\t\tif(typeof this.definition.width !== \"undefined\" && !force){\n\t\t\t// maxInitialWidth ignored here as width specified\n\t\t\tthis.setWidth(this.definition.width);\n\t\t}\n\n\t\tthis.dispatch(\"column-width-fit-before\", this);\n\n\t\tthis.fitToData(force);\n\n\t\tthis.dispatch(\"column-width-fit-after\", this);\n\t}\n\n\t//set column width to maximum cell width for non group columns\n\tfitToData(force){\n\t\tif(this.isGroup){\n\t\t\treturn;\n\t\t}\n\n\t\tif(!this.widthFixed){\n\t\t\tthis.element.style.width = \"\";\n\n\t\t\tthis.cells.forEach((cell) => {\n\t\t\t\tcell.clearWidth();\n\t\t\t});\n\t\t}\n\n\t\tvar maxWidth = this.element.offsetWidth;\n\n\t\tif(!this.width || !this.widthFixed){\n\t\t\tthis.cells.forEach((cell) => {\n\t\t\t\tvar width = cell.getWidth();\n\n\t\t\t\tif(width > maxWidth){\n\t\t\t\t\tmaxWidth = width;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(maxWidth){\n\t\t\t\tvar setTo = maxWidth + 1;\n\t\t\t\tif (this.maxInitialWidth && !force) {\n\t\t\t\t\tsetTo = Math.min(setTo, this.maxInitialWidth);\n\t\t\t\t}\n\t\t\t\tthis.setWidthActual(setTo);\n\t\t\t}\n\t\t}\n\t}\n\n\tupdateDefinition(updates){\n\t\tvar definition;\n\n\t\tif(!this.isGroup){\n\t\t\tif(!this.parent.isGroup){\n\t\t\t\tdefinition = Object.assign({}, this.getDefinition());\n\t\t\t\tdefinition = Object.assign(definition, updates);\n\n\t\t\t\treturn this.table.columnManager.addColumn(definition, false, this)\n\t\t\t\t\t.then((column) => {\n\n\t\t\t\t\t\tif(definition.field == this.field){\n\t\t\t\t\t\t\tthis.field = false; //clear field name to prevent deletion of duplicate column from arrays\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this.delete()\n\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconsole.error(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\n\t\t\t\treturn Promise.reject(\"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.error(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\n\t\t\treturn Promise.reject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\n\t\t}\n\t}\n\n\tdeleteCell(cell){\n\t\tvar index = this.cells.indexOf(cell);\n\n\t\tif(index > -1){\n\t\t\tthis.cells.splice(index, 1);\n\t\t}\n\t}\n\n\t//////////////// Object Generation /////////////////\n\tgetComponent(){\n\t\tif(!this.component){\n\t\t\tthis.component = new ColumnComponent(this);\n\t\t}\n\n\t\treturn this.component;\n\t}\n\n\tgetPosition(){\n\t\treturn this.table.columnManager.getVisibleColumnsByIndex().indexOf(this) + 1;\n\t}\n}\n\nColumn.defaultOptionList = defaultOptions;\n\nexport default Column;\n","export default class Helpers{\n\n\tstatic elVisible(el){\n\t\treturn !(el.offsetWidth <= 0 && el.offsetHeight <= 0);\n\t}\n\n\tstatic 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\tstatic retrieveNestedData(separator, field, data){\n\t\tvar structure = separator ? field.split(separator) : [field],\n\t\tlength = structure.length,\n\t\toutput;\n\n\t\tfor(let i = 0; i < length; i++){\n\n\t\t\tdata = data[structure[i]];\n\n\t\t\toutput = data;\n\n\t\t\tif(!data){\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tstatic deepClone(obj, clone, list = []){\n\t\tvar objectProto = {}.__proto__,\n\t\tarrayProto = [].__proto__;\n\n\t\tif (!clone){\n\t\t\tclone = Object.assign(Array.isArray(obj) ? [] : {}, obj);\n\t\t}\n\n\t\tfor(var i in obj) {\n\t\t\tlet subject = obj[i],\n\t\t\tmatch, copy;\n\n\t\t\tif(subject != null && typeof subject === \"object\" && (subject.__proto__ === objectProto || subject.__proto__ === arrayProto)){\n\t\t\t\tmatch = list.findIndex((item) => {\n\t\t\t\t\treturn item.subject === subject;\n\t\t\t\t});\n\n\t\t\t\tif(match > -1){\n\t\t\t\t\tclone[i] = list[match].copy;\n\t\t\t\t}else{\n\t\t\t\t\tcopy = Object.assign(Array.isArray(subject) ? [] : {}, subject);\n\n\t\t\t\t\tlist.unshift({subject, copy});\n\n\t\t\t\t\tclone[i] = this.deepClone(subject, copy, list);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn clone;\n\t}\n}\n","export default class OptionsList {\n\tconstructor(table, msgType, defaults = {}){\n\t\tthis.table = table;\n\t\tthis.msgType = msgType;\n\t\tthis.registeredDefaults = Object.assign({}, defaults);\n\t}\n\t\n\tregister(option, value){\n\t\tthis.registeredDefaults[option] = value;\n\t}\n\t\n\tgenerate(defaultOptions, userOptions = {}){\n\t\tvar output = Object.assign({}, this.registeredDefaults),\n\t\twarn = this.table.options.debugInvalidOptions || userOptions.debugInvalidOptions === true;\n\t\t\n\t\tObject.assign(output, defaultOptions);\n\t\t\n\t\tfor (let key in userOptions){\n\t\t\tif(!output.hasOwnProperty(key)){\n\t\t\t\tif(warn){\n\t\t\t\t\tconsole.warn(\"Invalid \" + this.msgType + \" option:\", key);\n\t\t\t\t}\n\n\t\t\t\toutput[key] = userOptions.key;\n\t\t\t}\n\t\t}\n\t\n\t\t\n\t\tfor (let key in output){\n\t\t\tif(key in userOptions){\n\t\t\t\toutput[key] = userOptions[key];\n\t\t\t}else{\n\t\t\t\tif(Array.isArray(output[key])){\n\t\t\t\t\toutput[key] = Object.assign([], output[key]);\n\t\t\t\t}else if(typeof output[key] === \"object\" && output[key] !== null){\n\t\t\t\t\toutput[key] = Object.assign({}, output[key]);\n\t\t\t\t}else if (typeof output[key] === \"undefined\"){\n\t\t\t\t\tdelete output[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n}","import CoreFeature from '../CoreFeature.js';\nimport Helpers from '../tools/Helpers.js';\n\nexport default class Renderer extends CoreFeature{\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.elementVertical = table.rowManager.element;\n\t\tthis.elementHorizontal = table.columnManager.element;\n\t\tthis.tableElement = table.rowManager.tableElement;\n\n\t\tthis.verticalFillMode = \"fit\"; // used by row manager to determine how to size the render area (\"fit\" - fits container to the contents, \"fill\" - fills the container without resizing it)\n\t}\n\n\n\t///////////////////////////////////\n\t/////// Internal Bindings /////////\n\t///////////////////////////////////\n\n\tinitialize(){\n\t\t//initialize core functionality\n\t}\n\n\tclearRows(){\n\t\t//clear down existing rows layout\n\t}\n\n\tclearColumns(){\n\t\t//clear down existing columns layout\n\t}\n\n\n\treinitializeColumnWidths(columns){\n\t\t//resize columns to fit data\n\t}\n\n\n\trenderRows(){\n\t\t//render rows from a clean slate\n\t}\n\n\trenderColumns(){\n\t\t//render columns from a clean slate\n\t}\n\n\trerenderRows(callback){\n\t\t// rerender rows and keep position\n\t\tif(callback){\n\t\t\tcallback();\n\t\t}\n\t}\n\n\trerenderColumns(update, blockRedraw){\n\t\t//rerender columns\n\t}\n\n\trenderRowCells(row){\n\t\t//render the cells in a row\n\t}\n\n\trerenderRowCells(row, force){\n\t\t//rerender the cells in a row\n\t}\n\n\tscrollColumns(left, dir){\n\t\t//handle horizontal scrolling\n\t}\n\n\tscrollRows(top, dir){\n\t\t//handle vertical scrolling\n\t}\n\n\tresize(){\n\t\t//container has resized, carry out any needed recalculations (DO NOT RERENDER IN THIS FUNCTION)\n\t}\n\n\tscrollToRow(row){\n\t\t//scroll to a specific row\n\t}\n\n\tscrollToRowNearestTop(row){\n\t\t//determine weather the row is nearest the top or bottom of the table, return true for top or false for bottom\n\t}\n\n\tvisibleRows(includingBuffer){\n\t\t//return the visible rows\n\t\treturn [];\n\t}\n\n\t///////////////////////////////////\n\t//////// Helper Functions /////////\n\t///////////////////////////////////\n\n\trows(){\n\t\treturn this.table.rowManager.getDisplayRows();\n\t}\n\n\tstyleRow(row, index){\n\t\tvar rowEl = row.getElement();\n\n\t\tif(index % 2){\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\n\t\t}else{\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\n\t\t}\n\t}\n\n\t///////////////////////////////////\n\t/////// External Triggers /////////\n\t/////// (DO NOT OVERRIDE) /////////\n\t///////////////////////////////////\n\n\tclear(){\n\t\t//clear down existing layout\n\t\tthis.clearRows();\n\t\tthis.clearColumns();\n\t}\n\n\trender(){\n\t\t//render from a clean slate\n\t\tthis.renderRows();\n\t\tthis.renderColumns();\n\t}\n\n\trerender(callback){\n\t\t// rerender and keep position\n\t\tthis.rerenderRows();\n\t\tthis.rerenderColumns();\n\t}\n\n\tscrollToRowPosition(row, position, ifVisible){\n\t\tvar rowIndex = this.rows().indexOf(row),\n\t\trowEl = row.getElement(),\n\t\toffset = 0;\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif(rowIndex > -1){\n\n\t\t\t\tif(typeof ifVisible === \"undefined\"){\n\t\t\t\t\tifVisible = this.table.options.scrollToRowIfVisible;\n\t\t\t\t}\n\n\t\t\t\t//check row visibility\n\t\t\t\tif(!ifVisible){\n\t\t\t\t\tif(Helpers.elVisible(rowEl)){\n\t\t\t\t\t\toffset = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(offset > 0 && offset < this.elementVertical.clientHeight - rowEl.offsetHeight){\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(typeof position === \"undefined\"){\n\t\t\t\t\tposition = this.table.options.scrollToRowPosition;\n\t\t\t\t}\n\n\t\t\t\tif(position === \"nearest\"){\n\t\t\t\t\tposition = this.scrollToRowNearestTop(row) ? \"top\" : \"bottom\";\n\t\t\t\t}\n\n\t\t\t\t//scroll to row\n\t\t\t\tthis.scrollToRow(row);\n\n\t\t\t\t//align to correct position\n\t\t\t\tswitch(position){\n\t\t\t\t\tcase \"middle\":\n\t\t\t\t\tcase \"center\":\n\n\t\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop + (rowEl.offsetTop - this.elementVertical.scrollTop) - ((this.elementVertical.scrollHeight - rowEl.offsetTop) / 2);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.clientHeight / 2);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"bottom\":\n\n\t\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - this.elementVertical.clientHeight + rowEl.offsetHeight;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"top\":\n\t\t\t\t\t\tthis.elementVertical.scrollTop = rowEl.offsetTop;\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tresolve();\n\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Scroll Error - Row not visible\");\n\t\t\t\treject(\"Scroll Error - Row not visible\");\n\t\t\t}\n\t\t});\n\t}\n}","import Renderer from '../Renderer.js';\n\nexport default class BasicHorizontal extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\t}\n\t\n\trenderRowCells(row, inFragment) {\n\t\tconst rowFrag = document.createDocumentFragment();\n\t\trow.cells.forEach((cell) => {\n\t\t\trowFrag.appendChild(cell.getElement());\n\t\t});\n\t\trow.element.appendChild(rowFrag);\n\t\t\n\t\tif(!inFragment){\n\t\t\trow.cells.forEach((cell) => {\n\t\t\t\tcell.cellRendered();\n\t\t\t});\n\t\t}\n\t}\n\t\n\treinitializeColumnWidths(columns){\n\t\tcolumns.forEach(function(column){\n\t\t\tcolumn.reinitializeWidth();\n\t\t});\n\t}\n}","import Renderer from '../Renderer.js';\n\nexport default class VirtualDomHorizontal extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.leftCol = 0;\n\t\tthis.rightCol = 0;\n\t\tthis.scrollLeft = 0;\n\t\t\n\t\tthis.vDomScrollPosLeft = 0;\n\t\tthis.vDomScrollPosRight = 0;\n\t\t\n\t\tthis.vDomPadLeft = 0;\n\t\tthis.vDomPadRight = 0;\n\t\t\n\t\tthis.fitDataColAvg = 0;\n\t\t\n\t\tthis.windowBuffer = 200; //pixel margin to make column visible before it is shown on screen\n\t\t\n\t\tthis.visibleRows = null;\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.isFitData = false;\n\t\t\n\t\tthis.columns = [];\n\t}\n\t\n\tinitialize(){\n\t\tthis.compatibilityCheck();\n\t\tthis.layoutCheck();\n\t\tthis.vertScrollListen();\n\t}\n\t\n\tcompatibilityCheck(){\t\t\n\t\tif(this.options(\"layout\") == \"fitDataTable\"){\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with fitDataTable layout mode\");\n\t\t}\n\t\t\n\t\tif(this.options(\"responsiveLayout\")){\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with responsive columns\");\n\t\t}\n\t\t\n\t\tif(this.options(\"rtl\")){\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not currently compatible with RTL text direction\");\n\t\t}\n\t}\n\t\n\tlayoutCheck(){\n\t\tthis.isFitData = this.options(\"layout\").startsWith('fitData');\n\t}\n\t\n\tvertScrollListen(){\n\t\tthis.subscribe(\"scroll-vertical\", this.clearVisRowCache.bind(this));\n\t\tthis.subscribe(\"data-refreshed\", this.clearVisRowCache.bind(this));\n\t}\n\t\n\tclearVisRowCache(){\n\t\tthis.visibleRows = null;\n\t}\n\t\n\t//////////////////////////////////////\n\t///////// Public Functions ///////////\n\t//////////////////////////////////////\n\t\n\trenderColumns(row, force){\n\t\tthis.dataChange();\n\t}\n\t\n\t\n\tscrollColumns(left, dir){\n\t\tif(this.scrollLeft != left){\n\t\t\tthis.scrollLeft = left;\n\t\t\t\n\t\t\tthis.scroll(left - (this.vDomScrollPosLeft + this.windowBuffer));\n\t\t}\n\t}\n\t\n\tcalcWindowBuffer(){\n\t\tvar buffer = this.elementVertical.clientWidth;\n\t\t\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\tif(column.visible){\n\t\t\t\tvar width = column.getWidth();\n\t\t\t\t\n\t\t\t\tif(width > buffer){\n\t\t\t\t\tbuffer = width;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.windowBuffer = buffer * 2;\n\t}\n\t\n\trerenderColumns(update, blockRedraw){\t\t\n\t\tvar old = {\n\t\t\tcols:this.columns,\n\t\t\tleftCol:this.leftCol,\n\t\t\trightCol:this.rightCol,\n\t\t},\n\t\tcolPos = 0;\n\t\t\n\t\tif(update && !this.initialized){\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.clear();\n\t\t\n\t\tthis.calcWindowBuffer();\n\t\t\n\t\tthis.scrollLeft = this.elementVertical.scrollLeft;\n\t\t\n\t\tthis.vDomScrollPosLeft = this.scrollLeft - this.windowBuffer;\n\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer;\n\t\t\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\tvar config = {},\n\t\t\twidth;\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\tif(!column.modules.frozen){\t\t\t\n\t\t\t\t\twidth = column.getWidth();\n\n\t\t\t\t\tconfig.leftPos = colPos;\n\t\t\t\t\tconfig.rightPos = colPos + width;\n\t\t\t\t\t\n\t\t\t\t\tconfig.width = width;\n\t\t\t\t\t\n\t\t\t\t\tif (this.isFitData) {\n\t\t\t\t\t\tconfig.fitDataCheck = column.modules.vdomHoz ? column.modules.vdomHoz.fitDataCheck : true;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif((colPos + width > this.vDomScrollPosLeft) && (colPos < this.vDomScrollPosRight)){\n\t\t\t\t\t\t//column is visible\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.leftCol == -1){\n\t\t\t\t\t\t\tthis.leftCol = this.columns.length;\n\t\t\t\t\t\t\tthis.vDomPadLeft = colPos;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.rightCol = this.columns.length;\n\t\t\t\t\t}else{\n\t\t\t\t\t\t// column is hidden\n\t\t\t\t\t\tif(this.leftCol !== -1){\n\t\t\t\t\t\t\tthis.vDomPadRight += width;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.columns.push(column);\n\t\t\t\t\t\n\t\t\t\t\tcolumn.modules.vdomHoz = config;\n\t\t\t\t\t\n\t\t\t\t\tcolPos += width;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\n\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\n\t\t\n\t\tthis.initialized = true;\n\t\t\n\t\tif(!blockRedraw){\n\t\t\tif(!update || this.reinitChanged(old)){\n\t\t\t\tthis.reinitializeRows();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.elementVertical.scrollLeft = this.scrollLeft;\n\t}\n\t\n\trenderRowCells(row){\n\t\tif(this.initialized){\n\t\t\tthis.initializeRow(row);\n\t\t}else{\n\t\t\tconst rowFrag = document.createDocumentFragment();\n\t\t\trow.cells.forEach((cell) => {\n\t\t\t\trowFrag.appendChild(cell.getElement());\n\t\t\t});\n\t\t\trow.element.appendChild(rowFrag);\n\n\t\t\trow.cells.forEach((cell) => {\n\t\t\t\tcell.cellRendered();\n\t\t\t});\n\t\t}\n\t}\n\t\n\trerenderRowCells(row, force){\n\t\tthis.reinitializeRow(row, force);\n\t}\n\t\n\treinitializeColumnWidths(columns){\n\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\n\t\t\tthis.columns[i].reinitializeWidth();\n\t\t}\n\t}\n\t\n\t//////////////////////////////////////\n\t//////// Internal Rendering //////////\n\t//////////////////////////////////////\n\t\n\tdeinitialize(){\n\t\tthis.initialized = false;\n\t}\n\t\n\tclear(){\n\t\tthis.columns = [];\n\t\t\n\t\tthis.leftCol = -1;\n\t\tthis.rightCol = 0;\n\t\t\n\t\tthis.vDomScrollPosLeft = 0;\n\t\tthis.vDomScrollPosRight = 0;\n\t\tthis.vDomPadLeft = 0;\n\t\tthis.vDomPadRight = 0;\n\t}\n\t\n\tdataChange(){\n\t\tvar change = false,\n\t\trow, rowEl;\n\t\t\n\t\tif(this.isFitData){\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\t\tif(!column.definition.width && column.visible){\n\t\t\t\t\tchange = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(change && this.table.rowManager.getDisplayRows().length){\n\t\t\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.windowBuffer;\n\t\t\t\t\n\t\t\t\trow = this.chain(\"rows-sample\", [1], [], () => {\n\t\t\t\t\treturn this.table.rowManager.getDisplayRows();\n\t\t\t\t})[0];\n\t\t\t\t\n\t\t\t\tif(row){\n\t\t\t\t\trowEl = row.getElement();\n\t\t\t\t\t\n\t\t\t\t\trow.generateCells();\n\t\t\t\t\t\n\t\t\t\t\tthis.tableElement.appendChild(rowEl);\n\t\t\t\t\t\n\t\t\t\t\tfor(let colEnd = 0; colEnd < row.cells.length; colEnd++){\n\t\t\t\t\t\tlet cell = row.cells[colEnd];\n\t\t\t\t\t\trowEl.appendChild(cell.getElement());\n\t\t\t\t\t\t\n\t\t\t\t\t\tcell.column.reinitializeWidth();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t\t\t\n\t\t\t\t\tthis.rerenderColumns(false, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tif(this.options(\"layout\") === \"fitColumns\"){\n\t\t\t\tthis.layoutRefresh();\n\t\t\t\tthis.rerenderColumns(false, true);\n\t\t\t}\n\t\t}\n\t}\n\t\n\treinitChanged(old){\n\t\tvar match = true;\n\t\t\n\t\tif(old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol){\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\told.cols.forEach((col, i) => {\n\t\t\tif(col !== this.columns[i]){\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn !match;\n\t}\n\t\n\treinitializeRows(){\n\t\tvar visibleRows = this.getVisibleRows(),\n\t\totherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row));\n\n\t\tvisibleRows.forEach((row) => {\n\t\t\tthis.reinitializeRow(row, true);\n\t\t});\n\n\t\totherRows.forEach((row) =>{\n\t\t\trow.deinitialize();\n\t\t});\n\t}\n\t\n\tgetVisibleRows(){\n\t\tif (!this.visibleRows){\n\t\t\tthis.visibleRows = this.table.rowManager.getVisibleRows();\n\t\t}\n\t\t\n\t\treturn this.visibleRows;\t\n\t}\n\t\n\tscroll(diff){\n\t\tthis.vDomScrollPosLeft += diff;\n\t\tthis.vDomScrollPosRight += diff;\n\t\t\n\t\tif(Math.abs(diff) > (this.windowBuffer / 2)){\n\t\t\tthis.rerenderColumns();\n\t\t}else{\n\t\t\tif(diff > 0){\n\t\t\t\t//scroll right\n\t\t\t\tthis.addColRight();\n\t\t\t\tthis.removeColLeft();\n\t\t\t}else{\n\t\t\t\t//scroll left\n\t\t\t\tthis.addColLeft();\n\t\t\t\tthis.removeColRight();\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcolPositionAdjust (start, end, diff){\n\t\tfor(let i = start; i < end; i++){\n\t\t\tlet column = this.columns[i];\n\t\t\t\n\t\t\tcolumn.modules.vdomHoz.leftPos += diff;\n\t\t\tcolumn.modules.vdomHoz.rightPos += diff;\n\t\t}\n\t}\n\t\n\taddColRight(){\n\t\tvar changes = false,\n\t\tworking = true;\n\t\t\n\t\twhile(working){\n\n\t\t\tlet column = this.columns[this.rightCol + 1];\n\t\t\t\n\t\t\tif(column){\n\t\t\t\tif(column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight){\n\t\t\t\t\tchanges = true;\n\t\t\t\t\t\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\t\t\t\trow.getElement().insertBefore(cell.getElement(), row.getCell(this.columns[this.rightCol]).getElement().nextSibling);\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\t\n\t\t\t\t\tthis.fitDataColActualWidthCheck(column);\n\t\t\t\t\t\n\t\t\t\t\tthis.rightCol++; // Don't move this below the >= check below\n\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\trow.modules.vdomHoz.rightCol = this.rightCol;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif(this.rightCol >= (this.columns.length - 1)){\n\t\t\t\t\t\tthis.vDomPadRight = 0;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.vDomPadRight -= column.getWidth();\n\t\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\t\t\n\t\tif(changes){\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\n\t\t}\n\t}\n\t\n\taddColLeft(){\n\t\tvar changes = false,\n\t\tworking = true;\n\t\t\n\t\twhile(working){\n\t\t\tlet column = this.columns[this.leftCol - 1];\n\t\t\t\n\t\t\tif(column){\n\t\t\t\tif(column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft){\n\t\t\t\t\tchanges = true;\n\t\t\t\t\t\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\t\t\t\trow.getElement().insertBefore(cell.getElement(), row.getCell(this.columns[this.leftCol]).getElement());\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\t\n\t\t\t\t\tthis.leftCol--; // don't move this below the <= check below\n\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\trow.modules.vdomHoz.leftCol = this.leftCol;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif(this.leftCol <= 0){ // replicating logic in addColRight\n\t\t\t\t\t\tthis.vDomPadLeft = 0;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.vDomPadLeft -= column.getWidth();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet diff = this.fitDataColActualWidthCheck(column);\n\t\t\t\t\t\n\t\t\t\t\tif(diff){\n\t\t\t\t\t\tthis.scrollLeft = this.elementVertical.scrollLeft = this.elementVertical.scrollLeft + diff;\n\t\t\t\t\t\tthis.vDomPadRight -= diff;\n\t\t\t\t\t}\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\t\t\n\t\tif(changes){\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\n\t\t}\n\t}\n\t\n\tremoveColRight(){\n\t\tvar changes = false,\n\t\tworking = true;\n\t\t\n\t\twhile(working){\n\t\t\tlet column = this.columns[this.rightCol];\n\t\t\t\n\t\t\tif(column){\n\t\t\t\tif(column.modules.vdomHoz.leftPos > this.vDomScrollPosRight){\n\t\t\t\t\tchanges = true;\n\t\t\t\t\t\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\trow.getElement().removeChild(cell.getElement());\n\t\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\t\tconsole.warn(\"Could not removeColRight\", ex.message);\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\t\n\t\t\t\t\tthis.vDomPadRight += column.getWidth();\n\t\t\t\t\tthis.rightCol --;\n\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\trow.modules.vdomHoz.rightCol = this.rightCol;\n\t\t\t\t\t\t}\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\t\t\n\t\tif(changes){\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\n\t\t}\n\t}\n\t\n\tremoveColLeft(){\n\t\tvar changes = false,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet column = this.columns[this.leftCol];\n\t\t\t\n\t\t\tif(column){\n\t\t\t\tif(column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){\n\t\t\t\t\tchanges = true;\n\t\t\t\t\t\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\t\t\t\t\t\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\trow.getElement().removeChild(cell.getElement());\n\t\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\t\tconsole.warn(\"Could not removeColLeft\", ex.message);\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\t\n\t\t\t\t\tthis.vDomPadLeft += column.getWidth();\n\t\t\t\t\tthis.leftCol ++;\n\n\t\t\t\t\tthis.getVisibleRows().forEach((row) => {\n\t\t\t\t\t\tif(row.type !== \"group\"){\n\t\t\t\t\t\t\trow.modules.vdomHoz.leftCol = this.leftCol;\n\t\t\t\t\t\t}\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\t\t\n\t\tif(changes){\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\n\t\t}\n\t}\n\t\n\tfitDataColActualWidthCheck(column){\n\t\tvar newWidth, widthDiff;\n\t\t\n\t\tif(column.modules.vdomHoz.fitDataCheck){\n\t\t\tcolumn.reinitializeWidth();\n\t\t\t\n\t\t\tnewWidth = column.getWidth();\n\t\t\twidthDiff = newWidth - column.modules.vdomHoz.width;\n\t\t\t\n\t\t\tif(widthDiff){\n\t\t\t\tcolumn.modules.vdomHoz.rightPos += widthDiff;\n\t\t\t\tcolumn.modules.vdomHoz.width = newWidth;\n\t\t\t\tthis.colPositionAdjust(this.columns.indexOf(column) + 1, this.columns.length, widthDiff);\n\t\t\t}\n\t\t\t\n\t\t\tcolumn.modules.vdomHoz.fitDataCheck = false;\n\t\t}\n\t\t\n\t\treturn widthDiff;\n\t}\n\t\n\tinitializeRow(row){\n\t\tif(row.type !== \"group\"){\n\t\t\trow.modules.vdomHoz = {\n\t\t\t\tleftCol:this.leftCol,\n\t\t\t\trightCol:this.rightCol,\n\t\t\t};\n\n\t\t\tif(this.table.modules.frozenColumns){\n\t\t\t\tthis.table.modules.frozenColumns.leftColumns.forEach((column) => {\n\t\t\t\t\tthis.appendCell(row, column);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\n\t\t\t\tthis.appendCell(row, this.columns[i]);\n\t\t\t}\n\n\t\t\tif(this.table.modules.frozenColumns){\n\t\t\t\tthis.table.modules.frozenColumns.rightColumns.forEach((column) => {\n\t\t\t\t\tthis.appendCell(row, column);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\tappendCell(row, column){\n\t\tif(column && column.visible){\n\t\t\tlet cell = row.getCell(column);\n\t\t\t\n\t\t\trow.getElement().appendChild(cell.getElement());\n\t\t\tcell.cellRendered();\n\t\t}\n\t}\n\t\n\treinitializeRow(row, force){\n\t\tif(row.type !== \"group\"){\n\t\t\tif(force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol){\n\t\t\t\t\n\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\twhile(rowEl.firstChild) rowEl.removeChild(rowEl.firstChild);\n\n\t\t\t\tthis.initializeRow(row);\n\t\t\t}\n\t\t}\n\t}\n}\n","import CoreFeature from './CoreFeature.js';\nimport Column from './column/Column.js';\nimport ColumnComponent from './column/ColumnComponent.js';\nimport Helpers from './tools/Helpers.js';\nimport OptionsList from './tools/OptionsList.js';\n\nimport RendererBasicHorizontal from './rendering/renderers/BasicHorizontal.js';\nimport RendererVirtualDomHorizontal from './rendering/renderers/VirtualDomHorizontal.js';\n\nimport defaultColumnOptions from './column/defaults/options.js';\n\nexport default class ColumnManager extends CoreFeature {\n\t\n\tconstructor (table){\n\t\tsuper(table);\n\t\t\n\t\tthis.blockHozScrollEvent = false;\n\t\tthis.headersElement = null;\n\t\tthis.contentsElement = null;\n\t\tthis.element = null ; //containing element\n\t\tthis.columns = []; // column definition object\n\t\tthis.columnsByIndex = []; //columns by index\n\t\tthis.columnsByField = {}; //columns by field\n\t\tthis.scrollLeft = 0;\n\t\tthis.optionsList = new OptionsList(this.table, \"column definition\", defaultColumnOptions);\n\t\t\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations before continuing\n\t\tthis.redrawBlockUpdate = null; //store latest redraw update only status\n\t\t\n\t\tthis.renderer = null;\n\t}\n\t\n\t////////////// Setup Functions /////////////////\n\t\n\tinitialize(){\n\t\tthis.initializeRenderer();\n\t\t\n\t\tthis.headersElement = this.createHeadersElement();\n\t\tthis.contentsElement = this.createHeaderContentsElement();\n\t\tthis.element = this.createHeaderElement();\n\t\t\n\t\tthis.contentsElement.insertBefore(this.headersElement, this.contentsElement.firstChild);\n\t\tthis.element.insertBefore(this.contentsElement, this.element.firstChild);\n\n\t\tthis.initializeScrollWheelWatcher();\n\t\t\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\n\t\tthis.subscribe(\"scrollbar-vertical\", this.padVerticalScrollbar.bind(this));\n\t}\n\n\tpadVerticalScrollbar(width){\n\t\tif(this.table.rtl){\n\t\t\tthis.headersElement.style.marginLeft = width + \"px\";\n\t\t}else{\n\t\t\tthis.headersElement.style.marginRight = width + \"px\";\n\t\t}\n\t}\n\t\n\tinitializeRenderer(){\n\t\tvar renderClass;\n\t\t\n\t\tvar renderers = {\n\t\t\t\"virtual\": RendererVirtualDomHorizontal,\n\t\t\t\"basic\": RendererBasicHorizontal,\n\t\t};\n\t\t\n\t\tif(typeof this.table.options.renderHorizontal === \"string\"){\n\t\t\trenderClass = renderers[this.table.options.renderHorizontal];\n\t\t}else{\n\t\t\trenderClass = this.table.options.renderHorizontal;\n\t\t}\n\t\t\n\t\tif(renderClass){\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\n\t\t\tthis.renderer.initialize();\n\t\t}else{\n\t\t\tconsole.error(\"Unable to find matching renderer:\", this.table.options.renderHorizontal);\n\t\t}\n\t}\n\t\n\t\n\tcreateHeadersElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-headers\");\n\t\tel.setAttribute(\"role\", \"row\");\n\t\t\n\t\treturn el;\n\t}\n\n\tcreateHeaderContentsElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-header-contents\");\n\t\tel.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\treturn el;\n\t}\n\t\n\tcreateHeaderElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-header\");\n\t\tel.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\tif(!this.table.options.headerVisible){\n\t\t\tel.classList.add(\"tabulator-header-hidden\");\n\t\t}\n\t\t\n\t\treturn el;\n\t}\n\t\n\t//return containing element\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\n\t//return containing contents element\n\tgetContentsElement(){\n\t\treturn this.contentsElement;\n\t}\n\t\n\t\n\t//return header containing element\n\tgetHeadersElement(){\n\t\treturn this.headersElement;\n\t}\n\t\n\t//scroll horizontally to match table body\n\tscrollHorizontal(left){\n\t\tthis.contentsElement.scrollLeft = left;\n\n\t\tthis.scrollLeft = left;\n\t\t\n\t\tthis.renderer.scrollColumns(left);\n\t}\n\n\tinitializeScrollWheelWatcher(){\n\t\tthis.contentsElement.addEventListener(\"wheel\", (e) => {\n\t\t\tvar left;\n\n\t\t\tif(e.deltaX){\n\t\t\t\tleft = this.contentsElement.scrollLeft + e.deltaX;\n\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t///////////// Column Setup Functions /////////////\n\tgenerateColumnsFromRowData(data){\n\t\tvar cols = [],\n\t\tdefinitions = this.table.options.autoColumnsDefinitions,\n\t\trow, sorter;\n\t\t\n\t\tif(data && data.length){\n\t\t\t\n\t\t\trow = data[0];\n\t\t\t\n\t\t\tfor(var key in row){\n\t\t\t\tlet col = {\n\t\t\t\t\tfield:key,\n\t\t\t\t\ttitle:key,\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tlet value = row[key];\n\t\t\t\t\n\t\t\t\tswitch(typeof value){\n\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\tsorter = \"boolean\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\tif(Array.isArray(value)){\n\t\t\t\t\t\t\tsorter = \"array\";\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\n\t\t\t\t\t\t\tsorter = \"number\";\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\n\t\t\t\t\t\t\t\tsorter = \"alphanum\";\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcol.sorter = sorter;\n\t\t\t\t\n\t\t\t\tcols.push(col);\n\t\t\t}\n\t\t\t\n\t\t\tif(definitions){\n\t\t\t\t\n\t\t\t\tswitch(typeof definitions){\n\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\tthis.table.options.columns = definitions.call(this.table, cols);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\tif(Array.isArray(definitions)){\n\t\t\t\t\t\t\tcols.forEach((col) => {\n\t\t\t\t\t\t\t\tvar match = definitions.find((def) => {\n\t\t\t\t\t\t\t\t\treturn def.field === col.field;\n\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\tif(match){\n\t\t\t\t\t\t\t\t\tObject.assign(col, match);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tcols.forEach((col) => {\n\t\t\t\t\t\t\t\tif(definitions[col.field]){\n\t\t\t\t\t\t\t\t\tObject.assign(col, definitions[col.field]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.table.options.columns = cols;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.table.options.columns = cols;\n\t\t\t}\n\t\t\t\n\t\t\tthis.setColumns(this.table.options.columns);\n\t\t}\n\t}\n\t\n\tsetColumns(cols, row){\n\t\twhile(this.headersElement.firstChild) this.headersElement.removeChild(this.headersElement.firstChild);\n\t\t\n\t\tthis.columns = [];\n\t\tthis.columnsByIndex = [];\n\t\tthis.columnsByField = {};\n\t\t\n\t\tthis.dispatch(\"columns-loading\");\n\t\t\n\t\tcols.forEach((def, i) => {\n\t\t\tthis._addColumn(def);\n\t\t});\n\t\t\n\t\tthis._reIndexColumns();\n\t\t\n\t\tthis.dispatch(\"columns-loaded\");\n\t\t\n\t\tthis.rerenderColumns(false, true);\n\t\t\n\t\tthis.redraw(true);\n\t}\n\t\n\t_addColumn(definition, before, nextToColumn){\n\t\tvar column = new Column(definition, this),\n\t\tcolEl = column.getElement(),\n\t\tindex = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;\n\t\t\n\t\tif(nextToColumn && index > -1){\n\t\t\tvar topColumn = nextToColumn.getTopColumn();\n\t\t\tvar parentIndex = this.columns.indexOf(topColumn);\n\t\t\tvar nextEl = topColumn.getElement();\n\t\t\t\n\t\t\tif(before){\n\t\t\t\tthis.columns.splice(parentIndex, 0, column);\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl);\n\t\t\t}else{\n\t\t\t\tthis.columns.splice(parentIndex + 1, 0, column);\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);\n\t\t\t}\n\t\t}else{\n\t\t\tif(before){\n\t\t\t\tthis.columns.unshift(column);\n\t\t\t\tthis.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);\n\t\t\t}else{\n\t\t\t\tthis.columns.push(column);\n\t\t\t\tthis.headersElement.appendChild(column.getElement());\n\t\t\t}\n\t\t}\n\t\t\n\t\tcolumn.columnRendered();\n\t\t\n\t\treturn column;\n\t}\n\t\n\tregisterColumnField(col){\n\t\tif(col.definition.field){\n\t\t\tthis.columnsByField[col.definition.field] = col;\n\t\t}\n\t}\n\t\n\tregisterColumnPosition(col){\n\t\tthis.columnsByIndex.push(col);\n\t}\n\t\n\t_reIndexColumns(){\n\t\tthis.columnsByIndex = [];\n\t\t\n\t\tthis.columns.forEach(function(column){\n\t\t\tcolumn.reRegisterPosition();\n\t\t});\n\t}\n\t\n\t//ensure column headers take up the correct amount of space in column groups\n\tverticalAlignHeaders(){\n\t\tvar minHeight = 0;\n\t\t\n\t\tif(!this.redrawBlock){\n\n\t\t\tthis.headersElement.style.height=\"\";\n\t\t\t\n\t\t\tthis.columns.forEach((column) => {\n\t\t\t\tcolumn.clearVerticalAlign();\n\t\t\t});\n\t\t\t\n\t\t\tthis.columns.forEach((column) => {\n\t\t\t\tvar height = column.getHeight();\n\t\t\t\t\n\t\t\t\tif(height > minHeight){\n\t\t\t\t\tminHeight = height;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.headersElement.style.height = minHeight + \"px\";\n\n\t\t\tthis.columns.forEach((column) => {\n\t\t\t\tcolumn.verticalAlign(this.table.options.columnHeaderVertAlign, minHeight);\n\t\t\t});\n\t\t\t\n\t\t\tthis.table.rowManager.adjustTableSize();\n\t\t}\n\t}\n\t\n\t//////////////// Column Details /////////////////\n\tfindColumn(subject){\n\t\tvar columns;\n\n\t\tif(typeof subject == \"object\"){\n\t\t\t\n\t\t\tif(subject instanceof Column){\n\t\t\t\t//subject is column element\n\t\t\t\treturn subject;\n\t\t\t}else if(subject instanceof ColumnComponent){\n\t\t\t\t//subject is public column component\n\t\t\t\treturn subject._getSelf() || false;\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\n\n\t\t\t\tcolumns = [];\n\n\t\t\t\tthis.columns.forEach((column) => {\n\t\t\t\t\tcolumns.push(column);\n\t\t\t\t\tcolumns = columns.concat(column.getColumns(true));\n\t\t\t\t});\n\n\t\t\t\t//subject is a HTML element of the column header\n\t\t\t\tlet match = columns.find((column) => {\n\t\t\t\t\treturn column.element === subject;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn match || false;\n\t\t\t}\n\t\t\t\n\t\t}else{\n\t\t\t//subject should be treated as the field name of the column\n\t\t\treturn this.columnsByField[subject] || false;\n\t\t}\n\t\t\n\t\t//catch all for any other type of input\n\t\treturn false;\n\t}\n\t\n\tgetColumnByField(field){\n\t\treturn this.columnsByField[field];\n\t}\n\t\n\tgetColumnsByFieldRoot(root){\n\t\tvar matches = [];\n\t\t\n\t\tObject.keys(this.columnsByField).forEach((field) => {\n\t\t\tvar fieldRoot = this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator)[0] : field;\n\t\t\tif(fieldRoot === root){\n\t\t\t\tmatches.push(this.columnsByField[field]);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn matches;\n\t}\n\t\n\tgetColumnByIndex(index){\n\t\treturn this.columnsByIndex[index];\n\t}\n\t\n\tgetFirstVisibleColumn(){\n\t\tvar index = this.columnsByIndex.findIndex((col) => {\n\t\t\treturn col.visible;\n\t\t});\n\t\t\n\t\treturn index > -1 ? this.columnsByIndex[index] : false;\n\t}\n\n\tgetVisibleColumnsByIndex() {\n\t\treturn this.columnsByIndex.filter((col) => col.visible);\n\t}\n\t\n\tgetColumns(){\n\t\treturn this.columns;\n\t}\n\t\n\tfindColumnIndex(column){\n\t\treturn this.columnsByIndex.findIndex((col) => {\n\t\t\treturn column === col;\n\t\t});\n\t}\n\t\n\t//return all columns that are not groups\n\tgetRealColumns(){\n\t\treturn this.columnsByIndex;\n\t}\n\t\n\t//traverse across columns and call action\n\ttraverse(callback){\n\t\tthis.columnsByIndex.forEach((column,i) =>{\n\t\t\tcallback(column, i);\n\t\t});\n\t}\n\t\n\t//get definitions of actual columns\n\tgetDefinitions(active){\n\t\tvar output = [];\n\t\t\n\t\tthis.columnsByIndex.forEach((column) => {\n\t\t\tif(!active || (active && column.visible)){\n\t\t\t\toutput.push(column.getDefinition());\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\t//get full nested definition tree\n\tgetDefinitionTree(){\n\t\tvar output = [];\n\t\t\n\t\tthis.columns.forEach((column) => {\n\t\t\toutput.push(column.getDefinition(true));\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetComponents(structured){\n\t\tvar output = [],\n\t\tcolumns = structured ? this.columns : this.columnsByIndex;\n\t\t\n\t\tcolumns.forEach((column) => {\n\t\t\toutput.push(column.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetWidth(){\n\t\tvar width = 0;\n\t\t\n\t\tthis.columnsByIndex.forEach((column) => {\n\t\t\tif(column.visible){\n\t\t\t\twidth += column.getWidth();\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn width;\n\t}\n\t\n\tmoveColumn(from, to, after){\n\t\tto.element.parentNode.insertBefore(from.element, to.element);\n\t\t\n\t\tif(after){\n\t\t\tto.element.parentNode.insertBefore(to.element, from.element);\n\t\t}\n\t\t\n\t\tthis.moveColumnActual(from, to, after);\n\n\t\tthis.verticalAlignHeaders();\n\t\t\n\t\tthis.table.rowManager.reinitialize();\n\t}\n\t\n\tmoveColumnActual(from, to, after){\n\t\tif(from.parent.isGroup){\n\t\t\tthis._moveColumnInArray(from.parent.columns, from, to, after);\n\t\t}else{\n\t\t\tthis._moveColumnInArray(this.columns, from, to, after);\n\t\t}\n\t\t\n\t\tthis._moveColumnInArray(this.columnsByIndex, from, to, after, true);\n\t\t\n\t\tthis.rerenderColumns(true);\n\t\t\n\t\tthis.dispatch(\"column-moved\", from, to, after);\n\t\t\n\t\tif(this.subscribedExternal(\"columnMoved\")){\n\t\t\tthis.dispatchExternal(\"columnMoved\", from.getComponent(), this.table.columnManager.getComponents());\n\t\t}\n\t}\n\t\n\t_moveColumnInArray(columns, from, to, after, updateRows){\n\t\tvar\tfromIndex = columns.indexOf(from),\n\t\ttoIndex, rows = [];\n\t\t\n\t\tif (fromIndex > -1) {\n\t\t\t\n\t\t\tcolumns.splice(fromIndex, 1);\n\t\t\t\n\t\t\ttoIndex = columns.indexOf(to);\n\t\t\t\n\t\t\tif (toIndex > -1) {\n\t\t\t\t\n\t\t\t\tif(after){\n\t\t\t\t\ttoIndex = toIndex+1;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\ttoIndex = fromIndex;\n\t\t\t}\n\t\t\t\n\t\t\tcolumns.splice(toIndex, 0, from);\n\t\t\t\n\t\t\tif(updateRows){\n\t\t\t\t\n\t\t\t\trows = this.chain(\"column-moving-rows\", [from, to, after], null, []) || [];\n\t\t\t\t\n\t\t\t\trows = rows.concat(this.table.rowManager.rows);\n\t\t\t\t\n\t\t\t\trows.forEach(function(row){\n\t\t\t\t\tif(row.cells.length){\n\t\t\t\t\t\tvar cell = row.cells.splice(fromIndex, 1)[0];\n\t\t\t\t\t\trow.cells.splice(toIndex, 0, cell);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t}\n\t\n\tscrollToColumn(column, position, ifVisible){\n\t\tvar left = 0,\n\t\toffset = column.getLeftOffset(),\n\t\tadjust = 0,\n\t\tcolEl = column.getElement();\n\t\t\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t\n\t\t\tif(typeof position === \"undefined\"){\n\t\t\t\tposition = this.table.options.scrollToColumnPosition;\n\t\t\t}\n\t\t\t\n\t\t\tif(typeof ifVisible === \"undefined\"){\n\t\t\t\tifVisible = this.table.options.scrollToColumnIfVisible;\n\t\t\t}\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\t\n\t\t\t\t//align to correct position\n\t\t\t\tswitch(position){\n\t\t\t\t\tcase \"middle\":\n\t\t\t\t\tcase \"center\":\n\t\t\t\t\t\tadjust = -this.element.clientWidth / 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"right\":\n\t\t\t\t\t\tadjust = colEl.clientWidth - this.headersElement.clientWidth;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//check column visibility\n\t\t\t\tif(!ifVisible){\n\t\t\t\t\tif(offset > 0 && offset + colEl.offsetWidth < this.element.clientWidth){\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//calculate scroll position\n\t\t\t\tleft = offset + adjust;\n\t\t\t\t\n\t\t\t\tleft = Math.max(Math.min(left, this.table.rowManager.element.scrollWidth - this.table.rowManager.element.clientWidth),0);\n\t\t\t\t\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\t\t\t\tthis.scrollHorizontal(left);\n\t\t\t\t\n\t\t\t\tresolve();\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Scroll Error - Column not visible\");\n\t\t\t\treject(\"Scroll Error - Column not visible\");\n\t\t\t}\n\t\t\t\n\t\t});\n\t}\n\t\n\t//////////////// Cell Management /////////////////\n\tgenerateCells(row){\n\t\tvar cells = [];\n\t\t\n\t\tthis.columnsByIndex.forEach((column) => {\n\t\t\tcells.push(column.generateCell(row));\n\t\t});\n\t\t\n\t\treturn cells;\n\t}\n\t\n\t//////////////// Column Management /////////////////\n\tgetFlexBaseWidth(){\n\t\tvar totalWidth = this.table.element.clientWidth, //table element width\n\t\tfixedWidth = 0;\n\t\t\n\t\t//adjust for vertical scrollbar if present\n\t\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\n\t\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\n\t\t}\n\t\t\n\t\tthis.columnsByIndex.forEach(function(column){\n\t\t\tvar width, minWidth, colWidth;\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\t\n\t\t\t\twidth = column.definition.width || 0;\n\t\t\t\t\n\t\t\t\tminWidth = parseInt(column.minWidth);\n\t\t\t\t\n\t\t\t\tif(typeof(width) == \"string\"){\n\t\t\t\t\tif(width.indexOf(\"%\") > -1){\n\t\t\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width) ;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tcolWidth = parseInt(width);\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tcolWidth = width;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\n\t\t\t\t\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn fixedWidth;\n\t}\n\t\n\taddColumn(definition, before, nextToColumn){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tvar column = this._addColumn(definition, before, nextToColumn);\n\t\t\t\n\t\t\tthis._reIndexColumns();\n\t\t\t\n\t\t\tthis.dispatch(\"column-add\", definition, before, nextToColumn);\n\t\t\t\n\t\t\tif(this.layoutMode() != \"fitColumns\"){\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t}\n\t\t\t\n\t\t\tthis.redraw(true);\n\t\t\t\n\t\t\tthis.table.rowManager.reinitialize();\n\t\t\t\n\t\t\tthis.rerenderColumns();\n\t\t\t\n\t\t\tresolve(column);\n\t\t});\n\t}\n\t\n\t//remove column from system\n\tderegisterColumn(column){\n\t\tvar field = column.getField(),\n\t\tindex;\n\t\t\n\t\t//remove from field list\n\t\tif(field){\n\t\t\tdelete this.columnsByField[field];\n\t\t}\n\t\t\n\t\t//remove from index list\n\t\tindex = this.columnsByIndex.indexOf(column);\n\t\t\n\t\tif(index > -1){\n\t\t\tthis.columnsByIndex.splice(index, 1);\n\t\t}\n\t\t\n\t\t//remove from column list\n\t\tindex = this.columns.indexOf(column);\n\t\t\n\t\tif(index > -1){\n\t\t\tthis.columns.splice(index, 1);\n\t\t}\n\t\t\n\t\tthis.verticalAlignHeaders();\n\t\t\n\t\tthis.redraw();\n\t}\n\t\n\trerenderColumns(update, silent){\n\t\tif(!this.redrawBlock){\n\t\t\tthis.renderer.rerenderColumns(update, silent);\n\t\t}else{\n\t\t\tif(update === false || (update === true && this.redrawBlockUpdate === null)){\n\t\t\t\tthis.redrawBlockUpdate = update;\n\t\t\t}\n\t\t}\n\t}\n\t\n\tblockRedraw(){\n\t\tthis.redrawBlock = true;\n\t\tthis.redrawBlockUpdate = null;\n\t}\n\t\n\trestoreRedraw(){\n\t\tthis.redrawBlock = false;\n\t\tthis.verticalAlignHeaders();\n\t\tthis.renderer.rerenderColumns(this.redrawBlockUpdate);\n\t\t\n\t}\n\t\n\t//redraw columns\n\tredraw(force){\n\t\tif(Helpers.elVisible(this.element)){\n\t\t\tthis.verticalAlignHeaders();\n\t\t}\n\t\t\n\t\tif(force){\n\t\t\tthis.table.rowManager.resetScroll();\n\t\t\tthis.table.rowManager.reinitialize();\n\t\t}\n\t\t\n\t\tif(!this.confirm(\"table-redrawing\", force)){\n\t\t\tthis.layoutRefresh(force);\n\t\t}\n\t\t\n\t\tthis.dispatch(\"table-redraw\", force);\n\t\t\n\t\tthis.table.footerManager.redraw();\n\t}\n}","//public row object\nexport default class RowComponent {\n\n\tconstructor (row){\n\t\tthis._row = row;\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetData(transform){\n\t\treturn this._row.getData(transform);\n\t}\n\n\tgetElement(){\n\t\treturn this._row.getElement();\n\t}\n\n\tgetCells(){\n\t\tvar cells = [];\n\n\t\tthis._row.getCells().forEach(function(cell){\n\t\t\tcells.push(cell.getComponent());\n\t\t});\n\n\t\treturn cells;\n\t}\n\n\tgetCell(column){\n\t\tvar cell = this._row.getCell(column);\n\t\treturn cell ? cell.getComponent() : false;\n\t}\n\n\tgetIndex(){\n\t\treturn this._row.getData(\"data\")[this._row.table.options.index];\n\t}\n\n\tgetPosition(){\n\t\treturn this._row.getPosition();\n\t}\n\n\twatchPosition(callback){\n\t\treturn this._row.watchPosition(callback);\n\t}\n\n\tdelete(){\n\t\treturn this._row.delete();\n\t}\n\n\tscrollTo(position, ifVisible){\n\t\treturn this._row.table.rowManager.scrollToRow(this._row, position, ifVisible);\n\t}\n\n\tmove(to, after){\n\t\tthis._row.moveToRow(to, after);\n\t}\n\n\tupdate(data){\n\t\treturn this._row.updateData(data);\n\t}\n\n\tnormalizeHeight(){\n\t\tthis._row.normalizeHeight(true);\n\t}\n\n\t_getSelf(){\n\t\treturn this._row;\n\t}\n\n\treformat(){\n\t\treturn this._row.reinitialize();\n\t}\n\n\tgetTable(){\n\t\treturn this._row.table;\n\t}\n\n\tgetNextRow(){\n\t\tvar row = this._row.nextRow();\n\t\treturn row ? row.getComponent() : row;\n\t}\n\n\tgetPrevRow(){\n\t\tvar row = this._row.prevRow();\n\t\treturn row ? row.getComponent() : row;\n\t}\n}","import CoreFeature from '../CoreFeature.js';\nimport RowComponent from './RowComponent.js';\nimport Helpers from '../tools/Helpers.js';\n\nexport default class Row extends CoreFeature{\n\tconstructor (data, parent, type = \"row\"){\n\t\tsuper(parent.table);\n\t\t\n\t\tthis.parent = parent;\n\t\tthis.data = {};\n\t\tthis.type = type; //type of element\n\t\tthis.element = false;\n\t\tthis.modules = {}; //hold module variables;\n\t\tthis.cells = [];\n\t\tthis.height = 0; //hold element height\n\t\tthis.heightStyled = \"\"; //hold element height pre-styled to improve render efficiency\n\t\tthis.manualHeight = false; //user has manually set row height\n\t\tthis.outerHeight = 0; //hold elements outer height\n\t\tthis.initialized = false; //element has been rendered\n\t\tthis.heightInitialized = false; //element has resized cells to fit\n\t\tthis.position = 0; //store position of element in row list\n\t\tthis.positionWatchers = [];\n\t\t\n\t\tthis.component = null;\n\t\t\n\t\tthis.created = false;\n\t\t\n\t\tthis.setData(data);\n\t}\n\t\n\tcreate(){\n\t\tif(!this.created){\n\t\t\tthis.created = true;\n\t\t\tthis.generateElement();\n\t\t}\n\t}\n\t\n\tcreateElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-row\");\n\t\tel.setAttribute(\"role\", \"row\");\n\t\t\n\t\tthis.element = el;\n\t}\n\t\n\tgetElement(){\n\t\tthis.create();\n\t\treturn this.element;\n\t}\n\t\n\tdetachElement(){\n\t\tif (this.element && this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\t}\n\t\n\tgenerateElement(){\n\t\tthis.createElement();\n\t\tthis.dispatch(\"row-init\", this);\n\t}\n\t\n\tgenerateCells(){\n\t\tthis.cells = this.table.columnManager.generateCells(this);\n\t}\n\t\n\t//functions to setup on first render\n\tinitialize(force, inFragment){\n\t\tthis.create();\n\t\t\n\t\tif(!this.initialized || force){\n\t\t\t\n\t\t\tthis.deleteCells();\n\t\t\t\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\t\t\t\n\t\t\tthis.dispatch(\"row-layout-before\", this);\n\t\t\t\n\t\t\tthis.generateCells();\n\t\t\t\n\t\t\tthis.initialized = true;\n\t\t\t\n\t\t\tthis.table.columnManager.renderer.renderRowCells(this, inFragment);\n\t\t\t\n\t\t\tif(force){\n\t\t\t\tthis.normalizeHeight();\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-layout\", this);\n\t\t\t\n\t\t\tif(this.table.options.rowFormatter){\n\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-layout-after\", this);\n\t\t}else{\n\t\t\tthis.table.columnManager.renderer.rerenderRowCells(this, inFragment);\n\t\t}\n\t}\n\n\trendered(){\n\t\tthis.cells.forEach((cell) => {\n\t\t\tcell.cellRendered();\n\t\t});\n\t}\n\t\n\treinitializeHeight(){\n\t\tthis.heightInitialized = false;\n\t\t\n\t\tif(this.element && this.element.offsetParent !== null){\n\t\t\tthis.normalizeHeight(true);\n\t\t}\n\t}\n\n\tdeinitialize(){\n\t\tthis.initialized = false;\n\t}\n\t\n\tdeinitializeHeight(){\n\t\tthis.heightInitialized = false;\n\t}\n\t\n\treinitialize(children){\n\t\tthis.initialized = false;\n\t\tthis.heightInitialized = false;\n\t\t\n\t\tif(!this.manualHeight){\n\t\t\tthis.height = 0;\n\t\t\tthis.heightStyled = \"\";\n\t\t}\n\t\t\n\t\tif(this.element && this.element.offsetParent !== null){\n\t\t\tthis.initialize(true);\n\t\t}\n\t\t\n\t\tthis.dispatch(\"row-relayout\", this);\n\t}\n\t\n\t//get heights when doing bulk row style calcs in virtual DOM\n\tcalcHeight(force){\n\t\tvar maxHeight = 0,\n\t\tminHeight;\n\t\t\n\t\tif(this.table.options.rowHeight){\n\t\t\tthis.height = this.table.options.rowHeight;\n\t\t}else{\n\t\t\tminHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;\n\t\t\t\n\t\t\tthis.cells.forEach(function(cell){\n\t\t\t\tvar height = cell.getHeight();\n\t\t\t\tif(height > maxHeight){\n\t\t\t\t\tmaxHeight = height;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(force){\n\t\t\t\tthis.height = Math.max(maxHeight, minHeight);\n\t\t\t}else{\n\t\t\t\tthis.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.heightStyled = this.height ? this.height + \"px\" : \"\";\n\t\tthis.outerHeight = this.element.offsetHeight;\n\t}\n\t\n\t//set of cells\n\tsetCellHeight(){\n\t\tthis.cells.forEach(function(cell){\n\t\t\tcell.setHeight();\n\t\t});\n\t\t\n\t\tthis.heightInitialized = true;\n\t}\n\t\n\tclearCellHeight(){\n\t\tthis.cells.forEach(function(cell){\n\t\t\tcell.clearHeight();\n\t\t});\n\t}\n\t\n\t//normalize the height of elements in the row\n\tnormalizeHeight(force){\n\t\tif(force && !this.table.options.rowHeight){\n\t\t\tthis.clearCellHeight();\n\t\t}\n\t\t\n\t\tthis.calcHeight(force);\n\t\t\n\t\tthis.setCellHeight();\n\t}\n\t\n\t//set height of rows\n\tsetHeight(height, force){\n\t\tif(this.height != height || force){\n\t\t\t\n\t\t\tthis.manualHeight = true;\n\t\t\t\n\t\t\tthis.height = height;\n\t\t\tthis.heightStyled = height ? height + \"px\" : \"\";\n\t\t\t\n\t\t\tthis.setCellHeight();\n\t\t\t\n\t\t\t// this.outerHeight = this.element.outerHeight();\n\t\t\tthis.outerHeight = this.element.offsetHeight;\n\t\t}\n\t}\n\t\n\t//return rows outer height\n\tgetHeight(){\n\t\treturn this.outerHeight;\n\t}\n\t\n\t//return rows outer Width\n\tgetWidth(){\n\t\treturn this.element.offsetWidth;\n\t}\n\t\n\t//////////////// Cell Management /////////////////\n\tdeleteCell(cell){\n\t\tvar index = this.cells.indexOf(cell);\n\t\t\n\t\tif(index > -1){\n\t\t\tthis.cells.splice(index, 1);\n\t\t}\n\t}\n\t\n\t//////////////// Data Management /////////////////\n\tsetData(data){\n\t\tthis.data = this.chain(\"row-data-init-before\", [this, data], undefined, data);\n\t\t\n\t\tthis.dispatch(\"row-data-init-after\", this);\n\t}\n\t\n\t//update the rows data\n\tupdateData(updatedData){\n\t\tvar visible = this.element && Helpers.elVisible(this.element),\n\t\ttempData = {},\n\t\tnewRowData;\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t\n\t\t\tif(typeof updatedData === \"string\"){\n\t\t\t\tupdatedData = JSON.parse(updatedData);\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-data-save-before\", this);\n\t\t\t\n\t\t\tif(this.subscribed(\"row-data-changing\")){\n\t\t\t\ttempData = Object.assign(tempData, this.data);\n\t\t\t\ttempData = Object.assign(tempData, updatedData);\n\t\t\t}\n\t\t\t\n\t\t\tnewRowData = this.chain(\"row-data-changing\", [this, tempData, updatedData], null, updatedData);\n\t\t\t\n\t\t\t//set data\n\t\t\tfor (let attrname in newRowData) {\n\t\t\t\tthis.data[attrname] = newRowData[attrname];\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-data-save-after\", this);\n\t\t\t\n\t\t\t//update affected cells only\n\t\t\tfor (let attrname in updatedData) {\n\t\t\t\t\n\t\t\t\tlet columns = this.table.columnManager.getColumnsByFieldRoot(attrname);\n\t\t\t\t\n\t\t\t\tcolumns.forEach((column) => {\n\t\t\t\t\tlet cell = this.getCell(column.getField());\n\t\t\t\t\t\n\t\t\t\t\tif(cell){\n\t\t\t\t\t\tlet value = column.getFieldValue(newRowData);\n\t\t\t\t\t\tif(cell.getValue() !== value){\n\t\t\t\t\t\t\tcell.setValueProcessData(value);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(visible){\n\t\t\t\t\t\t\t\tcell.cellRendered();\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\t\n\t\t\t//Partial reinitialization if visible\n\t\t\tif(visible){\n\t\t\t\tthis.normalizeHeight(true);\n\t\t\t\t\n\t\t\t\tif(this.table.options.rowFormatter){\n\t\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.initialized = false;\n\t\t\t\tthis.height = 0;\n\t\t\t\tthis.heightStyled = \"\";\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"row-data-changed\", this, visible, updatedData);\n\t\t\t\n\t\t\t//this.reinitialize();\n\t\t\t\n\t\t\tthis.dispatchExternal(\"rowUpdated\", this.getComponent());\n\t\t\t\n\t\t\tif(this.subscribedExternal(\"dataChanged\")){\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\n\t\t\t}\n\t\t\t\n\t\t\tresolve();\n\t\t});\n\t}\n\t\n\tgetData(transform){\n\t\tif(transform){\n\t\t\treturn this.chain(\"row-data-retrieve\", [this, transform], null, this.data);\n\t\t}\n\t\t\n\t\treturn this.data;\n\t}\n\t\n\tgetCell(column){\n\t\tvar match = false;\n\t\t\n\t\tcolumn = this.table.columnManager.findColumn(column);\n\t\t\n\t\tif(!this.initialized && this.cells.length === 0){\n\t\t\tthis.generateCells();\n\t\t}\n\t\t\n\t\tmatch = this.cells.find(function(cell){\n\t\t\treturn cell.column === column;\n\t\t});\n\t\t\n\t\treturn match;\n\t}\n\t\n\tgetCellIndex(findCell){\n\t\treturn this.cells.findIndex(function(cell){\n\t\t\treturn cell === findCell;\n\t\t});\n\t}\n\t\n\tfindCell(subject){\n\t\treturn this.cells.find((cell) => {\n\t\t\treturn cell.element === subject;\n\t\t});\n\t}\n\t\n\tgetCells(){\n\t\tif(!this.initialized && this.cells.length === 0){\n\t\t\tthis.generateCells();\n\t\t}\n\t\t\n\t\treturn this.cells;\n\t}\n\t\n\tnextRow(){\n\t\tvar row = this.table.rowManager.nextDisplayRow(this, true);\n\t\treturn row || false;\n\t}\n\t\n\tprevRow(){\n\t\tvar row = this.table.rowManager.prevDisplayRow(this, true);\n\t\treturn row || false;\n\t}\n\t\n\tmoveToRow(to, before){\n\t\tvar toRow = this.table.rowManager.findRow(to);\n\t\t\n\t\tif(toRow){\n\t\t\tthis.table.rowManager.moveRowActual(this, toRow, !before);\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\", false, true);\n\t\t}else{\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", to);\n\t\t}\n\t}\n\t\n\t///////////////////// Actions /////////////////////\n\tdelete(){\n\t\tthis.dispatch(\"row-delete\", this);\n\t\t\n\t\tthis.deleteActual();\n\t\t\n\t\treturn Promise.resolve();\n\t}\n\t\n\tdeleteActual(blockRedraw){\n\t\tthis.detachModules();\n\t\t\n\t\tthis.table.rowManager.deleteRow(this, blockRedraw);\n\t\t\n\t\tthis.deleteCells();\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.heightInitialized = false;\n\t\tthis.element = false;\n\t\t\n\t\tthis.dispatch(\"row-deleted\", this);\n\t}\n\t\n\tdetachModules(){\n\t\tthis.dispatch(\"row-deleting\", this);\n\t}\n\t\n\tdeleteCells(){\n\t\tvar cellCount = this.cells.length;\n\t\t\n\t\tfor(let i = 0; i < cellCount; i++){\n\t\t\tthis.cells[0].delete();\n\t\t}\n\t}\n\t\n\twipe(){\n\t\tthis.detachModules();\n\t\tthis.deleteCells();\n\t\t\n\t\tif(this.element){\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\t\t\t\n\t\t\tif(this.element.parentNode){\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.element = false;\n\t\tthis.modules = {};\n\t}\n\n\tisDisplayed(){\n\t\treturn this.table.rowManager.getDisplayRows().includes(this);\n\t}\n\n\tgetPosition(){\n\t\treturn this.isDisplayed() ? this.position : false;\n\t}\n\n\tsetPosition(position){\n\t\tif(position != this.position){\n\t\t\tthis.position = position;\n\n\t\t\tthis.positionWatchers.forEach((callback) => {\n\t\t\t\tcallback(this.position);\n\t\t\t});\n\t\t}\n\t}\n\n\twatchPosition(callback){\n\t\tthis.positionWatchers.push(callback);\n\n\t\tcallback(this.position);\n\t}\n\t\n\tgetGroup(){\n\t\treturn this.modules.group || false;\n\t}\n\t\n\t//////////////// Object Generation /////////////////\n\tgetComponent(){\n\t\tif(!this.component){\n\t\t\tthis.component = new RowComponent(this);\n\t\t}\n\t\t\n\t\treturn this.component;\n\t}\n}\n","import Renderer from '../Renderer.js';\nimport Helpers from '../../tools/Helpers.js';\n\nexport default class BasicVertical extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.verticalFillMode = \"fill\";\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t}\n\t\n\tclearRows(){\n\t\tvar element = this.tableElement;\n\t\t\n\t\t// element.children.detach();\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\t\n\t\telement.scrollTop = 0;\n\t\telement.scrollLeft = 0;\n\t\t\n\t\telement.style.minWidth = \"\";\n\t\telement.style.minHeight = \"\";\n\t\telement.style.display = \"\";\n\t\telement.style.visibility = \"\";\n\t}\n\t\n\trenderRows() {\n\t\tvar element = this.tableElement,\n\t\tonlyGroupHeaders = true,\n\t\ttableFrag = document.createDocumentFragment(),\n\t\trows = this.rows();\n\t\t\n\t\trows.forEach((row, index) => {\n\t\t\tthis.styleRow(row, index);\n\t\t\trow.initialize(false, true);\n\t\t\t\n\t\t\tif (row.type !== \"group\") {\n\t\t\t\tonlyGroupHeaders = false;\n\t\t\t}\n\t\t\t\n\t\t\ttableFrag.appendChild(row.getElement());\n\t\t});\n\t\t\n\t\telement.appendChild(tableFrag);\n\t\t\n\t\trows.forEach((row) => {\n\t\t\trow.rendered();\n\t\t\t\n\t\t\tif(!row.heightInitialized) {\n\t\t\t\trow.calcHeight(true);\n\t\t\t}\n\t\t});\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tif(!row.heightInitialized) {\n\t\t\t\trow.setCellHeight();\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(onlyGroupHeaders){\n\t\t\telement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\n\t\t}else{\n\t\t\telement.style.minWidth = \"\";\n\t\t}\n\t}\n\t\n\t\n\trerenderRows(callback){\t\n\t\tthis.clearRows();\n\t\t\n\t\tif(callback){\n\t\t\tcallback();\n\t\t}\n\t\t\n\t\tthis.renderRows();\n\n\t\tif(!this.rows().length){\n\t\t\tthis.table.rowManager.tableEmpty();\n\t\t}\n\t}\n\t\n\tscrollToRowNearestTop(row){\n\t\tvar rowTop = Helpers.elOffset(row.getElement()).top;\n\t\t\n\t\treturn !(Math.abs(this.elementVertical.scrollTop - rowTop) > Math.abs(this.elementVertical.scrollTop + this.elementVertical.clientHeight - rowTop));\n\t}\n\t\n\tscrollToRow(row){\n\t\tvar rowEl = row.getElement();\n\t\t\n\t\tthis.elementVertical.scrollTop = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top + this.elementVertical.scrollTop;\n\t}\n\t\n\tvisibleRows(includingBuffer){\n\t\treturn this.rows();\n\t}\n\t\n}\n","import Renderer from '../Renderer.js';\nimport Helpers from '../../tools/Helpers.js';\n\nexport default class VirtualDomVertical extends Renderer{\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.verticalFillMode = \"fill\";\n\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\n\t\tthis.vDomRowHeight = 20; //approximation of row heights for padding\n\n\t\tthis.vDomTop = 0; //hold position for first rendered row in the virtual DOM\n\t\tthis.vDomBottom = 0; //hold position for last rendered row in the virtual DOM\n\n\t\tthis.vDomScrollPosTop = 0; //last scroll position of the vDom top;\n\t\tthis.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;\n\n\t\tthis.vDomTopPad = 0; //hold value of padding for top of virtual DOM\n\t\tthis.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM\n\n\t\tthis.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go\n\n\t\tthis.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling\n\n\t\tthis.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)\n\t\tthis.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin\n\n\t\tthis.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed\n\t\tthis.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed\n\t}\n\n\t//////////////////////////////////////\n\t///////// Public Functions ///////////\n\t//////////////////////////////////////\n\n\tclearRows(){\n\t\tvar element = this.tableElement;\n\n\t\t// element.children.detach();\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\n\t\telement.style.paddingTop = \"\";\n\t\telement.style.paddingBottom = \"\";\n\t\telement.style.minHeight = \"\";\n\t\telement.style.display = \"\";\n\t\telement.style.visibility = \"\";\n\n\t\tthis.elementVertical.scrollTop = 0;\n\t\tthis.elementVertical.scrollLeft = 0;\n\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\n\t\tthis.vDomTop = 0;\n\t\tthis.vDomBottom = 0;\n\t\tthis.vDomTopPad = 0;\n\t\tthis.vDomBottomPad = 0;\n\t\tthis.vDomScrollPosTop = 0;\n\t\tthis.vDomScrollPosBottom = 0;\n\t}\n\n\trenderRows(){\n\t\tthis._virtualRenderFill();\n\t}\n\n\trerenderRows(callback){\n\t\tvar scrollTop = this.elementVertical.scrollTop;\n\t\tvar topRow = false;\n\t\tvar topOffset = false;\n\n\t\tvar left = this.table.rowManager.scrollLeft;\n\n\t\tvar rows = this.rows();\n\n\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\n\n\t\t\tif(rows[i]){\n\t\t\t\tvar diff = scrollTop - rows[i].getElement().offsetTop;\n\n\t\t\t\tif(topOffset === false || Math.abs(diff) < topOffset){\n\t\t\t\t\ttopOffset = diff;\n\t\t\t\t\ttopRow = i;\n\t\t\t\t}else{\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\trows.forEach((row) => {\n\t\t\trow.deinitializeHeight();\n\t\t});\n\n\t\tif(callback){\n\t\t\tcallback();\n\t\t}\n\n\t\tif(this.rows().length){\n\t\t\tthis._virtualRenderFill((topRow === false ? this.rows.length - 1 : topRow), true, topOffset || 0);\n\t\t}else{\n\t\t\tthis.clear();\n\t\t\tthis.table.rowManager.tableEmpty();\n\t\t}\n\n\t\tthis.scrollColumns(left);\n\t}\n\n\tscrollColumns(left){\n\t\tthis.table.rowManager.scrollHorizontal(left);\n\t}\n\n\tscrollRows(top, dir){\n\t\tvar topDiff = top - this.vDomScrollPosTop;\n\t\tvar bottomDiff = top - this.vDomScrollPosBottom;\n\t\tvar margin = this.vDomWindowBuffer * 2;\n\t\tvar rows = this.rows();\n\n\t\tthis.scrollTop = top;\n\n\t\tif(-topDiff > margin || bottomDiff > margin){\n\t\t\t//if big scroll redraw table;\n\t\t\tvar left = this.table.rowManager.scrollLeft;\n\t\t\tthis._virtualRenderFill(Math.floor((this.elementVertical.scrollTop / this.elementVertical.scrollHeight) * rows.length));\n\t\t\tthis.scrollColumns(left);\n\t\t}else{\n\n\t\t\tif(dir){\n\t\t\t\t//scrolling up\n\t\t\t\tif(topDiff < 0){\n\t\t\t\t\tthis._addTopRow(rows, -topDiff);\n\t\t\t\t}\n\n\t\t\t\tif(bottomDiff < 0){\n\t\t\t\t\t//hide bottom row if needed\n\t\t\t\t\tif(this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer){\n\t\t\t\t\t\tthis._removeBottomRow(rows, -bottomDiff);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\n\t\t\t\tif(bottomDiff >= 0){\n\t\t\t\t\tthis._addBottomRow(rows, bottomDiff);\n\t\t\t\t}\n\n\t\t\t\t//scrolling down\n\t\t\t\tif(topDiff >= 0){\n\t\t\t\t\t//hide top row if needed\n\t\t\t\t\tif(this.scrollTop > this.vDomWindowBuffer){\n\t\t\t\t\t\tthis._removeTopRow(rows, topDiff);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.vDomScrollPosTop = this.scrollTop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tresize(){\n\t\tthis.vDomWindowBuffer = this.table.options.renderVerticalBuffer || this.elementVertical.clientHeight;\n\t}\n\n\tscrollToRowNearestTop(row){\n\t\tvar rowIndex = this.rows().indexOf(row);\n\n\t\treturn !(Math.abs(this.vDomTop - rowIndex) > Math.abs(this.vDomBottom - rowIndex));\n\t}\n\n\tscrollToRow(row){\n\t\tvar index = this.rows().indexOf(row);\n\n\t\tif(index > -1){\n\t\t\tthis._virtualRenderFill(index, true);\n\t\t}\n\t}\n\n\tvisibleRows(includingBuffer){\n\t\tvar topEdge = this.elementVertical.scrollTop,\n\t\tbottomEdge = this.elementVertical.clientHeight + topEdge,\n\t\ttopFound = false,\n\t\ttopRow = 0,\n\t\tbottomRow = 0,\n\t\trows = this.rows();\n\n\t\tif(includingBuffer){\n\t\t\ttopRow = this.vDomTop;\n\t\t\tbottomRow = this.vDomBottom;\n\t\t}else{\n\t\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\n\t\t\t\tif(rows[i]){\n\t\t\t\t\tif(!topFound){\n\t\t\t\t\t\tif((topEdge - rows[i].getElement().offsetTop) >= 0){\n\t\t\t\t\t\t\ttopRow = i;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\ttopFound = true;\n\n\t\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\n\t\t\t\t\t\t\t\tbottomRow = i;\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tbreak;\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(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}\n\t\t\t}\n\t\t}\n\n\t\treturn rows.slice(topRow, bottomRow + 1);\n\t}\n\n\t//////////////////////////////////////\n\t//////// Internal Rendering //////////\n\t//////////////////////////////////////\n\n\t//full virtual render\n\t_virtualRenderFill(position, forceMove, offset) {\n\t\tvar\telement = this.tableElement,\n\t\tholder = this.elementVertical,\n\t\ttopPad = 0,\n\t\trowsHeight = 0,\n\t\trowHeight = 0,\n\t\theightOccupied = 0,\n\t\ttopPadHeight = 0,\n\t\ti = 0,\n\t\trows = this.rows(),\n\t\trowsCount = rows.length,\n\t\tindex = 0,\n\t\trow,\n\t\trowFragment,\n\t\trenderedRows = [],\n\t\ttotalRowsRendered = 0,\n\t\trowsToRender = 0,\n\t\tfixedHeight = this.table.rowManager.fixedHeight,\n\t\tcontainerHeight = this.elementVertical.clientHeight, \n\t\tavgRowHeight = this.table.options.rowHeight, \n\t\tresized = true;\n\n\t\tposition = position || 0;\n\n\t\toffset = offset || 0;\n\n\t\tif(!position){\n\t\t\tthis.clear();\n\t\t}else {\n\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\n\t\t\t//check if position is too close to bottom of table\n\t\t\theightOccupied = (rowsCount - position + 1) * this.vDomRowHeight;\n\n\t\t\tif(heightOccupied < containerHeight){\n\t\t\t\tposition -= Math.ceil((containerHeight - heightOccupied) / this.vDomRowHeight);\n\t\t\t\tif(position < 0){\n\t\t\t\t\tposition = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//calculate initial pad\n\t\t\ttopPad = Math.min(Math.max(Math.floor(this.vDomWindowBuffer / this.vDomRowHeight), this.vDomWindowMinMarginRows), position);\n\t\t\tposition -= topPad;\n\t\t}\n\n\t\tif(rowsCount && Helpers.elVisible(this.elementVertical)){\n\t\t\tthis.vDomTop = position;\n\t\t\tthis.vDomBottom = position -1;\n\n\t\t\tif(fixedHeight || this.table.options.maxHeight) {\n\t\t\t\tif(avgRowHeight) {\n\t\t\t\t\trowsToRender = (containerHeight / avgRowHeight) + (this.vDomWindowBuffer / avgRowHeight);\n\t\t\t\t}\n\t\t\t\trowsToRender = Math.max(this.vDomWindowMinTotalRows, Math.ceil(rowsToRender));\n\t\t\t}\n\t\t\telse {\n\t\t\t\trowsToRender = rowsCount;\n\t\t\t}\n\n\t\t\twhile(((rowsToRender == rowsCount || rowsHeight <= containerHeight + this.vDomWindowBuffer) || totalRowsRendered < this.vDomWindowMinTotalRows) && this.vDomBottom < rowsCount -1) {\n\t\t\t\trenderedRows = [];\n\t\t\t\trowFragment = document.createDocumentFragment();\n\n\t\t\t\ti = 0;\n\n\t\t\t\twhile ((i < rowsToRender) && this.vDomBottom < rowsCount -1) {\t\n\t\t\t\t\tindex = this.vDomBottom + 1,\n\t\t\t\t\trow = rows[index];\n\n\t\t\t\t\tthis.styleRow(row, index);\n\n\t\t\t\t\trow.initialize(false, true);\n\t\t\t\t\tif(!row.heightInitialized && !this.table.options.rowHeight){\n\t\t\t\t\t\trow.clearCellHeight();\n\t\t\t\t\t}\n\n\t\t\t\t\trowFragment.appendChild(row.getElement());\n\t\t\t\t\trenderedRows.push(row);\n\t\t\t\t\tthis.vDomBottom ++;\n\t\t\t\t\ti++;\n\t\t\t\t}\n\n\t\t\t\tif(!renderedRows.length){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\telement.appendChild(rowFragment);\n\t\t\t\t\n\t\t\t\t// NOTE: The next 3 loops are separate on purpose\n\t\t\t\t// This is to batch up the dom writes and reads which drastically improves performance \n\n\t\t\t\trenderedRows.forEach((row) => {\n\t\t\t\t\trow.rendered();\n\n\t\t\t\t\tif(!row.heightInitialized) {\n\t\t\t\t\t\trow.calcHeight(true);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\trenderedRows.forEach((row) => {\n\t\t\t\t\tif(!row.heightInitialized) {\n\t\t\t\t\t\trow.setCellHeight();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\trenderedRows.forEach((row) => {\n\t\t\t\t\trowHeight = row.getHeight();\n\t\t\t\t\t\n\t\t\t\t\tif(totalRowsRendered < topPad){\n\t\t\t\t\t\ttopPadHeight += rowHeight;\n\t\t\t\t\t}else {\n\t\t\t\t\t\trowsHeight += rowHeight;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\n\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\n\t\t\t\t\t}\n\t\t\t\t\ttotalRowsRendered++;\n\t\t\t\t});\n\n\t\t\t\tresized = this.table.rowManager.adjustTableSize();\n\t\t\t\tcontainerHeight = this.elementVertical.clientHeight;\n\t\t\t\tif(resized && (fixedHeight || this.table.options.maxHeight))\n\t\t\t\t{\n\t\t\t\t\tavgRowHeight = rowsHeight / totalRowsRendered;\n\t\t\t\t\trowsToRender = Math.max(this.vDomWindowMinTotalRows, Math.ceil((containerHeight / avgRowHeight) + (this.vDomWindowBuffer / avgRowHeight)));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!position){\n\t\t\t\tthis.vDomTopPad = 0;\n\t\t\t\t//adjust row height to match average of rendered elements\n\t\t\t\tthis.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / totalRowsRendered);\n\t\t\t\tthis.vDomBottomPad = this.vDomRowHeight * (rowsCount - this.vDomBottom -1);\n\n\t\t\t\tthis.vDomScrollHeight = topPadHeight + rowsHeight + this.vDomBottomPad - containerHeight;\n\t\t\t}else {\n\t\t\t\tthis.vDomTopPad = !forceMove ? this.scrollTop - topPadHeight : (this.vDomRowHeight * this.vDomTop) + offset;\n\t\t\t\tthis.vDomBottomPad = this.vDomBottom == rowsCount-1 ? 0 : Math.max(this.vDomScrollHeight - this.vDomTopPad - rowsHeight - topPadHeight, 0);\n\t\t\t}\n\t\t\t\n\t\t\telement.style.paddingTop = this.vDomTopPad+\"px\";\n\t\t\telement.style.paddingBottom = this.vDomBottomPad+\"px\";\n\n\t\t\tif(forceMove){\n\t\t\t\tthis.scrollTop = this.vDomTopPad + (topPadHeight) + offset - (this.elementVertical.scrollWidth > this.elementVertical.clientWidth ? this.elementVertical.offsetHeight - containerHeight : 0);\n\t\t\t}\n\n\t\t\tthis.scrollTop = Math.min(this.scrollTop, this.elementVertical.scrollHeight - containerHeight);\n\n\t\t\t//adjust for horizontal scrollbar if present (and not at top of table)\n\t\t\tif(this.elementVertical.scrollWidth > this.elementVertical.clientWidth && forceMove){\n\t\t\t\tthis.scrollTop += this.elementVertical.offsetHeight - containerHeight;\n\t\t\t}\n\n\t\t\tthis.vDomScrollPosTop = this.scrollTop;\n\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\n\n\t\t\tholder.scrollTop = this.scrollTop;\n\n\t\t\tthis.dispatch(\"render-virtual-fill\");\n\t\t}\n\t}\n\n\t_addTopRow(rows, fillableSpace){\n\t\tvar table = this.tableElement,\n\t\taddedRows = [],\n\t\tpaddingAdjust = 0,\n\t\tindex = this.vDomTop -1,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tif(this.vDomTop){\n\t\t\t\tlet row = rows[index],\n\t\t\t\trowHeight, initialized;\n\n\t\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\t\t\t\t\tinitialized = row.initialized;\n\n\t\t\t\t\tif(fillableSpace >= rowHeight){\n\n\t\t\t\t\t\tthis.styleRow(row, index);\n\t\t\t\t\t\ttable.insertBefore(row.getElement(), table.firstChild);\n\n\t\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\n\t\t\t\t\t\t\taddedRows.push(row);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trow.initialize();\n\n\t\t\t\t\t\tif(!initialized){\n\t\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\n\n\t\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\n\t\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\t\tthis.vDomTop--;\n\t\t\t\t\t\tindex--;\n\t\t\t\t\t\ti++;\n\n\t\t\t\t\t}else{\n\t\t\t\t\t\tworking = false;\n\t\t\t\t\t}\n\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\n\t\t\t}else{\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let row of addedRows){\n\t\t\trow.clearCellHeight();\n\t\t}\n\n\t\tthis._quickNormalizeRowHeight(addedRows);\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomTopPad -= paddingAdjust;\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 < 1){\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 -= paddingAdjust;\n\t\t}\n\t}\n\n\t_removeTopRow(rows, fillableSpace){\n\t\tvar removableRows = [],\n\t\tpaddingAdjust = 0,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet row = rows[this.vDomTop],\n\t\t\trowHeight;\n\n\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\n\t\t\t\tif(fillableSpace >= rowHeight){\n\t\t\t\t\tthis.vDomTop++;\n\n\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\tremovableRows.push(row);\n\t\t\t\t\ti++;\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\tfor (let row of removableRows){\n\t\t\tlet rowEl = row.getElement();\n\n\t\t\tif(rowEl.parentNode){\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t}\n\t\t}\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomTopPad += paddingAdjust;\n\t\t\tthis.tableElement.style.paddingTop = this.vDomTopPad + \"px\";\n\t\t\tthis.vDomScrollPosTop += this.vDomTop ? paddingAdjust : paddingAdjust + this.vDomWindowBuffer;\n\t\t}\n\t}\n\n\t_addBottomRow(rows, fillableSpace){\n\t\tvar table = this.tableElement,\n\t\taddedRows = [],\n\t\tpaddingAdjust = 0,\n\t\tindex = this.vDomBottom + 1,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet row = rows[index],\n\t\t\trowHeight, initialized;\n\n\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\t\t\t\tinitialized = row.initialized;\n\n\t\t\t\tif(fillableSpace >= rowHeight){\n\n\t\t\t\t\tthis.styleRow(row, index);\n\t\t\t\t\ttable.appendChild(row.getElement());\n\n\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\n\t\t\t\t\t\taddedRows.push(row);\n\t\t\t\t\t}\n\n\t\t\t\t\trow.initialize();\n\n\t\t\t\t\tif(!initialized){\n\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\n\n\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\n\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\tthis.vDomBottom++;\n\t\t\t\t\tindex++;\n\t\t\t\t\ti++;\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\tfor (let row of addedRows){\n\t\t\trow.clearCellHeight();\n\t\t}\n\n\t\tthis._quickNormalizeRowHeight(addedRows);\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomBottomPad -= paddingAdjust;\n\n\t\t\tif(this.vDomBottomPad < 0 || index == rows.length -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 += paddingAdjust;\n\t\t}\n\t}\n\n\t_removeBottomRow(rows, fillableSpace){\n\t\tvar removableRows = [],\n\t\tpaddingAdjust = 0,\n\t\ti = 0,\n\t\tworking = true;\n\n\t\twhile(working){\n\t\t\tlet row = rows[this.vDomBottom],\n\t\t\trowHeight;\n\n\t\t\tif(row && i < this.vDomMaxRenderChain){\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\n\n\t\t\t\tif(fillableSpace >= rowHeight){\n\t\t\t\t\tthis.vDomBottom --;\n\n\t\t\t\t\tfillableSpace -= rowHeight;\n\t\t\t\t\tpaddingAdjust += rowHeight;\n\n\t\t\t\t\tremovableRows.push(row);\n\t\t\t\t\ti++;\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\tfor (let row of removableRows){\n\t\t\tlet rowEl = row.getElement();\n\n\t\t\tif(rowEl.parentNode){\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t}\n\t\t}\n\n\t\tif(paddingAdjust){\n\t\t\tthis.vDomBottomPad += paddingAdjust;\n\n\t\t\tif(this.vDomBottomPad < 0){\n\t\t\t\tthis.vDomBottomPad = 0;\n\t\t\t}\n\n\t\t\tthis.tableElement.style.paddingBottom = this.vDomBottomPad + \"px\";\n\t\t\tthis.vDomScrollPosBottom -= paddingAdjust;\n\t\t}\n\t}\n\n\t_quickNormalizeRowHeight(rows){\n\t\tfor(let row of rows){\n\t\t\trow.calcHeight();\n\t\t}\n\n\t\tfor(let row of rows){\n\t\t\trow.setCellHeight();\n\t\t}\n\t}\n}\n","import CoreFeature from './CoreFeature.js';\nimport Row from './row/Row.js';\nimport RowComponent from './row/RowComponent.js';\nimport Helpers from './tools/Helpers.js';\n\nimport RendererBasicVertical from './rendering/renderers/BasicVertical.js';\nimport RendererVirtualDomVertical from './rendering/renderers/VirtualDomVertical.js';\n\nexport default class RowManager extends CoreFeature{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.element = this.createHolderElement(); //containing element\n\t\tthis.tableElement = this.createTableElement(); //table element\n\t\tthis.heightFixer = this.createTableElement(); //table element\n\t\tthis.placeholder = null; //placeholder element\n\t\tthis.placeholderContents = null; //placeholder element\n\t\t\n\t\tthis.firstRender = false; //handle first render\n\t\tthis.renderMode = \"virtual\"; //current rendering mode\n\t\tthis.fixedHeight = false; //current rendering mode\n\t\t\n\t\tthis.rows = []; //hold row data objects\n\t\tthis.activeRowsPipeline = []; //hold calculation of active rows\n\t\tthis.activeRows = []; //rows currently available to on display in the table\n\t\tthis.activeRowsCount = 0; //count of active rows\n\t\t\n\t\tthis.displayRows = []; //rows currently on display in the table\n\t\tthis.displayRowsCount = 0; //count of display rows\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t\t\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations before continuing\n\t\tthis.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed\n\t\tthis.redrawBlockRenderInPosition = false; //store latest redraw function calls for when redraw is needed\n\t\t\n\t\tthis.dataPipeline = []; //hold data pipeline tasks\n\t\tthis.displayPipeline = []; //hold data display pipeline tasks\n\t\t\n\t\tthis.scrollbarWidth = 0;\n\t\t\n\t\tthis.renderer = null;\n\t}\n\t\n\t//////////////// Setup Functions /////////////////\n\t\n\tcreateHolderElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-tableholder\");\n\t\tel.setAttribute(\"tabindex\", 0);\n\t\t// el.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\treturn el;\n\t}\n\t\n\tcreateTableElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-table\");\n\t\tel.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\treturn el;\n\t}\n\t\n\tinitializePlaceholder(){\n\t\tvar placeholder = this.table.options.placeholder;\n\t\t\n\t\tif(typeof placeholder === \"function\"){\n\t\t\tplaceholder = placeholder.call(this.table);\n\t\t}\n\t\t\n\t\tplaceholder = this.chain(\"placeholder\", [placeholder], placeholder, placeholder) || placeholder;\n\t\t\n\t\t//configure placeholder element\n\t\tif(placeholder){\t\n\t\t\tlet el = document.createElement(\"div\");\n\t\t\tel.classList.add(\"tabulator-placeholder\");\n\t\t\t\n\t\t\tif(typeof placeholder == \"string\"){\n\t\t\t\tlet contents = document.createElement(\"div\");\n\t\t\t\tcontents.classList.add(\"tabulator-placeholder-contents\");\n\t\t\t\tcontents.innerHTML = placeholder;\n\t\t\t\t\n\t\t\t\tel.appendChild(contents);\n\t\t\t\t\n\t\t\t\tthis.placeholderContents = contents;\n\t\t\t\t\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && placeholder instanceof HTMLElement){\n\t\t\t\t\n\t\t\t\tel.appendChild(placeholder);\n\t\t\t\tthis.placeholderContents = placeholder;\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Invalid placeholder provided, must be string or HTML Element\", placeholder);\n\t\t\t\t\n\t\t\t\tthis.el = null;\n\t\t\t}\n\t\t\t\n\t\t\tthis.placeholder = el;\n\t\t}\n\t}\n\t\n\t//return containing element\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\t\n\t//return table element\n\tgetTableElement(){\n\t\treturn this.tableElement;\n\t}\n\t\n\tinitialize(){\n\t\tthis.initializePlaceholder();\n\t\tthis.initializeRenderer();\n\t\t\n\t\t//initialize manager\n\t\tthis.element.appendChild(this.tableElement);\n\t\t\n\t\tthis.firstRender = true;\n\t\t\n\t\t//scroll header along with table body\n\t\tthis.element.addEventListener(\"scroll\", () => {\n\t\t\tvar left = this.element.scrollLeft,\n\t\t\tleftDir = this.scrollLeft > left,\n\t\t\ttop = this.element.scrollTop,\n\t\t\ttopDir = this.scrollTop > top;\n\t\t\t\n\t\t\t//handle horizontal scrolling\n\t\t\tif(this.scrollLeft != left){\n\t\t\t\tthis.scrollLeft = left;\n\t\t\t\t\n\t\t\t\tthis.dispatch(\"scroll-horizontal\", left, leftDir);\n\t\t\t\tthis.dispatchExternal(\"scrollHorizontal\", left, leftDir);\n\t\t\t\t\n\t\t\t\tthis._positionPlaceholder();\n\t\t\t}\n\t\t\t\n\t\t\t//handle vertical scrolling\n\t\t\tif(this.scrollTop != top){\n\t\t\t\tthis.scrollTop = top;\n\t\t\t\t\n\t\t\t\tthis.renderer.scrollRows(top, topDir);\n\t\t\t\t\n\t\t\t\tthis.dispatch(\"scroll-vertical\", top, topDir);\n\t\t\t\tthis.dispatchExternal(\"scrollVertical\", top, topDir);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t////////////////// Row Manipulation //////////////////\n\tfindRow(subject){\n\t\tif(typeof subject == \"object\"){\n\t\t\tif(subject instanceof Row){\n\t\t\t\t//subject is row element\n\t\t\t\treturn subject;\n\t\t\t}else if(subject instanceof RowComponent){\n\t\t\t\t//subject is public row component\n\t\t\t\treturn subject._getSelf() || false;\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\n\t\t\t\t//subject is a HTML element of the row\n\t\t\t\tlet match = this.rows.find((row) => {\n\t\t\t\t\treturn row.getElement() === subject;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn match || false;\n\t\t\t}else if(subject === null){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}else if(typeof subject == \"undefined\"){\n\t\t\treturn false;\n\t\t}else{\n\t\t\t//subject should be treated as the index of the row\n\t\t\tlet match = this.rows.find((row) => {\n\t\t\t\treturn row.data[this.table.options.index] == subject;\n\t\t\t});\n\t\t\t\n\t\t\treturn match || false;\n\t\t}\n\t\t\n\t\t//catch all for any other type of input\n\t\treturn false;\n\t}\n\t\n\tgetRowFromDataObject(data){\n\t\tvar match = this.rows.find((row) => {\n\t\t\treturn row.data === data;\n\t\t});\n\t\t\n\t\treturn match || false;\n\t}\n\t\n\tgetRowFromPosition(position){\n\t\treturn this.getDisplayRows().find((row) => {\n\t\t\treturn row.getPosition() === position && row.isDisplayed();\n\t\t});\n\t}\n\t\n\tscrollToRow(row, position, ifVisible){\n\t\treturn this.renderer.scrollToRowPosition(row, position, ifVisible);\n\t}\n\t\n\t////////////////// Data Handling //////////////////\n\tsetData(data, renderInPosition, columnsChanged){\n\t\treturn new Promise((resolve, reject)=>{\n\t\t\tif(renderInPosition && this.getDisplayRows().length){\n\t\t\t\tif(this.table.options.pagination){\n\t\t\t\t\tthis._setDataActual(data, true);\n\t\t\t\t}else{\n\t\t\t\t\tthis.reRenderInPosition(() => {\n\t\t\t\t\t\tthis._setDataActual(data);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(this.table.options.autoColumns && columnsChanged && this.table.initialized){\n\t\t\t\t\tthis.table.columnManager.generateColumnsFromRowData(data);\n\t\t\t\t}\n\t\t\t\tthis.resetScroll();\n\t\t\t\t\n\t\t\t\tthis._setDataActual(data);\n\t\t\t}\n\t\t\t\n\t\t\tresolve();\n\t\t});\n\t}\n\t\n\t_setDataActual(data, renderInPosition){\n\t\tthis.dispatchExternal(\"dataProcessing\", data);\n\t\t\n\t\tthis._wipeElements();\n\t\t\n\t\tif(Array.isArray(data)){\n\t\t\tthis.dispatch(\"data-processing\", data);\n\t\t\t\n\t\t\tdata.forEach((def, i) => {\n\t\t\t\tif(def && typeof def === \"object\"){\n\t\t\t\t\tvar row = new Row(def, this);\n\t\t\t\t\tthis.rows.push(row);\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Data Loading Warning - Invalid row data detected and ignored, expecting object but received:\", def);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tthis.refreshActiveData(false, false, renderInPosition);\n\t\t\t\n\t\t\tthis.dispatch(\"data-processed\", data);\n\t\t\tthis.dispatchExternal(\"dataProcessed\", data);\n\t\t}else{\n\t\t\tconsole.error(\"Data Loading Error - Unable to process data due to invalid data type \\nExpecting: array \\nReceived: \", typeof data, \"\\nData: \", data);\n\t\t}\n\t}\n\t\n\t_wipeElements(){\n\t\tthis.dispatch(\"rows-wipe\");\n\t\t\n\t\tthis.destroy();\n\t\t\n\t\tthis.adjustTableSize();\n\t\t\n\t\tthis.dispatch(\"rows-wiped\");\n\t}\n\t\n\tdestroy(){\n\t\tthis.rows.forEach((row) => {\n\t\t\trow.wipe();\n\t\t});\n\t\t\n\t\tthis.rows = [];\n\t\tthis.activeRows = [];\n\t\tthis.activeRowsPipeline = [];\n\t\tthis.activeRowsCount = 0;\n\t\tthis.displayRows = [];\n\t\tthis.displayRowsCount = 0;\n\t}\n\t\n\tdeleteRow(row, blockRedraw){\n\t\tvar allIndex = this.rows.indexOf(row),\n\t\tactiveIndex = this.activeRows.indexOf(row);\n\t\t\n\t\tif(activeIndex > -1){\n\t\t\tthis.activeRows.splice(activeIndex, 1);\n\t\t}\n\t\t\n\t\tif(allIndex > -1){\n\t\t\tthis.rows.splice(allIndex, 1);\n\t\t}\n\t\t\n\t\tthis.setActiveRows(this.activeRows);\n\t\t\n\t\tthis.displayRowIterator((rows) => {\n\t\t\tvar displayIndex = rows.indexOf(row);\n\t\t\t\n\t\t\tif(displayIndex > -1){\n\t\t\t\trows.splice(displayIndex, 1);\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(!blockRedraw){\n\t\t\tthis.reRenderInPosition();\n\t\t}\n\t\t\n\t\tthis.regenerateRowPositions();\n\t\t\n\t\tthis.dispatchExternal(\"rowDeleted\", row.getComponent());\n\t\t\n\t\tif(!this.displayRowsCount){\n\t\t\tthis.tableEmpty();\n\t\t}\n\t\t\n\t\tif(this.subscribedExternal(\"dataChanged\")){\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.getData());\n\t\t}\n\t}\n\t\n\taddRow(data, pos, index, blockRedraw){\n\t\tvar row = this.addRowActual(data, pos, index, blockRedraw);\n\t\treturn row;\n\t}\n\t\n\t//add multiple rows\n\taddRows(data, pos, index, refreshDisplayOnly){\n\t\tvar rows = [];\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tpos = this.findAddRowPos(pos);\n\t\t\t\n\t\t\tif(!Array.isArray(data)){\n\t\t\t\tdata = [data];\n\t\t\t}\n\t\t\t\n\t\t\tif((typeof index == \"undefined\" && pos) || (typeof index !== \"undefined\" && !pos)){\n\t\t\t\tdata.reverse();\n\t\t\t}\n\t\t\t\n\t\t\tdata.forEach((item, i) => {\n\t\t\t\tvar row = this.addRow(item, pos, index, true);\n\t\t\t\trows.push(row);\n\t\t\t\tthis.dispatch(\"row-added\", row, item, pos, index);\n\t\t\t});\n\t\t\t\n\t\t\tthis.refreshActiveData(refreshDisplayOnly ? \"displayPipeline\" : false, false, true);\n\t\t\t\n\t\t\tthis.regenerateRowPositions();\n\t\t\t\n\t\t\tif(this.displayRowsCount){\n\t\t\t\tthis._clearPlaceholder();\n\t\t\t}\n\t\t\t\n\t\t\tresolve(rows);\n\t\t});\n\t}\n\t\n\tfindAddRowPos(pos){\n\t\tif(typeof pos === \"undefined\"){\n\t\t\tpos = this.table.options.addRowPos;\n\t\t}\n\t\t\n\t\tif(pos === \"pos\"){\n\t\t\tpos = true;\n\t\t}\n\t\t\n\t\tif(pos === \"bottom\"){\n\t\t\tpos = false;\n\t\t}\n\t\t\n\t\treturn pos;\n\t}\n\t\n\taddRowActual(data, pos, index, blockRedraw){\n\t\tvar row = data instanceof Row ? data : new Row(data || {}, this),\n\t\ttop = this.findAddRowPos(pos),\n\t\tallIndex = -1,\n\t\tactiveIndex, chainResult;\n\t\t\n\t\tif(!index){\n\t\t\tchainResult = this.chain(\"row-adding-position\", [row, top], null, {index, top});\n\t\t\t\n\t\t\tindex = chainResult.index;\n\t\t\ttop = chainResult.top;\n\t\t}\n\t\t\n\t\tif(typeof index !== \"undefined\"){\n\t\t\tindex = this.findRow(index);\n\t\t}\n\t\t\n\t\tindex = this.chain(\"row-adding-index\", [row, index, top], null, index);\n\t\t\n\t\tif(index){\n\t\t\tallIndex = this.rows.indexOf(index);\n\t\t}\n\t\t\n\t\tif(index && allIndex > -1){\n\t\t\tactiveIndex = this.activeRows.indexOf(index);\n\t\t\t\n\t\t\tthis.displayRowIterator(function(rows){\n\t\t\t\tvar displayIndex = rows.indexOf(index);\n\t\t\t\t\n\t\t\t\tif(displayIndex > -1){\n\t\t\t\t\trows.splice((top ? displayIndex : displayIndex + 1), 0, row);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(activeIndex > -1){\n\t\t\t\tthis.activeRows.splice((top ? activeIndex : activeIndex + 1), 0, row);\n\t\t\t}\n\t\t\t\n\t\t\tthis.rows.splice((top ? allIndex : allIndex + 1), 0, row);\n\t\t\t\n\t\t}else{\n\t\t\t\n\t\t\tif(top){\n\t\t\t\t\n\t\t\t\tthis.displayRowIterator(function(rows){\n\t\t\t\t\trows.unshift(row);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.activeRows.unshift(row);\n\t\t\t\tthis.rows.unshift(row);\n\t\t\t}else{\n\t\t\t\tthis.displayRowIterator(function(rows){\n\t\t\t\t\trows.push(row);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.activeRows.push(row);\n\t\t\t\tthis.rows.push(row);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.setActiveRows(this.activeRows);\n\t\t\n\t\tthis.dispatchExternal(\"rowAdded\", row.getComponent());\n\t\t\n\t\tif(this.subscribedExternal(\"dataChanged\")){\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\n\t\t}\n\t\t\n\t\tif(!blockRedraw){\n\t\t\tthis.reRenderInPosition();\n\t\t}\n\t\t\n\t\treturn row;\n\t}\n\t\n\tmoveRow(from, to, after){\n\t\tthis.dispatch(\"row-move\", from, to, after);\n\t\t\n\t\tthis.moveRowActual(from, to, after);\n\t\t\n\t\tthis.regenerateRowPositions();\n\t\t\n\t\tthis.dispatch(\"row-moved\", from, to, after);\n\t\tthis.dispatchExternal(\"rowMoved\", from.getComponent());\n\t}\n\t\n\tmoveRowActual(from, to, after){\n\t\tthis.moveRowInArray(this.rows, from, to, after);\n\t\tthis.moveRowInArray(this.activeRows, from, to, after);\n\t\t\n\t\tthis.displayRowIterator((rows) => {\n\t\t\tthis.moveRowInArray(rows, from, to, after);\n\t\t});\n\t\t\n\t\tthis.dispatch(\"row-moving\", from, to, after);\n\t}\n\t\n\tmoveRowInArray(rows, from, to, after){\n\t\tvar\tfromIndex, toIndex, start, end;\n\t\t\n\t\tif(from !== to){\n\t\t\t\n\t\t\tfromIndex = rows.indexOf(from);\n\t\t\t\n\t\t\tif (fromIndex > -1) {\n\t\t\t\t\n\t\t\t\trows.splice(fromIndex, 1);\n\t\t\t\t\n\t\t\t\ttoIndex = rows.indexOf(to);\n\t\t\t\t\n\t\t\t\tif (toIndex > -1) {\n\t\t\t\t\t\n\t\t\t\t\tif(after){\n\t\t\t\t\t\trows.splice(toIndex+1, 0, from);\n\t\t\t\t\t}else{\n\t\t\t\t\t\trows.splice(toIndex, 0, from);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}else{\n\t\t\t\t\trows.splice(fromIndex, 0, from);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t//restyle rows\n\t\t\tif(rows === this.getDisplayRows()){\n\t\t\t\t\n\t\t\t\tstart = fromIndex < toIndex ? fromIndex : toIndex;\n\t\t\t\tend = toIndex > fromIndex ? toIndex : fromIndex +1;\n\t\t\t\t\n\t\t\t\tfor(let i = start; i <= end; i++){\n\t\t\t\t\tif(rows[i]){\n\t\t\t\t\t\tthis.styleRow(rows[i], i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tclearData(){\n\t\tthis.setData([]);\n\t}\n\t\n\tgetRowIndex(row){\n\t\treturn this.findRowIndex(row, this.rows);\n\t}\n\t\n\tgetDisplayRowIndex(row){\n\t\tvar index = this.getDisplayRows().indexOf(row);\n\t\treturn index > -1 ? index : false;\n\t}\n\t\n\tnextDisplayRow(row, rowOnly){\n\t\tvar index = this.getDisplayRowIndex(row),\n\t\tnextRow = false;\n\t\t\n\t\t\n\t\tif(index !== false && index < this.displayRowsCount -1){\n\t\t\tnextRow = this.getDisplayRows()[index+1];\n\t\t}\n\t\t\n\t\tif(nextRow && (!(nextRow instanceof Row) || nextRow.type != \"row\")){\n\t\t\treturn this.nextDisplayRow(nextRow, rowOnly);\n\t\t}\n\t\t\n\t\treturn nextRow;\n\t}\n\t\n\tprevDisplayRow(row, rowOnly){\n\t\tvar index = this.getDisplayRowIndex(row),\n\t\tprevRow = false;\n\t\t\n\t\tif(index){\n\t\t\tprevRow = this.getDisplayRows()[index-1];\n\t\t}\n\t\t\n\t\tif(rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != \"row\")){\n\t\t\treturn this.prevDisplayRow(prevRow, rowOnly);\n\t\t}\n\t\t\n\t\treturn prevRow;\n\t}\n\t\n\tfindRowIndex(row, list){\n\t\tvar rowIndex;\n\t\t\n\t\trow = this.findRow(row);\n\t\t\n\t\tif(row){\n\t\t\trowIndex = list.indexOf(row);\n\t\t\t\n\t\t\tif(rowIndex > -1){\n\t\t\t\treturn rowIndex;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tgetData(active, transform){\n\t\tvar output = [],\n\t\trows = this.getRows(active);\n\t\t\n\t\trows.forEach(function(row){\n\t\t\tif(row.type == \"row\"){\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetComponents(active){\n\t\tvar\toutput = [],\n\t\trows = this.getRows(active);\n\t\t\n\t\trows.forEach(function(row){\n\t\t\toutput.push(row.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetDataCount(active){\n\t\tvar rows = this.getRows(active);\n\t\t\n\t\treturn rows.length;\n\t}\n\t\n\tscrollHorizontal(left){\n\t\tthis.scrollLeft = left;\n\t\tthis.element.scrollLeft = left;\n\t\t\n\t\tthis.dispatch(\"scroll-horizontal\", left);\n\t}\n\t\n\tregisterDataPipelineHandler(handler, priority){\n\t\tif(typeof priority !== \"undefined\"){\n\t\t\tthis.dataPipeline.push({handler, priority});\n\t\t\tthis.dataPipeline.sort((a, b) => {\n\t\t\t\treturn a.priority - b.priority;\n\t\t\t});\n\t\t}else{\n\t\t\tconsole.error(\"Data pipeline handlers must have a priority in order to be registered\");\n\t\t}\n\t}\n\t\n\tregisterDisplayPipelineHandler(handler, priority){\n\t\tif(typeof priority !== \"undefined\"){\n\t\t\tthis.displayPipeline.push({handler, priority});\n\t\t\tthis.displayPipeline.sort((a, b) => {\n\t\t\t\treturn a.priority - b.priority;\n\t\t\t});\n\t\t}else{\n\t\t\tconsole.error(\"Display pipeline handlers must have a priority in order to be registered\");\n\t\t}\n\t}\n\t\n\t//set active data set\n\trefreshActiveData(handler, skipStage, renderInPosition){\n\t\tvar table = this.table,\n\t\tstage = \"\",\n\t\tindex = 0,\n\t\tcascadeOrder = [\"all\", \"dataPipeline\", \"display\", \"displayPipeline\", \"end\"];\n\t\t\n\t\tif(!this.table.destroyed){\n\t\t\tif(typeof handler === \"function\"){\n\t\t\t\tindex = this.dataPipeline.findIndex((item) => {\n\t\t\t\t\treturn item.handler === handler;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(index > -1){\n\t\t\t\t\tstage = \"dataPipeline\";\n\t\t\t\t\t\n\t\t\t\t\tif(skipStage){\n\t\t\t\t\t\tif(index == this.dataPipeline.length - 1){\n\t\t\t\t\t\t\tstage = \"display\";\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tindex = this.displayPipeline.findIndex((item) => {\n\t\t\t\t\t\treturn item.handler === handler;\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif(index > -1){\n\t\t\t\t\t\tstage = \"displayPipeline\";\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(skipStage){\n\t\t\t\t\t\t\tif(index == this.displayPipeline.length - 1){\n\t\t\t\t\t\t\t\tstage = \"end\";\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tindex++;\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\tconsole.error(\"Unable to refresh data, invalid handler provided\", handler);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tstage = handler || \"all\";\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.redrawBlock){\n\t\t\t\tif(!this.redrawBlockRestoreConfig || (this.redrawBlockRestoreConfig && ((this.redrawBlockRestoreConfig.stage === stage && index < this.redrawBlockRestoreConfig.index) || (cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage))))){\n\t\t\t\t\tthis.redrawBlockRestoreConfig = {\n\t\t\t\t\t\thandler: handler,\n\t\t\t\t\t\tskipStage: skipStage,\n\t\t\t\t\t\trenderInPosition: renderInPosition,\n\t\t\t\t\t\tstage:stage,\n\t\t\t\t\t\tindex:index,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn;\n\t\t\t}else{\n\t\t\t\tif(Helpers.elVisible(this.element)){\n\t\t\t\t\tif(renderInPosition){\n\t\t\t\t\t\tthis.reRenderInPosition(this.refreshPipelines.bind(this, handler, stage, index, renderInPosition));\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.refreshPipelines(handler, stage, index, renderInPosition);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(!handler){\n\t\t\t\t\t\t\tthis.table.columnManager.renderer.renderColumns();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.renderTable();\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(table.options.layoutColumnsOnNewData){\n\t\t\t\t\t\t\tthis.table.columnManager.redraw(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tthis.refreshPipelines(handler, stage, index, renderInPosition);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatch(\"data-refreshed\");\n\t\t\t}\n\t\t}\n\t}\n\t\n\trefreshPipelines(handler, stage, index, renderInPosition){\n\t\tthis.dispatch(\"data-refreshing\");\n\t\t\n\t\tif(!handler || !this.activeRowsPipeline[0]){\n\t\t\tthis.activeRowsPipeline[0] = this.rows.slice(0);\n\t\t}\n\t\t\n\t\t//cascade through data refresh stages\n\t\tswitch(stage){\n\t\t\tcase \"all\":\n\t\t\t//handle case where all data needs refreshing\n\t\t\t\n\t\t\tcase \"dataPipeline\":\n\t\t\t\tfor(let i = index; i < this.dataPipeline.length; i++){\n\t\t\t\t\tlet result = this.dataPipeline[i].handler(this.activeRowsPipeline[i].slice(0));\n\t\t\t\t\n\t\t\t\t\tthis.activeRowsPipeline[i + 1] = result || this.activeRowsPipeline[i].slice(0);\n\t\t\t\t}\n\t\t\t\n\t\t\t\tthis.setActiveRows(this.activeRowsPipeline[this.dataPipeline.length]);\n\t\t\t\n\t\t\tcase \"display\":\n\t\t\t\tindex = 0;\n\t\t\t\tthis.resetDisplayRows();\n\t\t\t\n\t\t\tcase \"displayPipeline\":\n\t\t\t\tfor(let i = index; i < this.displayPipeline.length; i++){\n\t\t\t\t\tlet result = this.displayPipeline[i].handler((i ? this.getDisplayRows(i - 1) : this.activeRows).slice(0), renderInPosition);\n\t\t\t\t\n\t\t\t\t\tthis.setDisplayRows(result || this.getDisplayRows(i - 1).slice(0), i);\n\t\t\t\t}\n\t\t\t\n\t\t\tcase \"end\":\n\t\t\t//case to handle scenario when trying to skip past end stage\n\t\t\t\tthis.regenerateRowPositions();\n\t\t}\n\t\t\n\t\tif(this.getDisplayRows().length){\n\t\t\tthis._clearPlaceholder();\n\t\t}\n\t}\n\t\n\t//regenerate row positions\n\tregenerateRowPositions(){\n\t\tvar rows = this.getDisplayRows();\n\t\tvar index = 1;\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tif (row.type === \"row\"){\n\t\t\t\trow.setPosition(index);\n\t\t\t\tindex++;\n\t\t\t}\n\t\t});\n\t}\n\t\n\tsetActiveRows(activeRows){\n\t\tthis.activeRows = this.activeRows = Object.assign([], activeRows);\n\t\tthis.activeRowsCount = this.activeRows.length;\n\t}\n\t\n\t//reset display rows array\n\tresetDisplayRows(){\n\t\tthis.displayRows = [];\n\t\t\n\t\tthis.displayRows.push(this.activeRows.slice(0));\n\t\t\n\t\tthis.displayRowsCount = this.displayRows[0].length;\n\t}\n\t\n\t//set display row pipeline data\n\tsetDisplayRows(displayRows, index){\n\t\tthis.displayRows[index] = displayRows;\n\t\t\n\t\tif(index == this.displayRows.length -1){\n\t\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\n\t\t}\n\t}\n\t\n\tgetDisplayRows(index){\n\t\tif(typeof index == \"undefined\"){\n\t\t\treturn this.displayRows.length ? this.displayRows[this.displayRows.length -1] : [];\n\t\t}else{\n\t\t\treturn this.displayRows[index] || [];\n\t\t}\n\t}\n\t\n\tgetVisibleRows(chain, viewable){\n\t\tvar rows = Object.assign([], this.renderer.visibleRows(!viewable));\n\t\t\n\t\tif(chain){\n\t\t\trows = this.chain(\"rows-visible\", [viewable], rows, rows);\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\t//repeat action across display rows\n\tdisplayRowIterator(callback){\n\t\tthis.activeRowsPipeline.forEach(callback);\n\t\tthis.displayRows.forEach(callback);\n\t\t\n\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\n\t}\n\t\n\t//return only actual rows (not group headers etc)\n\tgetRows(type){\n\t\tvar rows = [];\n\t\t\n\t\tswitch(type){\n\t\t\tcase \"active\":\n\t\t\t\trows = this.activeRows;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"display\":\n\t\t\t\trows = this.table.rowManager.getDisplayRows();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"visible\":\n\t\t\t\trows = this.getVisibleRows(false, true);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\trows = this.chain(\"rows-retrieve\", type, null, this.rows) || this.rows;\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\t///////////////// Table Rendering /////////////////\n\t//trigger rerender of table in current position\n\treRenderInPosition(callback){\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.redrawBlockRenderInPosition = true;\n\t\t\t}\n\t\t}else{\n\t\t\tthis.dispatchExternal(\"renderStarted\");\n\t\t\t\n\t\t\tthis.renderer.rerenderRows(callback);\n\t\t\t\n\t\t\tif(!this.fixedHeight){\n\t\t\t\tthis.adjustTableSize();\n\t\t\t}\n\t\t\t\n\t\t\tthis.scrollBarCheck();\n\t\t\t\n\t\t\tthis.dispatchExternal(\"renderComplete\");\n\t\t}\n\t}\n\t\n\tscrollBarCheck(){\n\t\tvar scrollbarWidth = 0;\n\t\t\n\t\t//adjust for vertical scrollbar moving table when present\n\t\tif(this.element.scrollHeight > this.element.clientHeight){\n\t\t\tscrollbarWidth = this.element.offsetWidth - this.element.clientWidth;\n\t\t}\n\t\t\n\t\tif(scrollbarWidth !== this.scrollbarWidth){\n\t\t\tthis.scrollbarWidth = scrollbarWidth;\n\t\t\tthis.dispatch(\"scrollbar-vertical\", scrollbarWidth);\n\t\t}\n\t}\n\t\n\tinitializeRenderer(){\n\t\tvar renderClass;\n\t\t\n\t\tvar renderers = {\n\t\t\t\"virtual\": RendererVirtualDomVertical,\n\t\t\t\"basic\": RendererBasicVertical,\n\t\t};\n\t\t\n\t\tif(typeof this.table.options.renderVertical === \"string\"){\n\t\t\trenderClass = renderers[this.table.options.renderVertical];\n\t\t}else{\n\t\t\trenderClass = this.table.options.renderVertical;\n\t\t}\n\t\t\n\t\tif(renderClass){\n\t\t\tthis.renderMode = this.table.options.renderVertical;\n\t\t\t\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\n\t\t\tthis.renderer.initialize();\n\t\t\t\n\t\t\tif((this.table.element.clientHeight || this.table.options.height) && !(this.table.options.minHeight && this.table.options.maxHeight)){\n\t\t\t\tthis.fixedHeight = true;\n\t\t\t}else{\n\t\t\t\tthis.fixedHeight = false;\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.error(\"Unable to find matching renderer:\", this.table.options.renderVertical);\n\t\t}\n\t}\n\t\n\tgetRenderMode(){\n\t\treturn this.renderMode;\n\t}\n\t\n\trenderTable(){\n\t\tthis.dispatchExternal(\"renderStarted\");\n\t\t\n\t\tthis.element.scrollTop = 0;\n\t\t\n\t\tthis._clearTable();\n\t\t\n\t\tif(this.displayRowsCount){\n\t\t\tthis.renderer.renderRows();\n\t\t\t\n\t\t\tif(this.firstRender){\n\t\t\t\tthis.firstRender = false;\n\t\t\t\t\n\t\t\t\tif(!this.fixedHeight){\n\t\t\t\t\tthis.adjustTableSize();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.layoutRefresh(true);\n\t\t\t}\n\t\t}else{\n\t\t\tthis.renderEmptyScroll();\n\t\t}\n\t\t\n\t\tif(!this.fixedHeight){\n\t\t\tthis.adjustTableSize();\n\t\t}\n\t\t\n\t\tthis.dispatch(\"table-layout\");\n\t\t\n\t\tif(!this.displayRowsCount){\n\t\t\tthis._showPlaceholder();\n\t\t}\n\t\t\n\t\tthis.scrollBarCheck();\n\t\t\n\t\tthis.dispatchExternal(\"renderComplete\");\n\t}\n\t\n\t//show scrollbars on empty table div\n\trenderEmptyScroll(){\n\t\tif(this.placeholder){\n\t\t\tthis.tableElement.style.display = \"none\";\n\t\t}else{\n\t\t\tthis.tableElement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\n\t\t\t// this.tableElement.style.minHeight = \"1px\";\n\t\t\t// this.tableElement.style.visibility = \"hidden\";\n\t\t}\n\t}\n\t\n\t_clearTable(){\t\n\t\tthis._clearPlaceholder();\n\t\t\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\t\t\n\t\tthis.renderer.clearRows();\n\t}\n\t\n\ttableEmpty(){\n\t\tthis.renderEmptyScroll();\n\t\tthis._showPlaceholder();\n\t}\n\n\tcheckPlaceholder(){\n\t\tif(this.displayRowsCount){\n\t\t\tthis._clearPlaceholder();\n\t\t}else{\n\t\t\tthis.tableEmpty();\n\t\t}\n\t}\n\t\n\t_showPlaceholder(){\n\t\tif(this.placeholder){\n\t\t\tif(this.placeholder && this.placeholder.parentNode){\n\t\t\t\tthis.placeholder.parentNode.removeChild(this.placeholder);\n\t\t\t}\n\t\t\t\n\t\t\tthis.initializePlaceholder();\n\t\t\t\n\t\t\tthis.placeholder.setAttribute(\"tabulator-render-mode\", this.renderMode);\n\t\t\t\n\t\t\tthis.getElement().appendChild(this.placeholder);\n\t\t\tthis._positionPlaceholder();\n\n\t\t\tthis.adjustTableSize();\n\t\t}\n\t}\n\t\n\t_clearPlaceholder(){\n\t\tif(this.placeholder && this.placeholder.parentNode){\n\t\t\tthis.placeholder.parentNode.removeChild(this.placeholder);\n\t\t}\n\t\t\n\t\t// clear empty table placeholder min\n\t\tthis.tableElement.style.minWidth = \"\";\n\t\tthis.tableElement.style.display = \"\";\n\t}\n\t\n\t_positionPlaceholder(){\n\t\tif(this.placeholder && this.placeholder.parentNode){\n\t\t\tthis.placeholder.style.width = this.table.columnManager.getWidth() + \"px\";\n\t\t\tthis.placeholderContents.style.width = this.table.rowManager.element.clientWidth + \"px\";\n\t\t\tthis.placeholderContents.style.marginLeft = this.scrollLeft + \"px\";\n\t\t}\n\t}\n\t\n\tstyleRow(row, index){\n\t\tvar rowEl = row.getElement();\n\t\t\n\t\tif(index % 2){\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\n\t\t}else{\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\n\t\t}\n\t}\n\t\n\t//normalize height of active rows\n\tnormalizeHeight(){\n\t\tthis.activeRows.forEach(function(row){\n\t\t\trow.normalizeHeight();\n\t\t});\n\t}\n\t\n\t//adjust the height of the table holder to fit in the Tabulator element\n\tadjustTableSize(){\n\t\tlet initialHeight = this.element.clientHeight, minHeight;\n\t\tlet resized = false;\n\t\t\n\t\tif(this.renderer.verticalFillMode === \"fill\"){\n\t\t\tlet otherHeight = Math.floor(this.table.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0));\n\t\t\t\n\t\t\tif(this.fixedHeight){\n\t\t\t\tminHeight = isNaN(this.table.options.minHeight) ? this.table.options.minHeight : this.table.options.minHeight + \"px\";\n\t\t\t\t\n\t\t\t\tconst height = \"calc(100% - \" + otherHeight + \"px)\";\n\t\t\t\tthis.element.style.minHeight = minHeight || \"calc(100% - \" + otherHeight + \"px)\";\n\t\t\t\tthis.element.style.height = height;\n\t\t\t\tthis.element.style.maxHeight = height;\n\t\t\t} else {\n\t\t\t\tthis.element.style.height = \"\";\n\t\t\t\tthis.element.style.height =\n\t\t\t\tthis.table.element.clientHeight - otherHeight + \"px\";\n\t\t\t\tthis.element.scrollTop = this.scrollTop;\n\t\t\t}\n\t\t\t\n\t\t\tthis.renderer.resize();\n\t\t\t\n\t\t\t//check if the table has changed size when dealing with variable height tables\n\t\t\tif(!this.fixedHeight && initialHeight != this.element.clientHeight){\n\t\t\t\tresized = true;\n\t\t\t\tif(this.subscribed(\"table-resize\")){\n\t\t\t\t\tthis.dispatch(\"table-resize\");\n\t\t\t\t}else{\n\t\t\t\t\tthis.redraw();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.scrollBarCheck();\n\t\t}\n\t\t\n\t\tthis._positionPlaceholder();\n\t\treturn resized;\n\t}\n\t\n\t//reinitialize all rows\n\treinitialize(){\n\t\tthis.rows.forEach(function(row){\n\t\t\trow.reinitialize(true);\n\t\t});\n\t}\n\t\n\t//prevent table from being redrawn\n\tblockRedraw (){\n\t\tthis.redrawBlock = true;\n\t\tthis.redrawBlockRestoreConfig = false;\n\t}\n\t\n\t//restore table redrawing\n\trestoreRedraw (){\n\t\tthis.redrawBlock = false;\n\t\t\n\t\tif(this.redrawBlockRestoreConfig){\n\t\t\tthis.refreshActiveData(this.redrawBlockRestoreConfig.handler, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition);\n\t\t\t\n\t\t\tthis.redrawBlockRestoreConfig = false;\n\t\t}else{\n\t\t\tif(this.redrawBlockRenderInPosition){\n\t\t\t\tthis.reRenderInPosition();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.redrawBlockRenderInPosition = false;\n\t}\n\t\n\t//redraw table\n\tredraw (force){\n\t\tthis.adjustTableSize();\n\t\tthis.table.tableWidth = this.table.element.clientWidth;\n\t\t\n\t\tif(!force){\t\n\t\t\tthis.reRenderInPosition();\n\t\t\tthis.scrollHorizontal(this.scrollLeft);\n\t\t}else{\n\t\t\tthis.renderTable();\n\t\t}\n\t}\n\t\n\tresetScroll(){\n\t\tthis.element.scrollLeft = 0;\n\t\tthis.element.scrollTop = 0;\n\t\t\n\t\tif(this.table.browser === \"ie\"){\n\t\t\tvar event = document.createEvent(\"Event\");\n\t\t\tevent.initEvent(\"scroll\", false, true);\n\t\t\tthis.element.dispatchEvent(event);\n\t\t}else{\n\t\t\tthis.element.dispatchEvent(new Event('scroll'));\n\t\t}\n\t}\n}\n","import CoreFeature from './CoreFeature.js';\n\nexport default class FooterManager extends CoreFeature{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.active = false;\n\t\tthis.element = this.createElement(); //containing element\n\t\tthis.containerElement = this.createContainerElement(); //containing element\n\t\tthis.external = false;\n\t}\n\n\tinitialize(){\n\t\tthis.initializeElement();\n\t}\n\n\tcreateElement(){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-footer\");\n\n\t\treturn el;\n\t}\n\n\t\n\tcreateContainerElement(){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-footer-contents\");\n\n\t\tthis.element.appendChild(el);\n\n\t\treturn el;\n\t}\n\n\tinitializeElement(){\n\t\tif(this.table.options.footerElement){\n\n\t\t\tswitch(typeof this.table.options.footerElement){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif(this.table.options.footerElement[0] === \"<\"){\n\t\t\t\t\t\tthis.containerElement.innerHTML = this.table.options.footerElement;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.external = true;\n\t\t\t\t\t\tthis.containerElement = document.querySelector(this.table.options.footerElement);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthis.element = this.table.options.footerElement;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tgetElement(){\n\t\treturn this.element;\n\t}\n\n\tappend(element){\n\t\tthis.activate();\n\n\t\tthis.containerElement.appendChild(element);\n\t\tthis.table.rowManager.adjustTableSize();\n\t}\n\n\tprepend(element){\n\t\tthis.activate();\n\n\t\tthis.element.insertBefore(element, this.element.firstChild);\n\t\tthis.table.rowManager.adjustTableSize();\n\t}\n\n\tremove(element){\n\t\telement.parentNode.removeChild(element);\n\t\tthis.deactivate();\n\t}\n\n\tdeactivate(force){\n\t\tif(!this.element.firstChild || force){\n\t\t\tif(!this.external){\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\t}\n\t\t\tthis.active = false;\n\t\t}\n\t}\n\n\tactivate(){\n\t\tif(!this.active){\n\t\t\tthis.active = true;\n\t\t\tif(!this.external){\n\t\t\t\tthis.table.element.appendChild(this.getElement());\n\t\t\t\tthis.table.element.style.display = '';\n\t\t\t}\n\t\t}\n\t}\n\n\tredraw(){\n\t\tthis.dispatch(\"footer-redraw\");\n\t}\n}","import CoreFeature from '../CoreFeature.js';\nimport Row from '../row/Row.js';\n\nexport default class InteractionManager extends CoreFeature {\n\t\n\tconstructor (table){\n\t\tsuper(table);\n\t\t\n\t\tthis.el = null;\n\t\t\n\t\tthis.abortClasses = [\"tabulator-headers\", \"tabulator-table\"];\n\t\t\n\t\tthis.previousTargets = {};\n\t\t\n\t\tthis.listeners = [\n\t\t\t\"click\",\n\t\t\t\"dblclick\",\n\t\t\t\"contextmenu\",\n\t\t\t\"mouseenter\",\n\t\t\t\"mouseleave\",\n\t\t\t\"mouseover\",\n\t\t\t\"mouseout\",\n\t\t\t\"mousemove\",\n\t\t\t\"mouseup\",\n\t\t\t\"mousedown\",\n\t\t\t\"touchstart\",\n\t\t\t\"touchend\",\n\t\t];\n\t\t\n\t\tthis.componentMap = {\n\t\t\t\"tabulator-cell\":\"cell\",\n\t\t\t\"tabulator-row\":\"row\",\n\t\t\t\"tabulator-group\":\"group\",\n\t\t\t\"tabulator-col\":\"column\",\n\t\t};\n\t\t\n\t\tthis.pseudoTrackers = {\n\t\t\t\"row\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t\t\"cell\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t\t\"group\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t\t\"column\":{\n\t\t\t\tsubscriber:null,\n\t\t\t\ttarget:null,\n\t\t\t},\n\t\t};\n\t\t\n\t\tthis.pseudoTracking = false;\n\t}\n\t\n\tinitialize(){\n\t\tthis.el = this.table.element;\n\t\t\n\t\tthis.buildListenerMap();\n\t\tthis.bindSubscriptionWatchers();\n\t}\n\t\n\tbuildListenerMap(){\n\t\tvar listenerMap = {};\n\t\t\n\t\tthis.listeners.forEach((listener) => {\n\t\t\tlistenerMap[listener] = {\n\t\t\t\thandler:null,\n\t\t\t\tcomponents:[],\n\t\t\t};\n\t\t});\n\t\t\n\t\tthis.listeners = listenerMap;\n\t}\n\t\n\tbindPseudoEvents(){\n\t\tObject.keys(this.pseudoTrackers).forEach((key) => {\n\t\t\tthis.pseudoTrackers[key].subscriber = this.pseudoMouseEnter.bind(this, key);\n\t\t\tthis.subscribe(key + \"-mouseover\", this.pseudoTrackers[key].subscriber);\n\t\t});\n\t\t\n\t\tthis.pseudoTracking = true;\n\t}\n\t\n\tpseudoMouseEnter(key, e, target){\n\t\tif(this.pseudoTrackers[key].target !== target){\n\t\t\t\n\t\t\tif(this.pseudoTrackers[key].target){\n\t\t\t\tthis.dispatch(key + \"-mouseleave\", e, this.pseudoTrackers[key].target);\n\t\t\t}\n\t\t\t\n\t\t\tthis.pseudoMouseLeave(key, e);\n\t\t\t\n\t\t\tthis.pseudoTrackers[key].target = target;\n\t\t\t\n\t\t\tthis.dispatch(key + \"-mouseenter\", e, target);\n\t\t}\n\t}\n\t\n\tpseudoMouseLeave(key, e){\n\t\tvar leaveList = Object.keys(this.pseudoTrackers),\n\t\tlinkedKeys = {\n\t\t\t\"row\":[\"cell\"],\n\t\t\t\"cell\":[\"row\"],\n\t\t};\n\t\t\n\t\tleaveList = leaveList.filter((item) => {\n\t\t\tvar links = linkedKeys[key];\n\t\t\treturn item !== key && (!links || (links && !links.includes(item)));\n\t\t});\n\t\t\n\t\t\n\t\tleaveList.forEach((key) => {\n\t\t\tvar target = this.pseudoTrackers[key].target;\n\t\t\t\n\t\t\tif(this.pseudoTrackers[key].target){\n\t\t\t\tthis.dispatch(key + \"-mouseleave\", e, target);\n\t\t\t\t\n\t\t\t\tthis.pseudoTrackers[key].target = null;\n\t\t\t}\n\t\t});\n\t}\n\t\n\t\n\tbindSubscriptionWatchers(){\n\t\tvar listeners = Object.keys(this.listeners),\n\t\tcomponents = Object.values(this.componentMap);\n\t\t\n\t\tfor(let comp of components){\n\t\t\tfor(let listener of listeners){\n\t\t\t\tlet key = comp + \"-\" + listener;\n\t\t\t\t\n\t\t\t\tthis.subscriptionChange(key, this.subscriptionChanged.bind(this, comp, listener));\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.subscribe(\"table-destroy\", this.clearWatchers.bind(this));\n\t}\n\t\n\tsubscriptionChanged(component, key, added){\n\t\tvar listener = this.listeners[key].components,\n\t\tindex = listener.indexOf(component),\n\t\tchanged = false;\n\t\t\n\t\tif(added){\n\t\t\tif(index === -1){\n\t\t\t\tlistener.push(component);\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t}else{\n\t\t\tif(!this.subscribed(component + \"-\" + key)){\n\t\t\t\tif(index > -1){\n\t\t\t\t\tlistener.splice(index, 1);\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif((key === \"mouseenter\" || key === \"mouseleave\") && !this.pseudoTracking){\n\t\t\tthis.bindPseudoEvents();\n\t\t}\n\t\t\n\t\tif(changed){\n\t\t\tthis.updateEventListeners();\n\t\t}\n\t}\n\t\n\tupdateEventListeners(){\n\t\tfor(let key in this.listeners){\n\t\t\tlet listener = this.listeners[key];\n\t\t\t\n\t\t\tif(listener.components.length){\n\t\t\t\tif(!listener.handler){\n\t\t\t\t\tlistener.handler = this.track.bind(this, key);\n\t\t\t\t\tthis.el.addEventListener(key, listener.handler);\n\t\t\t\t\t// this.el.addEventListener(key, listener.handler, {passive: true})\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(listener.handler){\n\t\t\t\t\tthis.el.removeEventListener(key, listener.handler);\n\t\t\t\t\tlistener.handler = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\ttrack(type, e){\n\t\tvar path = (e.composedPath && e.composedPath()) || e.path;\n\t\t\n\t\tvar targets = this.findTargets(path);\n\t\ttargets = this.bindComponents(type, targets);\n\t\t\n\t\tthis.triggerEvents(type, e, targets);\n\t\t\n\t\tif(this.pseudoTracking && (type == \"mouseover\" || type == \"mouseleave\") && !Object.keys(targets).length){\n\t\t\tthis.pseudoMouseLeave(\"none\", e);\n\t\t}\n\t}\n\t\n\tfindTargets(path){\n\t\tvar targets = {};\n\t\t\n\t\tlet componentMap = Object.keys(this.componentMap);\n\t\t\n\t\tfor (let el of path) {\n\t\t\tlet classList = el.classList ? [...el.classList] : [];\n\t\t\t\n\t\t\tlet abort = classList.filter((item) => {\n\t\t\t\treturn this.abortClasses.includes(item);\n\t\t\t});\n\t\t\t\n\t\t\tif(abort.length){\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tlet elTargets = classList.filter((item) => {\n\t\t\t\treturn componentMap.includes(item);\n\t\t\t});\n\t\t\t\n\t\t\tfor (let target of elTargets) {\n\t\t\t\tif(!targets[this.componentMap[target]]){\n\t\t\t\t\ttargets[this.componentMap[target]] = el;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(targets.group && targets.group === targets.row){\n\t\t\tdelete targets.row;\n\t\t}\n\n\t\treturn targets;\n\t}\n\t\n\tbindComponents(type, targets){\n\t\t//ensure row component is looked up before cell\n\t\tvar keys = Object.keys(targets).reverse(),\n\t\tlistener = this.listeners[type],\n\t\tmatches = {},\n\t\ttargetMatches = {};\n\t\t\n\t\tfor(let key of keys){\n\t\t\tlet component,\n\t\t\ttarget = targets[key],\n\t\t\tpreviousTarget = this.previousTargets[key];\n\t\t\t\n\t\t\tif(previousTarget && previousTarget.target === target){\n\t\t\t\tcomponent = previousTarget.component;\n\t\t\t}else{\n\t\t\t\tswitch(key){\n\t\t\t\t\tcase \"row\":\n\t\t\t\t\tcase \"group\":\n\t\t\t\t\t\tif(listener.components.includes(\"row\") || listener.components.includes(\"cell\") || listener.components.includes(\"group\")){\n\t\t\t\t\t\t\tlet rows = this.table.rowManager.getVisibleRows(true);\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tcomponent = rows.find((row) => {\n\t\t\t\t\t\t\t\treturn row.getElement() === target;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(targets[\"row\"] && targets[\"row\"].parentNode && targets[\"row\"].parentNode.closest(\".tabulator-row\")){\n\t\t\t\t\t\t\t\ttargets[key] = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"column\":\n\t\t\t\t\t\tif(listener.components.includes(\"column\")){\n\t\t\t\t\t\t\tcomponent = this.table.columnManager.findColumn(target);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"cell\":\n\t\t\t\t\t\tif(listener.components.includes(\"cell\")){\n\t\t\t\t\t\t\tif(matches[\"row\"] instanceof Row){\n\t\t\t\t\t\t\t\tcomponent = matches[\"row\"].findCell(target);\n\t\t\t\t\t\t\t}else{\t\n\t\t\t\t\t\t\t\tif(targets[\"row\"]){\n\t\t\t\t\t\t\t\t\tconsole.warn(\"Event Target Lookup Error - The row this cell is attached to cannot be found, has the table been reinitialized without being destroyed first?\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(component){\n\t\t\t\tmatches[key] = component;\n\t\t\t\ttargetMatches[key] = {\n\t\t\t\t\ttarget:target,\n\t\t\t\t\tcomponent:component,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.previousTargets = targetMatches;\n\t\t\n\t\treturn matches;\n\t}\n\t\n\ttriggerEvents(type, e, targets){\n\t\tvar listener = this.listeners[type];\n\n\t\tfor(let key in targets){\n\t\t\tif(targets[key] && listener.components.includes(key)){\n\t\t\t\tthis.dispatch(key + \"-\" + type, e, targets[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tclearWatchers(){\n\t\tfor(let key in this.listeners){\n\t\t\tlet listener = this.listeners[key];\n\t\t\t\n\t\t\tif(listener.handler){\n\t\t\t\tthis.el.removeEventListener(key, listener.handler);\n\t\t\t\tlistener.handler = null;\n\t\t\t}\n\t\t}\n\t}\n}\n","export default class ComponentFunctionBinder{\n\n\tconstructor(table){\n\t\tthis.table = table;\n\n\t\tthis.bindings = {};\n\t}\n\n\tbind(type, funcName, handler){\n\t\tif(!this.bindings[type]){\n\t\t\tthis.bindings[type] = {};\n\t\t}\n\n\t\tif(this.bindings[type][funcName]){\n\t\t\tconsole.warn(\"Unable to bind component handler, a matching function name is already bound\", type, funcName, handler);\n\t\t}else{\n\t\t\tthis.bindings[type][funcName] = handler;\n\t\t}\n\t}\n\n\thandle(type, component, name){\n\t\tif(this.bindings[type] && this.bindings[type][name] && typeof this.bindings[type][name].bind === 'function'){\n\t\t\treturn this.bindings[type][name].bind(null, component);\n\t\t}else{\n\t\t\tif(name !== \"then\" && typeof name === \"string\" && !name.startsWith(\"_\")){\n\t\t\t\tif(this.table.options.debugInvalidComponentFuncs){\n\t\t\t\t\tconsole.error(\"The \" + type + \" component does not have a \" + name + \" function, have you checked that you have the correct Tabulator module installed?\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","import CoreFeature from '../CoreFeature.js';\n\nexport default class DataLoader extends CoreFeature{\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.requestOrder = 0; //prevent requests coming out of sequence if overridden by another load request\n\t\tthis.loading = false;\n\t}\n\t\n\tinitialize(){}\n\t\n\tload(data, params, config, replace, silent, columnsChanged){\n\t\tvar requestNo = ++this.requestOrder;\n\n\t\tif(this.table.destroyed){\n\t\t\treturn Promise.resolve();\n\t\t}\n\t\t\n\t\tthis.dispatchExternal(\"dataLoading\", data);\n\t\t\n\t\t//parse json data to array\n\t\tif (data && (data.indexOf(\"{\") == 0 || data.indexOf(\"[\") == 0)){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\tif(this.confirm(\"data-loading\", [data, params, config, silent])){\n\t\t\tthis.loading = true;\n\t\t\t\n\t\t\tif(!silent){\n\t\t\t\tthis.alertLoader();\n\t\t\t}\n\t\t\t\n\t\t\t//get params for request\n\t\t\tparams = this.chain(\"data-params\", [data, config, silent], params || {}, params || {});\n\t\t\t\n\t\t\tparams = this.mapParams(params, this.table.options.dataSendParams);\n\t\t\t\n\t\t\tvar result = this.chain(\"data-load\", [data, params, config, silent], false, Promise.resolve([]));\n\t\t\t\n\t\t\treturn result.then((response) => {\n\t\t\t\tif(!this.table.destroyed){\n\t\t\t\t\tif(!Array.isArray(response) && typeof response == \"object\"){\n\t\t\t\t\t\tresponse = this.mapParams(response, this.objectInvert(this.table.options.dataReceiveParams));\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvar rowData = this.chain(\"data-loaded\", response, null, response);\n\t\t\t\t\t\n\t\t\t\t\tif(requestNo == this.requestOrder){\n\t\t\t\t\t\tthis.clearAlert();\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(rowData !== false){\n\t\t\t\t\t\t\tthis.dispatchExternal(\"dataLoaded\", rowData);\n\t\t\t\t\t\t\tthis.table.rowManager.setData(rowData, replace, typeof columnsChanged === \"undefined\" ? !replace : columnsChanged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made\");\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Data Load Response Blocked - Table has been destroyed\");\n\t\t\t\t}\n\t\t\t}).catch((error) => {\n\t\t\t\tconsole.error(\"Data Load Error: \", error);\n\t\t\t\tthis.dispatchExternal(\"dataLoadError\", error);\n\t\t\t\t\n\t\t\t\tif(!silent){\n\t\t\t\t\tthis.alertError();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.clearAlert();\n\t\t\t\t}, this.table.options.dataLoaderErrorTimeout);\n\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t});\n\t\t}else{\n\t\t\tthis.dispatchExternal(\"dataLoaded\", data);\n\t\t\t\n\t\t\tif(!data){\n\t\t\t\tdata = [];\n\t\t\t}\n\t\t\t\n\t\t\tthis.table.rowManager.setData(data, replace, typeof columnsChanged === \"undefined\" ? !replace : columnsChanged);\n\t\t\treturn Promise.resolve();\n\t\t}\n\t}\n\t\n\tmapParams(params, map){\n\t\tvar output = {};\n\t\t\n\t\tfor(let key in params){\n\t\t\toutput[map.hasOwnProperty(key) ? map[key] : key] = params[key];\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tobjectInvert(obj){\n\t\tvar output = {};\n\t\t\n\t\tfor(let key in obj){\n\t\t\toutput[obj[key]] = key;\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tblockActiveLoad(){\n\t\tthis.requestOrder++;\n\t}\n\t\n\talertLoader(){\n\t\tvar shouldLoad = typeof this.table.options.dataLoader === \"function\" ? this.table.options.dataLoader() : this.table.options.dataLoader;\n\t\t\n\t\tif(shouldLoad){\n\t\t\tthis.table.alertManager.alert(this.table.options.dataLoaderLoading || this.langText(\"data|loading\"));\n\t\t}\n\t}\n\t\n\talertError(){\n\t\tthis.table.alertManager.alert(this.table.options.dataLoaderError || this.langText(\"data|error\"), \"error\");\n\t}\n\t\n\tclearAlert(){\n\t\tthis.table.alertManager.clear();\n\t}\n}","export default class ExternalEventBus {\n\n\tconstructor(table, optionsList, debug){\n\t\tthis.table = table;\n\t\tthis.events = {};\n\t\tthis.optionsList = optionsList || {};\n\t\tthis.subscriptionNotifiers = {};\n\n\t\tthis.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this);\n\t\tthis.debug = debug;\n\t}\n\n\tsubscriptionChange(key, callback){\n\t\tif(!this.subscriptionNotifiers[key]){\n\t\t\tthis.subscriptionNotifiers[key] = [];\n\t\t}\n\n\t\tthis.subscriptionNotifiers[key].push(callback);\n\n\t\tif(this.subscribed(key)){\n\t\t\tthis._notifySubscriptionChange(key, true);\n\t\t}\n\t}\n\n\tsubscribe(key, callback){\n\t\tif(!this.events[key]){\n\t\t\tthis.events[key] = [];\n\t\t}\n\n\t\tthis.events[key].push(callback);\n\n\t\tthis._notifySubscriptionChange(key, true);\n\t}\n\n\tunsubscribe(key, callback){\n\t\tvar index;\n\n\t\tif(this.events[key]){\n\t\t\tif(callback){\n\t\t\t\tindex = this.events[key].findIndex((item) => {\n\t\t\t\t\treturn item === callback;\n\t\t\t\t});\n\n\t\t\t\tif(index > -1){\n\t\t\t\t\tthis.events[key].splice(index, 1);\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tdelete this.events[key];\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._notifySubscriptionChange(key, false);\n\t}\n\n\tsubscribed(key){\n\t\treturn this.events[key] && this.events[key].length;\n\t}\n\n\t_notifySubscriptionChange(key, subscribed){\n\t\tvar notifiers = this.subscriptionNotifiers[key];\n\n\t\tif(notifiers){\n\t\t\tnotifiers.forEach((callback)=>{\n\t\t\t\tcallback(subscribed);\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatch(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args.shift(),\n\t\tresult;\n\n\t\tif(this.events[key]){\n\t\t\tthis.events[key].forEach((callback, i) => {\n\t\t\t\tlet callResult = callback.apply(this.table, args);\n\n\t\t\t\tif(!i){\n\t\t\t\t\tresult = callResult;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t_debugDispatch(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args[0];\n\n\t\targs[0] = \"ExternalEvent:\" + args[0];\n\n\t\tif(this.debug === true || this.debug.includes(key)){\n\t\t\tconsole.log(...args);\n\t\t}\n\n\t\treturn this._dispatch(...arguments);\n\t}\n}","export default class InternalEventBus {\n\n\tconstructor(debug){\n\t\tthis.events = {};\n\t\tthis.subscriptionNotifiers = {};\n\n\t\tthis.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this);\n\t\tthis.chain = debug ? this._debugChain.bind(this) : this._chain.bind(this);\n\t\tthis.confirm = debug ? this._debugConfirm.bind(this) : this._confirm.bind(this);\n\t\tthis.debug = debug;\n\t}\n\n\tsubscriptionChange(key, callback){\n\t\tif(!this.subscriptionNotifiers[key]){\n\t\t\tthis.subscriptionNotifiers[key] = [];\n\t\t}\n\n\t\tthis.subscriptionNotifiers[key].push(callback);\n\n\t\tif(this.subscribed(key)){\n\t\t\tthis._notifySubscriptionChange(key, true);\n\t\t}\n\t}\n\n\tsubscribe(key, callback, priority = 10000){\n\t\tif(!this.events[key]){\n\t\t\tthis.events[key] = [];\n\t\t}\n\n\t\tthis.events[key].push({callback, priority});\n\n\t\tthis.events[key].sort((a, b) => {\n\t\t\treturn a.priority - b.priority;\n\t\t});\n\n\t\tthis._notifySubscriptionChange(key, true);\n\t}\n\n\tunsubscribe(key, callback){\n\t\tvar index;\n\n\t\tif(this.events[key]){\n\t\t\tif(callback){\n\t\t\t\tindex = this.events[key].findIndex((item) => {\n\t\t\t\t\treturn item.callback === callback;\n\t\t\t\t});\n\n\t\t\t\tif(index > -1){\n\t\t\t\t\tthis.events[key].splice(index, 1);\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._notifySubscriptionChange(key, false);\n\t}\n\n\tsubscribed(key){\n\t\treturn this.events[key] && this.events[key].length;\n\t}\n\n\t_chain(key, args, initialValue, fallback){\n\t\tvar value = initialValue;\n\n\t\tif(!Array.isArray(args)){\n\t\t\targs = [args];\n\t\t}\n\n\t\tif(this.subscribed(key)){\n\t\t\tthis.events[key].forEach((subscriber, i) => {\n\t\t\t\tvalue = subscriber.callback.apply(this, args.concat([value]));\n\t\t\t});\n\n\t\t\treturn value;\n\t\t}else{\n\t\t\treturn typeof fallback === \"function\" ? fallback() : fallback;\n\t\t}\n\t}\n\n\t_confirm(key, args){\n\t\tvar confirmed = false;\n\n\t\tif(!Array.isArray(args)){\n\t\t\targs = [args];\n\t\t}\n\n\t\tif(this.subscribed(key)){\n\t\t\tthis.events[key].forEach((subscriber, i) => {\n\t\t\t\tif(subscriber.callback.apply(this, args)){\n\t\t\t\t\tconfirmed = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn confirmed;\n\t}\n\n\t_notifySubscriptionChange(key, subscribed){\n\t\tvar notifiers = this.subscriptionNotifiers[key];\n\n\t\tif(notifiers){\n\t\t\tnotifiers.forEach((callback)=>{\n\t\t\t\tcallback(subscribed);\n\t\t\t});\n\t\t}\n\t}\n\n\t_dispatch(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args.shift();\n\n\t\tif(this.events[key]){\n\t\t\tthis.events[key].forEach((subscriber) => {\n\t\t\t\tsubscriber.callback.apply(this, args);\n\t\t\t});\n\t\t}\n\t}\n\n\t_debugDispatch(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args[0];\n\n\t\targs[0] = \"InternalEvent:\" + key;\n\n\t\tif(this.debug === true || this.debug.includes(key)){\n\t\t\tconsole.log(...args);\n\t\t}\n\n\t\treturn this._dispatch(...arguments);\n\t}\n\n\t_debugChain(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args[0];\n\n\t\targs[0] = \"InternalEvent:\" + key;\n\n\t\tif(this.debug === true || this.debug.includes(key)){\n\t\t\tconsole.log(...args);\n\t\t}\n\n\t\treturn this._chain(...arguments);\n\t}\n\n\t_debugConfirm(){\n\t\tvar args = Array.from(arguments),\n\t\tkey = args[0];\n\n\t\targs[0] = \"InternalEvent:\" + key;\n\n\t\tif(this.debug === true || this.debug.includes(key)){\n\t\t\tconsole.log(...args);\n\t\t}\n\n\t\treturn this._confirm(...arguments);\n\t}\n}","import CoreFeature from '../CoreFeature.js';\n\nexport default class DeprecationAdvisor extends CoreFeature{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t}\n\t\n\t_warnUser(){\n\t\tif(this.options(\"debugDeprecation\")){\n\t\t\tconsole.warn(...arguments);\n\t\t}\n\t}\n\t\n\tcheck(oldOption, newOption, convert){\n\t\tvar msg = \"\";\n\t\t\n\t\tif(typeof this.options(oldOption) !== \"undefined\"){\n\t\t\tmsg = \"Deprecated Setup Option - Use of the %c\" + oldOption + \"%c option is now deprecated\";\n\t\t\t\n\t\t\tif(newOption){\n\t\t\t\tmsg = msg + \", Please use the %c\" + newOption + \"%c option instead\";\n\t\t\t\tthis._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;');\n\n\t\t\t\tif(convert){\n\t\t\t\t\tthis.table.options[newOption] = this.table.options[oldOption];\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis._warnUser(msg, 'font-weight: bold;', 'font-weight: normal;');\n\t\t\t}\n\t\t\t\n\t\t\treturn false;\n\t\t}else{\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\tcheckMsg(oldOption, msg){\n\t\tif(typeof this.options(oldOption) !== \"undefined\"){\n\t\t\tthis._warnUser(\"%cDeprecated Setup Option - Use of the %c\" + oldOption + \" %c option is now deprecated, \" + msg, 'font-weight: normal;', 'font-weight: bold;', 'font-weight: normal;');\n\t\t\t\n\t\t\treturn false;\n\t\t}else{\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\tmsg(msg){\n\t\tthis._warnUser(msg);\n\t}\n}","import Tabulator from '../Tabulator.js';\n\nclass TableRegistry {\n\n\tstatic register(table){\n\t\tTableRegistry.tables.push(table);\n\t}\n\n\tstatic deregister(table){\n\t\tvar index = TableRegistry.tables.indexOf(table);\n\n\t\tif(index > -1){\n\t\t\tTableRegistry.tables.splice(index, 1);\n\t\t}\n\t}\n\n\tstatic lookupTable(query, silent){\n\t\tvar results = [],\n\t\tmatches, 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 = TableRegistry.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\n\t\t}else if((typeof HTMLElement !== \"undefined\" && query instanceof HTMLElement) || query instanceof Tabulator){\n\t\t\tmatch = TableRegistry.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(TableRegistry.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\n\tstatic matchElement(element){\n\t\treturn TableRegistry.tables.find(function(table){\n\t\t\treturn element instanceof Tabulator ? table === element : table.element === element;\n\t\t});\n\t}\n}\n\nTableRegistry.tables = [];\n\nexport default TableRegistry;","import CoreFeature from '../CoreFeature.js';\nimport Helpers from './Helpers.js';\n\nexport default class Popup extends CoreFeature{\n\tconstructor(table, element, parent){\n\t\tsuper(table);\n\t\t\n\t\tthis.element = element;\n\t\tthis.container = this._lookupContainer();\n\t\t\n\t\tthis.parent = parent;\n\t\t\n\t\tthis.reversedX = false;\n\t\tthis.childPopup = null;\n\t\tthis.blurable = false;\n\t\tthis.blurCallback = null;\n\t\tthis.blurEventsBound = false;\n\t\tthis.renderedCallback = null;\n\t\t\n\t\tthis.visible = false;\n\t\tthis.hideable = true;\n\t\t\n\t\tthis.element.classList.add(\"tabulator-popup-container\");\n\t\t\n\t\tthis.blurEvent = this.hide.bind(this, false);\n\t\tthis.escEvent = this._escapeCheck.bind(this);\n\t\t\n\t\tthis.destroyBinding = this.tableDestroyed.bind(this);\n\t\tthis.destroyed = false;\n\t}\n\t\n\ttableDestroyed(){\n\t\tthis.destroyed = true;\n\t\tthis.hide(true);\n\t}\n\t\n\t_lookupContainer(){\n\t\tvar container = this.table.options.popupContainer;\n\t\t\n\t\tif(typeof container === \"string\"){\n\t\t\tcontainer = document.querySelector(container);\n\t\t\t\n\t\t\tif(!container){\n\t\t\t\tconsole.warn(\"Menu Error - no container element found matching selector:\", this.table.options.popupContainer , \"(defaulting to document body)\");\n\t\t\t}\n\t\t}else if (container === true){\n\t\t\tcontainer = this.table.element;\n\t\t}\n\t\t\n\t\tif(container && !this._checkContainerIsParent(container)){\n\t\t\tcontainer = false;\n\t\t\tconsole.warn(\"Menu Error - container element does not contain this table:\", this.table.options.popupContainer , \"(defaulting to document body)\");\n\t\t}\n\t\t\n\t\tif(!container){\n\t\t\tcontainer = document.body;\n\t\t}\n\t\t\n\t\treturn container;\n\t}\n\t\n\t_checkContainerIsParent(container, element = this.table.element){\n\t\tif(container === element){\n\t\t\treturn true;\n\t\t}else{\n\t\t\treturn element.parentNode ? this._checkContainerIsParent(container, element.parentNode) : false;\n\t\t}\n\t}\n\t\n\trenderCallback(callback){\n\t\tthis.renderedCallback = callback;\n\t}\n\t\n\tcontainerEventCoords(e){\n\t\tvar touch = !(e instanceof MouseEvent);\n\t\t\n\t\tvar x = touch ? e.touches[0].pageX : e.pageX;\n\t\tvar y = touch ? e.touches[0].pageY : e.pageY;\n\t\t\n\t\tif(this.container !== document.body){\n\t\t\tlet parentOffset = Helpers.elOffset(this.container);\n\t\t\t\n\t\t\tx -= parentOffset.left;\n\t\t\ty -= parentOffset.top;\n\t\t}\n\t\t\n\t\treturn {x, y};\n\t}\n\t\n\telementPositionCoords(element, position = \"right\"){\n\t\tvar offset = Helpers.elOffset(element),\n\t\tcontainerOffset, x, y;\n\t\t\n\t\tif(this.container !== document.body){\n\t\t\tcontainerOffset = Helpers.elOffset(this.container);\n\t\t\t\n\t\t\toffset.left -= containerOffset.left;\n\t\t\toffset.top -= containerOffset.top;\n\t\t}\n\t\t\n\t\tswitch(position){\n\t\t\tcase \"right\":\n\t\t\t\tx = offset.left + element.offsetWidth;\n\t\t\t\ty = offset.top - 1;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"bottom\":\n\t\t\t\tx = offset.left;\n\t\t\t\ty = offset.top + element.offsetHeight;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"left\":\n\t\t\t\tx = offset.left;\n\t\t\t\ty = offset.top - 1;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"top\":\n\t\t\t\tx = offset.left;\n\t\t\t\ty = offset.top;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"center\":\n\t\t\t\tx = offset.left + (element.offsetWidth / 2);\n\t\t\t\ty = offset.top + (element.offsetHeight / 2);\n\t\t\t\tbreak;\n\t\t\t\n\t\t}\n\t\t\n\t\treturn {x, y, offset};\n\t}\n\t\n\tshow(origin, position){\n\t\tvar x, y, parentEl, parentOffset, coords;\n\t\t\n\t\tif(this.destroyed || this.table.destroyed){\n\t\t\treturn this;\n\t\t}\n\t\t\n\t\tif(origin instanceof HTMLElement){\n\t\t\tparentEl = origin;\n\t\t\tcoords = this.elementPositionCoords(origin, position);\n\t\t\t\n\t\t\tparentOffset = coords.offset;\n\t\t\tx = coords.x;\n\t\t\ty = coords.y;\n\t\t\t\n\t\t}else if(typeof origin === \"number\"){\n\t\t\tparentOffset = {top:0, left:0};\n\t\t\tx = origin;\n\t\t\ty = position;\n\t\t}else{\n\t\t\tcoords = this.containerEventCoords(origin);\n\t\t\t\n\t\t\tx = coords.x;\n\t\t\ty = coords.y;\n\t\t\t\n\t\t\tthis.reversedX = false;\n\t\t}\n\t\t\n\t\tthis.element.style.top = y + \"px\";\n\t\tthis.element.style.left = x + \"px\";\n\t\t\n\t\tthis.container.appendChild(this.element);\n\t\t\n\t\tif(typeof this.renderedCallback === \"function\"){\n\t\t\tthis.renderedCallback();\n\t\t}\n\t\t\n\t\tthis._fitToScreen(x, y, parentEl, parentOffset, position);\n\t\t\n\t\tthis.visible = true;\n\t\t\n\t\tthis.subscribe(\"table-destroy\", this.destroyBinding);\n\t\t\n\t\tthis.element.addEventListener(\"mousedown\", (e) => {\n\t\t\te.stopPropagation();\n\t\t});\n\t\t\n\t\treturn this;\n\t}\n\t\n\t_fitToScreen(x, y, parentEl, parentOffset, position){\n\t\tvar scrollTop = this.container === document.body ? document.documentElement.scrollTop : this.container.scrollTop;\n\t\t\n\t\t//move menu to start on right edge if it is too close to the edge of the screen\n\t\tif((x + this.element.offsetWidth) >= this.container.offsetWidth || this.reversedX){\n\t\t\tthis.element.style.left = \"\";\n\t\t\t\n\t\t\tif(parentEl){\n\t\t\t\tthis.element.style.right = (this.container.offsetWidth - parentOffset.left) + \"px\";\n\t\t\t}else{\n\t\t\t\tthis.element.style.right = (this.container.offsetWidth - x) + \"px\";\n\t\t\t}\n\t\t\t\n\t\t\tthis.reversedX = true;\n\t\t}\n\t\t\n\t\t//move menu to start on bottom edge if it is too close to the edge of the screen\n\t\tif((y + this.element.offsetHeight) > Math.max(this.container.offsetHeight, scrollTop ? this.container.scrollHeight : 0)) {\n\t\t\tif(parentEl){\n\t\t\t\tswitch(position){\n\t\t\t\t\tcase \"bottom\":\n\t\t\t\t\t\tthis.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight - parentEl.offsetHeight - 1) + \"px\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight + parentEl.offsetHeight + 1) + \"px\";\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tthis.element.style.top = (parseInt(this.element.style.top) - this.element.offsetHeight) + \"px\";\n\t\t\t}\n\t\t}\n\t}\n\t\n\tisVisible(){\n\t\treturn this.visible;\n\t}\n\t\n\thideOnBlur(callback){\n\t\tthis.blurable = true;\n\t\t\n\t\tif(this.visible){\n\t\t\tsetTimeout(() => {\n\t\t\t\tif(this.visible){\n\t\t\t\t\tthis.table.rowManager.element.addEventListener(\"scroll\", this.blurEvent);\n\t\t\t\t\tthis.subscribe(\"cell-editing\", this.blurEvent);\n\t\t\t\t\tdocument.body.addEventListener(\"click\", this.blurEvent);\n\t\t\t\t\tdocument.body.addEventListener(\"contextmenu\", this.blurEvent);\n\t\t\t\t\tdocument.body.addEventListener(\"mousedown\", this.blurEvent);\n\t\t\t\t\twindow.addEventListener(\"resize\", this.blurEvent);\n\t\t\t\t\tdocument.body.addEventListener(\"keydown\", this.escEvent);\n\n\t\t\t\t\tthis.blurEventsBound = true;\n\t\t\t\t}\n\t\t\t}, 100);\n\t\t\t\n\t\t\tthis.blurCallback = callback;\n\t\t}\n\t\t\n\t\treturn this;\n\t}\n\t\n\t_escapeCheck(e){\n\t\tif(e.keyCode == 27){\n\t\t\tthis.hide();\n\t\t}\n\t}\n\t\n\tblockHide(){\n\t\tthis.hideable = false;\n\t}\n\t\n\trestoreHide(){\n\t\tthis.hideable = true;\n\t}\n\t\n\thide(silent = false){\n\t\tif(this.visible && this.hideable){\n\t\t\tif(this.blurable && this.blurEventsBound){\n\t\t\t\tdocument.body.removeEventListener(\"keydown\", this.escEvent);\n\t\t\t\tdocument.body.removeEventListener(\"click\", this.blurEvent);\n\t\t\t\tdocument.body.removeEventListener(\"contextmenu\", this.blurEvent);\n\t\t\t\tdocument.body.removeEventListener(\"mousedown\", this.blurEvent);\n\t\t\t\twindow.removeEventListener(\"resize\", this.blurEvent);\n\t\t\t\tthis.table.rowManager.element.removeEventListener(\"scroll\", this.blurEvent);\n\t\t\t\tthis.unsubscribe(\"cell-editing\", this.blurEvent);\n\n\t\t\t\tthis.blurEventsBound = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.childPopup){\n\t\t\t\tthis.childPopup.hide();\n\t\t\t}\n\t\t\t\n\t\t\tif(this.parent){\n\t\t\t\tthis.parent.childPopup = null;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.element.parentNode){\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\t}\n\t\t\t\n\t\t\tthis.visible = false;\n\t\t\t\n\t\t\tif(this.blurCallback && !silent){\n\t\t\t\tthis.blurCallback();\n\t\t\t}\n\t\t\t\n\t\t\tthis.unsubscribe(\"table-destroy\", this.destroyBinding);\n\t\t}\n\t\t\n\t\treturn this;\n\t}\n\t\n\tchild(element){\n\t\tif(this.childPopup){\n\t\t\tthis.childPopup.hide();\n\t\t}\n\t\t\n\t\tthis.childPopup = new Popup(this.table, element, this);\n\t\t\n\t\treturn this.childPopup;\n\t}\n}","import CoreFeature from './CoreFeature.js';\nimport Popup from './tools/Popup.js';\n\nclass Module extends CoreFeature{\n\t\n\tconstructor(table, name){\n\t\tsuper(table);\n\t\t\n\t\tthis._handler = null;\n\t}\n\t\n\tinitialize(){\n\t\t// setup module when table is initialized, to be overridden in module\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t////// Options Registration ///////\n\t///////////////////////////////////\n\t\n\tregisterTableOption(key, value){\n\t\tthis.table.optionsList.register(key, value);\n\t}\n\t\n\tregisterColumnOption(key, value){\n\t\tthis.table.columnManager.optionsList.register(key, value);\n\t}\n\t\n\t///////////////////////////////////\n\t/// Public Function Registration ///\n\t///////////////////////////////////\n\t\n\tregisterTableFunction(name, func){\n\t\tif(typeof this.table[name] === \"undefined\"){\n\t\t\tthis.table[name] = (...args) => {\n\t\t\t\tthis.table.initGuard(name);\n\t\t\t\t\n\t\t\t\treturn func(...args);\n\t\t\t};\n\t\t}else{\n\t\t\tconsole.warn(\"Unable to bind table function, name already in use\", name);\n\t\t}\n\t}\n\t\n\tregisterComponentFunction(component, func, handler){\n\t\treturn this.table.componentFunctionBinder.bind(component, func, handler);\n\t}\n\t\n\t///////////////////////////////////\n\t////////// Data Pipeline //////////\n\t///////////////////////////////////\n\t\n\tregisterDataHandler(handler, priority){\n\t\tthis.table.rowManager.registerDataPipelineHandler(handler, priority);\n\t\tthis._handler = handler;\n\t}\n\t\n\tregisterDisplayHandler(handler, priority){\n\t\tthis.table.rowManager.registerDisplayPipelineHandler(handler, priority);\n\t\tthis._handler = handler;\n\t}\n\t\n\tdisplayRows(adjust){\n\t\tvar index = this.table.rowManager.displayRows.length - 1, \n\t\tlookupIndex;\n\t\t\n\t\tif(this._handler){\n\t\t\tlookupIndex = this.table.rowManager.displayPipeline.findIndex((item) => {\n\t\t\t\treturn item.handler === this._handler;\n\t\t\t});\n\n\t\t\tif(lookupIndex > -1){\n\t\t\t\tindex = lookupIndex;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(adjust){\n\t\t\tindex = index + adjust;\n\t\t}\n\n\t\tif(this._handler){\n\t\t\tif(index > -1){\n\t\t\t\treturn this.table.rowManager.getDisplayRows(index);\n\t\t\t}else{\n\t\t\t\treturn this.activeRows();\n\t\t\t}\n\t\t}\t\n\t}\n\t\n\tactiveRows(){\n\t\treturn this.table.rowManager.activeRows;\n\t}\n\t\n\trefreshData(renderInPosition, handler){\n\t\tif(!handler){\n\t\t\thandler = this._handler;\n\t\t}\n\t\t\n\t\tif(handler){\n\t\t\tthis.table.rowManager.refreshActiveData(handler, false, renderInPosition);\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t//////// Footer Management ////////\n\t///////////////////////////////////\n\t\n\tfooterAppend(element){\n\t\treturn this.table.footerManager.append(element);\n\t}\n\t\n\tfooterPrepend(element){\n\t\treturn this.table.footerManager.prepend(element);\n\t}\n\t\n\tfooterRemove(element){\n\t\treturn this.table.footerManager.remove(element);\n\t} \n\t\n\t///////////////////////////////////\n\t//////// Popups Management ////////\n\t///////////////////////////////////\n\t\n\tpopup(menuEl, menuContainer){\n\t\treturn new Popup(this.table, menuEl, menuContainer);\n\t}\n\t\n\t///////////////////////////////////\n\t//////// Alert Management ////////\n\t///////////////////////////////////\n\t\n\talert(content, type){\n\t\treturn this.table.alertManager.alert(content, type);\n\t}\n\t\n\tclearAlert(){\n\t\treturn this.table.alertManager.clear();\n\t}\n\t\n}\n\nexport default Module;","//resize columns to fit data they contain and stretch row to fill table, also used for fitDataTable\nexport default function(columns, forced){\n\tcolumns.forEach(function(column){\n\t\tcolumn.reinitializeWidth();\n\t});\n\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\tthis.table.modules.responsiveLayout.update();\n\t}\n}","import fitData from './modes/fitData.js';\nimport fitDataGeneral from './modes/fitDataGeneral.js';\nimport fitDataStretch from './modes/fitDataStretch.js';\nimport fitColumns from './modes/fitColumns.js';\n\nexport default {\n\tfitData:fitData,\n\tfitDataFill:fitDataGeneral,\n\tfitDataTable:fitDataGeneral,\n\tfitDataStretch:fitDataStretch,\n\tfitColumns:fitColumns ,\n};","//resize columns to fit data they contain\nexport default function(columns, forced){\n\tif(forced){\n\t\tthis.table.columnManager.renderer.reinitializeColumnWidths(columns);\n\t}\n\t\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\tthis.table.modules.responsiveLayout.update();\n\t}\n}","//resize columns to fit data the contain and stretch last column to fill table\nexport default function(columns, forced){\n\tvar colsWidth = 0,\n\ttableWidth = this.table.rowManager.element.clientWidth,\n\tgap = 0,\n\tlastCol = false;\n\n\tcolumns.forEach((column, i) => {\n\t\tif(!column.widthFixed){\n\t\t\tcolumn.reinitializeWidth();\n\t\t}\n\n\t\tif(this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible){\n\t\t\tlastCol = column;\n\t\t}\n\n\t\tif(column.visible){\n\t\t\tcolsWidth += column.getWidth();\n\t\t}\n\t});\n\n\tif(lastCol){\n\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\n\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\t\tlastCol.setWidth(0);\n\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t}\n\n\t\tif(gap > 0){\n\t\t\tlastCol.setWidth(gap);\n\t\t}else{\n\t\t\tlastCol.reinitializeWidth();\n\t\t}\n\t}else{\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t}\n\t}\n}","//resize columns to fit\nexport default function(columns, forced){\n\tvar totalWidth = this.table.rowManager.element.getBoundingClientRect().width; //table element width\n\tvar fixedWidth = 0; //total width of columns with a defined width\n\tvar flexWidth = 0; //total width available to flexible columns\n\tvar flexGrowUnits = 0; //total number of widthGrow blocks across all columns\n\tvar flexColWidth = 0; //desired width of flexible columns\n\tvar flexColumns = []; //array of flexible width columns\n\tvar fixedShrinkColumns = []; //array of fixed width columns that can shrink\n\tvar flexShrinkUnits = 0; //total number of widthShrink blocks across all columns\n\tvar overflowWidth = 0; //horizontal overflow width\n\tvar gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps\n\n\tfunction calcWidth(width){\n\t\tvar colWidth;\n\n\t\tif(typeof(width) == \"string\"){\n\t\t\tif(width.indexOf(\"%\") > -1){\n\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width);\n\t\t\t}else{\n\t\t\t\tcolWidth = parseInt(width);\n\t\t\t}\n\t\t}else{\n\t\t\tcolWidth = width;\n\t\t}\n\n\t\treturn colWidth;\n\t}\n\n\t//ensure columns resize to take up the correct amount of space\n\tfunction scaleColumns(columns, freeSpace, colWidth, shrinkCols){\n\t\tvar oversizeCols = [],\n\t\toversizeSpace = 0,\n\t\tremainingSpace = 0,\n\t\tnextColWidth = 0,\n\t\tremainingFlexGrowUnits = flexGrowUnits,\n\t\tgap = 0,\n\t\tchangeUnits = 0,\n\t\tundersizeCols = [];\n\n\t\tfunction calcGrow(col){\n\t\t\treturn (colWidth * (col.column.definition.widthGrow || 1));\n\t\t}\n\n\t\tfunction calcShrink(col){\n\t\t\treturn (calcWidth(col.width) - (colWidth * (col.column.definition.widthShrink || 0)));\n\t\t}\n\n\t\tcolumns.forEach(function(col, i){\n\t\t\tvar width = shrinkCols ? calcShrink(col) : calcGrow(col);\n\t\t\tif(col.column.minWidth >= width){\n\t\t\t\toversizeCols.push(col);\n\t\t\t}else{\n\t\t\t\tif(col.column.maxWidth && col.column.maxWidth < width){\n\t\t\t\t\tcol.width = col.column.maxWidth;\n\t\t\t\t\tfreeSpace -= col.column.maxWidth;\n\n\t\t\t\t\tremainingFlexGrowUnits -= shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\n\n\t\t\t\t\tif(remainingFlexGrowUnits){\n\t\t\t\t\t\tcolWidth = Math.floor(freeSpace/remainingFlexGrowUnits);\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tundersizeCols.push(col);\n\t\t\t\t\tchangeUnits += shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif(oversizeCols.length){\n\t\t\toversizeCols.forEach(function(col){\n\t\t\t\toversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;\n\t\t\t\tcol.width = col.column.minWidth;\n\t\t\t});\n\n\t\t\tremainingSpace = freeSpace - oversizeSpace;\n\n\t\t\tnextColWidth = changeUnits ? Math.floor(remainingSpace/changeUnits) : remainingSpace;\n\n\t\t\tgap = scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);\n\t\t}else{\n\t\t\tgap = changeUnits ? freeSpace - (Math.floor(freeSpace/changeUnits) * changeUnits) : freeSpace;\n\n\t\t\tundersizeCols.forEach(function(column){\n\t\t\t\tcolumn.width = shrinkCols ? calcShrink(column) : calcGrow(column);\n\t\t\t});\n\t\t}\n\n\t\treturn gap;\n\t}\n\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\n\t\tthis.table.modules.responsiveLayout.update();\n\t}\n\n\t//adjust for vertical scrollbar if present\n\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\n\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\n\t}\n\n\tcolumns.forEach(function(column){\n\t\tvar width, minWidth, colWidth;\n\n\t\tif(column.visible){\n\n\t\t\twidth = column.definition.width;\n\t\t\tminWidth = parseInt(column.minWidth);\n\n\t\t\tif(width){\n\n\t\t\t\tcolWidth = calcWidth(width);\n\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\n\n\t\t\t\tif(column.definition.widthShrink){\n\t\t\t\t\tfixedShrinkColumns.push({\n\t\t\t\t\t\tcolumn:column,\n\t\t\t\t\t\twidth:colWidth > minWidth ? colWidth : minWidth\n\t\t\t\t\t});\n\t\t\t\t\tflexShrinkUnits += column.definition.widthShrink;\n\t\t\t\t}\n\n\t\t\t}else{\n\t\t\t\tflexColumns.push({\n\t\t\t\t\tcolumn:column,\n\t\t\t\t\twidth:0,\n\t\t\t\t});\n\t\t\t\tflexGrowUnits += column.definition.widthGrow || 1;\n\t\t\t}\n\t\t}\n\t});\n\n\t//calculate available space\n\tflexWidth = totalWidth - fixedWidth;\n\n\t//calculate correct column size\n\tflexColWidth = Math.floor(flexWidth / flexGrowUnits);\n\n\t//generate column widths\n\tgapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);\n\n\t//increase width of last column to account for rounding errors\n\tif(flexColumns.length && gapFill > 0){\n\t\tflexColumns[flexColumns.length-1].width += gapFill;\n\t}\n\n\t//calculate space for columns to be shrunk into\n\tflexColumns.forEach(function(col){\n\t\tflexWidth -= col.width;\n\t});\n\n\toverflowWidth = Math.abs(gapFill) + flexWidth;\n\n\t//shrink oversize columns if there is no available space\n\tif(overflowWidth > 0 && flexShrinkUnits){\n\t\tgapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);\n\t}\n\n\t//decrease width of last column to account for rounding errors\n\tif(gapFill && fixedShrinkColumns.length){\n\t\tfixedShrinkColumns[fixedShrinkColumns.length-1].width -= gapFill;\n\t}\n\n\tflexColumns.forEach(function(col){\n\t\tcol.column.setWidth(col.width);\n\t});\n\n\tfixedShrinkColumns.forEach(function(col){\n\t\tcol.column.setWidth(col.width);\n\t});\n}\n","import Module from '../../core/Module.js';\n\nimport defaultModes from './defaults/modes.js';\n\nclass Layout extends Module{\n\n\tconstructor(table){\n\t\tsuper(table, \"layout\");\n\n\t\tthis.mode = null;\n\n\t\tthis.registerTableOption(\"layout\", \"fitData\"); //layout type\n\t\tthis.registerTableOption(\"layoutColumnsOnNewData\", false); //update column widths on setData\n\n\t\tthis.registerColumnOption(\"widthGrow\");\n\t\tthis.registerColumnOption(\"widthShrink\");\n\t}\n\n\t//initialize layout system\n\tinitialize(){\n\t\tvar layout = this.table.options.layout;\n\n\t\tif(Layout.modes[layout]){\n\t\t\tthis.mode = layout;\n\t\t}else{\n\t\t\tconsole.warn(\"Layout Error - invalid mode set, defaulting to 'fitData' : \" + layout);\n\t\t\tthis.mode = 'fitData';\n\t\t}\n\n\t\tthis.table.element.setAttribute(\"tabulator-layout\", this.mode);\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t}\n\n\tinitializeColumn(column){\n\t\tif(column.definition.widthGrow){\n\t\t\tcolumn.definition.widthGrow = Number(column.definition.widthGrow);\n\t\t}\n\t\tif(column.definition.widthShrink){\n\t\t\tcolumn.definition.widthShrink = Number(column.definition.widthShrink);\n\t\t}\n\t}\n\n\tgetMode(){\n\t\treturn this.mode;\n\t}\n\n\t//trigger table layout\n\tlayout(dataChanged){\n\t\tthis.dispatch(\"layout-refreshing\");\n\t\tLayout.modes[this.mode].call(this, this.table.columnManager.columnsByIndex, dataChanged);\n\t\tthis.dispatch(\"layout-refreshed\");\n\t}\n}\n\nLayout.moduleName = \"layout\";\n\n//load defaults\nLayout.modes = defaultModes;\n\nexport default Layout;","import Module from '../../core/Module.js';\n\nimport Helpers from '../../core/tools/Helpers.js';\n\nimport defaultLangs from './defaults/langs.js';\n\nclass Localize extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.locale = \"default\"; //current locale\n\t\tthis.lang = false; //current language\n\t\tthis.bindings = {}; //update events to call when locale is changed\n\t\tthis.langList = {};\n\n\t\tthis.registerTableOption(\"locale\", false); //current system language\n\t\tthis.registerTableOption(\"langs\", {});\n\t}\n\n\tinitialize(){\n\t\tthis.langList = Helpers.deepClone(Localize.langs);\n\n\t\tif(this.table.options.columnDefaults.headerFilterPlaceholder !== false){\n\t\t\tthis.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder);\n\t\t}\n\n\t\tfor(let locale in this.table.options.langs){\n\t\t\tthis.installLang(locale, this.table.options.langs[locale]);\n\t\t}\n\n\t\tthis.setLocale(this.table.options.locale);\n\n\t\tthis.registerTableFunction(\"setLocale\", this.setLocale.bind(this));\n\t\tthis.registerTableFunction(\"getLocale\", this.getLocale.bind(this));\n\t\tthis.registerTableFunction(\"getLang\", this.getLang.bind(this));\n\t}\n\n\t//set header placeholder\n\tsetHeaderFilterPlaceholder(placeholder){\n\t\tthis.langList.default.headerFilters.default = placeholder;\n\t}\n\n\t//setup a lang description object\n\tinstallLang(locale, lang){\n\t\tif(this.langList[locale]){\n\t\t\tthis._setLangProp(this.langList[locale], lang);\n\t\t}else{\n\t\t\tthis.langList[locale] = lang;\n\t\t}\n\t}\n\n\t_setLangProp(lang, values){\n\t\tfor(let key in values){\n\t\t\tif(lang[key] && typeof lang[key] == \"object\"){\n\t\t\t\tthis._setLangProp(lang[key], values[key]);\n\t\t\t}else{\n\t\t\t\tlang[key] = values[key];\n\t\t\t}\n\t\t}\n\t}\n\n\t//set current locale\n\tsetLocale(desiredLocale){\n\t\tdesiredLocale = desiredLocale || \"default\";\n\n\t\t//fill in any matching language values\n\t\tfunction traverseLang(trans, path){\n\t\t\tfor(var prop in trans){\n\t\t\t\tif(typeof trans[prop] == \"object\"){\n\t\t\t\t\tif(!path[prop]){\n\t\t\t\t\t\tpath[prop] = {};\n\t\t\t\t\t}\n\t\t\t\t\ttraverseLang(trans[prop], path[prop]);\n\t\t\t\t}else{\n\t\t\t\t\tpath[prop] = trans[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//determining correct locale to load\n\t\tif(desiredLocale === true && navigator.language){\n\t\t\t//get local from system\n\t\t\tdesiredLocale = navigator.language.toLowerCase();\n\t\t}\n\n\t\tif(desiredLocale){\n\t\t\t//if locale is not set, check for matching top level locale else use default\n\t\t\tif(!this.langList[desiredLocale]){\n\t\t\t\tlet prefix = desiredLocale.split(\"-\")[0];\n\n\t\t\t\tif(this.langList[prefix]){\n\t\t\t\t\tconsole.warn(\"Localization Error - Exact matching locale not found, using closest match: \", desiredLocale, prefix);\n\t\t\t\t\tdesiredLocale = prefix;\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Localization Error - Matching locale not found, using default: \", desiredLocale);\n\t\t\t\t\tdesiredLocale = \"default\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.locale = desiredLocale;\n\n\t\t//load default lang template\n\t\tthis.lang = Helpers.deepClone(this.langList.default || {});\n\n\t\tif(desiredLocale != \"default\"){\n\t\t\ttraverseLang(this.langList[desiredLocale], this.lang);\n\t\t}\n\n\t\tthis.dispatchExternal(\"localized\", this.locale, this.lang);\n\n\t\tthis._executeBindings();\n\t}\n\n\t//get current locale\n\tgetLocale(locale){\n\t\treturn this.locale;\n\t}\n\n\t//get lang object for given local or current if none provided\n\tgetLang(locale){\n\t\treturn locale ? this.langList[locale] : this.lang;\n\t}\n\n\t//get text for current locale\n\tgetText(path, value){\n\t\tvar fillPath = value ? path + \"|\" + value : path,\n\t\tpathArray = fillPath.split(\"|\"),\n\t\ttext = this._getLangElement(pathArray, this.locale);\n\n\t\t// if(text === false){\n\t\t// \tconsole.warn(\"Localization Error - Matching localized text not found for given path: \", path);\n\t\t// }\n\n\t\treturn text || \"\";\n\t}\n\n\t//traverse langs object and find localized copy\n\t_getLangElement(path, locale){\n\t\tvar root = this.lang;\n\n\t\tpath.forEach(function(level){\n\t\t\tvar rootPath;\n\n\t\t\tif(root){\n\t\t\t\trootPath = root[level];\n\n\t\t\t\tif(typeof rootPath != \"undefined\"){\n\t\t\t\t\troot = rootPath;\n\t\t\t\t}else{\n\t\t\t\t\troot = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn root;\n\t}\n\n\t//set update binding\n\tbind(path, callback){\n\t\tif(!this.bindings[path]){\n\t\t\tthis.bindings[path] = [];\n\t\t}\n\n\t\tthis.bindings[path].push(callback);\n\n\t\tcallback(this.getText(path), this.lang);\n\t}\n\n\t//iterate through bindings and trigger updates\n\t_executeBindings(){\n\t\tfor(let path in this.bindings){\n\t\t\tthis.bindings[path].forEach((binding) => {\n\t\t\t\tbinding(this.getText(path), this.lang);\n\t\t\t});\n\t\t}\n\t}\n}\n\nLocalize.moduleName = \"localize\";\n\n//load defaults\nLocalize.langs = defaultLangs;\n\nexport default Localize;","export default {\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},\n\t\t\"data\":{\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\t\"counter\":{\n\t\t\t\t\"showing\": \"Showing\",\n\t\t\t\t\"of\": \"of\",\n\t\t\t\t\"rows\": \"rows\",\n\t\t\t\t\"pages\": \"pages\",\n\t\t\t}\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};","import Module from '../../core/Module.js';\nimport TableRegistry from '../../core/tools/TableRegistry.js';\n\nclass Comms extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\t}\n\n\tinitialize(){\n\t\tthis.registerTableFunction(\"tableComms\", this.receive.bind(this));\n\t}\n\n\tgetConnections(selectors){\n\t\tvar connections = [],\n\t\tconnection;\n\n\t\tconnection = TableRegistry.lookupTable(selectors);\n\n\t\tconnection.forEach((con) =>{\n\t\t\tif(this.table !== con){\n\t\t\t\tconnections.push(con);\n\t\t\t}\n\t\t});\n\n\t\treturn connections;\n\t}\n\n\tsend(selectors, module, action, data){\n\t\tvar connections = this.getConnections(selectors);\n\n\t\tconnections.forEach((connection) => {\n\t\t\tconnection.tableComms(this.table.element, module, action, data);\n\t\t});\n\n\t\tif(!connections.length && selectors){\n\t\t\tconsole.warn(\"Table Connection Error - No tables matching selector found\", selectors);\n\t\t}\n\t}\n\n\treceive(table, module, action, data){\n\t\tif(this.table.modExists(module)){\n\t\t\treturn this.table.modules[module].commsReceived(table, action, data);\n\t\t}else{\n\t\t\tconsole.warn(\"Inter-table Comms Error - no such module:\", module);\n\t\t}\n\t}\n}\n\nComms.moduleName = \"comms\";\n\nexport default Comms;","import * as coreModules from '../modules/core.js';\nimport TableRegistry from './TableRegistry.js';\n\nexport default class ModuleBinder {\n\t\n\tconstructor(tabulator, modules){\n\t\tthis.bindStaticFunctionality(tabulator);\n\t\tthis.bindModules(tabulator, coreModules, true);\n\t\t\n\t\tif(modules){\n\t\t\tthis.bindModules(tabulator, modules);\n\t\t}\n\t}\n\t\n\tbindStaticFunctionality(tabulator){\n\t\ttabulator.moduleBindings = {};\n\t\t\n\t\ttabulator.extendModule = function(name, property, values){\n\t\t\tif(tabulator.moduleBindings[name]){\n\t\t\t\tvar source = tabulator.moduleBindings[name][property];\n\t\t\t\t\n\t\t\t\tif(source){\n\t\t\t\t\tif(typeof values == \"object\"){\n\t\t\t\t\t\tfor(let key in values){\n\t\t\t\t\t\t\tsource[key] = values[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Module Error - Invalid value type, it must be an object\");\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Module Error - property does not exist:\", property);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Module Error - module does not exist:\", name);\n\t\t\t}\n\t\t};\n\t\t\n\t\ttabulator.registerModule = function(modules){\n\t\t\tif(!Array.isArray(modules)){\n\t\t\t\tmodules = [modules];\n\t\t\t}\n\t\t\t\n\t\t\tmodules.forEach((mod) => {\n\t\t\t\ttabulator.registerModuleBinding(mod);\n\t\t\t});\n\t\t};\n\t\t\n\t\ttabulator.registerModuleBinding = function(mod){\n\t\t\ttabulator.moduleBindings[mod.moduleName] = mod;\n\t\t};\n\t\t\n\t\ttabulator.findTable = function(query){\n\t\t\tvar results = TableRegistry.lookupTable(query, true);\n\t\t\treturn Array.isArray(results) && !results.length ? false : results;\n\t\t};\n\t\t\n\t\t//ensure that module are bound to instantiated function\n\t\ttabulator.prototype.bindModules = function(){\n\t\t\tvar orderedStartMods = [],\n\t\t\torderedEndMods = [],\n\t\t\tunOrderedMods = [];\n\t\t\t\n\t\t\tthis.modules = {};\n\t\t\t\n\t\t\tfor(var name in tabulator.moduleBindings){\n\t\t\t\tlet mod = tabulator.moduleBindings[name];\n\t\t\t\tlet module = new mod(this);\n\t\t\t\t\n\t\t\t\tthis.modules[name] = module;\n\t\t\t\t\n\t\t\t\tif(mod.prototype.moduleCore){\n\t\t\t\t\tthis.modulesCore.push(module);\n\t\t\t\t}else{\n\t\t\t\t\tif(mod.moduleInitOrder){\n\t\t\t\t\t\tif(mod.moduleInitOrder < 0){\n\t\t\t\t\t\t\torderedStartMods.push(module);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\torderedEndMods.push(module);\n\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\tunOrderedMods.push(module);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\torderedStartMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1);\n\t\t\torderedEndMods.sort((a, b) => a.moduleInitOrder > b.moduleInitOrder ? 1 : -1);\n\t\t\t\n\t\t\tthis.modulesRegular = orderedStartMods.concat(unOrderedMods.concat(orderedEndMods));\n\t\t};\n\t}\n\t\n\tbindModules(tabulator, modules, core){\n\t\tvar mods = Object.values(modules);\n\t\t\n\t\tif(core){\n\t\t\tmods.forEach((mod) => {\n\t\t\t\tmod.prototype.moduleCore = true;\n\t\t\t});\n\t\t}\n\t\t\n\t\ttabulator.registerModule(mods);\n\t}\n}","import CoreFeature from '../CoreFeature.js';\n\nexport default class Alert extends CoreFeature{\n\tconstructor(table){\n\t\tsuper(table);\n \n\t\tthis.element = this._createAlertElement();\n\t\tthis.msgElement = this._createMsgElement();\n\t\tthis.type = null;\n \n\t\tthis.element.appendChild(this.msgElement);\n\t}\n \n\t_createAlertElement(){\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-alert\");\n\t\treturn el;\n\t}\n \n\t_createMsgElement(){\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-alert-msg\");\n\t\tel.setAttribute(\"role\", \"alert\");\n\t\treturn el;\n\t}\n \n\t_typeClass(){\n\t\treturn \"tabulator-alert-state-\" + this.type;\n\t}\n \n\talert(content, type = \"msg\"){\n\t\tif(content){\n\t\t\tthis.clear();\n\n\t\t\tthis.dispatch(\"alert-show\", type);\n \n\t\t\tthis.type = type;\n \n\t\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\n \n\t\t\tthis.msgElement.classList.add(this._typeClass());\n \n\t\t\tif(typeof content === \"function\"){\n\t\t\t\tcontent = content();\n\t\t\t}\n \n\t\t\tif(content instanceof HTMLElement){\n\t\t\t\tthis.msgElement.appendChild(content);\n\t\t\t}else{\n\t\t\t\tthis.msgElement.innerHTML = content;\n\t\t\t}\n \n\t\t\tthis.table.element.appendChild(this.element);\n\t\t}\n\t}\n \n\tclear(){\n\t\tthis.dispatch(\"alert-hide\", this.type);\n\n\t\tif(this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n \n\t\tthis.msgElement.classList.remove(this._typeClass());\n\t}\n}","'use strict';\n\nimport defaultOptions from './defaults/options.js';\n\nimport ColumnManager from './ColumnManager.js';\nimport RowManager from './RowManager.js';\nimport FooterManager from './FooterManager.js';\n\nimport InteractionMonitor from './tools/InteractionMonitor.js';\nimport ComponentFunctionBinder from './tools/ComponentFunctionBinder.js';\nimport DataLoader from './tools/DataLoader.js';\n\nimport ExternalEventBus from './tools/ExternalEventBus.js';\nimport InternalEventBus from './tools/InternalEventBus.js';\n\nimport DeprecationAdvisor from './tools/DeprecationAdvisor.js';\n\nimport TableRegistry from './tools/TableRegistry.js';\nimport ModuleBinder from './tools/ModuleBinder.js';\n\nimport OptionsList from './tools/OptionsList.js';\n\nimport Alert from './tools/Alert.js';\n\nclass Tabulator {\n\t\n\tconstructor(element, options){\n\t\t\n\t\tthis.options = {};\n\t\t\n\t\tthis.columnManager = null; // hold Column Manager\n\t\tthis.rowManager = null; //hold Row Manager\n\t\tthis.footerManager = null; //holder Footer Manager\n\t\tthis.alertManager = null; //hold Alert Manager\n\t\tthis.vdomHoz = null; //holder horizontal virtual dom\n\t\tthis.externalEvents = null; //handle external event messaging\n\t\tthis.eventBus = null; //handle internal event messaging\n\t\tthis.interactionMonitor = false; //track user interaction\n\t\tthis.browser = \"\"; //hold current browser type\n\t\tthis.browserSlow = false; //handle reduced functionality for slower browsers\n\t\tthis.browserMobile = false; //check if running on mobile, prevent resize cancelling edit on keyboard appearance\n\t\tthis.rtl = false; //check if the table is in RTL mode\n\t\tthis.originalElement = null; //hold original table element if it has been replaced\n\t\t\n\t\tthis.componentFunctionBinder = new ComponentFunctionBinder(this); //bind component functions\n\t\tthis.dataLoader = false; //bind component functions\n\t\t\n\t\tthis.modules = {}; //hold all modules bound to this table\n\t\tthis.modulesCore = []; //hold core modules bound to this table (for initialization purposes)\n\t\tthis.modulesRegular = []; //hold regular modules bound to this table (for initialization purposes)\n\t\t\n\t\tthis.deprecationAdvisor = new DeprecationAdvisor(this);\n\t\tthis.optionsList = new OptionsList(this, \"table constructor\");\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.destroyed = false;\n\t\t\n\t\tif(this.initializeElement(element)){\n\t\t\t\n\t\t\tthis.initializeCoreSystems(options);\n\t\t\t\n\t\t\t//delay table creation to allow event bindings immediately after the constructor\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis._create();\n\t\t\t});\n\t\t}\n\t\t\n\t\tTableRegistry.register(this); //register table for inter-device communication\n\t}\n\t\n\tinitializeElement(element){\n\t\tif(typeof HTMLElement !== \"undefined\" && element instanceof HTMLElement){\n\t\t\tthis.element = element;\n\t\t\treturn true;\n\t\t}else if(typeof element === \"string\"){\n\t\t\tthis.element = document.querySelector(element);\n\t\t\t\n\t\t\tif(this.element){\n\t\t\t\treturn true;\n\t\t\t}else{\n\t\t\t\tconsole.error(\"Tabulator Creation Error - no element found matching selector: \", element);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.error(\"Tabulator Creation Error - Invalid element provided:\", element);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tinitializeCoreSystems(options){\n\t\tthis.columnManager = new ColumnManager(this);\n\t\tthis.rowManager = new RowManager(this);\n\t\tthis.footerManager = new FooterManager(this);\n\t\tthis.dataLoader = new DataLoader(this);\n\t\tthis.alertManager = new Alert(this);\n\t\t\n\t\tthis.bindModules();\n\t\t\n\t\tthis.options = this.optionsList.generate(Tabulator.defaultOptions, options);\n\t\t\n\t\tthis._clearObjectPointers();\n\t\t\n\t\tthis._mapDeprecatedFunctionality();\n\t\t\n\t\tthis.externalEvents = new ExternalEventBus(this, this.options, this.options.debugEventsExternal);\n\t\tthis.eventBus = new InternalEventBus(this.options.debugEventsInternal);\n\t\t\n\t\tthis.interactionMonitor = new InteractionMonitor(this);\n\t\t\n\t\tthis.dataLoader.initialize();\n\t\t// this.columnManager.initialize();\n\t\t// this.rowManager.initialize();\n\t\tthis.footerManager.initialize();\n\t}\n\t\n\t//convert deprecated functionality to new functions\n\t_mapDeprecatedFunctionality(){\n\t\t//all previously deprecated functionality removed in the 5.0 release\n\t}\n\t\n\t_clearSelection(){\n\t\t\n\t\tthis.element.classList.add(\"tabulator-block-select\");\n\t\t\n\t\tif (window.getSelection) {\n\t\t\tif (window.getSelection().empty) { // Chrome\n\t\t\t\twindow.getSelection().empty();\n\t\t\t} else if (window.getSelection().removeAllRanges) { // Firefox\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t}\n\t\t} else if (document.selection) { // IE?\n\t\t\tdocument.selection.empty();\n\t\t}\n\t\t\n\t\tthis.element.classList.remove(\"tabulator-block-select\");\n\t}\n\t\n\t//create table\n\t_create(){\n\t\tthis.externalEvents.dispatch(\"tableBuilding\");\n\t\tthis.eventBus.dispatch(\"table-building\");\n\t\t\n\t\tthis._rtlCheck();\n\t\t\n\t\tthis._buildElement();\n\t\t\n\t\tthis._initializeTable();\n\t\t\n\t\tthis._loadInitialData();\n\t\t\n\t\tthis.initialized = true;\n\t\t\n\t\tthis.externalEvents.dispatch(\"tableBuilt\");\n\t}\n\t\n\t_rtlCheck(){\n\t\tvar style = window.getComputedStyle(this.element);\n\t\t\n\t\tswitch(this.options.textDirection){\n\t\t\tcase\"auto\":\n\t\t\t\tif(style.direction !== \"rtl\"){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\n\t\t\tcase \"rtl\":\n\t\t\t\tthis.element.classList.add(\"tabulator-rtl\");\n\t\t\t\tthis.rtl = true;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"ltr\":\n\t\t\t\tthis.element.classList.add(\"tabulator-ltr\");\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tthis.rtl = false;\n\t\t}\n\t}\n\t\n\t//clear pointers to objects in default config object\n\t_clearObjectPointers(){\n\t\tthis.options.columns = this.options.columns.slice(0);\n\t\t\n\t\tif(Array.isArray(this.options.data) && !this.options.reactiveData){\n\t\t\tthis.options.data = this.options.data.slice(0);\n\t\t}\n\t}\n\t\n\t//build tabulator element\n\t_buildElement(){\n\t\tvar element = this.element,\n\t\toptions = this.options,\n\t\tnewElement;\n\t\t\n\t\tif(element.tagName === \"TABLE\"){\n\t\t\tthis.originalElement = this.element;\n\t\t\tnewElement = document.createElement(\"div\");\n\t\t\t\n\t\t\t//transfer attributes to new element\n\t\t\tvar attributes = element.attributes;\n\t\t\t\n\t\t\t// loop through attributes and apply them on div\n\t\t\tfor(var i in attributes){\n\t\t\t\tif(typeof attributes[i] == \"object\"){\n\t\t\t\t\tnewElement.setAttribute(attributes[i].name, attributes[i].value);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// replace table with div element\n\t\t\telement.parentNode.replaceChild(newElement, element);\n\t\t\t\n\t\t\tthis.element = element = newElement;\n\t\t}\n\t\t\n\t\telement.classList.add(\"tabulator\");\n\t\telement.setAttribute(\"role\", \"grid\");\n\t\t\n\t\t//empty element\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\t\n\t\t//set table height\n\t\tif(options.height){\n\t\t\toptions.height = isNaN(options.height) ? options.height : options.height + \"px\";\n\t\t\telement.style.height = options.height;\n\t\t}\n\t\t\n\t\t//set table min height\n\t\tif(options.minHeight !== false){\n\t\t\toptions.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + \"px\";\n\t\t\telement.style.minHeight = options.minHeight;\n\t\t}\n\t\t\n\t\t//set table maxHeight\n\t\tif(options.maxHeight !== false){\n\t\t\toptions.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + \"px\";\n\t\t\telement.style.maxHeight = options.maxHeight;\n\t\t}\n\t}\n\t\n\t//initialize core systems and modules\n\t_initializeTable(){\n\t\tvar element = this.element,\n\t\toptions = this.options;\n\t\t\n\t\tthis.interactionMonitor.initialize();\n\t\t\n\t\tthis.columnManager.initialize();\n\t\tthis.rowManager.initialize();\n\t\t\n\t\tthis._detectBrowser();\n\t\t\n\t\t//initialize core modules\n\t\tthis.modulesCore.forEach((mod) => {\n\t\t\tmod.initialize();\n\t\t});\n\t\t\n\t\t//build table elements\n\t\telement.appendChild(this.columnManager.getElement());\n\t\telement.appendChild(this.rowManager.getElement());\n\t\t\n\t\tif(options.footerElement){\n\t\t\tthis.footerManager.activate();\n\t\t}\n\t\t\n\t\tif(options.autoColumns && options.data){\n\t\t\t\n\t\t\tthis.columnManager.generateColumnsFromRowData(this.options.data);\n\t\t}\n\t\t\n\t\t//initialize regular modules\n\t\tthis.modulesRegular.forEach((mod) => {\n\t\t\tmod.initialize();\n\t\t});\n\t\t\n\t\tthis.columnManager.setColumns(options.columns);\n\t\t\n\t\tthis.eventBus.dispatch(\"table-built\");\n\t}\n\t\n\t_loadInitialData(){\n\t\tthis.dataLoader.load(this.options.data);\n\t\tthis.columnManager.verticalAlignHeaders();\n\t}\n\t\n\t//deconstructor\n\tdestroy(){\n\t\tvar element = this.element;\n\t\t\n\t\tthis.destroyed = true;\n\t\t\n\t\tTableRegistry.deregister(this); //deregister table from inter-device communication\n\t\t\n\t\tthis.eventBus.dispatch(\"table-destroy\");\n\t\t\n\t\t//clear row data\n\t\tthis.rowManager.destroy();\n\t\t\n\t\t//clear DOM\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\telement.classList.remove(\"tabulator\");\n\n\t\tthis.externalEvents.dispatch(\"tableDestroyed\");\n\t}\n\t\n\t_detectBrowser(){\n\t\tvar ua = navigator.userAgent||navigator.vendor||window.opera;\n\t\t\n\t\tif(ua.indexOf(\"Trident\") > -1){\n\t\t\tthis.browser = \"ie\";\n\t\t\tthis.browserSlow = true;\n\t\t}else if(ua.indexOf(\"Edge\") > -1){\n\t\t\tthis.browser = \"edge\";\n\t\t\tthis.browserSlow = true;\n\t\t}else if(ua.indexOf(\"Firefox\") > -1){\n\t\t\tthis.browser = \"firefox\";\n\t\t\tthis.browserSlow = false;\n\t\t}else if(ua.indexOf(\"Mac OS\") > -1){\n\t\t\tthis.browser = \"safari\";\n\t\t\tthis.browserSlow = false;\n\t\t}else{\n\t\t\tthis.browser = \"other\";\n\t\t\tthis.browserSlow = false;\n\t\t}\n\t\t\n\t\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.slice(0,4));\n\t}\n\t\n\tinitGuard(func, msg){\n\t\tvar stack, line;\n\t\t\n\t\tif(this.options.debugInitialization && !this.initialized){\n\t\t\tif(!func){\n\t\t\t\tstack = new Error().stack.split(\"\\n\");\n\t\t\t\t\n\t\t\t\tline = stack[0] == \"Error\" ? stack[2] : stack[1];\n\t\t\t\t\n\t\t\t\tif(line[0] == \" \"){\n\t\t\t\t\tfunc = line.trim().split(\" \")[1].split(\".\")[1];\n\t\t\t\t}else{\n\t\t\t\t\tfunc = line.trim().split(\"@\")[0];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tconsole.warn(\"Table Not Initialized - Calling the \" + func + \" function before the table is initialized may result in inconsistent behavior, Please wait for the `tableBuilt` event before calling this function.\" + (msg ? \" \" + msg : \"\"));\n\t\t}\n\t\t\n\t\treturn this.initialized;\n\t}\n\t\n\t////////////////// Data Handling //////////////////\n\t//block table redrawing\n\tblockRedraw(){\n\t\tthis.initGuard();\n\n\t\tthis.eventBus.dispatch(\"redraw-blocking\");\n\t\t\n\t\tthis.rowManager.blockRedraw();\n\t\tthis.columnManager.blockRedraw();\n\n\t\tthis.eventBus.dispatch(\"redraw-blocked\");\n\t}\n\t\n\t//restore table redrawing\n\trestoreRedraw(){\n\t\tthis.initGuard();\n\n\t\tthis.eventBus.dispatch(\"redraw-restoring\");\n\n\t\tthis.rowManager.restoreRedraw();\n\t\tthis.columnManager.restoreRedraw();\n\n\t\tthis.eventBus.dispatch(\"redraw-restored\");\n\t}\n\t\n\t//load data\n\tsetData(data, params, config){\n\t\tthis.initGuard(false, \"To set initial data please use the 'data' property in the table constructor.\");\n\t\t\n\t\treturn this.dataLoader.load(data, params, config, false);\n\t}\n\t\n\t//clear data\n\tclearData(){\n\t\tthis.initGuard();\n\t\t\n\t\tthis.dataLoader.blockActiveLoad();\n\t\tthis.rowManager.clearData();\n\t}\n\t\n\t//get table data array\n\tgetData(active){\n\t\treturn this.rowManager.getData(active);\n\t}\n\t\n\t//get table data array count\n\tgetDataCount(active){\n\t\treturn this.rowManager.getDataCount(active);\n\t}\n\t\n\t//replace data, keeping table in position with same sort\n\treplaceData(data, params, config){\n\t\tthis.initGuard();\n\t\t\n\t\treturn this.dataLoader.load(data, params, config, true, true);\n\t}\n\t\n\t//update table data\n\tupdateData(data){\n\t\tvar responses = 0;\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.dataLoader.blockActiveLoad();\n\t\t\t\n\t\t\tif(typeof data === \"string\"){\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\t\t\t\n\t\t\tif(data && data.length > 0){\n\t\t\t\tdata.forEach((item) => {\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\n\t\t\t\t\t\n\t\t\t\t\tif(row){\n\t\t\t\t\t\tresponses++;\n\t\t\t\t\t\t\n\t\t\t\t\t\trow.updateData(item)\n\t\t\t\t\t\t\t.then(()=>{\n\t\t\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(!responses){\n\t\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.catch((e) => {\n\t\t\t\t\t\t\t\treject(\"Update Error - Unable to update row\", item, e);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\treject(\"Update Error - Unable to find row\", item);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\t\treject(\"Update Error - No data provided\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\taddData(data, pos, index){\n\t\tthis.initGuard();\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.dataLoader.blockActiveLoad();\n\t\t\t\n\t\t\tif(typeof data === \"string\"){\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\t\t\t\n\t\t\tif(data){\n\t\t\t\tthis.rowManager.addRows(data, pos, index)\n\t\t\t\t\t.then((rows) => {\n\t\t\t\t\t\tvar output = [];\n\t\t\t\t\t\n\t\t\t\t\t\trows.forEach(function(row){\n\t\t\t\t\t\t\toutput.push(row.getComponent());\n\t\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\t\tresolve(output);\n\t\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\t\treject(\"Update Error - No data provided\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//update table data\n\tupdateOrAddData(data){\n\t\tvar rows = [],\n\t\tresponses = 0;\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.dataLoader.blockActiveLoad();\n\t\t\t\n\t\t\tif(typeof data === \"string\"){\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\t\t\t\n\t\t\tif(data && data.length > 0){\n\t\t\t\tdata.forEach((item) => {\n\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\n\t\t\t\t\t\n\t\t\t\t\tresponses++;\n\t\t\t\t\t\n\t\t\t\t\tif(row){\n\t\t\t\t\t\trow.updateData(item)\n\t\t\t\t\t\t\t.then(()=>{\n\t\t\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\t\t\trows.push(row.getComponent());\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(!responses){\n\t\t\t\t\t\t\t\t\tresolve(rows);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.rowManager.addRows(item)\n\t\t\t\t\t\t\t.then((newRows)=>{\n\t\t\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\t\t\trows.push(newRows[0].getComponent());\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif(!responses){\n\t\t\t\t\t\t\t\t\tresolve(rows);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\t\treject(\"Update Error - No data provided\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//get row object\n\tgetRow(index){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tif(row){\n\t\t\treturn row.getComponent();\n\t\t}else{\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", index);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\t//get row object\n\tgetRowFromPosition(position){\n\t\tvar row = this.rowManager.getRowFromPosition(position);\n\t\t\n\t\tif(row){\n\t\t\treturn row.getComponent();\n\t\t}else{\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", position);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\t//delete row from table\n\tdeleteRow(index){\n\t\tvar foundRows = [];\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(!Array.isArray(index)){\n\t\t\tindex = [index];\n\t\t}\n\t\t\n\t\t//find matching rows\n\t\tfor(let item of index){\n\t\t\tlet row = this.rowManager.findRow(item, true);\n\t\t\t\n\t\t\tif(row){\n\t\t\t\tfoundRows.push(row);\n\t\t\t}else{\n\t\t\t\tconsole.error(\"Delete Error - No matching row found:\", item);\n\t\t\t\treturn Promise.reject(\"Delete Error - No matching row found\");\n\t\t\t}\n\t\t}\n\t\t\n\t\t//sort rows into correct order to ensure smooth delete from table\n\t\tfoundRows.sort((a, b) => {\n\t\t\treturn this.rowManager.rows.indexOf(a) > this.rowManager.rows.indexOf(b) ? 1 : -1;\n\t\t});\n\t\t\n\t\t//delete rows\n\t\tfoundRows.forEach((row) =>{\n\t\t\trow.delete();\n\t\t});\n\t\t\n\t\tthis.rowManager.reRenderInPosition();\n\t\t\n\t\treturn Promise.resolve();\n\t}\n\t\n\t//add row to table\n\taddRow(data, pos, index){\n\t\tthis.initGuard();\n\t\t\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\treturn this.rowManager.addRows(data, pos, index, true)\n\t\t\t.then((rows)=>{\n\t\t\t\treturn rows[0].getComponent();\n\t\t\t});\n\t}\n\t\n\t//update a row if it exists otherwise create it\n\tupdateOrAddRow(index, data){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\tif(row){\n\t\t\treturn row.updateData(data)\n\t\t\t\t.then(()=>{\n\t\t\t\t\treturn row.getComponent();\n\t\t\t\t});\n\t\t}else{\n\t\t\treturn this.rowManager.addRows(data)\n\t\t\t\t.then((rows)=>{\n\t\t\t\t\treturn rows[0].getComponent();\n\t\t\t\t});\n\t\t}\n\t}\n\t\n\t//update row data\n\tupdateRow(index, data){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\t\t\n\t\tif(row){\n\t\t\treturn row.updateData(data)\n\t\t\t\t.then(()=>{\n\t\t\t\t\treturn Promise.resolve(row.getComponent());\n\t\t\t\t});\n\t\t}else{\n\t\t\tconsole.warn(\"Update Error - No matching row found:\", index);\n\t\t\treturn Promise.reject(\"Update Error - No matching row found\");\n\t\t}\n\t}\n\t\n\t//scroll to row in DOM\n\tscrollToRow(index, position, ifVisible){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tif(row){\n\t\t\treturn this.rowManager.scrollToRow(row, position, ifVisible);\n\t\t}else{\n\t\t\tconsole.warn(\"Scroll Error - No matching row found:\", index);\n\t\t\treturn Promise.reject(\"Scroll Error - No matching row found\");\n\t\t}\n\t}\n\t\n\tmoveRow(from, to, after){\n\t\tvar fromRow = this.rowManager.findRow(from);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(fromRow){\n\t\t\tfromRow.moveToRow(to, after);\n\t\t}else{\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", from);\n\t\t}\n\t}\n\t\n\tgetRows(active){\n\t\treturn this.rowManager.getComponents(active);\t\n\t}\n\t\n\t//get position of row in table\n\tgetRowPosition(index){\n\t\tvar row = this.rowManager.findRow(index);\n\t\t\n\t\tif(row){\n\t\t\treturn row.getPosition();\n\t\t}else{\n\t\t\tconsole.warn(\"Position Error - No matching row found:\", index);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\t/////////////// Column Functions ///////////////\n\tsetColumns(definition){\n\t\tthis.initGuard(false, \"To set initial columns please use the 'columns' property in the table constructor\");\n\t\t\n\t\tthis.columnManager.setColumns(definition);\n\t}\n\t\n\tgetColumns(structured){\n\t\treturn this.columnManager.getComponents(structured);\n\t}\n\t\n\tgetColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tif(column){\n\t\t\treturn column.getComponent();\n\t\t}else{\n\t\t\tconsole.warn(\"Find Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tgetColumnDefinitions(){\n\t\treturn this.columnManager.getDefinitionTree();\n\t}\n\t\n\tshowColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\tcolumn.show();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Show Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\thideColumn(field){\n\t\tvar column = this.columnManager.findColumn(field); \n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\tcolumn.hide();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Hide Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\ttoggleColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\tif(column.visible){\n\t\t\t\tcolumn.hide();\n\t\t\t}else{\n\t\t\t\tcolumn.show();\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Column Visibility Toggle Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\taddColumn(definition, before, field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\treturn this.columnManager.addColumn(definition, before, column)\n\t\t\t.then((column) => {\n\t\t\t\treturn column.getComponent();\n\t\t\t});\n\t}\n\t\n\tdeleteColumn(field){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\treturn column.delete();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Delete Error - No matching column found:\", field);\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\tupdateColumnDefinition(field, definition){\n\t\tvar column = this.columnManager.findColumn(field);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(column){\n\t\t\treturn column.updateDefinition(definition);\n\t\t}else{\n\t\t\tconsole.warn(\"Column Update Error - No matching column found:\", field);\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\tmoveColumn(from, to, after){\n\t\tvar fromColumn = this.columnManager.findColumn(from),\n\t\ttoColumn = this.columnManager.findColumn(to);\n\t\t\n\t\tthis.initGuard();\n\t\t\n\t\tif(fromColumn){\n\t\t\tif(toColumn){\n\t\t\t\tthis.columnManager.moveColumn(fromColumn, toColumn, after);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", from);\n\t\t}\n\t}\n\t\n\t//scroll to column in DOM\n\tscrollToColumn(field, position, ifVisible){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tvar column = this.columnManager.findColumn(field);\n\t\t\t\n\t\t\tif(column){\n\t\t\t\treturn this.columnManager.scrollToColumn(column, position, ifVisible);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Scroll Error - No matching column found:\", field);\n\t\t\t\treturn Promise.reject(\"Scroll Error - No matching column found\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//////////// General Public Functions ////////////\n\t//redraw list without updating data\n\tredraw(force){\n\t\tthis.initGuard();\n\n\t\tthis.columnManager.redraw(force);\n\t\tthis.rowManager.redraw(force);\n\t}\n\t\n\tsetHeight(height){\n\t\tthis.options.height = isNaN(height) ? height : height + \"px\";\n\t\tthis.element.style.height = this.options.height;\n\t\tthis.rowManager.initializeRenderer();\n\t\tthis.rowManager.redraw(true);\n\t}\n\t\n\t//////////////////// Event Bus ///////////////////\n\t\n\ton(key, callback){\n\t\tthis.externalEvents.subscribe(key, callback);\n\t}\n\t\n\toff(key, callback){\n\t\tthis.externalEvents.unsubscribe(key, callback);\n\t}\n\t\n\tdispatchEvent(){\n\t\tvar args = Array.from(arguments);\n\t\targs.shift();\n\t\t\n\t\tthis.externalEvents.dispatch(...arguments);\n\t}\n\n\t//////////////////// Alerts ///////////////////\n\n\talert(contents, type){\n\t\tthis.initGuard();\n\n\t\tthis.alertManager.alert(contents, type);\n\t}\n\n\tclearAlert(){\n\t\tthis.initGuard();\n\n\t\tthis.alertManager.clear();\n\t}\n\t\n\t////////////// Extension Management //////////////\n\tmodExists(plugin, required){\n\t\tif(this.modules[plugin]){\n\t\t\treturn true;\n\t\t}else{\n\t\t\tif(required){\n\t\t\t\tconsole.error(\"Tabulator Module Not Installed: \" + plugin);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tmodule(key){\n\t\tvar mod = this.modules[key];\n\t\t\n\t\tif(!mod){\n\t\t\tconsole.error(\"Tabulator module not installed: \" + key);\n\t\t}\n\t\t\n\t\treturn mod;\n\t}\n}\n\n//default setup options\nTabulator.defaultOptions = defaultOptions;\n\n//bind modules and static functionality\nnew ModuleBinder(Tabulator);\n\nexport default Tabulator;\n","export default {\n\n\tdebugEventsExternal:false, //flag to console log events\n\tdebugEventsInternal:false, //flag to console log events\n\tdebugInvalidOptions:true, //allow toggling of invalid option warnings\n\tdebugInvalidComponentFuncs:true, //allow toggling of invalid component warnings\n\tdebugInitialization:true, //allow toggling of pre initialization function call warnings\n\tdebugDeprecation:true, //allow toggling of deprecation warnings\n\n\theight:false, //height of tabulator\n\tminHeight:false, //minimum height of tabulator\n\tmaxHeight:false, //maximum height of tabulator\n\n\tcolumnHeaderVertAlign:\"top\", //vertical alignment of column headers\n\n\tpopupContainer:false,\n\n\tcolumns:[],//store for colum header info\n\tcolumnDefaults:{}, //store column default props\n\n\tdata:false, //default starting data\n\n\tautoColumns:false, //build columns from data row structure\n\tautoColumnsDefinitions:false,\n\n\tnestedFieldSeparator:\".\", //separator for nested data\n\n\tfooterElement:false, //hold footer element\n\n\tindex:\"id\", //filed for row index\n\n\ttextDirection:\"auto\",\n\n\taddRowPos:\"bottom\", //position to insert blank rows, top|bottom\n\n\theaderVisible:true, //hide header\n\n\trenderVertical:\"virtual\",\n\trenderHorizontal:\"basic\",\n\trenderVerticalBuffer:0, // set virtual DOM buffer size\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\trowHeight:null,\n\n\tplaceholder:false,\n\n\tdataLoader:true,\n\tdataLoaderLoading:false,\n\tdataLoaderError:false,\n\tdataLoaderErrorTimeout:3000,\n\n\tdataSendParams:{},\n\n\tdataReceiveParams:{},\n};\n","import Module from '../../core/Module.js';\nimport Helpers from '../../core/tools/Helpers.js';\n\nimport defaultAccessors from './defaults/accessors.js';\n\nclass Accessor extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.allowedTypes = [\"\", \"data\", \"download\", \"clipboard\", \"print\", \"htmlOutput\"]; //list of accessor types\n\n\t\tthis.registerColumnOption(\"accessor\");\n\t\tthis.registerColumnOption(\"accessorParams\");\n\t\tthis.registerColumnOption(\"accessorData\");\n\t\tthis.registerColumnOption(\"accessorDataParams\");\n\t\tthis.registerColumnOption(\"accessorDownload\");\n\t\tthis.registerColumnOption(\"accessorDownloadParams\");\n\t\tthis.registerColumnOption(\"accessorClipboard\");\n\t\tthis.registerColumnOption(\"accessorClipboardParams\");\n\t\tthis.registerColumnOption(\"accessorPrint\");\n\t\tthis.registerColumnOption(\"accessorPrintParams\");\n\t\tthis.registerColumnOption(\"accessorHtmlOutput\");\n\t\tthis.registerColumnOption(\"accessorHtmlOutputParams\");\n\t}\n\n\tinitialize(){\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"row-data-retrieve\", this.transformRow.bind(this));\n\t}\n\n\t//initialize column accessor\n\tinitializeColumn(column){\n\t\tvar match = false,\n\t\tconfig = {};\n\n\t\tthis.allowedTypes.forEach((type) => {\n\t\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\t\taccessor;\n\n\t\t\tif(column.definition[key]){\n\t\t\t\taccessor = this.lookupAccessor(column.definition[key]);\n\n\t\t\t\tif(accessor){\n\t\t\t\t\tmatch = true;\n\n\t\t\t\t\tconfig[key] = {\n\t\t\t\t\t\taccessor:accessor,\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif(match){\n\t\t\tcolumn.modules.accessor = config;\n\t\t}\n\t}\n\n\tlookupAccessor(value){\n\t\tvar accessor = false;\n\n\t\t//set column accessor\n\t\tswitch(typeof value){\n\t\t\tcase \"string\":\n\t\t\t\tif(Accessor.accessors[value]){\n\t\t\t\t\taccessor = Accessor.accessors[value];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Accessor Error - No such accessor found, ignoring: \", value);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\taccessor = value;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn accessor;\n\t}\n\n\t//apply accessor to row\n\ttransformRow(row, type){\n\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\trowComponent = row.getComponent();\n\n\t\t//clone data object with deep copy to isolate internal data from returned result\n\t\tvar data = Helpers.deepClone(row.data || {});\n\n\t\tthis.table.columnManager.traverse(function(column){\n\t\t\tvar value, accessor, params, colComponent;\n\n\t\t\tif(column.modules.accessor){\n\n\t\t\t\taccessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;\n\n\t\t\t\tif(accessor){\n\t\t\t\t\tvalue = column.getFieldValue(data);\n\n\t\t\t\t\tif(value != \"undefined\"){\n\t\t\t\t\t\tcolComponent = column.getComponent();\n\t\t\t\t\t\tparams = typeof accessor.params === \"function\" ? accessor.params(value, data, type, colComponent, rowComponent) : accessor.params;\n\t\t\t\t\t\tcolumn.setFieldValue(data, accessor.accessor(value, data, type, params, colComponent, rowComponent));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn data;\n\t}\n}\n\n//load defaults\nAccessor.moduleName = \"accessor\";\nAccessor.accessors = defaultAccessors;\n\nexport default Accessor;","export default {};","function generateParamsList(data, prefix){\n\tvar output = [];\n\n\tprefix = prefix || \"\";\n\n\tif(Array.isArray(data)){\n\t\tdata.forEach((item, i) => {\n\t\t\toutput = output.concat(generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\n\t\t});\n\t}else if (typeof data === \"object\"){\n\t\tfor (var key in data){\n\t\t\toutput = output.concat(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\nfunction serializeParams(params){\n\tvar output = generateParamsList(params),\n\tencoded = [];\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\nexport default function(url, config, params){\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(\"?\") ? \"&\" : \"?\") + serializeParams(params);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn url;\n}","function generateParamsList(data, prefix){\n\tvar output = [];\n\n\tprefix = prefix || \"\";\n\n\tif(Array.isArray(data)){\n\t\tdata.forEach((item, i) => {\n\t\t\toutput = output.concat(generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\n\t\t});\n\t}else if (typeof data === \"object\"){\n\t\tfor (var key in data){\n\t\t\toutput = output.concat(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\nexport default {\n\t\"json\":{\n\t\theaders:{\n\t\t\t'Content-Type': 'application/json',\n\t\t},\n\t\tbody:function(url, config, params){\n\t\t\treturn JSON.stringify(params);\n\t\t},\n\t},\n\t\"form\":{\n\t\theaders:{\n\t\t},\n\t\tbody:function(url, config, params){\n\n\t\t\tvar output = generateParamsList(params),\n\t\t\tform = 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};","import Module from '../../core/Module.js';\n\nimport defaultConfig from './defaults/config.js';\nimport defaultURLGenerator from './defaults/urlGenerator.js';\nimport defaultLoaderPromise from './defaults/loaderPromise.js';\nimport defaultContentTypeFormatters from './defaults/contentTypeFormatters.js';\n\nclass Ajax extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.config = {}; //hold config object for ajax request\n\t\tthis.url = \"\"; //request URL\n\t\tthis.urlGenerator = false;\n\t\tthis.params = false; //request parameters\n\t\t\n\t\tthis.loaderPromise = false;\n\t\t\n\t\tthis.registerTableOption(\"ajaxURL\", false); //url for ajax loading\n\t\tthis.registerTableOption(\"ajaxURLGenerator\", false);\n\t\tthis.registerTableOption(\"ajaxParams\", {}); //params for ajax loading\n\t\tthis.registerTableOption(\"ajaxConfig\", \"get\"); //ajax request type\n\t\tthis.registerTableOption(\"ajaxContentType\", \"form\"); //ajax request type\n\t\tthis.registerTableOption(\"ajaxRequestFunc\", false); //promise function\n\t\t\n\t\tthis.registerTableOption(\"ajaxRequesting\", function(){});\n\t\tthis.registerTableOption(\"ajaxResponse\", false);\n\t\t\n\t\tthis.contentTypeFormatters = Ajax.contentTypeFormatters;\n\t}\n\t\n\t//initialize setup options\n\tinitialize(){\n\t\tthis.loaderPromise = this.table.options.ajaxRequestFunc || Ajax.defaultLoaderPromise;\n\t\tthis.urlGenerator = this.table.options.ajaxURLGenerator || Ajax.defaultURLGenerator;\n\t\t\n\t\tif(this.table.options.ajaxURL){\n\t\t\tthis.setUrl(this.table.options.ajaxURL);\n\t\t}\n\n\n\t\tthis.setDefaultConfig(this.table.options.ajaxConfig);\n\t\t\n\t\tthis.registerTableFunction(\"getAjaxUrl\", this.getUrl.bind(this));\n\t\t\n\t\tthis.subscribe(\"data-loading\", this.requestDataCheck.bind(this));\n\t\tthis.subscribe(\"data-params\", this.requestParams.bind(this));\n\t\tthis.subscribe(\"data-load\", this.requestData.bind(this));\n\t}\n\t\n\trequestParams(data, config, silent, params){\n\t\tvar ajaxParams = this.table.options.ajaxParams;\n\t\t\n\t\tif(ajaxParams){\n\t\t\tif(typeof ajaxParams === \"function\"){\n\t\t\t\tajaxParams = ajaxParams.call(this.table);\n\t\t\t}\n\t\t\t\n\t\t\tparams = Object.assign(Object.assign({}, ajaxParams), params);\n\t\t}\t\t\n\t\t\n\t\treturn params;\n\t}\n\t\n\trequestDataCheck(data, params, config, silent){\n\t\treturn !!((!data && this.url) || typeof data === \"string\");\n\t}\n\t\n\trequestData(url, params, config, silent, previousData){\n\t\tvar ajaxConfig;\n\t\t\n\t\tif(!previousData && this.requestDataCheck(url)){\n\t\t\tif(url){\n\t\t\t\tthis.setUrl(url);\n\t\t\t}\n\t\t\t\n\t\t\tajaxConfig = this.generateConfig(config);\n\t\t\t\n\t\t\treturn this.sendRequest(this.url, params, ajaxConfig);\n\t\t}else{\n\t\t\treturn previousData;\n\t\t}\n\t}\n\t\n\tsetDefaultConfig(config = {}){\n\t\tthis.config = Object.assign({}, Ajax.defaultConfig);\n\n\t\tif(typeof config == \"string\"){\n\t\t\tthis.config.method = config;\n\t\t}else{\n\t\t\tObject.assign(this.config, config);\n\t\t}\n\t}\n\t\n\t//load config object\n\tgenerateConfig(config = {}){\n\t\tvar ajaxConfig = Object.assign({}, this.config);\n\t\t\n\t\tif(typeof config == \"string\"){\n\t\t\tajaxConfig.method = config;\n\t\t}else{\n\t\t\tObject.assign(ajaxConfig, config);\n\t\t}\n\t\t\n\t\treturn ajaxConfig;\n\t}\n\t\n\t//set request url\n\tsetUrl(url){\n\t\tthis.url = url;\n\t}\n\t\n\t//get request url\n\tgetUrl(){\n\t\treturn this.url;\n\t}\n\t\n\t//send ajax request\n\tsendRequest(url, params, config){\n\t\tif(this.table.options.ajaxRequesting.call(this.table, url, params) !== false){\n\t\t\treturn this.loaderPromise(url, config, params)\n\t\t\t\t.then((data)=>{\n\t\t\t\t\tif(this.table.options.ajaxResponse){\n\t\t\t\t\t\tdata = this.table.options.ajaxResponse.call(this.table, url, params, data);\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\treturn data;\n\t\t\t\t});\n\t\t}else{\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n}\n\nAjax.moduleName = \"ajax\";\n\n//load defaults\nAjax.defaultConfig = defaultConfig;\nAjax.defaultURLGenerator = defaultURLGenerator;\nAjax.defaultLoaderPromise = defaultLoaderPromise;\nAjax.contentTypeFormatters = defaultContentTypeFormatters;\n\nexport default Ajax;","export default {\n\tmethod: \"GET\",\n};","export default function(url, config, params){\n\tvar contentType;\n\n\treturn new Promise((resolve, reject) => {\n\t\t//set url\n\t\turl = this.urlGenerator.call(this.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 this.table.options.ajaxContentType === \"object\" ? this.table.options.ajaxContentType : this.contentTypeFormatters[this.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(this, url, config, params);\n\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Ajax Error - Invalid ajaxContentType value:\", this.table.options.ajaxContentType);\n\t\t\t}\n\t\t}\n\n\t\tif(url){\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\t\t\t\tif(typeof config.headers[\"Origin\"] === \"undefined\"){\n\t\t\t\t\tconfig.headers[\"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)\n\t\t\t\t.then((response)=>{\n\t\t\t\t\tif(response.ok) {\n\t\t\t\t\t\tresponse.json()\n\t\t\t\t\t\t\t.then((data)=>{\n\t\t\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t\t\t}).catch((error)=>{\n\t\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t\t\tconsole.warn(\"Ajax Load Error - Invalid JSON returned\", error);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \" + response.status, response.statusText);\n\t\t\t\t\t\treject(response);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch((error)=>{\n\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \", error);\n\t\t\t\t\treject(error);\n\t\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}","import Module from '../../core/Module.js';\n\nimport defaultPasteActions from './defaults/pasteActions.js';\nimport defaultPasteParsers from './defaults/pasteParsers.js';\n\nclass Clipboard extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.mode = true;\n\t\tthis.pasteParser = function(){};\n\t\tthis.pasteAction = function(){};\n\t\tthis.customSelection = false;\n\t\tthis.rowRange = false;\n\t\tthis.blocked = true; //block copy actions not originating from this command\n\n\t\tthis.registerTableOption(\"clipboard\", false); //enable clipboard\n\t\tthis.registerTableOption(\"clipboardCopyStyled\", true); //formatted table data\n\t\tthis.registerTableOption(\"clipboardCopyConfig\", false); //clipboard config\n\t\tthis.registerTableOption(\"clipboardCopyFormatter\", false); //DEPRECATED - REMOVE in 5.0\n\t\tthis.registerTableOption(\"clipboardCopyRowRange\", \"active\"); //restrict clipboard to visible rows only\n\t\tthis.registerTableOption(\"clipboardPasteParser\", \"table\"); //convert pasted clipboard data to rows\n\t\tthis.registerTableOption(\"clipboardPasteAction\", \"insert\"); //how to insert pasted data into the table\n\n\t\tthis.registerColumnOption(\"clipboard\");\n\t\tthis.registerColumnOption(\"titleClipboard\");\n\t}\n\n\tinitialize(){\n\t\tthis.mode = this.table.options.clipboard;\n\n\t\tthis.rowRange = this.table.options.clipboardCopyRowRange;\n\n\t\tif(this.mode === true || this.mode === \"copy\"){\n\t\t\tthis.table.element.addEventListener(\"copy\", (e) => {\n\t\t\t\tvar plain, html, list;\n\n\t\t\t\tif(!this.blocked){\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif(this.customSelection){\n\t\t\t\t\t\tplain = this.customSelection;\n\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\n\t\t\t\t\t\tlist = this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig, this.table.options.clipboardCopyStyled, this.rowRange, \"clipboard\");\n\n\t\t\t\t\t\thtml = this.table.modules.export.generateHTMLTable(list);\n\t\t\t\t\t\tplain = html ? this.generatePlainContent(list) : \"\";\n\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\n\t\t\t\t\t\t\thtml = this.table.options.clipboardCopyFormatter(\"html\", html);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (window.clipboardData && window.clipboardData.setData) {\n\t\t\t\t\t\twindow.clipboardData.setData('Text', plain);\n\t\t\t\t\t} else if (e.clipboardData && e.clipboardData.setData) {\n\t\t\t\t\t\te.clipboardData.setData('text/plain', plain);\n\t\t\t\t\t\tif(html){\n\t\t\t\t\t\t\te.clipboardData.setData('text/html', html);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.setData) {\n\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/plain', plain);\n\t\t\t\t\t\tif(html){\n\t\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/html', html);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dispatchExternal(\"clipboardCopied\", plain, html);\n\n\t\t\t\t\tthis.reset();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif(this.mode === true || this.mode === \"paste\"){\n\t\t\tthis.table.element.addEventListener(\"paste\", (e) => {\n\t\t\t\tthis.paste(e);\n\t\t\t});\n\t\t}\n\n\t\tthis.setPasteParser(this.table.options.clipboardPasteParser);\n\t\tthis.setPasteAction(this.table.options.clipboardPasteAction);\n\n\t\tthis.registerTableFunction(\"copyToClipboard\", this.copy.bind(this));\n\t}\n\n\treset(){\n\t\tthis.blocked = true;\n\t\tthis.customSelection = false;\n\t}\n\n\tgeneratePlainContent (list) {\n\t\tvar output = [];\n\n\t\tlist.forEach((row) => {\n\t\t\tvar rowData = [];\n\n\t\t\trow.columns.forEach((col) => {\n\t\t\t\tvar value = \"\";\n\n\t\t\t\tif(col){\n\n\t\t\t\t\tif(row.type === \"group\"){\n\t\t\t\t\t\tcol.value = col.component.getKey();\n\t\t\t\t\t}\n\n\t\t\t\t\tif(col.value === null){\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t}else{\n\t\t\t\t\t\tswitch(typeof col.value){\n\t\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\t\tvalue = JSON.stringify(col.value);\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tvalue = col.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\trowData.push(value);\n\t\t\t});\n\n\t\t\toutput.push(rowData.join(\"\\t\"));\n\t\t});\n\n\t\treturn output.join(\"\\n\");\n\t}\n\n\tcopy (range, internal) {\n\t\tvar sel, textRange;\n\t\tthis.blocked = false;\n\t\tthis.customSelection = false;\n\t\n\n\t\tif (this.mode === true || this.mode === \"copy\") {\n\n\t\t\tthis.rowRange = range || this.table.options.clipboardCopyRowRange;\n\n\t\t\tif (typeof window.getSelection != \"undefined\" && typeof document.createRange != \"undefined\") {\n\t\t\t\trange = document.createRange();\n\t\t\t\trange.selectNodeContents(this.table.element);\n\t\t\t\tsel = window.getSelection();\n\n\t\t\t\tif (sel.toString() && internal) {\n\t\t\t\t\tthis.customSelection = sel.toString();\n\t\t\t\t}\n\n\t\t\t\tsel.removeAllRanges();\n\t\t\t\tsel.addRange(range);\n\t\t\t} else if (typeof document.selection != \"undefined\" && typeof document.body.createTextRange != \"undefined\") {\n\t\t\t\ttextRange = document.body.createTextRange();\n\t\t\t\ttextRange.moveToElementText(this.table.element);\n\t\t\t\ttextRange.select();\n\t\t\t}\n\n\t\t\tdocument.execCommand('copy');\n\n\t\t\tif (sel) {\n\t\t\t\tsel.removeAllRanges();\n\t\t\t}\n\t\t}\n\t}\n\n\t//PASTE EVENT HANDLING\n\tsetPasteAction(action){\n\n\t\tswitch(typeof action){\n\t\t\tcase \"string\":\n\t\t\t\tthis.pasteAction = Clipboard.pasteActions[action];\n\n\t\t\t\tif(!this.pasteAction){\n\t\t\t\t\tconsole.warn(\"Clipboard Error - No such paste action found:\", action);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tthis.pasteAction = action;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tsetPasteParser(parser){\n\t\tswitch(typeof parser){\n\t\t\tcase \"string\":\n\t\t\t\tthis.pasteParser = Clipboard.pasteParsers[parser];\n\n\t\t\t\tif(!this.pasteParser){\n\t\t\t\t\tconsole.warn(\"Clipboard Error - No such paste parser found:\", parser);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tthis.pasteParser = parser;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tpaste(e){\n\t\tvar data, rowData, rows;\n\n\t\tif(this.checkPasteOrigin(e)){\n\n\t\t\tdata = this.getPasteData(e);\n\n\t\t\trowData = this.pasteParser.call(this, data);\n\n\t\t\tif(rowData){\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif(this.table.modExists(\"mutator\")){\n\t\t\t\t\trowData = this.mutateData(rowData);\n\t\t\t\t}\n\n\t\t\t\trows = this.pasteAction.call(this, rowData);\n\n\t\t\t\tthis.dispatchExternal(\"clipboardPasted\", data, rowData, rows);\n\t\t\t}else{\n\t\t\t\tthis.dispatchExternal(\"clipboardPasteError\", data);\n\t\t\t}\n\t\t}\n\t}\n\n\tmutateData(data){\n\t\tvar output = [];\n\n\t\tif(Array.isArray(data)){\n\t\t\tdata.forEach((row) => {\n\t\t\t\toutput.push(this.table.modules.mutator.transformRow(row, \"clipboard\"));\n\t\t\t});\n\t\t}else{\n\t\t\toutput = data;\n\t\t}\n\n\t\treturn output;\n\t}\n\n\n\tcheckPasteOrigin(e){\n\t\tvar valid = true;\n\t\tvar blocked = this.confirm(\"clipboard-paste\", [e]);\n\n\t\tif(blocked || ![\"DIV\", \"SPAN\"].includes(e.target.tagName)){\n\t\t\tvalid = false;\n\t\t}\n\n\t\treturn valid;\n\t}\n\n\tgetPasteData(e){\n\t\tvar data;\n\n\t\tif (window.clipboardData && window.clipboardData.getData) {\n\t\t\tdata = window.clipboardData.getData('Text');\n\t\t} else if (e.clipboardData && e.clipboardData.getData) {\n\t\t\tdata = e.clipboardData.getData('text/plain');\n\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.getData) {\n\t\t\tdata = e.originalEvent.clipboardData.getData('text/plain');\n\t\t}\n\n\t\treturn data;\n\t}\n}\n\nClipboard.moduleName = \"clipboard\";\n\n//load defaults\nClipboard.pasteActions = defaultPasteActions;\nClipboard.pasteParsers = defaultPasteParsers;\n\nexport default Clipboard;","export default {\n\treplace:function(data){\n\t\treturn this.table.setData(data);\n\t},\n\tupdate:function(data){\n\t\treturn this.table.updateOrAddData(data);\n\t},\n\tinsert:function(data){\n\t\treturn this.table.addData(data);\n\t},\n\trange:function(data){\n\t\tvar rows = [],\n\t\trange = this.table.modules.selectRange.activeRange,\n\t\tsingleCell = false,\n\t\tbounds, startCell, startRow, rowWidth, dataLength;\n\n\t\tdataLength = data.length;\n\t\t\n\t\tif(range){\n\t\t\tbounds = range.getBounds();\n\t\t\tstartCell = bounds.start;\n\t\t\t\n\t\t\tif(bounds.start === bounds.end){\n\t\t\t\tsingleCell = true;\n\t\t\t}\n\t\t\t\n\t\t\tif(startCell){\n\t\t\t\trows = this.table.rowManager.activeRows.slice();\n\t\t\t\tstartRow = rows.indexOf(startCell.row);\n\n\t\t\t\tif(singleCell){\n\t\t\t\t\trowWidth = data.length;\n\t\t\t\t}else{\n\t\t\t\t\trowWidth = (rows.indexOf(bounds.end.row) - startRow) + 1;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif(startRow >-1){\n\t\t\t\t\tthis.table.blockRedraw();\n\t\t\t\t\t\n\t\t\t\t\trows = rows.slice(startRow, startRow + rowWidth);\n\t\t\t\t\t\n\t\t\t\t\trows.forEach((row, i) => {\n\t\t\t\t\t\trow.updateData(data[i % dataLength]);\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.table.restoreRedraw();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n};","export default {\n\ttable:function(clipboard){\n\t\tvar data = [],\n\t\theaderFindSuccess = true,\n\t\tcolumns = this.table.columnManager.columns,\n\t\tcolumnMap = [],\n\t\trows = [];\n\t\t\n\t\t//get data from clipboard into array of columns and rows.\n\t\tclipboard = clipboard.split(\"\\n\");\n\t\t\n\t\tclipboard.forEach(function(row){\n\t\t\tdata.push(row.split(\"\\t\"));\n\t\t});\n\t\t\n\t\tif(data.length && !(data.length === 1 && data[0].length < 2)){\n\t\t\t\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\t\t\t\t\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\t\t\t\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\t\t\t\t\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\t\t\t\t\t\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\t\t\t\t\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\t\t\t\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\t\t\t\n\t\t\tdata.forEach(function(item){\n\t\t\t\tvar row = {};\n\t\t\t\t\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\t\t\t\t\n\t\t\t\trows.push(row);\n\t\t\t});\n\t\t\t\n\t\t\treturn rows;\n\t\t}else{\n\t\t\treturn false;\n\t\t}\n\t},\n\trange:function(clipboard){\n\t\tvar data = [],\n\t\trows = [],\n\t\trange = this.table.modules.selectRange.activeRange,\n\t\tsingleCell = false,\n\t\tbounds, startCell, colWidth, columnMap, startCol;\n\t\t\n\t\tif(range){\n\t\t\tbounds = range.getBounds();\n\t\t\tstartCell = bounds.start;\n\n\t\t\tif(bounds.start === bounds.end){\n\t\t\t\tsingleCell = true;\n\t\t\t}\n\t\t\t\n\t\t\tif(startCell){\n\t\t\t\t//get data from clipboard into array of columns and rows.\n\t\t\t\tclipboard = clipboard.split(\"\\n\");\n\t\t\t\t\n\t\t\t\tclipboard.forEach(function(row){\n\t\t\t\t\tdata.push(row.split(\"\\t\"));\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(data.length){\n\t\t\t\t\tcolumnMap = this.table.columnManager.getVisibleColumnsByIndex();\n\t\t\t\t\tstartCol = columnMap.indexOf(startCell.column);\n\n\t\t\t\t\tif(startCol > -1){\n\t\t\t\t\t\tif(singleCell){\n\t\t\t\t\t\t\tcolWidth = data[0].length;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tcolWidth = (columnMap.indexOf(bounds.end.column) - startCol) + 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcolumnMap = columnMap.slice(startCol, startCol + colWidth);\n\n\t\t\t\t\t\tdata.forEach((item) => {\n\t\t\t\t\t\t\tvar row = {};\n\t\t\t\t\t\t\tvar itemLength = item.length;\n\n\t\t\t\t\t\t\tcolumnMap.forEach(function(col, i){\n\t\t\t\t\t\t\t\trow[col.field] = item[i % itemLength];\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\trows.push(row);\t\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn rows;\n\t\t\t\t\t}\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n};","class CalcComponent{\n\tconstructor (row){\n\t\tthis._row = row;\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetData(transform){\n\t\treturn this._row.getData(transform);\n\t}\n\n\tgetElement(){\n\t\treturn this._row.getElement();\n\t}\n\n\tgetTable(){\n\t\treturn this._row.table;\n\t}\n\n\tgetCells(){\n\t\tvar cells = [];\n\n\t\tthis._row.getCells().forEach(function(cell){\n\t\t\tcells.push(cell.getComponent());\n\t\t});\n\n\t\treturn cells;\n\t}\n\n\tgetCell(column){\n\t\tvar cell = this._row.getCell(column);\n\t\treturn cell ? cell.getComponent() : false;\n\t}\n\n\t_getSelf(){\n\t\treturn this._row;\n\t}\n}\n\nexport default CalcComponent;","export default {\n\t\"avg\":function(values, data, calcParams){\n\t\tvar output = 0,\n\t\tprecision = 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(values, data, calcParams){\n\t\tvar output = null,\n\t\tprecision = 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(values, data, calcParams){\n\t\tvar output = null,\n\t\tprecision = 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(values, data, calcParams){\n\t\tvar output = 0,\n\t\tprecision = 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(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(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\t\"unique\":function(values, data, calcParams){\n\t\tvar unique = values.filter((value, index) => {\n\t\t\treturn (values || value === 0) && values.indexOf(value) === index;\n\t\t});\n\n\t\treturn unique.length;\n\t},\n};","import Module from '../../core/Module.js';\n\nimport CalcComponent from './CalcComponent.js';\n\nimport Cell from '../../core/cell/Cell.js';\nimport Column from '../../core/column/Column.js';\nimport Row from '../../core/row/Row.js';\n\nimport defaultCalculations from './defaults/calculations.js';\n\nclass ColumnCalcs extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.topCalcs = [];\n\t\tthis.botCalcs = [];\n\t\tthis.genColumn = false;\n\t\tthis.topElement = this.createElement();\n\t\tthis.botElement = this.createElement();\n\t\tthis.topRow = false;\n\t\tthis.botRow = false;\n\t\tthis.topInitialized = false;\n\t\tthis.botInitialized = false;\n\t\t\n\t\tthis.blocked = false;\n\t\tthis.recalcAfterBlock = false;\n\t\t\n\t\tthis.registerTableOption(\"columnCalcs\", true);\n\t\t\n\t\tthis.registerColumnOption(\"topCalc\");\n\t\tthis.registerColumnOption(\"topCalcParams\");\n\t\tthis.registerColumnOption(\"topCalcFormatter\");\n\t\tthis.registerColumnOption(\"topCalcFormatterParams\");\n\t\tthis.registerColumnOption(\"bottomCalc\");\n\t\tthis.registerColumnOption(\"bottomCalcParams\");\n\t\tthis.registerColumnOption(\"bottomCalcFormatter\");\n\t\tthis.registerColumnOption(\"bottomCalcFormatterParams\");\n\t}\n\t\n\tcreateElement (){\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-calcs-holder\");\n\t\treturn el;\n\t}\n\t\n\tinitialize(){\n\t\tthis.genColumn = new Column({field:\"value\"}, this);\n\t\t\n\t\tthis.subscribe(\"cell-value-changed\", this.cellValueChanged.bind(this));\n\t\tthis.subscribe(\"column-init\", this.initializeColumnCheck.bind(this));\n\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\n\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\n\t\tthis.subscribe(\"column-moved\", this.recalcActiveRows.bind(this));\n\t\tthis.subscribe(\"column-add\", this.recalcActiveRows.bind(this));\n\t\tthis.subscribe(\"data-refreshed\", this.recalcActiveRowsRefresh.bind(this));\n\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\n\t\tthis.subscribe(\"rows-visible\", this.visibleRows.bind(this));\n\t\tthis.subscribe(\"scrollbar-vertical\", this.adjustForScrollbar.bind(this));\n\t\t\n\t\tthis.subscribe(\"redraw-blocked\", this.blockRedraw.bind(this));\n\t\tthis.subscribe(\"redraw-restored\", this.restoreRedraw.bind(this));\n\n\t\tthis.subscribe(\"table-redrawing\", this.resizeHolderWidth.bind(this));\n\t\tthis.subscribe(\"column-resized\", this.resizeHolderWidth.bind(this));\n\t\tthis.subscribe(\"column-show\", this.resizeHolderWidth.bind(this));\n\t\tthis.subscribe(\"column-hide\", this.resizeHolderWidth.bind(this));\n\t\t\n\t\tthis.registerTableFunction(\"getCalcResults\", this.getResults.bind(this));\n\t\tthis.registerTableFunction(\"recalc\", this.userRecalc.bind(this));\n\n\n\t\tthis.resizeHolderWidth();\n\t}\n\n\tresizeHolderWidth(){\n\t\tthis.topElement.style.minWidth = this.table.columnManager.headersElement.offsetWidth + \"px\";\n\t}\n\n\t\n\ttableRedraw(force){\n\t\tthis.recalc(this.table.rowManager.activeRows);\n\t\t\n\t\tif(force){\n\t\t\tthis.redraw();\n\t\t}\n\t}\n\t\n\tblockRedraw(){\n\t\tthis.blocked = true;\n\t\tthis.recalcAfterBlock = false;\n\t}\n\t\n\t\n\trestoreRedraw(){\n\t\tthis.blocked = false;\n\t\t\n\t\tif(this.recalcAfterBlock){\n\t\t\tthis.recalcAfterBlock = false;\n\t\t\tthis.recalcActiveRowsRefresh();\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\tuserRecalc(){\n\t\tthis.recalc(this.table.rowManager.activeRows);\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tblockCheck(){\n\t\tif(this.blocked){\n\t\t\tthis.recalcAfterBlock = true;\n\t\t}\n\t\t\n\t\treturn this.blocked;\n\t}\n\t\n\tvisibleRows(viewable, rows){\n\t\tif(this.topRow){\n\t\t\trows.unshift(this.topRow);\n\t\t}\n\t\t\n\t\tif(this.botRow){\n\t\t\trows.push(this.botRow);\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\trowsUpdated(row){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.recalcRowGroup(row);\n\t\t}else{\n\t\t\tthis.recalcActiveRows();\n\t\t}\n\t}\n\t\n\trecalcActiveRowsRefresh(){\n\t\tif(this.table.options.groupBy && this.table.options.dataTreeStartExpanded && this.table.options.dataTree){\n\t\t\tthis.recalcAll();\n\t\t}else{\n\t\t\tthis.recalcActiveRows();\n\t\t}\n\t}\n\t\n\trecalcActiveRows(){\n\t\tthis.recalc(this.table.rowManager.activeRows);\n\t}\n\t\n\tcellValueChanged(cell){\n\t\tif(cell.column.definition.topCalc || cell.column.definition.bottomCalc){\n\t\t\tif(this.table.options.groupBy){\n\t\t\t\tif(this.table.options.columnCalcs == \"table\" || this.table.options.columnCalcs == \"both\"){\n\t\t\t\t\tthis.recalcActiveRows();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.table.options.columnCalcs != \"table\"){\n\t\t\t\t\tthis.recalcRowGroup(cell.row);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.recalcActiveRows();\n\t\t\t}\n\t\t}\n\t}\n\t\n\tinitializeColumnCheck(column){\n\t\tif(column.definition.topCalc || column.definition.bottomCalc){\n\t\t\tthis.initializeColumn(column);\n\t\t}\n\t}\n\t\n\t//initialize column calcs\n\tinitializeColumn(column){\n\t\tvar def = column.definition;\n\t\t\n\t\tvar config = {\n\t\t\ttopCalcParams:def.topCalcParams || {},\n\t\t\tbotCalcParams:def.bottomCalcParams || {},\n\t\t};\n\t\t\n\t\tif(def.topCalc){\n\t\t\t\n\t\t\tswitch(typeof def.topCalc){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif(ColumnCalcs.calculations[def.topCalc]){\n\t\t\t\t\t\tconfig.topCalc = ColumnCalcs.calculations[def.topCalc];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.topCalc);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"function\":\n\t\t\t\t\tconfig.topCalc = def.topCalc;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tif(config.topCalc){\n\t\t\t\tcolumn.modules.columnCalcs = config;\n\t\t\t\tthis.topCalcs.push(column);\n\t\t\t\t\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\n\t\t\t\t\tthis.initializeTopRow();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\tif(def.bottomCalc){\n\t\t\tswitch(typeof def.bottomCalc){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif(ColumnCalcs.calculations[def.bottomCalc]){\n\t\t\t\t\t\tconfig.botCalc = ColumnCalcs.calculations[def.bottomCalc];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.bottomCalc);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"function\":\n\t\t\t\t\tconfig.botCalc = def.bottomCalc;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tif(config.botCalc){\n\t\t\t\tcolumn.modules.columnCalcs = config;\n\t\t\t\tthis.botCalcs.push(column);\n\t\t\t\t\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\n\t\t\t\t\tthis.initializeBottomRow();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\t\n\t//dummy functions to handle being mock column manager\n\tregisterColumnField(){}\n\t\n\tremoveCalcs(){\n\t\tvar changed = false;\n\t\t\n\t\tif(this.topInitialized){\n\t\t\tthis.topInitialized = false;\n\t\t\tthis.topElement.parentNode.removeChild(this.topElement);\n\t\t\tchanged = true;\n\t\t}\n\t\t\n\t\tif(this.botInitialized){\n\t\t\tthis.botInitialized = false;\n\t\t\tthis.footerRemove(this.botElement);\n\t\t\tchanged = true;\n\t\t}\n\t\t\n\t\tif(changed){\n\t\t\tthis.table.rowManager.adjustTableSize();\n\t\t}\n\t}\n\t\n\treinitializeCalcs(){\n\t\tif(this.topCalcs.length){\n\t\t\tthis.initializeTopRow();\n\t\t}\n\n\t\tif(this.botCalcs.length){\n\t\t\tthis.initializeBottomRow();\n\t\t}\n\t}\n\t\n\tinitializeTopRow(){\n\t\tvar\tfragment = document.createDocumentFragment();\n\t\t\n\t\tif(!this.topInitialized){\n\n\t\t\tfragment.appendChild(document.createElement(\"br\"));\n\t\t\tfragment.appendChild(this.topElement);\n\n\t\t\tthis.table.columnManager.getContentsElement().insertBefore(fragment, this.table.columnManager.headersElement.nextSibling);\n\t\t\tthis.topInitialized = true;\n\t\t}\n\t}\n\t\n\tinitializeBottomRow(){\n\t\tif(!this.botInitialized){\n\t\t\tthis.footerPrepend(this.botElement);\n\t\t\tthis.botInitialized = true;\n\t\t}\n\t}\n\t\n\tscrollHorizontal(left){\n\t\tif(this.botInitialized && this.botRow){\n\t\t\tthis.botElement.scrollLeft = left;\n\t\t}\n\t}\n\t\n\trecalc(rows){\n\t\tvar data, row;\n\t\t\n\t\tif(!this.blockCheck()){\n\t\t\tif(this.topInitialized || this.botInitialized){\n\t\t\t\tdata = this.rowsToData(rows);\n\t\t\t\t\n\t\t\t\tif(this.topInitialized){\n\t\t\t\t\tif(this.topRow){\n\t\t\t\t\t\tthis.topRow.deleteCells();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\trow = this.generateRow(\"top\", data);\n\t\t\t\t\tthis.topRow = row;\n\t\t\t\t\twhile(this.topElement.firstChild) this.topElement.removeChild(this.topElement.firstChild);\n\t\t\t\t\tthis.topElement.appendChild(row.getElement());\n\t\t\t\t\trow.initialize(true);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.botInitialized){\n\t\t\t\t\tif(this.botRow){\n\t\t\t\t\t\tthis.botRow.deleteCells();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\trow = this.generateRow(\"bottom\", data);\n\t\t\t\t\tthis.botRow = row;\n\t\t\t\t\twhile(this.botElement.firstChild) this.botElement.removeChild(this.botElement.firstChild);\n\t\t\t\t\tthis.botElement.appendChild(row.getElement());\n\t\t\t\t\trow.initialize(true);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.table.rowManager.adjustTableSize();\n\t\t\t\t\n\t\t\t\t//set resizable handles\n\t\t\t\tif(this.table.modExists(\"frozenColumns\")){\n\t\t\t\t\tthis.table.modules.frozenColumns.layout();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\trecalcRowGroup(row){\n\t\tthis.recalcGroup(this.table.modules.groupRows.getRowGroup(row));\n\t}\n\t\n\trecalcAll(){\n\t\tif(this.topCalcs.length || this.botCalcs.length){\n\t\t\tif(this.table.options.columnCalcs !== \"group\"){\n\t\t\t\tthis.recalcActiveRows();\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.groupBy && this.table.options.columnCalcs !== \"table\"){\n\t\t\t\t\n\t\t\t\tvar groups = this.table.modules.groupRows.getChildGroups();\n\t\t\t\t\n\t\t\t\tgroups.forEach((group) => {\n\t\t\t\t\tthis.recalcGroup(group);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\trecalcGroup(group){\n\t\tvar data, rowData;\n\t\t\n\t\tif(!this.blockCheck()){\n\t\t\tif(group){\n\t\t\t\tif(group.calcs){\n\t\t\t\t\tif(group.calcs.bottom){\n\t\t\t\t\t\tdata = this.rowsToData(group.rows);\n\t\t\t\t\t\trowData = this.generateRowData(\"bottom\", data);\n\t\t\t\t\t\t\n\t\t\t\t\t\tgroup.calcs.bottom.updateData(rowData);\n\t\t\t\t\t\tgroup.calcs.bottom.reinitialize();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(group.calcs.top){\n\t\t\t\t\t\tdata = this.rowsToData(group.rows);\n\t\t\t\t\t\trowData = this.generateRowData(\"top\", data);\n\t\t\t\t\t\t\n\t\t\t\t\t\tgroup.calcs.top.updateData(rowData);\n\t\t\t\t\t\tgroup.calcs.top.reinitialize();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//generate top stats row\n\tgenerateTopRow(rows){\n\t\treturn this.generateRow(\"top\", this.rowsToData(rows));\n\t}\n\t//generate bottom stats row\n\tgenerateBottomRow(rows){\n\t\treturn this.generateRow(\"bottom\", this.rowsToData(rows));\n\t}\n\t\n\trowsToData(rows){\n\t\tvar data = [];\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tdata.push(row.getData());\n\t\t\t\n\t\t\tif(this.table.options.dataTree && this.table.options.dataTreeChildColumnCalcs){\n\t\t\t\tif(row.modules.dataTree && row.modules.dataTree.open){\n\t\t\t\t\tvar children = this.rowsToData(this.table.modules.dataTree.getFilteredTreeChildren(row));\n\t\t\t\t\tdata = data.concat(children);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn data;\n\t}\n\t\n\t//generate stats row\n\tgenerateRow(pos, data){\n\t\tvar rowData = this.generateRowData(pos, data),\n\t\trow;\n\t\t\n\t\tif(this.table.modExists(\"mutator\")){\n\t\t\tthis.table.modules.mutator.disable();\n\t\t}\n\t\t\n\t\trow = new Row(rowData, this, \"calc\");\n\t\t\n\t\tif(this.table.modExists(\"mutator\")){\n\t\t\tthis.table.modules.mutator.enable();\n\t\t}\n\t\t\n\t\trow.getElement().classList.add(\"tabulator-calcs\", \"tabulator-calcs-\" + pos);\n\t\t\n\t\trow.component = false;\n\t\t\n\t\trow.getComponent = () => {\n\t\t\tif(!row.component){\n\t\t\t\trow.component = new CalcComponent(row);\n\t\t\t}\n\t\t\t\n\t\t\treturn row.component;\n\t\t};\n\t\t\n\t\trow.generateCells = () => {\n\t\t\t\n\t\t\tvar cells = [];\n\t\t\t\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\t\t\n\t\t\t\t//set field name of mock column\n\t\t\t\tthis.genColumn.setField(column.getField());\n\t\t\t\tthis.genColumn.hozAlign = column.hozAlign;\n\t\t\t\t\n\t\t\t\tif(column.definition[pos + \"CalcFormatter\"] && this.table.modExists(\"format\")){\n\t\t\t\t\tthis.genColumn.modules.format = {\n\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(column.definition[pos + \"CalcFormatter\"]),\n\t\t\t\t\t\tparams: column.definition[pos + \"CalcFormatterParams\"] || {},\n\t\t\t\t\t};\n\t\t\t\t}else{\n\t\t\t\t\tthis.genColumn.modules.format = {\n\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(\"plaintext\"),\n\t\t\t\t\t\tparams:{}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//ensure css class definition is replicated to calculation cell\n\t\t\t\tthis.genColumn.definition.cssClass = column.definition.cssClass;\n\t\t\t\t\n\t\t\t\t//generate cell and assign to correct column\n\t\t\t\tvar cell = new Cell(this.genColumn, row);\n\t\t\t\tcell.getElement();\n\t\t\t\tcell.column = column;\n\t\t\t\tcell.setWidth();\n\t\t\t\t\n\t\t\t\tcolumn.cells.push(cell);\n\t\t\t\tcells.push(cell);\n\t\t\t\t\n\t\t\t\tif(!column.visible){\n\t\t\t\t\tcell.hide();\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\trow.cells = cells;\n\t\t};\n\t\t\n\t\treturn row;\n\t}\n\t\n\t//generate stats row\n\tgenerateRowData(pos, data){\n\t\tvar rowData = {},\n\t\tcalcs = pos == \"top\" ? this.topCalcs : this.botCalcs,\n\t\ttype = pos == \"top\" ? \"topCalc\" : \"botCalc\",\n\t\tparams, paramKey;\n\t\t\n\t\tcalcs.forEach(function(column){\n\t\t\tvar values = [];\n\t\t\t\n\t\t\tif(column.modules.columnCalcs && column.modules.columnCalcs[type]){\n\t\t\t\tdata.forEach(function(item){\n\t\t\t\t\tvalues.push(column.getFieldValue(item));\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tparamKey = type + \"Params\";\n\t\t\t\tparams = typeof column.modules.columnCalcs[paramKey] === \"function\" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];\n\t\t\t\t\n\t\t\t\tcolumn.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn rowData;\n\t}\n\t\n\thasTopCalcs(){\n\t\treturn\t!!(this.topCalcs.length);\n\t}\n\t\n\thasBottomCalcs(){\n\t\treturn\t!!(this.botCalcs.length);\n\t}\n\t\n\t//handle table redraw\n\tredraw(){\n\t\tif(this.topRow){\n\t\t\tthis.topRow.normalizeHeight(true);\n\t\t}\n\t\tif(this.botRow){\n\t\t\tthis.botRow.normalizeHeight(true);\n\t\t}\n\t}\n\t\n\t//return the calculated\n\tgetResults(){\n\t\tvar results = {},\n\t\tgroups;\n\t\t\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\n\t\t\tgroups = this.table.modules.groupRows.getGroups(true);\n\t\t\t\n\t\t\tgroups.forEach((group) => {\n\t\t\t\tresults[group.getKey()] = this.getGroupResults(group);\n\t\t\t});\n\t\t}else{\n\t\t\tresults = {\n\t\t\t\ttop: this.topRow ? this.topRow.getData() : {},\n\t\t\t\tbottom: this.botRow ? this.botRow.getData() : {},\n\t\t\t};\n\t\t}\n\t\t\n\t\treturn results;\n\t}\n\t\n\t//get results from a group\n\tgetGroupResults(group){\n\t\tvar groupObj = group._getSelf(),\n\t\tsubGroups = group.getSubGroups(),\n\t\tsubGroupResults = {},\n\t\tresults = {};\n\t\t\n\t\tsubGroups.forEach((subgroup) => {\n\t\t\tsubGroupResults[subgroup.getKey()] = this.getGroupResults(subgroup);\n\t\t});\n\t\t\n\t\tresults = {\n\t\t\ttop: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},\n\t\t\tbottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},\n\t\t\tgroups: subGroupResults,\n\t\t};\n\t\t\n\t\treturn results;\n\t}\n\t\n\tadjustForScrollbar(width){\n\t\tif(this.botRow){\n\t\t\tif(this.table.rtl){\n\t\t\t\tthis.botElement.style.paddingLeft = width + \"px\";\n\t\t\t}else{\n\t\t\t\tthis.botElement.style.paddingRight = width + \"px\";\n\t\t\t}\n\t\t}\n\t}\n}\n\nColumnCalcs.moduleName = \"columnCalcs\";\n\n//load defaults\nColumnCalcs.calculations = defaultCalculations;\n\nexport default ColumnCalcs;","import Module from '../../core/Module.js';\n\nimport Row from '../../core/row/Row.js';\n\nimport RowComponent from '../../core/row/RowComponent.js';\n\nclass DataTree extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.indent = 10;\n\t\tthis.field = \"\";\n\t\tthis.collapseEl = null;\n\t\tthis.expandEl = null;\n\t\tthis.branchEl = null;\n\t\tthis.elementField = false;\n\n\t\tthis.startOpen = function(){};\n\n\t\tthis.registerTableOption(\"dataTree\", false); //enable data tree\n\t\tthis.registerTableOption(\"dataTreeFilter\", true); //filter child rows\n\t\tthis.registerTableOption(\"dataTreeSort\", true); //sort child rows\n\t\tthis.registerTableOption(\"dataTreeElementColumn\", false);\n\t\tthis.registerTableOption(\"dataTreeBranchElement\", true);//show data tree branch element\n\t\tthis.registerTableOption(\"dataTreeChildIndent\", 9); //data tree child indent in px\n\t\tthis.registerTableOption(\"dataTreeChildField\", \"_children\");//data tre column field to look for child rows\n\t\tthis.registerTableOption(\"dataTreeCollapseElement\", false);//data tree row collapse element\n\t\tthis.registerTableOption(\"dataTreeExpandElement\", false);//data tree row expand element\n\t\tthis.registerTableOption(\"dataTreeStartExpanded\", false);\n\t\tthis.registerTableOption(\"dataTreeChildColumnCalcs\", false);//include visible data tree rows in column calculations\n\t\tthis.registerTableOption(\"dataTreeSelectPropagate\", false);//selecting a parent row selects its children\n\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"treeCollapse\", this.collapseRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"treeExpand\", this.expandRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"treeToggle\", this.toggleRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"getTreeParent\", this.getTreeParent.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"getTreeChildren\", this.getRowChildren.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"addTreeChild\", this.addTreeChildRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"isTreeExpanded\", this.isRowExpanded.bind(this));\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.dataTree){\n\t\t\tvar dummyEl = null,\n\t\t\toptions = this.table.options;\n\n\t\t\tthis.field = options.dataTreeChildField;\n\t\t\tthis.indent = options.dataTreeChildIndent;\n\n\t\t\tif(this.options(\"movableRows\")){\n\t\t\t\tconsole.warn(\"The movableRows option is not available with dataTree enabled, moving of child rows could result in unpredictable behavior\");\n\t\t\t}\n\n\t\t\tif(options.dataTreeBranchElement){\n\n\t\t\t\tif(options.dataTreeBranchElement === true){\n\t\t\t\t\tthis.branchEl = document.createElement(\"div\");\n\t\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch\");\n\t\t\t\t}else{\n\t\t\t\t\tif(typeof options.dataTreeBranchElement === \"string\"){\n\t\t\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\t\t\tdummyEl.innerHTML = options.dataTreeBranchElement;\n\t\t\t\t\t\tthis.branchEl = dummyEl.firstChild;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.branchEl = options.dataTreeBranchElement;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.branchEl = document.createElement(\"div\");\n\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch-empty\");\n\t\t\t}\n\n\t\t\tif(options.dataTreeCollapseElement){\n\t\t\t\tif(typeof options.dataTreeCollapseElement === \"string\"){\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeCollapseElement;\n\t\t\t\t\tthis.collapseEl = dummyEl.firstChild;\n\t\t\t\t}else{\n\t\t\t\t\tthis.collapseEl = options.dataTreeCollapseElement;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.collapseEl = document.createElement(\"div\");\n\t\t\t\tthis.collapseEl.classList.add(\"tabulator-data-tree-control\");\n\t\t\t\tthis.collapseEl.tabIndex = 0;\n\t\t\t\tthis.collapseEl.innerHTML = \"
\";\n\t\t\t}\n\n\t\t\tif(options.dataTreeExpandElement){\n\t\t\t\tif(typeof options.dataTreeExpandElement === \"string\"){\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeExpandElement;\n\t\t\t\t\tthis.expandEl = dummyEl.firstChild;\n\t\t\t\t}else{\n\t\t\t\t\tthis.expandEl = options.dataTreeExpandElement;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.expandEl = document.createElement(\"div\");\n\t\t\t\tthis.expandEl.classList.add(\"tabulator-data-tree-control\");\n\t\t\t\tthis.expandEl.tabIndex = 0;\n\t\t\t\tthis.expandEl.innerHTML = \"
\";\n\t\t\t}\n\n\n\t\t\tswitch(typeof options.dataTreeStartExpanded){\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tthis.startOpen = function(row, index){\n\t\t\t\t\t\treturn options.dataTreeStartExpanded;\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\tthis.startOpen = options.dataTreeStartExpanded;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthis.startOpen = function(row, index){\n\t\t\t\t\t\treturn options.dataTreeStartExpanded[index];\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\n\t\t\tthis.subscribe(\"row-layout-after\", this.layoutRow.bind(this));\n\t\t\tthis.subscribe(\"row-deleted\", this.rowDelete.bind(this),0);\n\t\t\tthis.subscribe(\"row-data-changed\", this.rowDataChanged.bind(this), 10);\n\t\t\tthis.subscribe(\"cell-value-updated\", this.cellValueChanged.bind(this));\n\t\t\tthis.subscribe(\"edit-cancelled\", this.cellValueChanged.bind(this));\n\t\t\tthis.subscribe(\"column-moving-rows\", this.columnMoving.bind(this));\n\t\t\tthis.subscribe(\"table-built\", this.initializeElementField.bind(this));\n\t\t\tthis.subscribe(\"table-redrawing\", this.tableRedrawing.bind(this));\n\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 30);\n\t\t}\n\t}\n\n\ttableRedrawing(force){\n\t\tvar rows;\n\n\t\tif(force){\n\t\t\trows = this.table.rowManager.getRows();\n\t\t\t\n\t\t\trows.forEach((row) => {\n\t\t\t\tthis.reinitializeRowChildren(row);\n\t\t\t});\n\t\t}\n\t}\n\n\tinitializeElementField(){\n\t\tvar firstCol = this.table.columnManager.getFirstVisibleColumn();\n\n\t\tthis.elementField = this.table.options.dataTreeElementColumn || (firstCol ? firstCol.field : false);\n\t}\n\t\n\tgetRowChildren(row){\n\t\treturn this.getTreeChildren(row, true);\n\t}\n\n\tcolumnMoving(){\n\t\tvar rows = [];\n\n\t\tthis.table.rowManager.rows.forEach((row) => {\n\t\t\trows = rows.concat(this.getTreeChildren(row, false, true));\n\t\t});\n\n\t\treturn rows;\n\t}\n\n\trowDataChanged(row, visible, updatedData){\n\t\tif(this.redrawNeeded(updatedData)){\n\t\t\tthis.initializeRow(row);\n\n\t\t\tif(visible){\n\t\t\t\tthis.layoutRow(row);\n\t\t\t\tthis.refreshData(true);\n\t\t\t}\n\t\t}\n\t}\n\n\tcellValueChanged(cell){\n\t\tvar field = cell.column.getField();\n\n\t\tif(field === this.elementField){\n\t\t\tthis.layoutRow(cell.row);\n\t\t}\n\t}\n\n\tinitializeRow(row){\n\t\tvar childArray = row.getData()[this.field];\n\t\tvar isArray = Array.isArray(childArray);\n\n\t\tvar children = isArray || (!isArray && typeof childArray === \"object\" && childArray !== null);\n\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.branchEl){\n\t\t\trow.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);\n\t\t}\n\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.controlEl){\n\t\t\trow.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);\n\t\t}\n\n\t\trow.modules.dataTree = {\n\t\t\tindex: row.modules.dataTree ? row.modules.dataTree.index : 0,\n\t\t\topen: children ? (row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0)) : false,\n\t\t\tcontrolEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,\n\t\t\tbranchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,\n\t\t\tparent: row.modules.dataTree ? row.modules.dataTree.parent : false,\n\t\t\tchildren:children,\n\t\t};\n\t}\n\n\treinitializeRowChildren(row){\n\t\tvar children = this.getTreeChildren(row, false, true);\n\n\t\tchildren.forEach(function(child){\n\t\t\tchild.reinitialize(true);\n\t\t});\n\t}\n\n\tlayoutRow(row){\n\t\tvar cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],\n\t\tel = cell.getElement(),\n\t\tconfig = row.modules.dataTree;\n\n\t\tif(config.branchEl){\n\t\t\tif(config.branchEl.parentNode){\n\t\t\t\tconfig.branchEl.parentNode.removeChild(config.branchEl);\n\t\t\t}\n\t\t\tconfig.branchEl = false;\n\t\t}\n\n\t\tif(config.controlEl){\n\t\t\tif(config.controlEl.parentNode){\n\t\t\t\tconfig.controlEl.parentNode.removeChild(config.controlEl);\n\t\t\t}\n\t\t\tconfig.controlEl = false;\n\t\t}\n\n\t\tthis.generateControlElement(row, el);\n\n\t\trow.getElement().classList.add(\"tabulator-tree-level-\" + config.index);\n\n\t\tif(config.index){\n\t\t\tif(this.branchEl){\n\t\t\t\tconfig.branchEl = this.branchEl.cloneNode(true);\n\t\t\t\tel.insertBefore(config.branchEl, el.firstChild);\n\n\t\t\t\tif(this.table.rtl){\n\t\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\t}else{\n\t\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\t}\n\t\t\t}else{\n\n\t\t\t\tif(this.table.rtl){\n\t\t\t\t\tel.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + (config.index * this.indent) + \"px\";\n\t\t\t\t}else{\n\t\t\t\t\tel.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + (config.index * this.indent) + \"px\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tgenerateControlElement(row, el){\n\t\tvar config = row.modules.dataTree,\n\t\toldControl = config.controlEl;\n\n\t\tel = el || row.getCells()[0].getElement();\n\n\t\tif(config.children !== false){\n\n\t\t\tif(config.open){\n\t\t\t\tconfig.controlEl = this.collapseEl.cloneNode(true);\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tthis.collapseRow(row);\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tconfig.controlEl = this.expandEl.cloneNode(true);\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tthis.expandRow(row);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconfig.controlEl.addEventListener(\"mousedown\", (e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\n\t\t\tif(oldControl && oldControl.parentNode === el){\n\t\t\t\toldControl.parentNode.replaceChild(config.controlEl,oldControl);\n\t\t\t}else{\n\t\t\t\tel.insertBefore(config.controlEl, el.firstChild);\n\t\t\t}\n\t\t}\n\t}\n\n\tgetRows(rows){\n\t\tvar output = [];\n\n\t\trows.forEach((row, i) => {\n\t\t\tvar config, children;\n\n\t\t\toutput.push(row);\n\n\t\t\tif(row instanceof Row){\n\n\t\t\t\trow.create();\n\n\t\t\t\tconfig = row.modules.dataTree;\n\n\t\t\t\tif(!config.index && config.children !== false){\n\t\t\t\t\tchildren = this.getChildren(row);\n\n\t\t\t\t\tchildren.forEach((child) => {\n\t\t\t\t\t\tchild.create();\n\t\t\t\t\t\toutput.push(child);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\tgetChildren(row, allChildren){\n\t\tvar config = row.modules.dataTree,\n\t\tchildren = [],\n\t\toutput = [];\n\n\t\tif(config.children !== false && (config.open || allChildren)){\n\t\t\tif(!Array.isArray(config.children)){\n\t\t\t\tconfig.children = this.generateChildren(row);\n\t\t\t}\n\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\n\t\t\t}else{\n\t\t\t\tchildren = config.children;\n\t\t\t}\n\n\t\t\tif(this.table.modExists(\"sort\") && this.table.options.dataTreeSort){\n\t\t\t\tthis.table.modules.sort.sort(children);\n\t\t\t}\n\n\t\t\tchildren.forEach((child) => {\n\t\t\t\toutput.push(child);\n\n\t\t\t\tvar subChildren = this.getChildren(child);\n\n\t\t\t\tsubChildren.forEach((sub) => {\n\t\t\t\t\toutput.push(sub);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tgenerateChildren(row){\n\t\tvar children = [];\n\n\t\tvar childArray = row.getData()[this.field];\n\n\t\tif(!Array.isArray(childArray)){\n\t\t\tchildArray = [childArray];\n\t\t}\n\n\t\tchildArray.forEach((childData) => {\n\t\t\tvar childRow = new Row(childData || {}, this.table.rowManager);\n\n\t\t\tchildRow.create();\n\n\t\t\tchildRow.modules.dataTree.index = row.modules.dataTree.index + 1;\n\t\t\tchildRow.modules.dataTree.parent = row;\n\n\t\t\tif(childRow.modules.dataTree.children){\n\t\t\t\tchildRow.modules.dataTree.open = this.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);\n\t\t\t}\n\t\t\tchildren.push(childRow);\n\t\t});\n\n\t\treturn children;\n\t}\n\n\texpandRow(row, silent){\n\t\tvar config = row.modules.dataTree;\n\n\t\tif(config.children !== false){\n\t\t\tconfig.open = true;\n\n\t\t\trow.reinitialize();\n\n\t\t\tthis.refreshData(true);\n\n\t\t\tthis.dispatchExternal(\"dataTreeRowExpanded\", row.getComponent(), row.modules.dataTree.index);\n\t\t}\n\t}\n\n\tcollapseRow(row){\n\t\tvar config = row.modules.dataTree;\n\n\t\tif(config.children !== false){\n\t\t\tconfig.open = false;\n\n\t\t\trow.reinitialize();\n\n\t\t\tthis.refreshData(true);\n\n\t\t\tthis.dispatchExternal(\"dataTreeRowCollapsed\", row.getComponent(), row.modules.dataTree.index);\n\t\t}\n\t}\n\n\ttoggleRow(row){\n\t\tvar config = row.modules.dataTree;\n\n\t\tif(config.children !== false){\n\t\t\tif(config.open){\n\t\t\t\tthis.collapseRow(row);\n\t\t\t}else{\n\t\t\t\tthis.expandRow(row);\n\t\t\t}\n\t\t}\n\t}\n\n\tisRowExpanded(row){\n\t\treturn row.modules.dataTree.open;\n\t}\n\n\tgetTreeParent(row){\n\t\treturn row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;\n\t}\n\n\tgetTreeParentRoot(row){\n\t\treturn row.modules.dataTree && row.modules.dataTree.parent ? this.getTreeParentRoot(row.modules.dataTree.parent) : row;\n\t}\n\n\tgetFilteredTreeChildren(row){\n\t\tvar config = row.modules.dataTree,\n\t\toutput = [], children;\n\n\t\tif(config.children){\n\n\t\t\tif(!Array.isArray(config.children)){\n\t\t\t\tconfig.children = this.generateChildren(row);\n\t\t\t}\n\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\n\t\t\t}else{\n\t\t\t\tchildren = config.children;\n\t\t\t}\n\n\t\t\tchildren.forEach((childRow) => {\n\t\t\t\tif(childRow instanceof Row){\n\t\t\t\t\toutput.push(childRow);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\trowDelete(row){\n\t\tvar parent = row.modules.dataTree.parent,\n\t\tchildIndex;\n\n\t\tif(parent){\n\t\t\tchildIndex = this.findChildIndex(row, parent);\n\n\t\t\tif(childIndex !== false){\n\t\t\t\tparent.data[this.field].splice(childIndex, 1);\n\t\t\t}\n\n\t\t\tif(!parent.data[this.field].length){\n\t\t\t\tdelete parent.data[this.field];\n\t\t\t}\n\n\t\t\tthis.initializeRow(parent);\n\t\t\tthis.layoutRow(parent);\n\t\t}\n\n\t\tthis.refreshData(true);\n\t}\n\n\taddTreeChildRow(row, data, top, index){\n\t\tvar childIndex = false;\n\n\t\tif(typeof data === \"string\"){\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\tif(!Array.isArray(row.data[this.field])){\n\t\t\trow.data[this.field] = [];\n\n\t\t\trow.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);\n\t\t}\n\n\t\tif(typeof index !== \"undefined\"){\n\t\t\tchildIndex = this.findChildIndex(index, row);\n\n\t\t\tif(childIndex !== false){\n\t\t\t\trow.data[this.field].splice((top ? childIndex : childIndex + 1), 0, data);\n\t\t\t}\n\t\t}\n\n\t\tif(childIndex === false){\n\t\t\tif(top){\n\t\t\t\trow.data[this.field].unshift(data);\n\t\t\t}else{\n\t\t\t\trow.data[this.field].push(data);\n\t\t\t}\n\t\t}\n\n\t\tthis.initializeRow(row);\n\t\tthis.layoutRow(row);\n\n\t\tthis.refreshData(true);\n\t}\n\n\tfindChildIndex(subject, parent){\n\t\tvar match = false;\n\n\t\tif(typeof subject == \"object\"){\n\n\t\t\tif(subject instanceof Row){\n\t\t\t\t//subject is row element\n\t\t\t\tmatch = subject.data;\n\t\t\t}else if(subject instanceof RowComponent){\n\t\t\t\t//subject is public row component\n\t\t\t\tmatch = subject._getSelf().data;\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\n\t\t\t\tif(parent.modules.dataTree){\n\t\t\t\t\tmatch = parent.modules.dataTree.children.find((childRow) => {\n\t\t\t\t\t\treturn childRow instanceof Row ? childRow.element === subject : false;\n\t\t\t\t\t});\n\n\t\t\t\t\tif(match){\n\t\t\t\t\t\tmatch = match.data;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else if(subject === null){\n\t\t\t\tmatch = false;\n\t\t\t}\n\n\t\t}else if(typeof subject == \"undefined\"){\n\t\t\tmatch = false;\n\t\t}else{\n\t\t\t//subject should be treated as the index of the row\n\t\t\tmatch = parent.data[this.field].find((row) => {\n\t\t\t\treturn row.data[this.table.options.index] == subject;\n\t\t\t});\n\t\t}\n\n\t\tif(match){\n\n\t\t\tif(Array.isArray(parent.data[this.field])){\n\t\t\t\tmatch = parent.data[this.field].indexOf(match);\n\t\t\t}\n\n\t\t\tif(match == -1){\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t}\n\n\t\t//catch all for any other type of input\n\n\t\treturn match;\n\t}\n\n\tgetTreeChildren(row, component, recurse){\n\t\tvar config = row.modules.dataTree,\n\t\toutput = [];\n\n\t\tif(config && config.children){\n\n\t\t\tif(!Array.isArray(config.children)){\n\t\t\t\tconfig.children = this.generateChildren(row);\n\t\t\t}\n\n\t\t\tconfig.children.forEach((childRow) => {\n\t\t\t\tif(childRow instanceof Row){\n\t\t\t\t\toutput.push(component ? childRow.getComponent() : childRow);\n\n\t\t\t\t\tif(recurse){\n\t\t\t\t\t\toutput = output.concat(this.getTreeChildren(childRow, component, recurse));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tgetChildField(){\n\t\treturn this.field;\n\t}\n\n\tredrawNeeded(data){\n\t\treturn (this.field ? typeof data[this.field] !== \"undefined\" : false) || (this.elementField ? typeof data[this.elementField] !== \"undefined\" : false);\n\t}\n}\n\nDataTree.moduleName = \"dataTree\";\n\nexport default DataTree;","import csv from './downloaders/csv.js';\nimport json from './downloaders/json.js';\nimport pdf from './downloaders/pdf.js';\nimport xlsx from './downloaders/xlsx.js';\nimport html from './downloaders/html.js';\nimport jsonLines from './downloaders/jsonLines.js';\n\nexport default {\n\tcsv:csv,\n\tjson:json,\n\tjsonLines:jsonLines,\n\tpdf:pdf,\n\txlsx:xlsx,\n\thtml:html,\n};","export default function(list, options = {}, setFileContents){\n\tvar delimiter = options.delimiter ? options.delimiter : \",\",\n\tfileContents = [],\n\theaders = [];\n\n\tlist.forEach((row) => {\n\t\tvar item = [];\n\n\t\tswitch(row.type){\n\t\t\tcase \"group\":\n\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process row groups\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process column calculations\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"header\":\n\t\t\t\trow.columns.forEach((col, i) => {\n\t\t\t\t\tif(col && col.depth === 1){\n\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}\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\trow.columns.forEach((col) => {\n\n\t\t\t\t\tif(col){\n\n\t\t\t\t\t\tswitch(typeof col.value){\n\t\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\t\tcol.value = col.value !== null ? JSON.stringify(col.value) : \"\";\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\t\tcol.value = \"\";\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\titem.push('\"' + String(col.value).split('\"').join('\"\"') + '\"');\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tfileContents.push(item.join(delimiter));\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(headers.length){\n\t\tfileContents.unshift(headers.join(delimiter));\n\t}\n\n\tfileContents = fileContents.join(\"\\n\");\n\n\tif(options.bom){\n\t\tfileContents = \"\\ufeff\" + fileContents;\n\t}\n\n\tsetFileContents(fileContents, \"text/csv\");\n}\n","export default function(list, options, setFileContents){\n\tvar fileContents = [];\n\n\tlist.forEach((row) => {\n\t\tvar item = {};\n\n\t\tswitch(row.type){\n\t\t\tcase \"header\":\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\trow.columns.forEach((col) => {\n\t\t\t\t\tif(col){\n\t\t\t\t\t\titem[col.component.getTitleDownload() || col.component.getField()] = col.value;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tfileContents.push(item);\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tfileContents = JSON.stringify(fileContents, null, '\\t');\n\n\tsetFileContents(fileContents, \"application/json\");\n}","export default function (list, options, setFileContents) {\n\tconst fileContents = [];\n\n\tlist.forEach((row) => {\n\t\tconst item = {};\n\n\t\tswitch (row.type) {\n\t\t\tcase \"header\":\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\trow.columns.forEach((col) => {\n\t\t\t\t\tif (col) {\n\t\t\t\t\t\titem[col.component.getTitleDownload() || col.component.getField()] = col.value;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tfileContents.push(JSON.stringify(item));\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tsetFileContents(fileContents.join(\"\\n\"), \"application/x-ndjson\");\n}","export default function(list, options = {}, setFileContents){\n\tvar header = [],\n\tbody = [],\n\tautoTableParams = {},\n\trowGroupStyles = options.rowGroupStyles || {\n\t\tfontStyle: \"bold\",\n\t\tfontSize: 12,\n\t\tcellPadding: 6,\n\t\tfillColor: 220,\n\t},\n\trowCalcStyles = options.rowCalcStyles || {\n\t\tfontStyle: \"bold\",\n\t\tfontSize: 10,\n\t\tcellPadding: 4,\n\t\tfillColor: 232,\n\t},\n\tjsPDFParams = options.jsPDF || {},\n\ttitle = options.title ? options.title : \"\";\n\n\tif(!jsPDFParams.orientation){\n\t\tjsPDFParams.orientation = options.orientation || \"landscape\";\n\t}\n\n\tif(!jsPDFParams.unit){\n\t\tjsPDFParams.unit = \"pt\";\n\t}\n\n\t//parse row list\n\tlist.forEach((row) => {\n\t\tswitch(row.type){\n\t\t\tcase \"header\":\n\t\t\t\theader.push(parseRow(row));\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tbody.push(parseRow(row, rowGroupStyles));\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tbody.push(parseRow(row, rowCalcStyles));\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\tbody.push(parseRow(row));\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tfunction parseRow(row, styles){\n\t\tvar rowData = [];\n\n\t\trow.columns.forEach((col) =>{\n\t\t\tvar cell;\n\n\t\t\tif(col){\n\t\t\t\tswitch(typeof col.value){\n\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\tcol.value = col.value !== null ? JSON.stringify(col.value) : \"\";\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\tcol.value = \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcell = {\n\t\t\t\t\tcontent:col.value,\n\t\t\t\t\tcolSpan:col.width,\n\t\t\t\t\trowSpan:col.height,\n\t\t\t\t};\n\n\t\t\t\tif(styles){\n\t\t\t\t\tcell.styles = styles;\n\t\t\t\t}\n\n\t\t\t\trowData.push(cell);\n\t\t\t}\n\t\t});\n\n\t\treturn rowData;\n\t}\n\n\n\t//configure PDF\n\tvar doc = new jspdf.jsPDF(jsPDFParams); //set document to landscape, better for most tables\n\n\tif(options.autoTable){\n\t\tif(typeof options.autoTable === \"function\"){\n\t\t\tautoTableParams = options.autoTable(doc) || {};\n\t\t}else{\n\t\t\tautoTableParams = options.autoTable;\n\t\t}\n\t}\n\n\tif(title){\n\t\tautoTableParams.didDrawPage = function(data) {\n\t\t\tdoc.text(title, 40, 30);\n\t\t};\n\t}\n\n\tautoTableParams.head = header;\n\tautoTableParams.body = body;\n\n\tdoc.autoTable(autoTableParams);\n\n\tif(options.documentProcessing){\n\t\toptions.documentProcessing(doc);\n\t}\n\n\tsetFileContents(doc.output(\"arraybuffer\"), \"application/pdf\");\n}\n","import CoreFeature from '../../../../core/CoreFeature.js';\n\nexport default function(list, options, setFileContents){\n\tvar self = this,\n\tsheetName = options.sheetName || \"Sheet1\",\n\tworkbook = XLSX.utils.book_new(),\n\ttableFeatures = new CoreFeature(this),\n\tcompression = 'compress' in options ? options.compress : true,\n\twriteOptions = options.writeOptions || {bookType:'xlsx', bookSST:true, compression},\n\toutput;\n\n\twriteOptions.type = 'binary';\n\n\tworkbook.SheetNames = [];\n\tworkbook.Sheets = {};\n\n\tfunction generateSheet(){\n\t\tvar rows = [],\n\t\tmerges = [],\n\t\tworksheet = {},\n\t\trange = {s: {c:0, r:0}, e: {c:(list[0] ? list[0].columns.reduce((a, b) => a + (b && b.width ? b.width : 1), 0) : 0), r:list.length }};\n\n\t\t//parse row list\n\t\tlist.forEach((row, i) => {\n\t\t\tvar rowData = [];\n\n\t\t\trow.columns.forEach(function(col, j){\n\n\t\t\t\tif(col){\n\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\tif(col.width > 1 || col.height > -1){\n\t\t\t\t\t\tif(col.height > 1 || col.width > 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}\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\trows.push(rowData);\n\t\t});\n\n\t\t//convert rows to worksheet\n\t\tXLSX.utils.sheet_add_aoa(worksheet, rows);\n\n\t\tworksheet['!ref'] = XLSX.utils.encode_range(range);\n\n\t\tif(merges.length){\n\t\t\tworksheet[\"!merges\"] = merges;\n\t\t}\n\n\t\treturn worksheet;\n\t}\n\n\tif(options.sheetOnly){\n\t\tsetFileContents(generateSheet());\n\t\treturn;\n\t}\n\n\tif(options.sheets){\n\t\tfor(var sheet in options.sheets){\n\n\t\t\tif(options.sheets[sheet] === true){\n\t\t\t\tworkbook.SheetNames.push(sheet);\n\t\t\t\tworkbook.Sheets[sheet] = generateSheet();\n\t\t\t}else{\n\n\t\t\t\tworkbook.SheetNames.push(sheet);\n\n\t\t\t\ttableFeatures.commsSend(options.sheets[sheet], \"download\", \"intercept\",{\n\t\t\t\t\ttype:\"xlsx\",\n\t\t\t\t\toptions:{sheetOnly:true},\n\t\t\t\t\tactive:self.active,\n\t\t\t\t\tintercept:function(data){\n\t\t\t\t\t\tworkbook.Sheets[sheet] = data;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}else{\n\t\tworkbook.SheetNames.push(sheetName);\n\t\tworkbook.Sheets[sheetName] = generateSheet();\n\t}\n\n\tif(options.documentProcessing){\n\t\tworkbook = options.documentProcessing(workbook);\n\t}\n\n\t//convert workbook to binary array\n\tfunction s2ab(s) {\n\t\tvar buf = new ArrayBuffer(s.length);\n\t\tvar view = new Uint8Array(buf);\n\t\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\n\t\treturn buf;\n\t}\n\n\toutput = XLSX.write(workbook, writeOptions);\n\n\tsetFileContents(s2ab(output), \"application/octet-stream\");\n}\n","export default function(list, options, setFileContents){\n\tif(this.modExists(\"export\", true)){\n\t\tsetFileContents(this.modules.export.generateHTMLTable(list), \"text/html\");\n\t}\n}","import Module from '../../core/Module.js';\n\nimport defaultDownloaders from './defaults/downloaders.js';\n\nclass Download extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.registerTableOption(\"downloadEncoder\", function(data, mimeType){\n\t\t\treturn new Blob([data],{type:mimeType});\n\t\t}); //function to manipulate download data\n\t\tthis.registerTableOption(\"downloadReady\", undefined); //warn of function deprecation\n\t\tthis.registerTableOption(\"downloadConfig\", {}); //download config\n\t\tthis.registerTableOption(\"downloadRowRange\", \"active\"); //restrict download to active rows only\n\n\t\tthis.registerColumnOption(\"download\");\n\t\tthis.registerColumnOption(\"titleDownload\");\n\t}\n\n\tinitialize(){\n\t\tthis.deprecatedOptionsCheck();\n\n\t\tthis.registerTableFunction(\"download\", this.download.bind(this));\n\t\tthis.registerTableFunction(\"downloadToTab\", this.downloadToTab.bind(this));\n\t}\n\n\tdeprecatedOptionsCheck(){\n\t\tthis.deprecationCheck(\"downloadReady\", \"downloadEncoder\");\n\t}\t\n\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\n\tdownloadToTab(type, filename, options, active){\n\t\tthis.download(type, filename, options, active, true);\n\t}\n\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\n\t//trigger file download\n\tdownload(type, filename, options, range, interceptCallback){\n\t\tvar downloadFunc = false;\n\n\t\tfunction buildLink(data, mime){\n\t\t\tif(interceptCallback){\n\t\t\t\tif(interceptCallback === true){\n\t\t\t\t\tthis.triggerDownload(data, mime, type, filename, true);\n\t\t\t\t}else{\n\t\t\t\t\tinterceptCallback(data);\n\t\t\t\t}\n\n\t\t\t}else{\n\t\t\t\tthis.triggerDownload(data, mime, type, filename);\n\t\t\t}\n\t\t}\n\n\t\tif(typeof type == \"function\"){\n\t\t\tdownloadFunc = type;\n\t\t}else{\n\t\t\tif(Download.downloaders[type]){\n\t\t\t\tdownloadFunc = Download.downloaders[type];\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Download Error - No such download type found: \", type);\n\t\t\t}\n\t\t}\n\n\t\tif(downloadFunc){\n\t\t\tvar list = this.generateExportList(range);\n\n\t\t\tdownloadFunc.call(this.table, list , options || {}, buildLink.bind(this));\n\t\t}\n\t}\n\n\tgenerateExportList(range){\n\t\tvar list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, \"download\");\n\n\t\t//assign group header formatter\n\t\tvar groupHeader = this.table.options.groupHeaderDownload;\n\n\t\tif(groupHeader && !Array.isArray(groupHeader)){\n\t\t\tgroupHeader = [groupHeader];\n\t\t}\n\n\t\tlist.forEach((row) => {\n\t\t\tvar group;\n\n\t\t\tif(row.type === \"group\"){\n\t\t\t\tgroup = row.columns[0];\n\n\t\t\t\tif(groupHeader && groupHeader[row.indent]){\n\t\t\t\t\tgroup.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn list;\n\t}\n\n\ttriggerDownload(data, mime, type, filename, newTab){\n\t\tvar element = document.createElement('a'),\n\t\tblob = this.table.options.downloadEncoder(data, mime);\n\n\t\tif(blob){\n\t\t\tif(newTab){\n\t\t\t\twindow.open(window.URL.createObjectURL(blob));\n\t\t\t}else{\n\t\t\t\tfilename = filename || \"Tabulator.\" + (typeof type === \"function\" ? \"txt\" : type);\n\t\t\t\t\n\t\t\t\tif(navigator.msSaveOrOpenBlob){\n\t\t\t\t\tnavigator.msSaveOrOpenBlob(blob, filename);\n\t\t\t\t}else{\n\t\t\t\t\telement.setAttribute('href', window.URL.createObjectURL(blob));\n\n\t\t\t\t\t//set file title\n\t\t\t\t\telement.setAttribute('download', filename);\n\n\t\t\t\t\t//trigger download\n\t\t\t\t\telement.style.display = 'none';\n\t\t\t\t\tdocument.body.appendChild(element);\n\t\t\t\t\telement.click();\n\n\t\t\t\t\t//remove temporary link element\n\t\t\t\t\tdocument.body.removeChild(element);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.dispatchExternal(\"downloadComplete\");\n\t\t}\n\t}\n\n\tcommsReceived(table, action, data){\n\t\tswitch(action){\n\t\t\tcase \"intercept\":\n\t\t\t\tthis.download(data.type, \"\", data.options, data.active, data.intercept);\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nDownload.moduleName = \"download\";\n\n//load defaults\nDownload.downloaders = defaultDownloaders;\n\nexport default Download;","export default function maskInput(el, options){\n\tvar mask = options.mask,\n\tmaskLetter = typeof options.maskLetterChar !== \"undefined\" ? options.maskLetterChar : \"A\",\n\tmaskNumber = typeof options.maskNumberChar !== \"undefined\" ? options.maskNumberChar : \"9\",\n\tmaskWildcard = typeof options.maskWildcardChar !== \"undefined\" ? options.maskWildcardChar : \"*\";\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\", (e) => {\n\t\tvar index = el.value.length,\n\t\tchar = e.key;\n\n\t\tif(e.keyCode > 46 && !e.ctrlKey && !e.metaKey){\n\t\t\tif(index >= mask.length){\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\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\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\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\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn;\n\t});\n\n\tel.addEventListener(\"keyup\", (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\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}","import maskInput from './inputMask.js';\nimport urlBuilder from '../Ajax/defaults/urlGenerator.js';\n\nexport default class Edit{\n\tconstructor(editor, cell, onRendered, success, cancel, editorParams){\n\t\tthis.edit = editor;\n\t\tthis.table = editor.table;\n\t\tthis.cell = cell;\n\t\tthis.params = this._initializeParams(editorParams);\n\t\t\n\t\tthis.data = [];\n\t\tthis.displayItems = [];\n\t\tthis.currentItems = [];\n\t\tthis.focusedItem = null;\n\t\t\n\t\tthis.input = this._createInputElement();\n\t\tthis.listEl = this._createListElement();\n\t\t\n\t\tthis.initialValues = null; \n\t\t\n\t\tthis.isFilter = cell.getType() === \"header\";\n\t\t\n\t\tthis.filterTimeout = null;\n\t\tthis.filtered = false;\n\t\tthis.typing = false;\n\t\t\n\t\tthis.values = []; \n\t\tthis.popup = null; \n\t\t\n\t\tthis.listIteration = 0;\n\t\t\n\t\tthis.lastAction=\"\";\n\t\tthis.filterTerm=\"\";\n\t\t\n\t\tthis.blurable = true;\n\t\t\n\t\tthis.actions = {\n\t\t\tsuccess:success,\n\t\t\tcancel:cancel\n\t\t};\n\t\t\n\t\tthis._deprecatedOptionsCheck();\n\t\tthis._initializeValue();\n\t\t\n\t\tonRendered(this._onRendered.bind(this));\n\t}\n\t\n\t_deprecatedOptionsCheck(){\n\t\tif(this.params.listItemFormatter){\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The listItemFormatter editor param has been deprecated, please see the latest editor documentation for updated options\");\n\t\t}\n\t\t\n\t\tif(this.params.sortValuesList){\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The sortValuesList editor param has been deprecated, please see the latest editor documentation for updated options\");\n\t\t}\n\t\t\n\t\tif(this.params.searchFunc){\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The searchFunc editor param has been deprecated, please see the latest editor documentation for updated options\");\n\t\t}\n\t\t\n\t\tif(this.params.searchingPlaceholder){\n\t\t\tthis.cell.getTable().deprecationAdvisor.msg(\"The searchingPlaceholder editor param has been deprecated, please see the latest editor documentation for updated options\");\n\t\t}\n\t}\n\t\n\t_initializeValue(){\n\t\tvar initialValue = this.cell.getValue();\n\t\t\n\t\tif(typeof initialValue === \"undefined\" && typeof this.params.defaultValue !== \"undefined\"){\n\t\t\tinitialValue = this.params.defaultValue;\n\t\t}\n\t\t\n\t\tthis.initialValues = this.params.multiselect ? initialValue : [initialValue];\n\t\t\n\t\tif(this.isFilter){\n\t\t\tthis.input.value = this.initialValues ? this.initialValues.join(\",\") : \"\";\n\t\t\tthis.headerFilterInitialListGen(); \n\t\t}\n\t}\n\t\n\t_onRendered(){\n\t\tvar cellEl = this.cell.getElement();\n\t\t\n\t\tfunction clickStop(e){\n\t\t\te.stopPropagation();\n\t\t}\t\n\t\t\n\t\tif(!this.isFilter){\n\t\t\tthis.input.style.height = \"100%\";\n\t\t\tthis.input.focus({preventScroll: true});\n\t\t}\n\t\t\n\t\t\n\t\tcellEl.addEventListener(\"click\", clickStop);\n\t\t\n\t\tsetTimeout(() => {\n\t\t\tcellEl.removeEventListener(\"click\", clickStop);\n\t\t}, 1000);\n\t\t\n\t\tthis.input.addEventListener(\"mousedown\", this._preventPopupBlur.bind(this));\n\t}\n\t\n\t_createListElement(){\n\t\tvar listEl = document.createElement(\"div\");\n\t\tlistEl.classList.add(\"tabulator-edit-list\");\n\t\t\n\t\tlistEl.addEventListener(\"mousedown\", this._preventBlur.bind(this));\n\t\tlistEl.addEventListener(\"keydown\", this._inputKeyDown.bind(this));\n\t\t\n\t\treturn listEl;\n\t}\n\t\n\t_setListWidth(){\n\t\tvar element = this.isFilter ? this.input : this.cell.getElement();\n\t\t\n\t\tthis.listEl.style.minWidth = element.offsetWidth + \"px\";\n\t\t\n\t\tif(this.params.maxWidth){\n\t\t\tif(this.params.maxWidth === true){\n\t\t\t\tthis.listEl.style.maxWidth = element.offsetWidth + \"px\";\n\t\t\t}else if(typeof this.params.maxWidth === \"number\"){\n\t\t\t\tthis.listEl.style.maxWidth = this.params.maxWidth + \"px\";\n\t\t\t}else{\n\t\t\t\tthis.listEl.style.maxWidth = this.params.maxWidth;\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\t\n\t_createInputElement(){\n\t\tvar attribs = this.params.elementAttributes;\n\t\tvar input = document.createElement(\"input\");\n\t\t\n\t\tinput.setAttribute(\"type\", this.params.clearable ? \"search\" : \"text\");\n\t\t\n\t\tinput.style.padding = \"4px\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\t\t\n\t\tif(!this.params.autocomplete){\n\t\t\tinput.style.cursor = \"default\";\n\t\t\tinput.style.caretColor = \"transparent\";\n\t\t\t// input.readOnly = (this.edit.currentCell != false);\n\t\t}\n\t\t\n\t\tif(attribs && typeof attribs == \"object\"){\n\t\t\tfor (let key in attribs){\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) + attribs[\"+\" + key]);\n\t\t\t\t}else{\n\t\t\t\t\tinput.setAttribute(key, attribs[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(this.params.mask){\n\t\t\tmaskInput(input, this.params);\n\t\t}\n\t\t\n\t\tthis._bindInputEvents(input);\n\t\t\n\t\treturn input;\n\t}\n\t\n\t_initializeParams(params){\n\t\tvar valueKeys = [\"values\", \"valuesURL\", \"valuesLookup\"],\n\t\tvalueCheck;\n\t\t\n\t\tparams = Object.assign({}, params);\n\t\t\n\t\tparams.verticalNavigation = params.verticalNavigation || \"editor\";\n\t\tparams.placeholderLoading = typeof params.placeholderLoading === \"undefined\" ? \"Searching ...\" : params.placeholderLoading;\n\t\tparams.placeholderEmpty = typeof params.placeholderEmpty === \"undefined\" ? \"No Results Found\" : params.placeholderEmpty;\n\t\tparams.filterDelay = typeof params.filterDelay === \"undefined\" ? 300 : params.filterDelay;\n\t\t\n\t\tparams.emptyValue = Object.keys(params).includes(\"emptyValue\") ? params.emptyValue : \"\";\n\t\t\n\t\tvalueCheck = Object.keys(params).filter(key => valueKeys.includes(key)).length;\n\t\t\n\t\tif(!valueCheck){\n\t\t\tconsole.warn(\"list editor config error - either the values, valuesURL, or valuesLookup option must be set\");\n\t\t}else if(valueCheck > 1){\n\t\t\tconsole.warn(\"list editor config error - only one of the values, valuesURL, or valuesLookup options can be set on the same editor\");\n\t\t}\n\t\t\n\t\tif(params.autocomplete){\n\t\t\tif(params.multiselect){\n\t\t\t\tparams.multiselect = false;\n\t\t\t\tconsole.warn(\"list editor config error - multiselect option is not available when autocomplete is enabled\");\n\t\t\t}\n\t\t}else{\n\t\t\tif(params.freetext){\n\t\t\t\tparams.freetext = false;\n\t\t\t\tconsole.warn(\"list editor config error - freetext option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.filterFunc){\n\t\t\t\tparams.filterFunc = false;\n\t\t\t\tconsole.warn(\"list editor config error - filterFunc option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.filterRemote){\n\t\t\t\tparams.filterRemote = false;\n\t\t\t\tconsole.warn(\"list editor config error - filterRemote option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.mask){\n\t\t\t\tparams.mask = false;\n\t\t\t\tconsole.warn(\"list editor config error - mask option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.allowEmpty){\n\t\t\t\tparams.allowEmpty = false;\n\t\t\t\tconsole.warn(\"list editor config error - allowEmpty option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t\t\n\t\t\tif(params.listOnEmpty){\n\t\t\t\tparams.listOnEmpty = false;\n\t\t\t\tconsole.warn(\"list editor config error - listOnEmpty option is only available when autocomplete is enabled\");\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(params.filterRemote && !(typeof params.valuesLookup === \"function\" || params.valuesURL)){\n\t\t\tparams.filterRemote = false;\n\t\t\tconsole.warn(\"list editor config error - filterRemote option should only be used when values list is populated from a remote source\");\n\t\t}\n\t\treturn params;\n\t}\n\t//////////////////////////////////////\n\t////////// Event Handling ////////////\n\t//////////////////////////////////////\n\t\n\t_bindInputEvents(input){\n\t\tinput.addEventListener(\"focus\", this._inputFocus.bind(this));\n\t\tinput.addEventListener(\"click\", this._inputClick.bind(this));\n\t\tinput.addEventListener(\"blur\", this._inputBlur.bind(this));\n\t\tinput.addEventListener(\"keydown\", this._inputKeyDown.bind(this));\n\t\tinput.addEventListener(\"search\", this._inputSearch.bind(this));\n\t\t\n\t\tif(this.params.autocomplete){\n\t\t\tinput.addEventListener(\"keyup\", this._inputKeyUp.bind(this));\n\t\t}\n\t}\n\t\n\t\n\t_inputFocus(e){\n\t\tthis.rebuildOptionsList();\n\t}\n\t\n\t_filter(){\n\t\tif(this.params.filterRemote){\n\t\t\tclearTimeout(this.filterTimeout);\n\t\t\t\n\t\t\tthis.filterTimeout = setTimeout(() => {\n\t\t\t\tthis.rebuildOptionsList();\n\t\t\t}, this.params.filterDelay);\n\t\t}else{\n\t\t\tthis._filterList();\n\t\t}\n\t}\n\t\n\t_inputClick(e){\n\t\te.stopPropagation();\n\t}\n\t\n\t_inputBlur(e){\n\t\tif(this.blurable){\n\t\t\tif(this.popup){\n\t\t\t\tthis.popup.hide();\n\t\t\t}else{\n\t\t\t\tthis._resolveValue(true);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_inputSearch(){\n\t\tthis._clearChoices();\n\t}\n\t\n\t_inputKeyDown(e){\n\t\tswitch(e.keyCode){\n\t\t\t\n\t\t\tcase 38: //up arrow\n\t\t\t\tthis._keyUp(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 40: //down arrow\n\t\t\t\tthis._keyDown(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 37: //left arrow\n\t\t\tcase 39: //right arrow\n\t\t\t\tthis._keySide(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 13: //enter\n\t\t\t\tthis._keyEnter();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27: //escape\n\t\t\t\tthis._keyEsc();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 36: //home\n\t\t\tcase 35: //end\n\t\t\t\tthis._keyHomeEnd(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 9: //tab\n\t\t\t\tthis._keyTab(e);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tthis._keySelectLetter(e);\n\t\t}\n\t}\n\t\n\t_inputKeyUp(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 38: //up arrow\n\t\t\tcase 37: //left arrow\n\t\t\tcase 39: //up arrow\n\t\t\tcase 40: //right arrow\n\t\t\tcase 13: //enter\n\t\t\tcase 27: //escape\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tthis._keyAutoCompLetter(e);\n\t\t}\n\t}\n\t\n\t_preventPopupBlur(){\n\t\tif(this.popup){\n\t\t\tthis.popup.blockHide();\n\t\t}\n\t\t\n\t\tsetTimeout(() =>{\n\t\t\tif(this.popup){\n\t\t\t\tthis.popup.restoreHide();\n\t\t\t}\n\t\t}, 10);\n\t}\n\t\n\t_preventBlur(){\n\t\tthis.blurable = false;\n\t\t\n\t\tsetTimeout(() =>{\n\t\t\tthis.blurable = true;\n\t\t}, 10);\n\t}\n\t\n\t//////////////////////////////////////\n\t//////// Keyboard Navigation /////////\n\t//////////////////////////////////////\n\t\n\t_keyTab(e){\n\t\tif(this.params.autocomplete && this.lastAction === \"typing\"){\n\t\t\tthis._resolveValue(true);\n\t\t}else{\n\t\t\tif(this.focusedItem){\n\t\t\t\tthis._chooseItem(this.focusedItem, true);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keyUp(e){\n\t\tvar index = this.displayItems.indexOf(this.focusedItem);\n\t\t\n\t\tif(this.params.verticalNavigation == \"editor\" || (this.params.verticalNavigation == \"hybrid\" && index)){\n\t\t\te.stopImmediatePropagation();\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\t\n\t\t\tif(index > 0){\n\t\t\t\tthis._focusItem(this.displayItems[index - 1]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keyDown(e){\n\t\tvar index = this.displayItems.indexOf(this.focusedItem);\n\t\t\n\t\tif(this.params.verticalNavigation == \"editor\" || (this.params.verticalNavigation == \"hybrid\" && index < this.displayItems.length - 1)){\n\t\t\te.stopImmediatePropagation();\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\t\n\t\t\tif(index < this.displayItems.length - 1){\n\t\t\t\tif(index == -1){\n\t\t\t\t\tthis._focusItem(this.displayItems[0]);\n\t\t\t\t}else{\n\t\t\t\t\tthis._focusItem(this.displayItems[index + 1]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keySide(e){\n\t\tif(!this.params.autocomplete){\n\t\t\te.stopImmediatePropagation();\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\t\n\t_keyEnter(e){\n\t\tif(this.params.autocomplete && this.lastAction === \"typing\"){\n\t\t\tthis._resolveValue(true);\n\t\t}else{\n\t\t\tif(this.focusedItem){\n\t\t\t\tthis._chooseItem(this.focusedItem);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keyEsc(e){\n\t\tthis._cancel();\n\t}\n\t\n\t_keyHomeEnd(e){\n\t\tif(this.params.autocomplete){\n\t\t\t//prevent table navigation while using input element\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\t}\n\t\n\t_keySelectLetter(e){\n\t\tif(!this.params.autocomplete){\n\t\t\t// if(this.edit.currentCell === false){\n\t\t\te.preventDefault();\n\t\t\t// }\n\t\t\t\n\t\t\tif(e.keyCode >= 38 && e.keyCode <= 90){\n\t\t\t\tthis._scrollToValue(e.keyCode);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_keyAutoCompLetter(e){\n\t\tthis._filter();\n\t\tthis.lastAction = \"typing\";\n\t\tthis.typing = true;\n\t}\n\t\n\t\n\t_scrollToValue(char){\n\t\tclearTimeout(this.filterTimeout);\n\t\t\n\t\tvar character = String.fromCharCode(char).toLowerCase();\n\t\tthis.filterTerm += character.toLowerCase();\n\t\t\n\t\tvar match = this.displayItems.find((item) => {\n\t\t\treturn typeof item.label !== \"undefined\" && item.label.toLowerCase().startsWith(this.filterTerm);\n\t\t});\n\t\t\n\t\tif(match){\n\t\t\tthis._focusItem(match);\n\t\t}\n\t\t\n\t\tthis.filterTimeout = setTimeout(() => {\n\t\t\tthis.filterTerm = \"\";\n\t\t}, 800);\n\t}\n\t\n\t_focusItem(item){\n\t\tthis.lastAction = \"focus\";\n\t\t\n\t\tif(this.focusedItem && this.focusedItem.element){\n\t\t\tthis.focusedItem.element.classList.remove(\"focused\");\n\t\t}\n\t\t\n\t\tthis.focusedItem = item;\n\t\t\n\t\tif(item && item.element){\n\t\t\titem.element.classList.add(\"focused\");\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\n\t\t}\n\t}\n\t\n\t\n\t//////////////////////////////////////\n\t/////// Data List Generation /////////\n\t//////////////////////////////////////\n\theaderFilterInitialListGen(){\n\t\tthis._generateOptions(true);\n\t}\n\t\n\trebuildOptionsList(){\n\t\tthis._generateOptions()\n\t\t\t.then(this._sortOptions.bind(this))\n\t\t\t.then(this._buildList.bind(this))\n\t\t\t.then(this._showList.bind(this))\n\t\t\t.catch((e) => {\n\t\t\t\tif(!Number.isInteger(e)){\n\t\t\t\t\tconsole.error(\"List generation error\", e);\n\t\t\t\t}\n\t\t\t});\n\t}\n\t\n\t_filterList(){\n\t\tthis._buildList(this._filterOptions());\n\t\tthis._showList();\n\t}\n\t\n\t_generateOptions(silent){\n\t\tvar values = [];\n\t\tvar iteration = ++ this.listIteration;\n\t\t\n\t\tthis.filtered = false;\n\t\t\n\t\tif(this.params.values){\n\t\t\tvalues = this.params.values;\n\t\t}else if (this.params.valuesURL){\n\t\t\tvalues = this._ajaxRequest(this.params.valuesURL, this.input.value);\n\t\t}else{\n\t\t\tif(typeof this.params.valuesLookup === \"function\"){\n\t\t\t\tvalues = this.params.valuesLookup(this.cell, this.input.value);\n\t\t\t}else if(this.params.valuesLookup){\n\t\t\t\tvalues = this._uniqueColumnValues(this.params.valuesLookupField);\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(values instanceof Promise){\n\t\t\tif(!silent){\n\t\t\t\tthis._addPlaceholder(this.params.placeholderLoading);\n\t\t\t}\n\t\t\t\n\t\t\treturn values.then()\n\t\t\t\t.then((responseValues) => {\n\t\t\t\t\tif(this.listIteration === iteration){\n\t\t\t\t\t\treturn this._parseList(responseValues);\n\t\t\t\t\t}else{\n\t\t\t\t\t\treturn Promise.reject(iteration);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}else{\n\t\t\treturn Promise.resolve(this._parseList(values));\n\t\t}\n\t}\n\t\n\t_addPlaceholder(contents){\n\t\tvar placeholder = document.createElement(\"div\");\n\t\t\n\t\tif(typeof contents === \"function\"){\n\t\t\tcontents = contents(this.cell.getComponent(), this.listEl);\n\t\t}\n\t\t\n\t\tif(contents){\n\t\t\tthis._clearList();\n\t\t\t\n\t\t\tif(contents instanceof HTMLElement){\n\t\t\t\tplaceholder = contents;\n\t\t\t}else{\n\t\t\t\tplaceholder.classList.add(\"tabulator-edit-list-placeholder\");\n\t\t\t\tplaceholder.innerHTML = contents;\n\t\t\t}\n\t\t\t\n\t\t\tthis.listEl.appendChild(placeholder);\n\t\t\t\n\t\t\tthis._showList();\n\t\t}\n\t}\n\t\n\t_ajaxRequest(url, term){\n\t\tvar params = this.params.filterRemote ? {term:term} : {};\n\t\turl = urlBuilder(url, {}, params);\n\t\t\n\t\treturn fetch(url)\n\t\t\t.then((response)=>{\n\t\t\t\tif(response.ok) {\n\t\t\t\t\treturn response.json()\n\t\t\t\t\t\t.catch((error)=>{\n\t\t\t\t\t\t\tconsole.warn(\"List Ajax Load Error - Invalid JSON returned\", error);\n\t\t\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\tconsole.error(\"List Ajax Load Error - Connection Error: \" + response.status, response.statusText);\n\t\t\t\t\treturn Promise.reject(response);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((error)=>{\n\t\t\t\tconsole.error(\"List Ajax Load Error - Connection Error: \", error);\n\t\t\t\treturn Promise.reject(error);\n\t\t\t});\n\t}\n\t\n\t_uniqueColumnValues(field){\n\t\tvar output = {},\n\t\tdata = this.table.getData(this.params.valuesLookup),\n\t\tcolumn;\n\t\t\n\t\tif(field){\n\t\t\tcolumn = this.table.columnManager.getColumnByField(field);\n\t\t}else{\n\t\t\tcolumn = this.cell.getColumn()._getSelf();\n\t\t}\n\t\t\n\t\tif(column){\n\t\t\tdata.forEach((row) => {\n\t\t\t\tvar val = column.getFieldValue(row);\n\t\t\t\t\n\t\t\t\tif(val !== null && typeof val !== \"undefined\" && val !== \"\"){\n\t\t\t\t\toutput[val] = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tconsole.warn(\"unable to find matching column to create select lookup list:\", field);\n\t\t\toutput = [];\n\t\t}\n\t\t\n\t\treturn Object.keys(output);\n\t}\n\t\n\t\n\t_parseList(inputValues){\n\t\tvar data = [];\n\t\t\n\t\tif(!Array.isArray(inputValues)){\n\t\t\tinputValues = Object.entries(inputValues).map(([key, value]) => {\n\t\t\t\treturn {\n\t\t\t\t\tlabel:value,\n\t\t\t\t\tvalue:key,\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\t\t\n\t\tinputValues.forEach((value) => {\n\t\t\tif(typeof value !== \"object\"){\n\t\t\t\tvalue = {\n\t\t\t\t\tlabel:value,\n\t\t\t\t\tvalue:value,\n\t\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\tthis._parseListItem(value, data, 0);\n\t\t});\n\t\t\n\t\tif(!this.currentItems.length && this.params.freetext){\n\t\t\tthis.input.value = this.initialValues;\n\t\t\tthis.typing = true;\n\t\t\tthis.lastAction = \"typing\";\n\t\t}\n\t\t\n\t\tthis.data = data;\n\t\t\n\t\treturn data; \n\t}\n\t\n\t_parseListItem(option, data, level){\n\t\tvar item = {};\n\t\t\n\t\tif(option.options){\n\t\t\titem = this._parseListGroup(option, level + 1);\n\t\t}else{\n\t\t\titem = {\n\t\t\t\tlabel:option.label,\n\t\t\t\tvalue:option.value,\n\t\t\t\titemParams:option.itemParams,\n\t\t\t\telementAttributes: option.elementAttributes,\n\t\t\t\telement:false,\n\t\t\t\tselected:false,\n\t\t\t\tvisible:true,\n\t\t\t\tlevel:level,\n\t\t\t\toriginal:option,\n\t\t\t};\n\t\t\t\n\t\t\tif(this.initialValues && this.initialValues.indexOf(option.value) > -1){\n\t\t\t\tthis._chooseItem(item, true);\n\t\t\t}\n\t\t}\n\t\t\n\t\tdata.push(item);\n\t}\n\t\n\t_parseListGroup(option, level){\n\t\tvar item = {\n\t\t\tlabel:option.label,\n\t\t\tgroup:true,\n\t\t\titemParams:option.itemParams,\n\t\t\telementAttributes:option.elementAttributes,\n\t\t\telement:false,\n\t\t\tvisible:true,\n\t\t\tlevel:level,\n\t\t\toptions:[],\n\t\t\toriginal:option,\n\t\t};\n\t\t\n\t\toption.options.forEach((child) => {\n\t\t\tthis._parseListItem(child, item.options, level);\n\t\t});\n\t\t\n\t\treturn item;\n\t}\n\t\n\t_sortOptions(options){\n\t\tvar sorter;\n\t\t\n\t\tif(this.params.sort){\n\t\t\tsorter = typeof this.params.sort === \"function\" ? this.params.sort : this._defaultSortFunction.bind(this);\n\t\t\t\n\t\t\tthis._sortGroup(sorter, options);\n\t\t}\n\t\t\n\t\treturn options;\n\t}\n\t\n\t_sortGroup(sorter, options){\n\t\toptions.sort((a,b) => {\n\t\t\treturn sorter(a.label, b.label, a.value, b.value, a.original, b.original);\n\t\t});\n\t\t\n\t\toptions.forEach((option) => {\n\t\t\tif(option.group){\n\t\t\t\tthis._sortGroup(sorter, option.options);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t_defaultSortFunction(as, bs){\n\t\tvar a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\n\t\tvar emptyAlign = 0;\n\t\t\n\t\tif(this.params.sort === \"desc\"){\n\t\t\t[as, bs] = [bs, as];\n\t\t}\n\t\t\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\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}\n\t\t\t\t\telse return a1 > b1 ? 1 : -1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn a.length > b.length;\n\t\t}\n\t\t\n\t\treturn emptyAlign;\n\t}\n\t\n\t_filterOptions(){\n\t\tvar filterFunc = this.params.filterFunc || this._defaultFilterFunc,\n\t\tterm = this.input.value;\n\t\t\n\t\tif(term){\n\t\t\tthis.filtered = true;\n\t\t\t\n\t\t\tthis.data.forEach((item) => {\n\t\t\t\tthis._filterItem(filterFunc, term, item);\n\t\t\t});\n\t\t}else{\n\t\t\tthis.filtered = false;\n\t\t}\n\t\t\n\t\treturn this.data;\n\t}\n\t\n\t_filterItem(func, term, item){\n\t\tvar matches = false;\n\t\t\n\t\tif(!item.group){\n\t\t\titem.visible = func(term, item.label, item.value, item.original);\n\t\t}else{\n\t\t\titem.options.forEach((option) => {\n\t\t\t\tif(this._filterItem(func, term, option)){\n\t\t\t\t\tmatches = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\titem.visible = matches;\n\t\t}\n\t\t\n\t\treturn item.visible;\n\t}\n\t\n\t_defaultFilterFunc(term, label, value, item){\n\t\tterm = String(term).toLowerCase();\n\t\t\n\t\tif(label !== null && typeof label !== \"undefined\"){\n\t\t\tif(String(label).toLowerCase().indexOf(term) > -1 || String(value).toLowerCase().indexOf(term) > -1){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\t//////////////////////////////////////\n\t/////////// Display List /////////////\n\t//////////////////////////////////////\n\t\n\t_clearList(){\n\t\twhile(this.listEl.firstChild) this.listEl.removeChild(this.listEl.firstChild);\n\t\t\n\t\tthis.displayItems = [];\n\t}\n\t\n\t_buildList(data){\n\t\tthis._clearList();\n\t\t\n\t\tdata.forEach((option) => {\n\t\t\tthis._buildItem(option);\n\t\t});\n\t\t\n\t\tif(!this.displayItems.length){\n\t\t\tthis._addPlaceholder(this.params.placeholderEmpty);\n\t\t} \n\t}\n\t\n\t_buildItem(item){\n\t\tvar el = item.element,\n\t\tcontents;\n\t\t\n\t\tif(!this.filtered || item.visible){\n\t\t\t\n\t\t\tif(!el){\n\t\t\t\tel = document.createElement(\"div\");\n\t\t\t\tel.tabIndex = 0;\n\t\t\t\t\n\t\t\t\tcontents = this.params.itemFormatter ? this.params.itemFormatter(item.label, item.value, item.original, el) : item.label;\n\t\t\t\t\n\t\t\t\tif(contents instanceof HTMLElement){\n\t\t\t\t\tel.appendChild(contents);\n\t\t\t\t}else{\n\t\t\t\t\tel.innerHTML = contents;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(item.group){\n\t\t\t\t\tel.classList.add(\"tabulator-edit-list-group\");\n\t\t\t\t}else{\n\t\t\t\t\tel.classList.add(\"tabulator-edit-list-item\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tel.classList.add(\"tabulator-edit-list-group-level-\" + item.level);\n\t\t\t\t\n\t\t\t\tif(item.elementAttributes && typeof item.elementAttributes == \"object\"){\n\t\t\t\t\tfor (let key in item.elementAttributes){\n\t\t\t\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\t\t\tel.setAttribute(key, this.input.getAttribute(key) + item.elementAttributes[\"+\" + key]);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tel.setAttribute(key, item.elementAttributes[key]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(item.group){\n\t\t\t\t\tel.addEventListener(\"click\", this._groupClick.bind(this, item));\n\t\t\t\t}else{\n\t\t\t\t\tel.addEventListener(\"click\", this._itemClick.bind(this, item));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tel.addEventListener(\"mousedown\", this._preventBlur.bind(this));\n\t\t\t\t\n\t\t\t\titem.element = el;\n\t\t\t}\n\t\t\t\n\t\t\tthis._styleItem(item);\n\t\t\t\n\t\t\tthis.listEl.appendChild(el);\n\t\t\t\n\t\t\tif(item.group){\n\t\t\t\titem.options.forEach((option) => {\n\t\t\t\t\tthis._buildItem(option);\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tthis.displayItems.push(item);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_showList(){\n\t\tvar startVis = this.popup && this.popup.isVisible();\n\t\t\n\t\tif(this.input.parentNode){\n\t\t\tif(this.params.autocomplete && this.input.value === \"\" && !this.params.listOnEmpty){\n\t\t\t\tif(this.popup){\n\t\t\t\t\tthis.popup.hide(true);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tthis._setListWidth();\n\t\t\t\n\t\t\tif(!this.popup){\n\t\t\t\tthis.popup = this.edit.popup(this.listEl);\n\t\t\t}\n\t\t\t\n\t\t\tthis.popup.show(this.cell.getElement(), \"bottom\");\n\t\t\t\n\t\t\tif(!startVis){\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.popup.hideOnBlur(this._resolveValue.bind(this, true));\n\t\t\t\t}, 10);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_styleItem(item){\n\t\tif(item && item.element){\n\t\t\tif(item.selected){\n\t\t\t\titem.element.classList.add(\"active\");\n\t\t\t}else{\n\t\t\t\titem.element.classList.remove(\"active\");\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//////////////////////////////////////\n\t///////// User Interaction ///////////\n\t//////////////////////////////////////\n\t\n\t_itemClick(item, e){\n\t\te.stopPropagation();\n\t\t\n\t\tthis._chooseItem(item);\n\t}\n\t\n\t_groupClick(item, e){\n\t\te.stopPropagation();\n\t}\n\t\n\t\n\t//////////////////////////////////////\n\t////// Current Item Management ///////\n\t//////////////////////////////////////\n\t\n\t_cancel(){\n\t\tthis.popup.hide(true);\n\t\tthis.actions.cancel();\n\t}\n\t\n\t_clearChoices(){\n\t\tthis.typing = true;\n\t\t\n\t\tthis.currentItems.forEach((item) => {\n\t\t\titem.selected = false;\n\t\t\tthis._styleItem(item);\n\t\t});\n\t\t\n\t\tthis.currentItems = [];\n\t\t\n\t\tthis.focusedItem = null;\n\t}\n\t\n\t_chooseItem(item, silent){\n\t\tvar index;\n\t\t\n\t\tthis.typing = false;\n\t\t\n\t\tif(this.params.multiselect){\n\t\t\tindex = this.currentItems.indexOf(item);\n\t\t\t\n\t\t\tif(index > -1){\n\t\t\t\tthis.currentItems.splice(index, 1);\n\t\t\t\titem.selected = false;\n\t\t\t}else{\n\t\t\t\tthis.currentItems.push(item);\n\t\t\t\titem.selected = true;\n\t\t\t}\n\t\t\t\n\t\t\tthis.input.value = this.currentItems.map(item => item.label).join(\",\");\n\t\t\t\n\t\t\tthis._styleItem(item);\n\t\t\t\n\t\t}else{\n\t\t\tthis.currentItems = [item];\n\t\t\titem.selected = true;\n\t\t\t\n\t\t\tthis.input.value = item.label;\n\t\t\t\n\t\t\tthis._styleItem(item);\n\t\t\t\n\t\t\tif(!silent){\n\t\t\t\tthis._resolveValue();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis._focusItem(item);\n\t}\n\t\n\t_resolveValue(blur){\n\t\tvar output, initialValue;\n\t\t\n\t\tif(this.popup){\n\t\t\tthis.popup.hide(true);\n\t\t}\n\t\t\n\t\tif(this.params.multiselect){\n\t\t\toutput = this.currentItems.map(item => item.value);\n\t\t}else{\n\t\t\tif(blur && this.params.autocomplete && this.typing){\n\t\t\t\tif(this.params.freetext || (this.params.allowEmpty && this.input.value === \"\")){\n\t\t\t\t\toutput = this.input.value;\n\t\t\t\t}else{\n\t\t\t\t\tthis.actions.cancel();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(this.currentItems[0]){\n\t\t\t\t\toutput = this.currentItems[0].value;\n\t\t\t\t}else{\n\t\t\t\t\tinitialValue = Array.isArray(this.initialValues) ? this.initialValues[0] : this.initialValues;\n\t\t\t\t\t\n\t\t\t\t\tif(initialValue === null || typeof initialValue === \"undefined\" || initialValue === \"\"){\n\t\t\t\t\t\toutput = initialValue;\n\t\t\t\t\t}else{\n\t\t\t\t\t\toutput = this.params.emptyValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(output === \"\"){\n\t\t\toutput = this.params.emptyValue;\n\t\t}\n\t\t\n\t\tthis.actions.success(output);\n\t\t\n\t\tif(this.isFilter){\n\t\t\tthis.initialValues = output && !Array.isArray(output) ? [output] : output;\n\t\t\tthis.currentItems = [];\n\t\t}\n\t}\n\t\n}\n","import input from './editors/input.js';\nimport textarea from './editors/textarea.js';\nimport number from './editors/number.js';\nimport range from './editors/range.js';\nimport date from './editors/date.js';\nimport time from './editors/time.js';\nimport datetime from './editors/datetime.js';\nimport select from './editors/select.js';\nimport list from './editors/list.js';\nimport autocomplete from './editors/autocomplete.js';\nimport star from './editors/star.js';\nimport progress from './editors/progress.js';\nimport tickCross from './editors/tickCross.js';\n\nexport default {\n\tinput:input,\n\ttextarea:textarea,\n\tnumber:number,\n\trange:range,\n\tdate:date,\n\ttime:time,\n\tdatetime:datetime,\n\tselect:select,\n\tlist:list,\n\tautocomplete:autocomplete,\n\tstar:star,\n\tprogress:progress,\n\ttickCross:tickCross,\n};","import maskInput from '../../inputMask.js';\n\n//input element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\t//create and style input\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\n\tinput.setAttribute(\"type\", editorParams.search ? \"search\" : \"text\");\n\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\tinput.value = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\n\tonRendered(function(){\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction onChange(e){\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\n\t\t\tif(success(input.value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\n\t//submit new value on blur or change\n\tinput.addEventListener(\"change\", onChange);\n\tinput.addEventListener(\"blur\", onChange);\n\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\t// case 9:\n\t\t\tcase 13:\n\t\t\t\tonChange(e);\n\t\t\t\tbreak;\n\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(editorParams.mask){\n\t\tmaskInput(input, editorParams);\n\t}\n\n\treturn input;\n}","import maskInput from '../../inputMask.js';\n\n//resizable text area element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar cellValue = cell.getValue(),\n\tvertNav = editorParams.verticalNavigation || \"hybrid\",\n\tvalue = String(cellValue !== null && typeof cellValue !== \"undefined\" ? cellValue : \"\"),\n\tinput = document.createElement(\"textarea\"),\n\tscrollHeight = 0;\n\n\t//create and style input\n\tinput.style.display = \"block\";\n\tinput.style.padding = \"2px\";\n\tinput.style.height = \"100%\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\tinput.style.whiteSpace = \"pre-wrap\";\n\tinput.style.resize = \"none\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\tinput.value = value;\n\n\tonRendered(function(){\n\t\tif(cell.getType() === \"cell\"){\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\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction onChange(e){\n\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\n\n\t\t\tif(success(input.value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\n\t\t\tsetTimeout(function(){\n\t\t\t\tcell.getRow().normalizeHeight();\n\t\t\t},300);\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\n\t//submit new value on blur or change\n\tinput.addEventListener(\"change\", onChange);\n\tinput.addEventListener(\"blur\", onChange);\n\n\tinput.addEventListener(\"keyup\", function(){\n\n\t\tinput.style.height = \"\";\n\n\t\tvar heightNow = input.scrollHeight;\n\n\t\tinput.style.height = heightNow + \"px\";\n\n\t\tif(heightNow != scrollHeight){\n\t\t\tscrollHeight = heightNow;\n\t\t\tcell.getRow().normalizeHeight();\n\t\t}\n\t});\n\n\tinput.addEventListener(\"keydown\", function(e){\n\n\t\tswitch(e.keyCode){\n\n\t\t\tcase 13:\n\t\t\t\tif(e.shiftKey && editorParams.shiftEnterSubmit){\n\t\t\t\t\tonChange(e);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\n\t\t\tcase 38: //up arrow\n\t\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart)){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart !== input.value.length)){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(editorParams.mask){\n\t\tmaskInput(input, editorParams);\n\t}\n\n\treturn input;\n}","import maskInput from '../../inputMask.js';\n\n//input element with type of number\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar cellValue = cell.getValue(),\n\tvertNav = editorParams.verticalNavigation || \"editor\",\n\tinput = document.createElement(\"input\");\n\n\tinput.setAttribute(\"type\", \"number\");\n\n\tif(typeof editorParams.max != \"undefined\"){\n\t\tinput.setAttribute(\"max\", editorParams.max);\n\t}\n\n\tif(typeof editorParams.min != \"undefined\"){\n\t\tinput.setAttribute(\"min\", editorParams.min);\n\t}\n\n\tif(typeof editorParams.step != \"undefined\"){\n\t\tinput.setAttribute(\"step\", editorParams.step);\n\t}\n\n\t//create and style input\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\tinput.value = cellValue;\n\n\tvar blurFunc = function(e){\n\t\tonChange();\n\t};\n\n\tonRendered(function () {\n\t\tif(cell.getType() === \"cell\"){\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\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction onChange(){\n\t\tvar value = input.value;\n\n\t\tif(!isNaN(value) && value !==\"\"){\n\t\t\tvalue = Number(value);\n\t\t}\n\n\t\tif(value !== cellValue){\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 13:\n\t\t\t// case 9:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\n\t\t\tcase 38: //up arrow\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\"){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(editorParams.mask){\n\t\tmaskInput(input, editorParams);\n\t}\n\n\treturn input;\n}","//input element with type of number\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\t\n\tinput.setAttribute(\"type\", \"range\");\n\t\n\tif (typeof editorParams.max != \"undefined\") {\n\t\tinput.setAttribute(\"max\", editorParams.max);\n\t}\n\t\n\tif (typeof editorParams.min != \"undefined\") {\n\t\tinput.setAttribute(\"min\", editorParams.min);\n\t}\n\t\n\tif (typeof editorParams.step != \"undefined\") {\n\t\tinput.setAttribute(\"step\", editorParams.step);\n\t}\n\t\n\t//create and style input\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tinput.value = cellValue;\n\t\n\tonRendered(function () {\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\t\t}\n\t});\n\t\n\tfunction onChange(){\n\t\tvar value = input.value;\n\t\t\n\t\tif(!isNaN(value) && value !==\"\"){\n\t\t\tvalue = Number(value);\n\t\t}\n\t\t\n\t\tif(value != cellValue){\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"blur\", function(e){\n\t\tonChange();\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 13:\n\t\t\t// case 9:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t\n\treturn input;\n}","//input element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar inputFormat = editorParams.format,\n\tvertNav = editorParams.verticalNavigation || \"editor\",\n\tDT = inputFormat ? (window.DateTime || luxon.DateTime) : null;\n\t\n\t//create and style input\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\t\n\tfunction convertDate(value){\n\t\tvar newDatetime;\n\t\t\n\t\tif(DT.isDateTime(value)){\n\t\t\tnewDatetime = value;\n\t\t}else if(inputFormat === \"iso\"){\n\t\t\tnewDatetime = DT.fromISO(String(value));\n\t\t}else{\n\t\t\tnewDatetime = DT.fromFormat(String(value), inputFormat);\n\t\t}\n\t\t\n\t\treturn newDatetime.toFormat(\"yyyy-MM-dd\");\n\t}\n\t\n\tinput.type = \"date\";\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\n\tif(editorParams.max){\n\t\tinput.setAttribute(\"max\", inputFormat ? convertDate(editorParams.max) : editorParams.max);\n\t}\n\n\tif(editorParams.min){\n\t\tinput.setAttribute(\"min\", inputFormat ? convertDate(editorParams.min) : editorParams.min);\n\t}\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcellValue = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\t\n\tif(inputFormat){\n\t\tif(DT){\t\t\n\t\t\tcellValue = convertDate(cellValue);\t\t\t\n\t\t}else{\n\t\t\tconsole.error(\"Editor Error - 'date' editor 'format' param is dependant on luxon.js\");\n\t\t}\n\t}\n\t\n\tinput.value = cellValue;\n\t\n\tonRendered(function(){\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\t\t\t\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\t\n\tfunction onChange(){\n\t\tvar value = input.value,\n\t\tluxDate;\n\t\t\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && value !== \"\") || value !== cellValue){\n\t\t\t\n\t\t\tif(value && inputFormat){\n\t\t\t\tluxDate = DT.fromFormat(String(value), \"yyyy-MM-dd\");\n\n\t\t\t\tswitch(inputFormat){\n\t\t\t\t\tcase true:\n\t\t\t\t\t\tvalue = luxDate;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"iso\":\n\t\t\t\t\t\tvalue = luxDate.toISO();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = luxDate.toFormat(inputFormat);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"blur\", function(e) {\n\t\tif (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) {\n\t\t\tonChange(); // only on a \"true\" blur; not when focusing browser's date/time picker\n\t\t}\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\t// case 9:\n\t\t\tcase 13:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 38: //up arrow\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\"){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t\n\treturn input;\n}\n","//input element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar inputFormat = editorParams.format,\n\tvertNav = editorParams.verticalNavigation || \"editor\",\n\tDT = inputFormat ? (window.DateTime || luxon.DateTime) : null, \n\tnewDatetime;\n\t\n\t//create and style input\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\t\n\tinput.type = \"time\";\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcellValue = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\t\n\tif(inputFormat){\n\t\tif(DT){\n\t\t\tif(DT.isDateTime(cellValue)){\n\t\t\t\tnewDatetime = cellValue;\n\t\t\t}else if(inputFormat === \"iso\"){\n\t\t\t\tnewDatetime = DT.fromISO(String(cellValue));\n\t\t\t}else{\n\t\t\t\tnewDatetime = DT.fromFormat(String(cellValue), inputFormat);\n\t\t\t}\n\t\t\t\n\t\t\tcellValue = newDatetime.toFormat(\"HH:mm\");\n\t\t\t\n\t\t}else{\n\t\t\tconsole.error(\"Editor Error - 'date' editor 'format' param is dependant on luxon.js\");\n\t\t}\n\t}\n\n\tconsole.log(\"val\", cellValue);\n\t\n\tinput.value = cellValue;\n\t\n\tonRendered(function(){\n\t\tif(cell.getType() == \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\t\t\t\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\t\n\tfunction onChange(){\n\t\tvar value = input.value,\n\t\tluxTime;\n\t\t\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && value !== \"\") || value !== cellValue){\n\t\t\t\n\t\t\tif(value && inputFormat){\n\t\t\t\tluxTime = DT.fromFormat(String(value), \"hh:mm\");\n\n\t\t\t\tswitch(inputFormat){\n\t\t\t\t\tcase true:\n\t\t\t\t\t\tvalue = luxTime;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"iso\":\n\t\t\t\t\t\tvalue = luxTime.toISO();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = luxTime.toFormat(inputFormat);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"blur\", function(e) {\n\t\tif (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) {\n\t\t\tonChange(); // only on a \"true\" blur; not when focusing browser's date/time picker\n\t\t}\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\t// case 9:\n\t\t\tcase 13:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\n\t\t\tcase 38: //up arrow\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\"){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t\n\treturn input;\n}\n","//input element\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar inputFormat = editorParams.format,\n\tvertNav = editorParams.verticalNavigation || \"editor\",\n\tDT = inputFormat ? (window.DateTime || luxon.DateTime) : null, \n\tnewDatetime;\n\t\n\t//create and style input\n\tvar cellValue = cell.getValue(),\n\tinput = document.createElement(\"input\");\n\t\n\tinput.type = \"datetime-local\";\n\tinput.style.padding = \"4px\";\n\tinput.style.width = \"100%\";\n\tinput.style.boxSizing = \"border-box\";\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcellValue = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\t\n\tif(inputFormat){\n\t\tif(DT){\n\t\t\tif(DT.isDateTime(cellValue)){\n\t\t\t\tnewDatetime = cellValue;\n\t\t\t}else if(inputFormat === \"iso\"){\n\t\t\t\tnewDatetime = DT.fromISO(String(cellValue));\n\t\t\t}else{\n\t\t\t\tnewDatetime = DT.fromFormat(String(cellValue), inputFormat);\n\t\t\t}\n\t\t\t\n\t\t\tcellValue = newDatetime.toFormat(\"yyyy-MM-dd\") + \"T\" + newDatetime.toFormat(\"HH:mm\");\n\t\t}else{\n\t\t\tconsole.error(\"Editor Error - 'date' editor 'format' param is dependant on luxon.js\");\n\t\t}\n\t}\n\t\n\tinput.value = cellValue;\n\t\n\tonRendered(function(){\n\t\tif(cell.getType() === \"cell\"){\n\t\t\tinput.focus({preventScroll: true});\n\t\t\tinput.style.height = \"100%\";\n\t\t\t\n\t\t\tif(editorParams.selectContents){\n\t\t\t\tinput.select();\n\t\t\t}\n\t\t}\n\t});\n\t\n\tfunction onChange(){\n\t\tvar value = input.value,\n\t\tluxDateTime;\n\t\t\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && value !== \"\") || value !== cellValue){\n\n\t\t\tif(value && inputFormat){\n\t\t\t\tluxDateTime = DT.fromISO(String(value));\n\n\t\t\t\tswitch(inputFormat){\n\t\t\t\t\tcase true:\n\t\t\t\t\t\tvalue = luxDateTime;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"iso\":\n\t\t\t\t\t\tvalue = luxDateTime.toISO();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = luxDateTime.toFormat(inputFormat);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(success(value)){\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t}\n\t\t}else{\n\t\t\tcancel();\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"blur\", function(e) {\n\t\tif (e.relatedTarget || e.rangeParent || e.explicitOriginalTarget !== input) {\n\t\t\tonChange(); // only on a \"true\" blur; not when focusing browser's date/time picker\n\t\t}\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\t// case 9:\n\t\t\tcase 13:\n\t\t\t\tonChange();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 27:\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase 35:\n\t\t\tcase 36:\n\t\t\t\te.stopPropagation();\n\t\t\t\tbreak;\n\n\t\t\tcase 38: //up arrow\n\t\t\tcase 40: //down arrow\n\t\t\t\tif(vertNav == \"editor\"){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t\n\treturn input;\n}\n","import List from '../../List.js';\n\nexport default function(cell, onRendered, success, cancel, editorParams){\n\n\tthis.deprecationMsg(\"The select editor has been deprecated, please use the new list editor\");\n\n\tvar list = new List(this, cell, onRendered, success, cancel, editorParams);\n\n\treturn list.input;\n}","import List from '../../List.js';\n\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar list = new List(this, cell, onRendered, success, cancel, editorParams);\n\n\treturn list.input;\n}","import List from '../../List.js';\n\nexport default function(cell, onRendered, success, cancel, editorParams){\n\n\tthis.deprecationMsg(\"The autocomplete editor has been deprecated, please use the new list editor with the 'autocomplete' editorParam\");\n\n\teditorParams.autocomplete = true;\n\n\tvar list = new List(this, cell, onRendered, success, cancel, editorParams);\n\n\treturn list.input;\n}","//star rating\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar self = this,\n\telement = cell.getElement(),\n\tvalue = cell.getValue(),\n\tmaxStars = element.getElementsByTagName(\"svg\").length || 5,\n\tsize = element.getElementsByTagName(\"svg\")[0] ? element.getElementsByTagName(\"svg\")[0].getAttribute(\"width\") : 14,\n\tstars = [],\n\tstarsHolder = document.createElement(\"div\"),\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\n\n\n\t//change star type\n\tfunction starChange(val){\n\t\tstars.forEach(function(star, i){\n\t\t\tif(i < val){\n\t\t\t\tif(self.table.browser == \"ie\"){\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-active\");\n\t\t\t\t}else{\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-inactive\", \"tabulator-star-active\");\n\t\t\t\t}\n\n\t\t\t\tstar.innerHTML = '';\n\t\t\t}else{\n\t\t\t\tif(self.table.browser == \"ie\"){\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-inactive\");\n\t\t\t\t}else{\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-active\", \"tabulator-star-inactive\");\n\t\t\t\t}\n\n\t\t\t\tstar.innerHTML = '';\n\t\t\t}\n\t\t});\n\t}\n\n\t//build stars\n\tfunction buildStar(i){\n\n\t\tvar starHolder = document.createElement(\"span\");\n\t\tvar nextStar = star.cloneNode(true);\n\n\t\tstars.push(nextStar);\n\n\t\tstarHolder.addEventListener(\"mouseenter\", function(e){\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t\tstarChange(i);\n\t\t});\n\n\t\tstarHolder.addEventListener(\"mousemove\", function(e){\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t});\n\n\t\tstarHolder.addEventListener(\"click\", function(e){\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t\tsuccess(i);\n\t\t\telement.blur();\n\t\t});\n\n\t\tstarHolder.appendChild(nextStar);\n\t\tstarsHolder.appendChild(starHolder);\n\n\t}\n\n\t//handle keyboard navigation value change\n\tfunction changeValue(val){\n\t\tvalue = val;\n\t\tstarChange(val);\n\t}\n\n\t//style cell\n\telement.style.whiteSpace = \"nowrap\";\n\telement.style.overflow = \"hidden\";\n\telement.style.textOverflow = \"ellipsis\";\n\n\t//style holding element\n\tstarsHolder.style.verticalAlign = \"middle\";\n\tstarsHolder.style.display = \"inline-block\";\n\tstarsHolder.style.padding = \"4px\";\n\n\t//style star\n\tstar.setAttribute(\"width\", size);\n\tstar.setAttribute(\"height\", size);\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\n\tstar.setAttribute(\"xml:space\", \"preserve\");\n\tstar.style.padding = \"0 1px\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tstarsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tstarsHolder.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\t//create correct number of stars\n\tfor(var i=1;i<= maxStars;i++){\n\t\tbuildStar(i);\n\t}\n\n\t//ensure value does not exceed number of stars\n\tvalue = Math.min(parseInt(value), maxStars);\n\n\t// set initial styling of stars\n\tstarChange(value);\n\n\tstarsHolder.addEventListener(\"mousemove\", function(e){\n\t\tstarChange(0);\n\t});\n\n\tstarsHolder.addEventListener(\"click\", function(e){\n\t\tsuccess(0);\n\t});\n\n\telement.addEventListener(\"blur\", function(e){\n\t\tcancel();\n\t});\n\n\t//allow key based navigation\n\telement.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 39: //right arrow\n\t\t\t\tchangeValue(value + 1);\n\t\t\t\tbreak;\n\n\t\t\tcase 37: //left arrow\n\t\t\t\tchangeValue(value - 1);\n\t\t\t\tbreak;\n\n\t\t\tcase 13: //enter\n\t\t\t\tsuccess(value);\n\t\t\t\tbreak;\n\n\t\t\tcase 27: //escape\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\treturn starsHolder;\n}","//draggable progress bar\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar element = cell.getElement(),\n\tmax = typeof editorParams.max === \"undefined\" ? ((element.getElementsByTagName(\"div\")[0] && element.getElementsByTagName(\"div\")[0].getAttribute(\"max\")) || 100) : editorParams.max,\n\tmin = typeof editorParams.min === \"undefined\" ? ((element.getElementsByTagName(\"div\")[0] && element.getElementsByTagName(\"div\")[0].getAttribute(\"min\")) || 0) : editorParams.min,\n\tpercent = (max - min) / 100,\n\tvalue = cell.getValue() || 0,\n\thandle = document.createElement(\"div\"),\n\tbar = document.createElement(\"div\"),\n\tmouseDrag, mouseDragWidth;\n\n\t//set new value\n\tfunction updateValue(){\n\t\tvar style = window.getComputedStyle(element, null);\n\n\t\tvar calcVal = (percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue(\"padding-left\")) - parseInt(style.getPropertyValue(\"padding-right\")))/100))) + min;\n\t\tsuccess(calcVal);\n\t\telement.setAttribute(\"aria-valuenow\", calcVal);\n\t\telement.setAttribute(\"aria-label\", value);\n\t}\n\n\t//style handle\n\thandle.style.position = \"absolute\";\n\thandle.style.right = \"0\";\n\thandle.style.top = \"0\";\n\thandle.style.bottom = \"0\";\n\thandle.style.width = \"5px\";\n\thandle.classList.add(\"tabulator-progress-handle\");\n\n\t//style bar\n\tbar.style.display = \"inline-block\";\n\tbar.style.position = \"relative\";\n\t// bar.style.top = \"8px\";\n\t// bar.style.bottom = \"8px\";\n\t// bar.style.left = \"4px\";\n\t// bar.style.marginRight = \"4px\";\n\tbar.style.height = \"100%\";\n\tbar.style.backgroundColor = \"#488CE9\";\n\tbar.style.maxWidth = \"100%\";\n\tbar.style.minWidth = \"0%\";\n\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tbar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tbar.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\t//style cell\n\telement.style.padding = \"4px 4px\";\n\n\t//make sure value is in range\n\tvalue = Math.min(parseFloat(value), max);\n\tvalue = Math.max(parseFloat(value), min);\n\n\t//workout percentage\n\tvalue = Math.round((value - min) / percent);\n\t// bar.style.right = value + \"%\";\n\tbar.style.width = value + \"%\";\n\n\telement.setAttribute(\"aria-valuemin\", min);\n\telement.setAttribute(\"aria-valuemax\", max);\n\n\tbar.appendChild(handle);\n\n\thandle.addEventListener(\"mousedown\", function(e){\n\t\tmouseDrag = e.screenX;\n\t\tmouseDragWidth = bar.offsetWidth;\n\t});\n\n\thandle.addEventListener(\"mouseover\", function(){\n\t\thandle.style.cursor = \"ew-resize\";\n\t});\n\n\telement.addEventListener(\"mousemove\", function(e){\n\t\tif(mouseDrag){\n\t\t\tbar.style.width = (mouseDragWidth + e.screenX - mouseDrag) + \"px\";\n\t\t}\n\t});\n\n\telement.addEventListener(\"mouseup\", function(e){\n\t\tif(mouseDrag){\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\n\t\t\tmouseDrag = false;\n\t\t\tmouseDragWidth = false;\n\n\t\t\tupdateValue();\n\t\t}\n\t});\n\n\t//allow key based navigation\n\telement.addEventListener(\"keydown\", function(e){\n\t\tswitch(e.keyCode){\n\t\t\tcase 39: //right arrow\n\t\t\t\te.preventDefault();\n\t\t\t\tbar.style.width = (bar.clientWidth + element.clientWidth/100) + \"px\";\n\t\t\t\tbreak;\n\n\t\t\tcase 37: //left arrow\n\t\t\t\te.preventDefault();\n\t\t\t\tbar.style.width = (bar.clientWidth - element.clientWidth/100) + \"px\";\n\t\t\t\tbreak;\n\n\t\t\tcase 9: //tab\n\t\t\tcase 13: //enter\n\t\t\t\tupdateValue();\n\t\t\t\tbreak;\n\n\t\t\tcase 27: //escape\n\t\t\t\tcancel();\n\t\t\t\tbreak;\n\n\t\t}\n\t});\n\n\telement.addEventListener(\"blur\", function(){\n\t\tcancel();\n\t});\n\n\treturn bar;\n}","//checkbox\nexport default function(cell, onRendered, success, cancel, editorParams){\n\tvar value = cell.getValue(),\n\tinput = document.createElement(\"input\"),\n\ttristate = editorParams.tristate,\n\tindetermValue = typeof editorParams.indeterminateValue === \"undefined\" ? null : editorParams.indeterminateValue,\n\tindetermState = false,\n\ttrueValueSet = Object.keys(editorParams).includes(\"trueValue\"),\n\tfalseValueSet = Object.keys(editorParams).includes(\"falseValue\");\n\t\n\tinput.setAttribute(\"type\", \"checkbox\");\n\tinput.style.marginTop = \"5px\";\n\tinput.style.boxSizing = \"border-box\";\n\t\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\n\t\tfor (let key in editorParams.elementAttributes){\n\t\t\tif(key.charAt(0) == \"+\"){\n\t\t\t\tkey = key.slice(1);\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t}else{\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tinput.value = value;\n\t\n\tif(tristate && (typeof value === \"undefined\" || value === indetermValue || value === \"\")){\n\t\tindetermState = true;\n\t\tinput.indeterminate = true;\n\t}\n\t\n\tif(this.table.browser != \"firefox\" && this.table.browser != \"safari\"){ //prevent blur issue on mac firefox\n\t\tonRendered(function(){\n\t\t\tif(cell.getType() === \"cell\"){\n\t\t\t\tinput.focus({preventScroll: true});\n\t\t\t}\n\t\t});\n\t}\n\t\n\tinput.checked = trueValueSet ? value === editorParams.trueValue : (value === true || value === \"true\" || value === \"True\" || value === 1);\n\t\n\tfunction setValue(blur){\n\t\tvar checkedValue = input.checked;\n\t\t\n\t\tif(trueValueSet && checkedValue){\n\t\t\tcheckedValue = editorParams.trueValue;\n\t\t}else if(falseValueSet && !checkedValue){\n\t\t\tcheckedValue = editorParams.falseValue;\n\t\t}\n\t\t\n\t\tif(tristate){\n\t\t\tif(!blur){\n\t\t\t\tif(input.checked && !indetermState){\n\t\t\t\t\tinput.checked = false;\n\t\t\t\t\tinput.indeterminate = true;\n\t\t\t\t\tindetermState = true;\n\t\t\t\t\treturn indetermValue;\n\t\t\t\t}else{\n\t\t\t\t\tindetermState = false;\n\t\t\t\t\treturn checkedValue;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(indetermState){\n\t\t\t\t\treturn indetermValue;\n\t\t\t\t}else{\n\t\t\t\t\treturn checkedValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\treturn checkedValue;\n\t\t}\n\t}\n\t\n\t//submit new value on blur\n\tinput.addEventListener(\"change\", function(e){\n\t\tsuccess(setValue());\n\t});\n\n\tinput.addEventListener(\"blur\", function(e){\n\t\tsuccess(setValue(true));\n\t});\n\t\n\t//submit new value on enter\n\tinput.addEventListener(\"keydown\", function(e){\n\t\tif(e.keyCode == 13){\n\t\t\tsuccess(setValue());\n\t\t}\n\t\tif(e.keyCode == 27){\n\t\t\tcancel();\n\t\t}\n\t});\n\t\n\treturn input;\n}","import Module from '../../core/Module.js';\nimport Helpers from '../../core/tools/Helpers.js';\n\nimport defaultEditors from './defaults/editors.js';\n\nclass Edit extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.currentCell = false; //hold currently editing cell\n\t\tthis.mouseClick = false; //hold mousedown state to prevent click binding being overridden by editor opening\n\t\tthis.recursionBlock = false; //prevent focus recursion\n\t\tthis.invalidEdit = false;\n\t\tthis.editedCells = [];\n\t\t\n\t\tthis.editors = Edit.editors;\n\t\t\n\t\tthis.registerColumnOption(\"editable\");\n\t\tthis.registerColumnOption(\"editor\");\n\t\tthis.registerColumnOption(\"editorParams\");\n\t\t\n\t\tthis.registerColumnOption(\"cellEditing\");\n\t\tthis.registerColumnOption(\"cellEdited\");\n\t\tthis.registerColumnOption(\"cellEditCancelled\");\n\t\t\n\t\tthis.registerTableOption(\"editTriggerEvent\", \"focus\");\n\t\t\n\t\tthis.registerTableFunction(\"getEditedCells\", this.getEditedCells.bind(this));\n\t\tthis.registerTableFunction(\"clearCellEdited\", this.clearCellEdited.bind(this));\n\t\tthis.registerTableFunction(\"navigatePrev\", this.navigatePrev.bind(this));\n\t\tthis.registerTableFunction(\"navigateNext\", this.navigateNext.bind(this));\n\t\tthis.registerTableFunction(\"navigateLeft\", this.navigateLeft.bind(this));\n\t\tthis.registerTableFunction(\"navigateRight\", this.navigateRight.bind(this));\n\t\tthis.registerTableFunction(\"navigateUp\", this.navigateUp.bind(this));\n\t\tthis.registerTableFunction(\"navigateDown\", this.navigateDown.bind(this));\n\t\t\n\t\tthis.registerComponentFunction(\"cell\", \"isEdited\", this.cellIsEdited.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"clearEdited\", this.clearEdited.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"edit\", this.editCell.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"cancelEdit\", this.cellCancelEdit.bind(this));\n\t\t\n\t\tthis.registerComponentFunction(\"cell\", \"navigatePrev\", this.navigatePrev.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateNext\", this.navigateNext.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateLeft\", this.navigateLeft.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateRight\", this.navigateRight.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateUp\", this.navigateUp.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"navigateDown\", this.navigateDown.bind(this));\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"cell-init\", this.bindEditor.bind(this));\n\t\tthis.subscribe(\"cell-delete\", this.clearEdited.bind(this));\n\t\tthis.subscribe(\"cell-value-changed\", this.updateCellClass.bind(this));\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\n\t\tthis.subscribe(\"column-delete\", this.columnDeleteCheck.bind(this));\n\t\tthis.subscribe(\"row-deleting\", this.rowDeleteCheck.bind(this));\n\t\tthis.subscribe(\"row-layout\", this.rowEditableCheck.bind(this));\n\t\tthis.subscribe(\"data-refreshing\", this.cancelEdit.bind(this));\n\t\tthis.subscribe(\"clipboard-paste\", this.pasteBlocker.bind(this));\n\t\t\n\t\tthis.subscribe(\"keybinding-nav-prev\", this.navigatePrev.bind(this, undefined));\n\t\tthis.subscribe(\"keybinding-nav-next\", this.keybindingNavigateNext.bind(this));\n\t\t\n\t\t\n\t\t// this.subscribe(\"keybinding-nav-left\", this.navigateLeft.bind(this, undefined));\n\t\t// this.subscribe(\"keybinding-nav-right\", this.navigateRight.bind(this, undefined));\n\t\tthis.subscribe(\"keybinding-nav-up\", this.navigateUp.bind(this, undefined));\n\t\tthis.subscribe(\"keybinding-nav-down\", this.navigateDown.bind(this, undefined));\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Paste Negation //////////\n\t///////////////////////////////////\n\t\n\tpasteBlocker(e){\n\t\tif(this.currentCell){\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t////// Keybinding Functions ///////\n\t///////////////////////////////////\n\t\n\tkeybindingNavigateNext(e){\n\t\tvar cell = this.currentCell,\n\t\tnewRow = this.options(\"tabEndNewRow\");\n\n\t\tif(cell){\n\t\t\tif(!this.navigateNext(cell, e)){\n\t\t\t\tif(newRow){\n\t\t\t\t\tcell.getElement().firstChild.blur();\n\t\t\t\t\t\n\t\t\t\t\tif(!this.invalidEdit){\n\t\t\t\t\t\t\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\t\t\t\t\t\t\n\t\t\t\t\t\tnewRow.then(() => {\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tcell.getComponent().navigateNext();\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\t\n\t///////////////////////////////////\n\t///////// Cell Functions //////////\n\t///////////////////////////////////\n\t\n\tcellIsEdited(cell){\n\t\treturn !! cell.modules.edit && cell.modules.edit.edited;\n\t}\n\t\n\tcellCancelEdit(cell){\n\t\tif(cell === this.currentCell){\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\t\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\tupdateCellClass(cell){\n\t\tif(this.allowEdit(cell)) {\n\t\t\tcell.getElement().classList.add(\"tabulator-editable\");\n\t\t}\n\t\telse {\n\t\t\tcell.getElement().classList.remove(\"tabulator-editable\");\n\t\t}\n\t}\n\t\n\tclearCellEdited(cells){\n\t\tif(!cells){\n\t\t\tcells = this.table.modules.edit.getEditedCells();\n\t\t}\n\t\t\n\t\tif(!Array.isArray(cells)){\n\t\t\tcells = [cells];\n\t\t}\n\t\t\n\t\tcells.forEach((cell) => {\n\t\t\tthis.table.modules.edit.clearEdited(cell._getSelf());\n\t\t});\n\t}\n\t\n\tnavigatePrev(cell = this.currentCell, e){\n\t\tvar nextCell, prevRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tnextCell = this.navigateLeft();\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\treturn true;\n\t\t\t}else{\n\t\t\t\tprevRow = this.table.rowManager.prevDisplayRow(cell.row, true);\n\t\t\t\t\n\t\t\t\tif(prevRow){\n\t\t\t\t\tnextCell = this.findPrevEditableCell(prevRow, prevRow.cells.length);\n\t\t\t\t\t\n\t\t\t\t\tif(nextCell){\n\t\t\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateNext(cell = this.currentCell, e){\n\t\tvar nextCell, nextRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tnextCell = this.navigateRight();\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\treturn true;\n\t\t\t}else{\n\t\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\n\t\t\t\t\n\t\t\t\tif(nextRow){\n\t\t\t\t\tnextCell = this.findNextEditableCell(nextRow, -1);\n\t\t\t\t\t\n\t\t\t\t\tif(nextCell){\n\t\t\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateLeft(cell = this.currentCell, e){\n\t\tvar index, nextCell;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextCell = this.findPrevEditableCell(cell.row, index);\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateRight(cell = this.currentCell, e){\n\t\tvar index, nextCell;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextCell = this.findNextEditableCell(cell.row, index);\n\t\t\t\n\t\t\tif(nextCell){\n\t\t\t\tnextCell.getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateUp(cell = this.currentCell, e){\n\t\tvar index, nextRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextRow = this.table.rowManager.prevDisplayRow(cell.row, true);\n\t\t\t\n\t\t\tif(nextRow){\n\t\t\t\tnextRow.cells[index].getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tnavigateDown(cell = this.currentCell, e){\n\t\tvar index, nextRow;\n\t\t\n\t\tif(cell){\n\t\t\t\n\t\t\tif(e){\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t\n\t\t\tindex = cell.getIndex();\n\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\n\t\t\t\n\t\t\tif(nextRow){\n\t\t\t\tnextRow.cells[index].getComponent().edit();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n\tfindNextEditableCell(row, index){\n\t\tvar nextCell = false;\n\t\t\n\t\tif(index < row.cells.length-1){\n\t\t\tfor(var i = index+1; i < row.cells.length; i++){\n\t\t\t\tlet cell = row.cells[i];\n\t\t\t\t\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\n\t\t\t\t\tlet allowEdit = this.allowEdit(cell);\n\t\t\t\t\t\n\t\t\t\t\tif(allowEdit){\n\t\t\t\t\t\tnextCell = cell;\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\t\n\t\treturn nextCell;\n\t}\n\t\n\tfindPrevEditableCell(row, index){\n\t\tvar prevCell = false;\n\t\t\n\t\tif(index > 0){\n\t\t\tfor(var i = index-1; i >= 0; i--){\n\t\t\t\tlet cell = row.cells[i];\n\t\t\t\t\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\n\t\t\t\t\tlet allowEdit = this.allowEdit(cell);\n\t\t\t\t\t\n\t\t\t\t\tif(allowEdit){\n\t\t\t\t\t\tprevCell = cell;\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\t\n\t\treturn prevCell;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tinitializeColumnCheck(column){\n\t\tif(typeof column.definition.editor !== \"undefined\"){\n\t\t\tthis.initializeColumn(column);\n\t\t}\n\t}\n\t\n\tcolumnDeleteCheck(column){\n\t\tif(this.currentCell && this.currentCell.column === column){\n\t\t\tthis.cancelEdit();\n\t\t}\n\t}\n\t\n\trowDeleteCheck(row){\n\t\tif(this.currentCell && this.currentCell.row === row){\n\t\t\tthis.cancelEdit();\n\t\t}\n\t}\n\t\n\trowEditableCheck(row){\n\t\trow.getCells().forEach((cell) => {\n\t\t\tif(cell.column.modules.edit && typeof cell.column.modules.edit.check === \"function\"){\n\t\t\t\tthis.updateCellClass(cell);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//initialize column editor\n\tinitializeColumn(column){\n\t\tvar config = {\n\t\t\teditor:false,\n\t\t\tblocked:false,\n\t\t\tcheck:column.definition.editable,\n\t\t\tparams:column.definition.editorParams || {}\n\t\t};\n\t\t\n\t\t//set column editor\n\t\tswitch(typeof column.definition.editor){\n\t\t\tcase \"string\":\n\t\t\t\tif(this.editors[column.definition.editor]){\n\t\t\t\t\tconfig.editor = this.editors[column.definition.editor];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Editor Error - No such editor found: \", column.definition.editor);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t\tconfig.editor = column.definition.editor;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"boolean\":\n\t\t\t\tif(column.definition.editor === true){\n\t\t\t\t\tif(typeof column.definition.formatter !== \"function\"){\n\t\t\t\t\t\tif(this.editors[column.definition.formatter]){\n\t\t\t\t\t\t\tconfig.editor = this.editors[column.definition.formatter];\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tconfig.editor = this.editors[\"input\"];\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Editor Error - Cannot auto lookup editor for a custom formatter: \", column.definition.formatter);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\tif(config.editor){\n\t\t\tcolumn.modules.edit = config;\n\t\t}\n\t}\n\t\n\tgetCurrentCell(){\n\t\treturn this.currentCell ? this.currentCell.getComponent() : false;\n\t}\n\t\n\tclearEditor(cancel){\n\t\tvar cell = this.currentCell,\n\t\tcellEl;\n\t\t\n\t\tthis.invalidEdit = false;\n\t\t\n\t\tif(cell){\n\t\t\tthis.currentCell = false;\n\t\t\t\n\t\t\tcellEl = cell.getElement();\n\t\t\t\n\t\t\tthis.dispatch(\"edit-editor-clear\", cell, cancel);\n\t\t\t\n\t\t\tcellEl.classList.remove(\"tabulator-editing\");\n\t\t\t\n\t\t\twhile(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild);\n\t\t\t\n\t\t\tcell.row.getElement().classList.remove(\"tabulator-editing\");\n\t\t\t\n\t\t\tcell.table.element.classList.remove(\"tabulator-editing\");\n\t\t}\n\t}\n\t\n\tcancelEdit(){\n\t\tif(this.currentCell){\n\t\t\tvar cell = this.currentCell;\n\t\t\tvar component = this.currentCell.getComponent();\n\t\t\t\n\t\t\tthis.clearEditor(true);\n\t\t\tcell.setValueActual(cell.getValue());\n\t\t\tcell.cellRendered();\n\t\t\t\n\t\t\tif(cell.column.definition.editor == \"textarea\" || cell.column.definition.variableHeight){\n\t\t\t\tcell.row.normalizeHeight(true);\n\t\t\t}\n\t\t\t\n\t\t\tif(cell.column.definition.cellEditCancelled){\n\t\t\t\tcell.column.definition.cellEditCancelled.call(this.table, component);\n\t\t\t}\n\t\t\t\n\t\t\tthis.dispatch(\"edit-cancelled\", cell);\n\t\t\tthis.dispatchExternal(\"cellEditCancelled\", component);\n\t\t}\n\t}\n\t\n\t//return a formatted value for a cell\n\tbindEditor(cell){\n\t\tif(cell.column.modules.edit){\n\t\t\tvar self = this,\n\t\t\telement = cell.getElement(true);\n\t\t\t\n\t\t\tthis.updateCellClass(cell);\n\t\t\telement.setAttribute(\"tabindex\", 0);\n\t\t\t\n\t\t\telement.addEventListener(\"mousedown\", function(e){\n\t\t\t\tif (e.button === 2) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}else{\n\t\t\t\t\tself.mouseClick = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(this.options(\"editTriggerEvent\") === \"dblclick\"){\n\t\t\t\telement.addEventListener(\"dblclick\", function(e){\n\t\t\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\n\t\t\t\t\t\telement.focus({preventScroll: true});\n\t\t\t\t\t\tself.edit(cell, e, false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\tif(this.options(\"editTriggerEvent\") === \"focus\" || this.options(\"editTriggerEvent\") === \"click\"){\n\t\t\t\telement.addEventListener(\"click\", function(e){\n\t\t\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\n\t\t\t\t\t\telement.focus({preventScroll: true});\n\t\t\t\t\t\tself.edit(cell, e, false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tif(this.options(\"editTriggerEvent\") === \"focus\"){\n\t\t\t\telement.addEventListener(\"focus\", function(e){\n\t\t\t\t\tif(!self.recursionBlock){\n\t\t\t\t\t\tself.edit(cell, e, false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfocusCellNoEvent(cell, block){\n\t\tthis.recursionBlock = true;\n\t\t\n\t\tif(!(block && this.table.browser === \"ie\")){\n\t\t\tcell.getElement().focus({preventScroll: true});\n\t\t}\n\t\t\n\t\tthis.recursionBlock = false;\n\t}\n\t\n\teditCell(cell, forceEdit){\n\t\tthis.focusCellNoEvent(cell);\n\t\tthis.edit(cell, false, forceEdit);\n\t}\n\t\n\tfocusScrollAdjust(cell){\n\t\tif(this.table.rowManager.getRenderMode() == \"virtual\"){\n\t\t\tvar topEdge = this.table.rowManager.element.scrollTop,\n\t\t\tbottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,\n\t\t\trowEl = cell.row.getElement();\n\t\t\t\n\t\t\tif(rowEl.offsetTop < topEdge){\n\t\t\t\tthis.table.rowManager.element.scrollTop -= (topEdge - rowEl.offsetTop);\n\t\t\t}else{\n\t\t\t\tif(rowEl.offsetTop + rowEl.offsetHeight > bottomEdge){\n\t\t\t\t\tthis.table.rowManager.element.scrollTop += (rowEl.offsetTop + rowEl.offsetHeight - bottomEdge);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tvar leftEdge = this.table.rowManager.element.scrollLeft,\n\t\t\trightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,\n\t\t\tcellEl = cell.getElement();\n\t\t\t\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\n\t\t\t\tleftEdge += parseInt(this.table.modules.frozenColumns.leftMargin || 0);\n\t\t\t\trightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin || 0);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.renderHorizontal === \"virtual\"){\n\t\t\t\tleftEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\n\t\t\t\trightEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\n\t\t\t}\n\t\t\t\n\t\t\tif(cellEl.offsetLeft < leftEdge){\n\t\t\t\tthis.table.rowManager.element.scrollLeft -= (leftEdge - cellEl.offsetLeft);\n\t\t\t}else{\n\t\t\t\tif(cellEl.offsetLeft + cellEl.offsetWidth > rightEdge){\n\t\t\t\t\tthis.table.rowManager.element.scrollLeft += (cellEl.offsetLeft + cellEl.offsetWidth - rightEdge);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tallowEdit(cell) {\n\t\tvar check = cell.column.modules.edit ? true : false;\n\t\t\n\t\tif(cell.column.modules.edit){\n\t\t\tswitch(typeof cell.column.modules.edit.check){\n\t\t\t\tcase \"function\":\n\t\t\t\t\tif(cell.row.initialized){\n\t\t\t\t\t\tcheck = cell.column.modules.edit.check(cell.getComponent());\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"string\":\n\t\t\t\t\tcheck = !!cell.row.data[cell.column.modules.edit.check];\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tcheck = cell.column.modules.edit.check;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn check;\n\t}\n\t\n\tedit(cell, e, forceEdit){\n\t\tvar self = this,\n\t\tallowEdit = true,\n\t\trendered = function(){},\n\t\telement = cell.getElement(),\n\t\teditFinished = false,\n\t\tcellEditor, component, params;\n\n\t\t//prevent editing if another cell is refusing to leave focus (eg. validation fail)\n\t\t\n\t\tif(this.currentCell){\n\t\t\tif(!this.invalidEdit && this.currentCell !== cell){\n\t\t\t\tthis.cancelEdit();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\t\n\t\t//handle successful value change\n\t\tfunction success(value){\n\t\t\tif(self.currentCell === cell && !editFinished){\n\t\t\t\tvar valid = self.chain(\"edit-success\", [cell, value], true, true);\n\n\t\t\t\tif(valid === true || self.table.options.validationMode === \"highlight\"){\n\n\t\t\t\t\teditFinished = true;\n\n\t\t\t\t\tself.clearEditor();\n\t\t\t\t\t\n\t\t\t\t\tif(!cell.modules.edit){\n\t\t\t\t\t\tcell.modules.edit = {};\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tcell.modules.edit.edited = true;\n\t\t\t\t\t\n\t\t\t\t\tif(self.editedCells.indexOf(cell) == -1){\n\t\t\t\t\t\tself.editedCells.push(cell);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tcell.setValue(value, true);\n\n\t\t\t\t\treturn valid === true;\n\t\t\t\t}else{\n\t\t\t\t\teditFinished = true;\n\t\t\t\t\tself.invalidEdit = true;\n\t\t\t\t\tself.focusCellNoEvent(cell, true);\n\t\t\t\t\trendered();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\teditFinished = false;\n\t\t\t\t\t}, 10);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call success on a cell that is no longer being edited\");\n\t\t\t}\n\t\t}\n\t\t\n\t\t//handle aborted edit\n\t\tfunction cancel(){\n\t\t\t// editFinished = true;\n\n\t\t\tif(self.currentCell === cell && !editFinished){\n\t\t\t\tself.cancelEdit();\n\t\t\t}else{\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call cancel on a cell that is no longer being edited\");\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction onRendered(callback){\n\t\t\trendered = callback;\n\t\t}\n\t\t\n\t\tif(!cell.column.modules.edit.blocked){\n\t\t\tif(e){\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t\t\n\t\t\tallowEdit = this.allowEdit(cell);\n\t\t\t\n\t\t\tif(allowEdit || forceEdit){\n\t\t\t\tself.cancelEdit();\n\t\t\t\t\n\t\t\t\tself.currentCell = cell;\n\t\t\t\t\n\t\t\t\tthis.focusScrollAdjust(cell);\n\t\t\t\t\n\t\t\t\tcomponent = cell.getComponent();\n\t\t\t\t\n\t\t\t\tif(this.mouseClick){\n\t\t\t\t\tthis.mouseClick = false;\n\t\t\t\t\t\n\t\t\t\t\tif(cell.column.definition.cellClick){\n\t\t\t\t\t\tcell.column.definition.cellClick.call(this.table, e, component);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(cell.column.definition.cellEditing){\n\t\t\t\t\tcell.column.definition.cellEditing.call(this.table, component);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatch(\"cell-editing\", cell);\n\t\t\t\tthis.dispatchExternal(\"cellEditing\", component);\n\t\t\t\t\n\t\t\t\tparams = typeof cell.column.modules.edit.params === \"function\" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;\n\t\t\t\t\n\t\t\t\tcellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);\n\t\t\t\t\n\t\t\t\t//if editor returned, add to DOM, if false, abort edit\n\t\t\t\tif(this.currentCell && cellEditor !== false){\n\t\t\t\t\tif(cellEditor instanceof Node){\n\t\t\t\t\t\telement.classList.add(\"tabulator-editing\");\n\t\t\t\t\t\tcell.row.getElement().classList.add(\"tabulator-editing\");\n\t\t\t\t\t\tcell.table.element.classList.add(\"tabulator-editing\");\n\t\t\t\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\n\t\t\t\t\t\telement.appendChild(cellEditor);\n\t\t\t\t\t\t\n\t\t\t\t\t\t//trigger onRendered Callback\n\t\t\t\t\t\trendered();\n\t\t\t\t\t\t\n\t\t\t\t\t\t//prevent editing from triggering rowClick event\n\t\t\t\t\t\tvar children = element.children;\n\t\t\t\t\t\t\n\t\t\t\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\t\t\t\tchildren[i].addEventListener(\"click\", function(e){\n\t\t\t\t\t\t\t\te.stopPropagation();\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\tconsole.warn(\"Edit Error - Editor should return an instance of Node, the editor returned:\", cellEditor);\n\t\t\t\t\t\tthis.blur(element);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tthis.blur(element);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn true;\n\t\t\t}else{\n\t\t\t\tthis.mouseClick = false;\n\t\t\t\tthis.blur(element);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}else{\n\t\t\tthis.mouseClick = false;\n\t\t\tthis.blur(element);\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tblur(element){\n\t\tif(!this.confirm(\"edit-blur\", [element]) ){\n\t\t\telement.blur();\n\t\t}\n\t}\n\t\n\tgetEditedCells(){\n\t\tvar output = [];\n\t\t\n\t\tthis.editedCells.forEach((cell) => {\n\t\t\toutput.push(cell.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tclearEdited(cell){\n\t\tvar editIndex;\n\t\t\n\t\tif(cell.modules.edit && cell.modules.edit.edited){\n\t\t\tcell.modules.edit.edited = false;\n\t\t\t\n\t\t\tthis.dispatch(\"edit-edited-clear\", cell);\n\t\t}\n\t\t\n\t\teditIndex = this.editedCells.indexOf(cell);\n\t\t\n\t\tif(editIndex > -1){\n\t\t\tthis.editedCells.splice(editIndex, 1);\n\t\t}\n\t}\n}\n\nEdit.moduleName = \"edit\";\n\n//load defaults\nEdit.editors = defaultEditors;\n\n\nexport default Edit;\n","class ExportRow{\n\tconstructor(type, columns, component, indent){\n\t\tthis.type = type;\n\t\tthis.columns = columns;\n\t\tthis.component = component || false;\n\t\tthis.indent = indent || 0;\n\t}\n}\n\nexport default ExportRow;","class ExportColumn{\n\tconstructor(value, component, width, height, depth){\n\t\tthis.value = value;\n\t\tthis.component = component || false;\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.depth = depth;\n\t}\n}\n\nexport default ExportColumn;","import Module from '../../core/Module.js';\n\nimport ExportRow from './ExportRow.js';\nimport ExportColumn from './ExportColumn.js';\n\nclass Export extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.config = {};\n\t\tthis.cloneTableStyle = true;\n\t\tthis.colVisProp = \"\";\n\t\t\n\t\tthis.registerTableOption(\"htmlOutputConfig\", false); //html output config\n\t\t\n\t\tthis.registerColumnOption(\"htmlOutput\");\n\t\tthis.registerColumnOption(\"titleHtmlOutput\");\n\t}\n\t\n\tinitialize(){\n\t\tthis.registerTableFunction(\"getHtml\", this.getHtml.bind(this));\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tgenerateExportList(config, style, range, colVisProp){\n\t\tthis.cloneTableStyle = style;\n\t\tthis.config = config || {};\n\t\tthis.colVisProp = colVisProp;\n\n\t\tvar headers, body;\n\t\t\n\t\tif (range === 'range') {\n\t\t\tvar columns = this.table.modules.selectRange.selectedColumns();\n\t\t\theaders = this.config.columnHeaders !== false\n\t\t\t\t? this.headersToExportRows(this.generateColumnGroupHeaders(columns))\n\t\t\t\t: [];\n\t\t\tbody = this.bodyToExportRows(this.rowLookup(range), this.table.modules.selectRange.selectedColumns(true));\n\t\t} else {\n\t\t\theaders = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];\n\t\t\tbody = this.bodyToExportRows(this.rowLookup(range));\n\t\t}\n\n\t\treturn headers.concat(body);\n\t}\n\t\n\tgenerateTable(config, style, range, colVisProp){\n\t\tvar list = this.generateExportList(config, style, range, colVisProp);\n\t\t\n\t\treturn this.generateTableElement(list);\n\t}\n\t\n\trowLookup(range){\n\t\tvar rows = [];\n\t\t\n\t\tif(typeof range == \"function\"){\n\t\t\trange.call(this.table).forEach((row) =>{\n\t\t\t\trow = this.table.rowManager.findRow(row);\n\t\t\t\t\n\t\t\t\tif(row){\n\t\t\t\t\trows.push(row);\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tswitch(range){\n\t\t\t\tcase true:\n\t\t\t\tcase \"visible\":\n\t\t\t\t\trows = this.table.rowManager.getVisibleRows(false, true);\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"all\":\n\t\t\t\t\trows = this.table.rowManager.rows;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"selected\":\n\t\t\t\t\trows = this.table.modules.selectRow.selectedRows;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"range\":\n\t\t\t\t\trows = this.table.modules.selectRange.selectedRows();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"active\":\n\t\t\t\tdefault:\n\t\t\t\t\tif(this.table.options.pagination){\n\t\t\t\t\t\trows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);\n\t\t\t\t\t}else{\n\t\t\t\t\t\trows = this.table.rowManager.getDisplayRows();\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn Object.assign([], rows);\n\t}\n\t\n\tgenerateColumnGroupHeaders(columns){\n\t\tvar output = [];\n\t\t\n\t\tif (!columns) {\n\t\t\tcolumns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;\n\t\t}\n\t\t\n\t\tcolumns.forEach((column) => {\n\t\t\tvar colData = this.processColumnGroup(column);\n\t\t\t\n\t\t\tif(colData){\n\t\t\t\toutput.push(colData);\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\t\n\tprocessColumnGroup(column){\n\t\tvar subGroups = column.columns,\n\t\tmaxDepth = 0,\n\t\ttitle = column.definition[\"title\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;\n\t\t\n\t\tvar groupData = {\n\t\t\ttitle:title,\n\t\t\tcolumn:column,\n\t\t\tdepth:1,\n\t\t};\n\t\t\n\t\tif(subGroups.length){\n\t\t\tgroupData.subGroups = [];\n\t\t\tgroupData.width = 0;\n\t\t\t\n\t\t\tsubGroups.forEach((subGroup) => {\n\t\t\t\tvar subGroupData = this.processColumnGroup(subGroup);\n\t\t\t\t\n\t\t\t\tif(subGroupData){\n\t\t\t\t\tgroupData.width += subGroupData.width;\n\t\t\t\t\tgroupData.subGroups.push(subGroupData);\n\t\t\t\t\t\n\t\t\t\t\tif(subGroupData.depth > maxDepth){\n\t\t\t\t\t\tmaxDepth = subGroupData.depth;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tgroupData.depth += maxDepth;\n\t\t\t\n\t\t\tif(!groupData.width){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}else{\n\t\t\tif(this.columnVisCheck(column)){\n\t\t\t\tgroupData.width = 1;\n\t\t\t}else{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn groupData;\n\t}\n\t\n\tcolumnVisCheck(column){\n\t\tvar visProp = column.definition[this.colVisProp];\n\t\t\n\t\tif(typeof visProp === \"function\"){\n\t\t\tvisProp = visProp.call(this.table, column.getComponent());\n\t\t}\n\t\t\n\t\treturn visProp !== false && (column.visible || (!column.visible && visProp));\n\t}\n\t\n\theadersToExportRows(columns){\n\t\tvar headers = [],\n\t\theaderDepth = 0,\n\t\texportRows = [];\n\t\t\n\t\tfunction parseColumnGroup(column, level){\n\t\t\t\n\t\t\tvar depth = headerDepth - level;\n\t\t\t\n\t\t\tif(typeof headers[level] === \"undefined\"){\n\t\t\t\theaders[level] = [];\n\t\t\t}\n\t\t\t\n\t\t\tcolumn.height = column.subGroups ? 1 : (depth - column.depth) + 1;\n\t\t\t\n\t\t\theaders[level].push(column);\n\t\t\t\n\t\t\tif(column.height > 1){\n\t\t\t\tfor(let i = 1; i < column.height; i ++){\n\t\t\t\t\t\n\t\t\t\t\tif(typeof headers[level + i] === \"undefined\"){\n\t\t\t\t\t\theaders[level + i] = [];\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\theaders[level + i].push(false);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(column.width > 1){\n\t\t\t\tfor(let i = 1; i < column.width; i ++){\n\t\t\t\t\theaders[level].push(false);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif(column.subGroups){\n\t\t\t\tcolumn.subGroups.forEach(function(subGroup){\n\t\t\t\t\tparseColumnGroup(subGroup, level+1);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\t//calculate maximum header depth\n\t\tcolumns.forEach(function(column){\n\t\t\tif(column.depth > headerDepth){\n\t\t\t\theaderDepth = column.depth;\n\t\t\t}\n\t\t});\n\t\t\n\t\tcolumns.forEach(function(column){\n\t\t\tparseColumnGroup(column,0);\n\t\t});\n\t\t\n\t\theaders.forEach((header) => {\n\t\t\tvar columns = [];\n\t\t\t\n\t\t\theader.forEach((col) => {\n\t\t\t\tif(col){\n\t\t\t\t\tlet title = typeof col.title === \"undefined\" ? \"\" : col.title;\n\t\t\t\t\tcolumns.push(new ExportColumn(title, col.column.getComponent(), col.width, col.height, col.depth));\n\t\t\t\t}else{\n\t\t\t\t\tcolumns.push(null);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\texportRows.push(new ExportRow(\"header\", columns));\n\t\t});\n\t\t\n\t\treturn exportRows;\n\t}\n\t\n\tbodyToExportRows(rows, columns = []){\n\t\tvar exportRows = [];\n\t\t\n\t\tif (columns.length === 0) {\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\t\tif (this.columnVisCheck(column)) {\n\t\t\t\t\tcolumns.push(column.getComponent());\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\tif(this.config.columnCalcs !== false && this.table.modExists(\"columnCalcs\")){\n\t\t\tif(this.table.modules.columnCalcs.topInitialized){\n\t\t\t\trows.unshift(this.table.modules.columnCalcs.topRow);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.modules.columnCalcs.botInitialized){\n\t\t\t\trows.push(this.table.modules.columnCalcs.botRow);\n\t\t\t}\n\t\t}\n\n\t\trows = rows.filter((row) => {\n\t\t\tswitch(row.type){\n\t\t\t\tcase \"group\":\n\t\t\t\t\treturn this.config.rowGroups !== false;\n\t\t\t\t\n\t\t\t\tcase \"calc\":\n\t\t\t\t\treturn this.config.columnCalcs !== false;\n\t\t\t\t\n\t\t\t\tcase \"row\":\n\t\t\t\t\treturn !(this.table.options.dataTree && this.config.dataTree === false && row.modules.dataTree.parent);\n\t\t\t}\n\t\t\t\n\t\t\treturn true;\n\t\t});\n\t\t\n\t\trows.forEach((row, i) => {\n\t\t\tvar rowData = row.getData(this.colVisProp);\n\t\t\tvar exportCols = [];\n\t\t\tvar indent = 0;\n\t\t\t\n\t\t\tswitch(row.type){\n\t\t\t\tcase \"group\":\n\t\t\t\t\tindent = row.level;\n\t\t\t\t\texportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"calc\" :\n\t\t\t\tcase \"row\" :\n\t\t\t\t\tcolumns.forEach((col) => {\n\t\t\t\t\t\texportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));\n\t\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\n\t\t\t\t\t\tindent = row.modules.dataTree.index;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\texportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));\n\t\t});\n\t\t\n\t\treturn exportRows;\n\t}\n\t\n\tgenerateTableElement(list){\n\t\tvar table = document.createElement(\"table\"),\n\t\theaderEl = document.createElement(\"thead\"),\n\t\tbodyEl = document.createElement(\"tbody\"),\n\t\tstyles = this.lookupTableStyles(),\n\t\trowFormatter = this.table.options[\"rowFormatter\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],\n\t\tsetup = {};\n\t\t\n\t\tsetup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;\n\t\t\n\t\tif(this.table.options.dataTree &&this.config.dataTree !== false && this.table.modExists(\"columnCalcs\")){\n\t\t\tsetup.treeElementField = this.table.modules.dataTree.elementField;\n\t\t}\n\t\t\n\t\t//assign group header formatter\n\t\tsetup.groupHeader = this.table.options[\"groupHeader\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];\n\t\t\n\t\tif(setup.groupHeader && !Array.isArray(setup.groupHeader)){\n\t\t\tsetup.groupHeader = [setup.groupHeader];\n\t\t}\n\t\t\n\t\ttable.classList.add(\"tabulator-print-table\");\n\t\t\n\t\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\t\t\n\t\t\n\t\tif(list.length > 1000){\n\t\t\tconsole.warn(\"It may take a long time to render an HTML table with more than 1000 rows\");\n\t\t}\n\t\t\n\t\tlist.forEach((row, i) => {\n\t\t\tlet rowEl;\n\t\t\t\n\t\t\tswitch(row.type){\n\t\t\t\tcase \"header\":\n\t\t\t\t\theaderEl.appendChild(this.generateHeaderElement(row, setup, styles));\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"group\":\n\t\t\t\t\tbodyEl.appendChild(this.generateGroupElement(row, setup, styles));\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"calc\":\n\t\t\t\t\tbodyEl.appendChild(this.generateCalcElement(row, setup, styles));\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"row\":\n\t\t\t\t\trowEl = this.generateRowElement(row, setup, styles);\n\t\t\t\t\n\t\t\t\t\tthis.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\t\tbodyEl.appendChild(rowEl);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(headerEl.innerHTML){\n\t\t\ttable.appendChild(headerEl);\n\t\t}\n\t\t\n\t\ttable.appendChild(bodyEl);\n\t\t\n\t\t\n\t\tthis.mapElementStyles(this.table.element, table, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\"]);\n\t\treturn table;\n\t}\n\t\n\tlookupTableStyles(){\n\t\tvar styles = {};\n\t\t\n\t\t//lookup row styles\n\t\tif(this.cloneTableStyle && window.getComputedStyle){\n\t\t\tstyles.oddRow = this.table.element.querySelector(\".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\t\tstyles.evenRow = this.table.element.querySelector(\".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\t\tstyles.calcRow = this.table.element.querySelector(\".tabulator-row.tabulator-calcs\");\n\t\t\tstyles.firstRow = this.table.element.querySelector(\".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\t\tstyles.firstGroup = this.table.element.getElementsByClassName(\"tabulator-group\")[0];\n\t\t\t\n\t\t\tif(styles.firstRow){\n\t\t\t\tstyles.styleCells = styles.firstRow.getElementsByClassName(\"tabulator-cell\");\n\t\t\t\tstyles.firstCell = styles.styleCells[0];\n\t\t\t\tstyles.lastCell = styles.styleCells[styles.styleCells.length - 1];\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn styles;\n\t}\n\t\n\tgenerateHeaderElement(row, setup, styles){\n\t\tvar rowEl = document.createElement(\"tr\");\n\t\t\n\t\trow.columns.forEach((column) => {\n\t\t\tif(column){\n\t\t\t\tvar cellEl = document.createElement(\"th\");\n\t\t\t\tvar classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(\" \") : [];\n\t\t\t\t\n\t\t\t\tcellEl.colSpan = column.width;\n\t\t\t\tcellEl.rowSpan = column.height;\n\t\t\t\t\n\t\t\t\tcellEl.innerHTML = column.value;\n\t\t\t\t\n\t\t\t\tif(this.cloneTableStyle){\n\t\t\t\t\tcellEl.style.boxSizing = \"border-box\";\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tclassNames.forEach(function(className) {\n\t\t\t\t\tcellEl.classList.add(className);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.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\tthis.mapElementStyles(column.component._column.contentElement, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\n\t\t\t\t\n\t\t\t\tif(column.component._column.visible){\n\t\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"width\"]);\n\t\t\t\t}else{\n\t\t\t\t\tif(column.component._column.definition.width){\n\t\t\t\t\t\tcellEl.style.width = column.component._column.definition.width + \"px\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(column.component._column.parent){\n\t\t\t\t\tthis.mapElementStyles(column.component._column.parent.groupElement, cellEl, [\"border-top\"]);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trowEl.appendChild(cellEl);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateGroupElement(row, setup, styles){\n\t\t\n\t\tvar rowEl = document.createElement(\"tr\"),\n\t\tcellEl = document.createElement(\"td\"),\n\t\tgroup = row.columns[0];\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\n\t\t\n\t\tif(setup.groupHeader && setup.groupHeader[row.indent]){\n\t\t\tgroup.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t}else{\n\t\t\tif(setup.groupHeader !== false){\n\t\t\t\tgroup.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t\t}\n\t\t}\n\t\t\n\t\tcellEl.colSpan = group.width;\n\t\tcellEl.innerHTML = group.value;\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-group\");\n\t\trowEl.classList.add(\"tabulator-group-level-\" + row.indent);\n\t\t\n\t\tif(group.component.isVisible()){\n\t\t\trowEl.classList.add(\"tabulator-group-visible\");\n\t\t}\n\t\t\n\t\tthis.mapElementStyles(styles.firstGroup, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\t\tthis.mapElementStyles(styles.firstGroup, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\n\t\t\n\t\trowEl.appendChild(cellEl);\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateCalcElement(row, setup, styles){\n\t\tvar rowEl = this.generateRowElement(row, setup, styles);\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-calcs\");\n\t\tthis.mapElementStyles(styles.calcRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateRowElement(row, setup, styles){\n\t\tvar rowEl = document.createElement(\"tr\");\n\t\t\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\n\t\t\n\t\trow.columns.forEach((col, i) => {\n\t\t\tif(col){\n\t\t\t\tvar cellEl = document.createElement(\"td\"),\n\t\t\t\tcolumn = col.component._column,\n\t\t\t\ttable = this.table,\n\t\t\t\tindex = table.columnManager.findColumnIndex(column),\n\t\t\t\tvalue = col.value,\n\t\t\t\tcellStyle;\n\t\t\t\t\n\t\t\t\tvar cellWrapper = {\n\t\t\t\t\tmodules:{},\n\t\t\t\t\tgetValue:function(){\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t},\n\t\t\t\t\tgetField:function(){\n\t\t\t\t\t\treturn column.definition.field;\n\t\t\t\t\t},\n\t\t\t\t\tgetElement:function(){\n\t\t\t\t\t\treturn cellEl;\n\t\t\t\t\t},\n\t\t\t\t\tgetType:function(){\n\t\t\t\t\t\treturn \"cell\";\n\t\t\t\t\t},\n\t\t\t\t\tgetColumn:function(){\n\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t},\n\t\t\t\t\tgetData:function(){\n\t\t\t\t\t\treturn row.component.getData();\n\t\t\t\t\t},\n\t\t\t\t\tgetRow:function(){\n\t\t\t\t\t\treturn row.component;\n\t\t\t\t\t},\n\t\t\t\t\tgetTable:function(){\n\t\t\t\t\t\treturn table;\n\t\t\t\t\t},\n\t\t\t\t\tgetComponent:function(){\n\t\t\t\t\t\treturn cellWrapper;\n\t\t\t\t\t},\n\t\t\t\t\tcolumn:column,\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tvar classNames = column.definition.cssClass ? column.definition.cssClass.split(\" \") : [];\n\t\t\t\t\n\t\t\t\tclassNames.forEach(function(className) {\n\t\t\t\t\tcellEl.classList.add(className);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(this.table.modExists(\"format\") && this.config.formatCells !== false){\n\t\t\t\t\tvalue = this.table.modules.format.formatExportValue(cellWrapper, this.colVisProp);\n\t\t\t\t}else{\n\t\t\t\t\tswitch(typeof value){\n\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\tvalue = value !== null ? JSON.stringify(value) : \"\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\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\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(value instanceof Node){\n\t\t\t\t\tcellEl.appendChild(value);\n\t\t\t\t}else{\n\t\t\t\t\tcellEl.innerHTML = value;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcellStyle = styles.styleCells && styles.styleCells[index] ? styles.styleCells[index] : styles.firstCell;\n\t\t\t\t\n\t\t\t\tif(cellStyle){\n\t\t\t\t\tthis.mapElementStyles(cellStyle, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"text-align\"]);\n\t\t\t\t\t\n\t\t\t\t\tif(column.definition.align){\n\t\t\t\t\t\tcellEl.style.textAlign = column.definition.align;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\n\t\t\t\t\tif((setup.treeElementField && setup.treeElementField == column.field) || (!setup.treeElementField && i == 0)){\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.controlEl){\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.branchEl){\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trowEl.appendChild(cellEl);\n\t\t\t\t\n\t\t\t\tif(cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback){\n\t\t\t\t\tcellWrapper.modules.format.renderedCallback();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(setup.rowFormatter && row.type === \"row\" && this.config.formatCells !== false){\n\t\t\tlet formatComponent = Object.assign(row.component);\n\n\t\t\tformatComponent.getElement = function(){return rowEl;};\n\n\t\t\tsetup.rowFormatter(row.component);\n\t\t}\n\t\t\n\t\treturn rowEl;\n\t}\n\t\n\tgenerateHTMLTable(list){\n\t\tvar holder = document.createElement(\"div\");\n\t\t\n\t\tholder.appendChild(this.generateTableElement(list));\n\t\t\n\t\treturn holder.innerHTML;\n\t}\n\t\n\tgetHtml(visible, style, config, colVisProp){\n\t\tvar list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || \"htmlOutput\");\n\t\t\n\t\treturn this.generateHTMLTable(list);\n\t}\n\t\n\tmapElementStyles(from, to, props){\n\t\tif(this.cloneTableStyle && from && to){\n\t\t\t\n\t\t\tvar lookup = {\n\t\t\t\t\"background-color\" : \"backgroundColor\",\n\t\t\t\t\"color\" : \"fontColor\",\n\t\t\t\t\"width\" : \"width\",\n\t\t\t\t\"font-weight\" : \"fontWeight\",\n\t\t\t\t\"font-family\" : \"fontFamily\",\n\t\t\t\t\"font-size\" : \"fontSize\",\n\t\t\t\t\"text-align\" : \"textAlign\",\n\t\t\t\t\"border-top\" : \"borderTop\",\n\t\t\t\t\"border-left\" : \"borderLeft\",\n\t\t\t\t\"border-right\" : \"borderRight\",\n\t\t\t\t\"border-bottom\" : \"borderBottom\",\n\t\t\t\t\"padding-top\" : \"paddingTop\",\n\t\t\t\t\"padding-left\" : \"paddingLeft\",\n\t\t\t\t\"padding-right\" : \"paddingRight\",\n\t\t\t\t\"padding-bottom\" : \"paddingBottom\",\n\t\t\t};\n\t\t\t\n\t\t\tif(window.getComputedStyle){\n\t\t\t\tvar fromStyle = window.getComputedStyle(from);\n\t\t\t\t\n\t\t\t\tprops.forEach(function(prop){\n\t\t\t\t\tif(!to.style[lookup[prop]]){\n\t\t\t\t\t\tto.style[lookup[prop]] = fromStyle.getPropertyValue(prop);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\nExport.moduleName = \"export\";\n\nexport default Export;\n","export default {\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(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(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}\n\t\t\telse{\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(filterVal, rowVal, rowData, filterParams){\n\t\tvar keywords = filterVal.toLowerCase().split(typeof filterParams.separator === \"undefined\" ? \" \" : filterParams.separator),\n\t\tvalue = String(rowVal === null || typeof rowVal === \"undefined\" ? \"\" : rowVal).toLowerCase(),\n\t\tmatches = [];\n\n\t\tkeywords.forEach((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(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}\n\t\t\telse{\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(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}\n\t\t\telse{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\t//in array\n\t\"in\":function(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};","import Module from '../../core/Module.js';\n\nimport defaultFilters from './defaults/filters.js';\n\nclass Filter extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.filterList = []; //hold filter list\n\t\tthis.headerFilters = {}; //hold column filters\n\t\tthis.headerFilterColumns = []; //hold columns that use header filters\n\n\t\tthis.prevHeaderFilterChangeCheck = \"\";\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\n\n\t\tthis.changed = false; //has filtering changed since last render\n\t\tthis.tableInitialized = false;\n\n\t\tthis.registerTableOption(\"filterMode\", \"local\"); //local or remote filtering\n\n\t\tthis.registerTableOption(\"initialFilter\", false); //initial filtering criteria\n\t\tthis.registerTableOption(\"initialHeaderFilter\", false); //initial header filtering criteria\n\t\tthis.registerTableOption(\"headerFilterLiveFilterDelay\", 300); //delay before updating column after user types in header filter\n\t\tthis.registerTableOption(\"placeholderHeaderFilter\", false); //placeholder when header filter is empty\n\n\t\tthis.registerColumnOption(\"headerFilter\");\n\t\tthis.registerColumnOption(\"headerFilterPlaceholder\");\n\t\tthis.registerColumnOption(\"headerFilterParams\");\n\t\tthis.registerColumnOption(\"headerFilterEmptyCheck\");\n\t\tthis.registerColumnOption(\"headerFilterFunc\");\n\t\tthis.registerColumnOption(\"headerFilterFuncParams\");\n\t\tthis.registerColumnOption(\"headerFilterLiveFilter\");\n\n\t\tthis.registerTableFunction(\"searchRows\", this.searchRows.bind(this));\n\t\tthis.registerTableFunction(\"searchData\", this.searchData.bind(this));\n\n\t\tthis.registerTableFunction(\"setFilter\", this.userSetFilter.bind(this));\n\t\tthis.registerTableFunction(\"refreshFilter\", this.userRefreshFilter.bind(this));\n\t\tthis.registerTableFunction(\"addFilter\", this.userAddFilter.bind(this));\n\t\tthis.registerTableFunction(\"getFilters\", this.getFilters.bind(this));\n\t\tthis.registerTableFunction(\"setHeaderFilterFocus\", this.userSetHeaderFilterFocus.bind(this));\n\t\tthis.registerTableFunction(\"getHeaderFilterValue\", this.userGetHeaderFilterValue.bind(this));\n\t\tthis.registerTableFunction(\"setHeaderFilterValue\", this.userSetHeaderFilterValue.bind(this));\n\t\tthis.registerTableFunction(\"getHeaderFilters\", this.getHeaderFilters.bind(this));\n\t\tthis.registerTableFunction(\"removeFilter\", this.userRemoveFilter.bind(this));\n\t\tthis.registerTableFunction(\"clearFilter\", this.userClearFilter.bind(this));\n\t\tthis.registerTableFunction(\"clearHeaderFilter\", this.userClearHeaderFilter.bind(this));\n\n\t\tthis.registerComponentFunction(\"column\", \"headerFilterFocus\", this.setHeaderFilterFocus.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"reloadHeaderFilter\", this.reloadHeaderFilter.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"getHeaderFilterValue\", this.getHeaderFilterValue.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"setHeaderFilterValue\", this.setHeaderFilterValue.bind(this));\n\t}\n\n\tinitialize(){\n\t\tthis.subscribe(\"column-init\", this.initializeColumnHeaderFilter.bind(this));\n\t\tthis.subscribe(\"column-width-fit-before\", this.hideHeaderFilterElements.bind(this));\n\t\tthis.subscribe(\"column-width-fit-after\", this.showHeaderFilterElements.bind(this));\n\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\n\t\tthis.subscribe(\"placeholder\", this.generatePlaceholder.bind(this));\n\n\t\tif(this.table.options.filterMode === \"remote\"){\n\t\t\tthis.subscribe(\"data-params\", this.remoteFilterParams.bind(this));\n\t\t}\n\n\t\tthis.registerDataHandler(this.filter.bind(this), 10);\n\t}\n\n\ttableBuilt(){\n\t\tif(this.table.options.initialFilter){\n\t\t\tthis.setFilter(this.table.options.initialFilter);\n\t\t}\n\n\t\tif(this.table.options.initialHeaderFilter){\n\t\t\tthis.table.options.initialHeaderFilter.forEach((item) => {\n\n\t\t\t\tvar column = this.table.columnManager.findColumn(item.field);\n\n\t\t\t\tif(column){\n\t\t\t\t\tthis.setHeaderFilterValue(column, item.value);\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", item.field);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis.tableInitialized = true;\n\t}\n\n\tremoteFilterParams(data, config, silent, params){\n\t\tparams.filter = this.getFilters(true, true);\n\t\treturn params;\n\t}\n\n\tgeneratePlaceholder(text){\n\t\tif(this.table.options.placeholderHeaderFilter && Object.keys(this.headerFilters).length){\n\t\t\treturn this.table.options.placeholderHeaderFilter;\n\t\t}\n\t}\n\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\n\t//set standard filters\n\tuserSetFilter(field, type, value, params){\n\t\tthis.setFilter(field, type, value, params);\n\t\tthis.refreshFilter();\n\t}\n\n\t//set standard filters\n\tuserRefreshFilter(){\n\t\tthis.refreshFilter();\n\t}\n\n\t//add filter to array\n\tuserAddFilter(field, type, value, params){\n\t\tthis.addFilter(field, type, value, params);\n\t\tthis.refreshFilter();\n\t}\n\n\tuserSetHeaderFilterFocus(field){\n\t\tvar column = this.table.columnManager.findColumn(field);\n\n\t\tif(column){\n\t\t\tthis.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\tuserGetHeaderFilterValue(field) {\n\t\tvar column = this.table.columnManager.findColumn(field);\n\n\t\tif(column){\n\t\t\treturn this.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\tuserSetHeaderFilterValue(field, value){\n\t\tvar column = this.table.columnManager.findColumn(field);\n\n\t\tif(column){\n\t\t\tthis.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\t//remove filter from array\n\tuserRemoveFilter(field, type, value){\n\t\tthis.removeFilter(field, type, value);\n\t\tthis.refreshFilter();\n\t}\n\n\t//clear filters\n\tuserClearFilter(all){\n\t\tthis.clearFilter(all);\n\t\tthis.refreshFilter();\n\t}\n\n\t//clear header filters\n\tuserClearHeaderFilter(){\n\t\tthis.clearHeaderFilter();\n\t\tthis.refreshFilter();\n\t}\n\n\n\t//search for specific row components\n\tsearchRows(field, type, value){\n\t\treturn this.search(\"rows\", field, type, value);\n\t}\n\n\t//search for specific data\n\tsearchData(field, type, value){\n\t\treturn this.search(\"data\", field, type, value);\n\t}\n\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\n\tinitializeColumnHeaderFilter(column){\n\t\tvar def = column.definition;\n\n\t\tif(def.headerFilter){\n\t\t\tthis.initializeColumn(column);\n\t\t}\n\t}\n\n\t//initialize column header filter\n\tinitializeColumn(column, value){\n\t\tvar self = this,\n\t\tfield = column.getField();\n\n\t\t//handle successfully value change\n\t\tfunction success(value){\n\t\t\tvar filterType = (column.modules.filter.tagType == \"input\" && column.modules.filter.attrType == \"text\") || column.modules.filter.tagType == \"textarea\" ? \"partial\" : \"match\",\n\t\t\ttype = \"\",\n\t\t\tfilterChangeCheck = \"\",\n\t\t\tfilterFunc;\n\n\t\t\tif(typeof column.modules.filter.prevSuccess === \"undefined\" || column.modules.filter.prevSuccess !== value){\n\n\t\t\t\tcolumn.modules.filter.prevSuccess = value;\n\n\t\t\t\tif(!column.modules.filter.emptyFunc(value)){\n\t\t\t\t\tcolumn.modules.filter.value = value;\n\n\t\t\t\t\tswitch(typeof column.definition.headerFilterFunc){\n\t\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\t\tif(Filter.filters[column.definition.headerFilterFunc]){\n\t\t\t\t\t\t\t\ttype = column.definition.headerFilterFunc;\n\t\t\t\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\n\t\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\n\n\t\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\t\treturn Filter.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}else{\n\t\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\t}\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\t\tfilterFunc = function(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 column.definition.headerFilterFunc(value, fieldVal, data, params);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\ttype = filterFunc;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(!filterFunc){\n\t\t\t\t\t\tswitch(filterType){\n\t\t\t\t\t\t\tcase \"partial\":\n\t\t\t\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\t\t\t\tvar colVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\t\t\tif(typeof colVal !== 'undefined' && colVal !== null){\n\t\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\t}else{\n\t\t\t\t\t\t\t\t\t\treturn false;\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\ttype = \"like\";\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\t\t\t\treturn column.getFieldValue(data) == value;\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\ttype = \"=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tself.headerFilters[field] = {value:value, func:filterFunc, type:type};\n\t\t\t\t}else{\n\t\t\t\t\tdelete self.headerFilters[field];\n\t\t\t\t}\n\n\t\t\t\tcolumn.modules.filter.value = value;\n\n\t\t\t\tfilterChangeCheck = JSON.stringify(self.headerFilters);\n\n\t\t\t\tif(self.prevHeaderFilterChangeCheck !== filterChangeCheck){\n\t\t\t\t\tself.prevHeaderFilterChangeCheck = filterChangeCheck;\n\n\t\t\t\t\tself.trackChanges();\n\t\t\t\t\tself.refreshFilter();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tcolumn.modules.filter = {\n\t\t\tsuccess:success,\n\t\t\tattrType:false,\n\t\t\ttagType:false,\n\t\t\temptyFunc:false,\n\t\t};\n\n\t\tthis.generateHeaderFilterElement(column);\n\t}\n\n\tgenerateHeaderFilterElement(column, initialValue, reinitialize){\n\t\tvar self = this,\n\t\tsuccess = column.modules.filter.success,\n\t\tfield = column.getField(),\n\t\tfilterElement, editor, editorElement, cellWrapper, typingTimer, searchTrigger, params, onRenderedCallback;\n\n\t\tcolumn.modules.filter.value = initialValue;\n\n\t\t//handle aborted edit\n\t\tfunction cancel(){}\n\n\t\tfunction onRendered(callback){\n\t\t\tonRenderedCallback = callback;\n\t\t}\n\n\t\tif(column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode){\n\t\t\tcolumn.contentElement.removeChild(column.modules.filter.headerElement.parentNode);\n\t\t}\n\n\t\tif(field){\n\n\t\t\t//set empty value function\n\t\t\tcolumn.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function(value){\n\t\t\t\treturn !value && value !== 0;\n\t\t\t};\n\n\t\t\tfilterElement = document.createElement(\"div\");\n\t\t\tfilterElement.classList.add(\"tabulator-header-filter\");\n\n\t\t\t//set column editor\n\t\t\tswitch(typeof column.definition.headerFilter){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif(self.table.modules.edit.editors[column.definition.headerFilter]){\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.headerFilter];\n\n\t\t\t\t\t\tif((column.definition.headerFilter === \"tick\" || column.definition.headerFilter === \"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\tconsole.warn(\"Filter Error - Cannot build header filter, No such editor found: \", column.definition.editor);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\teditor = column.definition.headerFilter;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tif(column.modules.edit && column.modules.edit.editor){\n\t\t\t\t\t\teditor = column.modules.edit.editor;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]){\n\t\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.formatter];\n\n\t\t\t\t\t\t\tif((column.definition.formatter === \"tick\" || column.definition.formatter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\n\t\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\n\t\t\t\t\t\t\t\t\treturn value !== true && value !== 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}else{\n\t\t\t\t\t\t\teditor = self.table.modules.edit.editors[\"input\"];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif(editor){\n\n\t\t\t\tcellWrapper = {\n\t\t\t\t\tgetValue:function(){\n\t\t\t\t\t\treturn typeof initialValue !== \"undefined\" ? initialValue : \"\";\n\t\t\t\t\t},\n\t\t\t\t\tgetField:function(){\n\t\t\t\t\t\treturn column.definition.field;\n\t\t\t\t\t},\n\t\t\t\t\tgetElement:function(){\n\t\t\t\t\t\treturn filterElement;\n\t\t\t\t\t},\n\t\t\t\t\tgetColumn:function(){\n\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t},\n\t\t\t\t\tgetTable:() => {\n\t\t\t\t\t\treturn this.table;\n\t\t\t\t\t},\n\t\t\t\t\tgetType:() => {\n\t\t\t\t\t\treturn \"header\";\n\t\t\t\t\t},\n\t\t\t\t\tgetRow:function(){\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tnormalizeHeight:function(){\n\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\tparams = column.definition.headerFilterParams || {};\n\n\t\t\t\tparams = typeof params === \"function\" ? params.call(self.table, cellWrapper) : params;\n\n\t\t\t\teditorElement = editor.call(this.table.modules.edit, cellWrapper, onRendered, success, cancel, params);\n\n\t\t\t\tif(!editorElement){\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor returned a value of false\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif(!(editorElement instanceof Node)){\n\t\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\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//set Placeholder Text\n\t\t\t\tself.langBind(\"headerFilters|columns|\" + column.definition.field, function(value){\n\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof value !== \"undefined\" && value ? value : (column.definition.headerFilterPlaceholder || self.langText(\"headerFilters|default\")));\n\t\t\t\t});\n\n\t\t\t\t//focus on element on click\n\t\t\t\teditorElement.addEventListener(\"click\", function(e){\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\teditorElement.focus();\n\t\t\t\t});\n\n\t\t\t\teditorElement.addEventListener(\"focus\", (e) => {\n\t\t\t\t\tvar left = this.table.columnManager.contentsElement.scrollLeft;\n\n\t\t\t\t\tvar headerPos = this.table.rowManager.element.scrollLeft;\n\n\t\t\t\t\tif(left !== headerPos){\n\t\t\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\t\t\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t//live update filters as user types\n\t\t\t\ttypingTimer = false;\n\n\t\t\t\tsearchTrigger = function(e){\n\t\t\t\t\tif(typingTimer){\n\t\t\t\t\t\tclearTimeout(typingTimer);\n\t\t\t\t\t}\n\n\t\t\t\t\ttypingTimer = setTimeout(function(){\n\t\t\t\t\t\tsuccess(editorElement.value);\n\t\t\t\t\t},self.table.options.headerFilterLiveFilterDelay);\n\t\t\t\t};\n\n\t\t\t\tcolumn.modules.filter.headerElement = editorElement;\n\t\t\t\tcolumn.modules.filter.attrType = editorElement.hasAttribute(\"type\") ? editorElement.getAttribute(\"type\").toLowerCase() : \"\" ;\n\t\t\t\tcolumn.modules.filter.tagType = editorElement.tagName.toLowerCase();\n\n\t\t\t\tif(column.definition.headerFilterLiveFilter !== false){\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t!(\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'autocomplete' ||\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'tickCross' ||\n\t\t\t\t\t\t\t((column.definition.editor === 'autocomplete' ||\n\t\t\t\t\t\t\t\tcolumn.definition.editor === 'tickCross') &&\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === true)\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\teditorElement.addEventListener(\"keyup\", searchTrigger);\n\t\t\t\t\t\teditorElement.addEventListener(\"search\", searchTrigger);\n\n\n\t\t\t\t\t\t//update number filtered columns on change\n\t\t\t\t\t\tif(column.modules.filter.attrType == \"number\"){\n\t\t\t\t\t\t\teditorElement.addEventListener(\"change\", function(e){\n\t\t\t\t\t\t\t\tsuccess(editorElement.value);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//change text inputs to search inputs to allow for clearing of field\n\t\t\t\t\t\tif(column.modules.filter.attrType == \"text\" && this.table.browser !== \"ie\"){\n\t\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\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//prevent input and select elements from propagating click to column sorters etc\n\t\t\t\t\tif(column.modules.filter.tagType == \"input\" || column.modules.filter.tagType == \"select\" || column.modules.filter.tagType == \"textarea\"){\n\t\t\t\t\t\teditorElement.addEventListener(\"mousedown\",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}\n\n\t\t\t\tfilterElement.appendChild(editorElement);\n\n\t\t\t\tcolumn.contentElement.appendChild(filterElement);\n\n\t\t\t\tif(!reinitialize){\n\t\t\t\t\tself.headerFilterColumns.push(column);\n\t\t\t\t}\n\n\t\t\t\tif(onRenderedCallback){\n\t\t\t\t\tonRenderedCallback();\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tconsole.warn(\"Filter Error - Cannot add header filter, column has no field set:\", column.definition.title);\n\t\t}\n\t}\n\n\t//hide all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\n\thideHeaderFilterElements(){\n\t\tthis.headerFilterColumns.forEach(function(column){\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = 'none';\n\t\t\t}\n\t\t});\n\t}\n\n\t//show all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\n\tshowHeaderFilterElements(){\n\t\tthis.headerFilterColumns.forEach(function(column){\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = '';\n\t\t\t}\n\t\t});\n\t}\n\n\t//programmatically set focus of header filter\n\tsetHeaderFilterFocus(column){\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\tcolumn.modules.filter.headerElement.focus();\n\t\t}else{\n\t\t\tconsole.warn(\"Column Filter Focus Error - No header filter set on column:\", column.getField());\n\t\t}\n\t}\n\n\t//programmatically get value of header filter\n\tgetHeaderFilterValue(column){\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\treturn column.modules.filter.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\t//programmatically set value of header filter\n\tsetHeaderFilterValue(column, value){\n\t\tif (column){\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\t\tthis.generateHeaderFilterElement(column, value, true);\n\t\t\t\tcolumn.modules.filter.success(value);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t\t}\n\t\t}\n\t}\n\n\treloadHeaderFilter(column){\n\t\tif (column){\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\n\t\t\t\tthis.generateHeaderFilterElement(column, column.modules.filter.value, true);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t\t}\n\t\t}\n\t}\n\n\trefreshFilter(){\n\t\tif(this.tableInitialized){\n\t\t\tif(this.table.options.filterMode === \"remote\"){\n\t\t\t\tthis.reloadData(null, false, false);\n\t\t\t}else{\n\t\t\t\tthis.refreshData(true);\n\t\t\t}\n\t\t}\n\n\t\t//TODO - Persist left position of row manager\n\t\t// left = this.scrollLeft;\n\t\t// this.scrollHorizontal(left);\n\t}\n\n\t//check if the filters has changed since last use\n\ttrackChanges(){\n\t\tthis.changed = true;\n\t\tthis.dispatch(\"filter-changed\");\n\t}\n\n\t//check if the filters has changed since last use\n\thasChanged(){\n\t\tvar changed = this.changed;\n\t\tthis.changed = false;\n\t\treturn changed;\n\t}\n\n\t//set standard filters\n\tsetFilter(field, type, value, params){\n\t\tthis.filterList = [];\n\n\t\tif(!Array.isArray(field)){\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\n\t\t}\n\n\t\tthis.addFilter(field);\n\t}\n\n\t//add filter to array\n\taddFilter(field, type, value, params){\n\t\tvar changed = false;\n\n\t\tif(!Array.isArray(field)){\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\n\t\t}\n\n\t\tfield.forEach((filter) => {\n\t\t\tfilter = this.findFilter(filter);\n\n\t\t\tif(filter){\n\t\t\t\tthis.filterList.push(filter);\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t});\n\n\t\tif(changed){\n\t\t\tthis.trackChanges();\n\t\t}\n\t}\n\n\tfindFilter(filter){\n\t\tvar column;\n\n\t\tif(Array.isArray(filter)){\n\t\t\treturn this.findSubFilters(filter);\n\t\t}\n\n\t\tvar filterFunc = false;\n\n\t\tif(typeof filter.field == \"function\"){\n\t\t\tfilterFunc = function(data){\n\t\t\t\treturn filter.field(data, filter.type || {});// pass params to custom filter function\n\t\t\t};\n\t\t}else{\n\n\t\t\tif(Filter.filters[filter.type]){\n\n\t\t\t\tcolumn = this.table.columnManager.getColumnByField(filter.field);\n\n\t\t\t\tif(column){\n\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {});\n\t\t\t\t\t};\n\t\t\t\t}else{\n\t\t\t\t\tfilterFunc = function(data){\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, data[filter.field], data, filter.params || {});\n\t\t\t\t\t};\n\t\t\t\t}\n\n\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Filter Error - No such filter type found, ignoring: \", filter.type);\n\t\t\t}\n\t\t}\n\n\t\tfilter.func = filterFunc;\n\n\t\treturn filter.func ? filter : false;\n\t}\n\n\tfindSubFilters(filters){\n\t\tvar output = [];\n\n\t\tfilters.forEach((filter) => {\n\t\t\tfilter = this.findFilter(filter);\n\n\t\t\tif(filter){\n\t\t\t\toutput.push(filter);\n\t\t\t}\n\t\t});\n\n\t\treturn output.length ? output : false;\n\t}\n\n\t//get all filters\n\tgetFilters(all, ajax){\n\t\tvar output = [];\n\n\t\tif(all){\n\t\t\toutput = this.getHeaderFilters();\n\t\t}\n\n\t\tif(ajax){\n\t\t\toutput.forEach(function(item){\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\t\t}\n\n\t\toutput = output.concat(this.filtersToArray(this.filterList, ajax));\n\n\t\treturn output;\n\t}\n\n\t//filter to Object\n\tfiltersToArray(filterList, ajax){\n\t\tvar output = [];\n\n\t\tfilterList.forEach((filter) => {\n\t\t\tvar item;\n\n\t\t\tif(Array.isArray(filter)){\n\t\t\t\toutput.push(this.filtersToArray(filter, ajax));\n\t\t\t}else{\n\t\t\t\titem = {field:filter.field, type:filter.type, value:filter.value};\n\n\t\t\t\tif(ajax){\n\t\t\t\t\tif(typeof item.type == \"function\"){\n\t\t\t\t\t\titem.type = \"function\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\toutput.push(item);\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\t//get all filters\n\tgetHeaderFilters(){\n\t\tvar output = [];\n\n\t\tfor(var key in this.headerFilters){\n\t\t\toutput.push({field:key, type:this.headerFilters[key].type, value:this.headerFilters[key].value});\n\t\t}\n\n\t\treturn output;\n\t}\n\n\t//remove filter from array\n\tremoveFilter(field, type, value){\n\t\tif(!Array.isArray(field)){\n\t\t\tfield = [{field:field, type:type, value:value}];\n\t\t}\n\n\t\tfield.forEach((filter) => {\n\t\t\tvar index = -1;\n\n\t\t\tif(typeof filter.field == \"object\"){\n\t\t\t\tindex = this.filterList.findIndex((element) => {\n\t\t\t\t\treturn filter === element;\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tindex = this.filterList.findIndex((element) => {\n\t\t\t\t\treturn filter.field === element.field && filter.type === element.type && filter.value === element.value;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif(index > -1){\n\t\t\t\tthis.filterList.splice(index, 1);\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Filter Error - No matching filter type found, ignoring: \", filter.type);\n\t\t\t}\n\t\t});\n\n\t\tthis.trackChanges();\n\t}\n\n\t//clear filters\n\tclearFilter(all){\n\t\tthis.filterList = [];\n\n\t\tif(all){\n\t\t\tthis.clearHeaderFilter();\n\t\t}\n\n\t\tthis.trackChanges();\n\t}\n\n\t//clear header filters\n\tclearHeaderFilter(){\n\t\tthis.headerFilters = {};\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\n\n\t\tthis.headerFilterColumns.forEach((column) => {\n\t\t\tif(typeof column.modules.filter.value !== \"undefined\"){\n\t\t\t\tdelete column.modules.filter.value;\n\t\t\t}\n\t\t\tcolumn.modules.filter.prevSuccess = undefined;\n\t\t\tthis.reloadHeaderFilter(column);\n\t\t});\n\n\t\tthis.trackChanges();\n\t}\n\n\t//search data and return matching rows\n\tsearch (searchType, field, type, value){\n\t\tvar activeRows = [],\n\t\tfilterList = [];\n\n\t\tif(!Array.isArray(field)){\n\t\t\tfield = [{field:field, type:type, value:value}];\n\t\t}\n\n\t\tfield.forEach((filter) => {\n\t\t\tfilter = this.findFilter(filter);\n\n\t\t\tif(filter){\n\t\t\t\tfilterList.push(filter);\n\t\t\t}\n\t\t});\n\n\t\tthis.table.rowManager.rows.forEach((row) => {\n\t\t\tvar match = true;\n\n\t\t\tfilterList.forEach((filter) => {\n\t\t\t\tif(!this.filterRecurse(filter, row.getData())){\n\t\t\t\t\tmatch = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(match){\n\t\t\t\tactiveRows.push(searchType === \"data\" ? row.getData(\"data\") : row.getComponent());\n\t\t\t}\n\n\t\t});\n\n\t\treturn activeRows;\n\t}\n\n\t//filter row array\n\tfilter(rowList, filters){\n\t\tvar activeRows = [],\n\t\tactiveRowComponents = [];\n\n\t\tif(this.subscribedExternal(\"dataFiltering\")){\n\t\t\tthis.dispatchExternal(\"dataFiltering\", this.getFilters(true));\n\t\t}\n\n\t\tif(this.table.options.filterMode !== \"remote\" && (this.filterList.length || Object.keys(this.headerFilters).length)){\n\n\t\t\trowList.forEach((row) => {\n\t\t\t\tif(this.filterRow(row)){\n\t\t\t\t\tactiveRows.push(row);\n\t\t\t\t}\n\t\t\t});\n\n\t\t}else{\n\t\t\tactiveRows = rowList.slice(0);\n\t\t}\n\n\t\tif(this.subscribedExternal(\"dataFiltered\")){\n\n\t\t\tactiveRows.forEach((row) => {\n\t\t\t\tactiveRowComponents.push(row.getComponent());\n\t\t\t});\n\n\t\t\tthis.dispatchExternal(\"dataFiltered\", this.getFilters(true), activeRowComponents);\n\t\t}\n\n\t\treturn activeRows;\n\t}\n\n\t//filter individual row\n\tfilterRow(row, filters){\n\t\tvar match = true,\n\t\tdata = row.getData();\n\n\t\tthis.filterList.forEach((filter) => {\n\t\t\tif(!this.filterRecurse(filter, data)){\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t});\n\n\n\t\tfor(var field in this.headerFilters){\n\t\t\tif(!this.headerFilters[field].func(data)){\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t}\n\n\t\treturn match;\n\t}\n\n\tfilterRecurse(filter, data){\n\t\tvar match = false;\n\n\t\tif(Array.isArray(filter)){\n\t\t\tfilter.forEach((subFilter) => {\n\t\t\t\tif(this.filterRecurse(subFilter, data)){\n\t\t\t\t\tmatch = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tmatch = filter.func(data);\n\t\t}\n\n\t\treturn match;\n\t}\n}\n\nFilter.moduleName = \"filter\";\n\n//load defaults\nFilter.filters = defaultFilters;\n\nexport default Filter;","import plaintext from './formatters/plaintext.js';\nimport html from './formatters/html.js';\nimport textarea from './formatters/textarea.js';\nimport money from './formatters/money.js';\nimport link from './formatters/link.js';\nimport image from './formatters/image.js';\nimport tickCross from './formatters/tickCross.js';\nimport datetime from './formatters/datetime.js';\nimport datetimediff from './formatters/datetimediff.js';\nimport lookup from './formatters/lookup.js';\nimport star from './formatters/star.js';\nimport traffic from './formatters/traffic.js';\nimport progress from './formatters/progress.js';\nimport color from './formatters/color.js';\nimport buttonTick from './formatters/buttonTick.js';\nimport buttonCross from './formatters/buttonCross.js';\nimport rownum from './formatters/rownum.js';\nimport handle from './formatters/handle.js';\nimport responsiveCollapse from './formatters/responsiveCollapse.js';\nimport rowSelection from './formatters/rowSelection.js';\n\nexport default {\n\tplaintext:plaintext,\n\thtml:html,\n\ttextarea:textarea,\n\tmoney:money,\n\tlink:link,\n\timage:image,\n\ttickCross:tickCross,\n\tdatetime:datetime,\n\tdatetimediff:datetimediff,\n\tlookup:lookup,\n\tstar:star,\n\ttraffic:traffic,\n\tprogress:progress,\n\tcolor:color,\n\tbuttonTick:buttonTick,\n\tbuttonCross:buttonCross,\n\trownum:rownum,\n\thandle:handle,\n\tresponsiveCollapse:responsiveCollapse,\n\trowSelection:rowSelection,\n};","export default function(cell, formatterParams, onRendered){\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n}","export default function(cell, formatterParams, onRendered){\n\treturn cell.getValue();\n}","export default function(cell, formatterParams, onRendered){\n\tcell.getElement().style.whiteSpace = \"pre-wrap\";\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n}","export default function(cell, formatterParams, onRendered){\n\tvar floatVal = parseFloat(cell.getValue()),\n\tsign = \"\",\n\tnumber, integer, decimal, rgx, value;\n\n\tvar decimalSym = formatterParams.decimal || \".\";\n\tvar thousandSym = formatterParams.thousand || \",\";\n\tvar negativeSign = formatterParams.negativeSign || \"-\";\n\tvar symbol = formatterParams.symbol || \"\";\n\tvar after = !!formatterParams.symbolAfter;\n\tvar precision = typeof formatterParams.precision !== \"undefined\" ? formatterParams.precision : 2;\n\n\tif(isNaN(floatVal)){\n\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n\t}\n\n\tif(floatVal < 0){\n\t\tfloatVal = Math.abs(floatVal);\n\t\tsign = negativeSign;\n\t}\n\n\tnumber = precision !== false ? floatVal.toFixed(precision) : floatVal;\n\tnumber = String(number).split(\".\");\n\n\tinteger = number[0];\n\tdecimal = number.length > 1 ? decimalSym + number[1] : \"\";\n\n\tif (formatterParams.thousand !== false) {\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\t}\n\n\tvalue = integer + decimal;\n\t\n\tif(sign === true){\n\t\tvalue = \"(\" + value + \")\";\n\t\treturn after ? value + symbol : symbol + value;\n\t}else{\n\t\treturn after ? sign + value + symbol : sign + symbol + value;\n\t}\n}","import Helpers from '../../../../core/tools/Helpers.js';\n\n\nexport default function(cell, formatterParams, onRendered){\n\tvar value = cell.getValue(),\n\turlPrefix = formatterParams.urlPrefix || \"\",\n\tdownload = formatterParams.download,\n\tlabel = value,\n\tel = document.createElement(\"a\"),\n\tdata;\n\n\tfunction labelTraverse(path, data){\n\t\tvar item = path.shift(),\n\t\tvalue = data[item];\n\t\t\n\t\tif(path.length && typeof value === \"object\"){\n\t\t\treturn labelTraverse(path, value);\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tif(formatterParams.labelField){\n\t\tdata = cell.getData();\n\t\tlabel = labelTraverse(formatterParams.labelField.split(this.table.options.nestedFieldSeparator), data);\n\t}\n\n\tif(formatterParams.label){\n\t\tswitch(typeof formatterParams.label){\n\t\t\tcase \"string\":\n\t\t\t\tlabel = formatterParams.label;\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tlabel = formatterParams.label(cell);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif(label){\n\t\tif(formatterParams.urlField){\n\t\t\tdata = cell.getData();\n\n\t\t\tvalue = Helpers.retrieveNestedData(this.table.options.nestedFieldSeparator, formatterParams.urlField, data);\n\t\t}\n\n\t\tif(formatterParams.url){\n\t\t\tswitch(typeof formatterParams.url){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tvalue = formatterParams.url;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\tvalue = formatterParams.url(cell);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tel.setAttribute(\"href\", urlPrefix + value);\n\n\t\tif(formatterParams.target){\n\t\t\tel.setAttribute(\"target\", formatterParams.target);\n\t\t}\n\n\t\tif(formatterParams.download){\n\n\t\t\tif(typeof download == \"function\"){\n\t\t\t\tdownload = download(cell);\n\t\t\t}else{\n\t\t\t\tdownload = download === true ? \"\" : download;\n\t\t\t}\n\n\t\t\tel.setAttribute(\"download\", download);\n\t\t}\n\n\t\tel.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));\n\n\t\treturn el;\n\t}else{\n\t\treturn \" \";\n\t}\n}","export default function(cell, formatterParams, onRendered){\n\tvar el = document.createElement(\"img\"),\n\tsrc = cell.getValue();\n\n\tif(formatterParams.urlPrefix){\n\t\tsrc = formatterParams.urlPrefix + cell.getValue();\n\t}\n\n\tif(formatterParams.urlSuffix){\n\t\tsrc = src + formatterParams.urlSuffix;\n\t}\n\n\tel.setAttribute(\"src\", src);\n\n\tswitch(typeof formatterParams.height){\n\t\tcase \"number\":\n\t\t\tel.style.height = formatterParams.height + \"px\";\n\t\t\tbreak;\n\n\t\tcase \"string\":\n\t\t\tel.style.height = formatterParams.height;\n\t\t\tbreak;\n\t}\n\n\tswitch(typeof formatterParams.width){\n\t\tcase \"number\":\n\t\t\tel.style.width = formatterParams.width + \"px\";\n\t\t\tbreak;\n\n\t\tcase \"string\":\n\t\t\tel.style.width = formatterParams.width;\n\t\t\tbreak;\n\t}\n\n\tel.addEventListener(\"load\", function(){\n\t\tcell.getRow().normalizeHeight();\n\t});\n\n\treturn el;\n}","export default function(cell, formatterParams, onRendered){\n\tvar value = cell.getValue(),\n\telement = cell.getElement(),\n\tempty = formatterParams.allowEmpty,\n\ttruthy = formatterParams.allowTruthy,\n\ttrueValueSet = Object.keys(formatterParams).includes(\"trueValue\"),\n\ttick = typeof formatterParams.tickElement !== \"undefined\" ? formatterParams.tickElement : '',\n\tcross = typeof formatterParams.crossElement !== \"undefined\" ? formatterParams.crossElement : '';\n\n\tif((trueValueSet && value === formatterParams.trueValue) || (!trueValueSet && ((truthy && value) || (value === true || value === \"true\" || value === \"True\" || value === 1 || value === \"1\")))){\n\t\telement.setAttribute(\"aria-checked\", true);\n\t\treturn tick || \"\";\n\t}else{\n\t\tif(empty && (value === \"null\" || value === \"\" || value === null || typeof value === \"undefined\")){\n\t\t\telement.setAttribute(\"aria-checked\", \"mixed\");\n\t\t\treturn \"\";\n\t\t}else{\n\t\t\telement.setAttribute(\"aria-checked\", false);\n\t\t\treturn cross || \"\";\n\t\t}\n\t}\n}","export default function(cell, formatterParams, onRendered){\n\tvar DT = window.DateTime || luxon.DateTime;\n\tvar inputFormat = formatterParams.inputFormat || \"yyyy-MM-dd HH:mm:ss\";\n\tvar\toutputFormat = formatterParams.outputFormat || \"dd/MM/yyyy HH:mm:ss\";\n\tvar\tinvalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\n\tvar value = cell.getValue();\n\n\tif(typeof DT != \"undefined\"){\n\t\tvar newDatetime;\n\n\t\tif(DT.isDateTime(value)){\n\t\t\tnewDatetime = value;\n\t\t}else if(inputFormat === \"iso\"){\n\t\t\tnewDatetime = DT.fromISO(String(value));\n\t\t}else{\n\t\t\tnewDatetime = DT.fromFormat(String(value), inputFormat);\n\t\t}\n\n\t\tif(newDatetime.isValid){\n\t\t\tif(formatterParams.timezone){\n\t\t\t\tnewDatetime = newDatetime.setZone(formatterParams.timezone);\n\t\t\t}\n\n\t\t\treturn newDatetime.toFormat(outputFormat);\n\t\t}else{\n\t\t\tif(invalid === true || !value){\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}else{\n\t\tconsole.error(\"Format Error - 'datetime' formatter is dependant on luxon.js\");\n\t}\n}","export default function (cell, formatterParams, onRendered) {\n\tvar DT = window.DateTime || luxon.DateTime;\n\tvar inputFormat = formatterParams.inputFormat || \"yyyy-MM-dd HH:mm:ss\";\n\tvar invalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\n\tvar suffix = typeof formatterParams.suffix !== \"undefined\" ? formatterParams.suffix : false;\n\tvar unit = typeof formatterParams.unit !== \"undefined\" ? formatterParams.unit : \"days\";\n\tvar humanize = typeof formatterParams.humanize !== \"undefined\" ? formatterParams.humanize : false;\n\tvar date = typeof formatterParams.date !== \"undefined\" ? formatterParams.date : DT.now();\n\tvar value = cell.getValue();\n\n\tif(typeof DT != \"undefined\"){\n\t\tvar newDatetime;\n\n\t\tif(DT.isDateTime(value)){\n\t\t\tnewDatetime = value;\n\t\t}else if(inputFormat === \"iso\"){\n\t\t\tnewDatetime = DT.fromISO(String(value));\n\t\t}else{\n\t\t\tnewDatetime = DT.fromFormat(String(value), inputFormat);\n\t\t}\n\n\t\tif (newDatetime.isValid){\n\t\t\tif(humanize){\n\t\t\t\treturn newDatetime.diff(date, unit).toHuman() + (suffix ? \" \" + suffix : \"\");\n\t\t\t}else{\n\t\t\t\treturn parseInt(newDatetime.diff(date, unit)[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}else{\n\t\tconsole.error(\"Format Error - 'datetimediff' formatter is dependant on luxon.js\");\n\t}\n}","export default function (cell, formatterParams, onRendered) {\n\tvar value = cell.getValue();\n\n\tif (typeof formatterParams[value] === \"undefined\") {\n\t\tconsole.warn('Missing display value for ' + value);\n\t\treturn value;\n\t}\n\n\treturn formatterParams[value];\n}","export default function(cell, formatterParams, onRendered){\n\tvar value = cell.getValue(),\n\telement = cell.getElement(),\n\tmaxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,\n\tstars = document.createElement(\"span\"),\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\"),\n\tstarActive = '',\n\tstarInactive = '';\n\n\t//style stars holder\n\tstars.style.verticalAlign = \"middle\";\n\n\t//style star\n\tstar.setAttribute(\"width\", \"14\");\n\tstar.setAttribute(\"height\", \"14\");\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\n\tstar.setAttribute(\"xml:space\", \"preserve\");\n\tstar.style.padding = \"0 1px\";\n\n\tvalue = value && !isNaN(value) ? parseInt(value) : 0;\n\n\tvalue = Math.max(0, Math.min(value, maxStars));\n\n\tfor(var i=1;i<= maxStars;i++){\n\t\tvar nextStar = star.cloneNode(true);\n\t\tnextStar.innerHTML = i <= value ? starActive : starInactive;\n\n\t\tstars.appendChild(nextStar);\n\t}\n\n\telement.style.whiteSpace = \"nowrap\";\n\telement.style.overflow = \"hidden\";\n\telement.style.textOverflow = \"ellipsis\";\n\n\telement.setAttribute(\"aria-label\", value);\n\n\treturn stars;\n}","export default function(cell, formatterParams, onRendered){\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\n\tel = document.createElement(\"span\"),\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\n\tcolors = formatterParams && typeof formatterParams.color !== \"undefined\" ? formatterParams.color : [\"red\", \"orange\", \"green\"],\n\tcolor = \"#666666\",\n\tpercent, percentValue;\n\n\tif(isNaN(value) || typeof cell.getValue() === \"undefined\"){\n\t\treturn;\n\t}\n\n\tel.classList.add(\"tabulator-traffic-light\");\n\n\t//make sure value is in range\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\n\n\t//workout percentage\n\tpercent = (max - min) / 100;\n\tpercentValue = Math.round((percentValue - min) / percent);\n\n\t//set color\n\tswitch(typeof colors){\n\t\tcase \"string\":\n\t\t\tcolor = colors;\n\t\t\tbreak;\n\t\tcase \"function\":\n\t\t\tcolor = colors(value);\n\t\t\tbreak;\n\t\tcase \"object\":\n\t\t\tif(Array.isArray(colors)){\n\t\t\t\tvar unit = 100 / colors.length;\n\t\t\t\tvar index = Math.floor(percentValue / unit);\n\n\t\t\t\tindex = Math.min(index, colors.length - 1);\n\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\tcolor = colors[index];\n\t\t\t\tbreak;\n\t\t\t}\n\t}\n\n\tel.style.backgroundColor = color;\n\n\treturn el;\n}","import CellComponent from '../../../../core/cell/CellComponent.js';\n\nexport default function(cell, formatterParams = {}, onRendered){ //progress bar\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\n\telement = cell.getElement(),\n\tmax = formatterParams.max ? formatterParams.max : 100,\n\tmin = formatterParams.min ? formatterParams.min : 0,\n\tlegendAlign = formatterParams.legendAlign ? formatterParams.legendAlign : \"center\",\n\tpercent, percentValue, color, legend, legendColor;\n\n\t//make sure value is in range\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\n\n\t//workout percentage\n\tpercent = (max - min) / 100;\n\tpercentValue = Math.round((percentValue - min) / percent);\n\n\t//set bar color\n\tswitch(typeof formatterParams.color){\n\t\tcase \"string\":\n\t\t\tcolor = formatterParams.color;\n\t\t\tbreak;\n\t\tcase \"function\":\n\t\t\tcolor = formatterParams.color(value);\n\t\t\tbreak;\n\t\tcase \"object\":\n\t\t\tif(Array.isArray(formatterParams.color)){\n\t\t\t\tlet unit = 100 / formatterParams.color.length;\n\t\t\t\tlet index = Math.floor(percentValue / unit);\n\n\t\t\t\tindex = Math.min(index, formatterParams.color.length - 1);\n\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\tcolor = formatterParams.color[index];\n\t\t\t\tbreak;\n\t\t\t}\n\t\tdefault:\n\t\t\tcolor = \"#2DC214\";\n\t}\n\n\t//generate legend\n\tswitch(typeof formatterParams.legend){\n\t\tcase \"string\":\n\t\t\tlegend = formatterParams.legend;\n\t\t\tbreak;\n\t\tcase \"function\":\n\t\t\tlegend = formatterParams.legend(value);\n\t\t\tbreak;\n\t\tcase \"boolean\":\n\t\t\tlegend = value;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tlegend = false;\n\t}\n\n\t//set legend color\n\tswitch(typeof formatterParams.legendColor){\n\t\tcase \"string\":\n\t\t\tlegendColor = formatterParams.legendColor;\n\t\t\tbreak;\n\t\tcase \"function\":\n\t\t\tlegendColor = formatterParams.legendColor(value);\n\t\t\tbreak;\n\t\tcase \"object\":\n\t\t\tif(Array.isArray(formatterParams.legendColor)){\n\t\t\t\tlet unit = 100 / formatterParams.legendColor.length;\n\t\t\t\tlet index = Math.floor(percentValue / unit);\n\n\t\t\t\tindex = Math.min(index, formatterParams.legendColor.length - 1);\n\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\tlegendColor = formatterParams.legendColor[index];\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tlegendColor = \"#000\";\n\t}\n\n\telement.style.minWidth = \"30px\";\n\telement.style.position = \"relative\";\n\n\telement.setAttribute(\"aria-label\", percentValue);\n\n\tvar barEl = document.createElement(\"div\");\n\tbarEl.style.display = \"inline-block\";\n\tbarEl.style.width = percentValue + \"%\";\n\tbarEl.style.backgroundColor = color;\n\tbarEl.style.height = \"100%\";\n\n\tbarEl.setAttribute('data-max', max);\n\tbarEl.setAttribute('data-min', min);\n\n\tvar barContainer = document.createElement(\"div\");\n\tbarContainer.style.position = \"relative\";\n\tbarContainer.style.width = \"100%\";\n\tbarContainer.style.height = \"100%\";\n\n\tif(legend){\n\t\tvar legendEl = document.createElement(\"div\");\n\t\tlegendEl.style.position = \"absolute\";\n\t\tlegendEl.style.top = 0;\n\t\tlegendEl.style.left = 0;\n\t\tlegendEl.style.textAlign = legendAlign;\n\t\tlegendEl.style.width = \"100%\";\n\t\tlegendEl.style.color = legendColor;\n\t\tlegendEl.innerHTML = legend;\n\t}\n\n\tonRendered(function(){\n\n\t\t//handle custom element needed if formatter is to be included in printed/downloaded output\n\t\tif(!(cell instanceof CellComponent)){\n\t\t\tvar holderEl = document.createElement(\"div\");\n\t\t\tholderEl.style.position = \"absolute\";\n\t\t\tholderEl.style.top = \"4px\";\n\t\t\tholderEl.style.bottom = \"4px\";\n\t\t\tholderEl.style.left = \"4px\";\n\t\t\tholderEl.style.right = \"4px\";\n\n\t\t\telement.appendChild(holderEl);\n\n\t\t\telement = holderEl;\n\t\t}\n\n\t\telement.appendChild(barContainer);\n\t\tbarContainer.appendChild(barEl);\n\n\t\tif(legend){\n\t\t\tbarContainer.appendChild(legendEl);\n\t\t}\n\t});\n\n\treturn \"\";\n}","export default function(cell, formatterParams, onRendered){\n\tcell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());\n\treturn \"\";\n}","export default function(cell, formatterParams, onRendered){\n\treturn '';\n}","export default function(cell, formatterParams, onRendered){\n\treturn '';\n}","export default function(cell, formatterParams, onRendered){\n\tvar content = document.createElement(\"span\");\n\tvar row = cell.getRow();\n\tvar table = cell.getTable();\n\n\trow.watchPosition((position) => {\n\t\tif (formatterParams.relativeToPage) {\n\t\t\tposition += table.modules.page.getPageSize() * (table.modules.page.getPage() - 1);\n\t\t}\n\t\tcontent.innerText = position;\n\t});\n\t\n\treturn content;\n}\n","export default function(cell, formatterParams, onRendered){\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\n\treturn \"
\";\n}","export default function(cell, formatterParams, onRendered){\n\tvar el = document.createElement(\"div\"),\n\tconfig = cell.getRow()._row.modules.responsiveLayout;\n\n\tel.classList.add(\"tabulator-responsive-collapse-toggle\");\n\t\n\tel.innerHTML = `\n \n \n\n\n\n \n`;\n\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\n\n\tfunction toggleList(isOpen){\n\t\tvar collapseEl = config.element;\n\n\t\tconfig.open = isOpen;\n\n\t\tif(collapseEl){\n\n\t\t\tif(config.open){\n\t\t\t\tel.classList.add(\"open\");\n\t\t\t\tcollapseEl.style.display = '';\n\t\t\t}else{\n\t\t\t\tel.classList.remove(\"open\");\n\t\t\t\tcollapseEl.style.display = 'none';\n\t\t\t}\n\t\t}\n\t}\n\n\tel.addEventListener(\"click\", function(e){\n\t\te.stopImmediatePropagation();\n\t\ttoggleList(!config.open);\n\t\tcell.getTable().rowManager.adjustTableSize();\n\t});\n\n\ttoggleList(config.open);\n\n\treturn el;\n}","import RowComponent from '../../../../core/row/RowComponent.js';\n\nexport default function(cell, formatterParams, onRendered){\n\tvar checkbox = document.createElement(\"input\");\n\tvar blocked = false;\n\n\tcheckbox.type = 'checkbox';\n\n\tcheckbox.setAttribute(\"aria-label\", \"Select Row\");\n\t\n\tif(this.table.modExists(\"selectRow\", true)){\n\n\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tif(typeof cell.getRow == 'function'){\n\t\t\tvar row = cell.getRow();\n\n\t\t\tif(row instanceof RowComponent){\n\n\t\t\t\tcheckbox.addEventListener(\"change\", (e) => {\n\t\t\t\t\tif(this.table.options.selectableRowsRangeMode === \"click\"){\n\t\t\t\t\t\tif(!blocked){\n\t\t\t\t\t\t\trow.toggleSelect();\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tblocked = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\trow.toggleSelect();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif(this.table.options.selectableRowsRangeMode === \"click\"){\n\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\tblocked = true;\n\t\t\t\t\t\tthis.table.modules.selectRow.handleComplexRowClick(row._row, e);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tcheckbox.checked = row.isSelected && row.isSelected();\n\t\t\t\tthis.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);\n\t\t\t}else{\n\t\t\t\tcheckbox = \"\";\n\t\t\t}\n\t\t}else {\n\t\t\tcheckbox.addEventListener(\"change\", (e) => {\n\t\t\t\tif(this.table.modules.selectRow.selectedRows.length){\n\t\t\t\t\tthis.table.deselectRow();\n\t\t\t\t}else {\n\t\t\t\t\tthis.table.selectRow(formatterParams.rowRange);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);\n\t\t}\n\t}\n\n\treturn checkbox;\n}","import Module from '../../core/Module.js';\n\nimport defaultFormatters from './defaults/formatters.js';\n\nclass Format extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.registerColumnOption(\"formatter\");\n\t\tthis.registerColumnOption(\"formatterParams\");\n\t\t\n\t\tthis.registerColumnOption(\"formatterPrint\");\n\t\tthis.registerColumnOption(\"formatterPrintParams\");\n\t\tthis.registerColumnOption(\"formatterClipboard\");\n\t\tthis.registerColumnOption(\"formatterClipboardParams\");\n\t\tthis.registerColumnOption(\"formatterHtmlOutput\");\n\t\tthis.registerColumnOption(\"formatterHtmlOutputParams\");\n\t\tthis.registerColumnOption(\"titleFormatter\");\n\t\tthis.registerColumnOption(\"titleFormatterParams\");\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"cell-format\", this.formatValue.bind(this));\n\t\tthis.subscribe(\"cell-rendered\", this.cellRendered.bind(this));\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"column-format\", this.formatHeader.bind(this));\n\t}\n\t\n\t//initialize column formatter\n\tinitializeColumn(column){\n\t\tcolumn.modules.format = this.lookupFormatter(column, \"\");\n\t\t\n\t\tif(typeof column.definition.formatterPrint !== \"undefined\"){\n\t\t\tcolumn.modules.format.print = this.lookupFormatter(column, \"Print\");\n\t\t}\n\t\t\n\t\tif(typeof column.definition.formatterClipboard !== \"undefined\"){\n\t\t\tcolumn.modules.format.clipboard = this.lookupFormatter(column, \"Clipboard\");\n\t\t}\n\t\t\n\t\tif(typeof column.definition.formatterHtmlOutput !== \"undefined\"){\n\t\t\tcolumn.modules.format.htmlOutput = this.lookupFormatter(column, \"HtmlOutput\");\n\t\t}\n\t}\n\t\n\tlookupFormatter(column, type){\n\t\tvar config = {params:column.definition[\"formatter\" + type + \"Params\"] || {}},\n\t\tformatter = column.definition[\"formatter\" + type];\n\t\t\n\t\t//set column formatter\n\t\tswitch(typeof formatter){\n\t\t\tcase \"string\":\n\t\t\t\tif(Format.formatters[formatter]){\n\t\t\t\t\tconfig.formatter = Format.formatters[formatter];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\n\t\t\t\t\tconfig.formatter = Format.formatters.plaintext;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t\tconfig.formatter = formatter;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tconfig.formatter = Format.formatters.plaintext;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\treturn config;\n\t}\n\t\n\tcellRendered(cell){\n\t\tif(cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered){\n\t\t\tcell.modules.format.renderedCallback();\n\t\t\tcell.modules.format.rendered = true;\n\t\t}\n\t}\n\t\n\t//return a formatted value for a column header\n\tformatHeader(column, title, el){\n\t\tvar formatter, params, onRendered, mockCell;\n\t\t\n\t\tif(column.definition.titleFormatter){\n\t\t\tformatter = this.getFormatter(column.definition.titleFormatter);\n\t\t\t\n\t\t\tonRendered = (callback) => {\n\t\t\t\tcolumn.titleFormatterRendered = callback;\n\t\t\t};\n\t\t\t\n\t\t\tmockCell = {\n\t\t\t\tgetValue:function(){\n\t\t\t\t\treturn title;\n\t\t\t\t},\n\t\t\t\tgetElement:function(){\n\t\t\t\t\treturn el;\n\t\t\t\t},\n\t\t\t\tgetType:function(){\n\t\t\t\t\treturn \"header\";\n\t\t\t\t},\n\t\t\t\tgetColumn:function(){\n\t\t\t\t\treturn column.getComponent();\n\t\t\t\t},\n\t\t\t\tgetTable:() => {\n\t\t\t\t\treturn this.table;\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tparams = column.definition.titleFormatterParams || {};\n\t\t\t\n\t\t\tparams = typeof params === \"function\" ? params() : params;\n\t\t\t\n\t\t\treturn formatter.call(this, mockCell, params, onRendered);\n\t\t}else{\n\t\t\treturn title;\n\t\t}\n\t}\n\t\n\t\n\t//return a formatted value for a cell\n\tformatValue(cell){\n\t\tvar component = cell.getComponent(),\n\t\tparams = typeof cell.column.modules.format.params === \"function\" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;\n\t\t\n\t\tfunction onRendered(callback){\n\t\t\tif(!cell.modules.format){\n\t\t\t\tcell.modules.format = {};\n\t\t\t}\n\t\t\t\n\t\t\tcell.modules.format.renderedCallback = callback;\n\t\t\tcell.modules.format.rendered = false;\n\t\t}\n\t\t\n\t\treturn cell.column.modules.format.formatter.call(this, component, params, onRendered);\n\t}\n\t\n\tformatExportValue(cell, type){\n\t\tvar formatter = cell.column.modules.format[type],\n\t\tparams;\n\t\t\n\t\tif(formatter){\n\t\t\tparams = typeof formatter.params === \"function\" ? formatter.params(cell.getComponent()) : formatter.params;\n\t\t\t\n\t\t\tfunction onRendered(callback){\n\t\t\t\tif(!cell.modules.format){\n\t\t\t\t\tcell.modules.format = {};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcell.modules.format.renderedCallback = callback;\n\t\t\t\tcell.modules.format.rendered = false;\n\t\t\t}\n\t\t\t\n\t\t\treturn formatter.formatter.call(this, cell.getComponent(), params, onRendered);\n\t\t\t\n\t\t}else{\n\t\t\treturn this.formatValue(cell);\n\t\t}\n\t}\n\t\n\tsanitizeHTML(value){\n\t\tif(value){\n\t\t\tvar entityMap = {\n\t\t\t\t'&': '&',\n\t\t\t\t'<': '<',\n\t\t\t\t'>': '>',\n\t\t\t\t'\"': '"',\n\t\t\t\t\"'\": ''',\n\t\t\t\t'/': '/',\n\t\t\t\t'`': '`',\n\t\t\t\t'=': '='\n\t\t\t};\n\t\t\t\n\t\t\treturn String(value).replace(/[&<>\"'`=/]/g, function (s) {\n\t\t\t\treturn entityMap[s];\n\t\t\t});\n\t\t}else{\n\t\t\treturn value;\n\t\t}\n\t}\n\t\n\temptyToSpace(value){\n\t\treturn value === null || typeof value === \"undefined\" || value === \"\" ? \" \" : value;\n\t}\n\t\n\t//get formatter for cell\n\tgetFormatter(formatter){\n\t\tswitch(typeof formatter){\n\t\t\tcase \"string\":\n\t\t\t\tif(Format.formatters[formatter]){\n\t\t\t\t\tformatter = Format.formatters[formatter];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\n\t\t\t\t\tformatter = Format.formatters.plaintext;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t//Custom formatter Function, do nothing\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tformatter = Format.formatters.plaintext;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\treturn formatter;\n\t}\n}\n\nFormat.moduleName = \"format\";\n\n//load defaults\nFormat.formatters = defaultFormatters;\n\nexport default Format;","import Module from '../../core/Module.js';\n\nclass FrozenColumns extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.leftColumns = [];\n\t\tthis.rightColumns = [];\n\t\tthis.initializationMode = \"left\";\n\t\tthis.active = false;\n\t\tthis.blocked = true;\n\t\t\n\t\tthis.registerColumnOption(\"frozen\");\n\t}\n\t\n\t//reset initial state\n\treset(){\n\t\tthis.initializationMode = \"left\";\n\t\tthis.leftColumns = [];\n\t\tthis.rightColumns = [];\n\t\tthis.active = false;\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"cell-layout\", this.layoutCell.bind(this));\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"column-width\", this.layout.bind(this));\n\t\tthis.subscribe(\"row-layout-after\", this.layoutRow.bind(this));\n\t\tthis.subscribe(\"table-layout\", this.layout.bind(this));\n\t\tthis.subscribe(\"columns-loading\", this.reset.bind(this));\n\t\t\n\t\tthis.subscribe(\"column-add\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"column-deleted\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"column-hide\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"column-show\", this.reinitializeColumns.bind(this));\n\t\tthis.subscribe(\"columns-loaded\", this.reinitializeColumns.bind(this));\n\t\t\n\t\tthis.subscribe(\"table-redraw\", this.layout.bind(this));\n\t\tthis.subscribe(\"layout-refreshing\", this.blockLayout.bind(this));\n\t\tthis.subscribe(\"layout-refreshed\", this.unblockLayout.bind(this));\n\t\tthis.subscribe(\"scrollbar-vertical\", this.adjustForScrollbar.bind(this));\n\t}\n\t\n\tblockLayout(){\n\t\tthis.blocked = true;\n\t}\n\t\n\tunblockLayout(){\n\t\tthis.blocked = false;\n\t}\n\t\n\tlayoutCell(cell){\n\t\tthis.layoutElement(cell.element, cell.column);\n\t}\n\t\n\treinitializeColumns(){\n\t\tthis.reset();\n\t\t\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\tthis.initializeColumn(column);\n\t\t});\n\n\t\tthis.layout();\n\t}\n\t\n\t//initialize specific column\n\tinitializeColumn(column){\n\t\tvar config = {margin:0, edge:false};\n\t\t\n\t\tif(!column.isGroup){\t\t\t\n\t\t\tif(this.frozenCheck(column)){\n\t\t\t\tconfig.position = this.initializationMode;\n\t\t\t\t\n\t\t\t\tif(this.initializationMode == \"left\"){\n\t\t\t\t\tthis.leftColumns.push(column);\n\t\t\t\t}else{\n\t\t\t\t\tthis.rightColumns.unshift(column);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.active = true;\n\t\t\t\t\n\t\t\t\tcolumn.modules.frozen = config;\n\t\t\t}else{\n\t\t\t\tthis.initializationMode = \"right\";\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfrozenCheck(column){\n\t\tif(column.parent.isGroup && column.definition.frozen){\n\t\t\tconsole.warn(\"Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups\");\n\t\t}\n\t\t\n\t\tif(column.parent.isGroup){\n\t\t\treturn this.frozenCheck(column.parent);\n\t\t}else{\n\t\t\treturn column.definition.frozen;\n\t\t}\n\t}\n\t\n\t//layout calculation rows\n\tlayoutCalcRows(){\n\t\tif(this.table.modExists(\"columnCalcs\")){\n\t\t\tif(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.topRow);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow){\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.botRow);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.modExists(\"groupRows\")){\n\t\t\t\tthis.layoutGroupCalcs(this.table.modules.groupRows.getGroups());\n\t\t\t}\n\t\t}\n\t}\n\t\n\tlayoutGroupCalcs(groups){\n\t\tgroups.forEach((group) => {\n\t\t\tif(group.calcs.top){\n\t\t\t\tthis.layoutRow(group.calcs.top);\n\t\t\t}\n\t\t\t\n\t\t\tif(group.calcs.bottom){\n\t\t\t\tthis.layoutRow(group.calcs.bottom);\n\t\t\t}\n\t\t\t\n\t\t\tif(group.groupList && group.groupList.length){\n\t\t\t\tthis.layoutGroupCalcs(group.groupList);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//calculate column positions and layout headers\n\tlayoutColumnPosition(allCells){\n\t\tvar leftParents = [];\n\t\t\n\t\tvar leftMargin = 0;\n\t\tvar rightMargin = 0;\n\t\t\n\t\tthis.leftColumns.forEach((column, i) => {\t\n\t\t\tcolumn.modules.frozen.marginValue = leftMargin;\n\t\t\tcolumn.modules.frozen.margin = column.modules.frozen.marginValue + \"px\";\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\tleftMargin += column.getWidth();\n\t\t\t}\n\t\t\t\n\t\t\tif(i == this.leftColumns.length - 1){\n\t\t\t\tcolumn.modules.frozen.edge = true;\n\t\t\t}else{\n\t\t\t\tcolumn.modules.frozen.edge = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(column.parent.isGroup){\n\t\t\t\tvar parentEl = this.getColGroupParentElement(column);\n\t\t\t\tif(!leftParents.includes(parentEl)){\n\t\t\t\t\tthis.layoutElement(parentEl, column);\n\t\t\t\t\tleftParents.push(parentEl);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tparentEl.classList.toggle(\"tabulator-frozen-left\", column.modules.frozen.edge && column.modules.frozen.position === \"left\");\n\t\t\t\tparentEl.classList.toggle(\"tabulator-frozen-right\", column.modules.frozen.edge && column.modules.frozen.position === \"right\");\n\t\t\t}else{\n\t\t\t\tthis.layoutElement(column.getElement(), column);\n\t\t\t}\n\t\t\t\n\t\t\tif(allCells){\n\t\t\t\tcolumn.cells.forEach((cell) => {\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.rightColumns.forEach((column, i) => {\n\t\t\t\n\t\t\tcolumn.modules.frozen.marginValue = rightMargin;\n\t\t\tcolumn.modules.frozen.margin = column.modules.frozen.marginValue + \"px\";\n\t\t\t\n\t\t\tif(column.visible){\n\t\t\t\trightMargin += column.getWidth();\n\t\t\t}\n\t\t\t\n\t\t\tif(i == this.rightColumns.length - 1){\n\t\t\t\tcolumn.modules.frozen.edge = true;\n\t\t\t}else{\n\t\t\t\tcolumn.modules.frozen.edge = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(column.parent.isGroup){\n\t\t\t\tthis.layoutElement(this.getColGroupParentElement(column), column);\n\t\t\t}else{\n\t\t\t\tthis.layoutElement(column.getElement(), column);\n\t\t\t}\n\t\t\t\n\t\t\tif(allCells){\n\t\t\t\tcolumn.cells.forEach((cell) => {\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\t\n\tgetColGroupParentElement(column){\n\t\treturn column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();\n\t}\n\t\n\t//layout columns appropriately\n\tlayout(){\t\n\t\tif(this.active && !this.blocked){\n\t\t\t//calculate left columns\n\t\t\tthis.layoutColumnPosition();\n\t\t\t\n\t\t\tthis.reinitializeRows();\n\t\t\t\n\t\t\tthis.layoutCalcRows();\n\t\t}\n\t}\n\t\n\treinitializeRows(){\n\t\tvar visibleRows = this.table.rowManager.getVisibleRows(true);\n\t\tvar otherRows = this.table.rowManager.getRows().filter(row => !visibleRows.includes(row));\n\t\t\n\t\totherRows.forEach((row) =>{\n\t\t\trow.deinitialize();\n\t\t});\n\t\t\n\t\tvisibleRows.forEach((row) =>{\n\t\t\tif(row.type === \"row\"){\n\t\t\t\tthis.layoutRow(row);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tlayoutRow(row){\n\t\tif(this.table.options.layout === \"fitDataFill\" && this.rightColumns.length){\n\t\t\tthis.table.rowManager.getTableElement().style.minWidth = \"calc(100% - \" + this.rightMargin + \")\";\n\t\t}\n\t\t\n\t\tthis.leftColumns.forEach((column) => {\n\t\t\tvar cell = row.getCell(column);\n\t\t\t\n\t\t\tif(cell){\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.rightColumns.forEach((column) => {\n\t\t\tvar cell = row.getCell(column);\n\t\t\t\n\t\t\tif(cell){\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tlayoutElement(element, column){\n\t\tvar position;\n\t\t\n\t\tif(column.modules.frozen && element){\n\t\t\telement.style.position = \"sticky\";\n\n\t\t\tif(this.table.rtl){\n\t\t\t\tposition = column.modules.frozen.position === \"left\" ? \"right\" : \"left\";\n\t\t\t}else{\n\t\t\t\tposition = column.modules.frozen.position;\n\t\t\t}\n\t\t\n\t\t\telement.style[position] = column.modules.frozen.margin;\n\n\t\t\telement.classList.add(\"tabulator-frozen\");\n\t\t\t\n\t\t\telement.classList.toggle(\"tabulator-frozen-left\", column.modules.frozen.edge && column.modules.frozen.position === \"left\");\n\t\t\telement.classList.toggle(\"tabulator-frozen-right\", column.modules.frozen.edge && column.modules.frozen.position === \"right\");\n\t\t}\n\t}\n\n\tadjustForScrollbar(width){\n\t\tif(this.rightColumns.length){\n\t\t\tthis.table.columnManager.getContentsElement().style.width = \"calc(100% - \" + width + \"px)\";\n\t\t}\n\t}\n\t\n\t_calcSpace(columns, index){\n\t\tvar width = 0;\n\t\t\n\t\tfor (let i = 0; i < index; i++){\n\t\t\tif(columns[i].visible){\n\t\t\t\twidth += columns[i].getWidth();\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn width;\n\t}\n}\n\nFrozenColumns.moduleName = \"frozenColumns\";\n\nexport default FrozenColumns;","import Module from '../../core/Module.js';\n\nclass FrozenRows extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.topElement = document.createElement(\"div\");\n\t\tthis.rows = [];\n\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"freeze\", this.freezeRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"unfreeze\", this.unfreezeRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"isFrozen\", this.isRowFrozen.bind(this));\n\n\t\t//register table options\n\t\tthis.registerTableOption(\"frozenRowsField\", \"id\"); //field to choose frozen rows by\n\t\tthis.registerTableOption(\"frozenRows\", false); //holder for frozen row identifiers\n\t}\n\n\tinitialize(){\n\t\tvar\tfragment = document.createDocumentFragment();\n\t\t\n\t\tthis.rows = [];\n\n\t\tthis.topElement.classList.add(\"tabulator-frozen-rows-holder\");\n\t\t\n\t\tfragment.appendChild(document.createElement(\"br\"));\n\t\tfragment.appendChild(this.topElement);\n\n\t\t// this.table.columnManager.element.append(this.topElement);\n\t\tthis.table.columnManager.getContentsElement().insertBefore(fragment, this.table.columnManager.headersElement.nextSibling);\n\n\t\tthis.subscribe(\"row-deleting\", this.detachRow.bind(this));\n\t\tthis.subscribe(\"rows-visible\", this.visibleRows.bind(this));\n\n\t\tthis.registerDisplayHandler(this.getRows.bind(this), 10);\n\n\t\tif(this.table.options.frozenRows){\n\t\t\tthis.subscribe(\"data-processed\", this.initializeRows.bind(this));\n\t\t\tthis.subscribe(\"row-added\", this.initializeRow.bind(this));\n\t\t\tthis.subscribe(\"table-redrawing\", this.resizeHolderWidth.bind(this));\n\t\t\tthis.subscribe(\"column-resized\", this.resizeHolderWidth.bind(this));\n\t\t\tthis.subscribe(\"column-show\", this.resizeHolderWidth.bind(this));\n\t\t\tthis.subscribe(\"column-hide\", this.resizeHolderWidth.bind(this));\n\t\t}\n\n\t\tthis.resizeHolderWidth();\n\t}\n\n\tresizeHolderWidth(){\n\t\tthis.topElement.style.minWidth = this.table.columnManager.headersElement.offsetWidth + \"px\";\n\t}\n\n\tinitializeRows(){\n\t\tthis.table.rowManager.getRows().forEach((row) => {\n\t\t\tthis.initializeRow(row);\n\t\t});\n\t}\n\n\tinitializeRow(row){\n\t\tvar frozenRows = this.table.options.frozenRows,\n\t\trowType = typeof frozenRows;\n\n\t\tif(rowType === \"number\"){\n\t\t\tif(row.getPosition() && (row.getPosition() + this.rows.length) <= frozenRows){\n\t\t\t\tthis.freezeRow(row);\n\t\t\t}\n\t\t}else if(rowType === \"function\"){\n\t\t\tif(frozenRows.call(this.table, row.getComponent())){\n\t\t\t\tthis.freezeRow(row);\n\t\t\t}\n\t\t}else if(Array.isArray(frozenRows)){\n\t\t\tif(frozenRows.includes(row.data[this.options(\"frozenRowsField\")])){\n\t\t\t\tthis.freezeRow(row);\n\t\t\t}\n\t\t}\n\t}\n\n\tisRowFrozen(row){\n\t\tvar index = this.rows.indexOf(row);\n\t\treturn index > -1;\n\t}\n\n\tisFrozen(){\n\t\treturn !!this.rows.length;\n\t}\n\n\tvisibleRows(viewable, rows){\n\t\tthis.rows.forEach((row) => {\n\t\t\trows.push(row);\n\t\t});\n\n\t\treturn rows;\n\t}\n\n\t//filter frozen rows out of display data\n\tgetRows(rows){\n\t\tvar output = rows.slice(0);\n\n\t\tthis.rows.forEach(function(row){\n\t\t\tvar index = output.indexOf(row);\n\n\t\t\tif(index > -1){\n\t\t\t\toutput.splice(index, 1);\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\tfreezeRow(row){\n\t\tif(!row.modules.frozen){\n\t\t\trow.modules.frozen = true;\n\t\t\tthis.topElement.appendChild(row.getElement());\n\t\t\trow.initialize();\n\t\t\trow.normalizeHeight();\n\t\t\n\t\t\tthis.rows.push(row);\n\n\t\t\tthis.refreshData(false, \"display\");\n\n\t\t\tthis.table.rowManager.adjustTableSize();\n\n\t\t\tthis.styleRows();\n\n\t\t}else{\n\t\t\tconsole.warn(\"Freeze Error - Row is already frozen\");\n\t\t}\n\t}\n\n\tunfreezeRow(row){\n\t\tif(row.modules.frozen){\n\n\t\t\trow.modules.frozen = false;\n\n\t\t\tthis.detachRow(row);\n\n\t\t\tthis.table.rowManager.adjustTableSize();\n\n\t\t\tthis.refreshData(false, \"display\");\n\n\t\t\tif(this.rows.length){\n\t\t\t\tthis.styleRows();\n\t\t\t}\n\n\t\t}else{\n\t\t\tconsole.warn(\"Freeze Error - Row is already unfrozen\");\n\t\t}\n\t}\n\n\tdetachRow(row){\n\t\tvar index = this.rows.indexOf(row);\n\n\t\tif(index > -1){\n\t\t\tvar rowEl = row.getElement();\n\n\t\t\tif(rowEl.parentNode){\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t}\n\n\t\t\tthis.rows.splice(index, 1);\n\t\t}\n\t}\n\n\tstyleRows(row){\n\t\tthis.rows.forEach((row, i) => {\n\t\t\tthis.table.rowManager.styleRow(row, i);\n\t\t});\n\t}\n}\n\nFrozenRows.moduleName = \"frozenRows\";\n\nexport default FrozenRows;","//public group object\nclass GroupComponent {\n\tconstructor (group){\n\t\tthis._group = group;\n\t\tthis.type = \"GroupComponent\";\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function(target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t}else{\n\t\t\t\t\treturn target._group.groupManager.table.componentFunctionBinder.handle(\"group\", target._group, name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tgetKey(){\n\t\treturn this._group.key;\n\t}\n\n\tgetField(){\n\t\treturn this._group.field;\n\t}\n\n\tgetElement(){\n\t\treturn this._group.element;\n\t}\n\n\tgetRows(){\n\t\treturn this._group.getRows(true);\n\t}\n\n\tgetSubGroups(){\n\t\treturn this._group.getSubGroups(true);\n\t}\n\n\tgetParentGroup(){\n\t\treturn this._group.parent ? this._group.parent.getComponent() : false;\n\t}\n\n\tisVisible(){\n\t\treturn this._group.visible;\n\t}\n\n\tshow(){\n\t\tthis._group.show();\n\t}\n\n\thide(){\n\t\tthis._group.hide();\n\t}\n\n\ttoggle(){\n\t\tthis._group.toggleVisibility();\n\t}\n\n\tscrollTo(position, ifVisible){\n\t\treturn this._group.groupManager.table.rowManager.scrollToRow(this._group, position, ifVisible);\n\t}\n\n\t_getSelf(){\n\t\treturn this._group;\n\t}\n\n\tgetTable(){\n\t\treturn this._group.groupManager.table;\n\t}\n}\n\nexport default GroupComponent;","import Helpers from '../../core/tools/Helpers.js';\nimport GroupComponent from './GroupComponent.js';\n\n//Group functions\nclass Group{\n\t\n\tconstructor(groupManager, parent, level, key, field, generator, oldGroup){\n\t\tthis.groupManager = groupManager;\n\t\tthis.parent = parent;\n\t\tthis.key = key;\n\t\tthis.level = level;\n\t\tthis.field = field;\n\t\tthis.hasSubGroups = level < (groupManager.groupIDLookups.length - 1);\n\t\tthis.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;\n\t\tthis.type = \"group\"; //type of element\n\t\tthis.old = oldGroup;\n\t\tthis.rows = [];\n\t\tthis.groups = [];\n\t\tthis.groupList = [];\n\t\tthis.generator = generator;\n\t\tthis.element = false;\n\t\tthis.elementContents = false;\n\t\tthis.height = 0;\n\t\tthis.outerHeight = 0;\n\t\tthis.initialized = false;\n\t\tthis.calcs = {};\n\t\tthis.initialized = false;\n\t\tthis.modules = {};\n\t\tthis.arrowElement = false;\n\t\t\n\t\tthis.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== \"undefined\" ? groupManager.startOpen[level] : groupManager.startOpen[0]);\n\t\t\n\t\tthis.component = null;\n\t\t\n\t\tthis.createElements();\n\t\tthis.addBindings();\n\t\t\n\t\tthis.createValueGroups();\n\t}\n\t\n\twipe(elementsOnly){\n\t\tif(!elementsOnly){\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\t\tgroup.wipe();\n\t\t\t\t});\n\t\t\t}else{\n\t\t\t\tthis.rows.forEach((row) => {\n\t\t\t\t\tif(row.modules){\n\t\t\t\t\t\tdelete row.modules.group;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.element = false;\n\t\tthis.arrowElement = false;\n\t\tthis.elementContents = false;\n\t}\n\t\n\tcreateElements(){\n\t\tvar arrow = document.createElement(\"div\");\n\t\tarrow.classList.add(\"tabulator-arrow\");\n\t\t\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.classList.add(\"tabulator-row\");\n\t\tthis.element.classList.add(\"tabulator-group\");\n\t\tthis.element.classList.add(\"tabulator-group-level-\" + this.level);\n\t\tthis.element.setAttribute(\"role\", \"rowgroup\");\n\t\t\n\t\tthis.arrowElement = document.createElement(\"div\");\n\t\tthis.arrowElement.classList.add(\"tabulator-group-toggle\");\n\t\tthis.arrowElement.appendChild(arrow);\n\t\t\n\t\t//setup movable rows\n\t\tif(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists(\"moveRow\")){\n\t\t\tthis.groupManager.table.modules.moveRow.initializeGroupHeader(this);\n\t\t}\n\t}\n\t\n\tcreateValueGroups(){\n\t\tvar level = this.level + 1;\n\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\n\t\t\tthis.groupManager.allowedValues[level].forEach((value) => {\n\t\t\t\tthis._createGroup(value, level);\n\t\t\t});\n\t\t}\n\t}\n\t\n\taddBindings(){\n\t\tvar toggleElement;\n\t\t\n\t\tif(this.groupManager.table.options.groupToggleElement){\n\t\t\ttoggleElement = this.groupManager.table.options.groupToggleElement == \"arrow\" ? this.arrowElement : this.element;\n\t\t\t\n\t\t\ttoggleElement.addEventListener(\"click\", (e) => {\n\t\t\t\tif(this.groupManager.table.options.groupToggleElement === \"arrow\"){\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t}\n\n\t\t\t\t//allow click event to propagate before toggling visibility\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.toggleVisibility();\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\t\n\t_createGroup(groupID, level){\n\t\tvar groupKey = level + \"_\" + groupID;\n\t\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\t\t\n\t\tthis.groups[groupKey] = group;\n\t\tthis.groupList.push(group);\n\t}\n\t\n\t_addRowToGroup(row){\n\t\t\n\t\tvar level = this.level + 1;\n\t\t\n\t\tif(this.hasSubGroups){\n\t\t\tvar groupID = this.groupManager.groupIDLookups[level].func(row.getData()),\n\t\t\tgroupKey = level + \"_\" + groupID;\n\t\t\t\n\t\t\tif(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){\n\t\t\t\tif(this.groups[groupKey]){\n\t\t\t\t\tthis.groups[groupKey].addRow(row);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(!this.groups[groupKey]){\n\t\t\t\t\tthis._createGroup(groupID, level);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.groups[groupKey].addRow(row);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_addRow(row){\n\t\tthis.rows.push(row);\n\t\trow.modules.group = this;\n\t}\n\t\n\tinsertRow(row, to, after){\n\t\tvar data = this.conformRowData({});\n\t\t\n\t\trow.updateData(data);\n\t\t\n\t\tvar toIndex = this.rows.indexOf(to);\n\t\t\n\t\tif(toIndex > -1){\n\t\t\tif(after){\n\t\t\t\tthis.rows.splice(toIndex+1, 0, row);\n\t\t\t}else{\n\t\t\t\tthis.rows.splice(toIndex, 0, row);\n\t\t\t}\n\t\t}else{\n\t\t\tif(after){\n\t\t\t\tthis.rows.push(row);\n\t\t\t}else{\n\t\t\t\tthis.rows.unshift(row);\n\t\t\t}\n\t\t}\n\t\t\n\t\trow.modules.group = this;\n\t\t\n\t\t// this.generateGroupHeaderContents();\n\t\t\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\t\n\t\tthis.groupManager.updateGroupRows(true);\n\t}\n\t\n\tscrollHeader(left){\n\t\tif(this.arrowElement){\n\t\t\tthis.arrowElement.style.marginLeft = left;\n\t\t\t\n\t\t\tthis.groupList.forEach(function(child){\n\t\t\t\tchild.scrollHeader(left);\n\t\t\t});\n\t\t}\n\t}\n\t\n\tgetRowIndex(row){}\n\t\n\t//update row data to match grouping constraints\n\tconformRowData(data){\n\t\tif(this.field){\n\t\t\tdata[this.field] = this.key;\n\t\t}else{\n\t\t\tconsole.warn(\"Data Conforming Error - Cannot conform row data to match new group as groupBy is a function\");\n\t\t}\n\t\t\n\t\tif(this.parent){\n\t\t\tdata = this.parent.conformRowData(data);\n\t\t}\n\t\t\n\t\treturn data;\n\t}\n\t\n\tremoveRow(row){\n\t\tvar index = this.rows.indexOf(row);\n\t\tvar el = row.getElement();\n\t\t\n\t\tif(index > -1){\n\t\t\tthis.rows.splice(index, 1);\n\t\t}\n\t\t\n\t\tif(!this.groupManager.table.options.groupValues && !this.rows.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}\t\t\n\t\t\t\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t\t\n\t\t}else{\n\t\t\t\n\t\t\tif(el.parentNode){\n\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t}\n\t\t\t\n\t\t\tif(!this.groupManager.blockRedraw){\n\t\t\t\tthis.generateGroupHeaderContents();\n\t\t\t\t\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\"){\n\t\t\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t}\n\t\n\tremoveGroup(group){\n\t\tvar groupKey = group.level + \"_\" + group.key,\n\t\tindex;\n\t\t\n\t\tif(this.groups[groupKey]){\n\t\t\tdelete this.groups[groupKey];\n\t\t\t\n\t\t\tindex = this.groupList.indexOf(group);\n\t\t\t\n\t\t\tif(index > -1){\n\t\t\t\tthis.groupList.splice(index, 1);\n\t\t\t}\n\t\t\t\n\t\t\tif(!this.groupList.length){\n\t\t\t\tif(this.parent){\n\t\t\t\t\tthis.parent.removeGroup(this);\n\t\t\t\t}else{\n\t\t\t\t\tthis.groupManager.removeGroup(this);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tgetHeadersAndRows(){\n\t\tvar output = [];\n\t\t\n\t\toutput.push(this);\n\t\t\n\t\tthis._visSet();\n\t\t\n\t\t\n\t\tif(this.calcs.top){\n\t\t\tthis.calcs.top.detachElement();\n\t\t\tthis.calcs.top.deleteCells();\n\t\t}\n\t\t\n\t\tif(this.calcs.bottom){\n\t\t\tthis.calcs.bottom.detachElement();\n\t\t\tthis.calcs.bottom.deleteCells();\n\t\t}\n\t\t\n\t\t\n\t\t\n\t\tif(this.visible){\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\t\toutput = output.concat(group.getHeadersAndRows());\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tif(this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\n\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\n\t\t\t\t\toutput.push(this.calcs.top);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\toutput = output.concat(this.rows);\n\t\t\t\t\n\t\t\t\tif(this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\n\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\n\t\t\t\t\toutput.push(this.calcs.bottom);\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tif(!this.groupList.length && this.groupManager.table.options.columnCalcs != \"table\"){\n\t\t\t\t\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\")){\n\t\t\t\t\tif(this.groupManager.table.modules.columnCalcs.hasTopCalcs()){\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\n\t\t\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\n\t\t\t\t\t\t\toutput.push(this.calcs.top);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.groupManager.table.options.groupClosedShowCalcs){\n\t\t\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\n\t\t\t\t\t\t\toutput.push(this.calcs.bottom);\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\t\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetData(visible, transform){\n\t\tvar output = [];\n\t\t\n\t\tthis._visSet();\n\t\t\n\t\tif(!visible || (visible && this.visible)){\n\t\t\tthis.rows.forEach((row) => {\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetRowCount(){\n\t\tvar count = 0;\n\t\t\n\t\tif(this.groupList.length){\n\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\tcount += group.getRowCount();\n\t\t\t});\n\t\t}else{\n\t\t\tcount = this.rows.length;\n\t\t}\n\t\treturn count;\n\t}\n\n\t\n\ttoggleVisibility(){\n\t\tif(this.visible){\n\t\t\tthis.hide();\n\t\t}else{\n\t\t\tthis.show();\n\t\t}\n\t}\n\t\n\thide(){\n\t\tthis.visible = false;\n\t\t\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"basic\" && !this.groupManager.table.options.pagination){\n\t\t\t\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\n\t\t\t\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\t\t\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\n\t\t\t\t\t\n\t\t\t\t\trows.forEach((row) => {\n\t\t\t\t\t\trow.detachElement();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tthis.rows.forEach((row) => {\n\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t\t\n\t\t}else{\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t}\n\t\t\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), false);\n\t}\n\t\n\tshow(){\n\t\tthis.visible = true;\n\t\t\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"basic\" && !this.groupManager.table.options.pagination){\n\t\t\t\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\n\t\t\t\n\t\t\tvar prev = this.generateElement();\n\t\t\t\n\t\t\tif(this.groupList.length){\n\t\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\n\t\t\t\t\t\n\t\t\t\t\trows.forEach((row) => {\n\t\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\n\t\t\t\t\t\trow.initialize();\n\t\t\t\t\t\tprev = rowEl;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tthis.rows.forEach((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\t\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t}else{\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t}\n\t\t\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), true);\n\t}\n\t\n\t_visSet(){\n\t\tvar data = [];\n\t\t\n\t\tif(typeof this.visible == \"function\"){\n\t\t\t\n\t\t\tthis.rows.forEach(function(row){\n\t\t\t\tdata.push(row.getData());\n\t\t\t});\n\t\t\t\n\t\t\tthis.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());\n\t\t}\n\t}\n\t\n\tgetRowGroup(row){\n\t\tvar match = false;\n\t\tif(this.groupList.length){\n\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\tvar result = group.getRowGroup(row);\n\t\t\t\t\n\t\t\t\tif(result){\n\t\t\t\t\tmatch = result;\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tif(this.rows.find(function(item){\n\t\t\t\treturn item === row;\n\t\t\t})){\n\t\t\t\tmatch = this;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn match;\n\t}\n\t\n\tgetSubGroups(component){\n\t\tvar output = [];\n\t\t\n\t\tthis.groupList.forEach(function(child){\n\t\t\toutput.push(component ? child.getComponent() : child);\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetRows(component, includeChildren){\n\t\tvar output = [];\n\t\t\n\t\tif(includeChildren && this.groupList.length){\n\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\toutput = output.concat(group.getRows(component, includeChildren));\n\t\t\t});\n\t\t}else{\n\t\t\tthis.rows.forEach(function(row){\n\t\t\t\toutput.push(component ? row.getComponent() : row);\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgenerateGroupHeaderContents(){\n\t\tvar data = [];\n\t\t\n\t\tvar rows = this.getRows(false, true);\n\t\t\n\t\trows.forEach(function(row){\n\t\t\tdata.push(row.getData());\n\t\t});\n\t\t\n\t\tthis.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());\n\t\t\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\n\t\t\n\t\tif(typeof this.elementContents === \"string\"){\n\t\t\tthis.element.innerHTML = this.elementContents;\n\t\t}else{\n\t\t\tthis.element.appendChild(this.elementContents);\n\t\t}\n\t\t\n\t\tthis.element.insertBefore(this.arrowElement, this.element.firstChild);\n\t}\n\t\n\tgetPath(path = []) {\n\t\tpath.unshift(this.key);\n\t\tif(this.parent) {\n\t\t\tthis.parent.getPath(path);\n\t\t}\n\t\treturn path;\n\t}\n\t\n\t////////////// Standard Row Functions //////////////\n\t\n\tgetElement(){\n\t\treturn this.elementContents ? this.element : this.generateElement();\n\t}\n\t\n\tgenerateElement(){\n\t\tthis.addBindings = false;\n\t\t\n\t\tthis._visSet();\n\t\t\n\t\tif(this.visible){\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\n\t\t}else{\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\n\t\t}\n\t\t\n\t\tfor(var i = 0; i < this.element.childNodes.length; ++i){\n\t\t\tthis.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);\n\t\t}\n\t\t\n\t\tthis.generateGroupHeaderContents();\n\t\t\n\t\t// this.addBindings();\n\t\t\n\t\treturn this.element;\n\t}\n\t\n\tdetachElement(){\n\t\tif (this.element && this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\t}\n\t\n\t//normalize the height of elements in the row\n\tnormalizeHeight(){\n\t\tthis.setHeight(this.element.clientHeight);\n\t}\n\t\n\tinitialize(force){\n\t\tif(!this.initialized || force){\n\t\t\tthis.normalizeHeight();\n\t\t\tthis.initialized = true;\n\t\t}\n\t}\n\t\n\treinitialize(){\n\t\tthis.initialized = false;\n\t\tthis.height = 0;\n\t\t\n\t\tif(Helpers.elVisible(this.element)){\n\t\t\tthis.initialize(true);\n\t\t}\n\t}\n\t\n\tsetHeight(height){\n\t\tif(this.height != height){\n\t\t\tthis.height = height;\n\t\t\tthis.outerHeight = this.element.offsetHeight;\n\t\t}\n\t}\n\t\n\t//return rows outer height\n\tgetHeight(){\n\t\treturn this.outerHeight;\n\t}\n\t\n\tgetGroup(){\n\t\treturn this;\n\t}\n\t\n\treinitializeHeight(){}\n\t\n\tcalcHeight(){}\n\t\n\tsetCellHeight(){}\n\t\n\tclearCellHeight(){}\n\t\n\tdeinitializeHeight(){}\n\n\trendered(){}\n\t\n\t//////////////// Object Generation /////////////////\n\tgetComponent(){\n\t\tif(!this.component){\n\t\t\tthis.component = new GroupComponent(this);\n\t\t}\n\t\t\n\t\treturn this.component;\n\t}\n}\n\nexport default Group;","import Module from '../../core/Module.js';\n\nimport Group from './Group.js';\n\nclass GroupRows extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.groupIDLookups = false; //enable table grouping and set field to group by\n\t\tthis.startOpen = [function(){return false;}]; //starting state of group\n\t\tthis.headerGenerator = [function(){return \"\";}];\n\t\tthis.groupList = []; //ordered list of groups\n\t\tthis.allowedValues = false;\n\t\tthis.groups = {}; //hold row groups\n\t\t\n\t\tthis.displayHandler = this.getRows.bind(this);\n\n\t\tthis.blockRedraw = false;\n\t\t\n\t\t//register table options\n\t\tthis.registerTableOption(\"groupBy\", false); //enable table grouping and set field to group by\n\t\tthis.registerTableOption(\"groupStartOpen\", true); //starting state of group\n\t\tthis.registerTableOption(\"groupValues\", false);\n\t\tthis.registerTableOption(\"groupUpdateOnCellEdit\", false);\n\t\tthis.registerTableOption(\"groupHeader\", false); //header generation function\n\t\tthis.registerTableOption(\"groupHeaderPrint\", null);\n\t\tthis.registerTableOption(\"groupHeaderClipboard\", null);\n\t\tthis.registerTableOption(\"groupHeaderHtmlOutput\", null);\n\t\tthis.registerTableOption(\"groupHeaderDownload\", null);\n\t\tthis.registerTableOption(\"groupToggleElement\", \"arrow\");\n\t\tthis.registerTableOption(\"groupClosedShowCalcs\", false);\n\t\t\n\t\t//register table functions\n\t\tthis.registerTableFunction(\"setGroupBy\", this.setGroupBy.bind(this));\n\t\tthis.registerTableFunction(\"setGroupValues\", this.setGroupValues.bind(this));\n\t\tthis.registerTableFunction(\"setGroupStartOpen\", this.setGroupStartOpen.bind(this));\n\t\tthis.registerTableFunction(\"setGroupHeader\", this.setGroupHeader.bind(this));\n\t\tthis.registerTableFunction(\"getGroups\", this.userGetGroups.bind(this));\n\t\tthis.registerTableFunction(\"getGroupedData\", this.userGetGroupedData.bind(this));\n\t\t\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"getGroup\", this.rowGetGroup.bind(this));\n\t}\n\t\n\t//initialize group configuration\n\tinitialize(){\n\t\tthis.subscribe(\"table-destroy\", this._blockRedrawing.bind(this));\n\t\tthis.subscribe(\"rows-wipe\", this._blockRedrawing.bind(this));\n\t\tthis.subscribe(\"rows-wiped\", this._restore_redrawing.bind(this));\n\n\t\tif(this.table.options.groupBy){\n\t\t\tif(this.table.options.groupUpdateOnCellEdit){\n\t\t\t\tthis.subscribe(\"cell-value-updated\", this.cellUpdated.bind(this));\n\t\t\t\tthis.subscribe(\"row-data-changed\", this.reassignRowToGroup.bind(this), 0);\n\t\t\t}\n\t\t\t\n\t\t\tthis.subscribe(\"table-built\", this.configureGroupSetup.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"row-deleting\", this.rowDeleting.bind(this));\n\t\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\n\t\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHeaders.bind(this));\n\t\t\tthis.subscribe(\"rows-wipe\", this.wipe.bind(this));\n\t\t\tthis.subscribe(\"rows-added\", this.rowsUpdated.bind(this));\n\t\t\tthis.subscribe(\"row-moving\", this.rowMoving.bind(this));\n\t\t\tthis.subscribe(\"row-adding-index\", this.rowAddingIndex.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"rows-sample\", this.rowSample.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"render-virtual-fill\", this.virtualRenderFill.bind(this));\n\t\t\t\n\t\t\tthis.registerDisplayHandler(this.displayHandler, 20);\n\t\t\t\n\t\t\tthis.initialized = true;\n\t\t}\n\t}\n\t\n\t_blockRedrawing(){\n\t\tthis.blockRedraw = true;\n\t}\n\n\t_restore_redrawing(){\n\t\tthis.blockRedraw = false;\n\t}\n\n\tconfigureGroupSetup(){\n\t\tif(this.table.options.groupBy){\n\t\t\tvar groupBy = this.table.options.groupBy,\n\t\t\tstartOpen = this.table.options.groupStartOpen,\n\t\t\tgroupHeader = this.table.options.groupHeader;\n\t\t\t\n\t\t\tthis.allowedValues = this.table.options.groupValues;\n\t\t\t\n\t\t\tif(Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length){\n\t\t\t\tconsole.warn(\"Error creating group headers, groupHeader array is shorter than groupBy array\");\n\t\t\t}\n\t\t\t\n\t\t\tthis.headerGenerator = [function(){return \"\";}];\n\t\t\tthis.startOpen = [function(){return false;}]; //starting state of group\n\t\t\t\n\t\t\tthis.langBind(\"groups|item\", (langValue, lang) => {\n\t\t\t\tthis.headerGenerator[0] = (value, count, data) => { //header layout function\n\t\t\t\t\treturn (typeof value === \"undefined\" ? \"\" : value) + \"(\" + count + \" \" + ((count === 1) ? langValue : lang.groups.items) + \")\";\n\t\t\t\t};\n\t\t\t});\n\t\t\t\n\t\t\tthis.groupIDLookups = [];\n\t\t\t\n\t\t\tif(groupBy){\n\t\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"table\" && this.table.options.columnCalcs != \"both\"){\n\t\t\t\t\tthis.table.modules.columnCalcs.removeCalcs();\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"group\"){\n\t\t\t\t\t\n\t\t\t\t\tvar cols = this.table.columnManager.getRealColumns();\n\t\t\t\t\t\n\t\t\t\t\tcols.forEach((col) => {\n\t\t\t\t\t\tif(col.definition.topCalc){\n\t\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeTopRow();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(col.definition.bottomCalc){\n\t\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeBottomRow();\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\t\n\t\t\tif(!Array.isArray(groupBy)){\n\t\t\t\tgroupBy = [groupBy];\n\t\t\t}\n\t\t\t\n\t\t\tgroupBy.forEach((group, i) => {\n\t\t\t\tvar lookupFunc, column;\n\t\t\t\t\n\t\t\t\tif(typeof group == \"function\"){\n\t\t\t\t\tlookupFunc = group;\n\t\t\t\t}else{\n\t\t\t\t\tcolumn = this.table.columnManager.getColumnByField(group);\n\t\t\t\t\t\n\t\t\t\t\tif(column){\n\t\t\t\t\t\tlookupFunc = function(data){\n\t\t\t\t\t\t\treturn column.getFieldValue(data);\n\t\t\t\t\t\t};\n\t\t\t\t\t}else{\n\t\t\t\t\t\tlookupFunc = function(data){\n\t\t\t\t\t\t\treturn data[group];\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.groupIDLookups.push({\n\t\t\t\t\tfield: typeof group === \"function\" ? false : group,\n\t\t\t\t\tfunc:lookupFunc,\n\t\t\t\t\tvalues:this.allowedValues ? this.allowedValues[i] : false,\n\t\t\t\t});\n\t\t\t});\n\t\t\t\n\t\t\tif(startOpen){\n\t\t\t\tif(!Array.isArray(startOpen)){\n\t\t\t\t\tstartOpen = [startOpen];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tstartOpen.forEach((level) => {\n\t\t\t\t\tlevel = typeof level == \"function\" ? level : function(){return true;};\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.startOpen = startOpen;\n\t\t\t}\n\t\t\t\n\t\t\tif(groupHeader){\n\t\t\t\tthis.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];\n\t\t\t}\n\t\t}else{\n\t\t\tthis.groupList = [];\n\t\t\tthis.groups = {};\n\t\t}\n\t}\n\t\n\trowSample(rows, prevValue){\n\t\tif(this.table.options.groupBy){\n\t\t\tvar group = this.getGroups(false)[0];\n\t\t\t\n\t\t\tprevValue.push(group.getRows(false)[0]);\n\t\t}\n\t\t\n\t\treturn prevValue;\n\t}\n\t\n\tvirtualRenderFill(){\n\t\tvar el = this.table.rowManager.tableElement;\n\t\tvar rows = this.table.rowManager.getVisibleRows();\n\t\t\n\t\tif(this.table.options.groupBy){\n\t\t\trows = rows.filter((row) => {\n\t\t\t\treturn row.type !== \"group\";\n\t\t\t});\n\t\t\t\n\t\t\tel.style.minWidth = !rows.length ? this.table.columnManager.getWidth() + \"px\" : \"\";\n\t\t}else{\n\t\t\treturn rows;\n\t\t}\n\t}\n\t\n\trowAddingIndex(row, index, top){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.assignRowToGroup(row);\n\t\t\t\n\t\t\tvar groupRows = row.modules.group.rows;\n\t\t\t\n\t\t\tif(groupRows.length > 1){\n\t\t\t\tif(!index || (index && groupRows.indexOf(index) == -1)){\n\t\t\t\t\tif(top){\n\t\t\t\t\t\tif(groupRows[0] !== row){\n\t\t\t\t\t\t\tindex = groupRows[0];\n\t\t\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(groupRows[groupRows.length -1] !== row){\n\t\t\t\t\t\t\tindex = groupRows[groupRows.length -1];\n\t\t\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn index;\n\t\t}\n\t}\n\t\n\ttrackChanges(){\n\t\tthis.dispatch(\"group-changed\");\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\tsetGroupBy(groups){\n\t\tthis.table.options.groupBy = groups;\n\t\t\n\t\tif(!this.initialized){\n\t\t\tthis.initialize();\n\t\t}\n\t\t\n\t\tthis.configureGroupSetup();\n\n\t\tif(!groups && this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs === true){\n\t\t\tthis.table.modules.columnCalcs.reinitializeCalcs();\n\t\t}\n\t\t\n\t\tthis.refreshData();\n\t\t\n\t\tthis.trackChanges();\n\t}\n\t\n\tsetGroupValues(groupValues){\n\t\tthis.table.options.groupValues = groupValues;\n\t\tthis.configureGroupSetup();\n\t\tthis.refreshData();\n\t\t\n\t\tthis.trackChanges();\n\t}\n\t\n\tsetGroupStartOpen(values){\n\t\tthis.table.options.groupStartOpen = values;\n\t\tthis.configureGroupSetup();\n\t\t\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.refreshData();\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t}else{\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\n\t\t}\n\t}\n\t\n\tsetGroupHeader(values){\n\t\tthis.table.options.groupHeader = values;\n\t\tthis.configureGroupSetup();\n\t\t\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.refreshData();\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t}else{\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\n\t\t}\n\t}\n\t\n\tuserGetGroups(values){\n\t\treturn this.getGroups(true);\n\t}\n\t\n\t// get grouped table data in the same format as getData()\n\tuserGetGroupedData(){\n\t\treturn this.table.options.groupBy ? this.getGroupedData() : this.getData();\n\t}\n\t\n\t\n\t///////////////////////////////////////\n\t///////// Component Functions /////////\n\t///////////////////////////////////////\n\t\n\trowGetGroup(row){\n\t\treturn row.modules.group ? row.modules.group.getComponent() : false;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\trowMoving(from, to, after){\n\t\tif(this.table.options.groupBy){\n\t\t\tif(!after && to instanceof Group){\n\t\t\t\tto = this.table.rowManager.prevDisplayRow(from) || to;\n\t\t\t}\n\t\t\t\n\t\t\tvar toGroup = to instanceof Group ? to : to.modules.group;\n\t\t\tvar fromGroup = from instanceof Group ? from : from.modules.group;\n\t\t\t\n\t\t\tif(toGroup === fromGroup){\n\t\t\t\tthis.table.rowManager.moveRowInArray(toGroup.rows, from, to, after);\n\t\t\t}else{\n\t\t\t\tif(fromGroup){\n\t\t\t\t\tfromGroup.removeRow(from);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ttoGroup.insertRow(from, to, after);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\trowDeleting(row){\n\t\t//remove from group\n\t\tif(this.table.options.groupBy && row.modules.group){\n\t\t\trow.modules.group.removeRow(row);\n\t\t}\n\t}\n\t\n\trowsUpdated(row){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.updateGroupRows(true);\n\t\t}\t\n\t}\n\t\n\tcellUpdated(cell){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.reassignRowToGroup(cell.row);\n\t\t}\n\t}\n\t\n\t//return appropriate rows with group headers\n\tgetRows(rows){\n\t\tif(this.table.options.groupBy && this.groupIDLookups.length){\n\t\t\t\n\t\t\tthis.dispatchExternal(\"dataGrouping\");\n\t\t\t\n\t\t\tthis.generateGroups(rows);\n\t\t\t\n\t\t\tif(this.subscribedExternal(\"dataGrouped\")){\n\t\t\t\tthis.dispatchExternal(\"dataGrouped\", this.getGroups(true));\n\t\t\t}\n\t\t\t\n\t\t\treturn this.updateGroupRows();\n\t\t\t\n\t\t}else{\n\t\t\treturn rows.slice(0);\n\t\t}\n\t}\n\t\n\tgetGroups(component){\n\t\tvar groupComponents = [];\n\t\t\n\t\tthis.groupList.forEach(function(group){\n\t\t\tgroupComponents.push(component ? group.getComponent() : group);\n\t\t});\n\t\t\n\t\treturn groupComponents;\n\t}\n\t\n\tgetChildGroups(group){\n\t\tvar groupComponents = [];\n\t\t\n\t\tif(!group){\n\t\t\tgroup = this;\n\t\t}\n\t\t\n\t\tgroup.groupList.forEach((child) => {\n\t\t\tif(child.groupList.length){\n\t\t\t\tgroupComponents = groupComponents.concat(this.getChildGroups(child));\n\t\t\t}else{\n\t\t\t\tgroupComponents.push(child);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn groupComponents;\n\t}\n\t\n\twipe(){\n\t\tif(this.table.options.groupBy){\n\t\t\tthis.groupList.forEach(function(group){\n\t\t\t\tgroup.wipe();\n\t\t\t});\n\t\t\t\n\t\t\tthis.groupList = [];\n\t\t\tthis.groups = {};\n\t\t}\n\t}\n\t\n\tpullGroupListData(groupList) {\n\t\tvar groupListData = [];\n\t\t\n\t\tgroupList.forEach((group) => {\n\t\t\tvar groupHeader = {};\n\t\t\tgroupHeader.level = 0;\n\t\t\tgroupHeader.rowCount = 0;\n\t\t\tgroupHeader.headerContent = \"\";\n\t\t\tvar childData = [];\n\t\t\t\n\t\t\tif (group.hasSubGroups) {\n\t\t\t\tchildData = this.pullGroupListData(group.groupList);\n\t\t\t\t\n\t\t\t\tgroupHeader.level = group.level;\n\t\t\t\tgroupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);\n\t\t\t\t\n\t\t\t\tgroupListData.push(groupHeader);\n\t\t\t\tgroupListData = groupListData.concat(childData);\n\t\t\t}\n\t\t\t\n\t\t\telse {\n\t\t\t\tgroupHeader.level = group.level;\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);\n\t\t\t\tgroupHeader.rowCount = group.getRows().length;\n\t\t\t\t\n\t\t\t\tgroupListData.push(groupHeader);\n\t\t\t\t\n\t\t\t\tgroup.getRows().forEach((row) => {\n\t\t\t\t\tgroupListData.push(row.getData(\"data\"));\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn groupListData;\n\t}\n\t\n\tgetGroupedData(){\n\t\t\n\t\treturn this.pullGroupListData(this.groupList);\n\t}\n\t\n\tgetRowGroup(row){\n\t\tvar match = false;\n\t\t\n\t\tif(this.options(\"dataTree\")){\n\t\t\trow = this.table.modules.dataTree.getTreeParentRoot(row);\n\t\t}\n\t\t\n\t\tthis.groupList.forEach((group) => {\n\t\t\tvar result = group.getRowGroup(row);\n\t\t\t\n\t\t\tif(result){\n\t\t\t\tmatch = result;\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn match;\n\t}\n\t\n\tcountGroups(){\n\t\treturn this.groupList.length;\n\t}\n\t\n\tgenerateGroups(rows){\n\t\tvar oldGroups = this.groups;\n\t\t\n\t\tthis.groups = {};\n\t\tthis.groupList = [];\n\t\t\n\t\tif(this.allowedValues && this.allowedValues[0]){\n\t\t\tthis.allowedValues[0].forEach((value) => {\n\t\t\t\tthis.createGroup(value, 0, oldGroups);\n\t\t\t});\n\t\t\t\n\t\t\trows.forEach((row) => {\n\t\t\t\tthis.assignRowToExistingGroup(row, oldGroups);\n\t\t\t});\n\t\t}else{\n\t\t\trows.forEach((row) => {\n\t\t\t\tthis.assignRowToGroup(row, oldGroups);\n\t\t\t});\n\t\t}\n\t\t\n\t\tObject.values(oldGroups).forEach((group) => {\n\t\t\tgroup.wipe(true);\n\t\t});\t\n\t}\n\t\n\t\n\tcreateGroup(groupID, level, oldGroups){\n\t\tvar groupKey = level + \"_\" + groupID,\n\t\tgroup;\n\t\t\n\t\toldGroups = oldGroups || [];\n\t\t\n\t\tgroup = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);\n\t\t\n\t\tthis.groups[groupKey] = group;\n\t\tthis.groupList.push(group);\n\t}\n\t\n\tassignRowToExistingGroup(row, oldGroups){\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\n\t\tgroupKey = \"0_\" + groupID;\n\t\t\n\t\tif(this.groups[groupKey]){\n\t\t\tthis.groups[groupKey].addRow(row);\n\t\t}\n\t}\n\t\n\tassignRowToGroup(row, oldGroups){\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\n\t\tnewGroupNeeded = !this.groups[\"0_\" + groupID];\n\t\t\n\t\tif(newGroupNeeded){\n\t\t\tthis.createGroup(groupID, 0, oldGroups);\n\t\t}\n\t\t\n\t\tthis.groups[\"0_\" + groupID].addRow(row);\n\t\t\n\t\treturn !newGroupNeeded;\n\t}\n\t\n\treassignRowToGroup(row){\n\t\tif(row.type === \"row\"){\n\t\t\tvar oldRowGroup = row.modules.group,\n\t\t\toldGroupPath = oldRowGroup.getPath(),\n\t\t\tnewGroupPath = this.getExpectedPath(row),\n\t\t\tsamePath;\n\t\t\t\n\t\t\t// figure out if new group path is the same as old group path\n\t\t\tsamePath = (oldGroupPath.length == newGroupPath.length) && oldGroupPath.every((element, index) => {\n\t\t\t\treturn element === newGroupPath[index];\n\t\t\t});\n\t\t\t\n\t\t\t// refresh if they new path and old path aren't the same (aka the row's groupings have changed)\n\t\t\tif(!samePath) {\n\t\t\t\toldRowGroup.removeRow(row);\n\t\t\t\tthis.assignRowToGroup(row, this.groups);\n\t\t\t\tthis.refreshData(true);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tgetExpectedPath(row) {\n\t\tvar groupPath = [], rowData = row.getData();\n\t\t\n\t\tthis.groupIDLookups.forEach((groupId) => {\n\t\t\tgroupPath.push(groupId.func(rowData));\n\t\t});\n\t\t\n\t\treturn groupPath;\n\t}\n\t\n\tupdateGroupRows(force){\n\t\tvar output = [];\n\n\t\tif(!this.blockRedraw){\n\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\toutput = output.concat(group.getHeadersAndRows());\n\t\t\t});\n\t\t\t\n\t\t\tif(force){\n\t\t\t\tthis.refreshData(true);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tscrollHeaders(left){\n\t\tif(this.table.options.groupBy){\n\t\t\tif(this.table.options.renderHorizontal === \"virtual\"){\n\t\t\t\tleft -= this.table.columnManager.renderer.vDomPadLeft;\n\t\t\t}\n\t\t\t\n\t\t\tleft = left + \"px\";\n\t\t\t\n\t\t\tthis.groupList.forEach((group) => {\n\t\t\t\tgroup.scrollHeader(left);\n\t\t\t});\n\t\t}\n\t}\n\t\n\tremoveGroup(group){\n\t\tvar groupKey = group.level + \"_\" + group.key,\n\t\tindex;\n\t\t\n\t\tif(this.groups[groupKey]){\n\t\t\tdelete this.groups[groupKey];\n\t\t\t\n\t\t\tindex = this.groupList.indexOf(group);\n\t\t\t\n\t\t\tif(index > -1){\n\t\t\t\tthis.groupList.splice(index, 1);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tcheckBasicModeGroupHeaderWidth(){\n\t\tvar element = this.table.rowManager.tableElement,\n\t\tonlyGroupHeaders = true;\n\t\t\n\t\tthis.table.rowManager.getDisplayRows().forEach((row, index) =>{\n\t\t\tthis.table.rowManager.styleRow(row, index);\n\t\t\telement.appendChild(row.getElement());\n\t\t\trow.initialize(true);\n\t\t\t\n\t\t\tif(row.type !== \"group\"){\n\t\t\t\tonlyGroupHeaders = false;\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(onlyGroupHeaders){\n\t\t\telement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\n\t\t}else{\n\t\t\telement.style.minWidth = \"\";\n\t\t}\n\t}\n\t\n}\n\nGroupRows.moduleName = \"groupRows\";\n\nexport default GroupRows;","import Module from '../../core/Module.js';\nimport Row from '../../core/row/Row.js';\nimport Cell from '../../core/cell/Cell.js';\n\nimport defaultUndoers from './defaults/undoers.js';\nimport defaultRedoers from './defaults/redoers.js';\n\nclass History extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.history = [];\n\t\tthis.index = -1;\n\n\t\tthis.registerTableOption(\"history\", false); //enable edit history\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.history){\n\t\t\tthis.subscribe(\"cell-value-updated\", this.cellUpdated.bind(this));\n\t\t\tthis.subscribe(\"cell-delete\", this.clearComponentHistory.bind(this));\n\t\t\tthis.subscribe(\"row-delete\", this.rowDeleted.bind(this));\n\t\t\tthis.subscribe(\"rows-wipe\", this.clear.bind(this));\n\t\t\tthis.subscribe(\"row-added\", this.rowAdded.bind(this));\n\t\t\tthis.subscribe(\"row-move\", this.rowMoved.bind(this));\n\t\t}\n\n\t\tthis.registerTableFunction(\"undo\", this.undo.bind(this));\n\t\tthis.registerTableFunction(\"redo\", this.redo.bind(this));\n\t\tthis.registerTableFunction(\"getHistoryUndoSize\", this.getHistoryUndoSize.bind(this));\n\t\tthis.registerTableFunction(\"getHistoryRedoSize\", this.getHistoryRedoSize.bind(this));\n\t\tthis.registerTableFunction(\"clearHistory\", this.clear.bind(this));\n\t}\n\n\trowMoved(from, to, after){\n\t\tthis.action(\"rowMove\", from, {posFrom:from.getPosition(), posTo:to.getPosition(), to:to, after:after});\n\t}\n\n\trowAdded(row, data, pos, index){\n\t\tthis.action(\"rowAdd\", row, {data:data, pos:pos, index:index});\n\t}\n\n\trowDeleted(row){\n\t\tvar index, rows;\n\n\t\tif(this.table.options.groupBy){\n\n\t\t\trows = row.getComponent().getGroup()._getSelf().rows;\n\t\t\tindex = rows.indexOf(row);\n\n\t\t\tif(index){\n\t\t\t\tindex = rows[index-1];\n\t\t\t}\n\t\t}else{\n\t\t\tindex = row.table.rowManager.getRowIndex(row);\n\n\t\t\tif(index){\n\t\t\t\tindex = row.table.rowManager.rows[index-1];\n\t\t\t}\n\t\t}\n\n\t\tthis.action(\"rowDelete\", row, {data:row.getData(), pos:!index, index:index});\n\t}\n\n\tcellUpdated(cell){\n\t\tthis.action(\"cellEdit\", cell, {oldValue:cell.oldValue, newValue:cell.value});\n\t}\n\n\tclear(){\n\t\tthis.history = [];\n\t\tthis.index = -1;\n\t}\n\n\taction(type, component, data){\n\t\tthis.history = this.history.slice(0, this.index + 1);\n\n\t\tthis.history.push({\n\t\t\ttype:type,\n\t\t\tcomponent:component,\n\t\t\tdata:data,\n\t\t});\n\n\t\tthis.index ++;\n\t}\n\n\tgetHistoryUndoSize(){\n\t\treturn this.index + 1;\n\t}\n\n\tgetHistoryRedoSize(){\n\t\treturn this.history.length - (this.index + 1);\n\t}\n\n\tclearComponentHistory(component){\n\t\tvar index = this.history.findIndex(function(item){\n\t\t\treturn item.component === component;\n\t\t});\n\n\t\tif(index > -1){\n\t\t\tthis.history.splice(index, 1);\n\t\t\tif(index <= this.index){\n\t\t\t\tthis.index--;\n\t\t\t}\n\n\t\t\tthis.clearComponentHistory(component);\n\t\t}\n\t}\n\n\tundo(){\n\t\tif(this.index > -1){\n\t\t\tlet action = this.history[this.index];\n\n\t\t\tHistory.undoers[action.type].call(this, action);\n\n\t\t\tthis.index--;\n\n\t\t\tthis.dispatchExternal(\"historyUndo\", action.type, action.component.getComponent(), action.data);\n\n\t\t\treturn true;\n\t\t}else{\n\t\t\tconsole.warn(this.options(\"history\") ? \"History Undo Error - No more history to undo\" : \"History module not enabled\");\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tredo(){\n\t\tif(this.history.length-1 > this.index){\n\n\t\t\tthis.index++;\n\n\t\t\tlet action = this.history[this.index];\n\n\t\t\tHistory.redoers[action.type].call(this, action);\n\n\t\t\tthis.dispatchExternal(\"historyRedo\", action.type, action.component.getComponent(), action.data);\n\n\t\t\treturn true;\n\t\t}else{\n\t\t\tconsole.warn(this.options(\"history\") ? \"History Redo Error - No more history to redo\" : \"History module not enabled\");\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t//rebind rows to new element after deletion\n\t_rebindRow(oldRow, newRow){\n\t\tthis.history.forEach(function(action){\n\t\t\tif(action.component instanceof Row){\n\t\t\t\tif(action.component === oldRow){\n\t\t\t\t\taction.component = newRow;\n\t\t\t\t}\n\t\t\t}else if(action.component instanceof Cell){\n\t\t\t\tif(action.component.row === oldRow){\n\t\t\t\t\tvar field = action.component.column.getField();\n\n\t\t\t\t\tif(field){\n\t\t\t\t\t\taction.component = newRow.getCell(field);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nHistory.moduleName = \"history\";\n\n//load defaults\nHistory.undoers = defaultUndoers;\nHistory.redoers = defaultRedoers;\n\nexport default History;","export default {\n\tcellEdit: function(action){\n\t\taction.component.setValueProcessData(action.data.oldValue);\n\t\taction.component.cellRendered();\n\t},\n\n\trowAdd: function(action){\n\t\taction.component.deleteActual();\n\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowDelete: function(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\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowMove: function(action){\n\t\tvar after = (action.data.posFrom - action.data.posTo) > 0;\n\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.getRowFromPosition(action.data.posFrom), after);\n\n\t\tthis.table.rowManager.regenerateRowPositions();\n\t\tthis.table.rowManager.reRenderInPosition();\n\t},\n};","export default {\n\tcellEdit: function(action){\n\t\taction.component.setValueProcessData(action.data.newValue);\n\t\taction.component.cellRendered();\n\t},\n\n\trowAdd: function(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\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowDelete:function(action){\n\t\taction.component.deleteActual();\n\n\t\tthis.table.rowManager.checkPlaceholder();\n\t},\n\n\trowMove: function(action){\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.getRowFromPosition(action.data.posTo), action.data.after);\n\t\t\n\t\tthis.table.rowManager.regenerateRowPositions();\n\t\tthis.table.rowManager.reRenderInPosition();\n\t},\n};","import Module from '../../core/Module.js';\n\nclass HtmlTableImport extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.fieldIndex = [];\n\t\tthis.hasIndex = false;\n\t}\n\n\tinitialize(){\n\t\tthis.tableElementCheck();\n\t}\n\n\ttableElementCheck(){\n\t\tif(this.table.originalElement && this.table.originalElement.tagName === \"TABLE\"){\n\t\t\tif(this.table.originalElement.childNodes.length){\n\t\t\t\tthis.parseTable();\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Unable to parse data from empty table tag, Tabulator should be initialized on a div tag unless importing data from a table element.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tparseTable(){\n\t\tvar element = this.table.originalElement,\n\t\toptions = this.table.options,\n\t\theaders = element.getElementsByTagName(\"th\"),\n\t\trows = element.getElementsByTagName(\"tbody\")[0],\n\t\tdata = [];\n\n\t\tthis.hasIndex = false;\n\n\t\tthis.dispatchExternal(\"htmlImporting\");\n\n\t\trows = rows ? rows.getElementsByTagName(\"tr\") : [];\n\n\t\t//check for Tabulator inline options\n\t\tthis._extractOptions(element, options);\n\n\t\tif(headers.length){\n\t\t\tthis._extractHeaders(headers, rows);\n\t\t}else{\n\t\t\tthis._generateBlankHeaders(headers, rows);\n\t\t}\n\n\t\t//iterate through table rows and build data set\n\t\tfor(var index = 0; index < rows.length; index++){\n\t\t\tvar row = rows[index],\n\t\t\tcells = row.getElementsByTagName(\"td\"),\n\t\t\titem = {};\n\n\t\t\t//create index if the don't exist in table\n\t\t\tif(!this.hasIndex){\n\t\t\t\titem[options.index] = index;\n\t\t\t}\n\n\t\t\tfor(var i = 0; i < cells.length; i++){\n\t\t\t\tvar cell = cells[i];\n\t\t\t\tif(typeof this.fieldIndex[i] !== \"undefined\"){\n\t\t\t\t\titem[this.fieldIndex[i]] = cell.innerHTML;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//add row data to item\n\t\t\tdata.push(item);\n\t\t}\n\n\t\toptions.data = data;\n\n\t\tthis.dispatchExternal(\"htmlImported\");\n\t}\n\n\t//extract tabulator attribute options\n\t_extractOptions(element, options, defaultOptions){\n\t\tvar attributes = element.attributes;\n\t\tvar optionsArr = defaultOptions ? Object.keys(defaultOptions) : Object.keys(options);\n\t\tvar optionsList = {};\n\n\t\toptionsArr.forEach((item) => {\n\t\t\toptionsList[item.toLowerCase()] = item;\n\t\t});\n\n\t\tfor(var index in attributes){\n\t\t\tvar attrib = attributes[index];\n\t\t\tvar name;\n\n\t\t\tif(attrib && typeof attrib == \"object\" && attrib.name && attrib.name.indexOf(\"tabulator-\") === 0){\n\t\t\t\tname = attrib.name.replace(\"tabulator-\", \"\");\n\n\t\t\t\tif(typeof optionsList[name] !== \"undefined\"){\n\t\t\t\t\toptions[optionsList[name]] = this._attribValue(attrib.value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t//get value of attribute\n\t_attribValue(value){\n\t\tif(value === \"true\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tif(value === \"false\"){\n\t\t\treturn false;\n\t\t}\n\n\t\treturn value;\n\t}\n\n\t//find column if it has already been defined\n\t_findCol(title){\n\t\tvar match = this.table.options.columns.find((column) => {\n\t\t\treturn column.title === title;\n\t\t});\n\n\t\treturn match || false;\n\t}\n\n\t//extract column from headers\n\t_extractHeaders(headers, rows){\n\t\tfor(var index = 0; index < headers.length; index++){\n\t\t\tvar header = headers[index],\n\t\t\texists = false,\n\t\t\tcol = this._findCol(header.textContent),\n\t\t\twidth;\n\n\t\t\tif(col){\n\t\t\t\texists = true;\n\t\t\t}else{\n\t\t\t\tcol = {title:header.textContent.trim()};\n\t\t\t}\n\n\t\t\tif(!col.field) {\n\t\t\t\tcol.field = header.textContent.trim().toLowerCase().replaceAll(\" \", \"_\");\n\t\t\t}\n\n\t\t\twidth = header.getAttribute(\"width\");\n\n\t\t\tif(width && !col.width)\t{\n\t\t\t\tcol.width = width;\n\t\t\t}\n\n\t\t\t//check for Tabulator inline options\n\t\t\tthis._extractOptions(header, col, this.table.columnManager.optionsList.registeredDefaults);\n\n\t\t\tthis.fieldIndex[index] = col.field;\n\n\t\t\tif(col.field == this.table.options.index){\n\t\t\t\tthis.hasIndex = true;\n\t\t\t}\n\n\t\t\tif(!exists){\n\t\t\t\tthis.table.options.columns.push(col);\n\t\t\t}\n\n\t\t}\n\t}\n\n\t//generate blank headers\n\t_generateBlankHeaders(headers, rows){\n\t\tfor(var index = 0; index < headers.length; index++){\n\t\t\tvar header = headers[index],\n\t\t\tcol = {title:\"\", field:\"col\" + index};\n\n\t\t\tthis.fieldIndex[index] = col.field;\n\n\t\t\tvar width = header.getAttribute(\"width\");\n\n\t\t\tif(width){\n\t\t\t\tcol.width = width;\n\t\t\t}\n\n\t\t\tthis.table.options.columns.push(col);\n\t\t}\n\t}\n}\n\nHtmlTableImport.moduleName = \"htmlTableImport\";\n\nexport default HtmlTableImport;\n","import csv from './importers/csv.js';\nimport json from './importers/json.js';\nimport array from './importers/array.js';\n\nexport default {\n\tcsv:csv,\n\tjson:json,\n\tarray:array,\n};","function csvImporter(input){\n\tvar data = [],\n\trow = 0, \n\tcol = 0,\n\tinQuote = false;\n \n\t//Iterate over each character\n\tfor (let index = 0; index < input.length; index++) {\n\t\tlet char = input[index], \n\t\tnextChar = input[index+1]; \n \n\t\t//Initialize empty row\n\t\tif(!data[row]){\n\t\t\tdata[row] = [];\n\t\t}\n\n\t\t//Initialize empty column\n\t\tif(!data[row][col]){\n\t\t\tdata[row][col] = \"\";\n\t\t}\n \n\t\t//Handle quotation mark inside string\n\t\tif (char == '\"' && inQuote && nextChar == '\"') { \n\t\t\tdata[row][col] += char; \n\t\t\tindex++;\n\t\t\tcontinue; \n\t\t}\n \n\t\t//Begin / End Quote\n\t\tif (char == '\"') { \n\t\t\tinQuote = !inQuote;\n\t\t\tcontinue;\n\t\t}\n \n\t\t//Next column (if not in quote)\n\t\tif (char == ',' && !inQuote) { \n\t\t\tcol++;\n\t\t\tcontinue; \n\t\t}\n \n\t\t//New row if new line and not in quote (CRLF) \n\t\tif (char == '\\r' && nextChar == '\\n' && !inQuote) { \n\t\t\tcol = 0; \n\t\t\trow++; \n\t\t\tindex++; \n\t\t\tcontinue; \n\t\t}\n \n\t\t//New row if new line and not in quote (CR or LF) \n\t\tif ((char == '\\r' || char == '\\n') && !inQuote) { \n\t\t\tcol = 0;\n\t\t\trow++;\n\t\t\tcontinue; \n\t\t}\n\n\t\t//Normal Character, append to column\n\t\tdata[row][col] += char;\n\t}\n\n\treturn data;\n}\n\nexport default csvImporter;","export default function(input){\n\ttry {\n\t\treturn JSON.parse(input);\n\t} catch(e) {\n\t\tconsole.warn(\"JSON Import Error - File contents is invalid JSON\", e);\n\t\treturn Promise.reject();\n\t}\n}","function arrayImporter(input){\n\treturn input;\n}\n\nexport default arrayImporter;","import Module from '../../core/Module.js';\n\nimport defaultImporters from './defaults/importers.js';\n\nclass Import extends Module{\n \n\tconstructor(table){\n\t\tsuper(table);\n \n\t\tthis.registerTableOption(\"importFormat\");\n\t\tthis.registerTableOption(\"importReader\", \"text\");\n\t}\n \n\tinitialize(){\n\t\tthis.registerTableFunction(\"import\", this.importFromFile.bind(this));\n\n\t\tif(this.table.options.importFormat){\n\t\t\tthis.subscribe(\"data-loading\", this.loadDataCheck.bind(this), 10);\n\t\t\tthis.subscribe(\"data-load\", this.loadData.bind(this), 10);\n\t\t}\n\t}\n\n\tloadDataCheck(data){\n\t\treturn this.table.options.importFormat && (typeof data === \"string\" || (Array.isArray(data) && data.length && Array.isArray(data)));\n\t}\n\n\tloadData(data, params, config, silent, previousData){\n\t\treturn this.importData(this.lookupImporter(), data)\n\t\t\t.then(this.structureData.bind(this))\n\t\t\t.catch((err) => {\n\t\t\t\tconsole.error(\"Import Error:\", err || \"Unable to import data\");\n\t\t\t\treturn Promise.reject(err);\n\t\t\t});\n\t}\n\n\tlookupImporter(importFormat){\n\t\tvar importer;\n \n\t\tif(!importFormat){\n\t\t\timportFormat = this.table.options.importFormat;\n\t\t}\n \n\t\tif(typeof importFormat === \"string\"){\n\t\t\timporter = Import.importers[importFormat];\n\t\t}else{\n\t\t\timporter = importFormat;\n\t\t}\n\n\t\tif(!importer){\n\t\t\tconsole.error(\"Import Error - Importer not found:\", importFormat);\n\t\t}\n \n\t\treturn importer;\n\t}\n \n\timportFromFile(importFormat, extension){\n\t\tvar importer = this.lookupImporter(importFormat);\n \n\t\tif(importer){\n\t\t\treturn this.pickFile(extension)\n\t\t\t\t.then(this.importData.bind(this, importer))\n\t\t\t\t.then(this.structureData.bind(this))\n\t\t\t\t.then(this.setData.bind(this))\n\t\t\t\t.catch((err) => {\n\t\t\t\t\tconsole.error(\"Import Error:\", err || \"Unable to import file\");\n\t\t\t\t\treturn Promise.reject(err);\n\t\t\t\t});\n\t\t}\n\t}\n \n\tpickFile(extensions){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.type = \"file\";\n\t\t\tinput.accept = extensions;\n \n\t\t\tinput.addEventListener(\"change\", (e) => {\n\t\t\t\tvar file = input.files[0],\n\t\t\t\treader = new FileReader();\n \n\t\t\t\tswitch(this.table.options.importReader){\n\t\t\t\t\tcase \"buffer\":\n\t\t\t\t\t\treader.readAsArrayBuffer(file);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"binary\":\n\t\t\t\t\t\treader.readAsBinaryString(file);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"url\":\n\t\t\t\t\t\treader.readAsDataURL(file);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"text\":\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treader.readAsText(file);\n\t\t\t\t}\n \n\t\t\t\treader.onload = (e) => {\n\t\t\t\t\tresolve(reader.result);\n\t\t\t\t};\n \n\t\t\t\treader.onerror = (e) => {\n\t\t\t\t\tconsole.warn(\"File Load Error - Unable to read file\");\n\t\t\t\t\treject();\n\t\t\t\t};\n\t\t\t});\n \n\t\t\tinput.click();\n\t\t});\n\t}\n \n\timportData(importer, fileContents){\n\t\tvar data = importer.call(this.table, fileContents);\n \n\t\tif(data instanceof Promise){\n\t\t\treturn data;\n\t\t}else{\n\t\t\treturn data ? Promise.resolve(data) : Promise.reject();\n\t\t}\n\t}\n\n\tstructureData(parsedData){\n\t\tvar data = [];\n \n\t\tif(Array.isArray(parsedData) && parsedData.length && Array.isArray(parsedData[0])){\n\t\t\tif(this.table.options.autoColumns){\n\t\t\t\tdata = this.structureArrayToObject(parsedData);\n\t\t\t}else{\n\t\t\t\tdata = this.structureArrayToColumns(parsedData);\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}else{\n\t\t\treturn parsedData;\n\t\t}\n\t}\n\n\tstructureArrayToObject(parsedData){\n\t\tvar columns = parsedData.shift();\n\n\t\tvar data = parsedData.map((values) => {\n\t\t\tvar row = {};\n\n\t\t\tcolumns.forEach((key, i) => {\n\t\t\t\trow[key] = values[i];\n\t\t\t});\n\n\t\t\treturn row;\n\t\t});\n\n\t\treturn data;\n\t}\n\n\tstructureArrayToColumns(parsedData){\n\t\tvar data = [],\n\t\tcolumns = this.table.getColumns();\n\n\t\t//remove first row if it is the column names\n\t\tif(columns[0] && parsedData[0][0]){\n\t\t\tif(columns[0].getDefinition().title === parsedData[0][0]){\n\t\t\t\tparsedData.shift();\n\t\t\t}\n\t\t}\n \n\t\t//convert row arrays to objects\n\t\tparsedData.forEach((rowData) => {\n\t\t\tvar row = {};\n\n\t\t\trowData.forEach((value, index) => {\n\t\t\t\tvar column = columns[index];\n\n\t\t\t\tif(column){\n\t\t\t\t\trow[column.getField()] = value;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdata.push(row);\n\t\t});\n\n\t\treturn data;\n\t}\n \n\tsetData(data){\n\t\treturn this.table.setData(data);\n\t}\n}\n\nImport.moduleName = \"import\";\n\n//load defaults\nImport.importers = defaultImporters;\n\nexport default Import;","import Module from '../../core/Module.js';\n\nimport Cell from '../../core/cell/Cell.js';\nimport Column from '../../core/column/Column.js';\n\nclass Interaction extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.eventMap = {\n\t\t\t//row events\n\t\t\trowClick:\"row-click\",\n\t\t\trowDblClick:\"row-dblclick\",\n\t\t\trowContext:\"row-contextmenu\",\n\t\t\trowMouseEnter:\"row-mouseenter\",\n\t\t\trowMouseLeave:\"row-mouseleave\",\n\t\t\trowMouseOver:\"row-mouseover\",\n\t\t\trowMouseOut:\"row-mouseout\",\n\t\t\trowMouseMove:\"row-mousemove\",\n\t\t\trowMouseDown:\"row-mousedown\",\n\t\t\trowMouseUp:\"row-mouseup\",\n\t\t\trowTap:\"row\",\n\t\t\trowDblTap:\"row\",\n\t\t\trowTapHold:\"row\",\n\n\t\t\t//cell events\n\t\t\tcellClick:\"cell-click\",\n\t\t\tcellDblClick:\"cell-dblclick\",\n\t\t\tcellContext:\"cell-contextmenu\",\n\t\t\tcellMouseEnter:\"cell-mouseenter\",\n\t\t\tcellMouseLeave:\"cell-mouseleave\",\n\t\t\tcellMouseOver:\"cell-mouseover\",\n\t\t\tcellMouseOut:\"cell-mouseout\",\n\t\t\tcellMouseMove:\"cell-mousemove\",\n\t\t\tcellMouseDown:\"cell-mousedown\",\n\t\t\tcellMouseUp:\"cell-mouseup\",\n\t\t\tcellTap:\"cell\",\n\t\t\tcellDblTap:\"cell\",\n\t\t\tcellTapHold:\"cell\",\n\n\t\t\t//column header events\n\t\t\theaderClick:\"column-click\",\n\t\t\theaderDblClick:\"column-dblclick\",\n\t\t\theaderContext:\"column-contextmenu\",\n\t\t\theaderMouseEnter:\"column-mouseenter\",\n\t\t\theaderMouseLeave:\"column-mouseleave\",\n\t\t\theaderMouseOver:\"column-mouseover\",\n\t\t\theaderMouseOut:\"column-mouseout\",\n\t\t\theaderMouseMove:\"column-mousemove\",\n\t\t\theaderMouseDown:\"column-mousedown\",\n\t\t\theaderMouseUp:\"column-mouseup\",\n\t\t\theaderTap:\"column\",\n\t\t\theaderDblTap:\"column\",\n\t\t\theaderTapHold:\"column\",\n\n\t\t\t//group header\n\t\t\tgroupClick:\"group-click\",\n\t\t\tgroupDblClick:\"group-dblclick\",\n\t\t\tgroupContext:\"group-contextmenu\",\n\t\t\tgroupMouseEnter:\"group-mouseenter\",\n\t\t\tgroupMouseLeave:\"group-mouseleave\",\n\t\t\tgroupMouseOver:\"group-mouseover\",\n\t\t\tgroupMouseOut:\"group-mouseout\",\n\t\t\tgroupMouseMove:\"group-mousemove\",\n\t\t\tgroupMouseDown:\"group-mousedown\",\n\t\t\tgroupMouseUp:\"group-mouseup\",\n\t\t\tgroupTap:\"group\",\n\t\t\tgroupDblTap:\"group\",\n\t\t\tgroupTapHold:\"group\",\n\t\t};\n\n\t\tthis.subscribers = {};\n\n\t\tthis.touchSubscribers = {};\n\n\t\tthis.columnSubscribers = {};\n\n\t\tthis.touchWatchers = {\n\t\t\trow:{\n\t\t\t\ttap:null,\n\t\t\t\ttapDbl:null,\n\t\t\t\ttapHold:null,\n\t\t\t},\n\t\t\tcell:{\n\t\t\t\ttap:null,\n\t\t\t\ttapDbl:null,\n\t\t\t\ttapHold:null,\n\t\t\t},\n\t\t\tcolumn:{\n\t\t\t\ttap:null,\n\t\t\t\ttapDbl:null,\n\t\t\t\ttapHold:null,\n\t\t\t},\n\t\t\tgroup:{\n\t\t\t\ttap:null,\n\t\t\t\ttapDbl:null,\n\t\t\t\ttapHold:null,\n\t\t\t}\n\t\t};\n\n\t\tthis.registerColumnOption(\"headerClick\");\n\t\tthis.registerColumnOption(\"headerDblClick\");\n\t\tthis.registerColumnOption(\"headerContext\");\n\t\tthis.registerColumnOption(\"headerMouseEnter\");\n\t\tthis.registerColumnOption(\"headerMouseLeave\");\n\t\tthis.registerColumnOption(\"headerMouseOver\");\n\t\tthis.registerColumnOption(\"headerMouseOut\");\n\t\tthis.registerColumnOption(\"headerMouseMove\");\n\t\tthis.registerColumnOption(\"headerMouseDown\");\n\t\tthis.registerColumnOption(\"headerMouseUp\");\n\t\tthis.registerColumnOption(\"headerTap\");\n\t\tthis.registerColumnOption(\"headerDblTap\");\n\t\tthis.registerColumnOption(\"headerTapHold\");\n\n\t\tthis.registerColumnOption(\"cellClick\");\n\t\tthis.registerColumnOption(\"cellDblClick\");\n\t\tthis.registerColumnOption(\"cellContext\");\n\t\tthis.registerColumnOption(\"cellMouseEnter\");\n\t\tthis.registerColumnOption(\"cellMouseLeave\");\n\t\tthis.registerColumnOption(\"cellMouseOver\");\n\t\tthis.registerColumnOption(\"cellMouseOut\");\n\t\tthis.registerColumnOption(\"cellMouseMove\");\n\t\tthis.registerColumnOption(\"cellMouseDown\");\n\t\tthis.registerColumnOption(\"cellMouseUp\");\n\t\tthis.registerColumnOption(\"cellTap\");\n\t\tthis.registerColumnOption(\"cellDblTap\");\n\t\tthis.registerColumnOption(\"cellTapHold\");\n\n\t}\n\n\tinitialize(){\n\t\tthis.initializeExternalEvents();\n\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"cell-dblclick\", this.cellContentsSelectionFixer.bind(this));\n\t\tthis.subscribe(\"scroll-horizontal\", this.clearTouchWatchers.bind(this));\n\t\tthis.subscribe(\"scroll-vertical\", this.clearTouchWatchers.bind(this));\n\t}\n\n\tclearTouchWatchers(){\n\t\tvar types = Object.values(this.touchWatchers);\n\n\t\ttypes.forEach((type) => {\n\t\t\tfor(let key in type){\n\t\t\t\ttype[key] = null;\n\t\t\t}\n\t\t});\n\t}\n\t\t\n\tcellContentsSelectionFixer(e, cell){\n\t\tvar range;\n\n\t\tif(this.table.modExists(\"edit\")){\n\t\t\tif (this.table.modules.edit.currentCell === cell){\n\t\t\t\treturn; //prevent instant selection of editor content\n\t\t\t}\n\t\t}\n\n\t\te.preventDefault();\n\n\t\ttry{\n\t\t\tif (document.selection) { // IE\n\t\t\t\trange = document.body.createTextRange();\n\t\t\t\trange.moveToElementText(cell.getElement());\n\t\t\t\trange.select();\n\t\t\t} else if (window.getSelection) {\n\t\t\t\trange = document.createRange();\n\t\t\t\trange.selectNode(cell.getElement());\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t\twindow.getSelection().addRange(range);\n\t\t\t}\n\t\t}catch(e){}\n\t}\n\n\tinitializeExternalEvents(){\n\t\tfor(let key in this.eventMap){\n\t\t\tthis.subscriptionChangeExternal(key, this.subscriptionChanged.bind(this, key));\n\t\t}\n\t}\n\n\tsubscriptionChanged(key, added){\n\t\tif(added){\n\t\t\tif(!this.subscribers[key]){\n\t\t\t\tif(this.eventMap[key].includes(\"-\")){\n\t\t\t\t\tthis.subscribers[key] = this.handle.bind(this, key);\n\t\t\t\t\tthis.subscribe(this.eventMap[key], this.subscribers[key]);\n\t\t\t\t}else{\n\t\t\t\t\tthis.subscribeTouchEvents(key);\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\tif(this.eventMap[key].includes(\"-\")){\n\t\t\t\tif(this.subscribers[key] && !this.columnSubscribers[key] && !this.subscribedExternal(key)){\n\t\t\t\t\tthis.unsubscribe(this.eventMap[key], this.subscribers[key]);\n\t\t\t\t\tdelete this.subscribers[key];\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.unsubscribeTouchEvents(key);\n\t\t\t}\n\t\t}\n\t}\n\n\n\tsubscribeTouchEvents(key){\n\t\tvar type = this.eventMap[key];\n\n\t\tif(!this.touchSubscribers[type + \"-touchstart\"]){\n\t\t\tthis.touchSubscribers[type + \"-touchstart\"] = this.handleTouch.bind(this, type, \"start\");\n\t\t\tthis.touchSubscribers[type + \"-touchend\"] = this.handleTouch.bind(this, type, \"end\");\n\n\t\t\tthis.subscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\n\t\t\tthis.subscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\n\t\t}\n\n\t\tthis.subscribers[key] = true;\n\t}\n\n\tunsubscribeTouchEvents(key){\n\t\tvar noTouch = true,\n\t\ttype = this.eventMap[key];\n\n\t\tif(this.subscribers[key] && !this.subscribedExternal(key)){\n\t\t\tdelete this.subscribers[key];\n\n\t\t\tfor(let i in this.eventMap){\n\t\t\t\tif(this.eventMap[i] === type){\n\t\t\t\t\tif(this.subscribers[i]){\n\t\t\t\t\t\tnoTouch = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(noTouch){\n\t\t\t\tthis.unsubscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\n\t\t\t\tthis.unsubscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\n\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchstart\"];\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchend\"];\n\t\t\t}\n\t\t}\n\t}\n\n\tinitializeColumn(column){\n\t\tvar def = column.definition;\n\n\t\tfor(let key in this.eventMap){\n\t\t\tif(def[key]){\n\t\t\t\tthis.subscriptionChanged(key, true);\n\n\t\t\t\tif(!this.columnSubscribers[key]){\n\t\t\t\t\tthis.columnSubscribers[key] = [];\n\t\t\t\t}\n\n\t\t\t\tthis.columnSubscribers[key].push(column);\n\t\t\t}\n\t\t}\n\t}\n\n\thandle(action, e, component){\n\t\tthis.dispatchEvent(action, e, component);\n\t}\n\n\thandleTouch(type, action, e, component){\n\t\tvar watchers = this.touchWatchers[type];\n\n\t\tif(type === \"column\"){\n\t\t\ttype = \"header\";\n\t\t}\n\n\t\tswitch(action){\n\t\t\tcase \"start\":\n\t\t\t\twatchers.tap = true;\n\n\t\t\t\tclearTimeout(watchers.tapHold);\n\n\t\t\t\twatchers.tapHold = setTimeout(() => {\n\t\t\t\t\tclearTimeout(watchers.tapHold);\n\t\t\t\t\twatchers.tapHold = null;\n\n\t\t\t\t\twatchers.tap = null;\n\t\t\t\t\tclearTimeout(watchers.tapDbl);\n\t\t\t\t\twatchers.tapDbl = null;\n\n\t\t\t\t\tthis.dispatchEvent(type + \"TapHold\", e, component);\n\t\t\t\t}, 1000);\n\t\t\t\tbreak;\n\n\t\t\tcase \"end\":\n\t\t\t\tif(watchers.tap){\n\n\t\t\t\t\twatchers.tap = null;\n\t\t\t\t\tthis.dispatchEvent(type + \"Tap\", e, component);\n\t\t\t\t}\n\n\t\t\t\tif(watchers.tapDbl){\n\t\t\t\t\tclearTimeout(watchers.tapDbl);\n\t\t\t\t\twatchers.tapDbl = null;\n\n\t\t\t\t\tthis.dispatchEvent(type + \"DblTap\", e, component);\n\t\t\t\t}else{\n\t\t\t\t\twatchers.tapDbl = setTimeout(() => {\n\t\t\t\t\t\tclearTimeout(watchers.tapDbl);\n\t\t\t\t\t\twatchers.tapDbl = null;\n\t\t\t\t\t}, 300);\n\t\t\t\t}\n\n\t\t\t\tclearTimeout(watchers.tapHold);\n\t\t\t\twatchers.tapHold = null;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tdispatchEvent(action, e, component){\n\t\tvar componentObj = component.getComponent(),\n\t\tcallback;\n\n\t\tif(this.columnSubscribers[action]){\n\n\t\t\tif(component instanceof Cell){\n\t\t\t\tcallback = component.column.definition[action];\n\t\t\t}else if(component instanceof Column){\n\t\t\t\tcallback = component.definition[action];\n\t\t\t}\n\n\t\t\tif(callback){\n\t\t\t\tcallback(e, componentObj);\n\t\t\t}\n\t\t}\n\n\t\tthis.dispatchExternal(action, e, componentObj);\n\t}\n}\n\nInteraction.moduleName = \"interaction\";\n\nexport default Interaction;\n","import Module from '../../core/Module.js';\n\nimport defaultBindings from './defaults/bindings.js';\nimport defaultActions from './defaults/actions.js';\n\nclass Keybindings extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.watchKeys = null;\n\t\tthis.pressedKeys = null;\n\t\tthis.keyupBinding = false;\n\t\tthis.keydownBinding = false;\n\n\t\tthis.registerTableOption(\"keybindings\", {}); //array for keybindings\n\t\tthis.registerTableOption(\"tabEndNewRow\", false); //create new row when tab to end of table\n\t}\n\n\tinitialize(){\n\t\tvar bindings = this.table.options.keybindings,\n\t\tmergedBindings = {};\n\n\t\tthis.watchKeys = {};\n\t\tthis.pressedKeys = [];\n\n\t\tif(bindings !== false){\n\t\t\tObject.assign(mergedBindings, Keybindings.bindings);\n\t\t\tObject.assign(mergedBindings, bindings);\n\n\t\t\tthis.mapBindings(mergedBindings);\n\t\t\tthis.bindEvents();\n\t\t}\n\n\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\n\t}\n\n\tmapBindings(bindings){\n\t\tfor(let key in bindings){\n\t\t\tif(Keybindings.actions[key]){\n\t\t\t\tif(bindings[key]){\n\t\t\t\t\tif(typeof bindings[key] !== \"object\"){\n\t\t\t\t\t\tbindings[key] = [bindings[key]];\n\t\t\t\t\t}\n\n\t\t\t\t\tbindings[key].forEach((binding) => {\n\t\t\t\t\t\tvar bindingList = Array.isArray(binding) ? binding : [binding];\n\t\t\t\t\t\t\n\t\t\t\t\t\tbindingList.forEach((item) => {\n\t\t\t\t\t\t\tthis.mapBinding(key, item);\n\t\t\t\t\t\t});\t\t\t\t\t\t\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Key Binding Error - no such action:\", key);\n\t\t\t}\n\t\t}\n\t}\n\n\tmapBinding(action, symbolsList){\n\t\tvar binding = {\n\t\t\taction: Keybindings.actions[action],\n\t\t\tkeys: [],\n\t\t\tctrl: false,\n\t\t\tshift: false,\n\t\t\tmeta: false,\n\t\t};\n\n\t\tvar symbols = symbolsList.toString().toLowerCase().split(\" \").join(\"\").split(\"+\");\n\n\t\tsymbols.forEach((symbol) => {\n\t\t\tswitch(symbol){\n\t\t\t\tcase \"ctrl\":\n\t\t\t\t\tbinding.ctrl = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"shift\":\n\t\t\t\t\tbinding.shift = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"meta\":\n\t\t\t\t\tbinding.meta = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tsymbol = isNaN(symbol) ? symbol.toUpperCase().charCodeAt(0) : parseInt(symbol);\n\t\t\t\t\tbinding.keys.push(symbol);\n\n\t\t\t\t\tif(!this.watchKeys[symbol]){\n\t\t\t\t\t\tthis.watchKeys[symbol] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.watchKeys[symbol].push(binding);\n\t\t\t}\n\t\t});\n\t}\n\n\tbindEvents(){\n\t\tvar self = this;\n\n\t\tthis.keyupBinding = function(e){\n\t\t\tvar code = e.keyCode;\n\t\t\tvar bindings = self.watchKeys[code];\n\n\t\t\tif(bindings){\n\n\t\t\t\tself.pressedKeys.push(code);\n\n\t\t\t\tbindings.forEach(function(binding){\n\t\t\t\t\tself.checkBinding(e, binding);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tthis.keydownBinding = function(e){\n\t\t\tvar code = e.keyCode;\n\t\t\tvar bindings = self.watchKeys[code];\n\n\t\t\tif(bindings){\n\n\t\t\t\tvar index = self.pressedKeys.indexOf(code);\n\n\t\t\t\tif(index > -1){\n\t\t\t\t\tself.pressedKeys.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis.table.element.addEventListener(\"keydown\", this.keyupBinding);\n\n\t\tthis.table.element.addEventListener(\"keyup\", this.keydownBinding);\n\t}\n\n\tclearBindings(){\n\t\tif(this.keyupBinding){\n\t\t\tthis.table.element.removeEventListener(\"keydown\", this.keyupBinding);\n\t\t}\n\n\t\tif(this.keydownBinding){\n\t\t\tthis.table.element.removeEventListener(\"keyup\", this.keydownBinding);\n\t\t}\n\t}\n\n\tcheckBinding(e, binding){\n\t\tvar match = true;\n\n\t\tif(e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta){\n\t\t\tbinding.keys.forEach((key) => {\n\t\t\t\tvar index = this.pressedKeys.indexOf(key);\n\n\t\t\t\tif(index == -1){\n\t\t\t\t\tmatch = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(match){\n\t\t\t\tbinding.action.call(this, e);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n}\n\nKeybindings.moduleName = \"keybindings\";\n\n//load defaults\nKeybindings.bindings = defaultBindings;\nKeybindings.actions = defaultActions;\n\nexport default Keybindings;","export default {\n\tnavPrev:\"shift + 9\",\n\tnavNext:9,\n\tnavUp:38,\n\tnavDown:40,\n\tnavLeft:37,\n\tnavRight:39,\n\tscrollPageUp:33,\n\tscrollPageDown:34,\n\tscrollToStart:36,\n\tscrollToEnd:35,\n\tundo:[\"ctrl + 90\", \"meta + 90\"],\n\tredo:[\"ctrl + 89\", \"meta + 89\"],\n\tcopyToClipboard:[\"ctrl + 67\", \"meta + 67\"],\n\n\trangeJumpUp:[\"ctrl + 38\", \"meta + 38\"],\n\trangeJumpDown:[\"ctrl + 40\", \"meta + 40\"],\n\trangeJumpLeft:[\"ctrl + 37\", \"meta + 37\"],\n\trangeJumpRight:[\"ctrl + 39\", \"meta + 39\"],\n\trangeExpandUp:\"shift + 38\",\n\trangeExpandDown:\"shift + 40\",\n\trangeExpandLeft:\"shift + 37\",\n\trangeExpandRight:\"shift + 39\",\n\trangeExpandJumpUp:[\"ctrl + shift + 38\", \"meta + shift + 38\"],\n\trangeExpandJumpDown:[\"ctrl + shift + 40\", \"meta + shift + 40\"],\n\trangeExpandJumpLeft:[\"ctrl + shift + 37\", \"meta + shift + 37\"],\n\trangeExpandJumpRight:[\"ctrl + shift + 39\", \"meta + shift + 39\"],\n};\n","export default {\n\tkeyBlock:function(e){\n\t\te.stopPropagation();\n\t\te.preventDefault();\n\t},\n\tscrollPageUp:function(e){\n\t\tvar rowManager = this.table.rowManager,\n\t\tnewPos = rowManager.scrollTop - rowManager.element.clientHeight;\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(e){\n\t\tvar rowManager = this.table.rowManager,\n\t\tnewPos = rowManager.scrollTop + rowManager.element.clientHeight,\n\t\tscrollMax = 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\n\t},\n\tscrollToStart:function(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(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(e){\n\t\tthis.dispatch(\"keybinding-nav-prev\", e);\n\t},\n\n\tnavNext:function(e){\n\t\tthis.dispatch(\"keybinding-nav-next\", e);\n\t},\n\n\tnavLeft:function(e){\n\t\tthis.dispatch(\"keybinding-nav-left\", e);\n\t},\n\n\tnavRight:function(e){\n\t\tthis.dispatch(\"keybinding-nav-right\", e);\n\t},\n\n\tnavUp:function(e){\n\t\tthis.dispatch(\"keybinding-nav-up\", e);\n\t},\n\n\tnavDown:function(e){\n\t\tthis.dispatch(\"keybinding-nav-down\", e);\n\t},\n\n\trangeJumpLeft: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"left\", true, false);\n\t},\n\trangeJumpRight: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"right\", true, false);\n\t},\n\trangeJumpUp: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"up\", true, false);\n\t},\n\trangeJumpDown: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"down\", true, false);\n\t},\n\trangeExpandLeft: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"left\", false, true);\n\t},\n\trangeExpandRight: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"right\", false, true);\n\t},\n\trangeExpandUp: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"up\", false, true);\n\t},\n\trangeExpandDown: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"down\", false, true);\n\t},\n\trangeExpandJumpLeft: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"left\", true, true);\n\t},\n\trangeExpandJumpRight: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"right\", true, true);\n\t},\n\trangeExpandJumpUp: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"up\", true, true);\n\t},\n\trangeExpandJumpDown: function(e){\n\t\tthis.dispatch(\"keybinding-nav-range\", e, \"down\", true, true);\n\t},\n\n\tundo:function(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(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(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","import Module from '../../core/Module.js';\n\nclass Menu extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.menuContainer = null;\n\t\tthis.nestedMenuBlock = false;\n\t\t\n\t\tthis.currentComponent = null;\n\t\tthis.rootPopup = null;\n\t\t\n\t\tthis.columnSubscribers = {};\n\t\t\n\t\tthis.registerTableOption(\"menuContainer\", undefined); //deprecated\n\t\t\n\t\tthis.registerTableOption(\"rowContextMenu\", false);\n\t\tthis.registerTableOption(\"rowClickMenu\", false);\n\t\tthis.registerTableOption(\"rowDblClickMenu\", false);\n\t\tthis.registerTableOption(\"groupContextMenu\", false);\n\t\tthis.registerTableOption(\"groupClickMenu\", false);\n\t\tthis.registerTableOption(\"groupDblClickMenu\", false);\n\t\t\n\t\tthis.registerColumnOption(\"headerContextMenu\");\n\t\tthis.registerColumnOption(\"headerClickMenu\");\n\t\tthis.registerColumnOption(\"headerDblClickMenu\");\n\t\tthis.registerColumnOption(\"headerMenu\");\n\t\tthis.registerColumnOption(\"headerMenuIcon\");\n\t\tthis.registerColumnOption(\"contextMenu\");\n\t\tthis.registerColumnOption(\"clickMenu\");\n\t\tthis.registerColumnOption(\"dblClickMenu\");\n\t\t\n\t}\n\t\n\tinitialize(){\n\t\tthis.deprecatedOptionsCheck();\n\t\tthis.initializeRowWatchers();\n\t\tthis.initializeGroupWatchers();\n\t\t\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t}\n\t\n\tdeprecatedOptionsCheck(){\n\t\tif(!this.deprecationCheck(\"menuContainer\", \"popupContainer\")){\n\t\t\tthis.table.options.popupContainer = this.table.options.menuContainer;\n\t\t}\n\t}\t\n\t\n\tinitializeRowWatchers(){\n\t\tif(this.table.options.rowContextMenu){\n\t\t\tthis.subscribe(\"row-contextmenu\", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu));\n\t\t\tthis.table.on(\"rowTapHold\", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.rowClickMenu){\n\t\t\tthis.subscribe(\"row-click\", this.loadMenuEvent.bind(this, this.table.options.rowClickMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.rowDblClickMenu){\n\t\t\tthis.subscribe(\"row-dblclick\", this.loadMenuEvent.bind(this, this.table.options.rowDblClickMenu));\n\t\t}\n\t}\n\t\n\tinitializeGroupWatchers(){\n\t\tif(this.table.options.groupContextMenu){\n\t\t\tthis.subscribe(\"group-contextmenu\", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu));\n\t\t\tthis.table.on(\"groupTapHold\", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.groupClickMenu){\n\t\t\tthis.subscribe(\"group-click\", this.loadMenuEvent.bind(this, this.table.options.groupClickMenu));\n\t\t}\n\t\t\n\t\tif(this.table.options.groupDblClickMenu){\n\t\t\tthis.subscribe(\"group-dblclick\", this.loadMenuEvent.bind(this, this.table.options.groupDblClickMenu));\n\t\t}\n\t}\n\n\tinitializeColumn(column){\n\t\tvar\tdef = column.definition;\n\t\t\n\t\t//handle column events\n\t\tif(def.headerContextMenu && !this.columnSubscribers.headerContextMenu){\n\t\t\tthis.columnSubscribers.headerContextMenu = this.loadMenuTableColumnEvent.bind(this, \"headerContextMenu\");\n\t\t\tthis.subscribe(\"column-contextmenu\", this.columnSubscribers.headerContextMenu);\n\t\t\tthis.table.on(\"headerTapHold\", this.loadMenuTableColumnEvent.bind(this, \"headerContextMenu\"));\n\t\t}\n\t\t\n\t\tif(def.headerClickMenu && !this.columnSubscribers.headerClickMenu){\n\t\t\tthis.columnSubscribers.headerClickMenu = this.loadMenuTableColumnEvent.bind(this, \"headerClickMenu\");\n\t\t\tthis.subscribe(\"column-click\", this.columnSubscribers.headerClickMenu);\n\t\t}\n\t\t\n\t\tif(def.headerDblClickMenu && !this.columnSubscribers.headerDblClickMenu){\n\t\t\tthis.columnSubscribers.headerDblClickMenu = this.loadMenuTableColumnEvent.bind(this, \"headerDblClickMenu\");\n\t\t\tthis.subscribe(\"column-dblclick\", this.columnSubscribers.headerDblClickMenu);\n\t\t}\n\t\t\n\t\tif(def.headerMenu){\n\t\t\tthis.initializeColumnHeaderMenu(column);\n\t\t}\n\t\t\n\t\t//handle cell events\n\t\tif(def.contextMenu && !this.columnSubscribers.contextMenu){\n\t\t\tthis.columnSubscribers.contextMenu = this.loadMenuTableCellEvent.bind(this, \"contextMenu\");\n\t\t\tthis.subscribe(\"cell-contextmenu\", this.columnSubscribers.contextMenu);\n\t\t\tthis.table.on(\"cellTapHold\", this.loadMenuTableCellEvent.bind(this, \"contextMenu\"));\n\t\t}\n\t\t\n\t\tif(def.clickMenu && !this.columnSubscribers.clickMenu){\n\t\t\tthis.columnSubscribers.clickMenu = this.loadMenuTableCellEvent.bind(this, \"clickMenu\");\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.clickMenu);\n\t\t}\n\t\t\n\t\tif(def.dblClickMenu && !this.columnSubscribers.dblClickMenu){\n\t\t\tthis.columnSubscribers.dblClickMenu = this.loadMenuTableCellEvent.bind(this, \"dblClickMenu\");\n\t\t\tthis.subscribe(\"cell-dblclick\", this.columnSubscribers.dblClickMenu);\n\t\t}\n\t}\n\t\n\tinitializeColumnHeaderMenu(column){\n\t\tvar icon = column.definition.headerMenuIcon,\n\t\theaderMenuEl;\n\t\t\n\t\theaderMenuEl = document.createElement(\"span\");\n\t\theaderMenuEl.classList.add(\"tabulator-header-popup-button\");\n\t\t\n\t\tif(icon){\n\t\t\tif(typeof icon === \"function\"){\n\t\t\t\ticon = icon(column.getComponent());\n\t\t\t}\n\t\t\t\n\t\t\tif(icon instanceof HTMLElement){\n\t\t\t\theaderMenuEl.appendChild(icon);\n\t\t\t}else{\n\t\t\t\theaderMenuEl.innerHTML = icon;\n\t\t\t}\n\t\t}else{\n\t\t\theaderMenuEl.innerHTML = \"⋮\";\n\t\t}\n\t\t\n\t\theaderMenuEl.addEventListener(\"click\", (e) => {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\t\n\t\t\tthis.loadMenuEvent(column.definition.headerMenu, e, column);\n\t\t});\n\t\t\n\t\tcolumn.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);\n\t}\n\t\n\tloadMenuTableCellEvent(option, e, cell){\n\t\tif(cell._cell){\n\t\t\tcell = cell._cell;\n\t\t}\n\t\t\n\t\tif(cell.column.definition[option]){\n\t\t\tthis.loadMenuEvent(cell.column.definition[option], e, cell);\n\t\t}\n\t}\n\t\n\tloadMenuTableColumnEvent(option, e, column){\n\t\tif(column._column){\n\t\t\tcolumn = column._column;\n\t\t}\n\t\t\n\t\tif(column.definition[option]){\n\t\t\tthis.loadMenuEvent(column.definition[option], e, column);\n\t\t}\n\t}\n\t\n\tloadMenuEvent(menu, e, component){\n\t\tif(component._group){\n\t\t\tcomponent = component._group;\n\t\t}else if(component._row){\n\t\t\tcomponent = component._row;\n\t\t}\n\t\t\n\t\tmenu = typeof menu == \"function\" ? menu.call(this.table, e, component.getComponent()) : menu;\n\t\t\n\t\tthis.loadMenu(e, component, menu);\n\t}\n\t\n\tloadMenu(e, component, menu, parentEl, parentPopup){\n\t\tvar touch = !(e instanceof MouseEvent),\t\t\n\t\tmenuEl = document.createElement(\"div\"),\n\t\tpopup;\n\t\t\n\t\tmenuEl.classList.add(\"tabulator-menu\");\n\t\t\n\t\tif(!touch){\n\t\t\te.preventDefault();\n\t\t}\n\t\t\n\t\t//abort if no menu set\n\t\tif(!menu || !menu.length){\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif(!parentEl){\n\t\t\tif(this.nestedMenuBlock){\n\t\t\t\t//abort if child menu already open\n\t\t\t\tif(this.rootPopup){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tthis.nestedMenuBlock = setTimeout(() => {\n\t\t\t\t\tthis.nestedMenuBlock = false;\n\t\t\t\t}, 100);\n\t\t\t}\n\t\t\t\n\t\t\tif(this.rootPopup){\n\t\t\t\tthis.rootPopup.hide();\t\n\t\t\t}\n\t\t\t\n\t\t\tthis.rootPopup = popup = this.popup(menuEl);\n\t\t\t\n\t\t}else{\n\t\t\tpopup = parentPopup.child(menuEl);\n\t\t}\n\t\t\n\t\tmenu.forEach((item) => {\n\t\t\tvar itemEl = document.createElement(\"div\"),\n\t\t\tlabel = item.label,\n\t\t\tdisabled = item.disabled;\n\t\t\t\n\t\t\tif(item.separator){\n\t\t\t\titemEl.classList.add(\"tabulator-menu-separator\");\n\t\t\t}else{\n\t\t\t\titemEl.classList.add(\"tabulator-menu-item\");\n\t\t\t\t\n\t\t\t\tif(typeof label == \"function\"){\n\t\t\t\t\tlabel = label.call(this.table, component.getComponent());\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(label instanceof Node){\n\t\t\t\t\titemEl.appendChild(label);\n\t\t\t\t}else{\n\t\t\t\t\titemEl.innerHTML = label;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(typeof disabled == \"function\"){\n\t\t\t\t\tdisabled = disabled.call(this.table, component.getComponent());\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(disabled){\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-disabled\");\n\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\tif(item.menu && item.menu.length){\n\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tthis.loadMenu(e, component, item.menu, itemEl, popup);\n\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(item.action){\n\t\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\titem.action(e, component.getComponent());\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\t\n\t\t\t\tif(item.menu && item.menu.length){\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-submenu\");\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tmenuEl.appendChild(itemEl);\n\t\t});\n\t\t\n\t\tmenuEl.addEventListener(\"click\", (e) => {\n\t\t\tif(this.rootPopup){\n\t\t\t\tthis.rootPopup.hide();\n\t\t\t}\n\t\t});\n\t\t\n\t\tpopup.show(parentEl || e);\n\t\t\n\t\tif(popup === this.rootPopup){\n\t\t\tthis.rootPopup.hideOnBlur(() => {\n\t\t\t\tthis.rootPopup = null;\n\t\t\t\t\n\t\t\t\tif(this.currentComponent){\n\t\t\t\t\tthis.dispatch(\"menu-closed\", menu, popup);\n\t\t\t\t\tthis.dispatchExternal(\"menuClosed\", this.currentComponent.getComponent());\n\t\t\t\t\tthis.currentComponent = null;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tthis.currentComponent = component;\n\t\t\t\n\t\t\tthis.dispatch(\"menu-opened\", menu, popup);\n\t\t\tthis.dispatchExternal(\"menuOpened\", component.getComponent());\n\t\t}\n\t}\n}\n\nMenu.moduleName = \"menu\";\n\nexport default Menu;\n","import Module from '../../core/Module.js';\nimport Helpers from '../../core/tools/Helpers.js';\n\nclass MoveColumns extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.placeholderElement = this.createPlaceholderElement();\n\t\tthis.hoverElement = false; //floating column header element\n\t\tthis.checkTimeout = false; //click check timeout holder\n\t\tthis.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click\n\t\tthis.moving = false; //currently moving column\n\t\tthis.toCol = false; //destination column\n\t\tthis.toColAfter = false; //position of moving column relative to the destination column\n\t\tthis.startX = 0; //starting position within header element\n\t\tthis.autoScrollMargin = 40; //auto scroll on edge when within margin\n\t\tthis.autoScrollStep = 5; //auto scroll distance in pixels\n\t\tthis.autoScrollTimeout = false; //auto scroll timeout\n\t\tthis.touchMove = false;\n\t\t\n\t\tthis.moveHover = this.moveHover.bind(this);\n\t\tthis.endMove = this.endMove.bind(this);\n\t\t\n\t\tthis.registerTableOption(\"movableColumns\", false); //enable movable columns\n\t}\n\t\n\tcreatePlaceholderElement(){\n\t\tvar el = document.createElement(\"div\");\n\t\t\n\t\tel.classList.add(\"tabulator-col\");\n\t\tel.classList.add(\"tabulator-col-placeholder\");\n\t\t\n\t\treturn el;\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.movableColumns){\n\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\t\tthis.subscribe(\"alert-show\", this.abortMove.bind(this));\n\t\t}\n\t}\n\n\tabortMove(){\n\t\tclearTimeout(this.checkTimeout);\n\t}\n\t\n\tinitializeColumn(column){\n\t\tvar self = this,\n\t\tconfig = {},\n\t\tcolEl;\n\t\t\n\t\tif(!column.modules.frozen && !column.isGroup){\n\t\t\tcolEl = column.getElement();\n\t\t\t\n\t\t\tconfig.mousemove = function(e){\n\t\t\t\tif(column.parent === self.moving.parent){\n\t\t\t\t\tif((((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(colEl).left) + self.table.columnManager.contentsElement.scrollLeft) > (column.getWidth() / 2)){\n\t\t\t\t\t\tif(self.toCol !== column || !self.toColAfter){\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);\n\t\t\t\t\t\t\tself.moveColumn(column, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(self.toCol !== column || self.toColAfter){\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl);\n\t\t\t\t\t\t\tself.moveColumn(column, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}.bind(self);\n\t\t\t\n\t\t\tcolEl.addEventListener(\"mousedown\", function(e){\n\t\t\t\tself.touchMove = false;\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\n\t\t\t\t\t\tself.startMove(e, column);\n\t\t\t\t\t}, self.checkPeriod);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tcolEl.addEventListener(\"mouseup\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tif(self.checkTimeout){\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tself.bindTouchEvents(column);\n\t\t}\n\t\t\n\t\tcolumn.modules.moveColumn = config;\n\t}\n\t\n\tbindTouchEvents(column){\n\t\tvar colEl = column.getElement(),\n\t\tstartXMove = false, //shifting center position of the cell\n\t\tnextCol, prevCol, nextColWidth, prevColWidth, nextColWidthLast, prevColWidthLast;\n\t\t\n\t\tcolEl.addEventListener(\"touchstart\", (e) => {\n\t\t\tthis.checkTimeout = setTimeout(() => {\n\t\t\t\tthis.touchMove = true;\n\t\t\t\tnextCol = column.nextColumn();\n\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth()/2 : 0;\n\t\t\t\tprevCol = column.prevColumn();\n\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth()/2 : 0;\n\t\t\t\tnextColWidthLast = 0;\n\t\t\t\tprevColWidthLast = 0;\n\t\t\t\tstartXMove = false;\n\t\t\t\t\n\t\t\t\tthis.startMove(e, column);\n\t\t\t}, this.checkPeriod);\n\t\t}, {passive: true});\n\t\t\n\t\tcolEl.addEventListener(\"touchmove\", (e) => {\n\t\t\tvar diff, moveToCol;\n\t\t\t\n\t\t\tif(this.moving){\n\t\t\t\tthis.moveHover(e);\n\t\t\t\t\n\t\t\t\tif(!startXMove){\n\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tdiff = e.touches[0].pageX - startXMove;\n\t\t\t\t\n\t\t\t\tif(diff > 0){\n\t\t\t\t\tif(nextCol && diff - nextColWidthLast > nextColWidth){\n\t\t\t\t\t\tmoveToCol = nextCol;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(moveToCol !== column){\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement().nextSibling);\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, true);\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(prevCol && -diff - prevColWidthLast > prevColWidth){\n\t\t\t\t\t\tmoveToCol = prevCol;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(moveToCol !== column){\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement());\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(moveToCol){\n\t\t\t\t\tnextCol = moveToCol.nextColumn();\n\t\t\t\t\tnextColWidthLast = nextColWidth;\n\t\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\n\t\t\t\t\tprevCol = moveToCol.prevColumn();\n\t\t\t\t\tprevColWidthLast = prevColWidth;\n\t\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}, {passive: true});\n\t\t\n\t\tcolEl.addEventListener(\"touchend\", (e) => {\n\t\t\tif(this.checkTimeout){\n\t\t\t\tclearTimeout(this.checkTimeout);\n\t\t\t}\n\t\t\tif(this.moving){\n\t\t\t\tthis.endMove(e);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tstartMove(e, column){\n\t\tvar element = column.getElement(),\n\t\theaderElement = this.table.columnManager.getContentsElement(),\n\t\theadersElement = this.table.columnManager.getHeadersElement();\n\t\t\n\t\tthis.moving = column;\n\t\tthis.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(element).left;\n\t\t\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\n\t\t\n\t\t//create placeholder\n\t\tthis.placeholderElement.style.width = column.getWidth() + \"px\";\n\t\tthis.placeholderElement.style.height = column.getHeight() + \"px\";\n\t\t\n\t\telement.parentNode.insertBefore(this.placeholderElement, element);\n\t\telement.parentNode.removeChild(element);\n\t\t\n\t\t//create hover element\n\t\tthis.hoverElement = element.cloneNode(true);\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\n\t\t\n\t\theaderElement.appendChild(this.hoverElement);\n\t\t\n\t\tthis.hoverElement.style.left = \"0\";\n\t\tthis.hoverElement.style.bottom = (headerElement.clientHeight - headersElement.offsetHeight) + \"px\";\n\t\t\n\t\tif(!this.touchMove){\n\t\t\tthis._bindMouseMove();\n\t\t\t\n\t\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\n\t\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\n\t\t}\n\t\t\n\t\tthis.moveHover(e);\n\t}\n\t\n\t_bindMouseMove(){\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\n\t\t\tif(column.modules.moveColumn.mousemove){\n\t\t\t\tcolumn.getElement().addEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t_unbindMouseMove(){\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\n\t\t\tif(column.modules.moveColumn.mousemove){\n\t\t\t\tcolumn.getElement().removeEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\n\t\t\t}\n\t\t});\n\t}\n\t\n\tmoveColumn(column, after){\n\t\tvar movingCells = this.moving.getCells();\n\t\t\n\t\tthis.toCol = column;\n\t\tthis.toColAfter = after;\n\t\t\n\t\tif(after){\n\t\t\tcolumn.getCells().forEach(function(cell, i){\n\t\t\t\tvar cellEl = cell.getElement(true);\n\t\t\t\t\n\t\t\t\tif(cellEl.parentNode && movingCells[i]){\n\t\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t}else{\n\t\t\tcolumn.getCells().forEach(function(cell, i){\n\t\t\t\tvar cellEl = cell.getElement(true);\n\t\t\t\t\n\t\t\t\tif(cellEl.parentNode && movingCells[i]){\n\t\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\t\n\tendMove(e){\n\t\tif(e.which === 1 || this.touchMove){\n\t\t\tthis._unbindMouseMove();\n\t\t\t\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\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\n\t\t\t\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\n\t\t\t\n\t\t\tif(this.toCol){\n\t\t\t\tthis.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);\n\t\t\t}\n\t\t\t\n\t\t\tthis.moving = false;\n\t\t\tthis.toCol = false;\n\t\t\tthis.toColAfter = false;\n\t\t\t\n\t\t\tif(!this.touchMove){\n\t\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\n\t\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tmoveHover(e){\n\t\tvar columnHolder = this.table.columnManager.getContentsElement(),\n\t\tscrollLeft = columnHolder.scrollLeft,\n\t\txPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left) + scrollLeft,\n\t\tscrollPos;\n\t\t\n\t\tthis.hoverElement.style.left = (xPos - this.startX) + \"px\";\n\t\t\n\t\tif(xPos - scrollLeft < this.autoScrollMargin){\n\t\t\tif(!this.autoScrollTimeout){\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\n\t\t\t\t\tscrollPos = Math.max(0,scrollLeft-5);\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\n\t\t\t\t\tthis.autoScrollTimeout = false;\n\t\t\t\t}, 1);\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(scrollLeft + columnHolder.clientWidth - xPos < this.autoScrollMargin){\n\t\t\tif(!this.autoScrollTimeout){\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\n\t\t\t\t\tscrollPos = Math.min(columnHolder.clientWidth, scrollLeft+5);\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\n\t\t\t\t\tthis.autoScrollTimeout = false;\n\t\t\t\t}, 1);\n\t\t\t}\n\t\t}\n\t}\n}\n\nMoveColumns.moduleName = \"moveColumn\";\n\nexport default MoveColumns;\n","import Module from '../../core/Module.js';\nimport Helpers from '../../core/tools/Helpers.js';\n\nclass MoveRows extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.placeholderElement = this.createPlaceholderElement();\n\t\tthis.hoverElement = false; //floating row header element\n\t\tthis.checkTimeout = false; //click check timeout holder\n\t\tthis.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click\n\t\tthis.moving = false; //currently moving row\n\t\tthis.toRow = false; //destination row\n\t\tthis.toRowAfter = false; //position of moving row relative to the destination row\n\t\tthis.hasHandle = false; //row has handle instead of fully movable row\n\t\tthis.startY = 0; //starting Y position within header element\n\t\tthis.startX = 0; //starting X position within header element\n\n\t\tthis.moveHover = this.moveHover.bind(this);\n\t\tthis.endMove = this.endMove.bind(this);\n\t\tthis.tableRowDropEvent = false;\n\n\t\tthis.touchMove = false;\n\n\t\tthis.connection = false;\n\t\tthis.connectionSelectorsTables = false;\n\t\tthis.connectionSelectorsElements = false;\n\t\tthis.connectionElements = [];\n\t\tthis.connections = [];\n\n\t\tthis.connectedTable = false;\n\t\tthis.connectedRow = false;\n\n\t\tthis.registerTableOption(\"movableRows\", false); //enable movable rows\n\t\tthis.registerTableOption(\"movableRowsConnectedTables\", false); //tables for movable rows to be connected to\n\t\tthis.registerTableOption(\"movableRowsConnectedElements\", false); //other elements for movable rows to be connected to\n\t\tthis.registerTableOption(\"movableRowsSender\", false);\n\t\tthis.registerTableOption(\"movableRowsReceiver\", \"insert\");\n\n\t\tthis.registerColumnOption(\"rowHandle\");\n\t}\n\n\tcreatePlaceholderElement(){\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-row\");\n\t\tel.classList.add(\"tabulator-row-placeholder\");\n\n\t\treturn el;\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.movableRows){\n\t\t\tthis.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;\n\t\t\tthis.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;\n\n\t\t\tthis.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;\n\n\t\t\tthis.subscribe(\"cell-init\", this.initializeCell.bind(this));\n\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\n\t\t}\n\t}\n\n\tinitializeGroupHeader(group){\n\t\tvar self = this,\n\t\tconfig = {};\n\n\t\t//inter table drag drop\n\t\tconfig.mouseup = function(e){\n\t\t\tself.tableRowDrop(e, group);\n\t\t}.bind(self);\n\n\t\t//same table drag drop\n\t\tconfig.mousemove = function(e){\n\t\t\tvar rowEl;\n\n\t\t\tif(((e.pageY - Helpers.elOffset(group.element).top) + self.table.rowManager.element.scrollTop) > (group.getHeight() / 2)){\n\t\t\t\tif(self.toRow !== group || !self.toRowAfter){\n\t\t\t\t\trowEl = group.getElement();\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\n\t\t\t\t\tself.moveRow(group, true);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(self.toRow !== group || self.toRowAfter){\n\t\t\t\t\trowEl = group.getElement();\n\t\t\t\t\tif(rowEl.previousSibling){\n\t\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\n\t\t\t\t\t\tself.moveRow(group, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}.bind(self);\n\n\t\tgroup.modules.moveRow = config;\n\t}\n\n\tinitializeRow(row){\n\t\tvar self = this,\n\t\tconfig = {},\n\t\trowEl;\n\n\t\t//inter table drag drop\n\t\tconfig.mouseup = function(e){\n\t\t\tself.tableRowDrop(e, row);\n\t\t}.bind(self);\n\n\t\t//same table drag drop\n\t\tconfig.mousemove = function(e){\n\t\t\tvar rowEl = row.getElement();\n\n\t\t\tif(((e.pageY - Helpers.elOffset(rowEl).top) + self.table.rowManager.element.scrollTop) > (row.getHeight() / 2)){\n\t\t\t\tif(self.toRow !== row || !self.toRowAfter){\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\n\t\t\t\t\tself.moveRow(row, true);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(self.toRow !== row || self.toRowAfter){\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\n\t\t\t\t\tself.moveRow(row, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}.bind(self);\n\n\n\t\tif(!this.hasHandle){\n\n\t\t\trowEl = row.getElement();\n\n\t\t\trowEl.addEventListener(\"mousedown\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\n\t\t\t\t\t\tself.startMove(e, row);\n\t\t\t\t\t}, self.checkPeriod);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\trowEl.addEventListener(\"mouseup\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tif(self.checkTimeout){\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.bindTouchEvents(row, row.getElement());\n\t\t}\n\n\t\trow.modules.moveRow = config;\n\t}\n\n\tinitializeColumn(column){\n\t\tif(column.definition.rowHandle && this.table.options.movableRows !== false){\n\t\t\tthis.hasHandle = true;\n\t\t}\n\t}\n\n\tinitializeCell(cell){\n\t\tif(cell.column.definition.rowHandle && this.table.options.movableRows !== false){\n\t\t\tvar self = this,\n\t\t\tcellEl = cell.getElement(true);\n\n\t\t\tcellEl.addEventListener(\"mousedown\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\n\t\t\t\t\t\tself.startMove(e, cell.row);\n\t\t\t\t\t}, self.checkPeriod);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcellEl.addEventListener(\"mouseup\", function(e){\n\t\t\t\tif(e.which === 1){\n\t\t\t\t\tif(self.checkTimeout){\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.bindTouchEvents(cell.row, cellEl);\n\t\t}\n\t}\n\n\tbindTouchEvents(row, element){\n\t\tvar startYMove = false, //shifting center position of the cell\n\t\tnextRow, prevRow, nextRowHeight, prevRowHeight, nextRowHeightLast, prevRowHeightLast;\n\n\t\telement.addEventListener(\"touchstart\", (e) => {\n\t\t\tthis.checkTimeout = setTimeout(() => {\n\t\t\t\tthis.touchMove = true;\n\t\t\t\tnextRow = row.nextRow();\n\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight()/2 : 0;\n\t\t\t\tprevRow = row.prevRow();\n\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight()/2 : 0;\n\t\t\t\tnextRowHeightLast = 0;\n\t\t\t\tprevRowHeightLast = 0;\n\t\t\t\tstartYMove = false;\n\n\t\t\t\tthis.startMove(e, row);\n\t\t\t}, this.checkPeriod);\n\t\t}, {passive: true});\n\t\tthis.moving, this.toRow, this.toRowAfter;\n\t\telement.addEventListener(\"touchmove\", (e) => {\n\n\t\t\tvar diff, moveToRow;\n\n\t\t\tif(this.moving){\n\t\t\t\te.preventDefault();\n\n\t\t\t\tthis.moveHover(e);\n\n\t\t\t\tif(!startYMove){\n\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t}\n\n\t\t\t\tdiff = e.touches[0].pageY - startYMove;\n\n\t\t\t\tif(diff > 0){\n\t\t\t\t\tif(nextRow && diff - nextRowHeightLast > nextRowHeight){\n\t\t\t\t\t\tmoveToRow = nextRow;\n\n\t\t\t\t\t\tif(moveToRow !== row){\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement().nextSibling);\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, true);\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(prevRow && -diff - prevRowHeightLast > prevRowHeight){\n\t\t\t\t\t\tmoveToRow = prevRow;\n\n\t\t\t\t\t\tif(moveToRow !== row){\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement());\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(moveToRow){\n\t\t\t\t\tnextRow = moveToRow.nextRow();\n\t\t\t\t\tnextRowHeightLast = nextRowHeight;\n\t\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\n\t\t\t\t\tprevRow = moveToRow.prevRow();\n\t\t\t\t\tprevRowHeightLast = prevRowHeight;\n\t\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\telement.addEventListener(\"touchend\", (e) => {\n\t\t\tif(this.checkTimeout){\n\t\t\t\tclearTimeout(this.checkTimeout);\n\t\t\t}\n\t\t\tif(this.moving){\n\t\t\t\tthis.endMove(e);\n\t\t\t\tthis.touchMove = false;\n\t\t\t}\n\t\t});\n\t}\n\n\t_bindMouseMove(){\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow && row.modules.moveRow.mousemove){\n\t\t\t\trow.getElement().addEventListener(\"mousemove\", row.modules.moveRow.mousemove);\n\t\t\t}\n\t\t});\n\t}\n\n\t_unbindMouseMove(){\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow && row.modules.moveRow.mousemove){\n\t\t\t\trow.getElement().removeEventListener(\"mousemove\", row.modules.moveRow.mousemove);\n\t\t\t}\n\t\t});\n\t}\n\n\tstartMove(e, row){\n\t\tvar element = row.getElement();\n\n\t\tthis.setStartPosition(e, row);\n\n\t\tthis.moving = row;\n\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\n\n\t\t//create placeholder\n\t\tthis.placeholderElement.style.width = row.getWidth() + \"px\";\n\t\tthis.placeholderElement.style.height = row.getHeight() + \"px\";\n\n\t\tif(!this.connection){\n\t\t\telement.parentNode.insertBefore(this.placeholderElement, element);\n\t\t\telement.parentNode.removeChild(element);\n\t\t}else{\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-sending\");\n\t\t\tthis.connectToTables(row);\n\t\t}\n\n\t\t//create hover element\n\t\tthis.hoverElement = element.cloneNode(true);\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\n\n\t\tif(this.connection){\n\t\t\tdocument.body.appendChild(this.hoverElement);\n\t\t\tthis.hoverElement.style.left = \"0\";\n\t\t\tthis.hoverElement.style.top = \"0\";\n\t\t\tthis.hoverElement.style.width = this.table.element.clientWidth + \"px\";\n\t\t\tthis.hoverElement.style.whiteSpace = \"nowrap\";\n\t\t\tthis.hoverElement.style.overflow = \"hidden\";\n\t\t\tthis.hoverElement.style.pointerEvents = \"none\";\n\t\t}else{\n\t\t\tthis.table.rowManager.getTableElement().appendChild(this.hoverElement);\n\n\t\t\tthis.hoverElement.style.left = \"0\";\n\t\t\tthis.hoverElement.style.top = \"0\";\n\n\t\t\tthis._bindMouseMove();\n\t\t}\n\n\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\n\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\n\n\t\tthis.dispatchExternal(\"rowMoving\", row.getComponent());\n\n\t\tthis.moveHover(e);\n\t}\n\n\tsetStartPosition(e, row){\n\t\tvar pageX = this.touchMove ? e.touches[0].pageX : e.pageX,\n\t\tpageY = this.touchMove ? e.touches[0].pageY : e.pageY,\n\t\telement, position;\n\n\t\telement = row.getElement();\n\t\tif(this.connection){\n\t\t\tposition = element.getBoundingClientRect();\n\n\t\t\tthis.startX = position.left - pageX + window.pageXOffset;\n\t\t\tthis.startY = position.top - pageY + window.pageYOffset;\n\t\t}else{\n\t\t\tthis.startY = (pageY - element.getBoundingClientRect().top);\n\t\t}\n\t}\n\n\tendMove(e){\n\t\tif(!e || e.which === 1 || this.touchMove){\n\t\t\tthis._unbindMouseMove();\n\n\t\t\tif(!this.connection){\n\t\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\n\t\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\n\t\t\t}\n\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\n\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\t\tif(this.toRow){\n\t\t\t\tthis.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);\n\t\t\t}else{\n\t\t\t\tthis.dispatchExternal(\"rowMoveCancelled\", this.moving.getComponent());\n\t\t\t}\n\n\t\t\tthis.moving = false;\n\t\t\tthis.toRow = false;\n\t\t\tthis.toRowAfter = false;\n\n\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\n\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\n\n\t\t\tif(this.connection){\n\t\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-sending\");\n\t\t\t\tthis.disconnectFromTables();\n\t\t\t}\n\t\t}\n\t}\n\n\tmoveRow(row, after){\n\t\tthis.toRow = row;\n\t\tthis.toRowAfter = after;\n\t}\n\n\tmoveHover(e){\n\t\tif(this.connection){\n\t\t\tthis.moveHoverConnections.call(this, e);\n\t\t}else{\n\t\t\tthis.moveHoverTable.call(this, e);\n\t\t}\n\t}\n\n\tmoveHoverTable(e){\n\t\tvar rowHolder = this.table.rowManager.getElement(),\n\t\tscrollTop = rowHolder.scrollTop,\n\t\tyPos = ((this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top) + scrollTop;\n\t\t\n\t\tthis.hoverElement.style.top = Math.min(yPos - this.startY, this.table.rowManager.element.scrollHeight - this.hoverElement.offsetHeight) + \"px\";\n\t}\n\n\tmoveHoverConnections(e){\n\t\tthis.hoverElement.style.left = (this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX)) + \"px\";\n\t\tthis.hoverElement.style.top = (this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY)) + \"px\";\n\t}\n\n\telementRowDrop(e, element, row){\n\t\tthis.dispatchExternal(\"movableRowsElementDrop\", e, element, row ? row.getComponent() : false);\n\t}\n\n\t//establish connection with other tables\n\tconnectToTables(row){\n\t\tvar connectionTables;\n\n\t\tif(this.connectionSelectorsTables){\n\t\t\tconnectionTables = this.commsConnections(this.connectionSelectorsTables);\n\n\t\t\tthis.dispatchExternal(\"movableRowsSendingStart\", connectionTables);\n\n\t\t\tthis.commsSend(this.connectionSelectorsTables, \"moveRow\", \"connect\", {\n\t\t\t\trow:row,\n\t\t\t});\n\t\t}\n\n\t\tif(this.connectionSelectorsElements){\n\n\t\t\tthis.connectionElements = [];\n\n\t\t\tif(!Array.isArray(this.connectionSelectorsElements)){\n\t\t\t\tthis.connectionSelectorsElements = [this.connectionSelectorsElements];\n\t\t\t}\n\n\t\t\tthis.connectionSelectorsElements.forEach((query) => {\n\t\t\t\tif(typeof query === \"string\"){\n\t\t\t\t\tthis.connectionElements = this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));\n\t\t\t\t}else{\n\t\t\t\t\tthis.connectionElements.push(query);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.connectionElements.forEach((element) => {\n\t\t\t\tvar dropEvent = (e) => {\n\t\t\t\t\tthis.elementRowDrop(e, element, this.moving);\n\t\t\t\t};\n\n\t\t\t\telement.addEventListener(\"mouseup\", dropEvent);\n\t\t\t\telement.tabulatorElementDropEvent = dropEvent;\n\n\t\t\t\telement.classList.add(\"tabulator-movingrow-receiving\");\n\t\t\t});\n\t\t}\n\t}\n\n\t//disconnect from other tables\n\tdisconnectFromTables(){\n\t\tvar connectionTables;\n\n\t\tif(this.connectionSelectorsTables){\n\t\t\tconnectionTables = this.commsConnections(this.connectionSelectorsTables);\n\n\t\t\tthis.dispatchExternal(\"movableRowsSendingStop\", connectionTables);\n\n\t\t\tthis.commsSend(this.connectionSelectorsTables, \"moveRow\", \"disconnect\");\n\t\t}\n\n\t\tthis.connectionElements.forEach((element) => {\n\t\t\telement.classList.remove(\"tabulator-movingrow-receiving\");\n\t\t\telement.removeEventListener(\"mouseup\", element.tabulatorElementDropEvent);\n\t\t\tdelete element.tabulatorElementDropEvent;\n\t\t});\n\t}\n\n\t//accept incomming connection\n\tconnect(table, row){\n\t\tif(!this.connectedTable){\n\t\t\tthis.connectedTable = table;\n\t\t\tthis.connectedRow = row;\n\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-receiving\");\n\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\n\t\t\t\t\trow.getElement().addEventListener(\"mouseup\", row.modules.moveRow.mouseup);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.tableRowDropEvent = this.tableRowDrop.bind(this);\n\n\t\t\tthis.table.element.addEventListener(\"mouseup\", this.tableRowDropEvent);\n\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStart\", row, table);\n\n\t\t\treturn true;\n\t\t}else{\n\t\t\tconsole.warn(\"Move Row Error - Table cannot accept connection, already connected to table:\", this.connectedTable);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t//close incoming connection\n\tdisconnect(table){\n\t\tif(table === this.connectedTable){\n\t\t\tthis.connectedTable = false;\n\t\t\tthis.connectedRow = false;\n\n\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-receiving\");\n\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\n\t\t\t\t\trow.getElement().removeEventListener(\"mouseup\", row.modules.moveRow.mouseup);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.table.element.removeEventListener(\"mouseup\", this.tableRowDropEvent);\n\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStop\", table);\n\t\t}else{\n\t\t\tconsole.warn(\"Move Row Error - trying to disconnect from non connected table\");\n\t\t}\n\t}\n\n\tdropComplete(table, row, success){\n\t\tvar sender = false;\n\n\t\tif(success){\n\n\t\t\tswitch(typeof this.table.options.movableRowsSender){\n\t\t\t\tcase \"string\":\n\t\t\t\t\tsender = this.senders[this.table.options.movableRowsSender];\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\tsender = this.table.options.movableRowsSender;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif(sender){\n\t\t\t\tsender.call(this, this.moving ? this.moving.getComponent() : undefined, row ? row.getComponent() : undefined, table);\n\t\t\t}else{\n\t\t\t\tif(this.table.options.movableRowsSender){\n\t\t\t\t\tconsole.warn(\"Mover Row Error - no matching sender found:\", this.table.options.movableRowsSender);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.dispatchExternal(\"movableRowsSent\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\n\t\t}else{\n\t\t\tthis.dispatchExternal(\"movableRowsSentFailed\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\n\t\t}\n\n\t\tthis.endMove();\n\t}\n\n\ttableRowDrop(e, row){\n\t\tvar receiver = false,\n\t\tsuccess = false;\n\n\t\te.stopImmediatePropagation();\n\n\t\tswitch(typeof this.table.options.movableRowsReceiver){\n\t\t\tcase \"string\":\n\t\t\t\treceiver = this.receivers[this.table.options.movableRowsReceiver];\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\treceiver = this.table.options.movableRowsReceiver;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(receiver){\n\t\t\tsuccess = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t\t}else{\n\t\t\tconsole.warn(\"Mover Row Error - no matching receiver found:\", this.table.options.movableRowsReceiver);\n\t\t}\n\n\t\tif(success){\n\t\t\tthis.dispatchExternal(\"movableRowsReceived\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t\t}else{\n\t\t\tthis.dispatchExternal(\"movableRowsReceivedFailed\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t\t}\n\n\t\tthis.commsSend(this.connectedTable, \"moveRow\", \"dropcomplete\", {\n\t\t\trow:row,\n\t\t\tsuccess:success,\n\t\t});\n\t}\n\n\tcommsReceived(table, action, data){\n\t\tswitch(action){\n\t\t\tcase \"connect\":\n\t\t\t\treturn this.connect(table, data.row);\n\n\t\t\tcase \"disconnect\":\n\t\t\t\treturn this.disconnect(table);\n\n\t\t\tcase \"dropcomplete\":\n\t\t\t\treturn this.dropComplete(table, data.row, data.success);\n\t\t}\n\t}\n}\n\nMoveRows.prototype.receivers = {\n\tinsert:function(fromRow, toRow, fromTable){\n\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\n\t\treturn true;\n\t},\n\n\tadd:function(fromRow, toRow, fromTable){\n\t\tthis.table.addRow(fromRow.getData());\n\t\treturn true;\n\t},\n\n\tupdate:function(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(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(fromRow, toRow, toTable){\n\t\tfromRow.delete();\n\t}\n};\n\nMoveRows.moduleName = \"moveRow\";\n\nexport default MoveRows;","import Module from '../../core/Module.js';\n\nimport defaultMutators from './defaults/mutators.js';\n\nclass Mutator extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.allowedTypes = [\"\", \"data\", \"edit\", \"clipboard\"]; //list of mutation types\n\t\tthis.enabled = true;\n\n\t\tthis.registerColumnOption(\"mutator\");\n\t\tthis.registerColumnOption(\"mutatorParams\");\n\t\tthis.registerColumnOption(\"mutatorData\");\n\t\tthis.registerColumnOption(\"mutatorDataParams\");\n\t\tthis.registerColumnOption(\"mutatorEdit\");\n\t\tthis.registerColumnOption(\"mutatorEditParams\");\n\t\tthis.registerColumnOption(\"mutatorClipboard\");\n\t\tthis.registerColumnOption(\"mutatorClipboardParams\");\n\t\tthis.registerColumnOption(\"mutateLink\");\n\t}\n\n\tinitialize(){\n\t\tthis.subscribe(\"cell-value-changing\", this.transformCell.bind(this));\n\t\tthis.subscribe(\"cell-value-changed\", this.mutateLink.bind(this));\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"row-data-init-before\", this.rowDataChanged.bind(this));\n\t\tthis.subscribe(\"row-data-changing\", this.rowDataChanged.bind(this));\n\t}\n\n\trowDataChanged(row, tempData, updatedData){\n\t\treturn this.transformRow(tempData, \"data\", updatedData);\n\t}\n\n\t//initialize column mutator\n\tinitializeColumn(column){\n\t\tvar match = false,\n\t\tconfig = {};\n\n\t\tthis.allowedTypes.forEach((type) => {\n\t\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\t\tmutator;\n\n\t\t\tif(column.definition[key]){\n\t\t\t\tmutator = this.lookupMutator(column.definition[key]);\n\n\t\t\t\tif(mutator){\n\t\t\t\t\tmatch = true;\n\n\t\t\t\t\tconfig[key] = {\n\t\t\t\t\t\tmutator:mutator,\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif(match){\n\t\t\tcolumn.modules.mutate = config;\n\t\t}\n\t}\n\n\tlookupMutator(value){\n\t\tvar mutator = false;\n\n\t\t//set column mutator\n\t\tswitch(typeof value){\n\t\t\tcase \"string\":\n\t\t\t\tif(Mutator.mutators[value]){\n\t\t\t\t\tmutator = Mutator.mutators[value];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Mutator Error - No such mutator found, ignoring: \", value);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tmutator = value;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn mutator;\n\t}\n\n\t//apply mutator to row\n\ttransformRow(data, type, updatedData){\n\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\tvalue;\n\n\t\tif(this.enabled){\n\n\t\t\tthis.table.columnManager.traverse((column) => {\n\t\t\t\tvar mutator, params, component;\n\n\t\t\t\tif(column.modules.mutate){\n\t\t\t\t\tmutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;\n\n\t\t\t\t\tif(mutator){\n\t\t\t\t\t\tvalue = column.getFieldValue(typeof updatedData !== \"undefined\" ? updatedData : data);\n\n\t\t\t\t\t\tif((type == \"data\" && !updatedData)|| typeof value !== \"undefined\"){\n\t\t\t\t\t\t\tcomponent = column.getComponent();\n\t\t\t\t\t\t\tparams = typeof mutator.params === \"function\" ? mutator.params(value, data, type, component) : mutator.params;\n\t\t\t\t\t\t\tcolumn.setFieldValue(data, mutator.mutator(value, data, type, params, component));\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\treturn data;\n\t}\n\n\t//apply mutator to new cell value\n\ttransformCell(cell, value){\n\t\tif(cell.column.modules.mutate){\n\t\t\tvar mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,\n\t\t\ttempData = {};\n\n\t\t\tif(mutator){\n\t\t\t\ttempData = Object.assign(tempData, cell.row.getData());\n\t\t\t\tcell.column.setFieldValue(tempData, value);\n\t\t\t\treturn mutator.mutator(value, tempData, \"edit\", mutator.params, cell.getComponent());\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tmutateLink(cell){\n\t\tvar links = cell.column.definition.mutateLink;\n\n\t\tif(links){\n\t\t\tif(!Array.isArray(links)){\n\t\t\t\tlinks = [links];\n\t\t\t}\n\n\t\t\tlinks.forEach((link) => {\n\t\t\t\tvar linkCell = cell.row.getCell(link);\n\n\t\t\t\tif(linkCell){\n\t\t\t\t\tlinkCell.setValue(linkCell.getValue(), true, true);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tenable(){\n\t\tthis.enabled = true;\n\t}\n\n\tdisable(){\n\t\tthis.enabled = false;\n\t}\n}\n\nMutator.moduleName = \"mutator\";\n\n//load defaults\nMutator.mutators = defaultMutators;\n\nexport default Mutator;","export default {};","import rows from './pageCounters/rows.js';\nimport pages from './pageCounters/pages.js';\n\n\nexport default {\n\trows:rows,\n\tpages:pages,\n};","export default function(pageSize, currentRow, currentPage, totalRows, totalPages){\n\tvar el = document.createElement(\"span\"),\n\tshowingEl = document.createElement(\"span\"),\n\tvalueEl = document.createElement(\"span\"),\n\tofEl = document.createElement(\"span\"),\n\ttotalEl = document.createElement(\"span\"),\n\trowsEl = document.createElement(\"span\");\n\n\tthis.table.modules.localize.langBind(\"pagination|counter|showing\", (value) => {\n\t\tshowingEl.innerHTML = value;\n\t});\n\n\tthis.table.modules.localize.langBind(\"pagination|counter|of\", (value) => {\n\t\tofEl.innerHTML = value;\n\t});\n\n\tthis.table.modules.localize.langBind(\"pagination|counter|rows\", (value) => {\n\t\trowsEl.innerHTML = value;\n\t});\n\n\tif(totalRows){\n\t\tvalueEl.innerHTML = \" \" + currentRow + \"-\" + Math.min((currentRow + pageSize - 1), totalRows) + \" \";\n\t\t\n\t\ttotalEl.innerHTML = \" \" + totalRows + \" \";\n\t\t\n\t\tel.appendChild(showingEl);\n\t\tel.appendChild(valueEl);\n\t\tel.appendChild(ofEl);\n\t\tel.appendChild(totalEl);\n\t\tel.appendChild(rowsEl);\n\t}else{\n\t\tvalueEl.innerHTML = \" 0 \";\n\n\t\tel.appendChild(showingEl);\n\t\tel.appendChild(valueEl);\n\t\tel.appendChild(rowsEl);\n\t}\n\t\n\treturn el;\n}","export default function(pageSize, currentRow, currentPage, totalRows, totalPages){\n\n\tvar el = document.createElement(\"span\"),\n\tshowingEl = document.createElement(\"span\"),\n\tvalueEl = document.createElement(\"span\"),\n\tofEl = document.createElement(\"span\"),\n\ttotalEl = document.createElement(\"span\"),\n\trowsEl = document.createElement(\"span\");\n\t\n\tthis.table.modules.localize.langBind(\"pagination|counter|showing\", (value) => {\n\t\tshowingEl.innerHTML = value;\n\t});\n\t\n\tvalueEl.innerHTML = \" \" + currentPage + \" \";\n\t\n\tthis.table.modules.localize.langBind(\"pagination|counter|of\", (value) => {\n\t\tofEl.innerHTML = value;\n\t});\n\t\n\ttotalEl.innerHTML = \" \" + totalPages + \" \";\n\t\n\tthis.table.modules.localize.langBind(\"pagination|counter|pages\", (value) => {\n\t\trowsEl.innerHTML = value;\n\t});\n\t\n\tel.appendChild(showingEl);\n\tel.appendChild(valueEl);\n\tel.appendChild(ofEl);\n\tel.appendChild(totalEl);\n\tel.appendChild(rowsEl);\n\t\n\treturn el;\n}","import Module from '../../core/Module.js';\n\nimport defaultPageCounters from './defaults/pageCounters.js';\n\nclass Page extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.mode = \"local\";\n\t\tthis.progressiveLoad = false;\n\t\t\n\t\tthis.element = null;\n\t\tthis.pageCounterElement = null;\n\t\tthis.pageCounter = null;\n\t\t\n\t\tthis.size = 0;\n\t\tthis.page = 1;\n\t\tthis.count = 5;\n\t\tthis.max = 1;\n\n\t\tthis.remoteRowCountEstimate = null;\n\t\t\n\t\tthis.initialLoad = true;\n\t\tthis.dataChanging = false; //flag to check if data is being changed by this module\n\t\t\n\t\tthis.pageSizes = [];\n\t\t\n\t\tthis.registerTableOption(\"pagination\", false); //set pagination type\n\t\tthis.registerTableOption(\"paginationMode\", \"local\"); //local or remote pagination\n\t\tthis.registerTableOption(\"paginationSize\", false); //set number of rows to a page\n\t\tthis.registerTableOption(\"paginationInitialPage\", 1); //initial page to show on load\n\t\tthis.registerTableOption(\"paginationCounter\", false); // set pagination counter\n\t\tthis.registerTableOption(\"paginationCounterElement\", false); // set pagination counter\n\t\tthis.registerTableOption(\"paginationButtonCount\", 5); // set count of page button\n\t\tthis.registerTableOption(\"paginationSizeSelector\", false); //add pagination size selector element\n\t\tthis.registerTableOption(\"paginationElement\", false); //element to hold pagination numbers\n\t\t// this.registerTableOption(\"paginationDataSent\", {}); //pagination data sent to the server\n\t\t// this.registerTableOption(\"paginationDataReceived\", {}); //pagination data received from the server\n\t\tthis.registerTableOption(\"paginationAddRow\", \"page\"); //add rows on table or page\n\t\t\n\t\tthis.registerTableOption(\"progressiveLoad\", false); //progressive loading\n\t\tthis.registerTableOption(\"progressiveLoadDelay\", 0); //delay between requests\n\t\tthis.registerTableOption(\"progressiveLoadScrollMargin\", 0); //margin before scroll begins\n\t\t\n\t\tthis.registerTableFunction(\"setMaxPage\", this.setMaxPage.bind(this));\n\t\tthis.registerTableFunction(\"setPage\", this.setPage.bind(this));\n\t\tthis.registerTableFunction(\"setPageToRow\", this.userSetPageToRow.bind(this));\n\t\tthis.registerTableFunction(\"setPageSize\", this.userSetPageSize.bind(this));\n\t\tthis.registerTableFunction(\"getPageSize\", this.getPageSize.bind(this));\n\t\tthis.registerTableFunction(\"previousPage\", this.previousPage.bind(this));\n\t\tthis.registerTableFunction(\"nextPage\", this.nextPage.bind(this));\n\t\tthis.registerTableFunction(\"getPage\", this.getPage.bind(this));\n\t\tthis.registerTableFunction(\"getPageMax\", this.getPageMax.bind(this));\n\t\t\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"pageTo\", this.setPageToRow.bind(this));\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.pagination){\n\t\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\n\t\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\n\t\t\tthis.subscribe(\"data-processed\", this.initialLoadComplete.bind(this));\n\t\t\tthis.subscribe(\"table-built\", this.calculatePageSizes.bind(this));\n\t\t\tthis.subscribe(\"footer-redraw\", this.footerRedraw.bind(this));\n\n\t\t\tif(this.table.options.paginationAddRow == \"page\"){\n\t\t\t\tthis.subscribe(\"row-adding-position\", this.rowAddingPosition.bind(this));\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.paginationMode === \"remote\"){\n\t\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\n\t\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\n\t\t\t}\n\t\t\t\n\t\t\tif(this.table.options.progressiveLoad){\n\t\t\t\tconsole.error(\"Progressive Load Error - Pagination and progressive load cannot be used at the same time\");\n\t\t\t}\n\t\t\t\n\t\t\tthis.registerDisplayHandler(this.restOnRenderBefore.bind(this), 40);\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 50);\n\t\t\t\n\t\t\tthis.createElements();\n\t\t\tthis.initializePageCounter();\n\t\t\tthis.initializePaginator();\n\t\t}else if(this.table.options.progressiveLoad){\n\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\n\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\n\t\t\tthis.subscribe(\"table-built\", this.calculatePageSizes.bind(this));\n\t\t\tthis.subscribe(\"data-processed\", this.initialLoadComplete.bind(this));\n\t\t\t\n\t\t\tthis.initializeProgressive(this.table.options.progressiveLoad);\n\t\t\t\n\t\t\tif(this.table.options.progressiveLoad === \"scroll\"){\n\t\t\t\tthis.subscribe(\"scroll-vertical\", this.scrollVertical.bind(this));\n\t\t\t}\n\t\t}\n\t}\n\t\n\trowAddingPosition(row, top){\n\t\tvar rowManager = this.table.rowManager,\n\t\tdisplayRows = rowManager.getDisplayRows(),\n\t\tindex;\n\t\t\n\t\tif(top){\n\t\t\tif(displayRows.length){\n\t\t\t\tindex = displayRows[0];\n\t\t\t}else{\n\t\t\t\tif(rowManager.activeRows.length){\n\t\t\t\t\tindex = rowManager.activeRows[rowManager.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(displayRows.length){\n\t\t\t\tindex = displayRows[displayRows.length - 1];\n\t\t\t\ttop = displayRows.length < this.size ? false : true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn {index, top};\n\t}\n\t\n\tcalculatePageSizes(){\n\t\tvar testElRow, testElCell;\n\t\t\n\t\tif(this.table.options.paginationSize){\n\t\t\tthis.size = this.table.options.paginationSize;\n\t\t}else{\n\t\t\ttestElRow = document.createElement(\"div\");\n\t\t\ttestElRow.classList.add(\"tabulator-row\");\n\t\t\ttestElRow.style.visibility = \"hidden\";\n\t\t\t\n\t\t\ttestElCell = document.createElement(\"div\");\n\t\t\ttestElCell.classList.add(\"tabulator-cell\");\n\t\t\ttestElCell.innerHTML = \"Page Row Test\";\n\t\t\t\n\t\t\ttestElRow.appendChild(testElCell);\n\t\t\t\n\t\t\tthis.table.rowManager.getTableElement().appendChild(testElRow);\n\t\t\t\n\t\t\tthis.size = Math.floor(this.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);\n\t\t\t\n\t\t\tthis.table.rowManager.getTableElement().removeChild(testElRow);\n\t\t}\n\n\t\tthis.dispatchExternal(\"pageSizeChanged\", this.size);\n\t\t\n\t\tthis.generatePageSizeSelectList();\n\t}\n\t\n\tinitialLoadComplete(){\n\t\tthis.initialLoad = false;\n\t}\n\t\n\tremotePageParams(data, config, silent, params){\n\t\tif(!this.initialLoad){\n\t\t\tif((this.progressiveLoad && !silent) || (!this.progressiveLoad && !this.dataChanging)){\n\t\t\t\tthis.reset(true);\n\t\t\t}\n\t\t}\n\t\t\n\t\t//configure request params\n\t\tparams.page = this.page;\n\t\t\n\t\t//set page size if defined\n\t\tif(this.size){\n\t\t\tparams.size = this.size;\n\t\t}\n\t\t\n\t\treturn params;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\tuserSetPageToRow(row){\n\t\tif(this.table.options.pagination){\n\t\t\trow = this.table.rowManager.findRow(row);\n\t\t\t\n\t\t\tif(row){\n\t\t\t\treturn this.setPageToRow(row);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn Promise.reject();\n\t}\n\t\n\tuserSetPageSize(size){\n\t\tif(this.table.options.pagination){\n\t\t\tthis.setPageSize(size);\n\t\t\treturn this.setPage(1);\n\t\t}else{\n\t\t\treturn false;\n\t\t}\n\t}\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tscrollVertical(top, dir){\n\t\tvar element, diff, margin;\n\t\tif(!dir && !this.table.dataLoader.loading){\n\t\t\telement = this.table.rowManager.getElement();\n\t\t\tdiff = element.scrollHeight - element.clientHeight - top;\n\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (element.clientHeight * 2);\n\t\t\t\n\t\t\tif(diff < margin){\n\t\t\t\tthis.nextPage()\n\t\t\t\t\t.catch(() => {}); //consume the exception thrown when on the last page\n\t\t\t}\n\t\t}\n\t}\n\t\n\trestOnRenderBefore(rows, renderInPosition){\n\t\tif(!renderInPosition){\n\t\t\tif(this.mode === \"local\"){\n\t\t\t\tthis.reset();\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn rows;\n\t}\n\t\n\trowsUpdated(){\n\t\tthis.refreshData(true, \"all\");\n\t}\n\t\n\tcreateElements(){\n\t\tvar button;\n\t\t\n\t\tthis.element = document.createElement(\"span\");\n\t\tthis.element.classList.add(\"tabulator-paginator\");\n\t\t\n\t\tthis.pagesElement = document.createElement(\"span\");\n\t\tthis.pagesElement.classList.add(\"tabulator-pages\");\n\t\t\n\t\tbutton = document.createElement(\"button\");\n\t\tbutton.classList.add(\"tabulator-page\");\n\t\tbutton.setAttribute(\"type\", \"button\");\n\t\tbutton.setAttribute(\"role\", \"button\");\n\t\tbutton.setAttribute(\"aria-label\", \"\");\n\t\tbutton.setAttribute(\"title\", \"\");\n\t\t\n\t\tthis.firstBut = button.cloneNode(true);\n\t\tthis.firstBut.setAttribute(\"data-page\", \"first\");\n\t\t\n\t\tthis.prevBut = button.cloneNode(true);\n\t\tthis.prevBut.setAttribute(\"data-page\", \"prev\");\n\t\t\n\t\tthis.nextBut = button.cloneNode(true);\n\t\tthis.nextBut.setAttribute(\"data-page\", \"next\");\n\t\t\n\t\tthis.lastBut = button.cloneNode(true);\n\t\tthis.lastBut.setAttribute(\"data-page\", \"last\");\n\t\t\n\t\tif(this.table.options.paginationSizeSelector){\n\t\t\tthis.pageSizeSelect = document.createElement(\"select\");\n\t\t\tthis.pageSizeSelect.classList.add(\"tabulator-page-size\");\n\t\t}\n\t}\n\t\n\tgeneratePageSizeSelectList(){\n\t\tvar pageSizes = [];\n\t\t\n\t\tif(this.pageSizeSelect){\n\t\t\t\n\t\t\tif(Array.isArray(this.table.options.paginationSizeSelector)){\n\t\t\t\tpageSizes = this.table.options.paginationSizeSelector;\n\t\t\t\tthis.pageSizes = pageSizes;\n\t\t\t\t\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\n\t\t\t\t\tpageSizes.unshift(this.size);\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\t\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\n\t\t\t\t\tpageSizes = [];\n\t\t\t\t\t\n\t\t\t\t\tfor (let i = 1; i < 5; i++){\n\t\t\t\t\t\tpageSizes.push(this.size * i);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.pageSizes = pageSizes;\n\t\t\t\t}else{\n\t\t\t\t\tpageSizes = this.pageSizes;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\twhile(this.pageSizeSelect.firstChild) this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);\n\t\t\t\n\t\t\tpageSizes.forEach((item) => {\n\t\t\t\tvar itemEl = document.createElement(\"option\");\n\t\t\t\titemEl.value = item;\n\t\t\t\t\n\t\t\t\tif(item === true){\n\t\t\t\t\tthis.langBind(\"pagination|all\", function(value){\n\t\t\t\t\t\titemEl.innerHTML = value;\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\titemEl.innerHTML = item;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tthis.pageSizeSelect.appendChild(itemEl);\n\t\t\t});\n\t\t\t\n\t\t\tthis.pageSizeSelect.value = this.size;\n\t\t}\n\t}\n\t\n\tinitializePageCounter(){\n\t\tvar counter = this.table.options.paginationCounter,\n\t\tpageCounter = null;\n\t\t\n\t\tif(counter){\n\t\t\tif(typeof counter === \"function\"){\n\t\t\t\tpageCounter = counter;\n\t\t\t}else{\n\t\t\t\tpageCounter = Page.pageCounters[counter];\n\t\t\t}\n\t\t\t\n\t\t\tif(pageCounter){\n\t\t\t\tthis.pageCounter = pageCounter;\n\t\t\t\t\n\t\t\t\tthis.pageCounterElement = document.createElement(\"span\");\n\t\t\t\tthis.pageCounterElement.classList.add(\"tabulator-page-counter\");\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Pagination Error - No such page counter found: \", counter);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//setup pagination\n\tinitializePaginator(hidden){\n\t\tvar pageSelectLabel, paginationCounterHolder;\n\t\t\n\t\tif(!hidden){\n\t\t\t//build pagination element\n\t\t\t\n\t\t\t//bind localizations\n\t\t\tthis.langBind(\"pagination|first\", (value) => {\n\t\t\t\tthis.firstBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|first_title\", (value) => {\n\t\t\t\tthis.firstBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.firstBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|prev\", (value) => {\n\t\t\t\tthis.prevBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|prev_title\", (value) => {\n\t\t\t\tthis.prevBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.prevBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|next\", (value) => {\n\t\t\t\tthis.nextBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|next_title\", (value) => {\n\t\t\t\tthis.nextBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.nextBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|last\", (value) => {\n\t\t\t\tthis.lastBut.innerHTML = value;\n\t\t\t});\n\t\t\t\n\t\t\tthis.langBind(\"pagination|last_title\", (value) => {\n\t\t\t\tthis.lastBut.setAttribute(\"aria-label\", value);\n\t\t\t\tthis.lastBut.setAttribute(\"title\", value);\n\t\t\t});\n\t\t\t\n\t\t\t//click bindings\n\t\t\tthis.firstBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.setPage(1);\n\t\t\t});\n\t\t\t\n\t\t\tthis.prevBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.previousPage();\n\t\t\t});\n\t\t\t\n\t\t\tthis.nextBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.nextPage();\n\t\t\t});\n\t\t\t\n\t\t\tthis.lastBut.addEventListener(\"click\", () => {\n\t\t\t\tthis.setPage(this.max);\n\t\t\t});\n\t\t\t\n\t\t\tif(this.table.options.paginationElement){\n\t\t\t\tthis.element = this.table.options.paginationElement;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.pageSizeSelect){\n\t\t\t\tpageSelectLabel = document.createElement(\"label\");\n\t\t\t\t\n\t\t\t\tthis.langBind(\"pagination|page_size\", (value) => {\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"aria-label\", value);\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"title\", value);\n\t\t\t\t\tpageSelectLabel.innerHTML = value;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.element.appendChild(pageSelectLabel);\n\t\t\t\tthis.element.appendChild(this.pageSizeSelect);\n\t\t\t\t\n\t\t\t\tthis.pageSizeSelect.addEventListener(\"change\", (e) => {\n\t\t\t\t\tthis.setPageSize(this.pageSizeSelect.value == \"true\" ? true : this.pageSizeSelect.value);\n\t\t\t\t\tthis.setPage(1);\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t//append to DOM\n\t\t\tthis.element.appendChild(this.firstBut);\n\t\t\tthis.element.appendChild(this.prevBut);\n\t\t\tthis.element.appendChild(this.pagesElement);\n\t\t\tthis.element.appendChild(this.nextBut);\n\t\t\tthis.element.appendChild(this.lastBut);\n\t\t\t\n\t\t\tif(!this.table.options.paginationElement){\n\t\t\t\tif(this.table.options.paginationCounter){\n\n\t\t\t\t\tpaginationCounterHolder; \n\n\t\t\t\t\tif(this.table.options.paginationCounterElement){\n\t\t\t\t\t\tif(this.table.options.paginationCounterElement instanceof HTMLElement){\n\t\t\t\t\t\t\tthis.table.options.paginationCounterElement.appendChild(this.pageCounterElement);\n\t\t\t\t\t\t}else if(typeof this.table.options.paginationCounterElement === \"string\"){\n\t\t\t\t\t\t\tpaginationCounterHolder = document.querySelector(this.table.options.paginationCounterElement);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(paginationCounterHolder){\n\t\t\t\t\t\t\t\tpaginationCounterHolder.appendChild(this.pageCounterElement);\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tconsole.warn(\"Pagination Error - Unable to find element matching paginationCounterElement selector:\", this.table.options.paginationCounterElement);\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\tthis.footerAppend(this.pageCounterElement);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.footerAppend(this.element);\n\t\t\t}\n\t\t\t\n\t\t\tthis.page = this.table.options.paginationInitialPage;\n\t\t\tthis.count = this.table.options.paginationButtonCount;\n\t\t}\n\t\t\n\t\t//set default values\n\t\tthis.mode = this.table.options.paginationMode;\n\t}\n\t\n\tinitializeProgressive(mode){\n\t\tthis.initializePaginator(true);\n\t\tthis.mode = \"progressive_\" + mode;\n\t\tthis.progressiveLoad = true;\n\t}\n\t\n\ttrackChanges(){\n\t\tthis.dispatch(\"page-changed\");\n\t}\n\t\n\t//calculate maximum page from number of rows\n\tsetMaxRows(rowCount){\n\t\tif(!rowCount){\n\t\t\tthis.max = 1;\n\t\t}else{\n\t\t\tthis.max = this.size === true ? 1 : Math.ceil(rowCount/this.size);\n\t\t}\n\t\t\n\t\tif(this.page > this.max){\n\t\t\tthis.page = this.max;\n\t\t}\n\t}\n\t\n\t//reset to first page without triggering action\n\treset(force){\n\t\tif(!this.initialLoad){\n\t\t\tif(this.mode == \"local\" || force){\n\t\t\t\tthis.page = 1;\n\t\t\t\tthis.trackChanges();\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//set the maximum page\n\tsetMaxPage(max){\n\t\t\n\t\tmax = parseInt(max);\n\t\t\n\t\tthis.max = max || 1;\n\t\t\n\t\tif(this.page > this.max){\n\t\t\tthis.page = this.max;\n\t\t\tthis.trigger();\n\t\t}\n\t}\n\t\n\t//set current page number\n\tsetPage(page){\n\t\tswitch(page){\n\t\t\tcase \"first\":\n\t\t\t\treturn this.setPage(1);\n\t\n\t\t\tcase \"prev\":\n\t\t\t\treturn this.previousPage();\n\t\t\t\n\t\t\tcase \"next\":\n\t\t\t\treturn this.nextPage();\n\t\t\t\n\t\t\tcase \"last\":\n\t\t\t\treturn this.setPage(this.max);\n\t\t}\n\t\t\n\t\tpage = parseInt(page);\n\t\t\n\t\tif((page > 0 && page <= this.max) || this.mode !== \"local\"){\n\t\t\tthis.page = page;\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t\t\n\t\t\treturn this.trigger();\n\t\t}else{\n\t\t\tconsole.warn(\"Pagination Error - Requested page is out of range of 1 - \" + this.max + \":\", page);\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\tsetPageToRow(row){\n\t\tvar rows = this.displayRows(-1);\n\t\tvar index = rows.indexOf(row);\n\t\n\t\tif(index > -1){\n\t\t\tvar page = this.size === true ? 1 : Math.ceil((index + 1) / this.size);\n\t\t\t\n\t\t\treturn this.setPage(page);\n\t\t}else{\n\t\t\tconsole.warn(\"Pagination Error - Requested row is not visible\");\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\tsetPageSize(size){\n\t\tif(size !== true){\n\t\t\tsize = parseInt(size);\n\t\t}\n\n\t\tif(size > 0){\n\t\t\tthis.size = size;\n\t\t\tthis.dispatchExternal(\"pageSizeChanged\", size);\n\t\t}\n\t\t\n\t\tif(this.pageSizeSelect){\n\t\t\t// this.pageSizeSelect.value = size;\n\t\t\tthis.generatePageSizeSelectList();\n\t\t}\n\t\t\n\t\tthis.trackChanges();\n\t}\n\t\n\t_setPageCounter(totalRows, size, currentRow){\n\t\tvar content;\n\t\t\n\t\tif(this.pageCounter){\n\n\t\t\tif(this.mode === \"remote\"){\n\t\t\t\tsize = this.size;\n\t\t\t\tcurrentRow = ((this.page - 1) * this.size) + 1;\n\t\t\t\ttotalRows = this.remoteRowCountEstimate;\n\t\t\t}\n\n\t\t\tcontent = this.pageCounter.call(this, size, currentRow, this.page, totalRows, this.max);\n\t\t\t\n\t\t\tswitch(typeof content){\n\t\t\t\tcase \"object\":\n\t\t\t\t\tif(content instanceof Node){\n\t\t\t\t\t\n\t\t\t\t\t\t//clear previous cell contents\n\t\t\t\t\t\twhile(this.pageCounterElement.firstChild) this.pageCounterElement.removeChild(this.pageCounterElement.firstChild);\n\t\t\t\t\t\n\t\t\t\t\t\tthis.pageCounterElement.appendChild(content);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.pageCounterElement.innerHTML = \"\";\n\t\t\t\t\t\n\t\t\t\t\t\tif(content != null){\n\t\t\t\t\t\t\tconsole.warn(\"Page Counter Error - Page Counter has returned a type of object, the only valid page counter object return is an instance of Node, the page counter returned:\", content);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"undefined\":\n\t\t\t\t\tthis.pageCounterElement.innerHTML = \"\";\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthis.pageCounterElement.innerHTML = content;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//setup the pagination buttons\n\t_setPageButtons(){\n\t\tlet leftSize = Math.floor((this.count-1) / 2);\n\t\tlet rightSize = Math.ceil((this.count-1) / 2);\n\t\tlet min = this.max - this.page + leftSize + 1 < this.count ? this.max-this.count+1: Math.max(this.page-leftSize,1);\n\t\tlet max = this.page <= rightSize? Math.min(this.count, this.max) :Math.min(this.page+rightSize, this.max);\n\t\t\n\t\twhile(this.pagesElement.firstChild) this.pagesElement.removeChild(this.pagesElement.firstChild);\n\t\t\n\t\tif(this.page == 1){\n\t\t\tthis.firstBut.disabled = true;\n\t\t\tthis.prevBut.disabled = true;\n\t\t}else{\n\t\t\tthis.firstBut.disabled = false;\n\t\t\tthis.prevBut.disabled = false;\n\t\t}\n\t\t\n\t\tif(this.page == this.max){\n\t\t\tthis.lastBut.disabled = true;\n\t\t\tthis.nextBut.disabled = true;\n\t\t}else{\n\t\t\tthis.lastBut.disabled = false;\n\t\t\tthis.nextBut.disabled = false;\n\t\t}\n\t\t\n\t\tfor(let i = min; i <= max; i++){\n\t\t\tif(i>0 && i <= this.max){\n\t\t\t\tthis.pagesElement.appendChild(this._generatePageButton(i));\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.footerRedraw();\n\t}\n\t\n\t_generatePageButton(page){\n\t\tvar button = document.createElement(\"button\");\n\t\t\n\t\tbutton.classList.add(\"tabulator-page\");\n\t\tif(page == this.page){\n\t\t\tbutton.classList.add(\"active\");\n\t\t}\n\t\t\n\t\tbutton.setAttribute(\"type\", \"button\");\n\t\tbutton.setAttribute(\"role\", \"button\");\n\t\t\n\t\tthis.langBind(\"pagination|page_title\", (value) => {\n\t\t\tbutton.setAttribute(\"aria-label\", value + \" \" + page);\n\t\t\tbutton.setAttribute(\"title\", value + \" \" + page);\n\t\t});\n\t\t\n\t\tbutton.setAttribute(\"data-page\", page);\n\t\tbutton.textContent = page;\n\t\t\n\t\tbutton.addEventListener(\"click\", (e) => {\n\t\t\tthis.setPage(page);\n\t\t});\n\t\t\n\t\treturn button;\n\t}\n\t\n\t//previous page\n\tpreviousPage(){\n\t\tif(this.page > 1){\n\t\t\tthis.page--;\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t\t\n\t\t\treturn this.trigger();\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\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\t//next page\n\tnextPage(){\n\t\tif(this.page < this.max){\n\t\t\tthis.page++;\n\t\t\t\n\t\t\tthis.trackChanges();\n\t\t\t\n\t\t\treturn this.trigger();\n\t\t\t\n\t\t}else{\n\t\t\tif(!this.progressiveLoad){\n\t\t\t\tconsole.warn(\"Pagination Error - Next page would be greater than maximum page of \" + this.max + \":\", this.max + 1);\n\t\t\t}\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\t//return current page number\n\tgetPage(){\n\t\treturn this.page;\n\t}\n\t\n\t//return max page number\n\tgetPageMax(){\n\t\treturn this.max;\n\t}\n\t\n\tgetPageSize(size){\n\t\treturn this.size;\n\t}\n\t\n\tgetMode(){\n\t\treturn this.mode;\n\t}\n\t\n\t//return appropriate rows for current page\n\tgetRows(data){\n\t\tvar actualRowPageSize = 0,\n\t\toutput, start, end, actualStartRow;\n\n\t\tvar actualRows = data.filter((row) => {\n\t\t\treturn row.type === \"row\";\n\t\t});\n\t\t\n\t\tif(this.mode == \"local\"){\n\t\t\toutput = [];\n\t\t\t\n\t\t\tthis.setMaxRows(data.length);\n\t\t\t\n\t\t\tif(this.size === true){\n\t\t\t\tstart = 0;\n\t\t\t\tend = data.length;\n\t\t\t}else{\n\t\t\t\tstart = this.size * (this.page - 1);\n\t\t\t\tend = start + parseInt(this.size);\n\t\t\t}\n\t\t\t\n\t\t\tthis._setPageButtons();\n\t\t\t\n\t\t\tfor(let i = start; i < end; i++){\n\t\t\t\tlet row = data[i];\n\n\t\t\t\tif(row){\n\t\t\t\t\toutput.push(row);\n\n\t\t\t\t\tif(row.type === \"row\"){\n\t\t\t\t\t\tif(!actualStartRow){\n\t\t\t\t\t\t\tactualStartRow = row;\n\t\t\t\t\t\t}\t\n\n\t\t\t\t\t\tactualRowPageSize++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis._setPageCounter(actualRows.length, actualRowPageSize, actualStartRow ? (actualRows.indexOf(actualStartRow) + 1) : 0);\n\t\t\t\n\t\t\treturn output;\n\t\t}else{\n\t\t\tthis._setPageButtons();\n\t\t\tthis._setPageCounter(actualRows.length);\n\t\t\t\n\t\t\treturn data.slice(0);\n\t\t}\n\t}\n\t\n\ttrigger(){\n\t\tvar left;\n\t\t\n\t\tswitch(this.mode){\n\t\t\tcase \"local\":\n\t\t\t\tleft = this.table.rowManager.scrollLeft;\n\t\t\t\n\t\t\t\tthis.refreshData();\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\t\t\t\n\t\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\n\t\t\t\n\t\t\t\treturn Promise.resolve();\n\t\t\t\n\t\t\tcase \"remote\":\n\t\t\t\tthis.dataChanging = true;\n\t\t\t\treturn this.reloadData(null)\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tthis.dataChanging = false;\n\t\t\t\t\t});\n\t\t\t\n\t\t\tcase \"progressive_load\":\n\t\t\tcase \"progressive_scroll\":\n\t\t\t\treturn this.reloadData(null, true);\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tconsole.warn(\"Pagination Error - no such pagination mode:\", this.mode);\n\t\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\t\n\t_parseRemoteData(data){\n\t\tvar margin;\n\t\t\n\t\tif(typeof data.last_page === \"undefined\"){\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + (this.options(\"dataReceiveParams\").last_page || \"last_page\") + \"' property\");\n\t\t}\n\t\t\n\t\tif(data.data){\n\t\t\tthis.max = parseInt(data.last_page) || 1;\n\n\t\t\tthis.remoteRowCountEstimate = typeof data.last_row !== \"undefined\" ? data.last_row : (data.last_page * this.size - (this.page == data.last_page ? (this.size - data.data.length) : 0));\n\t\t\t\n\t\t\tif(this.progressiveLoad){\n\t\t\t\tswitch(this.mode){\n\t\t\t\t\tcase \"progressive_load\":\n\t\t\t\t\t\n\t\t\t\t\t\tif(this.page == 1){\n\t\t\t\t\t\t\tthis.table.rowManager.setData(data.data, false, this.page == 1);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthis.table.rowManager.addRows(data.data);\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\tif(this.page < this.max){\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tthis.nextPage();\n\t\t\t\t\t\t\t}, this.table.options.progressiveLoadDelay);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"progressive_scroll\":\n\t\t\t\t\t\tdata = this.page === 1 ? data.data : this.table.rowManager.getData().concat(data.data);\n\t\t\t\t\t\n\t\t\t\t\t\tthis.table.rowManager.setData(data, this.page !== 1, this.page == 1);\n\t\t\t\t\t\n\t\t\t\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (this.table.rowManager.element.clientHeight * 2);\n\t\t\t\t\t\n\t\t\t\t\t\tif(this.table.rowManager.element.scrollHeight <= (this.table.rowManager.element.clientHeight + margin)){\n\t\t\t\t\t\t\tif(this.page < this.max){\n\t\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\t\tthis.nextPage();\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn false;\n\t\t\t}else{\n\t\t\t\t// left = this.table.rowManager.scrollLeft;\n\t\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\n\t\t\t\t// this.table.rowManager.scrollHorizontal(left);\n\t\t\t\t// this.table.columnManager.scrollHorizontal(left);\n\t\t\t}\n\t\t\t\n\t\t}else{\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + (this.options(\"dataReceiveParams\").data || \"data\") + \"' property\");\n\t\t}\n\t\t\n\t\treturn data.data;\n\t}\n\t\n\t//handle the footer element being redrawn\n\tfooterRedraw(){\n\t\tvar footer = this.table.footerManager.containerElement;\n\n\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\n\t\t\tthis.pagesElement.style.display = 'none';\n\t\t}else{\n\t\t\tthis.pagesElement.style.display = '';\n\t\t\t\n\t\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\n\t\t\t\tthis.pagesElement.style.display = 'none';\n\t\t\t}\n\t\t}\n\t}\n}\n\nPage.moduleName = \"page\";\n\n//load defaults\nPage.pageCounters = defaultPageCounters;\n\nexport default Page;\n","// read persistance information from storage\nexport default {\n\tlocal:function(id, type){\n\t\tvar data = localStorage.getItem(id + \"-\" + type);\n\n\t\treturn data ? JSON.parse(data) : false;\n\t},\n\tcookie:function(id, type){\n\t\tvar cookie = document.cookie,\n\t\tkey = id + \"-\" + type,\n\t\tcookiePos = cookie.indexOf(key + \"=\"),\n\t\tend, 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.slice(cookiePos);\n\n\t\t\tend = cookie.indexOf(\";\");\n\n\t\t\tif(end > -1){\n\t\t\t\tcookie = cookie.slice(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","//write persistence information to storage\nexport default {\n\tlocal:function(id, type, data){\n\t\tlocalStorage.setItem(id + \"-\" + type, JSON.stringify(data));\n\t},\n\tcookie:function(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};","import Module from '../../core/Module.js';\n\nimport defaultReaders from './defaults/readers.js';\nimport defaultWriters from './defaults/writers.js';\n\nclass Persistence extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.mode = \"\";\n\t\tthis.id = \"\";\n\t\t// this.persistProps = [\"field\", \"width\", \"visible\"];\n\t\tthis.defWatcherBlock = false;\n\t\tthis.config = {};\n\t\tthis.readFunc = false;\n\t\tthis.writeFunc = false;\n\n\t\tthis.registerTableOption(\"persistence\", false);\n\t\tthis.registerTableOption(\"persistenceID\", \"\"); //key for persistent storage\n\t\tthis.registerTableOption(\"persistenceMode\", true); //mode for storing persistence information\n\t\tthis.registerTableOption(\"persistenceReaderFunc\", false); //function for handling persistence data reading\n\t\tthis.registerTableOption(\"persistenceWriterFunc\", false); //function for handling persistence data writing\n\t}\n\n\t// Test for whether localStorage is available for use.\n\tlocalStorageTest() {\n\t\tvar testKey = \"_tabulator_test\";\n\n\t\ttry {\n\t\t\twindow.localStorage.setItem( testKey, testKey);\n\t\t\twindow.localStorage.removeItem( testKey );\n\t\t\treturn true;\n\t\t} catch(e) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t//setup parameters\n\tinitialize(){\n\t\tif(this.table.options.persistence){\n\t\t\t//determine persistent layout storage type\n\t\t\tvar mode = this.table.options.persistenceMode,\n\t\t\tid = this.table.options.persistenceID,\n\t\t\tretrievedData;\n\n\t\t\tthis.mode = mode !== true ? mode : (this.localStorageTest() ? \"local\" : \"cookie\");\n\n\t\t\tif(this.table.options.persistenceReaderFunc){\n\t\t\t\tif(typeof this.table.options.persistenceReaderFunc === \"function\"){\n\t\t\t\t\tthis.readFunc = this.table.options.persistenceReaderFunc;\n\t\t\t\t}else{\n\t\t\t\t\tif(Persistence.readers[this.table.options.persistenceReaderFunc]){\n\t\t\t\t\t\tthis.readFunc = Persistence.readers[this.table.options.persistenceReaderFunc];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.table.options.persistenceReaderFunc);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(Persistence.readers[this.mode]){\n\t\t\t\t\tthis.readFunc = Persistence.readers[this.mode];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.mode);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(this.table.options.persistenceWriterFunc){\n\t\t\t\tif(typeof this.table.options.persistenceWriterFunc === \"function\"){\n\t\t\t\t\tthis.writeFunc = this.table.options.persistenceWriterFunc;\n\t\t\t\t}else{\n\t\t\t\t\tif(Persistence.writers[this.table.options.persistenceWriterFunc]){\n\t\t\t\t\t\tthis.writeFunc = Persistence.writers[this.table.options.persistenceWriterFunc];\n\t\t\t\t\t}else{\n\t\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid reader set\", this.table.options.persistenceWriterFunc);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(Persistence.writers[this.mode]){\n\t\t\t\t\tthis.writeFunc = Persistence.writers[this.mode];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid writer set\", this.mode);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//set storage tag\n\t\t\tthis.id = \"tabulator-\" + (id || (this.table.element.getAttribute(\"id\") || \"\"));\n\n\t\t\tthis.config = {\n\t\t\t\tsort:this.table.options.persistence === true || this.table.options.persistence.sort,\n\t\t\t\tfilter:this.table.options.persistence === true || this.table.options.persistence.filter,\n\t\t\t\theaderFilter:this.table.options.persistence === true || this.table.options.persistence.headerFilter,\n\t\t\t\tgroup:this.table.options.persistence === true || this.table.options.persistence.group,\n\t\t\t\tpage:this.table.options.persistence === true || this.table.options.persistence.page,\n\t\t\t\tcolumns:this.table.options.persistence === true ? [\"title\", \"width\", \"visible\"] : this.table.options.persistence.columns,\n\t\t\t};\n\n\t\t\t//load pagination data if needed\n\t\t\tif(this.config.page){\n\t\t\t\tretrievedData = this.retrieveData(\"page\");\n\n\t\t\t\tif(retrievedData){\n\t\t\t\t\tif(typeof retrievedData.paginationSize !== \"undefined\" && (this.config.page === true || this.config.page.size)){\n\t\t\t\t\t\tthis.table.options.paginationSize = retrievedData.paginationSize;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(typeof retrievedData.paginationInitialPage !== \"undefined\" && (this.config.page === true || this.config.page.page)){\n\t\t\t\t\t\tthis.table.options.paginationInitialPage = retrievedData.paginationInitialPage;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//load group data if needed\n\t\t\tif(this.config.group){\n\t\t\t\tretrievedData = this.retrieveData(\"group\");\n\n\t\t\t\tif(retrievedData){\n\t\t\t\t\tif(typeof retrievedData.groupBy !== \"undefined\" && (this.config.group === true || this.config.group.groupBy)){\n\t\t\t\t\t\tthis.table.options.groupBy = retrievedData.groupBy;\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof retrievedData.groupStartOpen !== \"undefined\" && (this.config.group === true || this.config.group.groupStartOpen)){\n\t\t\t\t\t\tthis.table.options.groupStartOpen = retrievedData.groupStartOpen;\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof retrievedData.groupHeader !== \"undefined\" && (this.config.group === true || this.config.group.groupHeader)){\n\t\t\t\t\t\tthis.table.options.groupHeader = retrievedData.groupHeader;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(this.config.columns){\n\t\t\t\tthis.table.options.columns = this.load(\"columns\", this.table.options.columns);\n\t\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\t\t\tthis.subscribe(\"column-show\", this.save.bind(this, \"columns\"));\n\t\t\t\tthis.subscribe(\"column-hide\", this.save.bind(this, \"columns\"));\n\t\t\t\tthis.subscribe(\"column-moved\", this.save.bind(this, \"columns\"));\n\t\t\t}\n\n\t\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this), 0);\n\n\t\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\n\n\t\t\tthis.subscribe(\"filter-changed\", this.eventSave.bind(this, \"filter\"));\n\t\t\tthis.subscribe(\"filter-changed\", this.eventSave.bind(this, \"headerFilter\"));\n\t\t\tthis.subscribe(\"sort-changed\", this.eventSave.bind(this, \"sort\"));\n\t\t\tthis.subscribe(\"group-changed\", this.eventSave.bind(this, \"group\"));\n\t\t\tthis.subscribe(\"page-changed\", this.eventSave.bind(this, \"page\"));\n\t\t\tthis.subscribe(\"column-resized\", this.eventSave.bind(this, \"columns\"));\n\t\t\tthis.subscribe(\"column-width\", this.eventSave.bind(this, \"columns\"));\n\t\t\tthis.subscribe(\"layout-refreshed\", this.eventSave.bind(this, \"columns\"));\n\t\t}\n\n\t\tthis.registerTableFunction(\"getColumnLayout\", this.getColumnLayout.bind(this));\n\t\tthis.registerTableFunction(\"setColumnLayout\", this.setColumnLayout.bind(this));\n\t}\n\n\teventSave(type){\n\t\tif(this.config[type]){\n\t\t\tthis.save(type);\n\t\t}\n\t}\n\n\ttableBuilt(){\n\t\tvar sorters, filters, headerFilters;\n\n\t\tif(this.config.sort){\n\t\t\tsorters = this.load(\"sort\");\n\n\t\t\tif(!sorters === false){\n\t\t\t\tthis.table.options.initialSort = sorters;\n\t\t\t}\n\t\t}\n\n\t\tif(this.config.filter){\n\t\t\tfilters = this.load(\"filter\");\n\n\t\t\tif(!filters === false){\n\t\t\t\tthis.table.options.initialFilter = filters;\n\t\t\t}\n\t\t}\n\t\tif(this.config.headerFilter){\n\t\t\theaderFilters = this.load(\"headerFilter\");\n\n\t\t\tif(!headerFilters === false){\n\t\t\t\tthis.table.options.initialHeaderFilter = headerFilters;\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\n\ttableRedraw(force){\n\t\tif(force && this.config.columns){\n\t\t\tthis.save(\"columns\");\n\t\t}\n\t}\n\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\n\tgetColumnLayout(){\n\t\treturn this.parseColumns(this.table.columnManager.getColumns());\n\t}\n\n\tsetColumnLayout(layout){\n\t\tthis.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns, layout, true));\n\t\treturn true;\n\t}\n\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\n\tinitializeColumn(column){\n\t\tvar def, keys;\n\n\t\tif(this.config.columns){\n\t\t\tthis.defWatcherBlock = true;\n\n\t\t\tdef = column.getDefinition();\n\n\t\t\tkeys = this.config.columns === true ? Object.keys(def) : this.config.columns;\n\n\t\t\tkeys.forEach((key)=>{\n\t\t\t\tvar props = Object.getOwnPropertyDescriptor(def, key);\n\t\t\t\tvar value = def[key];\n\n\t\t\t\tif(props){\n\t\t\t\t\tObject.defineProperty(def, key, {\n\t\t\t\t\t\tset: (newValue) => {\n\t\t\t\t\t\t\tvalue = newValue;\n\n\t\t\t\t\t\t\tif(!this.defWatcherBlock){\n\t\t\t\t\t\t\t\tthis.save(\"columns\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif(props.set){\n\t\t\t\t\t\t\t\tprops.set(newValue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget:() => {\n\t\t\t\t\t\t\tif(props.get){\n\t\t\t\t\t\t\t\tprops.get();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn value;\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\tthis.defWatcherBlock = false;\n\t\t}\n\t}\n\n\t//load saved definitions\n\tload(type, current){\n\t\tvar data = this.retrieveData(type);\n\n\t\tif(current){\n\t\t\tdata = data ? this.mergeDefinition(current, data) : current;\n\t\t}\n\n\t\treturn data;\n\t}\n\n\t//retrieve data from memory\n\tretrieveData(type){\n\t\treturn this.readFunc ? this.readFunc(this.id, type) : false;\n\t}\n\n\t//merge old and new column definitions\n\tmergeDefinition(oldCols, newCols, mergeAllNew){\n\t\tvar output = [];\n\n\t\tnewCols = newCols || [];\n\n\t\tnewCols.forEach((column, to) => {\n\t\t\tvar from = this._findColumn(oldCols, column),\n\t\t\tkeys;\n\n\t\t\tif(from){\n\t\t\t\tif(mergeAllNew){\n\t\t\t\t\tkeys = Object.keys(column);\n\t\t\t\t}else if(this.config.columns === true || this.config.columns == undefined){\n\t\t\t\t\tkeys = Object.keys(from);\n\t\t\t\t\tkeys.push(\"width\");\n\t\t\t\t}else{\n\t\t\t\t\tkeys = this.config.columns;\n\t\t\t\t}\n\n\t\t\t\tkeys.forEach((key)=>{\n\t\t\t\t\tif(key !== \"columns\" && typeof column[key] !== \"undefined\"){\n\t\t\t\t\t\tfrom[key] = column[key];\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif(from.columns){\n\t\t\t\t\tfrom.columns = this.mergeDefinition(from.columns, column.columns);\n\t\t\t\t}\n\n\t\t\t\toutput.push(from);\n\t\t\t}\n\t\t});\n\n\t\toldCols.forEach((column, i) => {\n\t\t\tvar from = this._findColumn(newCols, column);\n\n\t\t\tif (!from) {\n\t\t\t\tif(output.length>i){\n\t\t\t\t\toutput.splice(i, 0, column);\n\t\t\t\t}else{\n\t\t\t\t\toutput.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\t//find matching columns\n\t_findColumn(columns, subject){\n\t\tvar type = subject.columns ? \"group\" : (subject.field ? \"field\" : \"object\");\n\n\t\treturn columns.find(function(col){\n\t\t\tswitch(type){\n\t\t\t\tcase \"group\":\n\t\t\t\t\treturn col.title === subject.title && col.columns.length === subject.columns.length;\n\n\t\t\t\tcase \"field\":\n\t\t\t\t\treturn col.field === subject.field;\n\n\t\t\t\tcase \"object\":\n\t\t\t\t\treturn col === subject;\n\t\t\t}\n\t\t});\n\t}\n\n\t//save data\n\tsave(type){\n\t\tvar data = {};\n\n\t\tswitch(type){\n\t\t\tcase \"columns\":\n\t\t\t\tdata = this.parseColumns(this.table.columnManager.getColumns());\n\t\t\t\tbreak;\n\n\t\t\tcase \"filter\":\n\t\t\t\tdata = this.table.modules.filter.getFilters();\n\t\t\t\tbreak;\n\n\t\t\tcase \"headerFilter\":\n\t\t\t\tdata = this.table.modules.filter.getHeaderFilters();\n\t\t\t\tbreak;\n\n\t\t\tcase \"sort\":\n\t\t\t\tdata = this.validateSorters(this.table.modules.sort.getSort());\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tdata = this.getGroupConfig();\n\t\t\t\tbreak;\n\n\t\t\tcase \"page\":\n\t\t\t\tdata = this.getPageConfig();\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(this.writeFunc){\n\t\t\tthis.writeFunc(this.id, type, data);\n\t\t}\n\n\t}\n\n\t//ensure sorters contain no function data\n\tvalidateSorters(data){\n\t\tdata.forEach(function(item){\n\t\t\titem.column = item.field;\n\t\t\tdelete item.field;\n\t\t});\n\n\t\treturn data;\n\t}\n\n\tgetGroupConfig(){\n\t\tvar data = {};\n\n\t\tif(this.config.group){\n\t\t\tif(this.config.group === true || this.config.group.groupBy){\n\t\t\t\tdata.groupBy = this.table.options.groupBy;\n\t\t\t}\n\n\t\t\tif(this.config.group === true || this.config.group.groupStartOpen){\n\t\t\t\tdata.groupStartOpen = this.table.options.groupStartOpen;\n\t\t\t}\n\n\t\t\tif(this.config.group === true || this.config.group.groupHeader){\n\t\t\t\tdata.groupHeader = this.table.options.groupHeader;\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tgetPageConfig(){\n\t\tvar data = {};\n\n\t\tif(this.config.page){\n\t\t\tif(this.config.page === true || this.config.page.size){\n\t\t\t\tdata.paginationSize = this.table.modules.page.getPageSize();\n\t\t\t}\n\n\t\t\tif(this.config.page === true || this.config.page.page){\n\t\t\t\tdata.paginationInitialPage = this.table.modules.page.getPage();\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t}\n\n\n\t//parse columns for data to store\n\tparseColumns(columns){\n\t\tvar definitions = [],\n\t\texcludedKeys = [\"headerContextMenu\", \"headerMenu\", \"contextMenu\", \"clickMenu\"];\n\n\t\tcolumns.forEach((column) => {\n\t\t\tvar defStore = {},\n\t\t\tcolDef = column.getDefinition(),\n\t\t\tkeys;\n\n\t\t\tif(column.isGroup){\n\t\t\t\tdefStore.title = colDef.title;\n\t\t\t\tdefStore.columns = this.parseColumns(column.getColumns());\n\t\t\t}else{\n\t\t\t\tdefStore.field = column.getField();\n\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\n\t\t\t\t\tkeys = Object.keys(colDef);\n\t\t\t\t\tkeys.push(\"width\");\n\t\t\t\t\tkeys.push(\"visible\");\n\t\t\t\t}else{\n\t\t\t\t\tkeys = this.config.columns;\n\t\t\t\t}\n\n\t\t\t\tkeys.forEach((key)=>{\n\t\t\t\t\tswitch(key){\n\t\t\t\t\t\tcase \"width\":\n\t\t\t\t\t\t\tdefStore.width = column.getWidth();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"visible\":\n\t\t\t\t\t\t\tdefStore.visible = column.visible;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif(typeof colDef[key] !== \"function\" && excludedKeys.indexOf(key) === -1){\n\t\t\t\t\t\t\t\tdefStore[key] = colDef[key];\n\t\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\tdefinitions.push(defStore);\n\t\t});\n\n\t\treturn definitions;\n\t}\n}\n\nPersistence.moduleName = \"persistence\";\n\nPersistence.moduleInitOrder = -10;\n\n//load defaults\nPersistence.readers = defaultReaders;\nPersistence.writers = defaultWriters;\n\nexport default Persistence;","import Module from '../../core/Module.js';\n\nclass Popup extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.columnSubscribers = {};\n\t\t\n\t\tthis.registerTableOption(\"rowContextPopup\", false);\n\t\tthis.registerTableOption(\"rowClickPopup\", false);\n\t\tthis.registerTableOption(\"rowDblClickPopup\", false);\n\t\tthis.registerTableOption(\"groupContextPopup\", false);\n\t\tthis.registerTableOption(\"groupClickPopup\", false);\n\t\tthis.registerTableOption(\"groupDblClickPopup\", false);\n\t\t\n\t\tthis.registerColumnOption(\"headerContextPopup\");\n\t\tthis.registerColumnOption(\"headerClickPopup\");\n\t\tthis.registerColumnOption(\"headerDblClickPopup\");\n\t\tthis.registerColumnOption(\"headerPopup\");\n\t\tthis.registerColumnOption(\"headerPopupIcon\");\n\t\tthis.registerColumnOption(\"contextPopup\");\n\t\tthis.registerColumnOption(\"clickPopup\");\n\t\tthis.registerColumnOption(\"dblClickPopup\");\n\n\t\tthis.registerComponentFunction(\"cell\", \"popup\", this._componentPopupCall.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"popup\", this._componentPopupCall.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"popup\", this._componentPopupCall.bind(this));\n\t\tthis.registerComponentFunction(\"group\", \"popup\", this._componentPopupCall.bind(this));\n\t\t\n\t}\n\t\n\tinitialize(){\n\t\tthis.initializeRowWatchers();\n\t\tthis.initializeGroupWatchers();\n\t\t\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t}\n\n\t_componentPopupCall(component, contents, position){\n\t\tthis.loadPopupEvent(contents, null, component, position);\n\t}\n\t\n\tinitializeRowWatchers(){\n\t\tif(this.table.options.rowContextPopup){\n\t\t\tthis.subscribe(\"row-contextmenu\", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup));\n\t\t\tthis.table.on(\"rowTapHold\", this.loadPopupEvent.bind(this, this.table.options.rowContextPopup));\n\t\t}\n\t\t\n\t\tif(this.table.options.rowClickPopup){\n\t\t\tthis.subscribe(\"row-click\", this.loadPopupEvent.bind(this, this.table.options.rowClickPopup));\n\t\t}\n\n\t\tif(this.table.options.rowDblClickPopup){\n\t\t\tthis.subscribe(\"row-dblclick\", this.loadPopupEvent.bind(this, this.table.options.rowDblClickPopup));\n\t\t}\n\t}\n\t\n\tinitializeGroupWatchers(){\n\t\tif(this.table.options.groupContextPopup){\n\t\t\tthis.subscribe(\"group-contextmenu\", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup));\n\t\t\tthis.table.on(\"groupTapHold\", this.loadPopupEvent.bind(this, this.table.options.groupContextPopup));\n\t\t}\n\t\t\n\t\tif(this.table.options.groupClickPopup){\n\t\t\tthis.subscribe(\"group-click\", this.loadPopupEvent.bind(this, this.table.options.groupClickPopup));\n\t\t}\n\n\t\tif(this.table.options.groupDblClickPopup){\n\t\t\tthis.subscribe(\"group-dblclick\", this.loadPopupEvent.bind(this, this.table.options.groupDblClickPopup));\n\t\t}\n\t}\n\n\tinitializeColumn(column){\n\t\tvar def = column.definition;\n\t\t\n\t\t//handle column events\n\t\tif(def.headerContextPopup && !this.columnSubscribers.headerContextPopup){\n\t\t\tthis.columnSubscribers.headerContextPopup = this.loadPopupTableColumnEvent.bind(this, \"headerContextPopup\");\n\t\t\tthis.subscribe(\"column-contextmenu\", this.columnSubscribers.headerContextPopup);\n\t\t\tthis.table.on(\"headerTapHold\", this.loadPopupTableColumnEvent.bind(this, \"headerContextPopup\"));\n\t\t}\n\t\t\n\t\tif(def.headerClickPopup && !this.columnSubscribers.headerClickPopup){\n\t\t\tthis.columnSubscribers.headerClickPopup = this.loadPopupTableColumnEvent.bind(this, \"headerClickPopup\");\n\t\t\tthis.subscribe(\"column-click\", this.columnSubscribers.headerClickPopup);\n\t\t\n\t\t\n\t\t}if(def.headerDblClickPopup && !this.columnSubscribers.headerDblClickPopup){\n\t\t\tthis.columnSubscribers.headerDblClickPopup = this.loadPopupTableColumnEvent.bind(this, \"headerDblClickPopup\");\n\t\t\tthis.subscribe(\"column-dblclick\", this.columnSubscribers.headerDblClickPopup);\n\t\t}\n\t\t\n\t\tif(def.headerPopup){\n\t\t\tthis.initializeColumnHeaderPopup(column);\n\t\t}\n\t\t\n\t\t//handle cell events\n\t\tif(def.contextPopup && !this.columnSubscribers.contextPopup){\n\t\t\tthis.columnSubscribers.contextPopup = this.loadPopupTableCellEvent.bind(this, \"contextPopup\");\n\t\t\tthis.subscribe(\"cell-contextmenu\", this.columnSubscribers.contextPopup);\n\t\t\tthis.table.on(\"cellTapHold\", this.loadPopupTableCellEvent.bind(this, \"contextPopup\"));\n\t\t}\n\t\t\n\t\tif(def.clickPopup && !this.columnSubscribers.clickPopup){\n\t\t\tthis.columnSubscribers.clickPopup = this.loadPopupTableCellEvent.bind(this, \"clickPopup\");\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.clickPopup);\n\t\t}\n\n\t\tif(def.dblClickPopup && !this.columnSubscribers.dblClickPopup){\n\t\t\tthis.columnSubscribers.dblClickPopup = this.loadPopupTableCellEvent.bind(this, \"dblClickPopup\");\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.dblClickPopup);\n\t\t}\n\t}\n\t\n\tinitializeColumnHeaderPopup(column){\n\t\tvar icon = column.definition.headerPopupIcon,\n\t\theaderPopupEl;\n\t\t\n\t\theaderPopupEl = document.createElement(\"span\");\n\t\theaderPopupEl.classList.add(\"tabulator-header-popup-button\");\n\n\t\tif(icon){\n\t\t\tif(typeof icon === \"function\"){\n\t\t\t\ticon = icon(column.getComponent());\n\t\t\t}\n\n\t\t\tif(icon instanceof HTMLElement){\n\t\t\t\theaderPopupEl.appendChild(icon);\n\t\t\t}else{\n\t\t\t\theaderPopupEl.innerHTML = icon;\n\t\t\t}\n\t\t}else{\n\t\t\theaderPopupEl.innerHTML = \"⋮\";\n\t\t}\n\t\t\n\t\theaderPopupEl.addEventListener(\"click\", (e) => {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\t\n\t\t\tthis.loadPopupEvent(column.definition.headerPopup, e, column);\n\t\t});\n\t\t\n\t\tcolumn.titleElement.insertBefore(headerPopupEl, column.titleElement.firstChild);\n\t}\n\t\n\tloadPopupTableCellEvent(option, e, cell){\n\t\tif(cell._cell){\n\t\t\tcell = cell._cell;\n\t\t}\n\t\t\n\t\tif(cell.column.definition[option]){\n\t\t\tthis.loadPopupEvent(cell.column.definition[option], e, cell);\n\t\t}\n\t}\n\t\n\tloadPopupTableColumnEvent(option, e, column){\n\t\tif(column._column){\n\t\t\tcolumn = column._column;\n\t\t}\n\t\t\n\t\tif(column.definition[option]){\n\t\t\tthis.loadPopupEvent(column.definition[option], e, column);\n\t\t}\n\t}\n\t\n\tloadPopupEvent(contents, e, component, position){\n\t\tvar renderedCallback;\n\n\t\tfunction onRendered(callback){\n\t\t\trenderedCallback = callback;\n\t\t}\n\t\t\n\t\tif(component._group){\n\t\t\tcomponent = component._group;\n\t\t}else if(component._row){\n\t\t\tcomponent = component._row;\n\t\t}\n\t\t\n\t\tcontents = typeof contents == \"function\" ? contents.call(this.table, e, component.getComponent(), onRendered) : contents;\n\t\t\n\t\tthis.loadPopup(e, component, contents, renderedCallback, position);\n\t}\n\t\n\tloadPopup(e, component, contents, renderedCallback, position){\n\t\tvar touch = !(e instanceof MouseEvent),\n\t\tcontentsEl, popup;\n\t\t\n\t\tif(contents instanceof HTMLElement){\n\t\t\tcontentsEl = contents;\n\t\t}else{\n\t\t\tcontentsEl = document.createElement(\"div\");\n\t\t\tcontentsEl.innerHTML = contents;\n\t\t}\n\t\t\n\t\tcontentsEl.classList.add(\"tabulator-popup\");\n\n\t\tcontentsEl.addEventListener(\"click\", (e) =>{\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tif(!touch){\n\t\t\te.preventDefault();\n\t\t}\n\t\t\n\t\tpopup = this.popup(contentsEl);\n\n\t\tif(typeof renderedCallback === \"function\"){\n\t\t\tpopup.renderCallback(renderedCallback);\n\t\t}\n\n\t\tif(e){\n\t\t\tpopup.show(e);\n\t\t}else{\n\t\t\tpopup.show(component.getElement(), position || \"center\");\n\t\t}\n\n\t\t\n\t\tpopup.hideOnBlur(() => {\n\t\t\tthis.dispatchExternal(\"popupClosed\", component.getComponent());\n\t\t});\n\n\n\n\t\tthis.dispatchExternal(\"popupOpened\", component.getComponent());\n\t}\n}\n\nPopup.moduleName = \"popup\";\n\nexport default Popup;\n","import Module from '../../core/Module.js';\n\nclass Print extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.element = false;\n\t\tthis.manualBlock = false;\n\t\tthis.beforeprintEventHandler = null;\n\t\tthis.afterprintEventHandler = null;\n\n\t\tthis.registerTableOption(\"printAsHtml\", false); //enable print as html\n\t\tthis.registerTableOption(\"printFormatter\", false); //printing page formatter\n\t\tthis.registerTableOption(\"printHeader\", false); //page header contents\n\t\tthis.registerTableOption(\"printFooter\", false); //page footer contents\n\t\tthis.registerTableOption(\"printStyled\", true); //enable print as html styling\n\t\tthis.registerTableOption(\"printRowRange\", \"visible\"); //restrict print to visible rows only\n\t\tthis.registerTableOption(\"printConfig\", {}); //print config options\n\n\t\tthis.registerColumnOption(\"print\");\n\t\tthis.registerColumnOption(\"titlePrint\");\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.printAsHtml){\n\t\t\tthis.beforeprintEventHandler = this.replaceTable.bind(this);\n\t\t\tthis.afterprintEventHandler = this.cleanup.bind(this);\n\n\t\t\twindow.addEventListener(\"beforeprint\", this.beforeprintEventHandler );\n\t\t\twindow.addEventListener(\"afterprint\", this.afterprintEventHandler);\n\t\t\tthis.subscribe(\"table-destroy\", this.destroy.bind(this));\n\t\t}\n\n\t\tthis.registerTableFunction(\"print\", this.printFullscreen.bind(this));\n\t}\n\n\tdestroy(){\n\t\tif(this.table.options.printAsHtml){\n\t\t\twindow.removeEventListener( \"beforeprint\", this.beforeprintEventHandler );\n\t\t\twindow.removeEventListener( \"afterprint\", this.afterprintEventHandler );\n\t\t}\n\t}\n\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\n\treplaceTable(){\n\t\tif(!this.manualBlock){\n\t\t\tthis.element = document.createElement(\"div\");\n\t\t\tthis.element.classList.add(\"tabulator-print-table\");\n\n\t\t\tthis.element.appendChild(this.table.modules.export.generateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, \"print\"));\n\n\t\t\tthis.table.element.style.display = \"none\";\n\n\t\t\tthis.table.element.parentNode.insertBefore(this.element, this.table.element);\n\t\t}\n\t}\n\n\tcleanup(){\n\t\tdocument.body.classList.remove(\"tabulator-print-fullscreen-hide\");\n\n\t\tif(this.element && this.element.parentNode){\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\tthis.table.element.style.display = \"\";\n\t\t}\n\t}\n\n\tprintFullscreen(visible, style, config){\n\t\tvar scrollX = window.scrollX,\n\t\tscrollY = window.scrollY,\n\t\theaderEl = document.createElement(\"div\"),\n\t\tfooterEl = document.createElement(\"div\"),\n\t\ttableEl = this.table.modules.export.generateTable(typeof config != \"undefined\" ? config : this.table.options.printConfig, typeof style != \"undefined\" ? style : this.table.options.printStyled, visible || this.table.options.printRowRange, \"print\"),\n\t\theaderContent, footerContent;\n\n\t\tthis.manualBlock = true;\n\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.classList.add(\"tabulator-print-fullscreen\");\n\n\t\tif(this.table.options.printHeader){\n\t\t\theaderEl.classList.add(\"tabulator-print-header\");\n\n\t\t\theaderContent = typeof this.table.options.printHeader == \"function\" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;\n\n\t\t\tif(typeof headerContent == \"string\"){\n\t\t\t\theaderEl.innerHTML = headerContent;\n\t\t\t}else{\n\t\t\t\theaderEl.appendChild(headerContent);\n\t\t\t}\n\n\t\t\tthis.element.appendChild(headerEl);\n\t\t}\n\n\t\tthis.element.appendChild(tableEl);\n\n\t\tif(this.table.options.printFooter){\n\t\t\tfooterEl.classList.add(\"tabulator-print-footer\");\n\n\t\t\tfooterContent = typeof this.table.options.printFooter == \"function\" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;\n\n\n\t\t\tif(typeof footerContent == \"string\"){\n\t\t\t\tfooterEl.innerHTML = footerContent;\n\t\t\t}else{\n\t\t\t\tfooterEl.appendChild(footerContent);\n\t\t\t}\n\n\t\t\tthis.element.appendChild(footerEl);\n\t\t}\n\n\t\tdocument.body.classList.add(\"tabulator-print-fullscreen-hide\");\n\t\tdocument.body.appendChild(this.element);\n\n\t\tif(this.table.options.printFormatter){\n\t\t\tthis.table.options.printFormatter(this.element, tableEl);\n\t\t}\n\n\t\twindow.print();\n\n\t\tthis.cleanup();\n\n\t\twindow.scrollTo(scrollX, scrollY);\n\n\t\tthis.manualBlock = false;\n\t}\n}\n\nPrint.moduleName = \"print\";\n\nexport default Print;","import Module from '../../core/Module.js';\n\nclass ReactiveData extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.data = false;\n\t\tthis.blocked = false; //block reactivity while performing update\n\t\tthis.origFuncs = {}; // hold original data array functions to allow replacement after data is done with\n\t\tthis.currentVersion = 0;\n\t\t\n\t\tthis.registerTableOption(\"reactiveData\", false); //enable data reactivity\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.reactiveData){\n\t\t\tthis.subscribe(\"cell-value-save-before\", this.block.bind(this, \"cellsave\"));\n\t\t\tthis.subscribe(\"cell-value-save-after\", this.unblock.bind(this, \"cellsave\"));\n\t\t\tthis.subscribe(\"row-data-save-before\", this.block.bind(this, \"rowsave\"));\n\t\t\tthis.subscribe(\"row-data-save-after\", this.unblock.bind(this, \"rowsave\"));\n\t\t\tthis.subscribe(\"row-data-init-after\", this.watchRow.bind(this));\n\t\t\tthis.subscribe(\"data-processing\", this.watchData.bind(this));\n\t\t\tthis.subscribe(\"table-destroy\", this.unwatchData.bind(this));\n\t\t}\n\t}\n\t\n\twatchData(data){\n\t\tvar self = this,\n\t\tversion;\n\t\t\n\t\tthis.currentVersion ++;\n\t\t\n\t\tversion = this.currentVersion;\n\t\t\n\t\tthis.unwatchData();\n\t\t\n\t\tthis.data = data;\n\t\t\n\t\t//override array push function\n\t\tthis.origFuncs.push = data.push;\n\t\t\n\t\tObject.defineProperty(this.data, \"push\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar args = Array.from(arguments),\n\t\t\t\tresult;\n\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\t\n\t\t\t\t\tself.block(\"data-push\");\n\n\t\t\t\t\targs.forEach((arg) => {\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, false);\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tresult = self.origFuncs.push.apply(data, arguments);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"data-push\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t\t\n\t\t//override array unshift function\n\t\tthis.origFuncs.unshift = data.unshift;\n\t\t\n\t\tObject.defineProperty(this.data, \"unshift\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar args = Array.from(arguments),\n\t\t\t\tresult;\n\t\t\t\t\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"data-unshift\");\n\t\t\t\t\t\n\t\t\t\t\targs.forEach((arg) => {\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, true);\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tresult = self.origFuncs.unshift.apply(data, arguments);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"data-unshift\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t\t\n\t\t\n\t\t//override array shift function\n\t\tthis.origFuncs.shift = data.shift;\n\t\t\n\t\tObject.defineProperty(this.data, \"shift\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar row, result;\n\t\t\t\t\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"data-shift\");\n\t\t\t\t\t\n\t\t\t\t\tif(self.data.length){\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[0]);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(row){\n\t\t\t\t\t\t\trow.deleteActual();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = self.origFuncs.shift.call(data);\n\n\t\t\t\t\tself.unblock(\"data-shift\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t\t\n\t\t//override array pop function\n\t\tthis.origFuncs.pop = data.pop;\n\t\t\n\t\tObject.defineProperty(this.data, \"pop\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar row, result;\n\t\t\t\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"data-pop\");\n\t\t\t\t\t\n\t\t\t\t\tif(self.data.length){\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(row){\n\t\t\t\t\t\t\trow.deleteActual();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = self.origFuncs.pop.call(data);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"data-pop\");\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t\t\n\t\t\n\t\t//override array splice function\n\t\tthis.origFuncs.splice = data.splice;\n\t\t\n\t\tObject.defineProperty(this.data, \"splice\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function(){\n\t\t\t\tvar args = Array.from(arguments),\n\t\t\t\tstart = args[0] < 0 ? data.length + args[0] : args[0],\n\t\t\t\tend = args[1],\n\t\t\t\tnewRows = args[2] ? args.slice(2) : false,\n\t\t\t\tstartRow, result;\n\t\t\t\t\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"data-splice\");\n\t\t\t\t\t//add new rows\n\t\t\t\t\tif(newRows){\n\t\t\t\t\t\tstartRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(startRow){\n\t\t\t\t\t\t\tnewRows.forEach((rowData) => {\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, startRow, true);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tnewRows = newRows.slice().reverse();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tnewRows.forEach((rowData) => {\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, false, true);\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\t\n\t\t\t\t\t//delete removed rows\n\t\t\t\t\tif(end !== 0){\n\t\t\t\t\t\tvar oldRows = data.slice(start, typeof args[1] === \"undefined\" ? args[1] : start + end);\n\t\t\t\t\t\t\n\t\t\t\t\t\toldRows.forEach((rowData, i) => {\n\t\t\t\t\t\t\tvar row = self.table.rowManager.getRowFromDataObject(rowData);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(row){\n\t\t\t\t\t\t\t\trow.deleteActual(i !== oldRows.length - 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\t\n\t\t\t\t\tif(newRows || end !== 0){\n\t\t\t\t\t\tself.table.rowManager.reRenderInPosition();\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = self.origFuncs.splice.apply(data, arguments);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"data-splice\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn result ;\n\t\t\t}\n\t\t});\n\t}\n\t\n\tunwatchData(){\n\t\tif(this.data !== false){\n\t\t\tfor(var key in this.origFuncs){\n\t\t\t\tObject.defineProperty(this.data, key, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable:true,\n\t\t\t\t\twritable:true,\n\t\t\t\t\tvalue: this.origFuncs.key,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\t\n\twatchRow(row){\n\t\tvar data = row.getData();\n\t\t\n\t\tfor(var key in data){\n\t\t\tthis.watchKey(row, data, key);\n\t\t}\n\t\t\n\t\tif(this.table.options.dataTree){\n\t\t\tthis.watchTreeChildren(row);\n\t\t}\n\t}\n\t\n\twatchTreeChildren (row){\n\t\tvar self = this,\n\t\tchildField = row.getData()[this.table.options.dataTreeChildField],\n\t\torigFuncs = {};\n\t\t\n\t\tif(childField){\n\t\t\t\n\t\t\torigFuncs.push = childField.push;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"push\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-push\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.push.apply(childField, arguments);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-push\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\torigFuncs.unshift = childField.unshift;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"unshift\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-unshift\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.unshift.apply(childField, arguments);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-unshift\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\torigFuncs.shift = childField.shift;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"shift\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-shift\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.shift.call(childField);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-shift\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\torigFuncs.pop = childField.pop;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"pop\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-pop\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.pop.call(childField);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-pop\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\torigFuncs.splice = childField.splice;\n\t\t\t\n\t\t\tObject.defineProperty(childField, \"splice\", {\n\t\t\t\tenumerable: false,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: () => {\n\t\t\t\t\tif(!self.blocked){\n\t\t\t\t\t\tself.block(\"tree-splice\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar result = origFuncs.splice.apply(childField, arguments);\n\t\t\t\t\t\tthis.rebuildTree(row);\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.unblock(\"tree-splice\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\t\n\trebuildTree(row){\n\t\tthis.table.modules.dataTree.initializeRow(row);\n\t\tthis.table.modules.dataTree.layoutRow(row);\n\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\n\t}\n\t\n\twatchKey(row, data, key){\n\t\tvar self = this,\n\t\tprops = Object.getOwnPropertyDescriptor(data, key),\n\t\tvalue = data[key],\n\t\tversion = this.currentVersion;\n\t\t\n\t\tObject.defineProperty(data, key, {\n\t\t\tset: (newValue) => {\n\t\t\t\tvalue = newValue;\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\n\t\t\t\t\tself.block(\"key\");\n\t\t\t\t\t\n\t\t\t\t\tvar update = {};\n\t\t\t\t\tupdate[key] = newValue;\n\t\t\t\t\trow.updateData(update);\n\t\t\t\t\t\n\t\t\t\t\tself.unblock(\"key\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(props.set){\n\t\t\t\t\tprops.set(newValue);\n\t\t\t\t}\n\t\t\t},\n\t\t\tget:() => {\n\t\t\t\t\n\t\t\t\tif(props.get){\n\t\t\t\t\tprops.get();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn value;\n\t\t\t}\n\t\t});\n\t}\n\t\n\tunwatchRow(row){\n\t\tvar data = row.getData();\n\t\t\n\t\tfor(var key in data){\n\t\t\tObject.defineProperty(data, key, {\n\t\t\t\tvalue:data[key],\n\t\t\t});\n\t\t}\n\t}\n\t\n\tblock(key){\n\t\tif(!this.blocked){\n\t\t\tthis.blocked = key;\n\t\t}\n\t}\n\t\n\tunblock(key){\n\t\tif(this.blocked === key){\n\t\t\tthis.blocked = false;\n\t\t}\n\t}\n}\n\nReactiveData.moduleName = \"reactiveData\";\n\nexport default ReactiveData;\n\n\n\n","import Module from '../../core/Module.js';\n\nclass ResizeColumns extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.startColumn = false;\n\t\tthis.startX = false;\n\t\tthis.startWidth = false;\n\t\tthis.latestX = false;\n\t\tthis.handle = null;\n\t\tthis.initialNextColumn = null;\n\t\tthis.nextColumn = null;\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.registerColumnOption(\"resizable\", true);\n\t\tthis.registerTableOption(\"resizableColumnFit\", false);\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"column-rendered\", this.layoutColumnHeader.bind(this));\n\t}\n\t\n\tinitializeEventWatchers(){\n\t\tif(!this.initialized){\n\t\t\t\n\t\t\tthis.subscribe(\"cell-rendered\", this.layoutCellHandles.bind(this));\n\t\t\tthis.subscribe(\"cell-delete\", this.deInitializeComponent.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"cell-height\", this.resizeHandle.bind(this));\n\t\t\tthis.subscribe(\"column-moved\", this.columnLayoutUpdated.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"column-hide\", this.deInitializeColumn.bind(this));\n\t\t\tthis.subscribe(\"column-show\", this.columnLayoutUpdated.bind(this));\n\t\t\tthis.subscribe(\"column-width\", this.columnWidthUpdated.bind(this));\n\t\t\t\n\t\t\tthis.subscribe(\"column-delete\", this.deInitializeComponent.bind(this));\n\t\t\tthis.subscribe(\"column-height\", this.resizeHandle.bind(this));\n\t\t\t\n\t\t\tthis.initialized = true;\n\t\t}\n\t}\n\t\n\t\n\tlayoutCellHandles(cell){\n\t\tif(cell.row.type === \"row\"){\n\t\t\tthis.deInitializeComponent(cell);\n\t\t\tthis.initializeColumn(\"cell\", cell, cell.column, cell.element);\n\t\t}\n\t}\n\t\n\tlayoutColumnHeader(column){\n\t\tif(column.definition.resizable){\n\t\t\tthis.initializeEventWatchers();\n\t\t\tthis.deInitializeComponent(column);\n\t\t\tthis.initializeColumn(\"header\", column, column, column.element);\n\t\t}\n\t}\n\t\n\tcolumnLayoutUpdated(column){\n\t\tvar prev = column.prevColumn();\n\t\t\n\t\tthis.reinitializeColumn(column);\n\t\t\n\t\tif(prev){\n\t\t\tthis.reinitializeColumn(prev);\n\t\t}\n\t}\n\t\n\tcolumnWidthUpdated(column){\n\t\tif(column.modules.frozen){\n\t\t\tif(this.table.modules.frozenColumns.leftColumns.includes(column)){\n\t\t\t\tthis.table.modules.frozenColumns.leftColumns.forEach((col) => {\n\t\t\t\t\tthis.reinitializeColumn(col);\n\t\t\t\t});\n\t\t\t}else if(this.table.modules.frozenColumns.rightColumns.includes(column)){\n\t\t\t\tthis.table.modules.frozenColumns.rightColumns.forEach((col) => {\n\t\t\t\t\tthis.reinitializeColumn(col);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tfrozenColumnOffset(column){\n\t\tvar offset = false;\n\n\t\tif(column.modules.frozen){\n\t\t\toffset = column.modules.frozen.marginValue; \n\n\t\t\tif(column.modules.frozen.position === \"left\"){\n\t\t\t\toffset += column.getWidth() - 3;\n\t\t\t}else{\n\t\t\t\tif(offset){\n\t\t\t\t\toffset -= 3;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn offset !== false ? offset + \"px\" : false;\n\t}\n\t\n\treinitializeColumn(column){\n\t\tvar frozenOffset = this.frozenColumnOffset(column);\n\t\t\n\t\tcolumn.cells.forEach((cell) => {\n\t\t\tif(cell.modules.resize && cell.modules.resize.handleEl){\n\t\t\t\tif(frozenOffset){\n\t\t\t\t\tcell.modules.resize.handleEl.style[column.modules.frozen.position] = frozenOffset;\n\t\t\t\t\tcell.modules.resize.handleEl.style[\"z-index\"] = 11;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcell.element.after(cell.modules.resize.handleEl);\n\t\t\t}\n\t\t});\n\t\t\n\t\tif(column.modules.resize && column.modules.resize.handleEl){\n\t\t\tif(frozenOffset){\n\t\t\t\tcolumn.modules.resize.handleEl.style[column.modules.frozen.position] = frozenOffset;\n\t\t\t}\n\t\t\t\n\t\t\tcolumn.element.after(column.modules.resize.handleEl);\n\t\t}\n\t}\n\t\n\tinitializeColumn(type, component, column, element){\n\t\tvar self = this,\n\t\tvariableHeight = false,\n\t\tmode = column.definition.resizable,\n\t\tconfig = {},\n\t\tnearestColumn = column.getLastColumn();\n\t\t\n\t\t//set column resize mode\n\t\tif(type === \"header\"){\n\t\t\tvariableHeight = column.definition.formatter == \"textarea\" || column.definition.variableHeight;\n\t\t\tconfig = {variableHeight:variableHeight};\n\t\t}\n\t\t\n\t\tif((mode === true || mode == type) && this._checkResizability(nearestColumn)){\n\t\t\t\n\t\t\tvar handle = document.createElement('span');\n\t\t\thandle.className = \"tabulator-col-resize-handle\";\n\t\t\t\n\t\t\thandle.addEventListener(\"click\", function(e){\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\t\t\t\n\t\t\tvar handleDown = function(e){\n\t\t\t\tself.startColumn = column;\n\t\t\t\tself.initialNextColumn = self.nextColumn = nearestColumn.nextColumn();\n\t\t\t\tself._mouseDown(e, nearestColumn, handle);\n\t\t\t};\n\t\t\t\n\t\t\thandle.addEventListener(\"mousedown\", handleDown);\n\t\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\n\t\t\t\n\t\t\t//resize column on double click\n\t\t\thandle.addEventListener(\"dblclick\", (e) => {\n\t\t\t\tvar oldWidth = nearestColumn.getWidth();\n\t\t\t\t\n\t\t\t\te.stopPropagation();\n\t\t\t\tnearestColumn.reinitializeWidth(true);\n\t\t\t\t\n\t\t\t\tif(oldWidth !== nearestColumn.getWidth()){\n\t\t\t\t\tself.dispatch(\"column-resized\", nearestColumn);\n\t\t\t\t\tself.table.externalEvents.dispatch(\"columnResized\", nearestColumn.getComponent());\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif(column.modules.frozen){\n\t\t\t\thandle.style.position = \"sticky\";\n\t\t\t\thandle.style[column.modules.frozen.position] = this.frozenColumnOffset(column);\n\t\t\t}\n\t\t\t\n\t\t\tconfig.handleEl = handle;\n\t\t\t\n\t\t\tif(element.parentNode && column.visible){\n\t\t\t\telement.after(handle);\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n\t\tcomponent.modules.resize = config;\n\t}\n\t\n\tdeInitializeColumn(column){\n\t\tthis.deInitializeComponent(column);\n\t\t\n\t\tcolumn.cells.forEach((cell) => {\n\t\t\tthis.deInitializeComponent(cell);\n\t\t});\n\t}\n\t\n\tdeInitializeComponent(component){\n\t\tvar handleEl;\n\t\t\n\t\tif(component.modules.resize){\n\t\t\thandleEl = component.modules.resize.handleEl;\n\t\t\t\n\t\t\tif(handleEl && handleEl.parentElement){\n\t\t\t\thandleEl.parentElement.removeChild(handleEl);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tresizeHandle(component, height){\n\t\tif(component.modules.resize && component.modules.resize.handleEl){\n\t\t\tcomponent.modules.resize.handleEl.style.height = height;\n\t\t}\n\t}\n\t\n\t_checkResizability(column){\n\t\treturn column.definition.resizable;\n\t}\n\t\n\t_mouseDown(e, column, handle){\n\t\tvar self = this;\n\t\t\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\n\t\t\n\t\tfunction mouseMove(e){\n\t\t\tvar x = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX,\n\t\t\tstartDiff = x - self.startX,\n\t\t\tmoveDiff = x - self.latestX,\n\t\t\tblockedBefore, blockedAfter;\n\t\t\t\n\t\t\tself.latestX = x;\n\t\t\t\n\t\t\tif(self.table.rtl){\n\t\t\t\tstartDiff = -startDiff;\n\t\t\t\tmoveDiff = -moveDiff;\n\t\t\t}\n\t\t\t\n\t\t\tblockedBefore = column.width == column.minWidth || column.width == column.maxWidth;\n\t\t\t\n\t\t\tcolumn.setWidth(self.startWidth + startDiff);\n\t\t\t\n\t\t\tblockedAfter = column.width == column.minWidth || column.width == column.maxWidth;\n\t\t\t\n\t\t\tif(moveDiff < 0){\n\t\t\t\tself.nextColumn = self.initialNextColumn;\n\t\t\t}\n\t\t\t\n\t\t\tif(self.table.options.resizableColumnFit && self.nextColumn && !(blockedBefore && blockedAfter)){\n\t\t\t\tlet colWidth = self.nextColumn.getWidth();\n\t\t\t\t\n\t\t\t\tif(moveDiff > 0){\n\t\t\t\t\tif(colWidth <= self.nextColumn.minWidth){\n\t\t\t\t\t\tself.nextColumn = self.nextColumn.nextColumn();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(self.nextColumn){\n\t\t\t\t\tself.nextColumn.setWidth(self.nextColumn.getWidth() - moveDiff);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tself.table.columnManager.rerenderColumns(true);\n\t\t\t\n\t\t\tif(!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\n\t\t\t\tcolumn.checkCellHeights();\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction mouseUp(e){\n\t\t\t\n\t\t\t//block editor from taking action while resizing is taking place\n\t\t\tif(self.startColumn.modules.edit){\n\t\t\t\tself.startColumn.modules.edit.blocked = false;\n\t\t\t}\n\t\t\t\n\t\t\tif(self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){\n\t\t\t\tcolumn.checkCellHeights();\n\t\t\t}\n\t\t\t\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseUp);\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\n\t\t\t\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\n\t\t\t\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\n\t\t\t\n\t\t\tif(self.startWidth !== column.getWidth()){\n\t\t\t\tself.table.columnManager.verticalAlignHeaders();\n\n\t\t\t\tself.dispatch(\"column-resized\", column);\n\t\t\t\tself.table.externalEvents.dispatch(\"columnResized\", column.getComponent());\n\t\t\t}\n\t\t}\n\t\t\n\t\te.stopPropagation(); //prevent resize from interfering with movable columns\n\t\t\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 = true;\n\t\t}\n\t\t\n\t\tself.startX = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX;\n\t\tself.latestX = self.startX;\n\t\tself.startWidth = column.getWidth();\n\t\t\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\n\t\thandle.addEventListener(\"touchend\", mouseUp);\n\t}\n}\n\nResizeColumns.moduleName = \"resizeColumns\";\n\nexport default ResizeColumns;","import Module from '../../core/Module.js';\n\nclass ResizeRows extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.startColumn = false;\n\t\tthis.startY = false;\n\t\tthis.startHeight = false;\n\t\tthis.handle = null;\n\t\tthis.prevHandle = null;\n\n\t\tthis.registerTableOption(\"resizableRows\", false); //resizable rows\n\t}\n\n\tinitialize(){\n\t\tif(this.table.options.resizableRows){\n\t\t\tthis.subscribe(\"row-layout-after\", this.initializeRow.bind(this));\n\t\t}\n\t}\n\n\tinitializeRow(row){\n\t\tvar self = this,\n\t\trowEl = row.getElement();\n\n\t\tvar handle = document.createElement('div');\n\t\thandle.className = \"tabulator-row-resize-handle\";\n\n\t\tvar prevHandle = document.createElement('div');\n\t\tprevHandle.className = \"tabulator-row-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(e){\n\t\t\tself.startRow = row;\n\t\t\tself._mouseDown(e, row, handle);\n\t\t};\n\n\t\thandle.addEventListener(\"mousedown\", handleDown);\n\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\n\n\t\tprevHandle.addEventListener(\"click\", function(e){\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tvar prevHandleDown = function(e){\n\t\t\tvar prevRow = self.table.rowManager.prevDisplayRow(row);\n\n\t\t\tif(prevRow){\n\t\t\t\tself.startRow = prevRow;\n\t\t\t\tself._mouseDown(e, prevRow, prevHandle);\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\trowEl.appendChild(handle);\n\t\trowEl.appendChild(prevHandle);\n\t}\n\n\t_mouseDown(e, row, handle){\n\t\tvar self = this;\n\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\n\n\t\tfunction mouseMove(e){\n\t\t\trow.setHeight(self.startHeight + ((typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY) - self.startY));\n\t\t}\n\n\t\tfunction mouseUp(e){\n\n\t\t\t// //block editor from taking action while resizing is taking place\n\t\t\t// if(self.startColumn.modules.edit){\n\t\t\t// \tself.startColumn.modules.edit.blocked = false;\n\t\t\t// }\n\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseMove);\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\n\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\n\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\t\tself.dispatchExternal(\"rowResized\", row.getComponent());\n\t\t}\n\n\t\te.stopPropagation(); //prevent resize from interfering with movable columns\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 = true;\n\t\t// }\n\n\t\tself.startY = typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY;\n\t\tself.startHeight = row.getHeight();\n\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\n\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\n\t\thandle.addEventListener(\"touchend\", mouseUp);\n\t}\n}\n\nResizeRows.moduleName = \"resizeRows\";\n\nexport default ResizeRows;","import Module from '../../core/Module.js';\n\nclass ResizeTable extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.binding = false;\n\t\tthis.visibilityObserver = false;\n\t\tthis.resizeObserver = false;\n\t\tthis.containerObserver = false;\n\t\t\n\t\tthis.tableHeight = 0;\n\t\tthis.tableWidth = 0;\n\t\tthis.containerHeight = 0;\n\t\tthis.containerWidth = 0;\n\t\t\n\t\tthis.autoResize = false;\n\t\t\n\t\tthis.visible = false;\n\t\t\n\t\tthis.initialized = false;\n\t\tthis.initialRedraw = false;\n\t\t\n\t\tthis.registerTableOption(\"autoResize\", true); //auto resize table\n\t}\n\t\n\tinitialize(){\n\t\tif(this.table.options.autoResize){\n\t\t\tvar table = this.table,\n\t\t\ttableStyle;\n\t\t\t\n\t\t\tthis.tableHeight = table.element.clientHeight;\n\t\t\tthis.tableWidth = table.element.clientWidth;\n\t\t\t\n\t\t\tif(table.element.parentNode){\n\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\n\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\n\t\t\t}\n\t\t\t\n\t\t\tif(typeof IntersectionObserver !== \"undefined\" && typeof ResizeObserver !== \"undefined\" && table.rowManager.getRenderMode() === \"virtual\"){\n\t\t\t\t\n\t\t\t\tthis.initializeVisibilityObserver();\n\t\t\t\t\n\t\t\t\tthis.autoResize = true;\n\t\t\t\t\n\t\t\t\tthis.resizeObserver = new ResizeObserver((entry) => {\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\n\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.tableHeight != nodeHeight || this.tableWidth != nodeWidth){\n\t\t\t\t\t\t\tthis.tableHeight = nodeHeight;\n\t\t\t\t\t\t\tthis.tableWidth = nodeWidth;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(table.element.parentNode){\n\t\t\t\t\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\n\t\t\t\t\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.redrawTable();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.resizeObserver.observe(table.element);\n\t\t\t\t\n\t\t\t\ttableStyle = window.getComputedStyle(table.element);\n\t\t\t\t\n\t\t\t\tif(this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue(\"max-height\") || tableStyle.getPropertyValue(\"min-height\"))){\n\t\t\t\t\t\n\t\t\t\t\tthis.containerObserver = new ResizeObserver((entry) => {\n\t\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\n\t\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(this.containerHeight != nodeHeight || this.containerWidth != nodeWidth){\n\t\t\t\t\t\t\t\tthis.containerHeight = nodeHeight;\n\t\t\t\t\t\t\t\tthis.containerWidth = nodeWidth;\n\t\t\t\t\t\t\t\tthis.tableHeight = table.element.clientHeight;\n\t\t\t\t\t\t\t\tthis.tableWidth = table.element.clientWidth;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.redrawTable();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tthis.containerObserver.observe(this.table.element.parentNode);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.subscribe(\"table-resize\", this.tableResized.bind(this));\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tthis.binding = function(){\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && (!table.modules.edit || (table.modules.edit && !table.modules.edit.currentCell)))){\n\t\t\t\t\t\ttable.columnManager.rerenderColumns(true);\n\t\t\t\t\t\ttable.redraw();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\twindow.addEventListener(\"resize\", this.binding);\n\t\t\t}\n\t\t\t\n\t\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\n\t\t}\n\t}\n\t\n\tinitializeVisibilityObserver(){\n\t\tthis.visibilityObserver = new IntersectionObserver((entries) => {\n\t\t\tthis.visible = entries[0].isIntersecting;\n\t\t\t\n\t\t\tif(!this.initialized){\n\t\t\t\tthis.initialized = true;\n\t\t\t\tthis.initialRedraw = !this.visible;\n\t\t\t}else{\n\t\t\t\tif(this.visible){\n\t\t\t\t\tthis.redrawTable(this.initialRedraw);\n\t\t\t\t\tthis.initialRedraw = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.visibilityObserver.observe(this.table.element);\n\t}\n\t\n\tredrawTable(force){\n\t\tif(this.initialized && this.visible){\n\t\t\tthis.table.columnManager.rerenderColumns(true);\n\t\t\tthis.table.redraw(force);\n\t\t}\n\t}\n\t\n\ttableResized(){\n\t\tthis.table.rowManager.redraw();\n\t}\n\t\n\tclearBindings(){\n\t\tif(this.binding){\n\t\t\twindow.removeEventListener(\"resize\", this.binding);\n\t\t}\n\t\t\n\t\tif(this.resizeObserver){\n\t\t\tthis.resizeObserver.unobserve(this.table.element);\n\t\t}\n\t\t\n\t\tif(this.visibilityObserver){\n\t\t\tthis.visibilityObserver.unobserve(this.table.element);\n\t\t}\n\t\t\n\t\tif(this.containerObserver){\n\t\t\tthis.containerObserver.unobserve(this.table.element.parentNode);\n\t\t}\n\t}\n}\n\nResizeTable.moduleName = \"resizeTable\";\n\nexport default ResizeTable;","import Module from '../../core/Module.js';\n\nclass ResponsiveLayout extends Module{\n\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.columns = [];\n\t\tthis.hiddenColumns = [];\n\t\tthis.mode = \"\";\n\t\tthis.index = 0;\n\t\tthis.collapseFormatter = [];\n\t\tthis.collapseStartOpen = true;\n\t\tthis.collapseHandleColumn = false;\n\n\t\tthis.registerTableOption(\"responsiveLayout\", false); //responsive layout flags\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseStartOpen\", true); //start showing collapsed data\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseUseFormatters\", true); //responsive layout collapse formatter\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseFormatter\", false); //responsive layout collapse formatter\n\n\t\tthis.registerColumnOption(\"responsive\");\n\t}\n\n\t//generate responsive columns list\n\tinitialize(){\n\t\tif(this.table.options.responsiveLayout){\n\t\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\t\tthis.subscribe(\"column-show\", this.updateColumnVisibility.bind(this));\n\t\t\tthis.subscribe(\"column-hide\", this.updateColumnVisibility.bind(this));\n\t\t\tthis.subscribe(\"columns-loaded\", this.initializeResponsivity.bind(this));\n\t\t\tthis.subscribe(\"column-moved\", this.initializeResponsivity.bind(this));\n\t\t\tthis.subscribe(\"column-add\", this.initializeResponsivity.bind(this));\n\t\t\tthis.subscribe(\"column-delete\", this.initializeResponsivity.bind(this));\n\n\t\t\tthis.subscribe(\"table-redrawing\", this.tableRedraw.bind(this));\n\t\t\t\n\t\t\tif(this.table.options.responsiveLayout === \"collapse\"){\n\t\t\t\tthis.subscribe(\"row-data-changed\", this.generateCollapsedRowContent.bind(this));\n\t\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\n\t\t\t\tthis.subscribe(\"row-layout\", this.layoutRow.bind(this));\n\t\t\t}\n\t\t}\n\t}\n\n\ttableRedraw(force){\n\t\tif([\"fitColumns\", \"fitDataStretch\"].indexOf(this.layoutMode()) === -1){\n\t\t\tif(!force){\n\t\t\t\tthis.update();\n\t\t\t}\n\t\t}\n\t}\n\n\tinitializeResponsivity(){\n\t\tvar columns = [];\n\n\t\tthis.mode = this.table.options.responsiveLayout;\n\t\tthis.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;\n\t\tthis.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;\n\t\tthis.hiddenColumns = [];\n\n\t\t//determine level of responsivity for each column\n\t\tthis.table.columnManager.columnsByIndex.forEach((column, i) => {\n\t\t\tif(column.modules.responsive){\n\t\t\t\tif(column.modules.responsive.order && column.modules.responsive.visible){\n\t\t\t\t\tcolumn.modules.responsive.index = i;\n\t\t\t\t\tcolumns.push(column);\n\n\t\t\t\t\tif(!column.visible && this.mode === \"collapse\"){\n\t\t\t\t\t\tthis.hiddenColumns.push(column);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t//sort list by responsivity\n\t\tcolumns = columns.reverse();\n\t\tcolumns = columns.sort((a, b) => {\n\t\t\tvar diff = b.modules.responsive.order - a.modules.responsive.order;\n\t\t\treturn diff || (b.modules.responsive.index - a.modules.responsive.index);\n\t\t});\n\n\t\tthis.columns = columns;\n\n\t\tif(this.mode === \"collapse\"){\n\t\t\tthis.generateCollapsedContent();\n\t\t}\n\n\t\t//assign collapse column\n\t\tfor (let col of this.table.columnManager.columnsByIndex){\n\t\t\tif(col.definition.formatter == \"responsiveCollapse\"){\n\t\t\t\tthis.collapseHandleColumn = col;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif(this.collapseHandleColumn){\n\t\t\tif(this.hiddenColumns.length){\n\t\t\t\tthis.collapseHandleColumn.show();\n\t\t\t}else{\n\t\t\t\tthis.collapseHandleColumn.hide();\n\t\t\t}\n\t\t}\n\t}\n\n\t//define layout information\n\tinitializeColumn(column){\n\t\tvar def = column.getDefinition();\n\n\t\tcolumn.modules.responsive = {order: typeof def.responsive === \"undefined\" ? 1 : def.responsive, visible:def.visible === false ? false : true};\n\t}\n\n\tinitializeRow(row){\n\t\tvar el;\n\n\t\tif(row.type !== \"calc\"){\n\t\t\tel = document.createElement(\"div\");\n\t\t\tel.classList.add(\"tabulator-responsive-collapse\");\n\n\t\t\trow.modules.responsiveLayout = {\n\t\t\t\telement:el,\n\t\t\t\topen:this.collapseStartOpen,\n\t\t\t};\n\n\t\t\tif(!this.collapseStartOpen){\n\t\t\t\tel.style.display = 'none';\n\t\t\t}\n\t\t}\n\t}\n\n\tlayoutRow(row){\n\t\tvar rowEl = row.getElement();\n\n\t\tif(row.modules.responsiveLayout){\n\t\t\trowEl.appendChild(row.modules.responsiveLayout.element);\n\t\t\tthis.generateCollapsedRowContent(row);\n\t\t}\n\t}\n\n\t//update column visibility\n\tupdateColumnVisibility(column, responsiveToggle){\n\t\tif(!responsiveToggle && column.modules.responsive){\n\t\t\tcolumn.modules.responsive.visible = column.visible;\n\t\t\tthis.initializeResponsivity();\n\t\t}\n\t}\n\n\thideColumn(column){\n\t\tvar colCount = this.hiddenColumns.length;\n\n\t\tcolumn.hide(false, true);\n\n\t\tif(this.mode === \"collapse\"){\n\t\t\tthis.hiddenColumns.unshift(column);\n\t\t\tthis.generateCollapsedContent();\n\n\t\t\tif(this.collapseHandleColumn && !colCount){\n\t\t\t\tthis.collapseHandleColumn.show();\n\t\t\t}\n\t\t}\n\t}\n\n\tshowColumn(column){\n\t\tvar index;\n\n\t\tcolumn.show(false, true);\n\t\t//set column width to prevent calculation loops on uninitialized columns\n\t\tcolumn.setWidth(column.getWidth());\n\n\t\tif(this.mode === \"collapse\"){\n\t\t\tindex = this.hiddenColumns.indexOf(column);\n\n\t\t\tif(index > -1){\n\t\t\t\tthis.hiddenColumns.splice(index, 1);\n\t\t\t}\n\n\t\t\tthis.generateCollapsedContent();\n\n\t\t\tif(this.collapseHandleColumn && !this.hiddenColumns.length){\n\t\t\t\tthis.collapseHandleColumn.hide();\n\t\t\t}\n\t\t}\n\t}\n\n\t//redraw columns to fit space\n\tupdate(){\n\t\tvar working = true;\n\n\t\twhile(working){\n\n\t\t\tlet width = this.table.modules.layout.getMode() == \"fitColumns\" ? this.table.columnManager.getFlexBaseWidth() : this.table.columnManager.getWidth();\n\n\t\t\tlet diff = (this.table.options.headerVisible ? this.table.columnManager.element.clientWidth : this.table.element.clientWidth) - width;\n\n\t\t\tif(diff < 0){\n\t\t\t\t//table is too wide\n\t\t\t\tlet column = this.columns[this.index];\n\n\t\t\t\tif(column){\n\t\t\t\t\tthis.hideColumn(column);\n\t\t\t\t\tthis.index ++;\n\t\t\t\t}else{\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\n\t\t\t}else{\n\n\t\t\t\t//table has spare space\n\t\t\t\tlet column = this.columns[this.index -1];\n\n\t\t\t\tif(column){\n\t\t\t\t\tif(diff > 0){\n\t\t\t\t\t\tif(diff >= column.getWidth()){\n\t\t\t\t\t\t\tthis.showColumn(column);\n\t\t\t\t\t\t\tthis.index --;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tworking = false;\n\t\t\t\t\t\t}\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}\n\n\t\t\tif(!this.table.rowManager.activeRowsCount){\n\t\t\t\tthis.table.rowManager.renderEmptyScroll();\n\t\t\t}\n\t\t}\n\t}\n\n\tgenerateCollapsedContent(){\n\t\tvar rows = this.table.rowManager.getDisplayRows();\n\n\t\trows.forEach((row) => {\n\t\t\tthis.generateCollapsedRowContent(row);\n\t\t});\n\t}\n\n\tgenerateCollapsedRowContent(row){\n\t\tvar el, contents;\n\n\t\tif(row.modules.responsiveLayout){\n\t\t\tel = row.modules.responsiveLayout.element;\n\n\t\t\twhile(el.firstChild) el.removeChild(el.firstChild);\n\n\t\t\tcontents = this.collapseFormatter(this.generateCollapsedRowData(row));\n\t\t\tif(contents){\n\t\t\t\tel.appendChild(contents);\n\t\t\t}\n\t\t}\n\t}\n\n\tgenerateCollapsedRowData(row){\n\t\tvar data = row.getData(),\n\t\toutput = [],\n\t\tmockCellComponent;\n\n\t\tthis.hiddenColumns.forEach((column) => {\n\t\t\tvar value = column.getFieldValue(data);\n\n\t\t\tif(column.definition.title && column.field){\n\t\t\t\tif(column.modules.format && this.table.options.responsiveLayoutCollapseUseFormatters){\n\n\t\t\t\t\tmockCellComponent = {\n\t\t\t\t\t\tvalue:false,\n\t\t\t\t\t\tdata:{},\n\t\t\t\t\t\tgetValue:function(){\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetData:function(){\n\t\t\t\t\t\t\treturn data;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetType:function(){\n\t\t\t\t\t\t\treturn \"cell\";\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetElement:function(){\n\t\t\t\t\t\t\treturn document.createElement(\"div\");\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetRow:function(){\n\t\t\t\t\t\t\treturn row.getComponent();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetColumn:function(){\n\t\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetTable:() => {\n\t\t\t\t\t\t\treturn this.table;\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\tfunction onRendered(callback){\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push({\n\t\t\t\t\t\tfield: column.field,\n\t\t\t\t\t\ttitle: column.definition.title,\n\t\t\t\t\t\tvalue: column.modules.format.formatter.call(this.table.modules.format, mockCellComponent, column.modules.format.params, onRendered)\n\t\t\t\t\t});\n\t\t\t\t}else{\n\t\t\t\t\toutput.push({\n\t\t\t\t\t\tfield: column.field,\n\t\t\t\t\t\ttitle: column.definition.title,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t}\n\n\tformatCollapsedData(data){\n\t\tvar list = document.createElement(\"table\");\n\n\t\tdata.forEach(function(item){\n\t\t\tvar row = document.createElement(\"tr\");\n\t\t\tvar titleData = document.createElement(\"td\");\n\t\t\tvar valueData = document.createElement(\"td\");\n\t\t\tvar node_content;\n\n\t\t\tvar titleHighlight = document.createElement(\"strong\");\n\t\t\ttitleData.appendChild(titleHighlight);\n\t\t\tthis.langBind(\"columns|\" + item.field, function(text){\n\t\t\t\ttitleHighlight.innerHTML = text || item.title;\n\t\t\t});\n\n\t\t\tif(item.value instanceof Node){\n\t\t\t\tnode_content = document.createElement(\"div\");\n\t\t\t\tnode_content.appendChild(item.value);\n\t\t\t\tvalueData.appendChild(node_content);\n\t\t\t}else{\n\t\t\t\tvalueData.innerHTML = item.value;\n\t\t\t}\n\n\t\t\trow.appendChild(titleData);\n\t\t\trow.appendChild(valueData);\n\t\t\tlist.appendChild(row);\n\t\t}, this);\n\n\t\treturn Object.keys(data).length ? list : \"\";\n\t}\n}\n\nResponsiveLayout.moduleName = \"responsiveLayout\";\n\nexport default ResponsiveLayout;\n","import Module from '../../core/Module.js';\n\nclass SelectRow extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.selecting = false; //flag selecting in progress\n\t\tthis.lastClickedRow = false; //last clicked row\n\t\tthis.selectPrev = []; //hold previously selected element for drag drop selection\n\t\tthis.selectedRows = []; //hold selected rows\n\t\tthis.headerCheckboxElement = null; // hold header select element\n\t\t\n\t\tthis.registerTableOption(\"selectableRows\", \"highlight\"); //highlight rows on hover\n\t\tthis.registerTableOption(\"selectableRowsRangeMode\", \"drag\"); //highlight rows on hover\n\t\tthis.registerTableOption(\"selectableRowsRollingSelection\", true); //roll selection once maximum number of selectable rows is reached\n\t\tthis.registerTableOption(\"selectableRowsPersistence\", true); // maintain selection when table view is updated\n\t\tthis.registerTableOption(\"selectableRowsCheck\", function(data, row){return true;}); //check whether row is selectable\n\t\t\n\t\tthis.registerTableFunction(\"selectRow\", this.selectRows.bind(this));\n\t\tthis.registerTableFunction(\"deselectRow\", this.deselectRows.bind(this));\n\t\tthis.registerTableFunction(\"toggleSelectRow\", this.toggleRow.bind(this));\n\t\tthis.registerTableFunction(\"getSelectedRows\", this.getSelectedRows.bind(this));\n\t\tthis.registerTableFunction(\"getSelectedData\", this.getSelectedData.bind(this));\n\t\t\n\t\t//register component functions\n\t\tthis.registerComponentFunction(\"row\", \"select\", this.selectRows.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"deselect\", this.deselectRows.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"toggleSelect\", this.toggleRow.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"isSelected\", this.isRowSelected.bind(this));\n\t}\n\t\n\tinitialize(){\n\n\t\tthis.deprecatedOptionsCheck();\n\n\t\tif(this.table.options.selectableRows === \"highlight\" && this.table.options.selectableRange){\n\t\t\tthis.table.options.selectableRows = false;\n\t\t}\n\n\t\tif(this.table.options.selectableRows !== false){\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\n\t\t\tthis.subscribe(\"row-deleting\", this.rowDeleted.bind(this));\n\t\t\tthis.subscribe(\"rows-wipe\", this.clearSelectionData.bind(this));\n\t\t\tthis.subscribe(\"rows-retrieve\", this.rowRetrieve.bind(this));\n\t\t\t\n\t\t\tif(this.table.options.selectableRows && !this.table.options.selectableRowsPersistence){\n\t\t\t\tthis.subscribe(\"data-refreshing\", this.deselectRows.bind(this));\n\t\t\t}\n\t\t}\n\t}\n\n\tdeprecatedOptionsCheck(){\n\t\tthis.deprecationCheck(\"selectable\", \"selectableRows\", true);\n\t\tthis.deprecationCheck(\"selectableRollingSelection\", \"selectableRowsRollingSelection\", true);\n\t\tthis.deprecationCheck(\"selectableRangeMode\", \"selectableRowsRangeMode\", true);\n\t\tthis.deprecationCheck(\"selectablePersistence\", \"selectableRowsPersistence\", true);\n\t\tthis.deprecationCheck(\"selectableCheck\", \"selectableRowsCheck\", true);\n\t}\n\t\n\trowRetrieve(type, prevValue){\n\t\treturn type === \"selected\" ? this.selectedRows : prevValue;\n\t}\n\t\n\trowDeleted(row){\n\t\tthis._deselectRow(row, true);\n\t}\n\t\n\tclearSelectionData(silent){\n\t\tvar prevSelected = this.selectedRows.length;\n\n\t\tthis.selecting = false;\n\t\tthis.lastClickedRow = false;\n\t\tthis.selectPrev = [];\n\t\tthis.selectedRows = [];\n\t\t\n\t\tif(prevSelected && silent !== true){\n\t\t\tthis._rowSelectionChanged();\n\t\t}\n\t}\n\t\n\tinitializeRow(row){\n\t\tvar self = this,\n\t\tselectable = self.checkRowSelectability(row),\n\t\telement = row.getElement();\n\t\t\n\t\t// trigger end of row selection\n\t\tvar endSelect = function(){\n\t\t\t\n\t\t\tsetTimeout(function(){\n\t\t\t\tself.selecting = false;\n\t\t\t}, 50);\n\t\t\t\n\t\t\tdocument.body.removeEventListener(\"mouseup\", endSelect);\n\t\t};\n\t\t\n\t\trow.modules.select = {selected:false};\n\n\t\telement.classList.toggle(\"tabulator-selectable\", selectable);\n\t\telement.classList.toggle(\"tabulator-unselectable\", !selectable);\n\t\t\n\t\t//set row selection class\n\t\tif(self.checkRowSelectability(row)){\t\t\t\n\t\t\tif(self.table.options.selectableRows && self.table.options.selectableRows != \"highlight\"){\n\t\t\t\tif(self.table.options.selectableRowsRangeMode === \"click\"){\n\t\t\t\t\telement.addEventListener(\"click\", this.handleComplexRowClick.bind(this, row));\n\t\t\t\t}else{\n\t\t\t\t\telement.addEventListener(\"click\", function(e){\n\t\t\t\t\t\tif(!self.table.modExists(\"edit\") || !self.table.modules.edit.getCurrentCell()){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(!self.selecting){\n\t\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\telement.addEventListener(\"mousedown\", function(e){\n\t\t\t\t\t\tif(e.shiftKey){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.selecting = true;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.selectPrev = [];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"mouseup\", endSelect);\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"keyup\", endSelect);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\telement.addEventListener(\"mouseenter\", function(e){\n\t\t\t\t\t\tif(self.selecting){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(self.selectPrev[1] == row){\n\t\t\t\t\t\t\t\tself.toggleRow(self.selectPrev[0]);\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\t\n\t\t\t\t\telement.addEventListener(\"mouseout\", function(e){\n\t\t\t\t\t\tif(self.selecting){\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t\tself.selectPrev.unshift(row);\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\t\n\thandleComplexRowClick(row, e){\n\t\tif(e.shiftKey){\n\t\t\tthis.table._clearSelection();\n\t\t\tthis.lastClickedRow = this.lastClickedRow || row;\n\t\t\t\n\t\t\tvar lastClickedRowIdx = this.table.rowManager.getDisplayRowIndex(this.lastClickedRow);\n\t\t\tvar rowIdx = this.table.rowManager.getDisplayRowIndex(row);\n\t\t\t\n\t\t\tvar fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;\n\t\t\tvar toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;\n\t\t\t\n\t\t\tvar rows = this.table.rowManager.getDisplayRows().slice(0);\n\t\t\tvar toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);\n\t\t\t\n\t\t\tif(e.ctrlKey || e.metaKey){\n\t\t\t\ttoggledRows.forEach((toggledRow)=>{\n\t\t\t\t\tif(toggledRow !== this.lastClickedRow){\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(this.table.options.selectableRows !== true && !this.isRowSelected(row)){\n\t\t\t\t\t\t\tif(this.selectedRows.length < this.table.options.selectableRows){\n\t\t\t\t\t\t\t\tthis.toggleRow(toggledRow);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthis.toggleRow(toggledRow);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tthis.lastClickedRow = row;\n\t\t\t}else{\n\t\t\t\tthis.deselectRows(undefined, true);\n\t\t\t\t\n\t\t\t\tif(this.table.options.selectableRows !== true){\n\t\t\t\t\tif(toggledRows.length > this.table.options.selectableRows){\n\t\t\t\t\t\ttoggledRows = toggledRows.slice(0, this.table.options.selectableRows);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.selectRows(toggledRows);\n\t\t\t}\n\t\t\tthis.table._clearSelection();\n\t\t}\n\t\telse if(e.ctrlKey || e.metaKey){\n\t\t\tthis.toggleRow(row);\n\t\t\tthis.lastClickedRow = row;\n\t\t}else{\n\t\t\tthis.deselectRows(undefined, true);\n\t\t\tthis.selectRows(row);\n\t\t\tthis.lastClickedRow = row;\n\t\t}\n\t}\n\n\tcheckRowSelectability(row){\n\t\tif(row && row.type === \"row\"){\n\t\t\treturn this.table.options.selectableRowsCheck.call(this.table, row.getComponent());\n\t\t}\n\n\t\treturn false;\n\t}\n\t\n\t//toggle row selection\n\ttoggleRow(row){\n\t\tif(this.checkRowSelectability(row)){\n\t\t\tif(row.modules.select && row.modules.select.selected){\n\t\t\t\tthis._deselectRow(row);\n\t\t\t}else{\n\t\t\t\tthis._selectRow(row);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//select a number of rows\n\tselectRows(rows){\n\t\tvar changes = [], \n\t\trowMatch, change;\n\t\t\n\t\tswitch(typeof rows){\n\t\t\tcase \"undefined\":\n\t\t\t\trowMatch = this.table.rowManager.rows;\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"number\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase \"string\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\n\t\t\t\tif(!rowMatch){\n\t\t\t\t\trowMatch = this.table.rowManager.getRows(rows);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\trowMatch = rows;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(Array.isArray(rowMatch)){\n\t\t\tif(rowMatch.length){\n\t\t\t\trowMatch.forEach((row) => {\n\t\t\t\t\tchange = this._selectRow(row, true, true);\n\n\t\t\t\t\tif(change){\n\t\t\t\t\t\tchanges.push(change);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis._rowSelectionChanged(false, changes);\n\t\t\t}\n\t\t}else{\n\t\t\tif(rowMatch){\n\t\t\t\tthis._selectRow(rowMatch, false, true);\n\t\t\t}\n\t\t}\t\n\t}\n\t\n\t//select an individual row\n\t_selectRow(rowInfo, silent, force){\n\t\t//handle max row count\n\t\tif(!isNaN(this.table.options.selectableRows) && this.table.options.selectableRows !== true && !force){\n\t\t\tif(this.selectedRows.length >= this.table.options.selectableRows){\n\t\t\t\tif(this.table.options.selectableRowsRollingSelection){\n\t\t\t\t\tthis._deselectRow(this.selectedRows[0]);\n\t\t\t\t}else{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar row = this.table.rowManager.findRow(rowInfo);\n\t\t\n\t\tif(row){\n\t\t\tif(this.selectedRows.indexOf(row) == -1){\n\t\t\t\trow.getElement().classList.add(\"tabulator-selected\");\n\t\t\t\tif(!row.modules.select){\n\t\t\t\t\trow.modules.select = {};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trow.modules.select.selected = true;\n\t\t\t\tif(row.modules.select.checkboxEl){\n\t\t\t\t\trow.modules.select.checkboxEl.checked = true;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.selectedRows.push(row);\n\t\t\t\t\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\n\t\t\t\t\tthis.childRowSelection(row, true);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatchExternal(\"rowSelected\", row.getComponent());\n\t\t\t\t\n\t\t\t\tthis._rowSelectionChanged(silent, row);\n\n\t\t\t\treturn row;\n\t\t\t}\n\t\t}else{\n\t\t\tif(!silent){\n\t\t\t\tconsole.warn(\"Selection Error - No such row found, ignoring selection:\" + rowInfo);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tisRowSelected(row){\n\t\treturn this.selectedRows.indexOf(row) !== -1;\n\t}\n\t\n\t//deselect a number of rows\n\tdeselectRows(rows, silent){\n\t\tvar changes = [], \n\t\trowMatch, change;\n\t\t\n\t\tswitch(typeof rows){\n\t\t\tcase \"undefined\":\n\t\t\t\trowMatch = Object.assign([], this.selectedRows);\n\t\t\t\tbreak;\n\n\t\t\tcase \"number\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"string\":\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\t\t\t\n\t\t\t\tif(!rowMatch){\n\t\t\t\t\trowMatch = this.table.rowManager.getRows(rows);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tdefault:\n\t\t\t\trowMatch = rows;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(Array.isArray(rowMatch)){\n\t\t\tif(rowMatch.length){\n\t\t\t\trowMatch.forEach((row) => {\n\t\t\t\t\tchange = this._deselectRow(row, true, true);\n\n\t\t\t\t\tif(change){\n\t\t\t\t\t\tchanges.push(change);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis._rowSelectionChanged(silent, [], changes);\n\t\t\t}\n\t\t}else{\n\t\t\tif(rowMatch){\n\t\t\t\tthis._deselectRow(rowMatch, silent, true);\n\t\t\t}\n\t\t}\t\n\t}\n\t\n\t//deselect an individual row\n\t_deselectRow(rowInfo, silent){\n\t\tvar self = this,\n\t\trow = self.table.rowManager.findRow(rowInfo),\n\t\tindex, element;\n\t\t\n\t\tif(row){\n\t\t\tindex = self.selectedRows.findIndex(function(selectedRow){\n\t\t\t\treturn selectedRow == row;\n\t\t\t});\n\t\t\t\n\t\t\tif(index > -1){\n\n\t\t\t\telement = row.getElement();\n\t\t\t\t\n\t\t\t\tif(element){\n\t\t\t\t\telement.classList.remove(\"tabulator-selected\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(!row.modules.select){\n\t\t\t\t\trow.modules.select = {};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trow.modules.select.selected = false;\n\t\t\t\tif(row.modules.select.checkboxEl){\n\t\t\t\t\trow.modules.select.checkboxEl.checked = false;\n\t\t\t\t}\n\t\t\t\tself.selectedRows.splice(index, 1);\n\t\t\t\t\n\t\t\t\tif(this.table.options.dataTreeSelectPropagate){\n\t\t\t\t\tthis.childRowSelection(row, false);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.dispatchExternal(\"rowDeselected\", row.getComponent());\n\t\t\t\t\n\t\t\t\tself._rowSelectionChanged(silent, undefined, row);\n\n\t\t\t\treturn row;\n\t\t\t}\n\t\t}else{\n\t\t\tif(!silent){\n\t\t\t\tconsole.warn(\"Deselection Error - No such row found, ignoring selection:\" + rowInfo);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tgetSelectedData(){\n\t\tvar data = [];\n\t\t\n\t\tthis.selectedRows.forEach(function(row){\n\t\t\tdata.push(row.getData());\n\t\t});\n\t\t\n\t\treturn data;\n\t}\n\t\n\tgetSelectedRows(){\n\t\tvar rows = [];\n\t\t\n\t\tthis.selectedRows.forEach(function(row){\n\t\t\trows.push(row.getComponent());\n\t\t});\n\t\t\n\t\treturn rows;\n\t}\n\t\n\t_rowSelectionChanged(silent, selected = [], deselected = []){\n\t\tif(this.headerCheckboxElement){\n\t\t\tif(this.selectedRows.length === 0){\n\t\t\t\tthis.headerCheckboxElement.checked = false;\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\n\t\t\t} else if(this.table.rowManager.rows.length === this.selectedRows.length){\n\t\t\t\tthis.headerCheckboxElement.checked = true;\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\n\t\t\t} else {\n\t\t\t\tthis.headerCheckboxElement.indeterminate = true;\n\t\t\t\tthis.headerCheckboxElement.checked = false;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(!silent){\n\t\t\tif(!Array.isArray(selected)){\n\t\t\t\tselected = [selected];\n\t\t\t}\n\n\t\t\tselected = selected.map(row => row.getComponent());\n\n\t\t\tif(!Array.isArray(deselected)){\n\t\t\t\tdeselected = [deselected];\n\t\t\t}\n\n\t\t\tdeselected = deselected.map(row => row.getComponent());\n\n\t\t\tthis.dispatchExternal(\"rowSelectionChanged\", this.getSelectedData(), this.getSelectedRows(), selected, deselected);\n\t\t}\n\t}\n\t\n\tregisterRowSelectCheckbox (row, element) {\n\t\tif(!row._row.modules.select){\n\t\t\trow._row.modules.select = {};\n\t\t}\n\t\t\n\t\trow._row.modules.select.checkboxEl = element;\n\t}\n\t\n\tregisterHeaderSelectCheckbox (element) {\n\t\tthis.headerCheckboxElement = element;\n\t}\n\t\n\tchildRowSelection(row, select){\n\t\tvar children = this.table.modules.dataTree.getChildren(row, true);\n\t\t\n\t\tif(select){\n\t\t\tfor(let child of children){\n\t\t\t\tthis._selectRow(child, true);\n\t\t\t}\n\t\t}else{\n\t\t\tfor(let child of children){\n\t\t\t\tthis._deselectRow(child, true);\n\t\t\t}\n\t\t}\n\t}\n}\n\nSelectRow.moduleName = \"selectRow\";\n\nexport default SelectRow;","//sort datetime\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar DT = window.DateTime || luxon.DateTime;\n\tvar format = params.format || \"dd/MM/yyyy HH:mm:ss\",\n\talignEmptyValues = params.alignEmptyValues,\n\temptyAlign = 0;\n\n\tif(typeof DT != \"undefined\"){\n\t\tif(!DT.isDateTime(a)){\n\t\t\tif(format === \"iso\"){\n\t\t\t\ta = DT.fromISO(String(a));\n\t\t\t}else{\n\t\t\t\ta = DT.fromFormat(String(a), format);\n\t\t\t}\n\t\t}\n\n\t\tif(!DT.isDateTime(b)){\n\t\t\tif(format === \"iso\"){\n\t\t\t\tb = DT.fromISO(String(b));\n\t\t\t}else{\n\t\t\t\tb = DT.fromFormat(String(b), format);\n\t\t\t}\n\t\t}\n\n\t\tif(!a.isValid){\n\t\t\temptyAlign = !b.isValid ? 0 : -1;\n\t\t}else if(!b.isValid){\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\n\t}else{\n\t\tconsole.error(\"Sort Error - 'datetime' sorter is dependant on luxon.js\");\n\t}\n}","import number from './sorters/number.js';\nimport string from './sorters/string.js';\nimport date from './sorters/date.js';\nimport time from './sorters/time.js';\nimport datetime from './sorters/datetime.js';\nimport boolean from './sorters/boolean.js';\nimport array from './sorters/array.js';\nimport exists from './sorters/exists.js';\nimport alphanum from './sorters/alphanum.js';\n\nexport default {\n\tnumber:number,\n\tstring:string,\n\tdate:date,\n\ttime:time,\n\tdatetime:datetime,\n\tboolean:boolean,\n\tarray:array,\n\texists:exists,\n\talphanum:alphanum\n};","//sort numbers\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar alignEmptyValues = params.alignEmptyValues;\n\tvar decimal = params.decimalSeparator;\n\tvar thousand = params.thousandSeparator;\n\tvar emptyAlign = 0;\n\n\ta = String(a);\n\tb = String(b);\n\n\tif(thousand){\n\t\ta = a.split(thousand).join(\"\");\n\t\tb = b.split(thousand).join(\"\");\n\t}\n\n\tif(decimal){\n\t\ta = a.split(decimal).join(\".\");\n\t\tb = b.split(decimal).join(\".\");\n\t}\n\n\ta = parseFloat(a);\n\tb = parseFloat(b);\n\n\t//handle non numeric values\n\tif(isNaN(a)){\n\t\temptyAlign = isNaN(b) ? 0 : -1;\n\t}else if(isNaN(b)){\n\t\temptyAlign = 1;\n\t}else{\n\t\t//compare valid values\n\t\treturn a - b;\n\t}\n\n\t//fix empty values in position\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\temptyAlign *= -1;\n\t}\n\n\treturn emptyAlign;\n}","//sort strings\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar alignEmptyValues = params.alignEmptyValues;\n\tvar emptyAlign = 0;\n\tvar locale;\n\n\t//handle empty values\n\tif(!a){\n\t\temptyAlign = !b ? 0 : -1;\n\t}else if(!b){\n\t\temptyAlign = 1;\n\t}else{\n\t\t//compare valid values\n\t\tswitch(typeof params.locale){\n\t\t\tcase \"boolean\":\n\t\t\t\tif(params.locale){\n\t\t\t\t\tlocale = this.langLocale();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"string\":\n\t\t\t\tlocale = params.locale;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);\n\t}\n\n\t//fix empty values in position\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\temptyAlign *= -1;\n\t}\n\n\treturn emptyAlign;\n}","import datetime from './datetime.js';\n\n//sort date\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tif(!params.format){\n\t\tparams.format = \"dd/MM/yyyy\";\n\t}\n\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\n}","import datetime from './datetime.js';\n\n//sort times\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tif(!params.format){\n\t\tparams.format = \"HH:mm\";\n\t}\n\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\n}","//sort booleans\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar el1 = a === true || a === \"true\" || a === \"True\" || a === 1 ? 1 : 0;\n\tvar el2 = b === true || b === \"true\" || b === \"True\" || b === 1 ? 1 : 0;\n\n\treturn el1 - el2;\n}","//sort if element contains any data\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar type = params.type || \"length\",\n\talignEmptyValues = params.alignEmptyValues,\n\temptyAlign = 0;\n\n\tfunction calc(value){\n\t\tvar result;\n\n\t\tswitch(type){\n\t\t\tcase \"length\":\n\t\t\t\tresult = value.length;\n\t\t\t\tbreak;\n\n\t\t\tcase \"sum\":\n\t\t\t\tresult = value.reduce(function(c, d){\n\t\t\t\t\treturn c + d;\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase \"max\":\n\t\t\t\tresult = Math.max.apply(null, value) ;\n\t\t\t\tbreak;\n\n\t\t\tcase \"min\":\n\t\t\t\tresult = Math.min.apply(null, value) ;\n\t\t\t\tbreak;\n\n\t\t\tcase \"avg\":\n\t\t\t\tresult = value.reduce(function(c, d){\n\t\t\t\t\treturn c + d;\n\t\t\t\t}) / value.length;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t//handle non array values\n\tif(!Array.isArray(a)){\n\t\temptyAlign = !Array.isArray(b) ? 0 : -1;\n\t}else if(!Array.isArray(b)){\n\t\temptyAlign = 1;\n\t}else{\n\t\treturn calc(b) - calc(a);\n\t}\n\n\t//fix empty values in position\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\temptyAlign *= -1;\n\t}\n\n\treturn emptyAlign;\n}","//sort if element contains any data\nexport default function(a, b, aRow, bRow, column, dir, params){\n\tvar el1 = typeof a == \"undefined\" ? 0 : 1;\n\tvar el2 = typeof b == \"undefined\" ? 0 : 1;\n\n\treturn el1 - el2;\n}","//sort alpha numeric strings\nexport default function(as, bs, aRow, bRow, column, dir, params){\n\tvar a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\n\tvar alignEmptyValues = params.alignEmptyValues;\n\tvar emptyAlign = 0;\n\n\t//handle empty values\n\tif(!as && as!== 0){\n\t\temptyAlign = !bs && bs!== 0 ? 0 : -1;\n\t}else if(!bs && bs!== 0){\n\t\temptyAlign = 1;\n\t}else{\n\n\t\tif(isFinite(as) && isFinite(bs)) return as - bs;\n\t\ta = String(as).toLowerCase();\n\t\tb = String(bs).toLowerCase();\n\t\tif(a === b) return 0;\n\t\tif(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\n\t\ta = a.match(rx);\n\t\tb = b.match(rx);\n\t\tL = a.length > b.length ? b.length : a.length;\n\t\twhile(i < L){\n\t\t\ta1= a[i];\n\t\t\tb1= b[i++];\n\t\t\tif(a1 !== b1){\n\t\t\t\tif(isFinite(a1) && isFinite(b1)){\n\t\t\t\t\tif(a1.charAt(0) === \"0\") a1 = \".\" + a1;\n\t\t\t\t\tif(b1.charAt(0) === \"0\") b1 = \".\" + b1;\n\t\t\t\t\treturn a1 - b1;\n\t\t\t\t}\n\t\t\t\telse return a1 > b1 ? 1 : -1;\n\t\t\t}\n\t\t}\n\n\t\treturn a.length > b.length;\n\t}\n\n\t//fix empty values in position\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\n\t\temptyAlign *= -1;\n\t}\n\n\treturn emptyAlign;\n}","import Module from '../../core/Module.js';\n\nimport defaultSorters from './defaults/sorters.js';\n\nclass Sort extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.sortList = []; //holder current sort\n\t\tthis.changed = false; //has the sort changed since last render\n\t\t\n\t\tthis.registerTableOption(\"sortMode\", \"local\"); //local or remote sorting\n\t\t\n\t\tthis.registerTableOption(\"initialSort\", false); //initial sorting criteria\n\t\tthis.registerTableOption(\"columnHeaderSortMulti\", true); //multiple or single column sorting\n\t\tthis.registerTableOption(\"sortOrderReverse\", false); //reverse internal sort ordering\n\t\tthis.registerTableOption(\"headerSortElement\", \"
\"); //header sort element\n\t\tthis.registerTableOption(\"headerSortClickElement\", \"header\"); //element which triggers sort when clicked\n\t\t\n\t\tthis.registerColumnOption(\"sorter\");\n\t\tthis.registerColumnOption(\"sorterParams\");\n\t\t\n\t\tthis.registerColumnOption(\"headerSort\", true);\n\t\tthis.registerColumnOption(\"headerSortStartingDir\");\n\t\tthis.registerColumnOption(\"headerSortTristate\");\n\t\t\n\t}\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\n\t\tthis.registerDataHandler(this.sort.bind(this), 20);\n\t\t\n\t\tthis.registerTableFunction(\"setSort\", this.userSetSort.bind(this));\n\t\tthis.registerTableFunction(\"getSorters\", this.getSort.bind(this));\n\t\tthis.registerTableFunction(\"clearSort\", this.clearSort.bind(this));\n\t\t\n\t\tif(this.table.options.sortMode === \"remote\"){\n\t\t\tthis.subscribe(\"data-params\", this.remoteSortParams.bind(this));\n\t\t}\n\t}\n\t\n\ttableBuilt(){\n\t\tif(this.table.options.initialSort){\n\t\t\tthis.setSort(this.table.options.initialSort);\n\t\t}\n\t}\n\t\n\tremoteSortParams(data, config, silent, params){\n\t\tvar sorters = this.getSort();\n\t\t\n\t\tsorters.forEach((item) => {\n\t\t\tdelete item.column;\n\t\t});\n\t\t\n\t\tparams.sort = sorters;\n\t\t\n\t\treturn params;\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\tuserSetSort(sortList, dir){\n\t\tthis.setSort(sortList, dir);\n\t\t// this.table.rowManager.sorterRefresh();\n\t\tthis.refreshSort();\n\t}\n\t\n\tclearSort(){\n\t\tthis.clear();\n\t\t// this.table.rowManager.sorterRefresh();\n\t\tthis.refreshSort();\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\t//initialize column header for sorting\n\tinitializeColumn(column){\n\t\tvar sorter = false,\n\t\tcolEl,\n\t\tarrowEl;\n\t\t\n\t\tswitch(typeof column.definition.sorter){\n\t\t\tcase \"string\":\n\t\t\t\tif(Sort.sorters[column.definition.sorter]){\n\t\t\t\t\tsorter = Sort.sorters[column.definition.sorter];\n\t\t\t\t}else{\n\t\t\t\t\tconsole.warn(\"Sort Error - No such sorter found: \", column.definition.sorter);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t\tsorter = column.definition.sorter;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\tcolumn.modules.sort = {\n\t\t\tsorter:sorter, dir:\"none\",\n\t\t\tparams:column.definition.sorterParams || {},\n\t\t\tstartingDir:column.definition.headerSortStartingDir || \"asc\",\n\t\t\ttristate: column.definition.headerSortTristate,\n\t\t};\n\t\t\n\t\tif(column.definition.headerSort !== false){\n\t\t\t\n\t\t\tcolEl = column.getElement();\n\t\t\t\n\t\t\tcolEl.classList.add(\"tabulator-sortable\");\n\t\t\t\n\t\t\tarrowEl = document.createElement(\"div\");\n\t\t\tarrowEl.classList.add(\"tabulator-col-sorter\");\n\t\t\t\n\t\t\tswitch(this.table.options.headerSortClickElement){\n\t\t\t\tcase \"icon\":\n\t\t\t\t\tarrowEl.classList.add(\"tabulator-col-sorter-element\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"header\":\n\t\t\t\t\tcolEl.classList.add(\"tabulator-col-sorter-element\");\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tcolEl.classList.add(\"tabulator-col-sorter-element\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tswitch(this.table.options.headerSortElement){\n\t\t\t\tcase \"function\":\n\t\t\t\t//do nothing\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase \"object\":\n\t\t\t\t\tarrowEl.appendChild(this.table.options.headerSortElement);\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tdefault:\n\t\t\t\t\tarrowEl.innerHTML = this.table.options.headerSortElement;\n\t\t\t}\n\t\t\t\n\t\t\t//create sorter arrow\n\t\t\tcolumn.titleHolderElement.appendChild(arrowEl);\n\t\t\t\n\t\t\tcolumn.modules.sort.element = arrowEl;\n\t\t\t\n\t\t\tthis.setColumnHeaderSortIcon(column, \"none\");\n\t\t\t\n\t\t\tif(this.table.options.headerSortClickElement === \"icon\"){\n\t\t\t\tarrowEl.addEventListener(\"mousedown\", (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t//sort on click\n\t\t\t(this.table.options.headerSortClickElement === \"icon\" ? arrowEl : colEl).addEventListener(\"click\", (e) => {\n\t\t\t\tvar dir = \"\",\n\t\t\t\tsorters=[],\n\t\t\t\tmatch = false;\n\t\t\t\t\n\t\t\t\tif(column.modules.sort){\n\t\t\t\t\tif(column.modules.sort.tristate){\n\t\t\t\t\t\tif(column.modules.sort.dir == \"none\"){\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(column.modules.sort.dir == column.modules.sort.startingDir){\n\t\t\t\t\t\t\t\tdir = column.modules.sort.dir == \"asc\" ? \"desc\" : \"asc\";\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tdir = \"none\";\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\tswitch(column.modules.sort.dir){\n\t\t\t\t\t\t\tcase \"asc\":\n\t\t\t\t\t\t\t\tdir = \"desc\";\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcase \"desc\":\n\t\t\t\t\t\t\t\tdir = \"asc\";\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (this.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {\n\t\t\t\t\t\tsorters = this.getSort();\n\t\t\t\t\t\t\n\t\t\t\t\t\tmatch = sorters.findIndex((sorter) => {\n\t\t\t\t\t\t\treturn sorter.field === column.getField();\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(match > -1){\n\t\t\t\t\t\t\tsorters[match].dir = dir;\n\t\t\t\t\t\t\t\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}else{\n\t\t\t\t\t\t\tif(dir != \"none\"){\n\t\t\t\t\t\t\t\tsorters.push({column:column, dir:dir});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t//add to existing sort\n\t\t\t\t\t\tthis.setSort(sorters);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(dir == \"none\"){\n\t\t\t\t\t\t\tthis.clear();\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t//sort by column only\n\t\t\t\t\t\t\tthis.setSort(column, dir);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// this.table.rowManager.sorterRefresh(!this.sortList.length);\n\t\t\t\t\tthis.refreshSort();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\t\n\trefreshSort(){\n\t\tif(this.table.options.sortMode === \"remote\"){\n\t\t\tthis.reloadData(null, false, false);\n\t\t}else{\n\t\t\tthis.refreshData(true);\n\t\t}\n\t\t\n\t\t//TODO - Persist left position of row manager\n\t\t// left = this.scrollLeft;\n\t\t// this.scrollHorizontal(left);\n\t}\n\t\n\t//check if the sorters have changed since last use\n\thasChanged(){\n\t\tvar changed = this.changed;\n\t\tthis.changed = false;\n\t\treturn changed;\n\t}\n\t\n\t//return current sorters\n\tgetSort(){\n\t\tvar self = this,\n\t\tsorters = [];\n\t\t\n\t\tself.sortList.forEach(function(item){\n\t\t\tif(item.column){\n\t\t\t\tsorters.push({column:item.column.getComponent(), field:item.column.getField(), dir:item.dir});\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn sorters;\n\t}\n\t\n\t//change sort list and trigger sort\n\tsetSort(sortList, dir){\n\t\tvar self = this,\n\t\tnewSortList = [];\n\t\t\n\t\tif(!Array.isArray(sortList)){\n\t\t\tsortList = [{column: sortList, dir:dir}];\n\t\t}\n\t\t\n\t\tsortList.forEach(function(item){\n\t\t\tvar column;\n\t\t\t\n\t\t\tcolumn = self.table.columnManager.findColumn(item.column);\n\t\t\t\n\t\t\tif(column){\n\t\t\t\titem.column = column;\n\t\t\t\tnewSortList.push(item);\n\t\t\t\tself.changed = true;\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"Sort Warning - Sort field does not exist and is being ignored: \", item.column);\n\t\t\t}\n\t\t\t\n\t\t});\n\t\t\n\t\tself.sortList = newSortList;\n\t\t\n\t\tthis.dispatch(\"sort-changed\");\n\t}\n\t\n\t//clear sorters\n\tclear(){\n\t\tthis.setSort([]);\n\t}\n\t\n\t//find appropriate sorter for column\n\tfindSorter(column){\n\t\tvar row = this.table.rowManager.activeRows[0],\n\t\tsorter = \"string\",\n\t\tfield, value;\n\t\t\n\t\tif(row){\n\t\t\trow = row.getData();\n\t\t\tfield = column.getField();\n\t\t\t\n\t\t\tif(field){\n\t\t\t\t\n\t\t\t\tvalue = column.getFieldValue(row);\n\t\t\t\t\n\t\t\t\tswitch(typeof value){\n\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\tsorter = \"boolean\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\n\t\t\t\t\t\t\tsorter = \"number\";\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\n\t\t\t\t\t\t\t\tsorter = \"alphanum\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn Sort.sorters[sorter];\n\t}\n\t\n\t//work through sort list sorting data\n\tsort(data){\n\t\tvar self = this,\n\t\tsortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,\n\t\tsortListActual = [],\n\t\trowComponents = [];\n\t\t\n\t\tif(this.subscribedExternal(\"dataSorting\")){\n\t\t\tthis.dispatchExternal(\"dataSorting\", self.getSort());\n\t\t}\n\t\t\n\t\tself.clearColumnHeaders();\n\t\t\n\t\tif(this.table.options.sortMode !== \"remote\"){\n\t\t\t\n\t\t\t//build list of valid sorters and trigger column specific callbacks before sort begins\n\t\t\tsortList.forEach(function(item, i){\n\t\t\t\tvar sortObj;\n\t\t\t\t\n\t\t\t\tif(item.column){\n\t\t\t\t\tsortObj = item.column.modules.sort;\n\t\t\t\t\t\n\t\t\t\t\tif(sortObj){\n\t\t\t\t\t\t\n\t\t\t\t\t\t//if no sorter has been defined, take a guess\n\t\t\t\t\t\tif(!sortObj.sorter){\n\t\t\t\t\t\t\tsortObj.sorter = self.findSorter(item.column);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\titem.params = typeof sortObj.params === \"function\" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;\n\t\t\t\t\t\t\n\t\t\t\t\t\tsortListActual.push(item);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tself.setColumnHeader(item.column, item.dir);\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\t//sort data\n\t\t\tif (sortListActual.length) {\n\t\t\t\tself._sortItems(data, sortListActual);\n\t\t\t}\n\t\t\t\n\t\t}else{\n\t\t\tsortList.forEach(function(item, i){\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\n\t\t\t});\n\t\t}\n\t\t\n\t\tif(this.subscribedExternal(\"dataSorted\")){\n\t\t\tdata.forEach((row) => {\n\t\t\t\trowComponents.push(row.getComponent());\n\t\t\t});\n\t\t\t\n\t\t\tthis.dispatchExternal(\"dataSorted\", self.getSort(), rowComponents);\n\t\t}\n\t\t\n\t\treturn data;\n\t}\n\t\n\t//clear sort arrows on columns\n\tclearColumnHeaders(){\n\t\tthis.table.columnManager.getRealColumns().forEach((column) => {\n\t\t\tif(column.modules.sort){\n\t\t\t\tcolumn.modules.sort.dir = \"none\";\n\t\t\t\tcolumn.getElement().setAttribute(\"aria-sort\", \"none\");\n\t\t\t\tthis.setColumnHeaderSortIcon(column, \"none\");\n\t\t\t}\n\t\t});\n\t}\n\t\n\t//set the column header sort direction\n\tsetColumnHeader(column, dir){\n\t\tcolumn.modules.sort.dir = dir;\n\t\tcolumn.getElement().setAttribute(\"aria-sort\", dir === \"asc\" ? \"ascending\" : \"descending\");\n\t\tthis.setColumnHeaderSortIcon(column, dir);\n\t}\n\t\n\tsetColumnHeaderSortIcon(column, dir){\n\t\tvar sortEl = column.modules.sort.element,\n\t\tarrowEl;\n\t\t\n\t\tif(column.definition.headerSort && typeof this.table.options.headerSortElement === \"function\"){\n\t\t\twhile(sortEl.firstChild) sortEl.removeChild(sortEl.firstChild);\n\t\t\t\n\t\t\tarrowEl = this.table.options.headerSortElement.call(this.table, column.getComponent(), dir);\n\t\t\t\n\t\t\tif(typeof arrowEl === \"object\"){\n\t\t\t\tsortEl.appendChild(arrowEl);\n\t\t\t}else{\n\t\t\t\tsortEl.innerHTML = arrowEl;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t//sort each item in sort list\n\t_sortItems(data, sortList){\n\t\tvar sorterCount = sortList.length - 1;\n\t\t\n\t\tdata.sort((a, b) => {\n\t\t\tvar result;\n\t\t\t\n\t\t\tfor(var i = sorterCount; i>= 0; i--){\n\t\t\t\tlet sortItem = sortList[i];\n\t\t\t\t\n\t\t\t\tresult = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);\n\t\t\t\t\n\t\t\t\tif(result !== 0){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn result;\n\t\t});\n\t}\n\t\n\t//process individual rows for a sort function on active data\n\t_sortRow(a, b, column, dir, params){\n\t\tvar el1Comp, el2Comp;\n\t\t\n\t\t//switch elements depending on search direction\n\t\tvar el1 = dir == \"asc\" ? a : b;\n\t\tvar el2 = dir == \"asc\" ? b : a;\n\t\t\n\t\ta = column.getFieldValue(el1.getData());\n\t\tb = column.getFieldValue(el2.getData());\n\t\t\n\t\ta = typeof a !== \"undefined\" ? a : \"\";\n\t\tb = typeof b !== \"undefined\" ? b : \"\";\n\t\t\n\t\tel1Comp = el1.getComponent();\n\t\tel2Comp = el2.getComponent();\n\t\t\n\t\treturn column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);\n\t}\n}\n\nSort.moduleName = \"sort\";\n\n//load defaults\nSort.sorters = defaultSorters;\n\nexport default Sort;\n","class RangeComponent {\n\tconstructor(range) {\n\t\tthis._range = range;\n\n\t\treturn new Proxy(this, {\n\t\t\tget: function (target, name, receiver) {\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\n\t\t\t\t\treturn target[name];\n\t\t\t\t} else {\n\t\t\t\t\treturn target._range.table.componentFunctionBinder.handle(\"range\", target._range, name);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t}\n\n\tgetElement() {\n\t\treturn this._range.element;\n\t}\n\n\tgetData() {\n\t\treturn this._range.getData();\n\t}\n\n\tgetCells() {\n\t\treturn this._range.getCells(true);\n\t}\n\n\tgetStructuredCells() {\n\t\treturn this._range.getStructuredCells();\n\t}\n\n\tgetRows() {\n\t\treturn this._range.getRows().map((row) => row.getComponent());\n\t}\n\n\tgetColumns() {\n\t\treturn this._range.getColumns().map((column) => column.getComponent());\n\t}\n\t\n\tgetBounds() {\n\t\treturn this._range.getBounds();\n\t}\n\n\tgetTopEdge() {\n\t\treturn this._range.top;\n\t}\n\n\tgetBottomEdge() {\n\t\treturn this._range.bottom;\n\t}\n\n\tgetLeftEdge() {\n\t\treturn this._range.left;\n\t}\n\n\tgetRightEdge() {\n\t\treturn this._range.right;\n\t}\n\n\tsetBounds(start, end){\n\t\tif(this._range.destroyedGuard(\"setBounds\")){\n\t\t\tthis._range.setBounds(start ? start._cell : start, end ? end._cell : end);\n\t\t}\n\t}\n\n\tsetStartBound(start){\n\t\tif(this._range.destroyedGuard(\"setStartBound\")){\n\t\t\tthis._range.setEndBound(start ? start._cell : start);\n\t\t\tthis._range.rangeManager.layoutElement();\n\t\t}\n\t}\n\n\tsetEndBound(end){\n\t\tif(this._range.destroyedGuard(\"setEndBound\")){\n\t\t\tthis._range.setEndBound(end ? end._cell : end);\n\t\t\tthis._range.rangeManager.layoutElement();\n\t\t}\n\t}\n\n\tclearValues(){\n\t\tif(this._range.destroyedGuard(\"clearValues\")){\n\t\t\tthis._range.clearValues();\n\t\t}\n\t}\n\n\tremove(){\n\t\tif(this._range.destroyedGuard(\"remove\")){\n\t\t\tthis._range.destroy(true);\n\t\t}\n\t}\n}\n\nexport default RangeComponent;\n","import CoreFeature from '../../core/CoreFeature.js';\nimport RangeComponent from \"./RangeComponent\";\n\nclass Range extends CoreFeature{\n\tconstructor(table, rangeManager, start, end) {\n\t\tsuper(table);\n\t\t\n\t\tthis.rangeManager = rangeManager;\n\t\tthis.element = null;\n\t\tthis.initialized = false;\n\t\tthis.initializing = {\n\t\t\tstart:false,\n\t\t\tend:false,\n\t\t};\n\t\tthis.destroyed = false;\n\t\t\n\t\tthis.top = 0;\n\t\tthis.bottom = 0;\n\t\tthis.left = 0;\n\t\tthis.right = 0;\n\t\t\n\t\tthis.table = table;\n\t\tthis.start = {row:0, col:0};\n\t\tthis.end = {row:0, col:0};\n\n\t\tif(this.rangeManager.rowHeader){\n\t\t\tthis.left = 1;\n\t\t\tthis.right = 1;\n\t\t\tthis.start.col = 1;\n\t\t\tthis.end.col = 1;\n\t\t}\n\t\t\n\t\tthis.initElement();\n\t\t\n\t\tsetTimeout(() => {\n\t\t\tthis.initBounds(start, end);\n\t\t});\n\t}\n\t\n\tinitElement(){\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.classList.add(\"tabulator-range\");\n\t}\n\t\n\tinitBounds(start, end){\n\t\tthis._updateMinMax();\n\t\t\n\t\tif(start){\n\t\t\tthis.setBounds(start, end || start);\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Boundary Setup ///////\n\t///////////////////////////////////\n\t\n\tsetStart(row, col) {\n\t\tif(this.start.row !== row || this.start.col !== col){\n\t\t\tthis.start.row = row;\n\t\t\tthis.start.col = col;\n\t\t\t\n\t\t\tthis.initializing.start = true;\n\t\t\tthis._updateMinMax();\n\t\t}\n\t}\n\t\n\tsetEnd(row, col) {\n\t\tif(this.end.row !== row || this.end.col !== col){\n\t\t\tthis.end.row = row;\n\t\t\tthis.end.col = col;\n\t\t\t\n\t\t\tthis.initializing.end = true;\n\t\t\tthis._updateMinMax();\n\t\t}\n\t}\n\t\n\tsetBounds(start, end, visibleRows){\n\t\tif(start){\n\t\t\tthis.setStartBound(start);\n\t\t}\n\t\t\n\t\tthis.setEndBound(end || start);\n\t\tthis.rangeManager.layoutElement(visibleRows);\n\t}\n\t\n\tsetStartBound(element){\n\t\tvar row, col;\n\t\t\n\t\tif (element.type === \"column\") {\n\t\t\tif(this.rangeManager.columnSelection){\n\t\t\t\tthis.setStart(0, element.getPosition() - 1);\n\t\t\t}\n\t\t}else{\n\t\t\trow = element.row.position - 1;\n\t\t\tcol = element.column.getPosition() - 1;\n\t\t\t\n\t\t\tif (element.column === this.rangeManager.rowHeader) {\n\t\t\t\tthis.setStart(row, 1);\n\t\t\t} else {\n\t\t\t\tthis.setStart(row, col);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tsetEndBound(element){\n\t\tvar rowsCount = this._getTableRows().length,\n\t\trow, col, isRowHeader;\n\t\t\n\t\tif (element.type === \"column\") {\n\t\t\tif(this.rangeManager.columnSelection){\n\t\t\t\tif (this.rangeManager.selecting === \"column\") {\n\t\t\t\t\tthis.setEnd(rowsCount - 1, element.getPosition() - 1);\n\t\t\t\t} else if (this.rangeManager.selecting === \"cell\") {\n\t\t\t\t\tthis.setEnd(0, element.getPosition() - 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}else{\n\t\t\trow = element.row.position - 1;\n\t\t\tcol = element.column.getPosition() - 1;\n\t\t\tisRowHeader = element.column === this.rangeManager.rowHeader;\n\t\t\t\n\t\t\tif (this.rangeManager.selecting === \"row\") {\n\t\t\t\tthis.setEnd(row, this._getTableColumns().length - 1);\n\t\t\t} else if (this.rangeManager.selecting !== \"row\" && isRowHeader) {\n\t\t\t\tthis.setEnd(row, 0);\n\t\t\t} else if (this.rangeManager.selecting === \"column\") {\n\t\t\t\tthis.setEnd(rowsCount - 1, col);\n\t\t\t} else {\n\t\t\t\tthis.setEnd(row, col);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_updateMinMax() {\n\t\tthis.top = Math.min(this.start.row, this.end.row);\n\t\tthis.bottom = Math.max(this.start.row, this.end.row);\n\t\tthis.left = Math.min(this.start.col, this.end.col);\n\t\tthis.right = Math.max(this.start.col, this.end.col);\n\t\t\n\t\tif(this.initialized){\n\t\t\tthis.dispatchExternal(\"rangeChanged\", this.getComponent());\n\t\t}else{\n\t\t\tif(this.initializing.start && this.initializing.end){\n\t\t\t\tthis.initialized = true;\n\t\t\t\tthis.dispatchExternal(\"rangeAdded\", this.getComponent());\n\t\t\t}\n\t\t}\n\t}\n\t\n\t_getTableColumns() {\n\t\treturn this.table.columnManager.getVisibleColumnsByIndex();\n\t}\n\t\n\t_getTableRows() {\n\t\treturn this.table.rowManager.getDisplayRows();\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Rendering ///////\n\t///////////////////////////////////\n\t\n\tlayout() {\n\t\tvar _vDomTop = this.table.rowManager.renderer.vDomTop,\n\t\t_vDomBottom = this.table.rowManager.renderer.vDomBottom,\n\t\t_vDomLeft = this.table.columnManager.renderer.leftCol,\n\t\t_vDomRight = this.table.columnManager.renderer.rightCol,\t\t\n\t\ttop, bottom, left, right, topLeftCell, bottomRightCell;\n\t\t\n\t\tif (_vDomTop == null) {\n\t\t\t_vDomTop = 0;\n\t\t}\n\t\t\n\t\tif (_vDomBottom == null) {\n\t\t\t_vDomBottom = Infinity;\n\t\t}\n\t\t\n\t\tif (_vDomLeft == null) {\n\t\t\t_vDomLeft = 0;\n\t\t}\n\t\t\n\t\tif (_vDomRight == null) {\n\t\t\t_vDomRight = Infinity;\n\t\t}\n\t\t\n\t\tif (this.overlaps(_vDomLeft, _vDomTop, _vDomRight, _vDomBottom)) {\n\t\t\ttop = Math.max(this.top, _vDomTop);\n\t\t\tbottom = Math.min(this.bottom, _vDomBottom);\n\t\t\tleft = Math.max(this.left, _vDomLeft);\n\t\t\tright = Math.min(this.right, _vDomRight);\n\t\t\t\n\t\t\ttopLeftCell = this.rangeManager.getCell(top, left);\n\t\t\tbottomRightCell = this.rangeManager.getCell(bottom, right);\n\t\t\t\n\t\t\tthis.element.classList.add(\"tabulator-range-active\");\n\t\t\t// this.element.classList.toggle(\"tabulator-range-active\", this === this.rangeManager.activeRange);\n\t\t\t\n\t\t\tthis.element.style.left = topLeftCell.row.getElement().offsetLeft + topLeftCell.getElement().offsetLeft + \"px\";\n\t\t\tthis.element.style.top = topLeftCell.row.getElement().offsetTop + \"px\";\n\t\t\tthis.element.style.width = bottomRightCell.getElement().offsetLeft + bottomRightCell.getElement().offsetWidth - topLeftCell.getElement().offsetLeft + \"px\";\n\t\t\tthis.element.style.height = bottomRightCell.row.getElement().offsetTop + bottomRightCell.row.getElement().offsetHeight - topLeftCell.row.getElement().offsetTop + \"px\";\n\t\t}\n\t}\n\t\n\tatTopLeft(cell) {\n\t\treturn cell.row.position - 1 === this.top && cell.column.getPosition() - 1 === this.left;\n\t}\n\t\n\tatBottomRight(cell) {\n\t\treturn cell.row.position - 1 === this.bottom && cell.column.getPosition() - 1 === this.right;\n\t}\n\t\n\toccupies(cell) {\n\t\treturn this.occupiesRow(cell.row) && this.occupiesColumn(cell.column);\n\t}\n\t\n\toccupiesRow(row) {\n\t\treturn this.top <= row.position - 1 && row.position - 1 <= this.bottom;\n\t}\n\t\n\toccupiesColumn(col) {\n\t\treturn this.left <= col.getPosition() - 1 && col.getPosition() - 1 <= this.right;\n\t}\n\t\n\toverlaps(left, top, right, bottom) {\n\t\tif ((this.left > right || left > this.right) || (this.top > bottom || top > this.bottom)){\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\treturn true;\n\t}\n\t\n\tgetData() {\n\t\tvar data = [],\n\t\trows = this.getRows(),\n\t\tcolumns = this.getColumns();\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tvar rowData = row.getData(),\n\t\t\tresult = {};\n\t\t\t\n\t\t\tcolumns.forEach((column) => {\n\t\t\t\tresult[column.field] = rowData[column.field];\n\t\t\t});\n\t\t\t\n\t\t\tdata.push(result);\n\t\t});\n\t\t\n\t\treturn data;\n\t}\n\t\n\tgetCells(structured, component) {\n\t\tvar cells = [],\n\t\trows = this.getRows(),\n\t\tcolumns = this.getColumns();\n\t\t\n\t\tif (structured) {\n\t\t\tcells = rows.map((row) => {\n\t\t\t\tvar arr = [];\n\t\t\t\t\n\t\t\t\trow.getCells().forEach((cell) => {\n\t\t\t\t\tif (columns.includes(cell.column)) {\n\t\t\t\t\t\tarr.push(component ? cell.getComponent() : cell);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\treturn arr;\n\t\t\t});\n\t\t} else {\n\t\t\trows.forEach((row) => {\n\t\t\t\trow.getCells().forEach((cell) => {\n\t\t\t\t\tif (columns.includes(cell.column)) {\n\t\t\t\t\t\tcells.push(component ? cell.getComponent() : cell);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn cells;\n\t}\n\t\n\tgetStructuredCells() {\n\t\treturn this.getCells(true, true);\n\t}\n\t\n\tgetRows() {\n\t\treturn this._getTableRows().slice(this.top, this.bottom + 1);\n\t}\n\t\n\tgetColumns() {\n\t\treturn this._getTableColumns().slice(this.left, this.right + 1);\n\t}\n\t\n\tclearValues(){\n\t\tvar cells = this.getCells();\n\t\tvar clearValue = this.table.options.selectableRangeClearCellsValue;\n\t\t\n\t\tthis.table.blockRedraw();\n\t\t\n\t\tcells.forEach((cell) => {\n\t\t\tcell.setValue(clearValue);\n\t\t});\n\t\t\n\t\tthis.table.restoreRedraw();\n\t\t\n\t}\n\t\n\tgetBounds(component){\n\t\tvar cells = this.getCells(false, component),\n\t\toutput = {\n\t\t\tstart:null,\n\t\t\tend:null,\n\t\t};\n\t\t\n\t\tif(cells.length){\n\t\t\toutput.start = cells[0];\n\t\t\toutput.end = cells[cells.length - 1];\n\t\t}else{\n\t\t\tconsole.warn(\"No bounds defined on range\");\n\t\t}\n\t\t\n\t\treturn output;\n\t}\n\t\n\tgetComponent() {\n\t\tif (!this.component) {\n\t\t\tthis.component = new RangeComponent(this);\n\t\t}\n\t\treturn this.component;\n\t}\n\t\n\tdestroy(notify) {\n\t\tthis.destroyed = true;\n\t\t\n\t\tthis.element.remove();\n\t\t\n\t\tif(notify){\n\t\t\tthis.rangeManager.rangeRemoved(this);\n\t\t}\n\t\t\n\t\tif(this.initialized){\n\t\t\tthis.dispatchExternal(\"rangeRemoved\", this.getComponent());\n\t\t}\n\t}\n\t\n\tdestroyedGuard(func){\n\t\tif(this.destroyed){\n\t\t\tconsole.warn(\"You cannot call the \" + func + \" function on a destroyed range\");\n\t\t}\n\t\t\n\t\treturn !this.destroyed;\n\t}\n}\n\nexport default Range;\n","import Module from \"../../core/Module.js\";\nimport Range from \"./Range.js\";\n\nclass SelectRange extends Module {\n\tconstructor(table) {\n\t\tsuper(table);\n\t\t\n\t\tthis.selecting = \"cell\";\n\t\tthis.mousedown = false;\n\t\tthis.ranges = [];\n\t\tthis.overlay = null;\n\t\tthis.rowHeader = null;\n\t\tthis.layoutChangeTimeout = null;\n\t\tthis.columnSelection = false;\n\t\tthis.rowSelection = false;\n\t\tthis.maxRanges = 0;\n\t\tthis.activeRange = false;\n\t\tthis.blockKeydown = false;\n\t\t\n\t\tthis.keyDownEvent = this._handleKeyDown.bind(this);\n\t\tthis.mouseUpEvent = this._handleMouseUp.bind(this);\n\t\t\n\t\tthis.registerTableOption(\"selectableRange\", false); //enable selectable range\n\t\tthis.registerTableOption(\"selectableRangeColumns\", false); //enable selectable range\n\t\tthis.registerTableOption(\"selectableRangeRows\", false); //enable selectable range\n\t\tthis.registerTableOption(\"selectableRangeClearCells\", false); //allow clearing of active range\n\t\tthis.registerTableOption(\"selectableRangeClearCellsValue\", undefined); //value for cleared active range\n\n\t\tthis.registerTableFunction(\"getRangesData\", this.getRangesData.bind(this));\n\t\tthis.registerTableFunction(\"getRanges\", this.getRanges.bind(this));\n\t\tthis.registerTableFunction(\"addRange\", this.addRangeFromComponent.bind(this));\n\n\t\tthis.registerComponentFunction(\"cell\", \"getRanges\", this.cellGetRanges.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"getRanges\", this.rowGetRanges.bind(this));\n\t\tthis.registerComponentFunction(\"column\", \"getRanges\", this.colGetRanges.bind(this));\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Initialization ///////\n\t///////////////////////////////////\n\t\n\tinitialize() {\n\t\tif (this.options(\"selectableRange\")) {\t\t\n\t\t\tif(!this.options(\"selectableRows\")){\n\t\t\t\t\n\t\t\t\tthis.maxRanges = this.options(\"selectableRange\");\n\t\t\t\t\n\t\t\t\tthis.initializeTable();\n\t\t\t\tthis.initializeWatchers();\n\t\t\t}else{\n\t\t\t\tconsole.warn(\"SelectRange functionality cannot be used in conjunction with row selection\");\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\tinitializeTable() {\t\t\n\t\tthis.overlay = document.createElement(\"div\");\n\t\tthis.overlay.classList.add(\"tabulator-range-overlay\");\n\t\t\n\t\tthis.rangeContainer = document.createElement(\"div\");\n\t\tthis.rangeContainer.classList.add(\"tabulator-range-container\");\n\t\t\n\t\tthis.activeRangeCellElement = document.createElement(\"div\");\n\t\tthis.activeRangeCellElement.classList.add(\"tabulator-range-cell-active\");\n\t\t\n\t\tthis.overlay.appendChild(this.rangeContainer);\n\t\tthis.overlay.appendChild(this.activeRangeCellElement);\n\t\t\n\t\tthis.table.rowManager.element.addEventListener(\"keydown\", this.keyDownEvent);\n\t\t\n\t\tthis.resetRanges();\n\t\t\n\t\tthis.table.rowManager.element.appendChild(this.overlay);\n\t\tthis.table.columnManager.element.setAttribute(\"tabindex\", 0);\n\t\tthis.table.element.classList.add(\"tabulator-ranges\");\n\t}\n\t\n\tinitializeWatchers() {\n\t\tthis.columnSelection = this.options(\"selectableRangeColumns\");\n\t\tthis.rowSelection = this.options(\"selectableRangeRows\");\n\t\t\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t\tthis.subscribe(\"column-mousedown\", this.handleColumnMouseDown.bind(this));\n\t\tthis.subscribe(\"column-mousemove\", this.handleColumnMouseMove.bind(this));\n\t\tthis.subscribe(\"column-resized\", this.handleColumnResized.bind(this));\n\t\tthis.subscribe(\"column-width\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"column-height\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"column-resized\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"columns-loaded\", this.updateHeaderColumn.bind(this));\n\n\t\tthis.subscribe(\"cell-height\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"cell-rendered\", this.renderCell.bind(this));\n\t\tthis.subscribe(\"cell-mousedown\", this.handleCellMouseDown.bind(this));\n\t\tthis.subscribe(\"cell-mousemove\", this.handleCellMouseMove.bind(this));\n\t\tthis.subscribe(\"cell-click\", this.handleCellClick.bind(this));\n\t\tthis.subscribe(\"cell-editing\", this.handleEditingCell.bind(this));\n\t\t\n\t\tthis.subscribe(\"page-changed\", this.redraw.bind(this));\n\n\t\tthis.subscribe(\"scroll-vertical\", this.layoutChange.bind(this));\n\t\tthis.subscribe(\"scroll-horizontal\", this.layoutChange.bind(this));\n\t\t\n\t\tthis.subscribe(\"data-destroy\", this.tableDestroyed.bind(this));\n\t\tthis.subscribe(\"data-processed\", this.resetRanges.bind(this));\n\t\t\n\t\tthis.subscribe(\"table-layout\", this.layoutElement.bind(this));\n\t\tthis.subscribe(\"table-redraw\", this.redraw.bind(this));\n\t\tthis.subscribe(\"table-destroy\", this.tableDestroyed.bind(this));\n\t\t\n\t\tthis.subscribe(\"edit-editor-clear\", this.finishEditingCell.bind(this));\n\t\tthis.subscribe(\"edit-blur\", this.restoreFocus.bind(this));\n\t\t\n\t\tthis.subscribe(\"keybinding-nav-prev\", this.keyNavigate.bind(this, \"left\"));\n\t\tthis.subscribe(\"keybinding-nav-next\", this.keyNavigate.bind(this, \"right\"));\n\t\tthis.subscribe(\"keybinding-nav-left\", this.keyNavigate.bind(this, \"left\"));\n\t\tthis.subscribe(\"keybinding-nav-right\", this.keyNavigate.bind(this, \"right\"));\n\t\tthis.subscribe(\"keybinding-nav-up\", this.keyNavigate.bind(this, \"up\"));\n\t\tthis.subscribe(\"keybinding-nav-down\", this.keyNavigate.bind(this, \"down\"));\n\t\tthis.subscribe(\"keybinding-nav-range\", this.keyNavigateRange.bind(this));\n\t}\n\t\n\t\n\tinitializeColumn(column) {\n\t\tif(this.columnSelection && column.definition.headerSort && this.options(\"headerSortClickElement\") !== \"icon\"){\n\t\t\tconsole.warn(\"Using column headerSort with selectableRangeColumns option may result in unpredictable behavior. Consider using headerSortClickElement: 'icon'.\");\n\t\t}\n\t\t\n\t\tif (column.modules.edit) {\n\t\t\t// Block editor from taking action so we can trigger edit by\n\t\t\t// double clicking.\n\t\t\t// column.modules.edit.blocked = true;\n\t\t}\n\t}\n\t\n\tupdateHeaderColumn(){\n\t\tif(this.rowSelection){\n\t\t\tthis.rowHeader = this.table.columnManager.getVisibleColumnsByIndex()[0];\n\t\t\t\n\t\t\tif(this.rowHeader){\n\t\t\t\tthis.rowHeader.definition.cssClass = this.rowHeader.definition.cssClass + \" tabulator-range-row-header\";\n\t\t\t\t\n\t\t\t\tif(this.rowHeader.definition.headerSort){\n\t\t\t\t\tconsole.warn(\"Using column headerSort with selectableRangeRows option may result in unpredictable behavior\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.rowHeader.definition.editor){\n\t\t\t\t\tconsole.warn(\"Using column editor with selectableRangeRows option may result in unpredictable behavior\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Table Functions ///////\n\t///////////////////////////////////\n\t\n\tgetRanges(){\n\t\treturn this.ranges.map((range) => range.getComponent());\n\t}\n\t\n\tgetRangesData() {\n\t\treturn this.ranges.map((range) => range.getData());\n\t}\n\t\n\taddRangeFromComponent(start, end){\n\t\tstart = start ? start._cell : null;\n\t\tend = end ? end._cell : null;\n\t\t\n\t\treturn this.addRange(start, end);\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Component Functions ///////\n\t///////////////////////////////////\n\t\n\tcellGetRanges(cell){\n\t\tvar ranges = [];\n\t\t\n\t\tif (cell.column === this.rowHeader) {\n\t\t\tranges = this.ranges.filter((range) => range.occupiesRow(cell.row));\n\t\t} else {\n\t\t\tranges = this.ranges.filter((range) => range.occupies(cell));\n\t\t}\n\t\t\n\t\treturn ranges.map((range) => range.getComponent());\n\t}\n\t\n\trowGetRanges(row){\n\t\tvar ranges = this.ranges.filter((range) => range.occupiesRow(row));\n\t\t\n\t\treturn ranges.map((range) => range.getComponent());\n\t}\n\t\n\tcolGetRanges(col){\n\t\tvar ranges = this.ranges.filter((range) => range.occupiesColumn(col));\n\t\t\n\t\treturn ranges.map((range) => range.getComponent());\n\t}\n\t\n\t///////////////////////////////////\n\t////////// Event Handlers /////////\n\t///////////////////////////////////\n\t\n\t_handleMouseUp(e){\n\t\tthis.mousedown = false;\n\t\tdocument.removeEventListener(\"mouseup\", this.mouseUpEvent);\n\t}\n\t\n\t_handleKeyDown(e) {\n\t\tif (!this.blockKeydown && (!this.table.modules.edit || (this.table.modules.edit && !this.table.modules.edit.currentCell))) {\n\t\t\tif (e.key === \"Enter\") {\n\t\t\t\t// is editing a cell?\n\t\t\t\tif (this.table.modules.edit && this.table.modules.edit.currentCell) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.table.modules.edit.editCell(this.getActiveCell());\n\t\t\t\t\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\tif ((e.key === \"Backspace\" || e.key === \"Delete\") && this.options(\"selectableRangeClearCells\")) {\n\t\t\t\tif(this.activeRange){\n\t\t\t\t\tthis.activeRange.clearValues();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tinitializeFocus(cell){\n\t\tvar range;\n\t\t\n\t\ttry{\n\t\t\tif (document.selection) { // IE\n\t\t\t\trange = document.body.createTextRange();\n\t\t\t\trange.moveToElementText(cell.getElement());\n\t\t\t\trange.select();\n\t\t\t} else if (window.getSelection) {\n\t\t\t\trange = document.createRange();\n\t\t\t\trange.selectNode(cell.getElement());\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t\twindow.getSelection().addRange(range);\n\t\t\t}\n\t\t}catch(e){}\n\t}\n\t\n\trestoreFocus(element){\n\t\tthis.table.rowManager.element.focus();\n\t\t\n\t\treturn true;\n\t}\n\t\n\t///////////////////////////////////\n\t////// Column Functionality ///////\n\t///////////////////////////////////\n\t\n\thandleColumnResized(column) {\n\t\tvar selected;\n\t\t\n\t\tif (this.selecting !== \"column\" && this.selecting !== \"all\") {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tselected = this.ranges.some((range) => range.occupiesColumn(column));\n\t\t\n\t\tif (!selected) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.ranges.forEach((range) => {\n\t\t\tvar selectedColumns = range.getColumns(true);\n\t\t\t\n\t\t\tselectedColumns.forEach((selectedColumn) => {\n\t\t\t\tif (selectedColumn !== column) {\n\t\t\t\t\tselectedColumn.setWidth(column.width);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\t\n\thandleColumnMouseDown(event, column) {\n\t\tif (event.button === 2 && (this.selecting === \"column\" || this.selecting === \"all\") && this.activeRange.occupiesColumn(column)) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.mousedown = true;\n\t\t\n\t\tdocument.addEventListener(\"mouseup\", this.mouseUpEvent);\n\t\t\n\t\tthis.newSelection(event, column);\n\t}\n\t\n\thandleColumnMouseMove(e, column) {\n\t\tif (column === this.rowHeader || !this.mousedown || this.selecting === 'all') {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.activeRange.setBounds(false, column, true);\n\t}\n\t\n\t///////////////////////////////////\n\t//////// Cell Functionality ///////\n\t///////////////////////////////////\n\t\n\trenderCell(cell) {\n\t\tvar el = cell.getElement(),\n\t\trangeIdx = this.ranges.findIndex((range) => range.occupies(cell));\n\t\t\n\t\tel.classList.toggle(\"tabulator-range-selected\", rangeIdx !== -1);\n\t\tel.classList.toggle(\"tabulator-range-only-cell-selected\", this.ranges.length === 1 && this.ranges[0].atTopLeft(cell) &&\tthis.ranges[0].atBottomRight(cell));\n\t\t\n\t\tel.dataset.range = rangeIdx;\n\t}\n\t\n\thandleCellMouseDown(event, cell) {\n\t\tif (event.button === 2 && (this.activeRange.occupies(cell) || ((this.selecting === \"row\" || this.selecting === \"all\") && this.activeRange.occupiesRow(cell.row)))) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.mousedown = true;\n\t\t\n\t\tdocument.addEventListener(\"mouseup\", this.mouseUpEvent);\n\t\t\n\t\tthis.newSelection(event, cell);\n\t}\n\t\n\thandleCellMouseMove(e, cell) {\n\t\tif (!this.mousedown || this.selecting === \"all\") {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.activeRange.setBounds(false, cell, true);\n\t}\n\t\n\thandleCellClick(e, cell){\n\t\tthis.initializeFocus(cell);\n\t}\n\t\n\thandleEditingCell(cell) {\n\t\tif(this.activeRange){\n\t\t\tthis.activeRange.setBounds(cell);\n\t\t}\n\t}\n\t\n\tfinishEditingCell() {\n\t\tthis.blockKeydown = true;\n\t\tthis.table.rowManager.element.focus();\n\n\t\tsetTimeout(() => {\n\t\t\tthis.blockKeydown = false;\n\t\t}, 10);\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Navigation ///////\n\t///////////////////////////////////\n\t\n\tkeyNavigate(dir, e){\n\t\tif(this.navigate(false, false, dir)){\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\t\n\tkeyNavigateRange(e, dir, jump, expand){\n\t\tif(this.navigate(jump, expand, dir)){\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\t\n\tnavigate(jump, expand, dir) {\n\t\tvar moved = false,\n\t\trange, rangeEdge, nextRow, nextCol, row, column;\n\t\t\n\t\t// Don't navigate while editing\n\t\tif (this.table.modules.edit && this.table.modules.edit.currentCell) {\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\t// If there are more than 1 range, use the active range and destroy the others\n\t\tif (this.ranges.length > 1) {\n\t\t\tthis.ranges = this.ranges.filter((range) => {\n\t\t\t\tif (range === this.activeRange) {\n\t\t\t\t\trange.setEnd(range.start.row, range.start.col);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\trange.destroy();\n\t\t\t\treturn false;\n\t\t\t});\n\t\t}\n\t\t\n\t\trange = this.activeRange;\n\t\t\n\t\trangeEdge = expand ? range.end : range.start;\n\t\tnextRow = rangeEdge.row;\n\t\tnextCol = rangeEdge.col;\n\t\t\n\t\tif(jump){\n\t\t\tswitch(dir){\n\t\t\t\tcase \"left\":\n\t\t\t\t\tnextCol = this.findJumpCellLeft(range.start.row, rangeEdge.col);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"right\":\n\t\t\t\t\tnextCol = this.findJumpCellRight(range.start.row, rangeEdge.col);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"up\":\n\t\t\t\t\tnextRow = this.findJumpCellUp(rangeEdge.row, range.start.col);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"down\":\n\t\t\t\t\tnextRow = this.findJumpCellDown(rangeEdge.row, range.start.col);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}else{\n\t\t\tif(expand){\n\t\t\t\tif ((this.selecting === 'row' && (dir === 'left' || dir === 'right')) || (this.selecting === 'column' && (dir === 'up' || dir === 'down'))) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tswitch(dir){\n\t\t\t\tcase \"left\":\n\t\t\t\t\tnextCol = Math.max(nextCol - 1, 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"right\":\n\t\t\t\t\tnextCol = Math.min(nextCol + 1, this.getTableColumns().length - 1);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"up\":\n\t\t\t\t\tnextRow = Math.max(nextRow - 1, 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"down\":\n\t\t\t\t\tnextRow = Math.min(nextRow + 1, this.getTableRows().length - 1);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\tmoved = nextCol !== rangeEdge.col || nextRow !== rangeEdge.row;\n\t\t\n\t\tif(!expand){\n\t\t\trange.setStart(nextRow, nextCol);\n\t\t}\n\t\t\n\t\trange.setEnd(nextRow, nextCol);\n\t\t\n\t\tif(!expand){\n\t\t\tthis.selecting = \"cell\";\n\t\t}\n\t\t\n\t\tif (moved) {\n\t\t\trow = this.getRowByRangePos(range.end.row);\n\t\t\tcolumn = this.getColumnByRangePos(range.end.col);\n\t\t\t\n\t\t\tif ((dir === 'left' || dir === 'right') && column.getElement().parentNode === null) {\n\t\t\t\tcolumn.getComponent().scrollTo(undefined, false);\n\t\t\t} else if ((dir === 'up' || dir === 'down') && row.getElement().parentNode === null) {\n\t\t\t\trow.getComponent().scrollTo(undefined, false);\n\t\t\t} else {\n\t\t\t\t// Use faster autoScroll when the elements are on the DOM\n\t\t\t\tthis.autoScroll(range, row.getElement(), column.getElement());\n\t\t\t}\n\t\t\t\n\t\t\tthis.layoutElement();\n\t\t\t\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\trangeRemoved(removed){\n\t\tthis.ranges = this.ranges.filter((range) => range !== removed);\n\t\t\n\t\tif(this.activeRange === removed){\n\t\t\tif(this.ranges.length){\n\t\t\t\tthis.activeRange = this.ranges[this.ranges.length - 1];\n\t\t\t}else{\n\t\t\t\tthis.addRange();\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.layoutElement();\n\t}\n\t\n\tfindJumpCell(cells, reverse, emptyStart, emptySide){\n\t\tvar nextCell;\n\t\t\n\t\tif(reverse){\n\t\t\tcells = cells.reverse();\n\t\t}\n\t\t\n\t\tfor(let currentCell of cells){\n\t\t\tlet currentValue = currentCell.getValue();\n\t\t\t\n\t\t\tif(emptyStart){\n\t\t\t\tnextCell = currentCell;\n\t\t\t\tif(currentValue){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif(emptySide){\n\t\t\t\t\tnextCell = currentCell;\n\t\t\t\t\t\n\t\t\t\t\tif(currentValue){\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tif(currentValue){\n\t\t\t\t\t\tnextCell = currentCell;\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\t\n\t\treturn nextCell;\n\t}\n\t\n\tfindJumpCellLeft(rowPos, colPos){\n\t\tvar row = this.getRowByRangePos(rowPos),\n\t\tcells = row.cells.filter((cell) => cell.column.visible),\n\t\tisStartingCellEmpty = !cells[colPos].getValue(),\n\t\tisLeftOfStartingCellEmpty = cells[colPos] ? !cells[colPos].getValue() : false,\n\t\tjumpCol = colPos,\n\t\ttargetCells = this.rowHeader ? cells.slice(1, colPos) : cells.slice(0, colPos),\n\t\tnextCell = this.findJumpCell(targetCells, true, isStartingCellEmpty, isLeftOfStartingCellEmpty);\n\t\t\n\t\tif(nextCell){\n\t\t\tjumpCol = nextCell.column.getPosition() - 1;\n\t\t}\n\t\t\n\t\treturn jumpCol;\n\t}\n\t\n\tfindJumpCellRight(rowPos, colPos){\n\t\tvar row = this.getRowByRangePos(rowPos),\n\t\tcells = row.cells.filter((cell) => cell.column.visible),\n\t\tisStartingCellEmpty = !cells[colPos].getValue(),\n\t\tisRightOfStartingCellEmpty = cells[colPos + 1] ? !cells[colPos + 1].getValue() : false,\n\t\tjumpCol = colPos,\n\t\tnextCell = this.findJumpCell(cells.slice(colPos + 1, cells.length), false, isStartingCellEmpty, isRightOfStartingCellEmpty);\n\t\t\n\t\tif(nextCell){\n\t\t\tjumpCol = nextCell.column.getPosition() - 1;\n\t\t}\n\t\t\n\t\treturn jumpCol;\n\t}\n\t\n\tfindJumpCellUp(rowPos, colPos) {\n\t\tvar column = this.getColumnByRangePos(colPos),\n\t\tcells = column.cells.filter((cell) => this.table.rowManager.activeRows.includes(cell.row)),\n\t\tisStartingCellEmpty = !cells[rowPos].getValue(),\n\t\tisTopOfStartingCellEmpty = cells[rowPos - 1] ? !cells[rowPos - 1].getValue() : false,\n\t\tjumpRow = rowPos,\n\t\tnextCell = this.findJumpCell(cells.slice(0, jumpRow), true, isStartingCellEmpty, isTopOfStartingCellEmpty);\n\t\t\n\t\tif(nextCell){\n\t\t\tjumpRow = nextCell.row.position - 1;\n\t\t}\n\t\t\n\t\treturn jumpRow;\n\t}\n\t\n\tfindJumpCellDown(rowPos, colPos) {\n\t\tvar column = this.getColumnByRangePos(colPos),\n\t\tcells = column.cells.filter((cell) => this.table.rowManager.activeRows.includes(cell.row)),\n\t\tisStartingCellEmpty = !cells[rowPos].getValue(),\n\t\tisBottomOfStartingCellEmpty = cells[rowPos + 1] ? !cells[rowPos + 1].getValue() : false,\n\t\tjumpRow = rowPos,\n\t\tnextCell = this.findJumpCell(cells.slice(jumpRow + 1, cells.length), false, isStartingCellEmpty, isBottomOfStartingCellEmpty);\n\t\t\n\t\tif(nextCell){\n\t\t\tjumpRow = nextCell.row.position - 1;\n\t\t}\n\t\t\n\t\treturn jumpRow;\n\t}\n\t\n\t///////////////////////////////////\n\t/////// Selection ///////\n\t///////////////////////////////////\n\tnewSelection(event, element) {\n\t\tvar range;\n\t\t\n\t\tif (element.type === \"column\") {\n\t\t\tif(!this.columnSelection){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tif (element === this.rowHeader) {\n\t\t\t\trange = this.resetRanges();\n\t\t\t\tthis.selecting = \"all\";\n\t\t\t\t\n\t\t\t\tvar topLeftCell, bottomRightCell = this.getCell(-1, -1);\n\n\t\t\t\tif(this.rowHeader){\n\t\t\t\t\ttopLeftCell = this.getCell(0, 1);\n\t\t\t\t}else{\n\t\t\t\t\ttopLeftCell = this.getCell(0, 0);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trange.setBounds(topLeftCell, bottomRightCell);\t\t\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tthis.selecting = \"column\";\n\t\t\t}\n\t\t} else if (element.column === this.rowHeader) {\n\t\t\tthis.selecting = \"row\";\n\t\t} else {\n\t\t\tthis.selecting = \"cell\";\n\t\t}\n\t\t\n\t\tif (event.shiftKey) {\n\t\t\tthis.activeRange.setBounds(false, element);\n\t\t} else if (event.ctrlKey) {\n\t\t\tthis.addRange().setBounds(element);\n\t\t} else {\n\t\t\tthis.resetRanges().setBounds(element);\n\t\t}\n\t}\n\t\n\tautoScroll(range, row, column) {\n\t\tvar tableHolder = this.table.rowManager.element,\n\t\trowHeader, rect, view, withinHorizontalView, withinVerticalView;\n\n\t\tif (typeof row === 'undefined') {\n\t\t\trow = this.getRowByRangePos(range.end.row).getElement();\n\t\t}\n\t\t\n\t\tif (typeof column === 'undefined') {\n\t\t\tcolumn = this.getColumnByRangePos(range.end.col).getElement();\n\t\t}\n\n\t\tif (this.rowHeader) {\n\t\t\trowHeader = this.rowHeader.getElement();\n\t\t}\n\t\t\n\t\trect = {\n\t\t\tleft: column.offsetLeft,\n\t\t\tright: column.offsetLeft + column.offsetWidth,\n\t\t\ttop: row.offsetTop,\n\t\t\tbottom: row.offsetTop + row.offsetHeight,\n\t\t};\n\t\t\n\t\tview = {\n\t\t\tleft: tableHolder.scrollLeft,\n\t\t\tright: Math.ceil(tableHolder.scrollLeft + tableHolder.clientWidth),\n\t\t\ttop: tableHolder.scrollTop,\n\t\t\tbottom:\ttableHolder.scrollTop +\ttableHolder.offsetHeight - this.table.rowManager.scrollbarWidth,\n\t\t};\n\n\t\tif (rowHeader) {\n\t\t\tview.left += rowHeader.offsetWidth;\n\t\t}\n\t\t\n\t\twithinHorizontalView = view.left < rect.left &&\trect.left < view.right && view.left < rect.right &&\trect.right < view.right;\n\t\t\n\t\twithinVerticalView = view.top < rect.top &&\trect.top < view.bottom && view.top < rect.bottom &&\trect.bottom < view.bottom;\n\t\t\n\t\tif (!withinHorizontalView) {\n\t\t\tif (rect.left < view.left) {\n\t\t\t\ttableHolder.scrollLeft = rect.left;\n\t\t\t\tif (rowHeader) {\n\t\t\t\t\ttableHolder.scrollLeft -= rowHeader.offsetWidth;\n\t\t\t\t}\n\t\t\t} else if (rect.right > view.right) {\n\t\t\t\ttableHolder.scrollLeft = rect.right - tableHolder.clientWidth;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (!withinVerticalView) {\n\t\t\tif (rect.top < view.top) {\n\t\t\t\ttableHolder.scrollTop = rect.top;\n\t\t\t} else if (rect.bottom > view.bottom) {\n\t\t\t\ttableHolder.scrollTop = rect.bottom - tableHolder.clientHeight;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t/////// Layout ///////\n\t///////////////////////////////////\n\t\n\tlayoutChange(){\n\t\tthis.overlay.style.visibility = \"hidden\";\n\t\tclearTimeout(this.layoutChangeTimeout);\n\t\tthis.layoutChangeTimeout = setTimeout(this.layoutRanges.bind(this), 200);\n\t}\n\t\n\tredraw(force) {\n\t\tif (force) {\n\t\t\tthis.selecting = 'cell';\n\t\t\tthis.resetRanges();\n\t\t\tthis.layoutElement();\n\t\t}\n\t}\n\t\n\tlayoutElement(visibleRows) {\n\t\tvar rows;\n\t\t\n\t\tif (visibleRows) {\n\t\t\trows = this.table.rowManager.getVisibleRows(true);\n\t\t} else {\n\t\t\trows = this.table.rowManager.getRows();\n\t\t}\n\t\t\n\t\trows.forEach((row) => {\n\t\t\tif (row.type === \"row\") {\n\t\t\t\tthis.layoutRow(row);\n\t\t\t\trow.cells.forEach((cell) => this.renderCell(cell));\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis.getTableColumns().forEach((column) => {\n\t\t\tthis.layoutColumn(column);\n\t\t});\n\t\t\n\t\tthis.layoutRanges();\n\t}\n\t\n\tlayoutRow(row) {\n\t\tvar el = row.getElement(),\n\t\tselected = false,\n\t\toccupied = this.ranges.some((range) => range.occupiesRow(row));\n\t\t\n\t\tif (this.selecting === \"row\") {\n\t\t\tselected = occupied;\n\t\t} else if (this.selecting === \"all\") {\n\t\t\tselected = true;\n\t\t}\n\t\t\n\t\tel.classList.toggle(\"tabulator-range-selected\", selected);\n\t\tel.classList.toggle(\"tabulator-range-highlight\", occupied);\n\t}\n\t\n\tlayoutColumn(column) {\n\t\tvar el = column.getElement(),\t\t\n\t\tselected = false,\n\t\toccupied = this.ranges.some((range) => range.occupiesColumn(column));\n\t\t\n\t\tif (this.selecting === \"column\") {\n\t\t\tselected = occupied;\n\t\t} else if (this.selecting === \"all\") {\n\t\t\tselected = true;\n\t\t}\n\t\t\n\t\tel.classList.toggle(\"tabulator-range-selected\", selected);\n\t\tel.classList.toggle(\"tabulator-range-highlight\", occupied);\n\t}\n\t\n\tlayoutRanges() {\n\t\tvar activeCell;\n\t\t\n\t\tif (!this.table.initialized) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tactiveCell = this.getActiveCell();\n\t\t\n\t\tif (!activeCell) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tthis.activeRangeCellElement.style.left = activeCell.row.getElement().offsetLeft + activeCell.getElement().offsetLeft + \"px\";\n\t\tthis.activeRangeCellElement.style.top =\tactiveCell.row.getElement().offsetTop + \"px\";\n\t\tthis.activeRangeCellElement.style.width = activeCell.getElement().offsetLeft + activeCell.getElement().offsetWidth - activeCell.getElement().offsetLeft + \"px\";\n\t\tthis.activeRangeCellElement.style.height = activeCell.row.getElement().offsetTop + activeCell.row.getElement().offsetHeight - activeCell.row.getElement().offsetTop + \"px\";\n\t\t\n\t\tthis.ranges.forEach((range) => range.layout());\n\t\t\n\t\tthis.overlay.style.visibility = \"visible\";\n\t}\n\t\n\t\n\t///////////////////////////////////\n\t/////// Helper Functions ///////\n\t///////////////////////////////////\t\n\t\n\tgetCell(rowIdx, colIdx) {\n\t\tvar row;\n\t\t\n\t\tif (colIdx < 0) {\n\t\t\tcolIdx = this.getTableColumns().length + colIdx;\n\t\t\tif (colIdx < 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (rowIdx < 0) {\n\t\t\trowIdx = this.getTableRows().length + rowIdx;\n\t\t}\n\t\t\n\t\trow = this.table.rowManager.getRowFromPosition(rowIdx + 1);\n\t\t\n\t\treturn row ? row.getCells(false, true).filter((cell) => cell.column.visible)[colIdx] : null;\n\t}\n\t\n\t\n\tgetActiveCell() {\n\t\treturn this.getCell(this.activeRange.start.row, this.activeRange.start.col);\n\t}\n\t\n\tgetRowByRangePos(pos) {\n\t\treturn this.getTableRows()[pos];\n\t}\n\t\n\tgetColumnByRangePos(pos) {\n\t\treturn this.getTableColumns()[pos];\n\t}\n\t\n\tgetTableRows() {\n\t\treturn this.table.rowManager.getDisplayRows();\n\t}\n\t\n\tgetTableColumns() {\n\t\treturn this.table.columnManager.getVisibleColumnsByIndex();\n\t}\n\t\n\taddRange(start, end) {\n\t\tvar range;\n\t\t\n\t\tif(this.maxRanges !== true && this.ranges.length >= this.maxRanges){\n\t\t\tthis.ranges.shift().destroy();\n\t\t}\n\t\t\n\t\trange = new Range(this.table, this, start, end);\n\t\t\n\t\tthis.activeRange = range;\n\t\tthis.ranges.push(range);\n\t\tthis.rangeContainer.appendChild(range.element);\n\t\t\n\t\treturn range;\n\t}\n\t\n\tresetRanges() {\n\t\tvar range, cell;\n\t\t\n\t\tthis.ranges.forEach((range) => range.destroy());\n\t\tthis.ranges = [];\n\t\t\n\t\trange = this.addRange();\n\t\t\n\t\tif(this.table.rowManager.activeRows.length){\n\t\t\tcell = this.table.rowManager.activeRows[0].cells[this.rowHeader ? 1 : 0];\n\n\t\t\tif(cell){\n\t\t\t\trange.setBounds(cell);\n\t\t\t\tthis.initializeFocus(cell);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn range;\n\t}\n\t\n\ttableDestroyed(){\n\t\tdocument.removeEventListener(\"mouseup\", this.mouseUpEvent);\n\t\tthis.table.rowManager.element.removeEventListener(\"keydown\", this.keyDownEvent);\n\t}\n\t\n\tselectedRows(component) {\n\t\treturn component ? this.activeRange.getRows().map((row) => row.getComponent()) : this.activeRange.getRows();\n\t}\n\t\n\tselectedColumns(component) {\n\t\treturn component ? this.activeRange.getColumns().map((col) => col.getComponent()) : this.activeRange.getColumns();\n\t}\n}\n\nSelectRange.moduleName = \"selectRange\";\n\nexport default SelectRange;\n","import Module from '../../core/Module.js';\nimport Cell from '../../core/cell/Cell.js';\n\nclass Tooltip extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.tooltipSubscriber = null,\n\t\tthis.headerSubscriber = null,\n\t\t\n\t\tthis.timeout = null;\n\t\tthis.popupInstance = null;\n\t\t\n\t\tthis.registerTableOption(\"tooltipGenerationMode\", undefined); //deprecated\n\t\tthis.registerTableOption(\"tooltipDelay\", 300); \n\t\t\n\t\tthis.registerColumnOption(\"tooltip\");\n\t\tthis.registerColumnOption(\"headerTooltip\");\n\t}\n\t\n\tinitialize(){\n\t\tthis.deprecatedOptionsCheck();\n\t\t\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\n\t}\n\t\n\tdeprecatedOptionsCheck(){\n\t\tthis.deprecationCheckMsg(\"tooltipGenerationMode\", \"This option is no longer needed as tooltips are always generated on hover now\");\n\t}\t\n\t\n\tinitializeColumn(column){\n\t\tif(column.definition.headerTooltip && !this.headerSubscriber){\n\t\t\tthis.headerSubscriber = true;\n\t\t\t\n\t\t\tthis.subscribe(\"column-mousemove\", this.mousemoveCheck.bind(this, \"headerTooltip\"));\n\t\t\tthis.subscribe(\"column-mouseout\", this.mouseoutCheck.bind(this, \"headerTooltip\"));\n\t\t}\n\t\t\n\t\tif(column.definition.tooltip && !this.tooltipSubscriber){\n\t\t\tthis.tooltipSubscriber = true;\n\t\t\t\n\t\t\tthis.subscribe(\"cell-mousemove\", this.mousemoveCheck.bind(this, \"tooltip\"));\n\t\t\tthis.subscribe(\"cell-mouseout\", this.mouseoutCheck.bind(this, \"tooltip\"));\n\t\t}\n\t}\n\t\n\tmousemoveCheck(action, e, component){\n\t\tvar tooltip = action === \"tooltip\" ? component.column.definition.tooltip : component.definition.headerTooltip;\n\t\t\n\t\tif(tooltip){\n\t\t\tthis.clearPopup();\n\t\t\tthis.timeout = setTimeout(this.loadTooltip.bind(this, e, component, tooltip), this.table.options.tooltipDelay);\n\t\t}\n\t}\n\n\tmouseoutCheck(action, e, component){\n\t\tif(!this.popupInstance){\n\t\t\tthis.clearPopup();\n\t\t}\n\t}\n\t\n\tclearPopup(action, e, component){\n\t\tclearTimeout(this.timeout);\n\t\tthis.timeout = null;\n\t\t\n\t\tif(this.popupInstance){\n\t\t\tthis.popupInstance.hide();\n\t\t}\n\t}\n\t\n\tloadTooltip(e, component, tooltip){\n\t\tvar contentsEl, renderedCallback, coords;\n\n\t\tfunction onRendered(callback){\n\t\t\trenderedCallback = callback;\n\t\t}\n\t\t\n\t\tif(typeof tooltip === \"function\"){\n\t\t\ttooltip = tooltip(e, component.getComponent(), onRendered);\n\t\t}\n\t\t\n\t\tif(tooltip instanceof HTMLElement){\n\t\t\tcontentsEl = tooltip;\n\t\t}else{\n\t\t\tcontentsEl = document.createElement(\"div\");\n\t\t\t\n\t\t\tif(tooltip === true){\n\t\t\t\tif(component instanceof Cell){\n\t\t\t\t\ttooltip = component.value;\n\t\t\t\t}else{\n\t\t\t\t\tif(component.definition.field){\n\t\t\t\t\t\tthis.langBind(\"columns|\" + component.definition.field, (value) => {\n\t\t\t\t\t\t\tcontentsEl.innerHTML = tooltip = value || component.definition.title;\n\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\ttooltip = component.definition.title;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tcontentsEl.innerHTML = tooltip;\n\t\t}\n\t\t\n\t\tif(tooltip || tooltip === 0 || tooltip === false){\n\t\t\tcontentsEl.classList.add(\"tabulator-tooltip\");\n\n\t\t\tcontentsEl.addEventListener(\"mousemove\", e => e.preventDefault());\n\t\t\t\n\t\t\tthis.popupInstance = this.popup(contentsEl);\n\t\t\t\n\t\t\tif(typeof renderedCallback === \"function\"){\n\t\t\t\tthis.popupInstance.renderCallback(renderedCallback);\n\t\t\t}\n\n\t\t\tcoords = this.popupInstance.containerEventCoords(e);\n\t\t\t\n\t\t\tthis.popupInstance.show(coords.x + 15, coords.y + 15).hideOnBlur(() => {\n\t\t\t\tthis.dispatchExternal(\"TooltipClosed\", component.getComponent());\n\t\t\t\tthis.popupInstance = null;\n\t\t\t});\n\t\t\t\n\t\t\tthis.dispatchExternal(\"TooltipOpened\", component.getComponent());\n\t\t}\n\t}\n}\n\nTooltip.moduleName = \"tooltip\";\n\nexport default Tooltip;\n","export default {\n\t//is integer\n\tinteger: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tvalue = Number(value);\n\n\t\treturn !isNaN(value) && isFinite(value) && Math.floor(value) === value;\n\t},\n\n\t//is float\n\tfloat: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\tvalue = Number(value);\n\n\t\treturn !isNaN(value) && isFinite(value) && value % 1 !== 0;\n\t},\n\n\t//must be a number\n\tnumeric: function(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(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 alphanumeric\n\talphanumeric: function(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tvar reg = new RegExp(/^[a-z0-9]+$/i);\n\n\t\treturn reg.test(value);\n\t},\n\n\t//maximum value\n\tmax: function(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(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(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(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\n\t//minimum string length\n\tminLength: function(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(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(cell, value, parameters){\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\n\t\t\treturn true;\n\t\t}\n\n\t\tif(typeof parameters == \"string\"){\n\t\t\tparameters = parameters.split(\"|\");\n\t\t}\n\n\t\treturn parameters.indexOf(value) > -1;\n\t},\n\n\t//must match provided regex\n\tregex: function(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(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(cell, value, parameters){\n\t\treturn value !== \"\" && value !== null && typeof value !== \"undefined\";\n\t},\n};","import Module from '../../core/Module.js';\n\nimport defaultValidators from './defaults/validators.js';\n\nclass Validate extends Module{\n\t\n\tconstructor(table){\n\t\tsuper(table);\n\t\t\n\t\tthis.invalidCells = [];\n\t\t\n\t\tthis.registerTableOption(\"validationMode\", \"blocking\");\n\t\t\n\t\tthis.registerColumnOption(\"validator\");\n\t\t\n\t\tthis.registerTableFunction(\"getInvalidCells\", this.getInvalidCells.bind(this));\n\t\tthis.registerTableFunction(\"clearCellValidation\", this.userClearCellValidation.bind(this));\n\t\tthis.registerTableFunction(\"validate\", this.userValidate.bind(this));\n\t\t\n\t\tthis.registerComponentFunction(\"cell\", \"isValid\", this.cellIsValid.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"clearValidation\", this.clearValidation.bind(this));\n\t\tthis.registerComponentFunction(\"cell\", \"validate\", this.cellValidate.bind(this));\n\t\t\n\t\tthis.registerComponentFunction(\"column\", \"validate\", this.columnValidate.bind(this));\n\t\tthis.registerComponentFunction(\"row\", \"validate\", this.rowValidate.bind(this));\n\t}\n\t\n\t\n\tinitialize(){\n\t\tthis.subscribe(\"cell-delete\", this.clearValidation.bind(this));\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\n\t\t\n\t\tthis.subscribe(\"edit-success\", this.editValidate.bind(this));\n\t\tthis.subscribe(\"edit-editor-clear\", this.editorClear.bind(this));\n\t\tthis.subscribe(\"edit-edited-clear\", this.editedClear.bind(this));\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Event Handling //////////\n\t///////////////////////////////////\n\t\n\teditValidate(cell, value, previousValue){\n\t\tvar valid = this.table.options.validationMode !== \"manual\" ? this.validate(cell.column.modules.validate, cell, value) : true;\n\t\t\n\t\t// allow time for editor to make render changes then style cell\n\t\tif(valid !== true){\n\t\t\tsetTimeout(() => {\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\n\t\t\t\tthis.dispatchExternal(\"validationFailed\", cell.getComponent(), value, valid);\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn valid;\n\t}\n\t\n\teditorClear(cell, cancelled){\n\t\tif(cancelled){\n\t\t\tif(cell.column.modules.validate){\n\t\t\t\tthis.cellValidate(cell);\n\t\t\t}\n\t\t}\n\n\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\n\t}\n\t\n\teditedClear(cell){\n\t\tif(cell.modules.validate){\n\t\t\tcell.modules.validate.invalid = false;\n\t\t}\n\t}\n\t\n\t///////////////////////////////////\n\t////////// Cell Functions /////////\n\t///////////////////////////////////\n\t\n\tcellIsValid(cell){\n\t\treturn cell.modules.validate ? (cell.modules.validate.invalid || true) : true;\n\t}\n\t\n\tcellValidate(cell){\n\t\treturn this.validate(cell.column.modules.validate, cell, cell.getValue());\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Column Functions ////////\n\t///////////////////////////////////\n\t\n\tcolumnValidate(column){\n\t\tvar invalid = [];\n\t\t\n\t\tcolumn.cells.forEach((cell) => {\n\t\t\tif(this.cellValidate(cell) !== true){\n\t\t\t\tinvalid.push(cell.getComponent());\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn invalid.length ? invalid : true;\n\t}\n\t\n\t///////////////////////////////////\n\t////////// Row Functions //////////\n\t///////////////////////////////////\n\t\n\trowValidate(row){\n\t\tvar invalid = [];\n\t\t\n\t\trow.cells.forEach((cell) => {\n\t\t\tif(this.cellValidate(cell) !== true){\n\t\t\t\tinvalid.push(cell.getComponent());\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn invalid.length ? invalid : true;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\t\n\t\n\tuserClearCellValidation(cells){\n\t\tif(!cells){\n\t\t\tcells = this.getInvalidCells();\n\t\t}\n\t\t\n\t\tif(!Array.isArray(cells)){\n\t\t\tcells = [cells];\n\t\t}\n\t\t\n\t\tcells.forEach((cell) => {\n\t\t\tthis.clearValidation(cell._getSelf());\n\t\t});\n\t}\n\t\n\tuserValidate(cells){\n\t\tvar output = [];\n\t\t\n\t\t//clear row data\n\t\tthis.table.rowManager.rows.forEach((row) => {\n\t\t\trow = row.getComponent();\n\t\t\t\n\t\t\tvar valid = row.validate();\n\t\t\t\n\t\t\tif(valid !== true){\n\t\t\t\toutput = output.concat(valid);\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn output.length ? output : true;\n\t}\n\t\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\t\n\tinitializeColumnCheck(column){\n\t\tif(typeof column.definition.validator !== \"undefined\"){\n\t\t\tthis.initializeColumn(column);\n\t\t}\n\t}\n\t\n\t//validate\n\tinitializeColumn(column){\n\t\tvar self = this,\n\t\tconfig = [],\n\t\tvalidator;\n\t\t\n\t\tif(column.definition.validator){\n\t\t\t\n\t\t\tif(Array.isArray(column.definition.validator)){\n\t\t\t\tcolumn.definition.validator.forEach((item) => {\n\t\t\t\t\tvalidator = self._extractValidator(item);\n\t\t\t\t\t\n\t\t\t\t\tif(validator){\n\t\t\t\t\t\tconfig.push(validator);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tvalidator = this._extractValidator(column.definition.validator);\n\t\t\t\t\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\t\n\t\t\tcolumn.modules.validate = config.length ? config : false;\n\t\t}\n\t}\n\t\n\t_extractValidator(value){\n\t\tvar type, params, pos;\n\t\t\n\t\tswitch(typeof value){\n\t\t\tcase \"string\":\n\t\t\t\tpos = value.indexOf(':');\n\t\t\t\n\t\t\t\tif(pos > -1){\n\t\t\t\t\ttype = value.substring(0,pos);\n\t\t\t\t\tparams = value.substring(pos+1);\n\t\t\t\t}else{\n\t\t\t\t\ttype = value;\n\t\t\t\t}\n\t\t\t\n\t\t\t\treturn this._buildValidator(type, params);\n\t\t\t\n\t\t\tcase \"function\":\n\t\t\t\treturn this._buildValidator(value);\n\t\t\t\n\t\t\tcase \"object\":\n\t\t\t\treturn this._buildValidator(value.type, value.parameters);\n\t\t}\n\t}\n\t\n\t_buildValidator(type, params){\n\t\t\n\t\tvar func = typeof type == \"function\" ? type : Validate.validators[type];\n\t\t\n\t\tif(!func){\n\t\t\tconsole.warn(\"Validator Setup Error - No matching validator found:\", type);\n\t\t\treturn false;\n\t\t}else{\n\t\t\treturn {\n\t\t\t\ttype:typeof type == \"function\" ? \"function\" : type,\n\t\t\t\tfunc:func,\n\t\t\t\tparams:params,\n\t\t\t};\n\t\t}\n\t}\n\t\n\tvalidate(validators, cell, value){\n\t\tvar self = this,\n\t\tfailedValidators = [],\n\t\tinvalidIndex = this.invalidCells.indexOf(cell);\n\t\t\n\t\tif(validators){\n\t\t\tvalidators.forEach((item) => {\n\t\t\t\tif(!item.func.call(self, cell.getComponent(), value, item.params)){\n\t\t\t\t\tfailedValidators.push({\n\t\t\t\t\t\ttype:item.type,\n\t\t\t\t\t\tparameters:item.params\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\tif(!cell.modules.validate){\n\t\t\tcell.modules.validate = {};\n\t\t}\n\t\t\n\t\tif(!failedValidators.length){\n\t\t\tcell.modules.validate.invalid = false;\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\n\t\t\t\n\t\t\tif(invalidIndex > -1){\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\n\t\t\t}\n\t\t}else{\n\t\t\tcell.modules.validate.invalid = failedValidators;\n\t\t\t\n\t\t\tif(this.table.options.validationMode !== \"manual\"){\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\n\t\t\t}\n\t\t\t\n\t\t\tif(invalidIndex == -1){\n\t\t\t\tthis.invalidCells.push(cell);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn failedValidators.length ? failedValidators : true;\n\t}\n\t\n\tgetInvalidCells(){\n\t\tvar output = [];\n\t\t\n\t\tthis.invalidCells.forEach((cell) => {\n\t\t\toutput.push(cell.getComponent());\n\t\t});\n\t\t\n\t\treturn output;\n\t}\n\t\n\tclearValidation(cell){\n\t\tvar invalidIndex;\n\t\t\n\t\tif(cell.modules.validate && cell.modules.validate.invalid){\n\t\t\t\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\n\t\t\tcell.modules.validate.invalid = false;\n\t\t\t\n\t\t\tinvalidIndex = this.invalidCells.indexOf(cell);\n\t\t\t\n\t\t\tif(invalidIndex > -1){\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\n\t\t\t}\n\t\t}\n\t}\n}\n\nValidate.moduleName = \"validate\";\n\n//load defaults\nValidate.validators = defaultValidators;\n\nexport default Validate;\n","//tabulator with all modules installed\nimport {default as Tabulator} from './Tabulator.js';\nimport * as modules from '../core/modules/optional.js';\nimport ModuleBinder from './tools/ModuleBinder.js';\n\nclass TabulatorFull extends Tabulator {}\n\n//bind modules and static functionality\nnew ModuleBinder(TabulatorFull, modules);\n\nexport default TabulatorFull;\n"],"names":["CoreFeature","constructor","table","this","reloadData","data","silent","columnsChanged","dataLoader","load","undefined","langText","modules","localize","getText","arguments","langBind","bind","langLocale","getLocale","commsConnections","comms","getConnections","commsSend","send","layoutMode","layout","getMode","layoutRefresh","force","subscribe","eventBus","unsubscribe","subscribed","key","subscriptionChange","dispatch","chain","confirm","dispatchExternal","externalEvents","subscribedExternal","subscriptionChangeExternal","options","setOption","value","deprecationCheck","oldOption","newOption","convert","deprecationAdvisor","check","deprecationCheckMsg","msg","checkMsg","deprecationMsg","module","ColumnComponent","column","_column","type","Proxy","get","target","name","receiver","componentFunctionBinder","handle","getElement","getDefinition","getField","getTitleDownload","getCells","cells","forEach","cell","push","getComponent","isVisible","visible","show","isGroup","columns","hide","toggle","delete","getSubColumns","output","length","getParentColumn","parent","Column","_getSelf","scrollTo","position","ifVisible","columnManager","scrollToColumn","getTable","move","to","after","toColumn","findColumn","moveColumn","console","warn","getNextColumn","nextCol","nextColumn","getPrevColumn","prevCol","prevColumn","updateDefinition","updates","getWidth","setWidth","width","result","reinitializeWidth","rerenderColumns","title","field","hozAlign","vertAlign","minWidth","maxWidth","maxInitialWidth","cssClass","variableHeight","headerVertical","headerHozAlign","headerWordWrap","editableTitle","CellComponent","_cell","getValue","getOldValue","getInitialValue","initialValue","getRow","row","getData","transform","getType","getColumn","setValue","mutate","restoreOldValue","setValueActual","restoreInitialValue","checkHeight","Cell","super","element","oldValue","height","component","loaded","build","generateElement","_configureCell","getFieldValue","document","createElement","className","setAttribute","style","textAlign","display","alignItems","top","bottom","middle","justifyContent","left","right","center","definition","split","classList","add","_generateContents","val","innerHTML","Node","firstChild","removeChild","appendChild","cellRendered","containerOnly","layoutElement","setValueProcessData","cellEdited","call","rowManager","changed","setFieldValue","widthStyled","clearWidth","offsetWidth","setMinWidth","minWidthStyled","setMaxWidth","maxWidthStyled","reinitializeHeight","clearHeight","setHeight","heightStyled","getHeight","offsetHeight","redrawBlock","parentNode","deleteCell","calcs","getIndex","getCellIndex","def","contentElement","titleHolderElement","titleElement","groupElement","createGroupElement","fieldStructure","titleDownload","titleFormatterRendered","mapDefinitions","setField","widthFixed","i","newCol","attachColumn","checkColumnVisibility","registerColumnField","_initialize","el","columnHeaderVertAlign","defaults","columnDefaults","optionsList","generate","defaultOptionList","checkDefinition","Object","keys","indexOf","nestedFieldSeparator","_getNestedData","_getFlatData","_setNestedData","_setFlatData","registerColumnPosition","reRegisterPosition","_buildColumnHeaderContent","_buildGroupHeader","_buildColumnHeader","parseInt","_buildColumnHeaderTitle","addEventListener","e","stopPropagation","focus","text","_formatColumnHeaderTitle","contents","dataObj","structure","columnRendered","verticalAlign","alignment","parentHeight","getGroupElement","clientHeight","getHeadersElement","minHeight","clearVerticalAlign","paddingTop","getFirstColumn","getLastColumn","getColumns","traverse","concat","getTopColumn","updateBranches","colDefs","responsiveToggle","verticalAlignHeaders","matchChildWidths","childWidth","child","index","splice","setWidthActual","isNaN","Math","floor","clientWidth","max","min","checkCellHeights","rows","heightInitialized","offsetParent","clearCellHeight","calcHeight","setCellHeight","getLeftOffset","offset","offsetLeft","ceil","getBoundingClientRect","Promise","resolve","reject","cellCount","deregisterColumn","generateCell","findColumnIndex","_nextVisibleColumn","getColumnByIndex","_prevVisibleColumn","fitToData","setTo","error","assign","addColumn","then","getPosition","getVisibleColumnsByIndex","defaultOptions","Helpers","static","box","window","pageYOffset","documentElement","clientTop","pageXOffset","clientLeft","separator","obj","clone","list","objectProto","__proto__","arrayProto","Array","isArray","match","copy","subject","findIndex","item","unshift","deepClone","OptionsList","msgType","registeredDefaults","register","option","userOptions","debugInvalidOptions","hasOwnProperty","Renderer","elementVertical","elementHorizontal","tableElement","verticalFillMode","initialize","clearRows","clearColumns","reinitializeColumnWidths","renderRows","renderColumns","rerenderRows","callback","update","blockRedraw","renderRowCells","rerenderRowCells","scrollColumns","dir","scrollRows","resize","scrollToRow","scrollToRowNearestTop","visibleRows","includingBuffer","getDisplayRows","styleRow","rowEl","remove","clear","render","rerender","scrollToRowPosition","rowIndex","scrollToRowIfVisible","elVisible","elOffset","scrollHeight","scrollTop","offsetTop","BasicHorizontal","inFragment","rowFrag","createDocumentFragment","VirtualDomHorizontal","leftCol","rightCol","scrollLeft","vDomScrollPosLeft","vDomScrollPosRight","vDomPadLeft","vDomPadRight","fitDataColAvg","windowBuffer","initialized","isFitData","compatibilityCheck","layoutCheck","vertScrollListen","startsWith","clearVisRowCache","dataChange","scroll","calcWindowBuffer","buffer","columnsByIndex","old","cols","colPos","config","frozen","leftPos","rightPos","fitDataCheck","vdomHoz","paddingLeft","paddingRight","reinitChanged","reinitializeRows","initializeRow","reinitializeRow","deinitialize","change","generateCells","colEnd","col","getVisibleRows","otherRows","getRows","filter","includes","diff","abs","addColRight","removeColLeft","addColLeft","removeColRight","colPositionAdjust","start","end","changes","working","getCell","insertBefore","nextSibling","fitDataColActualWidthCheck","ex","message","newWidth","widthDiff","frozenColumns","leftColumns","appendCell","rightColumns","ColumnManager","blockHozScrollEvent","headersElement","contentsElement","columnsByField","defaultColumnOptions","redrawBlockUpdate","renderer","initializeRenderer","createHeadersElement","createHeaderContentsElement","createHeaderElement","initializeScrollWheelWatcher","scrollHorizontal","padVerticalScrollbar","rtl","marginLeft","marginRight","renderClass","renderers","virtual","RendererVirtualDomHorizontal","basic","RendererBasicHorizontal","renderHorizontal","headerVisible","getContentsElement","deltaX","generateColumnsFromRowData","sorter","definitions","autoColumnsDefinitions","find","setColumns","_addColumn","_reIndexColumns","redraw","before","nextToColumn","colEl","topColumn","parentIndex","nextEl","adjustTableSize","HTMLElement","getColumnByField","getColumnsByFieldRoot","root","matches","getFirstVisibleColumn","getRealColumns","getDefinitions","active","getDefinitionTree","getComponents","structured","from","moveColumnActual","reinitialize","_moveColumnInArray","updateRows","toIndex","fromIndex","adjust","scrollToColumnPosition","scrollToColumnIfVisible","scrollWidth","getFlexBaseWidth","totalWidth","fixedWidth","colWidth","restoreRedraw","resetScroll","footerManager","RowComponent","_row","watchPosition","moveToRow","updateData","normalizeHeight","reformat","getNextRow","nextRow","getPrevRow","prevRow","Row","manualHeight","outerHeight","positionWatchers","created","setData","create","detachElement","deleteCells","rowFormatter","rendered","deinitializeHeight","children","maxHeight","rowHeight","resizableRows","updatedData","newRowData","tempData","JSON","parse","attrname","findCell","nextDisplayRow","prevDisplayRow","toRow","findRow","moveRowActual","refreshActiveData","deleteActual","detachModules","deleteRow","wipe","isDisplayed","setPosition","getGroup","group","BasicVertical","visibility","onlyGroupHeaders","tableFrag","tableEmpty","rowTop","VirtualDomVertical","vDomRowHeight","vDomTop","vDomBottom","vDomScrollPosTop","vDomScrollPosBottom","vDomTopPad","vDomBottomPad","vDomMaxRenderChain","vDomWindowBuffer","vDomWindowMinTotalRows","vDomWindowMinMarginRows","vDomTopNewRows","vDomBottomNewRows","paddingBottom","_virtualRenderFill","topRow","topOffset","topDiff","bottomDiff","margin","_addTopRow","vDomScrollHeight","_removeBottomRow","_addBottomRow","_removeTopRow","renderVerticalBuffer","topEdge","bottomEdge","topFound","bottomRow","slice","forceMove","rowFragment","holder","topPad","rowsHeight","heightOccupied","topPadHeight","rowsCount","renderedRows","totalRowsRendered","rowsToRender","fixedHeight","containerHeight","avgRowHeight","resized","fillableSpace","addedRows","paddingAdjust","_quickNormalizeRowHeight","removableRows","RowManager","createHolderElement","createTableElement","heightFixer","placeholder","placeholderContents","firstRender","renderMode","activeRowsPipeline","activeRows","activeRowsCount","displayRows","displayRowsCount","redrawBlockRestoreConfig","redrawBlockRenderInPosition","dataPipeline","displayPipeline","scrollbarWidth","initializePlaceholder","getTableElement","leftDir","topDir","_positionPlaceholder","getRowFromDataObject","getRowFromPosition","renderInPosition","pagination","_setDataActual","reRenderInPosition","autoColumns","_wipeElements","destroy","allIndex","activeIndex","setActiveRows","displayRowIterator","displayIndex","regenerateRowPositions","addRow","pos","addRowActual","addRows","refreshDisplayOnly","findAddRowPos","reverse","_clearPlaceholder","addRowPos","chainResult","moveRow","moveRowInArray","clearData","getRowIndex","findRowIndex","getDisplayRowIndex","rowOnly","getDataCount","registerDataPipelineHandler","handler","priority","sort","a","b","registerDisplayPipelineHandler","skipStage","stage","cascadeOrder","destroyed","refreshPipelines","renderTable","layoutColumnsOnNewData","resetDisplayRows","setDisplayRows","viewable","scrollBarCheck","RendererVirtualDomVertical","RendererBasicVertical","renderVertical","getRenderMode","_clearTable","renderEmptyScroll","_showPlaceholder","checkPlaceholder","initialHeight","otherHeight","external","tableWidth","browser","event","createEvent","initEvent","dispatchEvent","Event","FooterManager","containerElement","createContainerElement","initializeElement","footerElement","querySelector","append","activate","prepend","deactivate","InteractionManager","abortClasses","previousTargets","listeners","componentMap","pseudoTrackers","subscriber","pseudoTracking","buildListenerMap","bindSubscriptionWatchers","listenerMap","listener","components","bindPseudoEvents","pseudoMouseEnter","pseudoMouseLeave","leaveList","linkedKeys","links","values","comp","subscriptionChanged","clearWatchers","added","updateEventListeners","track","removeEventListener","path","composedPath","targets","findTargets","bindComponents","triggerEvents","elTargets","targetMatches","previousTarget","closest","ComponentFunctionBinder","bindings","funcName","debugInvalidComponentFuncs","DataLoader","requestOrder","loading","params","replace","requestNo","alertLoader","mapParams","dataSendParams","response","objectInvert","dataReceiveParams","rowData","clearAlert","catch","alertError","setTimeout","dataLoaderErrorTimeout","finally","map","blockActiveLoad","alertManager","alert","dataLoaderLoading","dataLoaderError","ExternalEventBus","debug","events","subscriptionNotifiers","_debugDispatch","_dispatch","_notifySubscriptionChange","notifiers","args","shift","callResult","apply","log","InternalEventBus","_debugChain","_chain","_debugConfirm","_confirm","fallback","confirmed","DeprecationAdvisor","_warnUser","TableRegistry","tables","query","results","querySelectorAll","matchElement","Tabulator","lookupTable","Popup","container","_lookupContainer","reversedX","childPopup","blurable","blurCallback","blurEventsBound","renderedCallback","hideable","blurEvent","escEvent","_escapeCheck","destroyBinding","tableDestroyed","popupContainer","_checkContainerIsParent","body","renderCallback","containerEventCoords","touch","MouseEvent","x","touches","pageX","y","pageY","parentOffset","elementPositionCoords","containerOffset","origin","parentEl","coords","_fitToScreen","hideOnBlur","keyCode","blockHide","restoreHide","Module","_handler","registerTableOption","registerColumnOption","registerTableFunction","func","initGuard","registerComponentFunction","registerDataHandler","registerDisplayHandler","lookupIndex","refreshData","footerAppend","footerPrepend","footerRemove","popup","menuEl","menuContainer","content","forced","responsiveLayout","modExists","fitData","fitDataFill","fitDataGeneral","fitDataTable","fitDataStretch","colsWidth","gap","lastCol","responsive","fitColumns","flexColWidth","overflowWidth","flexWidth","flexGrowUnits","flexColumns","fixedShrinkColumns","flexShrinkUnits","gapFill","calcWidth","scaleColumns","freeSpace","shrinkCols","oversizeCols","oversizeSpace","remainingSpace","nextColWidth","remainingFlexGrowUnits","changeUnits","undersizeCols","calcGrow","widthGrow","calcShrink","widthShrink","Layout","mode","modes","initializeColumn","Number","dataChanged","moduleName","defaultModes","Localize","locale","lang","langList","langs","headerFilterPlaceholder","setHeaderFilterPlaceholder","installLang","setLocale","getLang","default","headerFilters","_setLangProp","desiredLocale","navigator","language","toLowerCase","prefix","traverseLang","trans","prop","_executeBindings","pathArray","_getLangElement","level","rootPath","binding","groups","items","page_size","page_title","first","first_title","last","last_title","prev","prev_title","next","next_title","all","counter","showing","of","pages","Comms","receive","selectors","connections","con","action","connection","tableComms","commsReceived","ModuleBinder","tabulator","bindStaticFunctionality","bindModules","coreModules","moduleBindings","extendModule","property","source","registerModule","mod","registerModuleBinding","findTable","prototype","orderedStartMods","orderedEndMods","unOrderedMods","moduleCore","modulesCore","moduleInitOrder","modulesRegular","core","mods","Alert","_createAlertElement","msgElement","_createMsgElement","_typeClass","interactionMonitor","browserSlow","browserMobile","originalElement","initializeCoreSystems","_create","_clearObjectPointers","_mapDeprecatedFunctionality","debugEventsExternal","debugEventsInternal","InteractionMonitor","_clearSelection","getSelection","empty","removeAllRanges","selection","_rtlCheck","_buildElement","_initializeTable","_loadInitialData","getComputedStyle","textDirection","direction","reactiveData","newElement","tagName","attributes","replaceChild","_detectBrowser","deregister","ua","userAgent","vendor","opera","test","stack","line","debugInitialization","Error","trim","replaceData","responses","addData","updateOrAddData","newRows","foundRows","updateOrAddRow","updateRow","fromRow","getRowPosition","getColumnDefinitions","showColumn","hideColumn","toggleColumn","deleteColumn","updateColumnDefinition","fromColumn","on","off","plugin","required","debugDeprecation","rowFormatterPrint","rowFormatterClipboard","rowFormatterHtmlOutput","Accessor","allowedTypes","transformRow","accessor","charAt","toUpperCase","lookupAccessor","accessors","rowComponent","colComponent","generateParamsList","serializeParams","encoded","encodeURIComponent","join","url","method","json","headers","stringify","form","FormData","Ajax","urlGenerator","loaderPromise","contentTypeFormatters","ajaxRequestFunc","defaultLoaderPromise","ajaxURLGenerator","defaultURLGenerator","ajaxURL","setUrl","setDefaultConfig","ajaxConfig","getUrl","requestDataCheck","requestParams","requestData","ajaxParams","previousData","generateConfig","sendRequest","defaultConfig","ajaxRequesting","ajaxResponse","contentType","ajaxContentType","Accept","location","credentials","fetch","ok","status","statusText","defaultContentTypeFormatters","Clipboard","pasteParser","pasteAction","customSelection","rowRange","blocked","clipboard","clipboardCopyRowRange","plain","html","preventDefault","clipboardCopyFormatter","export","generateExportList","clipboardCopyConfig","clipboardCopyStyled","generateHTMLTable","generatePlainContent","clipboardData","originalEvent","reset","paste","setPasteParser","clipboardPasteParser","setPasteAction","clipboardPasteAction","getKey","range","internal","sel","textRange","createRange","selectNodeContents","toString","addRange","createTextRange","moveToElementText","select","execCommand","pasteActions","parser","pasteParsers","checkPasteOrigin","getPasteData","mutateData","mutator","valid","insert","bounds","startCell","startRow","rowWidth","dataLength","selectRange","activeRange","singleCell","getBounds","headerFindSuccess","columnMap","startCol","itemLength","CalcComponent","avg","calcParams","precision","reduce","sum","toFixed","parseFloat","String","count","unique","ColumnCalcs","topCalcs","botCalcs","genColumn","topElement","botElement","botRow","topInitialized","botInitialized","recalcAfterBlock","cellValueChanged","initializeColumnCheck","rowsUpdated","recalcActiveRows","recalcActiveRowsRefresh","tableRedraw","adjustForScrollbar","resizeHolderWidth","getResults","userRecalc","recalc","blockCheck","groupBy","recalcRowGroup","dataTreeStartExpanded","dataTree","recalcAll","topCalc","bottomCalc","columnCalcs","topCalcParams","botCalcParams","bottomCalcParams","calculations","initializeTopRow","botCalc","initializeBottomRow","removeCalcs","reinitializeCalcs","fragment","rowsToData","generateRow","recalcGroup","groupRows","getRowGroup","getChildGroups","generateRowData","generateTopRow","generateBottomRow","dataTreeChildColumnCalcs","open","getFilteredTreeChildren","disable","enable","format","formatter","getFormatter","paramKey","hasTopCalcs","hasBottomCalcs","getGroups","getGroupResults","groupObj","subGroups","getSubGroups","subGroupResults","subgroup","defaultCalculations","DataTree","indent","collapseEl","expandEl","branchEl","elementField","startOpen","collapseRow","expandRow","toggleRow","getTreeParent","getRowChildren","addTreeChildRow","isRowExpanded","dummyEl","dataTreeChildField","dataTreeChildIndent","dataTreeBranchElement","dataTreeCollapseElement","tabIndex","dataTreeExpandElement","layoutRow","rowDelete","rowDataChanged","columnMoving","initializeElementField","tableRedrawing","reinitializeRowChildren","firstCol","dataTreeElementColumn","getTreeChildren","redrawNeeded","childArray","controlEl","generateControlElement","cloneNode","getPropertyValue","oldControl","getChildren","allChildren","generateChildren","dataTreeFilter","dataTreeSort","sub","childData","childRow","getTreeParentRoot","childIndex","findChildIndex","recurse","getChildField","csv","setFileContents","delimiter","fileContents","depth","bom","jsonLines","pdf","header","autoTableParams","rowGroupStyles","fontStyle","fontSize","cellPadding","fillColor","rowCalcStyles","jsPDFParams","jsPDF","parseRow","styles","colSpan","rowSpan","orientation","unit","doc","jspdf","autoTable","didDrawPage","head","documentProcessing","xlsx","sheetName","workbook","XLSX","utils","book_new","tableFeatures","compression","compress","writeOptions","bookType","bookSST","generateSheet","merges","worksheet","s","c","r","j","Date","sheet_add_aoa","encode_range","SheetNames","Sheets","sheetOnly","sheets","sheet","intercept","buf","ArrayBuffer","view","Uint8Array","charCodeAt","s2ab","write","Download","mimeType","Blob","deprecatedOptionsCheck","download","downloadToTab","filename","interceptCallback","downloadFunc","downloaders","mime","triggerDownload","downloadConfig","downloadRowRange","groupHeader","groupHeaderDownload","_group","getRowCount","newTab","blob","downloadEncoder","URL","createObjectURL","msSaveOrOpenBlob","click","maskInput","mask","maskLetter","maskLetterChar","maskNumber","maskNumberChar","maskWildcard","maskWildcardChar","fillSymbols","symbol","char","ctrlKey","metaKey","maskAutoFill","defaultDownloaders","Edit","editor","onRendered","success","cancel","editorParams","edit","_initializeParams","displayItems","currentItems","focusedItem","input","_createInputElement","listEl","_createListElement","initialValues","isFilter","filterTimeout","filtered","typing","listIteration","lastAction","filterTerm","actions","_deprecatedOptionsCheck","_initializeValue","_onRendered","listItemFormatter","sortValuesList","searchFunc","searchingPlaceholder","defaultValue","multiselect","headerFilterInitialListGen","cellEl","clickStop","preventScroll","_preventPopupBlur","_preventBlur","_inputKeyDown","_setListWidth","attribs","elementAttributes","clearable","padding","boxSizing","autocomplete","cursor","caretColor","getAttribute","_bindInputEvents","valueCheck","valueKeys","verticalNavigation","placeholderLoading","placeholderEmpty","filterDelay","emptyValue","freetext","filterFunc","filterRemote","allowEmpty","listOnEmpty","valuesLookup","valuesURL","_inputFocus","_inputClick","_inputBlur","_inputSearch","_inputKeyUp","rebuildOptionsList","_filter","clearTimeout","_filterList","_resolveValue","_clearChoices","_keyUp","_keyDown","_keySide","_keyEnter","_keyEsc","_keyHomeEnd","_keyTab","_keySelectLetter","_keyAutoCompLetter","_chooseItem","stopImmediatePropagation","_focusItem","_cancel","_scrollToValue","character","fromCharCode","label","scrollIntoView","behavior","block","inline","_generateOptions","_sortOptions","_buildList","_showList","isInteger","_filterOptions","iteration","_ajaxRequest","_uniqueColumnValues","valuesLookupField","_addPlaceholder","responseValues","_parseList","_clearList","term","urlBuilder","inputValues","entries","_parseListItem","_parseListGroup","itemParams","selected","original","_defaultSortFunction","_sortGroup","as","bs","a1","b1","L","rx","rd","emptyAlign","isFinite","_defaultFilterFunc","_filterItem","_buildItem","itemFormatter","_groupClick","_itemClick","_styleItem","startVis","blur","cellValue","search","onChange","selectContents","textarea","vertNav","whiteSpace","heightNow","shiftKey","shiftEnterSubmit","selectionStart","number","step","blurFunc","date","inputFormat","DT","DateTime","luxon","convertDate","isDateTime","fromISO","fromFormat","toFormat","luxDate","toISO","relatedTarget","rangeParent","explicitOriginalTarget","time","newDatetime","luxTime","datetime","luxDateTime","List","star","self","maxStars","getElementsByTagName","size","stars","starsHolder","createElementNS","starChange","buildStar","starHolder","nextStar","changeValue","overflow","textOverflow","progress","mouseDrag","mouseDragWidth","percent","bar","updateValue","calcVal","round","backgroundColor","screenX","tickCross","tristate","indetermValue","indeterminateValue","indetermState","trueValueSet","falseValueSet","marginTop","checkedValue","checked","trueValue","falseValue","indeterminate","currentCell","mouseClick","recursionBlock","invalidEdit","editedCells","editors","getEditedCells","clearCellEdited","navigatePrev","navigateNext","navigateLeft","navigateRight","navigateUp","navigateDown","cellIsEdited","clearEdited","editCell","cellCancelEdit","bindEditor","updateCellClass","columnDeleteCheck","rowDeleteCheck","rowEditableCheck","cancelEdit","pasteBlocker","keybindingNavigateNext","newRow","edited","allowEdit","nextCell","findPrevEditableCell","findNextEditableCell","prevCell","editable","getCurrentCell","clearEditor","cellEditCancelled","button","contains","focusCellNoEvent","forceEdit","focusScrollAdjust","leftEdge","rightEdge","leftMargin","rightMargin","cellEditor","editFinished","cellClick","cellEditing","validationMode","editIndex","defaultEditors","ExportRow","ExportColumn","Export","cloneTableStyle","colVisProp","getHtml","selectedColumns","columnHeaders","headersToExportRows","generateColumnGroupHeaders","bodyToExportRows","rowLookup","generateTable","generateTableElement","selectRow","selectedRows","columnGroups","colData","processColumnGroup","maxDepth","groupData","subGroup","subGroupData","columnVisCheck","visProp","headerDepth","exportRows","parseColumnGroup","rowGroups","exportCols","headerEl","bodyEl","lookupTableStyles","setup","treeElementField","mapElementStyles","generateHeaderElement","generateGroupElement","generateCalcElement","generateRowElement","evenRow","oddRow","calcRow","firstRow","firstGroup","getElementsByClassName","styleCells","firstCell","lastCell","classNames","generator","cellStyle","cellWrapper","formatCells","formatExportValue","align","htmlOutputConfig","props","lookup","color","fromStyle","filterVal","rowVal","filterParams","regex","RegExp","like","keywords","keyword","matchAll","starts","ends","endsWith","in","Filter","filterList","headerFilterColumns","prevHeaderFilterChangeCheck","tableInitialized","searchRows","searchData","userSetFilter","userRefreshFilter","userAddFilter","getFilters","userSetHeaderFilterFocus","userGetHeaderFilterValue","userSetHeaderFilterValue","getHeaderFilters","userRemoveFilter","userClearFilter","userClearHeaderFilter","setHeaderFilterFocus","reloadHeaderFilter","getHeaderFilterValue","setHeaderFilterValue","initializeColumnHeaderFilter","hideHeaderFilterElements","showHeaderFilterElements","tableBuilt","generatePlaceholder","filterMode","remoteFilterParams","initialFilter","setFilter","initialHeaderFilter","placeholderHeaderFilter","refreshFilter","addFilter","removeFilter","clearFilter","clearHeaderFilter","headerFilter","filterType","tagType","attrType","filterChangeCheck","prevSuccess","emptyFunc","headerFilterFunc","filters","headerFilterFuncParams","fieldVal","colVal","trackChanges","generateHeaderFilterElement","filterElement","editorElement","typingTimer","searchTrigger","onRenderedCallback","headerElement","headerFilterEmptyCheck","headerFilterParams","headerFilterLiveFilterDelay","hasAttribute","headerFilterLiveFilter","hasChanged","findFilter","findSubFilters","ajax","filtersToArray","searchType","filterRecurse","rowList","activeRowComponents","filterRow","subFilter","defaultFilters","plaintext","formatterParams","emptyToSpace","sanitizeHTML","money","integer","decimal","rgx","floatVal","sign","decimalSym","thousandSym","thousand","negativeSign","symbolAfter","link","urlPrefix","labelField","labelTraverse","urlField","retrieveNestedData","image","src","urlSuffix","truthy","allowTruthy","tick","tickElement","cross","crossElement","outputFormat","invalid","invalidPlaceholder","isValid","timezone","setZone","datetimediff","suffix","humanize","now","toHuman","traffic","percentValue","colors","legend","legendColor","legendAlign","barEl","barContainer","legendEl","holderEl","buttonTick","buttonCross","rownum","relativeToPage","page","getPageSize","getPage","innerText","responsiveCollapse","toggleList","isOpen","rowSelection","checkbox","selectableRowsRangeMode","toggleSelect","handleComplexRowClick","isSelected","registerRowSelectCheckbox","deselectRow","registerHeaderSelectCheckbox","Format","formatValue","formatHeader","lookupFormatter","formatterPrint","print","formatterClipboard","formatterHtmlOutput","htmlOutput","formatters","mockCell","titleFormatter","titleFormatterParams","entityMap","defaultFormatters","FrozenColumns","initializationMode","layoutCell","reinitializeColumns","blockLayout","unblockLayout","edge","frozenCheck","layoutCalcRows","layoutGroupCalcs","groupList","layoutColumnPosition","allCells","leftParents","marginValue","getColGroupParentElement","_calcSpace","FrozenRows","freezeRow","unfreezeRow","isRowFrozen","detachRow","frozenRows","initializeRows","rowType","isFrozen","styleRows","GroupComponent","groupManager","getParentGroup","toggleVisibility","Group","oldGroup","hasSubGroups","groupIDLookups","_addRowToGroup","_addRow","elementContents","arrowElement","createElements","addBindings","createValueGroups","elementsOnly","arrow","movableRows","initializeGroupHeader","allowedValues","_createGroup","groupToggleElement","groupID","groupKey","headerGenerator","insertRow","conformRowData","updateGroupRows","scrollHeader","removeRow","groupValues","generateGroupHeaderContents","removeGroup","getHeadersAndRows","_visSet","groupClosedShowCalcs","includeChildren","getPath","childNodes","GroupRows","displayHandler","setGroupBy","setGroupValues","setGroupStartOpen","setGroupHeader","userGetGroups","userGetGroupedData","rowGetGroup","_blockRedrawing","_restore_redrawing","groupUpdateOnCellEdit","cellUpdated","reassignRowToGroup","configureGroupSetup","rowDeleting","scrollHeaders","rowMoving","rowAddingIndex","rowSample","virtualRenderFill","groupStartOpen","langValue","lookupFunc","prevValue","assignRowToGroup","getGroupedData","toGroup","fromGroup","generateGroups","groupComponents","pullGroupListData","groupListData","rowCount","headerContent","countGroups","oldGroups","createGroup","assignRowToExistingGroup","newGroupNeeded","oldRowGroup","oldGroupPath","newGroupPath","getExpectedPath","every","groupPath","groupId","checkBasicModeGroupHeaderWidth","History","history","clearComponentHistory","rowDeleted","rowAdded","rowMoved","undo","redo","getHistoryUndoSize","getHistoryRedoSize","posFrom","posTo","newValue","undoers","redoers","_rebindRow","oldRow","cellEdit","rowAdd","rowMove","HtmlTableImport","fieldIndex","hasIndex","tableElementCheck","parseTable","_extractOptions","_extractHeaders","_generateBlankHeaders","optionsArr","attrib","_attribValue","_findCol","exists","textContent","replaceAll","inQuote","nextChar","array","Import","importFromFile","importFormat","loadDataCheck","loadData","importData","lookupImporter","structureData","err","importer","importers","extension","pickFile","extensions","accept","file","files","reader","FileReader","importReader","readAsArrayBuffer","readAsBinaryString","readAsDataURL","readAsText","onload","onerror","parsedData","structureArrayToObject","structureArrayToColumns","defaultImporters","Interaction","eventMap","rowClick","rowDblClick","rowContext","rowMouseEnter","rowMouseLeave","rowMouseOver","rowMouseOut","rowMouseMove","rowMouseDown","rowMouseUp","rowTap","rowDblTap","rowTapHold","cellDblClick","cellContext","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellMouseDown","cellMouseUp","cellTap","cellDblTap","cellTapHold","headerClick","headerDblClick","headerContext","headerMouseEnter","headerMouseLeave","headerMouseOver","headerMouseOut","headerMouseMove","headerMouseDown","headerMouseUp","headerTap","headerDblTap","headerTapHold","groupClick","groupDblClick","groupContext","groupMouseEnter","groupMouseLeave","groupMouseOver","groupMouseOut","groupMouseMove","groupMouseDown","groupMouseUp","groupTap","groupDblTap","groupTapHold","subscribers","touchSubscribers","columnSubscribers","touchWatchers","tap","tapDbl","tapHold","initializeExternalEvents","cellContentsSelectionFixer","clearTouchWatchers","selectNode","subscribeTouchEvents","unsubscribeTouchEvents","handleTouch","noTouch","watchers","componentObj","Keybindings","watchKeys","pressedKeys","keyupBinding","keydownBinding","keybindings","mergedBindings","mapBindings","bindEvents","clearBindings","mapBinding","symbolsList","ctrl","meta","code","checkBinding","navPrev","navNext","navUp","navDown","navLeft","navRight","scrollPageUp","scrollPageDown","scrollToStart","scrollToEnd","copyToClipboard","rangeJumpUp","rangeJumpDown","rangeJumpLeft","rangeJumpRight","rangeExpandUp","rangeExpandDown","rangeExpandLeft","rangeExpandRight","rangeExpandJumpUp","rangeExpandJumpDown","rangeExpandJumpLeft","rangeExpandJumpRight","keyBlock","newPos","scrollMax","Menu","nestedMenuBlock","currentComponent","rootPopup","initializeRowWatchers","initializeGroupWatchers","rowContextMenu","loadMenuEvent","rowClickMenu","rowDblClickMenu","groupContextMenu","groupClickMenu","groupDblClickMenu","headerContextMenu","loadMenuTableColumnEvent","headerClickMenu","headerDblClickMenu","headerMenu","initializeColumnHeaderMenu","contextMenu","loadMenuTableCellEvent","clickMenu","dblClickMenu","headerMenuEl","icon","headerMenuIcon","menu","loadMenu","parentPopup","itemEl","disabled","MoveColumns","placeholderElement","createPlaceholderElement","hoverElement","checkTimeout","checkPeriod","moving","toCol","toColAfter","startX","autoScrollMargin","autoScrollStep","autoScrollTimeout","touchMove","moveHover","endMove","movableColumns","abortMove","mousemove","which","startMove","bindTouchEvents","prevColWidth","nextColWidthLast","prevColWidthLast","startXMove","passive","moveToCol","_bindMouseMove","_unbindMouseMove","movingCells","scrollPos","columnHolder","xPos","MoveRows","toRowAfter","hasHandle","startY","tableRowDropEvent","connectionSelectorsTables","connectionSelectorsElements","connectionElements","connectedTable","connectedRow","movableRowsConnectedTables","movableRowsConnectedElements","initializeCell","mouseup","tableRowDrop","previousSibling","rowHandle","nextRowHeight","prevRowHeight","nextRowHeightLast","prevRowHeightLast","startYMove","setStartPosition","connectToTables","pointerEvents","disconnectFromTables","moveHoverConnections","moveHoverTable","rowHolder","yPos","elementRowDrop","connectionTables","dropEvent","tabulatorElementDropEvent","connect","disconnect","dropComplete","sender","movableRowsSender","senders","movableRowsReceiver","receivers","fromTable","toTable","Mutator","enabled","transformCell","mutateLink","lookupMutator","mutators","mutatorEdit","linkCell","pageSize","currentRow","currentPage","totalRows","totalPages","showingEl","valueEl","ofEl","totalEl","rowsEl","Page","progressiveLoad","pageCounterElement","pageCounter","remoteRowCountEstimate","initialLoad","dataChanging","pageSizes","setMaxPage","setPage","userSetPageToRow","userSetPageSize","previousPage","nextPage","getPageMax","setPageToRow","initialLoadComplete","calculatePageSizes","footerRedraw","paginationAddRow","rowAddingPosition","paginationMode","remotePageParams","_parseRemoteData","restOnRenderBefore","initializePageCounter","initializePaginator","initializeProgressive","scrollVertical","testElRow","testElCell","paginationSize","generatePageSizeSelectList","setPageSize","progressiveLoadScrollMargin","pagesElement","firstBut","prevBut","nextBut","lastBut","paginationSizeSelector","pageSizeSelect","paginationCounter","pageCounters","hidden","pageSelectLabel","paginationCounterHolder","paginationElement","paginationCounterElement","paginationInitialPage","paginationButtonCount","setMaxRows","trigger","_setPageCounter","_setPageButtons","leftSize","rightSize","_generatePageButton","actualStartRow","actualRowPageSize","actualRows","last_page","last_row","progressiveLoadDelay","footer","defaultPageCounters","local","id","localStorage","getItem","cookie","cookiePos","setItem","expireDate","setDate","getDate","toUTCString","Persistence","defWatcherBlock","readFunc","writeFunc","localStorageTest","testKey","removeItem","persistence","retrievedData","persistenceMode","persistenceID","persistenceReaderFunc","readers","persistenceWriterFunc","writers","retrieveData","save","eventSave","getColumnLayout","setColumnLayout","sorters","initialSort","parseColumns","mergeDefinition","getOwnPropertyDescriptor","defineProperty","set","current","oldCols","newCols","mergeAllNew","_findColumn","validateSorters","getSort","getGroupConfig","getPageConfig","excludedKeys","defStore","colDef","defaultReaders","defaultWriters","_componentPopupCall","loadPopupEvent","rowContextPopup","rowClickPopup","rowDblClickPopup","groupContextPopup","groupClickPopup","groupDblClickPopup","headerContextPopup","loadPopupTableColumnEvent","headerClickPopup","headerDblClickPopup","headerPopup","initializeColumnHeaderPopup","contextPopup","loadPopupTableCellEvent","clickPopup","dblClickPopup","headerPopupEl","headerPopupIcon","loadPopup","contentsEl","Print","manualBlock","beforeprintEventHandler","afterprintEventHandler","printAsHtml","replaceTable","cleanup","printFullscreen","printConfig","printStyled","printRowRange","footerContent","scrollX","scrollY","footerEl","tableEl","printHeader","printFooter","printFormatter","ReactiveData","origFuncs","currentVersion","unblock","watchRow","watchData","unwatchData","version","enumerable","configurable","arg","pop","oldRows","writable","watchKey","watchTreeChildren","childField","rebuildTree","unwatchRow","ResizeColumns","startColumn","startWidth","latestX","initialNextColumn","layoutColumnHeader","initializeEventWatchers","layoutCellHandles","deInitializeComponent","resizeHandle","columnLayoutUpdated","deInitializeColumn","columnWidthUpdated","resizable","reinitializeColumn","frozenColumnOffset","frozenOffset","handleEl","nearestColumn","_checkResizability","handleDown","_mouseDown","oldWidth","parentElement","mouseMove","blockedBefore","blockedAfter","startDiff","moveDiff","resizableColumnFit","mouseUp","ResizeRows","startHeight","prevHandle","prevHandleDown","screenY","ResizeTable","visibilityObserver","resizeObserver","containerObserver","tableHeight","containerWidth","autoResize","initialRedraw","tableStyle","IntersectionObserver","ResizeObserver","initializeVisibilityObserver","entry","nodeHeight","contentRect","nodeWidth","redrawTable","observe","tableResized","isIntersecting","unobserve","ResponsiveLayout","hiddenColumns","collapseFormatter","collapseStartOpen","collapseHandleColumn","updateColumnVisibility","initializeResponsivity","generateCollapsedRowContent","responsiveLayoutCollapseFormatter","formatCollapsedData","responsiveLayoutCollapseStartOpen","order","generateCollapsedContent","colCount","generateCollapsedRowData","mockCellComponent","responsiveLayoutCollapseUseFormatters","node_content","titleData","valueData","titleHighlight","SelectRow","selecting","lastClickedRow","selectPrev","headerCheckboxElement","selectRows","deselectRows","getSelectedRows","getSelectedData","isRowSelected","selectableRows","selectableRange","clearSelectionData","rowRetrieve","selectableRowsPersistence","_deselectRow","prevSelected","_rowSelectionChanged","selectable","checkRowSelectability","endSelect","lastClickedRowIdx","rowIdx","fromRowIdx","toRowIdx","toggledRows","toggledRow","selectableRowsCheck","_selectRow","rowMatch","rowInfo","selectableRowsRollingSelection","checkboxEl","dataTreeSelectPropagate","childRowSelection","selectedRow","deselected","aRow","bRow","alignEmptyValues","decimalSeparator","thousandSeparator","string","localeCompare","boolean","calc","d","alphanum","Sort","sortList","userSetSort","clearSort","sortMode","remoteSortParams","setSort","refreshSort","arrowEl","sorterParams","startingDir","headerSortStartingDir","headerSortTristate","headerSort","headerSortClickElement","headerSortElement","setColumnHeaderSortIcon","columnHeaderSortMulti","newSortList","findSorter","sortOrderReverse","sortListActual","rowComponents","clearColumnHeaders","sortObj","setColumnHeader","_sortItems","sortEl","sorterCount","sortItem","_sortRow","el1Comp","el2Comp","el1","el2","defaultSorters","RangeComponent","_range","getStructuredCells","getTopEdge","getBottomEdge","getLeftEdge","getRightEdge","setBounds","destroyedGuard","setStartBound","setEndBound","rangeManager","clearValues","Range","initializing","rowHeader","initElement","initBounds","_updateMinMax","setStart","setEnd","columnSelection","isRowHeader","_getTableRows","_getTableColumns","topLeftCell","bottomRightCell","_vDomTop","_vDomBottom","_vDomLeft","_vDomRight","Infinity","overlaps","atTopLeft","atBottomRight","occupies","occupiesRow","occupiesColumn","arr","clearValue","selectableRangeClearCellsValue","notify","rangeRemoved","SelectRange","mousedown","ranges","overlay","layoutChangeTimeout","maxRanges","blockKeydown","keyDownEvent","_handleKeyDown","mouseUpEvent","_handleMouseUp","getRangesData","getRanges","addRangeFromComponent","cellGetRanges","rowGetRanges","colGetRanges","initializeTable","initializeWatchers","rangeContainer","activeRangeCellElement","resetRanges","handleColumnMouseDown","handleColumnMouseMove","handleColumnResized","layoutChange","updateHeaderColumn","renderCell","handleCellMouseDown","handleCellMouseMove","handleCellClick","handleEditingCell","finishEditingCell","restoreFocus","keyNavigate","keyNavigateRange","getActiveCell","initializeFocus","some","selectedColumn","newSelection","rangeIdx","dataset","navigate","jump","expand","moved","rangeEdge","findJumpCellLeft","findJumpCellRight","findJumpCellUp","findJumpCellDown","getTableColumns","getTableRows","getRowByRangePos","getColumnByRangePos","autoScroll","removed","findJumpCell","emptyStart","emptySide","currentValue","rowPos","isStartingCellEmpty","isLeftOfStartingCellEmpty","jumpCol","targetCells","isRightOfStartingCellEmpty","isTopOfStartingCellEmpty","jumpRow","isBottomOfStartingCellEmpty","rect","withinHorizontalView","withinVerticalView","tableHolder","layoutRanges","layoutColumn","occupied","activeCell","colIdx","Tooltip","tooltipSubscriber","headerSubscriber","timeout","popupInstance","headerTooltip","mousemoveCheck","mouseoutCheck","tooltip","clearPopup","loadTooltip","tooltipDelay","parameters","float","numeric","alphanumeric","minLength","maxLength","cellData","Validate","invalidCells","getInvalidCells","userClearCellValidation","userValidate","cellIsValid","clearValidation","cellValidate","columnValidate","rowValidate","editValidate","editorClear","editedClear","previousValue","validate","cancelled","validator","_extractValidator","substring","_buildValidator","validators","failedValidators","invalidIndex","defaultValidators","TabulatorFull"],"mappings":"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"}