{"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/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){\n\t\treturn this.table.deprecationAdvisor.check(oldOption, newOption);\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(\"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\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\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 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}","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\n\trenderRowCells(row) {\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\n\t\trow.cells.forEach((cell) => {\n\t\t\tcell.cellRendered();\n\t\t});\n\t}\n\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}","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 = field.split(\".\")[0];\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\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){\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);\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);\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\n\t\tthis.verticalFillMode = \"fill\";\n\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\n\n\t\tthis.scrollTop = 0;\n\t\tthis.scrollLeft = 0;\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.scrollTop = 0;\n\t\telement.scrollLeft = 0;\n\n\t\telement.style.minWidth = \"\";\n\t\telement.style.minHeight = \"\";\n\t\telement.style.display = \"\";\n\t\telement.style.visibility = \"\";\n\t}\n\n\trenderRows() {\n\t\tvar element = this.tableElement,\n\t\tonlyGroupHeaders = true,\n\t\ttableFrag = document.createDocumentFragment();\n\n\t\tthis.rows().forEach((row, index) => {\n\t\t\tthis.styleRow(row, index);\n\t\t\trow.initialize(true);\n\n\t\t\tif (row.type !== \"group\") {\n\t\t\t\tonlyGroupHeaders = false;\n\t\t\t}\n\n\t\t\ttableFrag.appendChild(row.getElement());\n\t\t});\n\t\telement.appendChild(tableFrag);\n\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\n\n\trerenderRows(callback){\t\n\t\tthis.clearRows();\n\n\t\tif(callback){\n\t\t\tcallback();\n\t\t}\n\n\t\tthis.renderRows();\n\t}\n\n\tscrollToRowNearestTop(row){\n\t\tvar rowTop = Helpers.elOffset(row.getElement()).top;\n\n\t\treturn !(Math.abs(this.elementVertical.scrollTop - rowTop) > Math.abs(this.elementVertical.scrollTop + this.elementVertical.clientHeight - rowTop));\n\t}\n\n\tscrollToRow(row){\n\t\tvar rowEl = row.getElement();\n\n\t\tthis.elementVertical.scrollTop = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top + this.elementVertical.scrollTop;\n\t}\n\n\tvisibleRows(includingBuffer){\n\t\treturn this.rows();\n\t}\n\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\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();\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\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\t\t\t\trenderedRows.forEach((row) => {\n\t\t\t\t\tif(!row.heightInitialized) {\n\t\t\t\t\t\trow.calcHeight(true);\n\t\t\t\t\t\t\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\t\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(rows.length){\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){\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\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\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\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\tconst resized = this.adjustTableSize();\n\t\tthis.table.tableWidth = this.table.element.clientWidth;\n\t\t\n\t\tif(!force){\n\t\t\tif(resized) {\n\t\t\t\tthis.reRenderInPosition();\n\t\t\t}\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\t\t\n\t\tif(targets.group && targets.group === targets.row){\n\t\t\tdelete targets.row;\n\t\t}\n\t\t\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}","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\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\n\tinitialize(){}\n\n\tload(data, params, config, replace, silent, columnsChanged){\n\t\tvar requestNo = ++this.requestOrder;\n\n\t\tthis.dispatchExternal(\"dataLoading\", data);\n\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\n\t\tif(this.confirm(\"data-loading\", [data, params, config, silent])){\n\t\t\tthis.loading = true;\n\n\t\t\tif(!silent){\n\t\t\t\tthis.alertLoader();\n\t\t\t}\n\n\t\t\t//get params for request\n\t\t\tparams = this.chain(\"data-params\", [data, config, silent], params || {}, params || {});\n\n\t\t\tparams = this.mapParams(params, this.table.options.dataSendParams);\n\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(!Array.isArray(response) && typeof response == \"object\"){\n\t\t\t\t\tresponse = this.mapParams(response, this.objectInvert(this.table.options.dataReceiveParams));\n\t\t\t\t}\n\n\t\t\t\tvar rowData = this.chain(\"data-loaded\", response, null, response);\n\n\t\t\t\tif(requestNo == this.requestOrder){\n\t\t\t\t\tthis.clearAlert();\n\n\t\t\t\t\tif(rowData !== false){\n\t\t\t\t\t\tthis.dispatchExternal(\"dataLoaded\", rowData);\n\t\t\t\t\t\tthis.table.rowManager.setData(rowData, replace, typeof columnsChanged === \"undefined\" ? !replace : columnsChanged);\n\t\t\t\t\t}\n\t\t\t\t}else{\n\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}\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\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\n\t\t\tif(!data){\n\t\t\t\tdata = [];\n\t\t\t}\n\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\n\tmapParams(params, map){\n\t\tvar output = {};\n\n\t\tfor(let key in params){\n\t\t\toutput[map.hasOwnProperty(key) ? map[key] : key] = params[key];\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tobjectInvert(obj){\n\t\tvar output = {};\n\n\t\tfor(let key in obj){\n\t\t\toutput[obj[key]] = key;\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tblockActiveLoad(){\n\t\tthis.requestOrder++;\n\t}\n\n\talertLoader(){\n\t\tvar shouldLoad = typeof this.table.options.dataLoader === \"function\" ? this.table.options.dataLoader() : this.table.options.dataLoader;\n\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\n\talertError(){\n\t\tthis.table.alertManager.alert(this.table.options.dataLoaderError || this.langText(\"data|error\"), \"error\");\n\t}\n\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){\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\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}\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.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\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}\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();\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(params, ajaxParams);\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\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.checkPaseOrigin(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\tcheckPaseOrigin(e){\n\t\tvar valid = true;\n\n\t\tif(e.target.tagName != \"DIV\" || this.table.modules.edit.currentCell){\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(rows){\n\t\treturn this.table.setData(rows);\n\t},\n\tupdate:function(rows){\n\t\treturn this.table.updateOrAddData(rows);\n\t},\n\tinsert:function(rows){\n\t\treturn this.table.addData(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\n\t\t//get data from clipboard into array of columns and rows.\n\t\tclipboard = clipboard.split(\"\\n\");\n\n\t\tclipboard.forEach(function(row){\n\t\t\tdata.push(row.split(\"\\t\"));\n\t\t});\n\n\t\tif(data.length && !(data.length === 1 && data[0].length < 2)){\n\n\t\t\t//check if headers are present by title\n\t\t\tdata[0].forEach(function(value){\n\t\t\t\tvar column = columns.find(function(column){\n\t\t\t\t\treturn value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();\n\t\t\t\t});\n\n\t\t\t\tif(column){\n\t\t\t\t\tcolumnMap.push(column);\n\t\t\t\t}else{\n\t\t\t\t\theaderFindSuccess = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t//check if column headers are present by field\n\t\t\tif(!headerFindSuccess){\n\t\t\t\theaderFindSuccess = true;\n\t\t\t\tcolumnMap = [];\n\n\t\t\t\tdata[0].forEach(function(value){\n\t\t\t\t\tvar column = columns.find(function(column){\n\t\t\t\t\t\treturn value && column.field && value.trim() && column.field.trim() === value.trim();\n\t\t\t\t\t});\n\n\t\t\t\t\tif(column){\n\t\t\t\t\t\tcolumnMap.push(column);\n\t\t\t\t\t}else{\n\t\t\t\t\t\theaderFindSuccess = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif(!headerFindSuccess){\n\t\t\t\t\tcolumnMap = this.table.columnManager.columnsByIndex;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//remove header row if found\n\t\t\tif(headerFindSuccess){\n\t\t\t\tdata.shift();\n\t\t\t}\n\n\t\t\tdata.forEach(function(item){\n\t\t\t\tvar row = {};\n\n\t\t\t\titem.forEach(function(value, i){\n\t\t\t\t\tif(columnMap[i]){\n\t\t\t\t\t\trow[columnMap[i].field] = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\trows.push(row);\n\t\t\t});\n\n\t\t\treturn rows;\n\t\t}else{\n\t\t\treturn false;\n\t\t}\n\t}\n};","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\tif(!this.topInitialized){\n\t\t\tthis.table.columnManager.getContentsElement().insertBefore(this.topElement, 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}\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.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\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.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\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\tthis.subscribe(\"keybinding-nav-left\", this.navigateLeft.bind(this, undefined));\n\t\tthis.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////// Keybinding Functions ///////\n\t///////////////////////////////////\n\t\n\tkeybindingNavigateNext(e){\n\t\tvar cell = this.currentCell,\n\t\tnewRow = this.options(\"tabEndNewRow\");\n\t\t\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(newRow === true){\n\t\t\t\t\t\tnewRow = this.table.addRow({});\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(typeof newRow == \"function\"){\n\t\t\t\t\t\t\tnewRow = this.table.addRow(newRow(cell.row.getComponent()));\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tnewRow = this.table.addRow(Object.assign({}, newRow));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tnewRow.then(() => {\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tcell.getComponent().navigateNext();\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\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(\"click\", function(e){\n\t\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\n\t\t\t\t\telement.focus({preventScroll: true});\n\t\t\t\t}\n\t\t\t});\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\t\t\t\n\t\t\telement.addEventListener(\"focus\", function(e){\n\t\t\t\tif(!self.recursionBlock){\n\t\t\t\t\tself.edit(cell, e, false);\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\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\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\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\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\tcellEditor, component, params;\n\t\t\n\t\t//prevent editing if another cell is refusing to leave focus (eg. validation fail)\n\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){\n\t\t\t\tvar valid = self.chain(\"edit-success\", [cell, value], true, true);\n\t\t\t\t\n\t\t\t\tif(valid === true || self.table.options.validationMode === \"highlight\"){\n\t\t\t\t\tself.clearEditor();\n\t\t\t\t\t\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\t\t\t\t\t\n\t\t\t\t\treturn valid === true;\n\t\t\t\t}else{\n\t\t\t\t\tself.invalidEdit = true;\n\t\t\t\t\tself.focusCellNoEvent(cell, true);\n\t\t\t\t\trendered();\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\tif(self.currentCell === cell){\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\t\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\telement.blur();\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\telement.blur();\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\telement.blur();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}else{\n\t\t\tthis.mouseClick = false;\n\t\t\telement.blur();\n\t\t\treturn false;\n\t\t}\n\t}\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\t\t\n\t\tvar headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];\n\t\tvar body = this.bodyToExportRows(this.rowLookup(range));\n\t\t\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\t\t\t\t\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(){\n\t\tvar output = [];\n\t\t\n\t\tvar columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;\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\t\t\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){\n\t\t\n\t\tvar columns = [];\n\t\tvar exportRows = [];\n\t\t\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\n\t\t\tif (this.columnVisCheck(column)) {\n\t\t\t\tcolumns.push(column.getComponent());\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\t\t\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\tindex = this.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\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}","export 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\t\t\tvalue = data[formatterParams.urlField];\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\n\trow.watchPosition((position) => {\n\t\tcontent.innerText = position;\n\t});\n\t\n\treturn content;\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.selectableRangeMode === \"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.selectableRangeMode === \"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-delete\", 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\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){\n\t\t\t\n\t\t\tif(this.frozenCheck(column)){\n\t\t\t\t\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\tif(column.modules.frozen.edge){\n\t\t\t\t\tparentEl.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\n\t\t\t\t}\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\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\tif(column.modules.frozen.edge){\n\t\t\t\telement.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\n\t\t\t}\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\tthis.rows = [];\n\n\t\tthis.topElement.classList.add(\"tabulator-frozen-rows-holder\");\n\n\t\t// this.table.columnManager.element.append(this.topElement);\n\t\tthis.table.columnManager.getContentsElement().insertBefore(this.topElement, 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\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\te.stopPropagation();\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t\tthis.toggleVisibility();\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\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\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){\n\t\tvar output = [];\n\t\t\n\t\tthis.rows.forEach(function(row){\n\t\t\toutput.push(component ? row.getComponent() : row);\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\tthis.rows.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\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(\"History Undo Error - No more history to undo\");\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(\"History Redo Error - No more history to redo\");\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\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\t},\n\n\trowMove: function(action){\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posFrom], !action.data.after);\n\t\tthis.table.rowManager.redraw();\n\t},\n};","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\t},\n\n\trowDelete:function(action){\n\t\taction.component.deleteActual();\n\t},\n\n\trowMove: function(action){\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posTo], action.data.after);\n\t\tthis.table.rowManager.redraw();\n\t},\n};","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().replace(\" \", \"_\");\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;","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\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 + 89\"],\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\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};","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\t\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.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.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}\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.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));\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){\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(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\t\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}\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.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.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.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(\"selectable\", \"highlight\"); //highlight rows on hover\n\t\tthis.registerTableOption(\"selectableRangeMode\", \"drag\"); //highlight rows on hover\n\t\tthis.registerTableOption(\"selectableRollingSelection\", true); //roll selection once maximum number of selectable rows is reached\n\t\tthis.registerTableOption(\"selectablePersistence\", true); // maintain selection when table view is updated\n\t\tthis.registerTableOption(\"selectableCheck\", 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\t\tif(this.table.options.selectable !== 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.selectable && !this.table.options.selectablePersistence){\n\t\t\t\tthis.subscribe(\"data-refreshing\", this.deselectRows.bind(this));\n\t\t\t}\n\t\t}\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\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\t\t\n\t\t//set row selection class\n\t\tif(self.checkRowSelectability(row)){\n\t\t\telement.classList.add(\"tabulator-selectable\");\n\t\t\telement.classList.remove(\"tabulator-unselectable\");\n\t\t\t\n\t\t\tif(self.table.options.selectable && self.table.options.selectable != \"highlight\"){\n\t\t\t\tif(self.table.options.selectableRangeMode === \"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\t\n\t\t}else{\n\t\t\telement.classList.add(\"tabulator-unselectable\");\n\t\t\telement.classList.remove(\"tabulator-selectable\");\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.selectable !== true && !this.isRowSelected(row)){\n\t\t\t\t\t\t\tif(this.selectedRows.length < this.table.options.selectable){\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.selectable !== true){\n\t\t\t\t\tif(toggledRows.length > this.table.options.selectable){\n\t\t\t\t\t\ttoggledRows = toggledRows.slice(0, this.table.options.selectable);\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.selectableCheck.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 \"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.selectable) && this.table.options.selectable !== true && !force){\n\t\t\tif(this.selectedRows.length >= this.table.options.selectable){\n\t\t\t\tif(this.table.options.selectableRollingSelection){\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\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\n\tconstructor(table){\n\t\tsuper(table);\n\n\t\tthis.sortList = []; //holder current sort\n\t\tthis.changed = false; //has the sort changed since last render\n\n\t\tthis.registerTableOption(\"sortMode\", \"local\"); //local or remote sorting\n\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\n\t\tthis.registerColumnOption(\"sorter\");\n\t\tthis.registerColumnOption(\"sorterParams\");\n\n\t\tthis.registerColumnOption(\"headerSort\", true);\n\t\tthis.registerColumnOption(\"headerSortStartingDir\");\n\t\tthis.registerColumnOption(\"headerSortTristate\");\n\n\t}\n\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\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\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\n\ttableBuilt(){\n\t\tif(this.table.options.initialSort){\n\t\t\tthis.setSort(this.table.options.initialSort);\n\t\t}\n\t}\n\n\tremoteSortParams(data, config, silent, params){\n\t\tvar sorters = this.getSort();\n\n\t\tsorters.forEach((item) => {\n\t\t\tdelete item.column;\n\t\t});\n\n\t\tparams.sort = sorters;\n\n\t\treturn params;\n\t}\n\n\n\t///////////////////////////////////\n\t///////// Table Functions /////////\n\t///////////////////////////////////\n\n\tuserSetSort(sortList, dir){\n\t\tthis.setSort(sortList, dir);\n\t\t// this.table.rowManager.sorterRefresh();\n\t\tthis.refreshSort();\n\t}\n\n\tclearSort(){\n\t\tthis.clear();\n\t\t// this.table.rowManager.sorterRefresh();\n\t\tthis.refreshSort();\n\t}\n\n\n\t///////////////////////////////////\n\t///////// Internal Logic //////////\n\t///////////////////////////////////\n\n\t//initialize column header for sorting\n\tinitializeColumn(column){\n\t\tvar sorter = false,\n\t\tcolEl,\n\t\tarrowEl;\n\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\n\t\t\tcase \"function\":\n\t\t\t\tsorter = column.definition.sorter;\n\t\t\t\tbreak;\n\t\t}\n\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\n\t\tif(column.definition.headerSort !== false){\n\n\t\t\tcolEl = column.getElement();\n\n\t\t\tcolEl.classList.add(\"tabulator-sortable\");\n\n\t\t\tarrowEl = document.createElement(\"div\");\n\t\t\tarrowEl.classList.add(\"tabulator-col-sorter\");\n\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\n\t\t\tswitch(this.table.options.headerSortElement){\n\t\t\t\tcase \"function\":\n\t\t\t\t\t//do nothing\n\t\t\t\t\tbreak;\n\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\t\n\t\t\t\tdefault:\n\t\t\t\t\tarrowEl.innerHTML = this.table.options.headerSortElement;\n\t\t\t}\n\n\t\t\t//create sorter arrow\n\t\t\tcolumn.titleHolderElement.appendChild(arrowEl);\n\n\t\t\tcolumn.modules.sort.element = arrowEl;\n\n\t\t\tthis.setColumnHeaderSortIcon(column, \"none\");\n\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\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\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\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\n\t\t\t\t\tif (this.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {\n\t\t\t\t\t\tsorters = this.getSort();\n\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\n\t\t\t\t\t\tif(match > -1){\n\t\t\t\t\t\t\tsorters[match].dir = dir;\n\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\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\n\t\t\t\t\t}\n\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\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\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 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\n\t//return current sorters\n\tgetSort(){\n\t\tvar self = this,\n\t\tsorters = [];\n\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\n\t\treturn sorters;\n\t}\n\n\t//change sort list and trigger sort\n\tsetSort(sortList, dir){\n\t\tvar self = this,\n\t\tnewSortList = [];\n\n\t\tif(!Array.isArray(sortList)){\n\t\t\tsortList = [{column: sortList, dir:dir}];\n\t\t}\n\n\t\tsortList.forEach(function(item){\n\t\t\tvar column;\n\n\t\t\tcolumn = self.table.columnManager.findColumn(item.column);\n\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\n\t\t});\n\n\t\tself.sortList = newSortList;\n\n\t\tthis.dispatch(\"sort-changed\");\n\t}\n\n\t//clear sorters\n\tclear(){\n\t\tthis.setSort([]);\n\t}\n\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\n\t\tif(row){\n\t\t\trow = row.getData();\n\t\t\tfield = column.getField();\n\n\t\t\tif(field){\n\n\t\t\t\tvalue = column.getFieldValue(row);\n\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\n\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\tsorter = \"boolean\";\n\t\t\t\t\t\tbreak;\n\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\n\t\treturn Sort.sorters[sorter];\n\t}\n\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\n\t\tif(this.subscribedExternal(\"dataSorting\")){\n\t\t\tthis.dispatchExternal(\"dataSorting\", self.getSort());\n\t\t}\n\n\t\tself.clearColumnHeaders();\n\n\t\tif(this.table.options.sortMode !== \"remote\"){\n\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\n\t\t\t\tif(item.column){\n\t\t\t\t\tsortObj = item.column.modules.sort;\n\n\t\t\t\t\tif(sortObj){\n\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\n\t\t\t\t\t\titem.params = typeof sortObj.params === \"function\" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;\n\n\t\t\t\t\t\tsortListActual.push(item);\n\t\t\t\t\t}\n\n\t\t\t\t\tself.setColumnHeader(item.column, item.dir);\n\t\t\t\t}\n\t\t\t});\n\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\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\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\n\t\t\tthis.dispatchExternal(\"dataSorted\", self.getSort(), rowComponents);\n\t\t}\n\n\t\treturn data;\n\t}\n\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\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\n\tsetColumnHeaderSortIcon(column, dir){\n\t\tvar sortEl = column.modules.sort.element,\n\t\tarrowEl;\n\n\t\tif(column.definition.headerSort && typeof this.table.options.headerSortElement === \"function\"){\n\t\t\twhile(sortEl.firstChild) sortEl.removeChild(sortEl.firstChild);\n\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\n\t//sort each item in sort list\n\t_sortItems(data, sortList){\n\t\tvar sorterCount = sortList.length - 1;\n\n\t\tdata.sort((a, b) => {\n\t\t\tvar result;\n\n\t\t\tfor(var i = sorterCount; i>= 0; i--){\n\t\t\t\tlet sortItem = sortList[i];\n\n\t\t\t\tresult = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);\n\n\t\t\t\tif(result !== 0){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t});\n\t}\n\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\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\n\t\ta = column.getFieldValue(el1.getData());\n\t\tb = column.getFieldValue(el2.getData());\n\n\t\ta = typeof a !== \"undefined\" ? a : \"\";\n\t\tb = typeof b !== \"undefined\" ? b : \"\";\n\n\t\tel1Comp = el1.getComponent();\n\t\tel2Comp = el2.getComponent();\n\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;","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//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;"],"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","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","defaultOptions","Helpers","static","box","window","pageYOffset","documentElement","clientTop","pageXOffset","clientLeft","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","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","getPosition","watchPosition","moveToRow","updateData","normalizeHeight","reformat","getNextRow","nextRow","getPrevRow","prevRow","Row","manualHeight","outerHeight","positionWatchers","created","setData","create","detachElement","deleteCells","rowFormatter","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","rowTop","VirtualDomVertical","vDomRowHeight","vDomTop","vDomBottom","vDomScrollPosTop","vDomScrollPosBottom","vDomTopPad","vDomBottomPad","vDomMaxRenderChain","vDomWindowBuffer","vDomWindowMinTotalRows","vDomWindowMinMarginRows","vDomTopNewRows","vDomBottomNewRows","paddingBottom","_virtualRenderFill","topRow","topOffset","tableEmpty","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","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","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","initializeColumn","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","checkPaseOrigin","getPasteData","mutateData","mutator","valid","edit","currentCell","insert","headerFindSuccess","columnMap","CalcComponent","avg","calcParams","precision","reduce","sum","Number","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","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","_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","mouseClick","recursionBlock","invalidEdit","editedCells","editors","getEditedCells","clearCellEdited","navigatePrev","navigateNext","navigateLeft","navigateRight","navigateUp","navigateDown","cellIsEdited","clearEdited","editCell","cellCancelEdit","bindEditor","updateCellClass","columnDeleteCheck","rowDeleteCheck","rowEditableCheck","cancelEdit","keybindingNavigateNext","newRow","edited","allowEdit","nextCell","findPrevEditableCell","findNextEditableCell","prevCell","editable","getCurrentCell","clearEditor","cellEditCancelled","contains","button","focusCellNoEvent","forceEdit","focusScrollAdjust","leftEdge","rightEdge","leftMargin","rightMargin","cellEditor","rendered","cellClick","cellEditing","validationMode","editIndex","defaultEditors","ExportRow","ExportColumn","Export","cloneTableStyle","colVisProp","getHtml","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","separator","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","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","innerText","responsiveCollapse","toggleList","isOpen","rowSelection","checkbox","selectableRangeMode","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","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","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","scrollPageUp","scrollPageDown","scrollToStart","scrollToEnd","copyToClipboard","keyBlock","newPos","scrollMax","navLeft","navRight","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","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","page","remoteRowCountEstimate","initialLoad","dataChanging","pageSizes","setMaxPage","setPage","userSetPageToRow","userSetPageSize","getPageSize","previousPage","nextPage","getPage","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","_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","startRow","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","selectable","clearSelectionData","rowRetrieve","selectablePersistence","_deselectRow","prevSelected","_rowSelectionChanged","endSelect","checkRowSelectability","lastClickedRowIdx","rowIdx","fromRowIdx","toRowIdx","toggledRows","toggledRow","selectableCheck","_selectRow","rowMatch","rowInfo","selectableRollingSelection","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","Tooltip","tooltipSubscriber","headerSubscriber","timeout","popupInstance","headerTooltip","mousemoveCheck","mouseoutCheck","tooltip","clearPopup","loadTooltip","tooltipDelay","parameters","float","numeric","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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"}